Added HOL proof importer.
authorskalberg
Fri, 02 Apr 2004 17:37:45 +0200
changeset 14516a183dec876ab
parent 14515 86f2daf48a3c
child 14517 7ae3b247c6e9
Added HOL proof importer.
src/HOL/Import/Generate-HOL/GenHOL4Base.thy
src/HOL/Import/Generate-HOL/GenHOL4Prob.thy
src/HOL/Import/Generate-HOL/GenHOL4Real.thy
src/HOL/Import/Generate-HOL/GenHOL4Vec.thy
src/HOL/Import/Generate-HOL/GenHOL4Word32.thy
src/HOL/Import/Generate-HOL/ROOT.ML
src/HOL/Import/HOL/HOL4.thy
src/HOL/Import/HOL/HOL4Base.thy
src/HOL/Import/HOL/HOL4Prob.thy
src/HOL/Import/HOL/HOL4Real.thy
src/HOL/Import/HOL/HOL4Vec.thy
src/HOL/Import/HOL/HOL4Word32.thy
src/HOL/Import/HOL/README
src/HOL/Import/HOL/ROOT.ML
src/HOL/Import/HOL/arithmetic.imp
src/HOL/Import/HOL/bits.imp
src/HOL/Import/HOL/bool.imp
src/HOL/Import/HOL/boolean_sequence.imp
src/HOL/Import/HOL/bword_arith.imp
src/HOL/Import/HOL/bword_bitop.imp
src/HOL/Import/HOL/bword_num.imp
src/HOL/Import/HOL/combin.imp
src/HOL/Import/HOL/divides.imp
src/HOL/Import/HOL/hrat.imp
src/HOL/Import/HOL/hreal.imp
src/HOL/Import/HOL/ind_type.imp
src/HOL/Import/HOL/lim.imp
src/HOL/Import/HOL/list.imp
src/HOL/Import/HOL/marker.imp
src/HOL/Import/HOL/nets.imp
src/HOL/Import/HOL/num.imp
src/HOL/Import/HOL/numeral.imp
src/HOL/Import/HOL/one.imp
src/HOL/Import/HOL/operator.imp
src/HOL/Import/HOL/option.imp
src/HOL/Import/HOL/pair.imp
src/HOL/Import/HOL/poly.imp
src/HOL/Import/HOL/powser.imp
src/HOL/Import/HOL/pred_set.imp
src/HOL/Import/HOL/prim_rec.imp
src/HOL/Import/HOL/prime.imp
src/HOL/Import/HOL/prob.imp
src/HOL/Import/HOL/prob_algebra.imp
src/HOL/Import/HOL/prob_canon.imp
src/HOL/Import/HOL/prob_extra.imp
src/HOL/Import/HOL/prob_indep.imp
src/HOL/Import/HOL/prob_pseudo.imp
src/HOL/Import/HOL/prob_uniform.imp
src/HOL/Import/HOL/real.imp
src/HOL/Import/HOL/realax.imp
src/HOL/Import/HOL/relation.imp
src/HOL/Import/HOL/res_quan.imp
src/HOL/Import/HOL/rich_list.imp
src/HOL/Import/HOL/seq.imp
src/HOL/Import/HOL/state_transformer.imp
src/HOL/Import/HOL/sum.imp
src/HOL/Import/HOL/topology.imp
src/HOL/Import/HOL/transc.imp
src/HOL/Import/HOL/word32.imp
src/HOL/Import/HOL/word_base.imp
src/HOL/Import/HOL/word_bitop.imp
src/HOL/Import/HOL/word_num.imp
src/HOL/Import/HOL4Compat.thy
src/HOL/Import/HOL4Setup.thy
src/HOL/Import/HOL4Syntax.thy
src/HOL/Import/MakeEqual.thy
src/HOL/Import/ROOT.ML
src/HOL/Import/hol4rews.ML
src/HOL/Import/import_package.ML
src/HOL/Import/import_syntax.ML
src/HOL/Import/proof_kernel.ML
src/HOL/Import/replay.ML
src/HOL/Import/shuffler.ML
src/HOL/IsaMakefile
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Base.thy	Fri Apr 02 17:37:45 2004 +0200
     1.3 @@ -0,0 +1,273 @@
     1.4 +theory GenHOL4Base = HOL4Compat + HOL4Syntax:;
     1.5 +
     1.6 +import_segment "hol4";
     1.7 +
     1.8 +setup_dump "../HOL" "HOL4Base";
     1.9 +
    1.10 +append_dump "theory HOL4Base = HOL4Compat + HOL4Syntax:";
    1.11 +
    1.12 +import_theory bool;
    1.13 +
    1.14 +const_maps
    1.15 +  T               > True
    1.16 +  F               > False
    1.17 +  "!"             > All
    1.18 +  "/\\"           > "op &"
    1.19 +  "\\/"           > "op |"
    1.20 +  "?"             > Ex
    1.21 +  "?!"            > Ex1
    1.22 +  "~"             > Not
    1.23 +  COND            > If
    1.24 +  bool_case       > Datatype.bool.bool_case
    1.25 +  ONE_ONE         > HOL4Setup.ONE_ONE
    1.26 +  ONTO            > HOL4Setup.ONTO
    1.27 +  TYPE_DEFINITION > HOL4Setup.TYPE_DEFINITION
    1.28 +  LET             > HOL4Compat.LET;
    1.29 +
    1.30 +ignore_thms
    1.31 +  BOUNDED_DEF
    1.32 +  BOUNDED_THM
    1.33 +  UNBOUNDED_DEF
    1.34 +  UNBOUNDED_THM;
    1.35 +
    1.36 +end_import;
    1.37 +
    1.38 +import_theory combin;
    1.39 +
    1.40 +const_maps
    1.41 +  o > Fun.comp;
    1.42 +
    1.43 +end_import;
    1.44 +
    1.45 +import_theory sum;
    1.46 +
    1.47 +type_maps
    1.48 +  sum > "+";
    1.49 +
    1.50 +const_maps
    1.51 +  INL      > Inl
    1.52 +  INR      > Inr
    1.53 +  ISL      > HOL4Compat.ISL
    1.54 +  ISR      > HOL4Compat.ISR
    1.55 +  OUTL     > HOL4Compat.OUTL
    1.56 +  OUTR     > HOL4Compat.OUTR
    1.57 +  sum_case > Datatype.sum.sum_case;
    1.58 +
    1.59 +ignore_thms
    1.60 +  sum_TY_DEF
    1.61 +  sum_ISO_DEF
    1.62 +  IS_SUM_REP
    1.63 +  INL_DEF
    1.64 +  INR_DEF
    1.65 +  sum_axiom
    1.66 +  sum_Axiom;
    1.67 +
    1.68 +end_import;
    1.69 +
    1.70 +import_theory one;
    1.71 +
    1.72 +type_maps
    1.73 +  one > Product_Type.unit;
    1.74 +
    1.75 +const_maps
    1.76 +  one > Product_Type.Unity;
    1.77 +
    1.78 +ignore_thms
    1.79 +    one_TY_DEF
    1.80 +    one_axiom
    1.81 +    one_Axiom
    1.82 +    one_DEF;
    1.83 +
    1.84 +end_import;
    1.85 +
    1.86 +import_theory option;
    1.87 +
    1.88 +type_maps
    1.89 +    option > Datatype.option;
    1.90 +
    1.91 +const_maps
    1.92 +    NONE        > Datatype.option.None
    1.93 +    SOME        > Datatype.option.Some
    1.94 +    option_case > Datatype.option.option_case
    1.95 +    OPTION_MAP  > Datatype.option_map
    1.96 +    THE         > Datatype.the
    1.97 +    IS_SOME     > HOL4Compat.IS_SOME
    1.98 +    IS_NONE     > HOL4Compat.IS_NONE
    1.99 +    OPTION_JOIN > HOL4Compat.OPTION_JOIN;
   1.100 +
   1.101 +ignore_thms
   1.102 +    option_axiom
   1.103 +    option_Axiom
   1.104 +    option_TY_DEF
   1.105 +    option_REP_ABS_DEF
   1.106 +    SOME_DEF
   1.107 +    NONE_DEF;
   1.108 +
   1.109 +end_import;
   1.110 +
   1.111 +import_theory marker;
   1.112 +end_import;
   1.113 +
   1.114 +import_theory relation;
   1.115 +
   1.116 +const_renames
   1.117 +  reflexive > pred_reflexive;
   1.118 +
   1.119 +end_import;
   1.120 +
   1.121 +import_theory pair;
   1.122 +
   1.123 +type_maps
   1.124 +    prod > "*";
   1.125 +
   1.126 +const_maps
   1.127 +    ","       > Pair
   1.128 +    FST       > fst
   1.129 +    SND       > snd
   1.130 +    CURRY     > curry
   1.131 +    UNCURRY   > split
   1.132 +    "##"      > prod_fun
   1.133 +    pair_case > split;
   1.134 +
   1.135 +ignore_thms
   1.136 +    prod_TY_DEF
   1.137 +    MK_PAIR_DEF
   1.138 +    IS_PAIR_DEF
   1.139 +    ABS_REP_prod
   1.140 +    COMMA_DEF;
   1.141 +
   1.142 +end_import;
   1.143 +
   1.144 +import_theory num;
   1.145 +
   1.146 +type_maps
   1.147 +  num > nat;
   1.148 +
   1.149 +const_maps
   1.150 +  SUC > Suc
   1.151 +  0   > 0 :: nat;
   1.152 +
   1.153 +ignore_thms
   1.154 +    num_TY_DEF
   1.155 +    num_ISO_DEF
   1.156 +    IS_NUM_REP
   1.157 +    ZERO_REP_DEF
   1.158 +    SUC_REP_DEF
   1.159 +    ZERO_DEF
   1.160 +    SUC_DEF;
   1.161 +
   1.162 +end_import;
   1.163 +
   1.164 +import_theory prim_rec;
   1.165 +
   1.166 +const_maps
   1.167 +    "<" > "op <" :: "[nat,nat]\<Rightarrow>bool";
   1.168 +
   1.169 +end_import;
   1.170 +
   1.171 +import_theory arithmetic;
   1.172 +
   1.173 +const_maps
   1.174 +  ALT_ZERO     > HOL4Compat.ALT_ZERO
   1.175 +  NUMERAL_BIT1 > HOL4Compat.NUMERAL_BIT1
   1.176 +  NUMERAL_BIT2 > HOL4Compat.NUMERAL_BIT2
   1.177 +  NUMERAL      > HOL4Compat.NUMERAL
   1.178 +  num_case     > Nat.nat.nat_case
   1.179 +  ">"          > HOL4Compat.nat_gt
   1.180 +  ">="         > HOL4Compat.nat_ge
   1.181 +  FUNPOW       > HOL4Compat.FUNPOW
   1.182 +  "<="         > "op <="          :: "[nat,nat]\<Rightarrow>bool"
   1.183 +  "+"          > "op +"           :: "[nat,nat]\<Rightarrow>nat"
   1.184 +  "*"          > "op *"           :: "[nat,nat]\<Rightarrow>nat"
   1.185 +  "-"          > "op -"           :: "[nat,nat]\<Rightarrow>nat"
   1.186 +  MIN          > HOL.min          :: "[nat,nat]\<Rightarrow>nat"
   1.187 +  MAX          > HOL.max          :: "[nat,nat]\<Rightarrow>nat"
   1.188 +  DIV          > "Divides.op div" :: "[nat,nat]\<Rightarrow>nat"
   1.189 +  MOD          > "Divides.op mod" :: "[nat,nat]\<Rightarrow>nat"
   1.190 +  EXP          > Nat.power        :: "[nat,nat]\<Rightarrow>nat";
   1.191 +
   1.192 +end_import;
   1.193 +
   1.194 +import_theory hrat;
   1.195 +end_import;
   1.196 +
   1.197 +import_theory hreal;
   1.198 +end_import;
   1.199 +
   1.200 +import_theory numeral;
   1.201 +end_import;
   1.202 +
   1.203 +import_theory ind_type;
   1.204 +end_import;
   1.205 +
   1.206 +import_theory divides;
   1.207 +
   1.208 +const_maps
   1.209 +    divides > "Divides.op dvd" :: "[nat,nat]\<Rightarrow>bool";
   1.210 +
   1.211 +end_import;
   1.212 +
   1.213 +import_theory prime;
   1.214 +end_import;
   1.215 +
   1.216 +import_theory list;
   1.217 +
   1.218 +type_maps
   1.219 +    list > List.list;
   1.220 +
   1.221 +const_maps
   1.222 +  CONS      > List.list.Cons
   1.223 +  NIL       > List.list.Nil
   1.224 +  list_case > List.list.list_case
   1.225 +  NULL      > List.null
   1.226 +  HD        > List.hd
   1.227 +  TL        > List.tl
   1.228 +  MAP       > List.map
   1.229 +  MEM       > "List.op mem"
   1.230 +  FILTER    > List.filter
   1.231 +  FOLDL     > List.foldl
   1.232 +  EVERY     > List.list_all
   1.233 +  REVERSE   > List.rev
   1.234 +  LAST      > List.last
   1.235 +  FRONT     > List.butlast
   1.236 +  APPEND    > "List.op @"
   1.237 +  FLAT      > List.concat
   1.238 +  LENGTH    > Nat.size
   1.239 +  REPLICATE > List.replicate
   1.240 +  list_size > HOL4Compat.list_size
   1.241 +  SUM       > HOL4Compat.sum
   1.242 +  FOLDR     > HOL4Compat.FOLDR
   1.243 +  EXISTS    > HOL4Compat.list_exists
   1.244 +  MAP2      > HOL4Compat.map2
   1.245 +  ZIP       > HOL4Compat.ZIP
   1.246 +  UNZIP     > HOL4Compat.unzip;
   1.247 +
   1.248 +ignore_thms
   1.249 +  list_TY_DEF
   1.250 +  list_repfns
   1.251 +  list0_def
   1.252 +  list1_def
   1.253 +  NIL
   1.254 +  CONS_def;
   1.255 +
   1.256 +end_import;
   1.257 +
   1.258 +import_theory pred_set;
   1.259 +end_import;
   1.260 +
   1.261 +import_theory operator;
   1.262 +end_import;
   1.263 +
   1.264 +import_theory rich_list;
   1.265 +end_import;
   1.266 +
   1.267 +import_theory state_transformer;
   1.268 +end_import;
   1.269 +
   1.270 +append_dump "end";
   1.271 +
   1.272 +flush_dump;
   1.273 +
   1.274 +import_segment "";
   1.275 +
   1.276 +end
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Prob.thy	Fri Apr 02 17:37:45 2004 +0200
     2.3 @@ -0,0 +1,43 @@
     2.4 +theory GenHOL4Prob = GenHOL4Real:
     2.5 +
     2.6 +import_segment "hol4";
     2.7 +
     2.8 +setup_dump "../HOL" "HOL4Prob";
     2.9 +
    2.10 +append_dump "theory HOL4Prob = HOL4Real:";
    2.11 +
    2.12 +import_theory prob_extra;
    2.13 +
    2.14 +const_moves
    2.15 +  COMPL > GenHOL4Base.pred_set.COMPL;
    2.16 +
    2.17 +end_import;
    2.18 +
    2.19 +import_theory prob_canon;
    2.20 +end_import;
    2.21 +
    2.22 +import_theory boolean_sequence;
    2.23 +end_import;
    2.24 +
    2.25 +import_theory prob_algebra;
    2.26 +end_import;
    2.27 +
    2.28 +import_theory prob;
    2.29 +end_import;
    2.30 +
    2.31 +import_theory prob_pseudo;
    2.32 +end_import;
    2.33 +
    2.34 +import_theory prob_indep;
    2.35 +end_import;
    2.36 +
    2.37 +import_theory prob_uniform;
    2.38 +end_import;
    2.39 +
    2.40 +append_dump "end";
    2.41 +
    2.42 +flush_dump;
    2.43 +
    2.44 +import_segment "";
    2.45 +
    2.46 +end
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Real.thy	Fri Apr 02 17:37:45 2004 +0200
     3.3 @@ -0,0 +1,85 @@
     3.4 +theory GenHOL4Real = GenHOL4Base:
     3.5 +
     3.6 +import_segment "hol4";
     3.7 +
     3.8 +setup_dump "../HOL" "HOL4Real";
     3.9 +
    3.10 +append_dump "theory HOL4Real = HOL4Base:";
    3.11 +
    3.12 +import_theory realax;
    3.13 +
    3.14 +type_maps
    3.15 +  real > RealDef.real;
    3.16 +
    3.17 +const_maps
    3.18 +  real_0   > 0           :: real
    3.19 +  real_1   > 1           :: real
    3.20 +  real_neg > uminus      :: "real \<Rightarrow> real"
    3.21 +  inv      > HOL.inverse :: "real \<Rightarrow> real"
    3.22 +  real_add > "op +"      :: "[real,real] \<Rightarrow> real"
    3.23 +  real_mul > "op *"      :: "[real,real] \<Rightarrow> real"
    3.24 +  real_lt  > "op <"      :: "[real,real] \<Rightarrow> bool";
    3.25 +
    3.26 +ignore_thms
    3.27 +    real_TY_DEF
    3.28 +    real_tybij
    3.29 +    real_0
    3.30 +    real_1
    3.31 +    real_neg
    3.32 +    real_inv
    3.33 +    real_add
    3.34 +    real_mul
    3.35 +    real_lt
    3.36 +    real_of_hreal
    3.37 +    hreal_of_real
    3.38 +    REAL_ISO_EQ
    3.39 +    REAL_POS
    3.40 +    SUP_ALLPOS_LEMMA1
    3.41 +    SUP_ALLPOS_LEMMA2
    3.42 +    SUP_ALLPOS_LEMMA3
    3.43 +    SUP_ALLPOS_LEMMA4;
    3.44 +
    3.45 +end_import;
    3.46 +
    3.47 +import_theory real;
    3.48 +
    3.49 +const_maps
    3.50 +  real_gt     > HOL4Compat.real_gt
    3.51 +  real_ge     > HOL4Compat.real_ge
    3.52 +  real_lte    > "op <="      :: "[real,real] \<Rightarrow> bool"
    3.53 +  real_sub    > "op -"       :: "[real,real] \<Rightarrow> real"
    3.54 +  "/"         > HOL.divide   :: "[real,real] \<Rightarrow> real"
    3.55 +  pow         > Nat.power    :: "[real,nat] \<Rightarrow> real"
    3.56 +  abs         > HOL.abs      :: "real \<Rightarrow> real"
    3.57 +  real_of_num > RealDef.real :: "nat \<Rightarrow> real";
    3.58 +
    3.59 +end_import;
    3.60 +
    3.61 +import_theory topology;
    3.62 +end_import;
    3.63 +
    3.64 +import_theory nets;
    3.65 +end_import;
    3.66 +
    3.67 +import_theory seq;
    3.68 +end_import;
    3.69 +
    3.70 +import_theory lim;
    3.71 +end_import;
    3.72 +
    3.73 +import_theory powser;
    3.74 +end_import;
    3.75 +
    3.76 +import_theory transc;
    3.77 +end_import;
    3.78 +
    3.79 +import_theory poly;
    3.80 +end_import;
    3.81 +
    3.82 +append_dump "end";
    3.83 +
    3.84 +flush_dump;
    3.85 +
    3.86 +import_segment "";
    3.87 +
    3.88 +end
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Vec.thy	Fri Apr 02 17:37:45 2004 +0200
     4.3 @@ -0,0 +1,40 @@
     4.4 +theory GenHOL4Vec = GenHOL4Base:
     4.5 +
     4.6 +import_segment "hol4";
     4.7 +
     4.8 +setup_dump "../HOL" "HOL4Vec";
     4.9 +
    4.10 +append_dump "theory HOL4Vec = HOL4Base:";
    4.11 +
    4.12 +import_theory res_quan;
    4.13 +end_import;
    4.14 +
    4.15 +import_theory word_base;
    4.16 +
    4.17 +const_renames
    4.18 +  BIT > bit;
    4.19 +
    4.20 +end_import;
    4.21 +
    4.22 +import_theory word_num;
    4.23 +end_import;
    4.24 +
    4.25 +import_theory word_bitop;
    4.26 +end_import;
    4.27 +
    4.28 +import_theory bword_num;
    4.29 +end_import;
    4.30 +
    4.31 +import_theory bword_arith;
    4.32 +end_import;
    4.33 +
    4.34 +import_theory bword_bitop;
    4.35 +end_import;
    4.36 +
    4.37 +append_dump "end";
    4.38 +
    4.39 +flush_dump;
    4.40 +
    4.41 +import_segment "";
    4.42 +
    4.43 +end
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Word32.thy	Fri Apr 02 17:37:45 2004 +0200
     5.3 @@ -0,0 +1,29 @@
     5.4 +theory GenHOL4Word32 = GenHOL4Base:;
     5.5 +
     5.6 +import_segment "hol4";
     5.7 +
     5.8 +setup_dump "../HOL" "HOL4Word32";
     5.9 +
    5.10 +append_dump "theory HOL4Word32 = HOL4Base:";
    5.11 +
    5.12 +import_theory bits;
    5.13 +
    5.14 +const_renames
    5.15 +  BIT > bit
    5.16 +
    5.17 +end_import;
    5.18 +
    5.19 +import_theory word32;
    5.20 +
    5.21 +const_renames
    5.22 +  "==" > EQUIV;
    5.23 +
    5.24 +end_import;
    5.25 +
    5.26 +append_dump "end";
    5.27 +
    5.28 +flush_dump;
    5.29 +
    5.30 +import_segment "";
    5.31 +
    5.32 +end
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/src/HOL/Import/Generate-HOL/ROOT.ML	Fri Apr 02 17:37:45 2004 +0200
     6.3 @@ -0,0 +1,5 @@
     6.4 +with_path ".." use_thy "HOL4Compat";
     6.5 +with_path ".." use_thy "HOL4Syntax";
     6.6 +use_thy "GenHOL4Prob";
     6.7 +use_thy "GenHOL4Vec";
     6.8 +use_thy "GenHOL4Word32";
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/src/HOL/Import/HOL/HOL4.thy	Fri Apr 02 17:37:45 2004 +0200
     7.3 @@ -0,0 +1,3 @@
     7.4 +theory HOL4 = HOL4Vec + HOL4Word32 + HOL4Real:
     7.5 +
     7.6 +end
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/src/HOL/Import/HOL/HOL4Base.thy	Fri Apr 02 17:37:45 2004 +0200
     8.3 @@ -0,0 +1,4754 @@
     8.4 +theory HOL4Base = HOL4Compat + HOL4Syntax:
     8.5 +
     8.6 +;setup_theory bool
     8.7 +
     8.8 +constdefs
     8.9 +  ARB :: "'a" 
    8.10 +  "ARB == SOME x. True"
    8.11 +
    8.12 +lemma ARB_DEF: "ARB = (SOME x. True)"
    8.13 +  by (import bool ARB_DEF)
    8.14 +
    8.15 +constdefs
    8.16 +  IN :: "'a => ('a => bool) => bool" 
    8.17 +  "IN == %x f. f x"
    8.18 +
    8.19 +lemma IN_DEF: "IN = (%x f. f x)"
    8.20 +  by (import bool IN_DEF)
    8.21 +
    8.22 +constdefs
    8.23 +  RES_FORALL :: "('a => bool) => ('a => bool) => bool" 
    8.24 +  "RES_FORALL == %p m. ALL x. IN x p --> m x"
    8.25 +
    8.26 +lemma RES_FORALL_DEF: "RES_FORALL = (%p m. ALL x. IN x p --> m x)"
    8.27 +  by (import bool RES_FORALL_DEF)
    8.28 +
    8.29 +constdefs
    8.30 +  RES_EXISTS :: "('a => bool) => ('a => bool) => bool" 
    8.31 +  "RES_EXISTS == %p m. EX x. IN x p & m x"
    8.32 +
    8.33 +lemma RES_EXISTS_DEF: "RES_EXISTS = (%p m. EX x. IN x p & m x)"
    8.34 +  by (import bool RES_EXISTS_DEF)
    8.35 +
    8.36 +constdefs
    8.37 +  RES_EXISTS_UNIQUE :: "('a => bool) => ('a => bool) => bool" 
    8.38 +  "RES_EXISTS_UNIQUE ==
    8.39 +%p m. RES_EXISTS p m &
    8.40 +      RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y))"
    8.41 +
    8.42 +lemma RES_EXISTS_UNIQUE_DEF: "RES_EXISTS_UNIQUE =
    8.43 +(%p m. RES_EXISTS p m &
    8.44 +       RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y)))"
    8.45 +  by (import bool RES_EXISTS_UNIQUE_DEF)
    8.46 +
    8.47 +constdefs
    8.48 +  RES_SELECT :: "('a => bool) => ('a => bool) => 'a" 
    8.49 +  "RES_SELECT == %p m. SOME x. IN x p & m x"
    8.50 +
    8.51 +lemma RES_SELECT_DEF: "RES_SELECT = (%p m. SOME x. IN x p & m x)"
    8.52 +  by (import bool RES_SELECT_DEF)
    8.53 +
    8.54 +lemma EXCLUDED_MIDDLE: "ALL t. t | ~ t"
    8.55 +  by (import bool EXCLUDED_MIDDLE)
    8.56 +
    8.57 +lemma FORALL_THM: "All f = All f"
    8.58 +  by (import bool FORALL_THM)
    8.59 +
    8.60 +lemma EXISTS_THM: "Ex f = Ex f"
    8.61 +  by (import bool EXISTS_THM)
    8.62 +
    8.63 +lemma F_IMP: "ALL t. ~ t --> t --> False"
    8.64 +  by (import bool F_IMP)
    8.65 +
    8.66 +lemma NOT_AND: "~ (t & ~ t)"
    8.67 +  by (import bool NOT_AND)
    8.68 +
    8.69 +lemma AND_CLAUSES: "ALL t.
    8.70 +   (True & t) = t &
    8.71 +   (t & True) = t & (False & t) = False & (t & False) = False & (t & t) = t"
    8.72 +  by (import bool AND_CLAUSES)
    8.73 +
    8.74 +lemma OR_CLAUSES: "ALL t.
    8.75 +   (True | t) = True &
    8.76 +   (t | True) = True & (False | t) = t & (t | False) = t & (t | t) = t"
    8.77 +  by (import bool OR_CLAUSES)
    8.78 +
    8.79 +lemma IMP_CLAUSES: "ALL t.
    8.80 +   (True --> t) = t &
    8.81 +   (t --> True) = True &
    8.82 +   (False --> t) = True & (t --> t) = True & (t --> False) = (~ t)"
    8.83 +  by (import bool IMP_CLAUSES)
    8.84 +
    8.85 +lemma NOT_CLAUSES: "(ALL t. (~ ~ t) = t) & (~ True) = False & (~ False) = True"
    8.86 +  by (import bool NOT_CLAUSES)
    8.87 +
    8.88 +lemma BOOL_EQ_DISTINCT: "True ~= False & False ~= True"
    8.89 +  by (import bool BOOL_EQ_DISTINCT)
    8.90 +
    8.91 +lemma EQ_CLAUSES: "ALL t.
    8.92 +   (True = t) = t &
    8.93 +   (t = True) = t & (False = t) = (~ t) & (t = False) = (~ t)"
    8.94 +  by (import bool EQ_CLAUSES)
    8.95 +
    8.96 +lemma COND_CLAUSES: "ALL t1 t2. (if True then t1 else t2) = t1 & (if False then t1 else t2) = t2"
    8.97 +  by (import bool COND_CLAUSES)
    8.98 +
    8.99 +lemma SELECT_UNIQUE: "ALL P x. (ALL y. P y = (y = x)) --> Eps P = x"
   8.100 +  by (import bool SELECT_UNIQUE)
   8.101 +
   8.102 +lemma BOTH_EXISTS_AND_THM: "ALL (P::bool) Q::bool. (EX x::'a. P & Q) = ((EX x::'a. P) & (EX x::'a. Q))"
   8.103 +  by (import bool BOTH_EXISTS_AND_THM)
   8.104 +
   8.105 +lemma BOTH_FORALL_OR_THM: "ALL (P::bool) Q::bool.
   8.106 +   (ALL x::'a. P | Q) = ((ALL x::'a. P) | (ALL x::'a. Q))"
   8.107 +  by (import bool BOTH_FORALL_OR_THM)
   8.108 +
   8.109 +lemma BOTH_FORALL_IMP_THM: "ALL (P::bool) Q::bool.
   8.110 +   (ALL x::'a. P --> Q) = ((EX x::'a. P) --> (ALL x::'a. Q))"
   8.111 +  by (import bool BOTH_FORALL_IMP_THM)
   8.112 +
   8.113 +lemma BOTH_EXISTS_IMP_THM: "ALL (P::bool) Q::bool.
   8.114 +   (EX x::'a. P --> Q) = ((ALL x::'a. P) --> (EX x::'a. Q))"
   8.115 +  by (import bool BOTH_EXISTS_IMP_THM)
   8.116 +
   8.117 +lemma OR_IMP_THM: "ALL A B. (A = (B | A)) = (B --> A)"
   8.118 +  by (import bool OR_IMP_THM)
   8.119 +
   8.120 +lemma DE_MORGAN_THM: "ALL A B. (~ (A & B)) = (~ A | ~ B) & (~ (A | B)) = (~ A & ~ B)"
   8.121 +  by (import bool DE_MORGAN_THM)
   8.122 +
   8.123 +lemma IMP_F_EQ_F: "ALL t. (t --> False) = (t = False)"
   8.124 +  by (import bool IMP_F_EQ_F)
   8.125 +
   8.126 +lemma EQ_EXPAND: "ALL t1 t2. (t1 = t2) = (t1 & t2 | ~ t1 & ~ t2)"
   8.127 +  by (import bool EQ_EXPAND)
   8.128 +
   8.129 +lemma COND_RATOR: "ALL b f g x. (if b then f else g) x = (if b then f x else g x)"
   8.130 +  by (import bool COND_RATOR)
   8.131 +
   8.132 +lemma COND_ABS: "ALL b f g. (%x. if b then f x else g x) = (if b then f else g)"
   8.133 +  by (import bool COND_ABS)
   8.134 +
   8.135 +lemma COND_EXPAND: "ALL b t1 t2. (if b then t1 else t2) = ((~ b | t1) & (b | t2))"
   8.136 +  by (import bool COND_EXPAND)
   8.137 +
   8.138 +lemma ONE_ONE_THM: "ALL f. inj f = (ALL x1 x2. f x1 = f x2 --> x1 = x2)"
   8.139 +  by (import bool ONE_ONE_THM)
   8.140 +
   8.141 +lemma ABS_REP_THM: "(All::(('a => bool) => bool) => bool)
   8.142 + (%P::'a => bool.
   8.143 +     (op -->::bool => bool => bool)
   8.144 +      ((Ex::(('b => 'a) => bool) => bool)
   8.145 +        ((TYPE_DEFINITION::('a => bool) => ('b => 'a) => bool) P))
   8.146 +      ((Ex::(('b => 'a) => bool) => bool)
   8.147 +        (%x::'b => 'a.
   8.148 +            (Ex::(('a => 'b) => bool) => bool)
   8.149 +             (%abs::'a => 'b.
   8.150 +                 (op &::bool => bool => bool)
   8.151 +                  ((All::('b => bool) => bool)
   8.152 +                    (%a::'b. (op =::'b => 'b => bool) (abs (x a)) a))
   8.153 +                  ((All::('a => bool) => bool)
   8.154 +                    (%r::'a.
   8.155 +                        (op =::bool => bool => bool) (P r)
   8.156 +                         ((op =::'a => 'a => bool) (x (abs r)) r)))))))"
   8.157 +  by (import bool ABS_REP_THM)
   8.158 +
   8.159 +lemma LET_RAND: "(P::'b => bool) (Let (M::'a) (N::'a => 'b)) = (let x::'a = M in P (N x))"
   8.160 +  by (import bool LET_RAND)
   8.161 +
   8.162 +lemma LET_RATOR: "Let (M::'a) (N::'a => 'b => 'c) (b::'b) = (let x::'a = M in N x b)"
   8.163 +  by (import bool LET_RATOR)
   8.164 +
   8.165 +lemma SWAP_FORALL_THM: "ALL P. (ALL x. All (P x)) = (ALL y x. P x y)"
   8.166 +  by (import bool SWAP_FORALL_THM)
   8.167 +
   8.168 +lemma SWAP_EXISTS_THM: "ALL P. (EX x. Ex (P x)) = (EX y x. P x y)"
   8.169 +  by (import bool SWAP_EXISTS_THM)
   8.170 +
   8.171 +lemma AND_CONG: "ALL P P' Q Q'. (Q --> P = P') & (P' --> Q = Q') --> (P & Q) = (P' & Q')"
   8.172 +  by (import bool AND_CONG)
   8.173 +
   8.174 +lemma OR_CONG: "ALL P P' Q Q'. (~ Q --> P = P') & (~ P' --> Q = Q') --> (P | Q) = (P' | Q')"
   8.175 +  by (import bool OR_CONG)
   8.176 +
   8.177 +lemma COND_CONG: "ALL P Q x x' y y'.
   8.178 +   P = Q & (Q --> x = x') & (~ Q --> y = y') -->
   8.179 +   (if P then x else y) = (if Q then x' else y')"
   8.180 +  by (import bool COND_CONG)
   8.181 +
   8.182 +lemma MONO_COND: "(x --> y) --> (z --> w) --> (if b then x else z) --> (if b then y else w)"
   8.183 +  by (import bool MONO_COND)
   8.184 +
   8.185 +lemma SKOLEM_THM: "ALL P. (ALL x. Ex (P x)) = (EX f. ALL x. P x (f x))"
   8.186 +  by (import bool SKOLEM_THM)
   8.187 +
   8.188 +lemma bool_case_thm: "(ALL (e0::'a) e1::'a. (case True of True => e0 | False => e1) = e0) &
   8.189 +(ALL (e0::'a) e1::'a. (case False of True => e0 | False => e1) = e1)"
   8.190 +  by (import bool bool_case_thm)
   8.191 +
   8.192 +lemma bool_case_ID: "ALL x b. (case b of True => x | False => x) = x"
   8.193 +  by (import bool bool_case_ID)
   8.194 +
   8.195 +lemma boolAxiom: "ALL e0 e1. EX x. x True = e0 & x False = e1"
   8.196 +  by (import bool boolAxiom)
   8.197 +
   8.198 +lemma UEXISTS_OR_THM: "ALL P Q. (EX! x. P x | Q x) --> Ex1 P | Ex1 Q"
   8.199 +  by (import bool UEXISTS_OR_THM)
   8.200 +
   8.201 +lemma UEXISTS_SIMP: "(EX! x::'a. (t::bool)) = (t & (ALL x::'a. All (op = x)))"
   8.202 +  by (import bool UEXISTS_SIMP)
   8.203 +
   8.204 +consts
   8.205 +  RES_ABSTRACT :: "('a => bool) => ('a => 'b) => 'a => 'b" 
   8.206 +
   8.207 +specification (RES_ABSTRACT) RES_ABSTRACT_DEF: "(ALL (p::'a => bool) (m::'a => 'b) x::'a.
   8.208 +    IN x p --> RES_ABSTRACT p m x = m x) &
   8.209 +(ALL (p::'a => bool) (m1::'a => 'b) m2::'a => 'b.
   8.210 +    (ALL x::'a. IN x p --> m1 x = m2 x) -->
   8.211 +    RES_ABSTRACT p m1 = RES_ABSTRACT p m2)"
   8.212 +  by (import bool RES_ABSTRACT_DEF)
   8.213 +
   8.214 +lemma BOOL_FUN_CASES_THM: "ALL f. f = (%b. True) | f = (%b. False) | f = (%b. b) | f = Not"
   8.215 +  by (import bool BOOL_FUN_CASES_THM)
   8.216 +
   8.217 +lemma BOOL_FUN_INDUCT: "ALL P. P (%b. True) & P (%b. False) & P (%b. b) & P Not --> All P"
   8.218 +  by (import bool BOOL_FUN_INDUCT)
   8.219 +
   8.220 +;end_setup
   8.221 +
   8.222 +;setup_theory combin
   8.223 +
   8.224 +constdefs
   8.225 +  K :: "'a => 'b => 'a" 
   8.226 +  "K == %x y. x"
   8.227 +
   8.228 +lemma K_DEF: "K = (%x y. x)"
   8.229 +  by (import combin K_DEF)
   8.230 +
   8.231 +constdefs
   8.232 +  S :: "('a => 'b => 'c) => ('a => 'b) => 'a => 'c" 
   8.233 +  "S == %f g x. f x (g x)"
   8.234 +
   8.235 +lemma S_DEF: "S = (%f g x. f x (g x))"
   8.236 +  by (import combin S_DEF)
   8.237 +
   8.238 +constdefs
   8.239 +  I :: "'a => 'a" 
   8.240 +  "(op ==::('a => 'a) => ('a => 'a) => prop) (I::'a => 'a)
   8.241 + ((S::('a => ('a => 'a) => 'a) => ('a => 'a => 'a) => 'a => 'a)
   8.242 +   (K::'a => ('a => 'a) => 'a) (K::'a => 'a => 'a))"
   8.243 +
   8.244 +lemma I_DEF: "(op =::('a => 'a) => ('a => 'a) => bool) (I::'a => 'a)
   8.245 + ((S::('a => ('a => 'a) => 'a) => ('a => 'a => 'a) => 'a => 'a)
   8.246 +   (K::'a => ('a => 'a) => 'a) (K::'a => 'a => 'a))"
   8.247 +  by (import combin I_DEF)
   8.248 +
   8.249 +constdefs
   8.250 +  C :: "('a => 'b => 'c) => 'b => 'a => 'c" 
   8.251 +  "C == %f x y. f y x"
   8.252 +
   8.253 +lemma C_DEF: "C = (%f x y. f y x)"
   8.254 +  by (import combin C_DEF)
   8.255 +
   8.256 +constdefs
   8.257 +  W :: "('a => 'a => 'b) => 'a => 'b" 
   8.258 +  "W == %f x. f x x"
   8.259 +
   8.260 +lemma W_DEF: "W = (%f x. f x x)"
   8.261 +  by (import combin W_DEF)
   8.262 +
   8.263 +lemma I_THM: "ALL x. I x = x"
   8.264 +  by (import combin I_THM)
   8.265 +
   8.266 +lemma I_o_ID: "ALL f. I o f = f & f o I = f"
   8.267 +  by (import combin I_o_ID)
   8.268 +
   8.269 +;end_setup
   8.270 +
   8.271 +;setup_theory sum
   8.272 +
   8.273 +lemma ISL_OR_ISR: "ALL x. ISL x | ISR x"
   8.274 +  by (import sum ISL_OR_ISR)
   8.275 +
   8.276 +lemma INL: "ALL x. ISL x --> Inl (OUTL x) = x"
   8.277 +  by (import sum INL)
   8.278 +
   8.279 +lemma INR: "ALL x. ISR x --> Inr (OUTR x) = x"
   8.280 +  by (import sum INR)
   8.281 +
   8.282 +lemma sum_case_cong: "ALL (M::'b + 'c) (M'::'b + 'c) (f::'b => 'a) g::'c => 'a.
   8.283 +   M = M' &
   8.284 +   (ALL x::'b. M' = Inl x --> f x = (f'::'b => 'a) x) &
   8.285 +   (ALL y::'c. M' = Inr y --> g y = (g'::'c => 'a) y) -->
   8.286 +   sum_case f g M = sum_case f' g' M'"
   8.287 +  by (import sum sum_case_cong)
   8.288 +
   8.289 +;end_setup
   8.290 +
   8.291 +;setup_theory one
   8.292 +
   8.293 +;end_setup
   8.294 +
   8.295 +;setup_theory option
   8.296 +
   8.297 +lemma option_CLAUSES: "(op &::bool => bool => bool)
   8.298 + ((All::('a => bool) => bool)
   8.299 +   (%x::'a.
   8.300 +       (All::('a => bool) => bool)
   8.301 +        (%y::'a.
   8.302 +            (op =::bool => bool => bool)
   8.303 +             ((op =::'a option => 'a option => bool) ((Some::'a ~=> 'a) x)
   8.304 +               ((Some::'a ~=> 'a) y))
   8.305 +             ((op =::'a => 'a => bool) x y))))
   8.306 + ((op &::bool => bool => bool)
   8.307 +   ((All::('a => bool) => bool)
   8.308 +     (%x::'a.
   8.309 +         (op =::'a => 'a => bool)
   8.310 +          ((the::'a option => 'a) ((Some::'a ~=> 'a) x)) x))
   8.311 +   ((op &::bool => bool => bool)
   8.312 +     ((All::('a => bool) => bool)
   8.313 +       (%x::'a.
   8.314 +           (Not::bool => bool)
   8.315 +            ((op =::'a option => 'a option => bool) (None::'a option)
   8.316 +              ((Some::'a ~=> 'a) x))))
   8.317 +     ((op &::bool => bool => bool)
   8.318 +       ((All::('a => bool) => bool)
   8.319 +         (%x::'a.
   8.320 +             (Not::bool => bool)
   8.321 +              ((op =::'a option => 'a option => bool) ((Some::'a ~=> 'a) x)
   8.322 +                (None::'a option))))
   8.323 +       ((op &::bool => bool => bool)
   8.324 +         ((All::('a => bool) => bool)
   8.325 +           (%x::'a.
   8.326 +               (op =::bool => bool => bool)
   8.327 +                ((IS_SOME::'a option => bool) ((Some::'a ~=> 'a) x))
   8.328 +                (True::bool)))
   8.329 +         ((op &::bool => bool => bool)
   8.330 +           ((op =::bool => bool => bool)
   8.331 +             ((IS_SOME::'a option => bool) (None::'a option)) (False::bool))
   8.332 +           ((op &::bool => bool => bool)
   8.333 +             ((All::('a option => bool) => bool)
   8.334 +               (%x::'a option.
   8.335 +                   (op =::bool => bool => bool)
   8.336 +                    ((IS_NONE::'a option => bool) x)
   8.337 +                    ((op =::'a option => 'a option => bool) x
   8.338 +                      (None::'a option))))
   8.339 +             ((op &::bool => bool => bool)
   8.340 +               ((All::('a option => bool) => bool)
   8.341 +                 (%x::'a option.
   8.342 +                     (op =::bool => bool => bool)
   8.343 +                      ((Not::bool => bool) ((IS_SOME::'a option => bool) x))
   8.344 +                      ((op =::'a option => 'a option => bool) x
   8.345 +                        (None::'a option))))
   8.346 +               ((op &::bool => bool => bool)
   8.347 +                 ((All::('a option => bool) => bool)
   8.348 +                   (%x::'a option.
   8.349 +                       (op -->::bool => bool => bool)
   8.350 +                        ((IS_SOME::'a option => bool) x)
   8.351 +                        ((op =::'a option => 'a option => bool)
   8.352 +                          ((Some::'a ~=> 'a) ((the::'a option => 'a) x))
   8.353 +                          x)))
   8.354 +                 ((op &::bool => bool => bool)
   8.355 +                   ((All::('a option => bool) => bool)
   8.356 +                     (%x::'a option.
   8.357 +                         (op =::'a option => 'a option => bool)
   8.358 +                          ((option_case::'a option
   8.359 +   => ('a ~=> 'a) => 'a option ~=> 'a)
   8.360 +                            (None::'a option) (Some::'a ~=> 'a) x)
   8.361 +                          x))
   8.362 +                   ((op &::bool => bool => bool)
   8.363 +                     ((All::('a option => bool) => bool)
   8.364 +                       (%x::'a option.
   8.365 +                           (op =::'a option => 'a option => bool)
   8.366 +                            ((option_case::'a option
   8.367 +     => ('a ~=> 'a) => 'a option ~=> 'a)
   8.368 +                              x (Some::'a ~=> 'a) x)
   8.369 +                            x))
   8.370 +                     ((op &::bool => bool => bool)
   8.371 +                       ((All::('a option => bool) => bool)
   8.372 +                         (%x::'a option.
   8.373 +                             (op -->::bool => bool => bool)
   8.374 +                              ((IS_NONE::'a option => bool) x)
   8.375 +                              ((op =::'b => 'b => bool)
   8.376 +                                ((option_case::'b
   8.377 +         => ('a => 'b) => 'a option => 'b)
   8.378 +                                  (e::'b) (f::'a => 'b) x)
   8.379 +                                e)))
   8.380 +                       ((op &::bool => bool => bool)
   8.381 +                         ((All::('a option => bool) => bool)
   8.382 +                           (%x::'a option.
   8.383 +                               (op -->::bool => bool => bool)
   8.384 +                                ((IS_SOME::'a option => bool) x)
   8.385 +                                ((op =::'b => 'b => bool)
   8.386 +                                  ((option_case::'b
   8.387 +           => ('a => 'b) => 'a option => 'b)
   8.388 +                                    e f x)
   8.389 +                                  (f ((the::'a option => 'a) x)))))
   8.390 +                         ((op &::bool => bool => bool)
   8.391 +                           ((All::('a option => bool) => bool)
   8.392 +                             (%x::'a option.
   8.393 +                                 (op -->::bool => bool => bool)
   8.394 +                                  ((IS_SOME::'a option => bool) x)
   8.395 +                                  ((op =::'a option => 'a option => bool)
   8.396 +                                    ((option_case::'a option
   8.397 +             => ('a ~=> 'a) => 'a option ~=> 'a)
   8.398 +(ea::'a option) (Some::'a ~=> 'a) x)
   8.399 +                                    x)))
   8.400 +                           ((op &::bool => bool => bool)
   8.401 +                             ((All::('b => bool) => bool)
   8.402 +                               (%u::'b.
   8.403 +                                   (All::(('a => 'b) => bool) => bool)
   8.404 +                                    (%f::'a => 'b.
   8.405 +  (op =::'b => 'b => bool)
   8.406 +   ((option_case::'b => ('a => 'b) => 'a option => 'b) u f
   8.407 +     (None::'a option))
   8.408 +   u)))
   8.409 +                             ((op &::bool => bool => bool)
   8.410 +                               ((All::('b => bool) => bool)
   8.411 +                                 (%u::'b.
   8.412 +                                     (All::(('a => 'b) => bool) => bool)
   8.413 +(%f::'a => 'b.
   8.414 +    (All::('a => bool) => bool)
   8.415 +     (%x::'a.
   8.416 +         (op =::'b => 'b => bool)
   8.417 +          ((option_case::'b => ('a => 'b) => 'a option => 'b) u f
   8.418 +            ((Some::'a ~=> 'a) x))
   8.419 +          (f x)))))
   8.420 +                               ((op &::bool => bool => bool)
   8.421 +                                 ((All::(('a => 'b) => bool) => bool)
   8.422 +                                   (%f::'a => 'b.
   8.423 + (All::('a => bool) => bool)
   8.424 +  (%x::'a.
   8.425 +      (op =::'b option => 'b option => bool)
   8.426 +       ((option_map::('a => 'b) => 'a option ~=> 'b) f
   8.427 +         ((Some::'a ~=> 'a) x))
   8.428 +       ((Some::'b ~=> 'b) (f x)))))
   8.429 +                                 ((op &::bool => bool => bool)
   8.430 +                                   ((All::(('a => 'b) => bool) => bool)
   8.431 +                                     (%f::'a => 'b.
   8.432 +   (op =::'b option => 'b option => bool)
   8.433 +    ((option_map::('a => 'b) => 'a option ~=> 'b) f (None::'a option))
   8.434 +    (None::'b option)))
   8.435 +                                   ((op &::bool => bool => bool)
   8.436 +                                     ((op =::'a option => 'a option => bool)
   8.437 + ((OPTION_JOIN::'a option option ~=> 'a) (None::'a option option))
   8.438 + (None::'a option))
   8.439 +                                     ((All::('a option => bool) => bool)
   8.440 + (%x::'a option.
   8.441 +     (op =::'a option => 'a option => bool)
   8.442 +      ((OPTION_JOIN::'a option option ~=> 'a)
   8.443 +        ((Some::'a option ~=> 'a option) x))
   8.444 +      x))))))))))))))))))))"
   8.445 +  by (import option option_CLAUSES)
   8.446 +
   8.447 +lemma option_case_compute: "option_case (e::'b) (f::'a => 'b) (x::'a option) =
   8.448 +(if IS_SOME x then f (the x) else e)"
   8.449 +  by (import option option_case_compute)
   8.450 +
   8.451 +lemma OPTION_MAP_EQ_SOME: "ALL f x y. (option_map f x = Some y) = (EX z. x = Some z & y = f z)"
   8.452 +  by (import option OPTION_MAP_EQ_SOME)
   8.453 +
   8.454 +lemma OPTION_JOIN_EQ_SOME: "ALL x xa. (OPTION_JOIN x = Some xa) = (x = Some (Some xa))"
   8.455 +  by (import option OPTION_JOIN_EQ_SOME)
   8.456 +
   8.457 +lemma option_case_cong: "ALL M M' u f.
   8.458 +   M = M' & (M' = None --> u = u') & (ALL x. M' = Some x --> f x = f' x) -->
   8.459 +   option_case u f M = option_case u' f' M'"
   8.460 +  by (import option option_case_cong)
   8.461 +
   8.462 +;end_setup
   8.463 +
   8.464 +;setup_theory marker
   8.465 +
   8.466 +consts
   8.467 +  stmarker :: "'a => 'a" 
   8.468 +
   8.469 +defs
   8.470 +  stmarker_primdef: "stmarker == %x. x"
   8.471 +
   8.472 +lemma stmarker_def: "ALL x. stmarker x = x"
   8.473 +  by (import marker stmarker_def)
   8.474 +
   8.475 +lemma move_left_conj: "ALL x xa xb.
   8.476 +   (x & stmarker xb) = (stmarker xb & x) &
   8.477 +   ((stmarker xb & x) & xa) = (stmarker xb & x & xa) &
   8.478 +   (x & stmarker xb & xa) = (stmarker xb & x & xa)"
   8.479 +  by (import marker move_left_conj)
   8.480 +
   8.481 +lemma move_right_conj: "ALL x xa xb.
   8.482 +   (stmarker xb & x) = (x & stmarker xb) &
   8.483 +   (x & xa & stmarker xb) = ((x & xa) & stmarker xb) &
   8.484 +   ((x & stmarker xb) & xa) = ((x & xa) & stmarker xb)"
   8.485 +  by (import marker move_right_conj)
   8.486 +
   8.487 +lemma move_left_disj: "ALL x xa xb.
   8.488 +   (x | stmarker xb) = (stmarker xb | x) &
   8.489 +   ((stmarker xb | x) | xa) = (stmarker xb | x | xa) &
   8.490 +   (x | stmarker xb | xa) = (stmarker xb | x | xa)"
   8.491 +  by (import marker move_left_disj)
   8.492 +
   8.493 +lemma move_right_disj: "ALL x xa xb.
   8.494 +   (stmarker xb | x) = (x | stmarker xb) &
   8.495 +   (x | xa | stmarker xb) = ((x | xa) | stmarker xb) &
   8.496 +   ((x | stmarker xb) | xa) = ((x | xa) | stmarker xb)"
   8.497 +  by (import marker move_right_disj)
   8.498 +
   8.499 +;end_setup
   8.500 +
   8.501 +;setup_theory relation
   8.502 +
   8.503 +constdefs
   8.504 +  TC :: "('a => 'a => bool) => 'a => 'a => bool" 
   8.505 +  "TC ==
   8.506 +%R a b.
   8.507 +   ALL P.
   8.508 +      (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
   8.509 +      P a b"
   8.510 +
   8.511 +lemma TC_DEF: "ALL R a b.
   8.512 +   TC R a b =
   8.513 +   (ALL P.
   8.514 +       (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
   8.515 +       P a b)"
   8.516 +  by (import relation TC_DEF)
   8.517 +
   8.518 +constdefs
   8.519 +  RTC :: "('a => 'a => bool) => 'a => 'a => bool" 
   8.520 +  "RTC ==
   8.521 +%R a b.
   8.522 +   ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b"
   8.523 +
   8.524 +lemma RTC_DEF: "ALL R a b.
   8.525 +   RTC R a b =
   8.526 +   (ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b)"
   8.527 +  by (import relation RTC_DEF)
   8.528 +
   8.529 +consts
   8.530 +  RC :: "('a => 'a => bool) => 'a => 'a => bool" 
   8.531 +
   8.532 +defs
   8.533 +  RC_primdef: "RC == %R x y. x = y | R x y"
   8.534 +
   8.535 +lemma RC_def: "ALL R x y. RC R x y = (x = y | R x y)"
   8.536 +  by (import relation RC_def)
   8.537 +
   8.538 +consts
   8.539 +  transitive :: "('a => 'a => bool) => bool" 
   8.540 +
   8.541 +defs
   8.542 +  transitive_primdef: "transitive == %R. ALL x y z. R x y & R y z --> R x z"
   8.543 +
   8.544 +lemma transitive_def: "ALL R. transitive R = (ALL x y z. R x y & R y z --> R x z)"
   8.545 +  by (import relation transitive_def)
   8.546 +
   8.547 +constdefs
   8.548 +  pred_reflexive :: "('a => 'a => bool) => bool" 
   8.549 +  "pred_reflexive == %R. ALL x. R x x"
   8.550 +
   8.551 +lemma reflexive_def: "ALL R. pred_reflexive R = (ALL x. R x x)"
   8.552 +  by (import relation reflexive_def)
   8.553 +
   8.554 +lemma TC_TRANSITIVE: "ALL x. transitive (TC x)"
   8.555 +  by (import relation TC_TRANSITIVE)
   8.556 +
   8.557 +lemma RTC_INDUCT: "ALL x xa.
   8.558 +   (ALL x. xa x x) & (ALL xb y z. x xb y & xa y z --> xa xb z) -->
   8.559 +   (ALL xb xc. RTC x xb xc --> xa xb xc)"
   8.560 +  by (import relation RTC_INDUCT)
   8.561 +
   8.562 +lemma TC_RULES: "ALL x.
   8.563 +   (ALL xa xb. x xa xb --> TC x xa xb) &
   8.564 +   (ALL xa xb xc. TC x xa xb & TC x xb xc --> TC x xa xc)"
   8.565 +  by (import relation TC_RULES)
   8.566 +
   8.567 +lemma RTC_RULES: "ALL x.
   8.568 +   (ALL xa. RTC x xa xa) &
   8.569 +   (ALL xa xb xc. x xa xb & RTC x xb xc --> RTC x xa xc)"
   8.570 +  by (import relation RTC_RULES)
   8.571 +
   8.572 +lemma RTC_STRONG_INDUCT: "ALL R P.
   8.573 +   (ALL x. P x x) & (ALL x y z. R x y & RTC R y z & P y z --> P x z) -->
   8.574 +   (ALL x y. RTC R x y --> P x y)"
   8.575 +  by (import relation RTC_STRONG_INDUCT)
   8.576 +
   8.577 +lemma RTC_RTC: "ALL R x y. RTC R x y --> (ALL z. RTC R y z --> RTC R x z)"
   8.578 +  by (import relation RTC_RTC)
   8.579 +
   8.580 +lemma RTC_TRANSITIVE: "ALL x. transitive (RTC x)"
   8.581 +  by (import relation RTC_TRANSITIVE)
   8.582 +
   8.583 +lemma RTC_REFLEXIVE: "ALL R. pred_reflexive (RTC R)"
   8.584 +  by (import relation RTC_REFLEXIVE)
   8.585 +
   8.586 +lemma RC_REFLEXIVE: "ALL R. pred_reflexive (RC R)"
   8.587 +  by (import relation RC_REFLEXIVE)
   8.588 +
   8.589 +lemma TC_SUBSET: "ALL x xa xb. x xa xb --> TC x xa xb"
   8.590 +  by (import relation TC_SUBSET)
   8.591 +
   8.592 +lemma RTC_SUBSET: "ALL R x y. R x y --> RTC R x y"
   8.593 +  by (import relation RTC_SUBSET)
   8.594 +
   8.595 +lemma RC_SUBSET: "ALL R x y. R x y --> RC R x y"
   8.596 +  by (import relation RC_SUBSET)
   8.597 +
   8.598 +lemma RC_RTC: "ALL R x y. RC R x y --> RTC R x y"
   8.599 +  by (import relation RC_RTC)
   8.600 +
   8.601 +lemma TC_INDUCT: "ALL x xa.
   8.602 +   (ALL xb y. x xb y --> xa xb y) &
   8.603 +   (ALL x y z. xa x y & xa y z --> xa x z) -->
   8.604 +   (ALL xb xc. TC x xb xc --> xa xb xc)"
   8.605 +  by (import relation TC_INDUCT)
   8.606 +
   8.607 +lemma TC_INDUCT_LEFT1: "ALL x xa.
   8.608 +   (ALL xb y. x xb y --> xa xb y) &
   8.609 +   (ALL xb y z. x xb y & xa y z --> xa xb z) -->
   8.610 +   (ALL xb xc. TC x xb xc --> xa xb xc)"
   8.611 +  by (import relation TC_INDUCT_LEFT1)
   8.612 +
   8.613 +lemma TC_STRONG_INDUCT: "ALL R P.
   8.614 +   (ALL x y. R x y --> P x y) &
   8.615 +   (ALL x y z. P x y & P y z & TC R x y & TC R y z --> P x z) -->
   8.616 +   (ALL u v. TC R u v --> P u v)"
   8.617 +  by (import relation TC_STRONG_INDUCT)
   8.618 +
   8.619 +lemma TC_STRONG_INDUCT_LEFT1: "ALL R P.
   8.620 +   (ALL x y. R x y --> P x y) &
   8.621 +   (ALL x y z. R x y & P y z & TC R y z --> P x z) -->
   8.622 +   (ALL u v. TC R u v --> P u v)"
   8.623 +  by (import relation TC_STRONG_INDUCT_LEFT1)
   8.624 +
   8.625 +lemma TC_RTC: "ALL R x y. TC R x y --> RTC R x y"
   8.626 +  by (import relation TC_RTC)
   8.627 +
   8.628 +lemma RTC_TC_RC: "ALL R x y. RTC R x y --> RC R x y | TC R x y"
   8.629 +  by (import relation RTC_TC_RC)
   8.630 +
   8.631 +lemma TC_RC_EQNS: "ALL R. RC (TC R) = RTC R & TC (RC R) = RTC R"
   8.632 +  by (import relation TC_RC_EQNS)
   8.633 +
   8.634 +lemma RC_IDEM: "ALL R. RC (RC R) = RC R"
   8.635 +  by (import relation RC_IDEM)
   8.636 +
   8.637 +lemma TC_IDEM: "ALL R. TC (TC R) = TC R"
   8.638 +  by (import relation TC_IDEM)
   8.639 +
   8.640 +lemma RTC_IDEM: "ALL R. RTC (RTC R) = RTC R"
   8.641 +  by (import relation RTC_IDEM)
   8.642 +
   8.643 +lemma RTC_CASES1: "ALL x xa xb. RTC x xa xb = (xa = xb | (EX u. x xa u & RTC x u xb))"
   8.644 +  by (import relation RTC_CASES1)
   8.645 +
   8.646 +lemma RTC_CASES2: "ALL x xa xb. RTC x xa xb = (xa = xb | (EX u. RTC x xa u & x u xb))"
   8.647 +  by (import relation RTC_CASES2)
   8.648 +
   8.649 +lemma RTC_CASES_RTC_TWICE: "ALL x xa xb. RTC x xa xb = (EX u. RTC x xa u & RTC x u xb)"
   8.650 +  by (import relation RTC_CASES_RTC_TWICE)
   8.651 +
   8.652 +lemma TC_CASES1: "ALL R x z. TC R x z --> R x z | (EX y. R x y & TC R y z)"
   8.653 +  by (import relation TC_CASES1)
   8.654 +
   8.655 +lemma TC_CASES2: "ALL R x z. TC R x z --> R x z | (EX y. TC R x y & R y z)"
   8.656 +  by (import relation TC_CASES2)
   8.657 +
   8.658 +lemma TC_MONOTONE: "ALL R Q. (ALL x y. R x y --> Q x y) --> (ALL x y. TC R x y --> TC Q x y)"
   8.659 +  by (import relation TC_MONOTONE)
   8.660 +
   8.661 +lemma RTC_MONOTONE: "ALL R Q. (ALL x y. R x y --> Q x y) --> (ALL x y. RTC R x y --> RTC Q x y)"
   8.662 +  by (import relation RTC_MONOTONE)
   8.663 +
   8.664 +constdefs
   8.665 +  WF :: "('a => 'a => bool) => bool" 
   8.666 +  "WF == %R. ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b))"
   8.667 +
   8.668 +lemma WF_DEF: "ALL R. WF R = (ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b)))"
   8.669 +  by (import relation WF_DEF)
   8.670 +
   8.671 +lemma WF_INDUCTION_THM: "ALL R. WF R --> (ALL P. (ALL x. (ALL y. R y x --> P y) --> P x) --> All P)"
   8.672 +  by (import relation WF_INDUCTION_THM)
   8.673 +
   8.674 +lemma WF_NOT_REFL: "ALL x xa xb. WF x --> x xa xb --> xa ~= xb"
   8.675 +  by (import relation WF_NOT_REFL)
   8.676 +
   8.677 +constdefs
   8.678 +  EMPTY_REL :: "'a => 'a => bool" 
   8.679 +  "EMPTY_REL == %x y. False"
   8.680 +
   8.681 +lemma EMPTY_REL_DEF: "ALL x y. EMPTY_REL x y = False"
   8.682 +  by (import relation EMPTY_REL_DEF)
   8.683 +
   8.684 +lemma WF_EMPTY_REL: "WF EMPTY_REL"
   8.685 +  by (import relation WF_EMPTY_REL)
   8.686 +
   8.687 +lemma WF_SUBSET: "ALL x xa. WF x & (ALL xb y. xa xb y --> x xb y) --> WF xa"
   8.688 +  by (import relation WF_SUBSET)
   8.689 +
   8.690 +lemma WF_TC: "ALL R. WF R --> WF (TC R)"
   8.691 +  by (import relation WF_TC)
   8.692 +
   8.693 +consts
   8.694 +  inv_image :: "('b => 'b => bool) => ('a => 'b) => 'a => 'a => bool" 
   8.695 +
   8.696 +defs
   8.697 +  inv_image_primdef: "relation.inv_image ==
   8.698 +%(R::'b => 'b => bool) (f::'a => 'b) (x::'a) y::'a. R (f x) (f y)"
   8.699 +
   8.700 +lemma inv_image_def: "ALL (R::'b => 'b => bool) f::'a => 'b.
   8.701 +   relation.inv_image R f = (%(x::'a) y::'a. R (f x) (f y))"
   8.702 +  by (import relation inv_image_def)
   8.703 +
   8.704 +lemma WF_inv_image: "ALL (R::'b => 'b => bool) f::'a => 'b. WF R --> WF (relation.inv_image R f)"
   8.705 +  by (import relation WF_inv_image)
   8.706 +
   8.707 +constdefs
   8.708 +  RESTRICT :: "('a => 'b) => ('a => 'a => bool) => 'a => 'a => 'b" 
   8.709 +  "RESTRICT == %f R x y. if R y x then f y else ARB"
   8.710 +
   8.711 +lemma RESTRICT_DEF: "ALL f R x. RESTRICT f R x = (%y. if R y x then f y else ARB)"
   8.712 +  by (import relation RESTRICT_DEF)
   8.713 +
   8.714 +lemma RESTRICT_LEMMA: "ALL x xa xb xc. xa xb xc --> RESTRICT x xa xc xb = x xb"
   8.715 +  by (import relation RESTRICT_LEMMA)
   8.716 +
   8.717 +consts
   8.718 +  approx :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => ('a => 'b) => bool" 
   8.719 +
   8.720 +defs
   8.721 +  approx_primdef: "approx == %R M x f. f = RESTRICT (%y. M (RESTRICT f R y) y) R x"
   8.722 +
   8.723 +lemma approx_def: "ALL R M x f. approx R M x f = (f = RESTRICT (%y. M (RESTRICT f R y) y) R x)"
   8.724 +  by (import relation approx_def)
   8.725 +
   8.726 +consts
   8.727 +  the_fun :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'a => 'b" 
   8.728 +
   8.729 +defs
   8.730 +  the_fun_primdef: "the_fun == %R M x. Eps (approx R M x)"
   8.731 +
   8.732 +lemma the_fun_def: "ALL R M x. the_fun R M x = Eps (approx R M x)"
   8.733 +  by (import relation the_fun_def)
   8.734 +
   8.735 +constdefs
   8.736 +  WFREC :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'b" 
   8.737 +  "WFREC ==
   8.738 +%R M x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x"
   8.739 +
   8.740 +lemma WFREC_DEF: "ALL R M.
   8.741 +   WFREC R M =
   8.742 +   (%x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x)"
   8.743 +  by (import relation WFREC_DEF)
   8.744 +
   8.745 +lemma WFREC_THM: "ALL R M. WF R --> (ALL x. WFREC R M x = M (RESTRICT (WFREC R M) R x) x)"
   8.746 +  by (import relation WFREC_THM)
   8.747 +
   8.748 +lemma WFREC_COROLLARY: "ALL M R f. f = WFREC R M --> WF R --> (ALL x. f x = M (RESTRICT f R x) x)"
   8.749 +  by (import relation WFREC_COROLLARY)
   8.750 +
   8.751 +lemma WF_RECURSION_THM: "ALL R. WF R --> (ALL M. EX! f. ALL x. f x = M (RESTRICT f R x) x)"
   8.752 +  by (import relation WF_RECURSION_THM)
   8.753 +
   8.754 +;end_setup
   8.755 +
   8.756 +;setup_theory pair
   8.757 +
   8.758 +lemma CURRY_ONE_ONE_THM: "(curry f = curry g) = (f = g)"
   8.759 +  by (import pair CURRY_ONE_ONE_THM)
   8.760 +
   8.761 +lemma UNCURRY_ONE_ONE_THM: "(split f = split g) = (f = g)"
   8.762 +  by (import pair UNCURRY_ONE_ONE_THM)
   8.763 +
   8.764 +lemma pair_Axiom: "ALL f. EX x. ALL xa y. x (xa, y) = f xa y"
   8.765 +  by (import pair pair_Axiom)
   8.766 +
   8.767 +lemma UNCURRY_CONG: "ALL M M' f.
   8.768 +   M = M' & (ALL x y. M' = (x, y) --> f x y = f' x y) -->
   8.769 +   split f M = split f' M'"
   8.770 +  by (import pair UNCURRY_CONG)
   8.771 +
   8.772 +lemma ELIM_PEXISTS: "(EX p. P (fst p) (snd p)) = (EX p1. Ex (P p1))"
   8.773 +  by (import pair ELIM_PEXISTS)
   8.774 +
   8.775 +lemma ELIM_PFORALL: "(ALL p. P (fst p) (snd p)) = (ALL p1. All (P p1))"
   8.776 +  by (import pair ELIM_PFORALL)
   8.777 +
   8.778 +lemma PFORALL_THM: "ALL x. (ALL xa. All (x xa)) = All (split x)"
   8.779 +  by (import pair PFORALL_THM)
   8.780 +
   8.781 +lemma PEXISTS_THM: "ALL x. (EX xa. Ex (x xa)) = Ex (split x)"
   8.782 +  by (import pair PEXISTS_THM)
   8.783 +
   8.784 +lemma LET2_RAND: "ALL (x::'c => 'd) (xa::'a * 'b) xb::'a => 'b => 'c.
   8.785 +   x (Let xa (split xb)) = (let (xa::'a, y::'b) = xa in x (xb xa y))"
   8.786 +  by (import pair LET2_RAND)
   8.787 +
   8.788 +lemma LET2_RATOR: "ALL (x::'a1 * 'a2) (xa::'a1 => 'a2 => 'b => 'c) xb::'b.
   8.789 +   Let x (split xa) xb = (let (x::'a1, y::'a2) = x in xa x y xb)"
   8.790 +  by (import pair LET2_RATOR)
   8.791 +
   8.792 +lemma pair_case_cong: "ALL x xa xb.
   8.793 +   x = xa & (ALL x y. xa = (x, y) --> xb x y = f' x y) -->
   8.794 +   split xb x = split f' xa"
   8.795 +  by (import pair pair_case_cong)
   8.796 +
   8.797 +constdefs
   8.798 +  LEX :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool" 
   8.799 +  "LEX == %R1 R2 (s, t) (u, v). R1 s u | s = u & R2 t v"
   8.800 +
   8.801 +lemma LEX_DEF: "ALL R1 R2. LEX R1 R2 = (%(s, t) (u, v). R1 s u | s = u & R2 t v)"
   8.802 +  by (import pair LEX_DEF)
   8.803 +
   8.804 +lemma WF_LEX: "ALL x xa. WF x & WF xa --> WF (LEX x xa)"
   8.805 +  by (import pair WF_LEX)
   8.806 +
   8.807 +constdefs
   8.808 +  RPROD :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool" 
   8.809 +  "RPROD == %R1 R2 (s, t) (u, v). R1 s u & R2 t v"
   8.810 +
   8.811 +lemma RPROD_DEF: "ALL R1 R2. RPROD R1 R2 = (%(s, t) (u, v). R1 s u & R2 t v)"
   8.812 +  by (import pair RPROD_DEF)
   8.813 +
   8.814 +lemma WF_RPROD: "ALL R Q. WF R & WF Q --> WF (RPROD R Q)"
   8.815 +  by (import pair WF_RPROD)
   8.816 +
   8.817 +;end_setup
   8.818 +
   8.819 +;setup_theory num
   8.820 +
   8.821 +;end_setup
   8.822 +
   8.823 +;setup_theory prim_rec
   8.824 +
   8.825 +lemma LESS_0_0: "0 < Suc 0"
   8.826 +  by (import prim_rec LESS_0_0)
   8.827 +
   8.828 +lemma LESS_LEMMA1: "ALL x xa. x < Suc xa --> x = xa | x < xa"
   8.829 +  by (import prim_rec LESS_LEMMA1)
   8.830 +
   8.831 +lemma LESS_LEMMA2: "ALL m n. m = n | m < n --> m < Suc n"
   8.832 +  by (import prim_rec LESS_LEMMA2)
   8.833 +
   8.834 +lemma LESS_THM: "ALL m n. (m < Suc n) = (m = n | m < n)"
   8.835 +  by (import prim_rec LESS_THM)
   8.836 +
   8.837 +lemma LESS_SUC_IMP: "ALL x xa. x < Suc xa --> x ~= xa --> x < xa"
   8.838 +  by (import prim_rec LESS_SUC_IMP)
   8.839 +
   8.840 +lemma EQ_LESS: "ALL n. Suc m = n --> m < n"
   8.841 +  by (import prim_rec EQ_LESS)
   8.842 +
   8.843 +lemma NOT_LESS_EQ: "ALL (m::nat) n::nat. m = n --> ~ m < n"
   8.844 +  by (import prim_rec NOT_LESS_EQ)
   8.845 +
   8.846 +constdefs
   8.847 +  SIMP_REC_REL :: "(nat => 'a) => 'a => ('a => 'a) => nat => bool" 
   8.848 +  "SIMP_REC_REL == %fun x f n. fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m))"
   8.849 +
   8.850 +lemma SIMP_REC_REL: "ALL fun x f n.
   8.851 +   SIMP_REC_REL fun x f n = (fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m)))"
   8.852 +  by (import prim_rec SIMP_REC_REL)
   8.853 +
   8.854 +lemma SIMP_REC_EXISTS: "ALL x f n. EX fun. SIMP_REC_REL fun x f n"
   8.855 +  by (import prim_rec SIMP_REC_EXISTS)
   8.856 +
   8.857 +lemma SIMP_REC_REL_UNIQUE: "ALL x xa xb xc xd xe.
   8.858 +   SIMP_REC_REL xb x xa xd & SIMP_REC_REL xc x xa xe -->
   8.859 +   (ALL n. n < xd & n < xe --> xb n = xc n)"
   8.860 +  by (import prim_rec SIMP_REC_REL_UNIQUE)
   8.861 +
   8.862 +lemma SIMP_REC_REL_UNIQUE_RESULT: "ALL x f n. EX! y. EX g. SIMP_REC_REL g x f (Suc n) & y = g n"
   8.863 +  by (import prim_rec SIMP_REC_REL_UNIQUE_RESULT)
   8.864 +
   8.865 +consts
   8.866 +  SIMP_REC :: "'a => ('a => 'a) => nat => 'a" 
   8.867 +
   8.868 +specification (SIMP_REC) SIMP_REC: "ALL x f' n. EX g. SIMP_REC_REL g x f' (Suc n) & SIMP_REC x f' n = g n"
   8.869 +  by (import prim_rec SIMP_REC)
   8.870 +
   8.871 +lemma LESS_SUC_SUC: "ALL m. m < Suc m & m < Suc (Suc m)"
   8.872 +  by (import prim_rec LESS_SUC_SUC)
   8.873 +
   8.874 +lemma SIMP_REC_THM: "ALL x f.
   8.875 +   SIMP_REC x f 0 = x & (ALL m. SIMP_REC x f (Suc m) = f (SIMP_REC x f m))"
   8.876 +  by (import prim_rec SIMP_REC_THM)
   8.877 +
   8.878 +constdefs
   8.879 +  PRE :: "nat => nat" 
   8.880 +  "PRE == %m. if m = 0 then 0 else SOME n. m = Suc n"
   8.881 +
   8.882 +lemma PRE_DEF: "ALL m. PRE m = (if m = 0 then 0 else SOME n. m = Suc n)"
   8.883 +  by (import prim_rec PRE_DEF)
   8.884 +
   8.885 +lemma PRE: "PRE 0 = 0 & (ALL m. PRE (Suc m) = m)"
   8.886 +  by (import prim_rec PRE)
   8.887 +
   8.888 +constdefs
   8.889 +  PRIM_REC_FUN :: "'a => ('a => nat => 'a) => nat => nat => 'a" 
   8.890 +  "PRIM_REC_FUN == %x f. SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
   8.891 +
   8.892 +lemma PRIM_REC_FUN: "ALL x f. PRIM_REC_FUN x f = SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
   8.893 +  by (import prim_rec PRIM_REC_FUN)
   8.894 +
   8.895 +lemma PRIM_REC_EQN: "ALL x f.
   8.896 +   (ALL n. PRIM_REC_FUN x f 0 n = x) &
   8.897 +   (ALL m n. PRIM_REC_FUN x f (Suc m) n = f (PRIM_REC_FUN x f m (PRE n)) n)"
   8.898 +  by (import prim_rec PRIM_REC_EQN)
   8.899 +
   8.900 +constdefs
   8.901 +  PRIM_REC :: "'a => ('a => nat => 'a) => nat => 'a" 
   8.902 +  "PRIM_REC == %x f m. PRIM_REC_FUN x f m (PRE m)"
   8.903 +
   8.904 +lemma PRIM_REC: "ALL x f m. PRIM_REC x f m = PRIM_REC_FUN x f m (PRE m)"
   8.905 +  by (import prim_rec PRIM_REC)
   8.906 +
   8.907 +lemma PRIM_REC_THM: "ALL x f.
   8.908 +   PRIM_REC x f 0 = x & (ALL m. PRIM_REC x f (Suc m) = f (PRIM_REC x f m) m)"
   8.909 +  by (import prim_rec PRIM_REC_THM)
   8.910 +
   8.911 +lemma DC: "ALL P R a.
   8.912 +   P a & (ALL x. P x --> (EX y. P y & R x y)) -->
   8.913 +   (EX x. x 0 = a & (ALL n. P (x n) & R (x n) (x (Suc n))))"
   8.914 +  by (import prim_rec DC)
   8.915 +
   8.916 +lemma num_Axiom_old: "ALL e f. EX! fn1. fn1 0 = e & (ALL n. fn1 (Suc n) = f (fn1 n) n)"
   8.917 +  by (import prim_rec num_Axiom_old)
   8.918 +
   8.919 +lemma num_Axiom: "ALL e f. EX x. x 0 = e & (ALL n. x (Suc n) = f n (x n))"
   8.920 +  by (import prim_rec num_Axiom)
   8.921 +
   8.922 +consts
   8.923 +  wellfounded :: "('a => 'a => bool) => bool" 
   8.924 +
   8.925 +defs
   8.926 +  wellfounded_primdef: "wellfounded == %R. ~ (EX f. ALL n. R (f (Suc n)) (f n))"
   8.927 +
   8.928 +lemma wellfounded_def: "ALL R. wellfounded R = (~ (EX f. ALL n. R (f (Suc n)) (f n)))"
   8.929 +  by (import prim_rec wellfounded_def)
   8.930 +
   8.931 +lemma WF_IFF_WELLFOUNDED: "ALL R. WF R = wellfounded R"
   8.932 +  by (import prim_rec WF_IFF_WELLFOUNDED)
   8.933 +
   8.934 +lemma WF_PRED: "WF (%x y. y = Suc x)"
   8.935 +  by (import prim_rec WF_PRED)
   8.936 +
   8.937 +lemma WF_LESS: "(WF::(nat => nat => bool) => bool) (op <::nat => nat => bool)"
   8.938 +  by (import prim_rec WF_LESS)
   8.939 +
   8.940 +consts
   8.941 +  measure :: "('a => nat) => 'a => 'a => bool" 
   8.942 +
   8.943 +defs
   8.944 +  measure_primdef: "prim_rec.measure == relation.inv_image op <"
   8.945 +
   8.946 +lemma measure_def: "prim_rec.measure = relation.inv_image op <"
   8.947 +  by (import prim_rec measure_def)
   8.948 +
   8.949 +lemma WF_measure: "ALL x. WF (prim_rec.measure x)"
   8.950 +  by (import prim_rec WF_measure)
   8.951 +
   8.952 +lemma measure_thm: "ALL x xa xb. prim_rec.measure x xa xb = (x xa < x xb)"
   8.953 +  by (import prim_rec measure_thm)
   8.954 +
   8.955 +;end_setup
   8.956 +
   8.957 +;setup_theory arithmetic
   8.958 +
   8.959 +constdefs
   8.960 +  nat_elim__magic :: "nat => nat" 
   8.961 +  "nat_elim__magic == %n. n"
   8.962 +
   8.963 +lemma nat_elim__magic: "ALL n. nat_elim__magic n = n"
   8.964 +  by (import arithmetic nat_elim__magic)
   8.965 +
   8.966 +consts
   8.967 +  EVEN :: "nat => bool" 
   8.968 +
   8.969 +specification (EVEN) EVEN: "EVEN 0 = True & (ALL n. EVEN (Suc n) = (~ EVEN n))"
   8.970 +  by (import arithmetic EVEN)
   8.971 +
   8.972 +consts
   8.973 +  ODD :: "nat => bool" 
   8.974 +
   8.975 +specification (ODD) ODD: "ODD 0 = False & (ALL n. ODD (Suc n) = (~ ODD n))"
   8.976 +  by (import arithmetic ODD)
   8.977 +
   8.978 +lemma TWO: "2 = Suc 1"
   8.979 +  by (import arithmetic TWO)
   8.980 +
   8.981 +lemma NORM_0: "(0::nat) = (0::nat)"
   8.982 +  by (import arithmetic NORM_0)
   8.983 +
   8.984 +lemma num_case_compute: "ALL n. nat_case f g n = (if n = 0 then f else g (PRE n))"
   8.985 +  by (import arithmetic num_case_compute)
   8.986 +
   8.987 +lemma ADD_CLAUSES: "0 + m = m & m + 0 = m & Suc m + n = Suc (m + n) & m + Suc n = Suc (m + n)"
   8.988 +  by (import arithmetic ADD_CLAUSES)
   8.989 +
   8.990 +lemma LESS_ADD: "ALL (m::nat) n::nat. n < m --> (EX p::nat. p + n = m)"
   8.991 +  by (import arithmetic LESS_ADD)
   8.992 +
   8.993 +lemma LESS_ANTISYM: "ALL (m::nat) n::nat. ~ (m < n & n < m)"
   8.994 +  by (import arithmetic LESS_ANTISYM)
   8.995 +
   8.996 +lemma LESS_LESS_SUC: "ALL x xa. ~ (x < xa & xa < Suc x)"
   8.997 +  by (import arithmetic LESS_LESS_SUC)
   8.998 +
   8.999 +lemma FUN_EQ_LEMMA: "ALL f x1 x2. f x1 & ~ f x2 --> x1 ~= x2"
  8.1000 +  by (import arithmetic FUN_EQ_LEMMA)
  8.1001 +
  8.1002 +lemma LESS_NOT_SUC: "ALL m n. m < n & n ~= Suc m --> Suc m < n"
  8.1003 +  by (import arithmetic LESS_NOT_SUC)
  8.1004 +
  8.1005 +lemma LESS_0_CASES: "ALL m::nat. (0::nat) = m | (0::nat) < m"
  8.1006 +  by (import arithmetic LESS_0_CASES)
  8.1007 +
  8.1008 +lemma LESS_CASES_IMP: "ALL (m::nat) n::nat. ~ m < n & m ~= n --> n < m"
  8.1009 +  by (import arithmetic LESS_CASES_IMP)
  8.1010 +
  8.1011 +lemma LESS_CASES: "ALL (m::nat) n::nat. m < n | n <= m"
  8.1012 +  by (import arithmetic LESS_CASES)
  8.1013 +
  8.1014 +lemma LESS_EQ_SUC_REFL: "ALL m. m <= Suc m"
  8.1015 +  by (import arithmetic LESS_EQ_SUC_REFL)
  8.1016 +
  8.1017 +lemma LESS_ADD_NONZERO: "ALL (m::nat) n::nat. n ~= (0::nat) --> m < m + n"
  8.1018 +  by (import arithmetic LESS_ADD_NONZERO)
  8.1019 +
  8.1020 +lemma LESS_EQ_ANTISYM: "ALL (x::nat) xa::nat. ~ (x < xa & xa <= x)"
  8.1021 +  by (import arithmetic LESS_EQ_ANTISYM)
  8.1022 +
  8.1023 +lemma SUB_0: "ALL m::nat. (0::nat) - m = (0::nat) & m - (0::nat) = m"
  8.1024 +  by (import arithmetic SUB_0)
  8.1025 +
  8.1026 +lemma SUC_SUB1: "ALL m. Suc m - 1 = m"
  8.1027 +  by (import arithmetic SUC_SUB1)
  8.1028 +
  8.1029 +lemma PRE_SUB1: "ALL m. PRE m = m - 1"
  8.1030 +  by (import arithmetic PRE_SUB1)
  8.1031 +
  8.1032 +lemma MULT_CLAUSES: "ALL x xa.
  8.1033 +   0 * x = 0 &
  8.1034 +   x * 0 = 0 &
  8.1035 +   1 * x = x &
  8.1036 +   x * 1 = x & Suc x * xa = x * xa + xa & x * Suc xa = x + x * xa"
  8.1037 +  by (import arithmetic MULT_CLAUSES)
  8.1038 +
  8.1039 +lemma PRE_SUB: "ALL m n. PRE (m - n) = PRE m - n"
  8.1040 +  by (import arithmetic PRE_SUB)
  8.1041 +
  8.1042 +lemma ADD_EQ_1: "ALL (m::nat) n::nat.
  8.1043 +   (m + n = (1::nat)) =
  8.1044 +   (m = (1::nat) & n = (0::nat) | m = (0::nat) & n = (1::nat))"
  8.1045 +  by (import arithmetic ADD_EQ_1)
  8.1046 +
  8.1047 +lemma ADD_INV_0_EQ: "ALL (m::nat) n::nat. (m + n = m) = (n = (0::nat))"
  8.1048 +  by (import arithmetic ADD_INV_0_EQ)
  8.1049 +
  8.1050 +lemma PRE_SUC_EQ: "ALL m n. 0 < n --> (m = PRE n) = (Suc m = n)"
  8.1051 +  by (import arithmetic PRE_SUC_EQ)
  8.1052 +
  8.1053 +lemma INV_PRE_EQ: "ALL m n. 0 < m & 0 < n --> (PRE m = PRE n) = (m = n)"
  8.1054 +  by (import arithmetic INV_PRE_EQ)
  8.1055 +
  8.1056 +lemma LESS_SUC_NOT: "ALL m n. m < n --> ~ n < Suc m"
  8.1057 +  by (import arithmetic LESS_SUC_NOT)
  8.1058 +
  8.1059 +lemma ADD_EQ_SUB: "ALL (m::nat) (n::nat) p::nat. n <= p --> (m + n = p) = (m = p - n)"
  8.1060 +  by (import arithmetic ADD_EQ_SUB)
  8.1061 +
  8.1062 +lemma LESS_ADD_1: "ALL (x::nat) xa::nat. xa < x --> (EX xb::nat. x = xa + (xb + (1::nat)))"
  8.1063 +  by (import arithmetic LESS_ADD_1)
  8.1064 +
  8.1065 +lemma NOT_ODD_EQ_EVEN: "ALL n m. Suc (n + n) ~= m + m"
  8.1066 +  by (import arithmetic NOT_ODD_EQ_EVEN)
  8.1067 +
  8.1068 +lemma MULT_SUC_EQ: "ALL p m n. (n * Suc p = m * Suc p) = (n = m)"
  8.1069 +  by (import arithmetic MULT_SUC_EQ)
  8.1070 +
  8.1071 +lemma MULT_EXP_MONO: "ALL p q n m. (n * Suc q ^ p = m * Suc q ^ p) = (n = m)"
  8.1072 +  by (import arithmetic MULT_EXP_MONO)
  8.1073 +
  8.1074 +lemma LESS_ADD_SUC: "ALL m n. m < m + Suc n"
  8.1075 +  by (import arithmetic LESS_ADD_SUC)
  8.1076 +
  8.1077 +lemma LESS_OR_EQ_ADD: "ALL (n::nat) m::nat. n < m | (EX p::nat. n = p + m)"
  8.1078 +  by (import arithmetic LESS_OR_EQ_ADD)
  8.1079 +
  8.1080 +lemma WOP: "ALL P::nat => bool. Ex P --> (EX n::nat. P n & (ALL m<n. ~ P m))"
  8.1081 +  by (import arithmetic WOP)
  8.1082 +
  8.1083 +lemma INV_PRE_LESS: "ALL m. 0 < m --> (ALL n. (PRE m < PRE n) = (m < n))"
  8.1084 +  by (import arithmetic INV_PRE_LESS)
  8.1085 +
  8.1086 +lemma INV_PRE_LESS_EQ: "ALL n. 0 < n --> (ALL m. (PRE m <= PRE n) = (m <= n))"
  8.1087 +  by (import arithmetic INV_PRE_LESS_EQ)
  8.1088 +
  8.1089 +lemma SUB_EQ_EQ_0: "ALL (m::nat) n::nat. (m - n = m) = (m = (0::nat) | n = (0::nat))"
  8.1090 +  by (import arithmetic SUB_EQ_EQ_0)
  8.1091 +
  8.1092 +lemma SUB_LESS_OR: "ALL (m::nat) n::nat. n < m --> n <= m - (1::nat)"
  8.1093 +  by (import arithmetic SUB_LESS_OR)
  8.1094 +
  8.1095 +lemma LESS_SUB_ADD_LESS: "ALL (n::nat) (m::nat) i::nat. i < n - m --> i + m < n"
  8.1096 +  by (import arithmetic LESS_SUB_ADD_LESS)
  8.1097 +
  8.1098 +lemma LESS_EQ_SUB_LESS: "ALL (x::nat) xa::nat. xa <= x --> (ALL c::nat. (x - xa < c) = (x < xa + c))"
  8.1099 +  by (import arithmetic LESS_EQ_SUB_LESS)
  8.1100 +
  8.1101 +lemma NOT_SUC_LESS_EQ: "ALL x xa. (~ Suc x <= xa) = (xa <= x)"
  8.1102 +  by (import arithmetic NOT_SUC_LESS_EQ)
  8.1103 +
  8.1104 +lemma SUB_LESS_EQ_ADD: "ALL (m::nat) p::nat. m <= p --> (ALL n::nat. (p - m <= n) = (p <= m + n))"
  8.1105 +  by (import arithmetic SUB_LESS_EQ_ADD)
  8.1106 +
  8.1107 +lemma SUB_CANCEL: "ALL (x::nat) (xa::nat) xb::nat.
  8.1108 +   xa <= x & xb <= x --> (x - xa = x - xb) = (xa = xb)"
  8.1109 +  by (import arithmetic SUB_CANCEL)
  8.1110 +
  8.1111 +lemma NOT_EXP_0: "ALL m n. Suc n ^ m ~= 0"
  8.1112 +  by (import arithmetic NOT_EXP_0)
  8.1113 +
  8.1114 +lemma ZERO_LESS_EXP: "ALL m n. 0 < Suc n ^ m"
  8.1115 +  by (import arithmetic ZERO_LESS_EXP)
  8.1116 +
  8.1117 +lemma ODD_OR_EVEN: "ALL x. EX xa. x = Suc (Suc 0) * xa | x = Suc (Suc 0) * xa + 1"
  8.1118 +  by (import arithmetic ODD_OR_EVEN)
  8.1119 +
  8.1120 +lemma LESS_EXP_SUC_MONO: "ALL n m. Suc (Suc m) ^ n < Suc (Suc m) ^ Suc n"
  8.1121 +  by (import arithmetic LESS_EXP_SUC_MONO)
  8.1122 +
  8.1123 +lemma LESS_LESS_CASES: "ALL (m::nat) n::nat. m = n | m < n | n < m"
  8.1124 +  by (import arithmetic LESS_LESS_CASES)
  8.1125 +
  8.1126 +lemma LESS_EQUAL_ADD: "ALL (m::nat) n::nat. m <= n --> (EX p::nat. n = m + p)"
  8.1127 +  by (import arithmetic LESS_EQUAL_ADD)
  8.1128 +
  8.1129 +lemma LESS_EQ_EXISTS: "ALL (m::nat) n::nat. (m <= n) = (EX p::nat. n = m + p)"
  8.1130 +  by (import arithmetic LESS_EQ_EXISTS)
  8.1131 +
  8.1132 +lemma MULT_EQ_1: "ALL (x::nat) y::nat. (x * y = (1::nat)) = (x = (1::nat) & y = (1::nat))"
  8.1133 +  by (import arithmetic MULT_EQ_1)
  8.1134 +
  8.1135 +consts
  8.1136 +  FACT :: "nat => nat" 
  8.1137 +
  8.1138 +specification (FACT) FACT: "FACT 0 = 1 & (ALL n. FACT (Suc n) = Suc n * FACT n)"
  8.1139 +  by (import arithmetic FACT)
  8.1140 +
  8.1141 +lemma FACT_LESS: "ALL n. 0 < FACT n"
  8.1142 +  by (import arithmetic FACT_LESS)
  8.1143 +
  8.1144 +lemma EVEN_ODD: "ALL n. EVEN n = (~ ODD n)"
  8.1145 +  by (import arithmetic EVEN_ODD)
  8.1146 +
  8.1147 +lemma ODD_EVEN: "ALL x. ODD x = (~ EVEN x)"
  8.1148 +  by (import arithmetic ODD_EVEN)
  8.1149 +
  8.1150 +lemma EVEN_OR_ODD: "ALL x. EVEN x | ODD x"
  8.1151 +  by (import arithmetic EVEN_OR_ODD)
  8.1152 +
  8.1153 +lemma EVEN_AND_ODD: "ALL x. ~ (EVEN x & ODD x)"
  8.1154 +  by (import arithmetic EVEN_AND_ODD)
  8.1155 +
  8.1156 +lemma EVEN_ADD: "ALL m n. EVEN (m + n) = (EVEN m = EVEN n)"
  8.1157 +  by (import arithmetic EVEN_ADD)
  8.1158 +
  8.1159 +lemma EVEN_MULT: "ALL m n. EVEN (m * n) = (EVEN m | EVEN n)"
  8.1160 +  by (import arithmetic EVEN_MULT)
  8.1161 +
  8.1162 +lemma ODD_ADD: "ALL m n. ODD (m + n) = (ODD m ~= ODD n)"
  8.1163 +  by (import arithmetic ODD_ADD)
  8.1164 +
  8.1165 +lemma ODD_MULT: "ALL m n. ODD (m * n) = (ODD m & ODD n)"
  8.1166 +  by (import arithmetic ODD_MULT)
  8.1167 +
  8.1168 +lemma EVEN_DOUBLE: "ALL n. EVEN (2 * n)"
  8.1169 +  by (import arithmetic EVEN_DOUBLE)
  8.1170 +
  8.1171 +lemma ODD_DOUBLE: "ALL x. ODD (Suc (2 * x))"
  8.1172 +  by (import arithmetic ODD_DOUBLE)
  8.1173 +
  8.1174 +lemma EVEN_ODD_EXISTS: "ALL x. (EVEN x --> (EX m. x = 2 * m)) & (ODD x --> (EX m. x = Suc (2 * m)))"
  8.1175 +  by (import arithmetic EVEN_ODD_EXISTS)
  8.1176 +
  8.1177 +lemma EVEN_EXISTS: "ALL n. EVEN n = (EX m. n = 2 * m)"
  8.1178 +  by (import arithmetic EVEN_EXISTS)
  8.1179 +
  8.1180 +lemma ODD_EXISTS: "ALL n. ODD n = (EX m. n = Suc (2 * m))"
  8.1181 +  by (import arithmetic ODD_EXISTS)
  8.1182 +
  8.1183 +lemma NOT_SUC_LESS_EQ_0: "ALL x. ~ Suc x <= 0"
  8.1184 +  by (import arithmetic NOT_SUC_LESS_EQ_0)
  8.1185 +
  8.1186 +lemma NOT_LEQ: "ALL x xa. (~ x <= xa) = (Suc xa <= x)"
  8.1187 +  by (import arithmetic NOT_LEQ)
  8.1188 +
  8.1189 +lemma NOT_NUM_EQ: "ALL x xa. (x ~= xa) = (Suc x <= xa | Suc xa <= x)"
  8.1190 +  by (import arithmetic NOT_NUM_EQ)
  8.1191 +
  8.1192 +lemma NOT_GREATER_EQ: "ALL x xa. (~ xa <= x) = (Suc x <= xa)"
  8.1193 +  by (import arithmetic NOT_GREATER_EQ)
  8.1194 +
  8.1195 +lemma SUC_ADD_SYM: "ALL m n. Suc (m + n) = Suc n + m"
  8.1196 +  by (import arithmetic SUC_ADD_SYM)
  8.1197 +
  8.1198 +lemma NOT_SUC_ADD_LESS_EQ: "ALL m n. ~ Suc (m + n) <= m"
  8.1199 +  by (import arithmetic NOT_SUC_ADD_LESS_EQ)
  8.1200 +
  8.1201 +lemma SUB_LEFT_ADD: "ALL (m::nat) (n::nat) p::nat.
  8.1202 +   m + (n - p) = (if n <= p then m else m + n - p)"
  8.1203 +  by (import arithmetic SUB_LEFT_ADD)
  8.1204 +
  8.1205 +lemma SUB_RIGHT_ADD: "ALL (m::nat) (n::nat) p::nat. m - n + p = (if m <= n then p else m + p - n)"
  8.1206 +  by (import arithmetic SUB_RIGHT_ADD)
  8.1207 +
  8.1208 +lemma SUB_LEFT_SUB: "ALL (m::nat) (n::nat) p::nat.
  8.1209 +   m - (n - p) = (if n <= p then m else m + p - n)"
  8.1210 +  by (import arithmetic SUB_LEFT_SUB)
  8.1211 +
  8.1212 +lemma SUB_LEFT_SUC: "ALL m n. Suc (m - n) = (if m <= n then Suc 0 else Suc m - n)"
  8.1213 +  by (import arithmetic SUB_LEFT_SUC)
  8.1214 +
  8.1215 +lemma SUB_LEFT_LESS_EQ: "ALL (m::nat) (n::nat) p::nat. (m <= n - p) = (m + p <= n | m <= (0::nat))"
  8.1216 +  by (import arithmetic SUB_LEFT_LESS_EQ)
  8.1217 +
  8.1218 +lemma SUB_RIGHT_LESS_EQ: "ALL (m::nat) (n::nat) p::nat. (m - n <= p) = (m <= n + p)"
  8.1219 +  by (import arithmetic SUB_RIGHT_LESS_EQ)
  8.1220 +
  8.1221 +lemma SUB_RIGHT_LESS: "ALL (m::nat) (n::nat) p::nat. (m - n < p) = (m < n + p & (0::nat) < p)"
  8.1222 +  by (import arithmetic SUB_RIGHT_LESS)
  8.1223 +
  8.1224 +lemma SUB_RIGHT_GREATER_EQ: "ALL (m::nat) (n::nat) p::nat. (p <= m - n) = (n + p <= m | p <= (0::nat))"
  8.1225 +  by (import arithmetic SUB_RIGHT_GREATER_EQ)
  8.1226 +
  8.1227 +lemma SUB_LEFT_GREATER: "ALL (m::nat) (n::nat) p::nat. (n - p < m) = (n < m + p & (0::nat) < m)"
  8.1228 +  by (import arithmetic SUB_LEFT_GREATER)
  8.1229 +
  8.1230 +lemma SUB_RIGHT_GREATER: "ALL (m::nat) (n::nat) p::nat. (p < m - n) = (n + p < m)"
  8.1231 +  by (import arithmetic SUB_RIGHT_GREATER)
  8.1232 +
  8.1233 +lemma SUB_LEFT_EQ: "ALL (m::nat) (n::nat) p::nat.
  8.1234 +   (m = n - p) = (m + p = n | m <= (0::nat) & n <= p)"
  8.1235 +  by (import arithmetic SUB_LEFT_EQ)
  8.1236 +
  8.1237 +lemma SUB_RIGHT_EQ: "ALL (m::nat) (n::nat) p::nat.
  8.1238 +   (m - n = p) = (m = n + p | m <= n & p <= (0::nat))"
  8.1239 +  by (import arithmetic SUB_RIGHT_EQ)
  8.1240 +
  8.1241 +lemma LE: "(ALL n::nat. (n <= (0::nat)) = (n = (0::nat))) &
  8.1242 +(ALL (m::nat) n::nat. (m <= Suc n) = (m = Suc n | m <= n))"
  8.1243 +  by (import arithmetic LE)
  8.1244 +
  8.1245 +lemma DA: "ALL (k::nat) n::nat.
  8.1246 +   (0::nat) < n --> (EX (x::nat) q::nat. k = q * n + x & x < n)"
  8.1247 +  by (import arithmetic DA)
  8.1248 +
  8.1249 +lemma DIV_LESS_EQ: "ALL n::nat. (0::nat) < n --> (ALL k::nat. k div n <= k)"
  8.1250 +  by (import arithmetic DIV_LESS_EQ)
  8.1251 +
  8.1252 +lemma DIV_UNIQUE: "ALL (n::nat) (k::nat) q::nat.
  8.1253 +   (EX r::nat. k = q * n + r & r < n) --> k div n = q"
  8.1254 +  by (import arithmetic DIV_UNIQUE)
  8.1255 +
  8.1256 +lemma MOD_UNIQUE: "ALL (n::nat) (k::nat) r::nat.
  8.1257 +   (EX q::nat. k = q * n + r & r < n) --> k mod n = r"
  8.1258 +  by (import arithmetic MOD_UNIQUE)
  8.1259 +
  8.1260 +lemma DIV_MULT: "ALL (n::nat) r::nat. r < n --> (ALL q::nat. (q * n + r) div n = q)"
  8.1261 +  by (import arithmetic DIV_MULT)
  8.1262 +
  8.1263 +lemma MOD_EQ_0: "ALL n::nat. (0::nat) < n --> (ALL k::nat. k * n mod n = (0::nat))"
  8.1264 +  by (import arithmetic MOD_EQ_0)
  8.1265 +
  8.1266 +lemma ZERO_MOD: "ALL n::nat. (0::nat) < n --> (0::nat) mod n = (0::nat)"
  8.1267 +  by (import arithmetic ZERO_MOD)
  8.1268 +
  8.1269 +lemma ZERO_DIV: "ALL n::nat. (0::nat) < n --> (0::nat) div n = (0::nat)"
  8.1270 +  by (import arithmetic ZERO_DIV)
  8.1271 +
  8.1272 +lemma MOD_MULT: "ALL (n::nat) r::nat. r < n --> (ALL q::nat. (q * n + r) mod n = r)"
  8.1273 +  by (import arithmetic MOD_MULT)
  8.1274 +
  8.1275 +lemma MOD_TIMES: "ALL n::nat.
  8.1276 +   (0::nat) < n --> (ALL (q::nat) r::nat. (q * n + r) mod n = r mod n)"
  8.1277 +  by (import arithmetic MOD_TIMES)
  8.1278 +
  8.1279 +lemma MOD_PLUS: "ALL n::nat.
  8.1280 +   (0::nat) < n -->
  8.1281 +   (ALL (j::nat) k::nat. (j mod n + k mod n) mod n = (j + k) mod n)"
  8.1282 +  by (import arithmetic MOD_PLUS)
  8.1283 +
  8.1284 +lemma MOD_MOD: "ALL n::nat. (0::nat) < n --> (ALL k::nat. k mod n mod n = k mod n)"
  8.1285 +  by (import arithmetic MOD_MOD)
  8.1286 +
  8.1287 +lemma ADD_DIV_ADD_DIV: "ALL x::nat.
  8.1288 +   (0::nat) < x -->
  8.1289 +   (ALL (xa::nat) r::nat. (xa * x + r) div x = xa + r div x)"
  8.1290 +  by (import arithmetic ADD_DIV_ADD_DIV)
  8.1291 +
  8.1292 +lemma MOD_MULT_MOD: "ALL (m::nat) n::nat.
  8.1293 +   (0::nat) < n & (0::nat) < m -->
  8.1294 +   (ALL x::nat. x mod (n * m) mod n = x mod n)"
  8.1295 +  by (import arithmetic MOD_MULT_MOD)
  8.1296 +
  8.1297 +lemma DIVMOD_ID: "ALL n::nat. (0::nat) < n --> n div n = (1::nat) & n mod n = (0::nat)"
  8.1298 +  by (import arithmetic DIVMOD_ID)
  8.1299 +
  8.1300 +lemma DIV_DIV_DIV_MULT: "ALL (x::nat) xa::nat.
  8.1301 +   (0::nat) < x & (0::nat) < xa -->
  8.1302 +   (ALL xb::nat. xb div x div xa = xb div (x * xa))"
  8.1303 +  by (import arithmetic DIV_DIV_DIV_MULT)
  8.1304 +
  8.1305 +lemma DIV_P: "ALL (P::nat => bool) (p::nat) q::nat.
  8.1306 +   (0::nat) < q -->
  8.1307 +   P (p div q) = (EX (k::nat) r::nat. p = k * q + r & r < q & P k)"
  8.1308 +  by (import arithmetic DIV_P)
  8.1309 +
  8.1310 +lemma MOD_P: "ALL (P::nat => bool) (p::nat) q::nat.
  8.1311 +   (0::nat) < q -->
  8.1312 +   P (p mod q) = (EX (k::nat) r::nat. p = k * q + r & r < q & P r)"
  8.1313 +  by (import arithmetic MOD_P)
  8.1314 +
  8.1315 +lemma MOD_TIMES2: "ALL n::nat.
  8.1316 +   (0::nat) < n -->
  8.1317 +   (ALL (j::nat) k::nat. j mod n * (k mod n) mod n = j * k mod n)"
  8.1318 +  by (import arithmetic MOD_TIMES2)
  8.1319 +
  8.1320 +lemma MOD_COMMON_FACTOR: "ALL (n::nat) (p::nat) q::nat.
  8.1321 +   (0::nat) < n & (0::nat) < q --> n * (p mod q) = n * p mod (n * q)"
  8.1322 +  by (import arithmetic MOD_COMMON_FACTOR)
  8.1323 +
  8.1324 +lemma num_case_cong: "ALL M M' b f.
  8.1325 +   M = M' & (M' = 0 --> b = b') & (ALL n. M' = Suc n --> f n = f' n) -->
  8.1326 +   nat_case b f M = nat_case b' f' M'"
  8.1327 +  by (import arithmetic num_case_cong)
  8.1328 +
  8.1329 +lemma SUC_ELIM_THM: "ALL P. (ALL n. P (Suc n) n) = (ALL n. 0 < n --> P n (n - 1))"
  8.1330 +  by (import arithmetic SUC_ELIM_THM)
  8.1331 +
  8.1332 +lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) =
  8.1333 +(ALL x::nat. (b = a + x --> P (0::nat)) & (a = b + x --> P x))"
  8.1334 +  by (import arithmetic SUB_ELIM_THM)
  8.1335 +
  8.1336 +lemma PRE_ELIM_THM: "P (PRE n) = (ALL m. (n = 0 --> P 0) & (n = Suc m --> P m))"
  8.1337 +  by (import arithmetic PRE_ELIM_THM)
  8.1338 +
  8.1339 +lemma MULT_INCREASES: "ALL m n. 1 < m & 0 < n --> Suc n <= m * n"
  8.1340 +  by (import arithmetic MULT_INCREASES)
  8.1341 +
  8.1342 +lemma EXP_ALWAYS_BIG_ENOUGH: "ALL b::nat. (1::nat) < b --> (ALL n::nat. EX m::nat. n <= b ^ m)"
  8.1343 +  by (import arithmetic EXP_ALWAYS_BIG_ENOUGH)
  8.1344 +
  8.1345 +lemma EXP_EQ_0: "ALL (n::nat) m::nat. (n ^ m = (0::nat)) = (n = (0::nat) & (0::nat) < m)"
  8.1346 +  by (import arithmetic EXP_EQ_0)
  8.1347 +
  8.1348 +lemma EXP_1: "ALL x::nat. (1::nat) ^ x = (1::nat) & x ^ (1::nat) = x"
  8.1349 +  by (import arithmetic EXP_1)
  8.1350 +
  8.1351 +lemma EXP_EQ_1: "ALL (n::nat) m::nat. (n ^ m = (1::nat)) = (n = (1::nat) | m = (0::nat))"
  8.1352 +  by (import arithmetic EXP_EQ_1)
  8.1353 +
  8.1354 +lemma MIN_MAX_EQ: "ALL (x::nat) xa::nat. (min x xa = max x xa) = (x = xa)"
  8.1355 +  by (import arithmetic MIN_MAX_EQ)
  8.1356 +
  8.1357 +lemma MIN_MAX_LT: "ALL (x::nat) xa::nat. (min x xa < max x xa) = (x ~= xa)"
  8.1358 +  by (import arithmetic MIN_MAX_LT)
  8.1359 +
  8.1360 +lemma MIN_MAX_PRED: "ALL (P::nat => bool) (m::nat) n::nat.
  8.1361 +   P m & P n --> P (min m n) & P (max m n)"
  8.1362 +  by (import arithmetic MIN_MAX_PRED)
  8.1363 +
  8.1364 +lemma MIN_LT: "ALL (x::nat) xa::nat.
  8.1365 +   (min xa x < xa) = (xa ~= x & min xa x = x) &
  8.1366 +   (min xa x < x) = (xa ~= x & min xa x = xa) &
  8.1367 +   (xa < min xa x) = False & (x < min xa x) = False"
  8.1368 +  by (import arithmetic MIN_LT)
  8.1369 +
  8.1370 +lemma MAX_LT: "ALL (x::nat) xa::nat.
  8.1371 +   (xa < max xa x) = (xa ~= x & max xa x = x) &
  8.1372 +   (x < max xa x) = (xa ~= x & max xa x = xa) &
  8.1373 +   (max xa x < xa) = False & (max xa x < x) = False"
  8.1374 +  by (import arithmetic MAX_LT)
  8.1375 +
  8.1376 +lemma MIN_LE: "ALL (x::nat) xa::nat. min xa x <= xa & min xa x <= x"
  8.1377 +  by (import arithmetic MIN_LE)
  8.1378 +
  8.1379 +lemma MAX_LE: "ALL (x::nat) xa::nat. xa <= max xa x & x <= max xa x"
  8.1380 +  by (import arithmetic MAX_LE)
  8.1381 +
  8.1382 +lemma MIN_0: "ALL x::nat. min x (0::nat) = (0::nat) & min (0::nat) x = (0::nat)"
  8.1383 +  by (import arithmetic MIN_0)
  8.1384 +
  8.1385 +lemma MAX_0: "ALL x::nat. max x (0::nat) = x & max (0::nat) x = x"
  8.1386 +  by (import arithmetic MAX_0)
  8.1387 +
  8.1388 +lemma EXISTS_GREATEST: "ALL P::nat => bool.
  8.1389 +   (Ex P & (EX x::nat. ALL y::nat. x < y --> ~ P y)) =
  8.1390 +   (EX x::nat. P x & (ALL y::nat. x < y --> ~ P y))"
  8.1391 +  by (import arithmetic EXISTS_GREATEST)
  8.1392 +
  8.1393 +;end_setup
  8.1394 +
  8.1395 +;setup_theory hrat
  8.1396 +
  8.1397 +constdefs
  8.1398 +  trat_1 :: "nat * nat" 
  8.1399 +  "trat_1 == (0, 0)"
  8.1400 +
  8.1401 +lemma trat_1: "trat_1 = (0, 0)"
  8.1402 +  by (import hrat trat_1)
  8.1403 +
  8.1404 +constdefs
  8.1405 +  trat_inv :: "nat * nat => nat * nat" 
  8.1406 +  "trat_inv == %(x, y). (y, x)"
  8.1407 +
  8.1408 +lemma trat_inv: "ALL x y. trat_inv (x, y) = (y, x)"
  8.1409 +  by (import hrat trat_inv)
  8.1410 +
  8.1411 +constdefs
  8.1412 +  trat_add :: "nat * nat => nat * nat => nat * nat" 
  8.1413 +  "trat_add ==
  8.1414 +%(x, y) (x', y').
  8.1415 +   (PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
  8.1416 +
  8.1417 +lemma trat_add: "ALL x y x' y'.
  8.1418 +   trat_add (x, y) (x', y') =
  8.1419 +   (PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
  8.1420 +  by (import hrat trat_add)
  8.1421 +
  8.1422 +constdefs
  8.1423 +  trat_mul :: "nat * nat => nat * nat => nat * nat" 
  8.1424 +  "trat_mul == %(x, y) (x', y'). (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
  8.1425 +
  8.1426 +lemma trat_mul: "ALL x y x' y'.
  8.1427 +   trat_mul (x, y) (x', y') = (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
  8.1428 +  by (import hrat trat_mul)
  8.1429 +
  8.1430 +consts
  8.1431 +  trat_sucint :: "nat => nat * nat" 
  8.1432 +
  8.1433 +specification (trat_sucint) trat_sucint: "trat_sucint 0 = trat_1 &
  8.1434 +(ALL n. trat_sucint (Suc n) = trat_add (trat_sucint n) trat_1)"
  8.1435 +  by (import hrat trat_sucint)
  8.1436 +
  8.1437 +constdefs
  8.1438 +  trat_eq :: "nat * nat => nat * nat => bool" 
  8.1439 +  "trat_eq == %(x, y) (x', y'). Suc x * Suc y' = Suc x' * Suc y"
  8.1440 +
  8.1441 +lemma trat_eq: "ALL x y x' y'. trat_eq (x, y) (x', y') = (Suc x * Suc y' = Suc x' * Suc y)"
  8.1442 +  by (import hrat trat_eq)
  8.1443 +
  8.1444 +lemma TRAT_EQ_REFL: "ALL p. trat_eq p p"
  8.1445 +  by (import hrat TRAT_EQ_REFL)
  8.1446 +
  8.1447 +lemma TRAT_EQ_SYM: "ALL p q. trat_eq p q = trat_eq q p"
  8.1448 +  by (import hrat TRAT_EQ_SYM)
  8.1449 +
  8.1450 +lemma TRAT_EQ_TRANS: "ALL p q r. trat_eq p q & trat_eq q r --> trat_eq p r"
  8.1451 +  by (import hrat TRAT_EQ_TRANS)
  8.1452 +
  8.1453 +lemma TRAT_EQ_AP: "ALL p q. p = q --> trat_eq p q"
  8.1454 +  by (import hrat TRAT_EQ_AP)
  8.1455 +
  8.1456 +lemma TRAT_ADD_SYM_EQ: "ALL h i. trat_add h i = trat_add i h"
  8.1457 +  by (import hrat TRAT_ADD_SYM_EQ)
  8.1458 +
  8.1459 +lemma TRAT_MUL_SYM_EQ: "ALL h i. trat_mul h i = trat_mul i h"
  8.1460 +  by (import hrat TRAT_MUL_SYM_EQ)
  8.1461 +
  8.1462 +lemma TRAT_INV_WELLDEFINED: "ALL p q. trat_eq p q --> trat_eq (trat_inv p) (trat_inv q)"
  8.1463 +  by (import hrat TRAT_INV_WELLDEFINED)
  8.1464 +
  8.1465 +lemma TRAT_ADD_WELLDEFINED: "ALL p q r. trat_eq p q --> trat_eq (trat_add p r) (trat_add q r)"
  8.1466 +  by (import hrat TRAT_ADD_WELLDEFINED)
  8.1467 +
  8.1468 +lemma TRAT_ADD_WELLDEFINED2: "ALL p1 p2 q1 q2.
  8.1469 +   trat_eq p1 p2 & trat_eq q1 q2 -->
  8.1470 +   trat_eq (trat_add p1 q1) (trat_add p2 q2)"
  8.1471 +  by (import hrat TRAT_ADD_WELLDEFINED2)
  8.1472 +
  8.1473 +lemma TRAT_MUL_WELLDEFINED: "ALL p q r. trat_eq p q --> trat_eq (trat_mul p r) (trat_mul q r)"
  8.1474 +  by (import hrat TRAT_MUL_WELLDEFINED)
  8.1475 +
  8.1476 +lemma TRAT_MUL_WELLDEFINED2: "ALL p1 p2 q1 q2.
  8.1477 +   trat_eq p1 p2 & trat_eq q1 q2 -->
  8.1478 +   trat_eq (trat_mul p1 q1) (trat_mul p2 q2)"
  8.1479 +  by (import hrat TRAT_MUL_WELLDEFINED2)
  8.1480 +
  8.1481 +lemma TRAT_ADD_SYM: "ALL h i. trat_eq (trat_add h i) (trat_add i h)"
  8.1482 +  by (import hrat TRAT_ADD_SYM)
  8.1483 +
  8.1484 +lemma TRAT_ADD_ASSOC: "ALL h i j. trat_eq (trat_add h (trat_add i j)) (trat_add (trat_add h i) j)"
  8.1485 +  by (import hrat TRAT_ADD_ASSOC)
  8.1486 +
  8.1487 +lemma TRAT_MUL_SYM: "ALL h i. trat_eq (trat_mul h i) (trat_mul i h)"
  8.1488 +  by (import hrat TRAT_MUL_SYM)
  8.1489 +
  8.1490 +lemma TRAT_MUL_ASSOC: "ALL h i j. trat_eq (trat_mul h (trat_mul i j)) (trat_mul (trat_mul h i) j)"
  8.1491 +  by (import hrat TRAT_MUL_ASSOC)
  8.1492 +
  8.1493 +lemma TRAT_LDISTRIB: "ALL h i j.
  8.1494 +   trat_eq (trat_mul h (trat_add i j))
  8.1495 +    (trat_add (trat_mul h i) (trat_mul h j))"
  8.1496 +  by (import hrat TRAT_LDISTRIB)
  8.1497 +
  8.1498 +lemma TRAT_MUL_LID: "ALL h. trat_eq (trat_mul trat_1 h) h"
  8.1499 +  by (import hrat TRAT_MUL_LID)
  8.1500 +
  8.1501 +lemma TRAT_MUL_LINV: "ALL h. trat_eq (trat_mul (trat_inv h) h) trat_1"
  8.1502 +  by (import hrat TRAT_MUL_LINV)
  8.1503 +
  8.1504 +lemma TRAT_NOZERO: "ALL h i. ~ trat_eq (trat_add h i) h"
  8.1505 +  by (import hrat TRAT_NOZERO)
  8.1506 +
  8.1507 +lemma TRAT_ADD_TOTAL: "ALL h i.
  8.1508 +   trat_eq h i |
  8.1509 +   (EX d. trat_eq h (trat_add i d)) | (EX d. trat_eq i (trat_add h d))"
  8.1510 +  by (import hrat TRAT_ADD_TOTAL)
  8.1511 +
  8.1512 +lemma TRAT_SUCINT_0: "ALL n. trat_eq (trat_sucint n) (n, 0)"
  8.1513 +  by (import hrat TRAT_SUCINT_0)
  8.1514 +
  8.1515 +lemma TRAT_ARCH: "ALL h. EX n d. trat_eq (trat_sucint n) (trat_add h d)"
  8.1516 +  by (import hrat TRAT_ARCH)
  8.1517 +
  8.1518 +lemma TRAT_SUCINT: "trat_eq (trat_sucint 0) trat_1 &
  8.1519 +(ALL n. trat_eq (trat_sucint (Suc n)) (trat_add (trat_sucint n) trat_1))"
  8.1520 +  by (import hrat TRAT_SUCINT)
  8.1521 +
  8.1522 +lemma TRAT_EQ_EQUIV: "ALL p q. trat_eq p q = (trat_eq p = trat_eq q)"
  8.1523 +  by (import hrat TRAT_EQ_EQUIV)
  8.1524 +
  8.1525 +typedef (open) hrat = "{x. EX xa. x = trat_eq xa}" 
  8.1526 +  by (rule typedef_helper,import hrat hrat_TY_DEF)
  8.1527 +
  8.1528 +lemmas hrat_TY_DEF = typedef_hol2hol4 [OF type_definition_hrat]
  8.1529 +
  8.1530 +consts
  8.1531 +  mk_hrat :: "(nat * nat => bool) => hrat" 
  8.1532 +  dest_hrat :: "hrat => nat * nat => bool" 
  8.1533 +
  8.1534 +specification (dest_hrat mk_hrat) hrat_tybij: "(ALL a. mk_hrat (dest_hrat a) = a) &
  8.1535 +(ALL r. (EX x. r = trat_eq x) = (dest_hrat (mk_hrat r) = r))"
  8.1536 +  by (import hrat hrat_tybij)
  8.1537 +
  8.1538 +constdefs
  8.1539 +  hrat_1 :: "hrat" 
  8.1540 +  "hrat_1 == mk_hrat (trat_eq trat_1)"
  8.1541 +
  8.1542 +lemma hrat_1: "hrat_1 = mk_hrat (trat_eq trat_1)"
  8.1543 +  by (import hrat hrat_1)
  8.1544 +
  8.1545 +constdefs
  8.1546 +  hrat_inv :: "hrat => hrat" 
  8.1547 +  "hrat_inv == %T1. mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
  8.1548 +
  8.1549 +lemma hrat_inv: "ALL T1. hrat_inv T1 = mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
  8.1550 +  by (import hrat hrat_inv)
  8.1551 +
  8.1552 +constdefs
  8.1553 +  hrat_add :: "hrat => hrat => hrat" 
  8.1554 +  "hrat_add ==
  8.1555 +%T1 T2.
  8.1556 +   mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
  8.1557 +
  8.1558 +lemma hrat_add: "ALL T1 T2.
  8.1559 +   hrat_add T1 T2 =
  8.1560 +   mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
  8.1561 +  by (import hrat hrat_add)
  8.1562 +
  8.1563 +constdefs
  8.1564 +  hrat_mul :: "hrat => hrat => hrat" 
  8.1565 +  "hrat_mul ==
  8.1566 +%T1 T2.
  8.1567 +   mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
  8.1568 +
  8.1569 +lemma hrat_mul: "ALL T1 T2.
  8.1570 +   hrat_mul T1 T2 =
  8.1571 +   mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
  8.1572 +  by (import hrat hrat_mul)
  8.1573 +
  8.1574 +constdefs
  8.1575 +  hrat_sucint :: "nat => hrat" 
  8.1576 +  "hrat_sucint == %T1. mk_hrat (trat_eq (trat_sucint T1))"
  8.1577 +
  8.1578 +lemma hrat_sucint: "ALL T1. hrat_sucint T1 = mk_hrat (trat_eq (trat_sucint T1))"
  8.1579 +  by (import hrat hrat_sucint)
  8.1580 +
  8.1581 +lemma HRAT_ADD_SYM: "ALL h i. hrat_add h i = hrat_add i h"
  8.1582 +  by (import hrat HRAT_ADD_SYM)
  8.1583 +
  8.1584 +lemma HRAT_ADD_ASSOC: "ALL h i j. hrat_add h (hrat_add i j) = hrat_add (hrat_add h i) j"
  8.1585 +  by (import hrat HRAT_ADD_ASSOC)
  8.1586 +
  8.1587 +lemma HRAT_MUL_SYM: "ALL h i. hrat_mul h i = hrat_mul i h"
  8.1588 +  by (import hrat HRAT_MUL_SYM)
  8.1589 +
  8.1590 +lemma HRAT_MUL_ASSOC: "ALL h i j. hrat_mul h (hrat_mul i j) = hrat_mul (hrat_mul h i) j"
  8.1591 +  by (import hrat HRAT_MUL_ASSOC)
  8.1592 +
  8.1593 +lemma HRAT_LDISTRIB: "ALL h i j.
  8.1594 +   hrat_mul h (hrat_add i j) = hrat_add (hrat_mul h i) (hrat_mul h j)"
  8.1595 +  by (import hrat HRAT_LDISTRIB)
  8.1596 +
  8.1597 +lemma HRAT_MUL_LID: "ALL h. hrat_mul hrat_1 h = h"
  8.1598 +  by (import hrat HRAT_MUL_LID)
  8.1599 +
  8.1600 +lemma HRAT_MUL_LINV: "ALL h. hrat_mul (hrat_inv h) h = hrat_1"
  8.1601 +  by (import hrat HRAT_MUL_LINV)
  8.1602 +
  8.1603 +lemma HRAT_NOZERO: "ALL h i. hrat_add h i ~= h"
  8.1604 +  by (import hrat HRAT_NOZERO)
  8.1605 +
  8.1606 +lemma HRAT_ADD_TOTAL: "ALL h i. h = i | (EX x. h = hrat_add i x) | (EX x. i = hrat_add h x)"
  8.1607 +  by (import hrat HRAT_ADD_TOTAL)
  8.1608 +
  8.1609 +lemma HRAT_ARCH: "ALL h. EX x xa. hrat_sucint x = hrat_add h xa"
  8.1610 +  by (import hrat HRAT_ARCH)
  8.1611 +
  8.1612 +lemma HRAT_SUCINT: "hrat_sucint 0 = hrat_1 &
  8.1613 +(ALL x. hrat_sucint (Suc x) = hrat_add (hrat_sucint x) hrat_1)"
  8.1614 +  by (import hrat HRAT_SUCINT)
  8.1615 +
  8.1616 +;end_setup
  8.1617 +
  8.1618 +;setup_theory hreal
  8.1619 +
  8.1620 +constdefs
  8.1621 +  hrat_lt :: "hrat => hrat => bool" 
  8.1622 +  "hrat_lt == %x y. EX d. y = hrat_add x d"
  8.1623 +
  8.1624 +lemma hrat_lt: "ALL x y. hrat_lt x y = (EX d. y = hrat_add x d)"
  8.1625 +  by (import hreal hrat_lt)
  8.1626 +
  8.1627 +lemma HRAT_LT_REFL: "ALL x. ~ hrat_lt x x"
  8.1628 +  by (import hreal HRAT_LT_REFL)
  8.1629 +
  8.1630 +lemma HRAT_LT_TRANS: "ALL x y z. hrat_lt x y & hrat_lt y z --> hrat_lt x z"
  8.1631 +  by (import hreal HRAT_LT_TRANS)
  8.1632 +
  8.1633 +lemma HRAT_LT_ANTISYM: "ALL x y. ~ (hrat_lt x y & hrat_lt y x)"
  8.1634 +  by (import hreal HRAT_LT_ANTISYM)
  8.1635 +
  8.1636 +lemma HRAT_LT_TOTAL: "ALL x y. x = y | hrat_lt x y | hrat_lt y x"
  8.1637 +  by (import hreal HRAT_LT_TOTAL)
  8.1638 +
  8.1639 +lemma HRAT_MUL_RID: "ALL x. hrat_mul x hrat_1 = x"
  8.1640 +  by (import hreal HRAT_MUL_RID)
  8.1641 +
  8.1642 +lemma HRAT_MUL_RINV: "ALL x. hrat_mul x (hrat_inv x) = hrat_1"
  8.1643 +  by (import hreal HRAT_MUL_RINV)
  8.1644 +
  8.1645 +lemma HRAT_RDISTRIB: "ALL x y z.
  8.1646 +   hrat_mul (hrat_add x y) z = hrat_add (hrat_mul x z) (hrat_mul y z)"
  8.1647 +  by (import hreal HRAT_RDISTRIB)
  8.1648 +
  8.1649 +lemma HRAT_LT_ADDL: "ALL x y. hrat_lt x (hrat_add x y)"
  8.1650 +  by (import hreal HRAT_LT_ADDL)
  8.1651 +
  8.1652 +lemma HRAT_LT_ADDR: "ALL x xa. hrat_lt xa (hrat_add x xa)"
  8.1653 +  by (import hreal HRAT_LT_ADDR)
  8.1654 +
  8.1655 +lemma HRAT_LT_GT: "ALL x y. hrat_lt x y --> ~ hrat_lt y x"
  8.1656 +  by (import hreal HRAT_LT_GT)
  8.1657 +
  8.1658 +lemma HRAT_LT_NE: "ALL x y. hrat_lt x y --> x ~= y"
  8.1659 +  by (import hreal HRAT_LT_NE)
  8.1660 +
  8.1661 +lemma HRAT_EQ_LADD: "ALL x y z. (hrat_add x y = hrat_add x z) = (y = z)"
  8.1662 +  by (import hreal HRAT_EQ_LADD)
  8.1663 +
  8.1664 +lemma HRAT_EQ_LMUL: "ALL x y z. (hrat_mul x y = hrat_mul x z) = (y = z)"
  8.1665 +  by (import hreal HRAT_EQ_LMUL)
  8.1666 +
  8.1667 +lemma HRAT_LT_ADD2: "ALL u v x y.
  8.1668 +   hrat_lt u x & hrat_lt v y --> hrat_lt (hrat_add u v) (hrat_add x y)"
  8.1669 +  by (import hreal HRAT_LT_ADD2)
  8.1670 +
  8.1671 +lemma HRAT_LT_LADD: "ALL x y z. hrat_lt (hrat_add z x) (hrat_add z y) = hrat_lt x y"
  8.1672 +  by (import hreal HRAT_LT_LADD)
  8.1673 +
  8.1674 +lemma HRAT_LT_RADD: "ALL x y z. hrat_lt (hrat_add x z) (hrat_add y z) = hrat_lt x y"
  8.1675 +  by (import hreal HRAT_LT_RADD)
  8.1676 +
  8.1677 +lemma HRAT_LT_MUL2: "ALL u v x y.
  8.1678 +   hrat_lt u x & hrat_lt v y --> hrat_lt (hrat_mul u v) (hrat_mul x y)"
  8.1679 +  by (import hreal HRAT_LT_MUL2)
  8.1680 +
  8.1681 +lemma HRAT_LT_LMUL: "ALL x y z. hrat_lt (hrat_mul z x) (hrat_mul z y) = hrat_lt x y"
  8.1682 +  by (import hreal HRAT_LT_LMUL)
  8.1683 +
  8.1684 +lemma HRAT_LT_RMUL: "ALL x y z. hrat_lt (hrat_mul x z) (hrat_mul y z) = hrat_lt x y"
  8.1685 +  by (import hreal HRAT_LT_RMUL)
  8.1686 +
  8.1687 +lemma HRAT_LT_LMUL1: "ALL x y. hrat_lt (hrat_mul x y) y = hrat_lt x hrat_1"
  8.1688 +  by (import hreal HRAT_LT_LMUL1)
  8.1689 +
  8.1690 +lemma HRAT_LT_RMUL1: "ALL x y. hrat_lt (hrat_mul x y) x = hrat_lt y hrat_1"
  8.1691 +  by (import hreal HRAT_LT_RMUL1)
  8.1692 +
  8.1693 +lemma HRAT_GT_LMUL1: "ALL x y. hrat_lt y (hrat_mul x y) = hrat_lt hrat_1 x"
  8.1694 +  by (import hreal HRAT_GT_LMUL1)
  8.1695 +
  8.1696 +lemma HRAT_LT_L1: "ALL x y. hrat_lt (hrat_mul (hrat_inv x) y) hrat_1 = hrat_lt y x"
  8.1697 +  by (import hreal HRAT_LT_L1)
  8.1698 +
  8.1699 +lemma HRAT_LT_R1: "ALL x y. hrat_lt (hrat_mul x (hrat_inv y)) hrat_1 = hrat_lt x y"
  8.1700 +  by (import hreal HRAT_LT_R1)
  8.1701 +
  8.1702 +lemma HRAT_GT_L1: "ALL x y. hrat_lt hrat_1 (hrat_mul (hrat_inv x) y) = hrat_lt x y"
  8.1703 +  by (import hreal HRAT_GT_L1)
  8.1704 +
  8.1705 +lemma HRAT_INV_MUL: "ALL x y. hrat_inv (hrat_mul x y) = hrat_mul (hrat_inv x) (hrat_inv y)"
  8.1706 +  by (import hreal HRAT_INV_MUL)
  8.1707 +
  8.1708 +lemma HRAT_UP: "ALL x. Ex (hrat_lt x)"
  8.1709 +  by (import hreal HRAT_UP)
  8.1710 +
  8.1711 +lemma HRAT_DOWN: "ALL x. EX xa. hrat_lt xa x"
  8.1712 +  by (import hreal HRAT_DOWN)
  8.1713 +
  8.1714 +lemma HRAT_DOWN2: "ALL x y. EX xa. hrat_lt xa x & hrat_lt xa y"
  8.1715 +  by (import hreal HRAT_DOWN2)
  8.1716 +
  8.1717 +lemma HRAT_MEAN: "ALL x y. hrat_lt x y --> (EX xa. hrat_lt x xa & hrat_lt xa y)"
  8.1718 +  by (import hreal HRAT_MEAN)
  8.1719 +
  8.1720 +constdefs
  8.1721 +  isacut :: "(hrat => bool) => bool" 
  8.1722 +  "isacut ==
  8.1723 +%C. Ex C &
  8.1724 +    (EX x. ~ C x) &
  8.1725 +    (ALL x y. C x & hrat_lt y x --> C y) &
  8.1726 +    (ALL x. C x --> (EX y. C y & hrat_lt x y))"
  8.1727 +
  8.1728 +lemma isacut: "ALL C.
  8.1729 +   isacut C =
  8.1730 +   (Ex C &
  8.1731 +    (EX x. ~ C x) &
  8.1732 +    (ALL x y. C x & hrat_lt y x --> C y) &
  8.1733 +    (ALL x. C x --> (EX y. C y & hrat_lt x y)))"
  8.1734 +  by (import hreal isacut)
  8.1735 +
  8.1736 +constdefs
  8.1737 +  cut_of_hrat :: "hrat => hrat => bool" 
  8.1738 +  "cut_of_hrat == %x y. hrat_lt y x"
  8.1739 +
  8.1740 +lemma cut_of_hrat: "ALL x. cut_of_hrat x = (%y. hrat_lt y x)"
  8.1741 +  by (import hreal cut_of_hrat)
  8.1742 +
  8.1743 +lemma ISACUT_HRAT: "ALL h. isacut (cut_of_hrat h)"
  8.1744 +  by (import hreal ISACUT_HRAT)
  8.1745 +
  8.1746 +typedef (open) hreal = "Collect isacut" 
  8.1747 +  by (rule typedef_helper,import hreal hreal_TY_DEF)
  8.1748 +
  8.1749 +lemmas hreal_TY_DEF = typedef_hol2hol4 [OF type_definition_hreal]
  8.1750 +
  8.1751 +consts
  8.1752 +  hreal :: "(hrat => bool) => hreal" 
  8.1753 +  cut :: "hreal => hrat => bool" 
  8.1754 +
  8.1755 +specification (cut hreal) hreal_tybij: "(ALL a. hreal (hreal.cut a) = a) &
  8.1756 +(ALL r. isacut r = (hreal.cut (hreal r) = r))"
  8.1757 +  by (import hreal hreal_tybij)
  8.1758 +
  8.1759 +lemma EQUAL_CUTS: "ALL X Y. hreal.cut X = hreal.cut Y --> X = Y"
  8.1760 +  by (import hreal EQUAL_CUTS)
  8.1761 +
  8.1762 +lemma CUT_ISACUT: "ALL x. isacut (hreal.cut x)"
  8.1763 +  by (import hreal CUT_ISACUT)
  8.1764 +
  8.1765 +lemma CUT_NONEMPTY: "ALL x. Ex (hreal.cut x)"
  8.1766 +  by (import hreal CUT_NONEMPTY)
  8.1767 +
  8.1768 +lemma CUT_BOUNDED: "ALL x. EX xa. ~ hreal.cut x xa"
  8.1769 +  by (import hreal CUT_BOUNDED)
  8.1770 +
  8.1771 +lemma CUT_DOWN: "ALL x xa xb. hreal.cut x xa & hrat_lt xb xa --> hreal.cut x xb"
  8.1772 +  by (import hreal CUT_DOWN)
  8.1773 +
  8.1774 +lemma CUT_UP: "ALL x xa. hreal.cut x xa --> (EX y. hreal.cut x y & hrat_lt xa y)"
  8.1775 +  by (import hreal CUT_UP)
  8.1776 +
  8.1777 +lemma CUT_UBOUND: "ALL x xa xb. ~ hreal.cut x xa & hrat_lt xa xb --> ~ hreal.cut x xb"
  8.1778 +  by (import hreal CUT_UBOUND)
  8.1779 +
  8.1780 +lemma CUT_STRADDLE: "ALL X x y. hreal.cut X x & ~ hreal.cut X y --> hrat_lt x y"
  8.1781 +  by (import hreal CUT_STRADDLE)
  8.1782 +
  8.1783 +lemma CUT_NEARTOP_ADD: "ALL X e. EX x. hreal.cut X x & ~ hreal.cut X (hrat_add x e)"
  8.1784 +  by (import hreal CUT_NEARTOP_ADD)
  8.1785 +
  8.1786 +lemma CUT_NEARTOP_MUL: "ALL X u.
  8.1787 +   hrat_lt hrat_1 u --> (EX x. hreal.cut X x & ~ hreal.cut X (hrat_mul u x))"
  8.1788 +  by (import hreal CUT_NEARTOP_MUL)
  8.1789 +
  8.1790 +constdefs
  8.1791 +  hreal_1 :: "hreal" 
  8.1792 +  "hreal_1 == hreal (cut_of_hrat hrat_1)"
  8.1793 +
  8.1794 +lemma hreal_1: "hreal_1 = hreal (cut_of_hrat hrat_1)"
  8.1795 +  by (import hreal hreal_1)
  8.1796 +
  8.1797 +constdefs
  8.1798 +  hreal_add :: "hreal => hreal => hreal" 
  8.1799 +  "hreal_add ==
  8.1800 +%X Y. hreal (%w. EX x y. w = hrat_add x y & hreal.cut X x & hreal.cut Y y)"
  8.1801 +
  8.1802 +lemma hreal_add: "ALL X Y.
  8.1803 +   hreal_add X Y =
  8.1804 +   hreal (%w. EX x y. w = hrat_add x y & hreal.cut X x & hreal.cut Y y)"
  8.1805 +  by (import hreal hreal_add)
  8.1806 +
  8.1807 +constdefs
  8.1808 +  hreal_mul :: "hreal => hreal => hreal" 
  8.1809 +  "hreal_mul ==
  8.1810 +%X Y. hreal (%w. EX x y. w = hrat_mul x y & hreal.cut X x & hreal.cut Y y)"
  8.1811 +
  8.1812 +lemma hreal_mul: "ALL X Y.
  8.1813 +   hreal_mul X Y =
  8.1814 +   hreal (%w. EX x y. w = hrat_mul x y & hreal.cut X x & hreal.cut Y y)"
  8.1815 +  by (import hreal hreal_mul)
  8.1816 +
  8.1817 +constdefs
  8.1818 +  hreal_inv :: "hreal => hreal" 
  8.1819 +  "hreal_inv ==
  8.1820 +%X. hreal
  8.1821 +     (%w. EX d. hrat_lt d hrat_1 &
  8.1822 +                (ALL x. hreal.cut X x --> hrat_lt (hrat_mul w x) d))"
  8.1823 +
  8.1824 +lemma hreal_inv: "ALL X.
  8.1825 +   hreal_inv X =
  8.1826 +   hreal
  8.1827 +    (%w. EX d. hrat_lt d hrat_1 &
  8.1828 +               (ALL x. hreal.cut X x --> hrat_lt (hrat_mul w x) d))"
  8.1829 +  by (import hreal hreal_inv)
  8.1830 +
  8.1831 +constdefs
  8.1832 +  hreal_sup :: "(hreal => bool) => hreal" 
  8.1833 +  "hreal_sup == %P. hreal (%w. EX X. P X & hreal.cut X w)"
  8.1834 +
  8.1835 +lemma hreal_sup: "ALL P. hreal_sup P = hreal (%w. EX X. P X & hreal.cut X w)"
  8.1836 +  by (import hreal hreal_sup)
  8.1837 +
  8.1838 +constdefs
  8.1839 +  hreal_lt :: "hreal => hreal => bool" 
  8.1840 +  "hreal_lt == %X Y. X ~= Y & (ALL x. hreal.cut X x --> hreal.cut Y x)"
  8.1841 +
  8.1842 +lemma hreal_lt: "ALL X Y. hreal_lt X Y = (X ~= Y & (ALL x. hreal.cut X x --> hreal.cut Y x))"
  8.1843 +  by (import hreal hreal_lt)
  8.1844 +
  8.1845 +lemma HREAL_INV_ISACUT: "ALL X.
  8.1846 +   isacut
  8.1847 +    (%w. EX d. hrat_lt d hrat_1 &
  8.1848 +               (ALL x. hreal.cut X x --> hrat_lt (hrat_mul w x) d))"
  8.1849 +  by (import hreal HREAL_INV_ISACUT)
  8.1850 +
  8.1851 +lemma HREAL_ADD_ISACUT: "ALL X Y.
  8.1852 +   isacut (%w. EX x y. w = hrat_add x y & hreal.cut X x & hreal.cut Y y)"
  8.1853 +  by (import hreal HREAL_ADD_ISACUT)
  8.1854 +
  8.1855 +lemma HREAL_MUL_ISACUT: "ALL X Y.
  8.1856 +   isacut (%w. EX x y. w = hrat_mul x y & hreal.cut X x & hreal.cut Y y)"
  8.1857 +  by (import hreal HREAL_MUL_ISACUT)
  8.1858 +
  8.1859 +lemma HREAL_ADD_SYM: "ALL X Y. hreal_add X Y = hreal_add Y X"
  8.1860 +  by (import hreal HREAL_ADD_SYM)
  8.1861 +
  8.1862 +lemma HREAL_MUL_SYM: "ALL X Y. hreal_mul X Y = hreal_mul Y X"
  8.1863 +  by (import hreal HREAL_MUL_SYM)
  8.1864 +
  8.1865 +lemma HREAL_ADD_ASSOC: "ALL X Y Z. hreal_add X (hreal_add Y Z) = hreal_add (hreal_add X Y) Z"
  8.1866 +  by (import hreal HREAL_ADD_ASSOC)
  8.1867 +
  8.1868 +lemma HREAL_MUL_ASSOC: "ALL X Y Z. hreal_mul X (hreal_mul Y Z) = hreal_mul (hreal_mul X Y) Z"
  8.1869 +  by (import hreal HREAL_MUL_ASSOC)
  8.1870 +
  8.1871 +lemma HREAL_LDISTRIB: "ALL X Y Z.
  8.1872 +   hreal_mul X (hreal_add Y Z) = hreal_add (hreal_mul X Y) (hreal_mul X Z)"
  8.1873 +  by (import hreal HREAL_LDISTRIB)
  8.1874 +
  8.1875 +lemma HREAL_MUL_LID: "ALL X. hreal_mul hreal_1 X = X"
  8.1876 +  by (import hreal HREAL_MUL_LID)
  8.1877 +
  8.1878 +lemma HREAL_MUL_LINV: "ALL X. hreal_mul (hreal_inv X) X = hreal_1"
  8.1879 +  by (import hreal HREAL_MUL_LINV)
  8.1880 +
  8.1881 +lemma HREAL_NOZERO: "ALL X Y. hreal_add X Y ~= X"
  8.1882 +  by (import hreal HREAL_NOZERO)
  8.1883 +
  8.1884 +constdefs
  8.1885 +  hreal_sub :: "hreal => hreal => hreal" 
  8.1886 +  "hreal_sub ==
  8.1887 +%Y X. hreal (%w. EX x. ~ hreal.cut X x & hreal.cut Y (hrat_add x w))"
  8.1888 +
  8.1889 +lemma hreal_sub: "ALL Y X.
  8.1890 +   hreal_sub Y X =
  8.1891 +   hreal (%w. EX x. ~ hreal.cut X x & hreal.cut Y (hrat_add x w))"
  8.1892 +  by (import hreal hreal_sub)
  8.1893 +
  8.1894 +lemma HREAL_LT_LEMMA: "ALL X Y. hreal_lt X Y --> (EX x. ~ hreal.cut X x & hreal.cut Y x)"
  8.1895 +  by (import hreal HREAL_LT_LEMMA)
  8.1896 +
  8.1897 +lemma HREAL_SUB_ISACUT: "ALL X Y.
  8.1898 +   hreal_lt X Y -->
  8.1899 +   isacut (%w. EX x. ~ hreal.cut X x & hreal.cut Y (hrat_add x w))"
  8.1900 +  by (import hreal HREAL_SUB_ISACUT)
  8.1901 +
  8.1902 +lemma HREAL_SUB_ADD: "ALL X Y. hreal_lt X Y --> hreal_add (hreal_sub Y X) X = Y"
  8.1903 +  by (import hreal HREAL_SUB_ADD)
  8.1904 +
  8.1905 +lemma HREAL_LT_TOTAL: "ALL X Y. X = Y | hreal_lt X Y | hreal_lt Y X"
  8.1906 +  by (import hreal HREAL_LT_TOTAL)
  8.1907 +
  8.1908 +lemma HREAL_LT: "ALL X Y. hreal_lt X Y = (EX D. Y = hreal_add X D)"
  8.1909 +  by (import hreal HREAL_LT)
  8.1910 +
  8.1911 +lemma HREAL_ADD_TOTAL: "ALL X Y. X = Y | (EX D. Y = hreal_add X D) | (EX D. X = hreal_add Y D)"
  8.1912 +  by (import hreal HREAL_ADD_TOTAL)
  8.1913 +
  8.1914 +lemma HREAL_SUP_ISACUT: "ALL P.
  8.1915 +   Ex P & (EX Y. ALL X. P X --> hreal_lt X Y) -->
  8.1916 +   isacut (%w. EX X. P X & hreal.cut X w)"
  8.1917 +  by (import hreal HREAL_SUP_ISACUT)
  8.1918 +
  8.1919 +lemma HREAL_SUP: "ALL P.
  8.1920 +   Ex P & (EX Y. ALL X. P X --> hreal_lt X Y) -->
  8.1921 +   (ALL Y. (EX X. P X & hreal_lt Y X) = hreal_lt Y (hreal_sup P))"
  8.1922 +  by (import hreal HREAL_SUP)
  8.1923 +
  8.1924 +;end_setup
  8.1925 +
  8.1926 +;setup_theory numeral
  8.1927 +
  8.1928 +lemma numeral_suc: "Suc ALT_ZERO = NUMERAL_BIT1 ALT_ZERO &
  8.1929 +(ALL x. Suc (NUMERAL_BIT1 x) = NUMERAL_BIT2 x) &
  8.1930 +(ALL x. Suc (NUMERAL_BIT2 x) = NUMERAL_BIT1 (Suc x))"
  8.1931 +  by (import numeral numeral_suc)
  8.1932 +
  8.1933 +constdefs
  8.1934 +  iZ :: "nat => nat" 
  8.1935 +  "iZ == %x. x"
  8.1936 +
  8.1937 +lemma iZ: "ALL x. iZ x = x"
  8.1938 +  by (import numeral iZ)
  8.1939 +
  8.1940 +constdefs
  8.1941 +  iiSUC :: "nat => nat" 
  8.1942 +  "iiSUC == %n. Suc (Suc n)"
  8.1943 +
  8.1944 +lemma iiSUC: "ALL n. iiSUC n = Suc (Suc n)"
  8.1945 +  by (import numeral iiSUC)
  8.1946 +
  8.1947 +lemma numeral_distrib: "(ALL x::nat. (0::nat) + x = x) &
  8.1948 +(ALL x::nat. x + (0::nat) = x) &
  8.1949 +(ALL (x::nat) xa::nat. NUMERAL x + NUMERAL xa = NUMERAL (iZ (x + xa))) &
  8.1950 +(ALL x::nat. (0::nat) * x = (0::nat)) &
  8.1951 +(ALL x::nat. x * (0::nat) = (0::nat)) &
  8.1952 +(ALL (x::nat) xa::nat. NUMERAL x * NUMERAL xa = NUMERAL (x * xa)) &
  8.1953 +(ALL x::nat. (0::nat) - x = (0::nat)) &
  8.1954 +(ALL x::nat. x - (0::nat) = x) &
  8.1955 +(ALL (x::nat) xa::nat. NUMERAL x - NUMERAL xa = NUMERAL (x - xa)) &
  8.1956 +(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT1 x) = (0::nat)) &
  8.1957 +(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT2 x) = (0::nat)) &
  8.1958 +(ALL x::nat. x ^ (0::nat) = (1::nat)) &
  8.1959 +(ALL (x::nat) xa::nat. NUMERAL x ^ NUMERAL xa = NUMERAL (x ^ xa)) &
  8.1960 +Suc (0::nat) = (1::nat) &
  8.1961 +(ALL x::nat. Suc (NUMERAL x) = NUMERAL (Suc x)) &
  8.1962 +PRE (0::nat) = (0::nat) &
  8.1963 +(ALL x::nat. PRE (NUMERAL x) = NUMERAL (PRE x)) &
  8.1964 +(ALL x::nat. (NUMERAL x = (0::nat)) = (x = ALT_ZERO)) &
  8.1965 +(ALL x::nat. ((0::nat) = NUMERAL x) = (x = ALT_ZERO)) &
  8.1966 +(ALL (x::nat) xa::nat. (NUMERAL x = NUMERAL xa) = (x = xa)) &
  8.1967 +(ALL x::nat. (x < (0::nat)) = False) &
  8.1968 +(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
  8.1969 +(ALL (x::nat) xa::nat. (NUMERAL x < NUMERAL xa) = (x < xa)) &
  8.1970 +(ALL x::nat. (x < (0::nat)) = False) &
  8.1971 +(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
  8.1972 +(ALL (x::nat) xa::nat. (NUMERAL xa < NUMERAL x) = (xa < x)) &
  8.1973 +(ALL x::nat. ((0::nat) <= x) = True) &
  8.1974 +(ALL x::nat. (NUMERAL x <= (0::nat)) = (x <= ALT_ZERO)) &
  8.1975 +(ALL (x::nat) xa::nat. (NUMERAL x <= NUMERAL xa) = (x <= xa)) &
  8.1976 +(ALL x::nat. ((0::nat) <= x) = True) &
  8.1977 +(ALL x::nat. (x <= (0::nat)) = (x = (0::nat))) &
  8.1978 +(ALL (x::nat) xa::nat. (NUMERAL xa <= NUMERAL x) = (xa <= x)) &
  8.1979 +(ALL x::nat. ODD (NUMERAL x) = ODD x) &
  8.1980 +(ALL x::nat. EVEN (NUMERAL x) = EVEN x) & ~ ODD (0::nat) & EVEN (0::nat)"
  8.1981 +  by (import numeral numeral_distrib)
  8.1982 +
  8.1983 +lemma numeral_iisuc: "iiSUC ALT_ZERO = NUMERAL_BIT2 ALT_ZERO &
  8.1984 +iiSUC (NUMERAL_BIT1 n) = NUMERAL_BIT1 (Suc n) &
  8.1985 +iiSUC (NUMERAL_BIT2 n) = NUMERAL_BIT2 (Suc n)"
  8.1986 +  by (import numeral numeral_iisuc)
  8.1987 +
  8.1988 +lemma numeral_add: "ALL x xa.
  8.1989 +   iZ (ALT_ZERO + x) = x &
  8.1990 +   iZ (x + ALT_ZERO) = x &
  8.1991 +   iZ (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (iZ (x + xa)) &
  8.1992 +   iZ (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
  8.1993 +   iZ (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
  8.1994 +   iZ (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
  8.1995 +   Suc (ALT_ZERO + x) = Suc x &
  8.1996 +   Suc (x + ALT_ZERO) = Suc x &
  8.1997 +   Suc (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
  8.1998 +   Suc (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
  8.1999 +   Suc (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
  8.2000 +   Suc (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
  8.2001 +   iiSUC (ALT_ZERO + x) = iiSUC x &
  8.2002 +   iiSUC (x + ALT_ZERO) = iiSUC x &
  8.2003 +   iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
  8.2004 +   iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) =
  8.2005 +   NUMERAL_BIT1 (iiSUC (x + xa)) &
  8.2006 +   iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) =
  8.2007 +   NUMERAL_BIT1 (iiSUC (x + xa)) &
  8.2008 +   iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (iiSUC (x + xa))"
  8.2009 +  by (import numeral numeral_add)
  8.2010 +
  8.2011 +lemma numeral_eq: "ALL x xa.
  8.2012 +   (ALT_ZERO = NUMERAL_BIT1 x) = False &
  8.2013 +   (NUMERAL_BIT1 x = ALT_ZERO) = False &
  8.2014 +   (ALT_ZERO = NUMERAL_BIT2 x) = False &
  8.2015 +   (NUMERAL_BIT2 x = ALT_ZERO) = False &
  8.2016 +   (NUMERAL_BIT1 x = NUMERAL_BIT2 xa) = False &
  8.2017 +   (NUMERAL_BIT2 x = NUMERAL_BIT1 xa) = False &
  8.2018 +   (NUMERAL_BIT1 x = NUMERAL_BIT1 xa) = (x = xa) &
  8.2019 +   (NUMERAL_BIT2 x = NUMERAL_BIT2 xa) = (x = xa)"
  8.2020 +  by (import numeral numeral_eq)
  8.2021 +
  8.2022 +lemma numeral_lt: "ALL x xa.
  8.2023 +   (ALT_ZERO < NUMERAL_BIT1 x) = True &
  8.2024 +   (ALT_ZERO < NUMERAL_BIT2 x) = True &
  8.2025 +   (x < ALT_ZERO) = False &
  8.2026 +   (NUMERAL_BIT1 x < NUMERAL_BIT1 xa) = (x < xa) &
  8.2027 +   (NUMERAL_BIT2 x < NUMERAL_BIT2 xa) = (x < xa) &
  8.2028 +   (NUMERAL_BIT1 x < NUMERAL_BIT2 xa) = (~ xa < x) &
  8.2029 +   (NUMERAL_BIT2 x < NUMERAL_BIT1 xa) = (x < xa)"
  8.2030 +  by (import numeral numeral_lt)
  8.2031 +
  8.2032 +lemma numeral_lte: "ALL x xa.
  8.2033 +   (ALT_ZERO <= x) = True &
  8.2034 +   (NUMERAL_BIT1 x <= ALT_ZERO) = False &
  8.2035 +   (NUMERAL_BIT2 x <= ALT_ZERO) = False &
  8.2036 +   (NUMERAL_BIT1 x <= NUMERAL_BIT1 xa) = (x <= xa) &
  8.2037 +   (NUMERAL_BIT1 x <= NUMERAL_BIT2 xa) = (x <= xa) &
  8.2038 +   (NUMERAL_BIT2 x <= NUMERAL_BIT1 xa) = (~ xa <= x) &
  8.2039 +   (NUMERAL_BIT2 x <= NUMERAL_BIT2 xa) = (x <= xa)"
  8.2040 +  by (import numeral numeral_lte)
  8.2041 +
  8.2042 +lemma numeral_pre: "PRE ALT_ZERO = ALT_ZERO &
  8.2043 +PRE (NUMERAL_BIT1 ALT_ZERO) = ALT_ZERO &
  8.2044 +(ALL x.
  8.2045 +    PRE (NUMERAL_BIT1 (NUMERAL_BIT1 x)) =
  8.2046 +    NUMERAL_BIT2 (PRE (NUMERAL_BIT1 x))) &
  8.2047 +(ALL x.
  8.2048 +    PRE (NUMERAL_BIT1 (NUMERAL_BIT2 x)) = NUMERAL_BIT2 (NUMERAL_BIT1 x)) &
  8.2049 +(ALL x. PRE (NUMERAL_BIT2 x) = NUMERAL_BIT1 x)"
  8.2050 +  by (import numeral numeral_pre)
  8.2051 +
  8.2052 +lemma bit_initiality: "ALL zf b1f b2f.
  8.2053 +   EX x. x ALT_ZERO = zf &
  8.2054 +         (ALL n. x (NUMERAL_BIT1 n) = b1f n (x n)) &
  8.2055 +         (ALL n. x (NUMERAL_BIT2 n) = b2f n (x n))"
  8.2056 +  by (import numeral bit_initiality)
  8.2057 +
  8.2058 +consts
  8.2059 +  iBIT_cases :: "nat => 'a => (nat => 'a) => (nat => 'a) => 'a" 
  8.2060 +
  8.2061 +specification (iBIT_cases) iBIT_cases: "(ALL (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
  8.2062 +    iBIT_cases ALT_ZERO zf bf1 bf2 = zf) &
  8.2063 +(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
  8.2064 +    iBIT_cases (NUMERAL_BIT1 n) zf bf1 bf2 = bf1 n) &
  8.2065 +(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
  8.2066 +    iBIT_cases (NUMERAL_BIT2 n) zf bf1 bf2 = bf2 n)"
  8.2067 +  by (import numeral iBIT_cases)
  8.2068 +
  8.2069 +constdefs
  8.2070 +  iDUB :: "nat => nat" 
  8.2071 +  "iDUB == %x. x + x"
  8.2072 +
  8.2073 +lemma iDUB: "ALL x. iDUB x = x + x"
  8.2074 +  by (import numeral iDUB)
  8.2075 +
  8.2076 +consts
  8.2077 +  iSUB :: "bool => nat => nat => nat" 
  8.2078 +
  8.2079 +specification (iSUB) iSUB_DEF: "(ALL b x. iSUB b ALT_ZERO x = ALT_ZERO) &
  8.2080 +(ALL b n x.
  8.2081 +    iSUB b (NUMERAL_BIT1 n) x =
  8.2082 +    (if b
  8.2083 +     then iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
  8.2084 +           (%m. NUMERAL_BIT1 (iSUB False n m))
  8.2085 +     else iBIT_cases x (iDUB n) (%m. NUMERAL_BIT1 (iSUB False n m))
  8.2086 +           (%m. iDUB (iSUB False n m)))) &
  8.2087 +(ALL b n x.
  8.2088 +    iSUB b (NUMERAL_BIT2 n) x =
  8.2089 +    (if b
  8.2090 +     then iBIT_cases x (NUMERAL_BIT2 n) (%m. NUMERAL_BIT1 (iSUB True n m))
  8.2091 +           (%m. iDUB (iSUB True n m))
  8.2092 +     else iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
  8.2093 +           (%m. NUMERAL_BIT1 (iSUB False n m))))"
  8.2094 +  by (import numeral iSUB_DEF)
  8.2095 +
  8.2096 +lemma bit_induction: "ALL P.
  8.2097 +   P ALT_ZERO &
  8.2098 +   (ALL n. P n --> P (NUMERAL_BIT1 n)) &
  8.2099 +   (ALL n. P n --> P (NUMERAL_BIT2 n)) -->
  8.2100 +   All P"
  8.2101 +  by (import numeral bit_induction)
  8.2102 +
  8.2103 +lemma iSUB_THM: "ALL xa xb xc.
  8.2104 +   iSUB xa ALT_ZERO x = ALT_ZERO &
  8.2105 +   iSUB True xb ALT_ZERO = xb &
  8.2106 +   iSUB False (NUMERAL_BIT1 xb) ALT_ZERO = iDUB xb &
  8.2107 +   iSUB True (NUMERAL_BIT1 xb) (NUMERAL_BIT1 xc) = iDUB (iSUB True xb xc) &
  8.2108 +   iSUB False (NUMERAL_BIT1 xb) (NUMERAL_BIT1 xc) =
  8.2109 +   NUMERAL_BIT1 (iSUB False xb xc) &
  8.2110 +   iSUB True (NUMERAL_BIT1 xb) (NUMERAL_BIT2 xc) =
  8.2111 +   NUMERAL_BIT1 (iSUB False xb xc) &
  8.2112 +   iSUB False (NUMERAL_BIT1 xb) (NUMERAL_BIT2 xc) =
  8.2113 +   iDUB (iSUB False xb xc) &
  8.2114 +   iSUB False (NUMERAL_BIT2 xb) ALT_ZERO = NUMERAL_BIT1 xb &
  8.2115 +   iSUB True (NUMERAL_BIT2 xb) (NUMERAL_BIT1 xc) =
  8.2116 +   NUMERAL_BIT1 (iSUB True xb xc) &
  8.2117 +   iSUB False (NUMERAL_BIT2 xb) (NUMERAL_BIT1 xc) = iDUB (iSUB True xb xc) &
  8.2118 +   iSUB True (NUMERAL_BIT2 xb) (NUMERAL_BIT2 xc) = iDUB (iSUB True xb xc) &
  8.2119 +   iSUB False (NUMERAL_BIT2 xb) (NUMERAL_BIT2 xc) =
  8.2120 +   NUMERAL_BIT1 (iSUB False xb xc)"
  8.2121 +  by (import numeral iSUB_THM)
  8.2122 +
  8.2123 +lemma numeral_sub: "ALL x xa.
  8.2124 +   NUMERAL (x - xa) = (if xa < x then NUMERAL (iSUB True x xa) else 0)"
  8.2125 +  by (import numeral numeral_sub)
  8.2126 +
  8.2127 +lemma iDUB_removal: "ALL x.
  8.2128 +   iDUB (NUMERAL_BIT1 x) = NUMERAL_BIT2 (iDUB x) &
  8.2129 +   iDUB (NUMERAL_BIT2 x) = NUMERAL_BIT2 (NUMERAL_BIT1 x) &
  8.2130 +   iDUB ALT_ZERO = ALT_ZERO"
  8.2131 +  by (import numeral iDUB_removal)
  8.2132 +
  8.2133 +lemma numeral_mult: "ALL x xa.
  8.2134 +   ALT_ZERO * x = ALT_ZERO &
  8.2135 +   x * ALT_ZERO = ALT_ZERO &
  8.2136 +   NUMERAL_BIT1 x * xa = iZ (iDUB (x * xa) + xa) &
  8.2137 +   NUMERAL_BIT2 x * xa = iDUB (iZ (x * xa + xa))"
  8.2138 +  by (import numeral numeral_mult)
  8.2139 +
  8.2140 +constdefs
  8.2141 +  iSQR :: "nat => nat" 
  8.2142 +  "iSQR == %x. x * x"
  8.2143 +
  8.2144 +lemma iSQR: "ALL x. iSQR x = x * x"
  8.2145 +  by (import numeral iSQR)
  8.2146 +
  8.2147 +lemma numeral_exp: "(ALL x. x ^ ALT_ZERO = NUMERAL_BIT1 ALT_ZERO) &
  8.2148 +(ALL x xa. x ^ NUMERAL_BIT1 xa = x * iSQR (x ^ xa)) &
  8.2149 +(ALL x xa. x ^ NUMERAL_BIT2 xa = iSQR x * iSQR (x ^ xa))"
  8.2150 +  by (import numeral numeral_exp)
  8.2151 +
  8.2152 +lemma numeral_evenodd: "ALL x.
  8.2153 +   EVEN ALT_ZERO &
  8.2154 +   EVEN (NUMERAL_BIT2 x) &
  8.2155 +   ~ EVEN (NUMERAL_BIT1 x) &
  8.2156 +   ~ ODD ALT_ZERO & ~ ODD (NUMERAL_BIT2 x) & ODD (NUMERAL_BIT1 x)"
  8.2157 +  by (import numeral numeral_evenodd)
  8.2158 +
  8.2159 +lemma numeral_fact: "ALL n. FACT n = (if n = 0 then 1 else n * FACT (PRE n))"
  8.2160 +  by (import numeral numeral_fact)
  8.2161 +
  8.2162 +lemma numeral_funpow: "ALL n. (f ^ n) x = (if n = 0 then x else (f ^ (n - 1)) (f x))"
  8.2163 +  by (import numeral numeral_funpow)
  8.2164 +
  8.2165 +;end_setup
  8.2166 +
  8.2167 +;setup_theory ind_type
  8.2168 +
  8.2169 +lemma INJ_INVERSE2: "ALL P::'A => 'B => 'C.
  8.2170 +   (ALL (x1::'A) (y1::'B) (x2::'A) y2::'B.
  8.2171 +       (P x1 y1 = P x2 y2) = (x1 = x2 & y1 = y2)) -->
  8.2172 +   (EX (x::'C => 'A) Y::'C => 'B.
  8.2173 +       ALL (xa::'A) y::'B. x (P xa y) = xa & Y (P xa y) = y)"
  8.2174 +  by (import ind_type INJ_INVERSE2)
  8.2175 +
  8.2176 +constdefs
  8.2177 +  NUMPAIR :: "nat => nat => nat" 
  8.2178 +  "NUMPAIR == %x y. 2 ^ x * (2 * y + 1)"
  8.2179 +
  8.2180 +lemma NUMPAIR: "ALL x y. NUMPAIR x y = 2 ^ x * (2 * y + 1)"
  8.2181 +  by (import ind_type NUMPAIR)
  8.2182 +
  8.2183 +lemma NUMPAIR_INJ_LEMMA: "ALL x xa xb xc. NUMPAIR x xa = NUMPAIR xb xc --> x = xb"
  8.2184 +  by (import ind_type NUMPAIR_INJ_LEMMA)
  8.2185 +
  8.2186 +lemma NUMPAIR_INJ: "ALL x1 y1 x2 y2. (NUMPAIR x1 y1 = NUMPAIR x2 y2) = (x1 = x2 & y1 = y2)"
  8.2187 +  by (import ind_type NUMPAIR_INJ)
  8.2188 +
  8.2189 +consts
  8.2190 +  NUMSND :: "nat => nat" 
  8.2191 +  NUMFST :: "nat => nat" 
  8.2192 +
  8.2193 +specification (NUMFST NUMSND) NUMPAIR_DEST: "ALL x y. NUMFST (NUMPAIR x y) = x & NUMSND (NUMPAIR x y) = y"
  8.2194 +  by (import ind_type NUMPAIR_DEST)
  8.2195 +
  8.2196 +constdefs
  8.2197 +  NUMSUM :: "bool => nat => nat" 
  8.2198 +  "NUMSUM == %b x. if b then Suc (2 * x) else 2 * x"
  8.2199 +
  8.2200 +lemma NUMSUM: "ALL b x. NUMSUM b x = (if b then Suc (2 * x) else 2 * x)"
  8.2201 +  by (import ind_type NUMSUM)
  8.2202 +
  8.2203 +lemma NUMSUM_INJ: "ALL b1 x1 b2 x2. (NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)"
  8.2204 +  by (import ind_type NUMSUM_INJ)
  8.2205 +
  8.2206 +consts
  8.2207 +  NUMRIGHT :: "nat => nat" 
  8.2208 +  NUMLEFT :: "nat => bool" 
  8.2209 +
  8.2210 +specification (NUMLEFT NUMRIGHT) NUMSUM_DEST: "ALL x y. NUMLEFT (NUMSUM x y) = x & NUMRIGHT (NUMSUM x y) = y"
  8.2211 +  by (import ind_type NUMSUM_DEST)
  8.2212 +
  8.2213 +constdefs
  8.2214 +  INJN :: "nat => nat => 'a => bool" 
  8.2215 +  "INJN == %m n a. n = m"
  8.2216 +
  8.2217 +lemma INJN: "ALL m. INJN m = (%n a. n = m)"
  8.2218 +  by (import ind_type INJN)
  8.2219 +
  8.2220 +lemma INJN_INJ: "ALL n1 n2. (INJN n1 = INJN n2) = (n1 = n2)"
  8.2221 +  by (import ind_type INJN_INJ)
  8.2222 +
  8.2223 +constdefs
  8.2224 +  INJA :: "'a => nat => 'a => bool" 
  8.2225 +  "INJA == %a n b. b = a"
  8.2226 +
  8.2227 +lemma INJA: "ALL a. INJA a = (%n b. b = a)"
  8.2228 +  by (import ind_type INJA)
  8.2229 +
  8.2230 +lemma INJA_INJ: "ALL a1 a2. (INJA a1 = INJA a2) = (a1 = a2)"
  8.2231 +  by (import ind_type INJA_INJ)
  8.2232 +
  8.2233 +constdefs
  8.2234 +  INJF :: "(nat => nat => 'a => bool) => nat => 'a => bool" 
  8.2235 +  "INJF == %f n. f (NUMFST n) (NUMSND n)"
  8.2236 +
  8.2237 +lemma INJF: "ALL f. INJF f = (%n. f (NUMFST n) (NUMSND n))"
  8.2238 +  by (import ind_type INJF)
  8.2239 +
  8.2240 +lemma INJF_INJ: "ALL f1 f2. (INJF f1 = INJF f2) = (f1 = f2)"
  8.2241 +  by (import ind_type INJF_INJ)
  8.2242 +
  8.2243 +constdefs
  8.2244 +  INJP :: "(nat => 'a => bool) => (nat => 'a => bool) => nat => 'a => bool" 
  8.2245 +  "INJP ==
  8.2246 +%f1 f2 n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a"
  8.2247 +
  8.2248 +lemma INJP: "ALL f1 f2.
  8.2249 +   INJP f1 f2 =
  8.2250 +   (%n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a)"
  8.2251 +  by (import ind_type INJP)
  8.2252 +
  8.2253 +lemma INJP_INJ: "ALL f1 f1' f2 f2'. (INJP f1 f2 = INJP f1' f2') = (f1 = f1' & f2 = f2')"
  8.2254 +  by (import ind_type INJP_INJ)
  8.2255 +
  8.2256 +constdefs
  8.2257 +  ZCONSTR :: "nat => 'a => (nat => nat => 'a => bool) => nat => 'a => bool" 
  8.2258 +  "ZCONSTR == %c i r. INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
  8.2259 +
  8.2260 +lemma ZCONSTR: "ALL c i r. ZCONSTR c i r = INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
  8.2261 +  by (import ind_type ZCONSTR)
  8.2262 +
  8.2263 +constdefs
  8.2264 +  ZBOT :: "nat => 'a => bool" 
  8.2265 +  "ZBOT == INJP (INJN 0) (SOME z. True)"
  8.2266 +
  8.2267 +lemma ZBOT: "ZBOT = INJP (INJN 0) (SOME z. True)"
  8.2268 +  by (import ind_type ZBOT)
  8.2269 +
  8.2270 +lemma ZCONSTR_ZBOT: "ALL x xa xb. ZCONSTR x xa xb ~= ZBOT"
  8.2271 +  by (import ind_type ZCONSTR_ZBOT)
  8.2272 +
  8.2273 +constdefs
  8.2274 +  ZRECSPACE :: "(nat => 'a => bool) => bool" 
  8.2275 +  "ZRECSPACE ==
  8.2276 +%a0. ALL ZRECSPACE'.
  8.2277 +        (ALL a0.
  8.2278 +            a0 = ZBOT |
  8.2279 +            (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
  8.2280 +            ZRECSPACE' a0) -->
  8.2281 +        ZRECSPACE' a0"
  8.2282 +
  8.2283 +lemma ZRECSPACE: "ZRECSPACE =
  8.2284 +(%a0. ALL ZRECSPACE'.
  8.2285 +         (ALL a0.
  8.2286 +             a0 = ZBOT |
  8.2287 +             (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
  8.2288 +             ZRECSPACE' a0) -->
  8.2289 +         ZRECSPACE' a0)"
  8.2290 +  by (import ind_type ZRECSPACE)
  8.2291 +
  8.2292 +lemma ZRECSPACE_rules: "(op &::bool => bool => bool)
  8.2293 + ((ZRECSPACE::(nat => 'a => bool) => bool) (ZBOT::nat => 'a => bool))
  8.2294 + ((All::(nat => bool) => bool)
  8.2295 +   (%c::nat.
  8.2296 +       (All::('a => bool) => bool)
  8.2297 +        (%i::'a.
  8.2298 +            (All::((nat => nat => 'a => bool) => bool) => bool)
  8.2299 +             (%r::nat => nat => 'a => bool.
  8.2300 +                 (op -->::bool => bool => bool)
  8.2301 +                  ((All::(nat => bool) => bool)
  8.2302 +                    (%n::nat.
  8.2303 +                        (ZRECSPACE::(nat => 'a => bool) => bool) (r n)))
  8.2304 +                  ((ZRECSPACE::(nat => 'a => bool) => bool)
  8.2305 +                    ((ZCONSTR::nat
  8.2306 +                               => 'a => (nat => nat => 'a => bool)
  8.2307 +  => nat => 'a => bool)
  8.2308 +                      c i r))))))"
  8.2309 +  by (import ind_type ZRECSPACE_rules)
  8.2310 +
  8.2311 +lemma ZRECSPACE_ind: "ALL x.
  8.2312 +   x ZBOT & (ALL c i r. (ALL n. x (r n)) --> x (ZCONSTR c i r)) -->
  8.2313 +   (ALL a0. ZRECSPACE a0 --> x a0)"
  8.2314 +  by (import ind_type ZRECSPACE_ind)
  8.2315 +
  8.2316 +lemma ZRECSPACE_cases: "ALL a0.
  8.2317 +   ZRECSPACE a0 =
  8.2318 +   (a0 = ZBOT | (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE (r n))))"
  8.2319 +  by (import ind_type ZRECSPACE_cases)
  8.2320 +
  8.2321 +typedef (open) ('a) recspace = "(Collect::((nat => 'a => bool) => bool) => (nat => 'a => bool) set)
  8.2322 + (ZRECSPACE::(nat => 'a => bool) => bool)" 
  8.2323 +  by (rule typedef_helper,import ind_type recspace_TY_DEF)
  8.2324 +
  8.2325 +lemmas recspace_TY_DEF = typedef_hol2hol4 [OF type_definition_recspace]
  8.2326 +
  8.2327 +consts
  8.2328 +  mk_rec :: "(nat => 'a => bool) => 'a recspace" 
  8.2329 +  dest_rec :: "'a recspace => nat => 'a => bool" 
  8.2330 +
  8.2331 +specification (dest_rec mk_rec) recspace_repfns: "(ALL a::'a recspace. mk_rec (dest_rec a) = a) &
  8.2332 +(ALL r::nat => 'a => bool. ZRECSPACE r = (dest_rec (mk_rec r) = r))"
  8.2333 +  by (import ind_type recspace_repfns)
  8.2334 +
  8.2335 +constdefs
  8.2336 +  BOTTOM :: "'a recspace" 
  8.2337 +  "BOTTOM == mk_rec ZBOT"
  8.2338 +
  8.2339 +lemma BOTTOM: "BOTTOM = mk_rec ZBOT"
  8.2340 +  by (import ind_type BOTTOM)
  8.2341 +
  8.2342 +constdefs
  8.2343 +  CONSTR :: "nat => 'a => (nat => 'a recspace) => 'a recspace" 
  8.2344 +  "CONSTR == %c i r. mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
  8.2345 +
  8.2346 +lemma CONSTR: "ALL c i r. CONSTR c i r = mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
  8.2347 +  by (import ind_type CONSTR)
  8.2348 +
  8.2349 +lemma MK_REC_INJ: "ALL x y. mk_rec x = mk_rec y --> ZRECSPACE x & ZRECSPACE y --> x = y"
  8.2350 +  by (import ind_type MK_REC_INJ)
  8.2351 +
  8.2352 +lemma DEST_REC_INJ: "ALL x y. (dest_rec x = dest_rec y) = (x = y)"
  8.2353 +  by (import ind_type DEST_REC_INJ)
  8.2354 +
  8.2355 +lemma CONSTR_BOT: "ALL c i r. CONSTR c i r ~= BOTTOM"
  8.2356 +  by (import ind_type CONSTR_BOT)
  8.2357 +
  8.2358 +lemma CONSTR_INJ: "ALL c1 i1 r1 c2 i2 r2.
  8.2359 +   (CONSTR c1 i1 r1 = CONSTR c2 i2 r2) = (c1 = c2 & i1 = i2 & r1 = r2)"
  8.2360 +  by (import ind_type CONSTR_INJ)
  8.2361 +
  8.2362 +lemma CONSTR_IND: "ALL P.
  8.2363 +   P BOTTOM & (ALL c i r. (ALL n. P (r n)) --> P (CONSTR c i r)) --> All P"
  8.2364 +  by (import ind_type CONSTR_IND)
  8.2365 +
  8.2366 +lemma CONSTR_REC: "ALL Fn. EX f. ALL c i r. f (CONSTR c i r) = Fn c i r (%n. f (r n))"
  8.2367 +  by (import ind_type CONSTR_REC)
  8.2368 +
  8.2369 +consts
  8.2370 +  FCONS :: "'a => (nat => 'a) => nat => 'a" 
  8.2371 +
  8.2372 +specification (FCONS) FCONS: "(ALL (a::'a) f::nat => 'a. FCONS a f (0::nat) = a) &
  8.2373 +(ALL (a::'a) (f::nat => 'a) n::nat. FCONS a f (Suc n) = f n)"
  8.2374 +  by (import ind_type FCONS)
  8.2375 +
  8.2376 +constdefs
  8.2377 +  FNIL :: "nat => 'a" 
  8.2378 +  "FNIL == %n. SOME x. True"
  8.2379 +
  8.2380 +lemma FNIL: "ALL n. FNIL n = (SOME x. True)"
  8.2381 +  by (import ind_type FNIL)
  8.2382 +
  8.2383 +constdefs
  8.2384 +  ISO :: "('a => 'b) => ('b => 'a) => bool" 
  8.2385 +  "ISO == %f g. (ALL x. f (g x) = x) & (ALL y. g (f y) = y)"
  8.2386 +
  8.2387 +lemma ISO: "ALL f g. ISO f g = ((ALL x. f (g x) = x) & (ALL y. g (f y) = y))"
  8.2388 +  by (import ind_type ISO)
  8.2389 +
  8.2390 +lemma ISO_REFL: "ISO (%x. x) (%x. x)"
  8.2391 +  by (import ind_type ISO_REFL)
  8.2392 +
  8.2393 +lemma ISO_FUN: "ISO (f::'a => 'c) (f'::'c => 'a) & ISO (g::'b => 'd) (g'::'d => 'b) -->
  8.2394 +ISO (%(h::'a => 'b) a'::'c. g (h (f' a')))
  8.2395 + (%(h::'c => 'd) a::'a. g' (h (f a)))"
  8.2396 +  by (import ind_type ISO_FUN)
  8.2397 +
  8.2398 +lemma ISO_USAGE: "ISO f g -->
  8.2399 +(ALL P. All P = (ALL x. P (g x))) &
  8.2400 +(ALL P. Ex P = (EX x. P (g x))) & (ALL a b. (a = g b) = (f a = b))"
  8.2401 +  by (import ind_type ISO_USAGE)
  8.2402 +
  8.2403 +;end_setup
  8.2404 +
  8.2405 +;setup_theory divides
  8.2406 +
  8.2407 +lemma ONE_DIVIDES_ALL: "All (op dvd (1::nat))"
  8.2408 +  by (import divides ONE_DIVIDES_ALL)
  8.2409 +
  8.2410 +lemma DIVIDES_ADD_2: "ALL (a::nat) (b::nat) c::nat. a dvd b & a dvd b + c --> a dvd c"
  8.2411 +  by (import divides DIVIDES_ADD_2)
  8.2412 +
  8.2413 +lemma NOT_LT_DIV: "ALL (a::nat) b::nat. (0::nat) < b & b < a --> ~ a dvd b"
  8.2414 +  by (import divides NOT_LT_DIV)
  8.2415 +
  8.2416 +lemma DIVIDES_FACT: "ALL b. 0 < b --> b dvd FACT b"
  8.2417 +  by (import divides DIVIDES_FACT)
  8.2418 +
  8.2419 +lemma DIVIDES_MULT_LEFT: "ALL (x::nat) xa::nat. (x * xa dvd xa) = (xa = (0::nat) | x = (1::nat))"
  8.2420 +  by (import divides DIVIDES_MULT_LEFT)
  8.2421 +
  8.2422 +;end_setup
  8.2423 +
  8.2424 +;setup_theory prime
  8.2425 +
  8.2426 +consts
  8.2427 +  prime :: "nat => bool" 
  8.2428 +
  8.2429 +defs
  8.2430 +  prime_primdef: "prime.prime == %a. a ~= 1 & (ALL b. b dvd a --> b = a | b = 1)"
  8.2431 +
  8.2432 +lemma prime_def: "ALL a. prime.prime a = (a ~= 1 & (ALL b. b dvd a --> b = a | b = 1))"
  8.2433 +  by (import prime prime_def)
  8.2434 +
  8.2435 +lemma NOT_PRIME_0: "~ prime.prime 0"
  8.2436 +  by (import prime NOT_PRIME_0)
  8.2437 +
  8.2438 +lemma NOT_PRIME_1: "~ prime.prime 1"
  8.2439 +  by (import prime NOT_PRIME_1)
  8.2440 +
  8.2441 +;end_setup
  8.2442 +
  8.2443 +;setup_theory list
  8.2444 +
  8.2445 +consts
  8.2446 +  EL :: "nat => 'a list => 'a" 
  8.2447 +
  8.2448 +specification (EL) EL: "(ALL l::'a list. EL (0::nat) l = hd l) &
  8.2449 +(ALL (l::'a list) n::nat. EL (Suc n) l = EL n (tl l))"
  8.2450 +  by (import list EL)
  8.2451 +
  8.2452 +lemma NULL: "(op &::bool => bool => bool) ((null::'a list => bool) ([]::'a list))
  8.2453 + ((All::('a => bool) => bool)
  8.2454 +   (%x::'a.
  8.2455 +       (All::('a list => bool) => bool)
  8.2456 +        (%xa::'a list.
  8.2457 +            (Not::bool => bool)
  8.2458 +             ((null::'a list => bool)
  8.2459 +               ((op #::'a => 'a list => 'a list) x xa)))))"
  8.2460 +  by (import list NULL)
  8.2461 +
  8.2462 +lemma list_case_compute: "ALL l. list_case b f l = (if null l then b else f (hd l) (tl l))"
  8.2463 +  by (import list list_case_compute)
  8.2464 +
  8.2465 +lemma LIST_NOT_EQ: "ALL l1 l2. l1 ~= l2 --> (ALL x xa. x # l1 ~= xa # l2)"
  8.2466 +  by (import list LIST_NOT_EQ)
  8.2467 +
  8.2468 +lemma NOT_EQ_LIST: "ALL h1 h2. h1 ~= h2 --> (ALL x xa. h1 # x ~= h2 # xa)"
  8.2469 +  by (import list NOT_EQ_LIST)
  8.2470 +
  8.2471 +lemma EQ_LIST: "ALL h1 h2. h1 = h2 --> (ALL l1 l2. l1 = l2 --> h1 # l1 = h2 # l2)"
  8.2472 +  by (import list EQ_LIST)
  8.2473 +
  8.2474 +lemma CONS: "ALL l. ~ null l --> hd l # tl l = l"
  8.2475 +  by (import list CONS)
  8.2476 +
  8.2477 +lemma MAP_EQ_NIL: "ALL l f. (map f l = []) = (l = []) & ([] = map f l) = (l = [])"
  8.2478 +  by (import list MAP_EQ_NIL)
  8.2479 +
  8.2480 +lemma EVERY_EL: "ALL l P. list_all P l = (ALL n<length l. P (EL n l))"
  8.2481 +  by (import list EVERY_EL)
  8.2482 +
  8.2483 +lemma EVERY_CONJ: "ALL l. list_all (%x. P x & Q x) l = (list_all P l & list_all Q l)"
  8.2484 +  by (import list EVERY_CONJ)
  8.2485 +
  8.2486 +lemma EVERY_MEM: "ALL P l. list_all P l = (ALL e. e mem l --> P e)"
  8.2487 +  by (import list EVERY_MEM)
  8.2488 +
  8.2489 +lemma EXISTS_MEM: "ALL P l. list_exists P l = (EX e. e mem l & P e)"
  8.2490 +  by (import list EXISTS_MEM)
  8.2491 +
  8.2492 +lemma MEM_APPEND: "ALL e l1 l2. e mem l1 @ l2 = (e mem l1 | e mem l2)"
  8.2493 +  by (import list MEM_APPEND)
  8.2494 +
  8.2495 +lemma EXISTS_APPEND: "ALL P l1 l2. list_exists P (l1 @ l2) = (list_exists P l1 | list_exists P l2)"
  8.2496 +  by (import list EXISTS_APPEND)
  8.2497 +
  8.2498 +lemma NOT_EVERY: "ALL P l. (~ list_all P l) = list_exists (Not o P) l"
  8.2499 +  by (import list NOT_EVERY)
  8.2500 +
  8.2501 +lemma NOT_EXISTS: "ALL P l. (~ list_exists P l) = list_all (Not o P) l"
  8.2502 +  by (import list NOT_EXISTS)
  8.2503 +
  8.2504 +lemma MEM_MAP: "ALL l f x. x mem map f l = (EX y. x = f y & y mem l)"
  8.2505 +  by (import list MEM_MAP)
  8.2506 +
  8.2507 +lemma LENGTH_CONS: "ALL l n. (length l = Suc n) = (EX h l'. length l' = n & l = h # l')"
  8.2508 +  by (import list LENGTH_CONS)
  8.2509 +
  8.2510 +lemma LENGTH_EQ_CONS: "ALL P n.
  8.2511 +   (ALL l. length l = Suc n --> P l) =
  8.2512 +   (ALL l. length l = n --> (ALL x. P (x # l)))"
  8.2513 +  by (import list LENGTH_EQ_CONS)
  8.2514 +
  8.2515 +lemma LENGTH_EQ_NIL: "ALL P. (ALL l. length l = 0 --> P l) = P []"
  8.2516 +  by (import list LENGTH_EQ_NIL)
  8.2517 +
  8.2518 +lemma CONS_ACYCLIC: "ALL l x. l ~= x # l & x # l ~= l"
  8.2519 +  by (import list CONS_ACYCLIC)
  8.2520 +
  8.2521 +lemma APPEND_eq_NIL: "(ALL (l1::'a list) l2::'a list. ([] = l1 @ l2) = (l1 = [] & l2 = [])) &
  8.2522 +(ALL (l1::'a list) l2::'a list. (l1 @ l2 = []) = (l1 = [] & l2 = []))"
  8.2523 +  by (import list APPEND_eq_NIL)
  8.2524 +
  8.2525 +lemma APPEND_11: "(ALL (l1::'a list) (l2::'a list) l3::'a list.
  8.2526 +    (l1 @ l2 = l1 @ l3) = (l2 = l3)) &
  8.2527 +(ALL (l1::'a list) (l2::'a list) l3::'a list.
  8.2528 +    (l2 @ l1 = l3 @ l1) = (l2 = l3))"
  8.2529 +  by (import list APPEND_11)
  8.2530 +
  8.2531 +lemma EL_compute: "ALL n. EL n l = (if n = 0 then hd l else EL (PRE n) (tl l))"
  8.2532 +  by (import list EL_compute)
  8.2533 +
  8.2534 +lemma WF_LIST_PRED: "WF (%L1 L2. EX h. L2 = h # L1)"
  8.2535 +  by (import list WF_LIST_PRED)
  8.2536 +
  8.2537 +lemma list_size_cong: "ALL M N f f'.
  8.2538 +   M = N & (ALL x. x mem N --> f x = f' x) -->
  8.2539 +   list_size f M = list_size f' N"
  8.2540 +  by (import list list_size_cong)
  8.2541 +
  8.2542 +lemma FOLDR_CONG: "ALL l l' b b' f f'.
  8.2543 +   l = l' & b = b' & (ALL x a. x mem l' --> f x a = f' x a) -->
  8.2544 +   foldr f l b = foldr f' l' b'"
  8.2545 +  by (import list FOLDR_CONG)
  8.2546 +
  8.2547 +lemma FOLDL_CONG: "ALL l l' b b' f f'.
  8.2548 +   l = l' & b = b' & (ALL x a. x mem l' --> f a x = f' a x) -->
  8.2549 +   foldl f b l = foldl f' b' l'"
  8.2550 +  by (import list FOLDL_CONG)
  8.2551 +
  8.2552 +lemma MAP_CONG: "ALL l1 l2 f f'.
  8.2553 +   l1 = l2 & (ALL x. x mem l2 --> f x = f' x) --> map f l1 = map f' l2"
  8.2554 +  by (import list MAP_CONG)
  8.2555 +
  8.2556 +lemma EXISTS_CONG: "ALL l1 l2 P P'.
  8.2557 +   l1 = l2 & (ALL x. x mem l2 --> P x = P' x) -->
  8.2558 +   list_exists P l1 = list_exists P' l2"
  8.2559 +  by (import list EXISTS_CONG)
  8.2560 +
  8.2561 +lemma EVERY_CONG: "ALL l1 l2 P P'.
  8.2562 +   l1 = l2 & (ALL x. x mem l2 --> P x = P' x) -->
  8.2563 +   list_all P l1 = list_all P' l2"
  8.2564 +  by (import list EVERY_CONG)
  8.2565 +
  8.2566 +lemma EVERY_MONOTONIC: "ALL P Q. (ALL x. P x --> Q x) --> (ALL l. list_all P l --> list_all Q l)"
  8.2567 +  by (import list EVERY_MONOTONIC)
  8.2568 +
  8.2569 +lemma LENGTH_ZIP: "ALL l1 l2.
  8.2570 +   length l1 = length l2 -->
  8.2571 +   length (zip l1 l2) = length l1 & length (zip l1 l2) = length l2"
  8.2572 +  by (import list LENGTH_ZIP)
  8.2573 +
  8.2574 +lemma LENGTH_UNZIP: "ALL pl.
  8.2575 +   length (fst (unzip pl)) = length pl & length (snd (unzip pl)) = length pl"
  8.2576 +  by (import list LENGTH_UNZIP)
  8.2577 +
  8.2578 +lemma ZIP_UNZIP: "ALL l. ZIP (unzip l) = l"
  8.2579 +  by (import list ZIP_UNZIP)
  8.2580 +
  8.2581 +lemma UNZIP_ZIP: "ALL l1 l2. length l1 = length l2 --> unzip (zip l1 l2) = (l1, l2)"
  8.2582 +  by (import list UNZIP_ZIP)
  8.2583 +
  8.2584 +lemma ZIP_MAP: "ALL l1 l2 f1 f2.
  8.2585 +   length l1 = length l2 -->
  8.2586 +   zip (map f1 l1) l2 = map (%p. (f1 (fst p), snd p)) (zip l1 l2) &
  8.2587 +   zip l1 (map f2 l2) = map (%p. (fst p, f2 (snd p))) (zip l1 l2)"
  8.2588 +  by (import list ZIP_MAP)
  8.2589 +
  8.2590 +lemma MEM_ZIP: "ALL l1 l2 p.
  8.2591 +   length l1 = length l2 -->
  8.2592 +   p mem zip l1 l2 = (EX n<length l1. p = (EL n l1, EL n l2))"
  8.2593 +  by (import list MEM_ZIP)
  8.2594 +
  8.2595 +lemma EL_ZIP: "ALL l1 l2 n.
  8.2596 +   length l1 = length l2 & n < length l1 -->
  8.2597 +   EL n (zip l1 l2) = (EL n l1, EL n l2)"
  8.2598 +  by (import list EL_ZIP)
  8.2599 +
  8.2600 +lemma MAP2_ZIP: "ALL l1 l2.
  8.2601 +   length l1 = length l2 -->
  8.2602 +   (ALL f. map2 f l1 l2 = map (split f) (zip l1 l2))"
  8.2603 +  by (import list MAP2_ZIP)
  8.2604 +
  8.2605 +lemma MEM_EL: "ALL l x. x mem l = (EX n<length l. x = EL n l)"
  8.2606 +  by (import list MEM_EL)
  8.2607 +
  8.2608 +lemma LAST_CONS: "(ALL x::'a. last [x] = x) &
  8.2609 +(ALL (x::'a) (xa::'a) xb::'a list. last (x # xa # xb) = last (xa # xb))"
  8.2610 +  by (import list LAST_CONS)
  8.2611 +
  8.2612 +lemma FRONT_CONS: "(ALL x::'a. butlast [x] = []) &
  8.2613 +(ALL (x::'a) (xa::'a) xb::'a list.
  8.2614 +    butlast (x # xa # xb) = x # butlast (xa # xb))"
  8.2615 +  by (import list FRONT_CONS)
  8.2616 +
  8.2617 +;end_setup
  8.2618 +
  8.2619 +;setup_theory pred_set
  8.2620 +
  8.2621 +lemma EXTENSION: "ALL s t. (s = t) = (ALL x. IN x s = IN x t)"
  8.2622 +  by (import pred_set EXTENSION)
  8.2623 +
  8.2624 +lemma NOT_EQUAL_SETS: "ALL x xa. (x ~= xa) = (EX xb. IN xb xa = (~ IN xb x))"
  8.2625 +  by (import pred_set NOT_EQUAL_SETS)
  8.2626 +
  8.2627 +lemma NUM_SET_WOP: "ALL s::nat => bool.
  8.2628 +   (EX n::nat. IN n s) =
  8.2629 +   (EX n::nat. IN n s & (ALL m::nat. IN m s --> n <= m))"
  8.2630 +  by (import pred_set NUM_SET_WOP)
  8.2631 +
  8.2632 +consts
  8.2633 +  GSPEC :: "('b => 'a * bool) => 'a => bool" 
  8.2634 +
  8.2635 +specification (GSPEC) GSPECIFICATION: "ALL (f::'b => 'a * bool) v::'a. IN v (GSPEC f) = (EX x::'b. (v, True) = f x)"
  8.2636 +  by (import pred_set GSPECIFICATION)
  8.2637 +
  8.2638 +lemma SET_MINIMUM: "ALL (s::'a => bool) M::'a => nat.
  8.2639 +   (EX x::'a. IN x s) =
  8.2640 +   (EX x::'a. IN x s & (ALL y::'a. IN y s --> M x <= M y))"
  8.2641 +  by (import pred_set SET_MINIMUM)
  8.2642 +
  8.2643 +constdefs
  8.2644 +  EMPTY :: "'a => bool" 
  8.2645 +  "EMPTY == %x. False"
  8.2646 +
  8.2647 +lemma EMPTY_DEF: "EMPTY = (%x. False)"
  8.2648 +  by (import pred_set EMPTY_DEF)
  8.2649 +
  8.2650 +lemma NOT_IN_EMPTY: "ALL x. ~ IN x EMPTY"
  8.2651 +  by (import pred_set NOT_IN_EMPTY)
  8.2652 +
  8.2653 +lemma MEMBER_NOT_EMPTY: "ALL x. (EX xa. IN xa x) = (x ~= EMPTY)"
  8.2654 +  by (import pred_set MEMBER_NOT_EMPTY)
  8.2655 +
  8.2656 +constdefs
  8.2657 +  UNIV :: "'a => bool" 
  8.2658 +  "pred_set.UNIV == %x. True"
  8.2659 +
  8.2660 +lemma UNIV_DEF: "pred_set.UNIV = (%x. True)"
  8.2661 +  by (import pred_set UNIV_DEF)
  8.2662 +
  8.2663 +lemma IN_UNIV: "ALL x. IN x pred_set.UNIV"
  8.2664 +  by (import pred_set IN_UNIV)
  8.2665 +
  8.2666 +lemma UNIV_NOT_EMPTY: "pred_set.UNIV ~= EMPTY"
  8.2667 +  by (import pred_set UNIV_NOT_EMPTY)
  8.2668 +
  8.2669 +lemma EMPTY_NOT_UNIV: "EMPTY ~= pred_set.UNIV"
  8.2670 +  by (import pred_set EMPTY_NOT_UNIV)
  8.2671 +
  8.2672 +lemma EQ_UNIV: "(ALL x. IN x s) = (s = pred_set.UNIV)"
  8.2673 +  by (import pred_set EQ_UNIV)
  8.2674 +
  8.2675 +constdefs
  8.2676 +  SUBSET :: "('a => bool) => ('a => bool) => bool" 
  8.2677 +  "SUBSET == %s t. ALL x. IN x s --> IN x t"
  8.2678 +
  8.2679 +lemma SUBSET_DEF: "ALL s t. SUBSET s t = (ALL x. IN x s --> IN x t)"
  8.2680 +  by (import pred_set SUBSET_DEF)
  8.2681 +
  8.2682 +lemma SUBSET_TRANS: "ALL x xa xb. SUBSET x xa & SUBSET xa xb --> SUBSET x xb"
  8.2683 +  by (import pred_set SUBSET_TRANS)
  8.2684 +
  8.2685 +lemma SUBSET_REFL: "ALL x. SUBSET x x"
  8.2686 +  by (import pred_set SUBSET_REFL)
  8.2687 +
  8.2688 +lemma SUBSET_ANTISYM: "ALL x xa. SUBSET x xa & SUBSET xa x --> x = xa"
  8.2689 +  by (import pred_set SUBSET_ANTISYM)
  8.2690 +
  8.2691 +lemma EMPTY_SUBSET: "All (SUBSET EMPTY)"
  8.2692 +  by (import pred_set EMPTY_SUBSET)
  8.2693 +
  8.2694 +lemma SUBSET_EMPTY: "ALL x. SUBSET x EMPTY = (x = EMPTY)"
  8.2695 +  by (import pred_set SUBSET_EMPTY)
  8.2696 +
  8.2697 +lemma SUBSET_UNIV: "ALL x. SUBSET x pred_set.UNIV"
  8.2698 +  by (import pred_set SUBSET_UNIV)
  8.2699 +
  8.2700 +lemma UNIV_SUBSET: "ALL x. SUBSET pred_set.UNIV x = (x = pred_set.UNIV)"
  8.2701 +  by (import pred_set UNIV_SUBSET)
  8.2702 +
  8.2703 +constdefs
  8.2704 +  PSUBSET :: "('a => bool) => ('a => bool) => bool" 
  8.2705 +  "PSUBSET == %s t. SUBSET s t & s ~= t"
  8.2706 +
  8.2707 +lemma PSUBSET_DEF: "ALL s t. PSUBSET s t = (SUBSET s t & s ~= t)"
  8.2708 +  by (import pred_set PSUBSET_DEF)
  8.2709 +
  8.2710 +lemma PSUBSET_TRANS: "ALL x xa xb. PSUBSET x xa & PSUBSET xa xb --> PSUBSET x xb"
  8.2711 +  by (import pred_set PSUBSET_TRANS)
  8.2712 +
  8.2713 +lemma PSUBSET_IRREFL: "ALL x. ~ PSUBSET x x"
  8.2714 +  by (import pred_set PSUBSET_IRREFL)
  8.2715 +
  8.2716 +lemma NOT_PSUBSET_EMPTY: "ALL x. ~ PSUBSET x EMPTY"
  8.2717 +  by (import pred_set NOT_PSUBSET_EMPTY)
  8.2718 +
  8.2719 +lemma NOT_UNIV_PSUBSET: "ALL x. ~ PSUBSET pred_set.UNIV x"
  8.2720 +  by (import pred_set NOT_UNIV_PSUBSET)
  8.2721 +
  8.2722 +lemma PSUBSET_UNIV: "ALL x. PSUBSET x pred_set.UNIV = (EX xa. ~ IN xa x)"
  8.2723 +  by (import pred_set PSUBSET_UNIV)
  8.2724 +
  8.2725 +constdefs
  8.2726 +  UNION :: "('a => bool) => ('a => bool) => 'a => bool" 
  8.2727 +  "pred_set.UNION == %s t. GSPEC (%x. (x, IN x s | IN x t))"
  8.2728 +
  8.2729 +lemma UNION_DEF: "ALL s t. pred_set.UNION s t = GSPEC (%x. (x, IN x s | IN x t))"
  8.2730 +  by (import pred_set UNION_DEF)
  8.2731 +
  8.2732 +lemma IN_UNION: "ALL x xa xb. IN xb (pred_set.UNION x xa) = (IN xb x | IN xb xa)"
  8.2733 +  by (import pred_set IN_UNION)
  8.2734 +
  8.2735 +lemma UNION_ASSOC: "ALL x xa xb.
  8.2736 +   pred_set.UNION x (pred_set.UNION xa xb) =
  8.2737 +   pred_set.UNION (pred_set.UNION x xa) xb"
  8.2738 +  by (import pred_set UNION_ASSOC)
  8.2739 +
  8.2740 +lemma UNION_IDEMPOT: "ALL x. pred_set.UNION x x = x"
  8.2741 +  by (import pred_set UNION_IDEMPOT)
  8.2742 +
  8.2743 +lemma UNION_COMM: "ALL x xa. pred_set.UNION x xa = pred_set.UNION xa x"
  8.2744 +  by (import pred_set UNION_COMM)
  8.2745 +
  8.2746 +lemma SUBSET_UNION: "(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION x xa)) &
  8.2747 +(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION xa x))"
  8.2748 +  by (import pred_set SUBSET_UNION)
  8.2749 +
  8.2750 +lemma UNION_SUBSET: "ALL s t u. SUBSET (pred_set.UNION s t) u = (SUBSET s u & SUBSET t u)"
  8.2751 +  by (import pred_set UNION_SUBSET)
  8.2752 +
  8.2753 +lemma SUBSET_UNION_ABSORPTION: "ALL x xa. SUBSET x xa = (pred_set.UNION x xa = xa)"
  8.2754 +  by (import pred_set SUBSET_UNION_ABSORPTION)
  8.2755 +
  8.2756 +lemma UNION_EMPTY: "(ALL x::'a => bool. pred_set.UNION EMPTY x = x) &
  8.2757 +(ALL x::'a => bool. pred_set.UNION x EMPTY = x)"
  8.2758 +  by (import pred_set UNION_EMPTY)
  8.2759 +
  8.2760 +lemma UNION_UNIV: "(ALL x::'a => bool. pred_set.UNION pred_set.UNIV x = pred_set.UNIV) &
  8.2761 +(ALL x::'a => bool. pred_set.UNION x pred_set.UNIV = pred_set.UNIV)"
  8.2762 +  by (import pred_set UNION_UNIV)
  8.2763 +
  8.2764 +lemma EMPTY_UNION: "ALL x xa. (pred_set.UNION x xa = EMPTY) = (x = EMPTY & xa = EMPTY)"
  8.2765 +  by (import pred_set EMPTY_UNION)
  8.2766 +
  8.2767 +constdefs
  8.2768 +  INTER :: "('a => bool) => ('a => bool) => 'a => bool" 
  8.2769 +  "pred_set.INTER == %s t. GSPEC (%x. (x, IN x s & IN x t))"
  8.2770 +
  8.2771 +lemma INTER_DEF: "ALL s t. pred_set.INTER s t = GSPEC (%x. (x, IN x s & IN x t))"
  8.2772 +  by (import pred_set INTER_DEF)
  8.2773 +
  8.2774 +lemma IN_INTER: "ALL x xa xb. IN xb (pred_set.INTER x xa) = (IN xb x & IN xb xa)"
  8.2775 +  by (import pred_set IN_INTER)
  8.2776 +
  8.2777 +lemma INTER_ASSOC: "ALL x xa xb.
  8.2778 +   pred_set.INTER x (pred_set.INTER xa xb) =
  8.2779 +   pred_set.INTER (pred_set.INTER x xa) xb"
  8.2780 +  by (import pred_set INTER_ASSOC)
  8.2781 +
  8.2782 +lemma INTER_IDEMPOT: "ALL x. pred_set.INTER x x = x"
  8.2783 +  by (import pred_set INTER_IDEMPOT)
  8.2784 +
  8.2785 +lemma INTER_COMM: "ALL x xa. pred_set.INTER x xa = pred_set.INTER xa x"
  8.2786 +  by (import pred_set INTER_COMM)
  8.2787 +
  8.2788 +lemma INTER_SUBSET: "(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER x xa) x) &
  8.2789 +(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER xa x) x)"
  8.2790 +  by (import pred_set INTER_SUBSET)
  8.2791 +
  8.2792 +lemma SUBSET_INTER: "ALL s t u. SUBSET s (pred_set.INTER t u) = (SUBSET s t & SUBSET s u)"
  8.2793 +  by (import pred_set SUBSET_INTER)
  8.2794 +
  8.2795 +lemma SUBSET_INTER_ABSORPTION: "ALL x xa. SUBSET x xa = (pred_set.INTER x xa = x)"
  8.2796 +  by (import pred_set SUBSET_INTER_ABSORPTION)
  8.2797 +
  8.2798 +lemma INTER_EMPTY: "(ALL x::'a => bool. pred_set.INTER EMPTY x = EMPTY) &
  8.2799 +(ALL x::'a => bool. pred_set.INTER x EMPTY = EMPTY)"
  8.2800 +  by (import pred_set INTER_EMPTY)
  8.2801 +
  8.2802 +lemma INTER_UNIV: "(ALL x::'a => bool. pred_set.INTER pred_set.UNIV x = x) &
  8.2803 +(ALL x::'a => bool. pred_set.INTER x pred_set.UNIV = x)"
  8.2804 +  by (import pred_set INTER_UNIV)
  8.2805 +
  8.2806 +lemma UNION_OVER_INTER: "ALL x xa xb.
  8.2807 +   pred_set.INTER x (pred_set.UNION xa xb) =
  8.2808 +   pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER x xb)"
  8.2809 +  by (import pred_set UNION_OVER_INTER)
  8.2810 +
  8.2811 +lemma INTER_OVER_UNION: "ALL x xa xb.
  8.2812 +   pred_set.UNION x (pred_set.INTER xa xb) =
  8.2813 +   pred_set.INTER (pred_set.UNION x xa) (pred_set.UNION x xb)"
  8.2814 +  by (import pred_set INTER_OVER_UNION)
  8.2815 +
  8.2816 +constdefs
  8.2817 +  DISJOINT :: "('a => bool) => ('a => bool) => bool" 
  8.2818 +  "DISJOINT == %s t. pred_set.INTER s t = EMPTY"
  8.2819 +
  8.2820 +lemma DISJOINT_DEF: "ALL s t. DISJOINT s t = (pred_set.INTER s t = EMPTY)"
  8.2821 +  by (import pred_set DISJOINT_DEF)
  8.2822 +
  8.2823 +lemma IN_DISJOINT: "ALL x xa. DISJOINT x xa = (~ (EX xb. IN xb x & IN xb xa))"
  8.2824 +  by (import pred_set IN_DISJOINT)
  8.2825 +
  8.2826 +lemma DISJOINT_SYM: "ALL x xa. DISJOINT x xa = DISJOINT xa x"
  8.2827 +  by (import pred_set DISJOINT_SYM)
  8.2828 +
  8.2829 +lemma DISJOINT_EMPTY: "ALL x. DISJOINT EMPTY x & DISJOINT x EMPTY"
  8.2830 +  by (import pred_set DISJOINT_EMPTY)
  8.2831 +
  8.2832 +lemma DISJOINT_EMPTY_REFL: "ALL x. (x = EMPTY) = DISJOINT x x"
  8.2833 +  by (import pred_set DISJOINT_EMPTY_REFL)
  8.2834 +
  8.2835 +lemma DISJOINT_UNION: "ALL x xa xb.
  8.2836 +   DISJOINT (pred_set.UNION x xa) xb = (DISJOINT x xb & DISJOINT xa xb)"
  8.2837 +  by (import pred_set DISJOINT_UNION)
  8.2838 +
  8.2839 +lemma DISJOINT_UNION_BOTH: "ALL s t u.
  8.2840 +   DISJOINT (pred_set.UNION s t) u = (DISJOINT s u & DISJOINT t u) &
  8.2841 +   DISJOINT u (pred_set.UNION s t) = (DISJOINT s u & DISJOINT t u)"
  8.2842 +  by (import pred_set DISJOINT_UNION_BOTH)
  8.2843 +
  8.2844 +constdefs
  8.2845 +  DIFF :: "('a => bool) => ('a => bool) => 'a => bool" 
  8.2846 +  "DIFF == %s t. GSPEC (%x. (x, IN x s & ~ IN x t))"
  8.2847 +
  8.2848 +lemma DIFF_DEF: "ALL s t. DIFF s t = GSPEC (%x. (x, IN x s & ~ IN x t))"
  8.2849 +  by (import pred_set DIFF_DEF)
  8.2850 +
  8.2851 +lemma IN_DIFF: "ALL s t x. IN x (DIFF s t) = (IN x s & ~ IN x t)"
  8.2852 +  by (import pred_set IN_DIFF)
  8.2853 +
  8.2854 +lemma DIFF_EMPTY: "ALL s. DIFF s EMPTY = s"
  8.2855 +  by (import pred_set DIFF_EMPTY)
  8.2856 +
  8.2857 +lemma EMPTY_DIFF: "ALL s. DIFF EMPTY s = EMPTY"
  8.2858 +  by (import pred_set EMPTY_DIFF)
  8.2859 +
  8.2860 +lemma DIFF_UNIV: "ALL s. DIFF s pred_set.UNIV = EMPTY"
  8.2861 +  by (import pred_set DIFF_UNIV)
  8.2862 +
  8.2863 +lemma DIFF_DIFF: "ALL x xa. DIFF (DIFF x xa) xa = DIFF x xa"
  8.2864 +  by (import pred_set DIFF_DIFF)
  8.2865 +
  8.2866 +lemma DIFF_EQ_EMPTY: "ALL x. DIFF x x = EMPTY"
  8.2867 +  by (import pred_set DIFF_EQ_EMPTY)
  8.2868 +
  8.2869 +constdefs
  8.2870 +  INSERT :: "'a => ('a => bool) => 'a => bool" 
  8.2871 +  "INSERT == %x s. GSPEC (%y. (y, y = x | IN y s))"
  8.2872 +
  8.2873 +lemma INSERT_DEF: "ALL x s. INSERT x s = GSPEC (%y. (y, y = x | IN y s))"
  8.2874 +  by (import pred_set INSERT_DEF)
  8.2875 +
  8.2876 +lemma IN_INSERT: "ALL x xa xb. IN x (INSERT xa xb) = (x = xa | IN x xb)"
  8.2877 +  by (import pred_set IN_INSERT)
  8.2878 +
  8.2879 +lemma COMPONENT: "ALL x xa. IN x (INSERT x xa)"
  8.2880 +  by (import pred_set COMPONENT)
  8.2881 +
  8.2882 +lemma SET_CASES: "ALL x. x = EMPTY | (EX xa xb. x = INSERT xa xb & ~ IN xa xb)"
  8.2883 +  by (import pred_set SET_CASES)
  8.2884 +
  8.2885 +lemma DECOMPOSITION: "ALL s x. IN x s = (EX t. s = INSERT x t & ~ IN x t)"
  8.2886 +  by (import pred_set DECOMPOSITION)
  8.2887 +
  8.2888 +lemma ABSORPTION: "ALL x xa. IN x xa = (INSERT x xa = xa)"
  8.2889 +  by (import pred_set ABSORPTION)
  8.2890 +
  8.2891 +lemma INSERT_INSERT: "ALL x xa. INSERT x (INSERT x xa) = INSERT x xa"
  8.2892 +  by (import pred_set INSERT_INSERT)
  8.2893 +
  8.2894 +lemma INSERT_COMM: "ALL x xa xb. INSERT x (INSERT xa xb) = INSERT xa (INSERT x xb)"
  8.2895 +  by (import pred_set INSERT_COMM)
  8.2896 +
  8.2897 +lemma INSERT_UNIV: "ALL x. INSERT x pred_set.UNIV = pred_set.UNIV"
  8.2898 +  by (import pred_set INSERT_UNIV)
  8.2899 +
  8.2900 +lemma NOT_INSERT_EMPTY: "ALL x xa. INSERT x xa ~= EMPTY"
  8.2901 +  by (import pred_set NOT_INSERT_EMPTY)
  8.2902 +
  8.2903 +lemma NOT_EMPTY_INSERT: "ALL x xa. EMPTY ~= INSERT x xa"
  8.2904 +  by (import pred_set NOT_EMPTY_INSERT)
  8.2905 +
  8.2906 +lemma INSERT_UNION: "ALL x s t.
  8.2907 +   pred_set.UNION (INSERT x s) t =
  8.2908 +   (if IN x t then pred_set.UNION s t else INSERT x (pred_set.UNION s t))"
  8.2909 +  by (import pred_set INSERT_UNION)
  8.2910 +
  8.2911 +lemma INSERT_UNION_EQ: "ALL x s t. pred_set.UNION (INSERT x s) t = INSERT x (pred_set.UNION s t)"
  8.2912 +  by (import pred_set INSERT_UNION_EQ)
  8.2913 +
  8.2914 +lemma INSERT_INTER: "ALL x s t.
  8.2915 +   pred_set.INTER (INSERT x s) t =
  8.2916 +   (if IN x t then INSERT x (pred_set.INTER s t) else pred_set.INTER s t)"
  8.2917 +  by (import pred_set INSERT_INTER)
  8.2918 +
  8.2919 +lemma DISJOINT_INSERT: "ALL x xa xb. DISJOINT (INSERT x xa) xb = (DISJOINT xa xb & ~ IN x xb)"
  8.2920 +  by (import pred_set DISJOINT_INSERT)
  8.2921 +
  8.2922 +lemma INSERT_SUBSET: "ALL x xa xb. SUBSET (INSERT x xa) xb = (IN x xb & SUBSET xa xb)"
  8.2923 +  by (import pred_set INSERT_SUBSET)
  8.2924 +
  8.2925 +lemma SUBSET_INSERT: "ALL x xa. ~ IN x xa --> (ALL xb. SUBSET xa (INSERT x xb) = SUBSET xa xb)"
  8.2926 +  by (import pred_set SUBSET_INSERT)
  8.2927 +
  8.2928 +lemma INSERT_DIFF: "ALL s t x.
  8.2929 +   DIFF (INSERT x s) t = (if IN x t then DIFF s t else INSERT x (DIFF s t))"
  8.2930 +  by (import pred_set INSERT_DIFF)
  8.2931 +
  8.2932 +constdefs
  8.2933 +  DELETE :: "('a => bool) => 'a => 'a => bool" 
  8.2934 +  "DELETE == %s x. DIFF s (INSERT x EMPTY)"
  8.2935 +
  8.2936 +lemma DELETE_DEF: "ALL s x. DELETE s x = DIFF s (INSERT x EMPTY)"
  8.2937 +  by (import pred_set DELETE_DEF)
  8.2938 +
  8.2939 +lemma IN_DELETE: "ALL x xa xb. IN xa (DELETE x xb) = (IN xa x & xa ~= xb)"
  8.2940 +  by (import pred_set IN_DELETE)
  8.2941 +
  8.2942 +lemma DELETE_NON_ELEMENT: "ALL x xa. (~ IN x xa) = (DELETE xa x = xa)"
  8.2943 +  by (import pred_set DELETE_NON_ELEMENT)
  8.2944 +
  8.2945 +lemma IN_DELETE_EQ: "ALL s x x'. (IN x s = IN x' s) = (IN x (DELETE s x') = IN x' (DELETE s x))"
  8.2946 +  by (import pred_set IN_DELETE_EQ)
  8.2947 +
  8.2948 +lemma EMPTY_DELETE: "ALL x. DELETE EMPTY x = EMPTY"
  8.2949 +  by (import pred_set EMPTY_DELETE)
  8.2950 +
  8.2951 +lemma DELETE_DELETE: "ALL x xa. DELETE (DELETE xa x) x = DELETE xa x"
  8.2952 +  by (import pred_set DELETE_DELETE)
  8.2953 +
  8.2954 +lemma DELETE_COMM: "ALL x xa xb. DELETE (DELETE xb x) xa = DELETE (DELETE xb xa) x"
  8.2955 +  by (import pred_set DELETE_COMM)
  8.2956 +
  8.2957 +lemma DELETE_SUBSET: "ALL x xa. SUBSET (DELETE xa x) xa"
  8.2958 +  by (import pred_set DELETE_SUBSET)
  8.2959 +
  8.2960 +lemma SUBSET_DELETE: "ALL x xa xb. SUBSET xa (DELETE xb x) = (~ IN x xa & SUBSET xa xb)"
  8.2961 +  by (import pred_set SUBSET_DELETE)
  8.2962 +
  8.2963 +lemma SUBSET_INSERT_DELETE: "ALL x s t. SUBSET s (INSERT x t) = SUBSET (DELETE s x) t"
  8.2964 +  by (import pred_set SUBSET_INSERT_DELETE)
  8.2965 +
  8.2966 +lemma DIFF_INSERT: "ALL x xa xb. DIFF x (INSERT xb xa) = DIFF (DELETE x xb) xa"
  8.2967 +  by (import pred_set DIFF_INSERT)
  8.2968 +
  8.2969 +lemma PSUBSET_INSERT_SUBSET: "ALL x xa. PSUBSET x xa = (EX xb. ~ IN xb x & SUBSET (INSERT xb x) xa)"
  8.2970 +  by (import pred_set PSUBSET_INSERT_SUBSET)
  8.2971 +
  8.2972 +lemma PSUBSET_MEMBER: "ALL s t. PSUBSET s t = (SUBSET s t & (EX y. IN y t & ~ IN y s))"
  8.2973 +  by (import pred_set PSUBSET_MEMBER)
  8.2974 +
  8.2975 +lemma DELETE_INSERT: "ALL x xa xb.
  8.2976 +   DELETE (INSERT x xb) xa =
  8.2977 +   (if x = xa then DELETE xb xa else INSERT x (DELETE xb xa))"
  8.2978 +  by (import pred_set DELETE_INSERT)
  8.2979 +
  8.2980 +lemma INSERT_DELETE: "ALL x xa. IN x xa --> INSERT x (DELETE xa x) = xa"
  8.2981 +  by (import pred_set INSERT_DELETE)
  8.2982 +
  8.2983 +lemma DELETE_INTER: "ALL x xa xb.
  8.2984 +   pred_set.INTER (DELETE x xb) xa = DELETE (pred_set.INTER x xa) xb"
  8.2985 +  by (import pred_set DELETE_INTER)
  8.2986 +
  8.2987 +lemma DISJOINT_DELETE_SYM: "ALL x xa xb. DISJOINT (DELETE x xb) xa = DISJOINT (DELETE xa xb) x"
  8.2988 +  by (import pred_set DISJOINT_DELETE_SYM)
  8.2989 +
  8.2990 +consts
  8.2991 +  CHOICE :: "('a => bool) => 'a" 
  8.2992 +
  8.2993 +specification (CHOICE) CHOICE_DEF: "ALL x. x ~= EMPTY --> IN (CHOICE x) x"
  8.2994 +  by (import pred_set CHOICE_DEF)
  8.2995 +
  8.2996 +constdefs
  8.2997 +  REST :: "('a => bool) => 'a => bool" 
  8.2998 +  "REST == %s. DELETE s (CHOICE s)"
  8.2999 +
  8.3000 +lemma REST_DEF: "ALL s. REST s = DELETE s (CHOICE s)"
  8.3001 +  by (import pred_set REST_DEF)
  8.3002 +
  8.3003 +lemma CHOICE_NOT_IN_REST: "ALL x. ~ IN (CHOICE x) (REST x)"
  8.3004 +  by (import pred_set CHOICE_NOT_IN_REST)
  8.3005 +
  8.3006 +lemma CHOICE_INSERT_REST: "ALL s. s ~= EMPTY --> INSERT (CHOICE s) (REST s) = s"
  8.3007 +  by (import pred_set CHOICE_INSERT_REST)
  8.3008 +
  8.3009 +lemma REST_SUBSET: "ALL x. SUBSET (REST x) x"
  8.3010 +  by (import pred_set REST_SUBSET)
  8.3011 +
  8.3012 +lemma REST_PSUBSET: "ALL x. x ~= EMPTY --> PSUBSET (REST x) x"
  8.3013 +  by (import pred_set REST_PSUBSET)
  8.3014 +
  8.3015 +constdefs
  8.3016 +  SING :: "('a => bool) => bool" 
  8.3017 +  "SING == %s. EX x. s = INSERT x EMPTY"
  8.3018 +
  8.3019 +lemma SING_DEF: "ALL s. SING s = (EX x. s = INSERT x EMPTY)"
  8.3020 +  by (import pred_set SING_DEF)
  8.3021 +
  8.3022 +lemma SING: "ALL x. SING (INSERT x EMPTY)"
  8.3023 +  by (import pred_set SING)
  8.3024 +
  8.3025 +lemma IN_SING: "ALL x xa. IN x (INSERT xa EMPTY) = (x = xa)"
  8.3026 +  by (import pred_set IN_SING)
  8.3027 +
  8.3028 +lemma NOT_SING_EMPTY: "ALL x. INSERT x EMPTY ~= EMPTY"
  8.3029 +  by (import pred_set NOT_SING_EMPTY)
  8.3030 +
  8.3031 +lemma NOT_EMPTY_SING: "ALL x. EMPTY ~= INSERT x EMPTY"
  8.3032 +  by (import pred_set NOT_EMPTY_SING)
  8.3033 +
  8.3034 +lemma EQUAL_SING: "ALL x xa. (INSERT x EMPTY = INSERT xa EMPTY) = (x = xa)"
  8.3035 +  by (import pred_set EQUAL_SING)
  8.3036 +
  8.3037 +lemma DISJOINT_SING_EMPTY: "ALL x. DISJOINT (INSERT x EMPTY) EMPTY"
  8.3038 +  by (import pred_set DISJOINT_SING_EMPTY)
  8.3039 +
  8.3040 +lemma INSERT_SING_UNION: "ALL x xa. INSERT xa x = pred_set.UNION (INSERT xa EMPTY) x"
  8.3041 +  by (import pred_set INSERT_SING_UNION)
  8.3042 +
  8.3043 +lemma SING_DELETE: "ALL x. DELETE (INSERT x EMPTY) x = EMPTY"
  8.3044 +  by (import pred_set SING_DELETE)
  8.3045 +
  8.3046 +lemma DELETE_EQ_SING: "ALL x xa. IN xa x --> (DELETE x xa = EMPTY) = (x = INSERT xa EMPTY)"
  8.3047 +  by (import pred_set DELETE_EQ_SING)
  8.3048 +
  8.3049 +lemma CHOICE_SING: "ALL x. CHOICE (INSERT x EMPTY) = x"
  8.3050 +  by (import pred_set CHOICE_SING)
  8.3051 +
  8.3052 +lemma REST_SING: "ALL x. REST (INSERT x EMPTY) = EMPTY"
  8.3053 +  by (import pred_set REST_SING)
  8.3054 +
  8.3055 +lemma SING_IFF_EMPTY_REST: "ALL x. SING x = (x ~= EMPTY & REST x = EMPTY)"
  8.3056 +  by (import pred_set SING_IFF_EMPTY_REST)
  8.3057 +
  8.3058 +constdefs
  8.3059 +  IMAGE :: "('a => 'b) => ('a => bool) => 'b => bool" 
  8.3060 +  "IMAGE == %f s. GSPEC (%x. (f x, IN x s))"
  8.3061 +
  8.3062 +lemma IMAGE_DEF: "ALL f s. IMAGE f s = GSPEC (%x. (f x, IN x s))"
  8.3063 +  by (import pred_set IMAGE_DEF)
  8.3064 +
  8.3065 +lemma IN_IMAGE: "ALL (x::'b) (xa::'a => bool) xb::'a => 'b.
  8.3066 +   IN x (IMAGE xb xa) = (EX xc::'a. x = xb xc & IN xc xa)"
  8.3067 +  by (import pred_set IN_IMAGE)
  8.3068 +
  8.3069 +lemma IMAGE_IN: "ALL x xa. IN x xa --> (ALL xb. IN (xb x) (IMAGE xb xa))"
  8.3070 +  by (import pred_set IMAGE_IN)
  8.3071 +
  8.3072 +lemma IMAGE_EMPTY: "ALL x. IMAGE x EMPTY = EMPTY"
  8.3073 +  by (import pred_set IMAGE_EMPTY)
  8.3074 +
  8.3075 +lemma IMAGE_ID: "ALL x. IMAGE (%x. x) x = x"
  8.3076 +  by (import pred_set IMAGE_ID)
  8.3077 +
  8.3078 +lemma IMAGE_COMPOSE: "ALL (x::'b => 'c) (xa::'a => 'b) xb::'a => bool.
  8.3079 +   IMAGE (x o xa) xb = IMAGE x (IMAGE xa xb)"
  8.3080 +  by (import pred_set IMAGE_COMPOSE)
  8.3081 +
  8.3082 +lemma IMAGE_INSERT: "ALL x xa xb. IMAGE x (INSERT xa xb) = INSERT (x xa) (IMAGE x xb)"
  8.3083 +  by (import pred_set IMAGE_INSERT)
  8.3084 +
  8.3085 +lemma IMAGE_EQ_EMPTY: "ALL s x. (IMAGE x s = EMPTY) = (s = EMPTY)"
  8.3086 +  by (import pred_set IMAGE_EQ_EMPTY)
  8.3087 +
  8.3088 +lemma IMAGE_DELETE: "ALL f x s. ~ IN x s --> IMAGE f (DELETE s x) = IMAGE f s"
  8.3089 +  by (import pred_set IMAGE_DELETE)
  8.3090 +
  8.3091 +lemma IMAGE_UNION: "ALL x xa xb.
  8.3092 +   IMAGE x (pred_set.UNION xa xb) = pred_set.UNION (IMAGE x xa) (IMAGE x xb)"
  8.3093 +  by (import pred_set IMAGE_UNION)
  8.3094 +
  8.3095 +lemma IMAGE_SUBSET: "ALL x xa. SUBSET x xa --> (ALL xb. SUBSET (IMAGE xb x) (IMAGE xb xa))"
  8.3096 +  by (import pred_set IMAGE_SUBSET)
  8.3097 +
  8.3098 +lemma IMAGE_INTER: "ALL f s t.
  8.3099 +   SUBSET (IMAGE f (pred_set.INTER s t))
  8.3100 +    (pred_set.INTER (IMAGE f s) (IMAGE f t))"
  8.3101 +  by (import pred_set IMAGE_INTER)
  8.3102 +
  8.3103 +constdefs
  8.3104 +  INJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool" 
  8.3105 +  "INJ ==
  8.3106 +%f s t.
  8.3107 +   (ALL x. IN x s --> IN (f x) t) &
  8.3108 +   (ALL x y. IN x s & IN y s --> f x = f y --> x = y)"
  8.3109 +
  8.3110 +lemma INJ_DEF: "ALL f s t.
  8.3111 +   INJ f s t =
  8.3112 +   ((ALL x. IN x s --> IN (f x) t) &
  8.3113 +    (ALL x y. IN x s & IN y s --> f x = f y --> x = y))"
  8.3114 +  by (import pred_set INJ_DEF)
  8.3115 +
  8.3116 +lemma INJ_ID: "ALL x. INJ (%x. x) x x"
  8.3117 +  by (import pred_set INJ_ID)
  8.3118 +
  8.3119 +lemma INJ_COMPOSE: "ALL x xa xb xc xd. INJ x xb xc & INJ xa xc xd --> INJ (xa o x) xb xd"
  8.3120 +  by (import pred_set INJ_COMPOSE)
  8.3121 +
  8.3122 +lemma INJ_EMPTY: "ALL x. All (INJ x EMPTY) & (ALL xa. INJ x xa EMPTY = (xa = EMPTY))"
  8.3123 +  by (import pred_set INJ_EMPTY)
  8.3124 +
  8.3125 +constdefs
  8.3126 +  SURJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool" 
  8.3127 +  "SURJ ==
  8.3128 +%f s t.
  8.3129 +   (ALL x. IN x s --> IN (f x) t) &
  8.3130 +   (ALL x. IN x t --> (EX y. IN y s & f y = x))"
  8.3131 +
  8.3132 +lemma SURJ_DEF: "ALL f s t.
  8.3133 +   SURJ f s t =
  8.3134 +   ((ALL x. IN x s --> IN (f x) t) &
  8.3135 +    (ALL x. IN x t --> (EX y. IN y s & f y = x)))"
  8.3136 +  by (import pred_set SURJ_DEF)
  8.3137 +
  8.3138 +lemma SURJ_ID: "ALL x. SURJ (%x. x) x x"
  8.3139 +  by (import pred_set SURJ_ID)
  8.3140 +
  8.3141 +lemma SURJ_COMPOSE: "ALL x xa xb xc xd. SURJ x xb xc & SURJ xa xc xd --> SURJ (xa o x) xb xd"
  8.3142 +  by (import pred_set SURJ_COMPOSE)
  8.3143 +
  8.3144 +lemma SURJ_EMPTY: "ALL x.
  8.3145 +   (ALL xa. SURJ x EMPTY xa = (xa = EMPTY)) &
  8.3146 +   (ALL xa. SURJ x xa EMPTY = (xa = EMPTY))"
  8.3147 +  by (import pred_set SURJ_EMPTY)
  8.3148 +
  8.3149 +lemma IMAGE_SURJ: "ALL x xa xb. SURJ x xa xb = (IMAGE x xa = xb)"
  8.3150 +  by (import pred_set IMAGE_SURJ)
  8.3151 +
  8.3152 +constdefs
  8.3153 +  BIJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool" 
  8.3154 +  "BIJ == %f s t. INJ f s t & SURJ f s t"
  8.3155 +
  8.3156 +lemma BIJ_DEF: "ALL f s t. BIJ f s t = (INJ f s t & SURJ f s t)"
  8.3157 +  by (import pred_set BIJ_DEF)
  8.3158 +
  8.3159 +lemma BIJ_ID: "ALL x. BIJ (%x. x) x x"
  8.3160 +  by (import pred_set BIJ_ID)
  8.3161 +
  8.3162 +lemma BIJ_EMPTY: "ALL x.
  8.3163 +   (ALL xa. BIJ x EMPTY xa = (xa = EMPTY)) &
  8.3164 +   (ALL xa. BIJ x xa EMPTY = (xa = EMPTY))"
  8.3165 +  by (import pred_set BIJ_EMPTY)
  8.3166 +
  8.3167 +lemma BIJ_COMPOSE: "ALL x xa xb xc xd. BIJ x xb xc & BIJ xa xc xd --> BIJ (xa o x) xb xd"
  8.3168 +  by (import pred_set BIJ_COMPOSE)
  8.3169 +
  8.3170 +consts
  8.3171 +  LINV :: "('a => 'b) => ('a => bool) => 'b => 'a" 
  8.3172 +
  8.3173 +specification (LINV) LINV_DEF: "ALL f s t. INJ f s t --> (ALL x. IN x s --> LINV f s (f x) = x)"
  8.3174 +  by (import pred_set LINV_DEF)
  8.3175 +
  8.3176 +consts
  8.3177 +  RINV :: "('a => 'b) => ('a => bool) => 'b => 'a" 
  8.3178 +
  8.3179 +specification (RINV) RINV_DEF: "ALL f s t. SURJ f s t --> (ALL x. IN x t --> f (RINV f s x) = x)"
  8.3180 +  by (import pred_set RINV_DEF)
  8.3181 +
  8.3182 +constdefs
  8.3183 +  FINITE :: "('a => bool) => bool" 
  8.3184 +  "FINITE ==
  8.3185 +%s. ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s"
  8.3186 +
  8.3187 +lemma FINITE_DEF: "ALL s.
  8.3188 +   FINITE s =
  8.3189 +   (ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s)"
  8.3190 +  by (import pred_set FINITE_DEF)
  8.3191 +
  8.3192 +lemma FINITE_EMPTY: "FINITE EMPTY"
  8.3193 +  by (import pred_set FINITE_EMPTY)
  8.3194 +
  8.3195 +lemma FINITE_INDUCT: "ALL P.
  8.3196 +   P EMPTY &
  8.3197 +   (ALL s. FINITE s & P s --> (ALL e. ~ IN e s --> P (INSERT e s))) -->
  8.3198 +   (ALL s. FINITE s --> P s)"
  8.3199 +  by (import pred_set FINITE_INDUCT)
  8.3200 +
  8.3201 +lemma FINITE_INSERT: "ALL x s. FINITE (INSERT x s) = FINITE s"
  8.3202 +  by (import pred_set FINITE_INSERT)
  8.3203 +
  8.3204 +lemma FINITE_DELETE: "ALL x s. FINITE (DELETE s x) = FINITE s"
  8.3205 +  by (import pred_set FINITE_DELETE)
  8.3206 +
  8.3207 +lemma FINITE_UNION: "ALL s t. FINITE (pred_set.UNION s t) = (FINITE s & FINITE t)"
  8.3208 +  by (import pred_set FINITE_UNION)
  8.3209 +
  8.3210 +lemma INTER_FINITE: "ALL s. FINITE s --> (ALL t. FINITE (pred_set.INTER s t))"
  8.3211 +  by (import pred_set INTER_FINITE)
  8.3212 +
  8.3213 +lemma SUBSET_FINITE: "ALL s. FINITE s --> (ALL t. SUBSET t s --> FINITE t)"
  8.3214 +  by (import pred_set SUBSET_FINITE)
  8.3215 +
  8.3216 +lemma PSUBSET_FINITE: "ALL x. FINITE x --> (ALL xa. PSUBSET xa x --> FINITE xa)"
  8.3217 +  by (import pred_set PSUBSET_FINITE)
  8.3218 +
  8.3219 +lemma FINITE_DIFF: "ALL s. FINITE s --> (ALL t. FINITE (DIFF s t))"
  8.3220 +  by (import pred_set FINITE_DIFF)
  8.3221 +
  8.3222 +lemma FINITE_SING: "ALL x. FINITE (INSERT x EMPTY)"
  8.3223 +  by (import pred_set FINITE_SING)
  8.3224 +
  8.3225 +lemma SING_FINITE: "ALL x. SING x --> FINITE x"
  8.3226 +  by (import pred_set SING_FINITE)
  8.3227 +
  8.3228 +lemma IMAGE_FINITE: "ALL s. FINITE s --> (ALL f. FINITE (IMAGE f s))"
  8.3229 +  by (import pred_set IMAGE_FINITE)
  8.3230 +
  8.3231 +consts
  8.3232 +  CARD :: "('a => bool) => nat" 
  8.3233 +
  8.3234 +specification (CARD) CARD_DEF: "(op &::bool => bool => bool)
  8.3235 + ((op =::nat => nat => bool)
  8.3236 +   ((CARD::('a => bool) => nat) (EMPTY::'a => bool)) (0::nat))
  8.3237 + ((All::(('a => bool) => bool) => bool)
  8.3238 +   (%s::'a => bool.
  8.3239 +       (op -->::bool => bool => bool) ((FINITE::('a => bool) => bool) s)
  8.3240 +        ((All::('a => bool) => bool)
  8.3241 +          (%x::'a.
  8.3242 +              (op =::nat => nat => bool)
  8.3243 +               ((CARD::('a => bool) => nat)
  8.3244 +                 ((INSERT::'a => ('a => bool) => 'a => bool) x s))
  8.3245 +               ((If::bool => nat => nat => nat)
  8.3246 +                 ((IN::'a => ('a => bool) => bool) x s)
  8.3247 +                 ((CARD::('a => bool) => nat) s)
  8.3248 +                 ((Suc::nat => nat) ((CARD::('a => bool) => nat) s)))))))"
  8.3249 +  by (import pred_set CARD_DEF)
  8.3250 +
  8.3251 +lemma CARD_EMPTY: "CARD EMPTY = 0"
  8.3252 +  by (import pred_set CARD_EMPTY)
  8.3253 +
  8.3254 +lemma CARD_INSERT: "ALL s.
  8.3255 +   FINITE s -->
  8.3256 +   (ALL x. CARD (INSERT x s) = (if IN x s then CARD s else Suc (CARD s)))"
  8.3257 +  by (import pred_set CARD_INSERT)
  8.3258 +
  8.3259 +lemma CARD_EQ_0: "ALL s. FINITE s --> (CARD s = 0) = (s = EMPTY)"
  8.3260 +  by (import pred_set CARD_EQ_0)
  8.3261 +
  8.3262 +lemma CARD_DELETE: "ALL s.
  8.3263 +   FINITE s -->
  8.3264 +   (ALL x. CARD (DELETE s x) = (if IN x s then CARD s - 1 else CARD s))"
  8.3265 +  by (import pred_set CARD_DELETE)
  8.3266 +
  8.3267 +lemma CARD_INTER_LESS_EQ: "ALL s. FINITE s --> (ALL t. CARD (pred_set.INTER s t) <= CARD s)"
  8.3268 +  by (import pred_set CARD_INTER_LESS_EQ)
  8.3269 +
  8.3270 +lemma CARD_UNION: "ALL s.
  8.3271 +   FINITE s -->
  8.3272 +   (ALL t.
  8.3273 +       FINITE t -->
  8.3274 +       CARD (pred_set.UNION s t) + CARD (pred_set.INTER s t) =
  8.3275 +       CARD s + CARD t)"
  8.3276 +  by (import pred_set CARD_UNION)
  8.3277 +
  8.3278 +lemma CARD_SUBSET: "ALL s. FINITE s --> (ALL t. SUBSET t s --> CARD t <= CARD s)"
  8.3279 +  by (import pred_set CARD_SUBSET)
  8.3280 +
  8.3281 +lemma CARD_PSUBSET: "ALL s. FINITE s --> (ALL t. PSUBSET t s --> CARD t < CARD s)"
  8.3282 +  by (import pred_set CARD_PSUBSET)
  8.3283 +
  8.3284 +lemma CARD_SING: "ALL x. CARD (INSERT x EMPTY) = 1"
  8.3285 +  by (import pred_set CARD_SING)
  8.3286 +
  8.3287 +lemma SING_IFF_CARD1: "ALL x. SING x = (CARD x = 1 & FINITE x)"
  8.3288 +  by (import pred_set SING_IFF_CARD1)
  8.3289 +
  8.3290 +lemma CARD_DIFF: "ALL t.
  8.3291 +   FINITE t -->
  8.3292 +   (ALL s.
  8.3293 +       FINITE s --> CARD (DIFF s t) = CARD s - CARD (pred_set.INTER s t))"
  8.3294 +  by (import pred_set CARD_DIFF)
  8.3295 +
  8.3296 +lemma LESS_CARD_DIFF: "ALL t.
  8.3297 +   FINITE t -->
  8.3298 +   (ALL s. FINITE s --> CARD t < CARD s --> 0 < CARD (DIFF s t))"
  8.3299 +  by (import pred_set LESS_CARD_DIFF)
  8.3300 +
  8.3301 +lemma FINITE_COMPLETE_INDUCTION: "ALL P.
  8.3302 +   (ALL x. (ALL y. PSUBSET y x --> P y) --> FINITE x --> P x) -->
  8.3303 +   (ALL x. FINITE x --> P x)"
  8.3304 +  by (import pred_set FINITE_COMPLETE_INDUCTION)
  8.3305 +
  8.3306 +constdefs
  8.3307 +  INFINITE :: "('a => bool) => bool" 
  8.3308 +  "INFINITE == %s. ~ FINITE s"
  8.3309 +
  8.3310 +lemma INFINITE_DEF: "ALL s. INFINITE s = (~ FINITE s)"
  8.3311 +  by (import pred_set INFINITE_DEF)
  8.3312 +
  8.3313 +lemma NOT_IN_FINITE: "(op =::bool => bool => bool)
  8.3314 + ((INFINITE::('a => bool) => bool) (pred_set.UNIV::'a => bool))
  8.3315 + ((All::(('a => bool) => bool) => bool)
  8.3316 +   (%s::'a => bool.
  8.3317 +       (op -->::bool => bool => bool) ((FINITE::('a => bool) => bool) s)
  8.3318 +        ((Ex::('a => bool) => bool)
  8.3319 +          (%x::'a.
  8.3320 +              (Not::bool => bool) ((IN::'a => ('a => bool) => bool) x s)))))"
  8.3321 +  by (import pred_set NOT_IN_FINITE)
  8.3322 +
  8.3323 +lemma INFINITE_INHAB: "ALL x. INFINITE x --> (EX xa. IN xa x)"
  8.3324 +  by (import pred_set INFINITE_INHAB)
  8.3325 +
  8.3326 +lemma IMAGE_11_INFINITE: "ALL f.
  8.3327 +   (ALL x y. f x = f y --> x = y) -->
  8.3328 +   (ALL s. INFINITE s --> INFINITE (IMAGE f s))"
  8.3329 +  by (import pred_set IMAGE_11_INFINITE)
  8.3330 +
  8.3331 +lemma INFINITE_SUBSET: "ALL x. INFINITE x --> (ALL xa. SUBSET x xa --> INFINITE xa)"
  8.3332 +  by (import pred_set INFINITE_SUBSET)
  8.3333 +
  8.3334 +lemma IN_INFINITE_NOT_FINITE: "ALL x xa. INFINITE x & FINITE xa --> (EX xb. IN xb x & ~ IN xb xa)"
  8.3335 +  by (import pred_set IN_INFINITE_NOT_FINITE)
  8.3336 +
  8.3337 +lemma INFINITE_UNIV: "(op =::bool => bool => bool)
  8.3338 + ((INFINITE::('a => bool) => bool) (pred_set.UNIV::'a => bool))
  8.3339 + ((Ex::(('a => 'a) => bool) => bool)
  8.3340 +   (%f::'a => 'a.
  8.3341 +       (op &::bool => bool => bool)
  8.3342 +        ((All::('a => bool) => bool)
  8.3343 +          (%x::'a.
  8.3344 +              (All::('a => bool) => bool)
  8.3345 +               (%y::'a.
  8.3346 +                   (op -->::bool => bool => bool)
  8.3347 +                    ((op =::'a => 'a => bool) (f x) (f y))
  8.3348 +                    ((op =::'a => 'a => bool) x y))))
  8.3349 +        ((Ex::('a => bool) => bool)
  8.3350 +          (%y::'a.
  8.3351 +              (All::('a => bool) => bool)
  8.3352 +               (%x::'a.
  8.3353 +                   (Not::bool => bool)
  8.3354 +                    ((op =::'a => 'a => bool) (f x) y))))))"
  8.3355 +  by (import pred_set INFINITE_UNIV)
  8.3356 +
  8.3357 +lemma FINITE_PSUBSET_INFINITE: "ALL x. INFINITE x = (ALL xa. FINITE xa --> SUBSET xa x --> PSUBSET xa x)"
  8.3358 +  by (import pred_set FINITE_PSUBSET_INFINITE)
  8.3359 +
  8.3360 +lemma FINITE_PSUBSET_UNIV: "(op =::bool => bool => bool)
  8.3361 + ((INFINITE::('a => bool) => bool) (pred_set.UNIV::'a => bool))
  8.3362 + ((All::(('a => bool) => bool) => bool)
  8.3363 +   (%s::'a => bool.
  8.3364 +       (op -->::bool => bool => bool) ((FINITE::('a => bool) => bool) s)
  8.3365 +        ((PSUBSET::('a => bool) => ('a => bool) => bool) s
  8.3366 +          (pred_set.UNIV::'a => bool))))"
  8.3367 +  by (import pred_set FINITE_PSUBSET_UNIV)
  8.3368 +
  8.3369 +lemma INFINITE_DIFF_FINITE: "ALL s t. INFINITE s & FINITE t --> DIFF s t ~= EMPTY"
  8.3370 +  by (import pred_set INFINITE_DIFF_FINITE)
  8.3371 +
  8.3372 +lemma FINITE_ISO_NUM: "ALL s.
  8.3373 +   FINITE s -->
  8.3374 +   (EX f. (ALL n m. n < CARD s & m < CARD s --> f n = f m --> n = m) &
  8.3375 +          s = GSPEC (%n. (f n, n < CARD s)))"
  8.3376 +  by (import pred_set FINITE_ISO_NUM)
  8.3377 +
  8.3378 +lemma FINITE_WEAK_ENUMERATE: "ALL x::'a => bool.
  8.3379 +   FINITE x =
  8.3380 +   (EX (f::nat => 'a) b::nat. ALL e::'a. IN e x = (EX n<b. e = f n))"
  8.3381 +  by (import pred_set FINITE_WEAK_ENUMERATE)
  8.3382 +
  8.3383 +constdefs
  8.3384 +  BIGUNION :: "(('a => bool) => bool) => 'a => bool" 
  8.3385 +  "BIGUNION == %P. GSPEC (%x. (x, EX p. IN p P & IN x p))"
  8.3386 +
  8.3387 +lemma BIGUNION: "ALL P. BIGUNION P = GSPEC (%x. (x, EX p. IN p P & IN x p))"
  8.3388 +  by (import pred_set BIGUNION)
  8.3389 +
  8.3390 +lemma IN_BIGUNION: "ALL x xa. IN x (BIGUNION xa) = (EX s. IN x s & IN s xa)"
  8.3391 +  by (import pred_set IN_BIGUNION)
  8.3392 +
  8.3393 +lemma BIGUNION_EMPTY: "BIGUNION EMPTY = EMPTY"
  8.3394 +  by (import pred_set BIGUNION_EMPTY)
  8.3395 +
  8.3396 +lemma BIGUNION_SING: "ALL x. BIGUNION (INSERT x EMPTY) = x"
  8.3397 +  by (import pred_set BIGUNION_SING)
  8.3398 +
  8.3399 +lemma BIGUNION_UNION: "ALL x xa.
  8.3400 +   BIGUNION (pred_set.UNION x xa) =
  8.3401 +   pred_set.UNION (BIGUNION x) (BIGUNION xa)"
  8.3402 +  by (import pred_set BIGUNION_UNION)
  8.3403 +
  8.3404 +lemma DISJOINT_BIGUNION: "(ALL (s::('a => bool) => bool) t::'a => bool.
  8.3405 +    DISJOINT (BIGUNION s) t =
  8.3406 +    (ALL s'::'a => bool. IN s' s --> DISJOINT s' t)) &
  8.3407 +(ALL (x::('a => bool) => bool) xa::'a => bool.
  8.3408 +    DISJOINT xa (BIGUNION x) =
  8.3409 +    (ALL xb::'a => bool. IN xb x --> DISJOINT xa xb))"
  8.3410 +  by (import pred_set DISJOINT_BIGUNION)
  8.3411 +
  8.3412 +lemma BIGUNION_INSERT: "ALL x xa. BIGUNION (INSERT x xa) = pred_set.UNION x (BIGUNION xa)"
  8.3413 +  by (import pred_set BIGUNION_INSERT)
  8.3414 +
  8.3415 +lemma BIGUNION_SUBSET: "ALL X P. SUBSET (BIGUNION P) X = (ALL Y. IN Y P --> SUBSET Y X)"
  8.3416 +  by (import pred_set BIGUNION_SUBSET)
  8.3417 +
  8.3418 +lemma FINITE_BIGUNION: "ALL x. FINITE x & (ALL s. IN s x --> FINITE s) --> FINITE (BIGUNION x)"
  8.3419 +  by (import pred_set FINITE_BIGUNION)
  8.3420 +
  8.3421 +constdefs
  8.3422 +  BIGINTER :: "(('a => bool) => bool) => 'a => bool" 
  8.3423 +  "BIGINTER == %B. GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
  8.3424 +
  8.3425 +lemma BIGINTER: "ALL B. BIGINTER B = GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
  8.3426 +  by (import pred_set BIGINTER)
  8.3427 +
  8.3428 +lemma IN_BIGINTER: "IN x (BIGINTER B) = (ALL P. IN P B --> IN x P)"
  8.3429 +  by (import pred_set IN_BIGINTER)
  8.3430 +
  8.3431 +lemma BIGINTER_INSERT: "ALL P B. BIGINTER (INSERT P B) = pred_set.INTER P (BIGINTER B)"
  8.3432 +  by (import pred_set BIGINTER_INSERT)
  8.3433 +
  8.3434 +lemma BIGINTER_EMPTY: "BIGINTER EMPTY = pred_set.UNIV"
  8.3435 +  by (import pred_set BIGINTER_EMPTY)
  8.3436 +
  8.3437 +lemma BIGINTER_INTER: "ALL x xa. BIGINTER (INSERT x (INSERT xa EMPTY)) = pred_set.INTER x xa"
  8.3438 +  by (import pred_set BIGINTER_INTER)
  8.3439 +
  8.3440 +lemma BIGINTER_SING: "ALL x. BIGINTER (INSERT x EMPTY) = x"
  8.3441 +  by (import pred_set BIGINTER_SING)
  8.3442 +
  8.3443 +lemma SUBSET_BIGINTER: "ALL X P. SUBSET X (BIGINTER P) = (ALL x. IN x P --> SUBSET X x)"
  8.3444 +  by (import pred_set SUBSET_BIGINTER)
  8.3445 +
  8.3446 +lemma DISJOINT_BIGINTER: "ALL x xa xb.
  8.3447 +   IN xa xb & DISJOINT xa x -->
  8.3448 +   DISJOINT x (BIGINTER xb) & DISJOINT (BIGINTER xb) x"
  8.3449 +  by (import pred_set DISJOINT_BIGINTER)
  8.3450 +
  8.3451 +constdefs
  8.3452 +  CROSS :: "('a => bool) => ('b => bool) => 'a * 'b => bool" 
  8.3453 +  "CROSS == %P Q. GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
  8.3454 +
  8.3455 +lemma CROSS_DEF: "ALL P Q. CROSS P Q = GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
  8.3456 +  by (import pred_set CROSS_DEF)
  8.3457 +
  8.3458 +lemma IN_CROSS: "ALL x xa xb. IN xb (CROSS x xa) = (IN (fst xb) x & IN (snd xb) xa)"
  8.3459 +  by (import pred_set IN_CROSS)
  8.3460 +
  8.3461 +lemma CROSS_EMPTY: "ALL x. CROSS x EMPTY = EMPTY & CROSS EMPTY x = EMPTY"
  8.3462 +  by (import pred_set CROSS_EMPTY)
  8.3463 +
  8.3464 +lemma CROSS_INSERT_LEFT: "ALL x xa xb.
  8.3465 +   CROSS (INSERT xb x) xa =
  8.3466 +   pred_set.UNION (CROSS (INSERT xb EMPTY) xa) (CROSS x xa)"
  8.3467 +  by (import pred_set CROSS_INSERT_LEFT)
  8.3468 +
  8.3469 +lemma CROSS_INSERT_RIGHT: "ALL x xa xb.
  8.3470 +   CROSS x (INSERT xb xa) =
  8.3471 +   pred_set.UNION (CROSS x (INSERT xb EMPTY)) (CROSS x xa)"
  8.3472 +  by (import pred_set CROSS_INSERT_RIGHT)
  8.3473 +
  8.3474 +lemma FINITE_CROSS: "ALL x xa. FINITE x & FINITE xa --> FINITE (CROSS x xa)"
  8.3475 +  by (import pred_set FINITE_CROSS)
  8.3476 +
  8.3477 +lemma CROSS_SINGS: "ALL x xa. CROSS (INSERT x EMPTY) (INSERT xa EMPTY) = INSERT (x, xa) EMPTY"
  8.3478 +  by (import pred_set CROSS_SINGS)
  8.3479 +
  8.3480 +lemma CARD_SING_CROSS: "ALL x s. FINITE s --> CARD (CROSS (INSERT x EMPTY) s) = CARD s"
  8.3481 +  by (import pred_set CARD_SING_CROSS)
  8.3482 +
  8.3483 +lemma CARD_CROSS: "ALL x xa. FINITE x & FINITE xa --> CARD (CROSS x xa) = CARD x * CARD xa"
  8.3484 +  by (import pred_set CARD_CROSS)
  8.3485 +
  8.3486 +lemma CROSS_SUBSET: "ALL x xa xb xc.
  8.3487 +   SUBSET (CROSS xb xc) (CROSS x xa) =
  8.3488 +   (xb = EMPTY | xc = EMPTY | SUBSET xb x & SUBSET xc xa)"
  8.3489 +  by (import pred_set CROSS_SUBSET)
  8.3490 +
  8.3491 +lemma FINITE_CROSS_EQ: "ALL P Q. FINITE (CROSS P Q) = (P = EMPTY | Q = EMPTY | FINITE P & FINITE Q)"
  8.3492 +  by (import pred_set FINITE_CROSS_EQ)
  8.3493 +
  8.3494 +constdefs
  8.3495 +  COMPL :: "('a => bool) => 'a => bool" 
  8.3496 +  "COMPL == DIFF pred_set.UNIV"
  8.3497 +
  8.3498 +lemma COMPL_DEF: "ALL P. COMPL P = DIFF pred_set.UNIV P"
  8.3499 +  by (import pred_set COMPL_DEF)
  8.3500 +
  8.3501 +lemma IN_COMPL: "ALL x xa. IN x (COMPL xa) = (~ IN x xa)"
  8.3502 +  by (import pred_set IN_COMPL)
  8.3503 +
  8.3504 +lemma COMPL_COMPL: "ALL x. COMPL (COMPL x) = x"
  8.3505 +  by (import pred_set COMPL_COMPL)
  8.3506 +
  8.3507 +lemma COMPL_CLAUSES: "ALL x.
  8.3508 +   pred_set.INTER (COMPL x) x = EMPTY &
  8.3509 +   pred_set.UNION (COMPL x) x = pred_set.UNIV"
  8.3510 +  by (import pred_set COMPL_CLAUSES)
  8.3511 +
  8.3512 +lemma COMPL_SPLITS: "ALL x xa.
  8.3513 +   pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER (COMPL x) xa) = xa"
  8.3514 +  by (import pred_set COMPL_SPLITS)
  8.3515 +
  8.3516 +lemma INTER_UNION_COMPL: "ALL x xa. pred_set.INTER x xa = COMPL (pred_set.UNION (COMPL x) (COMPL xa))"
  8.3517 +  by (import pred_set INTER_UNION_COMPL)
  8.3518 +
  8.3519 +lemma COMPL_EMPTY: "COMPL EMPTY = pred_set.UNIV"
  8.3520 +  by (import pred_set COMPL_EMPTY)
  8.3521 +
  8.3522 +consts
  8.3523 +  count :: "nat => nat => bool" 
  8.3524 +
  8.3525 +defs
  8.3526 +  count_primdef: "count == %n. GSPEC (%m. (m, m < n))"
  8.3527 +
  8.3528 +lemma count_def: "ALL n. count n = GSPEC (%m. (m, m < n))"
  8.3529 +  by (import pred_set count_def)
  8.3530 +
  8.3531 +lemma IN_COUNT: "ALL m n. IN m (count n) = (m < n)"
  8.3532 +  by (import pred_set IN_COUNT)
  8.3533 +
  8.3534 +lemma COUNT_ZERO: "count 0 = EMPTY"
  8.3535 +  by (import pred_set COUNT_ZERO)
  8.3536 +
  8.3537 +lemma COUNT_SUC: "ALL n. count (Suc n) = INSERT n (count n)"
  8.3538 +  by (import pred_set COUNT_SUC)
  8.3539 +
  8.3540 +lemma FINITE_COUNT: "ALL n. FINITE (count n)"
  8.3541 +  by (import pred_set FINITE_COUNT)
  8.3542 +
  8.3543 +lemma CARD_COUNT: "ALL n. CARD (count n) = n"
  8.3544 +  by (import pred_set CARD_COUNT)
  8.3545 +
  8.3546 +constdefs
  8.3547 +  ITSET_tupled :: "('a => 'b => 'b) => ('a => bool) * 'b => 'b" 
  8.3548 +  "ITSET_tupled ==
  8.3549 +%f. WFREC
  8.3550 +     (SOME R.
  8.3551 +         WF R &
  8.3552 +         (ALL b s.
  8.3553 +             FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
  8.3554 +     (%ITSET_tupled (v, v1).
  8.3555 +         if FINITE v
  8.3556 +         then if v = EMPTY then v1
  8.3557 +              else ITSET_tupled (REST v, f (CHOICE v) v1)
  8.3558 +         else ARB)"
  8.3559 +
  8.3560 +lemma ITSET_tupled_primitive_def: "ALL f.
  8.3561 +   ITSET_tupled f =
  8.3562 +   WFREC
  8.3563 +    (SOME R.
  8.3564 +        WF R &
  8.3565 +        (ALL b s.
  8.3566 +            FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
  8.3567 +    (%ITSET_tupled (v, v1).
  8.3568 +        if FINITE v
  8.3569 +        then if v = EMPTY then v1
  8.3570 +             else ITSET_tupled (REST v, f (CHOICE v) v1)
  8.3571 +        else ARB)"
  8.3572 +  by (import pred_set ITSET_tupled_primitive_def)
  8.3573 +
  8.3574 +constdefs
  8.3575 +  ITSET :: "('a => 'b => 'b) => ('a => bool) => 'b => 'b" 
  8.3576 +  "ITSET == %f x x1. ITSET_tupled f (x, x1)"
  8.3577 +
  8.3578 +lemma ITSET_curried_def: "ALL f x x1. ITSET f x x1 = ITSET_tupled f (x, x1)"
  8.3579 +  by (import pred_set ITSET_curried_def)
  8.3580 +
  8.3581 +lemma ITSET_IND: "ALL P.
  8.3582 +   (ALL s b.
  8.3583 +       (FINITE s & s ~= EMPTY --> P (REST s) (f (CHOICE s) b)) -->
  8.3584 +       P s b) -->
  8.3585 +   (ALL v. All (P v))"
  8.3586 +  by (import pred_set ITSET_IND)
  8.3587 +
  8.3588 +lemma ITSET_THM: "ALL s f b.
  8.3589 +   FINITE s -->
  8.3590 +   ITSET f s b =
  8.3591 +   (if s = EMPTY then b else ITSET f (REST s) (f (CHOICE s) b))"
  8.3592 +  by (import pred_set ITSET_THM)
  8.3593 +
  8.3594 +lemma ITSET_EMPTY: "ALL x xa. ITSET x EMPTY xa = xa"
  8.3595 +  by (import pred_set ITSET_EMPTY)
  8.3596 +
  8.3597 +;end_setup
  8.3598 +
  8.3599 +;setup_theory operator
  8.3600 +
  8.3601 +constdefs
  8.3602 +  ASSOC :: "('a => 'a => 'a) => bool" 
  8.3603 +  "ASSOC == %f. ALL x y z. f x (f y z) = f (f x y) z"
  8.3604 +
  8.3605 +lemma ASSOC_DEF: "ALL f. ASSOC f = (ALL x y z. f x (f y z) = f (f x y) z)"
  8.3606 +  by (import operator ASSOC_DEF)
  8.3607 +
  8.3608 +constdefs
  8.3609 +  COMM :: "('a => 'a => 'b) => bool" 
  8.3610 +  "COMM == %f. ALL x y. f x y = f y x"
  8.3611 +
  8.3612 +lemma COMM_DEF: "ALL f. COMM f = (ALL x y. f x y = f y x)"
  8.3613 +  by (import operator COMM_DEF)
  8.3614 +
  8.3615 +constdefs
  8.3616 +  FCOMM :: "('a => 'b => 'a) => ('c => 'a => 'a) => bool" 
  8.3617 +  "FCOMM == %f g. ALL x y z. g x (f y z) = f (g x y) z"
  8.3618 +
  8.3619 +lemma FCOMM_DEF: "ALL f g. FCOMM f g = (ALL x y z. g x (f y z) = f (g x y) z)"
  8.3620 +  by (import operator FCOMM_DEF)
  8.3621 +
  8.3622 +constdefs
  8.3623 +  RIGHT_ID :: "('a => 'b => 'a) => 'b => bool" 
  8.3624 +  "RIGHT_ID == %f e. ALL x. f x e = x"
  8.3625 +
  8.3626 +lemma RIGHT_ID_DEF: "ALL f e. RIGHT_ID f e = (ALL x. f x e = x)"
  8.3627 +  by (import operator RIGHT_ID_DEF)
  8.3628 +
  8.3629 +constdefs
  8.3630 +  LEFT_ID :: "('a => 'b => 'b) => 'a => bool" 
  8.3631 +  "LEFT_ID == %f e. ALL x. f e x = x"
  8.3632 +
  8.3633 +lemma LEFT_ID_DEF: "ALL f e. LEFT_ID f e = (ALL x. f e x = x)"
  8.3634 +  by (import operator LEFT_ID_DEF)
  8.3635 +
  8.3636 +constdefs
  8.3637 +  MONOID :: "('a => 'a => 'a) => 'a => bool" 
  8.3638 +  "MONOID == %f e. ASSOC f & RIGHT_ID f e & LEFT_ID f e"
  8.3639 +
  8.3640 +lemma MONOID_DEF: "ALL f e. MONOID f e = (ASSOC f & RIGHT_ID f e & LEFT_ID f e)"
  8.3641 +  by (import operator MONOID_DEF)
  8.3642 +
  8.3643 +lemma ASSOC_CONJ: "ASSOC op &"
  8.3644 +  by (import operator ASSOC_CONJ)
  8.3645 +
  8.3646 +lemma ASSOC_DISJ: "ASSOC op |"
  8.3647 +  by (import operator ASSOC_DISJ)
  8.3648 +
  8.3649 +lemma FCOMM_ASSOC: "ALL x. FCOMM x x = ASSOC x"
  8.3650 +  by (import operator FCOMM_ASSOC)
  8.3651 +
  8.3652 +lemma MONOID_CONJ_T: "MONOID op & True"
  8.3653 +  by (import operator MONOID_CONJ_T)
  8.3654 +
  8.3655 +lemma MONOID_DISJ_F: "MONOID op | False"
  8.3656 +  by (import operator MONOID_DISJ_F)
  8.3657 +
  8.3658 +;end_setup
  8.3659 +
  8.3660 +;setup_theory rich_list
  8.3661 +
  8.3662 +consts
  8.3663 +  SNOC :: "'a => 'a list => 'a list" 
  8.3664 +
  8.3665 +specification (SNOC) SNOC: "(ALL x::'a. SNOC x [] = [x]) &
  8.3666 +(ALL (x::'a) (x'::'a) l::'a list. SNOC x (x' # l) = x' # SNOC x l)"
  8.3667 +  by (import rich_list SNOC)
  8.3668 +
  8.3669 +consts
  8.3670 +  SCANL :: "('b => 'a => 'b) => 'b => 'a list => 'b list" 
  8.3671 +
  8.3672 +specification (SCANL) SCANL: "(ALL (f::'b => 'a => 'b) e::'b. SCANL f e [] = [e]) &
  8.3673 +(ALL (f::'b => 'a => 'b) (e::'b) (x::'a) l::'a list.
  8.3674 +    SCANL f e (x # l) = e # SCANL f (f e x) l)"
  8.3675 +  by (import rich_list SCANL)
  8.3676 +
  8.3677 +consts
  8.3678 +  SCANR :: "('a => 'b => 'b) => 'b => 'a list => 'b list" 
  8.3679 +
  8.3680 +specification (SCANR) SCANR: "(ALL (f::'a => 'b => 'b) e::'b. SCANR f e [] = [e]) &
  8.3681 +(ALL (f::'a => 'b => 'b) (e::'b) (x::'a) l::'a list.
  8.3682 +    SCANR f e (x # l) = f x (hd (SCANR f e l)) # SCANR f e l)"
  8.3683 +  by (import rich_list SCANR)
  8.3684 +
  8.3685 +lemma IS_EL_DEF: "ALL x l. x mem l = list_exists (op = x) l"
  8.3686 +  by (import rich_list IS_EL_DEF)
  8.3687 +
  8.3688 +constdefs
  8.3689 +  AND_EL :: "bool list => bool" 
  8.3690 +  "AND_EL == list_all I"
  8.3691 +
  8.3692 +lemma AND_EL_DEF: "AND_EL = list_all I"
  8.3693 +  by (import rich_list AND_EL_DEF)
  8.3694 +
  8.3695 +constdefs
  8.3696 +  OR_EL :: "bool list => bool" 
  8.3697 +  "OR_EL == list_exists I"
  8.3698 +
  8.3699 +lemma OR_EL_DEF: "OR_EL = list_exists I"
  8.3700 +  by (import rich_list OR_EL_DEF)
  8.3701 +
  8.3702 +consts
  8.3703 +  FIRSTN :: "nat => 'a list => 'a list" 
  8.3704 +
  8.3705 +specification (FIRSTN) FIRSTN: "(ALL l::'a list. FIRSTN (0::nat) l = []) &
  8.3706 +(ALL (n::nat) (x::'a) l::'a list. FIRSTN (Suc n) (x # l) = x # FIRSTN n l)"
  8.3707 +  by (import rich_list FIRSTN)
  8.3708 +
  8.3709 +consts
  8.3710 +  BUTFIRSTN :: "nat => 'a list => 'a list" 
  8.3711 +
  8.3712 +specification (BUTFIRSTN) BUTFIRSTN: "(ALL l::'a list. BUTFIRSTN (0::nat) l = l) &
  8.3713 +(ALL (n::nat) (x::'a) l::'a list. BUTFIRSTN (Suc n) (x # l) = BUTFIRSTN n l)"
  8.3714 +  by (import rich_list BUTFIRSTN)
  8.3715 +
  8.3716 +consts
  8.3717 +  SEG :: "nat => nat => 'a list => 'a list" 
  8.3718 +
  8.3719 +specification (SEG) SEG: "(ALL (k::nat) l::'a list. SEG (0::nat) k l = []) &
  8.3720 +(ALL (m::nat) (x::'a) l::'a list.
  8.3721 +    SEG (Suc m) (0::nat) (x # l) = x # SEG m (0::nat) l) &
  8.3722 +(ALL (m::nat) (k::nat) (x::'a) l::'a list.
  8.3723 +    SEG (Suc m) (Suc k) (x # l) = SEG (Suc m) k l)"
  8.3724 +  by (import rich_list SEG)
  8.3725 +
  8.3726 +lemma LAST: "ALL x l. last (SNOC x l) = x"
  8.3727 +  by (import rich_list LAST)
  8.3728 +
  8.3729 +lemma BUTLAST: "ALL x l. butlast (SNOC x l) = l"
  8.3730 +  by (import rich_list BUTLAST)
  8.3731 +
  8.3732 +consts
  8.3733 +  LASTN :: "nat => 'a list => 'a list" 
  8.3734 +
  8.3735 +specification (LASTN) LASTN: "(ALL l::'a list. LASTN (0::nat) l = []) &
  8.3736 +(ALL (n::nat) (x::'a) l::'a list.
  8.3737 +    LASTN (Suc n) (SNOC x l) = SNOC x (LASTN n l))"
  8.3738 +  by (import rich_list LASTN)
  8.3739 +
  8.3740 +consts
  8.3741 +  BUTLASTN :: "nat => 'a list => 'a list" 
  8.3742 +
  8.3743 +specification (BUTLASTN) BUTLASTN: "(ALL l::'a list. BUTLASTN (0::nat) l = l) &
  8.3744 +(ALL (n::nat) (x::'a) l::'a list.
  8.3745 +    BUTLASTN (Suc n) (SNOC x l) = BUTLASTN n l)"
  8.3746 +  by (import rich_list BUTLASTN)
  8.3747 +
  8.3748 +lemma EL: "(ALL x::'a list. EL (0::nat) x = hd x) &
  8.3749 +(ALL (x::nat) xa::'a list. EL (Suc x) xa = EL x (tl xa))"
  8.3750 +  by (import rich_list EL)
  8.3751 +
  8.3752 +consts
  8.3753 +  ELL :: "nat => 'a list => 'a" 
  8.3754 +
  8.3755 +specification (ELL) ELL: "(ALL l::'a list. ELL (0::nat) l = last l) &
  8.3756 +(ALL (n::nat) l::'a list. ELL (Suc n) l = ELL n (butlast l))"
  8.3757 +  by (import rich_list ELL)
  8.3758 +
  8.3759 +consts
  8.3760 +  IS_PREFIX :: "'a list => 'a list => bool" 
  8.3761 +
  8.3762 +specification (IS_PREFIX) IS_PREFIX: "(ALL l::'a list. IS_PREFIX l [] = True) &
  8.3763 +(ALL (x::'a) l::'a list. IS_PREFIX [] (x # l) = False) &
  8.3764 +(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
  8.3765 +    IS_PREFIX (x1 # l1) (x2 # l2) = (x1 = x2 & IS_PREFIX l1 l2))"
  8.3766 +  by (import rich_list IS_PREFIX)
  8.3767 +
  8.3768 +lemma SNOC_APPEND: "ALL x l. SNOC x l = l @ [x]"
  8.3769 +  by (import rich_list SNOC_APPEND)
  8.3770 +
  8.3771 +lemma REVERSE: "rev [] = [] & (ALL (x::'a) xa::'a list. rev (x # xa) = SNOC x (rev xa))"
  8.3772 +  by (import rich_list REVERSE)
  8.3773 +
  8.3774 +lemma REVERSE_SNOC: "ALL x l. rev (SNOC x l) = x # rev l"
  8.3775 +  by (import rich_list REVERSE_SNOC)
  8.3776 +
  8.3777 +lemma SNOC_Axiom: "ALL (e::'b) f::'a => 'a list => 'b => 'b.
  8.3778 +   EX x::'a list => 'b.
  8.3779 +      x [] = e & (ALL (xa::'a) l::'a list. x (SNOC xa l) = f xa l (x l))"
  8.3780 +  by (import rich_list SNOC_Axiom)
  8.3781 +
  8.3782 +consts
  8.3783 +  IS_SUFFIX :: "'a list => 'a list => bool" 
  8.3784 +
  8.3785 +specification (IS_SUFFIX) IS_SUFFIX: "(ALL l::'a list. IS_SUFFIX l [] = True) &
  8.3786 +(ALL (x::'a) l::'a list. IS_SUFFIX [] (SNOC x l) = False) &
  8.3787 +(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
  8.3788 +    IS_SUFFIX (SNOC x1 l1) (SNOC x2 l2) = (x1 = x2 & IS_SUFFIX l1 l2))"
  8.3789 +  by (import rich_list IS_SUFFIX)
  8.3790 +
  8.3791 +consts
  8.3792 +  IS_SUBLIST :: "'a list => 'a list => bool" 
  8.3793 +
  8.3794 +specification (IS_SUBLIST) IS_SUBLIST: "(ALL l::'a list. IS_SUBLIST l [] = True) &
  8.3795 +(ALL (x::'a) l::'a list. IS_SUBLIST [] (x # l) = False) &
  8.3796 +(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
  8.3797 +    IS_SUBLIST (x1 # l1) (x2 # l2) =
  8.3798 +    (x1 = x2 & IS_PREFIX l1 l2 | IS_SUBLIST l1 (x2 # l2)))"
  8.3799 +  by (import rich_list IS_SUBLIST)
  8.3800 +
  8.3801 +consts
  8.3802 +  SPLITP :: "('a => bool) => 'a list => 'a list * 'a list" 
  8.3803 +
  8.3804 +specification (SPLITP) SPLITP: "(ALL P::'a => bool. SPLITP P [] = ([], [])) &
  8.3805 +(ALL (P::'a => bool) (x::'a) l::'a list.
  8.3806 +    SPLITP P (x # l) =
  8.3807 +    (if P x then ([], x # l) else (x # fst (SPLITP P l), snd (SPLITP P l))))"
  8.3808 +  by (import rich_list SPLITP)
  8.3809 +
  8.3810 +constdefs
  8.3811 +  PREFIX :: "('a => bool) => 'a list => 'a list" 
  8.3812 +  "PREFIX == %P l. fst (SPLITP (Not o P) l)"
  8.3813 +
  8.3814 +lemma PREFIX_DEF: "ALL P l. PREFIX P l = fst (SPLITP (Not o P) l)"
  8.3815 +  by (import rich_list PREFIX_DEF)
  8.3816 +
  8.3817 +constdefs
  8.3818 +  SUFFIX :: "('a => bool) => 'a list => 'a list" 
  8.3819 +  "SUFFIX == %P. foldl (%l' x. if P x then SNOC x l' else []) []"
  8.3820 +
  8.3821 +lemma SUFFIX_DEF: "ALL P l. SUFFIX P l = foldl (%l' x. if P x then SNOC x l' else []) [] l"
  8.3822 +  by (import rich_list SUFFIX_DEF)
  8.3823 +
  8.3824 +constdefs
  8.3825 +  UNZIP_FST :: "('a * 'b) list => 'a list" 
  8.3826 +  "UNZIP_FST == %l. fst (unzip l)"
  8.3827 +
  8.3828 +lemma UNZIP_FST_DEF: "ALL l. UNZIP_FST l = fst (unzip l)"
  8.3829 +  by (import rich_list UNZIP_FST_DEF)
  8.3830 +
  8.3831 +constdefs
  8.3832 +  UNZIP_SND :: "('a * 'b) list => 'b list" 
  8.3833 +  "UNZIP_SND == %l. snd (unzip l)"
  8.3834 +
  8.3835 +lemma UNZIP_SND_DEF: "ALL l. UNZIP_SND l = snd (unzip l)"
  8.3836 +  by (import rich_list UNZIP_SND_DEF)
  8.3837 +
  8.3838 +consts
  8.3839 +  GENLIST :: "(nat => 'a) => nat => 'a list" 
  8.3840 +
  8.3841 +specification (GENLIST) GENLIST: "(ALL f::nat => 'a. GENLIST f (0::nat) = []) &
  8.3842 +(ALL (f::nat => 'a) n::nat. GENLIST f (Suc n) = SNOC (f n) (GENLIST f n))"
  8.3843 +  by (import rich_list GENLIST)
  8.3844 +
  8.3845 +consts
  8.3846 +  REPLICATE :: "nat => 'a => 'a list" 
  8.3847 +
  8.3848 +specification (REPLICATE) REPLICATE: "(ALL x::'a. REPLICATE (0::nat) x = []) &
  8.3849 +(ALL (n::nat) x::'a. REPLICATE (Suc n) x = x # REPLICATE n x)"
  8.3850 +  by (import rich_list REPLICATE)
  8.3851 +
  8.3852 +lemma LENGTH_MAP2: "ALL l1 l2.
  8.3853 +   length l1 = length l2 -->
  8.3854 +   (ALL f.
  8.3855 +       length (map2 f l1 l2) = length l1 &
  8.3856 +       length (map2 f l1 l2) = length l2)"
  8.3857 +  by (import rich_list LENGTH_MAP2)
  8.3858 +
  8.3859 +lemma NULL_EQ_NIL: "ALL l. null l = (l = [])"
  8.3860 +  by (import rich_list NULL_EQ_NIL)
  8.3861 +
  8.3862 +lemma LENGTH_EQ: "ALL x y. x = y --> length x = length y"
  8.3863 +  by (import rich_list LENGTH_EQ)
  8.3864 +
  8.3865 +lemma LENGTH_NOT_NULL: "ALL l. (0 < length l) = (~ null l)"
  8.3866 +  by (import rich_list LENGTH_NOT_NULL)
  8.3867 +
  8.3868 +lemma SNOC_INDUCT: "ALL P. P [] & (ALL l. P l --> (ALL x. P (SNOC x l))) --> All P"
  8.3869 +  by (import rich_list SNOC_INDUCT)
  8.3870 +
  8.3871 +lemma SNOC_CASES: "ALL x'. x' = [] | (EX x l. x' = SNOC x l)"
  8.3872 +  by (import rich_list SNOC_CASES)
  8.3873 +
  8.3874 +lemma LENGTH_SNOC: "ALL x l. length (SNOC x l) = Suc (length l)"
  8.3875 +  by (import rich_list LENGTH_SNOC)
  8.3876 +
  8.3877 +lemma NOT_NIL_SNOC: "ALL x xa. [] ~= SNOC x xa"
  8.3878 +  by (import rich_list NOT_NIL_SNOC)
  8.3879 +
  8.3880 +lemma NOT_SNOC_NIL: "ALL x xa. SNOC x xa ~= []"
  8.3881 +  by (import rich_list NOT_SNOC_NIL)
  8.3882 +
  8.3883 +lemma SNOC_11: "ALL x l x' l'. (SNOC x l = SNOC x' l') = (x = x' & l = l')"
  8.3884 +  by (import rich_list SNOC_11)
  8.3885 +
  8.3886 +lemma SNOC_EQ_LENGTH_EQ: "ALL x1 l1 x2 l2. SNOC x1 l1 = SNOC x2 l2 --> length l1 = length l2"
  8.3887 +  by (import rich_list SNOC_EQ_LENGTH_EQ)
  8.3888 +
  8.3889 +lemma SNOC_REVERSE_CONS: "ALL x xa. SNOC x xa = rev (x # rev xa)"
  8.3890 +  by (import rich_list SNOC_REVERSE_CONS)
  8.3891 +
  8.3892 +lemma MAP_SNOC: "ALL x xa xb. map x (SNOC xa xb) = SNOC (x xa) (map x xb)"
  8.3893 +  by (import rich_list MAP_SNOC)
  8.3894 +
  8.3895 +lemma FOLDR_SNOC: "ALL f e x l. foldr f (SNOC x l) e = foldr f l (f x e)"
  8.3896 +  by (import rich_list FOLDR_SNOC)
  8.3897 +
  8.3898 +lemma FOLDL_SNOC: "ALL (f::'b => 'a => 'b) (e::'b) (x::'a) l::'a list.
  8.3899 +   foldl f e (SNOC x l) = f (foldl f e l) x"
  8.3900 +  by (import rich_list FOLDL_SNOC)
  8.3901 +
  8.3902 +lemma FOLDR_FOLDL: "ALL f e. MONOID f e --> (ALL l. foldr f l e = foldl f e l)"
  8.3903 +  by (import rich_list FOLDR_FOLDL)
  8.3904 +
  8.3905 +lemma LENGTH_FOLDR: "ALL l. length l = foldr (%x. Suc) l 0"
  8.3906 +  by (import rich_list LENGTH_FOLDR)
  8.3907 +
  8.3908 +lemma LENGTH_FOLDL: "ALL l. length l = foldl (%l' x. Suc l') 0 l"
  8.3909 +  by (import rich_list LENGTH_FOLDL)
  8.3910 +
  8.3911 +lemma MAP_FOLDR: "ALL f l. map f l = foldr (%x. op # (f x)) l []"
  8.3912 +  by (import rich_list MAP_FOLDR)
  8.3913 +
  8.3914 +lemma MAP_FOLDL: "ALL f l. map f l = foldl (%l' x. SNOC (f x) l') [] l"
  8.3915 +  by (import rich_list MAP_FOLDL)
  8.3916 +
  8.3917 +lemma MAP_o: "ALL (f::'b => 'c) g::'a => 'b. map (f o g) = map f o map g"
  8.3918 +  by (import rich_list MAP_o)
  8.3919 +
  8.3920 +lemma FILTER_FOLDR: "ALL P l. filter P l = foldr (%x l'. if P x then x # l' else l') l []"
  8.3921 +  by (import rich_list FILTER_FOLDR)
  8.3922 +
  8.3923 +lemma FILTER_SNOC: "ALL P x l.
  8.3924 +   filter P (SNOC x l) = (if P x then SNOC x (filter P l) else filter P l)"
  8.3925 +  by (import rich_list FILTER_SNOC)
  8.3926 +
  8.3927 +lemma FILTER_FOLDL: "ALL P l. filter P l = foldl (%l' x. if P x then SNOC x l' else l') [] l"
  8.3928 +  by (import rich_list FILTER_FOLDL)
  8.3929 +
  8.3930 +lemma FILTER_COMM: "ALL f1 f2 l. filter f1 (filter f2 l) = filter f2 (filter f1 l)"
  8.3931 +  by (import rich_list FILTER_COMM)
  8.3932 +
  8.3933 +lemma FILTER_IDEM: "ALL f l. filter f (filter f l) = filter f l"
  8.3934 +  by (import rich_list FILTER_IDEM)
  8.3935 +
  8.3936 +lemma FILTER_MAP: "ALL (f1::'b => bool) (f2::'a => 'b) l::'a list.
  8.3937 +   filter f1 (map f2 l) = map f2 (filter (f1 o f2) l)"
  8.3938 +  by (import rich_list FILTER_MAP)
  8.3939 +
  8.3940 +lemma LENGTH_SEG: "ALL n k l. n + k <= length l --> length (SEG n k l) = n"
  8.3941 +  by (import rich_list LENGTH_SEG)
  8.3942 +
  8.3943 +lemma APPEND_NIL: "(ALL l::'a list. l @ [] = l) & (ALL x::'a list. [] @ x = x)"
  8.3944 +  by (import rich_list APPEND_NIL)
  8.3945 +
  8.3946 +lemma APPEND_SNOC: "ALL l1 x l2. l1 @ SNOC x l2 = SNOC x (l1 @ l2)"
  8.3947 +  by (import rich_list APPEND_SNOC)
  8.3948 +
  8.3949 +lemma APPEND_FOLDR: "ALL l1 l2. l1 @ l2 = foldr op # l1 l2"
  8.3950 +  by (import rich_list APPEND_FOLDR)
  8.3951 +
  8.3952 +lemma APPEND_FOLDL: "ALL l1 l2. l1 @ l2 = foldl (%l' x. SNOC x l') l1 l2"
  8.3953 +  by (import rich_list APPEND_FOLDL)
  8.3954 +
  8.3955 +lemma CONS_APPEND: "ALL x l. x # l = [x] @ l"
  8.3956 +  by (import rich_list CONS_APPEND)
  8.3957 +
  8.3958 +lemma ASSOC_APPEND: "ASSOC op @"
  8.3959 +  by (import rich_list ASSOC_APPEND)
  8.3960 +
  8.3961 +lemma MONOID_APPEND_NIL: "MONOID op @ []"
  8.3962 +  by (import rich_list MONOID_APPEND_NIL)
  8.3963 +
  8.3964 +lemma APPEND_LENGTH_EQ: "ALL l1 l1'.
  8.3965 +   length l1 = length l1' -->
  8.3966 +   (ALL l2 l2'.
  8.3967 +       length l2 = length l2' -->
  8.3968 +       (l1 @ l2 = l1' @ l2') = (l1 = l1' & l2 = l2'))"
  8.3969 +  by (import rich_list APPEND_LENGTH_EQ)
  8.3970 +
  8.3971 +lemma FLAT_SNOC: "ALL x l. concat (SNOC x l) = concat l @ x"
  8.3972 +  by (import rich_list FLAT_SNOC)
  8.3973 +
  8.3974 +lemma FLAT_FOLDR: "ALL l. concat l = foldr op @ l []"
  8.3975 +  by (import rich_list FLAT_FOLDR)
  8.3976 +
  8.3977 +lemma FLAT_FOLDL: "ALL l. concat l = foldl op @ [] l"
  8.3978 +  by (import rich_list FLAT_FOLDL)
  8.3979 +
  8.3980 +lemma LENGTH_FLAT: "ALL l. length (concat l) = sum (map size l)"
  8.3981 +  by (import rich_list LENGTH_FLAT)
  8.3982 +
  8.3983 +lemma REVERSE_FOLDR: "ALL l. rev l = foldr SNOC l []"
  8.3984 +  by (import rich_list REVERSE_FOLDR)
  8.3985 +
  8.3986 +lemma REVERSE_FOLDL: "ALL l. rev l = foldl (%l' x. x # l') [] l"
  8.3987 +  by (import rich_list REVERSE_FOLDL)
  8.3988 +
  8.3989 +lemma ALL_EL_SNOC: "ALL P x l. list_all P (SNOC x l) = (list_all P l & P x)"
  8.3990 +  by (import rich_list ALL_EL_SNOC)
  8.3991 +
  8.3992 +lemma ALL_EL_MAP: "ALL (P::'b => bool) (f::'a => 'b) l::'a list.
  8.3993 +   list_all P (map f l) = list_all (P o f) l"
  8.3994 +  by (import rich_list ALL_EL_MAP)
  8.3995 +
  8.3996 +lemma SOME_EL_SNOC: "ALL P x l. list_exists P (SNOC x l) = (P x | list_exists P l)"
  8.3997 +  by (import rich_list SOME_EL_SNOC)
  8.3998 +
  8.3999 +lemma IS_EL_SNOC: "ALL y x l. y mem SNOC x l = (y = x | y mem l)"
  8.4000 +  by (import rich_list IS_EL_SNOC)
  8.4001 +
  8.4002 +lemma SUM_SNOC: "ALL x l. sum (SNOC x l) = sum l + x"
  8.4003 +  by (import rich_list SUM_SNOC)
  8.4004 +
  8.4005 +lemma SUM_FOLDL: "ALL l. sum l = foldl op + 0 l"
  8.4006 +  by (import rich_list SUM_FOLDL)
  8.4007 +
  8.4008 +lemma IS_PREFIX_APPEND: "ALL l1 l2. IS_PREFIX l1 l2 = (EX l. l1 = l2 @ l)"
  8.4009 +  by (import rich_list IS_PREFIX_APPEND)
  8.4010 +
  8.4011 +lemma IS_SUFFIX_APPEND: "ALL l1 l2. IS_SUFFIX l1 l2 = (EX l. l1 = l @ l2)"
  8.4012 +  by (import rich_list IS_SUFFIX_APPEND)
  8.4013 +
  8.4014 +lemma IS_SUBLIST_APPEND: "ALL l1 l2. IS_SUBLIST l1 l2 = (EX l l'. l1 = l @ l2 @ l')"
  8.4015 +  by (import rich_list IS_SUBLIST_APPEND)
  8.4016 +
  8.4017 +lemma IS_PREFIX_IS_SUBLIST: "ALL l1 l2. IS_PREFIX l1 l2 --> IS_SUBLIST l1 l2"
  8.4018 +  by (import rich_list IS_PREFIX_IS_SUBLIST)
  8.4019 +
  8.4020 +lemma IS_SUFFIX_IS_SUBLIST: "ALL l1 l2. IS_SUFFIX l1 l2 --> IS_SUBLIST l1 l2"
  8.4021 +  by (import rich_list IS_SUFFIX_IS_SUBLIST)
  8.4022 +
  8.4023 +lemma IS_PREFIX_REVERSE: "ALL l1 l2. IS_PREFIX (rev l1) (rev l2) = IS_SUFFIX l1 l2"
  8.4024 +  by (import rich_list IS_PREFIX_REVERSE)
  8.4025 +
  8.4026 +lemma IS_SUFFIX_REVERSE: "ALL l2 l1. IS_SUFFIX (rev l1) (rev l2) = IS_PREFIX l1 l2"
  8.4027 +  by (import rich_list IS_SUFFIX_REVERSE)
  8.4028 +
  8.4029 +lemma IS_SUBLIST_REVERSE: "ALL l1 l2. IS_SUBLIST (rev l1) (rev l2) = IS_SUBLIST l1 l2"
  8.4030 +  by (import rich_list IS_SUBLIST_REVERSE)
  8.4031 +
  8.4032 +lemma PREFIX_FOLDR: "ALL P x. PREFIX P x = foldr (%x l'. if P x then x # l' else []) x []"
  8.4033 +  by (import rich_list PREFIX_FOLDR)
  8.4034 +
  8.4035 +lemma PREFIX: "(ALL x::'a => bool. PREFIX x [] = []) &
  8.4036 +(ALL (x::'a => bool) (xa::'a) xb::'a list.
  8.4037 +    PREFIX x (xa # xb) = (if x xa then xa # PREFIX x xb else []))"
  8.4038 +  by (import rich_list PREFIX)
  8.4039 +
  8.4040 +lemma IS_PREFIX_PREFIX: "ALL P l. IS_PREFIX l (PREFIX P l)"
  8.4041 +  by (import rich_list IS_PREFIX_PREFIX)
  8.4042 +
  8.4043 +lemma LENGTH_SCANL: "ALL (f::'b => 'a => 'b) (e::'b) l::'a list.
  8.4044 +   length (SCANL f e l) = Suc (length l)"
  8.4045 +  by (import rich_list LENGTH_SCANL)
  8.4046 +
  8.4047 +lemma LENGTH_SCANR: "ALL f e l. length (SCANR f e l) = Suc (length l)"
  8.4048 +  by (import rich_list LENGTH_SCANR)
  8.4049 +
  8.4050 +lemma COMM_MONOID_FOLDL: "ALL x.
  8.4051 +   COMM x -->
  8.4052 +   (ALL xa. MONOID x xa --> (ALL e l. foldl x e l = x e (foldl x xa l)))"
  8.4053 +  by (import rich_list COMM_MONOID_FOLDL)
  8.4054 +
  8.4055 +lemma COMM_MONOID_FOLDR: "ALL x.
  8.4056 +   COMM x -->
  8.4057 +   (ALL xa. MONOID x xa --> (ALL e l. foldr x l e = x e (foldr x l xa)))"
  8.4058 +  by (import rich_list COMM_MONOID_FOLDR)
  8.4059 +
  8.4060 +lemma FCOMM_FOLDR_APPEND: "ALL x xa.
  8.4061 +   FCOMM x xa -->
  8.4062 +   (ALL xb.
  8.4063 +       LEFT_ID x xb -->
  8.4064 +       (ALL l1 l2.
  8.4065 +           foldr xa (l1 @ l2) xb = x (foldr xa l1 xb) (foldr xa l2 xb)))"
  8.4066 +  by (import rich_list FCOMM_FOLDR_APPEND)
  8.4067 +
  8.4068 +lemma FCOMM_FOLDL_APPEND: "ALL x xa.
  8.4069 +   FCOMM x xa -->
  8.4070 +   (ALL xb.
  8.4071 +       RIGHT_ID xa xb -->
  8.4072 +       (ALL l1 l2.
  8.4073 +           foldl x xb (l1 @ l2) = xa (foldl x xb l1) (foldl x xb l2)))"
  8.4074 +  by (import rich_list FCOMM_FOLDL_APPEND)
  8.4075 +
  8.4076 +lemma FOLDL_SINGLE: "ALL x xa xb. foldl x xa [xb] = x xa xb"
  8.4077 +  by (import rich_list FOLDL_SINGLE)
  8.4078 +
  8.4079 +lemma FOLDR_SINGLE: "ALL x xa xb. foldr x [xb] xa = x xb xa"
  8.4080 +  by (import rich_list FOLDR_SINGLE)
  8.4081 +
  8.4082 +lemma FOLDR_CONS_NIL: "ALL l. foldr op # l [] = l"
  8.4083 +  by (import rich_list FOLDR_CONS_NIL)
  8.4084 +
  8.4085 +lemma FOLDL_SNOC_NIL: "ALL l. foldl (%xs x. SNOC x xs) [] l = l"
  8.4086 +  by (import rich_list FOLDL_SNOC_NIL)
  8.4087 +
  8.4088 +lemma FOLDR_REVERSE: "ALL x xa xb. foldr x (rev xb) xa = foldl (%xa y. x y xa) xa xb"
  8.4089 +  by (import rich_list FOLDR_REVERSE)
  8.4090 +
  8.4091 +lemma FOLDL_REVERSE: "ALL x xa xb. foldl x xa (rev xb) = foldr (%xa y. x y xa) xb xa"
  8.4092 +  by (import rich_list FOLDL_REVERSE)
  8.4093 +
  8.4094 +lemma FOLDR_MAP: "ALL (f::'a => 'a => 'a) (e::'a) (g::'b => 'a) l::'b list.
  8.4095 +   foldr f (map g l) e = foldr (%x::'b. f (g x)) l e"
  8.4096 +  by (import rich_list FOLDR_MAP)
  8.4097 +
  8.4098 +lemma FOLDL_MAP: "ALL (f::'a => 'a => 'a) (e::'a) (g::'b => 'a) l::'b list.
  8.4099 +   foldl f e (map g l) = foldl (%(x::'a) y::'b. f x (g y)) e l"
  8.4100 +  by (import rich_list FOLDL_MAP)
  8.4101 +
  8.4102 +lemma ALL_EL_FOLDR: "ALL P l. list_all P l = foldr (%x. op & (P x)) l True"
  8.4103 +  by (import rich_list ALL_EL_FOLDR)
  8.4104 +
  8.4105 +lemma ALL_EL_FOLDL: "ALL P l. list_all P l = foldl (%l' x. l' & P x) True l"
  8.4106 +  by (import rich_list ALL_EL_FOLDL)
  8.4107 +
  8.4108 +lemma SOME_EL_FOLDR: "ALL P l. list_exists P l = foldr (%x. op | (P x)) l False"
  8.4109 +  by (import rich_list SOME_EL_FOLDR)
  8.4110 +
  8.4111 +lemma SOME_EL_FOLDL: "ALL P l. list_exists P l = foldl (%l' x. l' | P x) False l"
  8.4112 +  by (import rich_list SOME_EL_FOLDL)
  8.4113 +
  8.4114 +lemma ALL_EL_FOLDR_MAP: "ALL x xa. list_all x xa = foldr op & (map x xa) True"
  8.4115 +  by (import rich_list ALL_EL_FOLDR_MAP)
  8.4116 +
  8.4117 +lemma ALL_EL_FOLDL_MAP: "ALL x xa. list_all x xa = foldl op & True (map x xa)"
  8.4118 +  by (import rich_list ALL_EL_FOLDL_MAP)
  8.4119 +
  8.4120 +lemma SOME_EL_FOLDR_MAP: "ALL x xa. list_exists x xa = foldr op | (map x xa) False"
  8.4121 +  by (import rich_list SOME_EL_FOLDR_MAP)
  8.4122 +
  8.4123 +lemma SOME_EL_FOLDL_MAP: "ALL x xa. list_exists x xa = foldl op | False (map x xa)"
  8.4124 +  by (import rich_list SOME_EL_FOLDL_MAP)
  8.4125 +
  8.4126 +lemma FOLDR_FILTER: "ALL (f::'a => 'a => 'a) (e::'a) (P::'a => bool) l::'a list.
  8.4127 +   foldr f (filter P l) e =
  8.4128 +   foldr (%(x::'a) y::'a. if P x then f x y else y) l e"
  8.4129 +  by (import rich_list FOLDR_FILTER)
  8.4130 +
  8.4131 +lemma FOLDL_FILTER: "ALL (f::'a => 'a => 'a) (e::'a) (P::'a => bool) l::'a list.
  8.4132 +   foldl f e (filter P l) =
  8.4133 +   foldl (%(x::'a) y::'a. if P y then f x y else x) e l"
  8.4134 +  by (import rich_list FOLDL_FILTER)
  8.4135 +
  8.4136 +lemma ASSOC_FOLDR_FLAT: "ALL f.
  8.4137 +   ASSOC f -->
  8.4138 +   (ALL e.
  8.4139 +       LEFT_ID f e -->
  8.4140 +       (ALL l. foldr f (concat l) e = foldr f (map (FOLDR f e) l) e))"
  8.4141 +  by (import rich_list ASSOC_FOLDR_FLAT)
  8.4142 +
  8.4143 +lemma ASSOC_FOLDL_FLAT: "ALL f.
  8.4144 +   ASSOC f -->
  8.4145 +   (ALL e.
  8.4146 +       RIGHT_ID f e -->
  8.4147 +       (ALL l. foldl f e (concat l) = foldl f e (map (foldl f e) l)))"
  8.4148 +  by (import rich_list ASSOC_FOLDL_FLAT)
  8.4149 +
  8.4150 +lemma SOME_EL_MAP: "ALL (P::'b => bool) (f::'a => 'b) l::'a list.
  8.4151 +   list_exists P (map f l) = list_exists (P o f) l"
  8.4152 +  by (import rich_list SOME_EL_MAP)
  8.4153 +
  8.4154 +lemma SOME_EL_DISJ: "ALL P Q l.
  8.4155 +   list_exists (%x. P x | Q x) l = (list_exists P l | list_exists Q l)"
  8.4156 +  by (import rich_list SOME_EL_DISJ)
  8.4157 +
  8.4158 +lemma IS_EL_FOLDR: "ALL x xa. x mem xa = foldr (%xa. op | (x = xa)) xa False"
  8.4159 +  by (import rich_list IS_EL_FOLDR)
  8.4160 +
  8.4161 +lemma IS_EL_FOLDL: "ALL x xa. x mem xa = foldl (%l' xa. l' | x = xa) False xa"
  8.4162 +  by (import rich_list IS_EL_FOLDL)
  8.4163 +
  8.4164 +lemma NULL_FOLDR: "ALL l. null l = foldr (%x l'. False) l True"
  8.4165 +  by (import rich_list NULL_FOLDR)
  8.4166 +
  8.4167 +lemma NULL_FOLDL: "ALL l. null l = foldl (%x l'. False) True l"
  8.4168 +  by (import rich_list NULL_FOLDL)
  8.4169 +
  8.4170 +lemma FILTER_REVERSE: "ALL P l. filter P (rev l) = rev (filter P l)"
  8.4171 +  by (import rich_list FILTER_REVERSE)
  8.4172 +
  8.4173 +lemma SEG_LENGTH_ID: "ALL l. SEG (length l) 0 l = l"
  8.4174 +  by (import rich_list SEG_LENGTH_ID)
  8.4175 +
  8.4176 +lemma SEG_SUC_CONS: "ALL m n l x. SEG m (Suc n) (x # l) = SEG m n l"
  8.4177 +  by (import rich_list SEG_SUC_CONS)
  8.4178 +
  8.4179 +lemma SEG_0_SNOC: "ALL m l x. m <= length l --> SEG m 0 (SNOC x l) = SEG m 0 l"
  8.4180 +  by (import rich_list SEG_0_SNOC)
  8.4181 +
  8.4182 +lemma BUTLASTN_SEG: "ALL n l. n <= length l --> BUTLASTN n l = SEG (length l - n) 0 l"
  8.4183 +  by (import rich_list BUTLASTN_SEG)
  8.4184 +
  8.4185 +lemma LASTN_CONS: "ALL n l. n <= length l --> (ALL x. LASTN n (x # l) = LASTN n l)"
  8.4186 +  by (import rich_list LASTN_CONS)
  8.4187 +
  8.4188 +lemma LENGTH_LASTN: "ALL n l. n <= length l --> length (LASTN n l) = n"
  8.4189 +  by (import rich_list LENGTH_LASTN)
  8.4190 +
  8.4191 +lemma LASTN_LENGTH_ID: "ALL l. LASTN (length l) l = l"
  8.4192 +  by (import rich_list LASTN_LENGTH_ID)
  8.4193 +
  8.4194 +lemma LASTN_LASTN: "ALL l n m. m <= length l --> n <= m --> LASTN n (LASTN m l) = LASTN n l"
  8.4195 +  by (import rich_list LASTN_LASTN)
  8.4196 +
  8.4197 +lemma FIRSTN_LENGTH_ID: "ALL l. FIRSTN (length l) l = l"
  8.4198 +  by (import rich_list FIRSTN_LENGTH_ID)
  8.4199 +
  8.4200 +lemma FIRSTN_SNOC: "ALL n l. n <= length l --> (ALL x. FIRSTN n (SNOC x l) = FIRSTN n l)"
  8.4201 +  by (import rich_list FIRSTN_SNOC)
  8.4202 +
  8.4203 +lemma BUTLASTN_LENGTH_NIL: "ALL l. BUTLASTN (length l) l = []"
  8.4204 +  by (import rich_list BUTLASTN_LENGTH_NIL)
  8.4205 +
  8.4206 +lemma BUTLASTN_SUC_BUTLAST: "ALL n l. n < length l --> BUTLASTN (Suc n) l = BUTLASTN n (butlast l)"
  8.4207 +  by (import rich_list BUTLASTN_SUC_BUTLAST)
  8.4208 +
  8.4209 +lemma BUTLASTN_BUTLAST: "ALL n l. n < length l --> BUTLASTN n (butlast l) = butlast (BUTLASTN n l)"
  8.4210 +  by (import rich_list BUTLASTN_BUTLAST)
  8.4211 +
  8.4212 +lemma LENGTH_BUTLASTN: "ALL n l. n <= length l --> length (BUTLASTN n l) = length l - n"
  8.4213 +  by (import rich_list LENGTH_BUTLASTN)
  8.4214 +
  8.4215 +lemma BUTLASTN_BUTLASTN: "ALL m n l.
  8.4216 +   n + m <= length l --> BUTLASTN n (BUTLASTN m l) = BUTLASTN (n + m) l"
  8.4217 +  by (import rich_list BUTLASTN_BUTLASTN)
  8.4218 +
  8.4219 +lemma APPEND_BUTLASTN_LASTN: "ALL n l. n <= length l --> BUTLASTN n l @ LASTN n l = l"
  8.4220 +  by (import rich_list APPEND_BUTLASTN_LASTN)
  8.4221 +
  8.4222 +lemma APPEND_FIRSTN_LASTN: "ALL m n l. m + n = length l --> FIRSTN n l @ LASTN m l = l"
  8.4223 +  by (import rich_list APPEND_FIRSTN_LASTN)
  8.4224 +
  8.4225 +lemma BUTLASTN_APPEND2: "ALL n l1 l2. n <= length l2 --> BUTLASTN n (l1 @ l2) = l1 @ BUTLASTN n l2"
  8.4226 +  by (import rich_list BUTLASTN_APPEND2)
  8.4227 +
  8.4228 +lemma BUTLASTN_LENGTH_APPEND: "ALL l2 l1. BUTLASTN (length l2) (l1 @ l2) = l1"
  8.4229 +  by (import rich_list BUTLASTN_LENGTH_APPEND)
  8.4230 +
  8.4231 +lemma LASTN_LENGTH_APPEND: "ALL l2 l1. LASTN (length l2) (l1 @ l2) = l2"
  8.4232 +  by (import rich_list LASTN_LENGTH_APPEND)
  8.4233 +
  8.4234 +lemma BUTLASTN_CONS: "ALL n l. n <= length l --> (ALL x. BUTLASTN n (x # l) = x # BUTLASTN n l)"
  8.4235 +  by (import rich_list BUTLASTN_CONS)
  8.4236 +
  8.4237 +lemma BUTLASTN_LENGTH_CONS: "ALL l x. BUTLASTN (length l) (x # l) = [x]"
  8.4238 +  by (import rich_list BUTLASTN_LENGTH_CONS)
  8.4239 +
  8.4240 +lemma LAST_LASTN_LAST: "ALL n l. n <= length l --> 0 < n --> last (LASTN n l) = last l"
  8.4241 +  by (import rich_list LAST_LASTN_LAST)
  8.4242 +
  8.4243 +lemma BUTLASTN_LASTN_NIL: "ALL n l. n <= length l --> BUTLASTN n (LASTN n l) = []"
  8.4244 +  by (import rich_list BUTLASTN_LASTN_NIL)
  8.4245 +
  8.4246 +lemma LASTN_BUTLASTN: "ALL n m l.
  8.4247 +   n + m <= length l -->
  8.4248 +   LASTN n (BUTLASTN m l) = BUTLASTN m (LASTN (n + m) l)"
  8.4249 +  by (import rich_list LASTN_BUTLASTN)
  8.4250 +
  8.4251 +lemma BUTLASTN_LASTN: "ALL m n l.
  8.4252 +   m <= n & n <= length l -->
  8.4253 +   BUTLASTN m (LASTN n l) = LASTN (n - m) (BUTLASTN m l)"
  8.4254 +  by (import rich_list BUTLASTN_LASTN)
  8.4255 +
  8.4256 +lemma LASTN_1: "ALL l. l ~= [] --> LASTN 1 l = [last l]"
  8.4257 +  by (import rich_list LASTN_1)
  8.4258 +
  8.4259 +lemma BUTLASTN_1: "ALL l. l ~= [] --> BUTLASTN 1 l = butlast l"
  8.4260 +  by (import rich_list BUTLASTN_1)
  8.4261 +
  8.4262 +lemma BUTLASTN_APPEND1: "ALL l2 n.
  8.4263 +   length l2 <= n -->
  8.4264 +   (ALL l1. BUTLASTN n (l1 @ l2) = BUTLASTN (n - length l2) l1)"
  8.4265 +  by (import rich_list BUTLASTN_APPEND1)
  8.4266 +
  8.4267 +lemma LASTN_APPEND2: "ALL n l2. n <= length l2 --> (ALL l1. LASTN n (l1 @ l2) = LASTN n l2)"
  8.4268 +  by (import rich_list LASTN_APPEND2)
  8.4269 +
  8.4270 +lemma LASTN_APPEND1: "ALL l2 n.
  8.4271 +   length l2 <= n -->
  8.4272 +   (ALL l1. LASTN n (l1 @ l2) = LASTN (n - length l2) l1 @ l2)"
  8.4273 +  by (import rich_list LASTN_APPEND1)
  8.4274 +
  8.4275 +lemma LASTN_MAP: "ALL n l. n <= length l --> (ALL f. LASTN n (map f l) = map f (LASTN n l))"
  8.4276 +  by (import rich_list LASTN_MAP)
  8.4277 +
  8.4278 +lemma BUTLASTN_MAP: "ALL n l.
  8.4279 +   n <= length l --> (ALL f. BUTLASTN n (map f l) = map f (BUTLASTN n l))"
  8.4280 +  by (import rich_list BUTLASTN_MAP)
  8.4281 +
  8.4282 +lemma ALL_EL_LASTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (LASTN m l))"
  8.4283 +  by (import rich_list ALL_EL_LASTN)
  8.4284 +
  8.4285 +lemma ALL_EL_BUTLASTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (BUTLASTN m l))"
  8.4286 +  by (import rich_list ALL_EL_BUTLASTN)
  8.4287 +
  8.4288 +lemma LENGTH_FIRSTN: "ALL n l. n <= length l --> length (FIRSTN n l) = n"
  8.4289 +  by (import rich_list LENGTH_FIRSTN)
  8.4290 +
  8.4291 +lemma FIRSTN_FIRSTN: "ALL m l. m <= length l --> (ALL n<=m. FIRSTN n (FIRSTN m l) = FIRSTN n l)"
  8.4292 +  by (import rich_list FIRSTN_FIRSTN)
  8.4293 +
  8.4294 +lemma LENGTH_BUTFIRSTN: "ALL n l. n <= length l --> length (BUTFIRSTN n l) = length l - n"
  8.4295 +  by (import rich_list LENGTH_BUTFIRSTN)
  8.4296 +
  8.4297 +lemma BUTFIRSTN_LENGTH_NIL: "ALL l. BUTFIRSTN (length l) l = []"
  8.4298 +  by (import rich_list BUTFIRSTN_LENGTH_NIL)
  8.4299 +
  8.4300 +lemma BUTFIRSTN_APPEND1: "ALL n l1.
  8.4301 +   n <= length l1 --> (ALL l2. BUTFIRSTN n (l1 @ l2) = BUTFIRSTN n l1 @ l2)"
  8.4302 +  by (import rich_list BUTFIRSTN_APPEND1)
  8.4303 +
  8.4304 +lemma BUTFIRSTN_APPEND2: "ALL l1 n.
  8.4305 +   length l1 <= n -->
  8.4306 +   (ALL l2. BUTFIRSTN n (l1 @ l2) = BUTFIRSTN (n - length l1) l2)"
  8.4307 +  by (import rich_list BUTFIRSTN_APPEND2)
  8.4308 +
  8.4309 +lemma BUTFIRSTN_BUTFIRSTN: "ALL n m l.
  8.4310 +   n + m <= length l --> BUTFIRSTN n (BUTFIRSTN m l) = BUTFIRSTN (n + m) l"
  8.4311 +  by (import rich_list BUTFIRSTN_BUTFIRSTN)
  8.4312 +
  8.4313 +lemma APPEND_FIRSTN_BUTFIRSTN: "ALL n l. n <= length l --> FIRSTN n l @ BUTFIRSTN n l = l"
  8.4314 +  by (import rich_list APPEND_FIRSTN_BUTFIRSTN)
  8.4315 +
  8.4316 +lemma LASTN_SEG: "ALL n l. n <= length l --> LASTN n l = SEG n (length l - n) l"
  8.4317 +  by (import rich_list LASTN_SEG)
  8.4318 +
  8.4319 +lemma FIRSTN_SEG: "ALL n l. n <= length l --> FIRSTN n l = SEG n 0 l"
  8.4320 +  by (import rich_list FIRSTN_SEG)
  8.4321 +
  8.4322 +lemma BUTFIRSTN_SEG: "ALL n l. n <= length l --> BUTFIRSTN n l = SEG (length l - n) n l"
  8.4323 +  by (import rich_list BUTFIRSTN_SEG)
  8.4324 +
  8.4325 +lemma BUTFIRSTN_SNOC: "ALL n l.
  8.4326 +   n <= length l -->
  8.4327 +   (ALL x. BUTFIRSTN n (SNOC x l) = SNOC x (BUTFIRSTN n l))"
  8.4328 +  by (import rich_list BUTFIRSTN_SNOC)
  8.4329 +
  8.4330 +lemma APPEND_BUTLASTN_BUTFIRSTN: "ALL m n l. m + n = length l --> BUTLASTN m l @ BUTFIRSTN n l = l"
  8.4331 +  by (import rich_list APPEND_BUTLASTN_BUTFIRSTN)
  8.4332 +
  8.4333 +lemma SEG_SEG: "ALL n1 m1 n2 m2 l.
  8.4334 +   n1 + m1 <= length l & n2 + m2 <= n1 -->
  8.4335 +   SEG n2 m2 (SEG n1 m1 l) = SEG n2 (m1 + m2) l"
  8.4336 +  by (import rich_list SEG_SEG)
  8.4337 +
  8.4338 +lemma SEG_APPEND1: "ALL n m l1. n + m <= length l1 --> (ALL l2. SEG n m (l1 @ l2) = SEG n m l1)"
  8.4339 +  by (import rich_list SEG_APPEND1)
  8.4340 +
  8.4341 +lemma SEG_APPEND2: "ALL l1 m n l2.
  8.4342 +   length l1 <= m & n <= length l2 -->
  8.4343 +   SEG n m (l1 @ l2) = SEG n (m - length l1) l2"
  8.4344 +  by (import rich_list SEG_APPEND2)
  8.4345 +
  8.4346 +lemma SEG_FIRSTN_BUTFISTN: "ALL n m l. n + m <= length l --> SEG n m l = FIRSTN n (BUTFIRSTN m l)"
  8.4347 +  by (import rich_list SEG_FIRSTN_BUTFISTN)
  8.4348 +
  8.4349 +lemma SEG_APPEND: "ALL m l1 n l2.
  8.4350 +   m < length l1 & length l1 <= n + m & n + m <= length l1 + length l2 -->
  8.4351 +   SEG n m (l1 @ l2) =
  8.4352 +   SEG (length l1 - m) m l1 @ SEG (n + m - length l1) 0 l2"
  8.4353 +  by (import rich_list SEG_APPEND)
  8.4354 +
  8.4355 +lemma SEG_LENGTH_SNOC: "ALL x xa. SEG 1 (length x) (SNOC xa x) = [xa]"
  8.4356 +  by (import rich_list SEG_LENGTH_SNOC)
  8.4357 +
  8.4358 +lemma SEG_SNOC: "ALL n m l. n + m <= length l --> (ALL x. SEG n m (SNOC x l) = SEG n m l)"
  8.4359 +  by (import rich_list SEG_SNOC)
  8.4360 +
  8.4361 +lemma ELL_SEG: "ALL n l. n < length l --> ELL n l = hd (SEG 1 (PRE (length l - n)) l)"
  8.4362 +  by (import rich_list ELL_SEG)
  8.4363 +
  8.4364 +lemma SNOC_FOLDR: "ALL x l. SNOC x l = foldr op # l [x]"
  8.4365 +  by (import rich_list SNOC_FOLDR)
  8.4366 +
  8.4367 +lemma IS_EL_FOLDR_MAP: "ALL x xa. x mem xa = foldr op | (map (op = x) xa) False"
  8.4368 +  by (import rich_list IS_EL_FOLDR_MAP)
  8.4369 +
  8.4370 +lemma IS_EL_FOLDL_MAP: "ALL x xa. x mem xa = foldl op | False (map (op = x) xa)"
  8.4371 +  by (import rich_list IS_EL_FOLDL_MAP)
  8.4372 +
  8.4373 +lemma FILTER_FILTER: "ALL P Q l. filter P (filter Q l) = [x:l. P x & Q x]"
  8.4374 +  by (import rich_list FILTER_FILTER)
  8.4375 +
  8.4376 +lemma FCOMM_FOLDR_FLAT: "ALL g f.
  8.4377 +   FCOMM g f -->
  8.4378 +   (ALL e.
  8.4379 +       LEFT_ID g e -->
  8.4380 +       (ALL l. foldr f (concat l) e = foldr g (map (FOLDR f e) l) e))"
  8.4381 +  by (import rich_list FCOMM_FOLDR_FLAT)
  8.4382 +
  8.4383 +lemma FCOMM_FOLDL_FLAT: "ALL f g.
  8.4384 +   FCOMM f g -->
  8.4385 +   (ALL e.
  8.4386 +       RIGHT_ID g e -->
  8.4387 +       (ALL l. foldl f e (concat l) = foldl g e (map (foldl f e) l)))"
  8.4388 +  by (import rich_list FCOMM_FOLDL_FLAT)
  8.4389 +
  8.4390 +lemma FOLDR_MAP_REVERSE: "ALL f::'a => 'a => 'a.
  8.4391 +   (ALL (a::'a) (b::'a) c::'a. f a (f b c) = f b (f a c)) -->
  8.4392 +   (ALL (e::'a) (g::'b => 'a) l::'b list.
  8.4393 +       foldr f (map g (rev l)) e = foldr f (map g l) e)"
  8.4394 +  by (import rich_list FOLDR_MAP_REVERSE)
  8.4395 +
  8.4396 +lemma FOLDR_FILTER_REVERSE: "ALL f::'a => 'a => 'a.
  8.4397 +   (ALL (a::'a) (b::'a) c::'a. f a (f b c) = f b (f a c)) -->
  8.4398 +   (ALL (e::'a) (P::'a => bool) l::'a list.
  8.4399 +       foldr f (filter P (rev l)) e = foldr f (filter P l) e)"
  8.4400 +  by (import rich_list FOLDR_FILTER_REVERSE)
  8.4401 +
  8.4402 +lemma COMM_ASSOC_FOLDR_REVERSE: "ALL f. COMM f --> ASSOC f --> (ALL e l. foldr f (rev l) e = foldr f l e)"
  8.4403 +  by (import rich_list COMM_ASSOC_FOLDR_REVERSE)
  8.4404 +
  8.4405 +lemma COMM_ASSOC_FOLDL_REVERSE: "ALL f. COMM f --> ASSOC f --> (ALL e l. foldl f e (rev l) = foldl f e l)"
  8.4406 +  by (import rich_list COMM_ASSOC_FOLDL_REVERSE)
  8.4407 +
  8.4408 +lemma ELL_LAST: "ALL l. ~ null l --> ELL 0 l = last l"
  8.4409 +  by (import rich_list ELL_LAST)
  8.4410 +
  8.4411 +lemma ELL_0_SNOC: "ALL l x. ELL 0 (SNOC x l) = x"
  8.4412 +  by (import rich_list ELL_0_SNOC)
  8.4413 +
  8.4414 +lemma ELL_SNOC: "ALL n. 0 < n --> (ALL x l. ELL n (SNOC x l) = ELL (PRE n) l)"
  8.4415 +  by (import rich_list ELL_SNOC)
  8.4416 +
  8.4417 +lemma ELL_SUC_SNOC: "ALL n x xa. ELL (Suc n) (SNOC x xa) = ELL n xa"
  8.4418 +  by (import rich_list ELL_SUC_SNOC)
  8.4419 +
  8.4420 +lemma ELL_CONS: "ALL n l. n < length l --> (ALL x. ELL n (x # l) = ELL n l)"
  8.4421 +  by (import rich_list ELL_CONS)
  8.4422 +
  8.4423 +lemma ELL_LENGTH_CONS: "ALL l x. ELL (length l) (x # l) = x"
  8.4424 +  by (import rich_list ELL_LENGTH_CONS)
  8.4425 +
  8.4426 +lemma ELL_LENGTH_SNOC: "ALL l x. ELL (length l) (SNOC x l) = (if null l then x else hd l)"
  8.4427 +  by (import rich_list ELL_LENGTH_SNOC)
  8.4428 +
  8.4429 +lemma ELL_APPEND2: "ALL n l2. n < length l2 --> (ALL l1. ELL n (l1 @ l2) = ELL n l2)"
  8.4430 +  by (import rich_list ELL_APPEND2)
  8.4431 +
  8.4432 +lemma ELL_APPEND1: "ALL l2 n.
  8.4433 +   length l2 <= n --> (ALL l1. ELL n (l1 @ l2) = ELL (n - length l2) l1)"
  8.4434 +  by (import rich_list ELL_APPEND1)
  8.4435 +
  8.4436 +lemma ELL_PRE_LENGTH: "ALL l. l ~= [] --> ELL (PRE (length l)) l = hd l"
  8.4437 +  by (import rich_list ELL_PRE_LENGTH)
  8.4438 +
  8.4439 +lemma EL_LENGTH_SNOC: "ALL l x. EL (length l) (SNOC x l) = x"
  8.4440 +  by (import rich_list EL_LENGTH_SNOC)
  8.4441 +
  8.4442 +lemma EL_PRE_LENGTH: "ALL l. l ~= [] --> EL (PRE (length l)) l = last l"
  8.4443 +  by (import rich_list EL_PRE_LENGTH)
  8.4444 +
  8.4445 +lemma EL_SNOC: "ALL n l. n < length l --> (ALL x. EL n (SNOC x l) = EL n l)"
  8.4446 +  by (import rich_list EL_SNOC)
  8.4447 +
  8.4448 +lemma EL_ELL: "ALL n l. n < length l --> EL n l = ELL (PRE (length l - n)) l"
  8.4449 +  by (import rich_list EL_ELL)
  8.4450 +
  8.4451 +lemma EL_LENGTH_APPEND: "ALL l2 l1. ~ null l2 --> EL (length l1) (l1 @ l2) = hd l2"
  8.4452 +  by (import rich_list EL_LENGTH_APPEND)
  8.4453 +
  8.4454 +lemma ELL_EL: "ALL n l. n < length l --> ELL n l = EL (PRE (length l - n)) l"
  8.4455 +  by (import rich_list ELL_EL)
  8.4456 +
  8.4457 +lemma ELL_MAP: "ALL n l f. n < length l --> ELL n (map f l) = f (ELL n l)"
  8.4458 +  by (import rich_list ELL_MAP)
  8.4459 +
  8.4460 +lemma LENGTH_BUTLAST: "ALL l. l ~= [] --> length (butlast l) = PRE (length l)"
  8.4461 +  by (import rich_list LENGTH_BUTLAST)
  8.4462 +
  8.4463 +lemma BUTFIRSTN_LENGTH_APPEND: "ALL l1 l2. BUTFIRSTN (length l1) (l1 @ l2) = l2"
  8.4464 +  by (import rich_list BUTFIRSTN_LENGTH_APPEND)
  8.4465 +
  8.4466 +lemma FIRSTN_APPEND1: "ALL n l1. n <= length l1 --> (ALL l2. FIRSTN n (l1 @ l2) = FIRSTN n l1)"
  8.4467 +  by (import rich_list FIRSTN_APPEND1)
  8.4468 +
  8.4469 +lemma FIRSTN_APPEND2: "ALL l1 n.
  8.4470 +   length l1 <= n -->
  8.4471 +   (ALL l2. FIRSTN n (l1 @ l2) = l1 @ FIRSTN (n - length l1) l2)"
  8.4472 +  by (import rich_list FIRSTN_APPEND2)
  8.4473 +
  8.4474 +lemma FIRSTN_LENGTH_APPEND: "ALL l1 l2. FIRSTN (length l1) (l1 @ l2) = l1"
  8.4475 +  by (import rich_list FIRSTN_LENGTH_APPEND)
  8.4476 +
  8.4477 +lemma REVERSE_FLAT: "ALL l. rev (concat l) = concat (rev (map rev l))"
  8.4478 +  by (import rich_list REVERSE_FLAT)
  8.4479 +
  8.4480 +lemma MAP_FILTER: "ALL f P l.
  8.4481 +   (ALL x. P (f x) = P x) --> map f (filter P l) = filter P (map f l)"
  8.4482 +  by (import rich_list MAP_FILTER)
  8.4483 +
  8.4484 +lemma FLAT_REVERSE: "ALL l. concat (rev l) = rev (concat (map rev l))"
  8.4485 +  by (import rich_list FLAT_REVERSE)
  8.4486 +
  8.4487 +lemma FLAT_FLAT: "ALL l. concat (concat l) = concat (map concat l)"
  8.4488 +  by (import rich_list FLAT_FLAT)
  8.4489 +
  8.4490 +lemma ALL_EL_REVERSE: "ALL P l. list_all P (rev l) = list_all P l"
  8.4491 +  by (import rich_list ALL_EL_REVERSE)
  8.4492 +
  8.4493 +lemma SOME_EL_REVERSE: "ALL P l. list_exists P (rev l) = list_exists P l"
  8.4494 +  by (import rich_list SOME_EL_REVERSE)
  8.4495 +
  8.4496 +lemma ALL_EL_SEG: "ALL P l.
  8.4497 +   list_all P l --> (ALL m k. m + k <= length l --> list_all P (SEG m k l))"
  8.4498 +  by (import rich_list ALL_EL_SEG)
  8.4499 +
  8.4500 +lemma ALL_EL_FIRSTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (FIRSTN m l))"
  8.4501 +  by (import rich_list ALL_EL_FIRSTN)
  8.4502 +
  8.4503 +lemma ALL_EL_BUTFIRSTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (BUTFIRSTN m l))"
  8.4504 +  by (import rich_list ALL_EL_BUTFIRSTN)
  8.4505 +
  8.4506 +lemma SOME_EL_SEG: "ALL m k l.
  8.4507 +   m + k <= length l -->
  8.4508 +   (ALL P. list_exists P (SEG m k l) --> list_exists P l)"
  8.4509 +  by (import rich_list SOME_EL_SEG)
  8.4510 +
  8.4511 +lemma SOME_EL_FIRSTN: "ALL m l.
  8.4512 +   m <= length l --> (ALL P. list_exists P (FIRSTN m l) --> list_exists P l)"
  8.4513 +  by (import rich_list SOME_EL_FIRSTN)
  8.4514 +
  8.4515 +lemma SOME_EL_BUTFIRSTN: "ALL m l.
  8.4516 +   m <= length l -->
  8.4517 +   (ALL P. list_exists P (BUTFIRSTN m l) --> list_exists P l)"
  8.4518 +  by (import rich_list SOME_EL_BUTFIRSTN)
  8.4519 +
  8.4520 +lemma SOME_EL_LASTN: "ALL m l.
  8.4521 +   m <= length l --> (ALL P. list_exists P (LASTN m l) --> list_exists P l)"
  8.4522 +  by (import rich_list SOME_EL_LASTN)
  8.4523 +
  8.4524 +lemma SOME_EL_BUTLASTN: "ALL m l.
  8.4525 +   m <= length l -->
  8.4526 +   (ALL P. list_exists P (BUTLASTN m l) --> list_exists P l)"
  8.4527 +  by (import rich_list SOME_EL_BUTLASTN)
  8.4528 +
  8.4529 +lemma IS_EL_REVERSE: "ALL x l. x mem rev l = x mem l"
  8.4530 +  by (import rich_list IS_EL_REVERSE)
  8.4531 +
  8.4532 +lemma IS_EL_FILTER: "ALL P x. P x --> (ALL l. x mem filter P l = x mem l)"
  8.4533 +  by (import rich_list IS_EL_FILTER)
  8.4534 +
  8.4535 +lemma IS_EL_SEG: "ALL n m l. n + m <= length l --> (ALL x. x mem SEG n m l --> x mem l)"
  8.4536 +  by (import rich_list IS_EL_SEG)
  8.4537 +
  8.4538 +lemma IS_EL_SOME_EL: "ALL x l. x mem l = list_exists (op = x) l"
  8.4539 +  by (import rich_list IS_EL_SOME_EL)
  8.4540 +
  8.4541 +lemma IS_EL_FIRSTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem FIRSTN x xa --> xb mem xa)"
  8.4542 +  by (import rich_list IS_EL_FIRSTN)
  8.4543 +
  8.4544 +lemma IS_EL_BUTFIRSTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem BUTFIRSTN x xa --> xb mem xa)"
  8.4545 +  by (import rich_list IS_EL_BUTFIRSTN)
  8.4546 +
  8.4547 +lemma IS_EL_BUTLASTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem BUTLASTN x xa --> xb mem xa)"
  8.4548 +  by (import rich_list IS_EL_BUTLASTN)
  8.4549 +
  8.4550 +lemma IS_EL_LASTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem LASTN x xa --> xb mem xa)"
  8.4551 +  by (import rich_list IS_EL_LASTN)
  8.4552 +
  8.4553 +lemma ZIP_SNOC: "ALL l1 l2.
  8.4554 +   length l1 = length l2 -->
  8.4555 +   (ALL x1 x2. zip (SNOC x1 l1) (SNOC x2 l2) = SNOC (x1, x2) (zip l1 l2))"
  8.4556 +  by (import rich_list ZIP_SNOC)
  8.4557 +
  8.4558 +lemma UNZIP_SNOC: "ALL x l.
  8.4559 +   unzip (SNOC x l) =
  8.4560 +   (SNOC (fst x) (fst (unzip l)), SNOC (snd x) (snd (unzip l)))"
  8.4561 +  by (import rich_list UNZIP_SNOC)
  8.4562 +
  8.4563 +lemma LENGTH_UNZIP_FST: "ALL x. length (UNZIP_FST x) = length x"
  8.4564 +  by (import rich_list LENGTH_UNZIP_FST)
  8.4565 +
  8.4566 +lemma LENGTH_UNZIP_SND: "ALL x. length (UNZIP_SND x) = length x"
  8.4567 +  by (import rich_list LENGTH_UNZIP_SND)
  8.4568 +
  8.4569 +lemma SUM_APPEND: "ALL l1 l2. sum (l1 @ l2) = sum l1 + sum l2"
  8.4570 +  by (import rich_list SUM_APPEND)
  8.4571 +
  8.4572 +lemma SUM_REVERSE: "ALL l. sum (rev l) = sum l"
  8.4573 +  by (import rich_list SUM_REVERSE)
  8.4574 +
  8.4575 +lemma SUM_FLAT: "ALL l. sum (concat l) = sum (map sum l)"
  8.4576 +  by (import rich_list SUM_FLAT)
  8.4577 +
  8.4578 +lemma EL_APPEND1: "ALL n l1 l2. n < length l1 --> EL n (l1 @ l2) = EL n l1"
  8.4579 +  by (import rich_list EL_APPEND1)
  8.4580 +
  8.4581 +lemma EL_APPEND2: "ALL l1 n.
  8.4582 +   length l1 <= n --> (ALL l2. EL n (l1 @ l2) = EL (n - length l1) l2)"
  8.4583 +  by (import rich_list EL_APPEND2)
  8.4584 +
  8.4585 +lemma EL_MAP: "ALL n l. n < length l --> (ALL f. EL n (map f l) = f (EL n l))"
  8.4586 +  by (import rich_list EL_MAP)
  8.4587 +
  8.4588 +lemma EL_CONS: "ALL n. 0 < n --> (ALL x l. EL n (x # l) = EL (PRE n) l)"
  8.4589 +  by (import rich_list EL_CONS)
  8.4590 +
  8.4591 +lemma EL_SEG: "ALL n l. n < length l --> EL n l = hd (SEG 1 n l)"
  8.4592 +  by (import rich_list EL_SEG)
  8.4593 +
  8.4594 +lemma EL_IS_EL: "ALL n l. n < length l --> EL n l mem l"
  8.4595 +  by (import rich_list EL_IS_EL)
  8.4596 +
  8.4597 +lemma TL_SNOC: "ALL x l. tl (SNOC x l) = (if null l then [] else SNOC x (tl l))"
  8.4598 +  by (import rich_list TL_SNOC)
  8.4599 +
  8.4600 +lemma EL_REVERSE: "ALL n l. n < length l --> EL n (rev l) = EL (PRE (length l - n)) l"
  8.4601 +  by (import rich_list EL_REVERSE)
  8.4602 +
  8.4603 +lemma EL_REVERSE_ELL: "ALL n l. n < length l --> EL n (rev l) = ELL n l"
  8.4604 +  by (import rich_list EL_REVERSE_ELL)
  8.4605 +
  8.4606 +lemma ELL_LENGTH_APPEND: "ALL l1 l2. ~ null l1 --> ELL (length l2) (l1 @ l2) = last l1"
  8.4607 +  by (import rich_list ELL_LENGTH_APPEND)
  8.4608 +
  8.4609 +lemma ELL_IS_EL: "ALL n l. n < length l --> ELL n l mem l"
  8.4610 +  by (import rich_list ELL_IS_EL)
  8.4611 +
  8.4612 +lemma ELL_REVERSE: "ALL n l. n < length l --> ELL n (rev l) = ELL (PRE (length l - n)) l"
  8.4613 +  by (import rich_list ELL_REVERSE)
  8.4614 +
  8.4615 +lemma ELL_REVERSE_EL: "ALL n l. n < length l --> ELL n (rev l) = EL n l"
  8.4616 +  by (import rich_list ELL_REVERSE_EL)
  8.4617 +
  8.4618 +lemma FIRSTN_BUTLASTN: "ALL n l. n <= length l --> FIRSTN n l = BUTLASTN (length l - n) l"
  8.4619 +  by (import rich_list FIRSTN_BUTLASTN)
  8.4620 +
  8.4621 +lemma BUTLASTN_FIRSTN: "ALL n l. n <= length l --> BUTLASTN n l = FIRSTN (length l - n) l"
  8.4622 +  by (import rich_list BUTLASTN_FIRSTN)
  8.4623 +
  8.4624 +lemma LASTN_BUTFIRSTN: "ALL n l. n <= length l --> LASTN n l = BUTFIRSTN (length l - n) l"
  8.4625 +  by (import rich_list LASTN_BUTFIRSTN)
  8.4626 +
  8.4627 +lemma BUTFIRSTN_LASTN: "ALL n l. n <= length l --> BUTFIRSTN n l = LASTN (length l - n) l"
  8.4628 +  by (import rich_list BUTFIRSTN_LASTN)
  8.4629 +
  8.4630 +lemma SEG_LASTN_BUTLASTN: "ALL n m l.
  8.4631 +   n + m <= length l -->
  8.4632 +   SEG n m l = LASTN n (BUTLASTN (length l - (n + m)) l)"
  8.4633 +  by (import rich_list SEG_LASTN_BUTLASTN)
  8.4634 +
  8.4635 +lemma BUTFIRSTN_REVERSE: "ALL n l. n <= length l --> BUTFIRSTN n (rev l) = rev (BUTLASTN n l)"
  8.4636 +  by (import rich_list BUTFIRSTN_REVERSE)
  8.4637 +
  8.4638 +lemma BUTLASTN_REVERSE: "ALL n l. n <= length l --> BUTLASTN n (rev l) = rev (BUTFIRSTN n l)"
  8.4639 +  by (import rich_list BUTLASTN_REVERSE)
  8.4640 +
  8.4641 +lemma LASTN_REVERSE: "ALL n l. n <= length l --> LASTN n (rev l) = rev (FIRSTN n l)"
  8.4642 +  by (import rich_list LASTN_REVERSE)
  8.4643 +
  8.4644 +lemma FIRSTN_REVERSE: "ALL n l. n <= length l --> FIRSTN n (rev l) = rev (LASTN n l)"
  8.4645 +  by (import rich_list FIRSTN_REVERSE)
  8.4646 +
  8.4647 +lemma SEG_REVERSE: "ALL n m l.
  8.4648 +   n + m <= length l -->
  8.4649 +   SEG n m (rev l) = rev (SEG n (length l - (n + m)) l)"
  8.4650 +  by (import rich_list SEG_REVERSE)
  8.4651 +
  8.4652 +lemma LENGTH_GENLIST: "ALL f n. length (GENLIST f n) = n"
  8.4653 +  by (import rich_list LENGTH_GENLIST)
  8.4654 +
  8.4655 +lemma LENGTH_REPLICATE: "ALL n x. length (REPLICATE n x) = n"
  8.4656 +  by (import rich_list LENGTH_REPLICATE)
  8.4657 +
  8.4658 +lemma IS_EL_REPLICATE: "ALL n. 0 < n --> (ALL x. x mem REPLICATE n x)"
  8.4659 +  by (import rich_list IS_EL_REPLICATE)
  8.4660 +
  8.4661 +lemma ALL_EL_REPLICATE: "ALL x n. list_all (op = x) (REPLICATE n x)"
  8.4662 +  by (import rich_list ALL_EL_REPLICATE)
  8.4663 +
  8.4664 +lemma AND_EL_FOLDL: "ALL l. AND_EL l = foldl op & True l"
  8.4665 +  by (import rich_list AND_EL_FOLDL)
  8.4666 +
  8.4667 +lemma AND_EL_FOLDR: "ALL l. AND_EL l = foldr op & l True"
  8.4668 +  by (import rich_list AND_EL_FOLDR)
  8.4669 +
  8.4670 +lemma OR_EL_FOLDL: "ALL l. OR_EL l = foldl op | False l"
  8.4671 +  by (import rich_list OR_EL_FOLDL)
  8.4672 +
  8.4673 +lemma OR_EL_FOLDR: "ALL l. OR_EL l = foldr op | l False"
  8.4674 +  by (import rich_list OR_EL_FOLDR)
  8.4675 +
  8.4676 +;end_setup
  8.4677 +
  8.4678 +;setup_theory state_transformer
  8.4679 +
  8.4680 +constdefs
  8.4681 +  UNIT :: "'b => 'a => 'b * 'a" 
  8.4682 +  "(op ==::('b => 'a => 'b * 'a) => ('b => 'a => 'b * 'a) => prop)
  8.4683 + (UNIT::'b => 'a => 'b * 'a) (Pair::'b => 'a => 'b * 'a)"
  8.4684 +
  8.4685 +lemma UNIT_DEF: "ALL x::'b. UNIT x = Pair x"
  8.4686 +  by (import state_transformer UNIT_DEF)
  8.4687 +
  8.4688 +constdefs
  8.4689 +  BIND :: "('a => 'b * 'a) => ('b => 'a => 'c * 'a) => 'a => 'c * 'a" 
  8.4690 +  "BIND == %g f. split f o g"
  8.4691 +
  8.4692 +lemma BIND_DEF: "ALL g f. BIND g f = split f o g"
  8.4693 +  by (import state_transformer BIND_DEF)
  8.4694 +
  8.4695 +constdefs
  8.4696 +  MMAP :: "('c => 'b) => ('a => 'c * 'a) => 'a => 'b * 'a" 
  8.4697 +  "MMAP == %(f::'c => 'b) m::'a => 'c * 'a. BIND m (UNIT o f)"
  8.4698 +
  8.4699 +lemma MMAP_DEF: "ALL (f::'c => 'b) m::'a => 'c * 'a. MMAP f m = BIND m (UNIT o f)"
  8.4700 +  by (import state_transformer MMAP_DEF)
  8.4701 +
  8.4702 +constdefs
  8.4703 +  JOIN :: "('a => ('a => 'b * 'a) * 'a) => 'a => 'b * 'a" 
  8.4704 +  "JOIN == %z. BIND z I"
  8.4705 +
  8.4706 +lemma JOIN_DEF: "ALL z. JOIN z = BIND z I"
  8.4707 +  by (import state_transformer JOIN_DEF)
  8.4708 +
  8.4709 +lemma BIND_LEFT_UNIT: "ALL k x. BIND (UNIT x) k = k x"
  8.4710 +  by (import state_transformer BIND_LEFT_UNIT)
  8.4711 +
  8.4712 +lemma UNIT_UNCURRY: "ALL x. split UNIT x = x"
  8.4713 +  by (import state_transformer UNIT_UNCURRY)
  8.4714 +
  8.4715 +lemma BIND_RIGHT_UNIT: "ALL k. BIND k UNIT = k"
  8.4716 +  by (import state_transformer BIND_RIGHT_UNIT)
  8.4717 +
  8.4718 +lemma BIND_ASSOC: "ALL x xa xb. BIND x (%a. BIND (xa a) xb) = BIND (BIND x xa) xb"
  8.4719 +  by (import state_transformer BIND_ASSOC)
  8.4720 +
  8.4721 +lemma MMAP_ID: "MMAP I = I"
  8.4722 +  by (import state_transformer MMAP_ID)
  8.4723 +
  8.4724 +lemma MMAP_COMP: "ALL (f::'c => 'd) g::'b => 'c. MMAP (f o g) = MMAP f o MMAP g"
  8.4725 +  by (import state_transformer MMAP_COMP)
  8.4726 +
  8.4727 +lemma MMAP_UNIT: "ALL f::'b => 'c. MMAP f o UNIT = UNIT o f"
  8.4728 +  by (import state_transformer MMAP_UNIT)
  8.4729 +
  8.4730 +lemma MMAP_JOIN: "ALL f::'b => 'c. MMAP f o JOIN = JOIN o MMAP (MMAP f)"
  8.4731 +  by (import state_transformer MMAP_JOIN)
  8.4732 +
  8.4733 +lemma JOIN_UNIT: "JOIN o UNIT = I"
  8.4734 +  by (import state_transformer JOIN_UNIT)
  8.4735 +
  8.4736 +lemma JOIN_MMAP_UNIT: "JOIN o MMAP UNIT = I"
  8.4737 +  by (import state_transformer JOIN_MMAP_UNIT)
  8.4738 +
  8.4739 +lemma JOIN_MAP_JOIN: "JOIN o MMAP JOIN = JOIN o JOIN"
  8.4740 +  by (import state_transformer JOIN_MAP_JOIN)
  8.4741 +
  8.4742 +lemma JOIN_MAP: "ALL x xa. BIND x xa = JOIN (MMAP xa x)"
  8.4743 +  by (import state_transformer JOIN_MAP)
  8.4744 +
  8.4745 +lemma FST_o_UNIT: "ALL x. fst o UNIT x = K x"
  8.4746 +  by (import state_transformer FST_o_UNIT)
  8.4747 +
  8.4748 +lemma SND_o_UNIT: "ALL x. snd o UNIT x = I"
  8.4749 +  by (import state_transformer SND_o_UNIT)
  8.4750 +
  8.4751 +lemma FST_o_MMAP: "ALL x xa. fst o MMAP x xa = x o (fst o xa)"
  8.4752 +  by (import state_transformer FST_o_MMAP)
  8.4753 +
  8.4754 +;end_setup
  8.4755 +
  8.4756 +end
  8.4757 +
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/src/HOL/Import/HOL/HOL4Prob.thy	Fri Apr 02 17:37:45 2004 +0200
     9.3 @@ -0,0 +1,3981 @@
     9.4 +theory HOL4Prob = HOL4Real:
     9.5 +
     9.6 +;setup_theory prob_extra
     9.7 +
     9.8 +lemma BOOL_BOOL_CASES_THM: "ALL f. f = (%b. False) | f = (%b. True) | f = (%b. b) | f = Not"
     9.9 +  by (import prob_extra BOOL_BOOL_CASES_THM)
    9.10 +
    9.11 +lemma EVEN_ODD_BASIC: "EVEN 0 & ~ EVEN 1 & EVEN 2 & ~ ODD 0 & ODD 1 & ~ ODD 2"
    9.12 +  by (import prob_extra EVEN_ODD_BASIC)
    9.13 +
    9.14 +lemma EVEN_ODD_EXISTS_EQ: "ALL n. EVEN n = (EX m. n = 2 * m) & ODD n = (EX m. n = Suc (2 * m))"
    9.15 +  by (import prob_extra EVEN_ODD_EXISTS_EQ)
    9.16 +
    9.17 +lemma DIV_THEN_MULT: "ALL p q. Suc q * (p div Suc q) <= p"
    9.18 +  by (import prob_extra DIV_THEN_MULT)
    9.19 +
    9.20 +lemma DIV_TWO_UNIQUE: "(All::(nat => bool) => bool)
    9.21 + (%n::nat.
    9.22 +     (All::(nat => bool) => bool)
    9.23 +      (%q::nat.
    9.24 +          (All::(nat => bool) => bool)
    9.25 +           (%r::nat.
    9.26 +               (op -->::bool => bool => bool)
    9.27 +                ((op &::bool => bool => bool)
    9.28 +                  ((op =::nat => nat => bool) n
    9.29 +                    ((op +::nat => nat => nat)
    9.30 +                      ((op *::nat => nat => nat)
    9.31 +                        ((number_of::bin => nat)
    9.32 +                          ((op BIT::bin => bool => bin)
    9.33 +                            ((op BIT::bin => bool => bin) (bin.Pls::bin)
    9.34 +                              (True::bool))
    9.35 +                            (False::bool)))
    9.36 +                        q)
    9.37 +                      r))
    9.38 +                  ((op |::bool => bool => bool)
    9.39 +                    ((op =::nat => nat => bool) r (0::nat))
    9.40 +                    ((op =::nat => nat => bool) r (1::nat))))
    9.41 +                ((op &::bool => bool => bool)
    9.42 +                  ((op =::nat => nat => bool) q
    9.43 +                    ((op div::nat => nat => nat) n
    9.44 +                      ((number_of::bin => nat)
    9.45 +                        ((op BIT::bin => bool => bin)
    9.46 +                          ((op BIT::bin => bool => bin) (bin.Pls::bin)
    9.47 +                            (True::bool))
    9.48 +                          (False::bool)))))
    9.49 +                  ((op =::nat => nat => bool) r
    9.50 +                    ((op mod::nat => nat => nat) n
    9.51 +                      ((number_of::bin => nat)
    9.52 +                        ((op BIT::bin => bool => bin)
    9.53 +                          ((op BIT::bin => bool => bin) (bin.Pls::bin)
    9.54 +                            (True::bool))
    9.55 +                          (False::bool)))))))))"
    9.56 +  by (import prob_extra DIV_TWO_UNIQUE)
    9.57 +
    9.58 +lemma DIVISION_TWO: "ALL n::nat.
    9.59 +   n = (2::nat) * (n div (2::nat)) + n mod (2::nat) &
    9.60 +   (n mod (2::nat) = (0::nat) | n mod (2::nat) = (1::nat))"
    9.61 +  by (import prob_extra DIVISION_TWO)
    9.62 +
    9.63 +lemma DIV_TWO: "ALL n::nat. n = (2::nat) * (n div (2::nat)) + n mod (2::nat)"
    9.64 +  by (import prob_extra DIV_TWO)
    9.65 +
    9.66 +lemma MOD_TWO: "ALL n. n mod 2 = (if EVEN n then 0 else 1)"
    9.67 +  by (import prob_extra MOD_TWO)
    9.68 +
    9.69 +lemma DIV_TWO_BASIC: "(0::nat) div (2::nat) = (0::nat) &
    9.70 +(1::nat) div (2::nat) = (0::nat) & (2::nat) div (2::nat) = (1::nat)"
    9.71 +  by (import prob_extra DIV_TWO_BASIC)
    9.72 +
    9.73 +lemma DIV_TWO_MONO: "(All::(nat => bool) => bool)
    9.74 + (%m::nat.
    9.75 +     (All::(nat => bool) => bool)
    9.76 +      (%n::nat.
    9.77 +          (op -->::bool => bool => bool)
    9.78 +           ((op <::nat => nat => bool)
    9.79 +             ((op div::nat => nat => nat) m
    9.80 +               ((number_of::bin => nat)
    9.81 +                 ((op BIT::bin => bool => bin)
    9.82 +                   ((op BIT::bin => bool => bin) (bin.Pls::bin)
    9.83 +                     (True::bool))
    9.84 +                   (False::bool))))
    9.85 +             ((op div::nat => nat => nat) n
    9.86 +               ((number_of::bin => nat)
    9.87 +                 ((op BIT::bin => bool => bin)
    9.88 +                   ((op BIT::bin => bool => bin) (bin.Pls::bin)
    9.89 +                     (True::bool))
    9.90 +                   (False::bool)))))
    9.91 +           ((op <::nat => nat => bool) m n)))"
    9.92 +  by (import prob_extra DIV_TWO_MONO)
    9.93 +
    9.94 +lemma DIV_TWO_MONO_EVEN: "(All::(nat => bool) => bool)
    9.95 + (%m::nat.
    9.96 +     (All::(nat => bool) => bool)
    9.97 +      (%n::nat.
    9.98 +          (op -->::bool => bool => bool) ((EVEN::nat => bool) n)
    9.99 +           ((op =::bool => bool => bool)
   9.100 +             ((op <::nat => nat => bool)
   9.101 +               ((op div::nat => nat => nat) m
   9.102 +                 ((number_of::bin => nat)
   9.103 +                   ((op BIT::bin => bool => bin)
   9.104 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
   9.105 +                       (True::bool))
   9.106 +                     (False::bool))))
   9.107 +               ((op div::nat => nat => nat) n
   9.108 +                 ((number_of::bin => nat)
   9.109 +                   ((op BIT::bin => bool => bin)
   9.110 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
   9.111 +                       (True::bool))
   9.112 +                     (False::bool)))))
   9.113 +             ((op <::nat => nat => bool) m n))))"
   9.114 +  by (import prob_extra DIV_TWO_MONO_EVEN)
   9.115 +
   9.116 +lemma DIV_TWO_CANCEL: "ALL n. 2 * n div 2 = n & Suc (2 * n) div 2 = n"
   9.117 +  by (import prob_extra DIV_TWO_CANCEL)
   9.118 +
   9.119 +lemma EXP_DIV_TWO: "ALL n::nat. (2::nat) ^ Suc n div (2::nat) = (2::nat) ^ n"
   9.120 +  by (import prob_extra EXP_DIV_TWO)
   9.121 +
   9.122 +lemma EVEN_EXP_TWO: "ALL n. EVEN (2 ^ n) = (n ~= 0)"
   9.123 +  by (import prob_extra EVEN_EXP_TWO)
   9.124 +
   9.125 +lemma DIV_TWO_EXP: "ALL (n::nat) k::nat.
   9.126 +   (k div (2::nat) < (2::nat) ^ n) = (k < (2::nat) ^ Suc n)"
   9.127 +  by (import prob_extra DIV_TWO_EXP)
   9.128 +
   9.129 +consts
   9.130 +  inf :: "(real => bool) => real" 
   9.131 +
   9.132 +defs
   9.133 +  inf_primdef: "inf == %P. - sup (IMAGE uminus P)"
   9.134 +
   9.135 +lemma inf_def: "ALL P. inf P = - sup (IMAGE uminus P)"
   9.136 +  by (import prob_extra inf_def)
   9.137 +
   9.138 +lemma INF_DEF_ALT: "ALL P. inf P = - sup (%r. P (- r))"
   9.139 +  by (import prob_extra INF_DEF_ALT)
   9.140 +
   9.141 +lemma REAL_SUP_EXISTS_UNIQUE: "(All::((real => bool) => bool) => bool)
   9.142 + (%P::real => bool.
   9.143 +     (op -->::bool => bool => bool)
   9.144 +      ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
   9.145 +        ((Ex::(real => bool) => bool)
   9.146 +          (%z::real.
   9.147 +              (All::(real => bool) => bool)
   9.148 +               (%x::real.
   9.149 +                   (op -->::bool => bool => bool) (P x)
   9.150 +                    ((op <=::real => real => bool) x z)))))
   9.151 +      ((Ex1::(real => bool) => bool)
   9.152 +        (%s::real.
   9.153 +            (All::(real => bool) => bool)
   9.154 +             (%y::real.
   9.155 +                 (op =::bool => bool => bool)
   9.156 +                  ((Ex::(real => bool) => bool)
   9.157 +                    (%x::real.
   9.158 +                        (op &::bool => bool => bool) (P x)
   9.159 +                         ((op <::real => real => bool) y x)))
   9.160 +                  ((op <::real => real => bool) y s)))))"
   9.161 +  by (import prob_extra REAL_SUP_EXISTS_UNIQUE)
   9.162 +
   9.163 +lemma REAL_SUP_MAX: "(All::((real => bool) => bool) => bool)
   9.164 + (%P::real => bool.
   9.165 +     (All::(real => bool) => bool)
   9.166 +      (%z::real.
   9.167 +          (op -->::bool => bool => bool)
   9.168 +           ((op &::bool => bool => bool) (P z)
   9.169 +             ((All::(real => bool) => bool)
   9.170 +               (%x::real.
   9.171 +                   (op -->::bool => bool => bool) (P x)
   9.172 +                    ((op <=::real => real => bool) x z))))
   9.173 +           ((op =::real => real => bool) ((sup::(real => bool) => real) P)
   9.174 +             z)))"
   9.175 +  by (import prob_extra REAL_SUP_MAX)
   9.176 +
   9.177 +lemma REAL_INF_MIN: "(All::((real => bool) => bool) => bool)
   9.178 + (%P::real => bool.
   9.179 +     (All::(real => bool) => bool)
   9.180 +      (%z::real.
   9.181 +          (op -->::bool => bool => bool)
   9.182 +           ((op &::bool => bool => bool) (P z)
   9.183 +             ((All::(real => bool) => bool)
   9.184 +               (%x::real.
   9.185 +                   (op -->::bool => bool => bool) (P x)
   9.186 +                    ((op <=::real => real => bool) z x))))
   9.187 +           ((op =::real => real => bool) ((inf::(real => bool) => real) P)
   9.188 +             z)))"
   9.189 +  by (import prob_extra REAL_INF_MIN)
   9.190 +
   9.191 +lemma HALF_POS: "(0::real) < (1::real) / (2::real)"
   9.192 +  by (import prob_extra HALF_POS)
   9.193 +
   9.194 +lemma HALF_CANCEL: "(2::real) * ((1::real) / (2::real)) = (1::real)"
   9.195 +  by (import prob_extra HALF_CANCEL)
   9.196 +
   9.197 +lemma POW_HALF_POS: "ALL n::nat. (0::real) < ((1::real) / (2::real)) ^ n"
   9.198 +  by (import prob_extra POW_HALF_POS)
   9.199 +
   9.200 +lemma POW_HALF_MONO: "(All::(nat => bool) => bool)
   9.201 + (%m::nat.
   9.202 +     (All::(nat => bool) => bool)
   9.203 +      (%n::nat.
   9.204 +          (op -->::bool => bool => bool) ((op <=::nat => nat => bool) m n)
   9.205 +           ((op <=::real => real => bool)
   9.206 +             ((op ^::real => nat => real)
   9.207 +               ((op /::real => real => real) (1::real)
   9.208 +                 ((number_of::bin => real)
   9.209 +                   ((op BIT::bin => bool => bin)
   9.210 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
   9.211 +                       (True::bool))
   9.212 +                     (False::bool))))
   9.213 +               n)
   9.214 +             ((op ^::real => nat => real)
   9.215 +               ((op /::real => real => real) (1::real)
   9.216 +                 ((number_of::bin => real)
   9.217 +                   ((op BIT::bin => bool => bin)
   9.218 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
   9.219 +                       (True::bool))
   9.220 +                     (False::bool))))
   9.221 +               m))))"
   9.222 +  by (import prob_extra POW_HALF_MONO)
   9.223 +
   9.224 +lemma POW_HALF_TWICE: "ALL n::nat.
   9.225 +   ((1::real) / (2::real)) ^ n = (2::real) * ((1::real) / (2::real)) ^ Suc n"
   9.226 +  by (import prob_extra POW_HALF_TWICE)
   9.227 +
   9.228 +lemma X_HALF_HALF: "ALL x::real. (1::real) / (2::real) * x + (1::real) / (2::real) * x = x"
   9.229 +  by (import prob_extra X_HALF_HALF)
   9.230 +
   9.231 +lemma REAL_SUP_LE_X: "(All::((real => bool) => bool) => bool)
   9.232 + (%P::real => bool.
   9.233 +     (All::(real => bool) => bool)
   9.234 +      (%x::real.
   9.235 +          (op -->::bool => bool => bool)
   9.236 +           ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
   9.237 +             ((All::(real => bool) => bool)
   9.238 +               (%r::real.
   9.239 +                   (op -->::bool => bool => bool) (P r)
   9.240 +                    ((op <=::real => real => bool) r x))))
   9.241 +           ((op <=::real => real => bool) ((sup::(real => bool) => real) P)
   9.242 +             x)))"
   9.243 +  by (import prob_extra REAL_SUP_LE_X)
   9.244 +
   9.245 +lemma REAL_X_LE_SUP: "(All::((real => bool) => bool) => bool)
   9.246 + (%P::real => bool.
   9.247 +     (All::(real => bool) => bool)
   9.248 +      (%x::real.
   9.249 +          (op -->::bool => bool => bool)
   9.250 +           ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
   9.251 +             ((op &::bool => bool => bool)
   9.252 +               ((Ex::(real => bool) => bool)
   9.253 +                 (%z::real.
   9.254 +                     (All::(real => bool) => bool)
   9.255 +                      (%r::real.
   9.256 +                          (op -->::bool => bool => bool) (P r)
   9.257 +                           ((op <=::real => real => bool) r z))))
   9.258 +               ((Ex::(real => bool) => bool)
   9.259 +                 (%r::real.
   9.260 +                     (op &::bool => bool => bool) (P r)
   9.261 +                      ((op <=::real => real => bool) x r)))))
   9.262 +           ((op <=::real => real => bool) x
   9.263 +             ((sup::(real => bool) => real) P))))"
   9.264 +  by (import prob_extra REAL_X_LE_SUP)
   9.265 +
   9.266 +lemma ABS_BETWEEN_LE: "ALL (x::real) (y::real) d::real.
   9.267 +   ((0::real) <= d & x - d <= y & y <= x + d) = (abs (y - x) <= d)"
   9.268 +  by (import prob_extra ABS_BETWEEN_LE)
   9.269 +
   9.270 +lemma ONE_MINUS_HALF: "(1::real) - (1::real) / (2::real) = (1::real) / (2::real)"
   9.271 +  by (import prob_extra ONE_MINUS_HALF)
   9.272 +
   9.273 +lemma HALF_LT_1: "(1::real) / (2::real) < (1::real)"
   9.274 +  by (import prob_extra HALF_LT_1)
   9.275 +
   9.276 +lemma POW_HALF_EXP: "ALL n::nat. ((1::real) / (2::real)) ^ n = inverse (real ((2::nat) ^ n))"
   9.277 +  by (import prob_extra POW_HALF_EXP)
   9.278 +
   9.279 +lemma INV_SUC_POS: "ALL n. 0 < 1 / real (Suc n)"
   9.280 +  by (import prob_extra INV_SUC_POS)
   9.281 +
   9.282 +lemma INV_SUC_MAX: "ALL x. 1 / real (Suc x) <= 1"
   9.283 +  by (import prob_extra INV_SUC_MAX)
   9.284 +
   9.285 +lemma INV_SUC: "ALL n. 0 < 1 / real (Suc n) & 1 / real (Suc n) <= 1"
   9.286 +  by (import prob_extra INV_SUC)
   9.287 +
   9.288 +lemma ABS_UNIT_INTERVAL: "(All::(real => bool) => bool)
   9.289 + (%x::real.
   9.290 +     (All::(real => bool) => bool)
   9.291 +      (%y::real.
   9.292 +          (op -->::bool => bool => bool)
   9.293 +           ((op &::bool => bool => bool)
   9.294 +             ((op <=::real => real => bool) (0::real) x)
   9.295 +             ((op &::bool => bool => bool)
   9.296 +               ((op <=::real => real => bool) x (1::real))
   9.297 +               ((op &::bool => bool => bool)
   9.298 +                 ((op <=::real => real => bool) (0::real) y)
   9.299 +                 ((op <=::real => real => bool) y (1::real)))))
   9.300 +           ((op <=::real => real => bool)
   9.301 +             ((abs::real => real) ((op -::real => real => real) x y))
   9.302 +             (1::real))))"
   9.303 +  by (import prob_extra ABS_UNIT_INTERVAL)
   9.304 +
   9.305 +lemma MEM_NIL: "ALL l. (ALL x. ~ x mem l) = (l = [])"
   9.306 +  by (import prob_extra MEM_NIL)
   9.307 +
   9.308 +lemma MAP_MEM: "ALL f l x. x mem map f l = (EX y. y mem l & x = f y)"
   9.309 +  by (import prob_extra MAP_MEM)
   9.310 +
   9.311 +lemma MEM_NIL_MAP_CONS: "ALL x l. ~ [] mem map (op # x) l"
   9.312 +  by (import prob_extra MEM_NIL_MAP_CONS)
   9.313 +
   9.314 +lemma FILTER_TRUE: "ALL l. [x:l. True] = l"
   9.315 +  by (import prob_extra FILTER_TRUE)
   9.316 +
   9.317 +lemma FILTER_FALSE: "ALL l. [x:l. False] = []"
   9.318 +  by (import prob_extra FILTER_FALSE)
   9.319 +
   9.320 +lemma FILTER_MEM: "(All::(('a => bool) => bool) => bool)
   9.321 + (%P::'a => bool.
   9.322 +     (All::('a => bool) => bool)
   9.323 +      (%x::'a.
   9.324 +          (All::('a list => bool) => bool)
   9.325 +           (%l::'a list.
   9.326 +               (op -->::bool => bool => bool)
   9.327 +                ((op mem::'a => 'a list => bool) x
   9.328 +                  ((filter::('a => bool) => 'a list => 'a list) P l))
   9.329 +                (P x))))"
   9.330 +  by (import prob_extra FILTER_MEM)
   9.331 +
   9.332 +lemma MEM_FILTER: "(All::(('a => bool) => bool) => bool)
   9.333 + (%P::'a => bool.
   9.334 +     (All::('a list => bool) => bool)
   9.335 +      (%l::'a list.
   9.336 +          (All::('a => bool) => bool)
   9.337 +           (%x::'a.
   9.338 +               (op -->::bool => bool => bool)
   9.339 +                ((op mem::'a => 'a list => bool) x
   9.340 +                  ((filter::('a => bool) => 'a list => 'a list) P l))
   9.341 +                ((op mem::'a => 'a list => bool) x l))))"
   9.342 +  by (import prob_extra MEM_FILTER)
   9.343 +
   9.344 +lemma FILTER_OUT_ELT: "ALL x l. x mem l | [y:l. y ~= x] = l"
   9.345 +  by (import prob_extra FILTER_OUT_ELT)
   9.346 +
   9.347 +lemma IS_PREFIX_NIL: "ALL x. IS_PREFIX x [] & IS_PREFIX [] x = (x = [])"
   9.348 +  by (import prob_extra IS_PREFIX_NIL)
   9.349 +
   9.350 +lemma IS_PREFIX_REFL: "ALL x. IS_PREFIX x x"
   9.351 +  by (import prob_extra IS_PREFIX_REFL)
   9.352 +
   9.353 +lemma IS_PREFIX_ANTISYM: "(All::('a list => bool) => bool)
   9.354 + (%x::'a list.
   9.355 +     (All::('a list => bool) => bool)
   9.356 +      (%y::'a list.
   9.357 +          (op -->::bool => bool => bool)
   9.358 +           ((op &::bool => bool => bool)
   9.359 +             ((IS_PREFIX::'a list => 'a list => bool) y x)
   9.360 +             ((IS_PREFIX::'a list => 'a list => bool) x y))
   9.361 +           ((op =::'a list => 'a list => bool) x y)))"
   9.362 +  by (import prob_extra IS_PREFIX_ANTISYM)
   9.363 +
   9.364 +lemma IS_PREFIX_TRANS: "(All::('a list => bool) => bool)
   9.365 + (%x::'a list.
   9.366 +     (All::('a list => bool) => bool)
   9.367 +      (%y::'a list.
   9.368 +          (All::('a list => bool) => bool)
   9.369 +           (%z::'a list.
   9.370 +               (op -->::bool => bool => bool)
   9.371 +                ((op &::bool => bool => bool)
   9.372 +                  ((IS_PREFIX::'a list => 'a list => bool) x y)
   9.373 +                  ((IS_PREFIX::'a list => 'a list => bool) y z))
   9.374 +                ((IS_PREFIX::'a list => 'a list => bool) x z))))"
   9.375 +  by (import prob_extra IS_PREFIX_TRANS)
   9.376 +
   9.377 +lemma IS_PREFIX_BUTLAST: "ALL x y. IS_PREFIX (x # y) (butlast (x # y))"
   9.378 +  by (import prob_extra IS_PREFIX_BUTLAST)
   9.379 +
   9.380 +lemma IS_PREFIX_LENGTH: "(All::('a list => bool) => bool)
   9.381 + (%x::'a list.
   9.382 +     (All::('a list => bool) => bool)
   9.383 +      (%y::'a list.
   9.384 +          (op -->::bool => bool => bool)
   9.385 +           ((IS_PREFIX::'a list => 'a list => bool) y x)
   9.386 +           ((op <=::nat => nat => bool) ((size::'a list => nat) x)
   9.387 +             ((size::'a list => nat) y))))"
   9.388 +  by (import prob_extra IS_PREFIX_LENGTH)
   9.389 +
   9.390 +lemma IS_PREFIX_LENGTH_ANTI: "(All::('a list => bool) => bool)
   9.391 + (%x::'a list.
   9.392 +     (All::('a list => bool) => bool)
   9.393 +      (%y::'a list.
   9.394 +          (op -->::bool => bool => bool)
   9.395 +           ((op &::bool => bool => bool)
   9.396 +             ((IS_PREFIX::'a list => 'a list => bool) y x)
   9.397 +             ((op =::nat => nat => bool) ((size::'a list => nat) x)
   9.398 +               ((size::'a list => nat) y)))
   9.399 +           ((op =::'a list => 'a list => bool) x y)))"
   9.400 +  by (import prob_extra IS_PREFIX_LENGTH_ANTI)
   9.401 +
   9.402 +lemma IS_PREFIX_SNOC: "ALL x y z. IS_PREFIX (SNOC x y) z = (IS_PREFIX y z | z = SNOC x y)"
   9.403 +  by (import prob_extra IS_PREFIX_SNOC)
   9.404 +
   9.405 +lemma FOLDR_MAP: "ALL (f::'b => 'c => 'c) (e::'c) (g::'a => 'b) l::'a list.
   9.406 +   foldr f (map g l) e = foldr (%x::'a. f (g x)) l e"
   9.407 +  by (import prob_extra FOLDR_MAP)
   9.408 +
   9.409 +lemma LAST_MEM: "ALL h t. last (h # t) mem h # t"
   9.410 +  by (import prob_extra LAST_MEM)
   9.411 +
   9.412 +lemma LAST_MAP_CONS: "ALL (b::bool) (h::bool list) t::bool list list.
   9.413 +   EX x::bool list. last (map (op # b) (h # t)) = b # x"
   9.414 +  by (import prob_extra LAST_MAP_CONS)
   9.415 +
   9.416 +lemma EXISTS_LONGEST: "(All::('a list => bool) => bool)
   9.417 + (%x::'a list.
   9.418 +     (All::('a list list => bool) => bool)
   9.419 +      (%y::'a list list.
   9.420 +          (Ex::('a list => bool) => bool)
   9.421 +           (%z::'a list.
   9.422 +               (op &::bool => bool => bool)
   9.423 +                ((op mem::'a list => 'a list list => bool) z
   9.424 +                  ((op #::'a list => 'a list list => 'a list list) x y))
   9.425 +                ((All::('a list => bool) => bool)
   9.426 +                  (%w::'a list.
   9.427 +                      (op -->::bool => bool => bool)
   9.428 +                       ((op mem::'a list => 'a list list => bool) w
   9.429 +                         ((op #::'a list => 'a list list => 'a list list) x
   9.430 +                           y))
   9.431 +                       ((op <=::nat => nat => bool)
   9.432 +                         ((size::'a list => nat) w)
   9.433 +                         ((size::'a list => nat) z)))))))"
   9.434 +  by (import prob_extra EXISTS_LONGEST)
   9.435 +
   9.436 +lemma UNION_DEF_ALT: "ALL s t. pred_set.UNION s t = (%x. s x | t x)"
   9.437 +  by (import prob_extra UNION_DEF_ALT)
   9.438 +
   9.439 +lemma INTER_UNION_RDISTRIB: "ALL p q r.
   9.440 +   pred_set.INTER (pred_set.UNION p q) r =
   9.441 +   pred_set.UNION (pred_set.INTER p r) (pred_set.INTER q r)"
   9.442 +  by (import prob_extra INTER_UNION_RDISTRIB)
   9.443 +
   9.444 +lemma SUBSET_EQ: "ALL x xa. (x = xa) = (SUBSET x xa & SUBSET xa x)"
   9.445 +  by (import prob_extra SUBSET_EQ)
   9.446 +
   9.447 +lemma INTER_IS_EMPTY: "ALL s t. (pred_set.INTER s t = EMPTY) = (ALL x. ~ s x | ~ t x)"
   9.448 +  by (import prob_extra INTER_IS_EMPTY)
   9.449 +
   9.450 +lemma UNION_DISJOINT_SPLIT: "(All::(('a => bool) => bool) => bool)
   9.451 + (%s::'a => bool.
   9.452 +     (All::(('a => bool) => bool) => bool)
   9.453 +      (%t::'a => bool.
   9.454 +          (All::(('a => bool) => bool) => bool)
   9.455 +           (%u::'a => bool.
   9.456 +               (op -->::bool => bool => bool)
   9.457 +                ((op &::bool => bool => bool)
   9.458 +                  ((op =::('a => bool) => ('a => bool) => bool)
   9.459 +                    ((pred_set.UNION::('a => bool)
   9.460 +=> ('a => bool) => 'a => bool)
   9.461 +                      s t)
   9.462 +                    ((pred_set.UNION::('a => bool)
   9.463 +=> ('a => bool) => 'a => bool)
   9.464 +                      s u))
   9.465 +                  ((op &::bool => bool => bool)
   9.466 +                    ((op =::('a => bool) => ('a => bool) => bool)
   9.467 +                      ((pred_set.INTER::('a => bool)
   9.468 +  => ('a => bool) => 'a => bool)
   9.469 +                        s t)
   9.470 +                      (EMPTY::'a => bool))
   9.471 +                    ((op =::('a => bool) => ('a => bool) => bool)
   9.472 +                      ((pred_set.INTER::('a => bool)
   9.473 +  => ('a => bool) => 'a => bool)
   9.474 +                        s u)
   9.475 +                      (EMPTY::'a => bool))))
   9.476 +                ((op =::('a => bool) => ('a => bool) => bool) t u))))"
   9.477 +  by (import prob_extra UNION_DISJOINT_SPLIT)
   9.478 +
   9.479 +lemma GSPEC_DEF_ALT: "ALL f. GSPEC f = (%v. EX x. (v, True) = f x)"
   9.480 +  by (import prob_extra GSPEC_DEF_ALT)
   9.481 +
   9.482 +;end_setup
   9.483 +
   9.484 +;setup_theory prob_canon
   9.485 +
   9.486 +consts
   9.487 +  alg_twin :: "bool list => bool list => bool" 
   9.488 +
   9.489 +defs
   9.490 +  alg_twin_primdef: "alg_twin == %x y. EX l. x = SNOC True l & y = SNOC False l"
   9.491 +
   9.492 +lemma alg_twin_def: "ALL x y. alg_twin x y = (EX l. x = SNOC True l & y = SNOC False l)"
   9.493 +  by (import prob_canon alg_twin_def)
   9.494 +
   9.495 +constdefs
   9.496 +  alg_order_tupled :: "bool list * bool list => bool" 
   9.497 +  "(op ==::(bool list * bool list => bool)
   9.498 +        => (bool list * bool list => bool) => prop)
   9.499 + (alg_order_tupled::bool list * bool list => bool)
   9.500 + ((WFREC::(bool list * bool list => bool list * bool list => bool)
   9.501 +          => ((bool list * bool list => bool)
   9.502 +              => bool list * bool list => bool)
   9.503 +             => bool list * bool list => bool)
   9.504 +   ((Eps::((bool list * bool list => bool list * bool list => bool) => bool)
   9.505 +          => bool list * bool list => bool list * bool list => bool)
   9.506 +     (%R::bool list * bool list => bool list * bool list => bool.
   9.507 +         (op &::bool => bool => bool)
   9.508 +          ((WF::(bool list * bool list => bool list * bool list => bool)
   9.509 +                => bool)
   9.510 +            R)
   9.511 +          ((All::(bool => bool) => bool)
   9.512 +            (%h'::bool.
   9.513 +                (All::(bool => bool) => bool)
   9.514 +                 (%h::bool.
   9.515 +                     (All::(bool list => bool) => bool)
   9.516 +                      (%t'::bool list.
   9.517 +                          (All::(bool list => bool) => bool)
   9.518 +                           (%t::bool list.
   9.519 +                               R ((Pair::bool list
   9.520 +   => bool list => bool list * bool list)
   9.521 +                                   t t')
   9.522 +                                ((Pair::bool list
   9.523 +  => bool list => bool list * bool list)
   9.524 +                                  ((op #::bool => bool list => bool list) h
   9.525 +                                    t)
   9.526 +                                  ((op #::bool => bool list => bool list) h'
   9.527 +                                    t')))))))))
   9.528 +   (%alg_order_tupled::bool list * bool list => bool.
   9.529 +       (split::(bool list => bool list => bool)
   9.530 +               => bool list * bool list => bool)
   9.531 +        (%(v::bool list) v1::bool list.
   9.532 +            (list_case::bool
   9.533 +                        => (bool => bool list => bool) => bool list => bool)
   9.534 +             ((list_case::bool
   9.535 +                          => (bool => bool list => bool)
   9.536 +                             => bool list => bool)
   9.537 +               (True::bool) (%(v8::bool) v9::bool list. True::bool) v1)
   9.538 +             (%(v4::bool) v5::bool list.
   9.539 +                 (list_case::bool
   9.540 +                             => (bool => bool list => bool)
   9.541 +                                => bool list => bool)
   9.542 +                  (False::bool)
   9.543 +                  (%(v10::bool) v11::bool list.
   9.544 +                      (op |::bool => bool => bool)
   9.545 +                       ((op &::bool => bool => bool)
   9.546 +                         ((op =::bool => bool => bool) v4 (True::bool))
   9.547 +                         ((op =::bool => bool => bool) v10 (False::bool)))
   9.548 +                       ((op &::bool => bool => bool)
   9.549 +                         ((op =::bool => bool => bool) v4 v10)
   9.550 +                         (alg_order_tupled
   9.551 +                           ((Pair::bool list
   9.552 +                                   => bool list => bool list * bool list)
   9.553 +                             v5 v11))))
   9.554 +                  v1)
   9.555 +             v)))"
   9.556 +
   9.557 +lemma alg_order_tupled_primitive_def: "(op =::(bool list * bool list => bool)
   9.558 +       => (bool list * bool list => bool) => bool)
   9.559 + (alg_order_tupled::bool list * bool list => bool)
   9.560 + ((WFREC::(bool list * bool list => bool list * bool list => bool)
   9.561 +          => ((bool list * bool list => bool)
   9.562 +              => bool list * bool list => bool)
   9.563 +             => bool list * bool list => bool)
   9.564 +   ((Eps::((bool list * bool list => bool list * bool list => bool) => bool)
   9.565 +          => bool list * bool list => bool list * bool list => bool)
   9.566 +     (%R::bool list * bool list => bool list * bool list => bool.
   9.567 +         (op &::bool => bool => bool)
   9.568 +          ((WF::(bool list * bool list => bool list * bool list => bool)
   9.569 +                => bool)
   9.570 +            R)
   9.571 +          ((All::(bool => bool) => bool)
   9.572 +            (%h'::bool.
   9.573 +                (All::(bool => bool) => bool)
   9.574 +                 (%h::bool.
   9.575 +                     (All::(bool list => bool) => bool)
   9.576 +                      (%t'::bool list.
   9.577 +                          (All::(bool list => bool) => bool)
   9.578 +                           (%t::bool list.
   9.579 +                               R ((Pair::bool list
   9.580 +   => bool list => bool list * bool list)
   9.581 +                                   t t')
   9.582 +                                ((Pair::bool list
   9.583 +  => bool list => bool list * bool list)
   9.584 +                                  ((op #::bool => bool list => bool list) h
   9.585 +                                    t)
   9.586 +                                  ((op #::bool => bool list => bool list) h'
   9.587 +                                    t')))))))))
   9.588 +   (%alg_order_tupled::bool list * bool list => bool.
   9.589 +       (split::(bool list => bool list => bool)
   9.590 +               => bool list * bool list => bool)
   9.591 +        (%(v::bool list) v1::bool list.
   9.592 +            (list_case::bool
   9.593 +                        => (bool => bool list => bool) => bool list => bool)
   9.594 +             ((list_case::bool
   9.595 +                          => (bool => bool list => bool)
   9.596 +                             => bool list => bool)
   9.597 +               (True::bool) (%(v8::bool) v9::bool list. True::bool) v1)
   9.598 +             (%(v4::bool) v5::bool list.
   9.599 +                 (list_case::bool
   9.600 +                             => (bool => bool list => bool)
   9.601 +                                => bool list => bool)
   9.602 +                  (False::bool)
   9.603 +                  (%(v10::bool) v11::bool list.
   9.604 +                      (op |::bool => bool => bool)
   9.605 +                       ((op &::bool => bool => bool)
   9.606 +                         ((op =::bool => bool => bool) v4 (True::bool))
   9.607 +                         ((op =::bool => bool => bool) v10 (False::bool)))
   9.608 +                       ((op &::bool => bool => bool)
   9.609 +                         ((op =::bool => bool => bool) v4 v10)
   9.610 +                         (alg_order_tupled
   9.611 +                           ((Pair::bool list
   9.612 +                                   => bool list => bool list * bool list)
   9.613 +                             v5 v11))))
   9.614 +                  v1)
   9.615 +             v)))"
   9.616 +  by (import prob_canon alg_order_tupled_primitive_def)
   9.617 +
   9.618 +consts
   9.619 +  alg_order :: "bool list => bool list => bool" 
   9.620 +
   9.621 +defs
   9.622 +  alg_order_primdef: "alg_order == %x x1. alg_order_tupled (x, x1)"
   9.623 +
   9.624 +lemma alg_order_curried_def: "ALL x x1. alg_order x x1 = alg_order_tupled (x, x1)"
   9.625 +  by (import prob_canon alg_order_curried_def)
   9.626 +
   9.627 +lemma alg_order_ind: "(All::((bool list => bool list => bool) => bool) => bool)
   9.628 + (%P::bool list => bool list => bool.
   9.629 +     (op -->::bool => bool => bool)
   9.630 +      ((op &::bool => bool => bool)
   9.631 +        ((All::(bool => bool) => bool)
   9.632 +          (%x::bool.
   9.633 +              (All::(bool list => bool) => bool)
   9.634 +               (%xa::bool list.
   9.635 +                   P ([]::bool list)
   9.636 +                    ((op #::bool => bool list => bool list) x xa))))
   9.637 +        ((op &::bool => bool => bool) (P ([]::bool list) ([]::bool list))
   9.638 +          ((op &::bool => bool => bool)
   9.639 +            ((All::(bool => bool) => bool)
   9.640 +              (%x::bool.
   9.641 +                  (All::(bool list => bool) => bool)
   9.642 +                   (%xa::bool list.
   9.643 +                       P ((op #::bool => bool list => bool list) x xa)
   9.644 +                        ([]::bool list))))
   9.645 +            ((All::(bool => bool) => bool)
   9.646 +              (%x::bool.
   9.647 +                  (All::(bool list => bool) => bool)
   9.648 +                   (%xa::bool list.
   9.649 +                       (All::(bool => bool) => bool)
   9.650 +                        (%xb::bool.
   9.651 +                            (All::(bool list => bool) => bool)
   9.652 +                             (%xc::bool list.
   9.653 +                                 (op -->::bool => bool => bool) (P xa xc)
   9.654 +                                  (P ((op #::bool => bool list => bool list)
   9.655 + x xa)
   9.656 +                                    ((op #::bool => bool list => bool list)
   9.657 +xb xc))))))))))
   9.658 +      ((All::(bool list => bool) => bool)
   9.659 +        (%x::bool list. (All::(bool list => bool) => bool) (P x))))"
   9.660 +  by (import prob_canon alg_order_ind)
   9.661 +
   9.662 +lemma alg_order_def: "alg_order [] (v6 # v7) = True &
   9.663 +alg_order [] [] = True &
   9.664 +alg_order (v2 # v3) [] = False &
   9.665 +alg_order (h # t) (h' # t') =
   9.666 +(h = True & h' = False | h = h' & alg_order t t')"
   9.667 +  by (import prob_canon alg_order_def)
   9.668 +
   9.669 +consts
   9.670 +  alg_sorted :: "bool list list => bool" 
   9.671 +
   9.672 +defs
   9.673 +  alg_sorted_primdef: "alg_sorted ==
   9.674 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
   9.675 + (%alg_sorted.
   9.676 +     list_case True
   9.677 +      (%v2. list_case True
   9.678 +             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
   9.679 +
   9.680 +lemma alg_sorted_primitive_def: "alg_sorted =
   9.681 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
   9.682 + (%alg_sorted.
   9.683 +     list_case True
   9.684 +      (%v2. list_case True
   9.685 +             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
   9.686 +  by (import prob_canon alg_sorted_primitive_def)
   9.687 +
   9.688 +lemma alg_sorted_ind: "(All::((bool list list => bool) => bool) => bool)
   9.689 + (%P::bool list list => bool.
   9.690 +     (op -->::bool => bool => bool)
   9.691 +      ((op &::bool => bool => bool)
   9.692 +        ((All::(bool list => bool) => bool)
   9.693 +          (%x::bool list.
   9.694 +              (All::(bool list => bool) => bool)
   9.695 +               (%y::bool list.
   9.696 +                   (All::(bool list list => bool) => bool)
   9.697 +                    (%z::bool list list.
   9.698 +                        (op -->::bool => bool => bool)
   9.699 +                         (P ((op #::bool list
   9.700 +                                    => bool list list => bool list list)
   9.701 +                              y z))
   9.702 +                         (P ((op #::bool list
   9.703 +                                    => bool list list => bool list list)
   9.704 +                              x ((op #::bool list
   9.705 +  => bool list list => bool list list)
   9.706 +                                  y z)))))))
   9.707 +        ((op &::bool => bool => bool)
   9.708 +          ((All::(bool list => bool) => bool)
   9.709 +            (%v::bool list.
   9.710 +                P ((op #::bool list => bool list list => bool list list) v
   9.711 +                    ([]::bool list list))))
   9.712 +          (P ([]::bool list list))))
   9.713 +      ((All::(bool list list => bool) => bool) P))"
   9.714 +  by (import prob_canon alg_sorted_ind)
   9.715 +
   9.716 +lemma alg_sorted_def: "alg_sorted (x # y # z) = (alg_order x y & alg_sorted (y # z)) &
   9.717 +alg_sorted [v] = True & alg_sorted [] = True"
   9.718 +  by (import prob_canon alg_sorted_def)
   9.719 +
   9.720 +consts
   9.721 +  alg_prefixfree :: "bool list list => bool" 
   9.722 +
   9.723 +defs
   9.724 +  alg_prefixfree_primdef: "alg_prefixfree ==
   9.725 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
   9.726 + (%alg_prefixfree.
   9.727 +     list_case True
   9.728 +      (%v2. list_case True
   9.729 +             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
   9.730 +
   9.731 +lemma alg_prefixfree_primitive_def: "alg_prefixfree =
   9.732 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
   9.733 + (%alg_prefixfree.
   9.734 +     list_case True
   9.735 +      (%v2. list_case True
   9.736 +             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
   9.737 +  by (import prob_canon alg_prefixfree_primitive_def)
   9.738 +
   9.739 +lemma alg_prefixfree_ind: "(All::((bool list list => bool) => bool) => bool)
   9.740 + (%P::bool list list => bool.
   9.741 +     (op -->::bool => bool => bool)
   9.742 +      ((op &::bool => bool => bool)
   9.743 +        ((All::(bool list => bool) => bool)
   9.744 +          (%x::bool list.
   9.745 +              (All::(bool list => bool) => bool)
   9.746 +               (%y::bool list.
   9.747 +                   (All::(bool list list => bool) => bool)
   9.748 +                    (%z::bool list list.
   9.749 +                        (op -->::bool => bool => bool)
   9.750 +                         (P ((op #::bool list
   9.751 +                                    => bool list list => bool list list)
   9.752 +                              y z))
   9.753 +                         (P ((op #::bool list
   9.754 +                                    => bool list list => bool list list)
   9.755 +                              x ((op #::bool list
   9.756 +  => bool list list => bool list list)
   9.757 +                                  y z)))))))
   9.758 +        ((op &::bool => bool => bool)
   9.759 +          ((All::(bool list => bool) => bool)
   9.760 +            (%v::bool list.
   9.761 +                P ((op #::bool list => bool list list => bool list list) v
   9.762 +                    ([]::bool list list))))
   9.763 +          (P ([]::bool list list))))
   9.764 +      ((All::(bool list list => bool) => bool) P))"
   9.765 +  by (import prob_canon alg_prefixfree_ind)
   9.766 +
   9.767 +lemma alg_prefixfree_def: "alg_prefixfree (x # y # z) = (~ IS_PREFIX y x & alg_prefixfree (y # z)) &
   9.768 +alg_prefixfree [v] = True & alg_prefixfree [] = True"
   9.769 +  by (import prob_canon alg_prefixfree_def)
   9.770 +
   9.771 +consts
   9.772 +  alg_twinfree :: "bool list list => bool" 
   9.773 +
   9.774 +defs
   9.775 +  alg_twinfree_primdef: "alg_twinfree ==
   9.776 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
   9.777 + (%alg_twinfree.
   9.778 +     list_case True
   9.779 +      (%v2. list_case True
   9.780 +             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
   9.781 +
   9.782 +lemma alg_twinfree_primitive_def: "alg_twinfree =
   9.783 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
   9.784 + (%alg_twinfree.
   9.785 +     list_case True
   9.786 +      (%v2. list_case True
   9.787 +             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
   9.788 +  by (import prob_canon alg_twinfree_primitive_def)
   9.789 +
   9.790 +lemma alg_twinfree_ind: "(All::((bool list list => bool) => bool) => bool)
   9.791 + (%P::bool list list => bool.
   9.792 +     (op -->::bool => bool => bool)
   9.793 +      ((op &::bool => bool => bool)
   9.794 +        ((All::(bool list => bool) => bool)
   9.795 +          (%x::bool list.
   9.796 +              (All::(bool list => bool) => bool)
   9.797 +               (%y::bool list.
   9.798 +                   (All::(bool list list => bool) => bool)
   9.799 +                    (%z::bool list list.
   9.800 +                        (op -->::bool => bool => bool)
   9.801 +                         (P ((op #::bool list
   9.802 +                                    => bool list list => bool list list)
   9.803 +                              y z))
   9.804 +                         (P ((op #::bool list
   9.805 +                                    => bool list list => bool list list)
   9.806 +                              x ((op #::bool list
   9.807 +  => bool list list => bool list list)
   9.808 +                                  y z)))))))
   9.809 +        ((op &::bool => bool => bool)
   9.810 +          ((All::(bool list => bool) => bool)
   9.811 +            (%v::bool list.
   9.812 +                P ((op #::bool list => bool list list => bool list list) v
   9.813 +                    ([]::bool list list))))
   9.814 +          (P ([]::bool list list))))
   9.815 +      ((All::(bool list list => bool) => bool) P))"
   9.816 +  by (import prob_canon alg_twinfree_ind)
   9.817 +
   9.818 +lemma alg_twinfree_def: "alg_twinfree (x # y # z) = (~ alg_twin x y & alg_twinfree (y # z)) &
   9.819 +alg_twinfree [v] = True & alg_twinfree [] = True"
   9.820 +  by (import prob_canon alg_twinfree_def)
   9.821 +
   9.822 +consts
   9.823 +  alg_longest :: "bool list list => nat" 
   9.824 +
   9.825 +defs
   9.826 +  alg_longest_primdef: "alg_longest == FOLDR (%h t. if t <= length h then length h else t) 0"
   9.827 +
   9.828 +lemma alg_longest_def: "alg_longest = FOLDR (%h t. if t <= length h then length h else t) 0"
   9.829 +  by (import prob_canon alg_longest_def)
   9.830 +
   9.831 +consts
   9.832 +  alg_canon_prefs :: "bool list => bool list list => bool list list" 
   9.833 +
   9.834 +specification (alg_canon_prefs_primdef: alg_canon_prefs) alg_canon_prefs_def: "(ALL l. alg_canon_prefs l [] = [l]) &
   9.835 +(ALL l h t.
   9.836 +    alg_canon_prefs l (h # t) =
   9.837 +    (if IS_PREFIX h l then alg_canon_prefs l t else l # h # t))"
   9.838 +  by (import prob_canon alg_canon_prefs_def)
   9.839 +
   9.840 +consts
   9.841 +  alg_canon_find :: "bool list => bool list list => bool list list" 
   9.842 +
   9.843 +specification (alg_canon_find_primdef: alg_canon_find) alg_canon_find_def: "(ALL l. alg_canon_find l [] = [l]) &
   9.844 +(ALL l h t.
   9.845 +    alg_canon_find l (h # t) =
   9.846 +    (if alg_order h l
   9.847 +     then if IS_PREFIX l h then h # t else h # alg_canon_find l t
   9.848 +     else alg_canon_prefs l (h # t)))"
   9.849 +  by (import prob_canon alg_canon_find_def)
   9.850 +
   9.851 +consts
   9.852 +  alg_canon1 :: "bool list list => bool list list" 
   9.853 +
   9.854 +defs
   9.855 +  alg_canon1_primdef: "alg_canon1 == FOLDR alg_canon_find []"
   9.856 +
   9.857 +lemma alg_canon1_def: "alg_canon1 = FOLDR alg_canon_find []"
   9.858 +  by (import prob_canon alg_canon1_def)
   9.859 +
   9.860 +consts
   9.861 +  alg_canon_merge :: "bool list => bool list list => bool list list" 
   9.862 +
   9.863 +specification (alg_canon_merge_primdef: alg_canon_merge) alg_canon_merge_def: "(ALL l. alg_canon_merge l [] = [l]) &
   9.864 +(ALL l h t.
   9.865 +    alg_canon_merge l (h # t) =
   9.866 +    (if alg_twin l h then alg_canon_merge (butlast h) t else l # h # t))"
   9.867 +  by (import prob_canon alg_canon_merge_def)
   9.868 +
   9.869 +consts
   9.870 +  alg_canon2 :: "bool list list => bool list list" 
   9.871 +
   9.872 +defs
   9.873 +  alg_canon2_primdef: "alg_canon2 == FOLDR alg_canon_merge []"
   9.874 +
   9.875 +lemma alg_canon2_def: "alg_canon2 = FOLDR alg_canon_merge []"
   9.876 +  by (import prob_canon alg_canon2_def)
   9.877 +
   9.878 +consts
   9.879 +  alg_canon :: "bool list list => bool list list" 
   9.880 +
   9.881 +defs
   9.882 +  alg_canon_primdef: "alg_canon == %l. alg_canon2 (alg_canon1 l)"
   9.883 +
   9.884 +lemma alg_canon_def: "ALL l. alg_canon l = alg_canon2 (alg_canon1 l)"
   9.885 +  by (import prob_canon alg_canon_def)
   9.886 +
   9.887 +consts
   9.888 +  algebra_canon :: "bool list list => bool" 
   9.889 +
   9.890 +defs
   9.891 +  algebra_canon_primdef: "algebra_canon == %l. alg_canon l = l"
   9.892 +
   9.893 +lemma algebra_canon_def: "ALL l. algebra_canon l = (alg_canon l = l)"
   9.894 +  by (import prob_canon algebra_canon_def)
   9.895 +
   9.896 +lemma ALG_TWIN_NIL: "ALL l. ~ alg_twin l [] & ~ alg_twin [] l"
   9.897 +  by (import prob_canon ALG_TWIN_NIL)
   9.898 +
   9.899 +lemma ALG_TWIN_SING: "ALL x l.
   9.900 +   alg_twin [x] l = (x = True & l = [False]) &
   9.901 +   alg_twin l [x] = (l = [True] & x = False)"
   9.902 +  by (import prob_canon ALG_TWIN_SING)
   9.903 +
   9.904 +lemma ALG_TWIN_CONS: "ALL x y z h t.
   9.905 +   alg_twin (x # y # z) (h # t) = (x = h & alg_twin (y # z) t) &
   9.906 +   alg_twin (h # t) (x # y # z) = (x = h & alg_twin t (y # z))"
   9.907 +  by (import prob_canon ALG_TWIN_CONS)
   9.908 +
   9.909 +lemma ALG_TWIN_REDUCE: "ALL h t t'. alg_twin (h # t) (h # t') = alg_twin t t'"
   9.910 +  by (import prob_canon ALG_TWIN_REDUCE)
   9.911 +
   9.912 +lemma ALG_TWINS_PREFIX: "(All::(bool list => bool) => bool)
   9.913 + (%x::bool list.
   9.914 +     (All::(bool list => bool) => bool)
   9.915 +      (%l::bool list.
   9.916 +          (op -->::bool => bool => bool)
   9.917 +           ((IS_PREFIX::bool list => bool list => bool) x l)
   9.918 +           ((op |::bool => bool => bool)
   9.919 +             ((op =::bool list => bool list => bool) x l)
   9.920 +             ((op |::bool => bool => bool)
   9.921 +               ((IS_PREFIX::bool list => bool list => bool) x
   9.922 +                 ((SNOC::bool => bool list => bool list) (True::bool) l))
   9.923 +               ((IS_PREFIX::bool list => bool list => bool) x
   9.924 +                 ((SNOC::bool => bool list => bool list) (False::bool)
   9.925 +                   l))))))"
   9.926 +  by (import prob_canon ALG_TWINS_PREFIX)
   9.927 +
   9.928 +lemma ALG_ORDER_NIL: "ALL x. alg_order [] x & alg_order x [] = (x = [])"
   9.929 +  by (import prob_canon ALG_ORDER_NIL)
   9.930 +
   9.931 +lemma ALG_ORDER_REFL: "ALL x. alg_order x x"
   9.932 +  by (import prob_canon ALG_ORDER_REFL)
   9.933 +
   9.934 +lemma ALG_ORDER_ANTISYM: "(All::(bool list => bool) => bool)
   9.935 + (%x::bool list.
   9.936 +     (All::(bool list => bool) => bool)
   9.937 +      (%y::bool list.
   9.938 +          (op -->::bool => bool => bool)
   9.939 +           ((op &::bool => bool => bool)
   9.940 +             ((alg_order::bool list => bool list => bool) x y)
   9.941 +             ((alg_order::bool list => bool list => bool) y x))
   9.942 +           ((op =::bool list => bool list => bool) x y)))"
   9.943 +  by (import prob_canon ALG_ORDER_ANTISYM)
   9.944 +
   9.945 +lemma ALG_ORDER_TRANS: "(All::(bool list => bool) => bool)
   9.946 + (%x::bool list.
   9.947 +     (All::(bool list => bool) => bool)
   9.948 +      (%y::bool list.
   9.949 +          (All::(bool list => bool) => bool)
   9.950 +           (%z::bool list.
   9.951 +               (op -->::bool => bool => bool)
   9.952 +                ((op &::bool => bool => bool)
   9.953 +                  ((alg_order::bool list => bool list => bool) x y)
   9.954 +                  ((alg_order::bool list => bool list => bool) y z))
   9.955 +                ((alg_order::bool list => bool list => bool) x z))))"
   9.956 +  by (import prob_canon ALG_ORDER_TRANS)
   9.957 +
   9.958 +lemma ALG_ORDER_TOTAL: "ALL x y. alg_order x y | alg_order y x"
   9.959 +  by (import prob_canon ALG_ORDER_TOTAL)
   9.960 +
   9.961 +lemma ALG_ORDER_PREFIX: "(All::(bool list => bool) => bool)
   9.962 + (%x::bool list.
   9.963 +     (All::(bool list => bool) => bool)
   9.964 +      (%y::bool list.
   9.965 +          (op -->::bool => bool => bool)
   9.966 +           ((IS_PREFIX::bool list => bool list => bool) y x)
   9.967 +           ((alg_order::bool list => bool list => bool) x y)))"
   9.968 +  by (import prob_canon ALG_ORDER_PREFIX)
   9.969 +
   9.970 +lemma ALG_ORDER_PREFIX_ANTI: "(All::(bool list => bool) => bool)
   9.971 + (%x::bool list.
   9.972 +     (All::(bool list => bool) => bool)
   9.973 +      (%y::bool list.
   9.974 +          (op -->::bool => bool => bool)
   9.975 +           ((op &::bool => bool => bool)
   9.976 +             ((alg_order::bool list => bool list => bool) x y)
   9.977 +             ((IS_PREFIX::bool list => bool list => bool) x y))
   9.978 +           ((op =::bool list => bool list => bool) x y)))"
   9.979 +  by (import prob_canon ALG_ORDER_PREFIX_ANTI)
   9.980 +
   9.981 +lemma ALG_ORDER_PREFIX_MONO: "(All::(bool list => bool) => bool)
   9.982 + (%x::bool list.
   9.983 +     (All::(bool list => bool) => bool)
   9.984 +      (%y::bool list.
   9.985 +          (All::(bool list => bool) => bool)
   9.986 +           (%z::bool list.
   9.987 +               (op -->::bool => bool => bool)
   9.988 +                ((op &::bool => bool => bool)
   9.989 +                  ((alg_order::bool list => bool list => bool) x y)
   9.990 +                  ((op &::bool => bool => bool)
   9.991 +                    ((alg_order::bool list => bool list => bool) y z)
   9.992 +                    ((IS_PREFIX::bool list => bool list => bool) z x)))
   9.993 +                ((IS_PREFIX::bool list => bool list => bool) y x))))"
   9.994 +  by (import prob_canon ALG_ORDER_PREFIX_MONO)
   9.995 +
   9.996 +lemma ALG_ORDER_PREFIX_TRANS: "(All::(bool list => bool) => bool)
   9.997 + (%x::bool list.
   9.998 +     (All::(bool list => bool) => bool)
   9.999 +      (%y::bool list.
  9.1000 +          (All::(bool list => bool) => bool)
  9.1001 +           (%z::bool list.
  9.1002 +               (op -->::bool => bool => bool)
  9.1003 +                ((op &::bool => bool => bool)
  9.1004 +                  ((alg_order::bool list => bool list => bool) x y)
  9.1005 +                  ((IS_PREFIX::bool list => bool list => bool) y z))
  9.1006 +                ((op |::bool => bool => bool)
  9.1007 +                  ((alg_order::bool list => bool list => bool) x z)
  9.1008 +                  ((IS_PREFIX::bool list => bool list => bool) x z)))))"
  9.1009 +  by (import prob_canon ALG_ORDER_PREFIX_TRANS)
  9.1010 +
  9.1011 +lemma ALG_ORDER_SNOC: "ALL x l. ~ alg_order (SNOC x l) l"
  9.1012 +  by (import prob_canon ALG_ORDER_SNOC)
  9.1013 +
  9.1014 +lemma ALG_SORTED_MIN: "(All::(bool list => bool) => bool)
  9.1015 + (%h::bool list.
  9.1016 +     (All::(bool list list => bool) => bool)
  9.1017 +      (%t::bool list list.
  9.1018 +          (op -->::bool => bool => bool)
  9.1019 +           ((alg_sorted::bool list list => bool)
  9.1020 +             ((op #::bool list => bool list list => bool list list) h t))
  9.1021 +           ((All::(bool list => bool) => bool)
  9.1022 +             (%x::bool list.
  9.1023 +                 (op -->::bool => bool => bool)
  9.1024 +                  ((op mem::bool list => bool list list => bool) x t)
  9.1025 +                  ((alg_order::bool list => bool list => bool) h x)))))"
  9.1026 +  by (import prob_canon ALG_SORTED_MIN)
  9.1027 +
  9.1028 +lemma ALG_SORTED_DEF_ALT: "(All::(bool list => bool) => bool)
  9.1029 + (%h::bool list.
  9.1030 +     (All::(bool list list => bool) => bool)
  9.1031 +      (%t::bool list list.
  9.1032 +          (op =::bool => bool => bool)
  9.1033 +           ((alg_sorted::bool list list => bool)
  9.1034 +             ((op #::bool list => bool list list => bool list list) h t))
  9.1035 +           ((op &::bool => bool => bool)
  9.1036 +             ((All::(bool list => bool) => bool)
  9.1037 +               (%x::bool list.
  9.1038 +                   (op -->::bool => bool => bool)
  9.1039 +                    ((op mem::bool list => bool list list => bool) x t)
  9.1040 +                    ((alg_order::bool list => bool list => bool) h x)))
  9.1041 +             ((alg_sorted::bool list list => bool) t))))"
  9.1042 +  by (import prob_canon ALG_SORTED_DEF_ALT)
  9.1043 +
  9.1044 +lemma ALG_SORTED_TL: "(All::(bool list => bool) => bool)
  9.1045 + (%h::bool list.
  9.1046 +     (All::(bool list list => bool) => bool)
  9.1047 +      (%t::bool list list.
  9.1048 +          (op -->::bool => bool => bool)
  9.1049 +           ((alg_sorted::bool list list => bool)
  9.1050 +             ((op #::bool list => bool list list => bool list list) h t))
  9.1051 +           ((alg_sorted::bool list list => bool) t)))"
  9.1052 +  by (import prob_canon ALG_SORTED_TL)
  9.1053 +
  9.1054 +lemma ALG_SORTED_MONO: "(All::(bool list => bool) => bool)
  9.1055 + (%x::bool list.
  9.1056 +     (All::(bool list => bool) => bool)
  9.1057 +      (%y::bool list.
  9.1058 +          (All::(bool list list => bool) => bool)
  9.1059 +           (%z::bool list list.
  9.1060 +               (op -->::bool => bool => bool)
  9.1061 +                ((alg_sorted::bool list list => bool)
  9.1062 +                  ((op #::bool list => bool list list => bool list list) x
  9.1063 +                    ((op #::bool list => bool list list => bool list list) y
  9.1064 +                      z)))
  9.1065 +                ((alg_sorted::bool list list => bool)
  9.1066 +                  ((op #::bool list => bool list list => bool list list) x
  9.1067 +                    z)))))"
  9.1068 +  by (import prob_canon ALG_SORTED_MONO)
  9.1069 +
  9.1070 +lemma ALG_SORTED_TLS: "ALL l b. alg_sorted (map (op # b) l) = alg_sorted l"
  9.1071 +  by (import prob_canon ALG_SORTED_TLS)
  9.1072 +
  9.1073 +lemma ALG_SORTED_STEP: "ALL l1 l2.
  9.1074 +   alg_sorted (map (op # True) l1 @ map (op # False) l2) =
  9.1075 +   (alg_sorted l1 & alg_sorted l2)"
  9.1076 +  by (import prob_canon ALG_SORTED_STEP)
  9.1077 +
  9.1078 +lemma ALG_SORTED_APPEND: "ALL h h' t t'.
  9.1079 +   alg_sorted ((h # t) @ h' # t') =
  9.1080 +   (alg_sorted (h # t) & alg_sorted (h' # t') & alg_order (last (h # t)) h')"
  9.1081 +  by (import prob_canon ALG_SORTED_APPEND)
  9.1082 +
  9.1083 +lemma ALG_SORTED_FILTER: "(All::((bool list => bool) => bool) => bool)
  9.1084 + (%P::bool list => bool.
  9.1085 +     (All::(bool list list => bool) => bool)
  9.1086 +      (%b::bool list list.
  9.1087 +          (op -->::bool => bool => bool)
  9.1088 +           ((alg_sorted::bool list list => bool) b)
  9.1089 +           ((alg_sorted::bool list list => bool)
  9.1090 +             ((filter::(bool list => bool)
  9.1091 +                       => bool list list => bool list list)
  9.1092 +               P b))))"
  9.1093 +  by (import prob_canon ALG_SORTED_FILTER)
  9.1094 +
  9.1095 +lemma ALG_PREFIXFREE_TL: "(All::(bool list => bool) => bool)
  9.1096 + (%h::bool list.
  9.1097 +     (All::(bool list list => bool) => bool)
  9.1098 +      (%t::bool list list.
  9.1099 +          (op -->::bool => bool => bool)
  9.1100 +           ((alg_prefixfree::bool list list => bool)
  9.1101 +             ((op #::bool list => bool list list => bool list list) h t))
  9.1102 +           ((alg_prefixfree::bool list list => bool) t)))"
  9.1103 +  by (import prob_canon ALG_PREFIXFREE_TL)
  9.1104 +
  9.1105 +lemma ALG_PREFIXFREE_MONO: "(All::(bool list => bool) => bool)
  9.1106 + (%x::bool list.
  9.1107 +     (All::(bool list => bool) => bool)
  9.1108 +      (%y::bool list.
  9.1109 +          (All::(bool list list => bool) => bool)
  9.1110 +           (%z::bool list list.
  9.1111 +               (op -->::bool => bool => bool)
  9.1112 +                ((op &::bool => bool => bool)
  9.1113 +                  ((alg_sorted::bool list list => bool)
  9.1114 +                    ((op #::bool list => bool list list => bool list list) x
  9.1115 +                      ((op #::bool list => bool list list => bool list list)
  9.1116 +                        y z)))
  9.1117 +                  ((alg_prefixfree::bool list list => bool)
  9.1118 +                    ((op #::bool list => bool list list => bool list list) x
  9.1119 +                      ((op #::bool list => bool list list => bool list list)
  9.1120 +                        y z))))
  9.1121 +                ((alg_prefixfree::bool list list => bool)
  9.1122 +                  ((op #::bool list => bool list list => bool list list) x
  9.1123 +                    z)))))"
  9.1124 +  by (import prob_canon ALG_PREFIXFREE_MONO)
  9.1125 +
  9.1126 +lemma ALG_PREFIXFREE_ELT: "(All::(bool list => bool) => bool)
  9.1127 + (%h::bool list.
  9.1128 +     (All::(bool list list => bool) => bool)
  9.1129 +      (%t::bool list list.
  9.1130 +          (op -->::bool => bool => bool)
  9.1131 +           ((op &::bool => bool => bool)
  9.1132 +             ((alg_sorted::bool list list => bool)
  9.1133 +               ((op #::bool list => bool list list => bool list list) h t))
  9.1134 +             ((alg_prefixfree::bool list list => bool)
  9.1135 +               ((op #::bool list => bool list list => bool list list) h t)))
  9.1136 +           ((All::(bool list => bool) => bool)
  9.1137 +             (%x::bool list.
  9.1138 +                 (op -->::bool => bool => bool)
  9.1139 +                  ((op mem::bool list => bool list list => bool) x t)
  9.1140 +                  ((op &::bool => bool => bool)
  9.1141 +                    ((Not::bool => bool)
  9.1142 +                      ((IS_PREFIX::bool list => bool list => bool) x h))
  9.1143 +                    ((Not::bool => bool)
  9.1144 +                      ((IS_PREFIX::bool list => bool list => bool) h
  9.1145 +                        x)))))))"
  9.1146 +  by (import prob_canon ALG_PREFIXFREE_ELT)
  9.1147 +
  9.1148 +lemma ALG_PREFIXFREE_TLS: "ALL l b. alg_prefixfree (map (op # b) l) = alg_prefixfree l"
  9.1149 +  by (import prob_canon ALG_PREFIXFREE_TLS)
  9.1150 +
  9.1151 +lemma ALG_PREFIXFREE_STEP: "ALL l1 l2.
  9.1152 +   alg_prefixfree (map (op # True) l1 @ map (op # False) l2) =
  9.1153 +   (alg_prefixfree l1 & alg_prefixfree l2)"
  9.1154 +  by (import prob_canon ALG_PREFIXFREE_STEP)
  9.1155 +
  9.1156 +lemma ALG_PREFIXFREE_APPEND: "ALL h h' t t'.
  9.1157 +   alg_prefixfree ((h # t) @ h' # t') =
  9.1158 +   (alg_prefixfree (h # t) &
  9.1159 +    alg_prefixfree (h' # t') & ~ IS_PREFIX h' (last (h # t)))"
  9.1160 +  by (import prob_canon ALG_PREFIXFREE_APPEND)
  9.1161 +
  9.1162 +lemma ALG_PREFIXFREE_FILTER: "(All::((bool list => bool) => bool) => bool)
  9.1163 + (%P::bool list => bool.
  9.1164 +     (All::(bool list list => bool) => bool)
  9.1165 +      (%b::bool list list.
  9.1166 +          (op -->::bool => bool => bool)
  9.1167 +           ((op &::bool => bool => bool)
  9.1168 +             ((alg_sorted::bool list list => bool) b)
  9.1169 +             ((alg_prefixfree::bool list list => bool) b))
  9.1170 +           ((alg_prefixfree::bool list list => bool)
  9.1171 +             ((filter::(bool list => bool)
  9.1172 +                       => bool list list => bool list list)
  9.1173 +               P b))))"
  9.1174 +  by (import prob_canon ALG_PREFIXFREE_FILTER)
  9.1175 +
  9.1176 +lemma ALG_TWINFREE_TL: "(All::(bool list => bool) => bool)
  9.1177 + (%h::bool list.
  9.1178 +     (All::(bool list list => bool) => bool)
  9.1179 +      (%t::bool list list.
  9.1180 +          (op -->::bool => bool => bool)
  9.1181 +           ((alg_twinfree::bool list list => bool)
  9.1182 +             ((op #::bool list => bool list list => bool list list) h t))
  9.1183 +           ((alg_twinfree::bool list list => bool) t)))"
  9.1184 +  by (import prob_canon ALG_TWINFREE_TL)
  9.1185 +
  9.1186 +lemma ALG_TWINFREE_TLS: "ALL l b. alg_twinfree (map (op # b) l) = alg_twinfree l"
  9.1187 +  by (import prob_canon ALG_TWINFREE_TLS)
  9.1188 +
  9.1189 +lemma ALG_TWINFREE_STEP1: "(All::(bool list list => bool) => bool)
  9.1190 + (%l1::bool list list.
  9.1191 +     (All::(bool list list => bool) => bool)
  9.1192 +      (%l2::bool list list.
  9.1193 +          (op -->::bool => bool => bool)
  9.1194 +           ((alg_twinfree::bool list list => bool)
  9.1195 +             ((op @::bool list list => bool list list => bool list list)
  9.1196 +               ((map::(bool list => bool list)
  9.1197 +                      => bool list list => bool list list)
  9.1198 +                 ((op #::bool => bool list => bool list) (True::bool)) l1)
  9.1199 +               ((map::(bool list => bool list)
  9.1200 +                      => bool list list => bool list list)
  9.1201 +                 ((op #::bool => bool list => bool list) (False::bool))
  9.1202 +                 l2)))
  9.1203 +           ((op &::bool => bool => bool)
  9.1204 +             ((alg_twinfree::bool list list => bool) l1)
  9.1205 +             ((alg_twinfree::bool list list => bool) l2))))"
  9.1206 +  by (import prob_canon ALG_TWINFREE_STEP1)
  9.1207 +
  9.1208 +lemma ALG_TWINFREE_STEP2: "(All::(bool list list => bool) => bool)
  9.1209 + (%l1::bool list list.
  9.1210 +     (All::(bool list list => bool) => bool)
  9.1211 +      (%l2::bool list list.
  9.1212 +          (op -->::bool => bool => bool)
  9.1213 +           ((op &::bool => bool => bool)
  9.1214 +             ((op |::bool => bool => bool)
  9.1215 +               ((Not::bool => bool)
  9.1216 +                 ((op mem::bool list => bool list list => bool)
  9.1217 +                   ([]::bool list) l1))
  9.1218 +               ((Not::bool => bool)
  9.1219 +                 ((op mem::bool list => bool list list => bool)
  9.1220 +                   ([]::bool list) l2)))
  9.1221 +             ((op &::bool => bool => bool)
  9.1222 +               ((alg_twinfree::bool list list => bool) l1)
  9.1223 +               ((alg_twinfree::bool list list => bool) l2)))
  9.1224 +           ((alg_twinfree::bool list list => bool)
  9.1225 +             ((op @::bool list list => bool list list => bool list list)
  9.1226 +               ((map::(bool list => bool list)
  9.1227 +                      => bool list list => bool list list)
  9.1228 +                 ((op #::bool => bool list => bool list) (True::bool)) l1)
  9.1229 +               ((map::(bool list => bool list)
  9.1230 +                      => bool list list => bool list list)
  9.1231 +                 ((op #::bool => bool list => bool list) (False::bool))
  9.1232 +                 l2)))))"
  9.1233 +  by (import prob_canon ALG_TWINFREE_STEP2)
  9.1234 +
  9.1235 +lemma ALG_TWINFREE_STEP: "(All::(bool list list => bool) => bool)
  9.1236 + (%l1::bool list list.
  9.1237 +     (All::(bool list list => bool) => bool)
  9.1238 +      (%l2::bool list list.
  9.1239 +          (op -->::bool => bool => bool)
  9.1240 +           ((op |::bool => bool => bool)
  9.1241 +             ((Not::bool => bool)
  9.1242 +               ((op mem::bool list => bool list list => bool)
  9.1243 +                 ([]::bool list) l1))
  9.1244 +             ((Not::bool => bool)
  9.1245 +               ((op mem::bool list => bool list list => bool)
  9.1246 +                 ([]::bool list) l2)))
  9.1247 +           ((op =::bool => bool => bool)
  9.1248 +             ((alg_twinfree::bool list list => bool)
  9.1249 +               ((op @::bool list list => bool list list => bool list list)
  9.1250 +                 ((map::(bool list => bool list)
  9.1251 +                        => bool list list => bool list list)
  9.1252 +                   ((op #::bool => bool list => bool list) (True::bool)) l1)
  9.1253 +                 ((map::(bool list => bool list)
  9.1254 +                        => bool list list => bool list list)
  9.1255 +                   ((op #::bool => bool list => bool list) (False::bool))
  9.1256 +                   l2)))
  9.1257 +             ((op &::bool => bool => bool)
  9.1258 +               ((alg_twinfree::bool list list => bool) l1)
  9.1259 +               ((alg_twinfree::bool list list => bool) l2)))))"
  9.1260 +  by (import prob_canon ALG_TWINFREE_STEP)
  9.1261 +
  9.1262 +lemma ALG_LONGEST_HD: "ALL h t. length h <= alg_longest (h # t)"
  9.1263 +  by (import prob_canon ALG_LONGEST_HD)
  9.1264 +
  9.1265 +lemma ALG_LONGEST_TL: "ALL h t. alg_longest t <= alg_longest (h # t)"
  9.1266 +  by (import prob_canon ALG_LONGEST_TL)
  9.1267 +
  9.1268 +lemma ALG_LONGEST_TLS: "ALL h t b. alg_longest (map (op # b) (h # t)) = Suc (alg_longest (h # t))"
  9.1269 +  by (import prob_canon ALG_LONGEST_TLS)
  9.1270 +
  9.1271 +lemma ALG_LONGEST_APPEND: "ALL l1 l2.
  9.1272 +   alg_longest l1 <= alg_longest (l1 @ l2) &
  9.1273 +   alg_longest l2 <= alg_longest (l1 @ l2)"
  9.1274 +  by (import prob_canon ALG_LONGEST_APPEND)
  9.1275 +
  9.1276 +lemma ALG_CANON_PREFS_HD: "ALL l b. hd (alg_canon_prefs l b) = l"
  9.1277 +  by (import prob_canon ALG_CANON_PREFS_HD)
  9.1278 +
  9.1279 +lemma ALG_CANON_PREFS_DELETES: "(All::(bool list => bool) => bool)
  9.1280 + (%l::bool list.
  9.1281 +     (All::(bool list list => bool) => bool)
  9.1282 +      (%b::bool list list.
  9.1283 +          (All::(bool list => bool) => bool)
  9.1284 +           (%x::bool list.
  9.1285 +               (op -->::bool => bool => bool)
  9.1286 +                ((op mem::bool list => bool list list => bool) x
  9.1287 +                  ((alg_canon_prefs::bool list
  9.1288 +                                     => bool list list => bool list list)
  9.1289 +                    l b))
  9.1290 +                ((op mem::bool list => bool list list => bool) x
  9.1291 +                  ((op #::bool list => bool list list => bool list list) l
  9.1292 +                    b)))))"
  9.1293 +  by (import prob_canon ALG_CANON_PREFS_DELETES)
  9.1294 +
  9.1295 +lemma ALG_CANON_PREFS_SORTED: "(All::(bool list => bool) => bool)
  9.1296 + (%l::bool list.
  9.1297 +     (All::(bool list list => bool) => bool)
  9.1298 +      (%b::bool list list.
  9.1299 +          (op -->::bool => bool => bool)
  9.1300 +           ((alg_sorted::bool list list => bool)
  9.1301 +             ((op #::bool list => bool list list => bool list list) l b))
  9.1302 +           ((alg_sorted::bool list list => bool)
  9.1303 +             ((alg_canon_prefs::bool list
  9.1304 +                                => bool list list => bool list list)
  9.1305 +               l b))))"
  9.1306 +  by (import prob_canon ALG_CANON_PREFS_SORTED)
  9.1307 +
  9.1308 +lemma ALG_CANON_PREFS_PREFIXFREE: "(All::(bool list => bool) => bool)
  9.1309 + (%l::bool list.
  9.1310 +     (All::(bool list list => bool) => bool)
  9.1311 +      (%b::bool list list.
  9.1312 +          (op -->::bool => bool => bool)
  9.1313 +           ((op &::bool => bool => bool)
  9.1314 +             ((alg_sorted::bool list list => bool) b)
  9.1315 +             ((alg_prefixfree::bool list list => bool) b))
  9.1316 +           ((alg_prefixfree::bool list list => bool)
  9.1317 +             ((alg_canon_prefs::bool list
  9.1318 +                                => bool list list => bool list list)
  9.1319 +               l b))))"
  9.1320 +  by (import prob_canon ALG_CANON_PREFS_PREFIXFREE)
  9.1321 +
  9.1322 +lemma ALG_CANON_PREFS_CONSTANT: "(All::(bool list => bool) => bool)
  9.1323 + (%l::bool list.
  9.1324 +     (All::(bool list list => bool) => bool)
  9.1325 +      (%b::bool list list.
  9.1326 +          (op -->::bool => bool => bool)
  9.1327 +           ((alg_prefixfree::bool list list => bool)
  9.1328 +             ((op #::bool list => bool list list => bool list list) l b))
  9.1329 +           ((op =::bool list list => bool list list => bool)
  9.1330 +             ((alg_canon_prefs::bool list
  9.1331 +                                => bool list list => bool list list)
  9.1332 +               l b)
  9.1333 +             ((op #::bool list => bool list list => bool list list) l b))))"
  9.1334 +  by (import prob_canon ALG_CANON_PREFS_CONSTANT)
  9.1335 +
  9.1336 +lemma ALG_CANON_FIND_HD: "ALL l h t.
  9.1337 +   hd (alg_canon_find l (h # t)) = l | hd (alg_canon_find l (h # t)) = h"
  9.1338 +  by (import prob_canon ALG_CANON_FIND_HD)
  9.1339 +
  9.1340 +lemma ALG_CANON_FIND_DELETES: "(All::(bool list => bool) => bool)
  9.1341 + (%l::bool list.
  9.1342 +     (All::(bool list list => bool) => bool)
  9.1343 +      (%b::bool list list.
  9.1344 +          (All::(bool list => bool) => bool)
  9.1345 +           (%x::bool list.
  9.1346 +               (op -->::bool => bool => bool)
  9.1347 +                ((op mem::bool list => bool list list => bool) x
  9.1348 +                  ((alg_canon_find::bool list
  9.1349 +                                    => bool list list => bool list list)
  9.1350 +                    l b))
  9.1351 +                ((op mem::bool list => bool list list => bool) x
  9.1352 +                  ((op #::bool list => bool list list => bool list list) l
  9.1353 +                    b)))))"
  9.1354 +  by (import prob_canon ALG_CANON_FIND_DELETES)
  9.1355 +
  9.1356 +lemma ALG_CANON_FIND_SORTED: "(All::(bool list => bool) => bool)
  9.1357 + (%l::bool list.
  9.1358 +     (All::(bool list list => bool) => bool)
  9.1359 +      (%b::bool list list.
  9.1360 +          (op -->::bool => bool => bool)
  9.1361 +           ((alg_sorted::bool list list => bool) b)
  9.1362 +           ((alg_sorted::bool list list => bool)
  9.1363 +             ((alg_canon_find::bool list
  9.1364 +                               => bool list list => bool list list)
  9.1365 +               l b))))"
  9.1366 +  by (import prob_canon ALG_CANON_FIND_SORTED)
  9.1367 +
  9.1368 +lemma ALG_CANON_FIND_PREFIXFREE: "(All::(bool list => bool) => bool)
  9.1369 + (%l::bool list.
  9.1370 +     (All::(bool list list => bool) => bool)
  9.1371 +      (%b::bool list list.
  9.1372 +          (op -->::bool => bool => bool)
  9.1373 +           ((op &::bool => bool => bool)
  9.1374 +             ((alg_sorted::bool list list => bool) b)
  9.1375 +             ((alg_prefixfree::bool list list => bool) b))
  9.1376 +           ((alg_prefixfree::bool list list => bool)
  9.1377 +             ((alg_canon_find::bool list
  9.1378 +                               => bool list list => bool list list)
  9.1379 +               l b))))"
  9.1380 +  by (import prob_canon ALG_CANON_FIND_PREFIXFREE)
  9.1381 +
  9.1382 +lemma ALG_CANON_FIND_CONSTANT: "(All::(bool list => bool) => bool)
  9.1383 + (%l::bool list.
  9.1384 +     (All::(bool list list => bool) => bool)
  9.1385 +      (%b::bool list list.
  9.1386 +          (op -->::bool => bool => bool)
  9.1387 +           ((op &::bool => bool => bool)
  9.1388 +             ((alg_sorted::bool list list => bool)
  9.1389 +               ((op #::bool list => bool list list => bool list list) l b))
  9.1390 +             ((alg_prefixfree::bool list list => bool)
  9.1391 +               ((op #::bool list => bool list list => bool list list) l b)))
  9.1392 +           ((op =::bool list list => bool list list => bool)
  9.1393 +             ((alg_canon_find::bool list
  9.1394 +                               => bool list list => bool list list)
  9.1395 +               l b)
  9.1396 +             ((op #::bool list => bool list list => bool list list) l b))))"
  9.1397 +  by (import prob_canon ALG_CANON_FIND_CONSTANT)
  9.1398 +
  9.1399 +lemma ALG_CANON1_SORTED: "ALL x. alg_sorted (alg_canon1 x)"
  9.1400 +  by (import prob_canon ALG_CANON1_SORTED)
  9.1401 +
  9.1402 +lemma ALG_CANON1_PREFIXFREE: "ALL l. alg_prefixfree (alg_canon1 l)"
  9.1403 +  by (import prob_canon ALG_CANON1_PREFIXFREE)
  9.1404 +
  9.1405 +lemma ALG_CANON1_CONSTANT: "(All::(bool list list => bool) => bool)
  9.1406 + (%l::bool list list.
  9.1407 +     (op -->::bool => bool => bool)
  9.1408 +      ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l)
  9.1409 +        ((alg_prefixfree::bool list list => bool) l))
  9.1410 +      ((op =::bool list list => bool list list => bool)
  9.1411 +        ((alg_canon1::bool list list => bool list list) l) l))"
  9.1412 +  by (import prob_canon ALG_CANON1_CONSTANT)
  9.1413 +
  9.1414 +lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list => bool) => bool)
  9.1415 + (%l::bool list.
  9.1416 +     (All::(bool list list => bool) => bool)
  9.1417 +      (%b::bool list list.
  9.1418 +          (op -->::bool => bool => bool)
  9.1419 +           ((op &::bool => bool => bool)
  9.1420 +             ((alg_sorted::bool list list => bool)
  9.1421 +               ((op #::bool list => bool list list => bool list list) l b))
  9.1422 +             ((op &::bool => bool => bool)
  9.1423 +               ((alg_prefixfree::bool list list => bool)
  9.1424 +                 ((op #::bool list => bool list list => bool list list) l
  9.1425 +                   b))
  9.1426 +               ((alg_twinfree::bool list list => bool) b)))
  9.1427 +           ((op &::bool => bool => bool)
  9.1428 +             ((alg_sorted::bool list list => bool)
  9.1429 +               ((alg_canon_merge::bool list
  9.1430 +                                  => bool list list => bool list list)
  9.1431 +                 l b))
  9.1432 +             ((op &::bool => bool => bool)
  9.1433 +               ((alg_prefixfree::bool list list => bool)
  9.1434 +                 ((alg_canon_merge::bool list
  9.1435 +                                    => bool list list => bool list list)
  9.1436 +                   l b))
  9.1437 +               ((alg_twinfree::bool list list => bool)
  9.1438 +                 ((alg_canon_merge::bool list
  9.1439 +                                    => bool list list => bool list list)
  9.1440 +                   l b))))))"
  9.1441 +  by (import prob_canon ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE)
  9.1442 +
  9.1443 +lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "(All::(bool list => bool) => bool)
  9.1444 + (%l::bool list.
  9.1445 +     (All::(bool list list => bool) => bool)
  9.1446 +      (%b::bool list list.
  9.1447 +          (All::(bool list => bool) => bool)
  9.1448 +           (%h::bool list.
  9.1449 +               (op -->::bool => bool => bool)
  9.1450 +                ((All::(bool list => bool) => bool)
  9.1451 +                  (%x::bool list.
  9.1452 +                      (op -->::bool => bool => bool)
  9.1453 +                       ((op mem::bool list => bool list list => bool) x
  9.1454 +                         ((op #::bool list
  9.1455 +                                 => bool list list => bool list list)
  9.1456 +                           l b))
  9.1457 +                       ((op &::bool => bool => bool)
  9.1458 +                         ((Not::bool => bool)
  9.1459 +                           ((IS_PREFIX::bool list => bool list => bool) h
  9.1460 +                             x))
  9.1461 +                         ((Not::bool => bool)
  9.1462 +                           ((IS_PREFIX::bool list => bool list => bool) x
  9.1463 +                             h)))))
  9.1464 +                ((All::(bool list => bool) => bool)
  9.1465 +                  (%x::bool list.
  9.1466 +                      (op -->::bool => bool => bool)
  9.1467 +                       ((op mem::bool list => bool list list => bool) x
  9.1468 +                         ((alg_canon_merge::bool list
  9.1469 +      => bool list list => bool list list)
  9.1470 +                           l b))
  9.1471 +                       ((op &::bool => bool => bool)
  9.1472 +                         ((Not::bool => bool)
  9.1473 +                           ((IS_PREFIX::bool list => bool list => bool) h
  9.1474 +                             x))
  9.1475 +                         ((Not::bool => bool)
  9.1476 +                           ((IS_PREFIX::bool list => bool list => bool) x
  9.1477 +                             h))))))))"
  9.1478 +  by (import prob_canon ALG_CANON_MERGE_PREFIXFREE_PRESERVE)
  9.1479 +
  9.1480 +lemma ALG_CANON_MERGE_SHORTENS: "(All::(bool list => bool) => bool)
  9.1481 + (%l::bool list.
  9.1482 +     (All::(bool list list => bool) => bool)
  9.1483 +      (%b::bool list list.
  9.1484 +          (All::(bool list => bool) => bool)
  9.1485 +           (%x::bool list.
  9.1486 +               (op -->::bool => bool => bool)
  9.1487 +                ((op mem::bool list => bool list list => bool) x
  9.1488 +                  ((alg_canon_merge::bool list
  9.1489 +                                     => bool list list => bool list list)
  9.1490 +                    l b))
  9.1491 +                ((Ex::(bool list => bool) => bool)
  9.1492 +                  (%y::bool list.
  9.1493 +                      (op &::bool => bool => bool)
  9.1494 +                       ((op mem::bool list => bool list list => bool) y
  9.1495 +                         ((op #::bool list
  9.1496 +                                 => bool list list => bool list list)
  9.1497 +                           l b))
  9.1498 +                       ((IS_PREFIX::bool list => bool list => bool) y
  9.1499 +                         x))))))"
  9.1500 +  by (import prob_canon ALG_CANON_MERGE_SHORTENS)
  9.1501 +
  9.1502 +lemma ALG_CANON_MERGE_CONSTANT: "(All::(bool list => bool) => bool)
  9.1503 + (%l::bool list.
  9.1504 +     (All::(bool list list => bool) => bool)
  9.1505 +      (%b::bool list list.
  9.1506 +          (op -->::bool => bool => bool)
  9.1507 +           ((alg_twinfree::bool list list => bool)
  9.1508 +             ((op #::bool list => bool list list => bool list list) l b))
  9.1509 +           ((op =::bool list list => bool list list => bool)
  9.1510 +             ((alg_canon_merge::bool list
  9.1511 +                                => bool list list => bool list list)
  9.1512 +               l b)
  9.1513 +             ((op #::bool list => bool list list => bool list list) l b))))"
  9.1514 +  by (import prob_canon ALG_CANON_MERGE_CONSTANT)
  9.1515 +
  9.1516 +lemma ALG_CANON2_PREFIXFREE_PRESERVE: "(All::(bool list list => bool) => bool)
  9.1517 + (%x::bool list list.
  9.1518 +     (All::(bool list => bool) => bool)
  9.1519 +      (%xa::bool list.
  9.1520 +          (op -->::bool => bool => bool)
  9.1521 +           ((All::(bool list => bool) => bool)
  9.1522 +             (%xb::bool list.
  9.1523 +                 (op -->::bool => bool => bool)
  9.1524 +                  ((op mem::bool list => bool list list => bool) xb x)
  9.1525 +                  ((op &::bool => bool => bool)
  9.1526 +                    ((Not::bool => bool)
  9.1527 +                      ((IS_PREFIX::bool list => bool list => bool) xa xb))
  9.1528 +                    ((Not::bool => bool)
  9.1529 +                      ((IS_PREFIX::bool list => bool list => bool) xb
  9.1530 +                        xa)))))
  9.1531 +           ((All::(bool list => bool) => bool)
  9.1532 +             (%xb::bool list.
  9.1533 +                 (op -->::bool => bool => bool)
  9.1534 +                  ((op mem::bool list => bool list list => bool) xb
  9.1535 +                    ((alg_canon2::bool list list => bool list list) x))
  9.1536 +                  ((op &::bool => bool => bool)
  9.1537 +                    ((Not::bool => bool)
  9.1538 +                      ((IS_PREFIX::bool list => bool list => bool) xa xb))
  9.1539 +                    ((Not::bool => bool)
  9.1540 +                      ((IS_PREFIX::bool list => bool list => bool) xb
  9.1541 +                        xa)))))))"
  9.1542 +  by (import prob_canon ALG_CANON2_PREFIXFREE_PRESERVE)
  9.1543 +
  9.1544 +lemma ALG_CANON2_SHORTENS: "(All::(bool list list => bool) => bool)
  9.1545 + (%x::bool list list.
  9.1546 +     (All::(bool list => bool) => bool)
  9.1547 +      (%xa::bool list.
  9.1548 +          (op -->::bool => bool => bool)
  9.1549 +           ((op mem::bool list => bool list list => bool) xa
  9.1550 +             ((alg_canon2::bool list list => bool list list) x))
  9.1551 +           ((Ex::(bool list => bool) => bool)
  9.1552 +             (%y::bool list.
  9.1553 +                 (op &::bool => bool => bool)
  9.1554 +                  ((op mem::bool list => bool list list => bool) y x)
  9.1555 +                  ((IS_PREFIX::bool list => bool list => bool) y xa)))))"
  9.1556 +  by (import prob_canon ALG_CANON2_SHORTENS)
  9.1557 +
  9.1558 +lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list list => bool) => bool)
  9.1559 + (%x::bool list list.
  9.1560 +     (op -->::bool => bool => bool)
  9.1561 +      ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) x)
  9.1562 +        ((alg_prefixfree::bool list list => bool) x))
  9.1563 +      ((op &::bool => bool => bool)
  9.1564 +        ((alg_sorted::bool list list => bool)
  9.1565 +          ((alg_canon2::bool list list => bool list list) x))
  9.1566 +        ((op &::bool => bool => bool)
  9.1567 +          ((alg_prefixfree::bool list list => bool)
  9.1568 +            ((alg_canon2::bool list list => bool list list) x))
  9.1569 +          ((alg_twinfree::bool list list => bool)
  9.1570 +            ((alg_canon2::bool list list => bool list list) x)))))"
  9.1571 +  by (import prob_canon ALG_CANON2_SORTED_PREFIXFREE_TWINFREE)
  9.1572 +
  9.1573 +lemma ALG_CANON2_CONSTANT: "(All::(bool list list => bool) => bool)
  9.1574 + (%l::bool list list.
  9.1575 +     (op -->::bool => bool => bool)
  9.1576 +      ((alg_twinfree::bool list list => bool) l)
  9.1577 +      ((op =::bool list list => bool list list => bool)
  9.1578 +        ((alg_canon2::bool list list => bool list list) l) l))"
  9.1579 +  by (import prob_canon ALG_CANON2_CONSTANT)
  9.1580 +
  9.1581 +lemma ALG_CANON_SORTED_PREFIXFREE_TWINFREE: "ALL l.
  9.1582 +   alg_sorted (alg_canon l) &
  9.1583 +   alg_prefixfree (alg_canon l) & alg_twinfree (alg_canon l)"
  9.1584 +  by (import prob_canon ALG_CANON_SORTED_PREFIXFREE_TWINFREE)
  9.1585 +
  9.1586 +lemma ALG_CANON_CONSTANT: "(All::(bool list list => bool) => bool)
  9.1587 + (%l::bool list list.
  9.1588 +     (op -->::bool => bool => bool)
  9.1589 +      ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l)
  9.1590 +        ((op &::bool => bool => bool)
  9.1591 +          ((alg_prefixfree::bool list list => bool) l)
  9.1592 +          ((alg_twinfree::bool list list => bool) l)))
  9.1593 +      ((op =::bool list list => bool list list => bool)
  9.1594 +        ((alg_canon::bool list list => bool list list) l) l))"
  9.1595 +  by (import prob_canon ALG_CANON_CONSTANT)
  9.1596 +
  9.1597 +lemma ALG_CANON_IDEMPOT: "ALL l. alg_canon (alg_canon l) = alg_canon l"
  9.1598 +  by (import prob_canon ALG_CANON_IDEMPOT)
  9.1599 +
  9.1600 +lemma ALGEBRA_CANON_DEF_ALT: "ALL l. algebra_canon l = (alg_sorted l & alg_prefixfree l & alg_twinfree l)"
  9.1601 +  by (import prob_canon ALGEBRA_CANON_DEF_ALT)
  9.1602 +
  9.1603 +lemma ALGEBRA_CANON_BASIC: "algebra_canon [] & algebra_canon [[]] & (ALL x. algebra_canon [x])"
  9.1604 +  by (import prob_canon ALGEBRA_CANON_BASIC)
  9.1605 +
  9.1606 +lemma ALG_CANON_BASIC: "alg_canon [] = [] & alg_canon [[]] = [[]] & (ALL x. alg_canon [x] = [x])"
  9.1607 +  by (import prob_canon ALG_CANON_BASIC)
  9.1608 +
  9.1609 +lemma ALGEBRA_CANON_TL: "(All::(bool list => bool) => bool)
  9.1610 + (%h::bool list.
  9.1611 +     (All::(bool list list => bool) => bool)
  9.1612 +      (%t::bool list list.
  9.1613 +          (op -->::bool => bool => bool)
  9.1614 +           ((algebra_canon::bool list list => bool)
  9.1615 +             ((op #::bool list => bool list list => bool list list) h t))
  9.1616 +           ((algebra_canon::bool list list => bool) t)))"
  9.1617 +  by (import prob_canon ALGEBRA_CANON_TL)
  9.1618 +
  9.1619 +lemma ALGEBRA_CANON_NIL_MEM: "ALL l. (algebra_canon l & [] mem l) = (l = [[]])"
  9.1620 +  by (import prob_canon ALGEBRA_CANON_NIL_MEM)
  9.1621 +
  9.1622 +lemma ALGEBRA_CANON_TLS: "ALL l b. algebra_canon (map (op # b) l) = algebra_canon l"
  9.1623 +  by (import prob_canon ALGEBRA_CANON_TLS)
  9.1624 +
  9.1625 +lemma ALGEBRA_CANON_STEP1: "(All::(bool list list => bool) => bool)
  9.1626 + (%l1::bool list list.
  9.1627 +     (All::(bool list list => bool) => bool)
  9.1628 +      (%l2::bool list list.
  9.1629 +          (op -->::bool => bool => bool)
  9.1630 +           ((algebra_canon::bool list list => bool)
  9.1631 +             ((op @::bool list list => bool list list => bool list list)
  9.1632 +               ((map::(bool list => bool list)
  9.1633 +                      => bool list list => bool list list)
  9.1634 +                 ((op #::bool => bool list => bool list) (True::bool)) l1)
  9.1635 +               ((map::(bool list => bool list)
  9.1636 +                      => bool list list => bool list list)
  9.1637 +                 ((op #::bool => bool list => bool list) (False::bool))
  9.1638 +                 l2)))
  9.1639 +           ((op &::bool => bool => bool)
  9.1640 +             ((algebra_canon::bool list list => bool) l1)
  9.1641 +             ((algebra_canon::bool list list => bool) l2))))"
  9.1642 +  by (import prob_canon ALGEBRA_CANON_STEP1)
  9.1643 +
  9.1644 +lemma ALGEBRA_CANON_STEP2: "(All::(bool list list => bool) => bool)
  9.1645 + (%l1::bool list list.
  9.1646 +     (All::(bool list list => bool) => bool)
  9.1647 +      (%l2::bool list list.
  9.1648 +          (op -->::bool => bool => bool)
  9.1649 +           ((op &::bool => bool => bool)
  9.1650 +             ((op |::bool => bool => bool)
  9.1651 +               ((Not::bool => bool)
  9.1652 +                 ((op =::bool list list => bool list list => bool) l1
  9.1653 +                   ((op #::bool list => bool list list => bool list list)
  9.1654 +                     ([]::bool list) ([]::bool list list))))
  9.1655 +               ((Not::bool => bool)
  9.1656 +                 ((op =::bool list list => bool list list => bool) l2
  9.1657 +                   ((op #::bool list => bool list list => bool list list)
  9.1658 +                     ([]::bool list) ([]::bool list list)))))
  9.1659 +             ((op &::bool => bool => bool)
  9.1660 +               ((algebra_canon::bool list list => bool) l1)
  9.1661 +               ((algebra_canon::bool list list => bool) l2)))
  9.1662 +           ((algebra_canon::bool list list => bool)
  9.1663 +             ((op @::bool list list => bool list list => bool list list)
  9.1664 +               ((map::(bool list => bool list)
  9.1665 +                      => bool list list => bool list list)
  9.1666 +                 ((op #::bool => bool list => bool list) (True::bool)) l1)
  9.1667 +               ((map::(bool list => bool list)
  9.1668 +                      => bool list list => bool list list)
  9.1669 +                 ((op #::bool => bool list => bool list) (False::bool))
  9.1670 +                 l2)))))"
  9.1671 +  by (import prob_canon ALGEBRA_CANON_STEP2)
  9.1672 +
  9.1673 +lemma ALGEBRA_CANON_STEP: "(All::(bool list list => bool) => bool)
  9.1674 + (%l1::bool list list.
  9.1675 +     (All::(bool list list => bool) => bool)
  9.1676 +      (%l2::bool list list.
  9.1677 +          (op -->::bool => bool => bool)
  9.1678 +           ((op |::bool => bool => bool)
  9.1679 +             ((Not::bool => bool)
  9.1680 +               ((op =::bool list list => bool list list => bool) l1
  9.1681 +                 ((op #::bool list => bool list list => bool list list)
  9.1682 +                   ([]::bool list) ([]::bool list list))))
  9.1683 +             ((Not::bool => bool)
  9.1684 +               ((op =::bool list list => bool list list => bool) l2
  9.1685 +                 ((op #::bool list => bool list list => bool list list)
  9.1686 +                   ([]::bool list) ([]::bool list list)))))
  9.1687 +           ((op =::bool => bool => bool)
  9.1688 +             ((algebra_canon::bool list list => bool)
  9.1689 +               ((op @::bool list list => bool list list => bool list list)
  9.1690 +                 ((map::(bool list => bool list)
  9.1691 +                        => bool list list => bool list list)
  9.1692 +                   ((op #::bool => bool list => bool list) (True::bool)) l1)
  9.1693 +                 ((map::(bool list => bool list)
  9.1694 +                        => bool list list => bool list list)
  9.1695 +                   ((op #::bool => bool list => bool list) (False::bool))
  9.1696 +                   l2)))
  9.1697 +             ((op &::bool => bool => bool)
  9.1698 +               ((algebra_canon::bool list list => bool) l1)
  9.1699 +               ((algebra_canon::bool list list => bool) l2)))))"
  9.1700 +  by (import prob_canon ALGEBRA_CANON_STEP)
  9.1701 +
  9.1702 +lemma ALGEBRA_CANON_CASES_THM: "(All::(bool list list => bool) => bool)
  9.1703 + (%l::bool list list.
  9.1704 +     (op -->::bool => bool => bool)
  9.1705 +      ((algebra_canon::bool list list => bool) l)
  9.1706 +      ((op |::bool => bool => bool)
  9.1707 +        ((op =::bool list list => bool list list => bool) l
  9.1708 +          ([]::bool list list))
  9.1709 +        ((op |::bool => bool => bool)
  9.1710 +          ((op =::bool list list => bool list list => bool) l
  9.1711 +            ((op #::bool list => bool list list => bool list list)
  9.1712 +              ([]::bool list) ([]::bool list list)))
  9.1713 +          ((Ex::(bool list list => bool) => bool)
  9.1714 +            (%l1::bool list list.
  9.1715 +                (Ex::(bool list list => bool) => bool)
  9.1716 +                 (%l2::bool list list.
  9.1717 +                     (op &::bool => bool => bool)
  9.1718 +                      ((algebra_canon::bool list list => bool) l1)
  9.1719 +                      ((op &::bool => bool => bool)
  9.1720 +                        ((algebra_canon::bool list list => bool) l2)
  9.1721 +                        ((op =::bool list list => bool list list => bool) l
  9.1722 +                          ((op @::bool list list
  9.1723 +                                  => bool list list => bool list list)
  9.1724 +                            ((map::(bool list => bool list)
  9.1725 +                                   => bool list list => bool list list)
  9.1726 +                              ((op #::bool => bool list => bool list)
  9.1727 +                                (True::bool))
  9.1728 +                              l1)
  9.1729 +                            ((map::(bool list => bool list)
  9.1730 +                                   => bool list list => bool list list)
  9.1731 +                              ((op #::bool => bool list => bool list)
  9.1732 +                                (False::bool))
  9.1733 +                              l2))))))))))"
  9.1734 +  by (import prob_canon ALGEBRA_CANON_CASES_THM)
  9.1735 +
  9.1736 +lemma ALGEBRA_CANON_CASES: "(All::((bool list list => bool) => bool) => bool)
  9.1737 + (%P::bool list list => bool.
  9.1738 +     (op -->::bool => bool => bool)
  9.1739 +      ((op &::bool => bool => bool) (P ([]::bool list list))
  9.1740 +        ((op &::bool => bool => bool)
  9.1741 +          (P ((op #::bool list => bool list list => bool list list)
  9.1742 +               ([]::bool list) ([]::bool list list)))
  9.1743 +          ((All::(bool list list => bool) => bool)
  9.1744 +            (%l1::bool list list.
  9.1745 +                (All::(bool list list => bool) => bool)
  9.1746 +                 (%l2::bool list list.
  9.1747 +                     (op -->::bool => bool => bool)
  9.1748 +                      ((op &::bool => bool => bool)
  9.1749 +                        ((algebra_canon::bool list list => bool) l1)
  9.1750 +                        ((op &::bool => bool => bool)
  9.1751 +                          ((algebra_canon::bool list list => bool) l2)
  9.1752 +                          ((algebra_canon::bool list list => bool)
  9.1753 +                            ((op @::bool list list
  9.1754 +                                    => bool list list => bool list list)
  9.1755 +                              ((map::(bool list => bool list)
  9.1756 +                                     => bool list list => bool list list)
  9.1757 +                                ((op #::bool => bool list => bool list)
  9.1758 +                                  (True::bool))
  9.1759 +                                l1)
  9.1760 +                              ((map::(bool list => bool list)
  9.1761 +                                     => bool list list => bool list list)
  9.1762 +                                ((op #::bool => bool list => bool list)
  9.1763 +                                  (False::bool))
  9.1764 +                                l2)))))
  9.1765 +                      (P ((op @::bool list list
  9.1766 +                                 => bool list list => bool list list)
  9.1767 +                           ((map::(bool list => bool list)
  9.1768 +                                  => bool list list => bool list list)
  9.1769 +                             ((op #::bool => bool list => bool list)
  9.1770 +                               (True::bool))
  9.1771 +                             l1)
  9.1772 +                           ((map::(bool list => bool list)
  9.1773 +                                  => bool list list => bool list list)
  9.1774 +                             ((op #::bool => bool list => bool list)
  9.1775 +                               (False::bool))
  9.1776 +                             l2))))))))
  9.1777 +      ((All::(bool list list => bool) => bool)
  9.1778 +        (%l::bool list list.
  9.1779 +            (op -->::bool => bool => bool)
  9.1780 +             ((algebra_canon::bool list list => bool) l) (P l))))"
  9.1781 +  by (import prob_canon ALGEBRA_CANON_CASES)
  9.1782 +
  9.1783 +lemma ALGEBRA_CANON_INDUCTION: "(All::((bool list list => bool) => bool) => bool)
  9.1784 + (%P::bool list list => bool.
  9.1785 +     (op -->::bool => bool => bool)
  9.1786 +      ((op &::bool => bool => bool) (P ([]::bool list list))
  9.1787 +        ((op &::bool => bool => bool)
  9.1788 +          (P ((op #::bool list => bool list list => bool list list)
  9.1789 +               ([]::bool list) ([]::bool list list)))
  9.1790 +          ((All::(bool list list => bool) => bool)
  9.1791 +            (%l1::bool list list.
  9.1792 +                (All::(bool list list => bool) => bool)
  9.1793 +                 (%l2::bool list list.
  9.1794 +                     (op -->::bool => bool => bool)
  9.1795 +                      ((op &::bool => bool => bool)
  9.1796 +                        ((algebra_canon::bool list list => bool) l1)
  9.1797 +                        ((op &::bool => bool => bool)
  9.1798 +                          ((algebra_canon::bool list list => bool) l2)
  9.1799 +                          ((op &::bool => bool => bool) (P l1)
  9.1800 +                            ((op &::bool => bool => bool) (P l2)
  9.1801 +                              ((algebra_canon::bool list list => bool)
  9.1802 +                                ((op @::bool list list
  9.1803 +  => bool list list => bool list list)
  9.1804 +                                  ((map::(bool list => bool list)
  9.1805 +   => bool list list => bool list list)
  9.1806 +                                    ((op #::bool => bool list => bool list)
  9.1807 +(True::bool))
  9.1808 +                                    l1)
  9.1809 +                                  ((map::(bool list => bool list)
  9.1810 +   => bool list list => bool list list)
  9.1811 +                                    ((op #::bool => bool list => bool list)
  9.1812 +(False::bool))
  9.1813 +                                    l2)))))))
  9.1814 +                      (P ((op @::bool list list
  9.1815 +                                 => bool list list => bool list list)
  9.1816 +                           ((map::(bool list => bool list)
  9.1817 +                                  => bool list list => bool list list)
  9.1818 +                             ((op #::bool => bool list => bool list)
  9.1819 +                               (True::bool))
  9.1820 +                             l1)
  9.1821 +                           ((map::(bool list => bool list)
  9.1822 +                                  => bool list list => bool list list)
  9.1823 +                             ((op #::bool => bool list => bool list)
  9.1824 +                               (False::bool))
  9.1825 +                             l2))))))))
  9.1826 +      ((All::(bool list list => bool) => bool)
  9.1827 +        (%l::bool list list.
  9.1828 +            (op -->::bool => bool => bool)
  9.1829 +             ((algebra_canon::bool list list => bool) l) (P l))))"
  9.1830 +  by (import prob_canon ALGEBRA_CANON_INDUCTION)
  9.1831 +
  9.1832 +lemma MEM_NIL_STEP: "ALL l1 l2. ~ [] mem map (op # True) l1 @ map (op # False) l2"
  9.1833 +  by (import prob_canon MEM_NIL_STEP)
  9.1834 +
  9.1835 +lemma ALG_SORTED_PREFIXFREE_MEM_NIL: "ALL l. (alg_sorted l & alg_prefixfree l & [] mem l) = (l = [[]])"
  9.1836 +  by (import prob_canon ALG_SORTED_PREFIXFREE_MEM_NIL)
  9.1837 +
  9.1838 +lemma ALG_SORTED_PREFIXFREE_EQUALITY: "(All::(bool list list => bool) => bool)
  9.1839 + (%l::bool list list.
  9.1840 +     (All::(bool list list => bool) => bool)
  9.1841 +      (%l'::bool list list.
  9.1842 +          (op -->::bool => bool => bool)
  9.1843 +           ((op &::bool => bool => bool)
  9.1844 +             ((All::(bool list => bool) => bool)
  9.1845 +               (%x::bool list.
  9.1846 +                   (op =::bool => bool => bool)
  9.1847 +                    ((op mem::bool list => bool list list => bool) x l)
  9.1848 +                    ((op mem::bool list => bool list list => bool) x l')))
  9.1849 +             ((op &::bool => bool => bool)
  9.1850 +               ((alg_sorted::bool list list => bool) l)
  9.1851 +               ((op &::bool => bool => bool)
  9.1852 +                 ((alg_sorted::bool list list => bool) l')
  9.1853 +                 ((op &::bool => bool => bool)
  9.1854 +                   ((alg_prefixfree::bool list list => bool) l)
  9.1855 +                   ((alg_prefixfree::bool list list => bool) l')))))
  9.1856 +           ((op =::bool list list => bool list list => bool) l l')))"
  9.1857 +  by (import prob_canon ALG_SORTED_PREFIXFREE_EQUALITY)
  9.1858 +
  9.1859 +;end_setup
  9.1860 +
  9.1861 +;setup_theory boolean_sequence
  9.1862 +
  9.1863 +consts
  9.1864 +  SHD :: "(nat => bool) => bool" 
  9.1865 +
  9.1866 +defs
  9.1867 +  SHD_primdef: "SHD == %f. f 0"
  9.1868 +
  9.1869 +lemma SHD_def: "ALL f. SHD f = f 0"
  9.1870 +  by (import boolean_sequence SHD_def)
  9.1871 +
  9.1872 +consts
  9.1873 +  STL :: "(nat => bool) => nat => bool" 
  9.1874 +
  9.1875 +defs
  9.1876 +  STL_primdef: "STL == %f n. f (Suc n)"
  9.1877 +
  9.1878 +lemma STL_def: "ALL f n. STL f n = f (Suc n)"
  9.1879 +  by (import boolean_sequence STL_def)
  9.1880 +
  9.1881 +consts
  9.1882 +  SCONS :: "bool => (nat => bool) => nat => bool" 
  9.1883 +
  9.1884 +specification (SCONS_primdef: SCONS) SCONS_def: "(ALL h t. SCONS h t 0 = h) & (ALL h t n. SCONS h t (Suc n) = t n)"
  9.1885 +  by (import boolean_sequence SCONS_def)
  9.1886 +
  9.1887 +consts
  9.1888 +  SDEST :: "(nat => bool) => bool * (nat => bool)" 
  9.1889 +
  9.1890 +defs
  9.1891 +  SDEST_primdef: "SDEST == %s. (SHD s, STL s)"
  9.1892 +
  9.1893 +lemma SDEST_def: "SDEST = (%s. (SHD s, STL s))"
  9.1894 +  by (import boolean_sequence SDEST_def)
  9.1895 +
  9.1896 +consts
  9.1897 +  SCONST :: "bool => nat => bool" 
  9.1898 +
  9.1899 +defs
  9.1900 +  SCONST_primdef: "SCONST == K"
  9.1901 +
  9.1902 +lemma SCONST_def: "SCONST = K"
  9.1903 +  by (import boolean_sequence SCONST_def)
  9.1904 +
  9.1905 +consts
  9.1906 +  STAKE :: "nat => (nat => bool) => bool list" 
  9.1907 +
  9.1908 +specification (STAKE_primdef: STAKE) STAKE_def: "(ALL s. STAKE 0 s = []) &
  9.1909 +(ALL n s. STAKE (Suc n) s = SHD s # STAKE n (STL s))"
  9.1910 +  by (import boolean_sequence STAKE_def)
  9.1911 +
  9.1912 +consts
  9.1913 +  SDROP :: "nat => (nat => bool) => nat => bool" 
  9.1914 +
  9.1915 +specification (SDROP_primdef: SDROP) SDROP_def: "SDROP 0 = I & (ALL n. SDROP (Suc n) = SDROP n o STL)"
  9.1916 +  by (import boolean_sequence SDROP_def)
  9.1917 +
  9.1918 +lemma SCONS_SURJ: "ALL x. EX xa t. x = SCONS xa t"
  9.1919 +  by (import boolean_sequence SCONS_SURJ)
  9.1920 +
  9.1921 +lemma SHD_STL_ISO: "ALL h t. EX x. SHD x = h & STL x = t"
  9.1922 +  by (import boolean_sequence SHD_STL_ISO)
  9.1923 +
  9.1924 +lemma SHD_SCONS: "ALL h t. SHD (SCONS h t) = h"
  9.1925 +  by (import boolean_sequence SHD_SCONS)
  9.1926 +
  9.1927 +lemma STL_SCONS: "ALL h t. STL (SCONS h t) = t"
  9.1928 +  by (import boolean_sequence STL_SCONS)
  9.1929 +
  9.1930 +lemma SHD_SCONST: "ALL b. SHD (SCONST b) = b"
  9.1931 +  by (import boolean_sequence SHD_SCONST)
  9.1932 +
  9.1933 +lemma STL_SCONST: "ALL b. STL (SCONST b) = SCONST b"
  9.1934 +  by (import boolean_sequence STL_SCONST)
  9.1935 +
  9.1936 +;end_setup
  9.1937 +
  9.1938 +;setup_theory prob_algebra
  9.1939 +
  9.1940 +consts
  9.1941 +  alg_embed :: "bool list => (nat => bool) => bool" 
  9.1942 +
  9.1943 +specification (alg_embed_primdef: alg_embed) alg_embed_def: "(ALL s. alg_embed [] s = True) &
  9.1944 +(ALL h t s. alg_embed (h # t) s = (h = SHD s & alg_embed t (STL s)))"
  9.1945 +  by (import prob_algebra alg_embed_def)
  9.1946 +
  9.1947 +consts
  9.1948 +  algebra_embed :: "bool list list => (nat => bool) => bool" 
  9.1949 +
  9.1950 +specification (algebra_embed_primdef: algebra_embed) algebra_embed_def: "algebra_embed [] = EMPTY &
  9.1951 +(ALL h t.
  9.1952 +    algebra_embed (h # t) = pred_set.UNION (alg_embed h) (algebra_embed t))"
  9.1953 +  by (import prob_algebra algebra_embed_def)
  9.1954 +
  9.1955 +consts
  9.1956 +  measurable :: "((nat => bool) => bool) => bool" 
  9.1957 +
  9.1958 +defs
  9.1959 +  measurable_primdef: "measurable == %s. EX b. s = algebra_embed b"
  9.1960 +
  9.1961 +lemma measurable_def: "ALL s. measurable s = (EX b. s = algebra_embed b)"
  9.1962 +  by (import prob_algebra measurable_def)
  9.1963 +
  9.1964 +lemma HALVES_INTER: "pred_set.INTER (%x. SHD x = True) (%x. SHD x = False) = EMPTY"
  9.1965 +  by (import prob_algebra HALVES_INTER)
  9.1966 +
  9.1967 +lemma INTER_STL: "ALL p q. pred_set.INTER p q o STL = pred_set.INTER (p o STL) (q o STL)"
  9.1968 +  by (import prob_algebra INTER_STL)
  9.1969 +
  9.1970 +lemma COMPL_SHD: "ALL b. COMPL (%x. SHD x = b) = (%x. SHD x = (~ b))"
  9.1971 +  by (import prob_algebra COMPL_SHD)
  9.1972 +
  9.1973 +lemma ALG_EMBED_BASIC: "alg_embed [] = pred_set.UNIV &
  9.1974 +(ALL h t.
  9.1975 +    alg_embed (h # t) = pred_set.INTER (%x. SHD x = h) (alg_embed t o STL))"
  9.1976 +  by (import prob_algebra ALG_EMBED_BASIC)
  9.1977 +
  9.1978 +lemma ALG_EMBED_NIL: "ALL c. All (alg_embed c) = (c = [])"
  9.1979 +  by (import prob_algebra ALG_EMBED_NIL)
  9.1980 +
  9.1981 +lemma ALG_EMBED_POPULATED: "ALL b. Ex (alg_embed b)"
  9.1982 +  by (import prob_algebra ALG_EMBED_POPULATED)
  9.1983 +
  9.1984 +lemma ALG_EMBED_PREFIX: "(All::(bool list => bool) => bool)
  9.1985 + (%b::bool list.
  9.1986 +     (All::(bool list => bool) => bool)
  9.1987 +      (%c::bool list.
  9.1988 +          (All::((nat => bool) => bool) => bool)
  9.1989 +           (%s::nat => bool.
  9.1990 +               (op -->::bool => bool => bool)
  9.1991 +                ((op &::bool => bool => bool)
  9.1992 +                  ((alg_embed::bool list => (nat => bool) => bool) b s)
  9.1993 +                  ((alg_embed::bool list => (nat => bool) => bool) c s))
  9.1994 +                ((op |::bool => bool => bool)
  9.1995 +                  ((IS_PREFIX::bool list => bool list => bool) b c)
  9.1996 +                  ((IS_PREFIX::bool list => bool list => bool) c b)))))"
  9.1997 +  by (import prob_algebra ALG_EMBED_PREFIX)
  9.1998 +
  9.1999 +lemma ALG_EMBED_PREFIX_SUBSET: "ALL b c. SUBSET (alg_embed b) (alg_embed c) = IS_PREFIX b c"
  9.2000 +  by (import prob_algebra ALG_EMBED_PREFIX_SUBSET)
  9.2001 +
  9.2002 +lemma ALG_EMBED_TWINS: "ALL l.
  9.2003 +   pred_set.UNION (alg_embed (SNOC True l)) (alg_embed (SNOC False l)) =
  9.2004 +   alg_embed l"
  9.2005 +  by (import prob_algebra ALG_EMBED_TWINS)
  9.2006 +
  9.2007 +lemma ALGEBRA_EMBED_BASIC: "algebra_embed [] = EMPTY &
  9.2008 +algebra_embed [[]] = pred_set.UNIV &
  9.2009 +(ALL b. algebra_embed [[b]] = (%s. SHD s = b))"
  9.2010 +  by (import prob_algebra ALGEBRA_EMBED_BASIC)
  9.2011 +
  9.2012 +lemma ALGEBRA_EMBED_MEM: "(All::(bool list list => bool) => bool)
  9.2013 + (%b::bool list list.
  9.2014 +     (All::((nat => bool) => bool) => bool)
  9.2015 +      (%x::nat => bool.
  9.2016 +          (op -->::bool => bool => bool)
  9.2017 +           ((algebra_embed::bool list list => (nat => bool) => bool) b x)
  9.2018 +           ((Ex::(bool list => bool) => bool)
  9.2019 +             (%l::bool list.
  9.2020 +                 (op &::bool => bool => bool)
  9.2021 +                  ((op mem::bool list => bool list list => bool) l b)
  9.2022 +                  ((alg_embed::bool list => (nat => bool) => bool) l x)))))"
  9.2023 +  by (import prob_algebra ALGEBRA_EMBED_MEM)
  9.2024 +
  9.2025 +lemma ALGEBRA_EMBED_APPEND: "ALL l1 l2.
  9.2026 +   algebra_embed (l1 @ l2) =
  9.2027 +   pred_set.UNION (algebra_embed l1) (algebra_embed l2)"
  9.2028 +  by (import prob_algebra ALGEBRA_EMBED_APPEND)
  9.2029 +
  9.2030 +lemma ALGEBRA_EMBED_TLS: "ALL l b.
  9.2031 +   algebra_embed (map (op # b) l) (SCONS h t) = (h = b & algebra_embed l t)"
  9.2032 +  by (import prob_algebra ALGEBRA_EMBED_TLS)
  9.2033 +
  9.2034 +lemma ALG_CANON_PREFS_EMBED: "ALL l b. algebra_embed (alg_canon_prefs l b) = algebra_embed (l # b)"
  9.2035 +  by (import prob_algebra ALG_CANON_PREFS_EMBED)
  9.2036 +
  9.2037 +lemma ALG_CANON_FIND_EMBED: "ALL l b. algebra_embed (alg_canon_find l b) = algebra_embed (l # b)"
  9.2038 +  by (import prob_algebra ALG_CANON_FIND_EMBED)
  9.2039 +
  9.2040 +lemma ALG_CANON1_EMBED: "ALL x. algebra_embed (alg_canon1 x) = algebra_embed x"
  9.2041 +  by (import prob_algebra ALG_CANON1_EMBED)
  9.2042 +
  9.2043 +lemma ALG_CANON_MERGE_EMBED: "ALL l b. algebra_embed (alg_canon_merge l b) = algebra_embed (l # b)"
  9.2044 +  by (import prob_algebra ALG_CANON_MERGE_EMBED)
  9.2045 +
  9.2046 +lemma ALG_CANON2_EMBED: "ALL x. algebra_embed (alg_canon2 x) = algebra_embed x"
  9.2047 +  by (import prob_algebra ALG_CANON2_EMBED)
  9.2048 +
  9.2049 +lemma ALG_CANON_EMBED: "ALL l. algebra_embed (alg_canon l) = algebra_embed l"
  9.2050 +  by (import prob_algebra ALG_CANON_EMBED)
  9.2051 +
  9.2052 +lemma ALGEBRA_CANON_UNIV: "(All::(bool list list => bool) => bool)
  9.2053 + (%l::bool list list.
  9.2054 +     (op -->::bool => bool => bool)
  9.2055 +      ((algebra_canon::bool list list => bool) l)
  9.2056 +      ((op -->::bool => bool => bool)
  9.2057 +        ((op =::((nat => bool) => bool) => ((nat => bool) => bool) => bool)
  9.2058 +          ((algebra_embed::bool list list => (nat => bool) => bool) l)
  9.2059 +          (pred_set.UNIV::(nat => bool) => bool))
  9.2060 +        ((op =::bool list list => bool list list => bool) l
  9.2061 +          ((op #::bool list => bool list list => bool list list)
  9.2062 +            ([]::bool list) ([]::bool list list)))))"
  9.2063 +  by (import prob_algebra ALGEBRA_CANON_UNIV)
  9.2064 +
  9.2065 +lemma ALG_CANON_REP: "ALL b c. (alg_canon b = alg_canon c) = (algebra_embed b = algebra_embed c)"
  9.2066 +  by (import prob_algebra ALG_CANON_REP)
  9.2067 +
  9.2068 +lemma ALGEBRA_CANON_EMBED_EMPTY: "(All::(bool list list => bool) => bool)
  9.2069 + (%l::bool list list.
  9.2070 +     (op -->::bool => bool => bool)
  9.2071 +      ((algebra_canon::bool list list => bool) l)
  9.2072 +      ((op =::bool => bool => bool)
  9.2073 +        ((All::((nat => bool) => bool) => bool)
  9.2074 +          (%v::nat => bool.
  9.2075 +              (Not::bool => bool)
  9.2076 +               ((algebra_embed::bool list list => (nat => bool) => bool) l
  9.2077 +                 v)))
  9.2078 +        ((op =::bool list list => bool list list => bool) l
  9.2079 +          ([]::bool list list))))"
  9.2080 +  by (import prob_algebra ALGEBRA_CANON_EMBED_EMPTY)
  9.2081 +
  9.2082 +lemma ALGEBRA_CANON_EMBED_UNIV: "(All::(bool list list => bool) => bool)
  9.2083 + (%l::bool list list.
  9.2084 +     (op -->::bool => bool => bool)
  9.2085 +      ((algebra_canon::bool list list => bool) l)
  9.2086 +      ((op =::bool => bool => bool)
  9.2087 +        ((All::((nat => bool) => bool) => bool)
  9.2088 +          ((algebra_embed::bool list list => (nat => bool) => bool) l))
  9.2089 +        ((op =::bool list list => bool list list => bool) l
  9.2090 +          ((op #::bool list => bool list list => bool list list)
  9.2091 +            ([]::bool list) ([]::bool list list)))))"
  9.2092 +  by (import prob_algebra ALGEBRA_CANON_EMBED_UNIV)
  9.2093 +
  9.2094 +lemma MEASURABLE_ALGEBRA: "ALL b. measurable (algebra_embed b)"
  9.2095 +  by (import prob_algebra MEASURABLE_ALGEBRA)
  9.2096 +
  9.2097 +lemma MEASURABLE_BASIC: "measurable EMPTY &
  9.2098 +measurable pred_set.UNIV & (ALL b. measurable (%s. SHD s = b))"
  9.2099 +  by (import prob_algebra MEASURABLE_BASIC)
  9.2100 +
  9.2101 +lemma MEASURABLE_SHD: "ALL b. measurable (%s. SHD s = b)"
  9.2102 +  by (import prob_algebra MEASURABLE_SHD)
  9.2103 +
  9.2104 +lemma ALGEBRA_EMBED_COMPL: "ALL l. EX l'. COMPL (algebra_embed l) = algebra_embed l'"
  9.2105 +  by (import prob_algebra ALGEBRA_EMBED_COMPL)
  9.2106 +
  9.2107 +lemma MEASURABLE_COMPL: "ALL s. measurable (COMPL s) = measurable s"
  9.2108 +  by (import prob_algebra MEASURABLE_COMPL)
  9.2109 +
  9.2110 +lemma MEASURABLE_UNION: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2111 + (%s::(nat => bool) => bool.
  9.2112 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2113 +      (%t::(nat => bool) => bool.
  9.2114 +          (op -->::bool => bool => bool)
  9.2115 +           ((op &::bool => bool => bool)
  9.2116 +             ((measurable::((nat => bool) => bool) => bool) s)
  9.2117 +             ((measurable::((nat => bool) => bool) => bool) t))
  9.2118 +           ((measurable::((nat => bool) => bool) => bool)
  9.2119 +             ((pred_set.UNION::((nat => bool) => bool)
  9.2120 +                               => ((nat => bool) => bool)
  9.2121 +                                  => (nat => bool) => bool)
  9.2122 +               s t))))"
  9.2123 +  by (import prob_algebra MEASURABLE_UNION)
  9.2124 +
  9.2125 +lemma MEASURABLE_INTER: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2126 + (%s::(nat => bool) => bool.
  9.2127 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2128 +      (%t::(nat => bool) => bool.
  9.2129 +          (op -->::bool => bool => bool)
  9.2130 +           ((op &::bool => bool => bool)
  9.2131 +             ((measurable::((nat => bool) => bool) => bool) s)
  9.2132 +             ((measurable::((nat => bool) => bool) => bool) t))
  9.2133 +           ((measurable::((nat => bool) => bool) => bool)
  9.2134 +             ((pred_set.INTER::((nat => bool) => bool)
  9.2135 +                               => ((nat => bool) => bool)
  9.2136 +                                  => (nat => bool) => bool)
  9.2137 +               s t))))"
  9.2138 +  by (import prob_algebra MEASURABLE_INTER)
  9.2139 +
  9.2140 +lemma MEASURABLE_STL: "ALL p. measurable (p o STL) = measurable p"
  9.2141 +  by (import prob_algebra MEASURABLE_STL)
  9.2142 +
  9.2143 +lemma MEASURABLE_SDROP: "ALL n p. measurable (p o SDROP n) = measurable p"
  9.2144 +  by (import prob_algebra MEASURABLE_SDROP)
  9.2145 +
  9.2146 +lemma MEASURABLE_INTER_HALVES: "ALL p.
  9.2147 +   (measurable (pred_set.INTER (%x. SHD x = True) p) &
  9.2148 +    measurable (pred_set.INTER (%x. SHD x = False) p)) =
  9.2149 +   measurable p"
  9.2150 +  by (import prob_algebra MEASURABLE_INTER_HALVES)
  9.2151 +
  9.2152 +lemma MEASURABLE_HALVES: "ALL p q.
  9.2153 +   measurable
  9.2154 +    (pred_set.UNION (pred_set.INTER (%x. SHD x = True) p)
  9.2155 +      (pred_set.INTER (%x. SHD x = False) q)) =
  9.2156 +   (measurable (pred_set.INTER (%x. SHD x = True) p) &
  9.2157 +    measurable (pred_set.INTER (%x. SHD x = False) q))"
  9.2158 +  by (import prob_algebra MEASURABLE_HALVES)
  9.2159 +
  9.2160 +lemma MEASURABLE_INTER_SHD: "ALL b p.
  9.2161 +   measurable (pred_set.INTER (%x. SHD x = b) (p o STL)) = measurable p"
  9.2162 +  by (import prob_algebra MEASURABLE_INTER_SHD)
  9.2163 +
  9.2164 +;end_setup
  9.2165 +
  9.2166 +;setup_theory prob
  9.2167 +
  9.2168 +consts
  9.2169 +  alg_measure :: "bool list list => real" 
  9.2170 +
  9.2171 +specification (alg_measure_primdef: alg_measure) alg_measure_def: "alg_measure [] = 0 &
  9.2172 +(ALL l rest. alg_measure (l # rest) = (1 / 2) ^ length l + alg_measure rest)"
  9.2173 +  by (import prob alg_measure_def)
  9.2174 +
  9.2175 +consts
  9.2176 +  algebra_measure :: "bool list list => real" 
  9.2177 +
  9.2178 +defs
  9.2179 +  algebra_measure_primdef: "algebra_measure ==
  9.2180 +%b. inf (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
  9.2181 +
  9.2182 +lemma algebra_measure_def: "ALL b.
  9.2183 +   algebra_measure b =
  9.2184 +   inf (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
  9.2185 +  by (import prob algebra_measure_def)
  9.2186 +
  9.2187 +consts
  9.2188 +  prob :: "((nat => bool) => bool) => real" 
  9.2189 +
  9.2190 +defs
  9.2191 +  prob_primdef: "prob ==
  9.2192 +%s. sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
  9.2193 +
  9.2194 +lemma prob_def: "ALL s.
  9.2195 +   prob s =
  9.2196 +   sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
  9.2197 +  by (import prob prob_def)
  9.2198 +
  9.2199 +lemma ALG_TWINS_MEASURE: "ALL l::bool list.
  9.2200 +   ((1::real) / (2::real)) ^ length (SNOC True l) +
  9.2201 +   ((1::real) / (2::real)) ^ length (SNOC False l) =
  9.2202 +   ((1::real) / (2::real)) ^ length l"
  9.2203 +  by (import prob ALG_TWINS_MEASURE)
  9.2204 +
  9.2205 +lemma ALG_MEASURE_BASIC: "alg_measure [] = 0 &
  9.2206 +alg_measure [[]] = 1 & (ALL b. alg_measure [[b]] = 1 / 2)"
  9.2207 +  by (import prob ALG_MEASURE_BASIC)
  9.2208 +
  9.2209 +lemma ALG_MEASURE_POS: "ALL l. 0 <= alg_measure l"
  9.2210 +  by (import prob ALG_MEASURE_POS)
  9.2211 +
  9.2212 +lemma ALG_MEASURE_APPEND: "ALL l1 l2. alg_measure (l1 @ l2) = alg_measure l1 + alg_measure l2"
  9.2213 +  by (import prob ALG_MEASURE_APPEND)
  9.2214 +
  9.2215 +lemma ALG_MEASURE_TLS: "ALL l b. 2 * alg_measure (map (op # b) l) = alg_measure l"
  9.2216 +  by (import prob ALG_MEASURE_TLS)
  9.2217 +
  9.2218 +lemma ALG_CANON_PREFS_MONO: "ALL l b. alg_measure (alg_canon_prefs l b) <= alg_measure (l # b)"
  9.2219 +  by (import prob ALG_CANON_PREFS_MONO)
  9.2220 +
  9.2221 +lemma ALG_CANON_FIND_MONO: "ALL l b. alg_measure (alg_canon_find l b) <= alg_measure (l # b)"
  9.2222 +  by (import prob ALG_CANON_FIND_MONO)
  9.2223 +
  9.2224 +lemma ALG_CANON1_MONO: "ALL x. alg_measure (alg_canon1 x) <= alg_measure x"
  9.2225 +  by (import prob ALG_CANON1_MONO)
  9.2226 +
  9.2227 +lemma ALG_CANON_MERGE_MONO: "ALL l b. alg_measure (alg_canon_merge l b) <= alg_measure (l # b)"
  9.2228 +  by (import prob ALG_CANON_MERGE_MONO)
  9.2229 +
  9.2230 +lemma ALG_CANON2_MONO: "ALL x. alg_measure (alg_canon2 x) <= alg_measure x"
  9.2231 +  by (import prob ALG_CANON2_MONO)
  9.2232 +
  9.2233 +lemma ALG_CANON_MONO: "ALL l. alg_measure (alg_canon l) <= alg_measure l"
  9.2234 +  by (import prob ALG_CANON_MONO)
  9.2235 +
  9.2236 +lemma ALGEBRA_MEASURE_DEF_ALT: "ALL l. algebra_measure l = alg_measure (alg_canon l)"
  9.2237 +  by (import prob ALGEBRA_MEASURE_DEF_ALT)
  9.2238 +
  9.2239 +lemma ALGEBRA_MEASURE_BASIC: "algebra_measure [] = 0 &
  9.2240 +algebra_measure [[]] = 1 & (ALL b. algebra_measure [[b]] = 1 / 2)"
  9.2241 +  by (import prob ALGEBRA_MEASURE_BASIC)
  9.2242 +
  9.2243 +lemma ALGEBRA_CANON_MEASURE_MAX: "(All::(bool list list => bool) => bool)
  9.2244 + (%l::bool list list.
  9.2245 +     (op -->::bool => bool => bool)
  9.2246 +      ((algebra_canon::bool list list => bool) l)
  9.2247 +      ((op <=::real => real => bool)
  9.2248 +        ((alg_measure::bool list list => real) l) (1::real)))"
  9.2249 +  by (import prob ALGEBRA_CANON_MEASURE_MAX)
  9.2250 +
  9.2251 +lemma ALGEBRA_MEASURE_MAX: "ALL l. algebra_measure l <= 1"
  9.2252 +  by (import prob ALGEBRA_MEASURE_MAX)
  9.2253 +
  9.2254 +lemma ALGEBRA_MEASURE_MONO_EMBED: "(All::(bool list list => bool) => bool)
  9.2255 + (%x::bool list list.
  9.2256 +     (All::(bool list list => bool) => bool)
  9.2257 +      (%xa::bool list list.
  9.2258 +          (op -->::bool => bool => bool)
  9.2259 +           ((SUBSET::((nat => bool) => bool)
  9.2260 +                     => ((nat => bool) => bool) => bool)
  9.2261 +             ((algebra_embed::bool list list => (nat => bool) => bool) x)
  9.2262 +             ((algebra_embed::bool list list => (nat => bool) => bool) xa))
  9.2263 +           ((op <=::real => real => bool)
  9.2264 +             ((algebra_measure::bool list list => real) x)
  9.2265 +             ((algebra_measure::bool list list => real) xa))))"
  9.2266 +  by (import prob ALGEBRA_MEASURE_MONO_EMBED)
  9.2267 +
  9.2268 +lemma ALG_MEASURE_COMPL: "(All::(bool list list => bool) => bool)
  9.2269 + (%l::bool list list.
  9.2270 +     (op -->::bool => bool => bool)
  9.2271 +      ((algebra_canon::bool list list => bool) l)
  9.2272 +      ((All::(bool list list => bool) => bool)
  9.2273 +        (%c::bool list list.
  9.2274 +            (op -->::bool => bool => bool)
  9.2275 +             ((algebra_canon::bool list list => bool) c)
  9.2276 +             ((op -->::bool => bool => bool)
  9.2277 +               ((op =::((nat => bool) => bool)
  9.2278 +                       => ((nat => bool) => bool) => bool)
  9.2279 +                 ((COMPL::((nat => bool) => bool) => (nat => bool) => bool)
  9.2280 +                   ((algebra_embed::bool list list => (nat => bool) => bool)
  9.2281 +                     l))
  9.2282 +                 ((algebra_embed::bool list list => (nat => bool) => bool)
  9.2283 +                   c))
  9.2284 +               ((op =::real => real => bool)
  9.2285 +                 ((op +::real => real => real)
  9.2286 +                   ((alg_measure::bool list list => real) l)
  9.2287 +                   ((alg_measure::bool list list => real) c))
  9.2288 +                 (1::real))))))"
  9.2289 +  by (import prob ALG_MEASURE_COMPL)
  9.2290 +
  9.2291 +lemma ALG_MEASURE_ADDITIVE: "(All::(bool list list => bool) => bool)
  9.2292 + (%l::bool list list.
  9.2293 +     (op -->::bool => bool => bool)
  9.2294 +      ((algebra_canon::bool list list => bool) l)
  9.2295 +      ((All::(bool list list => bool) => bool)
  9.2296 +        (%c::bool list list.
  9.2297 +            (op -->::bool => bool => bool)
  9.2298 +             ((algebra_canon::bool list list => bool) c)
  9.2299 +             ((All::(bool list list => bool) => bool)
  9.2300 +               (%d::bool list list.
  9.2301 +                   (op -->::bool => bool => bool)
  9.2302 +                    ((algebra_canon::bool list list => bool) d)
  9.2303 +                    ((op -->::bool => bool => bool)
  9.2304 +                      ((op &::bool => bool => bool)
  9.2305 +                        ((op =::((nat => bool) => bool)
  9.2306 +                                => ((nat => bool) => bool) => bool)
  9.2307 +                          ((pred_set.INTER::((nat => bool) => bool)
  9.2308 +      => ((nat => bool) => bool) => (nat => bool) => bool)
  9.2309 +                            ((algebra_embed::bool list list
  9.2310 +       => (nat => bool) => bool)
  9.2311 +                              c)
  9.2312 +                            ((algebra_embed::bool list list
  9.2313 +       => (nat => bool) => bool)
  9.2314 +                              d))
  9.2315 +                          (EMPTY::(nat => bool) => bool))
  9.2316 +                        ((op =::((nat => bool) => bool)
  9.2317 +                                => ((nat => bool) => bool) => bool)
  9.2318 +                          ((algebra_embed::bool list list
  9.2319 +     => (nat => bool) => bool)
  9.2320 +                            l)
  9.2321 +                          ((pred_set.UNION::((nat => bool) => bool)
  9.2322 +      => ((nat => bool) => bool) => (nat => bool) => bool)
  9.2323 +                            ((algebra_embed::bool list list
  9.2324 +       => (nat => bool) => bool)
  9.2325 +                              c)
  9.2326 +                            ((algebra_embed::bool list list
  9.2327 +       => (nat => bool) => bool)
  9.2328 +                              d))))
  9.2329 +                      ((op =::real => real => bool)
  9.2330 +                        ((alg_measure::bool list list => real) l)
  9.2331 +                        ((op +::real => real => real)
  9.2332 +                          ((alg_measure::bool list list => real) c)
  9.2333 +                          ((alg_measure::bool list list => real) d)))))))))"
  9.2334 +  by (import prob ALG_MEASURE_ADDITIVE)
  9.2335 +
  9.2336 +lemma PROB_ALGEBRA: "ALL l. prob (algebra_embed l) = algebra_measure l"
  9.2337 +  by (import prob PROB_ALGEBRA)
  9.2338 +
  9.2339 +lemma PROB_BASIC: "prob EMPTY = 0 &
  9.2340 +prob pred_set.UNIV = 1 & (ALL b. prob (%s. SHD s = b) = 1 / 2)"
  9.2341 +  by (import prob PROB_BASIC)
  9.2342 +
  9.2343 +lemma PROB_ADDITIVE: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2344 + (%s::(nat => bool) => bool.
  9.2345 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2346 +      (%t::(nat => bool) => bool.
  9.2347 +          (op -->::bool => bool => bool)
  9.2348 +           ((op &::bool => bool => bool)
  9.2349 +             ((measurable::((nat => bool) => bool) => bool) s)
  9.2350 +             ((op &::bool => bool => bool)
  9.2351 +               ((measurable::((nat => bool) => bool) => bool) t)
  9.2352 +               ((op =::((nat => bool) => bool)
  9.2353 +                       => ((nat => bool) => bool) => bool)
  9.2354 +                 ((pred_set.INTER::((nat => bool) => bool)
  9.2355 +                                   => ((nat => bool) => bool)
  9.2356 +=> (nat => bool) => bool)
  9.2357 +                   s t)
  9.2358 +                 (EMPTY::(nat => bool) => bool))))
  9.2359 +           ((op =::real => real => bool)
  9.2360 +             ((prob::((nat => bool) => bool) => real)
  9.2361 +               ((pred_set.UNION::((nat => bool) => bool)
  9.2362 +                                 => ((nat => bool) => bool)
  9.2363 +                                    => (nat => bool) => bool)
  9.2364 +                 s t))
  9.2365 +             ((op +::real => real => real)
  9.2366 +               ((prob::((nat => bool) => bool) => real) s)
  9.2367 +               ((prob::((nat => bool) => bool) => real) t)))))"
  9.2368 +  by (import prob PROB_ADDITIVE)
  9.2369 +
  9.2370 +lemma PROB_COMPL: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2371 + (%s::(nat => bool) => bool.
  9.2372 +     (op -->::bool => bool => bool)
  9.2373 +      ((measurable::((nat => bool) => bool) => bool) s)
  9.2374 +      ((op =::real => real => bool)
  9.2375 +        ((prob::((nat => bool) => bool) => real)
  9.2376 +          ((COMPL::((nat => bool) => bool) => (nat => bool) => bool) s))
  9.2377 +        ((op -::real => real => real) (1::real)
  9.2378 +          ((prob::((nat => bool) => bool) => real) s))))"
  9.2379 +  by (import prob PROB_COMPL)
  9.2380 +
  9.2381 +lemma PROB_SUP_EXISTS1: "ALL s. EX x b. algebra_measure b = x & SUBSET (algebra_embed b) s"
  9.2382 +  by (import prob PROB_SUP_EXISTS1)
  9.2383 +
  9.2384 +lemma PROB_SUP_EXISTS2: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2385 + (%s::(nat => bool) => bool.
  9.2386 +     (Ex::(real => bool) => bool)
  9.2387 +      (%x::real.
  9.2388 +          (All::(real => bool) => bool)
  9.2389 +           (%r::real.
  9.2390 +               (op -->::bool => bool => bool)
  9.2391 +                ((Ex::(bool list list => bool) => bool)
  9.2392 +                  (%b::bool list list.
  9.2393 +                      (op &::bool => bool => bool)
  9.2394 +                       ((op =::real => real => bool)
  9.2395 +                         ((algebra_measure::bool list list => real) b) r)
  9.2396 +                       ((SUBSET::((nat => bool) => bool)
  9.2397 +                                 => ((nat => bool) => bool) => bool)
  9.2398 +                         ((algebra_embed::bool list list
  9.2399 +    => (nat => bool) => bool)
  9.2400 +                           b)
  9.2401 +                         s)))
  9.2402 +                ((op <=::real => real => bool) r x))))"
  9.2403 +  by (import prob PROB_SUP_EXISTS2)
  9.2404 +
  9.2405 +lemma PROB_LE_X: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2406 + (%s::(nat => bool) => bool.
  9.2407 +     (All::(real => bool) => bool)
  9.2408 +      (%x::real.
  9.2409 +          (op -->::bool => bool => bool)
  9.2410 +           ((All::(((nat => bool) => bool) => bool) => bool)
  9.2411 +             (%s'::(nat => bool) => bool.
  9.2412 +                 (op -->::bool => bool => bool)
  9.2413 +                  ((op &::bool => bool => bool)
  9.2414 +                    ((measurable::((nat => bool) => bool) => bool) s')
  9.2415 +                    ((SUBSET::((nat => bool) => bool)
  9.2416 +                              => ((nat => bool) => bool) => bool)
  9.2417 +                      s' s))
  9.2418 +                  ((op <=::real => real => bool)
  9.2419 +                    ((prob::((nat => bool) => bool) => real) s') x)))
  9.2420 +           ((op <=::real => real => bool)
  9.2421 +             ((prob::((nat => bool) => bool) => real) s) x)))"
  9.2422 +  by (import prob PROB_LE_X)
  9.2423 +
  9.2424 +lemma X_LE_PROB: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2425 + (%s::(nat => bool) => bool.
  9.2426 +     (All::(real => bool) => bool)
  9.2427 +      (%x::real.
  9.2428 +          (op -->::bool => bool => bool)
  9.2429 +           ((Ex::(((nat => bool) => bool) => bool) => bool)
  9.2430 +             (%s'::(nat => bool) => bool.
  9.2431 +                 (op &::bool => bool => bool)
  9.2432 +                  ((measurable::((nat => bool) => bool) => bool) s')
  9.2433 +                  ((op &::bool => bool => bool)
  9.2434 +                    ((SUBSET::((nat => bool) => bool)
  9.2435 +                              => ((nat => bool) => bool) => bool)
  9.2436 +                      s' s)
  9.2437 +                    ((op <=::real => real => bool) x
  9.2438 +                      ((prob::((nat => bool) => bool) => real) s')))))
  9.2439 +           ((op <=::real => real => bool) x
  9.2440 +             ((prob::((nat => bool) => bool) => real) s))))"
  9.2441 +  by (import prob X_LE_PROB)
  9.2442 +
  9.2443 +lemma PROB_SUBSET_MONO: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2444 + (%s::(nat => bool) => bool.
  9.2445 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2446 +      (%t::(nat => bool) => bool.
  9.2447 +          (op -->::bool => bool => bool)
  9.2448 +           ((SUBSET::((nat => bool) => bool)
  9.2449 +                     => ((nat => bool) => bool) => bool)
  9.2450 +             s t)
  9.2451 +           ((op <=::real => real => bool)
  9.2452 +             ((prob::((nat => bool) => bool) => real) s)
  9.2453 +             ((prob::((nat => bool) => bool) => real) t))))"
  9.2454 +  by (import prob PROB_SUBSET_MONO)
  9.2455 +
  9.2456 +lemma PROB_ALG: "ALL x. prob (alg_embed x) = (1 / 2) ^ length x"
  9.2457 +  by (import prob PROB_ALG)
  9.2458 +
  9.2459 +lemma PROB_STL: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2460 + (%p::(nat => bool) => bool.
  9.2461 +     (op -->::bool => bool => bool)
  9.2462 +      ((measurable::((nat => bool) => bool) => bool) p)
  9.2463 +      ((op =::real => real => bool)
  9.2464 +        ((prob::((nat => bool) => bool) => real)
  9.2465 +          ((op o::((nat => bool) => bool)
  9.2466 +                  => ((nat => bool) => nat => bool)
  9.2467 +                     => (nat => bool) => bool)
  9.2468 +            p (STL::(nat => bool) => nat => bool)))
  9.2469 +        ((prob::((nat => bool) => bool) => real) p)))"
  9.2470 +  by (import prob PROB_STL)
  9.2471 +
  9.2472 +lemma PROB_SDROP: "(All::(nat => bool) => bool)
  9.2473 + (%n::nat.
  9.2474 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2475 +      (%p::(nat => bool) => bool.
  9.2476 +          (op -->::bool => bool => bool)
  9.2477 +           ((measurable::((nat => bool) => bool) => bool) p)
  9.2478 +           ((op =::real => real => bool)
  9.2479 +             ((prob::((nat => bool) => bool) => real)
  9.2480 +               ((op o::((nat => bool) => bool)
  9.2481 +                       => ((nat => bool) => nat => bool)
  9.2482 +                          => (nat => bool) => bool)
  9.2483 +                 p ((SDROP::nat => (nat => bool) => nat => bool) n)))
  9.2484 +             ((prob::((nat => bool) => bool) => real) p))))"
  9.2485 +  by (import prob PROB_SDROP)
  9.2486 +
  9.2487 +lemma PROB_INTER_HALVES: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2488 + (%p::(nat => bool) => bool.
  9.2489 +     (op -->::bool => bool => bool)
  9.2490 +      ((measurable::((nat => bool) => bool) => bool) p)
  9.2491 +      ((op =::real => real => bool)
  9.2492 +        ((op +::real => real => real)
  9.2493 +          ((prob::((nat => bool) => bool) => real)
  9.2494 +            ((pred_set.INTER::((nat => bool) => bool)
  9.2495 +                              => ((nat => bool) => bool)
  9.2496 +                                 => (nat => bool) => bool)
  9.2497 +              (%x::nat => bool.
  9.2498 +                  (op =::bool => bool => bool)
  9.2499 +                   ((SHD::(nat => bool) => bool) x) (True::bool))
  9.2500 +              p))
  9.2501 +          ((prob::((nat => bool) => bool) => real)
  9.2502 +            ((pred_set.INTER::((nat => bool) => bool)
  9.2503 +                              => ((nat => bool) => bool)
  9.2504 +                                 => (nat => bool) => bool)
  9.2505 +              (%x::nat => bool.
  9.2506 +                  (op =::bool => bool => bool)
  9.2507 +                   ((SHD::(nat => bool) => bool) x) (False::bool))
  9.2508 +              p)))
  9.2509 +        ((prob::((nat => bool) => bool) => real) p)))"
  9.2510 +  by (import prob PROB_INTER_HALVES)
  9.2511 +
  9.2512 +lemma PROB_INTER_SHD: "(All::(bool => bool) => bool)
  9.2513 + (%b::bool.
  9.2514 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2515 +      (%p::(nat => bool) => bool.
  9.2516 +          (op -->::bool => bool => bool)
  9.2517 +           ((measurable::((nat => bool) => bool) => bool) p)
  9.2518 +           ((op =::real => real => bool)
  9.2519 +             ((prob::((nat => bool) => bool) => real)
  9.2520 +               ((pred_set.INTER::((nat => bool) => bool)
  9.2521 +                                 => ((nat => bool) => bool)
  9.2522 +                                    => (nat => bool) => bool)
  9.2523 +                 (%x::nat => bool.
  9.2524 +                     (op =::bool => bool => bool)
  9.2525 +                      ((SHD::(nat => bool) => bool) x) b)
  9.2526 +                 ((op o::((nat => bool) => bool)
  9.2527 +                         => ((nat => bool) => nat => bool)
  9.2528 +                            => (nat => bool) => bool)
  9.2529 +                   p (STL::(nat => bool) => nat => bool))))
  9.2530 +             ((op *::real => real => real)
  9.2531 +               ((op /::real => real => real) (1::real)
  9.2532 +                 ((number_of::bin => real)
  9.2533 +                   ((op BIT::bin => bool => bin)
  9.2534 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.2535 +                       (True::bool))
  9.2536 +                     (False::bool))))
  9.2537 +               ((prob::((nat => bool) => bool) => real) p)))))"
  9.2538 +  by (import prob PROB_INTER_SHD)
  9.2539 +
  9.2540 +lemma ALGEBRA_MEASURE_POS: "ALL l. 0 <= algebra_measure l"
  9.2541 +  by (import prob ALGEBRA_MEASURE_POS)
  9.2542 +
  9.2543 +lemma ALGEBRA_MEASURE_RANGE: "ALL l. 0 <= algebra_measure l & algebra_measure l <= 1"
  9.2544 +  by (import prob ALGEBRA_MEASURE_RANGE)
  9.2545 +
  9.2546 +lemma PROB_POS: "ALL p. 0 <= prob p"
  9.2547 +  by (import prob PROB_POS)
  9.2548 +
  9.2549 +lemma PROB_MAX: "ALL p. prob p <= 1"
  9.2550 +  by (import prob PROB_MAX)
  9.2551 +
  9.2552 +lemma PROB_RANGE: "ALL p. 0 <= prob p & prob p <= 1"
  9.2553 +  by (import prob PROB_RANGE)
  9.2554 +
  9.2555 +lemma ABS_PROB: "ALL p. abs (prob p) = prob p"
  9.2556 +  by (import prob ABS_PROB)
  9.2557 +
  9.2558 +lemma PROB_SHD: "ALL b. prob (%s. SHD s = b) = 1 / 2"
  9.2559 +  by (import prob PROB_SHD)
  9.2560 +
  9.2561 +lemma PROB_COMPL_LE1: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2562 + (%p::(nat => bool) => bool.
  9.2563 +     (All::(real => bool) => bool)
  9.2564 +      (%r::real.
  9.2565 +          (op -->::bool => bool => bool)
  9.2566 +           ((measurable::((nat => bool) => bool) => bool) p)
  9.2567 +           ((op =::bool => bool => bool)
  9.2568 +             ((op <=::real => real => bool)
  9.2569 +               ((prob::((nat => bool) => bool) => real)
  9.2570 +                 ((COMPL::((nat => bool) => bool) => (nat => bool) => bool)
  9.2571 +                   p))
  9.2572 +               r)
  9.2573 +             ((op <=::real => real => bool)
  9.2574 +               ((op -::real => real => real) (1::real) r)
  9.2575 +               ((prob::((nat => bool) => bool) => real) p)))))"
  9.2576 +  by (import prob PROB_COMPL_LE1)
  9.2577 +
  9.2578 +;end_setup
  9.2579 +
  9.2580 +;setup_theory prob_pseudo
  9.2581 +
  9.2582 +consts
  9.2583 +  pseudo_linear_hd :: "nat => bool" 
  9.2584 +
  9.2585 +defs
  9.2586 +  pseudo_linear_hd_primdef: "pseudo_linear_hd == EVEN"
  9.2587 +
  9.2588 +lemma pseudo_linear_hd_def: "pseudo_linear_hd = EVEN"
  9.2589 +  by (import prob_pseudo pseudo_linear_hd_def)
  9.2590 +
  9.2591 +consts
  9.2592 +  pseudo_linear_tl :: "nat => nat => nat => nat => nat" 
  9.2593 +
  9.2594 +defs
  9.2595 +  pseudo_linear_tl_primdef: "pseudo_linear_tl == %a b n x. (a * x + b) mod (2 * n + 1)"
  9.2596 +
  9.2597 +lemma pseudo_linear_tl_def: "ALL a b n x. pseudo_linear_tl a b n x = (a * x + b) mod (2 * n + 1)"
  9.2598 +  by (import prob_pseudo pseudo_linear_tl_def)
  9.2599 +
  9.2600 +lemma PSEUDO_LINEAR1_EXECUTE: "EX x. (ALL xa. SHD (x xa) = pseudo_linear_hd xa) &
  9.2601 +      (ALL xa.
  9.2602 +          STL (x xa) =
  9.2603 +          x (pseudo_linear_tl
  9.2604 +              (NUMERAL
  9.2605 +                (NUMERAL_BIT1
  9.2606 +                  (NUMERAL_BIT1
  9.2607 +                    (NUMERAL_BIT1
  9.2608 +                      (NUMERAL_BIT2
  9.2609 +                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
  9.2610 +              (NUMERAL
  9.2611 +                (NUMERAL_BIT1
  9.2612 +                  (NUMERAL_BIT1
  9.2613 +                    (NUMERAL_BIT1
  9.2614 +                      (NUMERAL_BIT1
  9.2615 +                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
  9.2616 +              (NUMERAL
  9.2617 +                (NUMERAL_BIT1
  9.2618 +                  (NUMERAL_BIT1
  9.2619 +                    (NUMERAL_BIT1
  9.2620 +                      (NUMERAL_BIT1
  9.2621 +                        (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
  9.2622 +              xa))"
  9.2623 +  by (import prob_pseudo PSEUDO_LINEAR1_EXECUTE)
  9.2624 +
  9.2625 +consts
  9.2626 +  pseudo_linear1 :: "nat => nat => bool" 
  9.2627 +
  9.2628 +specification (pseudo_linear1_primdef: pseudo_linear1) pseudo_linear1_def: "(ALL x. SHD (pseudo_linear1 x) = pseudo_linear_hd x) &
  9.2629 +(ALL x.
  9.2630 +    STL (pseudo_linear1 x) =
  9.2631 +    pseudo_linear1
  9.2632 +     (pseudo_linear_tl
  9.2633 +       (NUMERAL
  9.2634 +         (NUMERAL_BIT1
  9.2635 +           (NUMERAL_BIT1
  9.2636 +             (NUMERAL_BIT1
  9.2637 +               (NUMERAL_BIT2 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
  9.2638 +       (NUMERAL
  9.2639 +         (NUMERAL_BIT1
  9.2640 +           (NUMERAL_BIT1
  9.2641 +             (NUMERAL_BIT1
  9.2642 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
  9.2643 +       (NUMERAL
  9.2644 +         (NUMERAL_BIT1
  9.2645 +           (NUMERAL_BIT1
  9.2646 +             (NUMERAL_BIT1
  9.2647 +               (NUMERAL_BIT1 (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
  9.2648 +       x))"
  9.2649 +  by (import prob_pseudo pseudo_linear1_def)
  9.2650 +
  9.2651 +consts
  9.2652 +  pseudo :: "nat => nat => bool" 
  9.2653 +
  9.2654 +defs
  9.2655 +  pseudo_primdef: "pseudo == pseudo_linear1"
  9.2656 +
  9.2657 +lemma pseudo_def: "pseudo = pseudo_linear1"
  9.2658 +  by (import prob_pseudo pseudo_def)
  9.2659 +
  9.2660 +;end_setup
  9.2661 +
  9.2662 +;setup_theory prob_indep
  9.2663 +
  9.2664 +consts
  9.2665 +  indep_set :: "((nat => bool) => bool) => ((nat => bool) => bool) => bool" 
  9.2666 +
  9.2667 +defs
  9.2668 +  indep_set_primdef: "indep_set ==
  9.2669 +%p q. measurable p &
  9.2670 +      measurable q & prob (pred_set.INTER p q) = prob p * prob q"
  9.2671 +
  9.2672 +lemma indep_set_def: "ALL p q.
  9.2673 +   indep_set p q =
  9.2674 +   (measurable p &
  9.2675 +    measurable q & prob (pred_set.INTER p q) = prob p * prob q)"
  9.2676 +  by (import prob_indep indep_set_def)
  9.2677 +
  9.2678 +consts
  9.2679 +  alg_cover_set :: "bool list list => bool" 
  9.2680 +
  9.2681 +defs
  9.2682 +  alg_cover_set_primdef: "alg_cover_set ==
  9.2683 +%l. alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV"
  9.2684 +
  9.2685 +lemma alg_cover_set_def: "ALL l.
  9.2686 +   alg_cover_set l =
  9.2687 +   (alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV)"
  9.2688 +  by (import prob_indep alg_cover_set_def)
  9.2689 +
  9.2690 +consts
  9.2691 +  alg_cover :: "bool list list => (nat => bool) => bool list" 
  9.2692 +
  9.2693 +defs
  9.2694 +  alg_cover_primdef: "alg_cover == %l x. SOME b. b mem l & alg_embed b x"
  9.2695 +
  9.2696 +lemma alg_cover_def: "ALL l x. alg_cover l x = (SOME b. b mem l & alg_embed b x)"
  9.2697 +  by (import prob_indep alg_cover_def)
  9.2698 +
  9.2699 +consts
  9.2700 +  indep :: "((nat => bool) => 'a * (nat => bool)) => bool" 
  9.2701 +
  9.2702 +defs
  9.2703 +  indep_primdef: "indep ==
  9.2704 +%f. EX l r.
  9.2705 +       alg_cover_set l &
  9.2706 +       (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s)))"
  9.2707 +
  9.2708 +lemma indep_def: "ALL f.
  9.2709 +   indep f =
  9.2710 +   (EX l r.
  9.2711 +       alg_cover_set l &
  9.2712 +       (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s))))"
  9.2713 +  by (import prob_indep indep_def)
  9.2714 +
  9.2715 +lemma INDEP_SET_BASIC: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2716 + (%p::(nat => bool) => bool.
  9.2717 +     (op -->::bool => bool => bool)
  9.2718 +      ((measurable::((nat => bool) => bool) => bool) p)
  9.2719 +      ((op &::bool => bool => bool)
  9.2720 +        ((indep_set::((nat => bool) => bool)
  9.2721 +                     => ((nat => bool) => bool) => bool)
  9.2722 +          (EMPTY::(nat => bool) => bool) p)
  9.2723 +        ((indep_set::((nat => bool) => bool)
  9.2724 +                     => ((nat => bool) => bool) => bool)
  9.2725 +          (pred_set.UNIV::(nat => bool) => bool) p)))"
  9.2726 +  by (import prob_indep INDEP_SET_BASIC)
  9.2727 +
  9.2728 +lemma INDEP_SET_SYM: "ALL p q. indep_set p q = indep_set p q"
  9.2729 +  by (import prob_indep INDEP_SET_SYM)
  9.2730 +
  9.2731 +lemma INDEP_SET_DISJOINT_DECOMP: "(All::(((nat => bool) => bool) => bool) => bool)
  9.2732 + (%p::(nat => bool) => bool.
  9.2733 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.2734 +      (%q::(nat => bool) => bool.
  9.2735 +          (All::(((nat => bool) => bool) => bool) => bool)
  9.2736 +           (%r::(nat => bool) => bool.
  9.2737 +               (op -->::bool => bool => bool)
  9.2738 +                ((op &::bool => bool => bool)
  9.2739 +                  ((indep_set::((nat => bool) => bool)
  9.2740 +                               => ((nat => bool) => bool) => bool)
  9.2741 +                    p r)
  9.2742 +                  ((op &::bool => bool => bool)
  9.2743 +                    ((indep_set::((nat => bool) => bool)
  9.2744 +                                 => ((nat => bool) => bool) => bool)
  9.2745 +                      q r)
  9.2746 +                    ((op =::((nat => bool) => bool)
  9.2747 +                            => ((nat => bool) => bool) => bool)
  9.2748 +                      ((pred_set.INTER::((nat => bool) => bool)
  9.2749 +  => ((nat => bool) => bool) => (nat => bool) => bool)
  9.2750 +                        p q)
  9.2751 +                      (EMPTY::(nat => bool) => bool))))
  9.2752 +                ((indep_set::((nat => bool) => bool)
  9.2753 +                             => ((nat => bool) => bool) => bool)
  9.2754 +                  ((pred_set.UNION::((nat => bool) => bool)
  9.2755 +                                    => ((nat => bool) => bool)
  9.2756 + => (nat => bool) => bool)
  9.2757 +                    p q)
  9.2758 +                  r))))"
  9.2759 +  by (import prob_indep INDEP_SET_DISJOINT_DECOMP)
  9.2760 +
  9.2761 +lemma ALG_COVER_SET_BASIC: "~ alg_cover_set [] & alg_cover_set [[]] & alg_cover_set [[True], [False]]"
  9.2762 +  by (import prob_indep ALG_COVER_SET_BASIC)
  9.2763 +
  9.2764 +lemma ALG_COVER_WELL_DEFINED: "(All::(bool list list => bool) => bool)
  9.2765 + (%l::bool list list.
  9.2766 +     (All::((nat => bool) => bool) => bool)
  9.2767 +      (%x::nat => bool.
  9.2768 +          (op -->::bool => bool => bool)
  9.2769 +           ((alg_cover_set::bool list list => bool) l)
  9.2770 +           ((op &::bool => bool => bool)
  9.2771 +             ((op mem::bool list => bool list list => bool)
  9.2772 +               ((alg_cover::bool list list => (nat => bool) => bool list) l
  9.2773 +                 x)
  9.2774 +               l)
  9.2775 +             ((alg_embed::bool list => (nat => bool) => bool)
  9.2776 +               ((alg_cover::bool list list => (nat => bool) => bool list) l
  9.2777 +                 x)
  9.2778 +               x))))"
  9.2779 +  by (import prob_indep ALG_COVER_WELL_DEFINED)
  9.2780 +
  9.2781 +lemma ALG_COVER_UNIV: "alg_cover [[]] = K []"
  9.2782 +  by (import prob_indep ALG_COVER_UNIV)
  9.2783 +
  9.2784 +lemma MAP_CONS_TL_FILTER: "(All::(bool list list => bool) => bool)
  9.2785 + (%l::bool list list.
  9.2786 +     (All::(bool => bool) => bool)
  9.2787 +      (%b::bool.
  9.2788 +          (op -->::bool => bool => bool)
  9.2789 +           ((Not::bool => bool)
  9.2790 +             ((op mem::bool list => bool list list => bool) ([]::bool list)
  9.2791 +               l))
  9.2792 +           ((op =::bool list list => bool list list => bool)
  9.2793 +             ((map::(bool list => bool list)
  9.2794 +                    => bool list list => bool list list)
  9.2795 +               ((op #::bool => bool list => bool list) b)
  9.2796 +               ((map::(bool list => bool list)
  9.2797 +                      => bool list list => bool list list)
  9.2798 +                 (tl::bool list => bool list)
  9.2799 +                 ((filter::(bool list => bool)
  9.2800 +                           => bool list list => bool list list)
  9.2801 +                   (%x::bool list.
  9.2802 +                       (op =::bool => bool => bool)
  9.2803 +                        ((hd::bool list => bool) x) b)
  9.2804 +                   l)))
  9.2805 +             ((filter::(bool list => bool)
  9.2806 +                       => bool list list => bool list list)
  9.2807 +               (%x::bool list.
  9.2808 +                   (op =::bool => bool => bool) ((hd::bool list => bool) x)
  9.2809 +                    b)
  9.2810 +               l))))"
  9.2811 +  by (import prob_indep MAP_CONS_TL_FILTER)
  9.2812 +
  9.2813 +lemma ALG_COVER_SET_CASES_THM: "ALL l.
  9.2814 +   alg_cover_set l =
  9.2815 +   (l = [[]] |
  9.2816 +    (EX x xa.
  9.2817 +        alg_cover_set x &
  9.2818 +        alg_cover_set xa & l = map (op # True) x @ map (op # False) xa))"
  9.2819 +  by (import prob_indep ALG_COVER_SET_CASES_THM)
  9.2820 +
  9.2821 +lemma ALG_COVER_SET_CASES: "(All::((bool list list => bool) => bool) => bool)
  9.2822 + (%P::bool list list => bool.
  9.2823 +     (op -->::bool => bool => bool)
  9.2824 +      ((op &::bool => bool => bool)
  9.2825 +        (P ((op #::bool list => bool list list => bool list list)
  9.2826 +             ([]::bool list) ([]::bool list list)))
  9.2827 +        ((All::(bool list list => bool) => bool)
  9.2828 +          (%l1::bool list list.
  9.2829 +              (All::(bool list list => bool) => bool)
  9.2830 +               (%l2::bool list list.
  9.2831 +                   (op -->::bool => bool => bool)
  9.2832 +                    ((op &::bool => bool => bool)
  9.2833 +                      ((alg_cover_set::bool list list => bool) l1)
  9.2834 +                      ((op &::bool => bool => bool)
  9.2835 +                        ((alg_cover_set::bool list list => bool) l2)
  9.2836 +                        ((alg_cover_set::bool list list => bool)
  9.2837 +                          ((op @::bool list list
  9.2838 +                                  => bool list list => bool list list)
  9.2839 +                            ((map::(bool list => bool list)
  9.2840 +                                   => bool list list => bool list list)
  9.2841 +                              ((op #::bool => bool list => bool list)
  9.2842 +                                (True::bool))
  9.2843 +                              l1)
  9.2844 +                            ((map::(bool list => bool list)
  9.2845 +                                   => bool list list => bool list list)
  9.2846 +                              ((op #::bool => bool list => bool list)
  9.2847 +                                (False::bool))
  9.2848 +                              l2)))))
  9.2849 +                    (P ((op @::bool list list
  9.2850 +                               => bool list list => bool list list)
  9.2851 +                         ((map::(bool list => bool list)
  9.2852 +                                => bool list list => bool list list)
  9.2853 +                           ((op #::bool => bool list => bool list)
  9.2854 +                             (True::bool))
  9.2855 +                           l1)
  9.2856 +                         ((map::(bool list => bool list)
  9.2857 +                                => bool list list => bool list list)
  9.2858 +                           ((op #::bool => bool list => bool list)
  9.2859 +                             (False::bool))
  9.2860 +                           l2)))))))
  9.2861 +      ((All::(bool list list => bool) => bool)
  9.2862 +        (%l::bool list list.
  9.2863 +            (op -->::bool => bool => bool)
  9.2864 +             ((alg_cover_set::bool list list => bool) l) (P l))))"
  9.2865 +  by (import prob_indep ALG_COVER_SET_CASES)
  9.2866 +
  9.2867 +lemma ALG_COVER_SET_INDUCTION: "(All::((bool list list => bool) => bool) => bool)
  9.2868 + (%P::bool list list => bool.
  9.2869 +     (op -->::bool => bool => bool)
  9.2870 +      ((op &::bool => bool => bool)
  9.2871 +        (P ((op #::bool list => bool list list => bool list list)
  9.2872 +             ([]::bool list) ([]::bool list list)))
  9.2873 +        ((All::(bool list list => bool) => bool)
  9.2874 +          (%l1::bool list list.
  9.2875 +              (All::(bool list list => bool) => bool)
  9.2876 +               (%l2::bool list list.
  9.2877 +                   (op -->::bool => bool => bool)
  9.2878 +                    ((op &::bool => bool => bool)
  9.2879 +                      ((alg_cover_set::bool list list => bool) l1)
  9.2880 +                      ((op &::bool => bool => bool)
  9.2881 +                        ((alg_cover_set::bool list list => bool) l2)
  9.2882 +                        ((op &::bool => bool => bool) (P l1)
  9.2883 +                          ((op &::bool => bool => bool) (P l2)
  9.2884 +                            ((alg_cover_set::bool list list => bool)
  9.2885 +                              ((op @::bool list list
  9.2886 +=> bool list list => bool list list)
  9.2887 +                                ((map::(bool list => bool list)
  9.2888 + => bool list list => bool list list)
  9.2889 +                                  ((op #::bool => bool list => bool list)
  9.2890 +                                    (True::bool))
  9.2891 +                                  l1)
  9.2892 +                                ((map::(bool list => bool list)
  9.2893 + => bool list list => bool list list)
  9.2894 +                                  ((op #::bool => bool list => bool list)
  9.2895 +                                    (False::bool))
  9.2896 +                                  l2)))))))
  9.2897 +                    (P ((op @::bool list list
  9.2898 +                               => bool list list => bool list list)
  9.2899 +                         ((map::(bool list => bool list)
  9.2900 +                                => bool list list => bool list list)
  9.2901 +                           ((op #::bool => bool list => bool list)
  9.2902 +                             (True::bool))
  9.2903 +                           l1)
  9.2904 +                         ((map::(bool list => bool list)
  9.2905 +                                => bool list list => bool list list)
  9.2906 +                           ((op #::bool => bool list => bool list)
  9.2907 +                             (False::bool))
  9.2908 +                           l2)))))))
  9.2909 +      ((All::(bool list list => bool) => bool)
  9.2910 +        (%l::bool list list.
  9.2911 +            (op -->::bool => bool => bool)
  9.2912 +             ((alg_cover_set::bool list list => bool) l) (P l))))"
  9.2913 +  by (import prob_indep ALG_COVER_SET_INDUCTION)
  9.2914 +
  9.2915 +lemma ALG_COVER_EXISTS_UNIQUE: "(All::(bool list list => bool) => bool)
  9.2916 + (%l::bool list list.
  9.2917 +     (op -->::bool => bool => bool)
  9.2918 +      ((alg_cover_set::bool list list => bool) l)
  9.2919 +      ((All::((nat => bool) => bool) => bool)
  9.2920 +        (%s::nat => bool.
  9.2921 +            (Ex1::(bool list => bool) => bool)
  9.2922 +             (%x::bool list.
  9.2923 +                 (op &::bool => bool => bool)
  9.2924 +                  ((op mem::bool list => bool list list => bool) x l)
  9.2925 +                  ((alg_embed::bool list => (nat => bool) => bool) x s)))))"
  9.2926 +  by (import prob_indep ALG_COVER_EXISTS_UNIQUE)
  9.2927 +
  9.2928 +lemma ALG_COVER_UNIQUE: "(All::(bool list list => bool) => bool)
  9.2929 + (%l::bool list list.
  9.2930 +     (All::(bool list => bool) => bool)
  9.2931 +      (%x::bool list.
  9.2932 +          (All::((nat => bool) => bool) => bool)
  9.2933 +           (%s::nat => bool.
  9.2934 +               (op -->::bool => bool => bool)
  9.2935 +                ((op &::bool => bool => bool)
  9.2936 +                  ((alg_cover_set::bool list list => bool) l)
  9.2937 +                  ((op &::bool => bool => bool)
  9.2938 +                    ((op mem::bool list => bool list list => bool) x l)
  9.2939 +                    ((alg_embed::bool list => (nat => bool) => bool) x s)))
  9.2940 +                ((op =::bool list => bool list => bool)
  9.2941 +                  ((alg_cover::bool list list => (nat => bool) => bool list)
  9.2942 +                    l s)
  9.2943 +                  x))))"
  9.2944 +  by (import prob_indep ALG_COVER_UNIQUE)
  9.2945 +
  9.2946 +lemma ALG_COVER_STEP: "(All::(bool list list => bool) => bool)
  9.2947 + (%l1::bool list list.
  9.2948 +     (All::(bool list list => bool) => bool)
  9.2949 +      (%l2::bool list list.
  9.2950 +          (All::(bool => bool) => bool)
  9.2951 +           (%h::bool.
  9.2952 +               (All::((nat => bool) => bool) => bool)
  9.2953 +                (%t::nat => bool.
  9.2954 +                    (op -->::bool => bool => bool)
  9.2955 +                     ((op &::bool => bool => bool)
  9.2956 +                       ((alg_cover_set::bool list list => bool) l1)
  9.2957 +                       ((alg_cover_set::bool list list => bool) l2))
  9.2958 +                     ((op =::bool list => bool list => bool)
  9.2959 +                       ((alg_cover::bool list list
  9.2960 +                                    => (nat => bool) => bool list)
  9.2961 +                         ((op @::bool list list
  9.2962 +                                 => bool list list => bool list list)
  9.2963 +                           ((map::(bool list => bool list)
  9.2964 +                                  => bool list list => bool list list)
  9.2965 +                             ((op #::bool => bool list => bool list)
  9.2966 +                               (True::bool))
  9.2967 +                             l1)
  9.2968 +                           ((map::(bool list => bool list)
  9.2969 +                                  => bool list list => bool list list)
  9.2970 +                             ((op #::bool => bool list => bool list)
  9.2971 +                               (False::bool))
  9.2972 +                             l2))
  9.2973 +                         ((SCONS::bool => (nat => bool) => nat => bool) h
  9.2974 +                           t))
  9.2975 +                       ((If::bool => bool list => bool list => bool list) h
  9.2976 +                         ((op #::bool => bool list => bool list)
  9.2977 +                           (True::bool)
  9.2978 +                           ((alg_cover::bool list list
  9.2979 +  => (nat => bool) => bool list)
  9.2980 +                             l1 t))
  9.2981 +                         ((op #::bool => bool list => bool list)
  9.2982 +                           (False::bool)
  9.2983 +                           ((alg_cover::bool list list
  9.2984 +  => (nat => bool) => bool list)
  9.2985 +                             l2 t))))))))"
  9.2986 +  by (import prob_indep ALG_COVER_STEP)
  9.2987 +
  9.2988 +lemma ALG_COVER_HEAD: "(All::(bool list list => bool) => bool)
  9.2989 + (%l::bool list list.
  9.2990 +     (op -->::bool => bool => bool)
  9.2991 +      ((alg_cover_set::bool list list => bool) l)
  9.2992 +      ((All::((bool list => bool) => bool) => bool)
  9.2993 +        (%f::bool list => bool.
  9.2994 +            (op =::((nat => bool) => bool)
  9.2995 +                   => ((nat => bool) => bool) => bool)
  9.2996 +             ((op o::(bool list => bool)
  9.2997 +                     => ((nat => bool) => bool list)
  9.2998 +                        => (nat => bool) => bool)
  9.2999 +               f ((alg_cover::bool list list => (nat => bool) => bool list)
  9.3000 +                   l))
  9.3001 +             ((algebra_embed::bool list list => (nat => bool) => bool)
  9.3002 +               ((filter::(bool list => bool)
  9.3003 +                         => bool list list => bool list list)
  9.3004 +                 f l)))))"
  9.3005 +  by (import prob_indep ALG_COVER_HEAD)
  9.3006 +
  9.3007 +lemma ALG_COVER_TAIL_STEP: "(All::(bool list list => bool) => bool)
  9.3008 + (%l1::bool list list.
  9.3009 +     (All::(bool list list => bool) => bool)
  9.3010 +      (%l2::bool list list.
  9.3011 +          (All::(((nat => bool) => bool) => bool) => bool)
  9.3012 +           (%q::(nat => bool) => bool.
  9.3013 +               (op -->::bool => bool => bool)
  9.3014 +                ((op &::bool => bool => bool)
  9.3015 +                  ((alg_cover_set::bool list list => bool) l1)
  9.3016 +                  ((alg_cover_set::bool list list => bool) l2))
  9.3017 +                ((op =::((nat => bool) => bool)
  9.3018 +                        => ((nat => bool) => bool) => bool)
  9.3019 +                  ((op o::((nat => bool) => bool)
  9.3020 +                          => ((nat => bool) => nat => bool)
  9.3021 +                             => (nat => bool) => bool)
  9.3022 +                    q (%x::nat => bool.
  9.3023 +                          (SDROP::nat => (nat => bool) => nat => bool)
  9.3024 +                           ((size::bool list => nat)
  9.3025 +                             ((alg_cover::bool list list
  9.3026 +    => (nat => bool) => bool list)
  9.3027 +                               ((op @::bool list list
  9.3028 + => bool list list => bool list list)
  9.3029 +                                 ((map::(bool list => bool list)
  9.3030 +  => bool list list => bool list list)
  9.3031 +                                   ((op #::bool => bool list => bool list)
  9.3032 +                                     (True::bool))
  9.3033 +                                   l1)
  9.3034 +                                 ((map::(bool list => bool list)
  9.3035 +  => bool list list => bool list list)
  9.3036 +                                   ((op #::bool => bool list => bool list)
  9.3037 +                                     (False::bool))
  9.3038 +                                   l2))
  9.3039 +                               x))
  9.3040 +                           x))
  9.3041 +                  ((pred_set.UNION::((nat => bool) => bool)
  9.3042 +                                    => ((nat => bool) => bool)
  9.3043 + => (nat => bool) => bool)
  9.3044 +                    ((pred_set.INTER::((nat => bool) => bool)
  9.3045 +=> ((nat => bool) => bool) => (nat => bool) => bool)
  9.3046 +                      (%x::nat => bool.
  9.3047 +                          (op =::bool => bool => bool)
  9.3048 +                           ((SHD::(nat => bool) => bool) x) (True::bool))
  9.3049 +                      ((op o::((nat => bool) => bool)
  9.3050 +                              => ((nat => bool) => nat => bool)
  9.3051 +                                 => (nat => bool) => bool)
  9.3052 +                        q ((op o::((nat => bool) => nat => bool)
  9.3053 +                                  => ((nat => bool) => nat => bool)
  9.3054 +                                     => (nat => bool) => nat => bool)
  9.3055 +                            (%x::nat => bool.
  9.3056 +                                (SDROP::nat => (nat => bool) => nat => bool)
  9.3057 +                                 ((size::bool list => nat)
  9.3058 +                                   ((alg_cover::bool list list
  9.3059 +          => (nat => bool) => bool list)
  9.3060 +                                     l1 x))
  9.3061 +                                 x)
  9.3062 +                            (STL::(nat => bool) => nat => bool))))
  9.3063 +                    ((pred_set.INTER::((nat => bool) => bool)
  9.3064 +=> ((nat => bool) => bool) => (nat => bool) => bool)
  9.3065 +                      (%x::nat => bool.
  9.3066 +                          (op =::bool => bool => bool)
  9.3067 +                           ((SHD::(nat => bool) => bool) x) (False::bool))
  9.3068 +                      ((op o::((nat => bool) => bool)
  9.3069 +                              => ((nat => bool) => nat => bool)
  9.3070 +                                 => (nat => bool) => bool)
  9.3071 +                        q ((op o::((nat => bool) => nat => bool)
  9.3072 +                                  => ((nat => bool) => nat => bool)
  9.3073 +                                     => (nat => bool) => nat => bool)
  9.3074 +                            (%x::nat => bool.
  9.3075 +                                (SDROP::nat => (nat => bool) => nat => bool)
  9.3076 +                                 ((size::bool list => nat)
  9.3077 +                                   ((alg_cover::bool list list
  9.3078 +          => (nat => bool) => bool list)
  9.3079 +                                     l2 x))
  9.3080 +                                 x)
  9.3081 +                            (STL::(nat => bool) => nat => bool)))))))))"
  9.3082 +  by (import prob_indep ALG_COVER_TAIL_STEP)
  9.3083 +
  9.3084 +lemma ALG_COVER_TAIL_MEASURABLE: "(All::(bool list list => bool) => bool)
  9.3085 + (%l::bool list list.
  9.3086 +     (op -->::bool => bool => bool)
  9.3087 +      ((alg_cover_set::bool list list => bool) l)
  9.3088 +      ((All::(((nat => bool) => bool) => bool) => bool)
  9.3089 +        (%q::(nat => bool) => bool.
  9.3090 +            (op =::bool => bool => bool)
  9.3091 +             ((measurable::((nat => bool) => bool) => bool)
  9.3092 +               ((op o::((nat => bool) => bool)
  9.3093 +                       => ((nat => bool) => nat => bool)
  9.3094 +                          => (nat => bool) => bool)
  9.3095 +                 q (%x::nat => bool.
  9.3096 +                       (SDROP::nat => (nat => bool) => nat => bool)
  9.3097 +                        ((size::bool list => nat)
  9.3098 +                          ((alg_cover::bool list list
  9.3099 + => (nat => bool) => bool list)
  9.3100 +                            l x))
  9.3101 +                        x)))
  9.3102 +             ((measurable::((nat => bool) => bool) => bool) q))))"
  9.3103 +  by (import prob_indep ALG_COVER_TAIL_MEASURABLE)
  9.3104 +
  9.3105 +lemma ALG_COVER_TAIL_PROB: "(All::(bool list list => bool) => bool)
  9.3106 + (%l::bool list list.
  9.3107 +     (op -->::bool => bool => bool)
  9.3108 +      ((alg_cover_set::bool list list => bool) l)
  9.3109 +      ((All::(((nat => bool) => bool) => bool) => bool)
  9.3110 +        (%q::(nat => bool) => bool.
  9.3111 +            (op -->::bool => bool => bool)
  9.3112 +             ((measurable::((nat => bool) => bool) => bool) q)
  9.3113 +             ((op =::real => real => bool)
  9.3114 +               ((prob::((nat => bool) => bool) => real)
  9.3115 +                 ((op o::((nat => bool) => bool)
  9.3116 +                         => ((nat => bool) => nat => bool)
  9.3117 +                            => (nat => bool) => bool)
  9.3118 +                   q (%x::nat => bool.
  9.3119 +                         (SDROP::nat => (nat => bool) => nat => bool)
  9.3120 +                          ((size::bool list => nat)
  9.3121 +                            ((alg_cover::bool list list
  9.3122 +   => (nat => bool) => bool list)
  9.3123 +                              l x))
  9.3124 +                          x)))
  9.3125 +               ((prob::((nat => bool) => bool) => real) q)))))"
  9.3126 +  by (import prob_indep ALG_COVER_TAIL_PROB)
  9.3127 +
  9.3128 +lemma INDEP_INDEP_SET_LEMMA: "(All::(bool list list => bool) => bool)
  9.3129 + (%l::bool list list.
  9.3130 +     (op -->::bool => bool => bool)
  9.3131 +      ((alg_cover_set::bool list list => bool) l)
  9.3132 +      ((All::(((nat => bool) => bool) => bool) => bool)
  9.3133 +        (%q::(nat => bool) => bool.
  9.3134 +            (op -->::bool => bool => bool)
  9.3135 +             ((measurable::((nat => bool) => bool) => bool) q)
  9.3136 +             ((All::(bool list => bool) => bool)
  9.3137 +               (%x::bool list.
  9.3138 +                   (op -->::bool => bool => bool)
  9.3139 +                    ((op mem::bool list => bool list list => bool) x l)
  9.3140 +                    ((op =::real => real => bool)
  9.3141 +                      ((prob::((nat => bool) => bool) => real)
  9.3142 +                        ((pred_set.INTER::((nat => bool) => bool)
  9.3143 +    => ((nat => bool) => bool) => (nat => bool) => bool)
  9.3144 +                          ((alg_embed::bool list => (nat => bool) => bool)
  9.3145 +                            x)
  9.3146 +                          ((op o::((nat => bool) => bool)
  9.3147 +                                  => ((nat => bool) => nat => bool)
  9.3148 +                                     => (nat => bool) => bool)
  9.3149 +                            q (%x::nat => bool.
  9.3150 +                                  (SDROP::nat
  9.3151 +    => (nat => bool) => nat => bool)
  9.3152 +                                   ((size::bool list => nat)
  9.3153 +                                     ((alg_cover::bool list list
  9.3154 +            => (nat => bool) => bool list)
  9.3155 + l x))
  9.3156 +                                   x))))
  9.3157 +                      ((op *::real => real => real)
  9.3158 +                        ((op ^::real => nat => real)
  9.3159 +                          ((op /::real => real => real) (1::real)
  9.3160 +                            ((number_of::bin => real)
  9.3161 +                              ((op BIT::bin => bool => bin)
  9.3162 +                                ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3163 +                                  (True::bool))
  9.3164 +                                (False::bool))))
  9.3165 +                          ((size::bool list => nat) x))
  9.3166 +                        ((prob::((nat => bool) => bool) => real) q))))))))"
  9.3167 +  by (import prob_indep INDEP_INDEP_SET_LEMMA)
  9.3168 +
  9.3169 +lemma INDEP_SET_LIST: "(All::(((nat => bool) => bool) => bool) => bool)
  9.3170 + (%q::(nat => bool) => bool.
  9.3171 +     (All::(bool list list => bool) => bool)
  9.3172 +      (%l::bool list list.
  9.3173 +          (op -->::bool => bool => bool)
  9.3174 +           ((op &::bool => bool => bool)
  9.3175 +             ((alg_sorted::bool list list => bool) l)
  9.3176 +             ((op &::bool => bool => bool)
  9.3177 +               ((alg_prefixfree::bool list list => bool) l)
  9.3178 +               ((op &::bool => bool => bool)
  9.3179 +                 ((measurable::((nat => bool) => bool) => bool) q)
  9.3180 +                 ((All::(bool list => bool) => bool)
  9.3181 +                   (%x::bool list.
  9.3182 +                       (op -->::bool => bool => bool)
  9.3183 +                        ((op mem::bool list => bool list list => bool) x l)
  9.3184 +                        ((indep_set::((nat => bool) => bool)
  9.3185 +                                     => ((nat => bool) => bool) => bool)
  9.3186 +                          ((alg_embed::bool list => (nat => bool) => bool)
  9.3187 +                            x)
  9.3188 +                          q))))))
  9.3189 +           ((indep_set::((nat => bool) => bool)
  9.3190 +                        => ((nat => bool) => bool) => bool)
  9.3191 +             ((algebra_embed::bool list list => (nat => bool) => bool) l)
  9.3192 +             q)))"
  9.3193 +  by (import prob_indep INDEP_SET_LIST)
  9.3194 +
  9.3195 +lemma INDEP_INDEP_SET: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
  9.3196 + (%f::(nat => bool) => 'a * (nat => bool).
  9.3197 +     (All::(('a => bool) => bool) => bool)
  9.3198 +      (%p::'a => bool.
  9.3199 +          (All::(((nat => bool) => bool) => bool) => bool)
  9.3200 +           (%q::(nat => bool) => bool.
  9.3201 +               (op -->::bool => bool => bool)
  9.3202 +                ((op &::bool => bool => bool)
  9.3203 +                  ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
  9.3204 +                  ((measurable::((nat => bool) => bool) => bool) q))
  9.3205 +                ((indep_set::((nat => bool) => bool)
  9.3206 +                             => ((nat => bool) => bool) => bool)
  9.3207 +                  ((op o::('a => bool)
  9.3208 +                          => ((nat => bool) => 'a) => (nat => bool) => bool)
  9.3209 +                    p ((op o::('a * (nat => bool) => 'a)
  9.3210 +                              => ((nat => bool) => 'a * (nat => bool))
  9.3211 +                                 => (nat => bool) => 'a)
  9.3212 +                        (fst::'a * (nat => bool) => 'a) f))
  9.3213 +                  ((op o::((nat => bool) => bool)
  9.3214 +                          => ((nat => bool) => nat => bool)
  9.3215 +                             => (nat => bool) => bool)
  9.3216 +                    q ((op o::('a * (nat => bool) => nat => bool)
  9.3217 +                              => ((nat => bool) => 'a * (nat => bool))
  9.3218 +                                 => (nat => bool) => nat => bool)
  9.3219 +                        (snd::'a * (nat => bool) => nat => bool) f))))))"
  9.3220 +  by (import prob_indep INDEP_INDEP_SET)
  9.3221 +
  9.3222 +lemma INDEP_UNIT: "ALL x. indep (UNIT x)"
  9.3223 +  by (import prob_indep INDEP_UNIT)
  9.3224 +
  9.3225 +lemma INDEP_SDEST: "indep SDEST"
  9.3226 +  by (import prob_indep INDEP_SDEST)
  9.3227 +
  9.3228 +lemma BIND_STEP: "ALL f. BIND SDEST (%k. f o SCONS k) = f"
  9.3229 +  by (import prob_indep BIND_STEP)
  9.3230 +
  9.3231 +lemma INDEP_BIND_SDEST: "(All::((bool => (nat => bool) => 'a * (nat => bool)) => bool) => bool)
  9.3232 + (%f::bool => (nat => bool) => 'a * (nat => bool).
  9.3233 +     (op -->::bool => bool => bool)
  9.3234 +      ((All::(bool => bool) => bool)
  9.3235 +        (%x::bool.
  9.3236 +            (indep::((nat => bool) => 'a * (nat => bool)) => bool) (f x)))
  9.3237 +      ((indep::((nat => bool) => 'a * (nat => bool)) => bool)
  9.3238 +        ((BIND::((nat => bool) => bool * (nat => bool))
  9.3239 +                => (bool => (nat => bool) => 'a * (nat => bool))
  9.3240 +                   => (nat => bool) => 'a * (nat => bool))
  9.3241 +          (SDEST::(nat => bool) => bool * (nat => bool)) f)))"
  9.3242 +  by (import prob_indep INDEP_BIND_SDEST)
  9.3243 +
  9.3244 +lemma INDEP_BIND: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
  9.3245 + (%f::(nat => bool) => 'a * (nat => bool).
  9.3246 +     (All::(('a => (nat => bool) => 'b * (nat => bool)) => bool) => bool)
  9.3247 +      (%g::'a => (nat => bool) => 'b * (nat => bool).
  9.3248 +          (op -->::bool => bool => bool)
  9.3249 +           ((op &::bool => bool => bool)
  9.3250 +             ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
  9.3251 +             ((All::('a => bool) => bool)
  9.3252 +               (%x::'a.
  9.3253 +                   (indep::((nat => bool) => 'b * (nat => bool)) => bool)
  9.3254 +                    (g x))))
  9.3255 +           ((indep::((nat => bool) => 'b * (nat => bool)) => bool)
  9.3256 +             ((BIND::((nat => bool) => 'a * (nat => bool))
  9.3257 +                     => ('a => (nat => bool) => 'b * (nat => bool))
  9.3258 +                        => (nat => bool) => 'b * (nat => bool))
  9.3259 +               f g))))"
  9.3260 +  by (import prob_indep INDEP_BIND)
  9.3261 +
  9.3262 +lemma INDEP_PROB: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
  9.3263 + (%f::(nat => bool) => 'a * (nat => bool).
  9.3264 +     (All::(('a => bool) => bool) => bool)
  9.3265 +      (%p::'a => bool.
  9.3266 +          (All::(((nat => bool) => bool) => bool) => bool)
  9.3267 +           (%q::(nat => bool) => bool.
  9.3268 +               (op -->::bool => bool => bool)
  9.3269 +                ((op &::bool => bool => bool)
  9.3270 +                  ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
  9.3271 +                  ((measurable::((nat => bool) => bool) => bool) q))
  9.3272 +                ((op =::real => real => bool)
  9.3273 +                  ((prob::((nat => bool) => bool) => real)
  9.3274 +                    ((pred_set.INTER::((nat => bool) => bool)
  9.3275 +=> ((nat => bool) => bool) => (nat => bool) => bool)
  9.3276 +                      ((op o::('a => bool)
  9.3277 +                              => ((nat => bool) => 'a)
  9.3278 +                                 => (nat => bool) => bool)
  9.3279 +                        p ((op o::('a * (nat => bool) => 'a)
  9.3280 +                                  => ((nat => bool) => 'a * (nat => bool))
  9.3281 +                                     => (nat => bool) => 'a)
  9.3282 +                            (fst::'a * (nat => bool) => 'a) f))
  9.3283 +                      ((op o::((nat => bool) => bool)
  9.3284 +                              => ((nat => bool) => nat => bool)
  9.3285 +                                 => (nat => bool) => bool)
  9.3286 +                        q ((op o::('a * (nat => bool) => nat => bool)
  9.3287 +                                  => ((nat => bool) => 'a * (nat => bool))
  9.3288 +                                     => (nat => bool) => nat => bool)
  9.3289 +                            (snd::'a * (nat => bool) => nat => bool) f))))
  9.3290 +                  ((op *::real => real => real)
  9.3291 +                    ((prob::((nat => bool) => bool) => real)
  9.3292 +                      ((op o::('a => bool)
  9.3293 +                              => ((nat => bool) => 'a)
  9.3294 +                                 => (nat => bool) => bool)
  9.3295 +                        p ((op o::('a * (nat => bool) => 'a)
  9.3296 +                                  => ((nat => bool) => 'a * (nat => bool))
  9.3297 +                                     => (nat => bool) => 'a)
  9.3298 +                            (fst::'a * (nat => bool) => 'a) f)))
  9.3299 +                    ((prob::((nat => bool) => bool) => real) q))))))"
  9.3300 +  by (import prob_indep INDEP_PROB)
  9.3301 +
  9.3302 +lemma INDEP_MEASURABLE1: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
  9.3303 + (%f::(nat => bool) => 'a * (nat => bool).
  9.3304 +     (All::(('a => bool) => bool) => bool)
  9.3305 +      (%p::'a => bool.
  9.3306 +          (op -->::bool => bool => bool)
  9.3307 +           ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
  9.3308 +           ((measurable::((nat => bool) => bool) => bool)
  9.3309 +             ((op o::('a => bool)
  9.3310 +                     => ((nat => bool) => 'a) => (nat => bool) => bool)
  9.3311 +               p ((op o::('a * (nat => bool) => 'a)
  9.3312 +                         => ((nat => bool) => 'a * (nat => bool))
  9.3313 +                            => (nat => bool) => 'a)
  9.3314 +                   (fst::'a * (nat => bool) => 'a) f)))))"
  9.3315 +  by (import prob_indep INDEP_MEASURABLE1)
  9.3316 +
  9.3317 +lemma INDEP_MEASURABLE2: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
  9.3318 + (%f::(nat => bool) => 'a * (nat => bool).
  9.3319 +     (All::(((nat => bool) => bool) => bool) => bool)
  9.3320 +      (%q::(nat => bool) => bool.
  9.3321 +          (op -->::bool => bool => bool)
  9.3322 +           ((op &::bool => bool => bool)
  9.3323 +             ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
  9.3324 +             ((measurable::((nat => bool) => bool) => bool) q))
  9.3325 +           ((measurable::((nat => bool) => bool) => bool)
  9.3326 +             ((op o::((nat => bool) => bool)
  9.3327 +                     => ((nat => bool) => nat => bool)
  9.3328 +                        => (nat => bool) => bool)
  9.3329 +               q ((op o::('a * (nat => bool) => nat => bool)
  9.3330 +                         => ((nat => bool) => 'a * (nat => bool))
  9.3331 +                            => (nat => bool) => nat => bool)
  9.3332 +                   (snd::'a * (nat => bool) => nat => bool) f)))))"
  9.3333 +  by (import prob_indep INDEP_MEASURABLE2)
  9.3334 +
  9.3335 +lemma PROB_INDEP_BOUND: "(All::(((nat => bool) => nat * (nat => bool)) => bool) => bool)
  9.3336 + (%f::(nat => bool) => nat * (nat => bool).
  9.3337 +     (All::(nat => bool) => bool)
  9.3338 +      (%n::nat.
  9.3339 +          (op -->::bool => bool => bool)
  9.3340 +           ((indep::((nat => bool) => nat * (nat => bool)) => bool) f)
  9.3341 +           ((op =::real => real => bool)
  9.3342 +             ((prob::((nat => bool) => bool) => real)
  9.3343 +               (%s::nat => bool.
  9.3344 +                   (op <::nat => nat => bool)
  9.3345 +                    ((fst::nat * (nat => bool) => nat) (f s))
  9.3346 +                    ((Suc::nat => nat) n)))
  9.3347 +             ((op +::real => real => real)
  9.3348 +               ((prob::((nat => bool) => bool) => real)
  9.3349 +                 (%s::nat => bool.
  9.3350 +                     (op <::nat => nat => bool)
  9.3351 +                      ((fst::nat * (nat => bool) => nat) (f s)) n))
  9.3352 +               ((prob::((nat => bool) => bool) => real)
  9.3353 +                 (%s::nat => bool.
  9.3354 +                     (op =::nat => nat => bool)
  9.3355 +                      ((fst::nat * (nat => bool) => nat) (f s)) n))))))"
  9.3356 +  by (import prob_indep PROB_INDEP_BOUND)
  9.3357 +
  9.3358 +;end_setup
  9.3359 +
  9.3360 +;setup_theory prob_uniform
  9.3361 +
  9.3362 +consts
  9.3363 +  unif_bound :: "nat => nat" 
  9.3364 +
  9.3365 +defs
  9.3366 +  unif_bound_primdef: "unif_bound ==
  9.3367 +WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
  9.3368 + (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
  9.3369 +
  9.3370 +lemma unif_bound_primitive_def: "unif_bound =
  9.3371 +WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
  9.3372 + (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
  9.3373 +  by (import prob_uniform unif_bound_primitive_def)
  9.3374 +
  9.3375 +lemma unif_bound_def: "unif_bound 0 = 0 & unif_bound (Suc v) = Suc (unif_bound (Suc v div 2))"
  9.3376 +  by (import prob_uniform unif_bound_def)
  9.3377 +
  9.3378 +lemma unif_bound_ind: "(All::((nat => bool) => bool) => bool)
  9.3379 + (%P::nat => bool.
  9.3380 +     (op -->::bool => bool => bool)
  9.3381 +      ((op &::bool => bool => bool) (P (0::nat))
  9.3382 +        ((All::(nat => bool) => bool)
  9.3383 +          (%v::nat.
  9.3384 +              (op -->::bool => bool => bool)
  9.3385 +               (P ((op div::nat => nat => nat) ((Suc::nat => nat) v)
  9.3386 +                    ((number_of::bin => nat)
  9.3387 +                      ((op BIT::bin => bool => bin)
  9.3388 +                        ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3389 +                          (True::bool))
  9.3390 +                        (False::bool)))))
  9.3391 +               (P ((Suc::nat => nat) v)))))
  9.3392 +      ((All::(nat => bool) => bool) P))"
  9.3393 +  by (import prob_uniform unif_bound_ind)
  9.3394 +
  9.3395 +constdefs
  9.3396 +  unif_tupled :: "nat * (nat => bool) => nat * (nat => bool)" 
  9.3397 +  "unif_tupled ==
  9.3398 +WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
  9.3399 + (%unif_tupled (v, v1).
  9.3400 +     case v of 0 => (0, v1)
  9.3401 +     | Suc v3 =>
  9.3402 +         let (m, s') = unif_tupled (Suc v3 div 2, v1)
  9.3403 +         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
  9.3404 +
  9.3405 +lemma unif_tupled_primitive_def: "unif_tupled =
  9.3406 +WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
  9.3407 + (%unif_tupled (v, v1).
  9.3408 +     case v of 0 => (0, v1)
  9.3409 +     | Suc v3 =>
  9.3410 +         let (m, s') = unif_tupled (Suc v3 div 2, v1)
  9.3411 +         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
  9.3412 +  by (import prob_uniform unif_tupled_primitive_def)
  9.3413 +
  9.3414 +consts
  9.3415 +  unif :: "nat => (nat => bool) => nat * (nat => bool)" 
  9.3416 +
  9.3417 +defs
  9.3418 +  unif_primdef: "unif == %x x1. unif_tupled (x, x1)"
  9.3419 +
  9.3420 +lemma unif_curried_def: "ALL x x1. unif x x1 = unif_tupled (x, x1)"
  9.3421 +  by (import prob_uniform unif_curried_def)
  9.3422 +
  9.3423 +lemma unif_def: "unif 0 s = (0, s) &
  9.3424 +unif (Suc v2) s =
  9.3425 +(let (m, s') = unif (Suc v2 div 2) s
  9.3426 + in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
  9.3427 +  by (import prob_uniform unif_def)
  9.3428 +
  9.3429 +lemma unif_ind: "(All::((nat => (nat => bool) => bool) => bool) => bool)
  9.3430 + (%P::nat => (nat => bool) => bool.
  9.3431 +     (op -->::bool => bool => bool)
  9.3432 +      ((op &::bool => bool => bool)
  9.3433 +        ((All::((nat => bool) => bool) => bool) (P (0::nat)))
  9.3434 +        ((All::(nat => bool) => bool)
  9.3435 +          (%v2::nat.
  9.3436 +              (All::((nat => bool) => bool) => bool)
  9.3437 +               (%s::nat => bool.
  9.3438 +                   (op -->::bool => bool => bool)
  9.3439 +                    (P ((op div::nat => nat => nat) ((Suc::nat => nat) v2)
  9.3440 +                         ((number_of::bin => nat)
  9.3441 +                           ((op BIT::bin => bool => bin)
  9.3442 +                             ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3443 +                               (True::bool))
  9.3444 +                             (False::bool))))
  9.3445 +                      s)
  9.3446 +                    (P ((Suc::nat => nat) v2) s)))))
  9.3447 +      ((All::(nat => bool) => bool)
  9.3448 +        (%v::nat. (All::((nat => bool) => bool) => bool) (P v))))"
  9.3449 +  by (import prob_uniform unif_ind)
  9.3450 +
  9.3451 +constdefs
  9.3452 +  uniform_tupled :: "nat * nat * (nat => bool) => nat * (nat => bool)" 
  9.3453 +  "(op ==::(nat * nat * (nat => bool) => nat * (nat => bool))
  9.3454 +        => (nat * nat * (nat => bool) => nat * (nat => bool)) => prop)
  9.3455 + (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool))
  9.3456 + ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
  9.3457 +          => ((nat * nat * (nat => bool) => nat * (nat => bool))
  9.3458 +              => nat * nat * (nat => bool) => nat * (nat => bool))
  9.3459 +             => nat * nat * (nat => bool) => nat * (nat => bool))
  9.3460 +   ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
  9.3461 +           => bool)
  9.3462 +          => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
  9.3463 +     (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool.
  9.3464 +         (op &::bool => bool => bool)
  9.3465 +          ((WF::(nat * nat * (nat => bool)
  9.3466 +                 => nat * nat * (nat => bool) => bool)
  9.3467 +                => bool)
  9.3468 +            R)
  9.3469 +          ((All::(nat => bool) => bool)
  9.3470 +            (%t::nat.
  9.3471 +                (All::((nat => bool) => bool) => bool)
  9.3472 +                 (%s::nat => bool.
  9.3473 +                     (All::(nat => bool) => bool)
  9.3474 +                      (%n::nat.
  9.3475 +                          (All::(nat => bool) => bool)
  9.3476 +                           (%res::nat.
  9.3477 +                               (All::((nat => bool) => bool) => bool)
  9.3478 +                                (%s'::nat => bool.
  9.3479 +                                    (op -->::bool => bool => bool)
  9.3480 +                                     ((op &::bool => bool => bool)
  9.3481 + ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
  9.3482 +   ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s')
  9.3483 +   ((unif::nat => (nat => bool) => nat * (nat => bool)) n s))
  9.3484 + ((Not::bool => bool)
  9.3485 +   ((op <::nat => nat => bool) res ((Suc::nat => nat) n))))
  9.3486 +                                     (R
  9.3487 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t
  9.3488 +   ((Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3489 +     ((Suc::nat => nat) n) s'))
  9.3490 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool))
  9.3491 +   ((Suc::nat => nat) t)
  9.3492 +   ((Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3493 +     ((Suc::nat => nat) n) s)))))))))))
  9.3494 +   (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool).
  9.3495 +       (split::(nat => nat * (nat => bool) => nat * (nat => bool))
  9.3496 +               => nat * nat * (nat => bool) => nat * (nat => bool))
  9.3497 +        (%(v::nat) v1::nat * (nat => bool).
  9.3498 +            (nat_case::nat * (nat => bool)
  9.3499 +                       => (nat => nat * (nat => bool))
  9.3500 +                          => nat => nat * (nat => bool))
  9.3501 +             ((split::(nat => (nat => bool) => nat * (nat => bool))
  9.3502 +                      => nat * (nat => bool) => nat * (nat => bool))
  9.3503 +               (%(v3::nat) v4::nat => bool.
  9.3504 +                   (nat_case::nat * (nat => bool)
  9.3505 +                              => (nat => nat * (nat => bool))
  9.3506 +                                 => nat => nat * (nat => bool))
  9.3507 +                    (ARB::nat * (nat => bool))
  9.3508 +                    (%v5::nat.
  9.3509 +                        (Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3510 +                         (0::nat) v4)
  9.3511 +                    v3)
  9.3512 +               v1)
  9.3513 +             (%v2::nat.
  9.3514 +                 (split::(nat => (nat => bool) => nat * (nat => bool))
  9.3515 +                         => nat * (nat => bool) => nat * (nat => bool))
  9.3516 +                  (%(v7::nat) v8::nat => bool.
  9.3517 +                      (nat_case::nat * (nat => bool)
  9.3518 +                                 => (nat => nat * (nat => bool))
  9.3519 +                                    => nat => nat * (nat => bool))
  9.3520 +                       (ARB::nat * (nat => bool))
  9.3521 +                       (%v9::nat.
  9.3522 +                           (Let::nat * (nat => bool)
  9.3523 +                                 => (nat * (nat => bool)
  9.3524 +                                     => nat * (nat => bool))
  9.3525 +                                    => nat * (nat => bool))
  9.3526 +                            ((unif::nat
  9.3527 +                                    => (nat => bool) => nat * (nat => bool))
  9.3528 +                              v9 v8)
  9.3529 +                            ((split::(nat
  9.3530 +=> (nat => bool) => nat * (nat => bool))
  9.3531 +                                     => nat * (nat => bool)
  9.3532 +  => nat * (nat => bool))
  9.3533 +                              (%(res::nat) s'::nat => bool.
  9.3534 +                                  (If::bool
  9.3535 + => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool))
  9.3536 +                                   ((op <::nat => nat => bool) res
  9.3537 +                                     ((Suc::nat => nat) v9))
  9.3538 +                                   ((Pair::nat
  9.3539 +     => (nat => bool) => nat * (nat => bool))
  9.3540 +                                     res s')
  9.3541 +                                   (uniform_tupled
  9.3542 +                                     ((Pair::nat
  9.3543 +       => nat * (nat => bool) => nat * nat * (nat => bool))
  9.3544 + v2 ((Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3545 +      ((Suc::nat => nat) v9) s'))))))
  9.3546 +                       v7)
  9.3547 +                  v1)
  9.3548 +             v)))"
  9.3549 +
  9.3550 +lemma uniform_tupled_primitive_def: "(op =::(nat * nat * (nat => bool) => nat * (nat => bool))
  9.3551 +       => (nat * nat * (nat => bool) => nat * (nat => bool)) => bool)
  9.3552 + (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool))
  9.3553 + ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
  9.3554 +          => ((nat * nat * (nat => bool) => nat * (nat => bool))
  9.3555 +              => nat * nat * (nat => bool) => nat * (nat => bool))
  9.3556 +             => nat * nat * (nat => bool) => nat * (nat => bool))
  9.3557 +   ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
  9.3558 +           => bool)
  9.3559 +          => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
  9.3560 +     (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool.
  9.3561 +         (op &::bool => bool => bool)
  9.3562 +          ((WF::(nat * nat * (nat => bool)
  9.3563 +                 => nat * nat * (nat => bool) => bool)
  9.3564 +                => bool)
  9.3565 +            R)
  9.3566 +          ((All::(nat => bool) => bool)
  9.3567 +            (%t::nat.
  9.3568 +                (All::((nat => bool) => bool) => bool)
  9.3569 +                 (%s::nat => bool.
  9.3570 +                     (All::(nat => bool) => bool)
  9.3571 +                      (%n::nat.
  9.3572 +                          (All::(nat => bool) => bool)
  9.3573 +                           (%res::nat.
  9.3574 +                               (All::((nat => bool) => bool) => bool)
  9.3575 +                                (%s'::nat => bool.
  9.3576 +                                    (op -->::bool => bool => bool)
  9.3577 +                                     ((op &::bool => bool => bool)
  9.3578 + ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
  9.3579 +   ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s')
  9.3580 +   ((unif::nat => (nat => bool) => nat * (nat => bool)) n s))
  9.3581 + ((Not::bool => bool)
  9.3582 +   ((op <::nat => nat => bool) res ((Suc::nat => nat) n))))
  9.3583 +                                     (R
  9.3584 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t
  9.3585 +   ((Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3586 +     ((Suc::nat => nat) n) s'))
  9.3587 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool))
  9.3588 +   ((Suc::nat => nat) t)
  9.3589 +   ((Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3590 +     ((Suc::nat => nat) n) s)))))))))))
  9.3591 +   (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool).
  9.3592 +       (split::(nat => nat * (nat => bool) => nat * (nat => bool))
  9.3593 +               => nat * nat * (nat => bool) => nat * (nat => bool))
  9.3594 +        (%(v::nat) v1::nat * (nat => bool).
  9.3595 +            (nat_case::nat * (nat => bool)
  9.3596 +                       => (nat => nat * (nat => bool))
  9.3597 +                          => nat => nat * (nat => bool))
  9.3598 +             ((split::(nat => (nat => bool) => nat * (nat => bool))
  9.3599 +                      => nat * (nat => bool) => nat * (nat => bool))
  9.3600 +               (%(v3::nat) v4::nat => bool.
  9.3601 +                   (nat_case::nat * (nat => bool)
  9.3602 +                              => (nat => nat * (nat => bool))
  9.3603 +                                 => nat => nat * (nat => bool))
  9.3604 +                    (ARB::nat * (nat => bool))
  9.3605 +                    (%v5::nat.
  9.3606 +                        (Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3607 +                         (0::nat) v4)
  9.3608 +                    v3)
  9.3609 +               v1)
  9.3610 +             (%v2::nat.
  9.3611 +                 (split::(nat => (nat => bool) => nat * (nat => bool))
  9.3612 +                         => nat * (nat => bool) => nat * (nat => bool))
  9.3613 +                  (%(v7::nat) v8::nat => bool.
  9.3614 +                      (nat_case::nat * (nat => bool)
  9.3615 +                                 => (nat => nat * (nat => bool))
  9.3616 +                                    => nat => nat * (nat => bool))
  9.3617 +                       (ARB::nat * (nat => bool))
  9.3618 +                       (%v9::nat.
  9.3619 +                           (Let::nat * (nat => bool)
  9.3620 +                                 => (nat * (nat => bool)
  9.3621 +                                     => nat * (nat => bool))
  9.3622 +                                    => nat * (nat => bool))
  9.3623 +                            ((unif::nat
  9.3624 +                                    => (nat => bool) => nat * (nat => bool))
  9.3625 +                              v9 v8)
  9.3626 +                            ((split::(nat
  9.3627 +=> (nat => bool) => nat * (nat => bool))
  9.3628 +                                     => nat * (nat => bool)
  9.3629 +  => nat * (nat => bool))
  9.3630 +                              (%(res::nat) s'::nat => bool.
  9.3631 +                                  (If::bool
  9.3632 + => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool))
  9.3633 +                                   ((op <::nat => nat => bool) res
  9.3634 +                                     ((Suc::nat => nat) v9))
  9.3635 +                                   ((Pair::nat
  9.3636 +     => (nat => bool) => nat * (nat => bool))
  9.3637 +                                     res s')
  9.3638 +                                   (uniform_tupled
  9.3639 +                                     ((Pair::nat
  9.3640 +       => nat * (nat => bool) => nat * nat * (nat => bool))
  9.3641 + v2 ((Pair::nat => (nat => bool) => nat * (nat => bool))
  9.3642 +      ((Suc::nat => nat) v9) s'))))))
  9.3643 +                       v7)
  9.3644 +                  v1)
  9.3645 +             v)))"
  9.3646 +  by (import prob_uniform uniform_tupled_primitive_def)
  9.3647 +
  9.3648 +consts
  9.3649 +  uniform :: "nat => nat => (nat => bool) => nat * (nat => bool)" 
  9.3650 +
  9.3651 +defs
  9.3652 +  uniform_primdef: "uniform == %x x1 x2. uniform_tupled (x, x1, x2)"
  9.3653 +
  9.3654 +lemma uniform_curried_def: "ALL x x1 x2. uniform x x1 x2 = uniform_tupled (x, x1, x2)"
  9.3655 +  by (import prob_uniform uniform_curried_def)
  9.3656 +
  9.3657 +lemma uniform_ind: "(All::((nat => nat => (nat => bool) => bool) => bool) => bool)
  9.3658 + (%P::nat => nat => (nat => bool) => bool.
  9.3659 +     (op -->::bool => bool => bool)
  9.3660 +      ((op &::bool => bool => bool)
  9.3661 +        ((All::(nat => bool) => bool)
  9.3662 +          (%x::nat.
  9.3663 +              (All::((nat => bool) => bool) => bool)
  9.3664 +               (P ((Suc::nat => nat) x) (0::nat))))
  9.3665 +        ((op &::bool => bool => bool)
  9.3666 +          ((All::((nat => bool) => bool) => bool) (P (0::nat) (0::nat)))
  9.3667 +          ((op &::bool => bool => bool)
  9.3668 +            ((All::(nat => bool) => bool)
  9.3669 +              (%x::nat.
  9.3670 +                  (All::((nat => bool) => bool) => bool)
  9.3671 +                   (P (0::nat) ((Suc::nat => nat) x))))
  9.3672 +            ((All::(nat => bool) => bool)
  9.3673 +              (%x::nat.
  9.3674 +                  (All::(nat => bool) => bool)
  9.3675 +                   (%xa::nat.
  9.3676 +                       (All::((nat => bool) => bool) => bool)
  9.3677 +                        (%xb::nat => bool.
  9.3678 +                            (op -->::bool => bool => bool)
  9.3679 +                             ((All::(nat => bool) => bool)
  9.3680 +                               (%xc::nat.
  9.3681 +                                   (All::((nat => bool) => bool) => bool)
  9.3682 +                                    (%xd::nat => bool.
  9.3683 +  (op -->::bool => bool => bool)
  9.3684 +   ((op &::bool => bool => bool)
  9.3685 +     ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
  9.3686 +       ((Pair::nat => (nat => bool) => nat * (nat => bool)) xc xd)
  9.3687 +       ((unif::nat => (nat => bool) => nat * (nat => bool)) xa xb))
  9.3688 +     ((Not::bool => bool)
  9.3689 +       ((op <::nat => nat => bool) xc ((Suc::nat => nat) xa))))
  9.3690 +   (P x ((Suc::nat => nat) xa) xd))))
  9.3691 +                             (P ((Suc::nat => nat) x) ((Suc::nat => nat) xa)
  9.3692 +                               xb))))))))
  9.3693 +      ((All::(nat => bool) => bool)
  9.3694 +        (%x::nat.
  9.3695 +            (All::(nat => bool) => bool)
  9.3696 +             (%xa::nat. (All::((nat => bool) => bool) => bool) (P x xa)))))"
  9.3697 +  by (import prob_uniform uniform_ind)
  9.3698 +
  9.3699 +lemma uniform_def: "uniform 0 (Suc n) s = (0, s) &
  9.3700 +uniform (Suc t) (Suc n) s =
  9.3701 +(let (xa, x) = unif n s
  9.3702 + in if xa < Suc n then (xa, x) else uniform t (Suc n) x)"
  9.3703 +  by (import prob_uniform uniform_def)
  9.3704 +
  9.3705 +lemma SUC_DIV_TWO_ZERO: "ALL n. (Suc n div 2 = 0) = (n = 0)"
  9.3706 +  by (import prob_uniform SUC_DIV_TWO_ZERO)
  9.3707 +
  9.3708 +lemma UNIF_BOUND_LOWER: "ALL n. n < 2 ^ unif_bound n"
  9.3709 +  by (import prob_uniform UNIF_BOUND_LOWER)
  9.3710 +
  9.3711 +lemma UNIF_BOUND_LOWER_SUC: "ALL n. Suc n <= 2 ^ unif_bound n"
  9.3712 +  by (import prob_uniform UNIF_BOUND_LOWER_SUC)
  9.3713 +
  9.3714 +lemma UNIF_BOUND_UPPER: "(All::(nat => bool) => bool)
  9.3715 + (%n::nat.
  9.3716 +     (op -->::bool => bool => bool)
  9.3717 +      ((Not::bool => bool) ((op =::nat => nat => bool) n (0::nat)))
  9.3718 +      ((op <=::nat => nat => bool)
  9.3719 +        ((op ^::nat => nat => nat)
  9.3720 +          ((number_of::bin => nat)
  9.3721 +            ((op BIT::bin => bool => bin)
  9.3722 +              ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
  9.3723 +              (False::bool)))
  9.3724 +          ((unif_bound::nat => nat) n))
  9.3725 +        ((op *::nat => nat => nat)
  9.3726 +          ((number_of::bin => nat)
  9.3727 +            ((op BIT::bin => bool => bin)
  9.3728 +              ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
  9.3729 +              (False::bool)))
  9.3730 +          n)))"
  9.3731 +  by (import prob_uniform UNIF_BOUND_UPPER)
  9.3732 +
  9.3733 +lemma UNIF_BOUND_UPPER_SUC: "ALL n. 2 ^ unif_bound n <= Suc (2 * n)"
  9.3734 +  by (import prob_uniform UNIF_BOUND_UPPER_SUC)
  9.3735 +
  9.3736 +lemma UNIF_DEF_MONAD: "unif 0 = UNIT 0 &
  9.3737 +(ALL n.
  9.3738 +    unif (Suc n) =
  9.3739 +    BIND (unif (Suc n div 2))
  9.3740 +     (%m. BIND SDEST (%b. UNIT (if b then 2 * m + 1 else 2 * m))))"
  9.3741 +  by (import prob_uniform UNIF_DEF_MONAD)
  9.3742 +
  9.3743 +lemma UNIFORM_DEF_MONAD: "(ALL x. uniform 0 (Suc x) = UNIT 0) &
  9.3744 +(ALL x xa.
  9.3745 +    uniform (Suc x) (Suc xa) =
  9.3746 +    BIND (unif xa) (%m. if m < Suc xa then UNIT m else uniform x (Suc xa)))"
  9.3747 +  by (import prob_uniform UNIFORM_DEF_MONAD)
  9.3748 +
  9.3749 +lemma INDEP_UNIF: "ALL n. indep (unif n)"
  9.3750 +  by (import prob_uniform INDEP_UNIF)
  9.3751 +
  9.3752 +lemma INDEP_UNIFORM: "ALL t n. indep (uniform t (Suc n))"
  9.3753 +  by (import prob_uniform INDEP_UNIFORM)
  9.3754 +
  9.3755 +lemma PROB_UNIF: "ALL n k.
  9.3756 +   prob (%s. fst (unif n s) = k) =
  9.3757 +   (if k < 2 ^ unif_bound n then (1 / 2) ^ unif_bound n else 0)"
  9.3758 +  by (import prob_uniform PROB_UNIF)
  9.3759 +
  9.3760 +lemma UNIF_RANGE: "ALL n s. fst (unif n s) < 2 ^ unif_bound n"
  9.3761 +  by (import prob_uniform UNIF_RANGE)
  9.3762 +
  9.3763 +lemma PROB_UNIF_PAIR: "ALL n k k'.
  9.3764 +   (prob (%s. fst (unif n s) = k) = prob (%s. fst (unif n s) = k')) =
  9.3765 +   ((k < 2 ^ unif_bound n) = (k' < 2 ^ unif_bound n))"
  9.3766 +  by (import prob_uniform PROB_UNIF_PAIR)
  9.3767 +
  9.3768 +lemma PROB_UNIF_BOUND: "(All::(nat => bool) => bool)
  9.3769 + (%n::nat.
  9.3770 +     (All::(nat => bool) => bool)
  9.3771 +      (%k::nat.
  9.3772 +          (op -->::bool => bool => bool)
  9.3773 +           ((op <=::nat => nat => bool) k
  9.3774 +             ((op ^::nat => nat => nat)
  9.3775 +               ((number_of::bin => nat)
  9.3776 +                 ((op BIT::bin => bool => bin)
  9.3777 +                   ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3778 +                     (True::bool))
  9.3779 +                   (False::bool)))
  9.3780 +               ((unif_bound::nat => nat) n)))
  9.3781 +           ((op =::real => real => bool)
  9.3782 +             ((prob::((nat => bool) => bool) => real)
  9.3783 +               (%s::nat => bool.
  9.3784 +                   (op <::nat => nat => bool)
  9.3785 +                    ((fst::nat * (nat => bool) => nat)
  9.3786 +                      ((unif::nat => (nat => bool) => nat * (nat => bool)) n
  9.3787 +                        s))
  9.3788 +                    k))
  9.3789 +             ((op *::real => real => real) ((real::nat => real) k)
  9.3790 +               ((op ^::real => nat => real)
  9.3791 +                 ((op /::real => real => real) (1::real)
  9.3792 +                   ((number_of::bin => real)
  9.3793 +                     ((op BIT::bin => bool => bin)
  9.3794 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3795 +                         (True::bool))
  9.3796 +                       (False::bool))))
  9.3797 +                 ((unif_bound::nat => nat) n))))))"
  9.3798 +  by (import prob_uniform PROB_UNIF_BOUND)
  9.3799 +
  9.3800 +lemma PROB_UNIF_GOOD: "ALL n. 1 / 2 <= prob (%s. fst (unif n s) < Suc n)"
  9.3801 +  by (import prob_uniform PROB_UNIF_GOOD)
  9.3802 +
  9.3803 +lemma UNIFORM_RANGE: "ALL t n s. fst (uniform t (Suc n) s) < Suc n"
  9.3804 +  by (import prob_uniform UNIFORM_RANGE)
  9.3805 +
  9.3806 +lemma PROB_UNIFORM_LOWER_BOUND: "(All::(real => bool) => bool)
  9.3807 + (%b::real.
  9.3808 +     (op -->::bool => bool => bool)
  9.3809 +      ((All::(nat => bool) => bool)
  9.3810 +        (%k::nat.
  9.3811 +            (op -->::bool => bool => bool)
  9.3812 +             ((op <::nat => nat => bool) k ((Suc::nat => nat) (n::nat)))
  9.3813 +             ((op <::real => real => bool)
  9.3814 +               ((prob::((nat => bool) => bool) => real)
  9.3815 +                 (%s::nat => bool.
  9.3816 +                     (op =::nat => nat => bool)
  9.3817 +                      ((fst::nat * (nat => bool) => nat)
  9.3818 +                        ((uniform::nat
  9.3819 +                                   => nat
  9.3820 +=> (nat => bool) => nat * (nat => bool))
  9.3821 +                          (t::nat) ((Suc::nat => nat) n) s))
  9.3822 +                      k))
  9.3823 +               b)))
  9.3824 +      ((All::(nat => bool) => bool)
  9.3825 +        (%m::nat.
  9.3826 +            (op -->::bool => bool => bool)
  9.3827 +             ((op <::nat => nat => bool) m ((Suc::nat => nat) n))
  9.3828 +             ((op <::real => real => bool)
  9.3829 +               ((prob::((nat => bool) => bool) => real)
  9.3830 +                 (%s::nat => bool.
  9.3831 +                     (op <::nat => nat => bool)
  9.3832 +                      ((fst::nat * (nat => bool) => nat)
  9.3833 +                        ((uniform::nat
  9.3834 +                                   => nat
  9.3835 +=> (nat => bool) => nat * (nat => bool))
  9.3836 +                          t ((Suc::nat => nat) n) s))
  9.3837 +                      ((Suc::nat => nat) m)))
  9.3838 +               ((op *::real => real => real)
  9.3839 +                 ((real::nat => real) ((Suc::nat => nat) m)) b)))))"
  9.3840 +  by (import prob_uniform PROB_UNIFORM_LOWER_BOUND)
  9.3841 +
  9.3842 +lemma PROB_UNIFORM_UPPER_BOUND: "(All::(real => bool) => bool)
  9.3843 + (%b::real.
  9.3844 +     (op -->::bool => bool => bool)
  9.3845 +      ((All::(nat => bool) => bool)
  9.3846 +        (%k::nat.
  9.3847 +            (op -->::bool => bool => bool)
  9.3848 +             ((op <::nat => nat => bool) k ((Suc::nat => nat) (n::nat)))
  9.3849 +             ((op <::real => real => bool) b
  9.3850 +               ((prob::((nat => bool) => bool) => real)
  9.3851 +                 (%s::nat => bool.
  9.3852 +                     (op =::nat => nat => bool)
  9.3853 +                      ((fst::nat * (nat => bool) => nat)
  9.3854 +                        ((uniform::nat
  9.3855 +                                   => nat
  9.3856 +=> (nat => bool) => nat * (nat => bool))
  9.3857 +                          (t::nat) ((Suc::nat => nat) n) s))
  9.3858 +                      k)))))
  9.3859 +      ((All::(nat => bool) => bool)
  9.3860 +        (%m::nat.
  9.3861 +            (op -->::bool => bool => bool)
  9.3862 +             ((op <::nat => nat => bool) m ((Suc::nat => nat) n))
  9.3863 +             ((op <::real => real => bool)
  9.3864 +               ((op *::real => real => real)
  9.3865 +                 ((real::nat => real) ((Suc::nat => nat) m)) b)
  9.3866 +               ((prob::((nat => bool) => bool) => real)
  9.3867 +                 (%s::nat => bool.
  9.3868 +                     (op <::nat => nat => bool)
  9.3869 +                      ((fst::nat * (nat => bool) => nat)
  9.3870 +                        ((uniform::nat
  9.3871 +                                   => nat
  9.3872 +=> (nat => bool) => nat * (nat => bool))
  9.3873 +                          t ((Suc::nat => nat) n) s))
  9.3874 +                      ((Suc::nat => nat) m)))))))"
  9.3875 +  by (import prob_uniform PROB_UNIFORM_UPPER_BOUND)
  9.3876 +
  9.3877 +lemma PROB_UNIFORM_PAIR_SUC: "(All::(nat => bool) => bool)
  9.3878 + (%t::nat.
  9.3879 +     (All::(nat => bool) => bool)
  9.3880 +      (%n::nat.
  9.3881 +          (All::(nat => bool) => bool)
  9.3882 +           (%k::nat.
  9.3883 +               (All::(nat => bool) => bool)
  9.3884 +                (%k'::nat.
  9.3885 +                    (op -->::bool => bool => bool)
  9.3886 +                     ((op &::bool => bool => bool)
  9.3887 +                       ((op <::nat => nat => bool) k ((Suc::nat => nat) n))
  9.3888 +                       ((op <::nat => nat => bool) k'
  9.3889 +                         ((Suc::nat => nat) n)))
  9.3890 +                     ((op <=::real => real => bool)
  9.3891 +                       ((abs::real => real)
  9.3892 +                         ((op -::real => real => real)
  9.3893 +                           ((prob::((nat => bool) => bool) => real)
  9.3894 +                             (%s::nat => bool.
  9.3895 +                                 (op =::nat => nat => bool)
  9.3896 +                                  ((fst::nat * (nat => bool) => nat)
  9.3897 +                                    ((uniform::nat
  9.3898 +         => nat => (nat => bool) => nat * (nat => bool))
  9.3899 +t ((Suc::nat => nat) n) s))
  9.3900 +                                  k))
  9.3901 +                           ((prob::((nat => bool) => bool) => real)
  9.3902 +                             (%s::nat => bool.
  9.3903 +                                 (op =::nat => nat => bool)
  9.3904 +                                  ((fst::nat * (nat => bool) => nat)
  9.3905 +                                    ((uniform::nat
  9.3906 +         => nat => (nat => bool) => nat * (nat => bool))
  9.3907 +t ((Suc::nat => nat) n) s))
  9.3908 +                                  k'))))
  9.3909 +                       ((op ^::real => nat => real)
  9.3910 +                         ((op /::real => real => real) (1::real)
  9.3911 +                           ((number_of::bin => real)
  9.3912 +                             ((op BIT::bin => bool => bin)
  9.3913 +                               ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3914 +                                 (True::bool))
  9.3915 +                               (False::bool))))
  9.3916 +                         t))))))"
  9.3917 +  by (import prob_uniform PROB_UNIFORM_PAIR_SUC)
  9.3918 +
  9.3919 +lemma PROB_UNIFORM_SUC: "(All::(nat => bool) => bool)
  9.3920 + (%t::nat.
  9.3921 +     (All::(nat => bool) => bool)
  9.3922 +      (%n::nat.
  9.3923 +          (All::(nat => bool) => bool)
  9.3924 +           (%k::nat.
  9.3925 +               (op -->::bool => bool => bool)
  9.3926 +                ((op <::nat => nat => bool) k ((Suc::nat => nat) n))
  9.3927 +                ((op <=::real => real => bool)
  9.3928 +                  ((abs::real => real)
  9.3929 +                    ((op -::real => real => real)
  9.3930 +                      ((prob::((nat => bool) => bool) => real)
  9.3931 +                        (%s::nat => bool.
  9.3932 +                            (op =::nat => nat => bool)
  9.3933 +                             ((fst::nat * (nat => bool) => nat)
  9.3934 +                               ((uniform::nat
  9.3935 +    => nat => (nat => bool) => nat * (nat => bool))
  9.3936 +                                 t ((Suc::nat => nat) n) s))
  9.3937 +                             k))
  9.3938 +                      ((op /::real => real => real) (1::real)
  9.3939 +                        ((real::nat => real) ((Suc::nat => nat) n)))))
  9.3940 +                  ((op ^::real => nat => real)
  9.3941 +                    ((op /::real => real => real) (1::real)
  9.3942 +                      ((number_of::bin => real)
  9.3943 +                        ((op BIT::bin => bool => bin)
  9.3944 +                          ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3945 +                            (True::bool))
  9.3946 +                          (False::bool))))
  9.3947 +                    t)))))"
  9.3948 +  by (import prob_uniform PROB_UNIFORM_SUC)
  9.3949 +
  9.3950 +lemma PROB_UNIFORM: "(All::(nat => bool) => bool)
  9.3951 + (%t::nat.
  9.3952 +     (All::(nat => bool) => bool)
  9.3953 +      (%n::nat.
  9.3954 +          (All::(nat => bool) => bool)
  9.3955 +           (%k::nat.
  9.3956 +               (op -->::bool => bool => bool)
  9.3957 +                ((op <::nat => nat => bool) k n)
  9.3958 +                ((op <=::real => real => bool)
  9.3959 +                  ((abs::real => real)
  9.3960 +                    ((op -::real => real => real)
  9.3961 +                      ((prob::((nat => bool) => bool) => real)
  9.3962 +                        (%s::nat => bool.
  9.3963 +                            (op =::nat => nat => bool)
  9.3964 +                             ((fst::nat * (nat => bool) => nat)
  9.3965 +                               ((uniform::nat
  9.3966 +    => nat => (nat => bool) => nat * (nat => bool))
  9.3967 +                                 t n s))
  9.3968 +                             k))
  9.3969 +                      ((op /::real => real => real) (1::real)
  9.3970 +                        ((real::nat => real) n))))
  9.3971 +                  ((op ^::real => nat => real)
  9.3972 +                    ((op /::real => real => real) (1::real)
  9.3973 +                      ((number_of::bin => real)
  9.3974 +                        ((op BIT::bin => bool => bin)
  9.3975 +                          ((op BIT::bin => bool => bin) (bin.Pls::bin)
  9.3976 +                            (True::bool))
  9.3977 +                          (False::bool))))
  9.3978 +                    t)))))"
  9.3979 +  by (import prob_uniform PROB_UNIFORM)
  9.3980 +
  9.3981 +;end_setup
  9.3982 +
  9.3983 +end
  9.3984 +
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/src/HOL/Import/HOL/HOL4Real.thy	Fri Apr 02 17:37:45 2004 +0200
    10.3 @@ -0,0 +1,7644 @@
    10.4 +theory HOL4Real = HOL4Base:
    10.5 +
    10.6 +;setup_theory realax
    10.7 +
    10.8 +lemma HREAL_RDISTRIB: "ALL x y z.
    10.9 +   hreal_mul (hreal_add x y) z = hreal_add (hreal_mul x z) (hreal_mul y z)"
   10.10 +  by (import realax HREAL_RDISTRIB)
   10.11 +
   10.12 +lemma HREAL_EQ_ADDL: "ALL x y. x ~= hreal_add x y"
   10.13 +  by (import realax HREAL_EQ_ADDL)
   10.14 +
   10.15 +lemma HREAL_EQ_LADD: "ALL x y z. (hreal_add x y = hreal_add x z) = (y = z)"
   10.16 +  by (import realax HREAL_EQ_LADD)
   10.17 +
   10.18 +lemma HREAL_LT_REFL: "ALL x. ~ hreal_lt x x"
   10.19 +  by (import realax HREAL_LT_REFL)
   10.20 +
   10.21 +lemma HREAL_LT_ADDL: "ALL x y. hreal_lt x (hreal_add x y)"
   10.22 +  by (import realax HREAL_LT_ADDL)
   10.23 +
   10.24 +lemma HREAL_LT_NE: "ALL x y. hreal_lt x y --> x ~= y"
   10.25 +  by (import realax HREAL_LT_NE)
   10.26 +
   10.27 +lemma HREAL_LT_ADDR: "ALL x y. ~ hreal_lt (hreal_add x y) x"
   10.28 +  by (import realax HREAL_LT_ADDR)
   10.29 +
   10.30 +lemma HREAL_LT_GT: "ALL x y. hreal_lt x y --> ~ hreal_lt y x"
   10.31 +  by (import realax HREAL_LT_GT)
   10.32 +
   10.33 +lemma HREAL_LT_ADD2: "ALL x1 x2 y1 y2.
   10.34 +   hreal_lt x1 y1 & hreal_lt x2 y2 -->
   10.35 +   hreal_lt (hreal_add x1 x2) (hreal_add y1 y2)"
   10.36 +  by (import realax HREAL_LT_ADD2)
   10.37 +
   10.38 +lemma HREAL_LT_LADD: "ALL x y z. hreal_lt (hreal_add x y) (hreal_add x z) = hreal_lt y z"
   10.39 +  by (import realax HREAL_LT_LADD)
   10.40 +
   10.41 +constdefs
   10.42 +  treal_0 :: "hreal * hreal" 
   10.43 +  "treal_0 == (hreal_1, hreal_1)"
   10.44 +
   10.45 +lemma treal_0: "treal_0 = (hreal_1, hreal_1)"
   10.46 +  by (import realax treal_0)
   10.47 +
   10.48 +constdefs
   10.49 +  treal_1 :: "hreal * hreal" 
   10.50 +  "treal_1 == (hreal_add hreal_1 hreal_1, hreal_1)"
   10.51 +
   10.52 +lemma treal_1: "treal_1 = (hreal_add hreal_1 hreal_1, hreal_1)"
   10.53 +  by (import realax treal_1)
   10.54 +
   10.55 +constdefs
   10.56 +  treal_neg :: "hreal * hreal => hreal * hreal" 
   10.57 +  "treal_neg == %(x, y). (y, x)"
   10.58 +
   10.59 +lemma treal_neg: "ALL x y. treal_neg (x, y) = (y, x)"
   10.60 +  by (import realax treal_neg)
   10.61 +
   10.62 +constdefs
   10.63 +  treal_add :: "hreal * hreal => hreal * hreal => hreal * hreal" 
   10.64 +  "treal_add == %(x1, y1) (x2, y2). (hreal_add x1 x2, hreal_add y1 y2)"
   10.65 +
   10.66 +lemma treal_add: "ALL x1 y1 x2 y2.
   10.67 +   treal_add (x1, y1) (x2, y2) = (hreal_add x1 x2, hreal_add y1 y2)"
   10.68 +  by (import realax treal_add)
   10.69 +
   10.70 +constdefs
   10.71 +  treal_mul :: "hreal * hreal => hreal * hreal => hreal * hreal" 
   10.72 +  "treal_mul ==
   10.73 +%(x1, y1) (x2, y2).
   10.74 +   (hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
   10.75 +    hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
   10.76 +
   10.77 +lemma treal_mul: "ALL x1 y1 x2 y2.
   10.78 +   treal_mul (x1, y1) (x2, y2) =
   10.79 +   (hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
   10.80 +    hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
   10.81 +  by (import realax treal_mul)
   10.82 +
   10.83 +constdefs
   10.84 +  treal_lt :: "hreal * hreal => hreal * hreal => bool" 
   10.85 +  "treal_lt == %(x1, y1) (x2, y2). hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
   10.86 +
   10.87 +lemma treal_lt: "ALL x1 y1 x2 y2.
   10.88 +   treal_lt (x1, y1) (x2, y2) = hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
   10.89 +  by (import realax treal_lt)
   10.90 +
   10.91 +constdefs
   10.92 +  treal_inv :: "hreal * hreal => hreal * hreal" 
   10.93 +  "treal_inv ==
   10.94 +%(x, y).
   10.95 +   if x = y then treal_0
   10.96 +   else if hreal_lt y x
   10.97 +        then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
   10.98 +        else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1)"
   10.99 +
  10.100 +lemma treal_inv: "ALL x y.
  10.101 +   treal_inv (x, y) =
  10.102 +   (if x = y then treal_0
  10.103 +    else if hreal_lt y x
  10.104 +         then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
  10.105 +         else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1))"
  10.106 +  by (import realax treal_inv)
  10.107 +
  10.108 +constdefs
  10.109 +  treal_eq :: "hreal * hreal => hreal * hreal => bool" 
  10.110 +  "treal_eq == %(x1, y1) (x2, y2). hreal_add x1 y2 = hreal_add x2 y1"
  10.111 +
  10.112 +lemma treal_eq: "ALL x1 y1 x2 y2.
  10.113 +   treal_eq (x1, y1) (x2, y2) = (hreal_add x1 y2 = hreal_add x2 y1)"
  10.114 +  by (import realax treal_eq)
  10.115 +
  10.116 +lemma TREAL_EQ_REFL: "ALL x. treal_eq x x"
  10.117 +  by (import realax TREAL_EQ_REFL)
  10.118 +
  10.119 +lemma TREAL_EQ_SYM: "ALL x y. treal_eq x y = treal_eq y x"
  10.120 +  by (import realax TREAL_EQ_SYM)
  10.121 +
  10.122 +lemma TREAL_EQ_TRANS: "ALL x y z. treal_eq x y & treal_eq y z --> treal_eq x z"
  10.123 +  by (import realax TREAL_EQ_TRANS)
  10.124 +
  10.125 +lemma TREAL_EQ_EQUIV: "ALL p q. treal_eq p q = (treal_eq p = treal_eq q)"
  10.126 +  by (import realax TREAL_EQ_EQUIV)
  10.127 +
  10.128 +lemma TREAL_EQ_AP: "ALL p q. p = q --> treal_eq p q"
  10.129 +  by (import realax TREAL_EQ_AP)
  10.130 +
  10.131 +lemma TREAL_10: "~ treal_eq treal_1 treal_0"
  10.132 +  by (import realax TREAL_10)
  10.133 +
  10.134 +lemma TREAL_ADD_SYM: "ALL x y. treal_add x y = treal_add y x"
  10.135 +  by (import realax TREAL_ADD_SYM)
  10.136 +
  10.137 +lemma TREAL_MUL_SYM: "ALL x y. treal_mul x y = treal_mul y x"
  10.138 +  by (import realax TREAL_MUL_SYM)
  10.139 +
  10.140 +lemma TREAL_ADD_ASSOC: "ALL x y z. treal_add x (treal_add y z) = treal_add (treal_add x y) z"
  10.141 +  by (import realax TREAL_ADD_ASSOC)
  10.142 +
  10.143 +lemma TREAL_MUL_ASSOC: "ALL x y z. treal_mul x (treal_mul y z) = treal_mul (treal_mul x y) z"
  10.144 +  by (import realax TREAL_MUL_ASSOC)
  10.145 +
  10.146 +lemma TREAL_LDISTRIB: "ALL x y z.
  10.147 +   treal_mul x (treal_add y z) = treal_add (treal_mul x y) (treal_mul x z)"
  10.148 +  by (import realax TREAL_LDISTRIB)
  10.149 +
  10.150 +lemma TREAL_ADD_LID: "ALL x. treal_eq (treal_add treal_0 x) x"
  10.151 +  by (import realax TREAL_ADD_LID)
  10.152 +
  10.153 +lemma TREAL_MUL_LID: "ALL x. treal_eq (treal_mul treal_1 x) x"
  10.154 +  by (import realax TREAL_MUL_LID)
  10.155 +
  10.156 +lemma TREAL_ADD_LINV: "ALL x. treal_eq (treal_add (treal_neg x) x) treal_0"
  10.157 +  by (import realax TREAL_ADD_LINV)
  10.158 +
  10.159 +lemma TREAL_INV_0: "treal_eq (treal_inv treal_0) treal_0"
  10.160 +  by (import realax TREAL_INV_0)
  10.161 +
  10.162 +lemma TREAL_MUL_LINV: "ALL x. ~ treal_eq x treal_0 --> treal_eq (treal_mul (treal_inv x) x) treal_1"
  10.163 +  by (import realax TREAL_MUL_LINV)
  10.164 +
  10.165 +lemma TREAL_LT_TOTAL: "ALL x y. treal_eq x y | treal_lt x y | treal_lt y x"
  10.166 +  by (import realax TREAL_LT_TOTAL)
  10.167 +
  10.168 +lemma TREAL_LT_REFL: "ALL x. ~ treal_lt x x"
  10.169 +  by (import realax TREAL_LT_REFL)
  10.170 +
  10.171 +lemma TREAL_LT_TRANS: "ALL x y z. treal_lt x y & treal_lt y z --> treal_lt x z"
  10.172 +  by (import realax TREAL_LT_TRANS)
  10.173 +
  10.174 +lemma TREAL_LT_ADD: "ALL x y z. treal_lt y z --> treal_lt (treal_add x y) (treal_add x z)"
  10.175 +  by (import realax TREAL_LT_ADD)
  10.176 +
  10.177 +lemma TREAL_LT_MUL: "ALL x y.
  10.178 +   treal_lt treal_0 x & treal_lt treal_0 y -->
  10.179 +   treal_lt treal_0 (treal_mul x y)"
  10.180 +  by (import realax TREAL_LT_MUL)
  10.181 +
  10.182 +constdefs
  10.183 +  treal_of_hreal :: "hreal => hreal * hreal" 
  10.184 +  "treal_of_hreal == %x. (hreal_add x hreal_1, hreal_1)"
  10.185 +
  10.186 +lemma treal_of_hreal: "ALL x. treal_of_hreal x = (hreal_add x hreal_1, hreal_1)"
  10.187 +  by (import realax treal_of_hreal)
  10.188 +
  10.189 +constdefs
  10.190 +  hreal_of_treal :: "hreal * hreal => hreal" 
  10.191 +  "hreal_of_treal == %(x, y). SOME d. x = hreal_add y d"
  10.192 +
  10.193 +lemma hreal_of_treal: "ALL x y. hreal_of_treal (x, y) = (SOME d. x = hreal_add y d)"
  10.194 +  by (import realax hreal_of_treal)
  10.195 +
  10.196 +lemma TREAL_BIJ: "(ALL h. hreal_of_treal (treal_of_hreal h) = h) &
  10.197 +(ALL r. treal_lt treal_0 r = treal_eq (treal_of_hreal (hreal_of_treal r)) r)"
  10.198 +  by (import realax TREAL_BIJ)
  10.199 +
  10.200 +lemma TREAL_ISO: "ALL h i. hreal_lt h i --> treal_lt (treal_of_hreal h) (treal_of_hreal i)"
  10.201 +  by (import realax TREAL_ISO)
  10.202 +
  10.203 +lemma TREAL_BIJ_WELLDEF: "ALL h i. treal_eq h i --> hreal_of_treal h = hreal_of_treal i"
  10.204 +  by (import realax TREAL_BIJ_WELLDEF)
  10.205 +
  10.206 +lemma TREAL_NEG_WELLDEF: "ALL x1 x2. treal_eq x1 x2 --> treal_eq (treal_neg x1) (treal_neg x2)"
  10.207 +  by (import realax TREAL_NEG_WELLDEF)
  10.208 +
  10.209 +lemma TREAL_ADD_WELLDEFR: "ALL x1 x2 y. treal_eq x1 x2 --> treal_eq (treal_add x1 y) (treal_add x2 y)"
  10.210 +  by (import realax TREAL_ADD_WELLDEFR)
  10.211 +
  10.212 +lemma TREAL_ADD_WELLDEF: "ALL x1 x2 y1 y2.
  10.213 +   treal_eq x1 x2 & treal_eq y1 y2 -->
  10.214 +   treal_eq (treal_add x1 y1) (treal_add x2 y2)"
  10.215 +  by (import realax TREAL_ADD_WELLDEF)
  10.216 +
  10.217 +lemma TREAL_MUL_WELLDEFR: "ALL x1 x2 y. treal_eq x1 x2 --> treal_eq (treal_mul x1 y) (treal_mul x2 y)"
  10.218 +  by (import realax TREAL_MUL_WELLDEFR)
  10.219 +
  10.220 +lemma TREAL_MUL_WELLDEF: "ALL x1 x2 y1 y2.
  10.221 +   treal_eq x1 x2 & treal_eq y1 y2 -->
  10.222 +   treal_eq (treal_mul x1 y1) (treal_mul x2 y2)"
  10.223 +  by (import realax TREAL_MUL_WELLDEF)
  10.224 +
  10.225 +lemma TREAL_LT_WELLDEFR: "ALL x1 x2 y. treal_eq x1 x2 --> treal_lt x1 y = treal_lt x2 y"
  10.226 +  by (import realax TREAL_LT_WELLDEFR)
  10.227 +
  10.228 +lemma TREAL_LT_WELLDEFL: "ALL x y1 y2. treal_eq y1 y2 --> treal_lt x y1 = treal_lt x y2"
  10.229 +  by (import realax TREAL_LT_WELLDEFL)
  10.230 +
  10.231 +lemma TREAL_LT_WELLDEF: "ALL x1 x2 y1 y2.
  10.232 +   treal_eq x1 x2 & treal_eq y1 y2 --> treal_lt x1 y1 = treal_lt x2 y2"
  10.233 +  by (import realax TREAL_LT_WELLDEF)
  10.234 +
  10.235 +lemma TREAL_INV_WELLDEF: "ALL x1 x2. treal_eq x1 x2 --> treal_eq (treal_inv x1) (treal_inv x2)"
  10.236 +  by (import realax TREAL_INV_WELLDEF)
  10.237 +
  10.238 +;end_setup
  10.239 +
  10.240 +;setup_theory real
  10.241 +
  10.242 +lemma REAL_0: "(0::real) = (0::real)"
  10.243 +  by (import real REAL_0)
  10.244 +
  10.245 +lemma REAL_1: "(1::real) = (1::real)"
  10.246 +  by (import real REAL_1)
  10.247 +
  10.248 +lemma REAL_ADD_LID_UNIQ: "ALL (x::real) y::real. (x + y = y) = (x = (0::real))"
  10.249 +  by (import real REAL_ADD_LID_UNIQ)
  10.250 +
  10.251 +lemma REAL_ADD_RID_UNIQ: "ALL (x::real) y::real. (x + y = x) = (y = (0::real))"
  10.252 +  by (import real REAL_ADD_RID_UNIQ)
  10.253 +
  10.254 +lemma REAL_LNEG_UNIQ: "ALL (x::real) y::real. (x + y = (0::real)) = (x = - y)"
  10.255 +  by (import real REAL_LNEG_UNIQ)
  10.256 +
  10.257 +lemma REAL_LT_ANTISYM: "ALL (x::real) y::real. ~ (x < y & y < x)"
  10.258 +  by (import real REAL_LT_ANTISYM)
  10.259 +
  10.260 +lemma REAL_LET_TOTAL: "ALL (x::real) y::real. x <= y | y < x"
  10.261 +  by (import real REAL_LET_TOTAL)
  10.262 +
  10.263 +lemma REAL_LTE_TOTAL: "ALL (x::real) y::real. x < y | y <= x"
  10.264 +  by (import real REAL_LTE_TOTAL)
  10.265 +
  10.266 +lemma REAL_LET_ANTISYM: "ALL (x::real) y::real. ~ (x < y & y <= x)"
  10.267 +  by (import real REAL_LET_ANTISYM)
  10.268 +
  10.269 +lemma REAL_LTE_ANTSYM: "ALL (x::real) y::real. ~ (x <= y & y < x)"
  10.270 +  by (import real REAL_LTE_ANTSYM)
  10.271 +
  10.272 +lemma REAL_LT_NEGTOTAL: "ALL x::real. x = (0::real) | (0::real) < x | (0::real) < - x"
  10.273 +  by (import real REAL_LT_NEGTOTAL)
  10.274 +
  10.275 +lemma REAL_LE_NEGTOTAL: "ALL x::real. (0::real) <= x | (0::real) <= - x"
  10.276 +  by (import real REAL_LE_NEGTOTAL)
  10.277 +
  10.278 +lemma REAL_LE_MUL: "ALL (x::real) y::real.
  10.279 +   (0::real) <= x & (0::real) <= y --> (0::real) <= x * y"
  10.280 +  by (import real REAL_LE_MUL)
  10.281 +
  10.282 +lemma REAL_LT_ADDNEG: "ALL (x::real) (y::real) z::real. (y < x + - z) = (y + z < x)"
  10.283 +  by (import real REAL_LT_ADDNEG)
  10.284 +
  10.285 +lemma REAL_LT_ADDNEG2: "ALL (x::real) (y::real) z::real. (x + - y < z) = (x < z + y)"
  10.286 +  by (import real REAL_LT_ADDNEG2)
  10.287 +
  10.288 +lemma REAL_LT_ADD1: "ALL (x::real) y::real. x <= y --> x < y + (1::real)"
  10.289 +  by (import real REAL_LT_ADD1)
  10.290 +
  10.291 +lemma REAL_LE_DOUBLE: "ALL x::real. ((0::real) <= x + x) = ((0::real) <= x)"
  10.292 +  by (import real REAL_LE_DOUBLE)
  10.293 +
  10.294 +lemma REAL_NEG_EQ: "ALL (x::real) y::real. (- x = y) = (x = - y)"
  10.295 +  by (import real REAL_NEG_EQ)
  10.296 +
  10.297 +lemma REAL_NEG_MINUS1: "ALL x::real. - x = - (1::real) * x"
  10.298 +  by (import real REAL_NEG_MINUS1)
  10.299 +
  10.300 +lemma REAL_LT_LMUL_0: "ALL (x::real) y::real.
  10.301 +   (0::real) < x --> ((0::real) < x * y) = ((0::real) < y)"
  10.302 +  by (import real REAL_LT_LMUL_0)
  10.303 +
  10.304 +lemma REAL_LT_RMUL_0: "ALL (x::real) y::real.
  10.305 +   (0::real) < y --> ((0::real) < x * y) = ((0::real) < x)"
  10.306 +  by (import real REAL_LT_RMUL_0)
  10.307 +
  10.308 +lemma REAL_LT_LMUL: "ALL (x::real) (y::real) z::real. (0::real) < x --> (x * y < x * z) = (y < z)"
  10.309 +  by (import real REAL_LT_LMUL)
  10.310 +
  10.311 +lemma REAL_LINV_UNIQ: "ALL (x::real) y::real. x * y = (1::real) --> x = inverse y"
  10.312 +  by (import real REAL_LINV_UNIQ)
  10.313 +
  10.314 +lemma REAL_LE_INV: "ALL x::real. (0::real) <= x --> (0::real) <= inverse x"
  10.315 +  by (import real REAL_LE_INV)
  10.316 +
  10.317 +lemma REAL_LE_ADDR: "ALL (x::real) y::real. (x <= x + y) = ((0::real) <= y)"
  10.318 +  by (import real REAL_LE_ADDR)
  10.319 +
  10.320 +lemma REAL_LE_ADDL: "ALL (x::real) y::real. (y <= x + y) = ((0::real) <= x)"
  10.321 +  by (import real REAL_LE_ADDL)
  10.322 +
  10.323 +lemma REAL_LT_ADDR: "ALL (x::real) y::real. (x < x + y) = ((0::real) < y)"
  10.324 +  by (import real REAL_LT_ADDR)
  10.325 +
  10.326 +lemma REAL_LT_ADDL: "ALL (x::real) y::real. (y < x + y) = ((0::real) < x)"
  10.327 +  by (import real REAL_LT_ADDL)
  10.328 +
  10.329 +lemma REAL_LT_NZ: "ALL n::nat. (real n ~= (0::real)) = ((0::real) < real n)"
  10.330 +  by (import real REAL_LT_NZ)
  10.331 +
  10.332 +lemma REAL_NZ_IMP_LT: "ALL n::nat. n ~= (0::nat) --> (0::real) < real n"
  10.333 +  by (import real REAL_NZ_IMP_LT)
  10.334 +
  10.335 +lemma REAL_LT_RDIV_0: "ALL (y::real) z::real.
  10.336 +   (0::real) < z --> ((0::real) < y / z) = ((0::real) < y)"
  10.337 +  by (import real REAL_LT_RDIV_0)
  10.338 +
  10.339 +lemma REAL_LT_RDIV: "ALL (x::real) (y::real) z::real. (0::real) < z --> (x / z < y / z) = (x < y)"
  10.340 +  by (import real REAL_LT_RDIV)
  10.341 +
  10.342 +lemma REAL_LT_FRACTION_0: "ALL (n::nat) d::real.
  10.343 +   n ~= (0::nat) --> ((0::real) < d / real n) = ((0::real) < d)"
  10.344 +  by (import real REAL_LT_FRACTION_0)
  10.345 +
  10.346 +lemma REAL_LT_MULTIPLE: "ALL (x::nat) xa::real.
  10.347 +   (1::nat) < x --> (xa < real x * xa) = ((0::real) < xa)"
  10.348 +  by (import real REAL_LT_MULTIPLE)
  10.349 +
  10.350 +lemma REAL_LT_FRACTION: "ALL (n::nat) d::real. (1::nat) < n --> (d / real n < d) = ((0::real) < d)"
  10.351 +  by (import real REAL_LT_FRACTION)
  10.352 +
  10.353 +lemma REAL_LT_HALF2: "ALL d::real. (d / (2::real) < d) = ((0::real) < d)"
  10.354 +  by (import real REAL_LT_HALF2)
  10.355 +
  10.356 +lemma REAL_DIV_LMUL: "ALL (x::real) y::real. y ~= (0::real) --> y * (x / y) = x"
  10.357 +  by (import real REAL_DIV_LMUL)
  10.358 +
  10.359 +lemma REAL_DIV_RMUL: "ALL (x::real) y::real. y ~= (0::real) --> x / y * y = x"
  10.360 +  by (import real REAL_DIV_RMUL)
  10.361 +
  10.362 +lemma REAL_DOWN: "ALL x::real. (0::real) < x --> (EX xa::real. (0::real) < xa & xa < x)"
  10.363 +  by (import real REAL_DOWN)
  10.364 +
  10.365 +lemma REAL_SUB_SUB: "ALL (x::real) y::real. x - y - x = - y"
  10.366 +  by (import real REAL_SUB_SUB)
  10.367 +
  10.368 +lemma REAL_ADD2_SUB2: "ALL (a::real) (b::real) (c::real) d::real. a + b - (c + d) = a - c + (b - d)"
  10.369 +  by (import real REAL_ADD2_SUB2)
  10.370 +
  10.371 +lemma REAL_LET_ADD: "ALL (x::real) y::real. (0::real) <= x & (0::real) < y --> (0::real) < x + y"
  10.372 +  by (import real REAL_LET_ADD)
  10.373 +
  10.374 +lemma REAL_LTE_ADD: "ALL (x::real) y::real. (0::real) < x & (0::real) <= y --> (0::real) < x + y"
  10.375 +  by (import real REAL_LTE_ADD)
  10.376 +
  10.377 +lemma REAL_SUB_LNEG: "ALL (x::real) y::real. - x - y = - (x + y)"
  10.378 +  by (import real REAL_SUB_LNEG)
  10.379 +
  10.380 +lemma REAL_SUB_NEG2: "ALL (x::real) y::real. - x - - y = y - x"
  10.381 +  by (import real REAL_SUB_NEG2)
  10.382 +
  10.383 +lemma REAL_SUB_TRIANGLE: "ALL (a::real) (b::real) c::real. a - b + (b - c) = a - c"
  10.384 +  by (import real REAL_SUB_TRIANGLE)
  10.385 +
  10.386 +lemma REAL_INV_MUL: "ALL (x::real) y::real.
  10.387 +   x ~= (0::real) & y ~= (0::real) -->
  10.388 +   inverse (x * y) = inverse x * inverse y"
  10.389 +  by (import real REAL_INV_MUL)
  10.390 +
  10.391 +lemma REAL_SUB_INV2: "ALL (x::real) y::real.
  10.392 +   x ~= (0::real) & y ~= (0::real) -->
  10.393 +   inverse x - inverse y = (y - x) / (x * y)"
  10.394 +  by (import real REAL_SUB_INV2)
  10.395 +
  10.396 +lemma REAL_SUB_SUB2: "ALL (x::real) y::real. x - (x - y) = y"
  10.397 +  by (import real REAL_SUB_SUB2)
  10.398 +
  10.399 +lemma REAL_ADD_SUB2: "ALL (x::real) y::real. x - (x + y) = - y"
  10.400 +  by (import real REAL_ADD_SUB2)
  10.401 +
  10.402 +lemma REAL_LE_MUL2: "ALL (x1::real) (x2::real) (y1::real) y2::real.
  10.403 +   (0::real) <= x1 & (0::real) <= y1 & x1 <= x2 & y1 <= y2 -->
  10.404 +   x1 * y1 <= x2 * y2"
  10.405 +  by (import real REAL_LE_MUL2)
  10.406 +
  10.407 +lemma REAL_LE_LDIV: "ALL (x::real) (y::real) z::real. (0::real) < x & y <= z * x --> y / x <= z"
  10.408 +  by (import real REAL_LE_LDIV)
  10.409 +
  10.410 +lemma REAL_LE_RDIV: "ALL (x::real) (y::real) z::real. (0::real) < x & y * x <= z --> y <= z / x"
  10.411 +  by (import real REAL_LE_RDIV)
  10.412 +
  10.413 +lemma REAL_LT_DIV: "ALL (x::real) xa::real.
  10.414 +   (0::real) < x & (0::real) < xa --> (0::real) < x / xa"
  10.415 +  by (import real REAL_LT_DIV)
  10.416 +
  10.417 +lemma REAL_LE_DIV: "ALL (x::real) xa::real.
  10.418 +   (0::real) <= x & (0::real) <= xa --> (0::real) <= x / xa"
  10.419 +  by (import real REAL_LE_DIV)
  10.420 +
  10.421 +lemma REAL_LT_1: "ALL (x::real) y::real. (0::real) <= x & x < y --> x / y < (1::real)"
  10.422 +  by (import real REAL_LT_1)
  10.423 +
  10.424 +lemma REAL_POS_NZ: "ALL x::real. (0::real) < x --> x ~= (0::real)"
  10.425 +  by (import real REAL_POS_NZ)
  10.426 +
  10.427 +lemma REAL_EQ_LMUL_IMP: "ALL (x::real) (xa::real) xb::real.
  10.428 +   x ~= (0::real) & x * xa = x * xb --> xa = xb"
  10.429 +  by (import real REAL_EQ_LMUL_IMP)
  10.430 +
  10.431 +lemma REAL_FACT_NZ: "ALL n. real (FACT n) ~= 0"
  10.432 +  by (import real REAL_FACT_NZ)
  10.433 +
  10.434 +lemma REAL_DIFFSQ: "ALL (x::real) y::real. (x + y) * (x - y) = x * x - y * y"
  10.435 +  by (import real REAL_DIFFSQ)
  10.436 +
  10.437 +lemma REAL_POASQ: "ALL x::real. ((0::real) < x * x) = (x ~= (0::real))"
  10.438 +  by (import real REAL_POASQ)
  10.439 +
  10.440 +lemma REAL_SUMSQ: "ALL (x::real) y::real.
  10.441 +   (x * x + y * y = (0::real)) = (x = (0::real) & y = (0::real))"
  10.442 +  by (import real REAL_SUMSQ)
  10.443 +
  10.444 +lemma REAL_MIDDLE1: "ALL (a::real) b::real. a <= b --> a <= (a + b) / (2::real)"
  10.445 +  by (import real REAL_MIDDLE1)
  10.446 +
  10.447 +lemma REAL_MIDDLE2: "ALL (a::real) b::real. a <= b --> (a + b) / (2::real) <= b"
  10.448 +  by (import real REAL_MIDDLE2)
  10.449 +
  10.450 +lemma ABS_LT_MUL2: "ALL (w::real) (x::real) (y::real) z::real.
  10.451 +   abs w < y & abs x < z --> abs (w * x) < y * z"
  10.452 +  by (import real ABS_LT_MUL2)
  10.453 +
  10.454 +lemma ABS_SUB: "ALL (x::real) y::real. abs (x - y) = abs (y - x)"
  10.455 +  by (import real ABS_SUB)
  10.456 +
  10.457 +lemma ABS_REFL: "ALL x::real. (abs x = x) = ((0::real) <= x)"
  10.458 +  by (import real ABS_REFL)
  10.459 +
  10.460 +lemma ABS_BETWEEN: "ALL (x::real) (y::real) d::real.
  10.461 +   ((0::real) < d & x - d < y & y < x + d) = (abs (y - x) < d)"
  10.462 +  by (import real ABS_BETWEEN)
  10.463 +
  10.464 +lemma ABS_BOUND: "ALL (x::real) (y::real) d::real. abs (x - y) < d --> y < x + d"
  10.465 +  by (import real ABS_BOUND)
  10.466 +
  10.467 +lemma ABS_STILLNZ: "ALL (x::real) y::real. abs (x - y) < abs y --> x ~= (0::real)"
  10.468 +  by (import real ABS_STILLNZ)
  10.469 +
  10.470 +lemma ABS_CASES: "ALL x::real. x = (0::real) | (0::real) < abs x"
  10.471 +  by (import real ABS_CASES)
  10.472 +
  10.473 +lemma ABS_BETWEEN1: "ALL (x::real) (y::real) z::real. x < z & abs (y - x) < z - x --> y < z"
  10.474 +  by (import real ABS_BETWEEN1)
  10.475 +
  10.476 +lemma ABS_SIGN: "ALL (x::real) y::real. abs (x - y) < y --> (0::real) < x"
  10.477 +  by (import real ABS_SIGN)
  10.478 +
  10.479 +lemma ABS_SIGN2: "ALL (x::real) y::real. abs (x - y) < - y --> x < (0::real)"
  10.480 +  by (import real ABS_SIGN2)
  10.481 +
  10.482 +lemma ABS_CIRCLE: "ALL (x::real) (y::real) h::real.
  10.483 +   abs h < abs y - abs x --> abs (x + h) < abs y"
  10.484 +  by (import real ABS_CIRCLE)
  10.485 +
  10.486 +lemma REAL_SUB_ABS: "ALL (x::real) y::real. abs x - abs y <= abs (x - y)"
  10.487 +  by (import real REAL_SUB_ABS)
  10.488 +
  10.489 +lemma ABS_SUB_ABS: "ALL (x::real) y::real. abs (abs x - abs y) <= abs (x - y)"
  10.490 +  by (import real ABS_SUB_ABS)
  10.491 +
  10.492 +lemma ABS_BETWEEN2: "ALL (x0::real) (x::real) (y0::real) y::real.
  10.493 +   x0 < y0 &
  10.494 +   abs (x - x0) < (y0 - x0) / (2::real) &
  10.495 +   abs (y - y0) < (y0 - x0) / (2::real) -->
  10.496 +   x < y"
  10.497 +  by (import real ABS_BETWEEN2)
  10.498 +
  10.499 +lemma POW_PLUS1: "ALL e. 0 < e --> (ALL n. 1 + real n * e <= (1 + e) ^ n)"
  10.500 +  by (import real POW_PLUS1)
  10.501 +
  10.502 +lemma POW_M1: "ALL n::nat. abs ((- (1::real)) ^ n) = (1::real)"
  10.503 +  by (import real POW_M1)
  10.504 +
  10.505 +lemma REAL_LE1_POW2: "ALL x::real. (1::real) <= x --> (1::real) <= x ^ 2"
  10.506 +  by (import real REAL_LE1_POW2)
  10.507 +
  10.508 +lemma REAL_LT1_POW2: "ALL x::real. (1::real) < x --> (1::real) < x ^ 2"
  10.509 +  by (import real REAL_LT1_POW2)
  10.510 +
  10.511 +lemma POW_POS_LT: "ALL (x::real) n::nat. (0::real) < x --> (0::real) < x ^ Suc n"
  10.512 +  by (import real POW_POS_LT)
  10.513 +
  10.514 +lemma POW_LT: "ALL (n::nat) (x::real) y::real.
  10.515 +   (0::real) <= x & x < y --> x ^ Suc n < y ^ Suc n"
  10.516 +  by (import real POW_LT)
  10.517 +
  10.518 +lemma POW_ZERO_EQ: "ALL (n::nat) x::real. (x ^ Suc n = (0::real)) = (x = (0::real))"
  10.519 +  by (import real POW_ZERO_EQ)
  10.520 +
  10.521 +lemma REAL_POW_LT2: "ALL (n::nat) (x::real) y::real.
  10.522 +   n ~= (0::nat) & (0::real) <= x & x < y --> x ^ n < y ^ n"
  10.523 +  by (import real REAL_POW_LT2)
  10.524 +
  10.525 +lemma REAL_SUP_SOMEPOS: "ALL P::real => bool.
  10.526 +   (EX x::real. P x & (0::real) < x) &
  10.527 +   (EX z::real. ALL x::real. P x --> x < z) -->
  10.528 +   (EX s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s))"
  10.529 +  by (import real REAL_SUP_SOMEPOS)
  10.530 +
  10.531 +lemma SUP_LEMMA1: "ALL (P::real => bool) (s::real) d::real.
  10.532 +   (ALL y::real. (EX x::real. P (x + d) & y < x) = (y < s)) -->
  10.533 +   (ALL y::real. (EX x::real. P x & y < x) = (y < s + d))"
  10.534 +  by (import real SUP_LEMMA1)
  10.535 +
  10.536 +lemma SUP_LEMMA2: "ALL P::real => bool.
  10.537 +   Ex P --> (EX (d::real) x::real. P (x + d) & (0::real) < x)"
  10.538 +  by (import real SUP_LEMMA2)
  10.539 +
  10.540 +lemma SUP_LEMMA3: "ALL d::real.
  10.541 +   (EX z::real. ALL x::real. (P::real => bool) x --> x < z) -->
  10.542 +   (EX x::real. ALL xa::real. P (xa + d) --> xa < x)"
  10.543 +  by (import real SUP_LEMMA3)
  10.544 +
  10.545 +lemma REAL_SUP_EXISTS: "ALL P::real => bool.
  10.546 +   Ex P & (EX z::real. ALL x::real. P x --> x < z) -->
  10.547 +   (EX x::real. ALL y::real. (EX x::real. P x & y < x) = (y < x))"
  10.548 +  by (import real REAL_SUP_EXISTS)
  10.549 +
  10.550 +constdefs
  10.551 +  sup :: "(real => bool) => real" 
  10.552 +  "sup == %P. SOME s. ALL y. (EX x. P x & y < x) = (y < s)"
  10.553 +
  10.554 +lemma sup: "ALL P. sup P = (SOME s. ALL y. (EX x. P x & y < x) = (y < s))"
  10.555 +  by (import real sup)
  10.556 +
  10.557 +lemma REAL_SUP: "ALL P.
  10.558 +   Ex P & (EX z. ALL x. P x --> x < z) -->
  10.559 +   (ALL y. (EX x. P x & y < x) = (y < sup P))"
  10.560 +  by (import real REAL_SUP)
  10.561 +
  10.562 +lemma REAL_SUP_UBOUND: "ALL P. Ex P & (EX z. ALL x. P x --> x < z) --> (ALL y. P y --> y <= sup P)"
  10.563 +  by (import real REAL_SUP_UBOUND)
  10.564 +
  10.565 +lemma SETOK_LE_LT: "ALL P::real => bool.
  10.566 +   (Ex P & (EX z::real. ALL x::real. P x --> x <= z)) =
  10.567 +   (Ex P & (EX z::real. ALL x::real. P x --> x < z))"
  10.568 +  by (import real SETOK_LE_LT)
  10.569 +
  10.570 +lemma REAL_SUP_LE: "ALL P.
  10.571 +   Ex P & (EX z. ALL x. P x --> x <= z) -->
  10.572 +   (ALL y. (EX x. P x & y < x) = (y < sup P))"
  10.573 +  by (import real REAL_SUP_LE)
  10.574 +
  10.575 +lemma REAL_SUP_UBOUND_LE: "ALL P. Ex P & (EX z. ALL x. P x --> x <= z) --> (ALL y. P y --> y <= sup P)"
  10.576 +  by (import real REAL_SUP_UBOUND_LE)
  10.577 +
  10.578 +lemma REAL_ARCH_LEAST: "ALL y.
  10.579 +   0 < y -->
  10.580 +   (ALL x. 0 <= x --> (EX n. real n * y <= x & x < real (Suc n) * y))"
  10.581 +  by (import real REAL_ARCH_LEAST)
  10.582 +
  10.583 +consts
  10.584 +  sumc :: "nat => nat => (nat => real) => real" 
  10.585 +
  10.586 +specification (sumc) sumc: "(ALL n f. sumc n 0 f = 0) &
  10.587 +(ALL n m f. sumc n (Suc m) f = sumc n m f + f (n + m))"
  10.588 +  by (import real sumc)
  10.589 +
  10.590 +constdefs
  10.591 +  sum :: "nat * nat => (nat => real) => real" 
  10.592 +  "real.sum == split sumc"
  10.593 +
  10.594 +lemma SUM_DEF: "ALL m n f. real.sum (m, n) f = sumc m n f"
  10.595 +  by (import real SUM_DEF)
  10.596 +
  10.597 +lemma sum: "ALL x xa xb.
  10.598 +   real.sum (xa, 0) x = 0 &
  10.599 +   real.sum (xa, Suc xb) x = real.sum (xa, xb) x + x (xa + xb)"
  10.600 +  by (import real sum)
  10.601 +
  10.602 +lemma SUM_TWO: "ALL f n p. real.sum (0, n) f + real.sum (n, p) f = real.sum (0, n + p) f"
  10.603 +  by (import real SUM_TWO)
  10.604 +
  10.605 +lemma SUM_DIFF: "ALL f m n. real.sum (m, n) f = real.sum (0, m + n) f - real.sum (0, m) f"
  10.606 +  by (import real SUM_DIFF)
  10.607 +
  10.608 +lemma ABS_SUM: "ALL f m n. abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
  10.609 +  by (import real ABS_SUM)
  10.610 +
  10.611 +lemma SUM_LE: "ALL f g m n.
  10.612 +   (ALL r. m <= r & r < n + m --> f r <= g r) -->
  10.613 +   real.sum (m, n) f <= real.sum (m, n) g"
  10.614 +  by (import real SUM_LE)
  10.615 +
  10.616 +lemma SUM_EQ: "ALL f g m n.
  10.617 +   (ALL r. m <= r & r < n + m --> f r = g r) -->
  10.618 +   real.sum (m, n) f = real.sum (m, n) g"
  10.619 +  by (import real SUM_EQ)
  10.620 +
  10.621 +lemma SUM_POS: "ALL f. (ALL n. 0 <= f n) --> (ALL m n. 0 <= real.sum (m, n) f)"
  10.622 +  by (import real SUM_POS)
  10.623 +
  10.624 +lemma SUM_POS_GEN: "ALL f m. (ALL n. m <= n --> 0 <= f n) --> (ALL n. 0 <= real.sum (m, n) f)"
  10.625 +  by (import real SUM_POS_GEN)
  10.626 +
  10.627 +lemma SUM_ABS: "ALL f m x.
  10.628 +   abs (real.sum (m, x) (%m. abs (f m))) = real.sum (m, x) (%m. abs (f m))"
  10.629 +  by (import real SUM_ABS)
  10.630 +
  10.631 +lemma SUM_ABS_LE: "ALL f m n. abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
  10.632 +  by (import real SUM_ABS_LE)
  10.633 +
  10.634 +lemma SUM_ZERO: "ALL f N.
  10.635 +   (ALL n. N <= n --> f n = 0) -->
  10.636 +   (ALL m n. N <= m --> real.sum (m, n) f = 0)"
  10.637 +  by (import real SUM_ZERO)
  10.638 +
  10.639 +lemma SUM_ADD: "ALL f g m n.
  10.640 +   real.sum (m, n) (%n. f n + g n) = real.sum (m, n) f + real.sum (m, n) g"
  10.641 +  by (import real SUM_ADD)
  10.642 +
  10.643 +lemma SUM_CMUL: "ALL f c m n. real.sum (m, n) (%n. c * f n) = c * real.sum (m, n) f"
  10.644 +  by (import real SUM_CMUL)
  10.645 +
  10.646 +lemma SUM_NEG: "ALL f n d. real.sum (n, d) (%n. - f n) = - real.sum (n, d) f"
  10.647 +  by (import real SUM_NEG)
  10.648 +
  10.649 +lemma SUM_SUB: "ALL f g m n.
  10.650 +   real.sum (m, n) (%x. f x - g x) = real.sum (m, n) f - real.sum (m, n) g"
  10.651 +  by (import real SUM_SUB)
  10.652 +
  10.653 +lemma SUM_SUBST: "ALL f g m n.
  10.654 +   (ALL p. m <= p & p < m + n --> f p = g p) -->
  10.655 +   real.sum (m, n) f = real.sum (m, n) g"
  10.656 +  by (import real SUM_SUBST)
  10.657 +
  10.658 +lemma SUM_NSUB: "ALL n f c. real.sum (0, n) f - real n * c = real.sum (0, n) (%p. f p - c)"
  10.659 +  by (import real SUM_NSUB)
  10.660 +
  10.661 +lemma SUM_BOUND: "ALL f k m n.
  10.662 +   (ALL p. m <= p & p < m + n --> f p <= k) -->
  10.663 +   real.sum (m, n) f <= real n * k"
  10.664 +  by (import real SUM_BOUND)
  10.665 +
  10.666 +lemma SUM_GROUP: "ALL n k f.
  10.667 +   real.sum (0, n) (%m. real.sum (m * k, k) f) = real.sum (0, n * k) f"
  10.668 +  by (import real SUM_GROUP)
  10.669 +
  10.670 +lemma SUM_1: "ALL f n. real.sum (n, 1) f = f n"
  10.671 +  by (import real SUM_1)
  10.672 +
  10.673 +lemma SUM_2: "ALL f n. real.sum (n, 2) f = f n + f (n + 1)"
  10.674 +  by (import real SUM_2)
  10.675 +
  10.676 +lemma SUM_OFFSET: "ALL f n k.
  10.677 +   real.sum (0, n) (%m. f (m + k)) =
  10.678 +   real.sum (0, n + k) f - real.sum (0, k) f"
  10.679 +  by (import real SUM_OFFSET)
  10.680 +
  10.681 +lemma SUM_REINDEX: "ALL f m k n. real.sum (m + k, n) f = real.sum (m, n) (%r. f (r + k))"
  10.682 +  by (import real SUM_REINDEX)
  10.683 +
  10.684 +lemma SUM_0: "ALL m n. real.sum (m, n) (%r. 0) = 0"
  10.685 +  by (import real SUM_0)
  10.686 +
  10.687 +lemma SUM_PERMUTE_0: "ALL n p.
  10.688 +   (ALL y<n. EX! x. x < n & p x = y) -->
  10.689 +   (ALL f. real.sum (0, n) (%n. f (p n)) = real.sum (0, n) f)"
  10.690 +  by (import real SUM_PERMUTE_0)
  10.691 +
  10.692 +lemma SUM_CANCEL: "ALL f n d. real.sum (n, d) (%n. f (Suc n) - f n) = f (n + d) - f n"
  10.693 +  by (import real SUM_CANCEL)
  10.694 +
  10.695 +lemma REAL_LE_RNEG: "ALL (x::real) y::real. (x <= - y) = (x + y <= (0::real))"
  10.696 +  by (import real REAL_LE_RNEG)
  10.697 +
  10.698 +lemma REAL_EQ_RDIV_EQ: "ALL (x::real) (xa::real) xb::real.
  10.699 +   (0::real) < xb --> (x = xa / xb) = (x * xb = xa)"
  10.700 +  by (import real REAL_EQ_RDIV_EQ)
  10.701 +
  10.702 +lemma REAL_EQ_LDIV_EQ: "ALL (x::real) (xa::real) xb::real.
  10.703 +   (0::real) < xb --> (x / xb = xa) = (x = xa * xb)"
  10.704 +  by (import real REAL_EQ_LDIV_EQ)
  10.705 +
  10.706 +;end_setup
  10.707 +
  10.708 +;setup_theory topology
  10.709 +
  10.710 +constdefs
  10.711 +  re_Union :: "(('a => bool) => bool) => 'a => bool" 
  10.712 +  "re_Union == %P x. EX s. P s & s x"
  10.713 +
  10.714 +lemma re_Union: "ALL P. re_Union P = (%x. EX s. P s & s x)"
  10.715 +  by (import topology re_Union)
  10.716 +
  10.717 +constdefs
  10.718 +  re_union :: "('a => bool) => ('a => bool) => 'a => bool" 
  10.719 +  "re_union == %P Q x. P x | Q x"
  10.720 +
  10.721 +lemma re_union: "ALL P Q. re_union P Q = (%x. P x | Q x)"
  10.722 +  by (import topology re_union)
  10.723 +
  10.724 +constdefs
  10.725 +  re_intersect :: "('a => bool) => ('a => bool) => 'a => bool" 
  10.726 +  "re_intersect == %P Q x. P x & Q x"
  10.727 +
  10.728 +lemma re_intersect: "ALL P Q. re_intersect P Q = (%x. P x & Q x)"
  10.729 +  by (import topology re_intersect)
  10.730 +
  10.731 +constdefs
  10.732 +  re_null :: "'a => bool" 
  10.733 +  "re_null == %x. False"
  10.734 +
  10.735 +lemma re_null: "re_null = (%x. False)"
  10.736 +  by (import topology re_null)
  10.737 +
  10.738 +constdefs
  10.739 +  re_universe :: "'a => bool" 
  10.740 +  "re_universe == %x. True"
  10.741 +
  10.742 +lemma re_universe: "re_universe = (%x. True)"
  10.743 +  by (import topology re_universe)
  10.744 +
  10.745 +constdefs
  10.746 +  re_subset :: "('a => bool) => ('a => bool) => bool" 
  10.747 +  "re_subset == %P Q. ALL x. P x --> Q x"
  10.748 +
  10.749 +lemma re_subset: "ALL P Q. re_subset P Q = (ALL x. P x --> Q x)"
  10.750 +  by (import topology re_subset)
  10.751 +
  10.752 +constdefs
  10.753 +  re_compl :: "('a => bool) => 'a => bool" 
  10.754 +  "re_compl == %P x. ~ P x"
  10.755 +
  10.756 +lemma re_compl: "ALL P. re_compl P = (%x. ~ P x)"
  10.757 +  by (import topology re_compl)
  10.758 +
  10.759 +lemma SUBSET_REFL: "ALL P. re_subset P P"
  10.760 +  by (import topology SUBSET_REFL)
  10.761 +
  10.762 +lemma COMPL_MEM: "ALL P x. P x = (~ re_compl P x)"
  10.763 +  by (import topology COMPL_MEM)
  10.764 +
  10.765 +lemma SUBSET_ANTISYM: "ALL P Q. (re_subset P Q & re_subset Q P) = (P = Q)"
  10.766 +  by (import topology SUBSET_ANTISYM)
  10.767 +
  10.768 +lemma SUBSET_TRANS: "ALL P Q R. re_subset P Q & re_subset Q R --> re_subset P R"
  10.769 +  by (import topology SUBSET_TRANS)
  10.770 +
  10.771 +constdefs
  10.772 +  istopology :: "(('a => bool) => bool) => bool" 
  10.773 +  "istopology ==
  10.774 +%L. L re_null &
  10.775 +    L re_universe &
  10.776 +    (ALL a b. L a & L b --> L (re_intersect a b)) &
  10.777 +    (ALL P. re_subset P L --> L (re_Union P))"
  10.778 +
  10.779 +lemma istopology: "ALL L.
  10.780 +   istopology L =
  10.781 +   (L re_null &
  10.782 +    L re_universe &
  10.783 +    (ALL a b. L a & L b --> L (re_intersect a b)) &
  10.784 +    (ALL P. re_subset P L --> L (re_Union P)))"
  10.785 +  by (import topology istopology)
  10.786 +
  10.787 +typedef (open) ('a) topology = "(Collect::((('a => bool) => bool) => bool) => (('a => bool) => bool) set)
  10.788 + (istopology::(('a => bool) => bool) => bool)" 
  10.789 +  by (rule typedef_helper,import topology topology_TY_DEF)
  10.790 +
  10.791 +lemmas topology_TY_DEF = typedef_hol2hol4 [OF type_definition_topology]
  10.792 +
  10.793 +consts
  10.794 +  topology :: "(('a => bool) => bool) => 'a topology" 
  10.795 +  "open" :: "'a topology => ('a => bool) => bool" 
  10.796 +
  10.797 +specification ("open" topology) topology_tybij: "(ALL a::'a topology. topology (open a) = a) &
  10.798 +(ALL r::('a => bool) => bool. istopology r = (open (topology r) = r))"
  10.799 +  by (import topology topology_tybij)
  10.800 +
  10.801 +lemma TOPOLOGY: "ALL L.
  10.802 +   open L re_null &
  10.803 +   open L re_universe &
  10.804 +   (ALL a b. open L a & open L b --> open L (re_intersect a b)) &
  10.805 +   (ALL P. re_subset P (open L) --> open L (re_Union P))"
  10.806 +  by (import topology TOPOLOGY)
  10.807 +
  10.808 +lemma TOPOLOGY_UNION: "ALL x xa. re_subset xa (open x) --> open x (re_Union xa)"
  10.809 +  by (import topology TOPOLOGY_UNION)
  10.810 +
  10.811 +constdefs
  10.812 +  neigh :: "'a topology => ('a => bool) * 'a => bool" 
  10.813 +  "neigh == %top (N, x). EX P. open top P & re_subset P N & P x"
  10.814 +
  10.815 +lemma neigh: "ALL top N x. neigh top (N, x) = (EX P. open top P & re_subset P N & P x)"
  10.816 +  by (import topology neigh)
  10.817 +
  10.818 +lemma OPEN_OWN_NEIGH: "ALL S' top x. open top S' & S' x --> neigh top (S', x)"
  10.819 +  by (import topology OPEN_OWN_NEIGH)
  10.820 +
  10.821 +lemma OPEN_UNOPEN: "ALL S' top. open top S' = (re_Union (%P. open top P & re_subset P S') = S')"
  10.822 +  by (import topology OPEN_UNOPEN)
  10.823 +
  10.824 +lemma OPEN_SUBOPEN: "ALL S' top.
  10.825 +   open top S' = (ALL x. S' x --> (EX P. P x & open top P & re_subset P S'))"
  10.826 +  by (import topology OPEN_SUBOPEN)
  10.827 +
  10.828 +lemma OPEN_NEIGH: "ALL S' top.
  10.829 +   open top S' = (ALL x. S' x --> (EX N. neigh top (N, x) & re_subset N S'))"
  10.830 +  by (import topology OPEN_NEIGH)
  10.831 +
  10.832 +constdefs
  10.833 +  closed :: "'a topology => ('a => bool) => bool" 
  10.834 +  "closed == %L S'. open L (re_compl S')"
  10.835 +
  10.836 +lemma closed: "ALL L S'. closed L S' = open L (re_compl S')"
  10.837 +  by (import topology closed)
  10.838 +
  10.839 +constdefs
  10.840 +  limpt :: "'a topology => 'a => ('a => bool) => bool" 
  10.841 +  "limpt == %top x S'. ALL N. neigh top (N, x) --> (EX y. x ~= y & S' y & N y)"
  10.842 +
  10.843 +lemma limpt: "ALL top x S'.
  10.844 +   limpt top x S' =
  10.845 +   (ALL N. neigh top (N, x) --> (EX y. x ~= y & S' y & N y))"
  10.846 +  by (import topology limpt)
  10.847 +
  10.848 +lemma CLOSED_LIMPT: "ALL top S'. closed top S' = (ALL x. limpt top x S' --> S' x)"
  10.849 +  by (import topology CLOSED_LIMPT)
  10.850 +
  10.851 +constdefs
  10.852 +  ismet :: "('a * 'a => real) => bool" 
  10.853 +  "ismet ==
  10.854 +%m. (ALL x y. (m (x, y) = 0) = (x = y)) &
  10.855 +    (ALL x y z. m (y, z) <= m (x, y) + m (x, z))"
  10.856 +
  10.857 +lemma ismet: "ALL m.
  10.858 +   ismet m =
  10.859 +   ((ALL x y. (m (x, y) = 0) = (x = y)) &
  10.860 +    (ALL x y z. m (y, z) <= m (x, y) + m (x, z)))"
  10.861 +  by (import topology ismet)
  10.862 +
  10.863 +typedef (open) ('a) metric = "(Collect::(('a * 'a => real) => bool) => ('a * 'a => real) set)
  10.864 + (ismet::('a * 'a => real) => bool)" 
  10.865 +  by (rule typedef_helper,import topology metric_TY_DEF)
  10.866 +
  10.867 +lemmas metric_TY_DEF = typedef_hol2hol4 [OF type_definition_metric]
  10.868 +
  10.869 +consts
  10.870 +  metric :: "('a * 'a => real) => 'a metric" 
  10.871 +  dist :: "'a metric => 'a * 'a => real" 
  10.872 +
  10.873 +specification (dist metric) metric_tybij: "(ALL a::'a metric. metric (dist a) = a) &
  10.874 +(ALL r::'a * 'a => real. ismet r = (dist (metric r) = r))"
  10.875 +  by (import topology metric_tybij)
  10.876 +
  10.877 +lemma METRIC_ISMET: "ALL m. ismet (dist m)"
  10.878 +  by (import topology METRIC_ISMET)
  10.879 +
  10.880 +lemma METRIC_ZERO: "ALL m x y. (dist m (x, y) = 0) = (x = y)"
  10.881 +  by (import topology METRIC_ZERO)
  10.882 +
  10.883 +lemma METRIC_SAME: "ALL m x. dist m (x, x) = 0"
  10.884 +  by (import topology METRIC_SAME)
  10.885 +
  10.886 +lemma METRIC_POS: "ALL m x y. 0 <= dist m (x, y)"
  10.887 +  by (import topology METRIC_POS)
  10.888 +
  10.889 +lemma METRIC_SYM: "ALL m x y. dist m (x, y) = dist m (y, x)"
  10.890 +  by (import topology METRIC_SYM)
  10.891 +
  10.892 +lemma METRIC_TRIANGLE: "ALL m x y z. dist m (x, z) <= dist m (x, y) + dist m (y, z)"
  10.893 +  by (import topology METRIC_TRIANGLE)
  10.894 +
  10.895 +lemma METRIC_NZ: "ALL m x y. x ~= y --> 0 < dist m (x, y)"
  10.896 +  by (import topology METRIC_NZ)
  10.897 +
  10.898 +constdefs
  10.899 +  mtop :: "'a metric => 'a topology" 
  10.900 +  "mtop ==
  10.901 +%m. topology
  10.902 +     (%S'. ALL x.
  10.903 +              S' x --> (EX e. 0 < e & (ALL y. dist m (x, y) < e --> S' y)))"
  10.904 +
  10.905 +lemma mtop: "ALL m.
  10.906 +   mtop m =
  10.907 +   topology
  10.908 +    (%S'. ALL x.
  10.909 +             S' x --> (EX e. 0 < e & (ALL y. dist m (x, y) < e --> S' y)))"
  10.910 +  by (import topology mtop)
  10.911 +
  10.912 +lemma mtop_istopology: "ALL m.
  10.913 +   istopology
  10.914 +    (%S'. ALL x.
  10.915 +             S' x --> (EX e. 0 < e & (ALL y. dist m (x, y) < e --> S' y)))"
  10.916 +  by (import topology mtop_istopology)
  10.917 +
  10.918 +lemma MTOP_OPEN: "ALL S' x.
  10.919 +   open (mtop x) S' =
  10.920 +   (ALL xa. S' xa --> (EX e. 0 < e & (ALL y. dist x (xa, y) < e --> S' y)))"
  10.921 +  by (import topology MTOP_OPEN)
  10.922 +
  10.923 +constdefs
  10.924 +  B :: "'a metric => 'a * real => 'a => bool" 
  10.925 +  "B == %m (x, e) y. dist m (x, y) < e"
  10.926 +
  10.927 +lemma ball: "ALL m x e. B m (x, e) = (%y. dist m (x, y) < e)"
  10.928 +  by (import topology ball)
  10.929 +
  10.930 +lemma BALL_OPEN: "ALL m x e. 0 < e --> open (mtop m) (B m (x, e))"
  10.931 +  by (import topology BALL_OPEN)
  10.932 +
  10.933 +lemma BALL_NEIGH: "ALL m x e. 0 < e --> neigh (mtop m) (B m (x, e), x)"
  10.934 +  by (import topology BALL_NEIGH)
  10.935 +
  10.936 +lemma MTOP_LIMPT: "ALL m x S'.
  10.937 +   limpt (mtop m) x S' =
  10.938 +   (ALL e. 0 < e --> (EX y. x ~= y & S' y & dist m (x, y) < e))"
  10.939 +  by (import topology MTOP_LIMPT)
  10.940 +
  10.941 +lemma ISMET_R1: "ismet (%(x, y). abs (y - x))"
  10.942 +  by (import topology ISMET_R1)
  10.943 +
  10.944 +constdefs
  10.945 +  mr1 :: "real metric" 
  10.946 +  "mr1 == metric (%(x, y). abs (y - x))"
  10.947 +
  10.948 +lemma mr1: "mr1 = metric (%(x, y). abs (y - x))"
  10.949 +  by (import topology mr1)
  10.950 +
  10.951 +lemma MR1_DEF: "ALL x y. dist mr1 (x, y) = abs (y - x)"
  10.952 +  by (import topology MR1_DEF)
  10.953 +
  10.954 +lemma MR1_ADD: "ALL x d. dist mr1 (x, x + d) = abs d"
  10.955 +  by (import topology MR1_ADD)
  10.956 +
  10.957 +lemma MR1_SUB: "ALL x d. dist mr1 (x, x - d) = abs d"
  10.958 +  by (import topology MR1_SUB)
  10.959 +
  10.960 +lemma MR1_ADD_POS: "ALL x d. 0 <= d --> dist mr1 (x, x + d) = d"
  10.961 +  by (import topology MR1_ADD_POS)
  10.962 +
  10.963 +lemma MR1_SUB_LE: "ALL x d. 0 <= d --> dist mr1 (x, x - d) = d"
  10.964 +  by (import topology MR1_SUB_LE)
  10.965 +
  10.966 +lemma MR1_ADD_LT: "ALL x d. 0 < d --> dist mr1 (x, x + d) = d"
  10.967 +  by (import topology MR1_ADD_LT)
  10.968 +
  10.969 +lemma MR1_SUB_LT: "ALL x d. 0 < d --> dist mr1 (x, x - d) = d"
  10.970 +  by (import topology MR1_SUB_LT)
  10.971 +
  10.972 +lemma MR1_BETWEEN1: "ALL x y z. x < z & dist mr1 (x, y) < z - x --> y < z"
  10.973 +  by (import topology MR1_BETWEEN1)
  10.974 +
  10.975 +lemma MR1_LIMPT: "ALL x. limpt (mtop mr1) x re_universe"
  10.976 +  by (import topology MR1_LIMPT)
  10.977 +
  10.978 +;end_setup
  10.979 +
  10.980 +;setup_theory nets
  10.981 +
  10.982 +constdefs
  10.983 +  dorder :: "('a => 'a => bool) => bool" 
  10.984 +  "dorder ==
  10.985 +%g. ALL x y.
  10.986 +       g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y))"
  10.987 +
  10.988 +lemma dorder: "ALL g.
  10.989 +   dorder g =
  10.990 +   (ALL x y.
  10.991 +       g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y)))"
  10.992 +  by (import nets dorder)
  10.993 +
  10.994 +constdefs
  10.995 +  tends :: "('b => 'a) => 'a => 'a topology * ('b => 'b => bool) => bool" 
  10.996 +  "tends ==
  10.997 +%(s::'b => 'a) (l::'a) (top::'a topology, g::'b => 'b => bool).
  10.998 +   ALL N::'a => bool.
  10.999 +      neigh top (N, l) -->
 10.1000 +      (EX n::'b. g n n & (ALL m::'b. g m n --> N (s m)))"
 10.1001 +
 10.1002 +lemma tends: "ALL (s::'b => 'a) (l::'a) (top::'a topology) g::'b => 'b => bool.
 10.1003 +   tends s l (top, g) =
 10.1004 +   (ALL N::'a => bool.
 10.1005 +       neigh top (N, l) -->
 10.1006 +       (EX n::'b. g n n & (ALL m::'b. g m n --> N (s m))))"
 10.1007 +  by (import nets tends)
 10.1008 +
 10.1009 +constdefs
 10.1010 +  bounded :: "'a metric * ('b => 'b => bool) => ('b => 'a) => bool" 
 10.1011 +  "bounded ==
 10.1012 +%(m, g) f. EX k x N. g N N & (ALL n. g n N --> dist m (f n, x) < k)"
 10.1013 +
 10.1014 +lemma bounded: "ALL m g f.
 10.1015 +   bounded (m, g) f =
 10.1016 +   (EX k x N. g N N & (ALL n. g n N --> dist m (f n, x) < k))"
 10.1017 +  by (import nets bounded)
 10.1018 +
 10.1019 +constdefs
 10.1020 +  tendsto :: "'a metric * 'a => 'a => 'a => bool" 
 10.1021 +  "tendsto == %(m, x) y z. 0 < dist m (x, y) & dist m (x, y) <= dist m (x, z)"
 10.1022 +
 10.1023 +lemma tendsto: "ALL m x y z.
 10.1024 +   tendsto (m, x) y z = (0 < dist m (x, y) & dist m (x, y) <= dist m (x, z))"
 10.1025 +  by (import nets tendsto)
 10.1026 +
 10.1027 +lemma DORDER_LEMMA: "ALL g.
 10.1028 +   dorder g -->
 10.1029 +   (ALL P Q.
 10.1030 +       (EX n. g n n & (ALL m. g m n --> P m)) &
 10.1031 +       (EX n. g n n & (ALL m. g m n --> Q m)) -->
 10.1032 +       (EX n. g n n & (ALL m. g m n --> P m & Q m)))"
 10.1033 +  by (import nets DORDER_LEMMA)
 10.1034 +
 10.1035 +lemma DORDER_NGE: "dorder nat_ge"
 10.1036 +  by (import nets DORDER_NGE)
 10.1037 +
 10.1038 +lemma DORDER_TENDSTO: "ALL m x. dorder (tendsto (m, x))"
 10.1039 +  by (import nets DORDER_TENDSTO)
 10.1040 +
 10.1041 +lemma MTOP_TENDS: "ALL d g x x0.
 10.1042 +   tends x x0 (mtop d, g) =
 10.1043 +   (ALL e.
 10.1044 +       0 < e --> (EX n. g n n & (ALL m. g m n --> dist d (x m, x0) < e)))"
 10.1045 +  by (import nets MTOP_TENDS)
 10.1046 +
 10.1047 +lemma MTOP_TENDS_UNIQ: "ALL (g::'b => 'b => bool) d::'a metric.
 10.1048 +   dorder g -->
 10.1049 +   tends (x::'b => 'a) (x0::'a) (mtop d, g) &
 10.1050 +   tends x (x1::'a) (mtop d, g) -->
 10.1051 +   x0 = x1"
 10.1052 +  by (import nets MTOP_TENDS_UNIQ)
 10.1053 +
 10.1054 +lemma SEQ_TENDS: "ALL d x x0.
 10.1055 +   tends x x0 (mtop d, nat_ge) =
 10.1056 +   (ALL xa. 0 < xa --> (EX xb. ALL xc. xb <= xc --> dist d (x xc, x0) < xa))"
 10.1057 +  by (import nets SEQ_TENDS)
 10.1058 +
 10.1059 +lemma LIM_TENDS: "ALL m1 m2 f x0 y0.
 10.1060 +   limpt (mtop m1) x0 re_universe -->
 10.1061 +   tends f y0 (mtop m2, tendsto (m1, x0)) =
 10.1062 +   (ALL e.
 10.1063 +       0 < e -->
 10.1064 +       (EX d. 0 < d &
 10.1065 +              (ALL x.
 10.1066 +                  0 < dist m1 (x, x0) & dist m1 (x, x0) <= d -->
 10.1067 +                  dist m2 (f x, y0) < e)))"
 10.1068 +  by (import nets LIM_TENDS)
 10.1069 +
 10.1070 +lemma LIM_TENDS2: "ALL m1 m2 f x0 y0.
 10.1071 +   limpt (mtop m1) x0 re_universe -->
 10.1072 +   tends f y0 (mtop m2, tendsto (m1, x0)) =
 10.1073 +   (ALL e.
 10.1074 +       0 < e -->
 10.1075 +       (EX d. 0 < d &
 10.1076 +              (ALL x.
 10.1077 +                  0 < dist m1 (x, x0) & dist m1 (x, x0) < d -->
 10.1078 +                  dist m2 (f x, y0) < e)))"
 10.1079 +  by (import nets LIM_TENDS2)
 10.1080 +
 10.1081 +lemma MR1_BOUNDED: "ALL g f.
 10.1082 +   bounded (mr1, g) f = (EX k N. g N N & (ALL n. g n N --> abs (f n) < k))"
 10.1083 +  by (import nets MR1_BOUNDED)
 10.1084 +
 10.1085 +lemma NET_NULL: "ALL g x x0. tends x x0 (mtop mr1, g) = tends (%n. x n - x0) 0 (mtop mr1, g)"
 10.1086 +  by (import nets NET_NULL)
 10.1087 +
 10.1088 +lemma NET_CONV_BOUNDED: "ALL g x x0. tends x x0 (mtop mr1, g) --> bounded (mr1, g) x"
 10.1089 +  by (import nets NET_CONV_BOUNDED)
 10.1090 +
 10.1091 +lemma NET_CONV_NZ: "ALL g x x0.
 10.1092 +   tends x x0 (mtop mr1, g) & x0 ~= 0 -->
 10.1093 +   (EX N. g N N & (ALL n. g n N --> x n ~= 0))"
 10.1094 +  by (import nets NET_CONV_NZ)
 10.1095 +
 10.1096 +lemma NET_CONV_IBOUNDED: "ALL g x x0.
 10.1097 +   tends x x0 (mtop mr1, g) & x0 ~= 0 -->
 10.1098 +   bounded (mr1, g) (%n. inverse (x n))"
 10.1099 +  by (import nets NET_CONV_IBOUNDED)
 10.1100 +
 10.1101 +lemma NET_NULL_ADD: "ALL g.
 10.1102 +   dorder g -->
 10.1103 +   (ALL x y.
 10.1104 +       tends x 0 (mtop mr1, g) & tends y 0 (mtop mr1, g) -->
 10.1105 +       tends (%n. x n + y n) 0 (mtop mr1, g))"
 10.1106 +  by (import nets NET_NULL_ADD)
 10.1107 +
 10.1108 +lemma NET_NULL_MUL: "ALL g.
 10.1109 +   dorder g -->
 10.1110 +   (ALL x y.
 10.1111 +       bounded (mr1, g) x & tends y 0 (mtop mr1, g) -->
 10.1112 +       tends (%n. x n * y n) 0 (mtop mr1, g))"
 10.1113 +  by (import nets NET_NULL_MUL)
 10.1114 +
 10.1115 +lemma NET_NULL_CMUL: "ALL g k x. tends x 0 (mtop mr1, g) --> tends (%n. k * x n) 0 (mtop mr1, g)"
 10.1116 +  by (import nets NET_NULL_CMUL)
 10.1117 +
 10.1118 +lemma NET_ADD: "ALL g.
 10.1119 +   dorder g -->
 10.1120 +   (ALL x x0 y y0.
 10.1121 +       tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
 10.1122 +       tends (%n. x n + y n) (x0 + y0) (mtop mr1, g))"
 10.1123 +  by (import nets NET_ADD)
 10.1124 +
 10.1125 +lemma NET_NEG: "ALL g.
 10.1126 +   dorder g -->
 10.1127 +   (ALL x x0.
 10.1128 +       tends x x0 (mtop mr1, g) = tends (%n. - x n) (- x0) (mtop mr1, g))"
 10.1129 +  by (import nets NET_NEG)
 10.1130 +
 10.1131 +lemma NET_SUB: "ALL g.
 10.1132 +   dorder g -->
 10.1133 +   (ALL x x0 y y0.
 10.1134 +       tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
 10.1135 +       tends (%xa. x xa - y xa) (x0 - y0) (mtop mr1, g))"
 10.1136 +  by (import nets NET_SUB)
 10.1137 +
 10.1138 +lemma NET_MUL: "ALL g.
 10.1139 +   dorder g -->
 10.1140 +   (ALL x y x0 y0.
 10.1141 +       tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
 10.1142 +       tends (%n. x n * y n) (x0 * y0) (mtop mr1, g))"
 10.1143 +  by (import nets NET_MUL)
 10.1144 +
 10.1145 +lemma NET_INV: "ALL g.
 10.1146 +   dorder g -->
 10.1147 +   (ALL x x0.
 10.1148 +       tends x x0 (mtop mr1, g) & x0 ~= 0 -->
 10.1149 +       tends (%n. inverse (x n)) (inverse x0) (mtop mr1, g))"
 10.1150 +  by (import nets NET_INV)
 10.1151 +
 10.1152 +lemma NET_DIV: "ALL g.
 10.1153 +   dorder g -->
 10.1154 +   (ALL x x0 y y0.
 10.1155 +       tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) & y0 ~= 0 -->
 10.1156 +       tends (%xa. x xa / y xa) (x0 / y0) (mtop mr1, g))"
 10.1157 +  by (import nets NET_DIV)
 10.1158 +
 10.1159 +lemma NET_ABS: "ALL g x x0.
 10.1160 +   tends x x0 (mtop mr1, g) --> tends (%n. abs (x n)) (abs x0) (mtop mr1, g)"
 10.1161 +  by (import nets NET_ABS)
 10.1162 +
 10.1163 +lemma NET_LE: "ALL g.
 10.1164 +   dorder g -->
 10.1165 +   (ALL x x0 y y0.
 10.1166 +       tends x x0 (mtop mr1, g) &
 10.1167 +       tends y y0 (mtop mr1, g) &
 10.1168 +       (EX N. g N N & (ALL n. g n N --> x n <= y n)) -->
 10.1169 +       x0 <= y0)"
 10.1170 +  by (import nets NET_LE)
 10.1171 +
 10.1172 +;end_setup
 10.1173 +
 10.1174 +;setup_theory seq
 10.1175 +
 10.1176 +constdefs
 10.1177 +  "-->" :: "(nat => real) => real => bool" ("-->")
 10.1178 +  "--> == %x x0. tends x x0 (mtop mr1, nat_ge)"
 10.1179 +
 10.1180 +lemma tends_num_real: "ALL x x0. --> x x0 = tends x x0 (mtop mr1, nat_ge)"
 10.1181 +  by (import seq tends_num_real)
 10.1182 +
 10.1183 +lemma SEQ: "(All::((nat => real) => bool) => bool)
 10.1184 + (%x::nat => real.
 10.1185 +     (All::(real => bool) => bool)
 10.1186 +      (%x0::real.
 10.1187 +          (op =::bool => bool => bool)
 10.1188 +           ((-->::(nat => real) => real => bool) x x0)
 10.1189 +           ((All::(real => bool) => bool)
 10.1190 +             (%e::real.
 10.1191 +                 (op -->::bool => bool => bool)
 10.1192 +                  ((op <::real => real => bool) (0::real) e)
 10.1193 +                  ((Ex::(nat => bool) => bool)
 10.1194 +                    (%N::nat.
 10.1195 +                        (All::(nat => bool) => bool)
 10.1196 +                         (%n::nat.
 10.1197 +                             (op -->::bool => bool => bool)
 10.1198 +                              ((op <=::nat => nat => bool) N n)
 10.1199 +                              ((op <::real => real => bool)
 10.1200 +                                ((abs::real => real)
 10.1201 +                                  ((op -::real => real => real) (x n) x0))
 10.1202 +                                e))))))))"
 10.1203 +  by (import seq SEQ)
 10.1204 +
 10.1205 +lemma SEQ_CONST: "ALL k. --> (%x. k) k"
 10.1206 +  by (import seq SEQ_CONST)
 10.1207 +
 10.1208 +lemma SEQ_ADD: "(All::((nat => real) => bool) => bool)
 10.1209 + (%x::nat => real.
 10.1210 +     (All::(real => bool) => bool)
 10.1211 +      (%x0::real.
 10.1212 +          (All::((nat => real) => bool) => bool)
 10.1213 +           (%y::nat => real.
 10.1214 +               (All::(real => bool) => bool)
 10.1215 +                (%y0::real.
 10.1216 +                    (op -->::bool => bool => bool)
 10.1217 +                     ((op &::bool => bool => bool)
 10.1218 +                       ((-->::(nat => real) => real => bool) x x0)
 10.1219 +                       ((-->::(nat => real) => real => bool) y y0))
 10.1220 +                     ((-->::(nat => real) => real => bool)
 10.1221 +                       (%n::nat. (op +::real => real => real) (x n) (y n))
 10.1222 +                       ((op +::real => real => real) x0 y0))))))"
 10.1223 +  by (import seq SEQ_ADD)
 10.1224 +
 10.1225 +lemma SEQ_MUL: "(All::((nat => real) => bool) => bool)
 10.1226 + (%x::nat => real.
 10.1227 +     (All::(real => bool) => bool)
 10.1228 +      (%x0::real.
 10.1229 +          (All::((nat => real) => bool) => bool)
 10.1230 +           (%y::nat => real.
 10.1231 +               (All::(real => bool) => bool)
 10.1232 +                (%y0::real.
 10.1233 +                    (op -->::bool => bool => bool)
 10.1234 +                     ((op &::bool => bool => bool)
 10.1235 +                       ((-->::(nat => real) => real => bool) x x0)
 10.1236 +                       ((-->::(nat => real) => real => bool) y y0))
 10.1237 +                     ((-->::(nat => real) => real => bool)
 10.1238 +                       (%n::nat. (op *::real => real => real) (x n) (y n))
 10.1239 +                       ((op *::real => real => real) x0 y0))))))"
 10.1240 +  by (import seq SEQ_MUL)
 10.1241 +
 10.1242 +lemma SEQ_NEG: "ALL x x0. --> x x0 = --> (%n. - x n) (- x0)"
 10.1243 +  by (import seq SEQ_NEG)
 10.1244 +
 10.1245 +lemma SEQ_INV: "(All::((nat => real) => bool) => bool)
 10.1246 + (%x::nat => real.
 10.1247 +     (All::(real => bool) => bool)
 10.1248 +      (%x0::real.
 10.1249 +          (op -->::bool => bool => bool)
 10.1250 +           ((op &::bool => bool => bool)
 10.1251 +             ((-->::(nat => real) => real => bool) x x0)
 10.1252 +             ((Not::bool => bool)
 10.1253 +               ((op =::real => real => bool) x0 (0::real))))
 10.1254 +           ((-->::(nat => real) => real => bool)
 10.1255 +             (%n::nat. (inverse::real => real) (x n))
 10.1256 +             ((inverse::real => real) x0))))"
 10.1257 +  by (import seq SEQ_INV)
 10.1258 +
 10.1259 +lemma SEQ_SUB: "(All::((nat => real) => bool) => bool)
 10.1260 + (%x::nat => real.
 10.1261 +     (All::(real => bool) => bool)
 10.1262 +      (%x0::real.
 10.1263 +          (All::((nat => real) => bool) => bool)
 10.1264 +           (%y::nat => real.
 10.1265 +               (All::(real => bool) => bool)
 10.1266 +                (%y0::real.
 10.1267 +                    (op -->::bool => bool => bool)
 10.1268 +                     ((op &::bool => bool => bool)
 10.1269 +                       ((-->::(nat => real) => real => bool) x x0)
 10.1270 +                       ((-->::(nat => real) => real => bool) y y0))
 10.1271 +                     ((-->::(nat => real) => real => bool)
 10.1272 +                       (%n::nat. (op -::real => real => real) (x n) (y n))
 10.1273 +                       ((op -::real => real => real) x0 y0))))))"
 10.1274 +  by (import seq SEQ_SUB)
 10.1275 +
 10.1276 +lemma SEQ_DIV: "(All::((nat => real) => bool) => bool)
 10.1277 + (%x::nat => real.
 10.1278 +     (All::(real => bool) => bool)
 10.1279 +      (%x0::real.
 10.1280 +          (All::((nat => real) => bool) => bool)
 10.1281 +           (%y::nat => real.
 10.1282 +               (All::(real => bool) => bool)
 10.1283 +                (%y0::real.
 10.1284 +                    (op -->::bool => bool => bool)
 10.1285 +                     ((op &::bool => bool => bool)
 10.1286 +                       ((-->::(nat => real) => real => bool) x x0)
 10.1287 +                       ((op &::bool => bool => bool)
 10.1288 +                         ((-->::(nat => real) => real => bool) y y0)
 10.1289 +                         ((Not::bool => bool)
 10.1290 +                           ((op =::real => real => bool) y0 (0::real)))))
 10.1291 +                     ((-->::(nat => real) => real => bool)
 10.1292 +                       (%n::nat. (op /::real => real => real) (x n) (y n))
 10.1293 +                       ((op /::real => real => real) x0 y0))))))"
 10.1294 +  by (import seq SEQ_DIV)
 10.1295 +
 10.1296 +lemma SEQ_UNIQ: "(All::((nat => real) => bool) => bool)
 10.1297 + (%x::nat => real.
 10.1298 +     (All::(real => bool) => bool)
 10.1299 +      (%x1::real.
 10.1300 +          (All::(real => bool) => bool)
 10.1301 +           (%x2::real.
 10.1302 +               (op -->::bool => bool => bool)
 10.1303 +                ((op &::bool => bool => bool)
 10.1304 +                  ((-->::(nat => real) => real => bool) x x1)
 10.1305 +                  ((-->::(nat => real) => real => bool) x x2))
 10.1306 +                ((op =::real => real => bool) x1 x2))))"
 10.1307 +  by (import seq SEQ_UNIQ)
 10.1308 +
 10.1309 +constdefs
 10.1310 +  convergent :: "(nat => real) => bool" 
 10.1311 +  "convergent == %f. Ex (--> f)"
 10.1312 +
 10.1313 +lemma convergent: "ALL f. convergent f = Ex (--> f)"
 10.1314 +  by (import seq convergent)
 10.1315 +
 10.1316 +constdefs
 10.1317 +  cauchy :: "(nat => real) => bool" 
 10.1318 +  "(op ==::((nat => real) => bool) => ((nat => real) => bool) => prop)
 10.1319 + (cauchy::(nat => real) => bool)
 10.1320 + (%f::nat => real.
 10.1321 +     (All::(real => bool) => bool)
 10.1322 +      (%e::real.
 10.1323 +          (op -->::bool => bool => bool)
 10.1324 +           ((op <::real => real => bool) (0::real) e)
 10.1325 +           ((Ex::(nat => bool) => bool)
 10.1326 +             (%N::nat.
 10.1327 +                 (All::(nat => bool) => bool)
 10.1328 +                  (%m::nat.
 10.1329 +                      (All::(nat => bool) => bool)
 10.1330 +                       (%n::nat.
 10.1331 +                           (op -->::bool => bool => bool)
 10.1332 +                            ((op &::bool => bool => bool)
 10.1333 +                              ((op <=::nat => nat => bool) N m)
 10.1334 +                              ((op <=::nat => nat => bool) N n))
 10.1335 +                            ((op <::real => real => bool)
 10.1336 +                              ((abs::real => real)
 10.1337 +                                ((op -::real => real => real) (f m) (f n)))
 10.1338 +                              e)))))))"
 10.1339 +
 10.1340 +lemma cauchy: "(All::((nat => real) => bool) => bool)
 10.1341 + (%f::nat => real.
 10.1342 +     (op =::bool => bool => bool) ((cauchy::(nat => real) => bool) f)
 10.1343 +      ((All::(real => bool) => bool)
 10.1344 +        (%e::real.
 10.1345 +            (op -->::bool => bool => bool)
 10.1346 +             ((op <::real => real => bool) (0::real) e)
 10.1347 +             ((Ex::(nat => bool) => bool)
 10.1348 +               (%N::nat.
 10.1349 +                   (All::(nat => bool) => bool)
 10.1350 +                    (%m::nat.
 10.1351 +                        (All::(nat => bool) => bool)
 10.1352 +                         (%n::nat.
 10.1353 +                             (op -->::bool => bool => bool)
 10.1354 +                              ((op &::bool => bool => bool)
 10.1355 +                                ((op <=::nat => nat => bool) N m)
 10.1356 +                                ((op <=::nat => nat => bool) N n))
 10.1357 +                              ((op <::real => real => bool)
 10.1358 +                                ((abs::real => real)
 10.1359 +                                  ((op -::real => real => real) (f m)
 10.1360 +                                    (f n)))
 10.1361 +                                e))))))))"
 10.1362 +  by (import seq cauchy)
 10.1363 +
 10.1364 +constdefs
 10.1365 +  lim :: "(nat => real) => real" 
 10.1366 +  "lim == %f. Eps (--> f)"
 10.1367 +
 10.1368 +lemma lim: "ALL f. lim f = Eps (--> f)"
 10.1369 +  by (import seq lim)
 10.1370 +
 10.1371 +lemma SEQ_LIM: "ALL f. convergent f = --> f (lim f)"
 10.1372 +  by (import seq SEQ_LIM)
 10.1373 +
 10.1374 +constdefs
 10.1375 +  subseq :: "(nat => nat) => bool" 
 10.1376 +  "(op ==::((nat => nat) => bool) => ((nat => nat) => bool) => prop)
 10.1377 + (subseq::(nat => nat) => bool)
 10.1378 + (%f::nat => nat.
 10.1379 +     (All::(nat => bool) => bool)
 10.1380 +      (%m::nat.
 10.1381 +          (All::(nat => bool) => bool)
 10.1382 +           (%n::nat.
 10.1383 +               (op -->::bool => bool => bool)
 10.1384 +                ((op <::nat => nat => bool) m n)
 10.1385 +                ((op <::nat => nat => bool) (f m) (f n)))))"
 10.1386 +
 10.1387 +lemma subseq: "(All::((nat => nat) => bool) => bool)
 10.1388 + (%f::nat => nat.
 10.1389 +     (op =::bool => bool => bool) ((subseq::(nat => nat) => bool) f)
 10.1390 +      ((All::(nat => bool) => bool)
 10.1391 +        (%m::nat.
 10.1392 +            (All::(nat => bool) => bool)
 10.1393 +             (%n::nat.
 10.1394 +                 (op -->::bool => bool => bool)
 10.1395 +                  ((op <::nat => nat => bool) m n)
 10.1396 +                  ((op <::nat => nat => bool) (f m) (f n))))))"
 10.1397 +  by (import seq subseq)
 10.1398 +
 10.1399 +lemma SUBSEQ_SUC: "ALL f. subseq f = (ALL n. f n < f (Suc n))"
 10.1400 +  by (import seq SUBSEQ_SUC)
 10.1401 +
 10.1402 +constdefs
 10.1403 +  mono :: "(nat => real) => bool" 
 10.1404 +  "(op ==::((nat => real) => bool) => ((nat => real) => bool) => prop)
 10.1405 + (seq.mono::(nat => real) => bool)
 10.1406 + (%f::nat => real.
 10.1407 +     (op |::bool => bool => bool)
 10.1408 +      ((All::(nat => bool) => bool)
 10.1409 +        (%m::nat.
 10.1410 +            (All::(nat => bool) => bool)
 10.1411 +             (%n::nat.
 10.1412 +                 (op -->::bool => bool => bool)
 10.1413 +                  ((op <=::nat => nat => bool) m n)
 10.1414 +                  ((op <=::real => real => bool) (f m) (f n)))))
 10.1415 +      ((All::(nat => bool) => bool)
 10.1416 +        (%m::nat.
 10.1417 +            (All::(nat => bool) => bool)
 10.1418 +             (%n::nat.
 10.1419 +                 (op -->::bool => bool => bool)
 10.1420 +                  ((op <=::nat => nat => bool) m n)
 10.1421 +                  ((op <=::real => real => bool) (f n) (f m))))))"
 10.1422 +
 10.1423 +lemma mono: "(All::((nat => real) => bool) => bool)
 10.1424 + (%f::nat => real.
 10.1425 +     (op =::bool => bool => bool) ((seq.mono::(nat => real) => bool) f)
 10.1426 +      ((op |::bool => bool => bool)
 10.1427 +        ((All::(nat => bool) => bool)
 10.1428 +          (%m::nat.
 10.1429 +              (All::(nat => bool) => bool)
 10.1430 +               (%n::nat.
 10.1431 +                   (op -->::bool => bool => bool)
 10.1432 +                    ((op <=::nat => nat => bool) m n)
 10.1433 +                    ((op <=::real => real => bool) (f m) (f n)))))
 10.1434 +        ((All::(nat => bool) => bool)
 10.1435 +          (%m::nat.
 10.1436 +              (All::(nat => bool) => bool)
 10.1437 +               (%n::nat.
 10.1438 +                   (op -->::bool => bool => bool)
 10.1439 +                    ((op <=::nat => nat => bool) m n)
 10.1440 +                    ((op <=::real => real => bool) (f n) (f m)))))))"
 10.1441 +  by (import seq mono)
 10.1442 +
 10.1443 +lemma MONO_SUC: "ALL f. seq.mono f = ((ALL x. f x <= f (Suc x)) | (ALL n. f (Suc n) <= f n))"
 10.1444 +  by (import seq MONO_SUC)
 10.1445 +
 10.1446 +lemma MAX_LEMMA: "ALL (s::nat => real) N::nat. EX k::real. ALL n<N. abs (s n) < k"
 10.1447 +  by (import seq MAX_LEMMA)
 10.1448 +
 10.1449 +lemma SEQ_BOUNDED: "ALL s. bounded (mr1, nat_ge) s = (EX k. ALL n. abs (s n) < k)"
 10.1450 +  by (import seq SEQ_BOUNDED)
 10.1451 +
 10.1452 +lemma SEQ_BOUNDED_2: "(All::((nat => real) => bool) => bool)
 10.1453 + (%f::nat => real.
 10.1454 +     (All::(real => bool) => bool)
 10.1455 +      (%k::real.
 10.1456 +          (All::(real => bool) => bool)
 10.1457 +           (%k'::real.
 10.1458 +               (op -->::bool => bool => bool)
 10.1459 +                ((All::(nat => bool) => bool)
 10.1460 +                  (%n::nat.
 10.1461 +                      (op &::bool => bool => bool)
 10.1462 +                       ((op <=::real => real => bool) k (f n))
 10.1463 +                       ((op <=::real => real => bool) (f n) k')))
 10.1464 +                ((bounded::real metric * (nat => nat => bool)
 10.1465 +                           => (nat => real) => bool)
 10.1466 +                  ((Pair::real metric
 10.1467 +                          => (nat => nat => bool)
 10.1468 +                             => real metric * (nat => nat => bool))
 10.1469 +                    (mr1::real metric) (nat_ge::nat => nat => bool))
 10.1470 +                  f))))"
 10.1471 +  by (import seq SEQ_BOUNDED_2)
 10.1472 +
 10.1473 +lemma SEQ_CBOUNDED: "(All::((nat => real) => bool) => bool)
 10.1474 + (%f::nat => real.
 10.1475 +     (op -->::bool => bool => bool) ((cauchy::(nat => real) => bool) f)
 10.1476 +      ((bounded::real metric * (nat => nat => bool)
 10.1477 +                 => (nat => real) => bool)
 10.1478 +        ((Pair::real metric
 10.1479 +                => (nat => nat => bool)
 10.1480 +                   => real metric * (nat => nat => bool))
 10.1481 +          (mr1::real metric) (nat_ge::nat => nat => bool))
 10.1482 +        f))"
 10.1483 +  by (import seq SEQ_CBOUNDED)
 10.1484 +
 10.1485 +lemma SEQ_ICONV: "(All::((nat => real) => bool) => bool)
 10.1486 + (%f::nat => real.
 10.1487 +     (op -->::bool => bool => bool)
 10.1488 +      ((op &::bool => bool => bool)
 10.1489 +        ((bounded::real metric * (nat => nat => bool)
 10.1490 +                   => (nat => real) => bool)
 10.1491 +          ((Pair::real metric
 10.1492 +                  => (nat => nat => bool)
 10.1493 +                     => real metric * (nat => nat => bool))
 10.1494 +            (mr1::real metric) (nat_ge::nat => nat => bool))
 10.1495 +          f)
 10.1496 +        ((All::(nat => bool) => bool)
 10.1497 +          (%m::nat.
 10.1498 +              (All::(nat => bool) => bool)
 10.1499 +               (%n::nat.
 10.1500 +                   (op -->::bool => bool => bool)
 10.1501 +                    ((op <=::nat => nat => bool) n m)
 10.1502 +                    ((op <=::real => real => bool) (f n) (f m))))))
 10.1503 +      ((convergent::(nat => real) => bool) f))"
 10.1504 +  by (import seq SEQ_ICONV)
 10.1505 +
 10.1506 +lemma SEQ_NEG_CONV: "ALL f. convergent f = convergent (%n. - f n)"
 10.1507 +  by (import seq SEQ_NEG_CONV)
 10.1508 +
 10.1509 +lemma SEQ_NEG_BOUNDED: "ALL f. bounded (mr1, nat_ge) (%n. - f n) = bounded (mr1, nat_ge) f"
 10.1510 +  by (import seq SEQ_NEG_BOUNDED)
 10.1511 +
 10.1512 +lemma SEQ_BCONV: "(All::((nat => real) => bool) => bool)
 10.1513 + (%f::nat => real.
 10.1514 +     (op -->::bool => bool => bool)
 10.1515 +      ((op &::bool => bool => bool)
 10.1516 +        ((bounded::real metric * (nat => nat => bool)
 10.1517 +                   => (nat => real) => bool)
 10.1518 +          ((Pair::real metric
 10.1519 +                  => (nat => nat => bool)
 10.1520 +                     => real metric * (nat => nat => bool))
 10.1521 +            (mr1::real metric) (nat_ge::nat => nat => bool))
 10.1522 +          f)
 10.1523 +        ((seq.mono::(nat => real) => bool) f))
 10.1524 +      ((convergent::(nat => real) => bool) f))"
 10.1525 +  by (import seq SEQ_BCONV)
 10.1526 +
 10.1527 +lemma SEQ_MONOSUB: "ALL s. EX f. subseq f & seq.mono (%n. s (f n))"
 10.1528 +  by (import seq SEQ_MONOSUB)
 10.1529 +
 10.1530 +lemma SEQ_SBOUNDED: "(All::((nat => real) => bool) => bool)
 10.1531 + (%s::nat => real.
 10.1532 +     (All::((nat => nat) => bool) => bool)
 10.1533 +      (%f::nat => nat.
 10.1534 +          (op -->::bool => bool => bool)
 10.1535 +           ((bounded::real metric * (nat => nat => bool)
 10.1536 +                      => (nat => real) => bool)
 10.1537 +             ((Pair::real metric
 10.1538 +                     => (nat => nat => bool)
 10.1539 +                        => real metric * (nat => nat => bool))
 10.1540 +               (mr1::real metric) (nat_ge::nat => nat => bool))
 10.1541 +             s)
 10.1542 +           ((bounded::real metric * (nat => nat => bool)
 10.1543 +                      => (nat => real) => bool)
 10.1544 +             ((Pair::real metric
 10.1545 +                     => (nat => nat => bool)
 10.1546 +                        => real metric * (nat => nat => bool))
 10.1547 +               (mr1::real metric) (nat_ge::nat => nat => bool))
 10.1548 +             (%n::nat. s (f n)))))"
 10.1549 +  by (import seq SEQ_SBOUNDED)
 10.1550 +
 10.1551 +lemma SEQ_SUBLE: "(All::((nat => nat) => bool) => bool)
 10.1552 + (%f::nat => nat.
 10.1553 +     (op -->::bool => bool => bool) ((subseq::(nat => nat) => bool) f)
 10.1554 +      ((All::(nat => bool) => bool)
 10.1555 +        (%n::nat. (op <=::nat => nat => bool) n (f n))))"
 10.1556 +  by (import seq SEQ_SUBLE)
 10.1557 +
 10.1558 +lemma SEQ_DIRECT: "(All::((nat => nat) => bool) => bool)
 10.1559 + (%f::nat => nat.
 10.1560 +     (op -->::bool => bool => bool) ((subseq::(nat => nat) => bool) f)
 10.1561 +      ((All::(nat => bool) => bool)
 10.1562 +        (%N1::nat.
 10.1563 +            (All::(nat => bool) => bool)
 10.1564 +             (%N2::nat.
 10.1565 +                 (Ex::(nat => bool) => bool)
 10.1566 +                  (%x::nat.
 10.1567 +                      (op &::bool => bool => bool)
 10.1568 +                       ((op <=::nat => nat => bool) N1 x)
 10.1569 +                       ((op <=::nat => nat => bool) N2 (f x)))))))"
 10.1570 +  by (import seq SEQ_DIRECT)
 10.1571 +
 10.1572 +lemma SEQ_CAUCHY: "ALL f. cauchy f = convergent f"
 10.1573 +  by (import seq SEQ_CAUCHY)
 10.1574 +
 10.1575 +lemma SEQ_LE: "(All::((nat => real) => bool) => bool)
 10.1576 + (%f::nat => real.
 10.1577 +     (All::((nat => real) => bool) => bool)
 10.1578 +      (%g::nat => real.
 10.1579 +          (All::(real => bool) => bool)
 10.1580 +           (%l::real.
 10.1581 +               (All::(real => bool) => bool)
 10.1582 +                (%m::real.
 10.1583 +                    (op -->::bool => bool => bool)
 10.1584 +                     ((op &::bool => bool => bool)
 10.1585 +                       ((-->::(nat => real) => real => bool) f l)
 10.1586 +                       ((op &::bool => bool => bool)
 10.1587 +                         ((-->::(nat => real) => real => bool) g m)
 10.1588 +                         ((Ex::(nat => bool) => bool)
 10.1589 +                           (%x::nat.
 10.1590 +                               (All::(nat => bool) => bool)
 10.1591 +                                (%xa::nat.
 10.1592 +                                    (op -->::bool => bool => bool)
 10.1593 +                                     ((op <=::nat => nat => bool) x xa)
 10.1594 +                                     ((op <=::real => real => bool) (f xa)
 10.1595 + (g xa)))))))
 10.1596 +                     ((op <=::real => real => bool) l m)))))"
 10.1597 +  by (import seq SEQ_LE)
 10.1598 +
 10.1599 +lemma SEQ_SUC: "ALL f l. --> f l = --> (%n. f (Suc n)) l"
 10.1600 +  by (import seq SEQ_SUC)
 10.1601 +
 10.1602 +lemma SEQ_ABS: "ALL f. --> (%n. abs (f n)) 0 = --> f 0"
 10.1603 +  by (import seq SEQ_ABS)
 10.1604 +
 10.1605 +lemma SEQ_ABS_IMP: "(All::((nat => real) => bool) => bool)
 10.1606 + (%f::nat => real.
 10.1607 +     (All::(real => bool) => bool)
 10.1608 +      (%l::real.
 10.1609 +          (op -->::bool => bool => bool)
 10.1610 +           ((-->::(nat => real) => real => bool) f l)
 10.1611 +           ((-->::(nat => real) => real => bool)
 10.1612 +             (%n::nat. (abs::real => real) (f n)) ((abs::real => real) l))))"
 10.1613 +  by (import seq SEQ_ABS_IMP)
 10.1614 +
 10.1615 +lemma SEQ_INV0: "(All::((nat => real) => bool) => bool)
 10.1616 + (%f::nat => real.
 10.1617 +     (op -->::bool => bool => bool)
 10.1618 +      ((All::(real => bool) => bool)
 10.1619 +        (%y::real.
 10.1620 +            (Ex::(nat => bool) => bool)
 10.1621 +             (%N::nat.
 10.1622 +                 (All::(nat => bool) => bool)
 10.1623 +                  (%n::nat.
 10.1624 +                      (op -->::bool => bool => bool)
 10.1625 +                       ((op <=::nat => nat => bool) N n)
 10.1626 +                       ((op <::real => real => bool) y (f n))))))
 10.1627 +      ((-->::(nat => real) => real => bool)
 10.1628 +        (%n::nat. (inverse::real => real) (f n)) (0::real)))"
 10.1629 +  by (import seq SEQ_INV0)
 10.1630 +
 10.1631 +lemma SEQ_POWER_ABS: "(All::(real => bool) => bool)
 10.1632 + (%c::real.
 10.1633 +     (op -->::bool => bool => bool)
 10.1634 +      ((op <::real => real => bool) ((abs::real => real) c) (1::real))
 10.1635 +      ((-->::(nat => real) => real => bool)
 10.1636 +        ((op ^::real => nat => real) ((abs::real => real) c)) (0::real)))"
 10.1637 +  by (import seq SEQ_POWER_ABS)
 10.1638 +
 10.1639 +lemma SEQ_POWER: "(All::(real => bool) => bool)
 10.1640 + (%c::real.
 10.1641 +     (op -->::bool => bool => bool)
 10.1642 +      ((op <::real => real => bool) ((abs::real => real) c) (1::real))
 10.1643 +      ((-->::(nat => real) => real => bool) ((op ^::real => nat => real) c)
 10.1644 +        (0::real)))"
 10.1645 +  by (import seq SEQ_POWER)
 10.1646 +
 10.1647 +lemma NEST_LEMMA: "(All::((nat => real) => bool) => bool)
 10.1648 + (%f::nat => real.
 10.1649 +     (All::((nat => real) => bool) => bool)
 10.1650 +      (%g::nat => real.
 10.1651 +          (op -->::bool => bool => bool)
 10.1652 +           ((op &::bool => bool => bool)
 10.1653 +             ((All::(nat => bool) => bool)
 10.1654 +               (%n::nat.
 10.1655 +                   (op <=::real => real => bool) (f n)
 10.1656 +                    (f ((Suc::nat => nat) n))))
 10.1657 +             ((op &::bool => bool => bool)
 10.1658 +               ((All::(nat => bool) => bool)
 10.1659 +                 (%n::nat.
 10.1660 +                     (op <=::real => real => bool) (g ((Suc::nat => nat) n))
 10.1661 +                      (g n)))
 10.1662 +               ((All::(nat => bool) => bool)
 10.1663 +                 (%n::nat. (op <=::real => real => bool) (f n) (g n)))))
 10.1664 +           ((Ex::(real => bool) => bool)
 10.1665 +             (%l::real.
 10.1666 +                 (Ex::(real => bool) => bool)
 10.1667 +                  (%m::real.
 10.1668 +                      (op &::bool => bool => bool)
 10.1669 +                       ((op <=::real => real => bool) l m)
 10.1670 +                       ((op &::bool => bool => bool)
 10.1671 +                         ((op &::bool => bool => bool)
 10.1672 +                           ((All::(nat => bool) => bool)
 10.1673 +                             (%n::nat.
 10.1674 +                                 (op <=::real => real => bool) (f n) l))
 10.1675 +                           ((-->::(nat => real) => real => bool) f l))
 10.1676 +                         ((op &::bool => bool => bool)
 10.1677 +                           ((All::(nat => bool) => bool)
 10.1678 +                             (%n::nat.
 10.1679 +                                 (op <=::real => real => bool) m (g n)))
 10.1680 +                           ((-->::(nat => real) => real => bool) g m))))))))"
 10.1681 +  by (import seq NEST_LEMMA)
 10.1682 +
 10.1683 +lemma NEST_LEMMA_UNIQ: "(All::((nat => real) => bool) => bool)
 10.1684 + (%f::nat => real.
 10.1685 +     (All::((nat => real) => bool) => bool)
 10.1686 +      (%g::nat => real.
 10.1687 +          (op -->::bool => bool => bool)
 10.1688 +           ((op &::bool => bool => bool)
 10.1689 +             ((All::(nat => bool) => bool)
 10.1690 +               (%n::nat.
 10.1691 +                   (op <=::real => real => bool) (f n)
 10.1692 +                    (f ((Suc::nat => nat) n))))
 10.1693 +             ((op &::bool => bool => bool)
 10.1694 +               ((All::(nat => bool) => bool)
 10.1695 +                 (%n::nat.
 10.1696 +                     (op <=::real => real => bool) (g ((Suc::nat => nat) n))
 10.1697 +                      (g n)))
 10.1698 +               ((op &::bool => bool => bool)
 10.1699 +                 ((All::(nat => bool) => bool)
 10.1700 +                   (%n::nat. (op <=::real => real => bool) (f n) (g n)))
 10.1701 +                 ((-->::(nat => real) => real => bool)
 10.1702 +                   (%n::nat. (op -::real => real => real) (f n) (g n))
 10.1703 +                   (0::real)))))
 10.1704 +           ((Ex::(real => bool) => bool)
 10.1705 +             (%x::real.
 10.1706 +                 (op &::bool => bool => bool)
 10.1707 +                  ((op &::bool => bool => bool)
 10.1708 +                    ((All::(nat => bool) => bool)
 10.1709 +                      (%n::nat. (op <=::real => real => bool) (f n) x))
 10.1710 +                    ((-->::(nat => real) => real => bool) f x))
 10.1711 +                  ((op &::bool => bool => bool)
 10.1712 +                    ((All::(nat => bool) => bool)
 10.1713 +                      (%n::nat. (op <=::real => real => bool) x (g n)))
 10.1714 +                    ((-->::(nat => real) => real => bool) g x))))))"
 10.1715 +  by (import seq NEST_LEMMA_UNIQ)
 10.1716 +
 10.1717 +lemma BOLZANO_LEMMA: "(All::((real * real => bool) => bool) => bool)
 10.1718 + (%P::real * real => bool.
 10.1719 +     (op -->::bool => bool => bool)
 10.1720 +      ((op &::bool => bool => bool)
 10.1721 +        ((All::(real => bool) => bool)
 10.1722 +          (%a::real.
 10.1723 +              (All::(real => bool) => bool)
 10.1724 +               (%b::real.
 10.1725 +                   (All::(real => bool) => bool)
 10.1726 +                    (%c::real.
 10.1727 +                        (op -->::bool => bool => bool)
 10.1728 +                         ((op &::bool => bool => bool)
 10.1729 +                           ((op <=::real => real => bool) a b)
 10.1730 +                           ((op &::bool => bool => bool)
 10.1731 +                             ((op <=::real => real => bool) b c)
 10.1732 +                             ((op &::bool => bool => bool)
 10.1733 +                               (P ((Pair::real => real => real * real) a b))
 10.1734 +                               (P ((Pair::real => real => real * real) b
 10.1735 +                                    c)))))
 10.1736 +                         (P ((Pair::real => real => real * real) a c))))))
 10.1737 +        ((All::(real => bool) => bool)
 10.1738 +          (%x::real.
 10.1739 +              (Ex::(real => bool) => bool)
 10.1740 +               (%d::real.
 10.1741 +                   (op &::bool => bool => bool)
 10.1742 +                    ((op <::real => real => bool) (0::real) d)
 10.1743 +                    ((All::(real => bool) => bool)
 10.1744 +                      (%a::real.
 10.1745 +                          (All::(real => bool) => bool)
 10.1746 +                           (%b::real.
 10.1747 +                               (op -->::bool => bool => bool)
 10.1748 +                                ((op &::bool => bool => bool)
 10.1749 +                                  ((op <=::real => real => bool) a x)
 10.1750 +                                  ((op &::bool => bool => bool)
 10.1751 +                                    ((op <=::real => real => bool) x b)
 10.1752 +                                    ((op <::real => real => bool)
 10.1753 +((op -::real => real => real) b a) d)))
 10.1754 +                                (P ((Pair::real => real => real * real) a
 10.1755 +                                     b)))))))))
 10.1756 +      ((All::(real => bool) => bool)
 10.1757 +        (%a::real.
 10.1758 +            (All::(real => bool) => bool)
 10.1759 +             (%b::real.
 10.1760 +                 (op -->::bool => bool => bool)
 10.1761 +                  ((op <=::real => real => bool) a b)
 10.1762 +                  (P ((Pair::real => real => real * real) a b))))))"
 10.1763 +  by (import seq BOLZANO_LEMMA)
 10.1764 +
 10.1765 +constdefs
 10.1766 +  sums :: "(nat => real) => real => bool" 
 10.1767 +  "sums == %f. --> (%n. real.sum (0, n) f)"
 10.1768 +
 10.1769 +lemma sums: "ALL f s. sums f s = --> (%n. real.sum (0, n) f) s"
 10.1770 +  by (import seq sums)
 10.1771 +
 10.1772 +constdefs
 10.1773 +  summable :: "(nat => real) => bool" 
 10.1774 +  "summable == %f. Ex (sums f)"
 10.1775 +
 10.1776 +lemma summable: "ALL f. summable f = Ex (sums f)"
 10.1777 +  by (import seq summable)
 10.1778 +
 10.1779 +constdefs
 10.1780 +  suminf :: "(nat => real) => real" 
 10.1781 +  "suminf == %f. Eps (sums f)"
 10.1782 +
 10.1783 +lemma suminf: "ALL f. suminf f = Eps (sums f)"
 10.1784 +  by (import seq suminf)
 10.1785 +
 10.1786 +lemma SUM_SUMMABLE: "(All::((nat => real) => bool) => bool)
 10.1787 + (%f::nat => real.
 10.1788 +     (All::(real => bool) => bool)
 10.1789 +      (%l::real.
 10.1790 +          (op -->::bool => bool => bool)
 10.1791 +           ((sums::(nat => real) => real => bool) f l)
 10.1792 +           ((summable::(nat => real) => bool) f)))"
 10.1793 +  by (import seq SUM_SUMMABLE)
 10.1794 +
 10.1795 +lemma SUMMABLE_SUM: "(All::((nat => real) => bool) => bool)
 10.1796 + (%f::nat => real.
 10.1797 +     (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
 10.1798 +      ((sums::(nat => real) => real => bool) f
 10.1799 +        ((suminf::(nat => real) => real) f)))"
 10.1800 +  by (import seq SUMMABLE_SUM)
 10.1801 +
 10.1802 +lemma SUM_UNIQ: "(All::((nat => real) => bool) => bool)
 10.1803 + (%f::nat => real.
 10.1804 +     (All::(real => bool) => bool)
 10.1805 +      (%x::real.
 10.1806 +          (op -->::bool => bool => bool)
 10.1807 +           ((sums::(nat => real) => real => bool) f x)
 10.1808 +           ((op =::real => real => bool) x
 10.1809 +             ((suminf::(nat => real) => real) f))))"
 10.1810 +  by (import seq SUM_UNIQ)
 10.1811 +
 10.1812 +lemma SER_0: "(All::((nat => real) => bool) => bool)
 10.1813 + (%f::nat => real.
 10.1814 +     (All::(nat => bool) => bool)
 10.1815 +      (%n::nat.
 10.1816 +          (op -->::bool => bool => bool)
 10.1817 +           ((All::(nat => bool) => bool)
 10.1818 +             (%m::nat.
 10.1819 +                 (op -->::bool => bool => bool)
 10.1820 +                  ((op <=::nat => nat => bool) n m)
 10.1821 +                  ((op =::real => real => bool) (f m) (0::real))))
 10.1822 +           ((sums::(nat => real) => real => bool) f
 10.1823 +             ((real.sum::nat * nat => (nat => real) => real)
 10.1824 +               ((Pair::nat => nat => nat * nat) (0::nat) n) f))))"
 10.1825 +  by (import seq SER_0)
 10.1826 +
 10.1827 +lemma SER_POS_LE: "(All::((nat => real) => bool) => bool)
 10.1828 + (%f::nat => real.
 10.1829 +     (All::(nat => bool) => bool)
 10.1830 +      (%n::nat.
 10.1831 +          (op -->::bool => bool => bool)
 10.1832 +           ((op &::bool => bool => bool)
 10.1833 +             ((summable::(nat => real) => bool) f)
 10.1834 +             ((All::(nat => bool) => bool)
 10.1835 +               (%m::nat.
 10.1836 +                   (op -->::bool => bool => bool)
 10.1837 +                    ((op <=::nat => nat => bool) n m)
 10.1838 +                    ((op <=::real => real => bool) (0::real) (f m)))))
 10.1839 +           ((op <=::real => real => bool)
 10.1840 +             ((real.sum::nat * nat => (nat => real) => real)
 10.1841 +               ((Pair::nat => nat => nat * nat) (0::nat) n) f)
 10.1842 +             ((suminf::(nat => real) => real) f))))"
 10.1843 +  by (import seq SER_POS_LE)
 10.1844 +
 10.1845 +lemma SER_POS_LT: "(All::((nat => real) => bool) => bool)
 10.1846 + (%f::nat => real.
 10.1847 +     (All::(nat => bool) => bool)
 10.1848 +      (%n::nat.
 10.1849 +          (op -->::bool => bool => bool)
 10.1850 +           ((op &::bool => bool => bool)
 10.1851 +             ((summable::(nat => real) => bool) f)
 10.1852 +             ((All::(nat => bool) => bool)
 10.1853 +               (%m::nat.
 10.1854 +                   (op -->::bool => bool => bool)
 10.1855 +                    ((op <=::nat => nat => bool) n m)
 10.1856 +                    ((op <::real => real => bool) (0::real) (f m)))))
 10.1857 +           ((op <::real => real => bool)
 10.1858 +             ((real.sum::nat * nat => (nat => real) => real)
 10.1859 +               ((Pair::nat => nat => nat * nat) (0::nat) n) f)
 10.1860 +             ((suminf::(nat => real) => real) f))))"
 10.1861 +  by (import seq SER_POS_LT)
 10.1862 +
 10.1863 +lemma SER_GROUP: "(All::((nat => real) => bool) => bool)
 10.1864 + (%f::nat => real.
 10.1865 +     (All::(nat => bool) => bool)
 10.1866 +      (%k::nat.
 10.1867 +          (op -->::bool => bool => bool)
 10.1868 +           ((op &::bool => bool => bool)
 10.1869 +             ((summable::(nat => real) => bool) f)
 10.1870 +             ((op <::nat => nat => bool) (0::nat) k))
 10.1871 +           ((sums::(nat => real) => real => bool)
 10.1872 +             (%n::nat.
 10.1873 +                 (real.sum::nat * nat => (nat => real) => real)
 10.1874 +                  ((Pair::nat => nat => nat * nat)
 10.1875 +                    ((op *::nat => nat => nat) n k) k)
 10.1876 +                  f)
 10.1877 +             ((suminf::(nat => real) => real) f))))"
 10.1878 +  by (import seq SER_GROUP)
 10.1879 +
 10.1880 +lemma SER_PAIR: "(All::((nat => real) => bool) => bool)
 10.1881 + (%f::nat => real.
 10.1882 +     (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
 10.1883 +      ((sums::(nat => real) => real => bool)
 10.1884 +        (%n::nat.
 10.1885 +            (real.sum::nat * nat => (nat => real) => real)
 10.1886 +             ((Pair::nat => nat => nat * nat)
 10.1887 +               ((op *::nat => nat => nat)
 10.1888 +                 ((number_of::bin => nat)
 10.1889 +                   ((op BIT::bin => bool => bin)
 10.1890 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.1891 +                       (True::bool))
 10.1892 +                     (False::bool)))
 10.1893 +                 n)
 10.1894 +               ((number_of::bin => nat)
 10.1895 +                 ((op BIT::bin => bool => bin)
 10.1896 +                   ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.1897 +                     (True::bool))
 10.1898 +                   (False::bool))))
 10.1899 +             f)
 10.1900 +        ((suminf::(nat => real) => real) f)))"
 10.1901 +  by (import seq SER_PAIR)
 10.1902 +
 10.1903 +lemma SER_OFFSET: "(All::((nat => real) => bool) => bool)
 10.1904 + (%f::nat => real.
 10.1905 +     (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
 10.1906 +      ((All::(nat => bool) => bool)
 10.1907 +        (%k::nat.
 10.1908 +            (sums::(nat => real) => real => bool)
 10.1909 +             (%n::nat. f ((op +::nat => nat => nat) n k))
 10.1910 +             ((op -::real => real => real)
 10.1911 +               ((suminf::(nat => real) => real) f)
 10.1912 +               ((real.sum::nat * nat => (nat => real) => real)
 10.1913 +                 ((Pair::nat => nat => nat * nat) (0::nat) k) f)))))"
 10.1914 +  by (import seq SER_OFFSET)
 10.1915 +
 10.1916 +lemma SER_POS_LT_PAIR: "(All::((nat => real) => bool) => bool)
 10.1917 + (%f::nat => real.
 10.1918 +     (All::(nat => bool) => bool)
 10.1919 +      (%n::nat.
 10.1920 +          (op -->::bool => bool => bool)
 10.1921 +           ((op &::bool => bool => bool)
 10.1922 +             ((summable::(nat => real) => bool) f)
 10.1923 +             ((All::(nat => bool) => bool)
 10.1924 +               (%d::nat.
 10.1925 +                   (op <::real => real => bool) (0::real)
 10.1926 +                    ((op +::real => real => real)
 10.1927 +                      (f ((op +::nat => nat => nat) n
 10.1928 +                           ((op *::nat => nat => nat)
 10.1929 +                             ((number_of::bin => nat)
 10.1930 +                               ((op BIT::bin => bool => bin)
 10.1931 +                                 ((op BIT::bin => bool => bin)
 10.1932 +                                   (bin.Pls::bin) (True::bool))
 10.1933 +                                 (False::bool)))
 10.1934 +                             d)))
 10.1935 +                      (f ((op +::nat => nat => nat) n
 10.1936 +                           ((op +::nat => nat => nat)
 10.1937 +                             ((op *::nat => nat => nat)
 10.1938 +                               ((number_of::bin => nat)
 10.1939 +                                 ((op BIT::bin => bool => bin)
 10.1940 +                                   ((op BIT::bin => bool => bin)
 10.1941 +                                     (bin.Pls::bin) (True::bool))
 10.1942 +                                   (False::bool)))
 10.1943 +                               d)
 10.1944 +                             (1::nat))))))))
 10.1945 +           ((op <::real => real => bool)
 10.1946 +             ((real.sum::nat * nat => (nat => real) => real)
 10.1947 +               ((Pair::nat => nat => nat * nat) (0::nat) n) f)
 10.1948 +             ((suminf::(nat => real) => real) f))))"
 10.1949 +  by (import seq SER_POS_LT_PAIR)
 10.1950 +
 10.1951 +lemma SER_ADD: "(All::((nat => real) => bool) => bool)
 10.1952 + (%x::nat => real.
 10.1953 +     (All::(real => bool) => bool)
 10.1954 +      (%x0::real.
 10.1955 +          (All::((nat => real) => bool) => bool)
 10.1956 +           (%y::nat => real.
 10.1957 +               (All::(real => bool) => bool)
 10.1958 +                (%y0::real.
 10.1959 +                    (op -->::bool => bool => bool)
 10.1960 +                     ((op &::bool => bool => bool)
 10.1961 +                       ((sums::(nat => real) => real => bool) x x0)
 10.1962 +                       ((sums::(nat => real) => real => bool) y y0))
 10.1963 +                     ((sums::(nat => real) => real => bool)
 10.1964 +                       (%n::nat. (op +::real => real => real) (x n) (y n))
 10.1965 +                       ((op +::real => real => real) x0 y0))))))"
 10.1966 +  by (import seq SER_ADD)
 10.1967 +
 10.1968 +lemma SER_CMUL: "(All::((nat => real) => bool) => bool)
 10.1969 + (%x::nat => real.
 10.1970 +     (All::(real => bool) => bool)
 10.1971 +      (%x0::real.
 10.1972 +          (All::(real => bool) => bool)
 10.1973 +           (%c::real.
 10.1974 +               (op -->::bool => bool => bool)
 10.1975 +                ((sums::(nat => real) => real => bool) x x0)
 10.1976 +                ((sums::(nat => real) => real => bool)
 10.1977 +                  (%n::nat. (op *::real => real => real) c (x n))
 10.1978 +                  ((op *::real => real => real) c x0)))))"
 10.1979 +  by (import seq SER_CMUL)
 10.1980 +
 10.1981 +lemma SER_NEG: "(All::((nat => real) => bool) => bool)
 10.1982 + (%x::nat => real.
 10.1983 +     (All::(real => bool) => bool)
 10.1984 +      (%x0::real.
 10.1985 +          (op -->::bool => bool => bool)
 10.1986 +           ((sums::(nat => real) => real => bool) x x0)
 10.1987 +           ((sums::(nat => real) => real => bool)
 10.1988 +             (%xa::nat. (uminus::real => real) (x xa))
 10.1989 +             ((uminus::real => real) x0))))"
 10.1990 +  by (import seq SER_NEG)
 10.1991 +
 10.1992 +lemma SER_SUB: "(All::((nat => real) => bool) => bool)
 10.1993 + (%x::nat => real.
 10.1994 +     (All::(real => bool) => bool)
 10.1995 +      (%x0::real.
 10.1996 +          (All::((nat => real) => bool) => bool)
 10.1997 +           (%y::nat => real.
 10.1998 +               (All::(real => bool) => bool)
 10.1999 +                (%y0::real.
 10.2000 +                    (op -->::bool => bool => bool)
 10.2001 +                     ((op &::bool => bool => bool)
 10.2002 +                       ((sums::(nat => real) => real => bool) x x0)
 10.2003 +                       ((sums::(nat => real) => real => bool) y y0))
 10.2004 +                     ((sums::(nat => real) => real => bool)
 10.2005 +                       (%xa::nat.
 10.2006 +                           (op -::real => real => real) (x xa) (y xa))
 10.2007 +                       ((op -::real => real => real) x0 y0))))))"
 10.2008 +  by (import seq SER_SUB)
 10.2009 +
 10.2010 +lemma SER_CDIV: "(All::((nat => real) => bool) => bool)
 10.2011 + (%x::nat => real.
 10.2012 +     (All::(real => bool) => bool)
 10.2013 +      (%x0::real.
 10.2014 +          (All::(real => bool) => bool)
 10.2015 +           (%c::real.
 10.2016 +               (op -->::bool => bool => bool)
 10.2017 +                ((sums::(nat => real) => real => bool) x x0)
 10.2018 +                ((sums::(nat => real) => real => bool)
 10.2019 +                  (%xa::nat. (op /::real => real => real) (x xa) c)
 10.2020 +                  ((op /::real => real => real) x0 c)))))"
 10.2021 +  by (import seq SER_CDIV)
 10.2022 +
 10.2023 +lemma SER_CAUCHY: "(All::((nat => real) => bool) => bool)
 10.2024 + (%f::nat => real.
 10.2025 +     (op =::bool => bool => bool) ((summable::(nat => real) => bool) f)
 10.2026 +      ((All::(real => bool) => bool)
 10.2027 +        (%e::real.
 10.2028 +            (op -->::bool => bool => bool)
 10.2029 +             ((op <::real => real => bool) (0::real) e)
 10.2030 +             ((Ex::(nat => bool) => bool)
 10.2031 +               (%N::nat.
 10.2032 +                   (All::(nat => bool) => bool)
 10.2033 +                    (%m::nat.
 10.2034 +                        (All::(nat => bool) => bool)
 10.2035 +                         (%n::nat.
 10.2036 +                             (op -->::bool => bool => bool)
 10.2037 +                              ((op <=::nat => nat => bool) N m)
 10.2038 +                              ((op <::real => real => bool)
 10.2039 +                                ((abs::real => real)
 10.2040 +                                  ((real.sum::nat * nat
 10.2041 +        => (nat => real) => real)
 10.2042 +                                    ((Pair::nat => nat => nat * nat) m n)
 10.2043 +                                    f))
 10.2044 +                                e))))))))"
 10.2045 +  by (import seq SER_CAUCHY)
 10.2046 +
 10.2047 +lemma SER_ZERO: "(All::((nat => real) => bool) => bool)
 10.2048 + (%f::nat => real.
 10.2049 +     (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
 10.2050 +      ((-->::(nat => real) => real => bool) f (0::real)))"
 10.2051 +  by (import seq SER_ZERO)
 10.2052 +
 10.2053 +lemma SER_COMPAR: "(All::((nat => real) => bool) => bool)
 10.2054 + (%f::nat => real.
 10.2055 +     (All::((nat => real) => bool) => bool)
 10.2056 +      (%g::nat => real.
 10.2057 +          (op -->::bool => bool => bool)
 10.2058 +           ((op &::bool => bool => bool)
 10.2059 +             ((Ex::(nat => bool) => bool)
 10.2060 +               (%x::nat.
 10.2061 +                   (All::(nat => bool) => bool)
 10.2062 +                    (%xa::nat.
 10.2063 +                        (op -->::bool => bool => bool)
 10.2064 +                         ((op <=::nat => nat => bool) x xa)
 10.2065 +                         ((op <=::real => real => bool)
 10.2066 +                           ((abs::real => real) (f xa)) (g xa)))))
 10.2067 +             ((summable::(nat => real) => bool) g))
 10.2068 +           ((summable::(nat => real) => bool) f)))"
 10.2069 +  by (import seq SER_COMPAR)
 10.2070 +
 10.2071 +lemma SER_COMPARA: "(All::((nat => real) => bool) => bool)
 10.2072 + (%f::nat => real.
 10.2073 +     (All::((nat => real) => bool) => bool)
 10.2074 +      (%g::nat => real.
 10.2075 +          (op -->::bool => bool => bool)
 10.2076 +           ((op &::bool => bool => bool)
 10.2077 +             ((Ex::(nat => bool) => bool)
 10.2078 +               (%x::nat.
 10.2079 +                   (All::(nat => bool) => bool)
 10.2080 +                    (%xa::nat.
 10.2081 +                        (op -->::bool => bool => bool)
 10.2082 +                         ((op <=::nat => nat => bool) x xa)
 10.2083 +                         ((op <=::real => real => bool)
 10.2084 +                           ((abs::real => real) (f xa)) (g xa)))))
 10.2085 +             ((summable::(nat => real) => bool) g))
 10.2086 +           ((summable::(nat => real) => bool)
 10.2087 +             (%k::nat. (abs::real => real) (f k)))))"
 10.2088 +  by (import seq SER_COMPARA)
 10.2089 +
 10.2090 +lemma SER_LE: "(All::((nat => real) => bool) => bool)
 10.2091 + (%f::nat => real.
 10.2092 +     (All::((nat => real) => bool) => bool)
 10.2093 +      (%g::nat => real.
 10.2094 +          (op -->::bool => bool => bool)
 10.2095 +           ((op &::bool => bool => bool)
 10.2096 +             ((All::(nat => bool) => bool)
 10.2097 +               (%n::nat. (op <=::real => real => bool) (f n) (g n)))
 10.2098 +             ((op &::bool => bool => bool)
 10.2099 +               ((summable::(nat => real) => bool) f)
 10.2100 +               ((summable::(nat => real) => bool) g)))
 10.2101 +           ((op <=::real => real => bool)
 10.2102 +             ((suminf::(nat => real) => real) f)
 10.2103 +             ((suminf::(nat => real) => real) g))))"
 10.2104 +  by (import seq SER_LE)
 10.2105 +
 10.2106 +lemma SER_LE2: "(All::((nat => real) => bool) => bool)
 10.2107 + (%f::nat => real.
 10.2108 +     (All::((nat => real) => bool) => bool)
 10.2109 +      (%g::nat => real.
 10.2110 +          (op -->::bool => bool => bool)
 10.2111 +           ((op &::bool => bool => bool)
 10.2112 +             ((All::(nat => bool) => bool)
 10.2113 +               (%n::nat.
 10.2114 +                   (op <=::real => real => bool) ((abs::real => real) (f n))
 10.2115 +                    (g n)))
 10.2116 +             ((summable::(nat => real) => bool) g))
 10.2117 +           ((op &::bool => bool => bool)
 10.2118 +             ((summable::(nat => real) => bool) f)
 10.2119 +             ((op <=::real => real => bool)
 10.2120 +               ((suminf::(nat => real) => real) f)
 10.2121 +               ((suminf::(nat => real) => real) g)))))"
 10.2122 +  by (import seq SER_LE2)
 10.2123 +
 10.2124 +lemma SER_ACONV: "(All::((nat => real) => bool) => bool)
 10.2125 + (%f::nat => real.
 10.2126 +     (op -->::bool => bool => bool)
 10.2127 +      ((summable::(nat => real) => bool)
 10.2128 +        (%n::nat. (abs::real => real) (f n)))
 10.2129 +      ((summable::(nat => real) => bool) f))"
 10.2130 +  by (import seq SER_ACONV)
 10.2131 +
 10.2132 +lemma SER_ABS: "(All::((nat => real) => bool) => bool)
 10.2133 + (%f::nat => real.
 10.2134 +     (op -->::bool => bool => bool)
 10.2135 +      ((summable::(nat => real) => bool)
 10.2136 +        (%n::nat. (abs::real => real) (f n)))
 10.2137 +      ((op <=::real => real => bool)
 10.2138 +        ((abs::real => real) ((suminf::(nat => real) => real) f))
 10.2139 +        ((suminf::(nat => real) => real)
 10.2140 +          (%n::nat. (abs::real => real) (f n)))))"
 10.2141 +  by (import seq SER_ABS)
 10.2142 +
 10.2143 +lemma GP_FINITE: "(All::(real => bool) => bool)
 10.2144 + (%x::real.
 10.2145 +     (op -->::bool => bool => bool)
 10.2146 +      ((Not::bool => bool) ((op =::real => real => bool) x (1::real)))
 10.2147 +      ((All::(nat => bool) => bool)
 10.2148 +        (%n::nat.
 10.2149 +            (op =::real => real => bool)
 10.2150 +             ((real.sum::nat * nat => (nat => real) => real)
 10.2151 +               ((Pair::nat => nat => nat * nat) (0::nat) n)
 10.2152 +               ((op ^::real => nat => real) x))
 10.2153 +             ((op /::real => real => real)
 10.2154 +               ((op -::real => real => real)
 10.2155 +                 ((op ^::real => nat => real) x n) (1::real))
 10.2156 +               ((op -::real => real => real) x (1::real))))))"
 10.2157 +  by (import seq GP_FINITE)
 10.2158 +
 10.2159 +lemma GP: "(All::(real => bool) => bool)
 10.2160 + (%x::real.
 10.2161 +     (op -->::bool => bool => bool)
 10.2162 +      ((op <::real => real => bool) ((abs::real => real) x) (1::real))
 10.2163 +      ((sums::(nat => real) => real => bool) ((op ^::real => nat => real) x)
 10.2164 +        ((inverse::real => real)
 10.2165 +          ((op -::real => real => real) (1::real) x))))"
 10.2166 +  by (import seq GP)
 10.2167 +
 10.2168 +lemma ABS_NEG_LEMMA: "(All::(real => bool) => bool)
 10.2169 + (%c::real.
 10.2170 +     (op -->::bool => bool => bool)
 10.2171 +      ((op <=::real => real => bool) c (0::real))
 10.2172 +      ((All::(real => bool) => bool)
 10.2173 +        (%x::real.
 10.2174 +            (All::(real => bool) => bool)
 10.2175 +             (%y::real.
 10.2176 +                 (op -->::bool => bool => bool)
 10.2177 +                  ((op <=::real => real => bool) ((abs::real => real) x)
 10.2178 +                    ((op *::real => real => real) c
 10.2179 +                      ((abs::real => real) y)))
 10.2180 +                  ((op =::real => real => bool) x (0::real))))))"
 10.2181 +  by (import seq ABS_NEG_LEMMA)
 10.2182 +
 10.2183 +lemma SER_RATIO: "(All::((nat => real) => bool) => bool)
 10.2184 + (%f::nat => real.
 10.2185 +     (All::(real => bool) => bool)
 10.2186 +      (%c::real.
 10.2187 +          (All::(nat => bool) => bool)
 10.2188 +           (%N::nat.
 10.2189 +               (op -->::bool => bool => bool)
 10.2190 +                ((op &::bool => bool => bool)
 10.2191 +                  ((op <::real => real => bool) c (1::real))
 10.2192 +                  ((All::(nat => bool) => bool)
 10.2193 +                    (%n::nat.
 10.2194 +                        (op -->::bool => bool => bool)
 10.2195 +                         ((op <=::nat => nat => bool) N n)
 10.2196 +                         ((op <=::real => real => bool)
 10.2197 +                           ((abs::real => real) (f ((Suc::nat => nat) n)))
 10.2198 +                           ((op *::real => real => real) c
 10.2199 +                             ((abs::real => real) (f n)))))))
 10.2200 +                ((summable::(nat => real) => bool) f))))"
 10.2201 +  by (import seq SER_RATIO)
 10.2202 +
 10.2203 +;end_setup
 10.2204 +
 10.2205 +;setup_theory lim
 10.2206 +
 10.2207 +constdefs
 10.2208 +  tends_real_real :: "(real => real) => real => real => bool" 
 10.2209 +  "tends_real_real == %f l x0. tends f l (mtop mr1, tendsto (mr1, x0))"
 10.2210 +
 10.2211 +lemma tends_real_real: "ALL f l x0. tends_real_real f l x0 = tends f l (mtop mr1, tendsto (mr1, x0))"
 10.2212 +  by (import lim tends_real_real)
 10.2213 +
 10.2214 +lemma LIM: "(All::((real => real) => bool) => bool)
 10.2215 + (%f::real => real.
 10.2216 +     (All::(real => bool) => bool)
 10.2217 +      (%y0::real.
 10.2218 +          (All::(real => bool) => bool)
 10.2219 +           (%x0::real.
 10.2220 +               (op =::bool => bool => bool)
 10.2221 +                ((tends_real_real::(real => real) => real => real => bool) f
 10.2222 +                  y0 x0)
 10.2223 +                ((All::(real => bool) => bool)
 10.2224 +                  (%e::real.
 10.2225 +                      (op -->::bool => bool => bool)
 10.2226 +                       ((op <::real => real => bool) (0::real) e)
 10.2227 +                       ((Ex::(real => bool) => bool)
 10.2228 +                         (%d::real.
 10.2229 +                             (op &::bool => bool => bool)
 10.2230 +                              ((op <::real => real => bool) (0::real) d)
 10.2231 +                              ((All::(real => bool) => bool)
 10.2232 +                                (%x::real.
 10.2233 +                                    (op -->::bool => bool => bool)
 10.2234 +                                     ((op &::bool => bool => bool)
 10.2235 + ((op <::real => real => bool) (0::real)
 10.2236 +   ((abs::real => real) ((op -::real => real => real) x x0)))
 10.2237 + ((op <::real => real => bool)
 10.2238 +   ((abs::real => real) ((op -::real => real => real) x x0)) d))
 10.2239 +                                     ((op <::real => real => bool)
 10.2240 + ((abs::real => real) ((op -::real => real => real) (f x) y0)) e))))))))))"
 10.2241 +  by (import lim LIM)
 10.2242 +
 10.2243 +lemma LIM_CONST: "ALL k. All (tends_real_real (%x. k) k)"
 10.2244 +  by (import lim LIM_CONST)
 10.2245 +
 10.2246 +lemma LIM_ADD: "(All::((real => real) => bool) => bool)
 10.2247 + (%f::real => real.
 10.2248 +     (All::((real => real) => bool) => bool)
 10.2249 +      (%g::real => real.
 10.2250 +          (All::(real => bool) => bool)
 10.2251 +           (%l::real.
 10.2252 +               (All::(real => bool) => bool)
 10.2253 +                (%m::real.
 10.2254 +                    (All::(real => bool) => bool)
 10.2255 +                     (%x::real.
 10.2256 +                         (op -->::bool => bool => bool)
 10.2257 +                          ((op &::bool => bool => bool)
 10.2258 +                            ((tends_real_real::(real => real)
 10.2259 +         => real => real => bool)
 10.2260 +                              f l x)
 10.2261 +                            ((tends_real_real::(real => real)
 10.2262 +         => real => real => bool)
 10.2263 +                              g m x))
 10.2264 +                          ((tends_real_real::(real => real)
 10.2265 +       => real => real => bool)
 10.2266 +                            (%x::real.
 10.2267 +                                (op +::real => real => real) (f x) (g x))
 10.2268 +                            ((op +::real => real => real) l m) x))))))"
 10.2269 +  by (import lim LIM_ADD)
 10.2270 +
 10.2271 +lemma LIM_MUL: "(All::((real => real) => bool) => bool)
 10.2272 + (%f::real => real.
 10.2273 +     (All::((real => real) => bool) => bool)
 10.2274 +      (%g::real => real.
 10.2275 +          (All::(real => bool) => bool)
 10.2276 +           (%l::real.
 10.2277 +               (All::(real => bool) => bool)
 10.2278 +                (%m::real.
 10.2279 +                    (All::(real => bool) => bool)
 10.2280 +                     (%x::real.
 10.2281 +                         (op -->::bool => bool => bool)
 10.2282 +                          ((op &::bool => bool => bool)
 10.2283 +                            ((tends_real_real::(real => real)
 10.2284 +         => real => real => bool)
 10.2285 +                              f l x)
 10.2286 +                            ((tends_real_real::(real => real)
 10.2287 +         => real => real => bool)
 10.2288 +                              g m x))
 10.2289 +                          ((tends_real_real::(real => real)
 10.2290 +       => real => real => bool)
 10.2291 +                            (%x::real.
 10.2292 +                                (op *::real => real => real) (f x) (g x))
 10.2293 +                            ((op *::real => real => real) l m) x))))))"
 10.2294 +  by (import lim LIM_MUL)
 10.2295 +
 10.2296 +lemma LIM_NEG: "ALL f l x. tends_real_real f l x = tends_real_real (%x. - f x) (- l) x"
 10.2297 +  by (import lim LIM_NEG)
 10.2298 +
 10.2299 +lemma LIM_INV: "(All::((real => real) => bool) => bool)
 10.2300 + (%f::real => real.
 10.2301 +     (All::(real => bool) => bool)
 10.2302 +      (%l::real.
 10.2303 +          (All::(real => bool) => bool)
 10.2304 +           (%x::real.
 10.2305 +               (op -->::bool => bool => bool)
 10.2306 +                ((op &::bool => bool => bool)
 10.2307 +                  ((tends_real_real::(real => real) => real => real => bool)
 10.2308 +                    f l x)
 10.2309 +                  ((Not::bool => bool)
 10.2310 +                    ((op =::real => real => bool) l (0::real))))
 10.2311 +                ((tends_real_real::(real => real) => real => real => bool)
 10.2312 +                  (%x::real. (inverse::real => real) (f x))
 10.2313 +                  ((inverse::real => real) l) x))))"
 10.2314 +  by (import lim LIM_INV)
 10.2315 +
 10.2316 +lemma LIM_SUB: "(All::((real => real) => bool) => bool)
 10.2317 + (%f::real => real.
 10.2318 +     (All::((real => real) => bool) => bool)
 10.2319 +      (%g::real => real.
 10.2320 +          (All::(real => bool) => bool)
 10.2321 +           (%l::real.
 10.2322 +               (All::(real => bool) => bool)
 10.2323 +                (%m::real.
 10.2324 +                    (All::(real => bool) => bool)
 10.2325 +                     (%x::real.
 10.2326 +                         (op -->::bool => bool => bool)
 10.2327 +                          ((op &::bool => bool => bool)
 10.2328 +                            ((tends_real_real::(real => real)
 10.2329 +         => real => real => bool)
 10.2330 +                              f l x)
 10.2331 +                            ((tends_real_real::(real => real)
 10.2332 +         => real => real => bool)
 10.2333 +                              g m x))
 10.2334 +                          ((tends_real_real::(real => real)
 10.2335 +       => real => real => bool)
 10.2336 +                            (%x::real.
 10.2337 +                                (op -::real => real => real) (f x) (g x))
 10.2338 +                            ((op -::real => real => real) l m) x))))))"
 10.2339 +  by (import lim LIM_SUB)
 10.2340 +
 10.2341 +lemma LIM_DIV: "(All::((real => real) => bool) => bool)
 10.2342 + (%f::real => real.
 10.2343 +     (All::((real => real) => bool) => bool)
 10.2344 +      (%g::real => real.
 10.2345 +          (All::(real => bool) => bool)
 10.2346 +           (%l::real.
 10.2347 +               (All::(real => bool) => bool)
 10.2348 +                (%m::real.
 10.2349 +                    (All::(real => bool) => bool)
 10.2350 +                     (%x::real.
 10.2351 +                         (op -->::bool => bool => bool)
 10.2352 +                          ((op &::bool => bool => bool)
 10.2353 +                            ((tends_real_real::(real => real)
 10.2354 +         => real => real => bool)
 10.2355 +                              f l x)
 10.2356 +                            ((op &::bool => bool => bool)
 10.2357 +                              ((tends_real_real::(real => real)
 10.2358 +           => real => real => bool)
 10.2359 +                                g m x)
 10.2360 +                              ((Not::bool => bool)
 10.2361 +                                ((op =::real => real => bool) m
 10.2362 +                                  (0::real)))))
 10.2363 +                          ((tends_real_real::(real => real)
 10.2364 +       => real => real => bool)
 10.2365 +                            (%x::real.
 10.2366 +                                (op /::real => real => real) (f x) (g x))
 10.2367 +                            ((op /::real => real => real) l m) x))))))"
 10.2368 +  by (import lim LIM_DIV)
 10.2369 +
 10.2370 +lemma LIM_NULL: "ALL f l x. tends_real_real f l x = tends_real_real (%x. f x - l) 0 x"
 10.2371 +  by (import lim LIM_NULL)
 10.2372 +
 10.2373 +lemma LIM_X: "ALL x0. tends_real_real (%x. x) x0 x0"
 10.2374 +  by (import lim LIM_X)
 10.2375 +
 10.2376 +lemma LIM_UNIQ: "(All::((real => real) => bool) => bool)
 10.2377 + (%f::real => real.
 10.2378 +     (All::(real => bool) => bool)
 10.2379 +      (%l::real.
 10.2380 +          (All::(real => bool) => bool)
 10.2381 +           (%m::real.
 10.2382 +               (All::(real => bool) => bool)
 10.2383 +                (%x::real.
 10.2384 +                    (op -->::bool => bool => bool)
 10.2385 +                     ((op &::bool => bool => bool)
 10.2386 +                       ((tends_real_real::(real => real)
 10.2387 +    => real => real => bool)
 10.2388 +                         f l x)
 10.2389 +                       ((tends_real_real::(real => real)
 10.2390 +    => real => real => bool)
 10.2391 +                         f m x))
 10.2392 +                     ((op =::real => real => bool) l m)))))"
 10.2393 +  by (import lim LIM_UNIQ)
 10.2394 +
 10.2395 +lemma LIM_EQUAL: "(All::((real => real) => bool) => bool)
 10.2396 + (%f::real => real.
 10.2397 +     (All::((real => real) => bool) => bool)
 10.2398 +      (%g::real => real.
 10.2399 +          (All::(real => bool) => bool)
 10.2400 +           (%l::real.
 10.2401 +               (All::(real => bool) => bool)
 10.2402 +                (%x0::real.
 10.2403 +                    (op -->::bool => bool => bool)
 10.2404 +                     ((All::(real => bool) => bool)
 10.2405 +                       (%x::real.
 10.2406 +                           (op -->::bool => bool => bool)
 10.2407 +                            ((Not::bool => bool)
 10.2408 +                              ((op =::real => real => bool) x x0))
 10.2409 +                            ((op =::real => real => bool) (f x) (g x))))
 10.2410 +                     ((op =::bool => bool => bool)
 10.2411 +                       ((tends_real_real::(real => real)
 10.2412 +    => real => real => bool)
 10.2413 +                         f l x0)
 10.2414 +                       ((tends_real_real::(real => real)
 10.2415 +    => real => real => bool)
 10.2416 +                         g l x0))))))"
 10.2417 +  by (import lim LIM_EQUAL)
 10.2418 +
 10.2419 +lemma LIM_TRANSFORM: "(All::((real => real) => bool) => bool)
 10.2420 + (%f::real => real.
 10.2421 +     (All::((real => real) => bool) => bool)
 10.2422 +      (%g::real => real.
 10.2423 +          (All::(real => bool) => bool)
 10.2424 +           (%x0::real.
 10.2425 +               (All::(real => bool) => bool)
 10.2426 +                (%l::real.
 10.2427 +                    (op -->::bool => bool => bool)
 10.2428 +                     ((op &::bool => bool => bool)
 10.2429 +                       ((tends_real_real::(real => real)
 10.2430 +    => real => real => bool)
 10.2431 +                         (%x::real.
 10.2432 +                             (op -::real => real => real) (f x) (g x))
 10.2433 +                         (0::real) x0)
 10.2434 +                       ((tends_real_real::(real => real)
 10.2435 +    => real => real => bool)
 10.2436 +                         g l x0))
 10.2437 +                     ((tends_real_real::(real => real)
 10.2438 +  => real => real => bool)
 10.2439 +                       f l x0)))))"
 10.2440 +  by (import lim LIM_TRANSFORM)
 10.2441 +
 10.2442 +constdefs
 10.2443 +  diffl :: "(real => real) => real => real => bool" 
 10.2444 +  "diffl == %f l x. tends_real_real (%h. (f (x + h) - f x) / h) l 0"
 10.2445 +
 10.2446 +lemma diffl: "ALL f l x. diffl f l x = tends_real_real (%h. (f (x + h) - f x) / h) l 0"
 10.2447 +  by (import lim diffl)
 10.2448 +
 10.2449 +constdefs
 10.2450 +  contl :: "(real => real) => real => bool" 
 10.2451 +  "contl == %f x. tends_real_real (%h. f (x + h)) (f x) 0"
 10.2452 +
 10.2453 +lemma contl: "ALL f x. contl f x = tends_real_real (%h. f (x + h)) (f x) 0"
 10.2454 +  by (import lim contl)
 10.2455 +
 10.2456 +constdefs
 10.2457 +  differentiable :: "(real => real) => real => bool" 
 10.2458 +  "differentiable == %f x. EX l. diffl f l x"
 10.2459 +
 10.2460 +lemma differentiable: "ALL f x. differentiable f x = (EX l. diffl f l x)"
 10.2461 +  by (import lim differentiable)
 10.2462 +
 10.2463 +lemma DIFF_UNIQ: "(All::((real => real) => bool) => bool)
 10.2464 + (%f::real => real.
 10.2465 +     (All::(real => bool) => bool)
 10.2466 +      (%l::real.
 10.2467 +          (All::(real => bool) => bool)
 10.2468 +           (%m::real.
 10.2469 +               (All::(real => bool) => bool)
 10.2470 +                (%x::real.
 10.2471 +                    (op -->::bool => bool => bool)
 10.2472 +                     ((op &::bool => bool => bool)
 10.2473 +                       ((diffl::(real => real) => real => real => bool) f l
 10.2474 +                         x)
 10.2475 +                       ((diffl::(real => real) => real => real => bool) f m
 10.2476 +                         x))
 10.2477 +                     ((op =::real => real => bool) l m)))))"
 10.2478 +  by (import lim DIFF_UNIQ)
 10.2479 +
 10.2480 +lemma DIFF_CONT: "(All::((real => real) => bool) => bool)
 10.2481 + (%f::real => real.
 10.2482 +     (All::(real => bool) => bool)
 10.2483 +      (%l::real.
 10.2484 +          (All::(real => bool) => bool)
 10.2485 +           (%x::real.
 10.2486 +               (op -->::bool => bool => bool)
 10.2487 +                ((diffl::(real => real) => real => real => bool) f l x)
 10.2488 +                ((contl::(real => real) => real => bool) f x))))"
 10.2489 +  by (import lim DIFF_CONT)
 10.2490 +
 10.2491 +lemma CONTL_LIM: "ALL f x. contl f x = tends_real_real f (f x) x"
 10.2492 +  by (import lim CONTL_LIM)
 10.2493 +
 10.2494 +lemma DIFF_CARAT: "ALL f l x.
 10.2495 +   diffl f l x =
 10.2496 +   (EX g. (ALL z. f z - f x = g z * (z - x)) & contl g x & g x = l)"
 10.2497 +  by (import lim DIFF_CARAT)
 10.2498 +
 10.2499 +lemma CONT_CONST: "ALL k. All (contl (%x. k))"
 10.2500 +  by (import lim CONT_CONST)
 10.2501 +
 10.2502 +lemma CONT_ADD: "(All::((real => real) => bool) => bool)
 10.2503 + (%f::real => real.
 10.2504 +     (All::((real => real) => bool) => bool)
 10.2505 +      (%g::real => real.
 10.2506 +          (All::(real => bool) => bool)
 10.2507 +           (%x::real.
 10.2508 +               (op -->::bool => bool => bool)
 10.2509 +                ((op &::bool => bool => bool)
 10.2510 +                  ((contl::(real => real) => real => bool) f x)
 10.2511 +                  ((contl::(real => real) => real => bool) g x))
 10.2512 +                ((contl::(real => real) => real => bool)
 10.2513 +                  (%x::real. (op +::real => real => real) (f x) (g x)) x))))"
 10.2514 +  by (import lim CONT_ADD)
 10.2515 +
 10.2516 +lemma CONT_MUL: "(All::((real => real) => bool) => bool)
 10.2517 + (%f::real => real.
 10.2518 +     (All::((real => real) => bool) => bool)
 10.2519 +      (%g::real => real.
 10.2520 +          (All::(real => bool) => bool)
 10.2521 +           (%x::real.
 10.2522 +               (op -->::bool => bool => bool)
 10.2523 +                ((op &::bool => bool => bool)
 10.2524 +                  ((contl::(real => real) => real => bool) f x)
 10.2525 +                  ((contl::(real => real) => real => bool) g x))
 10.2526 +                ((contl::(real => real) => real => bool)
 10.2527 +                  (%x::real. (op *::real => real => real) (f x) (g x)) x))))"
 10.2528 +  by (import lim CONT_MUL)
 10.2529 +
 10.2530 +lemma CONT_NEG: "(All::((real => real) => bool) => bool)
 10.2531 + (%f::real => real.
 10.2532 +     (All::(real => bool) => bool)
 10.2533 +      (%x::real.
 10.2534 +          (op -->::bool => bool => bool)
 10.2535 +           ((contl::(real => real) => real => bool) f x)
 10.2536 +           ((contl::(real => real) => real => bool)
 10.2537 +             (%x::real. (uminus::real => real) (f x)) x)))"
 10.2538 +  by (import lim CONT_NEG)
 10.2539 +
 10.2540 +lemma CONT_INV: "(All::((real => real) => bool) => bool)
 10.2541 + (%f::real => real.
 10.2542 +     (All::(real => bool) => bool)
 10.2543 +      (%x::real.
 10.2544 +          (op -->::bool => bool => bool)
 10.2545 +           ((op &::bool => bool => bool)
 10.2546 +             ((contl::(real => real) => real => bool) f x)
 10.2547 +             ((Not::bool => bool)
 10.2548 +               ((op =::real => real => bool) (f x) (0::real))))
 10.2549 +           ((contl::(real => real) => real => bool)
 10.2550 +             (%x::real. (inverse::real => real) (f x)) x)))"
 10.2551 +  by (import lim CONT_INV)
 10.2552 +
 10.2553 +lemma CONT_SUB: "(All::((real => real) => bool) => bool)
 10.2554 + (%f::real => real.
 10.2555 +     (All::((real => real) => bool) => bool)
 10.2556 +      (%g::real => real.
 10.2557 +          (All::(real => bool) => bool)
 10.2558 +           (%x::real.
 10.2559 +               (op -->::bool => bool => bool)
 10.2560 +                ((op &::bool => bool => bool)
 10.2561 +                  ((contl::(real => real) => real => bool) f x)
 10.2562 +                  ((contl::(real => real) => real => bool) g x))
 10.2563 +                ((contl::(real => real) => real => bool)
 10.2564 +                  (%x::real. (op -::real => real => real) (f x) (g x)) x))))"
 10.2565 +  by (import lim CONT_SUB)
 10.2566 +
 10.2567 +lemma CONT_DIV: "(All::((real => real) => bool) => bool)
 10.2568 + (%f::real => real.
 10.2569 +     (All::((real => real) => bool) => bool)
 10.2570 +      (%g::real => real.
 10.2571 +          (All::(real => bool) => bool)
 10.2572 +           (%x::real.
 10.2573 +               (op -->::bool => bool => bool)
 10.2574 +                ((op &::bool => bool => bool)
 10.2575 +                  ((contl::(real => real) => real => bool) f x)
 10.2576 +                  ((op &::bool => bool => bool)
 10.2577 +                    ((contl::(real => real) => real => bool) g x)
 10.2578 +                    ((Not::bool => bool)
 10.2579 +                      ((op =::real => real => bool) (g x) (0::real)))))
 10.2580 +                ((contl::(real => real) => real => bool)
 10.2581 +                  (%x::real. (op /::real => real => real) (f x) (g x)) x))))"
 10.2582 +  by (import lim CONT_DIV)
 10.2583 +
 10.2584 +lemma CONT_COMPOSE: "(All::((real => real) => bool) => bool)
 10.2585 + (%f::real => real.
 10.2586 +     (All::((real => real) => bool) => bool)
 10.2587 +      (%g::real => real.
 10.2588 +          (All::(real => bool) => bool)
 10.2589 +           (%x::real.
 10.2590 +               (op -->::bool => bool => bool)
 10.2591 +                ((op &::bool => bool => bool)
 10.2592 +                  ((contl::(real => real) => real => bool) f x)
 10.2593 +                  ((contl::(real => real) => real => bool) g (f x)))
 10.2594 +                ((contl::(real => real) => real => bool) (%x::real. g (f x))
 10.2595 +                  x))))"
 10.2596 +  by (import lim CONT_COMPOSE)
 10.2597 +
 10.2598 +lemma IVT: "(All::((real => real) => bool) => bool)
 10.2599 + (%f::real => real.
 10.2600 +     (All::(real => bool) => bool)
 10.2601 +      (%a::real.
 10.2602 +          (All::(real => bool) => bool)
 10.2603 +           (%b::real.
 10.2604 +               (All::(real => bool) => bool)
 10.2605 +                (%y::real.
 10.2606 +                    (op -->::bool => bool => bool)
 10.2607 +                     ((op &::bool => bool => bool)
 10.2608 +                       ((op <=::real => real => bool) a b)
 10.2609 +                       ((op &::bool => bool => bool)
 10.2610 +                         ((op &::bool => bool => bool)
 10.2611 +                           ((op <=::real => real => bool) (f a) y)
 10.2612 +                           ((op <=::real => real => bool) y (f b)))
 10.2613 +                         ((All::(real => bool) => bool)
 10.2614 +                           (%x::real.
 10.2615 +                               (op -->::bool => bool => bool)
 10.2616 +                                ((op &::bool => bool => bool)
 10.2617 +                                  ((op <=::real => real => bool) a x)
 10.2618 +                                  ((op <=::real => real => bool) x b))
 10.2619 +                                ((contl::(real => real) => real => bool) f
 10.2620 +                                  x)))))
 10.2621 +                     ((Ex::(real => bool) => bool)
 10.2622 +                       (%x::real.
 10.2623 +                           (op &::bool => bool => bool)
 10.2624 +                            ((op <=::real => real => bool) a x)
 10.2625 +                            ((op &::bool => bool => bool)
 10.2626 +                              ((op <=::real => real => bool) x b)
 10.2627 +                              ((op =::real => real => bool) (f x) y))))))))"
 10.2628 +  by (import lim IVT)
 10.2629 +
 10.2630 +lemma IVT2: "(All::((real => real) => bool) => bool)
 10.2631 + (%f::real => real.
 10.2632 +     (All::(real => bool) => bool)
 10.2633 +      (%a::real.
 10.2634 +          (All::(real => bool) => bool)
 10.2635 +           (%b::real.
 10.2636 +               (All::(real => bool) => bool)
 10.2637 +                (%y::real.
 10.2638 +                    (op -->::bool => bool => bool)
 10.2639 +                     ((op &::bool => bool => bool)
 10.2640 +                       ((op <=::real => real => bool) a b)
 10.2641 +                       ((op &::bool => bool => bool)
 10.2642 +                         ((op &::bool => bool => bool)
 10.2643 +                           ((op <=::real => real => bool) (f b) y)
 10.2644 +                           ((op <=::real => real => bool) y (f a)))
 10.2645 +                         ((All::(real => bool) => bool)
 10.2646 +                           (%x::real.
 10.2647 +                               (op -->::bool => bool => bool)
 10.2648 +                                ((op &::bool => bool => bool)
 10.2649 +                                  ((op <=::real => real => bool) a x)
 10.2650 +                                  ((op <=::real => real => bool) x b))
 10.2651 +                                ((contl::(real => real) => real => bool) f
 10.2652 +                                  x)))))
 10.2653 +                     ((Ex::(real => bool) => bool)
 10.2654 +                       (%x::real.
 10.2655 +                           (op &::bool => bool => bool)
 10.2656 +                            ((op <=::real => real => bool) a x)
 10.2657 +                            ((op &::bool => bool => bool)
 10.2658 +                              ((op <=::real => real => bool) x b)
 10.2659 +                              ((op =::real => real => bool) (f x) y))))))))"
 10.2660 +  by (import lim IVT2)
 10.2661 +
 10.2662 +lemma DIFF_CONST: "ALL k. All (diffl (%x. k) 0)"
 10.2663 +  by (import lim DIFF_CONST)
 10.2664 +
 10.2665 +lemma DIFF_ADD: "(All::((real => real) => bool) => bool)
 10.2666 + (%f::real => real.
 10.2667 +     (All::((real => real) => bool) => bool)
 10.2668 +      (%g::real => real.
 10.2669 +          (All::(real => bool) => bool)
 10.2670 +           (%l::real.
 10.2671 +               (All::(real => bool) => bool)
 10.2672 +                (%m::real.
 10.2673 +                    (All::(real => bool) => bool)
 10.2674 +                     (%x::real.
 10.2675 +                         (op -->::bool => bool => bool)
 10.2676 +                          ((op &::bool => bool => bool)
 10.2677 +                            ((diffl::(real => real) => real => real => bool)
 10.2678 +                              f l x)
 10.2679 +                            ((diffl::(real => real) => real => real => bool)
 10.2680 +                              g m x))
 10.2681 +                          ((diffl::(real => real) => real => real => bool)
 10.2682 +                            (%x::real.
 10.2683 +                                (op +::real => real => real) (f x) (g x))
 10.2684 +                            ((op +::real => real => real) l m) x))))))"
 10.2685 +  by (import lim DIFF_ADD)
 10.2686 +
 10.2687 +lemma DIFF_MUL: "(All::((real => real) => bool) => bool)
 10.2688 + (%f::real => real.
 10.2689 +     (All::((real => real) => bool) => bool)
 10.2690 +      (%g::real => real.
 10.2691 +          (All::(real => bool) => bool)
 10.2692 +           (%l::real.
 10.2693 +               (All::(real => bool) => bool)
 10.2694 +                (%m::real.
 10.2695 +                    (All::(real => bool) => bool)
 10.2696 +                     (%x::real.
 10.2697 +                         (op -->::bool => bool => bool)
 10.2698 +                          ((op &::bool => bool => bool)
 10.2699 +                            ((diffl::(real => real) => real => real => bool)
 10.2700 +                              f l x)
 10.2701 +                            ((diffl::(real => real) => real => real => bool)
 10.2702 +                              g m x))
 10.2703 +                          ((diffl::(real => real) => real => real => bool)
 10.2704 +                            (%x::real.
 10.2705 +                                (op *::real => real => real) (f x) (g x))
 10.2706 +                            ((op +::real => real => real)
 10.2707 +                              ((op *::real => real => real) l (g x))
 10.2708 +                              ((op *::real => real => real) m (f x)))
 10.2709 +                            x))))))"
 10.2710 +  by (import lim DIFF_MUL)
 10.2711 +
 10.2712 +lemma DIFF_CMUL: "(All::((real => real) => bool) => bool)
 10.2713 + (%f::real => real.
 10.2714 +     (All::(real => bool) => bool)
 10.2715 +      (%c::real.
 10.2716 +          (All::(real => bool) => bool)
 10.2717 +           (%l::real.
 10.2718 +               (All::(real => bool) => bool)
 10.2719 +                (%x::real.
 10.2720 +                    (op -->::bool => bool => bool)
 10.2721 +                     ((diffl::(real => real) => real => real => bool) f l x)
 10.2722 +                     ((diffl::(real => real) => real => real => bool)
 10.2723 +                       (%x::real. (op *::real => real => real) c (f x))
 10.2724 +                       ((op *::real => real => real) c l) x)))))"
 10.2725 +  by (import lim DIFF_CMUL)
 10.2726 +
 10.2727 +lemma DIFF_NEG: "(All::((real => real) => bool) => bool)
 10.2728 + (%f::real => real.
 10.2729 +     (All::(real => bool) => bool)
 10.2730 +      (%l::real.
 10.2731 +          (All::(real => bool) => bool)
 10.2732 +           (%x::real.
 10.2733 +               (op -->::bool => bool => bool)
 10.2734 +                ((diffl::(real => real) => real => real => bool) f l x)
 10.2735 +                ((diffl::(real => real) => real => real => bool)
 10.2736 +                  (%x::real. (uminus::real => real) (f x))
 10.2737 +                  ((uminus::real => real) l) x))))"
 10.2738 +  by (import lim DIFF_NEG)
 10.2739 +
 10.2740 +lemma DIFF_SUB: "(All::((real => real) => bool) => bool)
 10.2741 + (%f::real => real.
 10.2742 +     (All::((real => real) => bool) => bool)
 10.2743 +      (%g::real => real.
 10.2744 +          (All::(real => bool) => bool)
 10.2745 +           (%l::real.
 10.2746 +               (All::(real => bool) => bool)
 10.2747 +                (%m::real.
 10.2748 +                    (All::(real => bool) => bool)
 10.2749 +                     (%x::real.
 10.2750 +                         (op -->::bool => bool => bool)
 10.2751 +                          ((op &::bool => bool => bool)
 10.2752 +                            ((diffl::(real => real) => real => real => bool)
 10.2753 +                              f l x)
 10.2754 +                            ((diffl::(real => real) => real => real => bool)
 10.2755 +                              g m x))
 10.2756 +                          ((diffl::(real => real) => real => real => bool)
 10.2757 +                            (%x::real.
 10.2758 +                                (op -::real => real => real) (f x) (g x))
 10.2759 +                            ((op -::real => real => real) l m) x))))))"
 10.2760 +  by (import lim DIFF_SUB)
 10.2761 +
 10.2762 +lemma DIFF_CHAIN: "(All::((real => real) => bool) => bool)
 10.2763 + (%f::real => real.
 10.2764 +     (All::((real => real) => bool) => bool)
 10.2765 +      (%g::real => real.
 10.2766 +          (All::(real => bool) => bool)
 10.2767 +           (%l::real.
 10.2768 +               (All::(real => bool) => bool)
 10.2769 +                (%m::real.
 10.2770 +                    (All::(real => bool) => bool)
 10.2771 +                     (%x::real.
 10.2772 +                         (op -->::bool => bool => bool)
 10.2773 +                          ((op &::bool => bool => bool)
 10.2774 +                            ((diffl::(real => real) => real => real => bool)
 10.2775 +                              f l (g x))
 10.2776 +                            ((diffl::(real => real) => real => real => bool)
 10.2777 +                              g m x))
 10.2778 +                          ((diffl::(real => real) => real => real => bool)
 10.2779 +                            (%x::real. f (g x))
 10.2780 +                            ((op *::real => real => real) l m) x))))))"
 10.2781 +  by (import lim DIFF_CHAIN)
 10.2782 +
 10.2783 +lemma DIFF_X: "All (diffl (%x. x) 1)"
 10.2784 +  by (import lim DIFF_X)
 10.2785 +
 10.2786 +lemma DIFF_POW: "ALL n x. diffl (%x. x ^ n) (real n * x ^ (n - 1)) x"
 10.2787 +  by (import lim DIFF_POW)
 10.2788 +
 10.2789 +lemma DIFF_XM1: "(All::(real => bool) => bool)
 10.2790 + (%x::real.
 10.2791 +     (op -->::bool => bool => bool)
 10.2792 +      ((Not::bool => bool) ((op =::real => real => bool) x (0::real)))
 10.2793 +      ((diffl::(real => real) => real => real => bool)
 10.2794 +        (inverse::real => real)
 10.2795 +        ((uminus::real => real)
 10.2796 +          ((op ^::real => nat => real) ((inverse::real => real) x)
 10.2797 +            ((number_of::bin => nat)
 10.2798 +              ((op BIT::bin => bool => bin)
 10.2799 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.2800 +                (False::bool)))))
 10.2801 +        x))"
 10.2802 +  by (import lim DIFF_XM1)
 10.2803 +
 10.2804 +lemma DIFF_INV: "(All::((real => real) => bool) => bool)
 10.2805 + (%f::real => real.
 10.2806 +     (All::(real => bool) => bool)
 10.2807 +      (%l::real.
 10.2808 +          (All::(real => bool) => bool)
 10.2809 +           (%x::real.
 10.2810 +               (op -->::bool => bool => bool)
 10.2811 +                ((op &::bool => bool => bool)
 10.2812 +                  ((diffl::(real => real) => real => real => bool) f l x)
 10.2813 +                  ((Not::bool => bool)
 10.2814 +                    ((op =::real => real => bool) (f x) (0::real))))
 10.2815 +                ((diffl::(real => real) => real => real => bool)
 10.2816 +                  (%x::real. (inverse::real => real) (f x))
 10.2817 +                  ((uminus::real => real)
 10.2818 +                    ((op /::real => real => real) l
 10.2819 +                      ((op ^::real => nat => real) (f x)
 10.2820 +                        ((number_of::bin => nat)
 10.2821 +                          ((op BIT::bin => bool => bin)
 10.2822 +                            ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.2823 +                              (True::bool))
 10.2824 +                            (False::bool))))))
 10.2825 +                  x))))"
 10.2826 +  by (import lim DIFF_INV)
 10.2827 +
 10.2828 +lemma DIFF_DIV: "(All::((real => real) => bool) => bool)
 10.2829 + (%f::real => real.
 10.2830 +     (All::((real => real) => bool) => bool)
 10.2831 +      (%g::real => real.
 10.2832 +          (All::(real => bool) => bool)
 10.2833 +           (%l::real.
 10.2834 +               (All::(real => bool) => bool)
 10.2835 +                (%m::real.
 10.2836 +                    (All::(real => bool) => bool)
 10.2837 +                     (%x::real.
 10.2838 +                         (op -->::bool => bool => bool)
 10.2839 +                          ((op &::bool => bool => bool)
 10.2840 +                            ((diffl::(real => real) => real => real => bool)
 10.2841 +                              f l x)
 10.2842 +                            ((op &::bool => bool => bool)
 10.2843 +                              ((diffl::(real => real)
 10.2844 + => real => real => bool)
 10.2845 +                                g m x)
 10.2846 +                              ((Not::bool => bool)
 10.2847 +                                ((op =::real => real => bool) (g x)
 10.2848 +                                  (0::real)))))
 10.2849 +                          ((diffl::(real => real) => real => real => bool)
 10.2850 +                            (%x::real.
 10.2851 +                                (op /::real => real => real) (f x) (g x))
 10.2852 +                            ((op /::real => real => real)
 10.2853 +                              ((op -::real => real => real)
 10.2854 +                                ((op *::real => real => real) l (g x))
 10.2855 +                                ((op *::real => real => real) m (f x)))
 10.2856 +                              ((op ^::real => nat => real) (g x)
 10.2857 +                                ((number_of::bin => nat)
 10.2858 +                                  ((op BIT::bin => bool => bin)
 10.2859 +                                    ((op BIT::bin => bool => bin)
 10.2860 +(bin.Pls::bin) (True::bool))
 10.2861 +                                    (False::bool)))))
 10.2862 +                            x))))))"
 10.2863 +  by (import lim DIFF_DIV)
 10.2864 +
 10.2865 +lemma DIFF_SUM: "(All::((nat => real => real) => bool) => bool)
 10.2866 + (%f::nat => real => real.
 10.2867 +     (All::((nat => real => real) => bool) => bool)
 10.2868 +      (%f'::nat => real => real.
 10.2869 +          (All::(nat => bool) => bool)
 10.2870 +           (%m::nat.
 10.2871 +               (All::(nat => bool) => bool)
 10.2872 +                (%n::nat.
 10.2873 +                    (All::(real => bool) => bool)
 10.2874 +                     (%x::real.
 10.2875 +                         (op -->::bool => bool => bool)
 10.2876 +                          ((All::(nat => bool) => bool)
 10.2877 +                            (%r::nat.
 10.2878 +                                (op -->::bool => bool => bool)
 10.2879 +                                 ((op &::bool => bool => bool)
 10.2880 +                                   ((op <=::nat => nat => bool) m r)
 10.2881 +                                   ((op <::nat => nat => bool) r
 10.2882 +                                     ((op +::nat => nat => nat) m n)))
 10.2883 +                                 ((diffl::(real => real)
 10.2884 +    => real => real => bool)
 10.2885 +                                   (f r) (f' r x) x)))
 10.2886 +                          ((diffl::(real => real) => real => real => bool)
 10.2887 +                            (%x::real.
 10.2888 +                                (real.sum::nat * nat
 10.2889 +     => (nat => real) => real)
 10.2890 +                                 ((Pair::nat => nat => nat * nat) m n)
 10.2891 +                                 (%n::nat. f n x))
 10.2892 +                            ((real.sum::nat * nat => (nat => real) => real)
 10.2893 +                              ((Pair::nat => nat => nat * nat) m n)
 10.2894 +                              (%r::nat. f' r x))
 10.2895 +                            x))))))"
 10.2896 +  by (import lim DIFF_SUM)
 10.2897 +
 10.2898 +lemma CONT_BOUNDED: "(All::((real => real) => bool) => bool)
 10.2899 + (%f::real => real.
 10.2900 +     (All::(real => bool) => bool)
 10.2901 +      (%a::real.
 10.2902 +          (All::(real => bool) => bool)
 10.2903 +           (%b::real.
 10.2904 +               (op -->::bool => bool => bool)
 10.2905 +                ((op &::bool => bool => bool)
 10.2906 +                  ((op <=::real => real => bool) a b)
 10.2907 +                  ((All::(real => bool) => bool)
 10.2908 +                    (%x::real.
 10.2909 +                        (op -->::bool => bool => bool)
 10.2910 +                         ((op &::bool => bool => bool)
 10.2911 +                           ((op <=::real => real => bool) a x)
 10.2912 +                           ((op <=::real => real => bool) x b))
 10.2913 +                         ((contl::(real => real) => real => bool) f x))))
 10.2914 +                ((Ex::(real => bool) => bool)
 10.2915 +                  (%M::real.
 10.2916 +                      (All::(real => bool) => bool)
 10.2917 +                       (%x::real.
 10.2918 +                           (op -->::bool => bool => bool)
 10.2919 +                            ((op &::bool => bool => bool)
 10.2920 +                              ((op <=::real => real => bool) a x)
 10.2921 +                              ((op <=::real => real => bool) x b))
 10.2922 +                            ((op <=::real => real => bool) (f x) M)))))))"
 10.2923 +  by (import lim CONT_BOUNDED)
 10.2924 +
 10.2925 +lemma CONT_HASSUP: "(All::((real => real) => bool) => bool)
 10.2926 + (%f::real => real.
 10.2927 +     (All::(real => bool) => bool)
 10.2928 +      (%a::real.
 10.2929 +          (All::(real => bool) => bool)
 10.2930 +           (%b::real.
 10.2931 +               (op -->::bool => bool => bool)
 10.2932 +                ((op &::bool => bool => bool)
 10.2933 +                  ((op <=::real => real => bool) a b)
 10.2934 +                  ((All::(real => bool) => bool)
 10.2935 +                    (%x::real.
 10.2936 +                        (op -->::bool => bool => bool)
 10.2937 +                         ((op &::bool => bool => bool)
 10.2938 +                           ((op <=::real => real => bool) a x)
 10.2939 +                           ((op <=::real => real => bool) x b))
 10.2940 +                         ((contl::(real => real) => real => bool) f x))))
 10.2941 +                ((Ex::(real => bool) => bool)
 10.2942 +                  (%M::real.
 10.2943 +                      (op &::bool => bool => bool)
 10.2944 +                       ((All::(real => bool) => bool)
 10.2945 +                         (%x::real.
 10.2946 +                             (op -->::bool => bool => bool)
 10.2947 +                              ((op &::bool => bool => bool)
 10.2948 +                                ((op <=::real => real => bool) a x)
 10.2949 +                                ((op <=::real => real => bool) x b))
 10.2950 +                              ((op <=::real => real => bool) (f x) M)))
 10.2951 +                       ((All::(real => bool) => bool)
 10.2952 +                         (%N::real.
 10.2953 +                             (op -->::bool => bool => bool)
 10.2954 +                              ((op <::real => real => bool) N M)
 10.2955 +                              ((Ex::(real => bool) => bool)
 10.2956 +                                (%x::real.
 10.2957 +                                    (op &::bool => bool => bool)
 10.2958 +                                     ((op <=::real => real => bool) a x)
 10.2959 +                                     ((op &::bool => bool => bool)
 10.2960 + ((op <=::real => real => bool) x b)
 10.2961 + ((op <::real => real => bool) N (f x))))))))))))"
 10.2962 +  by (import lim CONT_HASSUP)
 10.2963 +
 10.2964 +lemma CONT_ATTAINS: "(All::((real => real) => bool) => bool)
 10.2965 + (%f::real => real.
 10.2966 +     (All::(real => bool) => bool)
 10.2967 +      (%a::real.
 10.2968 +          (All::(real => bool) => bool)
 10.2969 +           (%b::real.
 10.2970 +               (op -->::bool => bool => bool)
 10.2971 +                ((op &::bool => bool => bool)
 10.2972 +                  ((op <=::real => real => bool) a b)
 10.2973 +                  ((All::(real => bool) => bool)
 10.2974 +                    (%x::real.
 10.2975 +                        (op -->::bool => bool => bool)
 10.2976 +                         ((op &::bool => bool => bool)
 10.2977 +                           ((op <=::real => real => bool) a x)
 10.2978 +                           ((op <=::real => real => bool) x b))
 10.2979 +                         ((contl::(real => real) => real => bool) f x))))
 10.2980 +                ((Ex::(real => bool) => bool)
 10.2981 +                  (%x::real.
 10.2982 +                      (op &::bool => bool => bool)
 10.2983 +                       ((All::(real => bool) => bool)
 10.2984 +                         (%xa::real.
 10.2985 +                             (op -->::bool => bool => bool)
 10.2986 +                              ((op &::bool => bool => bool)
 10.2987 +                                ((op <=::real => real => bool) a xa)
 10.2988 +                                ((op <=::real => real => bool) xa b))
 10.2989 +                              ((op <=::real => real => bool) (f xa) x)))
 10.2990 +                       ((Ex::(real => bool) => bool)
 10.2991 +                         (%xa::real.
 10.2992 +                             (op &::bool => bool => bool)
 10.2993 +                              ((op <=::real => real => bool) a xa)
 10.2994 +                              ((op &::bool => bool => bool)
 10.2995 +                                ((op <=::real => real => bool) xa b)
 10.2996 +                                ((op =::real => real => bool) (f xa)
 10.2997 +                                  x)))))))))"
 10.2998 +  by (import lim CONT_ATTAINS)
 10.2999 +
 10.3000 +lemma CONT_ATTAINS2: "(All::((real => real) => bool) => bool)
 10.3001 + (%f::real => real.
 10.3002 +     (All::(real => bool) => bool)
 10.3003 +      (%a::real.
 10.3004 +          (All::(real => bool) => bool)
 10.3005 +           (%b::real.
 10.3006 +               (op -->::bool => bool => bool)
 10.3007 +                ((op &::bool => bool => bool)
 10.3008 +                  ((op <=::real => real => bool) a b)
 10.3009 +                  ((All::(real => bool) => bool)
 10.3010 +                    (%x::real.
 10.3011 +                        (op -->::bool => bool => bool)
 10.3012 +                         ((op &::bool => bool => bool)
 10.3013 +                           ((op <=::real => real => bool) a x)
 10.3014 +                           ((op <=::real => real => bool) x b))
 10.3015 +                         ((contl::(real => real) => real => bool) f x))))
 10.3016 +                ((Ex::(real => bool) => bool)
 10.3017 +                  (%x::real.
 10.3018 +                      (op &::bool => bool => bool)
 10.3019 +                       ((All::(real => bool) => bool)
 10.3020 +                         (%xa::real.
 10.3021 +                             (op -->::bool => bool => bool)
 10.3022 +                              ((op &::bool => bool => bool)
 10.3023 +                                ((op <=::real => real => bool) a xa)
 10.3024 +                                ((op <=::real => real => bool) xa b))
 10.3025 +                              ((op <=::real => real => bool) x (f xa))))
 10.3026 +                       ((Ex::(real => bool) => bool)
 10.3027 +                         (%xa::real.
 10.3028 +                             (op &::bool => bool => bool)
 10.3029 +                              ((op <=::real => real => bool) a xa)
 10.3030 +                              ((op &::bool => bool => bool)
 10.3031 +                                ((op <=::real => real => bool) xa b)
 10.3032 +                                ((op =::real => real => bool) (f xa)
 10.3033 +                                  x)))))))))"
 10.3034 +  by (import lim CONT_ATTAINS2)
 10.3035 +
 10.3036 +lemma CONT_ATTAINS_ALL: "(All::((real => real) => bool) => bool)
 10.3037 + (%f::real => real.
 10.3038 +     (All::(real => bool) => bool)
 10.3039 +      (%a::real.
 10.3040 +          (All::(real => bool) => bool)
 10.3041 +           (%b::real.
 10.3042 +               (op -->::bool => bool => bool)
 10.3043 +                ((op &::bool => bool => bool)
 10.3044 +                  ((op <=::real => real => bool) a b)
 10.3045 +                  ((All::(real => bool) => bool)
 10.3046 +                    (%x::real.
 10.3047 +                        (op -->::bool => bool => bool)
 10.3048 +                         ((op &::bool => bool => bool)
 10.3049 +                           ((op <=::real => real => bool) a x)
 10.3050 +                           ((op <=::real => real => bool) x b))
 10.3051 +                         ((contl::(real => real) => real => bool) f x))))
 10.3052 +                ((Ex::(real => bool) => bool)
 10.3053 +                  (%x::real.
 10.3054 +                      (Ex::(real => bool) => bool)
 10.3055 +                       (%M::real.
 10.3056 +                           (op &::bool => bool => bool)
 10.3057 +                            ((op <=::real => real => bool) x M)
 10.3058 +                            ((op &::bool => bool => bool)
 10.3059 +                              ((All::(real => bool) => bool)
 10.3060 +                                (%y::real.
 10.3061 +                                    (op -->::bool => bool => bool)
 10.3062 +                                     ((op &::bool => bool => bool)
 10.3063 + ((op <=::real => real => bool) x y) ((op <=::real => real => bool) y M))
 10.3064 +                                     ((Ex::(real => bool) => bool)
 10.3065 + (%x::real.
 10.3066 +     (op &::bool => bool => bool) ((op <=::real => real => bool) a x)
 10.3067 +      ((op &::bool => bool => bool) ((op <=::real => real => bool) x b)
 10.3068 +        ((op =::real => real => bool) (f x) y))))))
 10.3069 +                              ((All::(real => bool) => bool)
 10.3070 +                                (%xa::real.
 10.3071 +                                    (op -->::bool => bool => bool)
 10.3072 +                                     ((op &::bool => bool => bool)
 10.3073 + ((op <=::real => real => bool) a xa) ((op <=::real => real => bool) xa b))
 10.3074 +                                     ((op &::bool => bool => bool)
 10.3075 + ((op <=::real => real => bool) x (f xa))
 10.3076 + ((op <=::real => real => bool) (f xa) M)))))))))))"
 10.3077 +  by (import lim CONT_ATTAINS_ALL)
 10.3078 +
 10.3079 +lemma DIFF_LINC: "(All::((real => real) => bool) => bool)
 10.3080 + (%f::real => real.
 10.3081 +     (All::(real => bool) => bool)
 10.3082 +      (%x::real.
 10.3083 +          (All::(real => bool) => bool)
 10.3084 +           (%l::real.
 10.3085 +               (op -->::bool => bool => bool)
 10.3086 +                ((op &::bool => bool => bool)
 10.3087 +                  ((diffl::(real => real) => real => real => bool) f l x)
 10.3088 +                  ((op <::real => real => bool) (0::real) l))
 10.3089 +                ((Ex::(real => bool) => bool)
 10.3090 +                  (%d::real.
 10.3091 +                      (op &::bool => bool => bool)
 10.3092 +                       ((op <::real => real => bool) (0::real) d)
 10.3093 +                       ((All::(real => bool) => bool)
 10.3094 +                         (%h::real.
 10.3095 +                             (op -->::bool => bool => bool)
 10.3096 +                              ((op &::bool => bool => bool)
 10.3097 +                                ((op <::real => real => bool) (0::real) h)
 10.3098 +                                ((op <::real => real => bool) h d))
 10.3099 +                              ((op <::real => real => bool) (f x)
 10.3100 +                                (f ((op +::real => real => real) x
 10.3101 +                                     h))))))))))"
 10.3102 +  by (import lim DIFF_LINC)
 10.3103 +
 10.3104 +lemma DIFF_LDEC: "(All::((real => real) => bool) => bool)
 10.3105 + (%f::real => real.
 10.3106 +     (All::(real => bool) => bool)
 10.3107 +      (%x::real.
 10.3108 +          (All::(real => bool) => bool)
 10.3109 +           (%l::real.
 10.3110 +               (op -->::bool => bool => bool)
 10.3111 +                ((op &::bool => bool => bool)
 10.3112 +                  ((diffl::(real => real) => real => real => bool) f l x)
 10.3113 +                  ((op <::real => real => bool) l (0::real)))
 10.3114 +                ((Ex::(real => bool) => bool)
 10.3115 +                  (%d::real.
 10.3116 +                      (op &::bool => bool => bool)
 10.3117 +                       ((op <::real => real => bool) (0::real) d)
 10.3118 +                       ((All::(real => bool) => bool)
 10.3119 +                         (%h::real.
 10.3120 +                             (op -->::bool => bool => bool)
 10.3121 +                              ((op &::bool => bool => bool)
 10.3122 +                                ((op <::real => real => bool) (0::real) h)
 10.3123 +                                ((op <::real => real => bool) h d))
 10.3124 +                              ((op <::real => real => bool) (f x)
 10.3125 +                                (f ((op -::real => real => real) x
 10.3126 +                                     h))))))))))"
 10.3127 +  by (import lim DIFF_LDEC)
 10.3128 +
 10.3129 +lemma DIFF_LMAX: "(All::((real => real) => bool) => bool)
 10.3130 + (%f::real => real.
 10.3131 +     (All::(real => bool) => bool)
 10.3132 +      (%x::real.
 10.3133 +          (All::(real => bool) => bool)
 10.3134 +           (%l::real.
 10.3135 +               (op -->::bool => bool => bool)
 10.3136 +                ((op &::bool => bool => bool)
 10.3137 +                  ((diffl::(real => real) => real => real => bool) f l x)
 10.3138 +                  ((Ex::(real => bool) => bool)
 10.3139 +                    (%d::real.
 10.3140 +                        (op &::bool => bool => bool)
 10.3141 +                         ((op <::real => real => bool) (0::real) d)
 10.3142 +                         ((All::(real => bool) => bool)
 10.3143 +                           (%y::real.
 10.3144 +                               (op -->::bool => bool => bool)
 10.3145 +                                ((op <::real => real => bool)
 10.3146 +                                  ((abs::real => real)
 10.3147 +                                    ((op -::real => real => real) x y))
 10.3148 +                                  d)
 10.3149 +                                ((op <=::real => real => bool) (f y)
 10.3150 +                                  (f x)))))))
 10.3151 +                ((op =::real => real => bool) l (0::real)))))"
 10.3152 +  by (import lim DIFF_LMAX)
 10.3153 +
 10.3154 +lemma DIFF_LMIN: "(All::((real => real) => bool) => bool)
 10.3155 + (%f::real => real.
 10.3156 +     (All::(real => bool) => bool)
 10.3157 +      (%x::real.
 10.3158 +          (All::(real => bool) => bool)
 10.3159 +           (%l::real.
 10.3160 +               (op -->::bool => bool => bool)
 10.3161 +                ((op &::bool => bool => bool)
 10.3162 +                  ((diffl::(real => real) => real => real => bool) f l x)
 10.3163 +                  ((Ex::(real => bool) => bool)
 10.3164 +                    (%d::real.
 10.3165 +                        (op &::bool => bool => bool)
 10.3166 +                         ((op <::real => real => bool) (0::real) d)
 10.3167 +                         ((All::(real => bool) => bool)
 10.3168 +                           (%y::real.
 10.3169 +                               (op -->::bool => bool => bool)
 10.3170 +                                ((op <::real => real => bool)
 10.3171 +                                  ((abs::real => real)
 10.3172 +                                    ((op -::real => real => real) x y))
 10.3173 +                                  d)
 10.3174 +                                ((op <=::real => real => bool) (f x)
 10.3175 +                                  (f y)))))))
 10.3176 +                ((op =::real => real => bool) l (0::real)))))"
 10.3177 +  by (import lim DIFF_LMIN)
 10.3178 +
 10.3179 +lemma DIFF_LCONST: "(All::((real => real) => bool) => bool)
 10.3180 + (%f::real => real.
 10.3181 +     (All::(real => bool) => bool)
 10.3182 +      (%x::real.
 10.3183 +          (All::(real => bool) => bool)
 10.3184 +           (%l::real.
 10.3185 +               (op -->::bool => bool => bool)
 10.3186 +                ((op &::bool => bool => bool)
 10.3187 +                  ((diffl::(real => real) => real => real => bool) f l x)
 10.3188 +                  ((Ex::(real => bool) => bool)
 10.3189 +                    (%d::real.
 10.3190 +                        (op &::bool => bool => bool)
 10.3191 +                         ((op <::real => real => bool) (0::real) d)
 10.3192 +                         ((All::(real => bool) => bool)
 10.3193 +                           (%y::real.
 10.3194 +                               (op -->::bool => bool => bool)
 10.3195 +                                ((op <::real => real => bool)
 10.3196 +                                  ((abs::real => real)
 10.3197 +                                    ((op -::real => real => real) x y))
 10.3198 +                                  d)
 10.3199 +                                ((op =::real => real => bool) (f y)
 10.3200 +                                  (f x)))))))
 10.3201 +                ((op =::real => real => bool) l (0::real)))))"
 10.3202 +  by (import lim DIFF_LCONST)
 10.3203 +
 10.3204 +lemma INTERVAL_LEMMA: "(All::(real => bool) => bool)
 10.3205 + (%a::real.
 10.3206 +     (All::(real => bool) => bool)
 10.3207 +      (%b::real.
 10.3208 +          (All::(real => bool) => bool)
 10.3209 +           (%x::real.
 10.3210 +               (op -->::bool => bool => bool)
 10.3211 +                ((op &::bool => bool => bool)
 10.3212 +                  ((op <::real => real => bool) a x)
 10.3213 +                  ((op <::real => real => bool) x b))
 10.3214 +                ((Ex::(real => bool) => bool)
 10.3215 +                  (%d::real.
 10.3216 +                      (op &::bool => bool => bool)
 10.3217 +                       ((op <::real => real => bool) (0::real) d)
 10.3218 +                       ((All::(real => bool) => bool)
 10.3219 +                         (%y::real.
 10.3220 +                             (op -->::bool => bool => bool)
 10.3221 +                              ((op <::real => real => bool)
 10.3222 +                                ((abs::real => real)
 10.3223 +                                  ((op -::real => real => real) x y))
 10.3224 +                                d)
 10.3225 +                              ((op &::bool => bool => bool)
 10.3226 +                                ((op <=::real => real => bool) a y)
 10.3227 +                                ((op <=::real => real => bool) y b)))))))))"
 10.3228 +  by (import lim INTERVAL_LEMMA)
 10.3229 +
 10.3230 +lemma ROLLE: "(All::((real => real) => bool) => bool)
 10.3231 + (%f::real => real.
 10.3232 +     (All::(real => bool) => bool)
 10.3233 +      (%a::real.
 10.3234 +          (All::(real => bool) => bool)
 10.3235 +           (%b::real.
 10.3236 +               (op -->::bool => bool => bool)
 10.3237 +                ((op &::bool => bool => bool)
 10.3238 +                  ((op <::real => real => bool) a b)
 10.3239 +                  ((op &::bool => bool => bool)
 10.3240 +                    ((op =::real => real => bool) (f a) (f b))
 10.3241 +                    ((op &::bool => bool => bool)
 10.3242 +                      ((All::(real => bool) => bool)
 10.3243 +                        (%x::real.
 10.3244 +                            (op -->::bool => bool => bool)
 10.3245 +                             ((op &::bool => bool => bool)
 10.3246 +                               ((op <=::real => real => bool) a x)
 10.3247 +                               ((op <=::real => real => bool) x b))
 10.3248 +                             ((contl::(real => real) => real => bool) f x)))
 10.3249 +                      ((All::(real => bool) => bool)
 10.3250 +                        (%x::real.
 10.3251 +                            (op -->::bool => bool => bool)
 10.3252 +                             ((op &::bool => bool => bool)
 10.3253 +                               ((op <::real => real => bool) a x)
 10.3254 +                               ((op <::real => real => bool) x b))
 10.3255 +                             ((differentiable::(real => real)
 10.3256 +         => real => bool)
 10.3257 +                               f x))))))
 10.3258 +                ((Ex::(real => bool) => bool)
 10.3259 +                  (%z::real.
 10.3260 +                      (op &::bool => bool => bool)
 10.3261 +                       ((op <::real => real => bool) a z)
 10.3262 +                       ((op &::bool => bool => bool)
 10.3263 +                         ((op <::real => real => bool) z b)
 10.3264 +                         ((diffl::(real => real) => real => real => bool) f
 10.3265 +                           (0::real) z)))))))"
 10.3266 +  by (import lim ROLLE)
 10.3267 +
 10.3268 +lemma MVT_LEMMA: "ALL (f::real => real) (a::real) b::real.
 10.3269 +   f a - (f b - f a) / (b - a) * a = f b - (f b - f a) / (b - a) * b"
 10.3270 +  by (import lim MVT_LEMMA)
 10.3271 +
 10.3272 +lemma MVT: "(All::((real => real) => bool) => bool)
 10.3273 + (%f::real => real.
 10.3274 +     (All::(real => bool) => bool)
 10.3275 +      (%a::real.
 10.3276 +          (All::(real => bool) => bool)
 10.3277 +           (%b::real.
 10.3278 +               (op -->::bool => bool => bool)
 10.3279 +                ((op &::bool => bool => bool)
 10.3280 +                  ((op <::real => real => bool) a b)
 10.3281 +                  ((op &::bool => bool => bool)
 10.3282 +                    ((All::(real => bool) => bool)
 10.3283 +                      (%x::real.
 10.3284 +                          (op -->::bool => bool => bool)
 10.3285 +                           ((op &::bool => bool => bool)
 10.3286 +                             ((op <=::real => real => bool) a x)
 10.3287 +                             ((op <=::real => real => bool) x b))
 10.3288 +                           ((contl::(real => real) => real => bool) f x)))
 10.3289 +                    ((All::(real => bool) => bool)
 10.3290 +                      (%x::real.
 10.3291 +                          (op -->::bool => bool => bool)
 10.3292 +                           ((op &::bool => bool => bool)
 10.3293 +                             ((op <::real => real => bool) a x)
 10.3294 +                             ((op <::real => real => bool) x b))
 10.3295 +                           ((differentiable::(real => real) => real => bool)
 10.3296 +                             f x)))))
 10.3297 +                ((Ex::(real => bool) => bool)
 10.3298 +                  (%l::real.
 10.3299 +                      (Ex::(real => bool) => bool)
 10.3300 +                       (%z::real.
 10.3301 +                           (op &::bool => bool => bool)
 10.3302 +                            ((op <::real => real => bool) a z)
 10.3303 +                            ((op &::bool => bool => bool)
 10.3304 +                              ((op <::real => real => bool) z b)
 10.3305 +                              ((op &::bool => bool => bool)
 10.3306 +                                ((diffl::(real => real)
 10.3307 +   => real => real => bool)
 10.3308 +                                  f l z)
 10.3309 +                                ((op =::real => real => bool)
 10.3310 +                                  ((op -::real => real => real) (f b) (f a))
 10.3311 +                                  ((op *::real => real => real)
 10.3312 +                                    ((op -::real => real => real) b a)
 10.3313 +                                    l))))))))))"
 10.3314 +  by (import lim MVT)
 10.3315 +
 10.3316 +lemma DIFF_ISCONST_END: "(All::((real => real) => bool) => bool)
 10.3317 + (%f::real => real.
 10.3318 +     (All::(real => bool) => bool)
 10.3319 +      (%a::real.
 10.3320 +          (All::(real => bool) => bool)
 10.3321 +           (%b::real.
 10.3322 +               (op -->::bool => bool => bool)
 10.3323 +                ((op &::bool => bool => bool)
 10.3324 +                  ((op <::real => real => bool) a b)
 10.3325 +                  ((op &::bool => bool => bool)
 10.3326 +                    ((All::(real => bool) => bool)
 10.3327 +                      (%x::real.
 10.3328 +                          (op -->::bool => bool => bool)
 10.3329 +                           ((op &::bool => bool => bool)
 10.3330 +                             ((op <=::real => real => bool) a x)
 10.3331 +                             ((op <=::real => real => bool) x b))
 10.3332 +                           ((contl::(real => real) => real => bool) f x)))
 10.3333 +                    ((All::(real => bool) => bool)
 10.3334 +                      (%x::real.
 10.3335 +                          (op -->::bool => bool => bool)
 10.3336 +                           ((op &::bool => bool => bool)
 10.3337 +                             ((op <::real => real => bool) a x)
 10.3338 +                             ((op <::real => real => bool) x b))
 10.3339 +                           ((diffl::(real => real) => real => real => bool)
 10.3340 +                             f (0::real) x)))))
 10.3341 +                ((op =::real => real => bool) (f b) (f a)))))"
 10.3342 +  by (import lim DIFF_ISCONST_END)
 10.3343 +
 10.3344 +lemma DIFF_ISCONST: "(All::((real => real) => bool) => bool)
 10.3345 + (%f::real => real.
 10.3346 +     (All::(real => bool) => bool)
 10.3347 +      (%a::real.
 10.3348 +          (All::(real => bool) => bool)
 10.3349 +           (%b::real.
 10.3350 +               (op -->::bool => bool => bool)
 10.3351 +                ((op &::bool => bool => bool)
 10.3352 +                  ((op <::real => real => bool) a b)
 10.3353 +                  ((op &::bool => bool => bool)
 10.3354 +                    ((All::(real => bool) => bool)
 10.3355 +                      (%x::real.
 10.3356 +                          (op -->::bool => bool => bool)
 10.3357 +                           ((op &::bool => bool => bool)
 10.3358 +                             ((op <=::real => real => bool) a x)
 10.3359 +                             ((op <=::real => real => bool) x b))
 10.3360 +                           ((contl::(real => real) => real => bool) f x)))
 10.3361 +                    ((All::(real => bool) => bool)
 10.3362 +                      (%x::real.
 10.3363 +                          (op -->::bool => bool => bool)
 10.3364 +                           ((op &::bool => bool => bool)
 10.3365 +                             ((op <::real => real => bool) a x)
 10.3366 +                             ((op <::real => real => bool) x b))
 10.3367 +                           ((diffl::(real => real) => real => real => bool)
 10.3368 +                             f (0::real) x)))))
 10.3369 +                ((All::(real => bool) => bool)
 10.3370 +                  (%x::real.
 10.3371 +                      (op -->::bool => bool => bool)
 10.3372 +                       ((op &::bool => bool => bool)
 10.3373 +                         ((op <=::real => real => bool) a x)
 10.3374 +                         ((op <=::real => real => bool) x b))
 10.3375 +                       ((op =::real => real => bool) (f x) (f a)))))))"
 10.3376 +  by (import lim DIFF_ISCONST)
 10.3377 +
 10.3378 +lemma DIFF_ISCONST_ALL: "(All::((real => real) => bool) => bool)
 10.3379 + (%f::real => real.
 10.3380 +     (op -->::bool => bool => bool)
 10.3381 +      ((All::(real => bool) => bool)
 10.3382 +        ((diffl::(real => real) => real => real => bool) f (0::real)))
 10.3383 +      ((All::(real => bool) => bool)
 10.3384 +        (%x::real.
 10.3385 +            (All::(real => bool) => bool)
 10.3386 +             (%y::real. (op =::real => real => bool) (f x) (f y)))))"
 10.3387 +  by (import lim DIFF_ISCONST_ALL)
 10.3388 +
 10.3389 +lemma INTERVAL_ABS: "ALL (x::real) (z::real) d::real.
 10.3390 +   (x - d <= z & z <= x + d) = (abs (z - x) <= d)"
 10.3391 +  by (import lim INTERVAL_ABS)
 10.3392 +
 10.3393 +lemma CONT_INJ_LEMMA: "(All::((real => real) => bool) => bool)
 10.3394 + (%f::real => real.
 10.3395 +     (All::((real => real) => bool) => bool)
 10.3396 +      (%g::real => real.
 10.3397 +          (All::(real => bool) => bool)
 10.3398 +           (%x::real.
 10.3399 +               (All::(real => bool) => bool)
 10.3400 +                (%d::real.
 10.3401 +                    (op -->::bool => bool => bool)
 10.3402 +                     ((op &::bool => bool => bool)
 10.3403 +                       ((op <::real => real => bool) (0::real) d)
 10.3404 +                       ((op &::bool => bool => bool)
 10.3405 +                         ((All::(real => bool) => bool)
 10.3406 +                           (%z::real.
 10.3407 +                               (op -->::bool => bool => bool)
 10.3408 +                                ((op <=::real => real => bool)
 10.3409 +                                  ((abs::real => real)
 10.3410 +                                    ((op -::real => real => real) z x))
 10.3411 +                                  d)
 10.3412 +                                ((op =::real => real => bool) (g (f z)) z)))
 10.3413 +                         ((All::(real => bool) => bool)
 10.3414 +                           (%z::real.
 10.3415 +                               (op -->::bool => bool => bool)
 10.3416 +                                ((op <=::real => real => bool)
 10.3417 +                                  ((abs::real => real)
 10.3418 +                                    ((op -::real => real => real) z x))
 10.3419 +                                  d)
 10.3420 +                                ((contl::(real => real) => real => bool) f
 10.3421 +                                  z)))))
 10.3422 +                     ((Not::bool => bool)
 10.3423 +                       ((All::(real => bool) => bool)
 10.3424 +                         (%z::real.
 10.3425 +                             (op -->::bool => bool => bool)
 10.3426 +                              ((op <=::real => real => bool)
 10.3427 +                                ((abs::real => real)
 10.3428 +                                  ((op -::real => real => real) z x))
 10.3429 +                                d)
 10.3430 +                              ((op <=::real => real => bool) (f z)
 10.3431 +                                (f x)))))))))"
 10.3432 +  by (import lim CONT_INJ_LEMMA)
 10.3433 +
 10.3434 +lemma CONT_INJ_LEMMA2: "(All::((real => real) => bool) => bool)
 10.3435 + (%f::real => real.
 10.3436 +     (All::((real => real) => bool) => bool)
 10.3437 +      (%g::real => real.
 10.3438 +          (All::(real => bool) => bool)
 10.3439 +           (%x::real.
 10.3440 +               (All::(real => bool) => bool)
 10.3441 +                (%d::real.
 10.3442 +                    (op -->::bool => bool => bool)
 10.3443 +                     ((op &::bool => bool => bool)
 10.3444 +                       ((op <::real => real => bool) (0::real) d)
 10.3445 +                       ((op &::bool => bool => bool)
 10.3446 +                         ((All::(real => bool) => bool)
 10.3447 +                           (%z::real.
 10.3448 +                               (op -->::bool => bool => bool)
 10.3449 +                                ((op <=::real => real => bool)
 10.3450 +                                  ((abs::real => real)
 10.3451 +                                    ((op -::real => real => real) z x))
 10.3452 +                                  d)
 10.3453 +                                ((op =::real => real => bool) (g (f z)) z)))
 10.3454 +                         ((All::(real => bool) => bool)
 10.3455 +                           (%z::real.
 10.3456 +                               (op -->::bool => bool => bool)
 10.3457 +                                ((op <=::real => real => bool)
 10.3458 +                                  ((abs::real => real)
 10.3459 +                                    ((op -::real => real => real) z x))
 10.3460 +                                  d)
 10.3461 +                                ((contl::(real => real) => real => bool) f
 10.3462 +                                  z)))))
 10.3463 +                     ((Not::bool => bool)
 10.3464 +                       ((All::(real => bool) => bool)
 10.3465 +                         (%z::real.
 10.3466 +                             (op -->::bool => bool => bool)
 10.3467 +                              ((op <=::real => real => bool)
 10.3468 +                                ((abs::real => real)
 10.3469 +                                  ((op -::real => real => real) z x))
 10.3470 +                                d)
 10.3471 +                              ((op <=::real => real => bool) (f x)
 10.3472 +                                (f z)))))))))"
 10.3473 +  by (import lim CONT_INJ_LEMMA2)
 10.3474 +
 10.3475 +lemma CONT_INJ_RANGE: "(All::((real => real) => bool) => bool)
 10.3476 + (%f::real => real.
 10.3477 +     (All::((real => real) => bool) => bool)
 10.3478 +      (%g::real => real.
 10.3479 +          (All::(real => bool) => bool)
 10.3480 +           (%x::real.
 10.3481 +               (All::(real => bool) => bool)
 10.3482 +                (%d::real.
 10.3483 +                    (op -->::bool => bool => bool)
 10.3484 +                     ((op &::bool => bool => bool)
 10.3485 +                       ((op <::real => real => bool) (0::real) d)
 10.3486 +                       ((op &::bool => bool => bool)
 10.3487 +                         ((All::(real => bool) => bool)
 10.3488 +                           (%z::real.
 10.3489 +                               (op -->::bool => bool => bool)
 10.3490 +                                ((op <=::real => real => bool)
 10.3491 +                                  ((abs::real => real)
 10.3492 +                                    ((op -::real => real => real) z x))
 10.3493 +                                  d)
 10.3494 +                                ((op =::real => real => bool) (g (f z)) z)))
 10.3495 +                         ((All::(real => bool) => bool)
 10.3496 +                           (%z::real.
 10.3497 +                               (op -->::bool => bool => bool)
 10.3498 +                                ((op <=::real => real => bool)
 10.3499 +                                  ((abs::real => real)
 10.3500 +                                    ((op -::real => real => real) z x))
 10.3501 +                                  d)
 10.3502 +                                ((contl::(real => real) => real => bool) f
 10.3503 +                                  z)))))
 10.3504 +                     ((Ex::(real => bool) => bool)
 10.3505 +                       (%e::real.
 10.3506 +                           (op &::bool => bool => bool)
 10.3507 +                            ((op <::real => real => bool) (0::real) e)
 10.3508 +                            ((All::(real => bool) => bool)
 10.3509 +                              (%y::real.
 10.3510 +                                  (op -->::bool => bool => bool)
 10.3511 +                                   ((op <=::real => real => bool)
 10.3512 +                                     ((abs::real => real)
 10.3513 + ((op -::real => real => real) y (f x)))
 10.3514 +                                     e)
 10.3515 +                                   ((Ex::(real => bool) => bool)
 10.3516 +                                     (%z::real.
 10.3517 +   (op &::bool => bool => bool)
 10.3518 +    ((op <=::real => real => bool)
 10.3519 +      ((abs::real => real) ((op -::real => real => real) z x)) d)
 10.3520 +    ((op =::real => real => bool) (f z) y)))))))))))"
 10.3521 +  by (import lim CONT_INJ_RANGE)
 10.3522 +
 10.3523 +lemma CONT_INVERSE: "(All::((real => real) => bool) => bool)
 10.3524 + (%f::real => real.
 10.3525 +     (All::((real => real) => bool) => bool)
 10.3526 +      (%g::real => real.
 10.3527 +          (All::(real => bool) => bool)
 10.3528 +           (%x::real.
 10.3529 +               (All::(real => bool) => bool)
 10.3530 +                (%d::real.
 10.3531 +                    (op -->::bool => bool => bool)
 10.3532 +                     ((op &::bool => bool => bool)
 10.3533 +                       ((op <::real => real => bool) (0::real) d)
 10.3534 +                       ((op &::bool => bool => bool)
 10.3535 +                         ((All::(real => bool) => bool)
 10.3536 +                           (%z::real.
 10.3537 +                               (op -->::bool => bool => bool)
 10.3538 +                                ((op <=::real => real => bool)
 10.3539 +                                  ((abs::real => real)
 10.3540 +                                    ((op -::real => real => real) z x))
 10.3541 +                                  d)
 10.3542 +                                ((op =::real => real => bool) (g (f z)) z)))
 10.3543 +                         ((All::(real => bool) => bool)
 10.3544 +                           (%z::real.
 10.3545 +                               (op -->::bool => bool => bool)
 10.3546 +                                ((op <=::real => real => bool)
 10.3547 +                                  ((abs::real => real)
 10.3548 +                                    ((op -::real => real => real) z x))
 10.3549 +                                  d)
 10.3550 +                                ((contl::(real => real) => real => bool) f
 10.3551 +                                  z)))))
 10.3552 +                     ((contl::(real => real) => real => bool) g (f x))))))"
 10.3553 +  by (import lim CONT_INVERSE)
 10.3554 +
 10.3555 +lemma DIFF_INVERSE: "(All::((real => real) => bool) => bool)
 10.3556 + (%f::real => real.
 10.3557 +     (All::((real => real) => bool) => bool)
 10.3558 +      (%g::real => real.
 10.3559 +          (All::(real => bool) => bool)
 10.3560 +           (%l::real.
 10.3561 +               (All::(real => bool) => bool)
 10.3562 +                (%x::real.
 10.3563 +                    (All::(real => bool) => bool)
 10.3564 +                     (%d::real.
 10.3565 +                         (op -->::bool => bool => bool)
 10.3566 +                          ((op &::bool => bool => bool)
 10.3567 +                            ((op <::real => real => bool) (0::real) d)
 10.3568 +                            ((op &::bool => bool => bool)
 10.3569 +                              ((All::(real => bool) => bool)
 10.3570 +                                (%z::real.
 10.3571 +                                    (op -->::bool => bool => bool)
 10.3572 +                                     ((op <=::real => real => bool)
 10.3573 + ((abs::real => real) ((op -::real => real => real) z x)) d)
 10.3574 +                                     ((op =::real => real => bool) (g (f z))
 10.3575 + z)))
 10.3576 +                              ((op &::bool => bool => bool)
 10.3577 +                                ((All::(real => bool) => bool)
 10.3578 +                                  (%z::real.
 10.3579 +(op -->::bool => bool => bool)
 10.3580 + ((op <=::real => real => bool)
 10.3581 +   ((abs::real => real) ((op -::real => real => real) z x)) d)
 10.3582 + ((contl::(real => real) => real => bool) f z)))
 10.3583 +                                ((op &::bool => bool => bool)
 10.3584 +                                  ((diffl::(real => real)
 10.3585 +     => real => real => bool)
 10.3586 +                                    f l x)
 10.3587 +                                  ((Not::bool => bool)
 10.3588 +                                    ((op =::real => real => bool) l
 10.3589 +(0::real)))))))
 10.3590 +                          ((diffl::(real => real) => real => real => bool) g
 10.3591 +                            ((inverse::real => real) l) (f x)))))))"
 10.3592 +  by (import lim DIFF_INVERSE)
 10.3593 +
 10.3594 +lemma DIFF_INVERSE_LT: "(All::((real => real) => bool) => bool)
 10.3595 + (%f::real => real.
 10.3596 +     (All::((real => real) => bool) => bool)
 10.3597 +      (%g::real => real.
 10.3598 +          (All::(real => bool) => bool)
 10.3599 +           (%l::real.
 10.3600 +               (All::(real => bool) => bool)
 10.3601 +                (%x::real.
 10.3602 +                    (All::(real => bool) => bool)
 10.3603 +                     (%d::real.
 10.3604 +                         (op -->::bool => bool => bool)
 10.3605 +                          ((op &::bool => bool => bool)
 10.3606 +                            ((op <::real => real => bool) (0::real) d)
 10.3607 +                            ((op &::bool => bool => bool)
 10.3608 +                              ((All::(real => bool) => bool)
 10.3609 +                                (%z::real.
 10.3610 +                                    (op -->::bool => bool => bool)
 10.3611 +                                     ((op <::real => real => bool)
 10.3612 + ((abs::real => real) ((op -::real => real => real) z x)) d)
 10.3613 +                                     ((op =::real => real => bool) (g (f z))
 10.3614 + z)))
 10.3615 +                              ((op &::bool => bool => bool)
 10.3616 +                                ((All::(real => bool) => bool)
 10.3617 +                                  (%z::real.
 10.3618 +(op -->::bool => bool => bool)
 10.3619 + ((op <::real => real => bool)
 10.3620 +   ((abs::real => real) ((op -::real => real => real) z x)) d)
 10.3621 + ((contl::(real => real) => real => bool) f z)))
 10.3622 +                                ((op &::bool => bool => bool)
 10.3623 +                                  ((diffl::(real => real)
 10.3624 +     => real => real => bool)
 10.3625 +                                    f l x)
 10.3626 +                                  ((Not::bool => bool)
 10.3627 +                                    ((op =::real => real => bool) l
 10.3628 +(0::real)))))))
 10.3629 +                          ((diffl::(real => real) => real => real => bool) g
 10.3630 +                            ((inverse::real => real) l) (f x)))))))"
 10.3631 +  by (import lim DIFF_INVERSE_LT)
 10.3632 +
 10.3633 +lemma INTERVAL_CLEMMA: "(All::(real => bool) => bool)
 10.3634 + (%a::real.
 10.3635 +     (All::(real => bool) => bool)
 10.3636 +      (%b::real.
 10.3637 +          (All::(real => bool) => bool)
 10.3638 +           (%x::real.
 10.3639 +               (op -->::bool => bool => bool)
 10.3640 +                ((op &::bool => bool => bool)
 10.3641 +                  ((op <::real => real => bool) a x)
 10.3642 +                  ((op <::real => real => bool) x b))
 10.3643 +                ((Ex::(real => bool) => bool)
 10.3644 +                  (%d::real.
 10.3645 +                      (op &::bool => bool => bool)
 10.3646 +                       ((op <::real => real => bool) (0::real) d)
 10.3647 +                       ((All::(real => bool) => bool)
 10.3648 +                         (%y::real.
 10.3649 +                             (op -->::bool => bool => bool)
 10.3650 +                              ((op <=::real => real => bool)
 10.3651 +                                ((abs::real => real)
 10.3652 +                                  ((op -::real => real => real) y x))
 10.3653 +                                d)
 10.3654 +                              ((op &::bool => bool => bool)
 10.3655 +                                ((op <::real => real => bool) a y)
 10.3656 +                                ((op <::real => real => bool) y b)))))))))"
 10.3657 +  by (import lim INTERVAL_CLEMMA)
 10.3658 +
 10.3659 +lemma DIFF_INVERSE_OPEN: "(All::((real => real) => bool) => bool)
 10.3660 + (%f::real => real.
 10.3661 +     (All::((real => real) => bool) => bool)
 10.3662 +      (%g::real => real.
 10.3663 +          (All::(real => bool) => bool)
 10.3664 +           (%l::real.
 10.3665 +               (All::(real => bool) => bool)
 10.3666 +                (%a::real.
 10.3667 +                    (All::(real => bool) => bool)
 10.3668 +                     (%x::real.
 10.3669 +                         (All::(real => bool) => bool)
 10.3670 +                          (%b::real.
 10.3671 +                              (op -->::bool => bool => bool)
 10.3672 +                               ((op &::bool => bool => bool)
 10.3673 +                                 ((op <::real => real => bool) a x)
 10.3674 +                                 ((op &::bool => bool => bool)
 10.3675 +                                   ((op <::real => real => bool) x b)
 10.3676 +                                   ((op &::bool => bool => bool)
 10.3677 +                                     ((All::(real => bool) => bool)
 10.3678 + (%z::real.
 10.3679 +     (op -->::bool => bool => bool)
 10.3680 +      ((op &::bool => bool => bool) ((op <::real => real => bool) a z)
 10.3681 +        ((op <::real => real => bool) z b))
 10.3682 +      ((op &::bool => bool => bool)
 10.3683 +        ((op =::real => real => bool) (g (f z)) z)
 10.3684 +        ((contl::(real => real) => real => bool) f z))))
 10.3685 +                                     ((op &::bool => bool => bool)
 10.3686 + ((diffl::(real => real) => real => real => bool) f l x)
 10.3687 + ((Not::bool => bool) ((op =::real => real => bool) l (0::real)))))))
 10.3688 +                               ((diffl::(real => real)
 10.3689 +  => real => real => bool)
 10.3690 +                                 g ((inverse::real => real) l) (f x))))))))"
 10.3691 +  by (import lim DIFF_INVERSE_OPEN)
 10.3692 +
 10.3693 +;end_setup
 10.3694 +
 10.3695 +;setup_theory powser
 10.3696 +
 10.3697 +lemma POWDIFF_LEMMA: "ALL n x y.
 10.3698 +   real.sum (0, Suc n) (%p. x ^ p * y ^ (Suc n - p)) =
 10.3699 +   y * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
 10.3700 +  by (import powser POWDIFF_LEMMA)
 10.3701 +
 10.3702 +lemma POWDIFF: "ALL n x y.
 10.3703 +   x ^ Suc n - y ^ Suc n =
 10.3704 +   (x - y) * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
 10.3705 +  by (import powser POWDIFF)
 10.3706 +
 10.3707 +lemma POWREV: "ALL n x y.
 10.3708 +   real.sum (0, Suc n) (%xa. x ^ xa * y ^ (n - xa)) =
 10.3709 +   real.sum (0, Suc n) (%xa. x ^ (n - xa) * y ^ xa)"
 10.3710 +  by (import powser POWREV)
 10.3711 +
 10.3712 +lemma POWSER_INSIDEA: "(All::((nat => real) => bool) => bool)
 10.3713 + (%f::nat => real.
 10.3714 +     (All::(real => bool) => bool)
 10.3715 +      (%x::real.
 10.3716 +          (All::(real => bool) => bool)
 10.3717 +           (%z::real.
 10.3718 +               (op -->::bool => bool => bool)
 10.3719 +                ((op &::bool => bool => bool)
 10.3720 +                  ((summable::(nat => real) => bool)
 10.3721 +                    (%n::nat.
 10.3722 +                        (op *::real => real => real) (f n)
 10.3723 +                         ((op ^::real => nat => real) x n)))
 10.3724 +                  ((op <::real => real => bool) ((abs::real => real) z)
 10.3725 +                    ((abs::real => real) x)))
 10.3726 +                ((summable::(nat => real) => bool)
 10.3727 +                  (%n::nat.
 10.3728 +                      (op *::real => real => real)
 10.3729 +                       ((abs::real => real) (f n))
 10.3730 +                       ((op ^::real => nat => real) z n))))))"
 10.3731 +  by (import powser POWSER_INSIDEA)
 10.3732 +
 10.3733 +lemma POWSER_INSIDE: "(All::((nat => real) => bool) => bool)
 10.3734 + (%f::nat => real.
 10.3735 +     (All::(real => bool) => bool)
 10.3736 +      (%x::real.
 10.3737 +          (All::(real => bool) => bool)
 10.3738 +           (%z::real.
 10.3739 +               (op -->::bool => bool => bool)
 10.3740 +                ((op &::bool => bool => bool)
 10.3741 +                  ((summable::(nat => real) => bool)
 10.3742 +                    (%n::nat.
 10.3743 +                        (op *::real => real => real) (f n)
 10.3744 +                         ((op ^::real => nat => real) x n)))
 10.3745 +                  ((op <::real => real => bool) ((abs::real => real) z)
 10.3746 +                    ((abs::real => real) x)))
 10.3747 +                ((summable::(nat => real) => bool)
 10.3748 +                  (%n::nat.
 10.3749 +                      (op *::real => real => real) (f n)
 10.3750 +                       ((op ^::real => nat => real) z n))))))"
 10.3751 +  by (import powser POWSER_INSIDE)
 10.3752 +
 10.3753 +constdefs
 10.3754 +  diffs :: "(nat => real) => nat => real" 
 10.3755 +  "diffs == %c n. real (Suc n) * c (Suc n)"
 10.3756 +
 10.3757 +lemma diffs: "ALL c. diffs c = (%n. real (Suc n) * c (Suc n))"
 10.3758 +  by (import powser diffs)
 10.3759 +
 10.3760 +lemma DIFFS_NEG: "ALL c. diffs (%n. - c n) = (%x. - diffs c x)"
 10.3761 +  by (import powser DIFFS_NEG)
 10.3762 +
 10.3763 +lemma DIFFS_LEMMA: "ALL n c x.
 10.3764 +   real.sum (0, n) (%n. diffs c n * x ^ n) =
 10.3765 +   real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) +
 10.3766 +   real n * (c n * x ^ (n - 1))"
 10.3767 +  by (import powser DIFFS_LEMMA)
 10.3768 +
 10.3769 +lemma DIFFS_LEMMA2: "ALL n c x.
 10.3770 +   real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) =
 10.3771 +   real.sum (0, n) (%n. diffs c n * x ^ n) - real n * (c n * x ^ (n - 1))"
 10.3772 +  by (import powser DIFFS_LEMMA2)
 10.3773 +
 10.3774 +lemma DIFFS_EQUIV: "(All::((nat => real) => bool) => bool)
 10.3775 + (%c::nat => real.
 10.3776 +     (All::(real => bool) => bool)
 10.3777 +      (%x::real.
 10.3778 +          (op -->::bool => bool => bool)
 10.3779 +           ((summable::(nat => real) => bool)
 10.3780 +             (%n::nat.
 10.3781 +                 (op *::real => real => real)
 10.3782 +                  ((diffs::(nat => real) => nat => real) c n)
 10.3783 +                  ((op ^::real => nat => real) x n)))
 10.3784 +           ((sums::(nat => real) => real => bool)
 10.3785 +             (%n::nat.
 10.3786 +                 (op *::real => real => real) ((real::nat => real) n)
 10.3787 +                  ((op *::real => real => real) (c n)
 10.3788 +                    ((op ^::real => nat => real) x
 10.3789 +                      ((op -::nat => nat => nat) n (1::nat)))))
 10.3790 +             ((suminf::(nat => real) => real)
 10.3791 +               (%n::nat.
 10.3792 +                   (op *::real => real => real)
 10.3793 +                    ((diffs::(nat => real) => nat => real) c n)
 10.3794 +                    ((op ^::real => nat => real) x n))))))"
 10.3795 +  by (import powser DIFFS_EQUIV)
 10.3796 +
 10.3797 +lemma TERMDIFF_LEMMA1: "ALL m z h.
 10.3798 +   real.sum (0, m) (%p. (z + h) ^ (m - p) * z ^ p - z ^ m) =
 10.3799 +   real.sum (0, m) (%p. z ^ p * ((z + h) ^ (m - p) - z ^ (m - p)))"
 10.3800 +  by (import powser TERMDIFF_LEMMA1)
 10.3801 +
 10.3802 +lemma TERMDIFF_LEMMA2: "(All::(real => bool) => bool)
 10.3803 + (%z::real.
 10.3804 +     (All::(real => bool) => bool)
 10.3805 +      (%h::real.
 10.3806 +          (All::(nat => bool) => bool)
 10.3807 +           (%n::nat.
 10.3808 +               (op -->::bool => bool => bool)
 10.3809 +                ((Not::bool => bool)
 10.3810 +                  ((op =::real => real => bool) h (0::real)))
 10.3811 +                ((op =::real => real => bool)
 10.3812 +                  ((op -::real => real => real)
 10.3813 +                    ((op /::real => real => real)
 10.3814 +                      ((op -::real => real => real)
 10.3815 +                        ((op ^::real => nat => real)
 10.3816 +                          ((op +::real => real => real) z h) n)
 10.3817 +                        ((op ^::real => nat => real) z n))
 10.3818 +                      h)
 10.3819 +                    ((op *::real => real => real) ((real::nat => real) n)
 10.3820 +                      ((op ^::real => nat => real) z
 10.3821 +                        ((op -::nat => nat => nat) n (1::nat)))))
 10.3822 +                  ((op *::real => real => real) h
 10.3823 +                    ((real.sum::nat * nat => (nat => real) => real)
 10.3824 +                      ((Pair::nat => nat => nat * nat) (0::nat)
 10.3825 +                        ((op -::nat => nat => nat) n (1::nat)))
 10.3826 +                      (%p::nat.
 10.3827 +                          (op *::real => real => real)
 10.3828 +                           ((op ^::real => nat => real) z p)
 10.3829 +                           ((real.sum::nat * nat => (nat => real) => real)
 10.3830 +                             ((Pair::nat => nat => nat * nat) (0::nat)
 10.3831 +                               ((op -::nat => nat => nat)
 10.3832 +                                 ((op -::nat => nat => nat) n (1::nat)) p))
 10.3833 +                             (%q::nat.
 10.3834 +                                 (op *::real => real => real)
 10.3835 +                                  ((op ^::real => nat => real)
 10.3836 +                                    ((op +::real => real => real) z h) q)
 10.3837 +                                  ((op ^::real => nat => real) z
 10.3838 +                                    ((op -::nat => nat => nat)
 10.3839 +((op -::nat => nat => nat)
 10.3840 +  ((op -::nat => nat => nat) n
 10.3841 +    ((number_of::bin => nat)
 10.3842 +      ((op BIT::bin => bool => bin)
 10.3843 +        ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.3844 +        (False::bool))))
 10.3845 +  p)
 10.3846 +q)))))))))))"
 10.3847 +  by (import powser TERMDIFF_LEMMA2)
 10.3848 +
 10.3849 +lemma TERMDIFF_LEMMA3: "(All::(real => bool) => bool)
 10.3850 + (%z::real.
 10.3851 +     (All::(real => bool) => bool)
 10.3852 +      (%h::real.
 10.3853 +          (All::(nat => bool) => bool)
 10.3854 +           (%n::nat.
 10.3855 +               (All::(real => bool) => bool)
 10.3856 +                (%k'::real.
 10.3857 +                    (op -->::bool => bool => bool)
 10.3858 +                     ((op &::bool => bool => bool)
 10.3859 +                       ((Not::bool => bool)
 10.3860 +                         ((op =::real => real => bool) h (0::real)))
 10.3861 +                       ((op &::bool => bool => bool)
 10.3862 +                         ((op <=::real => real => bool)
 10.3863 +                           ((abs::real => real) z) k')
 10.3864 +                         ((op <=::real => real => bool)
 10.3865 +                           ((abs::real => real)
 10.3866 +                             ((op +::real => real => real) z h))
 10.3867 +                           k')))
 10.3868 +                     ((op <=::real => real => bool)
 10.3869 +                       ((abs::real => real)
 10.3870 +                         ((op -::real => real => real)
 10.3871 +                           ((op /::real => real => real)
 10.3872 +                             ((op -::real => real => real)
 10.3873 +                               ((op ^::real => nat => real)
 10.3874 +                                 ((op +::real => real => real) z h) n)
 10.3875 +                               ((op ^::real => nat => real) z n))
 10.3876 +                             h)
 10.3877 +                           ((op *::real => real => real)
 10.3878 +                             ((real::nat => real) n)
 10.3879 +                             ((op ^::real => nat => real) z
 10.3880 +                               ((op -::nat => nat => nat) n (1::nat))))))
 10.3881 +                       ((op *::real => real => real) ((real::nat => real) n)
 10.3882 +                         ((op *::real => real => real)
 10.3883 +                           ((real::nat => real)
 10.3884 +                             ((op -::nat => nat => nat) n (1::nat)))
 10.3885 +                           ((op *::real => real => real)
 10.3886 +                             ((op ^::real => nat => real) k'
 10.3887 +                               ((op -::nat => nat => nat) n
 10.3888 +                                 ((number_of::bin => nat)
 10.3889 +                                   ((op BIT::bin => bool => bin)
 10.3890 +                                     ((op BIT::bin => bool => bin)
 10.3891 + (bin.Pls::bin) (True::bool))
 10.3892 +                                     (False::bool)))))
 10.3893 +                             ((abs::real => real) h)))))))))"
 10.3894 +  by (import powser TERMDIFF_LEMMA3)
 10.3895 +
 10.3896 +lemma TERMDIFF_LEMMA4: "(All::((real => real) => bool) => bool)
 10.3897 + (%f::real => real.
 10.3898 +     (All::(real => bool) => bool)
 10.3899 +      (%k'::real.
 10.3900 +          (All::(real => bool) => bool)
 10.3901 +           (%k::real.
 10.3902 +               (op -->::bool => bool => bool)
 10.3903 +                ((op &::bool => bool => bool)
 10.3904 +                  ((op <::real => real => bool) (0::real) k)
 10.3905 +                  ((All::(real => bool) => bool)
 10.3906 +                    (%h::real.
 10.3907 +                        (op -->::bool => bool => bool)
 10.3908 +                         ((op &::bool => bool => bool)
 10.3909 +                           ((op <::real => real => bool) (0::real)
 10.3910 +                             ((abs::real => real) h))
 10.3911 +                           ((op <::real => real => bool)
 10.3912 +                             ((abs::real => real) h) k))
 10.3913 +                         ((op <=::real => real => bool)
 10.3914 +                           ((abs::real => real) (f h))
 10.3915 +                           ((op *::real => real => real) k'
 10.3916 +                             ((abs::real => real) h))))))
 10.3917 +                ((tends_real_real::(real => real) => real => real => bool) f
 10.3918 +                  (0::real) (0::real)))))"
 10.3919 +  by (import powser TERMDIFF_LEMMA4)
 10.3920 +
 10.3921 +lemma TERMDIFF_LEMMA5: "(All::((nat => real) => bool) => bool)
 10.3922 + (%f::nat => real.
 10.3923 +     (All::((real => nat => real) => bool) => bool)
 10.3924 +      (%g::real => nat => real.
 10.3925 +          (All::(real => bool) => bool)
 10.3926 +           (%k::real.
 10.3927 +               (op -->::bool => bool => bool)
 10.3928 +                ((op &::bool => bool => bool)
 10.3929 +                  ((op <::real => real => bool) (0::real) k)
 10.3930 +                  ((op &::bool => bool => bool)
 10.3931 +                    ((summable::(nat => real) => bool) f)
 10.3932 +                    ((All::(real => bool) => bool)
 10.3933 +                      (%h::real.
 10.3934 +                          (op -->::bool => bool => bool)
 10.3935 +                           ((op &::bool => bool => bool)
 10.3936 +                             ((op <::real => real => bool) (0::real)
 10.3937 +                               ((abs::real => real) h))
 10.3938 +                             ((op <::real => real => bool)
 10.3939 +                               ((abs::real => real) h) k))
 10.3940 +                           ((All::(nat => bool) => bool)
 10.3941 +                             (%n::nat.
 10.3942 +                                 (op <=::real => real => bool)
 10.3943 +                                  ((abs::real => real) (g h n))
 10.3944 +                                  ((op *::real => real => real) (f n)
 10.3945 +                                    ((abs::real => real) h))))))))
 10.3946 +                ((tends_real_real::(real => real) => real => real => bool)
 10.3947 +                  (%h::real. (suminf::(nat => real) => real) (g h))
 10.3948 +                  (0::real) (0::real)))))"
 10.3949 +  by (import powser TERMDIFF_LEMMA5)
 10.3950 +
 10.3951 +lemma TERMDIFF: "(All::((nat => real) => bool) => bool)
 10.3952 + (%c::nat => real.
 10.3953 +     (All::(real => bool) => bool)
 10.3954 +      (%k'::real.
 10.3955 +          (All::(real => bool) => bool)
 10.3956 +           (%x::real.
 10.3957 +               (op -->::bool => bool => bool)
 10.3958 +                ((op &::bool => bool => bool)
 10.3959 +                  ((summable::(nat => real) => bool)
 10.3960 +                    (%n::nat.
 10.3961 +                        (op *::real => real => real) (c n)
 10.3962 +                         ((op ^::real => nat => real) k' n)))
 10.3963 +                  ((op &::bool => bool => bool)
 10.3964 +                    ((summable::(nat => real) => bool)
 10.3965 +                      (%n::nat.
 10.3966 +                          (op *::real => real => real)
 10.3967 +                           ((diffs::(nat => real) => nat => real) c n)
 10.3968 +                           ((op ^::real => nat => real) k' n)))
 10.3969 +                    ((op &::bool => bool => bool)
 10.3970 +                      ((summable::(nat => real) => bool)
 10.3971 +                        (%n::nat.
 10.3972 +                            (op *::real => real => real)
 10.3973 +                             ((diffs::(nat => real) => nat => real)
 10.3974 +                               ((diffs::(nat => real) => nat => real) c) n)
 10.3975 +                             ((op ^::real => nat => real) k' n)))
 10.3976 +                      ((op <::real => real => bool) ((abs::real => real) x)
 10.3977 +                        ((abs::real => real) k')))))
 10.3978 +                ((diffl::(real => real) => real => real => bool)
 10.3979 +                  (%x::real.
 10.3980 +                      (suminf::(nat => real) => real)
 10.3981 +                       (%n::nat.
 10.3982 +                           (op *::real => real => real) (c n)
 10.3983 +                            ((op ^::real => nat => real) x n)))
 10.3984 +                  ((suminf::(nat => real) => real)
 10.3985 +                    (%n::nat.
 10.3986 +                        (op *::real => real => real)
 10.3987 +                         ((diffs::(nat => real) => nat => real) c n)
 10.3988 +                         ((op ^::real => nat => real) x n)))
 10.3989 +                  x))))"
 10.3990 +  by (import powser TERMDIFF)
 10.3991 +
 10.3992 +;end_setup
 10.3993 +
 10.3994 +;setup_theory transc
 10.3995 +
 10.3996 +constdefs
 10.3997 +  exp :: "real => real" 
 10.3998 +  "exp == %x. suminf (%n. inverse (real (FACT n)) * x ^ n)"
 10.3999 +
 10.4000 +lemma exp: "ALL x. exp x = suminf (%n. inverse (real (FACT n)) * x ^ n)"
 10.4001 +  by (import transc exp)
 10.4002 +
 10.4003 +constdefs
 10.4004 +  cos :: "real => real" 
 10.4005 +  "cos ==
 10.4006 +%x. suminf
 10.4007 +     (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
 10.4008 +
 10.4009 +lemma cos: "ALL x.
 10.4010 +   cos x =
 10.4011 +   suminf
 10.4012 +    (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
 10.4013 +  by (import transc cos)
 10.4014 +
 10.4015 +constdefs
 10.4016 +  sin :: "real => real" 
 10.4017 +  "sin ==
 10.4018 +%x. suminf
 10.4019 +     (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
 10.4020 +          x ^ n)"
 10.4021 +
 10.4022 +lemma sin: "ALL x.
 10.4023 +   sin x =
 10.4024 +   suminf
 10.4025 +    (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
 10.4026 +         x ^ n)"
 10.4027 +  by (import transc sin)
 10.4028 +
 10.4029 +lemma EXP_CONVERGES: "ALL x. sums (%n. inverse (real (FACT n)) * x ^ n) (exp x)"
 10.4030 +  by (import transc EXP_CONVERGES)
 10.4031 +
 10.4032 +lemma SIN_CONVERGES: "ALL x.
 10.4033 +   sums
 10.4034 +    (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
 10.4035 +         x ^ n)
 10.4036 +    (sin x)"
 10.4037 +  by (import transc SIN_CONVERGES)
 10.4038 +
 10.4039 +lemma COS_CONVERGES: "ALL x.
 10.4040 +   sums
 10.4041 +    (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)
 10.4042 +    (cos x)"
 10.4043 +  by (import transc COS_CONVERGES)
 10.4044 +
 10.4045 +lemma EXP_FDIFF: "diffs (%n. inverse (real (FACT n))) = (%n. inverse (real (FACT n)))"
 10.4046 +  by (import transc EXP_FDIFF)
 10.4047 +
 10.4048 +lemma SIN_FDIFF: "diffs (%n. if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) =
 10.4049 +(%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0)"
 10.4050 +  by (import transc SIN_FDIFF)
 10.4051 +
 10.4052 +lemma COS_FDIFF: "diffs (%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) =
 10.4053 +(%n. - (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)))"
 10.4054 +  by (import transc COS_FDIFF)
 10.4055 +
 10.4056 +lemma SIN_NEGLEMMA: "ALL x.
 10.4057 +   - sin x =
 10.4058 +   suminf
 10.4059 +    (%n. - ((if EVEN n then 0
 10.4060 +             else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
 10.4061 +            x ^ n))"
 10.4062 +  by (import transc SIN_NEGLEMMA)
 10.4063 +
 10.4064 +lemma DIFF_EXP: "ALL x. diffl exp (exp x) x"
 10.4065 +  by (import transc DIFF_EXP)
 10.4066 +
 10.4067 +lemma DIFF_SIN: "ALL x. diffl sin (cos x) x"
 10.4068 +  by (import transc DIFF_SIN)
 10.4069 +
 10.4070 +lemma DIFF_COS: "ALL x. diffl cos (- sin x) x"
 10.4071 +  by (import transc DIFF_COS)
 10.4072 +
 10.4073 +lemma DIFF_COMPOSITE: "(op &::bool => bool => bool)
 10.4074 + ((op -->::bool => bool => bool)
 10.4075 +   ((op &::bool => bool => bool)
 10.4076 +     ((diffl::(real => real) => real => real => bool) (f::real => real)
 10.4077 +       (l::real) (x::real))
 10.4078 +     ((Not::bool => bool) ((op =::real => real => bool) (f x) (0::real))))
 10.4079 +   ((diffl::(real => real) => real => real => bool)
 10.4080 +     (%x::real. (inverse::real => real) (f x))
 10.4081 +     ((uminus::real => real)
 10.4082 +       ((op /::real => real => real) l
 10.4083 +         ((op ^::real => nat => real) (f x)
 10.4084 +           ((number_of::bin => nat)
 10.4085 +             ((op BIT::bin => bool => bin)
 10.4086 +               ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4087 +               (False::bool))))))
 10.4088 +     x))
 10.4089 + ((op &::bool => bool => bool)
 10.4090 +   ((op -->::bool => bool => bool)
 10.4091 +     ((op &::bool => bool => bool)
 10.4092 +       ((diffl::(real => real) => real => real => bool) f l x)
 10.4093 +       ((op &::bool => bool => bool)
 10.4094 +         ((diffl::(real => real) => real => real => bool) (g::real => real)
 10.4095 +           (m::real) x)
 10.4096 +         ((Not::bool => bool)
 10.4097 +           ((op =::real => real => bool) (g x) (0::real)))))
 10.4098 +     ((diffl::(real => real) => real => real => bool)
 10.4099 +       (%x::real. (op /::real => real => real) (f x) (g x))
 10.4100 +       ((op /::real => real => real)
 10.4101 +         ((op -::real => real => real)
 10.4102 +           ((op *::real => real => real) l (g x))
 10.4103 +           ((op *::real => real => real) m (f x)))
 10.4104 +         ((op ^::real => nat => real) (g x)
 10.4105 +           ((number_of::bin => nat)
 10.4106 +             ((op BIT::bin => bool => bin)
 10.4107 +               ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4108 +               (False::bool)))))
 10.4109 +       x))
 10.4110 +   ((op &::bool => bool => bool)
 10.4111 +     ((op -->::bool => bool => bool)
 10.4112 +       ((op &::bool => bool => bool)
 10.4113 +         ((diffl::(real => real) => real => real => bool) f l x)
 10.4114 +         ((diffl::(real => real) => real => real => bool) g m x))
 10.4115 +       ((diffl::(real => real) => real => real => bool)
 10.4116 +         (%x::real. (op +::real => real => real) (f x) (g x))
 10.4117 +         ((op +::real => real => real) l m) x))
 10.4118 +     ((op &::bool => bool => bool)
 10.4119 +       ((op -->::bool => bool => bool)
 10.4120 +         ((op &::bool => bool => bool)
 10.4121 +           ((diffl::(real => real) => real => real => bool) f l x)
 10.4122 +           ((diffl::(real => real) => real => real => bool) g m x))
 10.4123 +         ((diffl::(real => real) => real => real => bool)
 10.4124 +           (%x::real. (op *::real => real => real) (f x) (g x))
 10.4125 +           ((op +::real => real => real)
 10.4126 +             ((op *::real => real => real) l (g x))
 10.4127 +             ((op *::real => real => real) m (f x)))
 10.4128 +           x))
 10.4129 +       ((op &::bool => bool => bool)
 10.4130 +         ((op -->::bool => bool => bool)
 10.4131 +           ((op &::bool => bool => bool)
 10.4132 +             ((diffl::(real => real) => real => real => bool) f l x)
 10.4133 +             ((diffl::(real => real) => real => real => bool) g m x))
 10.4134 +           ((diffl::(real => real) => real => real => bool)
 10.4135 +             (%x::real. (op -::real => real => real) (f x) (g x))
 10.4136 +             ((op -::real => real => real) l m) x))
 10.4137 +         ((op &::bool => bool => bool)
 10.4138 +           ((op -->::bool => bool => bool)
 10.4139 +             ((diffl::(real => real) => real => real => bool) f l x)
 10.4140 +             ((diffl::(real => real) => real => real => bool)
 10.4141 +               (%x::real. (uminus::real => real) (f x))
 10.4142 +               ((uminus::real => real) l) x))
 10.4143 +           ((op &::bool => bool => bool)
 10.4144 +             ((op -->::bool => bool => bool)
 10.4145 +               ((diffl::(real => real) => real => real => bool) g m x)
 10.4146 +               ((diffl::(real => real) => real => real => bool)
 10.4147 +                 (%x::real. (op ^::real => nat => real) (g x) (n::nat))
 10.4148 +                 ((op *::real => real => real)
 10.4149 +                   ((op *::real => real => real) ((real::nat => real) n)
 10.4150 +                     ((op ^::real => nat => real) (g x)
 10.4151 +                       ((op -::nat => nat => nat) n (1::nat))))
 10.4152 +                   m)
 10.4153 +                 x))
 10.4154 +             ((op &::bool => bool => bool)
 10.4155 +               ((op -->::bool => bool => bool)
 10.4156 +                 ((diffl::(real => real) => real => real => bool) g m x)
 10.4157 +                 ((diffl::(real => real) => real => real => bool)
 10.4158 +                   (%x::real. (exp::real => real) (g x))
 10.4159 +                   ((op *::real => real => real) ((exp::real => real) (g x))
 10.4160 +                     m)
 10.4161 +                   x))
 10.4162 +               ((op &::bool => bool => bool)
 10.4163 +                 ((op -->::bool => bool => bool)
 10.4164 +                   ((diffl::(real => real) => real => real => bool) g m x)
 10.4165 +                   ((diffl::(real => real) => real => real => bool)
 10.4166 +                     (%x::real. (sin::real => real) (g x))
 10.4167 +                     ((op *::real => real => real)
 10.4168 +                       ((cos::real => real) (g x)) m)
 10.4169 +                     x))
 10.4170 +                 ((op -->::bool => bool => bool)
 10.4171 +                   ((diffl::(real => real) => real => real => bool) g m x)
 10.4172 +                   ((diffl::(real => real) => real => real => bool)
 10.4173 +                     (%x::real. (cos::real => real) (g x))
 10.4174 +                     ((op *::real => real => real)
 10.4175 +                       ((uminus::real => real) ((sin::real => real) (g x)))
 10.4176 +                       m)
 10.4177 +                     x))))))))))"
 10.4178 +  by (import transc DIFF_COMPOSITE)
 10.4179 +
 10.4180 +lemma EXP_0: "exp 0 = 1"
 10.4181 +  by (import transc EXP_0)
 10.4182 +
 10.4183 +lemma EXP_LE_X: "(All::(real => bool) => bool)
 10.4184 + (%x::real.
 10.4185 +     (op -->::bool => bool => bool)
 10.4186 +      ((op <=::real => real => bool) (0::real) x)
 10.4187 +      ((op <=::real => real => bool)
 10.4188 +        ((op +::real => real => real) (1::real) x) ((exp::real => real) x)))"
 10.4189 +  by (import transc EXP_LE_X)
 10.4190 +
 10.4191 +lemma EXP_LT_1: "(All::(real => bool) => bool)
 10.4192 + (%x::real.
 10.4193 +     (op -->::bool => bool => bool)
 10.4194 +      ((op <::real => real => bool) (0::real) x)
 10.4195 +      ((op <::real => real => bool) (1::real) ((exp::real => real) x)))"
 10.4196 +  by (import transc EXP_LT_1)
 10.4197 +
 10.4198 +lemma EXP_ADD_MUL: "ALL x y. exp (x + y) * exp (- x) = exp y"
 10.4199 +  by (import transc EXP_ADD_MUL)
 10.4200 +
 10.4201 +lemma EXP_NEG_MUL: "ALL x. exp x * exp (- x) = 1"
 10.4202 +  by (import transc EXP_NEG_MUL)
 10.4203 +
 10.4204 +lemma EXP_NEG_MUL2: "ALL x. exp (- x) * exp x = 1"
 10.4205 +  by (import transc EXP_NEG_MUL2)
 10.4206 +
 10.4207 +lemma EXP_NEG: "ALL x. exp (- x) = inverse (exp x)"
 10.4208 +  by (import transc EXP_NEG)
 10.4209 +
 10.4210 +lemma EXP_ADD: "ALL x y. exp (x + y) = exp x * exp y"
 10.4211 +  by (import transc EXP_ADD)
 10.4212 +
 10.4213 +lemma EXP_POS_LE: "ALL x. 0 <= exp x"
 10.4214 +  by (import transc EXP_POS_LE)
 10.4215 +
 10.4216 +lemma EXP_NZ: "ALL x. exp x ~= 0"
 10.4217 +  by (import transc EXP_NZ)
 10.4218 +
 10.4219 +lemma EXP_POS_LT: "ALL x. 0 < exp x"
 10.4220 +  by (import transc EXP_POS_LT)
 10.4221 +
 10.4222 +lemma EXP_N: "ALL n x. exp (real n * x) = exp x ^ n"
 10.4223 +  by (import transc EXP_N)
 10.4224 +
 10.4225 +lemma EXP_SUB: "ALL x y. exp (x - y) = exp x / exp y"
 10.4226 +  by (import transc EXP_SUB)
 10.4227 +
 10.4228 +lemma EXP_MONO_IMP: "(All::(real => bool) => bool)
 10.4229 + (%x::real.
 10.4230 +     (All::(real => bool) => bool)
 10.4231 +      (%y::real.
 10.4232 +          (op -->::bool => bool => bool) ((op <::real => real => bool) x y)
 10.4233 +           ((op <::real => real => bool) ((exp::real => real) x)
 10.4234 +             ((exp::real => real) y))))"
 10.4235 +  by (import transc EXP_MONO_IMP)
 10.4236 +
 10.4237 +lemma EXP_MONO_LT: "ALL x y. (exp x < exp y) = (x < y)"
 10.4238 +  by (import transc EXP_MONO_LT)
 10.4239 +
 10.4240 +lemma EXP_MONO_LE: "ALL x y. (exp x <= exp y) = (x <= y)"
 10.4241 +  by (import transc EXP_MONO_LE)
 10.4242 +
 10.4243 +lemma EXP_INJ: "ALL x y. (exp x = exp y) = (x = y)"
 10.4244 +  by (import transc EXP_INJ)
 10.4245 +
 10.4246 +lemma EXP_TOTAL_LEMMA: "(All::(real => bool) => bool)
 10.4247 + (%y::real.
 10.4248 +     (op -->::bool => bool => bool)
 10.4249 +      ((op <=::real => real => bool) (1::real) y)
 10.4250 +      ((Ex::(real => bool) => bool)
 10.4251 +        (%x::real.
 10.4252 +            (op &::bool => bool => bool)
 10.4253 +             ((op <=::real => real => bool) (0::real) x)
 10.4254 +             ((op &::bool => bool => bool)
 10.4255 +               ((op <=::real => real => bool) x
 10.4256 +                 ((op -::real => real => real) y (1::real)))
 10.4257 +               ((op =::real => real => bool) ((exp::real => real) x) y)))))"
 10.4258 +  by (import transc EXP_TOTAL_LEMMA)
 10.4259 +
 10.4260 +lemma EXP_TOTAL: "(All::(real => bool) => bool)
 10.4261 + (%y::real.
 10.4262 +     (op -->::bool => bool => bool)
 10.4263 +      ((op <::real => real => bool) (0::real) y)
 10.4264 +      ((Ex::(real => bool) => bool)
 10.4265 +        (%x::real. (op =::real => real => bool) ((exp::real => real) x) y)))"
 10.4266 +  by (import transc EXP_TOTAL)
 10.4267 +
 10.4268 +constdefs
 10.4269 +  ln :: "real => real" 
 10.4270 +  "ln == %x. SOME u. exp u = x"
 10.4271 +
 10.4272 +lemma ln: "ALL x. ln x = (SOME u. exp u = x)"
 10.4273 +  by (import transc ln)
 10.4274 +
 10.4275 +lemma LN_EXP: "ALL x. ln (exp x) = x"
 10.4276 +  by (import transc LN_EXP)
 10.4277 +
 10.4278 +lemma EXP_LN: "ALL x. (exp (ln x) = x) = (0 < x)"
 10.4279 +  by (import transc EXP_LN)
 10.4280 +
 10.4281 +lemma LN_MUL: "(All::(real => bool) => bool)
 10.4282 + (%x::real.
 10.4283 +     (All::(real => bool) => bool)
 10.4284 +      (%y::real.
 10.4285 +          (op -->::bool => bool => bool)
 10.4286 +           ((op &::bool => bool => bool)
 10.4287 +             ((op <::real => real => bool) (0::real) x)
 10.4288 +             ((op <::real => real => bool) (0::real) y))
 10.4289 +           ((op =::real => real => bool)
 10.4290 +             ((ln::real => real) ((op *::real => real => real) x y))
 10.4291 +             ((op +::real => real => real) ((ln::real => real) x)
 10.4292 +               ((ln::real => real) y)))))"
 10.4293 +  by (import transc LN_MUL)
 10.4294 +
 10.4295 +lemma LN_INJ: "(All::(real => bool) => bool)
 10.4296 + (%x::real.
 10.4297 +     (All::(real => bool) => bool)
 10.4298 +      (%y::real.
 10.4299 +          (op -->::bool => bool => bool)
 10.4300 +           ((op &::bool => bool => bool)
 10.4301 +             ((op <::real => real => bool) (0::real) x)
 10.4302 +             ((op <::real => real => bool) (0::real) y))
 10.4303 +           ((op =::bool => bool => bool)
 10.4304 +             ((op =::real => real => bool) ((ln::real => real) x)
 10.4305 +               ((ln::real => real) y))
 10.4306 +             ((op =::real => real => bool) x y))))"
 10.4307 +  by (import transc LN_INJ)
 10.4308 +
 10.4309 +lemma LN_1: "ln 1 = 0"
 10.4310 +  by (import transc LN_1)
 10.4311 +
 10.4312 +lemma LN_INV: "(All::(real => bool) => bool)
 10.4313 + (%x::real.
 10.4314 +     (op -->::bool => bool => bool)
 10.4315 +      ((op <::real => real => bool) (0::real) x)
 10.4316 +      ((op =::real => real => bool)
 10.4317 +        ((ln::real => real) ((inverse::real => real) x))
 10.4318 +        ((uminus::real => real) ((ln::real => real) x))))"
 10.4319 +  by (import transc LN_INV)
 10.4320 +
 10.4321 +lemma LN_DIV: "(All::(real => bool) => bool)
 10.4322 + (%x::real.
 10.4323 +     (All::(real => bool) => bool)
 10.4324 +      (%y::real.
 10.4325 +          (op -->::bool => bool => bool)
 10.4326 +           ((op &::bool => bool => bool)
 10.4327 +             ((op <::real => real => bool) (0::real) x)
 10.4328 +             ((op <::real => real => bool) (0::real) y))
 10.4329 +           ((op =::real => real => bool)
 10.4330 +             ((ln::real => real) ((op /::real => real => real) x y))
 10.4331 +             ((op -::real => real => real) ((ln::real => real) x)
 10.4332 +               ((ln::real => real) y)))))"
 10.4333 +  by (import transc LN_DIV)
 10.4334 +
 10.4335 +lemma LN_MONO_LT: "(All::(real => bool) => bool)
 10.4336 + (%x::real.
 10.4337 +     (All::(real => bool) => bool)
 10.4338 +      (%y::real.
 10.4339 +          (op -->::bool => bool => bool)
 10.4340 +           ((op &::bool => bool => bool)
 10.4341 +             ((op <::real => real => bool) (0::real) x)
 10.4342 +             ((op <::real => real => bool) (0::real) y))
 10.4343 +           ((op =::bool => bool => bool)
 10.4344 +             ((op <::real => real => bool) ((ln::real => real) x)
 10.4345 +               ((ln::real => real) y))
 10.4346 +             ((op <::real => real => bool) x y))))"
 10.4347 +  by (import transc LN_MONO_LT)
 10.4348 +
 10.4349 +lemma LN_MONO_LE: "(All::(real => bool) => bool)
 10.4350 + (%x::real.
 10.4351 +     (All::(real => bool) => bool)
 10.4352 +      (%y::real.
 10.4353 +          (op -->::bool => bool => bool)
 10.4354 +           ((op &::bool => bool => bool)
 10.4355 +             ((op <::real => real => bool) (0::real) x)
 10.4356 +             ((op <::real => real => bool) (0::real) y))
 10.4357 +           ((op =::bool => bool => bool)
 10.4358 +             ((op <=::real => real => bool) ((ln::real => real) x)
 10.4359 +               ((ln::real => real) y))
 10.4360 +             ((op <=::real => real => bool) x y))))"
 10.4361 +  by (import transc LN_MONO_LE)
 10.4362 +
 10.4363 +lemma LN_POW: "(All::(nat => bool) => bool)
 10.4364 + (%n::nat.
 10.4365 +     (All::(real => bool) => bool)
 10.4366 +      (%x::real.
 10.4367 +          (op -->::bool => bool => bool)
 10.4368 +           ((op <::real => real => bool) (0::real) x)
 10.4369 +           ((op =::real => real => bool)
 10.4370 +             ((ln::real => real) ((op ^::real => nat => real) x n))
 10.4371 +             ((op *::real => real => real) ((real::nat => real) n)
 10.4372 +               ((ln::real => real) x)))))"
 10.4373 +  by (import transc LN_POW)
 10.4374 +
 10.4375 +lemma LN_LE: "(All::(real => bool) => bool)
 10.4376 + (%x::real.
 10.4377 +     (op -->::bool => bool => bool)
 10.4378 +      ((op <=::real => real => bool) (0::real) x)
 10.4379 +      ((op <=::real => real => bool)
 10.4380 +        ((ln::real => real) ((op +::real => real => real) (1::real) x)) x))"
 10.4381 +  by (import transc LN_LE)
 10.4382 +
 10.4383 +lemma LN_LT_X: "(All::(real => bool) => bool)
 10.4384 + (%x::real.
 10.4385 +     (op -->::bool => bool => bool)
 10.4386 +      ((op <::real => real => bool) (0::real) x)
 10.4387 +      ((op <::real => real => bool) ((ln::real => real) x) x))"
 10.4388 +  by (import transc LN_LT_X)
 10.4389 +
 10.4390 +lemma LN_POS: "(All::(real => bool) => bool)
 10.4391 + (%x::real.
 10.4392 +     (op -->::bool => bool => bool)
 10.4393 +      ((op <=::real => real => bool) (1::real) x)
 10.4394 +      ((op <=::real => real => bool) (0::real) ((ln::real => real) x)))"
 10.4395 +  by (import transc LN_POS)
 10.4396 +
 10.4397 +constdefs
 10.4398 +  root :: "nat => real => real" 
 10.4399 +  "(op ==::(nat => real => real) => (nat => real => real) => prop)
 10.4400 + (root::nat => real => real)
 10.4401 + (%(n::nat) x::real.
 10.4402 +     (Eps::(real => bool) => real)
 10.4403 +      (%u::real.
 10.4404 +          (op &::bool => bool => bool)
 10.4405 +           ((op -->::bool => bool => bool)
 10.4406 +             ((op <::real => real => bool) (0::real) x)
 10.4407 +             ((op <::real => real => bool) (0::real) u))
 10.4408 +           ((op =::real => real => bool) ((op ^::real => nat => real) u n)
 10.4409 +             x)))"
 10.4410 +
 10.4411 +lemma root: "(All::(nat => bool) => bool)
 10.4412 + (%n::nat.
 10.4413 +     (All::(real => bool) => bool)
 10.4414 +      (%x::real.
 10.4415 +          (op =::real => real => bool) ((root::nat => real => real) n x)
 10.4416 +           ((Eps::(real => bool) => real)
 10.4417 +             (%u::real.
 10.4418 +                 (op &::bool => bool => bool)
 10.4419 +                  ((op -->::bool => bool => bool)
 10.4420 +                    ((op <::real => real => bool) (0::real) x)
 10.4421 +                    ((op <::real => real => bool) (0::real) u))
 10.4422 +                  ((op =::real => real => bool)
 10.4423 +                    ((op ^::real => nat => real) u n) x)))))"
 10.4424 +  by (import transc root)
 10.4425 +
 10.4426 +constdefs
 10.4427 +  sqrt :: "real => real" 
 10.4428 +  "sqrt == root 2"
 10.4429 +
 10.4430 +lemma sqrt: "ALL x. sqrt x = root 2 x"
 10.4431 +  by (import transc sqrt)
 10.4432 +
 10.4433 +lemma ROOT_LT_LEMMA: "(All::(nat => bool) => bool)
 10.4434 + (%n::nat.
 10.4435 +     (All::(real => bool) => bool)
 10.4436 +      (%x::real.
 10.4437 +          (op -->::bool => bool => bool)
 10.4438 +           ((op <::real => real => bool) (0::real) x)
 10.4439 +           ((op =::real => real => bool)
 10.4440 +             ((op ^::real => nat => real)
 10.4441 +               ((exp::real => real)
 10.4442 +                 ((op /::real => real => real) ((ln::real => real) x)
 10.4443 +                   ((real::nat => real) ((Suc::nat => nat) n))))
 10.4444 +               ((Suc::nat => nat) n))
 10.4445 +             x)))"
 10.4446 +  by (import transc ROOT_LT_LEMMA)
 10.4447 +
 10.4448 +lemma ROOT_LN: "(All::(nat => bool) => bool)
 10.4449 + (%n::nat.
 10.4450 +     (All::(real => bool) => bool)
 10.4451 +      (%x::real.
 10.4452 +          (op -->::bool => bool => bool)
 10.4453 +           ((op <::real => real => bool) (0::real) x)
 10.4454 +           ((op =::real => real => bool)
 10.4455 +             ((root::nat => real => real) ((Suc::nat => nat) n) x)
 10.4456 +             ((exp::real => real)
 10.4457 +               ((op /::real => real => real) ((ln::real => real) x)
 10.4458 +                 ((real::nat => real) ((Suc::nat => nat) n)))))))"
 10.4459 +  by (import transc ROOT_LN)
 10.4460 +
 10.4461 +lemma ROOT_0: "ALL n. root (Suc n) 0 = 0"
 10.4462 +  by (import transc ROOT_0)
 10.4463 +
 10.4464 +lemma ROOT_1: "ALL n. root (Suc n) 1 = 1"
 10.4465 +  by (import transc ROOT_1)
 10.4466 +
 10.4467 +lemma ROOT_POS_LT: "(All::(nat => bool) => bool)
 10.4468 + (%n::nat.
 10.4469 +     (All::(real => bool) => bool)
 10.4470 +      (%x::real.
 10.4471 +          (op -->::bool => bool => bool)
 10.4472 +           ((op <::real => real => bool) (0::real) x)
 10.4473 +           ((op <::real => real => bool) (0::real)
 10.4474 +             ((root::nat => real => real) ((Suc::nat => nat) n) x))))"
 10.4475 +  by (import transc ROOT_POS_LT)
 10.4476 +
 10.4477 +lemma ROOT_POW_POS: "(All::(nat => bool) => bool)
 10.4478 + (%n::nat.
 10.4479 +     (All::(real => bool) => bool)
 10.4480 +      (%x::real.
 10.4481 +          (op -->::bool => bool => bool)
 10.4482 +           ((op <=::real => real => bool) (0::real) x)
 10.4483 +           ((op =::real => real => bool)
 10.4484 +             ((op ^::real => nat => real)
 10.4485 +               ((root::nat => real => real) ((Suc::nat => nat) n) x)
 10.4486 +               ((Suc::nat => nat) n))
 10.4487 +             x)))"
 10.4488 +  by (import transc ROOT_POW_POS)
 10.4489 +
 10.4490 +lemma POW_ROOT_POS: "(All::(nat => bool) => bool)
 10.4491 + (%n::nat.
 10.4492 +     (All::(real => bool) => bool)
 10.4493 +      (%x::real.
 10.4494 +          (op -->::bool => bool => bool)
 10.4495 +           ((op <=::real => real => bool) (0::real) x)
 10.4496 +           ((op =::real => real => bool)
 10.4497 +             ((root::nat => real => real) ((Suc::nat => nat) n)
 10.4498 +               ((op ^::real => nat => real) x ((Suc::nat => nat) n)))
 10.4499 +             x)))"
 10.4500 +  by (import transc POW_ROOT_POS)
 10.4501 +
 10.4502 +lemma ROOT_POS: "(All::(nat => bool) => bool)
 10.4503 + (%n::nat.
 10.4504 +     (All::(real => bool) => bool)
 10.4505 +      (%x::real.
 10.4506 +          (op -->::bool => bool => bool)
 10.4507 +           ((op <=::real => real => bool) (0::real) x)
 10.4508 +           ((op <=::real => real => bool) (0::real)
 10.4509 +             ((root::nat => real => real) ((Suc::nat => nat) n) x))))"
 10.4510 +  by (import transc ROOT_POS)
 10.4511 +
 10.4512 +lemma ROOT_POS_UNIQ: "(All::(nat => bool) => bool)
 10.4513 + (%n::nat.
 10.4514 +     (All::(real => bool) => bool)
 10.4515 +      (%x::real.
 10.4516 +          (All::(real => bool) => bool)
 10.4517 +           (%y::real.
 10.4518 +               (op -->::bool => bool => bool)
 10.4519 +                ((op &::bool => bool => bool)
 10.4520 +                  ((op <=::real => real => bool) (0::real) x)
 10.4521 +                  ((op &::bool => bool => bool)
 10.4522 +                    ((op <=::real => real => bool) (0::real) y)
 10.4523 +                    ((op =::real => real => bool)
 10.4524 +                      ((op ^::real => nat => real) y ((Suc::nat => nat) n))
 10.4525 +                      x)))
 10.4526 +                ((op =::real => real => bool)
 10.4527 +                  ((root::nat => real => real) ((Suc::nat => nat) n) x)
 10.4528 +                  y))))"
 10.4529 +  by (import transc ROOT_POS_UNIQ)
 10.4530 +
 10.4531 +lemma ROOT_MUL: "(All::(nat => bool) => bool)
 10.4532 + (%n::nat.
 10.4533 +     (All::(real => bool) => bool)
 10.4534 +      (%x::real.
 10.4535 +          (All::(real => bool) => bool)
 10.4536 +           (%y::real.
 10.4537 +               (op -->::bool => bool => bool)
 10.4538 +                ((op &::bool => bool => bool)
 10.4539 +                  ((op <=::real => real => bool) (0::real) x)
 10.4540 +                  ((op <=::real => real => bool) (0::real) y))
 10.4541 +                ((op =::real => real => bool)
 10.4542 +                  ((root::nat => real => real) ((Suc::nat => nat) n)
 10.4543 +                    ((op *::real => real => real) x y))
 10.4544 +                  ((op *::real => real => real)
 10.4545 +                    ((root::nat => real => real) ((Suc::nat => nat) n) x)
 10.4546 +                    ((root::nat => real => real) ((Suc::nat => nat) n)
 10.4547 +                      y))))))"
 10.4548 +  by (import transc ROOT_MUL)
 10.4549 +
 10.4550 +lemma ROOT_INV: "(All::(nat => bool) => bool)
 10.4551 + (%n::nat.
 10.4552 +     (All::(real => bool) => bool)
 10.4553 +      (%x::real.
 10.4554 +          (op -->::bool => bool => bool)
 10.4555 +           ((op <=::real => real => bool) (0::real) x)
 10.4556 +           ((op =::real => real => bool)
 10.4557 +             ((root::nat => real => real) ((Suc::nat => nat) n)
 10.4558 +               ((inverse::real => real) x))
 10.4559 +             ((inverse::real => real)
 10.4560 +               ((root::nat => real => real) ((Suc::nat => nat) n) x)))))"
 10.4561 +  by (import transc ROOT_INV)
 10.4562 +
 10.4563 +lemma ROOT_DIV: "(All::(nat => bool) => bool)
 10.4564 + (%x::nat.
 10.4565 +     (All::(real => bool) => bool)
 10.4566 +      (%xa::real.
 10.4567 +          (All::(real => bool) => bool)
 10.4568 +           (%xb::real.
 10.4569 +               (op -->::bool => bool => bool)
 10.4570 +                ((op &::bool => bool => bool)
 10.4571 +                  ((op <=::real => real => bool) (0::real) xa)
 10.4572 +                  ((op <=::real => real => bool) (0::real) xb))
 10.4573 +                ((op =::real => real => bool)
 10.4574 +                  ((root::nat => real => real) ((Suc::nat => nat) x)
 10.4575 +                    ((op /::real => real => real) xa xb))
 10.4576 +                  ((op /::real => real => real)
 10.4577 +                    ((root::nat => real => real) ((Suc::nat => nat) x) xa)
 10.4578 +                    ((root::nat => real => real) ((Suc::nat => nat) x)
 10.4579 +                      xb))))))"
 10.4580 +  by (import transc ROOT_DIV)
 10.4581 +
 10.4582 +lemma ROOT_MONO_LE: "(All::(real => bool) => bool)
 10.4583 + (%x::real.
 10.4584 +     (All::(real => bool) => bool)
 10.4585 +      (%y::real.
 10.4586 +          (op -->::bool => bool => bool)
 10.4587 +           ((op &::bool => bool => bool)
 10.4588 +             ((op <=::real => real => bool) (0::real) x)
 10.4589 +             ((op <=::real => real => bool) x y))
 10.4590 +           ((op <=::real => real => bool)
 10.4591 +             ((root::nat => real => real) ((Suc::nat => nat) (n::nat)) x)
 10.4592 +             ((root::nat => real => real) ((Suc::nat => nat) n) y))))"
 10.4593 +  by (import transc ROOT_MONO_LE)
 10.4594 +
 10.4595 +lemma SQRT_0: "sqrt 0 = 0"
 10.4596 +  by (import transc SQRT_0)
 10.4597 +
 10.4598 +lemma SQRT_1: "sqrt 1 = 1"
 10.4599 +  by (import transc SQRT_1)
 10.4600 +
 10.4601 +lemma SQRT_POS_LT: "(All::(real => bool) => bool)
 10.4602 + (%x::real.
 10.4603 +     (op -->::bool => bool => bool)
 10.4604 +      ((op <::real => real => bool) (0::real) x)
 10.4605 +      ((op <::real => real => bool) (0::real) ((sqrt::real => real) x)))"
 10.4606 +  by (import transc SQRT_POS_LT)
 10.4607 +
 10.4608 +lemma SQRT_POS_LE: "(All::(real => bool) => bool)
 10.4609 + (%x::real.
 10.4610 +     (op -->::bool => bool => bool)
 10.4611 +      ((op <=::real => real => bool) (0::real) x)
 10.4612 +      ((op <=::real => real => bool) (0::real) ((sqrt::real => real) x)))"
 10.4613 +  by (import transc SQRT_POS_LE)
 10.4614 +
 10.4615 +lemma SQRT_POW2: "ALL x. (sqrt x ^ 2 = x) = (0 <= x)"
 10.4616 +  by (import transc SQRT_POW2)
 10.4617 +
 10.4618 +lemma SQRT_POW_2: "(All::(real => bool) => bool)
 10.4619 + (%x::real.
 10.4620 +     (op -->::bool => bool => bool)
 10.4621 +      ((op <=::real => real => bool) (0::real) x)
 10.4622 +      ((op =::real => real => bool)
 10.4623 +        ((op ^::real => nat => real) ((sqrt::real => real) x)
 10.4624 +          ((number_of::bin => nat)
 10.4625 +            ((op BIT::bin => bool => bin)
 10.4626 +              ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4627 +              (False::bool))))
 10.4628 +        x))"
 10.4629 +  by (import transc SQRT_POW_2)
 10.4630 +
 10.4631 +lemma POW_2_SQRT: "(op -->::bool => bool => bool)
 10.4632 + ((op <=::real => real => bool) (0::real) (x::real))
 10.4633 + ((op =::real => real => bool)
 10.4634 +   ((sqrt::real => real)
 10.4635 +     ((op ^::real => nat => real) x
 10.4636 +       ((number_of::bin => nat)
 10.4637 +         ((op BIT::bin => bool => bin)
 10.4638 +           ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4639 +           (False::bool)))))
 10.4640 +   x)"
 10.4641 +  by (import transc POW_2_SQRT)
 10.4642 +
 10.4643 +lemma SQRT_POS_UNIQ: "(All::(real => bool) => bool)
 10.4644 + (%x::real.
 10.4645 +     (All::(real => bool) => bool)
 10.4646 +      (%xa::real.
 10.4647 +          (op -->::bool => bool => bool)
 10.4648 +           ((op &::bool => bool => bool)
 10.4649 +             ((op <=::real => real => bool) (0::real) x)
 10.4650 +             ((op &::bool => bool => bool)
 10.4651 +               ((op <=::real => real => bool) (0::real) xa)
 10.4652 +               ((op =::real => real => bool)
 10.4653 +                 ((op ^::real => nat => real) xa
 10.4654 +                   ((number_of::bin => nat)
 10.4655 +                     ((op BIT::bin => bool => bin)
 10.4656 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.4657 +                         (True::bool))
 10.4658 +                       (False::bool))))
 10.4659 +                 x)))
 10.4660 +           ((op =::real => real => bool) ((sqrt::real => real) x) xa)))"
 10.4661 +  by (import transc SQRT_POS_UNIQ)
 10.4662 +
 10.4663 +lemma SQRT_MUL: "(All::(real => bool) => bool)
 10.4664 + (%x::real.
 10.4665 +     (All::(real => bool) => bool)
 10.4666 +      (%xa::real.
 10.4667 +          (op -->::bool => bool => bool)
 10.4668 +           ((op &::bool => bool => bool)
 10.4669 +             ((op <=::real => real => bool) (0::real) x)
 10.4670 +             ((op <=::real => real => bool) (0::real) xa))
 10.4671 +           ((op =::real => real => bool)
 10.4672 +             ((sqrt::real => real) ((op *::real => real => real) x xa))
 10.4673 +             ((op *::real => real => real) ((sqrt::real => real) x)
 10.4674 +               ((sqrt::real => real) xa)))))"
 10.4675 +  by (import transc SQRT_MUL)
 10.4676 +
 10.4677 +lemma SQRT_INV: "(All::(real => bool) => bool)
 10.4678 + (%x::real.
 10.4679 +     (op -->::bool => bool => bool)
 10.4680 +      ((op <=::real => real => bool) (0::real) x)
 10.4681 +      ((op =::real => real => bool)
 10.4682 +        ((sqrt::real => real) ((inverse::real => real) x))
 10.4683 +        ((inverse::real => real) ((sqrt::real => real) x))))"
 10.4684 +  by (import transc SQRT_INV)
 10.4685 +
 10.4686 +lemma SQRT_DIV: "(All::(real => bool) => bool)
 10.4687 + (%x::real.
 10.4688 +     (All::(real => bool) => bool)
 10.4689 +      (%xa::real.
 10.4690 +          (op -->::bool => bool => bool)
 10.4691 +           ((op &::bool => bool => bool)
 10.4692 +             ((op <=::real => real => bool) (0::real) x)
 10.4693 +             ((op <=::real => real => bool) (0::real) xa))
 10.4694 +           ((op =::real => real => bool)
 10.4695 +             ((sqrt::real => real) ((op /::real => real => real) x xa))
 10.4696 +             ((op /::real => real => real) ((sqrt::real => real) x)
 10.4697 +               ((sqrt::real => real) xa)))))"
 10.4698 +  by (import transc SQRT_DIV)
 10.4699 +
 10.4700 +lemma SQRT_MONO_LE: "(All::(real => bool) => bool)
 10.4701 + (%x::real.
 10.4702 +     (All::(real => bool) => bool)
 10.4703 +      (%xa::real.
 10.4704 +          (op -->::bool => bool => bool)
 10.4705 +           ((op &::bool => bool => bool)
 10.4706 +             ((op <=::real => real => bool) (0::real) x)
 10.4707 +             ((op <=::real => real => bool) x xa))
 10.4708 +           ((op <=::real => real => bool) ((sqrt::real => real) x)
 10.4709 +             ((sqrt::real => real) xa))))"
 10.4710 +  by (import transc SQRT_MONO_LE)
 10.4711 +
 10.4712 +lemma SQRT_EVEN_POW2: "(All::(nat => bool) => bool)
 10.4713 + (%n::nat.
 10.4714 +     (op -->::bool => bool => bool) ((EVEN::nat => bool) n)
 10.4715 +      ((op =::real => real => bool)
 10.4716 +        ((sqrt::real => real)
 10.4717 +          ((op ^::real => nat => real)
 10.4718 +            ((number_of::bin => real)
 10.4719 +              ((op BIT::bin => bool => bin)
 10.4720 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4721 +                (False::bool)))
 10.4722 +            n))
 10.4723 +        ((op ^::real => nat => real)
 10.4724 +          ((number_of::bin => real)
 10.4725 +            ((op BIT::bin => bool => bin)
 10.4726 +              ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4727 +              (False::bool)))
 10.4728 +          ((op div::nat => nat => nat) n
 10.4729 +            ((number_of::bin => nat)
 10.4730 +              ((op BIT::bin => bool => bin)
 10.4731 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4732 +                (False::bool)))))))"
 10.4733 +  by (import transc SQRT_EVEN_POW2)
 10.4734 +
 10.4735 +lemma REAL_DIV_SQRT: "(All::(real => bool) => bool)
 10.4736 + (%x::real.
 10.4737 +     (op -->::bool => bool => bool)
 10.4738 +      ((op <=::real => real => bool) (0::real) x)
 10.4739 +      ((op =::real => real => bool)
 10.4740 +        ((op /::real => real => real) x ((sqrt::real => real) x))
 10.4741 +        ((sqrt::real => real) x)))"
 10.4742 +  by (import transc REAL_DIV_SQRT)
 10.4743 +
 10.4744 +lemma SQRT_EQ: "(All::(real => bool) => bool)
 10.4745 + (%x::real.
 10.4746 +     (All::(real => bool) => bool)
 10.4747 +      (%y::real.
 10.4748 +          (op -->::bool => bool => bool)
 10.4749 +           ((op &::bool => bool => bool)
 10.4750 +             ((op =::real => real => bool)
 10.4751 +               ((op ^::real => nat => real) x
 10.4752 +                 ((number_of::bin => nat)
 10.4753 +                   ((op BIT::bin => bool => bin)
 10.4754 +                     ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.4755 +                       (True::bool))
 10.4756 +                     (False::bool))))
 10.4757 +               y)
 10.4758 +             ((op <=::real => real => bool) (0::real) x))
 10.4759 +           ((op =::real => real => bool) x ((sqrt::real => real) y))))"
 10.4760 +  by (import transc SQRT_EQ)
 10.4761 +
 10.4762 +lemma SIN_0: "sin 0 = 0"
 10.4763 +  by (import transc SIN_0)
 10.4764 +
 10.4765 +lemma COS_0: "cos 0 = 1"
 10.4766 +  by (import transc COS_0)
 10.4767 +
 10.4768 +lemma SIN_CIRCLE: "ALL x. sin x ^ 2 + cos x ^ 2 = 1"
 10.4769 +  by (import transc SIN_CIRCLE)
 10.4770 +
 10.4771 +lemma SIN_BOUND: "ALL x. abs (sin x) <= 1"
 10.4772 +  by (import transc SIN_BOUND)
 10.4773 +
 10.4774 +lemma SIN_BOUNDS: "ALL x. - 1 <= sin x & sin x <= 1"
 10.4775 +  by (import transc SIN_BOUNDS)
 10.4776 +
 10.4777 +lemma COS_BOUND: "ALL x. abs (cos x) <= 1"
 10.4778 +  by (import transc COS_BOUND)
 10.4779 +
 10.4780 +lemma COS_BOUNDS: "ALL x. - 1 <= cos x & cos x <= 1"
 10.4781 +  by (import transc COS_BOUNDS)
 10.4782 +
 10.4783 +lemma SIN_COS_ADD: "ALL x y.
 10.4784 +   (sin (x + y) - (sin x * cos y + cos x * sin y)) ^ 2 +
 10.4785 +   (cos (x + y) - (cos x * cos y - sin x * sin y)) ^ 2 =
 10.4786 +   0"
 10.4787 +  by (import transc SIN_COS_ADD)
 10.4788 +
 10.4789 +lemma SIN_COS_NEG: "ALL x. (sin (- x) + sin x) ^ 2 + (cos (- x) - cos x) ^ 2 = 0"
 10.4790 +  by (import transc SIN_COS_NEG)
 10.4791 +
 10.4792 +lemma SIN_ADD: "ALL x y. sin (x + y) = sin x * cos y + cos x * sin y"
 10.4793 +  by (import transc SIN_ADD)
 10.4794 +
 10.4795 +lemma COS_ADD: "ALL x y. cos (x + y) = cos x * cos y - sin x * sin y"
 10.4796 +  by (import transc COS_ADD)
 10.4797 +
 10.4798 +lemma SIN_NEG: "ALL x. sin (- x) = - sin x"
 10.4799 +  by (import transc SIN_NEG)
 10.4800 +
 10.4801 +lemma COS_NEG: "ALL x. cos (- x) = cos x"
 10.4802 +  by (import transc COS_NEG)
 10.4803 +
 10.4804 +lemma SIN_DOUBLE: "ALL x. sin (2 * x) = 2 * (sin x * cos x)"
 10.4805 +  by (import transc SIN_DOUBLE)
 10.4806 +
 10.4807 +lemma COS_DOUBLE: "ALL x. cos (2 * x) = cos x ^ 2 - sin x ^ 2"
 10.4808 +  by (import transc COS_DOUBLE)
 10.4809 +
 10.4810 +lemma SIN_PAIRED: "ALL x.
 10.4811 +   sums (%n. (- 1) ^ n / real (FACT (2 * n + 1)) * x ^ (2 * n + 1)) (sin x)"
 10.4812 +  by (import transc SIN_PAIRED)
 10.4813 +
 10.4814 +lemma SIN_POS: "(All::(real => bool) => bool)
 10.4815 + (%x::real.
 10.4816 +     (op -->::bool => bool => bool)
 10.4817 +      ((op &::bool => bool => bool)
 10.4818 +        ((op <::real => real => bool) (0::real) x)
 10.4819 +        ((op <::real => real => bool) x
 10.4820 +          ((number_of::bin => real)
 10.4821 +            ((op BIT::bin => bool => bin)
 10.4822 +              ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4823 +              (False::bool)))))
 10.4824 +      ((op <::real => real => bool) (0::real) ((sin::real => real) x)))"
 10.4825 +  by (import transc SIN_POS)
 10.4826 +
 10.4827 +lemma COS_PAIRED: "ALL x. sums (%n. (- 1) ^ n / real (FACT (2 * n)) * x ^ (2 * n)) (cos x)"
 10.4828 +  by (import transc COS_PAIRED)
 10.4829 +
 10.4830 +lemma COS_2: "cos 2 < 0"
 10.4831 +  by (import transc COS_2)
 10.4832 +
 10.4833 +lemma COS_ISZERO: "EX! x. 0 <= x & x <= 2 & cos x = 0"
 10.4834 +  by (import transc COS_ISZERO)
 10.4835 +
 10.4836 +constdefs
 10.4837 +  pi :: "real" 
 10.4838 +  "pi == 2 * (SOME x. 0 <= x & x <= 2 & cos x = 0)"
 10.4839 +
 10.4840 +lemma pi: "pi = 2 * (SOME x. 0 <= x & x <= 2 & cos x = 0)"
 10.4841 +  by (import transc pi)
 10.4842 +
 10.4843 +lemma PI2: "pi / 2 = (SOME x. 0 <= x & x <= 2 & cos x = 0)"
 10.4844 +  by (import transc PI2)
 10.4845 +
 10.4846 +lemma COS_PI2: "cos (pi / 2) = 0"
 10.4847 +  by (import transc COS_PI2)
 10.4848 +
 10.4849 +lemma PI2_BOUNDS: "0 < pi / 2 & pi / 2 < 2"
 10.4850 +  by (import transc PI2_BOUNDS)
 10.4851 +
 10.4852 +lemma PI_POS: "0 < pi"
 10.4853 +  by (import transc PI_POS)
 10.4854 +
 10.4855 +lemma SIN_PI2: "sin (pi / 2) = 1"
 10.4856 +  by (import transc SIN_PI2)
 10.4857 +
 10.4858 +lemma COS_PI: "cos pi = - 1"
 10.4859 +  by (import transc COS_PI)
 10.4860 +
 10.4861 +lemma SIN_PI: "sin pi = 0"
 10.4862 +  by (import transc SIN_PI)
 10.4863 +
 10.4864 +lemma SIN_COS: "ALL x. sin x = cos (pi / 2 - x)"
 10.4865 +  by (import transc SIN_COS)
 10.4866 +
 10.4867 +lemma COS_SIN: "ALL x. cos x = sin (pi / 2 - x)"
 10.4868 +  by (import transc COS_SIN)
 10.4869 +
 10.4870 +lemma SIN_PERIODIC_PI: "ALL x. sin (x + pi) = - sin x"
 10.4871 +  by (import transc SIN_PERIODIC_PI)
 10.4872 +
 10.4873 +lemma COS_PERIODIC_PI: "ALL x. cos (x + pi) = - cos x"
 10.4874 +  by (import transc COS_PERIODIC_PI)
 10.4875 +
 10.4876 +lemma SIN_PERIODIC: "ALL x. sin (x + 2 * pi) = sin x"
 10.4877 +  by (import transc SIN_PERIODIC)
 10.4878 +
 10.4879 +lemma COS_PERIODIC: "ALL x. cos (x + 2 * pi) = cos x"
 10.4880 +  by (import transc COS_PERIODIC)
 10.4881 +
 10.4882 +lemma COS_NPI: "ALL n. cos (real n * pi) = (- 1) ^ n"
 10.4883 +  by (import transc COS_NPI)
 10.4884 +
 10.4885 +lemma SIN_NPI: "ALL n::nat. sin (real n * pi) = (0::real)"
 10.4886 +  by (import transc SIN_NPI)
 10.4887 +
 10.4888 +lemma SIN_POS_PI2: "(All::(real => bool) => bool)
 10.4889 + (%x::real.
 10.4890 +     (op -->::bool => bool => bool)
 10.4891 +      ((op &::bool => bool => bool)
 10.4892 +        ((op <::real => real => bool) (0::real) x)
 10.4893 +        ((op <::real => real => bool) x
 10.4894 +          ((op /::real => real => real) (pi::real)
 10.4895 +            ((number_of::bin => real)
 10.4896 +              ((op BIT::bin => bool => bin)
 10.4897 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4898 +                (False::bool))))))
 10.4899 +      ((op <::real => real => bool) (0::real) ((sin::real => real) x)))"
 10.4900 +  by (import transc SIN_POS_PI2)
 10.4901 +
 10.4902 +lemma COS_POS_PI2: "(All::(real => bool) => bool)
 10.4903 + (%x::real.
 10.4904 +     (op -->::bool => bool => bool)
 10.4905 +      ((op &::bool => bool => bool)
 10.4906 +        ((op <::real => real => bool) (0::real) x)
 10.4907 +        ((op <::real => real => bool) x
 10.4908 +          ((op /::real => real => real) (pi::real)
 10.4909 +            ((number_of::bin => real)
 10.4910 +              ((op BIT::bin => bool => bin)
 10.4911 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4912 +                (False::bool))))))
 10.4913 +      ((op <::real => real => bool) (0::real) ((cos::real => real) x)))"
 10.4914 +  by (import transc COS_POS_PI2)
 10.4915 +
 10.4916 +lemma COS_POS_PI: "(All::(real => bool) => bool)
 10.4917 + (%x::real.
 10.4918 +     (op -->::bool => bool => bool)
 10.4919 +      ((op &::bool => bool => bool)
 10.4920 +        ((op <::real => real => bool)
 10.4921 +          ((uminus::real => real)
 10.4922 +            ((op /::real => real => real) (pi::real)
 10.4923 +              ((number_of::bin => real)
 10.4924 +                ((op BIT::bin => bool => bin)
 10.4925 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4926 +                  (False::bool)))))
 10.4927 +          x)
 10.4928 +        ((op <::real => real => bool) x
 10.4929 +          ((op /::real => real => real) (pi::real)
 10.4930 +            ((number_of::bin => real)
 10.4931 +              ((op BIT::bin => bool => bin)
 10.4932 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4933 +                (False::bool))))))
 10.4934 +      ((op <::real => real => bool) (0::real) ((cos::real => real) x)))"
 10.4935 +  by (import transc COS_POS_PI)
 10.4936 +
 10.4937 +lemma SIN_POS_PI: "(All::(real => bool) => bool)
 10.4938 + (%x::real.
 10.4939 +     (op -->::bool => bool => bool)
 10.4940 +      ((op &::bool => bool => bool)
 10.4941 +        ((op <::real => real => bool) (0::real) x)
 10.4942 +        ((op <::real => real => bool) x (pi::real)))
 10.4943 +      ((op <::real => real => bool) (0::real) ((sin::real => real) x)))"
 10.4944 +  by (import transc SIN_POS_PI)
 10.4945 +
 10.4946 +lemma COS_POS_PI2_LE: "(All::(real => bool) => bool)
 10.4947 + (%x::real.
 10.4948 +     (op -->::bool => bool => bool)
 10.4949 +      ((op &::bool => bool => bool)
 10.4950 +        ((op <=::real => real => bool) (0::real) x)
 10.4951 +        ((op <=::real => real => bool) x
 10.4952 +          ((op /::real => real => real) (pi::real)
 10.4953 +            ((number_of::bin => real)
 10.4954 +              ((op BIT::bin => bool => bin)
 10.4955 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4956 +                (False::bool))))))
 10.4957 +      ((op <=::real => real => bool) (0::real) ((cos::real => real) x)))"
 10.4958 +  by (import transc COS_POS_PI2_LE)
 10.4959 +
 10.4960 +lemma COS_POS_PI_LE: "(All::(real => bool) => bool)
 10.4961 + (%x::real.
 10.4962 +     (op -->::bool => bool => bool)
 10.4963 +      ((op &::bool => bool => bool)
 10.4964 +        ((op <=::real => real => bool)
 10.4965 +          ((uminus::real => real)
 10.4966 +            ((op /::real => real => real) (pi::real)
 10.4967 +              ((number_of::bin => real)
 10.4968 +                ((op BIT::bin => bool => bin)
 10.4969 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4970 +                  (False::bool)))))
 10.4971 +          x)
 10.4972 +        ((op <=::real => real => bool) x
 10.4973 +          ((op /::real => real => real) (pi::real)
 10.4974 +            ((number_of::bin => real)
 10.4975 +              ((op BIT::bin => bool => bin)
 10.4976 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4977 +                (False::bool))))))
 10.4978 +      ((op <=::real => real => bool) (0::real) ((cos::real => real) x)))"
 10.4979 +  by (import transc COS_POS_PI_LE)
 10.4980 +
 10.4981 +lemma SIN_POS_PI2_LE: "(All::(real => bool) => bool)
 10.4982 + (%x::real.
 10.4983 +     (op -->::bool => bool => bool)
 10.4984 +      ((op &::bool => bool => bool)
 10.4985 +        ((op <=::real => real => bool) (0::real) x)
 10.4986 +        ((op <=::real => real => bool) x
 10.4987 +          ((op /::real => real => real) (pi::real)
 10.4988 +            ((number_of::bin => real)
 10.4989 +              ((op BIT::bin => bool => bin)
 10.4990 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.4991 +                (False::bool))))))
 10.4992 +      ((op <=::real => real => bool) (0::real) ((sin::real => real) x)))"
 10.4993 +  by (import transc SIN_POS_PI2_LE)
 10.4994 +
 10.4995 +lemma SIN_POS_PI_LE: "(All::(real => bool) => bool)
 10.4996 + (%x::real.
 10.4997 +     (op -->::bool => bool => bool)
 10.4998 +      ((op &::bool => bool => bool)
 10.4999 +        ((op <=::real => real => bool) (0::real) x)
 10.5000 +        ((op <=::real => real => bool) x (pi::real)))
 10.5001 +      ((op <=::real => real => bool) (0::real) ((sin::real => real) x)))"
 10.5002 +  by (import transc SIN_POS_PI_LE)
 10.5003 +
 10.5004 +lemma COS_TOTAL: "(All::(real => bool) => bool)
 10.5005 + (%y::real.
 10.5006 +     (op -->::bool => bool => bool)
 10.5007 +      ((op &::bool => bool => bool)
 10.5008 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5009 +        ((op <=::real => real => bool) y (1::real)))
 10.5010 +      ((Ex1::(real => bool) => bool)
 10.5011 +        (%x::real.
 10.5012 +            (op &::bool => bool => bool)
 10.5013 +             ((op <=::real => real => bool) (0::real) x)
 10.5014 +             ((op &::bool => bool => bool)
 10.5015 +               ((op <=::real => real => bool) x (pi::real))
 10.5016 +               ((op =::real => real => bool) ((cos::real => real) x) y)))))"
 10.5017 +  by (import transc COS_TOTAL)
 10.5018 +
 10.5019 +lemma SIN_TOTAL: "(All::(real => bool) => bool)
 10.5020 + (%y::real.
 10.5021 +     (op -->::bool => bool => bool)
 10.5022 +      ((op &::bool => bool => bool)
 10.5023 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5024 +        ((op <=::real => real => bool) y (1::real)))
 10.5025 +      ((Ex1::(real => bool) => bool)
 10.5026 +        (%x::real.
 10.5027 +            (op &::bool => bool => bool)
 10.5028 +             ((op <=::real => real => bool)
 10.5029 +               ((uminus::real => real)
 10.5030 +                 ((op /::real => real => real) (pi::real)
 10.5031 +                   ((number_of::bin => real)
 10.5032 +                     ((op BIT::bin => bool => bin)
 10.5033 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5034 +                         (True::bool))
 10.5035 +                       (False::bool)))))
 10.5036 +               x)
 10.5037 +             ((op &::bool => bool => bool)
 10.5038 +               ((op <=::real => real => bool) x
 10.5039 +                 ((op /::real => real => real) (pi::real)
 10.5040 +                   ((number_of::bin => real)
 10.5041 +                     ((op BIT::bin => bool => bin)
 10.5042 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5043 +                         (True::bool))
 10.5044 +                       (False::bool)))))
 10.5045 +               ((op =::real => real => bool) ((sin::real => real) x) y)))))"
 10.5046 +  by (import transc SIN_TOTAL)
 10.5047 +
 10.5048 +lemma COS_ZERO_LEMMA: "(All::(real => bool) => bool)
 10.5049 + (%x::real.
 10.5050 +     (op -->::bool => bool => bool)
 10.5051 +      ((op &::bool => bool => bool)
 10.5052 +        ((op <=::real => real => bool) (0::real) x)
 10.5053 +        ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
 10.5054 +      ((Ex::(nat => bool) => bool)
 10.5055 +        (%n::nat.
 10.5056 +            (op &::bool => bool => bool)
 10.5057 +             ((Not::bool => bool) ((EVEN::nat => bool) n))
 10.5058 +             ((op =::real => real => bool) x
 10.5059 +               ((op *::real => real => real) ((real::nat => real) n)
 10.5060 +                 ((op /::real => real => real) (pi::real)
 10.5061 +                   ((number_of::bin => real)
 10.5062 +                     ((op BIT::bin => bool => bin)
 10.5063 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5064 +                         (True::bool))
 10.5065 +                       (False::bool)))))))))"
 10.5066 +  by (import transc COS_ZERO_LEMMA)
 10.5067 +
 10.5068 +lemma SIN_ZERO_LEMMA: "(All::(real => bool) => bool)
 10.5069 + (%x::real.
 10.5070 +     (op -->::bool => bool => bool)
 10.5071 +      ((op &::bool => bool => bool)
 10.5072 +        ((op <=::real => real => bool) (0::real) x)
 10.5073 +        ((op =::real => real => bool) ((sin::real => real) x) (0::real)))
 10.5074 +      ((Ex::(nat => bool) => bool)
 10.5075 +        (%n::nat.
 10.5076 +            (op &::bool => bool => bool) ((EVEN::nat => bool) n)
 10.5077 +             ((op =::real => real => bool) x
 10.5078 +               ((op *::real => real => real) ((real::nat => real) n)
 10.5079 +                 ((op /::real => real => real) (pi::real)
 10.5080 +                   ((number_of::bin => real)
 10.5081 +                     ((op BIT::bin => bool => bin)
 10.5082 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5083 +                         (True::bool))
 10.5084 +                       (False::bool)))))))))"
 10.5085 +  by (import transc SIN_ZERO_LEMMA)
 10.5086 +
 10.5087 +lemma COS_ZERO: "ALL x.
 10.5088 +   (cos x = 0) =
 10.5089 +   ((EX n. ~ EVEN n & x = real n * (pi / 2)) |
 10.5090 +    (EX n. ~ EVEN n & x = - (real n * (pi / 2))))"
 10.5091 +  by (import transc COS_ZERO)
 10.5092 +
 10.5093 +lemma SIN_ZERO: "ALL x.
 10.5094 +   (sin x = 0) =
 10.5095 +   ((EX n. EVEN n & x = real n * (pi / 2)) |
 10.5096 +    (EX n. EVEN n & x = - (real n * (pi / 2))))"
 10.5097 +  by (import transc SIN_ZERO)
 10.5098 +
 10.5099 +constdefs
 10.5100 +  tan :: "real => real" 
 10.5101 +  "tan == %x. sin x / cos x"
 10.5102 +
 10.5103 +lemma tan: "ALL x. tan x = sin x / cos x"
 10.5104 +  by (import transc tan)
 10.5105 +
 10.5106 +lemma TAN_0: "tan 0 = 0"
 10.5107 +  by (import transc TAN_0)
 10.5108 +
 10.5109 +lemma TAN_PI: "tan pi = 0"
 10.5110 +  by (import transc TAN_PI)
 10.5111 +
 10.5112 +lemma TAN_NPI: "ALL n::nat. tan (real n * pi) = (0::real)"
 10.5113 +  by (import transc TAN_NPI)
 10.5114 +
 10.5115 +lemma TAN_NEG: "ALL x. tan (- x) = - tan x"
 10.5116 +  by (import transc TAN_NEG)
 10.5117 +
 10.5118 +lemma TAN_PERIODIC: "ALL x. tan (x + 2 * pi) = tan x"
 10.5119 +  by (import transc TAN_PERIODIC)
 10.5120 +
 10.5121 +lemma TAN_ADD: "(All::(real => bool) => bool)
 10.5122 + (%x::real.
 10.5123 +     (All::(real => bool) => bool)
 10.5124 +      (%y::real.
 10.5125 +          (op -->::bool => bool => bool)
 10.5126 +           ((op &::bool => bool => bool)
 10.5127 +             ((Not::bool => bool)
 10.5128 +               ((op =::real => real => bool) ((cos::real => real) x)
 10.5129 +                 (0::real)))
 10.5130 +             ((op &::bool => bool => bool)
 10.5131 +               ((Not::bool => bool)
 10.5132 +                 ((op =::real => real => bool) ((cos::real => real) y)
 10.5133 +                   (0::real)))
 10.5134 +               ((Not::bool => bool)
 10.5135 +                 ((op =::real => real => bool)
 10.5136 +                   ((cos::real => real) ((op +::real => real => real) x y))
 10.5137 +                   (0::real)))))
 10.5138 +           ((op =::real => real => bool)
 10.5139 +             ((tan::real => real) ((op +::real => real => real) x y))
 10.5140 +             ((op /::real => real => real)
 10.5141 +               ((op +::real => real => real) ((tan::real => real) x)
 10.5142 +                 ((tan::real => real) y))
 10.5143 +               ((op -::real => real => real) (1::real)
 10.5144 +                 ((op *::real => real => real) ((tan::real => real) x)
 10.5145 +                   ((tan::real => real) y)))))))"
 10.5146 +  by (import transc TAN_ADD)
 10.5147 +
 10.5148 +lemma TAN_DOUBLE: "(All::(real => bool) => bool)
 10.5149 + (%x::real.
 10.5150 +     (op -->::bool => bool => bool)
 10.5151 +      ((op &::bool => bool => bool)
 10.5152 +        ((Not::bool => bool)
 10.5153 +          ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
 10.5154 +        ((Not::bool => bool)
 10.5155 +          ((op =::real => real => bool)
 10.5156 +            ((cos::real => real)
 10.5157 +              ((op *::real => real => real)
 10.5158 +                ((number_of::bin => real)
 10.5159 +                  ((op BIT::bin => bool => bin)
 10.5160 +                    ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5161 +                      (True::bool))
 10.5162 +                    (False::bool)))
 10.5163 +                x))
 10.5164 +            (0::real))))
 10.5165 +      ((op =::real => real => bool)
 10.5166 +        ((tan::real => real)
 10.5167 +          ((op *::real => real => real)
 10.5168 +            ((number_of::bin => real)
 10.5169 +              ((op BIT::bin => bool => bin)
 10.5170 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5171 +                (False::bool)))
 10.5172 +            x))
 10.5173 +        ((op /::real => real => real)
 10.5174 +          ((op *::real => real => real)
 10.5175 +            ((number_of::bin => real)
 10.5176 +              ((op BIT::bin => bool => bin)
 10.5177 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5178 +                (False::bool)))
 10.5179 +            ((tan::real => real) x))
 10.5180 +          ((op -::real => real => real) (1::real)
 10.5181 +            ((op ^::real => nat => real) ((tan::real => real) x)
 10.5182 +              ((number_of::bin => nat)
 10.5183 +                ((op BIT::bin => bool => bin)
 10.5184 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5185 +                  (False::bool))))))))"
 10.5186 +  by (import transc TAN_DOUBLE)
 10.5187 +
 10.5188 +lemma TAN_POS_PI2: "(All::(real => bool) => bool)
 10.5189 + (%x::real.
 10.5190 +     (op -->::bool => bool => bool)
 10.5191 +      ((op &::bool => bool => bool)
 10.5192 +        ((op <::real => real => bool) (0::real) x)
 10.5193 +        ((op <::real => real => bool) x
 10.5194 +          ((op /::real => real => real) (pi::real)
 10.5195 +            ((number_of::bin => real)
 10.5196 +              ((op BIT::bin => bool => bin)
 10.5197 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5198 +                (False::bool))))))
 10.5199 +      ((op <::real => real => bool) (0::real) ((tan::real => real) x)))"
 10.5200 +  by (import transc TAN_POS_PI2)
 10.5201 +
 10.5202 +lemma DIFF_TAN: "(All::(real => bool) => bool)
 10.5203 + (%x::real.
 10.5204 +     (op -->::bool => bool => bool)
 10.5205 +      ((Not::bool => bool)
 10.5206 +        ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
 10.5207 +      ((diffl::(real => real) => real => real => bool) (tan::real => real)
 10.5208 +        ((inverse::real => real)
 10.5209 +          ((op ^::real => nat => real) ((cos::real => real) x)
 10.5210 +            ((number_of::bin => nat)
 10.5211 +              ((op BIT::bin => bool => bin)
 10.5212 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5213 +                (False::bool)))))
 10.5214 +        x))"
 10.5215 +  by (import transc DIFF_TAN)
 10.5216 +
 10.5217 +lemma TAN_TOTAL_LEMMA: "(All::(real => bool) => bool)
 10.5218 + (%y::real.
 10.5219 +     (op -->::bool => bool => bool)
 10.5220 +      ((op <::real => real => bool) (0::real) y)
 10.5221 +      ((Ex::(real => bool) => bool)
 10.5222 +        (%x::real.
 10.5223 +            (op &::bool => bool => bool)
 10.5224 +             ((op <::real => real => bool) (0::real) x)
 10.5225 +             ((op &::bool => bool => bool)
 10.5226 +               ((op <::real => real => bool) x
 10.5227 +                 ((op /::real => real => real) (pi::real)
 10.5228 +                   ((number_of::bin => real)
 10.5229 +                     ((op BIT::bin => bool => bin)
 10.5230 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5231 +                         (True::bool))
 10.5232 +                       (False::bool)))))
 10.5233 +               ((op <::real => real => bool) y ((tan::real => real) x))))))"
 10.5234 +  by (import transc TAN_TOTAL_LEMMA)
 10.5235 +
 10.5236 +lemma TAN_TOTAL_POS: "(All::(real => bool) => bool)
 10.5237 + (%y::real.
 10.5238 +     (op -->::bool => bool => bool)
 10.5239 +      ((op <=::real => real => bool) (0::real) y)
 10.5240 +      ((Ex::(real => bool) => bool)
 10.5241 +        (%x::real.
 10.5242 +            (op &::bool => bool => bool)
 10.5243 +             ((op <=::real => real => bool) (0::real) x)
 10.5244 +             ((op &::bool => bool => bool)
 10.5245 +               ((op <::real => real => bool) x
 10.5246 +                 ((op /::real => real => real) (pi::real)
 10.5247 +                   ((number_of::bin => real)
 10.5248 +                     ((op BIT::bin => bool => bin)
 10.5249 +                       ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5250 +                         (True::bool))
 10.5251 +                       (False::bool)))))
 10.5252 +               ((op =::real => real => bool) ((tan::real => real) x) y)))))"
 10.5253 +  by (import transc TAN_TOTAL_POS)
 10.5254 +
 10.5255 +lemma TAN_TOTAL: "ALL y. EX! x. - (pi / 2) < x & x < pi / 2 & tan x = y"
 10.5256 +  by (import transc TAN_TOTAL)
 10.5257 +
 10.5258 +constdefs
 10.5259 +  asn :: "real => real" 
 10.5260 +  "asn == %y. SOME x. - (pi / 2) <= x & x <= pi / 2 & sin x = y"
 10.5261 +
 10.5262 +lemma asn: "ALL y. asn y = (SOME x. - (pi / 2) <= x & x <= pi / 2 & sin x = y)"
 10.5263 +  by (import transc asn)
 10.5264 +
 10.5265 +constdefs
 10.5266 +  acs :: "real => real" 
 10.5267 +  "acs == %y. SOME x. 0 <= x & x <= pi & cos x = y"
 10.5268 +
 10.5269 +lemma acs: "ALL y. acs y = (SOME x. 0 <= x & x <= pi & cos x = y)"
 10.5270 +  by (import transc acs)
 10.5271 +
 10.5272 +constdefs
 10.5273 +  atn :: "real => real" 
 10.5274 +  "atn == %y. SOME x. - (pi / 2) < x & x < pi / 2 & tan x = y"
 10.5275 +
 10.5276 +lemma atn: "ALL y. atn y = (SOME x. - (pi / 2) < x & x < pi / 2 & tan x = y)"
 10.5277 +  by (import transc atn)
 10.5278 +
 10.5279 +lemma ASN: "(All::(real => bool) => bool)
 10.5280 + (%y::real.
 10.5281 +     (op -->::bool => bool => bool)
 10.5282 +      ((op &::bool => bool => bool)
 10.5283 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5284 +        ((op <=::real => real => bool) y (1::real)))
 10.5285 +      ((op &::bool => bool => bool)
 10.5286 +        ((op <=::real => real => bool)
 10.5287 +          ((uminus::real => real)
 10.5288 +            ((op /::real => real => real) (pi::real)
 10.5289 +              ((number_of::bin => real)
 10.5290 +                ((op BIT::bin => bool => bin)
 10.5291 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5292 +                  (False::bool)))))
 10.5293 +          ((asn::real => real) y))
 10.5294 +        ((op &::bool => bool => bool)
 10.5295 +          ((op <=::real => real => bool) ((asn::real => real) y)
 10.5296 +            ((op /::real => real => real) (pi::real)
 10.5297 +              ((number_of::bin => real)
 10.5298 +                ((op BIT::bin => bool => bin)
 10.5299 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5300 +                  (False::bool)))))
 10.5301 +          ((op =::real => real => bool)
 10.5302 +            ((sin::real => real) ((asn::real => real) y)) y))))"
 10.5303 +  by (import transc ASN)
 10.5304 +
 10.5305 +lemma ASN_SIN: "(All::(real => bool) => bool)
 10.5306 + (%y::real.
 10.5307 +     (op -->::bool => bool => bool)
 10.5308 +      ((op &::bool => bool => bool)
 10.5309 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5310 +        ((op <=::real => real => bool) y (1::real)))
 10.5311 +      ((op =::real => real => bool)
 10.5312 +        ((sin::real => real) ((asn::real => real) y)) y))"
 10.5313 +  by (import transc ASN_SIN)
 10.5314 +
 10.5315 +lemma ASN_BOUNDS: "(All::(real => bool) => bool)
 10.5316 + (%y::real.
 10.5317 +     (op -->::bool => bool => bool)
 10.5318 +      ((op &::bool => bool => bool)
 10.5319 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5320 +        ((op <=::real => real => bool) y (1::real)))
 10.5321 +      ((op &::bool => bool => bool)
 10.5322 +        ((op <=::real => real => bool)
 10.5323 +          ((uminus::real => real)
 10.5324 +            ((op /::real => real => real) (pi::real)
 10.5325 +              ((number_of::bin => real)
 10.5326 +                ((op BIT::bin => bool => bin)
 10.5327 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5328 +                  (False::bool)))))
 10.5329 +          ((asn::real => real) y))
 10.5330 +        ((op <=::real => real => bool) ((asn::real => real) y)
 10.5331 +          ((op /::real => real => real) (pi::real)
 10.5332 +            ((number_of::bin => real)
 10.5333 +              ((op BIT::bin => bool => bin)
 10.5334 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5335 +                (False::bool)))))))"
 10.5336 +  by (import transc ASN_BOUNDS)
 10.5337 +
 10.5338 +lemma ASN_BOUNDS_LT: "(All::(real => bool) => bool)
 10.5339 + (%y::real.
 10.5340 +     (op -->::bool => bool => bool)
 10.5341 +      ((op &::bool => bool => bool)
 10.5342 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5343 +        ((op <::real => real => bool) y (1::real)))
 10.5344 +      ((op &::bool => bool => bool)
 10.5345 +        ((op <::real => real => bool)
 10.5346 +          ((uminus::real => real)
 10.5347 +            ((op /::real => real => real) (pi::real)
 10.5348 +              ((number_of::bin => real)
 10.5349 +                ((op BIT::bin => bool => bin)
 10.5350 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5351 +                  (False::bool)))))
 10.5352 +          ((asn::real => real) y))
 10.5353 +        ((op <::real => real => bool) ((asn::real => real) y)
 10.5354 +          ((op /::real => real => real) (pi::real)
 10.5355 +            ((number_of::bin => real)
 10.5356 +              ((op BIT::bin => bool => bin)
 10.5357 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5358 +                (False::bool)))))))"
 10.5359 +  by (import transc ASN_BOUNDS_LT)
 10.5360 +
 10.5361 +lemma SIN_ASN: "(All::(real => bool) => bool)
 10.5362 + (%x::real.
 10.5363 +     (op -->::bool => bool => bool)
 10.5364 +      ((op &::bool => bool => bool)
 10.5365 +        ((op <=::real => real => bool)
 10.5366 +          ((uminus::real => real)
 10.5367 +            ((op /::real => real => real) (pi::real)
 10.5368 +              ((number_of::bin => real)
 10.5369 +                ((op BIT::bin => bool => bin)
 10.5370 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5371 +                  (False::bool)))))
 10.5372 +          x)
 10.5373 +        ((op <=::real => real => bool) x
 10.5374 +          ((op /::real => real => real) (pi::real)
 10.5375 +            ((number_of::bin => real)
 10.5376 +              ((op BIT::bin => bool => bin)
 10.5377 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5378 +                (False::bool))))))
 10.5379 +      ((op =::real => real => bool)
 10.5380 +        ((asn::real => real) ((sin::real => real) x)) x))"
 10.5381 +  by (import transc SIN_ASN)
 10.5382 +
 10.5383 +lemma ACS: "(All::(real => bool) => bool)
 10.5384 + (%y::real.
 10.5385 +     (op -->::bool => bool => bool)
 10.5386 +      ((op &::bool => bool => bool)
 10.5387 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5388 +        ((op <=::real => real => bool) y (1::real)))
 10.5389 +      ((op &::bool => bool => bool)
 10.5390 +        ((op <=::real => real => bool) (0::real) ((acs::real => real) y))
 10.5391 +        ((op &::bool => bool => bool)
 10.5392 +          ((op <=::real => real => bool) ((acs::real => real) y) (pi::real))
 10.5393 +          ((op =::real => real => bool)
 10.5394 +            ((cos::real => real) ((acs::real => real) y)) y))))"
 10.5395 +  by (import transc ACS)
 10.5396 +
 10.5397 +lemma ACS_COS: "(All::(real => bool) => bool)
 10.5398 + (%y::real.
 10.5399 +     (op -->::bool => bool => bool)
 10.5400 +      ((op &::bool => bool => bool)
 10.5401 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5402 +        ((op <=::real => real => bool) y (1::real)))
 10.5403 +      ((op =::real => real => bool)
 10.5404 +        ((cos::real => real) ((acs::real => real) y)) y))"
 10.5405 +  by (import transc ACS_COS)
 10.5406 +
 10.5407 +lemma ACS_BOUNDS: "(All::(real => bool) => bool)
 10.5408 + (%y::real.
 10.5409 +     (op -->::bool => bool => bool)
 10.5410 +      ((op &::bool => bool => bool)
 10.5411 +        ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5412 +        ((op <=::real => real => bool) y (1::real)))
 10.5413 +      ((op &::bool => bool => bool)
 10.5414 +        ((op <=::real => real => bool) (0::real) ((acs::real => real) y))
 10.5415 +        ((op <=::real => real => bool) ((acs::real => real) y) (pi::real))))"
 10.5416 +  by (import transc ACS_BOUNDS)
 10.5417 +
 10.5418 +lemma ACS_BOUNDS_LT: "(All::(real => bool) => bool)
 10.5419 + (%y::real.
 10.5420 +     (op -->::bool => bool => bool)
 10.5421 +      ((op &::bool => bool => bool)
 10.5422 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) y)
 10.5423 +        ((op <::real => real => bool) y (1::real)))
 10.5424 +      ((op &::bool => bool => bool)
 10.5425 +        ((op <::real => real => bool) (0::real) ((acs::real => real) y))
 10.5426 +        ((op <::real => real => bool) ((acs::real => real) y) (pi::real))))"
 10.5427 +  by (import transc ACS_BOUNDS_LT)
 10.5428 +
 10.5429 +lemma COS_ACS: "(All::(real => bool) => bool)
 10.5430 + (%x::real.
 10.5431 +     (op -->::bool => bool => bool)
 10.5432 +      ((op &::bool => bool => bool)
 10.5433 +        ((op <=::real => real => bool) (0::real) x)
 10.5434 +        ((op <=::real => real => bool) x (pi::real)))
 10.5435 +      ((op =::real => real => bool)
 10.5436 +        ((acs::real => real) ((cos::real => real) x)) x))"
 10.5437 +  by (import transc COS_ACS)
 10.5438 +
 10.5439 +lemma ATN: "ALL y. - (pi / 2) < atn y & atn y < pi / 2 & tan (atn y) = y"
 10.5440 +  by (import transc ATN)
 10.5441 +
 10.5442 +lemma ATN_TAN: "ALL x. tan (atn x) = x"
 10.5443 +  by (import transc ATN_TAN)
 10.5444 +
 10.5445 +lemma ATN_BOUNDS: "ALL x. - (pi / 2) < atn x & atn x < pi / 2"
 10.5446 +  by (import transc ATN_BOUNDS)
 10.5447 +
 10.5448 +lemma TAN_ATN: "(All::(real => bool) => bool)
 10.5449 + (%x::real.
 10.5450 +     (op -->::bool => bool => bool)
 10.5451 +      ((op &::bool => bool => bool)
 10.5452 +        ((op <::real => real => bool)
 10.5453 +          ((uminus::real => real)
 10.5454 +            ((op /::real => real => real) (pi::real)
 10.5455 +              ((number_of::bin => real)
 10.5456 +                ((op BIT::bin => bool => bin)
 10.5457 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5458 +                  (False::bool)))))
 10.5459 +          x)
 10.5460 +        ((op <::real => real => bool) x
 10.5461 +          ((op /::real => real => real) (pi::real)
 10.5462 +            ((number_of::bin => real)
 10.5463 +              ((op BIT::bin => bool => bin)
 10.5464 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5465 +                (False::bool))))))
 10.5466 +      ((op =::real => real => bool)
 10.5467 +        ((atn::real => real) ((tan::real => real) x)) x))"
 10.5468 +  by (import transc TAN_ATN)
 10.5469 +
 10.5470 +lemma TAN_SEC: "(All::(real => bool) => bool)
 10.5471 + (%x::real.
 10.5472 +     (op -->::bool => bool => bool)
 10.5473 +      ((Not::bool => bool)
 10.5474 +        ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
 10.5475 +      ((op =::real => real => bool)
 10.5476 +        ((op +::real => real => real) (1::real)
 10.5477 +          ((op ^::real => nat => real) ((tan::real => real) x)
 10.5478 +            ((number_of::bin => nat)
 10.5479 +              ((op BIT::bin => bool => bin)
 10.5480 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5481 +                (False::bool)))))
 10.5482 +        ((op ^::real => nat => real)
 10.5483 +          ((inverse::real => real) ((cos::real => real) x))
 10.5484 +          ((number_of::bin => nat)
 10.5485 +            ((op BIT::bin => bool => bin)
 10.5486 +              ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5487 +              (False::bool))))))"
 10.5488 +  by (import transc TAN_SEC)
 10.5489 +
 10.5490 +lemma SIN_COS_SQ: "(All::(real => bool) => bool)
 10.5491 + (%x::real.
 10.5492 +     (op -->::bool => bool => bool)
 10.5493 +      ((op &::bool => bool => bool)
 10.5494 +        ((op <=::real => real => bool) (0::real) x)
 10.5495 +        ((op <=::real => real => bool) x (pi::real)))
 10.5496 +      ((op =::real => real => bool) ((sin::real => real) x)
 10.5497 +        ((sqrt::real => real)
 10.5498 +          ((op -::real => real => real) (1::real)
 10.5499 +            ((op ^::real => nat => real) ((cos::real => real) x)
 10.5500 +              ((number_of::bin => nat)
 10.5501 +                ((op BIT::bin => bool => bin)
 10.5502 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5503 +                  (False::bool))))))))"
 10.5504 +  by (import transc SIN_COS_SQ)
 10.5505 +
 10.5506 +lemma COS_SIN_SQ: "(All::(real => bool) => bool)
 10.5507 + (%x::real.
 10.5508 +     (op -->::bool => bool => bool)
 10.5509 +      ((op &::bool => bool => bool)
 10.5510 +        ((op <=::real => real => bool)
 10.5511 +          ((uminus::real => real)
 10.5512 +            ((op /::real => real => real) (pi::real)
 10.5513 +              ((number_of::bin => real)
 10.5514 +                ((op BIT::bin => bool => bin)
 10.5515 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5516 +                  (False::bool)))))
 10.5517 +          x)
 10.5518 +        ((op <=::real => real => bool) x
 10.5519 +          ((op /::real => real => real) (pi::real)
 10.5520 +            ((number_of::bin => real)
 10.5521 +              ((op BIT::bin => bool => bin)
 10.5522 +                ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5523 +                (False::bool))))))
 10.5524 +      ((op =::real => real => bool) ((cos::real => real) x)
 10.5525 +        ((sqrt::real => real)
 10.5526 +          ((op -::real => real => real) (1::real)
 10.5527 +            ((op ^::real => nat => real) ((sin::real => real) x)
 10.5528 +              ((number_of::bin => nat)
 10.5529 +                ((op BIT::bin => bool => bin)
 10.5530 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5531 +                  (False::bool))))))))"
 10.5532 +  by (import transc COS_SIN_SQ)
 10.5533 +
 10.5534 +lemma COS_ATN_NZ: "ALL x. cos (atn x) ~= 0"
 10.5535 +  by (import transc COS_ATN_NZ)
 10.5536 +
 10.5537 +lemma COS_ASN_NZ: "(All::(real => bool) => bool)
 10.5538 + (%x::real.
 10.5539 +     (op -->::bool => bool => bool)
 10.5540 +      ((op &::bool => bool => bool)
 10.5541 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
 10.5542 +        ((op <::real => real => bool) x (1::real)))
 10.5543 +      ((Not::bool => bool)
 10.5544 +        ((op =::real => real => bool)
 10.5545 +          ((cos::real => real) ((asn::real => real) x)) (0::real))))"
 10.5546 +  by (import transc COS_ASN_NZ)
 10.5547 +
 10.5548 +lemma SIN_ACS_NZ: "(All::(real => bool) => bool)
 10.5549 + (%x::real.
 10.5550 +     (op -->::bool => bool => bool)
 10.5551 +      ((op &::bool => bool => bool)
 10.5552 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
 10.5553 +        ((op <::real => real => bool) x (1::real)))
 10.5554 +      ((Not::bool => bool)
 10.5555 +        ((op =::real => real => bool)
 10.5556 +          ((sin::real => real) ((acs::real => real) x)) (0::real))))"
 10.5557 +  by (import transc SIN_ACS_NZ)
 10.5558 +
 10.5559 +lemma COS_SIN_SQRT: "(All::(real => bool) => bool)
 10.5560 + (%x::real.
 10.5561 +     (op -->::bool => bool => bool)
 10.5562 +      ((op <=::real => real => bool) (0::real) ((cos::real => real) x))
 10.5563 +      ((op =::real => real => bool) ((cos::real => real) x)
 10.5564 +        ((sqrt::real => real)
 10.5565 +          ((op -::real => real => real) (1::real)
 10.5566 +            ((op ^::real => nat => real) ((sin::real => real) x)
 10.5567 +              ((number_of::bin => nat)
 10.5568 +                ((op BIT::bin => bool => bin)
 10.5569 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5570 +                  (False::bool))))))))"
 10.5571 +  by (import transc COS_SIN_SQRT)
 10.5572 +
 10.5573 +lemma SIN_COS_SQRT: "(All::(real => bool) => bool)
 10.5574 + (%x::real.
 10.5575 +     (op -->::bool => bool => bool)
 10.5576 +      ((op <=::real => real => bool) (0::real) ((sin::real => real) x))
 10.5577 +      ((op =::real => real => bool) ((sin::real => real) x)
 10.5578 +        ((sqrt::real => real)
 10.5579 +          ((op -::real => real => real) (1::real)
 10.5580 +            ((op ^::real => nat => real) ((cos::real => real) x)
 10.5581 +              ((number_of::bin => nat)
 10.5582 +                ((op BIT::bin => bool => bin)
 10.5583 +                  ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
 10.5584 +                  (False::bool))))))))"
 10.5585 +  by (import transc SIN_COS_SQRT)
 10.5586 +
 10.5587 +lemma DIFF_LN: "(All::(real => bool) => bool)
 10.5588 + (%x::real.
 10.5589 +     (op -->::bool => bool => bool)
 10.5590 +      ((op <::real => real => bool) (0::real) x)
 10.5591 +      ((diffl::(real => real) => real => real => bool) (ln::real => real)
 10.5592 +        ((inverse::real => real) x) x))"
 10.5593 +  by (import transc DIFF_LN)
 10.5594 +
 10.5595 +lemma DIFF_ASN_LEMMA: "(All::(real => bool) => bool)
 10.5596 + (%x::real.
 10.5597 +     (op -->::bool => bool => bool)
 10.5598 +      ((op &::bool => bool => bool)
 10.5599 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
 10.5600 +        ((op <::real => real => bool) x (1::real)))
 10.5601 +      ((diffl::(real => real) => real => real => bool) (asn::real => real)
 10.5602 +        ((inverse::real => real)
 10.5603 +          ((cos::real => real) ((asn::real => real) x)))
 10.5604 +        x))"
 10.5605 +  by (import transc DIFF_ASN_LEMMA)
 10.5606 +
 10.5607 +lemma DIFF_ASN: "(All::(real => bool) => bool)
 10.5608 + (%x::real.
 10.5609 +     (op -->::bool => bool => bool)
 10.5610 +      ((op &::bool => bool => bool)
 10.5611 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
 10.5612 +        ((op <::real => real => bool) x (1::real)))
 10.5613 +      ((diffl::(real => real) => real => real => bool) (asn::real => real)
 10.5614 +        ((inverse::real => real)
 10.5615 +          ((sqrt::real => real)
 10.5616 +            ((op -::real => real => real) (1::real)
 10.5617 +              ((op ^::real => nat => real) x
 10.5618 +                ((number_of::bin => nat)
 10.5619 +                  ((op BIT::bin => bool => bin)
 10.5620 +                    ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5621 +                      (True::bool))
 10.5622 +                    (False::bool)))))))
 10.5623 +        x))"
 10.5624 +  by (import transc DIFF_ASN)
 10.5625 +
 10.5626 +lemma DIFF_ACS_LEMMA: "(All::(real => bool) => bool)
 10.5627 + (%x::real.
 10.5628 +     (op -->::bool => bool => bool)
 10.5629 +      ((op &::bool => bool => bool)
 10.5630 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
 10.5631 +        ((op <::real => real => bool) x (1::real)))
 10.5632 +      ((diffl::(real => real) => real => real => bool) (acs::real => real)
 10.5633 +        ((inverse::real => real)
 10.5634 +          ((uminus::real => real)
 10.5635 +            ((sin::real => real) ((acs::real => real) x))))
 10.5636 +        x))"
 10.5637 +  by (import transc DIFF_ACS_LEMMA)
 10.5638 +
 10.5639 +lemma DIFF_ACS: "(All::(real => bool) => bool)
 10.5640 + (%x::real.
 10.5641 +     (op -->::bool => bool => bool)
 10.5642 +      ((op &::bool => bool => bool)
 10.5643 +        ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
 10.5644 +        ((op <::real => real => bool) x (1::real)))
 10.5645 +      ((diffl::(real => real) => real => real => bool) (acs::real => real)
 10.5646 +        ((uminus::real => real)
 10.5647 +          ((inverse::real => real)
 10.5648 +            ((sqrt::real => real)
 10.5649 +              ((op -::real => real => real) (1::real)
 10.5650 +                ((op ^::real => nat => real) x
 10.5651 +                  ((number_of::bin => nat)
 10.5652 +                    ((op BIT::bin => bool => bin)
 10.5653 +                      ((op BIT::bin => bool => bin) (bin.Pls::bin)
 10.5654 +                        (True::bool))
 10.5655 +                      (False::bool))))))))
 10.5656 +        x))"
 10.5657 +  by (import transc DIFF_ACS)
 10.5658 +
 10.5659 +lemma DIFF_ATN: "ALL x. diffl atn (inverse (1 + x ^ 2)) x"
 10.5660 +  by (import transc DIFF_ATN)
 10.5661 +
 10.5662 +constdefs
 10.5663 +  division :: "real * real => (nat => real) => bool" 
 10.5664 +  "(op ==::(real * real => (nat => real) => bool)
 10.5665 +        => (real * real => (nat => real) => bool) => prop)
 10.5666 + (division::real * real => (nat => real) => bool)
 10.5667 + ((split::(real => real => (nat => real) => bool)
 10.5668 +          => real * real => (nat => real) => bool)
 10.5669 +   (%(a::real) (b::real) D::nat => real.
 10.5670 +       (op &::bool => bool => bool)
 10.5671 +        ((op =::real => real => bool) (D (0::nat)) a)
 10.5672 +        ((Ex::(nat => bool) => bool)
 10.5673 +          (%N::nat.
 10.5674 +              (op &::bool => bool => bool)
 10.5675 +               ((All::(nat => bool) => bool)
 10.5676 +                 (%n::nat.
 10.5677 +                     (op -->::bool => bool => bool)
 10.5678 +                      ((op <::nat => nat => bool) n N)
 10.5679 +                      ((op <::real => real => bool) (D n)
 10.5680 +                        (D ((Suc::nat => nat) n)))))
 10.5681 +               ((All::(nat => bool) => bool)
 10.5682 +                 (%n::nat.
 10.5683 +                     (op -->::bool => bool => bool)
 10.5684 +                      ((op <=::nat => nat => bool) N n)
 10.5685 +                      ((op =::real => real => bool) (D n) b)))))))"
 10.5686 +
 10.5687 +lemma division: "(All::(real => bool) => bool)
 10.5688 + (%a::real.
 10.5689 +     (All::(real => bool) => bool)
 10.5690 +      (%b::real.
 10.5691 +          (All::((nat => real) => bool) => bool)
 10.5692 +           (%D::nat => real.
 10.5693 +               (op =::bool => bool => bool)
 10.5694 +                ((division::real * real => (nat => real) => bool)
 10.5695 +                  ((Pair::real => real => real * real) a b) D)
 10.5696 +                ((op &::bool => bool => bool)
 10.5697 +                  ((op =::real => real => bool) (D (0::nat)) a)
 10.5698 +                  ((Ex::(nat => bool) => bool)
 10.5699 +                    (%N::nat.
 10.5700 +                        (op &::bool => bool => bool)
 10.5701 +                         ((All::(nat => bool) => bool)
 10.5702 +                           (%n::nat.
 10.5703 +                               (op -->::bool => bool => bool)
 10.5704 +                                ((op <::nat => nat => bool) n N)
 10.5705 +                                ((op <::real => real => bool) (D n)
 10.5706 +                                  (D ((Suc::nat => nat) n)))))
 10.5707 +                         ((All::(nat => bool) => bool)
 10.5708 +                           (%n::nat.
 10.5709 +                               (op -->::bool => bool => bool)
 10.5710 +                                ((op <=::nat => nat => bool) N n)
 10.5711 +                                ((op =::real => real => bool) (D n)
 10.5712 +                                  b)))))))))"
 10.5713 +  by (import transc division)
 10.5714 +
 10.5715 +constdefs
 10.5716 +  dsize :: "(nat => real) => nat" 
 10.5717 +  "(op ==::((nat => real) => nat) => ((nat => real) => nat) => prop)
 10.5718 + (dsize::(nat => real) => nat)
 10.5719 + (%D::nat => real.
 10.5720 +     (Eps::(nat => bool) => nat)
 10.5721 +      (%N::nat.
 10.5722 +          (op &::bool => bool => bool)
 10.5723 +           ((All::(nat => bool) => bool)
 10.5724 +             (%n::nat.
 10.5725 +                 (op -->::bool => bool => bool)
 10.5726 +                  ((op <::nat => nat => bool) n N)
 10.5727 +                  ((op <::real => real => bool) (D n)
 10.5728 +                    (D ((Suc::nat => nat) n)))))
 10.5729 +           ((All::(nat => bool) => bool)
 10.5730 +             (%n::nat.
 10.5731 +                 (op -->::bool => bool => bool)
 10.5732 +                  ((op <=::nat => nat => bool) N n)
 10.5733 +                  ((op =::real => real => bool) (D n) (D N))))))"
 10.5734 +
 10.5735 +lemma dsize: "(All::((nat => real) => bool) => bool)
 10.5736 + (%D::nat => real.
 10.5737 +     (op =::nat => nat => bool) ((dsize::(nat => real) => nat) D)
 10.5738 +      ((Eps::(nat => bool) => nat)
 10.5739 +        (%N::nat.
 10.5740 +            (op &::bool => bool => bool)
 10.5741 +             ((All::(nat => bool) => bool)
 10.5742 +               (%n::nat.
 10.5743 +                   (op -->::bool => bool => bool)
 10.5744 +                    ((op <::nat => nat => bool) n N)
 10.5745 +                    ((op <::real => real => bool) (D n)
 10.5746 +                      (D ((Suc::nat => nat) n)))))
 10.5747 +             ((All::(nat => bool) => bool)
 10.5748 +               (%n::nat.
 10.5749 +                   (op -->::bool => bool => bool)
 10.5750 +                    ((op <=::nat => nat => bool) N n)
 10.5751 +                    ((op =::real => real => bool) (D n) (D N)))))))"
 10.5752 +  by (import transc dsize)
 10.5753 +
 10.5754 +constdefs
 10.5755 +  tdiv :: "real * real => (nat => real) * (nat => real) => bool" 
 10.5756 +  "tdiv ==
 10.5757 +%(a, b) (D, p). division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n))"
 10.5758 +
 10.5759 +lemma tdiv: "ALL a b D p.
 10.5760 +   tdiv (a, b) (D, p) =
 10.5761 +   (division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n)))"
 10.5762 +  by (import transc tdiv)
 10.5763 +
 10.5764 +constdefs
 10.5765 +  gauge :: "(real => bool) => (real => real) => bool" 
 10.5766 +  "(op ==::((real => bool) => (real => real) => bool)
 10.5767 +        => ((real => bool) => (real => real) => bool) => prop)
 10.5768 + (gauge::(real => bool) => (real => real) => bool)
 10.5769 + (%(E::real => bool) g::real => real.
 10.5770 +     (All::(real => bool) => bool)
 10.5771 +      (%x::real.
 10.5772 +          (op -->::bool => bool => bool) (E x)
 10.5773 +           ((op <::real => real => bool) (0::real) (g x))))"
 10.5774 +
 10.5775 +lemma gauge: "(All::((real => bool) => bool) => bool)
 10.5776 + (%E::real => bool.
 10.5777 +     (All::((real => real) => bool) => bool)
 10.5778 +      (%g::real => real.
 10.5779 +          (op =::bool => bool => bool)
 10.5780 +           ((gauge::(real => bool) => (real => real) => bool) E g)
 10.5781 +           ((All::(real => bool) => bool)
 10.5782 +             (%x::real.
 10.5783 +                 (op -->::bool => bool => bool) (E x)
 10.5784 +                  ((op <::real => real => bool) (0::real) (g x))))))"
 10.5785 +  by (import transc gauge)
 10.5786 +
 10.5787 +constdefs
 10.5788 +  fine :: "(real => real) => (nat => real) * (nat => real) => bool" 
 10.5789 +  "fine == %g (D, p). ALL n<dsize D. D (Suc n) - D n < g (p n)"
 10.5790 +
 10.5791 +lemma fine: "ALL g D p. fine g (D, p) = (ALL n<dsize D. D (Suc n) - D n < g (p n))"
 10.5792 +  by (import transc fine)
 10.5793 +
 10.5794 +constdefs
 10.5795 +  rsum :: "(nat => real) * (nat => real) => (real => real) => real" 
 10.5796 +  "rsum == %(D, p) f. real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
 10.5797 +
 10.5798 +lemma rsum: "ALL D p f.
 10.5799 +   rsum (D, p) f = real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
 10.5800 +  by (import transc rsum)
 10.5801 +
 10.5802 +constdefs
 10.5803 +  Dint :: "real * real => (real => real) => real => bool" 
 10.5804 +  "(op ==::(real * real => (real => real) => real => bool)
 10.5805 +        => (real * real => (real => real) => real => bool) => prop)
 10.5806 + (Dint::real * real => (real => real) => real => bool)
 10.5807 + ((split::(real => real => (real => real) => real => bool)
 10.5808 +          => real * real => (real => real) => real => bool)
 10.5809 +   (%(a::real) (b::real) (f::real => real) k::real.
 10.5810 +       (All::(real => bool) => bool)
 10.5811 +        (%e::real.
 10.5812 +            (op -->::bool => bool => bool)
 10.5813 +             ((op <::real => real => bool) (0::real) e)
 10.5814 +             ((Ex::((real => real) => bool) => bool)
 10.5815 +               (%g::real => real.
 10.5816 +                   (op &::bool => bool => bool)
 10.5817 +                    ((gauge::(real => bool) => (real => real) => bool)
 10.5818 +                      (%x::real.
 10.5819 +                          (op &::bool => bool => bool)
 10.5820 +                           ((op <=::real => real => bool) a x)
 10.5821 +                           ((op <=::real => real => bool) x b))
 10.5822 +                      g)
 10.5823 +                    ((All::((nat => real) => bool) => bool)
 10.5824 +                      (%D::nat => real.
 10.5825 +                          (All::((nat => real) => bool) => bool)
 10.5826 +                           (%p::nat => real.
 10.5827 +                               (op -->::bool => bool => bool)
 10.5828 +                                ((op &::bool => bool => bool)
 10.5829 +                                  ((tdiv::real * real
 10.5830 +    => (nat => real) * (nat => real) => bool)
 10.5831 +                                    ((Pair::real => real => real * real) a
 10.5832 +b)
 10.5833 +                                    ((Pair::(nat => real)
 10.5834 +      => (nat => real) => (nat => real) * (nat => real))
 10.5835 +D p))
 10.5836 +                                  ((fine::(real => real)
 10.5837 +    => (nat => real) * (nat => real) => bool)
 10.5838 +                                    g ((Pair::(nat => real)
 10.5839 +        => (nat => real) => (nat => real) * (nat => real))
 10.5840 +  D p)))
 10.5841 +                                ((op <::real => real => bool)
 10.5842 +                                  ((abs::real => real)
 10.5843 +                                    ((op -::real => real => real)
 10.5844 +((rsum::(nat => real) * (nat => real) => (real => real) => real)
 10.5845 +  ((Pair::(nat => real) => (nat => real) => (nat => real) * (nat => real)) D
 10.5846 +    p)
 10.5847 +  f)
 10.5848 +k))
 10.5849 +                                  e)))))))))"
 10.5850 +
 10.5851 +lemma Dint: "(All::(real => bool) => bool)
 10.5852 + (%a::real.
 10.5853 +     (All::(real => bool) => bool)
 10.5854 +      (%b::real.
 10.5855 +          (All::((real => real) => bool) => bool)
 10.5856 +           (%f::real => real.
 10.5857 +               (All::(real => bool) => bool)
 10.5858 +                (%k::real.
 10.5859 +                    (op =::bool => bool => bool)
 10.5860 +                     ((Dint::real * real => (real => real) => real => bool)
 10.5861 +                       ((Pair::real => real => real * real) a b) f k)
 10.5862 +                     ((All::(real => bool) => bool)
 10.5863 +                       (%e::real.
 10.5864 +                           (op -->::bool => bool => bool)
 10.5865 +                            ((op <::real => real => bool) (0::real) e)
 10.5866 +                            ((Ex::((real => real) => bool) => bool)
 10.5867 +                              (%g::real => real.
 10.5868 +                                  (op &::bool => bool => bool)
 10.5869 +                                   ((gauge::(real => bool)
 10.5870 +      => (real => real) => bool)
 10.5871 +                                     (%x::real.
 10.5872 +   (op &::bool => bool => bool) ((op <=::real => real => bool) a x)
 10.5873 +    ((op <=::real => real => bool) x b))
 10.5874 +                                     g)
 10.5875 +                                   ((All::((nat => real) => bool) => bool)
 10.5876 +                                     (%D::nat => real.
 10.5877 +   (All::((nat => real) => bool) => bool)
 10.5878 +    (%p::nat => real.
 10.5879 +        (op -->::bool => bool => bool)
 10.5880 +         ((op &::bool => bool => bool)
 10.5881 +           ((tdiv::real * real => (nat => real) * (nat => real) => bool)
 10.5882 +             ((Pair::real => real => real * real) a b)
 10.5883 +             ((Pair::(nat => real)
 10.5884 +                     => (nat => real) => (nat => real) * (nat => real))
 10.5885 +               D p))
 10.5886 +           ((fine::(real => real) => (nat => real) * (nat => real) => bool)
 10.5887 +             g ((Pair::(nat => real)
 10.5888 +                       => (nat => real) => (nat => real) * (nat => real))
 10.5889 +                 D p)))
 10.5890 +         ((op <::real => real => bool)
 10.5891 +           ((abs::real => real)
 10.5892 +             ((op -::real => real => real)
 10.5893 +               ((rsum::(nat => real) * (nat => real)
 10.5894 +                       => (real => real) => real)
 10.5895 +                 ((Pair::(nat => real)
 10.5896 +                         => (nat => real) => (nat => real) * (nat => real))
 10.5897 +                   D p)
 10.5898 +                 f)
 10.5899 +               k))
 10.5900 +           e))))))))))))"
 10.5901 +  by (import transc Dint)
 10.5902 +
 10.5903 +lemma DIVISION_0: "(All::(real => bool) => bool)
 10.5904 + (%a::real.
 10.5905 +     (All::(real => bool) => bool)
 10.5906 +      (%b::real.
 10.5907 +          (op -->::bool => bool => bool) ((op =::real => real => bool) a b)
 10.5908 +           ((op =::nat => nat => bool)
 10.5909 +             ((dsize::(nat => real) => nat)
 10.5910 +               (%n::nat.
 10.5911 +                   (If::bool => real => real => real)
 10.5912 +                    ((op =::nat => nat => bool) n (0::nat)) a b))
 10.5913 +             (0::nat))))"
 10.5914 +  by (import transc DIVISION_0)
 10.5915 +
 10.5916 +lemma DIVISION_1: "(All::(real => bool) => bool)
 10.5917 + (%a::real.
 10.5918 +     (All::(real => bool) => bool)
 10.5919 +      (%b::real.
 10.5920 +          (op -->::bool => bool => bool) ((op <::real => real => bool) a b)
 10.5921 +           ((op =::nat => nat => bool)
 10.5922 +             ((dsize::(nat => real) => nat)
 10.5923 +               (%n::nat.
 10.5924 +                   (If::bool => real => real => real)
 10.5925 +                    ((op =::nat => nat => bool) n (0::nat)) a b))
 10.5926 +             (1::nat))))"
 10.5927 +  by (import transc DIVISION_1)
 10.5928 +
 10.5929 +lemma DIVISION_SINGLE: "(All::(real => bool) => bool)
 10.5930 + (%a::real.
 10.5931 +     (All::(real => bool) => bool)
 10.5932 +      (%b::real.
 10.5933 +          (op -->::bool => bool => bool) ((op <=::real => real => bool) a b)
 10.5934 +           ((division::real * real => (nat => real) => bool)
 10.5935 +             ((Pair::real => real => real * real) a b)
 10.5936 +             (%n::nat.
 10.5937 +                 (If::bool => real => real => real)
 10.5938 +                  ((op =::nat => nat => bool) n (0::nat)) a b))))"
 10.5939 +  by (import transc DIVISION_SINGLE)
 10.5940 +
 10.5941 +lemma DIVISION_LHS: "(All::((nat => real) => bool) => bool)
 10.5942 + (%D::nat => real.
 10.5943 +     (All::(real => bool) => bool)
 10.5944 +      (%a::real.
 10.5945 +          (All::(real => bool) => bool)
 10.5946 +           (%b::real.
 10.5947 +               (op -->::bool => bool => bool)
 10.5948 +                ((division::real * real => (nat => real) => bool)
 10.5949 +                  ((Pair::real => real => real * real) a b) D)
 10.5950 +                ((op =::real => real => bool) (D (0::nat)) a))))"
 10.5951 +  by (import transc DIVISION_LHS)
 10.5952 +
 10.5953 +lemma DIVISION_THM: "(All::((nat => real) => bool) => bool)
 10.5954 + (%D::nat => real.
 10.5955 +     (All::(real => bool) => bool)
 10.5956 +      (%a::real.
 10.5957 +          (All::(real => bool) => bool)
 10.5958 +           (%b::real.
 10.5959 +               (op =::bool => bool => bool)
 10.5960 +                ((division::real * real => (nat => real) => bool)
 10.5961 +                  ((Pair::real => real => real * real) a b) D)
 10.5962 +                ((op &::bool => bool => bool)
 10.5963 +                  ((op =::real => real => bool) (D (0::nat)) a)
 10.5964 +                  ((op &::bool => bool => bool)
 10.5965 +                    ((All::(nat => bool) => bool)
 10.5966 +                      (%n::nat.
 10.5967 +                          (op -->::bool => bool => bool)
 10.5968 +                           ((op <::nat => nat => bool) n
 10.5969 +                             ((dsize::(nat => real) => nat) D))
 10.5970 +                           ((op <::real => real => bool) (D n)
 10.5971 +                             (D ((Suc::nat => nat) n)))))
 10.5972 +                    ((All::(nat => bool) => bool)
 10.5973 +                      (%n::nat.
 10.5974 +                          (op -->::bool => bool => bool)
 10.5975 +                           ((op <=::nat => nat => bool)
 10.5976 +                             ((dsize::(nat => real) => nat) D) n)
 10.5977 +                           ((op =::real => real => bool) (D n) b))))))))"
 10.5978 +  by (import transc DIVISION_THM)
 10.5979 +
 10.5980 +lemma DIVISION_RHS: "(All::((nat => real) => bool) => bool)
 10.5981 + (%D::nat => real.
 10.5982 +     (All::(real => bool) => bool)
 10.5983 +      (%a::real.
 10.5984 +          (All::(real => bool) => bool)
 10.5985 +           (%b::real.
 10.5986 +               (op -->::bool => bool => bool)
 10.5987 +                ((division::real * real => (nat => real) => bool)
 10.5988 +                  ((Pair::real => real => real * real) a b) D)
 10.5989 +                ((op =::real => real => bool)
 10.5990 +                  (D ((dsize::(nat => real) => nat) D)) b))))"
 10.5991 +  by (import transc DIVISION_RHS)
 10.5992 +
 10.5993 +lemma DIVISION_LT_GEN: "(All::((nat => real) => bool) => bool)
 10.5994 + (%D::nat => real.
 10.5995 +     (All::(real => bool) => bool)
 10.5996 +      (%a::real.
 10.5997 +          (All::(real => bool) => bool)
 10.5998 +           (%b::real.
 10.5999 +               (All::(nat => bool) => bool)
 10.6000 +                (%m::nat.
 10.6001 +                    (All::(nat => bool) => bool)
 10.6002 +                     (%n::nat.
 10.6003 +                         (op -->::bool => bool => bool)
 10.6004 +                          ((op &::bool => bool => bool)
 10.6005 +                            ((division::real * real
 10.6006 +  => (nat => real) => bool)
 10.6007 +                              ((Pair::real => real => real * real) a b) D)
 10.6008 +                            ((op &::bool => bool => bool)
 10.6009 +                              ((op <::nat => nat => bool) m n)
 10.6010 +                              ((op <=::nat => nat => bool) n
 10.6011 +                                ((dsize::(nat => real) => nat) D))))
 10.6012 +                          ((op <::real => real => bool) (D m) (D n)))))))"
 10.6013 +  by (import transc DIVISION_LT_GEN)
 10.6014 +
 10.6015 +lemma DIVISION_LT: "(All::((nat => real) => bool) => bool)
 10.6016 + (%D::nat => real.
 10.6017 +     (All::(real => bool) => bool)
 10.6018 +      (%a::real.
 10.6019 +          (All::(real => bool) => bool)
 10.6020 +           (%b::real.
 10.6021 +               (op -->::bool => bool => bool)
 10.6022 +                ((division::real * real => (nat => real) => bool)
 10.6023 +                  ((Pair::real => real => real * real) a b) D)
 10.6024 +                ((All::(nat => bool) => bool)
 10.6025 +                  (%n::nat.
 10.6026 +                      (op -->::bool => bool => bool)
 10.6027 +                       ((op <::nat => nat => bool) n
 10.6028 +                         ((dsize::(nat => real) => nat) D))
 10.6029 +                       ((op <::real => real => bool) (D (0::nat))
 10.6030 +                         (D ((Suc::nat => nat) n))))))))"
 10.6031 +  by (import transc DIVISION_LT)
 10.6032 +
 10.6033 +lemma DIVISION_LE: "(All::((nat => real) => bool) => bool)
 10.6034 + (%D::nat => real.
 10.6035 +     (All::(real => bool) => bool)
 10.6036 +      (%a::real.
 10.6037 +          (All::(real => bool) => bool)
 10.6038 +           (%b::real.
 10.6039 +               (op -->::bool => bool => bool)
 10.6040 +                ((division::real * real => (nat => real) => bool)
 10.6041 +                  ((Pair::real => real => real * real) a b) D)
 10.6042 +                ((op <=::real => real => bool) a b))))"
 10.6043 +  by (import transc DIVISION_LE)
 10.6044 +
 10.6045 +lemma DIVISION_GT: "(All::((nat => real) => bool) => bool)
 10.6046 + (%D::nat => real.
 10.6047 +     (All::(real => bool) => bool)
 10.6048 +      (%a::real.
 10.6049 +          (All::(real => bool) => bool)
 10.6050 +           (%b::real.
 10.6051 +               (op -->::bool => bool => bool)
 10.6052 +                ((division::real * real => (nat => real) => bool)
 10.6053 +                  ((Pair::real => real => real * real) a b) D)
 10.6054 +                ((All::(nat => bool) => bool)
 10.6055 +                  (%n::nat.
 10.6056 +                      (op -->::bool => bool => bool)
 10.6057 +                       ((op <::nat => nat => bool) n
 10.6058 +                         ((dsize::(nat => real) => nat) D))
 10.6059 +                       ((op <::real => real => bool) (D n)
 10.6060 +                         (D ((dsize::(nat => real) => nat) D))))))))"
 10.6061 +  by (import transc DIVISION_GT)
 10.6062 +
 10.6063 +lemma DIVISION_EQ: "(All::((nat => real) => bool) => bool)
 10.6064 + (%D::nat => real.
 10.6065 +     (All::(real => bool) => bool)
 10.6066 +      (%a::real.
 10.6067 +          (All::(real => bool) => bool)
 10.6068 +           (%b::real.
 10.6069 +               (op -->::bool => bool => bool)
 10.6070 +                ((division::real * real => (nat => real) => bool)
 10.6071 +                  ((Pair::real => real => real * real) a b) D)
 10.6072 +                ((op =::bool => bool => bool)
 10.6073 +                  ((op =::real => real => bool) a b)
 10.6074 +                  ((op =::nat => nat => bool)
 10.6075 +                    ((dsize::(nat => real) => nat) D) (0::nat))))))"
 10.6076 +  by (import transc DIVISION_EQ)
 10.6077 +
 10.6078 +lemma DIVISION_LBOUND: "(All::((nat => real) => bool) => bool)
 10.6079 + (%D::nat => real.
 10.6080 +     (All::(real => bool) => bool)
 10.6081 +      (%a::real.
 10.6082 +          (All::(real => bool) => bool)
 10.6083 +           (%b::real.
 10.6084 +               (op -->::bool => bool => bool)
 10.6085 +                ((division::real * real => (nat => real) => bool)
 10.6086 +                  ((Pair::real => real => real * real) a b) D)
 10.6087 +                ((All::(nat => bool) => bool)
 10.6088 +                  (%r::nat. (op <=::real => real => bool) a (D r))))))"
 10.6089 +  by (import transc DIVISION_LBOUND)
 10.6090 +
 10.6091 +lemma DIVISION_LBOUND_LT: "(All::((nat => real) => bool) => bool)
 10.6092 + (%D::nat => real.
 10.6093 +     (All::(real => bool) => bool)
 10.6094 +      (%a::real.
 10.6095 +          (All::(real => bool) => bool)
 10.6096 +           (%b::real.
 10.6097 +               (op -->::bool => bool => bool)
 10.6098 +                ((op &::bool => bool => bool)
 10.6099 +                  ((division::real * real => (nat => real) => bool)
 10.6100 +                    ((Pair::real => real => real * real) a b) D)
 10.6101 +                  ((Not::bool => bool)
 10.6102 +                    ((op =::nat => nat => bool)
 10.6103 +                      ((dsize::(nat => real) => nat) D) (0::nat))))
 10.6104 +                ((All::(nat => bool) => bool)
 10.6105 +                  (%n::nat.
 10.6106 +                      (op <::real => real => bool) a
 10.6107 +                       (D ((Suc::nat => nat) n)))))))"
 10.6108 +  by (import transc DIVISION_LBOUND_LT)
 10.6109 +
 10.6110 +lemma DIVISION_UBOUND: "(All::((nat => real) => bool) => bool)
 10.6111 + (%D::nat => real.
 10.6112 +     (All::(real => bool) => bool)
 10.6113 +      (%a::real.
 10.6114 +          (All::(real => bool) => bool)
 10.6115 +           (%b::real.
 10.6116 +               (op -->::bool => bool => bool)
 10.6117 +                ((division::real * real => (nat => real) => bool)
 10.6118 +                  ((Pair::real => real => real * real) a b) D)
 10.6119 +                ((All::(nat => bool) => bool)
 10.6120 +                  (%r::nat. (op <=::real => real => bool) (D r) b)))))"
 10.6121 +  by (import transc DIVISION_UBOUND)
 10.6122 +
 10.6123 +lemma DIVISION_UBOUND_LT: "(All::((nat => real) => bool) => bool)
 10.6124 + (%D::nat => real.
 10.6125 +     (All::(real => bool) => bool)
 10.6126 +      (%a::real.
 10.6127 +          (All::(real => bool) => bool)
 10.6128 +           (%b::real.
 10.6129 +               (All::(nat => bool) => bool)
 10.6130 +                (%n::nat.
 10.6131 +                    (op -->::bool => bool => bool)
 10.6132 +                     ((op &::bool => bool => bool)
 10.6133 +                       ((division::real * real => (nat => real) => bool)
 10.6134 +                         ((Pair::real => real => real * real) a b) D)
 10.6135 +                       ((op <::nat => nat => bool) n
 10.6136 +                         ((dsize::(nat => real) => nat) D)))
 10.6137 +                     ((op <::real => real => bool) (D n) b)))))"
 10.6138 +  by (import transc DIVISION_UBOUND_LT)
 10.6139 +
 10.6140 +lemma DIVISION_APPEND: "(All::(real => bool) => bool)
 10.6141 + (%a::real.
 10.6142 +     (All::(real => bool) => bool)
 10.6143 +      (%b::real.
 10.6144 +          (All::(real => bool) => bool)
 10.6145 +           (%c::real.
 10.6146 +               (op -->::bool => bool => bool)
 10.6147 +                ((op &::bool => bool => bool)
 10.6148 +                  ((Ex::((nat => real) => bool) => bool)
 10.6149 +                    (%D1::nat => real.
 10.6150 +                        (Ex::((nat => real) => bool) => bool)
 10.6151 +                         (%p1::nat => real.
 10.6152 +                             (op &::bool => bool => bool)
 10.6153 +                              ((tdiv::real * real
 10.6154 +=> (nat => real) * (nat => real) => bool)
 10.6155 +                                ((Pair::real => real => real * real) a b)
 10.6156 +                                ((Pair::(nat => real)
 10.6157 +  => (nat => real) => (nat => real) * (nat => real))
 10.6158 +                                  D1 p1))
 10.6159 +                              ((fine::(real => real)
 10.6160 +=> (nat => real) * (nat => real) => bool)
 10.6161 +                                (g::real => real)
 10.6162 +                                ((Pair::(nat => real)
 10.6163 +  => (nat => real) => (nat => real) * (nat => real))
 10.6164 +                                  D1 p1)))))
 10.6165 +                  ((Ex::((nat => real) => bool) => bool)
 10.6166 +                    (%D2::nat => real.
 10.6167 +                        (Ex::((nat => real) => bool) => bool)
 10.6168 +                         (%p2::nat => real.
 10.6169 +                             (op &::bool => bool => bool)
 10.6170 +                              ((tdiv::real * real
 10.6171 +=> (nat => real) * (nat => real) => bool)
 10.6172 +                                ((Pair::real => real => real * real) b c)
 10.6173 +                                ((Pair::(nat => real)
 10.6174 +  => (nat => real) => (nat => real) * (nat => real))
 10.6175 +                                  D2 p2))
 10.6176 +                              ((fine::(real => real)
 10.6177 +=> (nat => real) * (nat => real) => bool)
 10.6178 +                                g ((Pair::(nat => real)
 10.6179 +    => (nat => real) => (nat => real) * (nat => real))
 10.6180 +                                    D2 p2))))))
 10.6181 +                ((Ex::((nat => real) => bool) => bool)
 10.6182 +                  (%x::nat => real.
 10.6183 +                      (Ex::((nat => real) => bool) => bool)
 10.6184 +                       (%p::nat => real.
 10.6185 +                           (op &::bool => bool => bool)
 10.6186 +                            ((tdiv::real * real
 10.6187 +                                    => (nat => real) * (nat => real)
 10.6188 + => bool)
 10.6189 +                              ((Pair::real => real => real * real) a c)
 10.6190 +                              ((Pair::(nat => real)
 10.6191 +=> (nat => real) => (nat => real) * (nat => real))
 10.6192 +                                x p))
 10.6193 +                            ((fine::(real => real)
 10.6194 +                                    => (nat => real) * (nat => real)
 10.6195 + => bool)
 10.6196 +                              g ((Pair::(nat => real)
 10.6197 +  => (nat => real) => (nat => real) * (nat => real))
 10.6198 +                                  x p))))))))"
 10.6199 +  by (import transc DIVISION_APPEND)
 10.6200 +
 10.6201 +lemma DIVISION_EXISTS: "(All::(real => bool) => bool)
 10.6202 + (%a::real.
 10.6203 +     (All::(real => bool) => bool)
 10.6204 +      (%b::real.
 10.6205 +          (All::((real => real) => bool) => bool)
 10.6206 +           (%g::real => real.
 10.6207 +               (op -->::bool => bool => bool)
 10.6208 +                ((op &::bool => bool => bool)
 10.6209 +                  ((op <=::real => real => bool) a b)
 10.6210 +                  ((gauge::(real => bool) => (real => real) => bool)
 10.6211 +                    (%x::real.
 10.6212 +                        (op &::bool => bool => bool)
 10.6213 +                         ((op <=::real => real => bool) a x)
 10.6214 +                         ((op <=::real => real => bool) x b))
 10.6215 +                    g))
 10.6216 +                ((Ex::((nat => real) => bool) => bool)
 10.6217 +                  (%D::nat => real.
 10.6218 +                      (Ex::((nat => real) => bool) => bool)
 10.6219 +                       (%p::nat => real.
 10.6220 +                           (op &::bool => bool => bool)
 10.6221 +                            ((tdiv::real * real
 10.6222 +                                    => (nat => real) * (nat => real)
 10.6223 + => bool)
 10.6224 +                              ((Pair::real => real => real * real) a b)
 10.6225 +                              ((Pair::(nat => real)
 10.6226 +=> (nat => real) => (nat => real) * (nat => real))
 10.6227 +                                D p))
 10.6228 +                            ((fine::(real => real)
 10.6229 +                                    => (nat => real) * (nat => real)
 10.6230 + => bool)
 10.6231 +                              g ((Pair::(nat => real)
 10.6232 +  => (nat => real) => (nat => real) * (nat => real))
 10.6233 +                                  D p))))))))"
 10.6234 +  by (import transc DIVISION_EXISTS)
 10.6235 +
 10.6236 +lemma GAUGE_MIN: "(All::((real => bool) => bool) => bool)
 10.6237 + (%E::real => bool.
 10.6238 +     (All::((real => real) => bool) => bool)
 10.6239 +      (%g1::real => real.
 10.6240 +          (All::((real => real) => bool) => bool)
 10.6241 +           (%g2::real => real.
 10.6242 +               (op -->::bool => bool => bool)
 10.6243 +                ((op &::bool => bool => bool)
 10.6244 +                  ((gauge::(real => bool) => (real => real) => bool) E g1)
 10.6245 +                  ((gauge::(real => bool) => (real => real) => bool) E g2))
 10.6246 +                ((gauge::(real => bool) => (real => real) => bool) E
 10.6247 +                  (%x::real.
 10.6248 +                      (If::bool => real => real => real)
 10.6249 +                       ((op <::real => real => bool) (g1 x) (g2 x)) (g1 x)
 10.6250 +                       (g2 x))))))"
 10.6251 +  by (import transc GAUGE_MIN)
 10.6252 +
 10.6253 +lemma FINE_MIN: "(All::((real => real) => bool) => bool)
 10.6254 + (%g1::real => real.
 10.6255 +     (All::((real => real) => bool) => bool)
 10.6256 +      (%g2::real => real.
 10.6257 +          (All::((nat => real) => bool) => bool)
 10.6258 +           (%D::nat => real.
 10.6259 +               (All::((nat => real) => bool) => bool)
 10.6260 +                (%p::nat => real.
 10.6261 +                    (op -->::bool => bool => bool)
 10.6262 +                     ((fine::(real => real)
 10.6263 +                             => (nat => real) * (nat => real) => bool)
 10.6264 +                       (%x::real.
 10.6265 +                           (If::bool => real => real => real)
 10.6266 +                            ((op <::real => real => bool) (g1 x) (g2 x))
 10.6267 +                            (g1 x) (g2 x))
 10.6268 +                       ((Pair::(nat => real)
 10.6269 +                               => (nat => real)
 10.6270 +                                  => (nat => real) * (nat => real))
 10.6271 +                         D p))
 10.6272 +                     ((op &::bool => bool => bool)
 10.6273 +                       ((fine::(real => real)
 10.6274 +                               => (nat => real) * (nat => real) => bool)
 10.6275 +                         g1 ((Pair::(nat => real)
 10.6276 +                                    => (nat => real)
 10.6277 + => (nat => real) * (nat => real))
 10.6278 +                              D p))
 10.6279 +                       ((fine::(real => real)
 10.6280 +                               => (nat => real) * (nat => real) => bool)
 10.6281 +                         g2 ((Pair::(nat => real)
 10.6282 +                                    => (nat => real)
 10.6283 + => (nat => real) * (nat => real))
 10.6284 +                              D p)))))))"
 10.6285 +  by (import transc FINE_MIN)
 10.6286 +
 10.6287 +lemma DINT_UNIQ: "(All::(real => bool) => bool)
 10.6288 + (%a::real.
 10.6289 +     (All::(real => bool) => bool)
 10.6290 +      (%b::real.
 10.6291 +          (All::((real => real) => bool) => bool)
 10.6292 +           (%f::real => real.
 10.6293 +               (All::(real => bool) => bool)
 10.6294 +                (%k1::real.
 10.6295 +                    (All::(real => bool) => bool)
 10.6296 +                     (%k2::real.
 10.6297 +                         (op -->::bool => bool => bool)
 10.6298 +                          ((op &::bool => bool => bool)
 10.6299 +                            ((op <=::real => real => bool) a b)
 10.6300 +                            ((op &::bool => bool => bool)
 10.6301 +                              ((Dint::real * real
 10.6302 +=> (real => real) => real => bool)
 10.6303 +                                ((Pair::real => real => real * real) a b) f
 10.6304 +                                k1)
 10.6305 +                              ((Dint::real * real
 10.6306 +=> (real => real) => real => bool)
 10.6307 +                                ((Pair::real => real => real * real) a b) f
 10.6308 +                                k2)))
 10.6309 +                          ((op =::real => real => bool) k1 k2))))))"
 10.6310 +  by (import transc DINT_UNIQ)
 10.6311 +
 10.6312 +lemma INTEGRAL_NULL: "ALL f a. Dint (a, a) f 0"
 10.6313 +  by (import transc INTEGRAL_NULL)
 10.6314 +
 10.6315 +lemma FTC1: "(All::((real => real) => bool) => bool)
 10.6316 + (%f::real => real.
 10.6317 +     (All::((real => real) => bool) => bool)
 10.6318 +      (%f'::real => real.
 10.6319 +          (All::(real => bool) => bool)
 10.6320 +           (%a::real.
 10.6321 +               (All::(real => bool) => bool)
 10.6322 +                (%b::real.
 10.6323 +                    (op -->::bool => bool => bool)
 10.6324 +                     ((op &::bool => bool => bool)
 10.6325 +                       ((op <=::real => real => bool) a b)
 10.6326 +                       ((All::(real => bool) => bool)
 10.6327 +                         (%x::real.
 10.6328 +                             (op -->::bool => bool => bool)
 10.6329 +                              ((op &::bool => bool => bool)
 10.6330 +                                ((op <=::real => real => bool) a x)
 10.6331 +                                ((op <=::real => real => bool) x b))
 10.6332 +                              ((diffl::(real => real)
 10.6333 + => real => real => bool)
 10.6334 +                                f (f' x) x))))
 10.6335 +                     ((Dint::real * real => (real => real) => real => bool)
 10.6336 +                       ((Pair::real => real => real * real) a b) f'
 10.6337 +                       ((op -::real => real => real) (f b) (f a)))))))"
 10.6338 +  by (import transc FTC1)
 10.6339 +
 10.6340 +lemma MCLAURIN: "(All::((real => real) => bool) => bool)
 10.6341 + (%f::real => real.
 10.6342 +     (All::((nat => real => real) => bool) => bool)
 10.6343 +      (%diff::nat => real => real.
 10.6344 +          (All::(real => bool) => bool)
 10.6345 +           (%h::real.
 10.6346 +               (All::(nat => bool) => bool)
 10.6347 +                (%n::nat.
 10.6348 +                    (op -->::bool => bool => bool)
 10.6349 +                     ((op &::bool => bool => bool)
 10.6350 +                       ((op <::real => real => bool) (0::real) h)
 10.6351 +                       ((op &::bool => bool => bool)
 10.6352 +                         ((op <::nat => nat => bool) (0::nat) n)
 10.6353 +                         ((op &::bool => bool => bool)
 10.6354 +                           ((op =::(real => real) => (real => real) => bool)
 10.6355 +                             (diff (0::nat)) f)
 10.6356 +                           ((All::(nat => bool) => bool)
 10.6357 +                             (%m::nat.
 10.6358 +                                 (All::(real => bool) => bool)
 10.6359 +                                  (%t::real.
 10.6360 +(op -->::bool => bool => bool)
 10.6361 + ((op &::bool => bool => bool) ((op <::nat => nat => bool) m n)
 10.6362 +   ((op &::bool => bool => bool) ((op <=::real => real => bool) (0::real) t)
 10.6363 +     ((op <=::real => real => bool) t h)))
 10.6364 + ((diffl::(real => real) => real => real => bool) (diff m)
 10.6365 +   (diff ((Suc::nat => nat) m) t) t)))))))
 10.6366 +                     ((Ex::(real => bool) => bool)
 10.6367 +                       (%t::real.
 10.6368 +                           (op &::bool => bool => bool)
 10.6369 +                            ((op <::real => real => bool) (0::real) t)
 10.6370 +                            ((op &::bool => bool => bool)
 10.6371 +                              ((op <::real => real => bool) t h)
 10.6372 +                              ((op =::real => real => bool) (f h)
 10.6373 +                                ((op +::real => real => real)
 10.6374 +                                  ((real.sum::nat * nat
 10.6375 +        => (nat => real) => real)
 10.6376 +                                    ((Pair::nat => nat => nat * nat)
 10.6377 +(0::nat) n)
 10.6378 +                                    (%m::nat.
 10.6379 +  (op *::real => real => real)
 10.6380 +   ((op /::real => real => real) (diff m (0::real))
 10.6381 +     ((real::nat => real) ((FACT::nat => nat) m)))
 10.6382 +   ((op ^::real => nat => real) h m)))
 10.6383 +                                  ((op *::real => real => real)
 10.6384 +                                    ((op /::real => real => real) (diff n t)
 10.6385 +((real::nat => real) ((FACT::nat => nat) n)))
 10.6386 +                                    ((op ^::real => nat => real) h
 10.6387 +n)))))))))))"
 10.6388 +  by (import transc MCLAURIN)
 10.6389 +
 10.6390 +lemma MCLAURIN_NEG: "(All::((real => real) => bool) => bool)
 10.6391 + (%f::real => real.
 10.6392 +     (All::((nat => real => real) => bool) => bool)
 10.6393 +      (%diff::nat => real => real.
 10.6394 +          (All::(real => bool) => bool)
 10.6395 +           (%h::real.
 10.6396 +               (All::(nat => bool) => bool)
 10.6397 +                (%n::nat.
 10.6398 +                    (op -->::bool => bool => bool)
 10.6399 +                     ((op &::bool => bool => bool)
 10.6400 +                       ((op <::real => real => bool) h (0::real))
 10.6401 +                       ((op &::bool => bool => bool)
 10.6402 +                         ((op <::nat => nat => bool) (0::nat) n)
 10.6403 +                         ((op &::bool => bool => bool)
 10.6404 +                           ((op =::(real => real) => (real => real) => bool)
 10.6405 +                             (diff (0::nat)) f)
 10.6406 +                           ((All::(nat => bool) => bool)
 10.6407 +                             (%m::nat.
 10.6408 +                                 (All::(real => bool) => bool)
 10.6409 +                                  (%t::real.
 10.6410 +(op -->::bool => bool => bool)
 10.6411 + ((op &::bool => bool => bool) ((op <::nat => nat => bool) m n)
 10.6412 +   ((op &::bool => bool => bool) ((op <=::real => real => bool) h t)
 10.6413 +     ((op <=::real => real => bool) t (0::real))))
 10.6414 + ((diffl::(real => real) => real => real => bool) (diff m)
 10.6415 +   (diff ((Suc::nat => nat) m) t) t)))))))
 10.6416 +                     ((Ex::(real => bool) => bool)
 10.6417 +                       (%t::real.
 10.6418 +                           (op &::bool => bool => bool)
 10.6419 +                            ((op <::real => real => bool) h t)
 10.6420 +                            ((op &::bool => bool => bool)
 10.6421 +                              ((op <::real => real => bool) t (0::real))
 10.6422 +                              ((op =::real => real => bool) (f h)
 10.6423 +                                ((op +::real => real => real)
 10.6424 +                                  ((real.sum::nat * nat
 10.6425 +        => (nat => real) => real)
 10.6426 +                                    ((Pair::nat => nat => nat * nat)
 10.6427 +(0::nat) n)
 10.6428 +                                    (%m::nat.
 10.6429 +  (op *::real => real => real)
 10.6430 +   ((op /::real => real => real) (diff m (0::real))
 10.6431 +     ((real::nat => real) ((FACT::nat => nat) m)))
 10.6432 +   ((op ^::real => nat => real) h m)))
 10.6433 +                                  ((op *::real => real => real)
 10.6434 +                                    ((op /::real => real => real) (diff n t)
 10.6435 +((real::nat => real) ((FACT::nat => nat) n)))
 10.6436 +                                    ((op ^::real => nat => real) h
 10.6437 +n)))))))))))"
 10.6438 +  by (import transc MCLAURIN_NEG)
 10.6439 +
 10.6440 +lemma MCLAURIN_ALL_LT: "(All::((real => real) => bool) => bool)
 10.6441 + (%f::real => real.
 10.6442 +     (All::((nat => real => real) => bool) => bool)
 10.6443 +      (%diff::nat => real => real.
 10.6444 +          (op -->::bool => bool => bool)
 10.6445 +           ((op &::bool => bool => bool)
 10.6446 +             ((op =::(real => real) => (real => real) => bool)
 10.6447 +               (diff (0::nat)) f)
 10.6448 +             ((All::(nat => bool) => bool)
 10.6449 +               (%m::nat.
 10.6450 +                   (All::(real => bool) => bool)
 10.6451 +                    (%x::real.
 10.6452 +                        (diffl::(real => real) => real => real => bool)
 10.6453 +                         (diff m) (diff ((Suc::nat => nat) m) x) x))))
 10.6454 +           ((All::(real => bool) => bool)
 10.6455 +             (%x::real.
 10.6456 +                 (All::(nat => bool) => bool)
 10.6457 +                  (%n::nat.
 10.6458 +                      (op -->::bool => bool => bool)
 10.6459 +                       ((op &::bool => bool => bool)
 10.6460 +                         ((Not::bool => bool)
 10.6461 +                           ((op =::real => real => bool) x (0::real)))
 10.6462 +                         ((op <::nat => nat => bool) (0::nat) n))
 10.6463 +                       ((Ex::(real => bool) => bool)
 10.6464 +                         (%t::real.
 10.6465 +                             (op &::bool => bool => bool)
 10.6466 +                              ((op <::real => real => bool) (0::real)
 10.6467 +                                ((abs::real => real) t))
 10.6468 +                              ((op &::bool => bool => bool)
 10.6469 +                                ((op <::real => real => bool)
 10.6470 +                                  ((abs::real => real) t)
 10.6471 +                                  ((abs::real => real) x))
 10.6472 +                                ((op =::real => real => bool) (f x)
 10.6473 +                                  ((op +::real => real => real)
 10.6474 +                                    ((real.sum::nat * nat
 10.6475 +          => (nat => real) => real)
 10.6476 +((Pair::nat => nat => nat * nat) (0::nat) n)
 10.6477 +(%m::nat.
 10.6478 +    (op *::real => real => real)
 10.6479 +     ((op /::real => real => real) (diff m (0::real))
 10.6480 +       ((real::nat => real) ((FACT::nat => nat) m)))
 10.6481 +     ((op ^::real => nat => real) x m)))
 10.6482 +                                    ((op *::real => real => real)
 10.6483 +((op /::real => real => real) (diff n t)
 10.6484 +  ((real::nat => real) ((FACT::nat => nat) n)))
 10.6485 +((op ^::real => nat => real) x n))))))))))))"
 10.6486 +  by (import transc MCLAURIN_ALL_LT)
 10.6487 +
 10.6488 +lemma MCLAURIN_ZERO: "(All::((nat => real => real) => bool) => bool)
 10.6489 + (%diff::nat => real => real.
 10.6490 +     (All::(nat => bool) => bool)
 10.6491 +      (%n::nat.
 10.6492 +          (All::(real => bool) => bool)
 10.6493 +           (%x::real.
 10.6494 +               (op -->::bool => bool => bool)
 10.6495 +                ((op &::bool => bool => bool)
 10.6496 +                  ((op =::real => real => bool) x (0::real))
 10.6497 +                  ((op <::nat => nat => bool) (0::nat) n))
 10.6498 +                ((op =::real => real => bool)
 10.6499 +                  ((real.sum::nat * nat => (nat => real) => real)
 10.6500 +                    ((Pair::nat => nat => nat * nat) (0::nat) n)
 10.6501 +                    (%m::nat.
 10.6502 +                        (op *::real => real => real)
 10.6503 +                         ((op /::real => real => real) (diff m (0::real))
 10.6504 +                           ((real::nat => real) ((FACT::nat => nat) m)))
 10.6505 +                         ((op ^::real => nat => real) x m)))
 10.6506 +                  (diff (0::nat) (0::real))))))"
 10.6507 +  by (import transc MCLAURIN_ZERO)
 10.6508 +
 10.6509 +lemma MCLAURIN_ALL_LE: "(All::((real => real) => bool) => bool)
 10.6510 + (%f::real => real.
 10.6511 +     (All::((nat => real => real) => bool) => bool)
 10.6512 +      (%diff::nat => real => real.
 10.6513 +          (op -->::bool => bool => bool)
 10.6514 +           ((op &::bool => bool => bool)
 10.6515 +             ((op =::(real => real) => (real => real) => bool)
 10.6516 +               (diff (0::nat)) f)
 10.6517 +             ((All::(nat => bool) => bool)
 10.6518 +               (%m::nat.
 10.6519 +                   (All::(real => bool) => bool)
 10.6520 +                    (%x::real.
 10.6521 +                        (diffl::(real => real) => real => real => bool)
 10.6522 +                         (diff m) (diff ((Suc::nat => nat) m) x) x))))
 10.6523 +           ((All::(real => bool) => bool)
 10.6524 +             (%x::real.
 10.6525 +                 (All::(nat => bool) => bool)
 10.6526 +                  (%n::nat.
 10.6527 +                      (Ex::(real => bool) => bool)
 10.6528 +                       (%t::real.
 10.6529 +                           (op &::bool => bool => bool)
 10.6530 +                            ((op <=::real => real => bool)
 10.6531 +                              ((abs::real => real) t)
 10.6532 +                              ((abs::real => real) x))
 10.6533 +                            ((op =::real => real => bool) (f x)
 10.6534 +                              ((op +::real => real => real)
 10.6535 +                                ((real.sum::nat * nat
 10.6536 +      => (nat => real) => real)
 10.6537 +                                  ((Pair::nat => nat => nat * nat) (0::nat)
 10.6538 +                                    n)
 10.6539 +                                  (%m::nat.
 10.6540 +(op *::real => real => real)
 10.6541 + ((op /::real => real => real) (diff m (0::real))
 10.6542 +   ((real::nat => real) ((FACT::nat => nat) m)))
 10.6543 + ((op ^::real => nat => real) x m)))
 10.6544 +                                ((op *::real => real => real)
 10.6545 +                                  ((op /::real => real => real) (diff n t)
 10.6546 +                                    ((real::nat => real)
 10.6547 +((FACT::nat => nat) n)))
 10.6548 +                                  ((op ^::real => nat => real) x n))))))))))"
 10.6549 +  by (import transc MCLAURIN_ALL_LE)
 10.6550 +
 10.6551 +lemma MCLAURIN_EXP_LT: "(All::(real => bool) => bool)
 10.6552 + (%x::real.
 10.6553 +     (All::(nat => bool) => bool)
 10.6554 +      (%n::nat.
 10.6555 +          (op -->::bool => bool => bool)
 10.6556 +           ((op &::bool => bool => bool)
 10.6557 +             ((Not::bool => bool)
 10.6558 +               ((op =::real => real => bool) x (0::real)))
 10.6559 +             ((op <::nat => nat => bool) (0::nat) n))
 10.6560 +           ((Ex::(real => bool) => bool)
 10.6561 +             (%xa::real.
 10.6562 +                 (op &::bool => bool => bool)
 10.6563 +                  ((op <::real => real => bool) (0::real)
 10.6564 +                    ((abs::real => real) xa))
 10.6565 +                  ((op &::bool => bool => bool)
 10.6566 +                    ((op <::real => real => bool) ((abs::real => real) xa)
 10.6567 +                      ((abs::real => real) x))
 10.6568 +                    ((op =::real => real => bool) ((exp::real => real) x)
 10.6569 +                      ((op +::real => real => real)
 10.6570 +                        ((real.sum::nat * nat => (nat => real) => real)
 10.6571 +                          ((Pair::nat => nat => nat * nat) (0::nat) n)
 10.6572 +                          (%m::nat.
 10.6573 +                              (op /::real => real => real)
 10.6574 +                               ((op ^::real => nat => real) x m)
 10.6575 +                               ((real::nat => real)
 10.6576 +                                 ((FACT::nat => nat) m))))
 10.6577 +                        ((op *::real => real => real)
 10.6578 +                          ((op /::real => real => real)
 10.6579 +                            ((exp::real => real) xa)
 10.6580 +                            ((real::nat => real) ((FACT::nat => nat) n)))
 10.6581 +                          ((op ^::real => nat => real) x n)))))))))"
 10.6582 +  by (import transc MCLAURIN_EXP_LT)
 10.6583 +
 10.6584 +lemma MCLAURIN_EXP_LE: "ALL x n.
 10.6585 +   EX xa.
 10.6586 +      abs xa <= abs x &
 10.6587 +      exp x =
 10.6588 +      real.sum (0, n) (%m. x ^ m / real (FACT m)) +
 10.6589 +      exp xa / real (FACT n) * x ^ n"
 10.6590 +  by (import transc MCLAURIN_EXP_LE)
 10.6591 +
 10.6592 +lemma DIFF_LN_COMPOSITE: "(All::((real => real) => bool) => bool)
 10.6593 + (%g::real => real.
 10.6594 +     (All::(real => bool) => bool)
 10.6595 +      (%m::real.
 10.6596 +          (All::(real => bool) => bool)
 10.6597 +           (%x::real.
 10.6598 +               (op -->::bool => bool => bool)
 10.6599 +                ((op &::bool => bool => bool)
 10.6600 +                  ((diffl::(real => real) => real => real => bool) g m x)
 10.6601 +                  ((op <::real => real => bool) (0::real) (g x)))
 10.6602 +                ((diffl::(real => real) => real => real => bool)
 10.6603 +                  (%x::real. (ln::real => real) (g x))
 10.6604 +                  ((op *::real => real => real)
 10.6605 +                    ((inverse::real => real) (g x)) m)
 10.6606 +                  x))))"
 10.6607 +  by (import transc DIFF_LN_COMPOSITE)
 10.6608 +
 10.6609 +;end_setup
 10.6610 +
 10.6611 +;setup_theory poly
 10.6612 +
 10.6613 +consts
 10.6614 +  poly :: "real list => real => real" 
 10.6615 +
 10.6616 +specification (poly_primdef: poly) poly_def: "(ALL x. poly [] x = 0) & (ALL h t x. poly (h # t) x = h + x * poly t x)"
 10.6617 +  by (import poly poly_def)
 10.6618 +
 10.6619 +consts
 10.6620 +  poly_add :: "real list => real list => real list" 
 10.6621 +
 10.6622 +specification (poly_add_primdef: poly_add) poly_add_def: "(ALL l2. poly_add [] l2 = l2) &
 10.6623 +(ALL h t l2.
 10.6624 +    poly_add (h # t) l2 =
 10.6625 +    (if l2 = [] then h # t else (h + hd l2) # poly_add t (tl l2)))"
 10.6626 +  by (import poly poly_add_def)
 10.6627 +
 10.6628 +consts
 10.6629 +  "##" :: "real => real list => real list" ("##")
 10.6630 +
 10.6631 +specification ("##") poly_cmul_def: "(ALL c. ## c [] = []) & (ALL c h t. ## c (h # t) = c * h # ## c t)"
 10.6632 +  by (import poly poly_cmul_def)
 10.6633 +
 10.6634 +consts
 10.6635 +  poly_neg :: "real list => real list" 
 10.6636 +
 10.6637 +defs
 10.6638 +  poly_neg_primdef: "poly_neg == ## (- 1)"
 10.6639 +
 10.6640 +lemma poly_neg_def: "poly_neg = ## (- 1)"
 10.6641 +  by (import poly poly_neg_def)
 10.6642 +
 10.6643 +consts
 10.6644 +  poly_mul :: "real list => real list => real list" 
 10.6645 +
 10.6646 +specification (poly_mul_primdef: poly_mul) poly_mul_def: "(ALL l2. poly_mul [] l2 = []) &
 10.6647 +(ALL h t l2.
 10.6648 +    poly_mul (h # t) l2 =
 10.6649 +    (if t = [] then ## h l2 else poly_add (## h l2) (0 # poly_mul t l2)))"
 10.6650 +  by (import poly poly_mul_def)
 10.6651 +
 10.6652 +consts
 10.6653 +  poly_exp :: "real list => nat => real list" 
 10.6654 +
 10.6655 +specification (poly_exp_primdef: poly_exp) poly_exp_def: "(ALL p. poly_exp p 0 = [1]) &
 10.6656 +(ALL p n. poly_exp p (Suc n) = poly_mul p (poly_exp p n))"
 10.6657 +  by (import poly poly_exp_def)
 10.6658 +
 10.6659 +consts
 10.6660 +  poly_diff_aux :: "nat => real list => real list" 
 10.6661 +
 10.6662 +specification (poly_diff_aux_primdef: poly_diff_aux) poly_diff_aux_def: "(ALL n. poly_diff_aux n [] = []) &
 10.6663 +(ALL n h t. poly_diff_aux n (h # t) = real n * h # poly_diff_aux (Suc n) t)"
 10.6664 +  by (import poly poly_diff_aux_def)
 10.6665 +
 10.6666 +constdefs
 10.6667 +  diff :: "real list => real list" 
 10.6668 +  "diff == %l. if l = [] then [] else poly_diff_aux 1 (tl l)"
 10.6669 +
 10.6670 +lemma poly_diff_def: "ALL l. diff l = (if l = [] then [] else poly_diff_aux 1 (tl l))"
 10.6671 +  by (import poly poly_diff_def)
 10.6672 +
 10.6673 +lemma POLY_ADD_CLAUSES: "poly_add [] p2 = p2 &
 10.6674 +poly_add p1 [] = p1 &
 10.6675 +poly_add (h1 # t1) (h2 # t2) = (h1 + h2) # poly_add t1 t2"
 10.6676 +  by (import poly POLY_ADD_CLAUSES)
 10.6677 +
 10.6678 +lemma POLY_CMUL_CLAUSES: "## c [] = [] & ## c (h # t) = c * h # ## c t"
 10.6679 +  by (import poly POLY_CMUL_CLAUSES)
 10.6680 +
 10.6681 +lemma POLY_NEG_CLAUSES: "poly_neg [] = [] & poly_neg (h # t) = - h # poly_neg t"
 10.6682 +  by (import poly POLY_NEG_CLAUSES)
 10.6683 +
 10.6684 +lemma POLY_MUL_CLAUSES: "poly_mul [] p2 = [] &
 10.6685 +poly_mul [h1] p2 = ## h1 p2 &
 10.6686 +poly_mul (h1 # k1 # t1) p2 = poly_add (## h1 p2) (0 # poly_mul (k1 # t1) p2)"
 10.6687 +  by (import poly POLY_MUL_CLAUSES)
 10.6688 +
 10.6689 +lemma POLY_DIFF_CLAUSES: "diff [] = [] & diff [c] = [] & diff (h # t) = poly_diff_aux 1 t"
 10.6690 +  by (import poly POLY_DIFF_CLAUSES)
 10.6691 +
 10.6692 +lemma POLY_ADD: "ALL t p2 x. poly (poly_add t p2) x = poly t x + poly p2 x"
 10.6693 +  by (import poly POLY_ADD)
 10.6694 +
 10.6695 +lemma POLY_CMUL: "ALL t c x. poly (## c t) x = c * poly t x"
 10.6696 +  by (import poly POLY_CMUL)
 10.6697 +
 10.6698 +lemma POLY_NEG: "ALL x xa. poly (poly_neg x) xa = - poly x xa"
 10.6699 +  by (import poly POLY_NEG)
 10.6700 +
 10.6701 +lemma POLY_MUL: "ALL x t p2. poly (poly_mul t p2) x = poly t x * poly p2 x"
 10.6702 +  by (import poly POLY_MUL)
 10.6703 +
 10.6704 +lemma POLY_EXP: "ALL p n x. poly (poly_exp p n) x = poly p x ^ n"
 10.6705 +  by (import poly POLY_EXP)
 10.6706 +
 10.6707 +lemma POLY_DIFF_LEMMA: "ALL t n x.
 10.6708 +   diffl (%x. x ^ Suc n * poly t x)
 10.6709 +    (x ^ n * poly (poly_diff_aux (Suc n) t) x) x"
 10.6710 +  by (import poly POLY_DIFF_LEMMA)
 10.6711 +
 10.6712 +lemma POLY_DIFF: "ALL t x. diffl (poly t) (poly (diff t) x) x"
 10.6713 +  by (import poly POLY_DIFF)
 10.6714 +
 10.6715 +lemma POLY_DIFFERENTIABLE: "ALL l. All (differentiable (poly l))"
 10.6716 +  by (import poly POLY_DIFFERENTIABLE)
 10.6717 +
 10.6718 +lemma POLY_CONT: "ALL l. All (contl (poly l))"
 10.6719 +  by (import poly POLY_CONT)
 10.6720 +
 10.6721 +lemma POLY_IVT_POS: "(All::(real list => bool) => bool)
 10.6722 + (%x::real list.
 10.6723 +     (All::(real => bool) => bool)
 10.6724 +      (%xa::real.
 10.6725 +          (All::(real => bool) => bool)
 10.6726 +           (%xb::real.
 10.6727 +               (op -->::bool => bool => bool)
 10.6728 +                ((op &::bool => bool => bool)
 10.6729 +                  ((op <::real => real => bool) xa xb)
 10.6730 +                  ((op &::bool => bool => bool)
 10.6731 +                    ((op <::real => real => bool)
 10.6732 +                      ((poly::real list => real => real) x xa) (0::real))
 10.6733 +                    ((op <::real => real => bool) (0::real)
 10.6734 +                      ((poly::real list => real => real) x xb))))
 10.6735 +                ((Ex::(real => bool) => bool)
 10.6736 +                  (%xc::real.
 10.6737 +                      (op &::bool => bool => bool)
 10.6738 +                       ((op <::real => real => bool) xa xc)
 10.6739 +                       ((op &::bool => bool => bool)
 10.6740 +                         ((op <::real => real => bool) xc xb)
 10.6741 +                         ((op =::real => real => bool)
 10.6742 +                           ((poly::real list => real => real) x xc)
 10.6743 +                           (0::real))))))))"
 10.6744 +  by (import poly POLY_IVT_POS)
 10.6745 +
 10.6746 +lemma POLY_IVT_NEG: "(All::(real list => bool) => bool)
 10.6747 + (%p::real list.
 10.6748 +     (All::(real => bool) => bool)
 10.6749 +      (%a::real.
 10.6750 +          (All::(real => bool) => bool)
 10.6751 +           (%b::real.
 10.6752 +               (op -->::bool => bool => bool)
 10.6753 +                ((op &::bool => bool => bool)
 10.6754 +                  ((op <::real => real => bool) a b)
 10.6755 +                  ((op &::bool => bool => bool)
 10.6756 +                    ((op <::real => real => bool) (0::real)
 10.6757 +                      ((poly::real list => real => real) p a))
 10.6758 +                    ((op <::real => real => bool)
 10.6759 +                      ((poly::real list => real => real) p b) (0::real))))
 10.6760 +                ((Ex::(real => bool) => bool)
 10.6761 +                  (%x::real.
 10.6762 +                      (op &::bool => bool => bool)
 10.6763 +                       ((op <::real => real => bool) a x)
 10.6764 +                       ((op &::bool => bool => bool)
 10.6765 +                         ((op <::real => real => bool) x b)
 10.6766 +                         ((op =::real => real => bool)
 10.6767 +                           ((poly::real list => real => real) p x)
 10.6768 +                           (0::real))))))))"
 10.6769 +  by (import poly POLY_IVT_NEG)
 10.6770 +
 10.6771 +lemma POLY_MVT: "(All::(real list => bool) => bool)
 10.6772 + (%p::real list.
 10.6773 +     (All::(real => bool) => bool)
 10.6774 +      (%a::real.
 10.6775 +          (All::(real => bool) => bool)
 10.6776 +           (%b::real.
 10.6777 +               (op -->::bool => bool => bool)
 10.6778 +                ((op <::real => real => bool) a b)
 10.6779 +                ((Ex::(real => bool) => bool)
 10.6780 +                  (%x::real.
 10.6781 +                      (op &::bool => bool => bool)
 10.6782 +                       ((op <::real => real => bool) a x)
 10.6783 +                       ((op &::bool => bool => bool)
 10.6784 +                         ((op <::real => real => bool) x b)
 10.6785 +                         ((op =::real => real => bool)
 10.6786 +                           ((op -::real => real => real)
 10.6787 +                             ((poly::real list => real => real) p b)
 10.6788 +                             ((poly::real list => real => real) p a))
 10.6789 +                           ((op *::real => real => real)
 10.6790 +                             ((op -::real => real => real) b a)
 10.6791 +                             ((poly::real list => real => real)
 10.6792 +                               ((diff::real list => real list) p) x)))))))))"
 10.6793 +  by (import poly POLY_MVT)
 10.6794 +
 10.6795 +lemma POLY_ADD_RZERO: "ALL x. poly (poly_add x []) = poly x"
 10.6796 +  by (import poly POLY_ADD_RZERO)
 10.6797 +
 10.6798 +lemma POLY_MUL_ASSOC: "ALL x xa xb.
 10.6799 +   poly (poly_mul x (poly_mul xa xb)) = poly (poly_mul (poly_mul x xa) xb)"
 10.6800 +  by (import poly POLY_MUL_ASSOC)
 10.6801 +
 10.6802 +lemma POLY_EXP_ADD: "ALL x xa xb.
 10.6803 +   poly (poly_exp xb (xa + x)) =
 10.6804 +   poly (poly_mul (poly_exp xb xa) (poly_exp xb x))"
 10.6805 +  by (import poly POLY_EXP_ADD)
 10.6806 +
 10.6807 +lemma POLY_DIFF_AUX_ADD: "ALL t p2 n.
 10.6808 +   poly (poly_diff_aux n (poly_add t p2)) =
 10.6809 +   poly (poly_add (poly_diff_aux n t) (poly_diff_aux n p2))"
 10.6810 +  by (import poly POLY_DIFF_AUX_ADD)
 10.6811 +
 10.6812 +lemma POLY_DIFF_AUX_CMUL: "ALL t c n. poly (poly_diff_aux n (## c t)) = poly (## c (poly_diff_aux n t))"
 10.6813 +  by (import poly POLY_DIFF_AUX_CMUL)
 10.6814 +
 10.6815 +lemma POLY_DIFF_AUX_NEG: "ALL x xa.
 10.6816 +   poly (poly_diff_aux xa (poly_neg x)) =
 10.6817 +   poly (poly_neg (poly_diff_aux xa x))"
 10.6818 +  by (import poly POLY_DIFF_AUX_NEG)
 10.6819 +
 10.6820 +lemma POLY_DIFF_AUX_MUL_LEMMA: "ALL t n.
 10.6821 +   poly (poly_diff_aux (Suc n) t) = poly (poly_add (poly_diff_aux n t) t)"
 10.6822 +  by (import poly POLY_DIFF_AUX_MUL_LEMMA)
 10.6823 +
 10.6824 +lemma POLY_DIFF_ADD: "ALL t p2. poly (diff (poly_add t p2)) = poly (poly_add (diff t) (diff p2))"
 10.6825 +  by (import poly POLY_DIFF_ADD)
 10.6826 +
 10.6827 +lemma POLY_DIFF_CMUL: "ALL t c. poly (diff (## c t)) = poly (## c (diff t))"
 10.6828 +  by (import poly POLY_DIFF_CMUL)
 10.6829 +
 10.6830 +lemma POLY_DIFF_NEG: "ALL x. poly (diff (poly_neg x)) = poly (poly_neg (diff x))"
 10.6831 +  by (import poly POLY_DIFF_NEG)
 10.6832 +
 10.6833 +lemma POLY_DIFF_MUL_LEMMA: "ALL x xa. poly (diff (xa # x)) = poly (poly_add (0 # diff x) x)"
 10.6834 +  by (import poly POLY_DIFF_MUL_LEMMA)
 10.6835 +
 10.6836 +lemma POLY_DIFF_MUL: "ALL t p2.
 10.6837 +   poly (diff (poly_mul t p2)) =
 10.6838 +   poly (poly_add (poly_mul t (diff p2)) (poly_mul (diff t) p2))"
 10.6839 +  by (import poly POLY_DIFF_MUL)
 10.6840 +
 10.6841 +lemma POLY_DIFF_EXP: "ALL p n.
 10.6842 +   poly (diff (poly_exp p (Suc n))) =
 10.6843 +   poly (poly_mul (## (real (Suc n)) (poly_exp p n)) (diff p))"
 10.6844 +  by (import poly POLY_DIFF_EXP)
 10.6845 +
 10.6846 +lemma POLY_DIFF_EXP_PRIME: "ALL n a.
 10.6847 +   poly (diff (poly_exp [- a, 1] (Suc n))) =
 10.6848 +   poly (## (real (Suc n)) (poly_exp [- a, 1] n))"
 10.6849 +  by (import poly POLY_DIFF_EXP_PRIME)
 10.6850 +
 10.6851 +lemma POLY_LINEAR_REM: "ALL t h. EX q r. h # t = poly_add [r] (poly_mul [- a, 1] q)"
 10.6852 +  by (import poly POLY_LINEAR_REM)
 10.6853 +
 10.6854 +lemma POLY_LINEAR_DIVIDES: "ALL a t. (poly t a = 0) = (t = [] | (EX q. t = poly_mul [- a, 1] q))"
 10.6855 +  by (import poly POLY_LINEAR_DIVIDES)
 10.6856 +
 10.6857 +lemma POLY_LENGTH_MUL: "ALL x. length (poly_mul [- a, 1] x) = Suc (length x)"
 10.6858 +  by (import poly POLY_LENGTH_MUL)
 10.6859 +
 10.6860 +lemma POLY_ROOTS_INDEX_LEMMA: "(All::(nat => bool) => bool)
 10.6861 + (%n::nat.
 10.6862 +     (All::(real list => bool) => bool)
 10.6863 +      (%p::real list.
 10.6864 +          (op -->::bool => bool => bool)
 10.6865 +           ((op &::bool => bool => bool)
 10.6866 +             ((Not::bool => bool)
 10.6867 +               ((op =::(real => real) => (real => real) => bool)
 10.6868 +                 ((poly::real list => real => real) p)
 10.6869 +                 ((poly::real list => real => real) ([]::real list))))
 10.6870 +             ((op =::nat => nat => bool) ((size::real list => nat) p) n))
 10.6871 +           ((Ex::((nat => real) => bool) => bool)
 10.6872 +             (%i::nat => real.
 10.6873 +                 (All::(real => bool) => bool)
 10.6874 +                  (%x::real.
 10.6875 +                      (op -->::bool => bool => bool)
 10.6876 +                       ((op =::real => real => bool)
 10.6877 +                         ((poly::real list => real => real) p x) (0::real))
 10.6878 +                       ((Ex::(nat => bool) => bool)
 10.6879 +                         (%m::nat.
 10.6880 +                             (op &::bool => bool => bool)
 10.6881 +                              ((op <=::nat => nat => bool) m n)
 10.6882 +                              ((op =::real => real => bool) x (i m)))))))))"
 10.6883 +  by (import poly POLY_ROOTS_INDEX_LEMMA)
 10.6884 +
 10.6885 +lemma POLY_ROOTS_INDEX_LENGTH: "(All::(real list => bool) => bool)
 10.6886 + (%p::real list.
 10.6887 +     (op -->::bool => bool => bool)
 10.6888 +      ((Not::bool => bool)
 10.6889 +        ((op =::(real => real) => (real => real) => bool)
 10.6890 +          ((poly::real list => real => real) p)
 10.6891 +          ((poly::real list => real => real) ([]::real list))))
 10.6892 +      ((Ex::((nat => real) => bool) => bool)
 10.6893 +        (%i::nat => real.
 10.6894 +            (All::(real => bool) => bool)
 10.6895 +             (%x::real.
 10.6896 +                 (op -->::bool => bool => bool)
 10.6897 +                  ((op =::real => real => bool)
 10.6898 +                    ((poly::real list => real => real) p x) (0::real))
 10.6899 +                  ((Ex::(nat => bool) => bool)
 10.6900 +                    (%n::nat.
 10.6901 +                        (op &::bool => bool => bool)
 10.6902 +                         ((op <=::nat => nat => bool) n
 10.6903 +                           ((size::real list => nat) p))
 10.6904 +                         ((op =::real => real => bool) x (i n))))))))"
 10.6905 +  by (import poly POLY_ROOTS_INDEX_LENGTH)
 10.6906 +
 10.6907 +lemma POLY_ROOTS_FINITE_LEMMA: "(All::(real list => bool) => bool)
 10.6908 + (%p::real list.
 10.6909 +     (op -->::bool => bool => bool)
 10.6910 +      ((Not::bool => bool)
 10.6911 +        ((op =::(real => real) => (real => real) => bool)
 10.6912 +          ((poly::real list => real => real) p)
 10.6913 +          ((poly::real list => real => real) ([]::real list))))
 10.6914 +      ((Ex::(nat => bool) => bool)
 10.6915 +        (%N::nat.
 10.6916 +            (Ex::((nat => real) => bool) => bool)
 10.6917 +             (%i::nat => real.
 10.6918 +                 (All::(real => bool) => bool)
 10.6919 +                  (%x::real.
 10.6920 +                      (op -->::bool => bool => bool)
 10.6921 +                       ((op =::real => real => bool)
 10.6922 +                         ((poly::real list => real => real) p x) (0::real))
 10.6923 +                       ((Ex::(nat => bool) => bool)
 10.6924 +                         (%n::nat.
 10.6925 +                             (op &::bool => bool => bool)
 10.6926 +                              ((op <::nat => nat => bool) n N)
 10.6927 +                              ((op =::real => real => bool) x (i n)))))))))"
 10.6928 +  by (import poly POLY_ROOTS_FINITE_LEMMA)
 10.6929 +
 10.6930 +lemma FINITE_LEMMA: "(All::((nat => real) => bool) => bool)
 10.6931 + (%i::nat => real.
 10.6932 +     (All::(nat => bool) => bool)
 10.6933 +      (%x::nat.
 10.6934 +          (All::((real => bool) => bool) => bool)
 10.6935 +           (%xa::real => bool.
 10.6936 +               (op -->::bool => bool => bool)
 10.6937 +                ((All::(real => bool) => bool)
 10.6938 +                  (%xb::real.
 10.6939 +                      (op -->::bool => bool => bool) (xa xb)
 10.6940 +                       ((Ex::(nat => bool) => bool)
 10.6941 +                         (%n::nat.
 10.6942 +                             (op &::bool => bool => bool)
 10.6943 +                              ((op <::nat => nat => bool) n x)
 10.6944 +                              ((op =::real => real => bool) xb (i n))))))
 10.6945 +                ((Ex::(real => bool) => bool)
 10.6946 +                  (%a::real.
 10.6947 +                      (All::(real => bool) => bool)
 10.6948 +                       (%x::real.
 10.6949 +                           (op -->::bool => bool => bool) (xa x)
 10.6950 +                            ((op <::real => real => bool) x a)))))))"
 10.6951 +  by (import poly FINITE_LEMMA)
 10.6952 +
 10.6953 +lemma POLY_ROOTS_FINITE: "(All::(real list => bool) => bool)
 10.6954 + (%p::real list.
 10.6955 +     (op =::bool => bool => bool)
 10.6956 +      ((Not::bool => bool)
 10.6957 +        ((op =::(real => real) => (real => real) => bool)
 10.6958 +          ((poly::real list => real => real) p)
 10.6959 +          ((poly::real list => real => real) ([]::real list))))
 10.6960 +      ((Ex::(nat => bool) => bool)
 10.6961 +        (%N::nat.
 10.6962 +            (Ex::((nat => real) => bool) => bool)
 10.6963 +             (%i::nat => real.
 10.6964 +                 (All::(real => bool) => bool)
 10.6965 +                  (%x::real.
 10.6966 +                      (op -->::bool => bool => bool)
 10.6967 +                       ((op =::real => real => bool)
 10.6968 +                         ((poly::real list => real => real) p x) (0::real))
 10.6969 +                       ((Ex::(nat => bool) => bool)
 10.6970 +                         (%n::nat.
 10.6971 +                             (op &::bool => bool => bool)
 10.6972 +                              ((op <::nat => nat => bool) n N)
 10.6973 +                              ((op =::real => real => bool) x (i n)))))))))"
 10.6974 +  by (import poly POLY_ROOTS_FINITE)
 10.6975 +
 10.6976 +lemma POLY_ENTIRE_LEMMA: "(All::(real list => bool) => bool)
 10.6977 + (%p::real list.
 10.6978 +     (All::(real list => bool) => bool)
 10.6979 +      (%q::real list.
 10.6980 +          (op -->::bool => bool => bool)
 10.6981 +           ((op &::bool => bool => bool)
 10.6982 +             ((Not::bool => bool)
 10.6983 +               ((op =::(real => real) => (real => real) => bool)
 10.6984 +                 ((poly::real list => real => real) p)
 10.6985 +                 ((poly::real list => real => real) ([]::real list))))
 10.6986 +             ((Not::bool => bool)
 10.6987 +               ((op =::(real => real) => (real => real) => bool)
 10.6988 +                 ((poly::real list => real => real) q)
 10.6989 +                 ((poly::real list => real => real) ([]::real list)))))
 10.6990 +           ((Not::bool => bool)
 10.6991 +             ((op =::(real => real) => (real => real) => bool)
 10.6992 +               ((poly::real list => real => real)
 10.6993 +                 ((poly_mul::real list => real list => real list) p q))
 10.6994 +               ((poly::real list => real => real) ([]::real list))))))"
 10.6995 +  by (import poly POLY_ENTIRE_LEMMA)
 10.6996 +
 10.6997 +lemma POLY_ENTIRE: "ALL p q.
 10.6998 +   (poly (poly_mul p q) = poly []) = (poly p = poly [] | poly q = poly [])"
 10.6999 +  by (import poly POLY_ENTIRE)
 10.7000 +
 10.7001 +lemma POLY_MUL_LCANCEL: "ALL x xa xb.
 10.7002 +   (poly (poly_mul x xa) = poly (poly_mul x xb)) =
 10.7003 +   (poly x = poly [] | poly xa = poly xb)"
 10.7004 +  by (import poly POLY_MUL_LCANCEL)
 10.7005 +
 10.7006 +lemma POLY_EXP_EQ_0: "ALL p n. (poly (poly_exp p n) = poly []) = (poly p = poly [] & n ~= 0)"
 10.7007 +  by (import poly POLY_EXP_EQ_0)
 10.7008 +
 10.7009 +lemma POLY_PRIME_EQ_0: "ALL a. poly [a, 1] ~= poly []"
 10.7010 +  by (import poly POLY_PRIME_EQ_0)
 10.7011 +
 10.7012 +lemma POLY_EXP_PRIME_EQ_0: "ALL a n. poly (poly_exp [a, 1] n) ~= poly []"
 10.7013 +  by (import poly POLY_EXP_PRIME_EQ_0)
 10.7014 +
 10.7015 +lemma POLY_ZERO_LEMMA: "(All::(real => bool) => bool)
 10.7016 + (%h::real.
 10.7017 +     (All::(real list => bool) => bool)
 10.7018 +      (%t::real list.
 10.7019 +          (op -->::bool => bool => bool)
 10.7020 +           ((op =::(real => real) => (real => real) => bool)
 10.7021 +             ((poly::real list => real => real)
 10.7022 +               ((op #::real => real list => real list) h t))
 10.7023 +             ((poly::real list => real => real) ([]::real list)))
 10.7024 +           ((op &::bool => bool => bool)
 10.7025 +             ((op =::real => real => bool) h (0::real))
 10.7026 +             ((op =::(real => real) => (real => real) => bool)
 10.7027 +               ((poly::real list => real => real) t)
 10.7028 +               ((poly::real list => real => real) ([]::real list))))))"
 10.7029 +  by (import poly POLY_ZERO_LEMMA)
 10.7030 +
 10.7031 +lemma POLY_ZERO: "ALL t. (poly t = poly []) = list_all (%c. c = 0) t"
 10.7032 +  by (import poly POLY_ZERO)
 10.7033 +
 10.7034 +lemma POLY_DIFF_AUX_ISZERO: "ALL t n.
 10.7035 +   list_all (%c. c = 0) (poly_diff_aux (Suc n) t) = list_all (%c. c = 0) t"
 10.7036 +  by (import poly POLY_DIFF_AUX_ISZERO)
 10.7037 +
 10.7038 +lemma POLY_DIFF_ISZERO: "(All::(real list => bool) => bool)
 10.7039 + (%x::real list.
 10.7040 +     (op -->::bool => bool => bool)
 10.7041 +      ((op =::(real => real) => (real => real) => bool)
 10.7042 +        ((poly::real list => real => real)
 10.7043 +          ((diff::real list => real list) x))
 10.7044 +        ((poly::real list => real => real) ([]::real list)))
 10.7045 +      ((Ex::(real => bool) => bool)
 10.7046 +        (%h::real.
 10.7047 +            (op =::(real => real) => (real => real) => bool)
 10.7048 +             ((poly::real list => real => real) x)
 10.7049 +             ((poly::real list => real => real)
 10.7050 +               ((op #::real => real list => real list) h
 10.7051 +                 ([]::real list))))))"
 10.7052 +  by (import poly POLY_DIFF_ISZERO)
 10.7053 +
 10.7054 +lemma POLY_DIFF_ZERO: "(All::(real list => bool) => bool)
 10.7055 + (%x::real list.
 10.7056 +     (op -->::bool => bool => bool)
 10.7057 +      ((op =::(real => real) => (real => real) => bool)
 10.7058 +        ((poly::real list => real => real) x)
 10.7059 +        ((poly::real list => real => real) ([]::real list)))
 10.7060 +      ((op =::(real => real) => (real => real) => bool)
 10.7061 +        ((poly::real list => real => real)
 10.7062 +          ((diff::real list => real list) x))
 10.7063 +        ((poly::real list => real => real) ([]::real list))))"
 10.7064 +  by (import poly POLY_DIFF_ZERO)
 10.7065 +
 10.7066 +lemma POLY_DIFF_WELLDEF: "(All::(real list => bool) => bool)
 10.7067 + (%p::real list.
 10.7068 +     (All::(real list => bool) => bool)
 10.7069 +      (%q::real list.
 10.7070 +          (op -->::bool => bool => bool)
 10.7071 +           ((op =::(real => real) => (real => real) => bool)
 10.7072 +             ((poly::real list => real => real) p)
 10.7073 +             ((poly::real list => real => real) q))
 10.7074 +           ((op =::(real => real) => (real => real) => bool)
 10.7075 +             ((poly::real list => real => real)
 10.7076 +               ((diff::real list => real list) p))
 10.7077 +             ((poly::real list => real => real)
 10.7078 +               ((diff::real list => real list) q)))))"
 10.7079 +  by (import poly POLY_DIFF_WELLDEF)
 10.7080 +
 10.7081 +constdefs
 10.7082 +  poly_divides :: "real list => real list => bool" 
 10.7083 +  "poly_divides == %p1 p2. EX q. poly p2 = poly (poly_mul p1 q)"
 10.7084 +
 10.7085 +lemma poly_divides: "ALL p1 p2. poly_divides p1 p2 = (EX q. poly p2 = poly (poly_mul p1 q))"
 10.7086 +  by (import poly poly_divides)
 10.7087 +
 10.7088 +lemma POLY_PRIMES: "ALL a p q.
 10.7089 +   poly_divides [a, 1] (poly_mul p q) =
 10.7090 +   (poly_divides [a, 1] p | poly_divides [a, 1] q)"
 10.7091 +  by (import poly POLY_PRIMES)
 10.7092 +
 10.7093 +lemma POLY_DIVIDES_REFL: "ALL p. poly_divides p p"
 10.7094 +  by (import poly POLY_DIVIDES_REFL)
 10.7095 +
 10.7096 +lemma POLY_DIVIDES_TRANS: "(All::(real list => bool) => bool)
 10.7097 + (%p::real list.
 10.7098 +     (All::(real list => bool) => bool)
 10.7099 +      (%q::real list.
 10.7100 +          (All::(real list => bool) => bool)
 10.7101 +           (%r::real list.
 10.7102 +               (op -->::bool => bool => bool)
 10.7103 +                ((op &::bool => bool => bool)
 10.7104 +                  ((poly_divides::real list => real list => bool) p q)
 10.7105 +                  ((poly_divides::real list => real list => bool) q r))
 10.7106 +                ((poly_divides::real list => real list => bool) p r))))"
 10.7107 +  by (import poly POLY_DIVIDES_TRANS)
 10.7108 +
 10.7109 +lemma POLY_DIVIDES_EXP: "(All::(real list => bool) => bool)
 10.7110 + (%p::real list.
 10.7111 +     (All::(nat => bool) => bool)
 10.7112 +      (%m::nat.
 10.7113 +          (All::(nat => bool) => bool)
 10.7114 +           (%n::nat.
 10.7115 +               (op -->::bool => bool => bool)
 10.7116 +                ((op <=::nat => nat => bool) m n)
 10.7117 +                ((poly_divides::real list => real list => bool)
 10.7118 +                  ((poly_exp::real list => nat => real list) p m)
 10.7119 +                  ((poly_exp::real list => nat => real list) p n)))))"
 10.7120 +  by (import poly POLY_DIVIDES_EXP)
 10.7121 +
 10.7122 +lemma POLY_EXP_DIVIDES: "(All::(real list => bool) => bool)
 10.7123 + (%p::real list.
 10.7124 +     (All::(real list => bool) => bool)
 10.7125 +      (%q::real list.
 10.7126 +          (All::(nat => bool) => bool)
 10.7127 +           (%m::nat.
 10.7128 +               (All::(nat => bool) => bool)
 10.7129 +                (%n::nat.
 10.7130 +                    (op -->::bool => bool => bool)
 10.7131 +                     ((op &::bool => bool => bool)
 10.7132 +                       ((poly_divides::real list => real list => bool)
 10.7133 +                         ((poly_exp::real list => nat => real list) p n) q)
 10.7134 +                       ((op <=::nat => nat => bool) m n))
 10.7135 +                     ((poly_divides::real list => real list => bool)
 10.7136 +                       ((poly_exp::real list => nat => real list) p m)
 10.7137 +                       q)))))"
 10.7138 +  by (import poly POLY_EXP_DIVIDES)
 10.7139 +
 10.7140 +lemma POLY_DIVIDES_ADD: "(All::(real list => bool) => bool)
 10.7141 + (%p::real list.
 10.7142 +     (All::(real list => bool) => bool)
 10.7143 +      (%q::real list.
 10.7144 +          (All::(real list => bool) => bool)
 10.7145 +           (%r::real list.
 10.7146 +               (op -->::bool => bool => bool)
 10.7147 +                ((op &::bool => bool => bool)
 10.7148 +                  ((poly_divides::real list => real list => bool) p q)
 10.7149 +                  ((poly_divides::real list => real list => bool) p r))
 10.7150 +                ((poly_divides::real list => real list => bool) p
 10.7151 +                  ((poly_add::real list => real list => real list) q r)))))"
 10.7152 +  by (import poly POLY_DIVIDES_ADD)
 10.7153 +
 10.7154 +lemma POLY_DIVIDES_SUB: "(All::(real list => bool) => bool)
 10.7155 + (%p::real list.
 10.7156 +     (All::(real list => bool) => bool)
 10.7157 +      (%q::real list.
 10.7158 +          (All::(real list => bool) => bool)
 10.7159 +           (%r::real list.
 10.7160 +               (op -->::bool => bool => bool)
 10.7161 +                ((op &::bool => bool => bool)
 10.7162 +                  ((poly_divides::real list => real list => bool) p q)
 10.7163 +                  ((poly_divides::real list => real list => bool) p
 10.7164 +                    ((poly_add::real list => real list => real list) q r)))
 10.7165 +                ((poly_divides::real list => real list => bool) p r))))"
 10.7166 +  by (import poly POLY_DIVIDES_SUB)
 10.7167 +
 10.7168 +lemma POLY_DIVIDES_SUB2: "(All::(real list => bool) => bool)
 10.7169 + (%p::real list.
 10.7170 +     (All::(real list => bool) => bool)
 10.7171 +      (%q::real list.
 10.7172 +          (All::(real list => bool) => bool)
 10.7173 +           (%r::real list.
 10.7174 +               (op -->::bool => bool => bool)
 10.7175 +                ((op &::bool => bool => bool)
 10.7176 +                  ((poly_divides::real list => real list => bool) p r)
 10.7177 +                  ((poly_divides::real list => real list => bool) p
 10.7178 +                    ((poly_add::real list => real list => real list) q r)))
 10.7179 +                ((poly_divides::real list => real list => bool) p q))))"
 10.7180 +  by (import poly POLY_DIVIDES_SUB2)
 10.7181 +
 10.7182 +lemma POLY_DIVIDES_ZERO: "(All::(real list => bool) => bool)
 10.7183 + (%p::real list.
 10.7184 +     (All::(real list => bool) => bool)
 10.7185 +      (%q::real list.
 10.7186 +          (op -->::bool => bool => bool)
 10.7187 +           ((op =::(real => real) => (real => real) => bool)
 10.7188 +             ((poly::real list => real => real) p)
 10.7189 +             ((poly::real list => real => real) ([]::real list)))
 10.7190 +           ((poly_divides::real list => real list => bool) q p)))"
 10.7191 +  by (import poly POLY_DIVIDES_ZERO)
 10.7192 +
 10.7193 +lemma POLY_ORDER_EXISTS: "(All::(real => bool) => bool)
 10.7194 + (%a::real.
 10.7195 +     (All::(nat => bool) => bool)
 10.7196 +      (%d::nat.
 10.7197 +          (All::(real list => bool) => bool)
 10.7198 +           (%p::real list.
 10.7199 +               (op -->::bool => bool => bool)
 10.7200 +                ((op &::bool => bool => bool)
 10.7201 +                  ((op =::nat => nat => bool) ((size::real list => nat) p)
 10.7202 +                    d)
 10.7203 +                  ((Not::bool => bool)
 10.7204 +                    ((op =::(real => real) => (real => real) => bool)
 10.7205 +                      ((poly::real list => real => real) p)
 10.7206 +                      ((poly::real list => real => real) ([]::real list)))))
 10.7207 +                ((Ex::(nat => bool) => bool)
 10.7208 +                  (%x::nat.
 10.7209 +                      (op &::bool => bool => bool)
 10.7210 +                       ((poly_divides::real list => real list => bool)
 10.7211 +                         ((poly_exp::real list => nat => real list)
 10.7212 +                           ((op #::real => real list => real list)
 10.7213 +                             ((uminus::real => real) a)
 10.7214 +                             ((op #::real => real list => real list)
 10.7215 +                               (1::real) ([]::real list)))
 10.7216 +                           x)
 10.7217 +                         p)
 10.7218 +                       ((Not::bool => bool)
 10.7219 +                         ((poly_divides::real list => real list => bool)
 10.7220 +                           ((poly_exp::real list => nat => real list)
 10.7221 +                             ((op #::real => real list => real list)
 10.7222 +                               ((uminus::real => real) a)
 10.7223 +                               ((op #::real => real list => real list)
 10.7224 +                                 (1::real) ([]::real list)))
 10.7225 +                             ((Suc::nat => nat) x))
 10.7226 +                           p)))))))"
 10.7227 +  by (import poly POLY_ORDER_EXISTS)
 10.7228 +
 10.7229 +lemma POLY_ORDER: "(All::(real list => bool) => bool)
 10.7230 + (%p::real list.
 10.7231 +     (All::(real => bool) => bool)
 10.7232 +      (%a::real.
 10.7233 +          (op -->::bool => bool => bool)
 10.7234 +           ((Not::bool => bool)
 10.7235 +             ((op =::(real => real) => (real => real) => bool)
 10.7236 +               ((poly::real list => real => real) p)
 10.7237 +               ((poly::real list => real => real) ([]::real list))))
 10.7238 +           ((Ex1::(nat => bool) => bool)
 10.7239 +             (%n::nat.
 10.7240 +                 (op &::bool => bool => bool)
 10.7241 +                  ((poly_divides::real list => real list => bool)
 10.7242 +                    ((poly_exp::real list => nat => real list)
 10.7243 +                      ((op #::real => real list => real list)
 10.7244 +                        ((uminus::real => real) a)
 10.7245 +                        ((op #::real => real list => real list) (1::real)
 10.7246 +                          ([]::real list)))
 10.7247 +                      n)
 10.7248 +                    p)
 10.7249 +                  ((Not::bool => bool)
 10.7250 +                    ((poly_divides::real list => real list => bool)
 10.7251 +                      ((poly_exp::real list => nat => real list)
 10.7252 +                        ((op #::real => real list => real list)
 10.7253 +                          ((uminus::real => real) a)
 10.7254 +                          ((op #::real => real list => real list) (1::real)
 10.7255 +                            ([]::real list)))
 10.7256 +                        ((Suc::nat => nat) n))
 10.7257 +                      p))))))"
 10.7258 +  by (import poly POLY_ORDER)
 10.7259 +
 10.7260 +constdefs
 10.7261 +  poly_order :: "real => real list => nat" 
 10.7262 +  "poly_order ==
 10.7263 +%a p. SOME n.
 10.7264 +         poly_divides (poly_exp [- a, 1] n) p &
 10.7265 +         ~ poly_divides (poly_exp [- a, 1] (Suc n)) p"
 10.7266 +
 10.7267 +lemma poly_order: "ALL a p.
 10.7268 +   poly_order a p =
 10.7269 +   (SOME n.
 10.7270 +       poly_divides (poly_exp [- a, 1] n) p &
 10.7271 +       ~ poly_divides (poly_exp [- a, 1] (Suc n)) p)"
 10.7272 +  by (import poly poly_order)
 10.7273 +
 10.7274 +lemma ORDER: "ALL p a n.
 10.7275 +   (poly_divides (poly_exp [- a, 1] n) p &
 10.7276 +    ~ poly_divides (poly_exp [- a, 1] (Suc n)) p) =
 10.7277 +   (n = poly_order a p & poly p ~= poly [])"
 10.7278 +  by (import poly ORDER)
 10.7279 +
 10.7280 +lemma ORDER_THM: "(All::(real list => bool) => bool)
 10.7281 + (%p::real list.
 10.7282 +     (All::(real => bool) => bool)
 10.7283 +      (%a::real.
 10.7284 +          (op -->::bool => bool => bool)
 10.7285 +           ((Not::bool => bool)
 10.7286 +             ((op =::(real => real) => (real => real) => bool)
 10.7287 +               ((poly::real list => real => real) p)
 10.7288 +               ((poly::real list => real => real) ([]::real list))))
 10.7289 +           ((op &::bool => bool => bool)
 10.7290 +             ((poly_divides::real list => real list => bool)
 10.7291 +               ((poly_exp::real list => nat => real list)
 10.7292 +                 ((op #::real => real list => real list)
 10.7293 +                   ((uminus::real => real) a)
 10.7294 +                   ((op #::real => real list => real list) (1::real)
 10.7295 +                     ([]::real list)))
 10.7296 +                 ((poly_order::real => real list => nat) a p))
 10.7297 +               p)
 10.7298 +             ((Not::bool => bool)
 10.7299 +               ((poly_divides::real list => real list => bool)
 10.7300 +                 ((poly_exp::real list => nat => real list)
 10.7301 +                   ((op #::real => real list => real list)
 10.7302 +                     ((uminus::real => real) a)
 10.7303 +                     ((op #::real => real list => real list) (1::real)
 10.7304 +                       ([]::real list)))
 10.7305 +                   ((Suc::nat => nat)
 10.7306 +                     ((poly_order::real => real list => nat) a p)))
 10.7307 +                 p)))))"
 10.7308 +  by (import poly ORDER_THM)
 10.7309 +
 10.7310 +lemma ORDER_UNIQUE: "(All::(real list => bool) => bool)
 10.7311 + (%p::real list.
 10.7312 +     (All::(real => bool) => bool)
 10.7313 +      (%a::real.
 10.7314 +          (All::(nat => bool) => bool)
 10.7315 +           (%n::nat.
 10.7316 +               (op -->::bool => bool => bool)
 10.7317 +                ((op &::bool => bool => bool)
 10.7318 +                  ((Not::bool => bool)
 10.7319 +                    ((op =::(real => real) => (real => real) => bool)
 10.7320 +                      ((poly::real list => real => real) p)
 10.7321 +                      ((poly::real list => real => real) ([]::real list))))
 10.7322 +                  ((op &::bool => bool => bool)
 10.7323 +                    ((poly_divides::real list => real list => bool)
 10.7324 +                      ((poly_exp::real list => nat => real list)
 10.7325 +                        ((op #::real => real list => real list)
 10.7326 +                          ((uminus::real => real) a)
 10.7327 +                          ((op #::real => real list => real list) (1::real)
 10.7328 +                            ([]::real list)))
 10.7329 +                        n)
 10.7330 +                      p)
 10.7331 +                    ((Not::bool => bool)
 10.7332 +                      ((poly_divides::real list => real list => bool)
 10.7333 +                        ((poly_exp::real list => nat => real list)
 10.7334 +                          ((op #::real => real list => real list)
 10.7335 +                            ((uminus::real => real) a)
 10.7336 +                            ((op #::real => real list => real list)
 10.7337 +                              (1::real) ([]::real list)))
 10.7338 +                          ((Suc::nat => nat) n))
 10.7339 +                        p))))
 10.7340 +                ((op =::nat => nat => bool) n
 10.7341 +                  ((poly_order::real => real list => nat) a p)))))"
 10.7342 +  by (import poly ORDER_UNIQUE)
 10.7343 +
 10.7344 +lemma ORDER_POLY: "(All::(real list => bool) => bool)
 10.7345 + (%p::real list.
 10.7346 +     (All::(real list => bool) => bool)
 10.7347 +      (%q::real list.
 10.7348 +          (All::(real => bool) => bool)
 10.7349 +           (%a::real.
 10.7350 +               (op -->::bool => bool => bool)
 10.7351 +                ((op =::(real => real) => (real => real) => bool)
 10.7352 +                  ((poly::real list => real => real) p)
 10.7353 +                  ((poly::real list => real => real) q))
 10.7354 +                ((op =::nat => nat => bool)
 10.7355 +                  ((poly_order::real => real list => nat) a p)
 10.7356 +                  ((poly_order::real => real list => nat) a q)))))"
 10.7357 +  by (import poly ORDER_POLY)
 10.7358 +
 10.7359 +lemma ORDER_ROOT: "ALL p a. (poly p a = 0) = (poly p = poly [] | poly_order a p ~= 0)"
 10.7360 +  by (import poly ORDER_ROOT)
 10.7361 +
 10.7362 +lemma ORDER_DIVIDES: "ALL p a n.
 10.7363 +   poly_divides (poly_exp [- a, 1] n) p =
 10.7364 +   (poly p = poly [] | n <= poly_order a p)"
 10.7365 +  by (import poly ORDER_DIVIDES)
 10.7366 +
 10.7367 +lemma ORDER_DECOMP: "(All::(real list => bool) => bool)
 10.7368 + (%p::real list.
 10.7369 +     (All::(real => bool) => bool)
 10.7370 +      (%a::real.
 10.7371 +          (op -->::bool => bool => bool)
 10.7372 +           ((Not::bool => bool)
 10.7373 +             ((op =::(real => real) => (real => real) => bool)
 10.7374 +               ((poly::real list => real => real) p)
 10.7375 +               ((poly::real list => real => real) ([]::real list))))
 10.7376 +           ((Ex::(real list => bool) => bool)
 10.7377 +             (%x::real list.
 10.7378 +                 (op &::bool => bool => bool)
 10.7379 +                  ((op =::(real => real) => (real => real) => bool)
 10.7380 +                    ((poly::real list => real => real) p)
 10.7381 +                    ((poly::real list => real => real)
 10.7382 +                      ((poly_mul::real list => real list => real list)
 10.7383 +                        ((poly_exp::real list => nat => real list)
 10.7384 +                          ((op #::real => real list => real list)
 10.7385 +                            ((uminus::real => real) a)
 10.7386 +                            ((op #::real => real list => real list)
 10.7387 +                              (1::real) ([]::real list)))
 10.7388 +                          ((poly_order::real => real list => nat) a p))
 10.7389 +                        x)))
 10.7390 +                  ((Not::bool => bool)
 10.7391 +                    ((poly_divides::real list => real list => bool)
 10.7392 +                      ((op #::real => real list => real list)
 10.7393 +                        ((uminus::real => real) a)
 10.7394 +                        ((op #::real => real list => real list) (1::real)
 10.7395 +                          ([]::real list)))
 10.7396 +                      x))))))"
 10.7397 +  by (import poly ORDER_DECOMP)
 10.7398 +
 10.7399 +lemma ORDER_MUL: "(All::(real => bool) => bool)
 10.7400 + (%a::real.
 10.7401 +     (All::(real list => bool) => bool)
 10.7402 +      (%p::real list.
 10.7403 +          (All::(real list => bool) => bool)
 10.7404 +           (%q::real list.
 10.7405 +               (op -->::bool => bool => bool)
 10.7406 +                ((Not::bool => bool)
 10.7407 +                  ((op =::(real => real) => (real => real) => bool)
 10.7408 +                    ((poly::real list => real => real)
 10.7409 +                      ((poly_mul::real list => real list => real list) p q))
 10.7410 +                    ((poly::real list => real => real) ([]::real list))))
 10.7411 +                ((op =::nat => nat => bool)
 10.7412 +                  ((poly_order::real => real list => nat) a
 10.7413 +                    ((poly_mul::real list => real list => real list) p q))
 10.7414 +                  ((op +::nat => nat => nat)
 10.7415 +                    ((poly_order::real => real list => nat) a p)
 10.7416 +                    ((poly_order::real => real list => nat) a q))))))"
 10.7417 +  by (import poly ORDER_MUL)
 10.7418 +
 10.7419 +lemma ORDER_DIFF: "(All::(real list => bool) => bool)
 10.7420 + (%p::real list.
 10.7421 +     (All::(real => bool) => bool)
 10.7422 +      (%a::real.
 10.7423 +          (op -->::bool => bool => bool)
 10.7424 +           ((op &::bool => bool => bool)
 10.7425 +             ((Not::bool => bool)
 10.7426 +               ((op =::(real => real) => (real => real) => bool)
 10.7427 +                 ((poly::real list => real => real)
 10.7428 +                   ((diff::real list => real list) p))
 10.7429 +                 ((poly::real list => real => real) ([]::real list))))
 10.7430 +             ((Not::bool => bool)
 10.7431 +               ((op =::nat => nat => bool)
 10.7432 +                 ((poly_order::real => real list => nat) a p) (0::nat))))
 10.7433 +           ((op =::nat => nat => bool)
 10.7434 +             ((poly_order::real => real list => nat) a p)
 10.7435 +             ((Suc::nat => nat)
 10.7436 +               ((poly_order::real => real list => nat) a
 10.7437 +                 ((diff::real list => real list) p))))))"
 10.7438 +  by (import poly ORDER_DIFF)
 10.7439 +
 10.7440 +lemma POLY_SQUAREFREE_DECOMP_ORDER: "(All::(real list => bool) => bool)
 10.7441 + (%p::real list.
 10.7442 +     (All::(real list => bool) => bool)
 10.7443 +      (%q::real list.
 10.7444 +          (All::(real list => bool) => bool)
 10.7445 +           (%d::real list.
 10.7446 +               (All::(real list => bool) => bool)
 10.7447 +                (%e::real list.
 10.7448 +                    (All::(real list => bool) => bool)
 10.7449 +                     (%r::real list.
 10.7450 +                         (All::(real list => bool) => bool)
 10.7451 +                          (%s::real list.
 10.7452 +                              (op -->::bool => bool => bool)
 10.7453 +                               ((op &::bool => bool => bool)
 10.7454 +                                 ((Not::bool => bool)
 10.7455 +                                   ((op =::(real => real)
 10.7456 +     => (real => real) => bool)
 10.7457 +                                     ((poly::real list => real => real)
 10.7458 + ((diff::real list => real list) p))
 10.7459 +                                     ((poly::real list => real => real)
 10.7460 + ([]::real list))))
 10.7461 +                                 ((op &::bool => bool => bool)
 10.7462 +                                   ((op =::(real => real)
 10.7463 +     => (real => real) => bool)
 10.7464 +                                     ((poly::real list => real => real) p)
 10.7465 +                                     ((poly::real list => real => real)
 10.7466 + ((poly_mul::real list => real list => real list) q d)))
 10.7467 +                                   ((op &::bool => bool => bool)
 10.7468 +                                     ((op =::(real => real)
 10.7469 +       => (real => real) => bool)
 10.7470 + ((poly::real list => real => real) ((diff::real list => real list) p))
 10.7471 + ((poly::real list => real => real)
 10.7472 +   ((poly_mul::real list => real list => real list) e d)))
 10.7473 +                                     ((op =::(real => real)
 10.7474 +       => (real => real) => bool)
 10.7475 + ((poly::real list => real => real) d)
 10.7476 + ((poly::real list => real => real)
 10.7477 +   ((poly_add::real list => real list => real list)
 10.7478 +     ((poly_mul::real list => real list => real list) r p)
 10.7479 +     ((poly_mul::real list => real list => real list) s
 10.7480 +       ((diff::real list => real list) p))))))))
 10.7481 +                               ((All::(real => bool) => bool)
 10.7482 +                                 (%a::real.
 10.7483 +                                     (op =::nat => nat => bool)
 10.7484 +((poly_order::real => real list => nat) a q)
 10.7485 +((If::bool => nat => nat => nat)
 10.7486 +  ((op =::nat => nat => bool) ((poly_order::real => real list => nat) a p)
 10.7487 +    (0::nat))
 10.7488 +  (0::nat) (1::nat))))))))))"
 10.7489 +  by (import poly POLY_SQUAREFREE_DECOMP_ORDER)
 10.7490 +
 10.7491 +constdefs
 10.7492 +  rsquarefree :: "real list => bool" 
 10.7493 +  "rsquarefree ==
 10.7494 +%p. poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1)"
 10.7495 +
 10.7496 +lemma rsquarefree: "ALL p.
 10.7497 +   rsquarefree p =
 10.7498 +   (poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1))"
 10.7499 +  by (import poly rsquarefree)
 10.7500 +
 10.7501 +lemma RSQUAREFREE_ROOTS: "ALL p. rsquarefree p = (ALL a. ~ (poly p a = 0 & poly (diff p) a = 0))"
 10.7502 +  by (import poly RSQUAREFREE_ROOTS)
 10.7503 +
 10.7504 +lemma RSQUAREFREE_DECOMP: "(All::(real list => bool) => bool)
 10.7505 + (%p::real list.
 10.7506 +     (All::(real => bool) => bool)
 10.7507 +      (%a::real.
 10.7508 +          (op -->::bool => bool => bool)
 10.7509 +           ((op &::bool => bool => bool)
 10.7510 +             ((rsquarefree::real list => bool) p)
 10.7511 +             ((op =::real => real => bool)
 10.7512 +               ((poly::real list => real => real) p a) (0::real)))
 10.7513 +           ((Ex::(real list => bool) => bool)
 10.7514 +             (%q::real list.
 10.7515 +                 (op &::bool => bool => bool)
 10.7516 +                  ((op =::(real => real) => (real => real) => bool)
 10.7517 +                    ((poly::real list => real => real) p)
 10.7518 +                    ((poly::real list => real => real)
 10.7519 +                      ((poly_mul::real list => real list => real list)
 10.7520 +                        ((op #::real => real list => real list)
 10.7521 +                          ((uminus::real => real) a)
 10.7522 +                          ((op #::real => real list => real list) (1::real)
 10.7523 +                            ([]::real list)))
 10.7524 +                        q)))
 10.7525 +                  ((Not::bool => bool)
 10.7526 +                    ((op =::real => real => bool)
 10.7527 +                      ((poly::real list => real => real) q a)
 10.7528 +                      (0::real)))))))"
 10.7529 +  by (import poly RSQUAREFREE_DECOMP)
 10.7530 +
 10.7531 +lemma POLY_SQUAREFREE_DECOMP: "(All::(real list => bool) => bool)
 10.7532 + (%p::real list.
 10.7533 +     (All::(real list => bool) => bool)
 10.7534 +      (%q::real list.
 10.7535 +          (All::(real list => bool) => bool)
 10.7536 +           (%d::real list.
 10.7537 +               (All::(real list => bool) => bool)
 10.7538 +                (%e::real list.
 10.7539 +                    (All::(real list => bool) => bool)
 10.7540 +                     (%r::real list.
 10.7541 +                         (All::(real list => bool) => bool)
 10.7542 +                          (%s::real list.
 10.7543 +                              (op -->::bool => bool => bool)
 10.7544 +                               ((op &::bool => bool => bool)
 10.7545 +                                 ((Not::bool => bool)
 10.7546 +                                   ((op =::(real => real)
 10.7547 +     => (real => real) => bool)
 10.7548 +                                     ((poly::real list => real => real)
 10.7549 + ((diff::real list => real list) p))
 10.7550 +                                     ((poly::real list => real => real)
 10.7551 + ([]::real list))))
 10.7552 +                                 ((op &::bool => bool => bool)
 10.7553 +                                   ((op =::(real => real)
 10.7554 +     => (real => real) => bool)
 10.7555 +                                     ((poly::real list => real => real) p)
 10.7556 +                                     ((poly::real list => real => real)
 10.7557 + ((poly_mul::real list => real list => real list) q d)))
 10.7558 +                                   ((op &::bool => bool => bool)
 10.7559 +                                     ((op =::(real => real)
 10.7560 +       => (real => real) => bool)
 10.7561 + ((poly::real list => real => real) ((diff::real list => real list) p))
 10.7562 + ((poly::real list => real => real)
 10.7563 +   ((poly_mul::real list => real list => real list) e d)))
 10.7564 +                                     ((op =::(real => real)
 10.7565 +       => (real => real) => bool)
 10.7566 + ((poly::real list => real => real) d)
 10.7567 + ((poly::real list => real => real)
 10.7568 +   ((poly_add::real list => real list => real list)
 10.7569 +     ((poly_mul::real list => real list => real list) r p)
 10.7570 +     ((poly_mul::real list => real list => real list) s
 10.7571 +       ((diff::real list => real list) p))))))))
 10.7572 +                               ((op &::bool => bool => bool)
 10.7573 +                                 ((rsquarefree::real list => bool) q)
 10.7574 +                                 ((All::(real => bool) => bool)
 10.7575 +                                   (%x::real.
 10.7576 + (op =::bool => bool => bool)
 10.7577 +  ((op =::real => real => bool) ((poly::real list => real => real) q x)
 10.7578 +    (0::real))
 10.7579 +  ((op =::real => real => bool) ((poly::real list => real => real) p x)
 10.7580 +    (0::real)))))))))))"
 10.7581 +  by (import poly POLY_SQUAREFREE_DECOMP)
 10.7582 +
 10.7583 +consts
 10.7584 +  normalize :: "real list => real list" 
 10.7585 +
 10.7586 +specification (normalize) normalize: "normalize [] = [] &
 10.7587 +(ALL h t.
 10.7588 +    normalize (h # t) =
 10.7589 +    (if normalize t = [] then if h = 0 then [] else [h]
 10.7590 +     else h # normalize t))"
 10.7591 +  by (import poly normalize)
 10.7592 +
 10.7593 +lemma POLY_NORMALIZE: "ALL t. poly (normalize t) = poly t"
 10.7594 +  by (import poly POLY_NORMALIZE)
 10.7595 +
 10.7596 +constdefs
 10.7597 +  degree :: "real list => nat" 
 10.7598 +  "degree == %p. PRE (length (normalize p))"
 10.7599 +
 10.7600 +lemma degree: "ALL p. degree p = PRE (length (normalize p))"
 10.7601 +  by (import poly degree)
 10.7602 +
 10.7603 +lemma DEGREE_ZERO: "(All::(real list => bool) => bool)
 10.7604 + (%p::real list.
 10.7605 +     (op -->::bool => bool => bool)
 10.7606 +      ((op =::(real => real) => (real => real) => bool)
 10.7607 +        ((poly::real list => real => real) p)
 10.7608 +        ((poly::real list => real => real) ([]::real list)))
 10.7609 +      ((op =::nat => nat => bool) ((degree::real list => nat) p) (0::nat)))"
 10.7610 +  by (import poly DEGREE_ZERO)
 10.7611 +
 10.7612 +lemma POLY_ROOTS_FINITE_SET: "(All::(real list => bool) => bool)
 10.7613 + (%p::real list.
 10.7614 +     (op -->::bool => bool => bool)
 10.7615 +      ((Not::bool => bool)
 10.7616 +        ((op =::(real => real) => (real => real) => bool)
 10.7617 +          ((poly::real list => real => real) p)
 10.7618 +          ((poly::real list => real => real) ([]::real list))))
 10.7619 +      ((FINITE::(real => bool) => bool)
 10.7620 +        ((GSPEC::(real => real * bool) => real => bool)
 10.7621 +          (%x::real.
 10.7622 +              (Pair::real => bool => real * bool) x
 10.7623 +               ((op =::real => real => bool)
 10.7624 +                 ((poly::real list => real => real) p x) (0::real))))))"
 10.7625 +  by (import poly POLY_ROOTS_FINITE_SET)
 10.7626 +
 10.7627 +lemma POLY_MONO: "(All::(real => bool) => bool)
 10.7628 + (%x::real.
 10.7629 +     (All::(real => bool) => bool)
 10.7630 +      (%k::real.
 10.7631 +          (All::(real list => bool) => bool)
 10.7632 +           (%xa::real list.
 10.7633 +               (op -->::bool => bool => bool)
 10.7634 +                ((op <=::real => real => bool) ((abs::real => real) x) k)
 10.7635 +                ((op <=::real => real => bool)
 10.7636 +                  ((abs::real => real)
 10.7637 +                    ((poly::real list => real => real) xa x))
 10.7638 +                  ((poly::real list => real => real)
 10.7639 +                    ((map::(real => real) => real list => real list)
 10.7640 +                      (abs::real => real) xa)
 10.7641 +                    k)))))"
 10.7642 +  by (import poly POLY_MONO)
 10.7643 +
 10.7644 +;end_setup
 10.7645 +
 10.7646 +end
 10.7647 +
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/src/HOL/Import/HOL/HOL4Vec.thy	Fri Apr 02 17:37:45 2004 +0200
    11.3 @@ -0,0 +1,1212 @@
    11.4 +theory HOL4Vec = HOL4Base:
    11.5 +
    11.6 +;setup_theory res_quan
    11.7 +
    11.8 +lemma RES_FORALL_CONJ_DIST: "ALL P Q R. RES_FORALL P (%i. Q i & R i) = (RES_FORALL P Q & RES_FORALL P R)"
    11.9 +  by (import res_quan RES_FORALL_CONJ_DIST)
   11.10 +
   11.11 +lemma RES_FORALL_DISJ_DIST: "ALL P Q R. RES_FORALL (%j. P j | Q j) R = (RES_FORALL P R & RES_FORALL Q R)"
   11.12 +  by (import res_quan RES_FORALL_DISJ_DIST)
   11.13 +
   11.14 +lemma RES_FORALL_UNIQUE: "ALL x xa. RES_FORALL (op = xa) x = x xa"
   11.15 +  by (import res_quan RES_FORALL_UNIQUE)
   11.16 +
   11.17 +lemma RES_FORALL_FORALL: "ALL (P::'a => bool) (R::'a => 'b => bool) x::'b.
   11.18 +   (ALL x::'b. RES_FORALL P (%i::'a. R i x)) =
   11.19 +   RES_FORALL P (%i::'a. All (R i))"
   11.20 +  by (import res_quan RES_FORALL_FORALL)
   11.21 +
   11.22 +lemma RES_FORALL_REORDER: "ALL P Q R.
   11.23 +   RES_FORALL P (%i. RES_FORALL Q (R i)) =
   11.24 +   RES_FORALL Q (%j. RES_FORALL P (%i. R i j))"
   11.25 +  by (import res_quan RES_FORALL_REORDER)
   11.26 +
   11.27 +lemma RES_FORALL_EMPTY: "All (RES_FORALL EMPTY)"
   11.28 +  by (import res_quan RES_FORALL_EMPTY)
   11.29 +
   11.30 +lemma RES_FORALL_UNIV: "ALL p. RES_FORALL pred_set.UNIV p = All p"
   11.31 +  by (import res_quan RES_FORALL_UNIV)
   11.32 +
   11.33 +lemma RES_FORALL_NULL: "ALL p m. RES_FORALL p (%x. m) = (p = EMPTY | m)"
   11.34 +  by (import res_quan RES_FORALL_NULL)
   11.35 +
   11.36 +lemma RES_EXISTS_DISJ_DIST: "(All::(('a => bool) => bool) => bool)
   11.37 + (%P::'a => bool.
   11.38 +     (All::(('a => bool) => bool) => bool)
   11.39 +      (%Q::'a => bool.
   11.40 +          (All::(('a => bool) => bool) => bool)
   11.41 +           (%R::'a => bool.
   11.42 +               (op =::bool => bool => bool)
   11.43 +                ((RES_EXISTS::('a => bool) => ('a => bool) => bool) P
   11.44 +                  (%i::'a. (op |::bool => bool => bool) (Q i) (R i)))
   11.45 +                ((op |::bool => bool => bool)
   11.46 +                  ((RES_EXISTS::('a => bool) => ('a => bool) => bool) P Q)
   11.47 +                  ((RES_EXISTS::('a => bool) => ('a => bool) => bool) P
   11.48 +                    R)))))"
   11.49 +  by (import res_quan RES_EXISTS_DISJ_DIST)
   11.50 +
   11.51 +lemma RES_DISJ_EXISTS_DIST: "ALL P Q R. RES_EXISTS (%i. P i | Q i) R = (RES_EXISTS P R | RES_EXISTS Q R)"
   11.52 +  by (import res_quan RES_DISJ_EXISTS_DIST)
   11.53 +
   11.54 +lemma RES_EXISTS_EQUAL: "ALL x xa. RES_EXISTS (op = xa) x = x xa"
   11.55 +  by (import res_quan RES_EXISTS_EQUAL)
   11.56 +
   11.57 +lemma RES_EXISTS_REORDER: "ALL P Q R.
   11.58 +   RES_EXISTS P (%i. RES_EXISTS Q (R i)) =
   11.59 +   RES_EXISTS Q (%j. RES_EXISTS P (%i. R i j))"
   11.60 +  by (import res_quan RES_EXISTS_REORDER)
   11.61 +
   11.62 +lemma RES_EXISTS_EMPTY: "ALL p. ~ RES_EXISTS EMPTY p"
   11.63 +  by (import res_quan RES_EXISTS_EMPTY)
   11.64 +
   11.65 +lemma RES_EXISTS_UNIV: "ALL p. RES_EXISTS pred_set.UNIV p = Ex p"
   11.66 +  by (import res_quan RES_EXISTS_UNIV)
   11.67 +
   11.68 +lemma RES_EXISTS_NULL: "ALL p m. RES_EXISTS p (%x. m) = (p ~= EMPTY & m)"
   11.69 +  by (import res_quan RES_EXISTS_NULL)
   11.70 +
   11.71 +lemma RES_EXISTS_ALT: "ALL p m. RES_EXISTS p m = (IN (RES_SELECT p m) p & m (RES_SELECT p m))"
   11.72 +  by (import res_quan RES_EXISTS_ALT)
   11.73 +
   11.74 +lemma RES_EXISTS_UNIQUE_EMPTY: "ALL p. ~ RES_EXISTS_UNIQUE EMPTY p"
   11.75 +  by (import res_quan RES_EXISTS_UNIQUE_EMPTY)
   11.76 +
   11.77 +lemma RES_EXISTS_UNIQUE_UNIV: "ALL p. RES_EXISTS_UNIQUE pred_set.UNIV p = Ex1 p"
   11.78 +  by (import res_quan RES_EXISTS_UNIQUE_UNIV)
   11.79 +
   11.80 +lemma RES_EXISTS_UNIQUE_NULL: "ALL p m. RES_EXISTS_UNIQUE p (%x. m) = ((EX x. p = INSERT x EMPTY) & m)"
   11.81 +  by (import res_quan RES_EXISTS_UNIQUE_NULL)
   11.82 +
   11.83 +lemma RES_EXISTS_UNIQUE_ALT: "ALL p m.
   11.84 +   RES_EXISTS_UNIQUE p m =
   11.85 +   RES_EXISTS p (%x. m x & RES_FORALL p (%y. m y --> y = x))"
   11.86 +  by (import res_quan RES_EXISTS_UNIQUE_ALT)
   11.87 +
   11.88 +lemma RES_SELECT_EMPTY: "ALL p. RES_SELECT EMPTY p = (SOME x. False)"
   11.89 +  by (import res_quan RES_SELECT_EMPTY)
   11.90 +
   11.91 +lemma RES_SELECT_UNIV: "ALL p. RES_SELECT pred_set.UNIV p = Eps p"
   11.92 +  by (import res_quan RES_SELECT_UNIV)
   11.93 +
   11.94 +lemma RES_ABSTRACT: "ALL p m x. IN x p --> RES_ABSTRACT p m x = m x"
   11.95 +  by (import res_quan RES_ABSTRACT)
   11.96 +
   11.97 +lemma RES_ABSTRACT_EQUAL: "ALL p m1 m2.
   11.98 +   (ALL x. IN x p --> m1 x = m2 x) --> RES_ABSTRACT p m1 = RES_ABSTRACT p m2"
   11.99 +  by (import res_quan RES_ABSTRACT_EQUAL)
  11.100 +
  11.101 +lemma RES_ABSTRACT_IDEMPOT: "ALL p m. RES_ABSTRACT p (RES_ABSTRACT p m) = RES_ABSTRACT p m"
  11.102 +  by (import res_quan RES_ABSTRACT_IDEMPOT)
  11.103 +
  11.104 +lemma RES_ABSTRACT_EQUAL_EQ: "ALL p m1 m2.
  11.105 +   (RES_ABSTRACT p m1 = RES_ABSTRACT p m2) = (ALL x. IN x p --> m1 x = m2 x)"
  11.106 +  by (import res_quan RES_ABSTRACT_EQUAL_EQ)
  11.107 +
  11.108 +;end_setup
  11.109 +
  11.110 +;setup_theory word_base
  11.111 +
  11.112 +typedef (open) ('a) word = "(Collect::('a list recspace => bool) => 'a list recspace set)
  11.113 + (%x::'a list recspace.
  11.114 +     (All::(('a list recspace => bool) => bool) => bool)
  11.115 +      (%word::'a list recspace => bool.
  11.116 +          (op -->::bool => bool => bool)
  11.117 +           ((All::('a list recspace => bool) => bool)
  11.118 +             (%a0::'a list recspace.
  11.119 +                 (op -->::bool => bool => bool)
  11.120 +                  ((Ex::('a list => bool) => bool)
  11.121 +                    (%a::'a list.
  11.122 +                        (op =::'a list recspace => 'a list recspace => bool)
  11.123 +                         a0 ((CONSTR::nat
  11.124 +=> 'a list => (nat => 'a list recspace) => 'a list recspace)
  11.125 +                              (0::nat) a
  11.126 +                              (%n::nat. BOTTOM::'a list recspace))))
  11.127 +                  (word a0)))
  11.128 +           (word x)))" 
  11.129 +  by (rule typedef_helper,import word_base word_TY_DEF)
  11.130 +
  11.131 +lemmas word_TY_DEF = typedef_hol2hol4 [OF type_definition_word]
  11.132 +
  11.133 +consts
  11.134 +  mk_word :: "'a list recspace => 'a word" 
  11.135 +  dest_word :: "'a word => 'a list recspace" 
  11.136 +
  11.137 +specification (dest_word mk_word) word_repfns: "(ALL a::'a word. mk_word (dest_word a) = a) &
  11.138 +(ALL r::'a list recspace.
  11.139 +    (ALL word::'a list recspace => bool.
  11.140 +        (ALL a0::'a list recspace.
  11.141 +            (EX a::'a list. a0 = CONSTR (0::nat) a (%n::nat. BOTTOM)) -->
  11.142 +            word a0) -->
  11.143 +        word r) =
  11.144 +    (dest_word (mk_word r) = r))"
  11.145 +  by (import word_base word_repfns)
  11.146 +
  11.147 +consts
  11.148 +  word_base0 :: "'a list => 'a word" 
  11.149 +
  11.150 +defs
  11.151 +  word_base0_primdef: "word_base0 == %a. mk_word (CONSTR 0 a (%n. BOTTOM))"
  11.152 +
  11.153 +lemma word_base0_def: "word_base0 = (%a. mk_word (CONSTR 0 a (%n. BOTTOM)))"
  11.154 +  by (import word_base word_base0_def)
  11.155 +
  11.156 +constdefs
  11.157 +  WORD :: "'a list => 'a word" 
  11.158 +  "WORD == word_base0"
  11.159 +
  11.160 +lemma WORD: "WORD = word_base0"
  11.161 +  by (import word_base WORD)
  11.162 +
  11.163 +consts
  11.164 +  word_case :: "('a list => 'b) => 'a word => 'b" 
  11.165 +
  11.166 +specification (word_case_primdef: word_case) word_case_def: "ALL f a. word_case f (WORD a) = f a"
  11.167 +  by (import word_base word_case_def)
  11.168 +
  11.169 +consts
  11.170 +  word_size :: "('a => nat) => 'a word => nat" 
  11.171 +
  11.172 +specification (word_size_primdef: word_size) word_size_def: "ALL f a. word_size f (WORD a) = 1 + list_size f a"
  11.173 +  by (import word_base word_size_def)
  11.174 +
  11.175 +lemma word_11: "ALL a a'. (WORD a = WORD a') = (a = a')"
  11.176 +  by (import word_base word_11)
  11.177 +
  11.178 +lemma word_case_cong: "ALL M M' f.
  11.179 +   M = M' & (ALL a. M' = WORD a --> f a = f' a) -->
  11.180 +   word_case f M = word_case f' M'"
  11.181 +  by (import word_base word_case_cong)
  11.182 +
  11.183 +lemma word_nchotomy: "ALL x. EX l. x = WORD l"
  11.184 +  by (import word_base word_nchotomy)
  11.185 +
  11.186 +lemma word_Axiom: "ALL f. EX fn. ALL a. fn (WORD a) = f a"
  11.187 +  by (import word_base word_Axiom)
  11.188 +
  11.189 +lemma word_induction: "ALL P. (ALL a. P (WORD a)) --> All P"
  11.190 +  by (import word_base word_induction)
  11.191 +
  11.192 +lemma word_Ax: "ALL f. EX fn. ALL a. fn (WORD a) = f a"
  11.193 +  by (import word_base word_Ax)
  11.194 +
  11.195 +lemma WORD_11: "ALL x xa. (WORD x = WORD xa) = (x = xa)"
  11.196 +  by (import word_base WORD_11)
  11.197 +
  11.198 +lemma word_induct: "ALL x. (ALL l. x (WORD l)) --> All x"
  11.199 +  by (import word_base word_induct)
  11.200 +
  11.201 +lemma word_cases: "ALL x. EX l. x = WORD l"
  11.202 +  by (import word_base word_cases)
  11.203 +
  11.204 +consts
  11.205 +  WORDLEN :: "'a word => nat" 
  11.206 +
  11.207 +specification (WORDLEN) WORDLEN_DEF: "ALL l. WORDLEN (WORD l) = length l"
  11.208 +  by (import word_base WORDLEN_DEF)
  11.209 +
  11.210 +consts
  11.211 +  PWORDLEN :: "nat => 'a word => bool" 
  11.212 +
  11.213 +defs
  11.214 +  PWORDLEN_primdef: "PWORDLEN == %n. GSPEC (%w. (w, WORDLEN w = n))"
  11.215 +
  11.216 +lemma PWORDLEN_def: "ALL n. PWORDLEN n = GSPEC (%w. (w, WORDLEN w = n))"
  11.217 +  by (import word_base PWORDLEN_def)
  11.218 +
  11.219 +lemma IN_PWORDLEN: "ALL n l. IN (WORD l) (PWORDLEN n) = (length l = n)"
  11.220 +  by (import word_base IN_PWORDLEN)
  11.221 +
  11.222 +lemma PWORDLEN: "ALL n w. IN w (PWORDLEN n) = (WORDLEN w = n)"
  11.223 +  by (import word_base PWORDLEN)
  11.224 +
  11.225 +lemma PWORDLEN0: "ALL w. IN w (PWORDLEN 0) --> w = WORD []"
  11.226 +  by (import word_base PWORDLEN0)
  11.227 +
  11.228 +lemma PWORDLEN1: "ALL x. IN (WORD [x]) (PWORDLEN 1)"
  11.229 +  by (import word_base PWORDLEN1)
  11.230 +
  11.231 +consts
  11.232 +  WSEG :: "nat => nat => 'a word => 'a word" 
  11.233 +
  11.234 +specification (WSEG) WSEG_DEF: "ALL m k l. WSEG m k (WORD l) = WORD (LASTN m (BUTLASTN k l))"
  11.235 +  by (import word_base WSEG_DEF)
  11.236 +
  11.237 +lemma WSEG0: "ALL k w. WSEG 0 k w = WORD []"
  11.238 +  by (import word_base WSEG0)
  11.239 +
  11.240 +lemma WSEG_PWORDLEN: "ALL n.
  11.241 +   RES_FORALL (PWORDLEN n)
  11.242 +    (%w. ALL m k. m + k <= n --> IN (WSEG m k w) (PWORDLEN m))"
  11.243 +  by (import word_base WSEG_PWORDLEN)
  11.244 +
  11.245 +lemma WSEG_WORDLEN: "ALL x.
  11.246 +   RES_FORALL (PWORDLEN x)
  11.247 +    (%xa. ALL xb xc. xb + xc <= x --> WORDLEN (WSEG xb xc xa) = xb)"
  11.248 +  by (import word_base WSEG_WORDLEN)
  11.249 +
  11.250 +lemma WSEG_WORD_LENGTH: "ALL n. RES_FORALL (PWORDLEN n) (%w. WSEG n 0 w = w)"
  11.251 +  by (import word_base WSEG_WORD_LENGTH)
  11.252 +
  11.253 +consts
  11.254 +  bit :: "nat => 'a word => 'a" 
  11.255 +
  11.256 +specification (bit) BIT_DEF: "ALL k l. bit k (WORD l) = ELL k l"
  11.257 +  by (import word_base BIT_DEF)
  11.258 +
  11.259 +lemma BIT0: "ALL x. bit 0 (WORD [x]) = x"
  11.260 +  by (import word_base BIT0)
  11.261 +
  11.262 +lemma WSEG_BIT: "ALL n. RES_FORALL (PWORDLEN n) (%w. ALL k<n. WSEG 1 k w = WORD [bit k w])"
  11.263 +  by (import word_base WSEG_BIT)
  11.264 +
  11.265 +lemma BIT_WSEG: "ALL n.
  11.266 +   RES_FORALL (PWORDLEN n)
  11.267 +    (%w. ALL m k j.
  11.268 +            m + k <= n --> j < m --> bit j (WSEG m k w) = bit (j + k) w)"
  11.269 +  by (import word_base BIT_WSEG)
  11.270 +
  11.271 +consts
  11.272 +  MSB :: "'a word => 'a" 
  11.273 +
  11.274 +specification (MSB) MSB_DEF: "ALL l. MSB (WORD l) = hd l"
  11.275 +  by (import word_base MSB_DEF)
  11.276 +
  11.277 +lemma MSB: "ALL n. RES_FORALL (PWORDLEN n) (%w. 0 < n --> MSB w = bit (PRE n) w)"
  11.278 +  by (import word_base MSB)
  11.279 +
  11.280 +consts
  11.281 +  LSB :: "'a word => 'a" 
  11.282 +
  11.283 +specification (LSB) LSB_DEF: "ALL l. LSB (WORD l) = last l"
  11.284 +  by (import word_base LSB_DEF)
  11.285 +
  11.286 +lemma LSB: "ALL n. RES_FORALL (PWORDLEN n) (%w. 0 < n --> LSB w = bit 0 w)"
  11.287 +  by (import word_base LSB)
  11.288 +
  11.289 +consts
  11.290 +  WSPLIT :: "nat => 'a word => 'a word * 'a word" 
  11.291 +
  11.292 +specification (WSPLIT) WSPLIT_DEF: "ALL m l. WSPLIT m (WORD l) = (WORD (BUTLASTN m l), WORD (LASTN m l))"
  11.293 +  by (import word_base WSPLIT_DEF)
  11.294 +
  11.295 +consts
  11.296 +  WCAT :: "'a word * 'a word => 'a word" 
  11.297 +
  11.298 +specification (WCAT) WCAT_DEF: "ALL l1 l2. WCAT (WORD l1, WORD l2) = WORD (l1 @ l2)"
  11.299 +  by (import word_base WCAT_DEF)
  11.300 +
  11.301 +lemma WORD_PARTITION: "(ALL n::nat.
  11.302 +    RES_FORALL (PWORDLEN n)
  11.303 +     (%w::'a word. ALL m<=n. WCAT (WSPLIT m w) = w)) &
  11.304 +(ALL (n::nat) m::nat.
  11.305 +    RES_FORALL (PWORDLEN n)
  11.306 +     (%w1::'a word.
  11.307 +         RES_FORALL (PWORDLEN m)
  11.308 +          (%w2::'a word. WSPLIT m (WCAT (w1, w2)) = (w1, w2))))"
  11.309 +  by (import word_base WORD_PARTITION)
  11.310 +
  11.311 +lemma WCAT_ASSOC: "ALL w1 w2 w3. WCAT (w1, WCAT (w2, w3)) = WCAT (WCAT (w1, w2), w3)"
  11.312 +  by (import word_base WCAT_ASSOC)
  11.313 +
  11.314 +lemma WCAT0: "ALL w. WCAT (WORD [], w) = w & WCAT (w, WORD []) = w"
  11.315 +  by (import word_base WCAT0)
  11.316 +
  11.317 +lemma WCAT_11: "ALL m n.
  11.318 +   RES_FORALL (PWORDLEN m)
  11.319 +    (%wm1. RES_FORALL (PWORDLEN m)
  11.320 +            (%wm2. RES_FORALL (PWORDLEN n)
  11.321 +                    (%wn1. RES_FORALL (PWORDLEN n)
  11.322 +                            (%wn2. (WCAT (wm1, wn1) = WCAT (wm2, wn2)) =
  11.323 +                                   (wm1 = wm2 & wn1 = wn2)))))"
  11.324 +  by (import word_base WCAT_11)
  11.325 +
  11.326 +lemma WSPLIT_PWORDLEN: "ALL n.
  11.327 +   RES_FORALL (PWORDLEN n)
  11.328 +    (%w. ALL m<=n.
  11.329 +            IN (fst (WSPLIT m w)) (PWORDLEN (n - m)) &
  11.330 +            IN (snd (WSPLIT m w)) (PWORDLEN m))"
  11.331 +  by (import word_base WSPLIT_PWORDLEN)
  11.332 +
  11.333 +lemma WCAT_PWORDLEN: "ALL n1.
  11.334 +   RES_FORALL (PWORDLEN n1)
  11.335 +    (%w1. ALL n2.
  11.336 +             RES_FORALL (PWORDLEN n2)
  11.337 +              (%w2. IN (WCAT (w1, w2)) (PWORDLEN (n1 + n2))))"
  11.338 +  by (import word_base WCAT_PWORDLEN)
  11.339 +
  11.340 +lemma WORDLEN_SUC_WCAT: "ALL n w.
  11.341 +   IN w (PWORDLEN (Suc n)) -->
  11.342 +   RES_EXISTS (PWORDLEN 1)
  11.343 +    (%b. RES_EXISTS (PWORDLEN n) (%w'. w = WCAT (b, w')))"
  11.344 +  by (import word_base WORDLEN_SUC_WCAT)
  11.345 +
  11.346 +lemma WSEG_WSEG: "ALL n.
  11.347 +   RES_FORALL (PWORDLEN n)
  11.348 +    (%w. ALL m1 k1 m2 k2.
  11.349 +            m1 + k1 <= n & m2 + k2 <= m1 -->
  11.350 +            WSEG m2 k2 (WSEG m1 k1 w) = WSEG m2 (k1 + k2) w)"
  11.351 +  by (import word_base WSEG_WSEG)
  11.352 +
  11.353 +lemma WSPLIT_WSEG: "ALL n.
  11.354 +   RES_FORALL (PWORDLEN n)
  11.355 +    (%w. ALL k<=n. WSPLIT k w = (WSEG (n - k) k w, WSEG k 0 w))"
  11.356 +  by (import word_base WSPLIT_WSEG)
  11.357 +
  11.358 +lemma WSPLIT_WSEG1: "ALL n.
  11.359 +   RES_FORALL (PWORDLEN n)
  11.360 +    (%w. ALL k<=n. fst (WSPLIT k w) = WSEG (n - k) k w)"
  11.361 +  by (import word_base WSPLIT_WSEG1)
  11.362 +
  11.363 +lemma WSPLIT_WSEG2: "ALL n. RES_FORALL (PWORDLEN n) (%w. ALL k<=n. snd (WSPLIT k w) = WSEG k 0 w)"
  11.364 +  by (import word_base WSPLIT_WSEG2)
  11.365 +
  11.366 +lemma WCAT_WSEG_WSEG: "ALL n.
  11.367 +   RES_FORALL (PWORDLEN n)
  11.368 +    (%w. ALL m1 m2 k.
  11.369 +            m1 + (m2 + k) <= n -->
  11.370 +            WCAT (WSEG m2 (m1 + k) w, WSEG m1 k w) = WSEG (m1 + m2) k w)"
  11.371 +  by (import word_base WCAT_WSEG_WSEG)
  11.372 +
  11.373 +lemma WORD_SPLIT: "ALL x xa.
  11.374 +   RES_FORALL (PWORDLEN (x + xa)) (%w. w = WCAT (WSEG x xa w, WSEG xa 0 w))"
  11.375 +  by (import word_base WORD_SPLIT)
  11.376 +
  11.377 +lemma WORDLEN_SUC_WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG 1 n w, WSEG n 0 w))"
  11.378 +  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG)
  11.379 +
  11.380 +lemma WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WSEG 1 0 w))"
  11.381 +  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT)
  11.382 +
  11.383 +lemma WORDLEN_SUC_WCAT_BIT_WSEG: "ALL n.
  11.384 +   RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WORD [bit n w], WSEG n 0 w))"
  11.385 +  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG)
  11.386 +
  11.387 +lemma WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT: "ALL n.
  11.388 +   RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WORD [bit 0 w]))"
  11.389 +  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT)
  11.390 +
  11.391 +lemma WSEG_WCAT1: "ALL n1 n2.
  11.392 +   RES_FORALL (PWORDLEN n1)
  11.393 +    (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n1 n2 (WCAT (w1, w2)) = w1))"
  11.394 +  by (import word_base WSEG_WCAT1)
  11.395 +
  11.396 +lemma WSEG_WCAT2: "ALL n1 n2.
  11.397 +   RES_FORALL (PWORDLEN n1)
  11.398 +    (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n2 0 (WCAT (w1, w2)) = w2))"
  11.399 +  by (import word_base WSEG_WCAT2)
  11.400 +
  11.401 +lemma WSEG_SUC: "ALL n.
  11.402 +   RES_FORALL (PWORDLEN n)
  11.403 +    (%w. ALL k m1.
  11.404 +            k + Suc m1 < n -->
  11.405 +            WSEG (Suc m1) k w = WCAT (WSEG 1 (k + m1) w, WSEG m1 k w))"
  11.406 +  by (import word_base WSEG_SUC)
  11.407 +
  11.408 +lemma WORD_CONS_WCAT: "ALL x l. WORD (x # l) = WCAT (WORD [x], WORD l)"
  11.409 +  by (import word_base WORD_CONS_WCAT)
  11.410 +
  11.411 +lemma WORD_SNOC_WCAT: "ALL l x. WORD (SNOC x l) = WCAT (WORD l, WORD [x])"
  11.412 +  by (import word_base WORD_SNOC_WCAT)
  11.413 +
  11.414 +lemma BIT_WCAT_FST: "ALL n1 n2.
  11.415 +   RES_FORALL (PWORDLEN n1)
  11.416 +    (%w1. RES_FORALL (PWORDLEN n2)
  11.417 +           (%w2. ALL k.
  11.418 +                    n2 <= k & k < n1 + n2 -->
  11.419 +                    bit k (WCAT (w1, w2)) = bit (k - n2) w1))"
  11.420 +  by (import word_base BIT_WCAT_FST)
  11.421 +
  11.422 +lemma BIT_WCAT_SND: "ALL n1 n2.
  11.423 +   RES_FORALL (PWORDLEN n1)
  11.424 +    (%w1. RES_FORALL (PWORDLEN n2)
  11.425 +           (%w2. ALL k<n2. bit k (WCAT (w1, w2)) = bit k w2))"
  11.426 +  by (import word_base BIT_WCAT_SND)
  11.427 +
  11.428 +lemma BIT_WCAT1: "ALL n. RES_FORALL (PWORDLEN n) (%w. ALL b. bit n (WCAT (WORD [b], w)) = b)"
  11.429 +  by (import word_base BIT_WCAT1)
  11.430 +
  11.431 +lemma WSEG_WCAT_WSEG1: "ALL n1 n2.
  11.432 +   RES_FORALL (PWORDLEN n1)
  11.433 +    (%w1. RES_FORALL (PWORDLEN n2)
  11.434 +           (%w2. ALL m k.
  11.435 +                    m <= n1 & n2 <= k -->
  11.436 +                    WSEG m k (WCAT (w1, w2)) = WSEG m (k - n2) w1))"
  11.437 +  by (import word_base WSEG_WCAT_WSEG1)
  11.438 +
  11.439 +lemma WSEG_WCAT_WSEG2: "ALL n1 n2.
  11.440 +   RES_FORALL (PWORDLEN n1)
  11.441 +    (%w1. RES_FORALL (PWORDLEN n2)
  11.442 +           (%w2. ALL m k.
  11.443 +                    m + k <= n2 --> WSEG m k (WCAT (w1, w2)) = WSEG m k w2))"
  11.444 +  by (import word_base WSEG_WCAT_WSEG2)
  11.445 +
  11.446 +lemma WSEG_WCAT_WSEG: "ALL n1 n2.
  11.447 +   RES_FORALL (PWORDLEN n1)
  11.448 +    (%w1. RES_FORALL (PWORDLEN n2)
  11.449 +           (%w2. ALL m k.
  11.450 +                    m + k <= n1 + n2 & k < n2 & n2 <= m + k -->
  11.451 +                    WSEG m k (WCAT (w1, w2)) =
  11.452 +                    WCAT (WSEG (m + k - n2) 0 w1, WSEG (n2 - k) k w2)))"
  11.453 +  by (import word_base WSEG_WCAT_WSEG)
  11.454 +
  11.455 +lemma BIT_EQ_IMP_WORD_EQ: "ALL n.
  11.456 +   RES_FORALL (PWORDLEN n)
  11.457 +    (%w1. RES_FORALL (PWORDLEN n)
  11.458 +           (%w2. (ALL k<n. bit k w1 = bit k w2) --> w1 = w2))"
  11.459 +  by (import word_base BIT_EQ_IMP_WORD_EQ)
  11.460 +
  11.461 +;end_setup
  11.462 +
  11.463 +;setup_theory word_num
  11.464 +
  11.465 +constdefs
  11.466 +  LVAL :: "('a => nat) => nat => 'a list => nat" 
  11.467 +  "LVAL == %f b. foldl (%e x. b * e + f x) 0"
  11.468 +
  11.469 +lemma LVAL_DEF: "ALL f b l. LVAL f b l = foldl (%e x. b * e + f x) 0 l"
  11.470 +  by (import word_num LVAL_DEF)
  11.471 +
  11.472 +consts
  11.473 +  NVAL :: "('a => nat) => nat => 'a word => nat" 
  11.474 +
  11.475 +specification (NVAL) NVAL_DEF: "ALL f b l. NVAL f b (WORD l) = LVAL f b l"
  11.476 +  by (import word_num NVAL_DEF)
  11.477 +
  11.478 +lemma LVAL: "(ALL (x::'a => nat) xa::nat. LVAL x xa [] = (0::nat)) &
  11.479 +(ALL (x::'a list) (xa::'a => nat) (xb::nat) xc::'a.
  11.480 +    LVAL xa xb (xc # x) = xa xc * xb ^ length x + LVAL xa xb x)"
  11.481 +  by (import word_num LVAL)
  11.482 +
  11.483 +lemma LVAL_SNOC: "ALL l h f b. LVAL f b (SNOC h l) = LVAL f b l * b + f h"
  11.484 +  by (import word_num LVAL_SNOC)
  11.485 +
  11.486 +lemma LVAL_MAX: "ALL l f b. (ALL x. f x < b) --> LVAL f b l < b ^ length l"
  11.487 +  by (import word_num LVAL_MAX)
  11.488 +
  11.489 +lemma NVAL_MAX: "ALL f b.
  11.490 +   (ALL x. f x < b) -->
  11.491 +   (ALL n. RES_FORALL (PWORDLEN n) (%w. NVAL f b w < b ^ n))"
  11.492 +  by (import word_num NVAL_MAX)
  11.493 +
  11.494 +lemma NVAL0: "ALL x xa. NVAL x xa (WORD []) = 0"
  11.495 +  by (import word_num NVAL0)
  11.496 +
  11.497 +lemma NVAL1: "ALL x xa xb. NVAL x xa (WORD [xb]) = x xb"
  11.498 +  by (import word_num NVAL1)
  11.499 +
  11.500 +lemma NVAL_WORDLEN_0: "RES_FORALL (PWORDLEN 0) (%w. ALL fv r. NVAL fv r w = 0)"
  11.501 +  by (import word_num NVAL_WORDLEN_0)
  11.502 +
  11.503 +lemma NVAL_WCAT1: "ALL w f b x. NVAL f b (WCAT (w, WORD [x])) = NVAL f b w * b + f x"
  11.504 +  by (import word_num NVAL_WCAT1)
  11.505 +
  11.506 +lemma NVAL_WCAT2: "ALL n.
  11.507 +   RES_FORALL (PWORDLEN n)
  11.508 +    (%w. ALL f b x.
  11.509 +            NVAL f b (WCAT (WORD [x], w)) = f x * b ^ n + NVAL f b w)"
  11.510 +  by (import word_num NVAL_WCAT2)
  11.511 +
  11.512 +lemma NVAL_WCAT: "ALL n m.
  11.513 +   RES_FORALL (PWORDLEN n)
  11.514 +    (%w1. RES_FORALL (PWORDLEN m)
  11.515 +           (%w2. ALL f b.
  11.516 +                    NVAL f b (WCAT (w1, w2)) =
  11.517 +                    NVAL f b w1 * b ^ m + NVAL f b w2))"
  11.518 +  by (import word_num NVAL_WCAT)
  11.519 +
  11.520 +consts
  11.521 +  NLIST :: "nat => (nat => 'a) => nat => nat => 'a list" 
  11.522 +
  11.523 +specification (NLIST) NLIST_DEF: "(ALL (frep::nat => 'a) (b::nat) m::nat. NLIST (0::nat) frep b m = []) &
  11.524 +(ALL (n::nat) (frep::nat => 'a) (b::nat) m::nat.
  11.525 +    NLIST (Suc n) frep b m =
  11.526 +    SNOC (frep (m mod b)) (NLIST n frep b (m div b)))"
  11.527 +  by (import word_num NLIST_DEF)
  11.528 +
  11.529 +constdefs
  11.530 +  NWORD :: "nat => (nat => 'a) => nat => nat => 'a word" 
  11.531 +  "NWORD == %n frep b m. WORD (NLIST n frep b m)"
  11.532 +
  11.533 +lemma NWORD_DEF: "ALL n frep b m. NWORD n frep b m = WORD (NLIST n frep b m)"
  11.534 +  by (import word_num NWORD_DEF)
  11.535 +
  11.536 +lemma NWORD_LENGTH: "ALL x xa xb xc. WORDLEN (NWORD x xa xb xc) = x"
  11.537 +  by (import word_num NWORD_LENGTH)
  11.538 +
  11.539 +lemma NWORD_PWORDLEN: "ALL x xa xb xc. IN (NWORD x xa xb xc) (PWORDLEN x)"
  11.540 +  by (import word_num NWORD_PWORDLEN)
  11.541 +
  11.542 +;end_setup
  11.543 +
  11.544 +;setup_theory word_bitop
  11.545 +
  11.546 +consts
  11.547 +  PBITOP :: "('a word => 'b word) => bool" 
  11.548 +
  11.549 +defs
  11.550 +  PBITOP_primdef: "PBITOP ==
  11.551 +GSPEC
  11.552 + (%oper.
  11.553 +     (oper,
  11.554 +      ALL n.
  11.555 +         RES_FORALL (PWORDLEN n)
  11.556 +          (%w. IN (oper w) (PWORDLEN n) &
  11.557 +               (ALL m k.
  11.558 +                   m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
  11.559 +
  11.560 +lemma PBITOP_def: "PBITOP =
  11.561 +GSPEC
  11.562 + (%oper.
  11.563 +     (oper,
  11.564 +      ALL n.
  11.565 +         RES_FORALL (PWORDLEN n)
  11.566 +          (%w. IN (oper w) (PWORDLEN n) &
  11.567 +               (ALL m k.
  11.568 +                   m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
  11.569 +  by (import word_bitop PBITOP_def)
  11.570 +
  11.571 +lemma IN_PBITOP: "ALL oper.
  11.572 +   IN oper PBITOP =
  11.573 +   (ALL n.
  11.574 +       RES_FORALL (PWORDLEN n)
  11.575 +        (%w. IN (oper w) (PWORDLEN n) &
  11.576 +             (ALL m k.
  11.577 +                 m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w))))"
  11.578 +  by (import word_bitop IN_PBITOP)
  11.579 +
  11.580 +lemma PBITOP_PWORDLEN: "RES_FORALL PBITOP
  11.581 + (%oper. ALL n. RES_FORALL (PWORDLEN n) (%w. IN (oper w) (PWORDLEN n)))"
  11.582 +  by (import word_bitop PBITOP_PWORDLEN)
  11.583 +
  11.584 +lemma PBITOP_WSEG: "RES_FORALL PBITOP
  11.585 + (%oper.
  11.586 +     ALL n.
  11.587 +        RES_FORALL (PWORDLEN n)
  11.588 +         (%w. ALL m k.
  11.589 +                 m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))"
  11.590 +  by (import word_bitop PBITOP_WSEG)
  11.591 +
  11.592 +lemma PBITOP_BIT: "RES_FORALL PBITOP
  11.593 + (%oper.
  11.594 +     ALL n.
  11.595 +        RES_FORALL (PWORDLEN n)
  11.596 +         (%w. ALL k<n. oper (WORD [bit k w]) = WORD [bit k (oper w)]))"
  11.597 +  by (import word_bitop PBITOP_BIT)
  11.598 +
  11.599 +consts
  11.600 +  PBITBOP :: "('a word => 'b word => 'c word) => bool" 
  11.601 +
  11.602 +defs
  11.603 +  PBITBOP_primdef: "PBITBOP ==
  11.604 +GSPEC
  11.605 + (%oper.
  11.606 +     (oper,
  11.607 +      ALL n.
  11.608 +         RES_FORALL (PWORDLEN n)
  11.609 +          (%w1. RES_FORALL (PWORDLEN n)
  11.610 +                 (%w2. IN (oper w1 w2) (PWORDLEN n) &
  11.611 +                       (ALL m k.
  11.612 +                           m + k <= n -->
  11.613 +                           oper (WSEG m k w1) (WSEG m k w2) =
  11.614 +                           WSEG m k (oper w1 w2))))))"
  11.615 +
  11.616 +lemma PBITBOP_def: "PBITBOP =
  11.617 +GSPEC
  11.618 + (%oper.
  11.619 +     (oper,
  11.620 +      ALL n.
  11.621 +         RES_FORALL (PWORDLEN n)
  11.622 +          (%w1. RES_FORALL (PWORDLEN n)
  11.623 +                 (%w2. IN (oper w1 w2) (PWORDLEN n) &
  11.624 +                       (ALL m k.
  11.625 +                           m + k <= n -->
  11.626 +                           oper (WSEG m k w1) (WSEG m k w2) =
  11.627 +                           WSEG m k (oper w1 w2))))))"
  11.628 +  by (import word_bitop PBITBOP_def)
  11.629 +
  11.630 +lemma IN_PBITBOP: "ALL oper.
  11.631 +   IN oper PBITBOP =
  11.632 +   (ALL n.
  11.633 +       RES_FORALL (PWORDLEN n)
  11.634 +        (%w1. RES_FORALL (PWORDLEN n)
  11.635 +               (%w2. IN (oper w1 w2) (PWORDLEN n) &
  11.636 +                     (ALL m k.
  11.637 +                         m + k <= n -->
  11.638 +                         oper (WSEG m k w1) (WSEG m k w2) =
  11.639 +                         WSEG m k (oper w1 w2)))))"
  11.640 +  by (import word_bitop IN_PBITBOP)
  11.641 +
  11.642 +lemma PBITBOP_PWORDLEN: "RES_FORALL PBITBOP
  11.643 + (%oper.
  11.644 +     ALL n.
  11.645 +        RES_FORALL (PWORDLEN n)
  11.646 +         (%w1. RES_FORALL (PWORDLEN n) (%w2. IN (oper w1 w2) (PWORDLEN n))))"
  11.647 +  by (import word_bitop PBITBOP_PWORDLEN)
  11.648 +
  11.649 +lemma PBITBOP_WSEG: "RES_FORALL PBITBOP
  11.650 + (%oper.
  11.651 +     ALL n.
  11.652 +        RES_FORALL (PWORDLEN n)
  11.653 +         (%w1. RES_FORALL (PWORDLEN n)
  11.654 +                (%w2. ALL m k.
  11.655 +                         m + k <= n -->
  11.656 +                         oper (WSEG m k w1) (WSEG m k w2) =
  11.657 +                         WSEG m k (oper w1 w2))))"
  11.658 +  by (import word_bitop PBITBOP_WSEG)
  11.659 +
  11.660 +lemma PBITBOP_EXISTS: "ALL f. EX x. ALL l1 l2. x (WORD l1) (WORD l2) = WORD (map2 f l1 l2)"
  11.661 +  by (import word_bitop PBITBOP_EXISTS)
  11.662 +
  11.663 +consts
  11.664 +  WMAP :: "('a => 'b) => 'a word => 'b word" 
  11.665 +
  11.666 +specification (WMAP) WMAP_DEF: "ALL f l. WMAP f (WORD l) = WORD (map f l)"
  11.667 +  by (import word_bitop WMAP_DEF)
  11.668 +
  11.669 +lemma WMAP_PWORDLEN: "RES_FORALL (PWORDLEN n) (%w. ALL f. IN (WMAP f w) (PWORDLEN n))"
  11.670 +  by (import word_bitop WMAP_PWORDLEN)
  11.671 +
  11.672 +lemma WMAP_0: "ALL x. WMAP x (WORD []) = WORD []"
  11.673 +  by (import word_bitop WMAP_0)
  11.674 +
  11.675 +lemma WMAP_BIT: "ALL n.
  11.676 +   RES_FORALL (PWORDLEN n)
  11.677 +    (%w. ALL k<n. ALL f. bit k (WMAP f w) = f (bit k w))"
  11.678 +  by (import word_bitop WMAP_BIT)
  11.679 +
  11.680 +lemma WMAP_WSEG: "ALL n.
  11.681 +   RES_FORALL (PWORDLEN n)
  11.682 +    (%w. ALL m k.
  11.683 +            m + k <= n -->
  11.684 +            (ALL f. WMAP f (WSEG m k w) = WSEG m k (WMAP f w)))"
  11.685 +  by (import word_bitop WMAP_WSEG)
  11.686 +
  11.687 +lemma WMAP_PBITOP: "ALL f. IN (WMAP f) PBITOP"
  11.688 +  by (import word_bitop WMAP_PBITOP)
  11.689 +
  11.690 +lemma WMAP_WCAT: "ALL w1 w2 f. WMAP f (WCAT (w1, w2)) = WCAT (WMAP f w1, WMAP f w2)"
  11.691 +  by (import word_bitop WMAP_WCAT)
  11.692 +
  11.693 +lemma WMAP_o: "ALL w f g. WMAP g (WMAP f w) = WMAP (g o f) w"
  11.694 +  by (import word_bitop WMAP_o)
  11.695 +
  11.696 +consts
  11.697 +  FORALLBITS :: "('a => bool) => 'a word => bool" 
  11.698 +
  11.699 +specification (FORALLBITS) FORALLBITS_DEF: "ALL P l. FORALLBITS P (WORD l) = list_all P l"
  11.700 +  by (import word_bitop FORALLBITS_DEF)
  11.701 +
  11.702 +lemma FORALLBITS: "ALL n.
  11.703 +   RES_FORALL (PWORDLEN n)
  11.704 +    (%w. ALL P. FORALLBITS P w = (ALL k<n. P (bit k w)))"
  11.705 +  by (import word_bitop FORALLBITS)
  11.706 +
  11.707 +lemma FORALLBITS_WSEG: "ALL n.
  11.708 +   RES_FORALL (PWORDLEN n)
  11.709 +    (%w. ALL P.
  11.710 +            FORALLBITS P w -->
  11.711 +            (ALL m k. m + k <= n --> FORALLBITS P (WSEG m k w)))"
  11.712 +  by (import word_bitop FORALLBITS_WSEG)
  11.713 +
  11.714 +lemma FORALLBITS_WCAT: "ALL w1 w2 P.
  11.715 +   FORALLBITS P (WCAT (w1, w2)) = (FORALLBITS P w1 & FORALLBITS P w2)"
  11.716 +  by (import word_bitop FORALLBITS_WCAT)
  11.717 +
  11.718 +consts
  11.719 +  EXISTSABIT :: "('a => bool) => 'a word => bool" 
  11.720 +
  11.721 +specification (EXISTSABIT) EXISTSABIT_DEF: "ALL P l. EXISTSABIT P (WORD l) = list_exists P l"
  11.722 +  by (import word_bitop EXISTSABIT_DEF)
  11.723 +
  11.724 +lemma NOT_EXISTSABIT: "ALL P w. (~ EXISTSABIT P w) = FORALLBITS (Not o P) w"
  11.725 +  by (import word_bitop NOT_EXISTSABIT)
  11.726 +
  11.727 +lemma NOT_FORALLBITS: "ALL P w. (~ FORALLBITS P w) = EXISTSABIT (Not o P) w"
  11.728 +  by (import word_bitop NOT_FORALLBITS)
  11.729 +
  11.730 +lemma EXISTSABIT: "ALL n.
  11.731 +   RES_FORALL (PWORDLEN n)
  11.732 +    (%w. ALL P. EXISTSABIT P w = (EX k<n. P (bit k w)))"
  11.733 +  by (import word_bitop EXISTSABIT)
  11.734 +
  11.735 +lemma EXISTSABIT_WSEG: "ALL n.
  11.736 +   RES_FORALL (PWORDLEN n)
  11.737 +    (%w. ALL m k.
  11.738 +            m + k <= n -->
  11.739 +            (ALL P. EXISTSABIT P (WSEG m k w) --> EXISTSABIT P w))"
  11.740 +  by (import word_bitop EXISTSABIT_WSEG)
  11.741 +
  11.742 +lemma EXISTSABIT_WCAT: "ALL w1 w2 P.
  11.743 +   EXISTSABIT P (WCAT (w1, w2)) = (EXISTSABIT P w1 | EXISTSABIT P w2)"
  11.744 +  by (import word_bitop EXISTSABIT_WCAT)
  11.745 +
  11.746 +constdefs
  11.747 +  SHR :: "bool => 'a => 'a word => 'a word * 'a" 
  11.748 +  "SHR ==
  11.749 +%f b w.
  11.750 +   (WCAT
  11.751 +     (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
  11.752 +      WSEG (PRE (WORDLEN w)) 1 w),
  11.753 +    bit 0 w)"
  11.754 +
  11.755 +lemma SHR_DEF: "ALL f b w.
  11.756 +   SHR f b w =
  11.757 +   (WCAT
  11.758 +     (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
  11.759 +      WSEG (PRE (WORDLEN w)) 1 w),
  11.760 +    bit 0 w)"
  11.761 +  by (import word_bitop SHR_DEF)
  11.762 +
  11.763 +constdefs
  11.764 +  SHL :: "bool => 'a word => 'a => 'a * 'a word" 
  11.765 +  "SHL ==
  11.766 +%f w b.
  11.767 +   (bit (PRE (WORDLEN w)) w,
  11.768 +    WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
  11.769 +
  11.770 +lemma SHL_DEF: "ALL f w b.
  11.771 +   SHL f w b =
  11.772 +   (bit (PRE (WORDLEN w)) w,
  11.773 +    WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
  11.774 +  by (import word_bitop SHL_DEF)
  11.775 +
  11.776 +lemma SHR_WSEG: "ALL n.
  11.777 +   RES_FORALL (PWORDLEN n)
  11.778 +    (%w. ALL m k.
  11.779 +            m + k <= n -->
  11.780 +            0 < m -->
  11.781 +            (ALL f b.
  11.782 +                SHR f b (WSEG m k w) =
  11.783 +                (if f
  11.784 +                 then WCAT (WSEG 1 (k + (m - 1)) w, WSEG (m - 1) (k + 1) w)
  11.785 +                 else WCAT (WORD [b], WSEG (m - 1) (k + 1) w),
  11.786 +                 bit k w)))"
  11.787 +  by (import word_bitop SHR_WSEG)
  11.788 +
  11.789 +lemma SHR_WSEG_1F: "ALL n.
  11.790 +   RES_FORALL (PWORDLEN n)
  11.791 +    (%w. ALL b m k.
  11.792 +            m + k <= n -->
  11.793 +            0 < m -->
  11.794 +            SHR False b (WSEG m k w) =
  11.795 +            (WCAT (WORD [b], WSEG (m - 1) (k + 1) w), bit k w))"
  11.796 +  by (import word_bitop SHR_WSEG_1F)
  11.797 +
  11.798 +lemma SHR_WSEG_NF: "ALL n.
  11.799 +   RES_FORALL (PWORDLEN n)
  11.800 +    (%w. ALL m k.
  11.801 +            m + k < n -->
  11.802 +            0 < m -->
  11.803 +            SHR False (bit (m + k) w) (WSEG m k w) =
  11.804 +            (WSEG m (k + 1) w, bit k w))"
  11.805 +  by (import word_bitop SHR_WSEG_NF)
  11.806 +
  11.807 +lemma SHL_WSEG: "ALL n.
  11.808 +   RES_FORALL (PWORDLEN n)
  11.809 +    (%w. ALL m k.
  11.810 +            m + k <= n -->
  11.811 +            0 < m -->
  11.812 +            (ALL f b.
  11.813 +                SHL f (WSEG m k w) b =
  11.814 +                (bit (k + (m - 1)) w,
  11.815 +                 if f then WCAT (WSEG (m - 1) k w, WSEG 1 k w)
  11.816 +                 else WCAT (WSEG (m - 1) k w, WORD [b]))))"
  11.817 +  by (import word_bitop SHL_WSEG)
  11.818 +
  11.819 +lemma SHL_WSEG_1F: "ALL n.
  11.820 +   RES_FORALL (PWORDLEN n)
  11.821 +    (%w. ALL b m k.
  11.822 +            m + k <= n -->
  11.823 +            0 < m -->
  11.824 +            SHL False (WSEG m k w) b =
  11.825 +            (bit (k + (m - 1)) w, WCAT (WSEG (m - 1) k w, WORD [b])))"
  11.826 +  by (import word_bitop SHL_WSEG_1F)
  11.827 +
  11.828 +lemma SHL_WSEG_NF: "ALL n.
  11.829 +   RES_FORALL (PWORDLEN n)
  11.830 +    (%w. ALL m k.
  11.831 +            m + k <= n -->
  11.832 +            0 < m -->
  11.833 +            0 < k -->
  11.834 +            SHL False (WSEG m k w) (bit (k - 1) w) =
  11.835 +            (bit (k + (m - 1)) w, WSEG m (k - 1) w))"
  11.836 +  by (import word_bitop SHL_WSEG_NF)
  11.837 +
  11.838 +lemma WSEG_SHL: "ALL n.
  11.839 +   RES_FORALL (PWORDLEN (Suc n))
  11.840 +    (%w. ALL m k.
  11.841 +            0 < k & m + k <= Suc n -->
  11.842 +            (ALL b. WSEG m k (snd (SHL f w b)) = WSEG m (k - 1) w))"
  11.843 +  by (import word_bitop WSEG_SHL)
  11.844 +
  11.845 +lemma WSEG_SHL_0: "ALL n.
  11.846 +   RES_FORALL (PWORDLEN (Suc n))
  11.847 +    (%w. ALL m b.
  11.848 +            0 < m & m <= Suc n -->
  11.849 +            WSEG m 0 (snd (SHL f w b)) =
  11.850 +            WCAT (WSEG (m - 1) 0 w, if f then WSEG 1 0 w else WORD [b]))"
  11.851 +  by (import word_bitop WSEG_SHL_0)
  11.852 +
  11.853 +;end_setup
  11.854 +
  11.855 +;setup_theory bword_num
  11.856 +
  11.857 +constdefs
  11.858 +  BV :: "bool => nat" 
  11.859 +  "BV == %b. if b then Suc 0 else 0"
  11.860 +
  11.861 +lemma BV_DEF: "ALL b. BV b = (if b then Suc 0 else 0)"
  11.862 +  by (import bword_num BV_DEF)
  11.863 +
  11.864 +consts
  11.865 +  BNVAL :: "bool word => nat" 
  11.866 +
  11.867 +specification (BNVAL) BNVAL_DEF: "ALL l. BNVAL (WORD l) = LVAL BV 2 l"
  11.868 +  by (import bword_num BNVAL_DEF)
  11.869 +
  11.870 +lemma BV_LESS_2: "ALL x. BV x < 2"
  11.871 +  by (import bword_num BV_LESS_2)
  11.872 +
  11.873 +lemma BNVAL_NVAL: "ALL w. BNVAL w = NVAL BV 2 w"
  11.874 +  by (import bword_num BNVAL_NVAL)
  11.875 +
  11.876 +lemma BNVAL0: "BNVAL (WORD []) = 0"
  11.877 +  by (import bword_num BNVAL0)
  11.878 +
  11.879 +lemma BNVAL_11: "ALL w1 w2. WORDLEN w1 = WORDLEN w2 --> BNVAL w1 = BNVAL w2 --> w1 = w2"
  11.880 +  by (import bword_num BNVAL_11)
  11.881 +
  11.882 +lemma BNVAL_ONTO: "ALL w. Ex (op = (BNVAL w))"
  11.883 +  by (import bword_num BNVAL_ONTO)
  11.884 +
  11.885 +lemma BNVAL_MAX: "ALL n. RES_FORALL (PWORDLEN n) (%w. BNVAL w < 2 ^ n)"
  11.886 +  by (import bword_num BNVAL_MAX)
  11.887 +
  11.888 +lemma BNVAL_WCAT1: "ALL n.
  11.889 +   RES_FORALL (PWORDLEN n)
  11.890 +    (%w. ALL x. BNVAL (WCAT (w, WORD [x])) = BNVAL w * 2 + BV x)"
  11.891 +  by (import bword_num BNVAL_WCAT1)
  11.892 +
  11.893 +lemma BNVAL_WCAT2: "ALL n.
  11.894 +   RES_FORALL (PWORDLEN n)
  11.895 +    (%w. ALL x. BNVAL (WCAT (WORD [x], w)) = BV x * 2 ^ n + BNVAL w)"
  11.896 +  by (import bword_num BNVAL_WCAT2)
  11.897 +
  11.898 +lemma BNVAL_WCAT: "ALL n m.
  11.899 +   RES_FORALL (PWORDLEN n)
  11.900 +    (%w1. RES_FORALL (PWORDLEN m)
  11.901 +           (%w2. BNVAL (WCAT (w1, w2)) = BNVAL w1 * 2 ^ m + BNVAL w2))"
  11.902 +  by (import bword_num BNVAL_WCAT)
  11.903 +
  11.904 +constdefs
  11.905 +  VB :: "nat => bool" 
  11.906 +  "VB == %n. n mod 2 ~= 0"
  11.907 +
  11.908 +lemma VB_DEF: "ALL n. VB n = (n mod 2 ~= 0)"
  11.909 +  by (import bword_num VB_DEF)
  11.910 +
  11.911 +constdefs
  11.912 +  NBWORD :: "nat => nat => bool word" 
  11.913 +  "NBWORD == %n m. WORD (NLIST n VB 2 m)"
  11.914 +
  11.915 +lemma NBWORD_DEF: "ALL n m. NBWORD n m = WORD (NLIST n VB 2 m)"
  11.916 +  by (import bword_num NBWORD_DEF)
  11.917 +
  11.918 +lemma NBWORD0: "ALL x. NBWORD 0 x = WORD []"
  11.919 +  by (import bword_num NBWORD0)
  11.920 +
  11.921 +lemma WORDLEN_NBWORD: "ALL x xa. WORDLEN (NBWORD x xa) = x"
  11.922 +  by (import bword_num WORDLEN_NBWORD)
  11.923 +
  11.924 +lemma PWORDLEN_NBWORD: "ALL x xa. IN (NBWORD x xa) (PWORDLEN x)"
  11.925 +  by (import bword_num PWORDLEN_NBWORD)
  11.926 +
  11.927 +lemma NBWORD_SUC: "ALL n m. NBWORD (Suc n) m = WCAT (NBWORD n (m div 2), WORD [VB (m mod 2)])"
  11.928 +  by (import bword_num NBWORD_SUC)
  11.929 +
  11.930 +lemma VB_BV: "ALL x. VB (BV x) = x"
  11.931 +  by (import bword_num VB_BV)
  11.932 +
  11.933 +lemma BV_VB: "ALL x<2. BV (VB x) = x"
  11.934 +  by (import bword_num BV_VB)
  11.935 +
  11.936 +lemma NBWORD_BNVAL: "ALL n. RES_FORALL (PWORDLEN n) (%w. NBWORD n (BNVAL w) = w)"
  11.937 +  by (import bword_num NBWORD_BNVAL)
  11.938 +
  11.939 +lemma BNVAL_NBWORD: "ALL n m. m < 2 ^ n --> BNVAL (NBWORD n m) = m"
  11.940 +  by (import bword_num BNVAL_NBWORD)
  11.941 +
  11.942 +lemma ZERO_WORD_VAL: "RES_FORALL (PWORDLEN n) (%w. (w = NBWORD n 0) = (BNVAL w = 0))"
  11.943 +  by (import bword_num ZERO_WORD_VAL)
  11.944 +
  11.945 +lemma WCAT_NBWORD_0: "ALL n1 n2. WCAT (NBWORD n1 0, NBWORD n2 0) = NBWORD (n1 + n2) 0"
  11.946 +  by (import bword_num WCAT_NBWORD_0)
  11.947 +
  11.948 +lemma WSPLIT_NBWORD_0: "ALL n m. m <= n --> WSPLIT m (NBWORD n 0) = (NBWORD (n - m) 0, NBWORD m 0)"
  11.949 +  by (import bword_num WSPLIT_NBWORD_0)
  11.950 +
  11.951 +lemma EQ_NBWORD0_SPLIT: "ALL n.
  11.952 +   RES_FORALL (PWORDLEN n)
  11.953 +    (%w. ALL m<=n.
  11.954 +            (w = NBWORD n 0) =
  11.955 +            (WSEG (n - m) m w = NBWORD (n - m) 0 & WSEG m 0 w = NBWORD m 0))"
  11.956 +  by (import bword_num EQ_NBWORD0_SPLIT)
  11.957 +
  11.958 +lemma NBWORD_MOD: "ALL n m. NBWORD n (m mod 2 ^ n) = NBWORD n m"
  11.959 +  by (import bword_num NBWORD_MOD)
  11.960 +
  11.961 +lemma WSEG_NBWORD_SUC: "ALL n m. WSEG n 0 (NBWORD (Suc n) m) = NBWORD n m"
  11.962 +  by (import bword_num WSEG_NBWORD_SUC)
  11.963 +
  11.964 +lemma NBWORD_SUC_WSEG: "ALL n. RES_FORALL (PWORDLEN (Suc n)) (%w. NBWORD n (BNVAL w) = WSEG n 0 w)"
  11.965 +  by (import bword_num NBWORD_SUC_WSEG)
  11.966 +
  11.967 +lemma DOUBL_EQ_SHL: "ALL x.
  11.968 +   0 < x -->
  11.969 +   RES_FORALL (PWORDLEN x)
  11.970 +    (%xa. ALL xb.
  11.971 +             NBWORD x (BNVAL xa + BNVAL xa + BV xb) = snd (SHL False xa xb))"
  11.972 +  by (import bword_num DOUBL_EQ_SHL)
  11.973 +
  11.974 +lemma MSB_NBWORD: "ALL n m. bit n (NBWORD (Suc n) m) = VB (m div 2 ^ n mod 2)"
  11.975 +  by (import bword_num MSB_NBWORD)
  11.976 +
  11.977 +lemma NBWORD_SPLIT: "ALL n1 n2 m.
  11.978 +   NBWORD (n1 + n2) m = WCAT (NBWORD n1 (m div 2 ^ n2), NBWORD n2 m)"
  11.979 +  by (import bword_num NBWORD_SPLIT)
  11.980 +
  11.981 +lemma WSEG_NBWORD: "ALL m k n.
  11.982 +   m + k <= n --> (ALL l. WSEG m k (NBWORD n l) = NBWORD m (l div 2 ^ k))"
  11.983 +  by (import bword_num WSEG_NBWORD)
  11.984 +
  11.985 +lemma NBWORD_SUC_FST: "ALL n x. NBWORD (Suc n) x = WCAT (WORD [VB (x div 2 ^ n mod 2)], NBWORD n x)"
  11.986 +  by (import bword_num NBWORD_SUC_FST)
  11.987 +
  11.988 +lemma BIT_NBWORD0: "ALL k n. k < n --> bit k (NBWORD n 0) = False"
  11.989 +  by (import bword_num BIT_NBWORD0)
  11.990 +
  11.991 +lemma ADD_BNVAL_LEFT: "ALL n.
  11.992 +   RES_FORALL (PWORDLEN (Suc n))
  11.993 +    (%w1. RES_FORALL (PWORDLEN (Suc n))
  11.994 +           (%w2. BNVAL w1 + BNVAL w2 =
  11.995 +                 (BV (bit n w1) + BV (bit n w2)) * 2 ^ n +
  11.996 +                 (BNVAL (WSEG n 0 w1) + BNVAL (WSEG n 0 w2))))"
  11.997 +  by (import bword_num ADD_BNVAL_LEFT)
  11.998 +
  11.999 +lemma ADD_BNVAL_RIGHT: "ALL n.
 11.1000 +   RES_FORALL (PWORDLEN (Suc n))
 11.1001 +    (%w1. RES_FORALL (PWORDLEN (Suc n))
 11.1002 +           (%w2. BNVAL w1 + BNVAL w2 =
 11.1003 +                 (BNVAL (WSEG n 1 w1) + BNVAL (WSEG n 1 w2)) * 2 +
 11.1004 +                 (BV (bit 0 w1) + BV (bit 0 w2))))"
 11.1005 +  by (import bword_num ADD_BNVAL_RIGHT)
 11.1006 +
 11.1007 +lemma ADD_BNVAL_SPLIT: "ALL n1 n2.
 11.1008 +   RES_FORALL (PWORDLEN (n1 + n2))
 11.1009 +    (%w1. RES_FORALL (PWORDLEN (n1 + n2))
 11.1010 +           (%w2. BNVAL w1 + BNVAL w2 =
 11.1011 +                 (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2)) * 2 ^ n2 +
 11.1012 +                 (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2))))"
 11.1013 +  by (import bword_num ADD_BNVAL_SPLIT)
 11.1014 +
 11.1015 +;end_setup
 11.1016 +
 11.1017 +;setup_theory bword_arith
 11.1018 +
 11.1019 +consts
 11.1020 +  ACARRY :: "nat => bool word => bool word => bool => bool" 
 11.1021 +
 11.1022 +specification (ACARRY) ACARRY_DEF: "(ALL w1 w2 cin. ACARRY 0 w1 w2 cin = cin) &
 11.1023 +(ALL n w1 w2 cin.
 11.1024 +    ACARRY (Suc n) w1 w2 cin =
 11.1025 +    VB ((BV (bit n w1) + BV (bit n w2) + BV (ACARRY n w1 w2 cin)) div 2))"
 11.1026 +  by (import bword_arith ACARRY_DEF)
 11.1027 +
 11.1028 +consts
 11.1029 +  ICARRY :: "nat => bool word => bool word => bool => bool" 
 11.1030 +
 11.1031 +specification (ICARRY) ICARRY_DEF: "(ALL w1 w2 cin. ICARRY 0 w1 w2 cin = cin) &
 11.1032 +(ALL n w1 w2 cin.
 11.1033 +    ICARRY (Suc n) w1 w2 cin =
 11.1034 +    (bit n w1 & bit n w2 | (bit n w1 | bit n w2) & ICARRY n w1 w2 cin))"
 11.1035 +  by (import bword_arith ICARRY_DEF)
 11.1036 +
 11.1037 +lemma ACARRY_EQ_ICARRY: "ALL n.
 11.1038 +   RES_FORALL (PWORDLEN n)
 11.1039 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1040 +           (%w2. ALL cin k.
 11.1041 +                    k <= n --> ACARRY k w1 w2 cin = ICARRY k w1 w2 cin))"
 11.1042 +  by (import bword_arith ACARRY_EQ_ICARRY)
 11.1043 +
 11.1044 +lemma BNVAL_LESS_EQ: "ALL n. RES_FORALL (PWORDLEN n) (%w. BNVAL w <= 2 ^ n - 1)"
 11.1045 +  by (import bword_arith BNVAL_LESS_EQ)
 11.1046 +
 11.1047 +lemma ADD_BNVAL_LESS_EQ1: "ALL n cin.
 11.1048 +   RES_FORALL (PWORDLEN n)
 11.1049 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1050 +           (%w2. (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n <= Suc 0))"
 11.1051 +  by (import bword_arith ADD_BNVAL_LESS_EQ1)
 11.1052 +
 11.1053 +lemma ADD_BV_BNVAL_DIV_LESS_EQ1: "ALL n x1 x2 cin.
 11.1054 +   RES_FORALL (PWORDLEN n)
 11.1055 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1056 +           (%w2. (BV x1 + BV x2 +
 11.1057 +                  (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n) div
 11.1058 +                 2
 11.1059 +                 <= 1))"
 11.1060 +  by (import bword_arith ADD_BV_BNVAL_DIV_LESS_EQ1)
 11.1061 +
 11.1062 +lemma ADD_BV_BNVAL_LESS_EQ: "ALL n x1 x2 cin.
 11.1063 +   RES_FORALL (PWORDLEN n)
 11.1064 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1065 +           (%w2. BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))
 11.1066 +                 <= Suc (2 ^ Suc n)))"
 11.1067 +  by (import bword_arith ADD_BV_BNVAL_LESS_EQ)
 11.1068 +
 11.1069 +lemma ADD_BV_BNVAL_LESS_EQ1: "ALL n x1 x2 cin.
 11.1070 +   RES_FORALL (PWORDLEN n)
 11.1071 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1072 +           (%w2. (BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))) div
 11.1073 +                 2 ^ Suc n
 11.1074 +                 <= 1))"
 11.1075 +  by (import bword_arith ADD_BV_BNVAL_LESS_EQ1)
 11.1076 +
 11.1077 +lemma ACARRY_EQ_ADD_DIV: "ALL n.
 11.1078 +   RES_FORALL (PWORDLEN n)
 11.1079 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1080 +           (%w2. ALL k<n.
 11.1081 +                    BV (ACARRY k w1 w2 cin) =
 11.1082 +                    (BNVAL (WSEG k 0 w1) + BNVAL (WSEG k 0 w2) + BV cin) div
 11.1083 +                    2 ^ k))"
 11.1084 +  by (import bword_arith ACARRY_EQ_ADD_DIV)
 11.1085 +
 11.1086 +lemma ADD_WORD_SPLIT: "ALL n1 n2.
 11.1087 +   RES_FORALL (PWORDLEN (n1 + n2))
 11.1088 +    (%w1. RES_FORALL (PWORDLEN (n1 + n2))
 11.1089 +           (%w2. ALL cin.
 11.1090 +                    NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
 11.1091 +                    WCAT
 11.1092 +                     (NBWORD n1
 11.1093 +                       (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
 11.1094 +                        BV (ACARRY n2 w1 w2 cin)),
 11.1095 +                      NBWORD n2
 11.1096 +                       (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) +
 11.1097 +                        BV cin))))"
 11.1098 +  by (import bword_arith ADD_WORD_SPLIT)
 11.1099 +
 11.1100 +lemma WSEG_NBWORD_ADD: "ALL n.
 11.1101 +   RES_FORALL (PWORDLEN n)
 11.1102 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1103 +           (%w2. ALL m k cin.
 11.1104 +                    m + k <= n -->
 11.1105 +                    WSEG m k (NBWORD n (BNVAL w1 + BNVAL w2 + BV cin)) =
 11.1106 +                    NBWORD m
 11.1107 +                     (BNVAL (WSEG m k w1) + BNVAL (WSEG m k w2) +
 11.1108 +                      BV (ACARRY k w1 w2 cin))))"
 11.1109 +  by (import bword_arith WSEG_NBWORD_ADD)
 11.1110 +
 11.1111 +lemma ADD_NBWORD_EQ0_SPLIT: "ALL n1 n2.
 11.1112 +   RES_FORALL (PWORDLEN (n1 + n2))
 11.1113 +    (%w1. RES_FORALL (PWORDLEN (n1 + n2))
 11.1114 +           (%w2. ALL cin.
 11.1115 +                    (NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
 11.1116 +                     NBWORD (n1 + n2) 0) =
 11.1117 +                    (NBWORD n1
 11.1118 +                      (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
 11.1119 +                       BV (ACARRY n2 w1 w2 cin)) =
 11.1120 +                     NBWORD n1 0 &
 11.1121 +                     NBWORD n2
 11.1122 +                      (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) +
 11.1123 +                       BV cin) =
 11.1124 +                     NBWORD n2 0)))"
 11.1125 +  by (import bword_arith ADD_NBWORD_EQ0_SPLIT)
 11.1126 +
 11.1127 +lemma ACARRY_MSB: "ALL n.
 11.1128 +   RES_FORALL (PWORDLEN n)
 11.1129 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1130 +           (%w2. ALL cin.
 11.1131 +                    ACARRY n w1 w2 cin =
 11.1132 +                    bit n (NBWORD (Suc n) (BNVAL w1 + BNVAL w2 + BV cin))))"
 11.1133 +  by (import bword_arith ACARRY_MSB)
 11.1134 +
 11.1135 +lemma ACARRY_WSEG: "ALL n.
 11.1136 +   RES_FORALL (PWORDLEN n)
 11.1137 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1138 +           (%w2. ALL cin k m.
 11.1139 +                    k < m & m <= n -->
 11.1140 +                    ACARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
 11.1141 +                    ACARRY k w1 w2 cin))"
 11.1142 +  by (import bword_arith ACARRY_WSEG)
 11.1143 +
 11.1144 +lemma ICARRY_WSEG: "ALL n.
 11.1145 +   RES_FORALL (PWORDLEN n)
 11.1146 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1147 +           (%w2. ALL cin k m.
 11.1148 +                    k < m & m <= n -->
 11.1149 +                    ICARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
 11.1150 +                    ICARRY k w1 w2 cin))"
 11.1151 +  by (import bword_arith ICARRY_WSEG)
 11.1152 +
 11.1153 +lemma ACARRY_ACARRY_WSEG: "ALL n.
 11.1154 +   RES_FORALL (PWORDLEN n)
 11.1155 +    (%w1. RES_FORALL (PWORDLEN n)
 11.1156 +           (%w2. ALL cin m k1 k2.
 11.1157 +                    k1 < m & k2 < n & m + k2 <= n -->
 11.1158 +                    ACARRY k1 (WSEG m k2 w1) (WSEG m k2 w2)
 11.1159 +                     (ACARRY k2 w1 w2 cin) =
 11.1160 +                    ACARRY (k1 + k2) w1 w2 cin))"
 11.1161 +  by (import bword_arith ACARRY_ACARRY_WSEG)
 11.1162 +
 11.1163 +;end_setup
 11.1164 +
 11.1165 +;setup_theory bword_bitop
 11.1166 +
 11.1167 +consts
 11.1168 +  WNOT :: "bool word => bool word" 
 11.1169 +
 11.1170 +specification (WNOT) WNOT_DEF: "ALL l. WNOT (WORD l) = WORD (map Not l)"
 11.1171 +  by (import bword_bitop WNOT_DEF)
 11.1172 +
 11.1173 +lemma PBITOP_WNOT: "IN WNOT PBITOP"
 11.1174 +  by (import bword_bitop PBITOP_WNOT)
 11.1175 +
 11.1176 +lemma WNOT_WNOT: "ALL w. WNOT (WNOT w) = w"
 11.1177 +  by (import bword_bitop WNOT_WNOT)
 11.1178 +
 11.1179 +lemma WCAT_WNOT: "ALL n1 n2.
 11.1180 +   RES_FORALL (PWORDLEN n1)
 11.1181 +    (%w1. RES_FORALL (PWORDLEN n2)
 11.1182 +           (%w2. WCAT (WNOT w1, WNOT w2) = WNOT (WCAT (w1, w2))))"
 11.1183 +  by (import bword_bitop WCAT_WNOT)
 11.1184 +
 11.1185 +consts
 11.1186 +  WAND :: "bool word => bool word => bool word" 
 11.1187 +
 11.1188 +specification (WAND) WAND_DEF: "ALL l1 l2. WAND (WORD l1) (WORD l2) = WORD (map2 op & l1 l2)"
 11.1189 +  by (import bword_bitop WAND_DEF)
 11.1190 +
 11.1191 +lemma PBITBOP_WAND: "IN WAND PBITBOP"
 11.1192 +  by (import bword_bitop PBITBOP_WAND)
 11.1193 +
 11.1194 +consts
 11.1195 +  WOR :: "bool word => bool word => bool word" 
 11.1196 +
 11.1197 +specification (WOR) WOR_DEF: "ALL l1 l2. WOR (WORD l1) (WORD l2) = WORD (map2 op | l1 l2)"
 11.1198 +  by (import bword_bitop WOR_DEF)
 11.1199 +
 11.1200 +lemma PBITBOP_WOR: "IN WOR PBITBOP"
 11.1201 +  by (import bword_bitop PBITBOP_WOR)
 11.1202 +
 11.1203 +consts
 11.1204 +  WXOR :: "bool word => bool word => bool word" 
 11.1205 +
 11.1206 +specification (WXOR) WXOR_DEF: "ALL l1 l2. WXOR (WORD l1) (WORD l2) = WORD (map2 (%x y. x ~= y) l1 l2)"
 11.1207 +  by (import bword_bitop WXOR_DEF)
 11.1208 +
 11.1209 +lemma PBITBOP_WXOR: "IN WXOR PBITBOP"
 11.1210 +  by (import bword_bitop PBITBOP_WXOR)
 11.1211 +
 11.1212 +;end_setup
 11.1213 +
 11.1214 +end
 11.1215 +
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/src/HOL/Import/HOL/HOL4Word32.thy	Fri Apr 02 17:37:45 2004 +0200
    12.3 @@ -0,0 +1,1451 @@
    12.4 +theory HOL4Word32 = HOL4Base:
    12.5 +
    12.6 +;setup_theory bits
    12.7 +
    12.8 +consts
    12.9 +  DIV2 :: "nat => nat" 
   12.10 +
   12.11 +defs
   12.12 +  DIV2_primdef: "DIV2 == %n. n div 2"
   12.13 +
   12.14 +lemma DIV2_def: "ALL n. DIV2 n = n div 2"
   12.15 +  by (import bits DIV2_def)
   12.16 +
   12.17 +consts
   12.18 +  TIMES_2EXP :: "nat => nat => nat" 
   12.19 +
   12.20 +defs
   12.21 +  TIMES_2EXP_primdef: "TIMES_2EXP == %x n. n * 2 ^ x"
   12.22 +
   12.23 +lemma TIMES_2EXP_def: "ALL x n. TIMES_2EXP x n = n * 2 ^ x"
   12.24 +  by (import bits TIMES_2EXP_def)
   12.25 +
   12.26 +consts
   12.27 +  DIV_2EXP :: "nat => nat => nat" 
   12.28 +
   12.29 +defs
   12.30 +  DIV_2EXP_primdef: "DIV_2EXP == %x n. n div 2 ^ x"
   12.31 +
   12.32 +lemma DIV_2EXP_def: "ALL x n. DIV_2EXP x n = n div 2 ^ x"
   12.33 +  by (import bits DIV_2EXP_def)
   12.34 +
   12.35 +consts
   12.36 +  MOD_2EXP :: "nat => nat => nat" 
   12.37 +
   12.38 +defs
   12.39 +  MOD_2EXP_primdef: "MOD_2EXP == %x n. n mod 2 ^ x"
   12.40 +
   12.41 +lemma MOD_2EXP_def: "ALL x n. MOD_2EXP x n = n mod 2 ^ x"
   12.42 +  by (import bits MOD_2EXP_def)
   12.43 +
   12.44 +consts
   12.45 +  DIVMOD_2EXP :: "nat => nat => nat * nat" 
   12.46 +
   12.47 +defs
   12.48 +  DIVMOD_2EXP_primdef: "DIVMOD_2EXP == %x n. (n div 2 ^ x, n mod 2 ^ x)"
   12.49 +
   12.50 +lemma DIVMOD_2EXP_def: "ALL x n. DIVMOD_2EXP x n = (n div 2 ^ x, n mod 2 ^ x)"
   12.51 +  by (import bits DIVMOD_2EXP_def)
   12.52 +
   12.53 +consts
   12.54 +  SBIT :: "bool => nat => nat" 
   12.55 +
   12.56 +defs
   12.57 +  SBIT_primdef: "SBIT == %b n. if b then 2 ^ n else 0"
   12.58 +
   12.59 +lemma SBIT_def: "ALL b n. SBIT b n = (if b then 2 ^ n else 0)"
   12.60 +  by (import bits SBIT_def)
   12.61 +
   12.62 +consts
   12.63 +  BITS :: "nat => nat => nat => nat" 
   12.64 +
   12.65 +defs
   12.66 +  BITS_primdef: "BITS == %h l n. MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
   12.67 +
   12.68 +lemma BITS_def: "ALL h l n. BITS h l n = MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
   12.69 +  by (import bits BITS_def)
   12.70 +
   12.71 +constdefs
   12.72 +  bit :: "nat => nat => bool" 
   12.73 +  "bit == %b n. BITS b b n = 1"
   12.74 +
   12.75 +lemma BIT_def: "ALL b n. bit b n = (BITS b b n = 1)"
   12.76 +  by (import bits BIT_def)
   12.77 +
   12.78 +consts
   12.79 +  SLICE :: "nat => nat => nat => nat" 
   12.80 +
   12.81 +defs
   12.82 +  SLICE_primdef: "SLICE == %h l n. MOD_2EXP (Suc h) n - MOD_2EXP l n"
   12.83 +
   12.84 +lemma SLICE_def: "ALL h l n. SLICE h l n = MOD_2EXP (Suc h) n - MOD_2EXP l n"
   12.85 +  by (import bits SLICE_def)
   12.86 +
   12.87 +consts
   12.88 +  LSBn :: "nat => bool" 
   12.89 +
   12.90 +defs
   12.91 +  LSBn_primdef: "LSBn == bit 0"
   12.92 +
   12.93 +lemma LSBn_def: "LSBn = bit 0"
   12.94 +  by (import bits LSBn_def)
   12.95 +
   12.96 +consts
   12.97 +  BITWISE :: "nat => (bool => bool => bool) => nat => nat => nat" 
   12.98 +
   12.99 +specification (BITWISE_primdef: BITWISE) BITWISE_def: "(ALL oper x y. BITWISE 0 oper x y = 0) &
  12.100 +(ALL n oper x y.
  12.101 +    BITWISE (Suc n) oper x y =
  12.102 +    BITWISE n oper x y + SBIT (oper (bit n x) (bit n y)) n)"
  12.103 +  by (import bits BITWISE_def)
  12.104 +
  12.105 +lemma DIV1: "ALL x::nat. x div (1::nat) = x"
  12.106 +  by (import bits DIV1)
  12.107 +
  12.108 +lemma SUC_SUB: "Suc a - a = 1"
  12.109 +  by (import bits SUC_SUB)
  12.110 +
  12.111 +lemma DIV_MULT_1: "ALL (r::nat) n::nat. r < n --> (n + r) div n = (1::nat)"
  12.112 +  by (import bits DIV_MULT_1)
  12.113 +
  12.114 +lemma ZERO_LT_TWOEXP: "ALL n::nat. (0::nat) < (2::nat) ^ n"
  12.115 +  by (import bits ZERO_LT_TWOEXP)
  12.116 +
  12.117 +lemma MOD_2EXP_LT: "ALL (n::nat) k::nat. k mod (2::nat) ^ n < (2::nat) ^ n"
  12.118 +  by (import bits MOD_2EXP_LT)
  12.119 +
  12.120 +lemma TWOEXP_DIVISION: "ALL (n::nat) k::nat.
  12.121 +   k = k div (2::nat) ^ n * (2::nat) ^ n + k mod (2::nat) ^ n"
  12.122 +  by (import bits TWOEXP_DIVISION)
  12.123 +
  12.124 +lemma TWOEXP_MONO: "ALL (a::nat) b::nat. a < b --> (2::nat) ^ a < (2::nat) ^ b"
  12.125 +  by (import bits TWOEXP_MONO)
  12.126 +
  12.127 +lemma TWOEXP_MONO2: "ALL (a::nat) b::nat. a <= b --> (2::nat) ^ a <= (2::nat) ^ b"
  12.128 +  by (import bits TWOEXP_MONO2)
  12.129 +
  12.130 +lemma EXP_SUB_LESS_EQ: "ALL (a::nat) b::nat. (2::nat) ^ (a - b) <= (2::nat) ^ a"
  12.131 +  by (import bits EXP_SUB_LESS_EQ)
  12.132 +
  12.133 +lemma BITS_THM: "ALL x xa xb. BITS x xa xb = xb div 2 ^ xa mod 2 ^ (Suc x - xa)"
  12.134 +  by (import bits BITS_THM)
  12.135 +
  12.136 +lemma BITSLT_THM: "ALL h l n. BITS h l n < 2 ^ (Suc h - l)"
  12.137 +  by (import bits BITSLT_THM)
  12.138 +
  12.139 +lemma DIV_MULT_LEM: "ALL (m::nat) n::nat. (0::nat) < n --> m div n * n <= m"
  12.140 +  by (import bits DIV_MULT_LEM)
  12.141 +
  12.142 +lemma MOD_2EXP_LEM: "ALL (n::nat) x::nat.
  12.143 +   n mod (2::nat) ^ x = n - n div (2::nat) ^ x * (2::nat) ^ x"
  12.144 +  by (import bits MOD_2EXP_LEM)
  12.145 +
  12.146 +lemma BITS2_THM: "ALL h l n. BITS h l n = n mod 2 ^ Suc h div 2 ^ l"
  12.147 +  by (import bits BITS2_THM)
  12.148 +
  12.149 +lemma BITS_COMP_THM: "ALL h1 l1 h2 l2 n.
  12.150 +   h2 + l1 <= h1 --> BITS h2 l2 (BITS h1 l1 n) = BITS (h2 + l1) (l2 + l1) n"
  12.151 +  by (import bits BITS_COMP_THM)
  12.152 +
  12.153 +lemma BITS_DIV_THM: "ALL h l x n. BITS h l x div 2 ^ n = BITS h (l + n) x"
  12.154 +  by (import bits BITS_DIV_THM)
  12.155 +
  12.156 +lemma BITS_LT_HIGH: "ALL h l n. n < 2 ^ Suc h --> BITS h l n = n div 2 ^ l"
  12.157 +  by (import bits BITS_LT_HIGH)
  12.158 +
  12.159 +lemma BITS_ZERO: "ALL h l n. h < l --> BITS h l n = 0"
  12.160 +  by (import bits BITS_ZERO)
  12.161 +
  12.162 +lemma BITS_ZERO2: "ALL h l. BITS h l 0 = 0"
  12.163 +  by (import bits BITS_ZERO2)
  12.164 +
  12.165 +lemma BITS_ZERO3: "ALL h x. BITS h 0 x = x mod 2 ^ Suc h"
  12.166 +  by (import bits BITS_ZERO3)
  12.167 +
  12.168 +lemma BITS_COMP_THM2: "ALL h1 l1 h2 l2 n.
  12.169 +   BITS h2 l2 (BITS h1 l1 n) = BITS (min h1 (h2 + l1)) (l2 + l1) n"
  12.170 +  by (import bits BITS_COMP_THM2)
  12.171 +
  12.172 +lemma NOT_MOD2_LEM: "ALL n::nat. (n mod (2::nat) ~= (0::nat)) = (n mod (2::nat) = (1::nat))"
  12.173 +  by (import bits NOT_MOD2_LEM)
  12.174 +
  12.175 +lemma NOT_MOD2_LEM2: "ALL (n::nat) a::'a.
  12.176 +   (n mod (2::nat) ~= (1::nat)) = (n mod (2::nat) = (0::nat))"
  12.177 +  by (import bits NOT_MOD2_LEM2)
  12.178 +
  12.179 +lemma EVEN_MOD2_LEM: "ALL n. EVEN n = (n mod 2 = 0)"
  12.180 +  by (import bits EVEN_MOD2_LEM)
  12.181 +
  12.182 +lemma ODD_MOD2_LEM: "ALL n. ODD n = (n mod 2 = 1)"
  12.183 +  by (import bits ODD_MOD2_LEM)
  12.184 +
  12.185 +lemma LSB_ODD: "LSBn = ODD"
  12.186 +  by (import bits LSB_ODD)
  12.187 +
  12.188 +lemma DIV_MULT_THM: "ALL (x::nat) n::nat.
  12.189 +   n div (2::nat) ^ x * (2::nat) ^ x = n - n mod (2::nat) ^ x"
  12.190 +  by (import bits DIV_MULT_THM)
  12.191 +
  12.192 +lemma DIV_MULT_THM2: "ALL x::nat. (2::nat) * (x div (2::nat)) = x - x mod (2::nat)"
  12.193 +  by (import bits DIV_MULT_THM2)
  12.194 +
  12.195 +lemma LESS_EQ_EXP_MULT: "ALL (a::nat) b::nat. a <= b --> (EX x::nat. (2::nat) ^ b = x * (2::nat) ^ a)"
  12.196 +  by (import bits LESS_EQ_EXP_MULT)
  12.197 +
  12.198 +lemma SLICE_LEM1: "ALL (a::nat) (x::nat) y::nat.
  12.199 +   a div (2::nat) ^ (x + y) * (2::nat) ^ (x + y) =
  12.200 +   a div (2::nat) ^ x * (2::nat) ^ x -
  12.201 +   a div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
  12.202 +  by (import bits SLICE_LEM1)
  12.203 +
  12.204 +lemma SLICE_LEM2: "ALL (a::'a) (x::nat) y::nat.
  12.205 +   (n::nat) mod (2::nat) ^ (x + y) =
  12.206 +   n mod (2::nat) ^ x + n div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
  12.207 +  by (import bits SLICE_LEM2)
  12.208 +
  12.209 +lemma SLICE_LEM3: "ALL (n::nat) (h::nat) l::nat.
  12.210 +   l < h --> n mod (2::nat) ^ Suc l <= n mod (2::nat) ^ h"
  12.211 +  by (import bits SLICE_LEM3)
  12.212 +
  12.213 +lemma SLICE_THM: "ALL n h l. SLICE h l n = BITS h l n * 2 ^ l"
  12.214 +  by (import bits SLICE_THM)
  12.215 +
  12.216 +lemma SLICELT_THM: "ALL h l n. SLICE h l n < 2 ^ Suc h"
  12.217 +  by (import bits SLICELT_THM)
  12.218 +
  12.219 +lemma BITS_SLICE_THM: "ALL h l n. BITS h l (SLICE h l n) = BITS h l n"
  12.220 +  by (import bits BITS_SLICE_THM)
  12.221 +
  12.222 +lemma BITS_SLICE_THM2: "ALL h l n. h <= h2 --> BITS h2 l (SLICE h l n) = BITS h l n"
  12.223 +  by (import bits BITS_SLICE_THM2)
  12.224 +
  12.225 +lemma MOD_2EXP_MONO: "ALL (n::nat) (h::nat) l::nat.
  12.226 +   l <= h --> n mod (2::nat) ^ l <= n mod (2::nat) ^ Suc h"
  12.227 +  by (import bits MOD_2EXP_MONO)
  12.228 +
  12.229 +lemma SLICE_COMP_THM: "ALL h m l n.
  12.230 +   Suc m <= h & l <= m --> SLICE h (Suc m) n + SLICE m l n = SLICE h l n"
  12.231 +  by (import bits SLICE_COMP_THM)
  12.232 +
  12.233 +lemma SLICE_ZERO: "ALL h l n. h < l --> SLICE h l n = 0"
  12.234 +  by (import bits SLICE_ZERO)
  12.235 +
  12.236 +lemma BIT_COMP_THM3: "ALL h m l n.
  12.237 +   Suc m <= h & l <= m -->
  12.238 +   BITS h (Suc m) n * 2 ^ (Suc m - l) + BITS m l n = BITS h l n"
  12.239 +  by (import bits BIT_COMP_THM3)
  12.240 +
  12.241 +lemma NOT_BIT: "ALL n a. (~ bit n a) = (BITS n n a = 0)"
  12.242 +  by (import bits NOT_BIT)
  12.243 +
  12.244 +lemma NOT_BITS: "ALL n a. (BITS n n a ~= 0) = (BITS n n a = 1)"
  12.245 +  by (import bits NOT_BITS)
  12.246 +
  12.247 +lemma NOT_BITS2: "ALL n a. (BITS n n a ~= 1) = (BITS n n a = 0)"
  12.248 +  by (import bits NOT_BITS2)
  12.249 +
  12.250 +lemma BIT_SLICE: "ALL n a b. (bit n a = bit n b) = (SLICE n n a = SLICE n n b)"
  12.251 +  by (import bits BIT_SLICE)
  12.252 +
  12.253 +lemma BIT_SLICE_LEM: "ALL y x n. SBIT (bit x n) (x + y) = SLICE x x n * 2 ^ y"
  12.254 +  by (import bits BIT_SLICE_LEM)
  12.255 +
  12.256 +lemma BIT_SLICE_THM: "ALL x xa. SBIT (bit x xa) x = SLICE x x xa"
  12.257 +  by (import bits BIT_SLICE_THM)
  12.258 +
  12.259 +lemma SBIT_DIV: "ALL b m n. n < m --> SBIT b (m - n) = SBIT b m div 2 ^ n"
  12.260 +  by (import bits SBIT_DIV)
  12.261 +
  12.262 +lemma BITS_SUC: "ALL h l n.
  12.263 +   l <= Suc h -->
  12.264 +   SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n = BITS (Suc h) l n"
  12.265 +  by (import bits BITS_SUC)
  12.266 +
  12.267 +lemma BITS_SUC_THM: "ALL h l n.
  12.268 +   BITS (Suc h) l n =
  12.269 +   (if Suc h < l then 0 else SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n)"
  12.270 +  by (import bits BITS_SUC_THM)
  12.271 +
  12.272 +lemma BIT_BITS_THM: "ALL h l a b.
  12.273 +   (ALL x. l <= x & x <= h --> bit x a = bit x b) =
  12.274 +   (BITS h l a = BITS h l b)"
  12.275 +  by (import bits BIT_BITS_THM)
  12.276 +
  12.277 +lemma BITWISE_LT_2EXP: "ALL n oper a b. BITWISE n oper a b < 2 ^ n"
  12.278 +  by (import bits BITWISE_LT_2EXP)
  12.279 +
  12.280 +lemma LESS_EXP_MULT2: "ALL (a::nat) b::nat.
  12.281 +   a < b -->
  12.282 +   (EX x::nat. (2::nat) ^ b = (2::nat) ^ (x + (1::nat)) * (2::nat) ^ a)"
  12.283 +  by (import bits LESS_EXP_MULT2)
  12.284 +
  12.285 +lemma BITWISE_THM: "ALL x n oper a b.
  12.286 +   x < n --> bit x (BITWISE n oper a b) = oper (bit x a) (bit x b)"
  12.287 +  by (import bits BITWISE_THM)
  12.288 +
  12.289 +lemma BITWISE_COR: "ALL x n oper a b.
  12.290 +   x < n -->
  12.291 +   oper (bit x a) (bit x b) --> BITWISE n oper a b div 2 ^ x mod 2 = 1"
  12.292 +  by (import bits BITWISE_COR)
  12.293 +
  12.294 +lemma BITWISE_NOT_COR: "ALL x n oper a b.
  12.295 +   x < n -->
  12.296 +   ~ oper (bit x a) (bit x b) --> BITWISE n oper a b div 2 ^ x mod 2 = 0"
  12.297 +  by (import bits BITWISE_NOT_COR)
  12.298 +
  12.299 +lemma MOD_PLUS_RIGHT: "ALL n::nat.
  12.300 +   (0::nat) < n -->
  12.301 +   (ALL (j::nat) k::nat. (j + k mod n) mod n = (j + k) mod n)"
  12.302 +  by (import bits MOD_PLUS_RIGHT)
  12.303 +
  12.304 +lemma MOD_PLUS_1: "ALL n::nat.
  12.305 +   (0::nat) < n -->
  12.306 +   (ALL x::nat.
  12.307 +       ((x + (1::nat)) mod n = (0::nat)) = (x mod n + (1::nat) = n))"
  12.308 +  by (import bits MOD_PLUS_1)
  12.309 +
  12.310 +lemma MOD_ADD_1: "ALL n::nat.
  12.311 +   (0::nat) < n -->
  12.312 +   (ALL x::nat.
  12.313 +       (x + (1::nat)) mod n ~= (0::nat) -->
  12.314 +       (x + (1::nat)) mod n = x mod n + (1::nat))"
  12.315 +  by (import bits MOD_ADD_1)
  12.316 +
  12.317 +;end_setup
  12.318 +
  12.319 +;setup_theory word32
  12.320 +
  12.321 +consts
  12.322 +  HB :: "nat" 
  12.323 +
  12.324 +defs
  12.325 +  HB_primdef: "HB ==
  12.326 +NUMERAL
  12.327 + (NUMERAL_BIT1
  12.328 +   (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
  12.329 +
  12.330 +lemma HB_def: "HB =
  12.331 +NUMERAL
  12.332 + (NUMERAL_BIT1
  12.333 +   (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
  12.334 +  by (import word32 HB_def)
  12.335 +
  12.336 +consts
  12.337 +  WL :: "nat" 
  12.338 +
  12.339 +defs
  12.340 +  WL_primdef: "WL == Suc HB"
  12.341 +
  12.342 +lemma WL_def: "WL = Suc HB"
  12.343 +  by (import word32 WL_def)
  12.344 +
  12.345 +consts
  12.346 +  MODw :: "nat => nat" 
  12.347 +
  12.348 +defs
  12.349 +  MODw_primdef: "MODw == %n. n mod 2 ^ WL"
  12.350 +
  12.351 +lemma MODw_def: "ALL n. MODw n = n mod 2 ^ WL"
  12.352 +  by (import word32 MODw_def)
  12.353 +
  12.354 +consts
  12.355 +  INw :: "nat => bool" 
  12.356 +
  12.357 +defs
  12.358 +  INw_primdef: "INw == %n. n < 2 ^ WL"
  12.359 +
  12.360 +lemma INw_def: "ALL n. INw n = (n < 2 ^ WL)"
  12.361 +  by (import word32 INw_def)
  12.362 +
  12.363 +consts
  12.364 +  EQUIV :: "nat => nat => bool" 
  12.365 +
  12.366 +defs
  12.367 +  EQUIV_primdef: "EQUIV == %x y. MODw x = MODw y"
  12.368 +
  12.369 +lemma EQUIV_def: "ALL x y. EQUIV x y = (MODw x = MODw y)"
  12.370 +  by (import word32 EQUIV_def)
  12.371 +
  12.372 +lemma EQUIV_QT: "ALL x y. EQUIV x y = (EQUIV x = EQUIV y)"
  12.373 +  by (import word32 EQUIV_QT)
  12.374 +
  12.375 +lemma FUNPOW_THM: "ALL f n x. (f ^ n) (f x) = f ((f ^ n) x)"
  12.376 +  by (import word32 FUNPOW_THM)
  12.377 +
  12.378 +lemma FUNPOW_THM2: "ALL f n x. (f ^ Suc n) x = f ((f ^ n) x)"
  12.379 +  by (import word32 FUNPOW_THM2)
  12.380 +
  12.381 +lemma FUNPOW_COMP: "ALL f m n a. (f ^ m) ((f ^ n) a) = (f ^ (m + n)) a"
  12.382 +  by (import word32 FUNPOW_COMP)
  12.383 +
  12.384 +lemma INw_MODw: "ALL n. INw (MODw n)"
  12.385 +  by (import word32 INw_MODw)
  12.386 +
  12.387 +lemma TOw_IDEM: "ALL a. INw a --> MODw a = a"
  12.388 +  by (import word32 TOw_IDEM)
  12.389 +
  12.390 +lemma MODw_IDEM2: "ALL a. MODw (MODw a) = MODw a"
  12.391 +  by (import word32 MODw_IDEM2)
  12.392 +
  12.393 +lemma TOw_QT: "ALL a. EQUIV (MODw a) a"
  12.394 +  by (import word32 TOw_QT)
  12.395 +
  12.396 +lemma MODw_THM: "MODw = BITS HB 0"
  12.397 +  by (import word32 MODw_THM)
  12.398 +
  12.399 +lemma MOD_ADD: "ALL a b. MODw (a + b) = MODw (MODw a + MODw b)"
  12.400 +  by (import word32 MOD_ADD)
  12.401 +
  12.402 +lemma MODw_MULT: "ALL a b. MODw (a * b) = MODw (MODw a * MODw b)"
  12.403 +  by (import word32 MODw_MULT)
  12.404 +
  12.405 +consts
  12.406 +  AONE :: "nat" 
  12.407 +
  12.408 +defs
  12.409 +  AONE_primdef: "AONE == 1"
  12.410 +
  12.411 +lemma AONE_def: "AONE = 1"
  12.412 +  by (import word32 AONE_def)
  12.413 +
  12.414 +lemma ADD_QT: "(ALL n. EQUIV (0 + n) n) & (ALL m n. EQUIV (Suc m + n) (Suc (m + n)))"
  12.415 +  by (import word32 ADD_QT)
  12.416 +
  12.417 +lemma ADD_0_QT: "ALL a. EQUIV (a + 0) a"
  12.418 +  by (import word32 ADD_0_QT)
  12.419 +
  12.420 +lemma ADD_COMM_QT: "ALL a b. EQUIV (a + b) (b + a)"
  12.421 +  by (import word32 ADD_COMM_QT)
  12.422 +
  12.423 +lemma ADD_ASSOC_QT: "ALL a b c. EQUIV (a + (b + c)) (a + b + c)"
  12.424 +  by (import word32 ADD_ASSOC_QT)
  12.425 +
  12.426 +lemma MULT_QT: "(ALL n. EQUIV (0 * n) 0) & (ALL m n. EQUIV (Suc m * n) (m * n + n))"
  12.427 +  by (import word32 MULT_QT)
  12.428 +
  12.429 +lemma ADD1_QT: "ALL m. EQUIV (Suc m) (m + AONE)"
  12.430 +  by (import word32 ADD1_QT)
  12.431 +
  12.432 +lemma ADD_CLAUSES_QT: "(ALL m. EQUIV (0 + m) m) &
  12.433 +(ALL m. EQUIV (m + 0) m) &
  12.434 +(ALL m n. EQUIV (Suc m + n) (Suc (m + n))) &
  12.435 +(ALL m n. EQUIV (m + Suc n) (Suc (m + n)))"
  12.436 +  by (import word32 ADD_CLAUSES_QT)
  12.437 +
  12.438 +lemma SUC_EQUIV_COMP: "ALL a b. EQUIV (Suc a) b --> EQUIV a (b + (2 ^ WL - 1))"
  12.439 +  by (import word32 SUC_EQUIV_COMP)
  12.440 +
  12.441 +lemma INV_SUC_EQ_QT: "ALL m n. EQUIV (Suc m) (Suc n) = EQUIV m n"
  12.442 +  by (import word32 INV_SUC_EQ_QT)
  12.443 +
  12.444 +lemma ADD_INV_0_QT: "ALL m n. EQUIV (m + n) m --> EQUIV n 0"
  12.445 +  by (import word32 ADD_INV_0_QT)
  12.446 +
  12.447 +lemma ADD_INV_0_EQ_QT: "ALL m n. EQUIV (m + n) m = EQUIV n 0"
  12.448 +  by (import word32 ADD_INV_0_EQ_QT)
  12.449 +
  12.450 +lemma EQ_ADD_LCANCEL_QT: "ALL m n p. EQUIV (m + n) (m + p) = EQUIV n p"
  12.451 +  by (import word32 EQ_ADD_LCANCEL_QT)
  12.452 +
  12.453 +lemma EQ_ADD_RCANCEL_QT: "ALL x xa xb. EQUIV (x + xb) (xa + xb) = EQUIV x xa"
  12.454 +  by (import word32 EQ_ADD_RCANCEL_QT)
  12.455 +
  12.456 +lemma LEFT_ADD_DISTRIB_QT: "ALL m n p. EQUIV (p * (m + n)) (p * m + p * n)"
  12.457 +  by (import word32 LEFT_ADD_DISTRIB_QT)
  12.458 +
  12.459 +lemma MULT_ASSOC_QT: "ALL m n p. EQUIV (m * (n * p)) (m * n * p)"
  12.460 +  by (import word32 MULT_ASSOC_QT)
  12.461 +
  12.462 +lemma MULT_COMM_QT: "ALL m n. EQUIV (m * n) (n * m)"
  12.463 +  by (import word32 MULT_COMM_QT)
  12.464 +
  12.465 +lemma MULT_CLAUSES_QT: "ALL m n.
  12.466 +   EQUIV (0 * m) 0 &
  12.467 +   EQUIV (m * 0) 0 &
  12.468 +   EQUIV (AONE * m) m &
  12.469 +   EQUIV (m * AONE) m &
  12.470 +   EQUIV (Suc m * n) (m * n + n) & EQUIV (m * Suc n) (m + m * n)"
  12.471 +  by (import word32 MULT_CLAUSES_QT)
  12.472 +
  12.473 +consts
  12.474 +  MSBn :: "nat => bool" 
  12.475 +
  12.476 +defs
  12.477 +  MSBn_primdef: "MSBn == bit HB"
  12.478 +
  12.479 +lemma MSBn_def: "MSBn = bit HB"
  12.480 +  by (import word32 MSBn_def)
  12.481 +
  12.482 +consts
  12.483 +  ONE_COMP :: "nat => nat" 
  12.484 +
  12.485 +defs
  12.486 +  ONE_COMP_primdef: "ONE_COMP == %x. 2 ^ WL - 1 - MODw x"
  12.487 +
  12.488 +lemma ONE_COMP_def: "ALL x. ONE_COMP x = 2 ^ WL - 1 - MODw x"
  12.489 +  by (import word32 ONE_COMP_def)
  12.490 +
  12.491 +consts
  12.492 +  TWO_COMP :: "nat => nat" 
  12.493 +
  12.494 +defs
  12.495 +  TWO_COMP_primdef: "TWO_COMP == %x. 2 ^ WL - MODw x"
  12.496 +
  12.497 +lemma TWO_COMP_def: "ALL x. TWO_COMP x = 2 ^ WL - MODw x"
  12.498 +  by (import word32 TWO_COMP_def)
  12.499 +
  12.500 +lemma ADD_TWO_COMP_QT: "ALL a. EQUIV (MODw a + TWO_COMP a) 0"
  12.501 +  by (import word32 ADD_TWO_COMP_QT)
  12.502 +
  12.503 +lemma TWO_COMP_ONE_COMP_QT: "ALL a. EQUIV (TWO_COMP a) (ONE_COMP a + AONE)"
  12.504 +  by (import word32 TWO_COMP_ONE_COMP_QT)
  12.505 +
  12.506 +lemma BIT_EQUIV_THM: "ALL x xa. (ALL xb<WL. bit xb x = bit xb xa) = EQUIV x xa"
  12.507 +  by (import word32 BIT_EQUIV_THM)
  12.508 +
  12.509 +lemma BITS_SUC2: "ALL n a. BITS (Suc n) 0 a = SLICE (Suc n) (Suc n) a + BITS n 0 a"
  12.510 +  by (import word32 BITS_SUC2)
  12.511 +
  12.512 +lemma BITWISE_ONE_COMP_THM: "ALL a b. BITWISE WL (%x y. ~ x) a b = ONE_COMP a"
  12.513 +  by (import word32 BITWISE_ONE_COMP_THM)
  12.514 +
  12.515 +lemma ONE_COMP_THM: "ALL x xa. xa < WL --> bit xa (ONE_COMP x) = (~ bit xa x)"
  12.516 +  by (import word32 ONE_COMP_THM)
  12.517 +
  12.518 +consts
  12.519 +  OR :: "nat => nat => nat" 
  12.520 +
  12.521 +defs
  12.522 +  OR_primdef: "OR == BITWISE WL op |"
  12.523 +
  12.524 +lemma OR_def: "OR = BITWISE WL op |"
  12.525 +  by (import word32 OR_def)
  12.526 +
  12.527 +consts
  12.528 +  AND :: "nat => nat => nat" 
  12.529 +
  12.530 +defs
  12.531 +  AND_primdef: "AND == BITWISE WL op &"
  12.532 +
  12.533 +lemma AND_def: "AND = BITWISE WL op &"
  12.534 +  by (import word32 AND_def)
  12.535 +
  12.536 +consts
  12.537 +  EOR :: "nat => nat => nat" 
  12.538 +
  12.539 +defs
  12.540 +  EOR_primdef: "EOR == BITWISE WL (%x y. x ~= y)"
  12.541 +
  12.542 +lemma EOR_def: "EOR = BITWISE WL (%x y. x ~= y)"
  12.543 +  by (import word32 EOR_def)
  12.544 +
  12.545 +consts
  12.546 +  COMP0 :: "nat" 
  12.547 +
  12.548 +defs
  12.549 +  COMP0_primdef: "COMP0 == ONE_COMP 0"
  12.550 +
  12.551 +lemma COMP0_def: "COMP0 = ONE_COMP 0"
  12.552 +  by (import word32 COMP0_def)
  12.553 +
  12.554 +lemma BITWISE_THM2: "ALL y oper a b.
  12.555 +   (ALL x<WL. oper (bit x a) (bit x b) = bit x y) =
  12.556 +   EQUIV (BITWISE WL oper a b) y"
  12.557 +  by (import word32 BITWISE_THM2)
  12.558 +
  12.559 +lemma OR_ASSOC_QT: "ALL a b c. EQUIV (OR a (OR b c)) (OR (OR a b) c)"
  12.560 +  by (import word32 OR_ASSOC_QT)
  12.561 +
  12.562 +lemma OR_COMM_QT: "ALL a b. EQUIV (OR a b) (OR b a)"
  12.563 +  by (import word32 OR_COMM_QT)
  12.564 +
  12.565 +lemma OR_ABSORB_QT: "ALL a b. EQUIV (AND a (OR a b)) a"
  12.566 +  by (import word32 OR_ABSORB_QT)
  12.567 +
  12.568 +lemma OR_IDEM_QT: "ALL a. EQUIV (OR a a) a"
  12.569 +  by (import word32 OR_IDEM_QT)
  12.570 +
  12.571 +lemma AND_ASSOC_QT: "ALL a b c. EQUIV (AND a (AND b c)) (AND (AND a b) c)"
  12.572 +  by (import word32 AND_ASSOC_QT)
  12.573 +
  12.574 +lemma AND_COMM_QT: "ALL a b. EQUIV (AND a b) (AND b a)"
  12.575 +  by (import word32 AND_COMM_QT)
  12.576 +
  12.577 +lemma AND_ABSORB_QT: "ALL a b. EQUIV (OR a (AND a b)) a"
  12.578 +  by (import word32 AND_ABSORB_QT)
  12.579 +
  12.580 +lemma AND_IDEM_QT: "ALL a. EQUIV (AND a a) a"
  12.581 +  by (import word32 AND_IDEM_QT)
  12.582 +
  12.583 +lemma OR_COMP_QT: "ALL a. EQUIV (OR a (ONE_COMP a)) COMP0"
  12.584 +  by (import word32 OR_COMP_QT)
  12.585 +
  12.586 +lemma AND_COMP_QT: "ALL a. EQUIV (AND a (ONE_COMP a)) 0"
  12.587 +  by (import word32 AND_COMP_QT)
  12.588 +
  12.589 +lemma ONE_COMP_QT: "ALL a. EQUIV (ONE_COMP (ONE_COMP a)) a"
  12.590 +  by (import word32 ONE_COMP_QT)
  12.591 +
  12.592 +lemma RIGHT_AND_OVER_OR_QT: "ALL a b c. EQUIV (AND (OR a b) c) (OR (AND a c) (AND b c))"
  12.593 +  by (import word32 RIGHT_AND_OVER_OR_QT)
  12.594 +
  12.595 +lemma RIGHT_OR_OVER_AND_QT: "ALL a b c. EQUIV (OR (AND a b) c) (AND (OR a c) (OR b c))"
  12.596 +  by (import word32 RIGHT_OR_OVER_AND_QT)
  12.597 +
  12.598 +lemma DE_MORGAN_THM_QT: "ALL a b.
  12.599 +   EQUIV (ONE_COMP (AND a b)) (OR (ONE_COMP a) (ONE_COMP b)) &
  12.600 +   EQUIV (ONE_COMP (OR a b)) (AND (ONE_COMP a) (ONE_COMP b))"
  12.601 +  by (import word32 DE_MORGAN_THM_QT)
  12.602 +
  12.603 +lemma BIT_EQUIV: "ALL n a b. n < WL --> EQUIV a b --> bit n a = bit n b"
  12.604 +  by (import word32 BIT_EQUIV)
  12.605 +
  12.606 +lemma LSB_WELLDEF: "ALL a b. EQUIV a b --> LSBn a = LSBn b"
  12.607 +  by (import word32 LSB_WELLDEF)
  12.608 +
  12.609 +lemma MSB_WELLDEF: "ALL a b. EQUIV a b --> MSBn a = MSBn b"
  12.610 +  by (import word32 MSB_WELLDEF)
  12.611 +
  12.612 +lemma BITWISE_ISTEP: "ALL n oper a b.
  12.613 +   0 < n -->
  12.614 +   BITWISE n oper (a div 2) (b div 2) =
  12.615 +   BITWISE n oper a b div 2 + SBIT (oper (bit n a) (bit n b)) (n - 1)"
  12.616 +  by (import word32 BITWISE_ISTEP)
  12.617 +
  12.618 +lemma BITWISE_EVAL: "ALL n oper a b.
  12.619 +   BITWISE (Suc n) oper a b =
  12.620 +   2 * BITWISE n oper (a div 2) (b div 2) + SBIT (oper (LSBn a) (LSBn b)) 0"
  12.621 +  by (import word32 BITWISE_EVAL)
  12.622 +
  12.623 +lemma BITWISE_WELLDEF: "ALL n oper a b c d.
  12.624 +   EQUIV a b & EQUIV c d --> EQUIV (BITWISE n oper a c) (BITWISE n oper b d)"
  12.625 +  by (import word32 BITWISE_WELLDEF)
  12.626 +
  12.627 +lemma BITWISEw_WELLDEF: "ALL oper a b c d.
  12.628 +   EQUIV a b & EQUIV c d -->
  12.629 +   EQUIV (BITWISE WL oper a c) (BITWISE WL oper b d)"
  12.630 +  by (import word32 BITWISEw_WELLDEF)
  12.631 +
  12.632 +lemma SUC_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (Suc a) (Suc b)"
  12.633 +  by (import word32 SUC_WELLDEF)
  12.634 +
  12.635 +lemma ADD_WELLDEF: "ALL a b c d. EQUIV a b & EQUIV c d --> EQUIV (a + c) (b + d)"
  12.636 +  by (import word32 ADD_WELLDEF)
  12.637 +
  12.638 +lemma MUL_WELLDEF: "ALL a b c d. EQUIV a b & EQUIV c d --> EQUIV (a * c) (b * d)"
  12.639 +  by (import word32 MUL_WELLDEF)
  12.640 +
  12.641 +lemma ONE_COMP_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (ONE_COMP a) (ONE_COMP b)"
  12.642 +  by (import word32 ONE_COMP_WELLDEF)
  12.643 +
  12.644 +lemma TWO_COMP_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (TWO_COMP a) (TWO_COMP b)"
  12.645 +  by (import word32 TWO_COMP_WELLDEF)
  12.646 +
  12.647 +lemma TOw_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (MODw a) (MODw b)"
  12.648 +  by (import word32 TOw_WELLDEF)
  12.649 +
  12.650 +consts
  12.651 +  LSR_ONE :: "nat => nat" 
  12.652 +
  12.653 +defs
  12.654 +  LSR_ONE_primdef: "LSR_ONE == %a. MODw a div 2"
  12.655 +
  12.656 +lemma LSR_ONE_def: "ALL a. LSR_ONE a = MODw a div 2"
  12.657 +  by (import word32 LSR_ONE_def)
  12.658 +
  12.659 +consts
  12.660 +  ASR_ONE :: "nat => nat" 
  12.661 +
  12.662 +defs
  12.663 +  ASR_ONE_primdef: "ASR_ONE == %a. LSR_ONE a + SBIT (MSBn a) HB"
  12.664 +
  12.665 +lemma ASR_ONE_def: "ALL a. ASR_ONE a = LSR_ONE a + SBIT (MSBn a) HB"
  12.666 +  by (import word32 ASR_ONE_def)
  12.667 +
  12.668 +consts
  12.669 +  ROR_ONE :: "nat => nat" 
  12.670 +
  12.671 +defs
  12.672 +  ROR_ONE_primdef: "ROR_ONE == %a. LSR_ONE a + SBIT (LSBn a) HB"
  12.673 +
  12.674 +lemma ROR_ONE_def: "ALL a. ROR_ONE a = LSR_ONE a + SBIT (LSBn a) HB"
  12.675 +  by (import word32 ROR_ONE_def)
  12.676 +
  12.677 +consts
  12.678 +  RRXn :: "bool => nat => nat" 
  12.679 +
  12.680 +defs
  12.681 +  RRXn_primdef: "RRXn == %c a. LSR_ONE a + SBIT c HB"
  12.682 +
  12.683 +lemma RRXn_def: "ALL c a. RRXn c a = LSR_ONE a + SBIT c HB"
  12.684 +  by (import word32 RRXn_def)
  12.685 +
  12.686 +lemma LSR_ONE_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (LSR_ONE a) (LSR_ONE b)"
  12.687 +  by (import word32 LSR_ONE_WELLDEF)
  12.688 +
  12.689 +lemma ASR_ONE_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (ASR_ONE a) (ASR_ONE b)"
  12.690 +  by (import word32 ASR_ONE_WELLDEF)
  12.691 +
  12.692 +lemma ROR_ONE_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (ROR_ONE a) (ROR_ONE b)"
  12.693 +  by (import word32 ROR_ONE_WELLDEF)
  12.694 +
  12.695 +lemma RRX_WELLDEF: "ALL a b c. EQUIV a b --> EQUIV (RRXn c a) (RRXn c b)"
  12.696 +  by (import word32 RRX_WELLDEF)
  12.697 +
  12.698 +lemma LSR_ONE: "LSR_ONE = BITS HB 1"
  12.699 +  by (import word32 LSR_ONE)
  12.700 +
  12.701 +typedef (open) word32 = "{x. EX xa. x = EQUIV xa}" 
  12.702 +  by (rule typedef_helper,import word32 word32_TY_DEF)
  12.703 +
  12.704 +lemmas word32_TY_DEF = typedef_hol2hol4 [OF type_definition_word32]
  12.705 +
  12.706 +consts
  12.707 +  mk_word32 :: "(nat => bool) => word32" 
  12.708 +  dest_word32 :: "word32 => nat => bool" 
  12.709 +
  12.710 +specification (dest_word32 mk_word32) word32_tybij: "(ALL a. mk_word32 (dest_word32 a) = a) &
  12.711 +(ALL r. (EX x. r = EQUIV x) = (dest_word32 (mk_word32 r) = r))"
  12.712 +  by (import word32 word32_tybij)
  12.713 +
  12.714 +consts
  12.715 +  w_0 :: "word32" 
  12.716 +
  12.717 +defs
  12.718 +  w_0_primdef: "w_0 == mk_word32 (EQUIV 0)"
  12.719 +
  12.720 +lemma w_0_def: "w_0 = mk_word32 (EQUIV 0)"
  12.721 +  by (import word32 w_0_def)
  12.722 +
  12.723 +consts
  12.724 +  w_1 :: "word32" 
  12.725 +
  12.726 +defs
  12.727 +  w_1_primdef: "w_1 == mk_word32 (EQUIV AONE)"
  12.728 +
  12.729 +lemma w_1_def: "w_1 = mk_word32 (EQUIV AONE)"
  12.730 +  by (import word32 w_1_def)
  12.731 +
  12.732 +consts
  12.733 +  w_T :: "word32" 
  12.734 +
  12.735 +defs
  12.736 +  w_T_primdef: "w_T == mk_word32 (EQUIV COMP0)"
  12.737 +
  12.738 +lemma w_T_def: "w_T = mk_word32 (EQUIV COMP0)"
  12.739 +  by (import word32 w_T_def)
  12.740 +
  12.741 +constdefs
  12.742 +  word_suc :: "word32 => word32" 
  12.743 +  "word_suc == %T1. mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
  12.744 +
  12.745 +lemma word_suc: "ALL T1. word_suc T1 = mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
  12.746 +  by (import word32 word_suc)
  12.747 +
  12.748 +constdefs
  12.749 +  word_add :: "word32 => word32 => word32" 
  12.750 +  "word_add ==
  12.751 +%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
  12.752 +
  12.753 +lemma word_add: "ALL T1 T2.
  12.754 +   word_add T1 T2 =
  12.755 +   mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
  12.756 +  by (import word32 word_add)
  12.757 +
  12.758 +constdefs
  12.759 +  word_mul :: "word32 => word32 => word32" 
  12.760 +  "word_mul ==
  12.761 +%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
  12.762 +
  12.763 +lemma word_mul: "ALL T1 T2.
  12.764 +   word_mul T1 T2 =
  12.765 +   mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
  12.766 +  by (import word32 word_mul)
  12.767 +
  12.768 +constdefs
  12.769 +  word_1comp :: "word32 => word32" 
  12.770 +  "word_1comp == %T1. mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
  12.771 +
  12.772 +lemma word_1comp: "ALL T1. word_1comp T1 = mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
  12.773 +  by (import word32 word_1comp)
  12.774 +
  12.775 +constdefs
  12.776 +  word_2comp :: "word32 => word32" 
  12.777 +  "word_2comp == %T1. mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
  12.778 +
  12.779 +lemma word_2comp: "ALL T1. word_2comp T1 = mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
  12.780 +  by (import word32 word_2comp)
  12.781 +
  12.782 +constdefs
  12.783 +  word_lsr1 :: "word32 => word32" 
  12.784 +  "word_lsr1 == %T1. mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
  12.785 +
  12.786 +lemma word_lsr1: "ALL T1. word_lsr1 T1 = mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
  12.787 +  by (import word32 word_lsr1)
  12.788 +
  12.789 +constdefs
  12.790 +  word_asr1 :: "word32 => word32" 
  12.791 +  "word_asr1 == %T1. mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
  12.792 +
  12.793 +lemma word_asr1: "ALL T1. word_asr1 T1 = mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
  12.794 +  by (import word32 word_asr1)
  12.795 +
  12.796 +constdefs
  12.797 +  word_ror1 :: "word32 => word32" 
  12.798 +  "word_ror1 == %T1. mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
  12.799 +
  12.800 +lemma word_ror1: "ALL T1. word_ror1 T1 = mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
  12.801 +  by (import word32 word_ror1)
  12.802 +
  12.803 +consts
  12.804 +  RRX :: "bool => word32 => word32" 
  12.805 +
  12.806 +defs
  12.807 +  RRX_primdef: "RRX == %T1 T2. mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
  12.808 +
  12.809 +lemma RRX_def: "ALL T1 T2. RRX T1 T2 = mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
  12.810 +  by (import word32 RRX_def)
  12.811 +
  12.812 +consts
  12.813 +  LSB :: "word32 => bool" 
  12.814 +
  12.815 +defs
  12.816 +  LSB_primdef: "LSB == %T1. LSBn (Eps (dest_word32 T1))"
  12.817 +
  12.818 +lemma LSB_def: "ALL T1. LSB T1 = LSBn (Eps (dest_word32 T1))"
  12.819 +  by (import word32 LSB_def)
  12.820 +
  12.821 +consts
  12.822 +  MSB :: "word32 => bool" 
  12.823 +
  12.824 +defs
  12.825 +  MSB_primdef: "MSB == %T1. MSBn (Eps (dest_word32 T1))"
  12.826 +
  12.827 +lemma MSB_def: "ALL T1. MSB T1 = MSBn (Eps (dest_word32 T1))"
  12.828 +  by (import word32 MSB_def)
  12.829 +
  12.830 +constdefs
  12.831 +  bitwise_or :: "word32 => word32 => word32" 
  12.832 +  "bitwise_or ==
  12.833 +%T1 T2. mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
  12.834 +
  12.835 +lemma bitwise_or: "ALL T1 T2.
  12.836 +   bitwise_or T1 T2 =
  12.837 +   mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
  12.838 +  by (import word32 bitwise_or)
  12.839 +
  12.840 +constdefs
  12.841 +  bitwise_eor :: "word32 => word32 => word32" 
  12.842 +  "bitwise_eor ==
  12.843 +%T1 T2.
  12.844 +   mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
  12.845 +
  12.846 +lemma bitwise_eor: "ALL T1 T2.
  12.847 +   bitwise_eor T1 T2 =
  12.848 +   mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
  12.849 +  by (import word32 bitwise_eor)
  12.850 +
  12.851 +constdefs
  12.852 +  bitwise_and :: "word32 => word32 => word32" 
  12.853 +  "bitwise_and ==
  12.854 +%T1 T2.
  12.855 +   mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
  12.856 +
  12.857 +lemma bitwise_and: "ALL T1 T2.
  12.858 +   bitwise_and T1 T2 =
  12.859 +   mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
  12.860 +  by (import word32 bitwise_and)
  12.861 +
  12.862 +consts
  12.863 +  TOw :: "word32 => word32" 
  12.864 +
  12.865 +defs
  12.866 +  TOw_primdef: "TOw == %T1. mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
  12.867 +
  12.868 +lemma TOw_def: "ALL T1. TOw T1 = mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
  12.869 +  by (import word32 TOw_def)
  12.870 +
  12.871 +consts
  12.872 +  n2w :: "nat => word32" 
  12.873 +
  12.874 +defs
  12.875 +  n2w_primdef: "n2w == %n. mk_word32 (EQUIV n)"
  12.876 +
  12.877 +lemma n2w_def: "ALL n. n2w n = mk_word32 (EQUIV n)"
  12.878 +  by (import word32 n2w_def)
  12.879 +
  12.880 +consts
  12.881 +  w2n :: "word32 => nat" 
  12.882 +
  12.883 +defs
  12.884 +  w2n_primdef: "w2n == %w. MODw (Eps (dest_word32 w))"
  12.885 +
  12.886 +lemma w2n_def: "ALL w. w2n w = MODw (Eps (dest_word32 w))"
  12.887 +  by (import word32 w2n_def)
  12.888 +
  12.889 +lemma ADDw: "(ALL x. word_add w_0 x = x) &
  12.890 +(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa))"
  12.891 +  by (import word32 ADDw)
  12.892 +
  12.893 +lemma ADD_0w: "ALL x. word_add x w_0 = x"
  12.894 +  by (import word32 ADD_0w)
  12.895 +
  12.896 +lemma ADD1w: "ALL x. word_suc x = word_add x w_1"
  12.897 +  by (import word32 ADD1w)
  12.898 +
  12.899 +lemma ADD_ASSOCw: "ALL x xa xb. word_add x (word_add xa xb) = word_add (word_add x xa) xb"
  12.900 +  by (import word32 ADD_ASSOCw)
  12.901 +
  12.902 +lemma ADD_CLAUSESw: "(ALL x. word_add w_0 x = x) &
  12.903 +(ALL x. word_add x w_0 = x) &
  12.904 +(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa)) &
  12.905 +(ALL x xa. word_add x (word_suc xa) = word_suc (word_add x xa))"
  12.906 +  by (import word32 ADD_CLAUSESw)
  12.907 +
  12.908 +lemma ADD_COMMw: "ALL x xa. word_add x xa = word_add xa x"
  12.909 +  by (import word32 ADD_COMMw)
  12.910 +
  12.911 +lemma ADD_INV_0_EQw: "ALL x xa. (word_add x xa = x) = (xa = w_0)"
  12.912 +  by (import word32 ADD_INV_0_EQw)
  12.913 +
  12.914 +lemma EQ_ADD_LCANCELw: "ALL x xa xb. (word_add x xa = word_add x xb) = (xa = xb)"
  12.915 +  by (import word32 EQ_ADD_LCANCELw)
  12.916 +
  12.917 +lemma EQ_ADD_RCANCELw: "ALL x xa xb. (word_add x xb = word_add xa xb) = (x = xa)"
  12.918 +  by (import word32 EQ_ADD_RCANCELw)
  12.919 +
  12.920 +lemma LEFT_ADD_DISTRIBw: "ALL x xa xb.
  12.921 +   word_mul xb (word_add x xa) = word_add (word_mul xb x) (word_mul xb xa)"
  12.922 +  by (import word32 LEFT_ADD_DISTRIBw)
  12.923 +
  12.924 +lemma MULT_ASSOCw: "ALL x xa xb. word_mul x (word_mul xa xb) = word_mul (word_mul x xa) xb"
  12.925 +  by (import word32 MULT_ASSOCw)
  12.926 +
  12.927 +lemma MULT_COMMw: "ALL x xa. word_mul x xa = word_mul xa x"
  12.928 +  by (import word32 MULT_COMMw)
  12.929 +
  12.930 +lemma MULT_CLAUSESw: "ALL x xa.
  12.931 +   word_mul w_0 x = w_0 &
  12.932 +   word_mul x w_0 = w_0 &
  12.933 +   word_mul w_1 x = x &
  12.934 +   word_mul x w_1 = x &
  12.935 +   word_mul (word_suc x) xa = word_add (word_mul x xa) xa &
  12.936 +   word_mul x (word_suc xa) = word_add x (word_mul x xa)"
  12.937 +  by (import word32 MULT_CLAUSESw)
  12.938 +
  12.939 +lemma TWO_COMP_ONE_COMP: "ALL x. word_2comp x = word_add (word_1comp x) w_1"
  12.940 +  by (import word32 TWO_COMP_ONE_COMP)
  12.941 +
  12.942 +lemma OR_ASSOCw: "ALL x xa xb.
  12.943 +   bitwise_or x (bitwise_or xa xb) = bitwise_or (bitwise_or x xa) xb"
  12.944 +  by (import word32 OR_ASSOCw)
  12.945 +
  12.946 +lemma OR_COMMw: "ALL x xa. bitwise_or x xa = bitwise_or xa x"
  12.947 +  by (import word32 OR_COMMw)
  12.948 +
  12.949 +lemma OR_IDEMw: "ALL x. bitwise_or x x = x"
  12.950 +  by (import word32 OR_IDEMw)
  12.951 +
  12.952 +lemma OR_ABSORBw: "ALL x xa. bitwise_and x (bitwise_or x xa) = x"
  12.953 +  by (import word32 OR_ABSORBw)
  12.954 +
  12.955 +lemma AND_ASSOCw: "ALL x xa xb.
  12.956 +   bitwise_and x (bitwise_and xa xb) = bitwise_and (bitwise_and x xa) xb"
  12.957 +  by (import word32 AND_ASSOCw)
  12.958 +
  12.959 +lemma AND_COMMw: "ALL x xa. bitwise_and x xa = bitwise_and xa x"
  12.960 +  by (import word32 AND_COMMw)
  12.961 +
  12.962 +lemma AND_IDEMw: "ALL x. bitwise_and x x = x"
  12.963 +  by (import word32 AND_IDEMw)
  12.964 +
  12.965 +lemma AND_ABSORBw: "ALL x xa. bitwise_or x (bitwise_and x xa) = x"
  12.966 +  by (import word32 AND_ABSORBw)
  12.967 +
  12.968 +lemma ONE_COMPw: "ALL x. word_1comp (word_1comp x) = x"
  12.969 +  by (import word32 ONE_COMPw)
  12.970 +
  12.971 +lemma RIGHT_AND_OVER_ORw: "ALL x xa xb.
  12.972 +   bitwise_and (bitwise_or x xa) xb =
  12.973 +   bitwise_or (bitwise_and x xb) (bitwise_and xa xb)"
  12.974 +  by (import word32 RIGHT_AND_OVER_ORw)
  12.975 +
  12.976 +lemma RIGHT_OR_OVER_ANDw: "ALL x xa xb.
  12.977 +   bitwise_or (bitwise_and x xa) xb =
  12.978 +   bitwise_and (bitwise_or x xb) (bitwise_or xa xb)"
  12.979 +  by (import word32 RIGHT_OR_OVER_ANDw)
  12.980 +
  12.981 +lemma DE_MORGAN_THMw: "ALL x xa.
  12.982 +   word_1comp (bitwise_and x xa) =
  12.983 +   bitwise_or (word_1comp x) (word_1comp xa) &
  12.984 +   word_1comp (bitwise_or x xa) = bitwise_and (word_1comp x) (word_1comp xa)"
  12.985 +  by (import word32 DE_MORGAN_THMw)
  12.986 +
  12.987 +lemma w_0: "w_0 = n2w 0"
  12.988 +  by (import word32 w_0)
  12.989 +
  12.990 +lemma w_1: "w_1 = n2w 1"
  12.991 +  by (import word32 w_1)
  12.992 +
  12.993 +lemma w_T: "w_T =
  12.994 +n2w (NUMERAL
  12.995 +      (NUMERAL_BIT1
  12.996 +        (NUMERAL_BIT1
  12.997 +          (NUMERAL_BIT1
  12.998 +            (NUMERAL_BIT1
  12.999 +              (NUMERAL_BIT1
 12.1000 +                (NUMERAL_BIT1
 12.1001 +                  (NUMERAL_BIT1
 12.1002 +                    (NUMERAL_BIT1
 12.1003 +                      (NUMERAL_BIT1
 12.1004 +                        (NUMERAL_BIT1
 12.1005 +                          (NUMERAL_BIT1
 12.1006 +                            (NUMERAL_BIT1
 12.1007 +                              (NUMERAL_BIT1
 12.1008 +                                (NUMERAL_BIT1
 12.1009 +                                  (NUMERAL_BIT1
 12.1010 +                                    (NUMERAL_BIT1
 12.1011 +(NUMERAL_BIT1
 12.1012 +  (NUMERAL_BIT1
 12.1013 +    (NUMERAL_BIT1
 12.1014 +      (NUMERAL_BIT1
 12.1015 +        (NUMERAL_BIT1
 12.1016 +          (NUMERAL_BIT1
 12.1017 +            (NUMERAL_BIT1
 12.1018 +              (NUMERAL_BIT1
 12.1019 +                (NUMERAL_BIT1
 12.1020 +                  (NUMERAL_BIT1
 12.1021 +                    (NUMERAL_BIT1
 12.1022 +                      (NUMERAL_BIT1
 12.1023 +                        (NUMERAL_BIT1
 12.1024 +                          (NUMERAL_BIT1
 12.1025 +                            (NUMERAL_BIT1
 12.1026 +                              (NUMERAL_BIT1
 12.1027 +                                ALT_ZERO)))))))))))))))))))))))))))))))))"
 12.1028 +  by (import word32 w_T)
 12.1029 +
 12.1030 +lemma ADD_TWO_COMP: "ALL x. word_add x (word_2comp x) = w_0"
 12.1031 +  by (import word32 ADD_TWO_COMP)
 12.1032 +
 12.1033 +lemma ADD_TWO_COMP2: "ALL x. word_add (word_2comp x) x = w_0"
 12.1034 +  by (import word32 ADD_TWO_COMP2)
 12.1035 +
 12.1036 +constdefs
 12.1037 +  word_sub :: "word32 => word32 => word32" 
 12.1038 +  "word_sub == %a b. word_add a (word_2comp b)"
 12.1039 +
 12.1040 +lemma word_sub: "ALL a b. word_sub a b = word_add a (word_2comp b)"
 12.1041 +  by (import word32 word_sub)
 12.1042 +
 12.1043 +constdefs
 12.1044 +  word_lsl :: "word32 => nat => word32" 
 12.1045 +  "word_lsl == %a n. word_mul a (n2w (2 ^ n))"
 12.1046 +
 12.1047 +lemma word_lsl: "ALL a n. word_lsl a n = word_mul a (n2w (2 ^ n))"
 12.1048 +  by (import word32 word_lsl)
 12.1049 +
 12.1050 +constdefs
 12.1051 +  word_lsr :: "word32 => nat => word32" 
 12.1052 +  "word_lsr == %a n. (word_lsr1 ^ n) a"
 12.1053 +
 12.1054 +lemma word_lsr: "ALL a n. word_lsr a n = (word_lsr1 ^ n) a"
 12.1055 +  by (import word32 word_lsr)
 12.1056 +
 12.1057 +constdefs
 12.1058 +  word_asr :: "word32 => nat => word32" 
 12.1059 +  "word_asr == %a n. (word_asr1 ^ n) a"
 12.1060 +
 12.1061 +lemma word_asr: "ALL a n. word_asr a n = (word_asr1 ^ n) a"
 12.1062 +  by (import word32 word_asr)
 12.1063 +
 12.1064 +constdefs
 12.1065 +  word_ror :: "word32 => nat => word32" 
 12.1066 +  "word_ror == %a n. (word_ror1 ^ n) a"
 12.1067 +
 12.1068 +lemma word_ror: "ALL a n. word_ror a n = (word_ror1 ^ n) a"
 12.1069 +  by (import word32 word_ror)
 12.1070 +
 12.1071 +consts
 12.1072 +  BITw :: "nat => word32 => bool" 
 12.1073 +
 12.1074 +defs
 12.1075 +  BITw_primdef: "BITw == %b n. bit b (w2n n)"
 12.1076 +
 12.1077 +lemma BITw_def: "ALL b n. BITw b n = bit b (w2n n)"
 12.1078 +  by (import word32 BITw_def)
 12.1079 +
 12.1080 +consts
 12.1081 +  BITSw :: "nat => nat => word32 => nat" 
 12.1082 +
 12.1083 +defs
 12.1084 +  BITSw_primdef: "BITSw == %h l n. BITS h l (w2n n)"
 12.1085 +
 12.1086 +lemma BITSw_def: "ALL h l n. BITSw h l n = BITS h l (w2n n)"
 12.1087 +  by (import word32 BITSw_def)
 12.1088 +
 12.1089 +consts
 12.1090 +  SLICEw :: "nat => nat => word32 => nat" 
 12.1091 +
 12.1092 +defs
 12.1093 +  SLICEw_primdef: "SLICEw == %h l n. SLICE h l (w2n n)"
 12.1094 +
 12.1095 +lemma SLICEw_def: "ALL h l n. SLICEw h l n = SLICE h l (w2n n)"
 12.1096 +  by (import word32 SLICEw_def)
 12.1097 +
 12.1098 +lemma TWO_COMP_ADD: "ALL a b. word_2comp (word_add a b) = word_add (word_2comp a) (word_2comp b)"
 12.1099 +  by (import word32 TWO_COMP_ADD)
 12.1100 +
 12.1101 +lemma TWO_COMP_ELIM: "ALL a. word_2comp (word_2comp a) = a"
 12.1102 +  by (import word32 TWO_COMP_ELIM)
 12.1103 +
 12.1104 +lemma ADD_SUB_ASSOC: "ALL a b c. word_sub (word_add a b) c = word_add a (word_sub b c)"
 12.1105 +  by (import word32 ADD_SUB_ASSOC)
 12.1106 +
 12.1107 +lemma ADD_SUB_SYM: "ALL a b c. word_sub (word_add a b) c = word_add (word_sub a c) b"
 12.1108 +  by (import word32 ADD_SUB_SYM)
 12.1109 +
 12.1110 +lemma SUB_EQUALw: "ALL a. word_sub a a = w_0"
 12.1111 +  by (import word32 SUB_EQUALw)
 12.1112 +
 12.1113 +lemma ADD_SUBw: "ALL a b. word_sub (word_add a b) b = a"
 12.1114 +  by (import word32 ADD_SUBw)
 12.1115 +
 12.1116 +lemma SUB_SUBw: "ALL a b c. word_sub a (word_sub b c) = word_sub (word_add a c) b"
 12.1117 +  by (import word32 SUB_SUBw)
 12.1118 +
 12.1119 +lemma ONE_COMP_TWO_COMP: "ALL a. word_1comp a = word_sub (word_2comp a) w_1"
 12.1120 +  by (import word32 ONE_COMP_TWO_COMP)
 12.1121 +
 12.1122 +lemma SUBw: "ALL m n. word_sub (word_suc m) n = word_suc (word_sub m n)"
 12.1123 +  by (import word32 SUBw)
 12.1124 +
 12.1125 +lemma ADD_EQ_SUBw: "ALL m n p. (word_add m n = p) = (m = word_sub p n)"
 12.1126 +  by (import word32 ADD_EQ_SUBw)
 12.1127 +
 12.1128 +lemma CANCEL_SUBw: "ALL m n p. (word_sub n p = word_sub m p) = (n = m)"
 12.1129 +  by (import word32 CANCEL_SUBw)
 12.1130 +
 12.1131 +lemma SUB_PLUSw: "ALL a b c. word_sub a (word_add b c) = word_sub (word_sub a b) c"
 12.1132 +  by (import word32 SUB_PLUSw)
 12.1133 +
 12.1134 +lemma word_nchotomy: "ALL w. EX n. w = n2w n"
 12.1135 +  by (import word32 word_nchotomy)
 12.1136 +
 12.1137 +lemma dest_word_mk_word_eq3: "ALL a. dest_word32 (mk_word32 (EQUIV a)) = EQUIV a"
 12.1138 +  by (import word32 dest_word_mk_word_eq3)
 12.1139 +
 12.1140 +lemma MODw_ELIM: "ALL n. n2w (MODw n) = n2w n"
 12.1141 +  by (import word32 MODw_ELIM)
 12.1142 +
 12.1143 +lemma w2n_EVAL: "ALL n. w2n (n2w n) = MODw n"
 12.1144 +  by (import word32 w2n_EVAL)
 12.1145 +
 12.1146 +lemma w2n_ELIM: "ALL a. n2w (w2n a) = a"
 12.1147 +  by (import word32 w2n_ELIM)
 12.1148 +
 12.1149 +lemma n2w_11: "ALL a b. (n2w a = n2w b) = (MODw a = MODw b)"
 12.1150 +  by (import word32 n2w_11)
 12.1151 +
 12.1152 +lemma ADD_EVAL: "word_add (n2w a) (n2w b) = n2w (a + b)"
 12.1153 +  by (import word32 ADD_EVAL)
 12.1154 +
 12.1155 +lemma MUL_EVAL: "word_mul (n2w a) (n2w b) = n2w (a * b)"
 12.1156 +  by (import word32 MUL_EVAL)
 12.1157 +
 12.1158 +lemma ONE_COMP_EVAL: "word_1comp (n2w a) = n2w (ONE_COMP a)"
 12.1159 +  by (import word32 ONE_COMP_EVAL)
 12.1160 +
 12.1161 +lemma TWO_COMP_EVAL: "word_2comp (n2w a) = n2w (TWO_COMP a)"
 12.1162 +  by (import word32 TWO_COMP_EVAL)
 12.1163 +
 12.1164 +lemma LSR_ONE_EVAL: "word_lsr1 (n2w a) = n2w (LSR_ONE a)"
 12.1165 +  by (import word32 LSR_ONE_EVAL)
 12.1166 +
 12.1167 +lemma ASR_ONE_EVAL: "word_asr1 (n2w a) = n2w (ASR_ONE a)"
 12.1168 +  by (import word32 ASR_ONE_EVAL)
 12.1169 +
 12.1170 +lemma ROR_ONE_EVAL: "word_ror1 (n2w a) = n2w (ROR_ONE a)"
 12.1171 +  by (import word32 ROR_ONE_EVAL)
 12.1172 +
 12.1173 +lemma RRX_EVAL: "RRX c (n2w a) = n2w (RRXn c a)"
 12.1174 +  by (import word32 RRX_EVAL)
 12.1175 +
 12.1176 +lemma LSB_EVAL: "LSB (n2w a) = LSBn a"
 12.1177 +  by (import word32 LSB_EVAL)
 12.1178 +
 12.1179 +lemma MSB_EVAL: "MSB (n2w a) = MSBn a"
 12.1180 +  by (import word32 MSB_EVAL)
 12.1181 +
 12.1182 +lemma OR_EVAL: "bitwise_or (n2w a) (n2w b) = n2w (OR a b)"
 12.1183 +  by (import word32 OR_EVAL)
 12.1184 +
 12.1185 +lemma EOR_EVAL: "bitwise_eor (n2w a) (n2w b) = n2w (EOR a b)"
 12.1186 +  by (import word32 EOR_EVAL)
 12.1187 +
 12.1188 +lemma AND_EVAL: "bitwise_and (n2w a) (n2w b) = n2w (AND a b)"
 12.1189 +  by (import word32 AND_EVAL)
 12.1190 +
 12.1191 +lemma BITS_EVAL: "ALL h l a. BITSw h l (n2w a) = BITS h l (MODw a)"
 12.1192 +  by (import word32 BITS_EVAL)
 12.1193 +
 12.1194 +lemma BIT_EVAL: "ALL b a. BITw b (n2w a) = bit b (MODw a)"
 12.1195 +  by (import word32 BIT_EVAL)
 12.1196 +
 12.1197 +lemma SLICE_EVAL: "ALL h l a. SLICEw h l (n2w a) = SLICE h l (MODw a)"
 12.1198 +  by (import word32 SLICE_EVAL)
 12.1199 +
 12.1200 +lemma LSL_ADD: "ALL a m n. word_lsl (word_lsl a m) n = word_lsl a (m + n)"
 12.1201 +  by (import word32 LSL_ADD)
 12.1202 +
 12.1203 +lemma LSR_ADD: "ALL x xa xb. word_lsr (word_lsr x xa) xb = word_lsr x (xa + xb)"
 12.1204 +  by (import word32 LSR_ADD)
 12.1205 +
 12.1206 +lemma ASR_ADD: "ALL x xa xb. word_asr (word_asr x xa) xb = word_asr x (xa + xb)"
 12.1207 +  by (import word32 ASR_ADD)
 12.1208 +
 12.1209 +lemma ROR_ADD: "ALL x xa xb. word_ror (word_ror x xa) xb = word_ror x (xa + xb)"
 12.1210 +  by (import word32 ROR_ADD)
 12.1211 +
 12.1212 +lemma LSL_LIMIT: "ALL w n. HB < n --> word_lsl w n = w_0"
 12.1213 +  by (import word32 LSL_LIMIT)
 12.1214 +
 12.1215 +lemma MOD_MOD_DIV: "ALL a b. INw (MODw a div 2 ^ b)"
 12.1216 +  by (import word32 MOD_MOD_DIV)
 12.1217 +
 12.1218 +lemma MOD_MOD_DIV_2EXP: "ALL a n. MODw (MODw a div 2 ^ n) div 2 = MODw a div 2 ^ Suc n"
 12.1219 +  by (import word32 MOD_MOD_DIV_2EXP)
 12.1220 +
 12.1221 +lemma LSR_EVAL: "ALL n. word_lsr (n2w a) n = n2w (MODw a div 2 ^ n)"
 12.1222 +  by (import word32 LSR_EVAL)
 12.1223 +
 12.1224 +lemma LSR_THM: "ALL x n. word_lsr (n2w n) x = n2w (BITS HB (min WL x) n)"
 12.1225 +  by (import word32 LSR_THM)
 12.1226 +
 12.1227 +lemma LSR_LIMIT: "ALL x w. HB < x --> word_lsr w x = w_0"
 12.1228 +  by (import word32 LSR_LIMIT)
 12.1229 +
 12.1230 +lemma LEFT_SHIFT_LESS: "ALL (n::nat) (m::nat) a::nat.
 12.1231 +   a < (2::nat) ^ m -->
 12.1232 +   (2::nat) ^ n + a * (2::nat) ^ n <= (2::nat) ^ (m + n)"
 12.1233 +  by (import word32 LEFT_SHIFT_LESS)
 12.1234 +
 12.1235 +lemma ROR_THM: "ALL x n.
 12.1236 +   word_ror (n2w n) x =
 12.1237 +   (let x' = x mod WL
 12.1238 +    in n2w (BITS HB x' n + BITS (x' - 1) 0 n * 2 ^ (WL - x')))"
 12.1239 +  by (import word32 ROR_THM)
 12.1240 +
 12.1241 +lemma ROR_CYCLE: "ALL x w. word_ror w (x * WL) = w"
 12.1242 +  by (import word32 ROR_CYCLE)
 12.1243 +
 12.1244 +lemma ASR_THM: "ALL x n.
 12.1245 +   word_asr (n2w n) x =
 12.1246 +   (let x' = min HB x; s = BITS HB x' n
 12.1247 +    in n2w (if MSBn n then 2 ^ WL - 2 ^ (WL - x') + s else s))"
 12.1248 +  by (import word32 ASR_THM)
 12.1249 +
 12.1250 +lemma ASR_LIMIT: "ALL x w. HB <= x --> word_asr w x = (if MSB w then w_T else w_0)"
 12.1251 +  by (import word32 ASR_LIMIT)
 12.1252 +
 12.1253 +lemma ZERO_SHIFT: "(ALL n. word_lsl w_0 n = w_0) &
 12.1254 +(ALL n. word_asr w_0 n = w_0) &
 12.1255 +(ALL n. word_lsr w_0 n = w_0) & (ALL n. word_ror w_0 n = w_0)"
 12.1256 +  by (import word32 ZERO_SHIFT)
 12.1257 +
 12.1258 +lemma ZERO_SHIFT2: "(ALL a. word_lsl a 0 = a) &
 12.1259 +(ALL a. word_asr a 0 = a) &
 12.1260 +(ALL a. word_lsr a 0 = a) & (ALL a. word_ror a 0 = a)"
 12.1261 +  by (import word32 ZERO_SHIFT2)
 12.1262 +
 12.1263 +lemma ASR_w_T: "ALL n. word_asr w_T n = w_T"
 12.1264 +  by (import word32 ASR_w_T)
 12.1265 +
 12.1266 +lemma ROR_w_T: "ALL n. word_ror w_T n = w_T"
 12.1267 +  by (import word32 ROR_w_T)
 12.1268 +
 12.1269 +lemma MODw_EVAL: "ALL x.
 12.1270 +   MODw x =
 12.1271 +   x mod
 12.1272 +   NUMERAL
 12.1273 +    (NUMERAL_BIT2
 12.1274 +      (NUMERAL_BIT1
 12.1275 +        (NUMERAL_BIT1
 12.1276 +          (NUMERAL_BIT1
 12.1277 +            (NUMERAL_BIT1
 12.1278 +              (NUMERAL_BIT1
 12.1279 +                (NUMERAL_BIT1
 12.1280 +                  (NUMERAL_BIT1
 12.1281 +                    (NUMERAL_BIT1
 12.1282 +                      (NUMERAL_BIT1
 12.1283 +                        (NUMERAL_BIT1
 12.1284 +                          (NUMERAL_BIT1
 12.1285 +                            (NUMERAL_BIT1
 12.1286 +                              (NUMERAL_BIT1
 12.1287 +                                (NUMERAL_BIT1
 12.1288 +                                  (NUMERAL_BIT1
 12.1289 +                                    (NUMERAL_BIT1
 12.1290 +(NUMERAL_BIT1
 12.1291 +  (NUMERAL_BIT1
 12.1292 +    (NUMERAL_BIT1
 12.1293 +      (NUMERAL_BIT1
 12.1294 +        (NUMERAL_BIT1
 12.1295 +          (NUMERAL_BIT1
 12.1296 +            (NUMERAL_BIT1
 12.1297 +              (NUMERAL_BIT1
 12.1298 +                (NUMERAL_BIT1
 12.1299 +                  (NUMERAL_BIT1
 12.1300 +                    (NUMERAL_BIT1
 12.1301 +                      (NUMERAL_BIT1
 12.1302 +                        (NUMERAL_BIT1
 12.1303 +                          (NUMERAL_BIT1
 12.1304 +                            (NUMERAL_BIT1
 12.1305 +                              ALT_ZERO))))))))))))))))))))))))))))))))"
 12.1306 +  by (import word32 MODw_EVAL)
 12.1307 +
 12.1308 +lemma ADD_EVAL2: "ALL b a. word_add (n2w a) (n2w b) = n2w (MODw (a + b))"
 12.1309 +  by (import word32 ADD_EVAL2)
 12.1310 +
 12.1311 +lemma MUL_EVAL2: "ALL b a. word_mul (n2w a) (n2w b) = n2w (MODw (a * b))"
 12.1312 +  by (import word32 MUL_EVAL2)
 12.1313 +
 12.1314 +lemma ONE_COMP_EVAL2: "ALL a.
 12.1315 +   word_1comp (n2w a) =
 12.1316 +   n2w (2 ^
 12.1317 +        NUMERAL
 12.1318 +         (NUMERAL_BIT2
 12.1319 +           (NUMERAL_BIT1
 12.1320 +             (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
 12.1321 +        1 -
 12.1322 +        MODw a)"
 12.1323 +  by (import word32 ONE_COMP_EVAL2)
 12.1324 +
 12.1325 +lemma TWO_COMP_EVAL2: "ALL a.
 12.1326 +   word_2comp (n2w a) =
 12.1327 +   n2w (MODw
 12.1328 +         (2 ^
 12.1329 +          NUMERAL
 12.1330 +           (NUMERAL_BIT2
 12.1331 +             (NUMERAL_BIT1
 12.1332 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
 12.1333 +          MODw a))"
 12.1334 +  by (import word32 TWO_COMP_EVAL2)
 12.1335 +
 12.1336 +lemma LSR_ONE_EVAL2: "ALL a. word_lsr1 (n2w a) = n2w (MODw a div 2)"
 12.1337 +  by (import word32 LSR_ONE_EVAL2)
 12.1338 +
 12.1339 +lemma ASR_ONE_EVAL2: "ALL a.
 12.1340 +   word_asr1 (n2w a) =
 12.1341 +   n2w (MODw a div 2 +
 12.1342 +        SBIT (MSBn a)
 12.1343 +         (NUMERAL
 12.1344 +           (NUMERAL_BIT1
 12.1345 +             (NUMERAL_BIT1
 12.1346 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
 12.1347 +  by (import word32 ASR_ONE_EVAL2)
 12.1348 +
 12.1349 +lemma ROR_ONE_EVAL2: "ALL a.
 12.1350 +   word_ror1 (n2w a) =
 12.1351 +   n2w (MODw a div 2 +
 12.1352 +        SBIT (LSBn a)
 12.1353 +         (NUMERAL
 12.1354 +           (NUMERAL_BIT1
 12.1355 +             (NUMERAL_BIT1
 12.1356 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
 12.1357 +  by (import word32 ROR_ONE_EVAL2)
 12.1358 +
 12.1359 +lemma RRX_EVAL2: "ALL c a.
 12.1360 +   RRX c (n2w a) =
 12.1361 +   n2w (MODw a div 2 +
 12.1362 +        SBIT c
 12.1363 +         (NUMERAL
 12.1364 +           (NUMERAL_BIT1
 12.1365 +             (NUMERAL_BIT1
 12.1366 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
 12.1367 +  by (import word32 RRX_EVAL2)
 12.1368 +
 12.1369 +lemma LSB_EVAL2: "ALL a. LSB (n2w a) = ODD a"
 12.1370 +  by (import word32 LSB_EVAL2)
 12.1371 +
 12.1372 +lemma MSB_EVAL2: "ALL a.
 12.1373 +   MSB (n2w a) =
 12.1374 +   bit (NUMERAL
 12.1375 +         (NUMERAL_BIT1
 12.1376 +           (NUMERAL_BIT1
 12.1377 +             (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
 12.1378 +    a"
 12.1379 +  by (import word32 MSB_EVAL2)
 12.1380 +
 12.1381 +lemma OR_EVAL2: "ALL b a.
 12.1382 +   bitwise_or (n2w a) (n2w b) =
 12.1383 +   n2w (BITWISE
 12.1384 +         (NUMERAL
 12.1385 +           (NUMERAL_BIT2
 12.1386 +             (NUMERAL_BIT1
 12.1387 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
 12.1388 +         op | a b)"
 12.1389 +  by (import word32 OR_EVAL2)
 12.1390 +
 12.1391 +lemma AND_EVAL2: "ALL b a.
 12.1392 +   bitwise_and (n2w a) (n2w b) =
 12.1393 +   n2w (BITWISE
 12.1394 +         (NUMERAL
 12.1395 +           (NUMERAL_BIT2
 12.1396 +             (NUMERAL_BIT1
 12.1397 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
 12.1398 +         op & a b)"
 12.1399 +  by (import word32 AND_EVAL2)
 12.1400 +
 12.1401 +lemma EOR_EVAL2: "ALL b a.
 12.1402 +   bitwise_eor (n2w a) (n2w b) =
 12.1403 +   n2w (BITWISE
 12.1404 +         (NUMERAL
 12.1405 +           (NUMERAL_BIT2
 12.1406 +             (NUMERAL_BIT1
 12.1407 +               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
 12.1408 +         (%x y. x ~= y) a b)"
 12.1409 +  by (import word32 EOR_EVAL2)
 12.1410 +
 12.1411 +lemma BITWISE_EVAL2: "ALL n oper x y.
 12.1412 +   BITWISE n oper x y =
 12.1413 +   (if n = 0 then 0
 12.1414 +    else 2 * BITWISE (n - 1) oper (x div 2) (y div 2) +
 12.1415 +         (if oper (ODD x) (ODD y) then 1 else 0))"
 12.1416 +  by (import word32 BITWISE_EVAL2)
 12.1417 +
 12.1418 +lemma BITSwLT_THM: "ALL h l n. BITSw h l n < 2 ^ (Suc h - l)"
 12.1419 +  by (import word32 BITSwLT_THM)
 12.1420 +
 12.1421 +lemma BITSw_COMP_THM: "ALL h1 l1 h2 l2 n.
 12.1422 +   h2 + l1 <= h1 -->
 12.1423 +   BITS h2 l2 (BITSw h1 l1 n) = BITSw (h2 + l1) (l2 + l1) n"
 12.1424 +  by (import word32 BITSw_COMP_THM)
 12.1425 +
 12.1426 +lemma BITSw_DIV_THM: "ALL h l n x. BITSw h l x div 2 ^ n = BITSw h (l + n) x"
 12.1427 +  by (import word32 BITSw_DIV_THM)
 12.1428 +
 12.1429 +lemma BITw_THM: "ALL b n. BITw b n = (BITSw b b n = 1)"
 12.1430 +  by (import word32 BITw_THM)
 12.1431 +
 12.1432 +lemma SLICEw_THM: "ALL n h l. SLICEw h l n = BITSw h l n * 2 ^ l"
 12.1433 +  by (import word32 SLICEw_THM)
 12.1434 +
 12.1435 +lemma BITS_SLICEw_THM: "ALL h l n. BITS h l (SLICEw h l n) = BITSw h l n"
 12.1436 +  by (import word32 BITS_SLICEw_THM)
 12.1437 +
 12.1438 +lemma SLICEw_ZERO_THM: "ALL n h. SLICEw h 0 n = BITSw h 0 n"
 12.1439 +  by (import word32 SLICEw_ZERO_THM)
 12.1440 +
 12.1441 +lemma SLICEw_COMP_THM: "ALL h m l a.
 12.1442 +   Suc m <= h & l <= m --> SLICEw h (Suc m) a + SLICEw m l a = SLICEw h l a"
 12.1443 +  by (import word32 SLICEw_COMP_THM)
 12.1444 +
 12.1445 +lemma BITSw_ZERO: "ALL h l n. h < l --> BITSw h l n = 0"
 12.1446 +  by (import word32 BITSw_ZERO)
 12.1447 +
 12.1448 +lemma SLICEw_ZERO: "ALL h l n. h < l --> SLICEw h l n = 0"
 12.1449 +  by (import word32 SLICEw_ZERO)
 12.1450 +
 12.1451 +;end_setup
 12.1452 +
 12.1453 +end
 12.1454 +
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/src/HOL/Import/HOL/README	Fri Apr 02 17:37:45 2004 +0200
    13.3 @@ -0,0 +1,3 @@
    13.4 +All the files in this directory (except this README, HOL4.thy, and
    13.5 +ROOT.ML) are automatically generated.  Edit the files in
    13.6 +../Generate-HOL, if something needs to be changed.
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/src/HOL/Import/HOL/ROOT.ML	Fri Apr 02 17:37:45 2004 +0200
    14.3 @@ -0,0 +1,4 @@
    14.4 +with_path ".." use_thy "HOL4Compat";
    14.5 +with_path ".." use_thy "HOL4Syntax";
    14.6 +setmp quick_and_dirty true use_thy "HOL4Prob";
    14.7 +setmp quick_and_dirty true use_thy "HOL4";
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/src/HOL/Import/HOL/arithmetic.imp	Fri Apr 02 17:37:45 2004 +0200
    15.3 @@ -0,0 +1,271 @@
    15.4 +import
    15.5 +
    15.6 +import_segment "hol4"
    15.7 +
    15.8 +def_maps
    15.9 +  "nat_elim__magic" > "nat_elim__magic_def"
   15.10 +  "ODD" > "ODD_def"
   15.11 +  "FACT" > "FACT_def"
   15.12 +  "EVEN" > "EVEN_def"
   15.13 +
   15.14 +const_maps
   15.15 +  "num_case" > "Nat.nat.nat_case"
   15.16 +  "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
   15.17 +  "NUMERAL_BIT2" > "HOL4Compat.NUMERAL_BIT2"
   15.18 +  "NUMERAL_BIT1" > "HOL4Compat.NUMERAL_BIT1"
   15.19 +  "NUMERAL" > "HOL4Compat.NUMERAL"
   15.20 +  "MOD" > "Divides.op mod" :: "nat => nat => nat"
   15.21 +  "MIN" > "HOL.min" :: "nat => nat => nat"
   15.22 +  "MAX" > "HOL.max" :: "nat => nat => nat"
   15.23 +  "FUNPOW" > "HOL4Compat.FUNPOW"
   15.24 +  "EXP" > "Nat.power" :: "nat => nat => nat"
   15.25 +  "DIV" > "Divides.op div" :: "nat => nat => nat"
   15.26 +  "ALT_ZERO" > "HOL4Compat.ALT_ZERO"
   15.27 +  ">=" > "HOL4Compat.nat_ge"
   15.28 +  ">" > "HOL4Compat.nat_gt"
   15.29 +  "<=" > "op <=" :: "nat => nat => bool"
   15.30 +  "-" > "op -" :: "nat => nat => nat"
   15.31 +  "+" > "op +" :: "nat => nat => nat"
   15.32 +  "*" > "op *" :: "nat => nat => nat"
   15.33 +
   15.34 +thm_maps
   15.35 +  "num_case_def" > "HOL4Compat.num_case_def"
   15.36 +  "num_case_cong" > "HOL4Base.arithmetic.num_case_cong"
   15.37 +  "num_case_compute" > "HOL4Base.arithmetic.num_case_compute"
   15.38 +  "num_CASES" > "Nat.nat.nchotomy"
   15.39 +  "nat_elim__magic_def" > "HOL4Base.arithmetic.nat_elim__magic_def"
   15.40 +  "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
   15.41 +  "ZERO_MOD" > "HOL4Base.arithmetic.ZERO_MOD"
   15.42 +  "ZERO_LESS_EXP" > "HOL4Base.arithmetic.ZERO_LESS_EXP"
   15.43 +  "ZERO_LESS_EQ" > "Nat.le0"
   15.44 +  "ZERO_DIV" > "HOL4Base.arithmetic.ZERO_DIV"
   15.45 +  "WOP" > "HOL4Base.arithmetic.WOP"
   15.46 +  "TWO" > "HOL4Base.arithmetic.TWO"
   15.47 +  "TIMES2" > "NatSimprocs.nat_mult_2"
   15.48 +  "SUC_SUB1" > "HOL4Base.arithmetic.SUC_SUB1"
   15.49 +  "SUC_ONE_ADD" > "NatBin.Suc_eq_add_numeral_1_left"
   15.50 +  "SUC_NOT" > "Nat.nat.simps_2"
   15.51 +  "SUC_ELIM_THM" > "HOL4Base.arithmetic.SUC_ELIM_THM"
   15.52 +  "SUC_ADD_SYM" > "HOL4Base.arithmetic.SUC_ADD_SYM"
   15.53 +  "SUB_SUB" > "NatArith.diff_diff_right"
   15.54 +  "SUB_RIGHT_SUB" > "Nat.diff_diff_left"
   15.55 +  "SUB_RIGHT_LESS_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_LESS_EQ"
   15.56 +  "SUB_RIGHT_LESS" > "HOL4Base.arithmetic.SUB_RIGHT_LESS"
   15.57 +  "SUB_RIGHT_GREATER_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER_EQ"
   15.58 +  "SUB_RIGHT_GREATER" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER"
   15.59 +  "SUB_RIGHT_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_EQ"
   15.60 +  "SUB_RIGHT_ADD" > "HOL4Base.arithmetic.SUB_RIGHT_ADD"
   15.61 +  "SUB_PLUS" > "Nat.diff_diff_left"
   15.62 +  "SUB_MONO_EQ" > "Nat.diff_Suc_Suc"
   15.63 +  "SUB_LESS_OR" > "HOL4Base.arithmetic.SUB_LESS_OR"
   15.64 +  "SUB_LESS_EQ_ADD" > "HOL4Base.arithmetic.SUB_LESS_EQ_ADD"
   15.65 +  "SUB_LESS_EQ" > "Nat.diff_le_self"
   15.66 +  "SUB_LESS_0" > "Nat.zero_less_diff"
   15.67 +  "SUB_LEFT_SUC" > "HOL4Base.arithmetic.SUB_LEFT_SUC"
   15.68 +  "SUB_LEFT_SUB" > "HOL4Base.arithmetic.SUB_LEFT_SUB"
   15.69 +  "SUB_LEFT_LESS_EQ" > "HOL4Base.arithmetic.SUB_LEFT_LESS_EQ"
   15.70 +  "SUB_LEFT_LESS" > "NatArith.less_diff_conv"
   15.71 +  "SUB_LEFT_GREATER_EQ" > "NatArith.le_diff_conv"
   15.72 +  "SUB_LEFT_GREATER" > "HOL4Base.arithmetic.SUB_LEFT_GREATER"
   15.73 +  "SUB_LEFT_EQ" > "HOL4Base.arithmetic.SUB_LEFT_EQ"
   15.74 +  "SUB_LEFT_ADD" > "HOL4Base.arithmetic.SUB_LEFT_ADD"
   15.75 +  "SUB_EQ_EQ_0" > "HOL4Base.arithmetic.SUB_EQ_EQ_0"
   15.76 +  "SUB_EQ_0" > "Nat.diff_is_0_eq"
   15.77 +  "SUB_EQUAL_0" > "Nat.diff_self_eq_0"
   15.78 +  "SUB_ELIM_THM" > "HOL4Base.arithmetic.SUB_ELIM_THM"
   15.79 +  "SUB_CANCEL" > "HOL4Base.arithmetic.SUB_CANCEL"
   15.80 +  "SUB_ADD" > "Nat.le_add_diff_inverse2"
   15.81 +  "SUB_0" > "HOL4Base.arithmetic.SUB_0"
   15.82 +  "SUB" > "HOL4Compat.SUB"
   15.83 +  "RIGHT_SUB_DISTRIB" > "Nat.nat_distrib_3"
   15.84 +  "RIGHT_ADD_DISTRIB" > "Nat.nat_distrib_1"
   15.85 +  "PRE_SUC_EQ" > "HOL4Base.arithmetic.PRE_SUC_EQ"
   15.86 +  "PRE_SUB1" > "HOL4Base.arithmetic.PRE_SUB1"
   15.87 +  "PRE_SUB" > "HOL4Base.arithmetic.PRE_SUB"
   15.88 +  "PRE_ELIM_THM" > "HOL4Base.arithmetic.PRE_ELIM_THM"
   15.89 +  "OR_LESS" > "Nat.Suc_le_lessD"
   15.90 +  "ONE" > "Nat.One_nat_def"
   15.91 +  "ODD_OR_EVEN" > "HOL4Base.arithmetic.ODD_OR_EVEN"
   15.92 +  "ODD_MULT" > "HOL4Base.arithmetic.ODD_MULT"
   15.93 +  "ODD_EXISTS" > "HOL4Base.arithmetic.ODD_EXISTS"
   15.94 +  "ODD_EVEN" > "HOL4Base.arithmetic.ODD_EVEN"
   15.95 +  "ODD_DOUBLE" > "HOL4Base.arithmetic.ODD_DOUBLE"
   15.96 +  "ODD_ADD" > "HOL4Base.arithmetic.ODD_ADD"
   15.97 +  "ODD" > "HOL4Base.arithmetic.ODD"
   15.98 +  "NUMERAL_DEF" > "HOL4Compat.NUMERAL_def"
   15.99 +  "NUMERAL_BIT2" > "HOL4Compat.NUMERAL_BIT2_def"
  15.100 +  "NUMERAL_BIT1" > "HOL4Compat.NUMERAL_BIT1_def"
  15.101 +  "NOT_ZERO_LT_ZERO" > "Nat.neq0_conv"
  15.102 +  "NOT_SUC_LESS_EQ_0" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ_0"
  15.103 +  "NOT_SUC_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ"
  15.104 +  "NOT_SUC_ADD_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_ADD_LESS_EQ"
  15.105 +  "NOT_ODD_EQ_EVEN" > "HOL4Base.arithmetic.NOT_ODD_EQ_EVEN"
  15.106 +  "NOT_NUM_EQ" > "HOL4Base.arithmetic.NOT_NUM_EQ"
  15.107 +  "NOT_LESS_EQUAL" > "Nat.not_le_iff_less"
  15.108 +  "NOT_LESS" > "Nat.not_less_iff_le"
  15.109 +  "NOT_LEQ" > "HOL4Base.arithmetic.NOT_LEQ"
  15.110 +  "NOT_GREATER_EQ" > "HOL4Base.arithmetic.NOT_GREATER_EQ"
  15.111 +  "NOT_GREATER" > "Nat.not_less_iff_le"
  15.112 +  "NOT_EXP_0" > "HOL4Base.arithmetic.NOT_EXP_0"
  15.113 +  "NORM_0" > "HOL4Base.arithmetic.NORM_0"
  15.114 +  "MULT_SYM" > "Nat.nat_mult_commute"
  15.115 +  "MULT_SUC_EQ" > "HOL4Base.arithmetic.MULT_SUC_EQ"
  15.116 +  "MULT_SUC" > "Nat.mult_Suc_right"
  15.117 +  "MULT_RIGHT_1" > "Nat.nat_mult_1_right"
  15.118 +  "MULT_MONO_EQ" > "Nat.Suc_mult_cancel1"
  15.119 +  "MULT_LESS_EQ_SUC" > "Nat.Suc_mult_le_cancel1"
  15.120 +  "MULT_LEFT_1" > "Nat.nat_mult_1"
  15.121 +  "MULT_INCREASES" > "HOL4Base.arithmetic.MULT_INCREASES"
  15.122 +  "MULT_EXP_MONO" > "HOL4Base.arithmetic.MULT_EXP_MONO"
  15.123 +  "MULT_EQ_1" > "HOL4Base.arithmetic.MULT_EQ_1"
  15.124 +  "MULT_EQ_0" > "Nat.mult_is_0"
  15.125 +  "MULT_DIV" > "Divides.div_mult_self_is_m"
  15.126 +  "MULT_COMM" > "Nat.nat_mult_commute"
  15.127 +  "MULT_CLAUSES" > "HOL4Base.arithmetic.MULT_CLAUSES"
  15.128 +  "MULT_ASSOC" > "Nat.nat_mult_assoc"
  15.129 +  "MULT_0" > "Nat.mult_0_right"
  15.130 +  "MULT" > "HOL4Compat.MULT"
  15.131 +  "MOD_UNIQUE" > "HOL4Base.arithmetic.MOD_UNIQUE"
  15.132 +  "MOD_TIMES2" > "HOL4Base.arithmetic.MOD_TIMES2"
  15.133 +  "MOD_TIMES" > "HOL4Base.arithmetic.MOD_TIMES"
  15.134 +  "MOD_PLUS" > "HOL4Base.arithmetic.MOD_PLUS"
  15.135 +  "MOD_P" > "HOL4Base.arithmetic.MOD_P"
  15.136 +  "MOD_ONE" > "Divides.mod_1"
  15.137 +  "MOD_MULT_MOD" > "HOL4Base.arithmetic.MOD_MULT_MOD"
  15.138 +  "MOD_MULT" > "HOL4Base.arithmetic.MOD_MULT"
  15.139 +  "MOD_MOD" > "HOL4Base.arithmetic.MOD_MOD"
  15.140 +  "MOD_EQ_0" > "HOL4Base.arithmetic.MOD_EQ_0"
  15.141 +  "MOD_COMMON_FACTOR" > "HOL4Base.arithmetic.MOD_COMMON_FACTOR"
  15.142 +  "MIN_MAX_PRED" > "HOL4Base.arithmetic.MIN_MAX_PRED"
  15.143 +  "MIN_MAX_LT" > "HOL4Base.arithmetic.MIN_MAX_LT"
  15.144 +  "MIN_MAX_EQ" > "HOL4Base.arithmetic.MIN_MAX_EQ"
  15.145 +  "MIN_LT" > "HOL4Base.arithmetic.MIN_LT"
  15.146 +  "MIN_LE" > "HOL4Base.arithmetic.MIN_LE"
  15.147 +  "MIN_IDEM" > "HOL.min_same"
  15.148 +  "MIN_DEF" > "HOL4Compat.MIN_DEF"
  15.149 +  "MIN_COMM" > "HOL.min_ac_2"
  15.150 +  "MIN_ASSOC" > "HOL.min_ac_1"
  15.151 +  "MIN_0" > "HOL4Base.arithmetic.MIN_0"
  15.152 +  "MAX_LT" > "HOL4Base.arithmetic.MAX_LT"
  15.153 +  "MAX_LE" > "HOL4Base.arithmetic.MAX_LE"
  15.154 +  "MAX_IDEM" > "HOL.max_same"
  15.155 +  "MAX_DEF" > "HOL4Compat.MAX_DEF"
  15.156 +  "MAX_COMM" > "HOL.max_ac_2"
  15.157 +  "MAX_ASSOC" > "HOL.max_ac_1"
  15.158 +  "MAX_0" > "HOL4Base.arithmetic.MAX_0"
  15.159 +  "LESS_TRANS" > "Nat.less_trans"
  15.160 +  "LESS_SUC_NOT" > "HOL4Base.arithmetic.LESS_SUC_NOT"
  15.161 +  "LESS_SUC_EQ_COR" > "Nat.Suc_lessI"
  15.162 +  "LESS_SUB_ADD_LESS" > "HOL4Base.arithmetic.LESS_SUB_ADD_LESS"
  15.163 +  "LESS_OR_EQ_ADD" > "HOL4Base.arithmetic.LESS_OR_EQ_ADD"
  15.164 +  "LESS_OR_EQ" > "HOL4Compat.LESS_OR_EQ"
  15.165 +  "LESS_OR" > "Nat.Suc_leI"
  15.166 +  "LESS_NOT_SUC" > "HOL4Base.arithmetic.LESS_NOT_SUC"
  15.167 +  "LESS_MULT_MONO" > "Nat.Suc_mult_less_cancel1"
  15.168 +  "LESS_MULT2" > "Ring_and_Field.mult_pos"
  15.169 +  "LESS_MONO_REV" > "Nat.Suc_less_SucD"
  15.170 +  "LESS_MONO_MULT" > "Nat.mult_le_mono1"
  15.171 +  "LESS_MONO_EQ" > "Nat.Suc_less_eq"
  15.172 +  "LESS_MONO_ADD_INV" > "Ring_and_Field.add_less_imp_less_right"
  15.173 +  "LESS_MONO_ADD_EQ" > "Ring_and_Field.add_less_cancel_right"
  15.174 +  "LESS_MONO_ADD" > "Nat.add_less_mono1"
  15.175 +  "LESS_MOD" > "Divides.mod_less"
  15.176 +  "LESS_LESS_SUC" > "HOL4Base.arithmetic.LESS_LESS_SUC"
  15.177 +  "LESS_LESS_EQ_TRANS" > "Nat.less_le_trans"
  15.178 +  "LESS_LESS_CASES" > "HOL4Base.arithmetic.LESS_LESS_CASES"
  15.179 +  "LESS_IMP_LESS_OR_EQ" > "Nat.le_simps_1"
  15.180 +  "LESS_IMP_LESS_ADD" > "Nat.trans_less_add1"
  15.181 +  "LESS_EXP_SUC_MONO" > "HOL4Base.arithmetic.LESS_EXP_SUC_MONO"
  15.182 +  "LESS_EQ_TRANS" > "Nat.le_trans"
  15.183 +  "LESS_EQ_SUC_REFL" > "HOL4Base.arithmetic.LESS_EQ_SUC_REFL"
  15.184 +  "LESS_EQ_SUB_LESS" > "HOL4Base.arithmetic.LESS_EQ_SUB_LESS"
  15.185 +  "LESS_EQ_REFL" > "Nat.le_refl"
  15.186 +  "LESS_EQ_MONO_ADD_EQ" > "Ring_and_Field.add_le_cancel_right"
  15.187 +  "LESS_EQ_MONO" > "Nat.Suc_le_mono"
  15.188 +  "LESS_EQ_LESS_TRANS" > "Nat.le_less_trans"
  15.189 +  "LESS_EQ_LESS_EQ_MONO" > "Nat.add_le_mono"
  15.190 +  "LESS_EQ_IMP_LESS_SUC" > "Nat.le_imp_less_Suc"
  15.191 +  "LESS_EQ_EXISTS" > "HOL4Base.arithmetic.LESS_EQ_EXISTS"
  15.192 +  "LESS_EQ_CASES" > "Nat.nat_le_linear"
  15.193 +  "LESS_EQ_ANTISYM" > "HOL4Base.arithmetic.LESS_EQ_ANTISYM"
  15.194 +  "LESS_EQ_ADD_SUB" > "Nat.diff_add_assoc"
  15.195 +  "LESS_EQ_ADD" > "Nat.le_add1"
  15.196 +  "LESS_EQ_0" > "Nat.le_0_eq"
  15.197 +  "LESS_EQUAL_ANTISYM" > "Nat.le_anti_sym"
  15.198 +  "LESS_EQUAL_ADD" > "HOL4Base.arithmetic.LESS_EQUAL_ADD"
  15.199 +  "LESS_EQ" > "Nat.le_simps_3"
  15.200 +  "LESS_DIV_EQ_ZERO" > "Divides.div_less"
  15.201 +  "LESS_CASES_IMP" > "HOL4Base.arithmetic.LESS_CASES_IMP"
  15.202 +  "LESS_CASES" > "HOL4Base.arithmetic.LESS_CASES"
  15.203 +  "LESS_ANTISYM" > "HOL4Base.arithmetic.LESS_ANTISYM"
  15.204 +  "LESS_ADD_SUC" > "HOL4Base.arithmetic.LESS_ADD_SUC"
  15.205 +  "LESS_ADD_NONZERO" > "HOL4Base.arithmetic.LESS_ADD_NONZERO"
  15.206 +  "LESS_ADD_1" > "HOL4Base.arithmetic.LESS_ADD_1"
  15.207 +  "LESS_ADD" > "HOL4Base.arithmetic.LESS_ADD"
  15.208 +  "LESS_0_CASES" > "HOL4Base.arithmetic.LESS_0_CASES"
  15.209 +  "LEFT_SUB_DISTRIB" > "Nat.nat_distrib_4"
  15.210 +  "LEFT_ADD_DISTRIB" > "Nat.nat_distrib_2"
  15.211 +  "LE" > "HOL4Base.arithmetic.LE"
  15.212 +  "INV_PRE_LESS_EQ" > "HOL4Base.arithmetic.INV_PRE_LESS_EQ"
  15.213 +  "INV_PRE_LESS" > "HOL4Base.arithmetic.INV_PRE_LESS"
  15.214 +  "INV_PRE_EQ" > "HOL4Base.arithmetic.INV_PRE_EQ"
  15.215 +  "GREATER_OR_EQ" > "HOL4Compat.GREATER_OR_EQ"
  15.216 +  "GREATER_EQ" > "HOL4Compat.real_ge"
  15.217 +  "GREATER_DEF" > "HOL4Compat.GREATER_DEF"
  15.218 +  "FUN_EQ_LEMMA" > "HOL4Base.arithmetic.FUN_EQ_LEMMA"
  15.219 +  "FUNPOW" > "HOL4Compat.FUNPOW"
  15.220 +  "FACT_LESS" > "HOL4Base.arithmetic.FACT_LESS"
  15.221 +  "FACT" > "HOL4Base.arithmetic.FACT"
  15.222 +  "EXP_INJECTIVE" > "Power.power_inject_exp"
  15.223 +  "EXP_EQ_1" > "HOL4Base.arithmetic.EXP_EQ_1"
  15.224 +  "EXP_EQ_0" > "HOL4Base.arithmetic.EXP_EQ_0"
  15.225 +  "EXP_ALWAYS_BIG_ENOUGH" > "HOL4Base.arithmetic.EXP_ALWAYS_BIG_ENOUGH"
  15.226 +  "EXP_ADD" > "Power.power_add"
  15.227 +  "EXP_1" > "HOL4Base.arithmetic.EXP_1"
  15.228 +  "EXP" > "HOL4Compat.EXP"
  15.229 +  "EXISTS_GREATEST" > "HOL4Base.arithmetic.EXISTS_GREATEST"
  15.230 +  "EVEN_OR_ODD" > "HOL4Base.arithmetic.EVEN_OR_ODD"
  15.231 +  "EVEN_ODD_EXISTS" > "HOL4Base.arithmetic.EVEN_ODD_EXISTS"
  15.232 +  "EVEN_ODD" > "HOL4Base.arithmetic.EVEN_ODD"
  15.233 +  "EVEN_MULT" > "HOL4Base.arithmetic.EVEN_MULT"
  15.234 +  "EVEN_EXISTS" > "HOL4Base.arithmetic.EVEN_EXISTS"
  15.235 +  "EVEN_DOUBLE" > "HOL4Base.arithmetic.EVEN_DOUBLE"
  15.236 +  "EVEN_AND_ODD" > "HOL4Base.arithmetic.EVEN_AND_ODD"
  15.237 +  "EVEN_ADD" > "HOL4Base.arithmetic.EVEN_ADD"
  15.238 +  "EVEN" > "HOL4Base.arithmetic.EVEN"
  15.239 +  "EQ_MULT_LCANCEL" > "NatBin.nat_mult_eq_cancel_disj"
  15.240 +  "EQ_MONO_ADD_EQ" > "Nat.nat_add_right_cancel"
  15.241 +  "EQ_LESS_EQ" > "HOL.order_eq_iff"
  15.242 +  "EQ_ADD_RCANCEL" > "Nat.nat_add_right_cancel"
  15.243 +  "EQ_ADD_LCANCEL" > "Nat.nat_add_left_cancel"
  15.244 +  "DIV_UNIQUE" > "HOL4Base.arithmetic.DIV_UNIQUE"
  15.245 +  "DIV_P" > "HOL4Base.arithmetic.DIV_P"
  15.246 +  "DIV_ONE" > "Divides.div_1"
  15.247 +  "DIV_MULT" > "HOL4Base.arithmetic.DIV_MULT"
  15.248 +  "DIV_LESS_EQ" > "HOL4Base.arithmetic.DIV_LESS_EQ"
  15.249 +  "DIV_LESS" > "Divides.div_less_dividend"
  15.250 +  "DIV_DIV_DIV_MULT" > "HOL4Base.arithmetic.DIV_DIV_DIV_MULT"
  15.251 +  "DIVMOD_ID" > "HOL4Base.arithmetic.DIVMOD_ID"
  15.252 +  "DIVISION" > "HOL4Compat.DIVISION"
  15.253 +  "DA" > "HOL4Base.arithmetic.DA"
  15.254 +  "COMPLETE_INDUCTION" > "Nat.less_induct"
  15.255 +  "CANCEL_SUB" > "NatArith.eq_diff_iff"
  15.256 +  "ALT_ZERO" > "HOL4Compat.ALT_ZERO_def"
  15.257 +  "ADD_SYM" > "Nat.nat_add_commute"
  15.258 +  "ADD_SUC" > "Nat.add_Suc_right"
  15.259 +  "ADD_SUB" > "Nat.diff_add_inverse2"
  15.260 +  "ADD_MONO_LESS_EQ" > "Nat.nat_add_left_cancel_le"
  15.261 +  "ADD_INV_0_EQ" > "HOL4Base.arithmetic.ADD_INV_0_EQ"
  15.262 +  "ADD_INV_0" > "Nat.add_eq_self_zero"
  15.263 +  "ADD_EQ_SUB" > "HOL4Base.arithmetic.ADD_EQ_SUB"
  15.264 +  "ADD_EQ_1" > "HOL4Base.arithmetic.ADD_EQ_1"
  15.265 +  "ADD_EQ_0" > "Nat.add_is_0"
  15.266 +  "ADD_DIV_ADD_DIV" > "HOL4Base.arithmetic.ADD_DIV_ADD_DIV"
  15.267 +  "ADD_COMM" > "Nat.nat_add_commute"
  15.268 +  "ADD_CLAUSES" > "HOL4Base.arithmetic.ADD_CLAUSES"
  15.269 +  "ADD_ASSOC" > "Nat.nat_add_assoc"
  15.270 +  "ADD_0" > "Nat.add_0_right"
  15.271 +  "ADD1" > "Presburger.Suc_plus1"
  15.272 +  "ADD" > "HOL4Compat.ADD"
  15.273 +
  15.274 +end
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/src/HOL/Import/HOL/bits.imp	Fri Apr 02 17:37:45 2004 +0200
    16.3 @@ -0,0 +1,115 @@
    16.4 +import
    16.5 +
    16.6 +import_segment "hol4"
    16.7 +
    16.8 +def_maps
    16.9 +  "bit" > "bit_def"
   16.10 +  "TIMES_2EXP" > "TIMES_2EXP_primdef"
   16.11 +  "SLICE" > "SLICE_primdef"
   16.12 +  "SBIT" > "SBIT_primdef"
   16.13 +  "MOD_2EXP" > "MOD_2EXP_primdef"
   16.14 +  "LSBn" > "LSBn_primdef"
   16.15 +  "DIV_2EXP" > "DIV_2EXP_primdef"
   16.16 +  "DIVMOD_2EXP" > "DIVMOD_2EXP_primdef"
   16.17 +  "DIV2" > "DIV2_primdef"
   16.18 +  "BITWISE" > "BITWISE_primdef"
   16.19 +  "BITS" > "BITS_primdef"
   16.20 +
   16.21 +const_maps
   16.22 +  "bit" > "HOL4Word32.bits.bit"
   16.23 +  "TIMES_2EXP" > "HOL4Word32.bits.TIMES_2EXP"
   16.24 +  "SLICE" > "HOL4Word32.bits.SLICE"
   16.25 +  "SBIT" > "HOL4Word32.bits.SBIT"
   16.26 +  "MOD_2EXP" > "HOL4Word32.bits.MOD_2EXP"
   16.27 +  "LSBn" > "HOL4Word32.bits.LSBn"
   16.28 +  "DIV_2EXP" > "HOL4Word32.bits.DIV_2EXP"
   16.29 +  "DIVMOD_2EXP" > "HOL4Word32.bits.DIVMOD_2EXP"
   16.30 +  "DIV2" > "HOL4Word32.bits.DIV2"
   16.31 +  "BITS" > "HOL4Word32.bits.BITS"
   16.32 +
   16.33 +const_renames
   16.34 +  "BIT" > "bit"
   16.35 +
   16.36 +thm_maps
   16.37 +  "bit_def" > "HOL4Word32.bits.bit_def"
   16.38 +  "ZERO_LT_TWOEXP" > "HOL4Word32.bits.ZERO_LT_TWOEXP"
   16.39 +  "TWOEXP_MONO2" > "HOL4Word32.bits.TWOEXP_MONO2"
   16.40 +  "TWOEXP_MONO" > "HOL4Word32.bits.TWOEXP_MONO"
   16.41 +  "TWOEXP_DIVISION" > "HOL4Word32.bits.TWOEXP_DIVISION"
   16.42 +  "TIMES_2EXP_primdef" > "HOL4Word32.bits.TIMES_2EXP_primdef"
   16.43 +  "TIMES_2EXP_def" > "HOL4Word32.bits.TIMES_2EXP_def"
   16.44 +  "SUC_SUB" > "HOL4Word32.bits.SUC_SUB"
   16.45 +  "SLICE_primdef" > "HOL4Word32.bits.SLICE_primdef"
   16.46 +  "SLICE_def" > "HOL4Word32.bits.SLICE_def"
   16.47 +  "SLICE_ZERO" > "HOL4Word32.bits.SLICE_ZERO"
   16.48 +  "SLICE_THM" > "HOL4Word32.bits.SLICE_THM"
   16.49 +  "SLICE_LEM3" > "HOL4Word32.bits.SLICE_LEM3"
   16.50 +  "SLICE_LEM2" > "HOL4Word32.bits.SLICE_LEM2"
   16.51 +  "SLICE_LEM1" > "HOL4Word32.bits.SLICE_LEM1"
   16.52 +  "SLICE_COMP_THM" > "HOL4Word32.bits.SLICE_COMP_THM"
   16.53 +  "SLICELT_THM" > "HOL4Word32.bits.SLICELT_THM"
   16.54 +  "SBIT_primdef" > "HOL4Word32.bits.SBIT_primdef"
   16.55 +  "SBIT_def" > "HOL4Word32.bits.SBIT_def"
   16.56 +  "SBIT_DIV" > "HOL4Word32.bits.SBIT_DIV"
   16.57 +  "ODD_MOD2_LEM" > "HOL4Word32.bits.ODD_MOD2_LEM"
   16.58 +  "NOT_ZERO_ADD1" > "Nat.not0_implies_Suc"
   16.59 +  "NOT_MOD2_LEM2" > "HOL4Word32.bits.NOT_MOD2_LEM2"
   16.60 +  "NOT_MOD2_LEM" > "HOL4Word32.bits.NOT_MOD2_LEM"
   16.61 +  "NOT_BITS2" > "HOL4Word32.bits.NOT_BITS2"
   16.62 +  "NOT_BITS" > "HOL4Word32.bits.NOT_BITS"
   16.63 +  "NOT_BIT" > "HOL4Word32.bits.NOT_BIT"
   16.64 +  "MOD_PLUS_RIGHT" > "HOL4Word32.bits.MOD_PLUS_RIGHT"
   16.65 +  "MOD_PLUS_1" > "HOL4Word32.bits.MOD_PLUS_1"
   16.66 +  "MOD_ADD_1" > "HOL4Word32.bits.MOD_ADD_1"
   16.67 +  "MOD_2EXP_primdef" > "HOL4Word32.bits.MOD_2EXP_primdef"
   16.68 +  "MOD_2EXP_def" > "HOL4Word32.bits.MOD_2EXP_def"
   16.69 +  "MOD_2EXP_MONO" > "HOL4Word32.bits.MOD_2EXP_MONO"
   16.70 +  "MOD_2EXP_LT" > "HOL4Word32.bits.MOD_2EXP_LT"
   16.71 +  "MOD_2EXP_LEM" > "HOL4Word32.bits.MOD_2EXP_LEM"
   16.72 +  "LSBn_primdef" > "HOL4Word32.bits.LSBn_primdef"
   16.73 +  "LSBn_def" > "HOL4Word32.bits.LSBn_def"
   16.74 +  "LSB_ODD" > "HOL4Word32.bits.LSB_ODD"
   16.75 +  "LESS_EXP_MULT2" > "HOL4Word32.bits.LESS_EXP_MULT2"
   16.76 +  "LESS_EQ_EXP_MULT" > "HOL4Word32.bits.LESS_EQ_EXP_MULT"
   16.77 +  "EXP_SUB_LESS_EQ" > "HOL4Word32.bits.EXP_SUB_LESS_EQ"
   16.78 +  "EVEN_MOD2_LEM" > "HOL4Word32.bits.EVEN_MOD2_LEM"
   16.79 +  "DIV_MULT_THM2" > "HOL4Word32.bits.DIV_MULT_THM2"
   16.80 +  "DIV_MULT_THM" > "HOL4Word32.bits.DIV_MULT_THM"
   16.81 +  "DIV_MULT_LEM" > "HOL4Word32.bits.DIV_MULT_LEM"
   16.82 +  "DIV_MULT_1" > "HOL4Word32.bits.DIV_MULT_1"
   16.83 +  "DIV_2EXP_primdef" > "HOL4Word32.bits.DIV_2EXP_primdef"
   16.84 +  "DIV_2EXP_def" > "HOL4Word32.bits.DIV_2EXP_def"
   16.85 +  "DIVMOD_2EXP_primdef" > "HOL4Word32.bits.DIVMOD_2EXP_primdef"
   16.86 +  "DIVMOD_2EXP_def" > "HOL4Word32.bits.DIVMOD_2EXP_def"
   16.87 +  "DIV2_primdef" > "HOL4Word32.bits.DIV2_primdef"
   16.88 +  "DIV2_def" > "HOL4Word32.bits.DIV2_def"
   16.89 +  "DIV1" > "HOL4Word32.bits.DIV1"
   16.90 +  "BIT_def" > "HOL4Word32.bits.BIT_def"
   16.91 +  "BIT_SLICE_THM" > "HOL4Word32.bits.BIT_SLICE_THM"
   16.92 +  "BIT_SLICE_LEM" > "HOL4Word32.bits.BIT_SLICE_LEM"
   16.93 +  "BIT_SLICE" > "HOL4Word32.bits.BIT_SLICE"
   16.94 +  "BIT_COMP_THM3" > "HOL4Word32.bits.BIT_COMP_THM3"
   16.95 +  "BIT_BITS_THM" > "HOL4Word32.bits.BIT_BITS_THM"
   16.96 +  "BITWISE_def" > "HOL4Word32.bits.BITWISE_def"
   16.97 +  "BITWISE_THM" > "HOL4Word32.bits.BITWISE_THM"
   16.98 +  "BITWISE_NOT_COR" > "HOL4Word32.bits.BITWISE_NOT_COR"
   16.99 +  "BITWISE_LT_2EXP" > "HOL4Word32.bits.BITWISE_LT_2EXP"
  16.100 +  "BITWISE_COR" > "HOL4Word32.bits.BITWISE_COR"
  16.101 +  "BITS_primdef" > "HOL4Word32.bits.BITS_primdef"
  16.102 +  "BITS_def" > "HOL4Word32.bits.BITS_def"
  16.103 +  "BITS_ZERO3" > "HOL4Word32.bits.BITS_ZERO3"
  16.104 +  "BITS_ZERO2" > "HOL4Word32.bits.BITS_ZERO2"
  16.105 +  "BITS_ZERO" > "HOL4Word32.bits.BITS_ZERO"
  16.106 +  "BITS_THM" > "HOL4Word32.bits.BITS_THM"
  16.107 +  "BITS_SUC_THM" > "HOL4Word32.bits.BITS_SUC_THM"
  16.108 +  "BITS_SUC" > "HOL4Word32.bits.BITS_SUC"
  16.109 +  "BITS_SLICE_THM2" > "HOL4Word32.bits.BITS_SLICE_THM2"
  16.110 +  "BITS_SLICE_THM" > "HOL4Word32.bits.BITS_SLICE_THM"
  16.111 +  "BITS_LT_HIGH" > "HOL4Word32.bits.BITS_LT_HIGH"
  16.112 +  "BITS_DIV_THM" > "HOL4Word32.bits.BITS_DIV_THM"
  16.113 +  "BITS_COMP_THM2" > "HOL4Word32.bits.BITS_COMP_THM2"
  16.114 +  "BITS_COMP_THM" > "HOL4Word32.bits.BITS_COMP_THM"
  16.115 +  "BITSLT_THM" > "HOL4Word32.bits.BITSLT_THM"
  16.116 +  "BITS2_THM" > "HOL4Word32.bits.BITS2_THM"
  16.117 +
  16.118 +end
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/src/HOL/Import/HOL/bool.imp	Fri Apr 02 17:37:45 2004 +0200
    17.3 @@ -0,0 +1,195 @@
    17.4 +import
    17.5 +
    17.6 +import_segment "hol4"
    17.7 +
    17.8 +def_maps
    17.9 +  "RES_SELECT" > "RES_SELECT_def"
   17.10 +  "RES_FORALL" > "RES_FORALL_def"
   17.11 +  "RES_EXISTS_UNIQUE" > "RES_EXISTS_UNIQUE_def"
   17.12 +  "RES_EXISTS" > "RES_EXISTS_def"
   17.13 +  "RES_ABSTRACT" > "RES_ABSTRACT_def"
   17.14 +  "IN" > "IN_def"
   17.15 +  "ARB" > "ARB_def"
   17.16 +
   17.17 +const_maps
   17.18 +  "~" > "Not"
   17.19 +  "bool_case" > "Datatype.bool.bool_case"
   17.20 +  "\\/" > "op |"
   17.21 +  "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
   17.22 +  "T" > "True"
   17.23 +  "RES_SELECT" > "HOL4Base.bool.RES_SELECT"
   17.24 +  "RES_FORALL" > "HOL4Base.bool.RES_FORALL"
   17.25 +  "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE"
   17.26 +  "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS"
   17.27 +  "ONTO" > "HOL4Setup.ONTO"
   17.28 +  "ONE_ONE" > "HOL4Setup.ONE_ONE"
   17.29 +  "LET" > "HOL4Compat.LET"
   17.30 +  "IN" > "HOL4Base.bool.IN"
   17.31 +  "F" > "False"
   17.32 +  "COND" > "If"
   17.33 +  "ARB" > "HOL4Base.bool.ARB"
   17.34 +  "?!" > "Ex1"
   17.35 +  "?" > "Ex"
   17.36 +  "/\\" > "op &"
   17.37 +  "!" > "All"
   17.38 +
   17.39 +thm_maps
   17.40 +  "bool_case_thm" > "HOL4Base.bool.bool_case_thm"
   17.41 +  "bool_case_ID" > "HOL4Base.bool.bool_case_ID"
   17.42 +  "bool_case_DEF" > "HOL4Compat.bool_case_DEF"
   17.43 +  "bool_INDUCT" > "Set.bool_induct"
   17.44 +  "boolAxiom" > "HOL4Base.bool.boolAxiom"
   17.45 +  "UNWIND_THM2" > "HOL.simp_thms_39"
   17.46 +  "UNWIND_THM1" > "HOL.simp_thms_40"
   17.47 +  "UNWIND_FORALL_THM2" > "HOL.simp_thms_41"
   17.48 +  "UNWIND_FORALL_THM1" > "HOL.simp_thms_42"
   17.49 +  "UEXISTS_SIMP" > "HOL4Base.bool.UEXISTS_SIMP"
   17.50 +  "UEXISTS_OR_THM" > "HOL4Base.bool.UEXISTS_OR_THM"
   17.51 +  "T_DEF" > "HOL.True_def"
   17.52 +  "TYPE_DEFINITION_THM" > "HOL4Setup.TYPE_DEFINITION"
   17.53 +  "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
   17.54 +  "TRUTH" > "HOL.TrueI"
   17.55 +  "SWAP_FORALL_THM" > "HOL4Base.bool.SWAP_FORALL_THM"
   17.56 +  "SWAP_EXISTS_THM" > "HOL4Base.bool.SWAP_EXISTS_THM"
   17.57 +  "SKOLEM_THM" > "HOL4Base.bool.SKOLEM_THM"
   17.58 +  "SELECT_UNIQUE" > "HOL4Base.bool.SELECT_UNIQUE"
   17.59 +  "SELECT_THM" > "HOL4Setup.EXISTS_DEF"
   17.60 +  "SELECT_REFL_2" > "Hilbert_Choice.some_sym_eq_trivial"
   17.61 +  "SELECT_REFL" > "Hilbert_Choice.some_eq_trivial"
   17.62 +  "SELECT_AX" > "Hilbert_Choice.tfl_some"
   17.63 +  "RIGHT_OR_OVER_AND" > "HOL.disj_conj_distribR"
   17.64 +  "RIGHT_OR_EXISTS_THM" > "HOL.ex_simps_4"
   17.65 +  "RIGHT_FORALL_OR_THM" > "HOL.all_simps_4"
   17.66 +  "RIGHT_FORALL_IMP_THM" > "HOL.all_simps_6"
   17.67 +  "RIGHT_EXISTS_IMP_THM" > "HOL.ex_simps_6"
   17.68 +  "RIGHT_EXISTS_AND_THM" > "HOL.ex_simps_2"
   17.69 +  "RIGHT_AND_OVER_OR" > "HOL.conj_disj_distribR"
   17.70 +  "RIGHT_AND_FORALL_THM" > "HOL.all_simps_2"
   17.71 +  "RES_SELECT_def" > "HOL4Base.bool.RES_SELECT_def"
   17.72 +  "RES_SELECT_DEF" > "HOL4Base.bool.RES_SELECT_DEF"
   17.73 +  "RES_FORALL_def" > "HOL4Base.bool.RES_FORALL_def"
   17.74 +  "RES_FORALL_DEF" > "HOL4Base.bool.RES_FORALL_DEF"
   17.75 +  "RES_EXISTS_def" > "HOL4Base.bool.RES_EXISTS_def"
   17.76 +  "RES_EXISTS_UNIQUE_def" > "HOL4Base.bool.RES_EXISTS_UNIQUE_def"
   17.77 +  "RES_EXISTS_UNIQUE_DEF" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
   17.78 +  "RES_EXISTS_DEF" > "HOL4Base.bool.RES_EXISTS_DEF"
   17.79 +  "RES_ABSTRACT_DEF" > "HOL4Base.bool.RES_ABSTRACT_DEF"
   17.80 +  "REFL_CLAUSE" > "HOL.simp_thms_6"
   17.81 +  "OR_INTRO_THM2" > "HOL.disjI2"
   17.82 +  "OR_INTRO_THM1" > "HOL.disjI1"
   17.83 +  "OR_IMP_THM" > "HOL4Base.bool.OR_IMP_THM"
   17.84 +  "OR_ELIM_THM" > "Recdef.tfl_disjE"
   17.85 +  "OR_DEF" > "HOL.or_def"
   17.86 +  "OR_CONG" > "HOL4Base.bool.OR_CONG"
   17.87 +  "OR_CLAUSES" > "HOL4Base.bool.OR_CLAUSES"
   17.88 +  "ONTO_THM" > "HOL4Setup.ONTO_DEF"
   17.89 +  "ONTO_DEF" > "HOL4Setup.ONTO_DEF"
   17.90 +  "ONE_ONE_THM" > "HOL4Base.bool.ONE_ONE_THM"
   17.91 +  "ONE_ONE_DEF" > "HOL4Setup.ONE_ONE_DEF"
   17.92 +  "NOT_IMP" > "HOL.not_imp"
   17.93 +  "NOT_FORALL_THM" > "Inductive.basic_monos_15"
   17.94 +  "NOT_F" > "HOL.Eq_FalseI"
   17.95 +  "NOT_EXISTS_THM" > "Inductive.basic_monos_16"
   17.96 +  "NOT_DEF" > "HOL.simp_thms_19"
   17.97 +  "NOT_CLAUSES" > "HOL4Base.bool.NOT_CLAUSES"
   17.98 +  "NOT_AND" > "HOL4Base.bool.NOT_AND"
   17.99 +  "MONO_OR" > "Inductive.basic_monos_3"
  17.100 +  "MONO_NOT" > "HOL.rev_contrapos"
  17.101 +  "MONO_IMP" > "Set.imp_mono"
  17.102 +  "MONO_EXISTS" > "Inductive.basic_monos_5"
  17.103 +  "MONO_COND" > "HOL4Base.bool.MONO_COND"
  17.104 +  "MONO_AND" > "Hilbert_Choice.conj_forward"
  17.105 +  "MONO_ALL" > "Inductive.basic_monos_6"
  17.106 +  "LET_THM" > "HOL.Let_def"
  17.107 +  "LET_RATOR" > "HOL4Base.bool.LET_RATOR"
  17.108 +  "LET_RAND" > "HOL4Base.bool.LET_RAND"
  17.109 +  "LET_DEF" > "HOL4Compat.LET_def"
  17.110 +  "LET_CONG" > "Recdef.let_cong"
  17.111 +  "LEFT_OR_OVER_AND" > "HOL.disj_conj_distribL"
  17.112 +  "LEFT_OR_EXISTS_THM" > "HOL.ex_simps_3"
  17.113 +  "LEFT_FORALL_OR_THM" > "HOL.all_simps_3"
  17.114 +  "LEFT_FORALL_IMP_THM" > "HOL.imp_ex"
  17.115 +  "LEFT_EXISTS_IMP_THM" > "HOL.imp_all"
  17.116 +  "LEFT_EXISTS_AND_THM" > "HOL.ex_simps_1"
  17.117 +  "LEFT_AND_OVER_OR" > "HOL.conj_disj_distribL"
  17.118 +  "LEFT_AND_FORALL_THM" > "HOL.all_simps_1"
  17.119 +  "IN_def" > "HOL4Base.bool.IN_def"
  17.120 +  "IN_DEF" > "HOL4Base.bool.IN_DEF"
  17.121 +  "INFINITY_AX" > "HOL4Setup.INFINITY_AX"
  17.122 +  "IMP_F_EQ_F" > "HOL4Base.bool.IMP_F_EQ_F"
  17.123 +  "IMP_F" > "HOL.notI"
  17.124 +  "IMP_DISJ_THM" > "Inductive.basic_monos_11"
  17.125 +  "IMP_CONG" > "HOL.imp_cong"
  17.126 +  "IMP_CLAUSES" > "HOL4Base.bool.IMP_CLAUSES"
  17.127 +  "IMP_ANTISYM_AX" > "HOL4Setup.light_imp_as"
  17.128 +  "F_IMP" > "HOL4Base.bool.F_IMP"
  17.129 +  "F_DEF" > "HOL.False_def"
  17.130 +  "FUN_EQ_THM" > "Fun.expand_fun_eq"
  17.131 +  "FORALL_THM" > "HOL4Base.bool.FORALL_THM"
  17.132 +  "FORALL_SIMP" > "HOL.simp_thms_35"
  17.133 +  "FORALL_DEF" > "HOL.All_def"
  17.134 +  "FORALL_AND_THM" > "HOL.all_conj_distrib"
  17.135 +  "FALSITY" > "HOL.FalseE"
  17.136 +  "EXISTS_UNIQUE_THM" > "HOL4Compat.EXISTS_UNIQUE_DEF"
  17.137 +  "EXISTS_UNIQUE_REFL" > "HOL.ex1_eq_1"
  17.138 +  "EXISTS_UNIQUE_DEF" > "HOL4Compat.EXISTS_UNIQUE_DEF"
  17.139 +  "EXISTS_THM" > "HOL4Base.bool.EXISTS_THM"
  17.140 +  "EXISTS_SIMP" > "HOL.simp_thms_36"
  17.141 +  "EXISTS_REFL" > "HOL.simp_thms_37"
  17.142 +  "EXISTS_OR_THM" > "HOL.ex_disj_distrib"
  17.143 +  "EXISTS_DEF" > "HOL4Setup.EXISTS_DEF"
  17.144 +  "EXCLUDED_MIDDLE" > "HOL4Base.bool.EXCLUDED_MIDDLE"
  17.145 +  "ETA_THM" > "Presburger.fm_modd_pinf"
  17.146 +  "ETA_AX" > "Presburger.fm_modd_pinf"
  17.147 +  "EQ_TRANS" > "Set.basic_trans_rules_31"
  17.148 +  "EQ_SYM_EQ" > "HOL.eq_sym_conv"
  17.149 +  "EQ_SYM" > "HOL.meta_eq_to_obj_eq"
  17.150 +  "EQ_REFL" > "Presburger.fm_modd_pinf"
  17.151 +  "EQ_IMP_THM" > "HOL.iff_conv_conj_imp"
  17.152 +  "EQ_EXT" > "HOL.meta_eq_to_obj_eq"
  17.153 +  "EQ_EXPAND" > "HOL4Base.bool.EQ_EXPAND"
  17.154 +  "EQ_CLAUSES" > "HOL4Base.bool.EQ_CLAUSES"
  17.155 +  "DISJ_SYM" > "HOL.disj_comms_1"
  17.156 +  "DISJ_IMP_THM" > "HOL.imp_disjL"
  17.157 +  "DISJ_COMM" > "HOL.disj_comms_1"
  17.158 +  "DISJ_ASSOC" > "Recdef.tfl_disj_assoc"
  17.159 +  "DE_MORGAN_THM" > "HOL4Base.bool.DE_MORGAN_THM"
  17.160 +  "CONJ_SYM" > "HOL.conj_comms_1"
  17.161 +  "CONJ_COMM" > "HOL.conj_comms_1"
  17.162 +  "CONJ_ASSOC" > "HOL.conj_assoc"
  17.163 +  "COND_RATOR" > "HOL4Base.bool.COND_RATOR"
  17.164 +  "COND_RAND" > "HOL.if_distrib"
  17.165 +  "COND_ID" > "HOL.if_cancel"
  17.166 +  "COND_EXPAND" > "HOL4Base.bool.COND_EXPAND"
  17.167 +  "COND_DEF" > "HOL4Compat.COND_DEF"
  17.168 +  "COND_CONG" > "HOL4Base.bool.COND_CONG"
  17.169 +  "COND_CLAUSES" > "HOL4Base.bool.COND_CLAUSES"
  17.170 +  "COND_ABS" > "HOL4Base.bool.COND_ABS"
  17.171 +  "BOTH_FORALL_OR_THM" > "HOL4Base.bool.BOTH_FORALL_OR_THM"
  17.172 +  "BOTH_FORALL_IMP_THM" > "HOL4Base.bool.BOTH_FORALL_IMP_THM"
  17.173 +  "BOTH_EXISTS_IMP_THM" > "HOL4Base.bool.BOTH_EXISTS_IMP_THM"
  17.174 +  "BOTH_EXISTS_AND_THM" > "HOL4Base.bool.BOTH_EXISTS_AND_THM"
  17.175 +  "BOOL_FUN_INDUCT" > "HOL4Base.bool.BOOL_FUN_INDUCT"
  17.176 +  "BOOL_FUN_CASES_THM" > "HOL4Base.bool.BOOL_FUN_CASES_THM"
  17.177 +  "BOOL_EQ_DISTINCT" > "HOL4Base.bool.BOOL_EQ_DISTINCT"
  17.178 +  "BOOL_CASES_AX" > "HOL.True_or_False"
  17.179 +  "BETA_THM" > "Presburger.fm_modd_pinf"
  17.180 +  "ARB_def" > "HOL4Base.bool.ARB_def"
  17.181 +  "ARB_DEF" > "HOL4Base.bool.ARB_DEF"
  17.182 +  "AND_INTRO_THM" > "HOL.conjI"
  17.183 +  "AND_IMP_INTRO" > "HOL.imp_conjL"
  17.184 +  "AND_DEF" > "HOL.and_def"
  17.185 +  "AND_CONG" > "HOL4Base.bool.AND_CONG"
  17.186 +  "AND_CLAUSES" > "HOL4Base.bool.AND_CLAUSES"
  17.187 +  "AND2_THM" > "HOL.conjunct2"
  17.188 +  "AND1_THM" > "HOL.conjunct1"
  17.189 +  "ABS_SIMP" > "Presburger.fm_modd_pinf"
  17.190 +  "ABS_REP_THM" > "HOL4Base.bool.ABS_REP_THM"
  17.191 +
  17.192 +ignore_thms
  17.193 +  "UNBOUNDED_THM"
  17.194 +  "UNBOUNDED_DEF"
  17.195 +  "BOUNDED_THM"
  17.196 +  "BOUNDED_DEF"
  17.197 +
  17.198 +end
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/src/HOL/Import/HOL/boolean_sequence.imp	Fri Apr 02 17:37:45 2004 +0200
    18.3 @@ -0,0 +1,39 @@
    18.4 +import
    18.5 +
    18.6 +import_segment "hol4"
    18.7 +
    18.8 +def_maps
    18.9 +  "STL" > "STL_primdef"
   18.10 +  "STAKE" > "STAKE_primdef"
   18.11 +  "SHD" > "SHD_primdef"
   18.12 +  "SDROP" > "SDROP_primdef"
   18.13 +  "SDEST" > "SDEST_primdef"
   18.14 +  "SCONST" > "SCONST_primdef"
   18.15 +  "SCONS" > "SCONS_primdef"
   18.16 +
   18.17 +const_maps
   18.18 +  "STL" > "HOL4Prob.boolean_sequence.STL"
   18.19 +  "SHD" > "HOL4Prob.boolean_sequence.SHD"
   18.20 +  "SDEST" > "HOL4Prob.boolean_sequence.SDEST"
   18.21 +  "SCONST" > "HOL4Prob.boolean_sequence.SCONST"
   18.22 +
   18.23 +thm_maps
   18.24 +  "STL_primdef" > "HOL4Prob.boolean_sequence.STL_primdef"
   18.25 +  "STL_def" > "HOL4Prob.boolean_sequence.STL_def"
   18.26 +  "STL_SCONST" > "HOL4Prob.boolean_sequence.STL_SCONST"
   18.27 +  "STL_SCONS" > "HOL4Prob.boolean_sequence.STL_SCONS"
   18.28 +  "STAKE_def" > "HOL4Prob.boolean_sequence.STAKE_def"
   18.29 +  "SHD_primdef" > "HOL4Prob.boolean_sequence.SHD_primdef"
   18.30 +  "SHD_def" > "HOL4Prob.boolean_sequence.SHD_def"
   18.31 +  "SHD_STL_ISO" > "HOL4Prob.boolean_sequence.SHD_STL_ISO"
   18.32 +  "SHD_SCONST" > "HOL4Prob.boolean_sequence.SHD_SCONST"
   18.33 +  "SHD_SCONS" > "HOL4Prob.boolean_sequence.SHD_SCONS"
   18.34 +  "SDROP_def" > "HOL4Prob.boolean_sequence.SDROP_def"
   18.35 +  "SDEST_primdef" > "HOL4Prob.boolean_sequence.SDEST_primdef"
   18.36 +  "SDEST_def" > "HOL4Prob.boolean_sequence.SDEST_def"
   18.37 +  "SCONS_def" > "HOL4Prob.boolean_sequence.SCONS_def"
   18.38 +  "SCONS_SURJ" > "HOL4Prob.boolean_sequence.SCONS_SURJ"
   18.39 +  "SCONST_primdef" > "HOL4Prob.boolean_sequence.SCONST_primdef"
   18.40 +  "SCONST_def" > "HOL4Prob.boolean_sequence.SCONST_def"
   18.41 +
   18.42 +end
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/src/HOL/Import/HOL/bword_arith.imp	Fri Apr 02 17:37:45 2004 +0200
    19.3 @@ -0,0 +1,27 @@
    19.4 +import
    19.5 +
    19.6 +import_segment "hol4"
    19.7 +
    19.8 +def_maps
    19.9 +  "ICARRY" > "ICARRY_def"
   19.10 +  "ACARRY" > "ACARRY_def"
   19.11 +
   19.12 +thm_maps
   19.13 +  "WSEG_NBWORD_ADD" > "HOL4Vec.bword_arith.WSEG_NBWORD_ADD"
   19.14 +  "ICARRY_WSEG" > "HOL4Vec.bword_arith.ICARRY_WSEG"
   19.15 +  "ICARRY_DEF" > "HOL4Vec.bword_arith.ICARRY_DEF"
   19.16 +  "BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.BNVAL_LESS_EQ"
   19.17 +  "ADD_WORD_SPLIT" > "HOL4Vec.bword_arith.ADD_WORD_SPLIT"
   19.18 +  "ADD_NBWORD_EQ0_SPLIT" > "HOL4Vec.bword_arith.ADD_NBWORD_EQ0_SPLIT"
   19.19 +  "ADD_BV_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ1"
   19.20 +  "ADD_BV_BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ"
   19.21 +  "ADD_BV_BNVAL_DIV_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_DIV_LESS_EQ1"
   19.22 +  "ADD_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BNVAL_LESS_EQ1"
   19.23 +  "ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_WSEG"
   19.24 +  "ACARRY_MSB" > "HOL4Vec.bword_arith.ACARRY_MSB"
   19.25 +  "ACARRY_EQ_ICARRY" > "HOL4Vec.bword_arith.ACARRY_EQ_ICARRY"
   19.26 +  "ACARRY_EQ_ADD_DIV" > "HOL4Vec.bword_arith.ACARRY_EQ_ADD_DIV"
   19.27 +  "ACARRY_DEF" > "HOL4Vec.bword_arith.ACARRY_DEF"
   19.28 +  "ACARRY_ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_ACARRY_WSEG"
   19.29 +
   19.30 +end
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/src/HOL/Import/HOL/bword_bitop.imp	Fri Apr 02 17:37:45 2004 +0200
    20.3 @@ -0,0 +1,23 @@
    20.4 +import
    20.5 +
    20.6 +import_segment "hol4"
    20.7 +
    20.8 +def_maps
    20.9 +  "WXOR" > "WXOR_def"
   20.10 +  "WOR" > "WOR_def"
   20.11 +  "WNOT" > "WNOT_def"
   20.12 +  "WAND" > "WAND_def"
   20.13 +
   20.14 +thm_maps
   20.15 +  "WXOR_DEF" > "HOL4Vec.bword_bitop.WXOR_DEF"
   20.16 +  "WOR_DEF" > "HOL4Vec.bword_bitop.WOR_DEF"
   20.17 +  "WNOT_WNOT" > "HOL4Vec.bword_bitop.WNOT_WNOT"
   20.18 +  "WNOT_DEF" > "HOL4Vec.bword_bitop.WNOT_DEF"
   20.19 +  "WCAT_WNOT" > "HOL4Vec.bword_bitop.WCAT_WNOT"
   20.20 +  "WAND_DEF" > "HOL4Vec.bword_bitop.WAND_DEF"
   20.21 +  "PBITOP_WNOT" > "HOL4Vec.bword_bitop.PBITOP_WNOT"
   20.22 +  "PBITBOP_WXOR" > "HOL4Vec.bword_bitop.PBITBOP_WXOR"
   20.23 +  "PBITBOP_WOR" > "HOL4Vec.bword_bitop.PBITBOP_WOR"
   20.24 +  "PBITBOP_WAND" > "HOL4Vec.bword_bitop.PBITBOP_WAND"
   20.25 +
   20.26 +end
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/src/HOL/Import/HOL/bword_num.imp	Fri Apr 02 17:37:45 2004 +0200
    21.3 @@ -0,0 +1,58 @@
    21.4 +import
    21.5 +
    21.6 +import_segment "hol4"
    21.7 +
    21.8 +def_maps
    21.9 +  "VB" > "VB_def"
   21.10 +  "NBWORD" > "NBWORD_def"
   21.11 +  "BV" > "BV_def"
   21.12 +  "BNVAL" > "BNVAL_def"
   21.13 +
   21.14 +const_maps
   21.15 +  "VB" > "HOL4Vec.bword_num.VB"
   21.16 +  "NBWORD" > "HOL4Vec.bword_num.NBWORD"
   21.17 +  "BV" > "HOL4Vec.bword_num.BV"
   21.18 +
   21.19 +thm_maps
   21.20 +  "ZERO_WORD_VAL" > "HOL4Vec.bword_num.ZERO_WORD_VAL"
   21.21 +  "WSPLIT_NBWORD_0" > "HOL4Vec.bword_num.WSPLIT_NBWORD_0"
   21.22 +  "WSEG_NBWORD_SUC" > "HOL4Vec.bword_num.WSEG_NBWORD_SUC"
   21.23 +  "WSEG_NBWORD" > "HOL4Vec.bword_num.WSEG_NBWORD"
   21.24 +  "WORDLEN_NBWORD" > "HOL4Vec.bword_num.WORDLEN_NBWORD"
   21.25 +  "WCAT_NBWORD_0" > "HOL4Vec.bword_num.WCAT_NBWORD_0"
   21.26 +  "VB_def" > "HOL4Vec.bword_num.VB_def"
   21.27 +  "VB_DEF" > "HOL4Vec.bword_num.VB_DEF"
   21.28 +  "VB_BV" > "HOL4Vec.bword_num.VB_BV"
   21.29 +  "PWORDLEN_NBWORD" > "HOL4Vec.bword_num.PWORDLEN_NBWORD"
   21.30 +  "NBWORD_def" > "HOL4Vec.bword_num.NBWORD_def"
   21.31 +  "NBWORD_SUC_WSEG" > "HOL4Vec.bword_num.NBWORD_SUC_WSEG"
   21.32 +  "NBWORD_SUC_FST" > "HOL4Vec.bword_num.NBWORD_SUC_FST"
   21.33 +  "NBWORD_SUC" > "HOL4Vec.bword_num.NBWORD_SUC"
   21.34 +  "NBWORD_SPLIT" > "HOL4Vec.bword_num.NBWORD_SPLIT"
   21.35 +  "NBWORD_MOD" > "HOL4Vec.bword_num.NBWORD_MOD"
   21.36 +  "NBWORD_DEF" > "HOL4Vec.bword_num.NBWORD_DEF"
   21.37 +  "NBWORD_BNVAL" > "HOL4Vec.bword_num.NBWORD_BNVAL"
   21.38 +  "NBWORD0" > "HOL4Vec.bword_num.NBWORD0"
   21.39 +  "MSB_NBWORD" > "HOL4Vec.bword_num.MSB_NBWORD"
   21.40 +  "EQ_NBWORD0_SPLIT" > "HOL4Vec.bword_num.EQ_NBWORD0_SPLIT"
   21.41 +  "DOUBL_EQ_SHL" > "HOL4Vec.bword_num.DOUBL_EQ_SHL"
   21.42 +  "BV_def" > "HOL4Vec.bword_num.BV_def"
   21.43 +  "BV_VB" > "HOL4Vec.bword_num.BV_VB"
   21.44 +  "BV_LESS_2" > "HOL4Vec.bword_num.BV_LESS_2"
   21.45 +  "BV_DEF" > "HOL4Vec.bword_num.BV_DEF"
   21.46 +  "BNVAL_WCAT2" > "HOL4Vec.bword_num.BNVAL_WCAT2"
   21.47 +  "BNVAL_WCAT1" > "HOL4Vec.bword_num.BNVAL_WCAT1"
   21.48 +  "BNVAL_WCAT" > "HOL4Vec.bword_num.BNVAL_WCAT"
   21.49 +  "BNVAL_ONTO" > "HOL4Vec.bword_num.BNVAL_ONTO"
   21.50 +  "BNVAL_NVAL" > "HOL4Vec.bword_num.BNVAL_NVAL"
   21.51 +  "BNVAL_NBWORD" > "HOL4Vec.bword_num.BNVAL_NBWORD"
   21.52 +  "BNVAL_MAX" > "HOL4Vec.bword_num.BNVAL_MAX"
   21.53 +  "BNVAL_DEF" > "HOL4Vec.bword_num.BNVAL_DEF"
   21.54 +  "BNVAL_11" > "HOL4Vec.bword_num.BNVAL_11"
   21.55 +  "BNVAL0" > "HOL4Vec.bword_num.BNVAL0"
   21.56 +  "BIT_NBWORD0" > "HOL4Vec.bword_num.BIT_NBWORD0"
   21.57 +  "ADD_BNVAL_SPLIT" > "HOL4Vec.bword_num.ADD_BNVAL_SPLIT"
   21.58 +  "ADD_BNVAL_RIGHT" > "HOL4Vec.bword_num.ADD_BNVAL_RIGHT"
   21.59 +  "ADD_BNVAL_LEFT" > "HOL4Vec.bword_num.ADD_BNVAL_LEFT"
   21.60 +
   21.61 +end
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/src/HOL/Import/HOL/combin.imp	Fri Apr 02 17:37:45 2004 +0200
    22.3 @@ -0,0 +1,41 @@
    22.4 +import
    22.5 +
    22.6 +import_segment "hol4"
    22.7 +
    22.8 +def_maps
    22.9 +  "W" > "W_def"
   22.10 +  "S" > "S_def"
   22.11 +  "K" > "K_def"
   22.12 +  "I" > "I_def"
   22.13 +  "C" > "C_def"
   22.14 +
   22.15 +const_maps
   22.16 +  "o" > "Fun.comp"
   22.17 +  "W" > "HOL4Base.combin.W"
   22.18 +  "S" > "HOL4Base.combin.S"
   22.19 +  "K" > "HOL4Base.combin.K"
   22.20 +  "I" > "HOL4Base.combin.I"
   22.21 +  "C" > "HOL4Base.combin.C"
   22.22 +
   22.23 +thm_maps
   22.24 +  "o_THM" > "Fun.o_apply"
   22.25 +  "o_DEF" > "Fun.o_apply"
   22.26 +  "o_ASSOC" > "Fun.o_assoc"
   22.27 +  "W_def" > "HOL4Base.combin.W_def"
   22.28 +  "W_THM" > "HOL4Base.combin.W_def"
   22.29 +  "W_DEF" > "HOL4Base.combin.W_DEF"
   22.30 +  "S_def" > "HOL4Base.combin.S_def"
   22.31 +  "S_THM" > "HOL4Base.combin.S_def"
   22.32 +  "S_DEF" > "HOL4Base.combin.S_DEF"
   22.33 +  "K_def" > "HOL4Base.combin.K_def"
   22.34 +  "K_THM" > "HOL4Base.combin.K_def"
   22.35 +  "K_DEF" > "HOL4Base.combin.K_DEF"
   22.36 +  "I_o_ID" > "HOL4Base.combin.I_o_ID"
   22.37 +  "I_def" > "HOL4Base.combin.I_def"
   22.38 +  "I_THM" > "HOL4Base.combin.I_THM"
   22.39 +  "I_DEF" > "HOL4Base.combin.I_DEF"
   22.40 +  "C_def" > "HOL4Base.combin.C_def"
   22.41 +  "C_THM" > "HOL4Base.combin.C_def"
   22.42 +  "C_DEF" > "HOL4Base.combin.C_DEF"
   22.43 +
   22.44 +end
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/src/HOL/Import/HOL/divides.imp	Fri Apr 02 17:37:45 2004 +0200
    23.3 @@ -0,0 +1,24 @@
    23.4 +import
    23.5 +
    23.6 +import_segment "hol4"
    23.7 +
    23.8 +const_maps
    23.9 +  "divides" > "Divides.op dvd" :: "nat => nat => bool"
   23.10 +
   23.11 +thm_maps
   23.12 +  "divides_def" > "HOL4Compat.divides_def"
   23.13 +  "ONE_DIVIDES_ALL" > "HOL4Base.divides.ONE_DIVIDES_ALL"
   23.14 +  "NOT_LT_DIV" > "HOL4Base.divides.NOT_LT_DIV"
   23.15 +  "DIVIDES_TRANS" > "Divides.dvd_trans"
   23.16 +  "DIVIDES_SUB" > "Divides.dvd_diff"
   23.17 +  "DIVIDES_REFL" > "Divides.dvd_refl"
   23.18 +  "DIVIDES_MULT_LEFT" > "HOL4Base.divides.DIVIDES_MULT_LEFT"
   23.19 +  "DIVIDES_MULT" > "Divides.dvd_mult2"
   23.20 +  "DIVIDES_LE" > "Divides.dvd_imp_le"
   23.21 +  "DIVIDES_FACT" > "HOL4Base.divides.DIVIDES_FACT"
   23.22 +  "DIVIDES_ANTISYM" > "Divides.dvd_anti_sym"
   23.23 +  "DIVIDES_ADD_2" > "HOL4Base.divides.DIVIDES_ADD_2"
   23.24 +  "DIVIDES_ADD_1" > "Divides.dvd_add"
   23.25 +  "ALL_DIVIDES_0" > "Divides.dvd_0_right"
   23.26 +
   23.27 +end
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/src/HOL/Import/HOL/hrat.imp	Fri Apr 02 17:37:45 2004 +0200
    24.3 @@ -0,0 +1,95 @@
    24.4 +import
    24.5 +
    24.6 +import_segment "hol4"
    24.7 +
    24.8 +def_maps
    24.9 +  "trat_sucint" > "trat_sucint_def"
   24.10 +  "trat_mul" > "trat_mul_def"
   24.11 +  "trat_inv" > "trat_inv_def"
   24.12 +  "trat_eq" > "trat_eq_def"
   24.13 +  "trat_add" > "trat_add_def"
   24.14 +  "trat_1" > "trat_1_def"
   24.15 +  "mk_hrat" > "mk_hrat_def"
   24.16 +  "hrat_sucint" > "hrat_sucint_def"
   24.17 +  "hrat_mul" > "hrat_mul_def"
   24.18 +  "hrat_inv" > "hrat_inv_def"
   24.19 +  "hrat_add" > "hrat_add_def"
   24.20 +  "hrat_1" > "hrat_1_def"
   24.21 +  "dest_hrat" > "dest_hrat_def"
   24.22 +
   24.23 +type_maps
   24.24 +  "hrat" > "HOL4Base.hrat.hrat"
   24.25 +
   24.26 +const_maps
   24.27 +  "trat_mul" > "HOL4Base.hrat.trat_mul"
   24.28 +  "trat_inv" > "HOL4Base.hrat.trat_inv"
   24.29 +  "trat_eq" > "HOL4Base.hrat.trat_eq"
   24.30 +  "trat_add" > "HOL4Base.hrat.trat_add"
   24.31 +  "trat_1" > "HOL4Base.hrat.trat_1"
   24.32 +  "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
   24.33 +  "hrat_mul" > "HOL4Base.hrat.hrat_mul"
   24.34 +  "hrat_inv" > "HOL4Base.hrat.hrat_inv"
   24.35 +  "hrat_add" > "HOL4Base.hrat.hrat_add"
   24.36 +  "hrat_1" > "HOL4Base.hrat.hrat_1"
   24.37 +
   24.38 +thm_maps
   24.39 +  "trat_sucint" > "HOL4Base.hrat.trat_sucint"
   24.40 +  "trat_mul_def" > "HOL4Base.hrat.trat_mul_def"
   24.41 +  "trat_mul" > "HOL4Base.hrat.trat_mul"
   24.42 +  "trat_inv_def" > "HOL4Base.hrat.trat_inv_def"
   24.43 +  "trat_inv" > "HOL4Base.hrat.trat_inv"
   24.44 +  "trat_eq_def" > "HOL4Base.hrat.trat_eq_def"
   24.45 +  "trat_eq" > "HOL4Base.hrat.trat_eq"
   24.46 +  "trat_add_def" > "HOL4Base.hrat.trat_add_def"
   24.47 +  "trat_add" > "HOL4Base.hrat.trat_add"
   24.48 +  "trat_1_def" > "HOL4Base.hrat.trat_1_def"
   24.49 +  "trat_1" > "HOL4Base.hrat.trat_1"
   24.50 +  "hrat_tybij" > "HOL4Base.hrat.hrat_tybij"
   24.51 +  "hrat_sucint_def" > "HOL4Base.hrat.hrat_sucint_def"
   24.52 +  "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
   24.53 +  "hrat_mul_def" > "HOL4Base.hrat.hrat_mul_def"
   24.54 +  "hrat_mul" > "HOL4Base.hrat.hrat_mul"
   24.55 +  "hrat_inv_def" > "HOL4Base.hrat.hrat_inv_def"
   24.56 +  "hrat_inv" > "HOL4Base.hrat.hrat_inv"
   24.57 +  "hrat_add_def" > "HOL4Base.hrat.hrat_add_def"
   24.58 +  "hrat_add" > "HOL4Base.hrat.hrat_add"
   24.59 +  "hrat_TY_DEF" > "HOL4Base.hrat.hrat_TY_DEF"
   24.60 +  "hrat_1_def" > "HOL4Base.hrat.hrat_1_def"
   24.61 +  "hrat_1" > "HOL4Base.hrat.hrat_1"
   24.62 +  "TRAT_SUCINT_0" > "HOL4Base.hrat.TRAT_SUCINT_0"
   24.63 +  "TRAT_SUCINT" > "HOL4Base.hrat.TRAT_SUCINT"
   24.64 +  "TRAT_NOZERO" > "HOL4Base.hrat.TRAT_NOZERO"
   24.65 +  "TRAT_MUL_WELLDEFINED2" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED2"
   24.66 +  "TRAT_MUL_WELLDEFINED" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED"
   24.67 +  "TRAT_MUL_SYM_EQ" > "HOL4Base.hrat.TRAT_MUL_SYM_EQ"
   24.68 +  "TRAT_MUL_SYM" > "HOL4Base.hrat.TRAT_MUL_SYM"
   24.69 +  "TRAT_MUL_LINV" > "HOL4Base.hrat.TRAT_MUL_LINV"
   24.70 +  "TRAT_MUL_LID" > "HOL4Base.hrat.TRAT_MUL_LID"
   24.71 +  "TRAT_MUL_ASSOC" > "HOL4Base.hrat.TRAT_MUL_ASSOC"
   24.72 +  "TRAT_LDISTRIB" > "HOL4Base.hrat.TRAT_LDISTRIB"
   24.73 +  "TRAT_INV_WELLDEFINED" > "HOL4Base.hrat.TRAT_INV_WELLDEFINED"
   24.74 +  "TRAT_EQ_TRANS" > "HOL4Base.hrat.TRAT_EQ_TRANS"
   24.75 +  "TRAT_EQ_SYM" > "HOL4Base.hrat.TRAT_EQ_SYM"
   24.76 +  "TRAT_EQ_REFL" > "HOL4Base.hrat.TRAT_EQ_REFL"
   24.77 +  "TRAT_EQ_EQUIV" > "HOL4Base.hrat.TRAT_EQ_EQUIV"
   24.78 +  "TRAT_EQ_AP" > "HOL4Base.hrat.TRAT_EQ_AP"
   24.79 +  "TRAT_ARCH" > "HOL4Base.hrat.TRAT_ARCH"
   24.80 +  "TRAT_ADD_WELLDEFINED2" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED2"
   24.81 +  "TRAT_ADD_WELLDEFINED" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED"
   24.82 +  "TRAT_ADD_TOTAL" > "HOL4Base.hrat.TRAT_ADD_TOTAL"
   24.83 +  "TRAT_ADD_SYM_EQ" > "HOL4Base.hrat.TRAT_ADD_SYM_EQ"
   24.84 +  "TRAT_ADD_SYM" > "HOL4Base.hrat.TRAT_ADD_SYM"
   24.85 +  "TRAT_ADD_ASSOC" > "HOL4Base.hrat.TRAT_ADD_ASSOC"
   24.86 +  "HRAT_SUCINT" > "HOL4Base.hrat.HRAT_SUCINT"
   24.87 +  "HRAT_NOZERO" > "HOL4Base.hrat.HRAT_NOZERO"
   24.88 +  "HRAT_MUL_SYM" > "HOL4Base.hrat.HRAT_MUL_SYM"
   24.89 +  "HRAT_MUL_LINV" > "HOL4Base.hrat.HRAT_MUL_LINV"
   24.90 +  "HRAT_MUL_LID" > "HOL4Base.hrat.HRAT_MUL_LID"
   24.91 +  "HRAT_MUL_ASSOC" > "HOL4Base.hrat.HRAT_MUL_ASSOC"
   24.92 +  "HRAT_LDISTRIB" > "HOL4Base.hrat.HRAT_LDISTRIB"
   24.93 +  "HRAT_ARCH" > "HOL4Base.hrat.HRAT_ARCH"
   24.94 +  "HRAT_ADD_TOTAL" > "HOL4Base.hrat.HRAT_ADD_TOTAL"
   24.95 +  "HRAT_ADD_SYM" > "HOL4Base.hrat.HRAT_ADD_SYM"
   24.96 +  "HRAT_ADD_ASSOC" > "HOL4Base.hrat.HRAT_ADD_ASSOC"
   24.97 +
   24.98 +end
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/src/HOL/Import/HOL/hreal.imp	Fri Apr 02 17:37:45 2004 +0200
    25.3 @@ -0,0 +1,118 @@
    25.4 +import
    25.5 +
    25.6 +import_segment "hol4"
    25.7 +
    25.8 +def_maps
    25.9 +  "isacut" > "isacut_def"
   25.10 +  "hreal_sup" > "hreal_sup_def"
   25.11 +  "hreal_sub" > "hreal_sub_def"
   25.12 +  "hreal_mul" > "hreal_mul_def"
   25.13 +  "hreal_lt" > "hreal_lt_def"
   25.14 +  "hreal_inv" > "hreal_inv_def"
   25.15 +  "hreal_add" > "hreal_add_def"
   25.16 +  "hreal_1" > "hreal_1_def"
   25.17 +  "hreal" > "hreal_def"
   25.18 +  "hrat_lt" > "hrat_lt_def"
   25.19 +  "cut_of_hrat" > "cut_of_hrat_def"
   25.20 +  "cut" > "cut_def"
   25.21 +
   25.22 +type_maps
   25.23 +  "hreal" > "HOL4Base.hreal.hreal"
   25.24 +
   25.25 +const_maps
   25.26 +  "isacut" > "HOL4Base.hreal.isacut"
   25.27 +  "hreal_sup" > "HOL4Base.hreal.hreal_sup"
   25.28 +  "hreal_sub" > "HOL4Base.hreal.hreal_sub"
   25.29 +  "hreal_mul" > "HOL4Base.hreal.hreal_mul"
   25.30 +  "hreal_lt" > "HOL4Base.hreal.hreal_lt"
   25.31 +  "hreal_inv" > "HOL4Base.hreal.hreal_inv"
   25.32 +  "hreal_add" > "HOL4Base.hreal.hreal_add"
   25.33 +  "hreal_1" > "HOL4Base.hreal.hreal_1"
   25.34 +  "hrat_lt" > "HOL4Base.hreal.hrat_lt"
   25.35 +  "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
   25.36 +
   25.37 +thm_maps
   25.38 +  "isacut_def" > "HOL4Base.hreal.isacut_def"
   25.39 +  "isacut" > "HOL4Base.hreal.isacut"
   25.40 +  "hreal_tybij" > "HOL4Base.hreal.hreal_tybij"
   25.41 +  "hreal_sup_def" > "HOL4Base.hreal.hreal_sup_def"
   25.42 +  "hreal_sup" > "HOL4Base.hreal.hreal_sup"
   25.43 +  "hreal_sub_def" > "HOL4Base.hreal.hreal_sub_def"
   25.44 +  "hreal_sub" > "HOL4Base.hreal.hreal_sub"
   25.45 +  "hreal_mul_def" > "HOL4Base.hreal.hreal_mul_def"
   25.46 +  "hreal_mul" > "HOL4Base.hreal.hreal_mul"
   25.47 +  "hreal_lt_def" > "HOL4Base.hreal.hreal_lt_def"
   25.48 +  "hreal_lt" > "HOL4Base.hreal.hreal_lt"
   25.49 +  "hreal_inv_def" > "HOL4Base.hreal.hreal_inv_def"
   25.50 +  "hreal_inv" > "HOL4Base.hreal.hreal_inv"
   25.51 +  "hreal_add_def" > "HOL4Base.hreal.hreal_add_def"
   25.52 +  "hreal_add" > "HOL4Base.hreal.hreal_add"
   25.53 +  "hreal_TY_DEF" > "HOL4Base.hreal.hreal_TY_DEF"
   25.54 +  "hreal_1_def" > "HOL4Base.hreal.hreal_1_def"
   25.55 +  "hreal_1" > "HOL4Base.hreal.hreal_1"
   25.56 +  "hrat_lt_def" > "HOL4Base.hreal.hrat_lt_def"
   25.57 +  "hrat_lt" > "HOL4Base.hreal.hrat_lt"
   25.58 +  "cut_of_hrat_def" > "HOL4Base.hreal.cut_of_hrat_def"
   25.59 +  "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
   25.60 +  "ISACUT_HRAT" > "HOL4Base.hreal.ISACUT_HRAT"
   25.61 +  "HREAL_SUP_ISACUT" > "HOL4Base.hreal.HREAL_SUP_ISACUT"
   25.62 +  "HREAL_SUP" > "HOL4Base.hreal.HREAL_SUP"
   25.63 +  "HREAL_SUB_ISACUT" > "HOL4Base.hreal.HREAL_SUB_ISACUT"
   25.64 +  "HREAL_SUB_ADD" > "HOL4Base.hreal.HREAL_SUB_ADD"
   25.65 +  "HREAL_NOZERO" > "HOL4Base.hreal.HREAL_NOZERO"
   25.66 +  "HREAL_MUL_SYM" > "HOL4Base.hreal.HREAL_MUL_SYM"
   25.67 +  "HREAL_MUL_LINV" > "HOL4Base.hreal.HREAL_MUL_LINV"
   25.68 +  "HREAL_MUL_LID" > "HOL4Base.hreal.HREAL_MUL_LID"
   25.69 +  "HREAL_MUL_ISACUT" > "HOL4Base.hreal.HREAL_MUL_ISACUT"
   25.70 +  "HREAL_MUL_ASSOC" > "HOL4Base.hreal.HREAL_MUL_ASSOC"
   25.71 +  "HREAL_LT_TOTAL" > "HOL4Base.hreal.HREAL_LT_TOTAL"
   25.72 +  "HREAL_LT_LEMMA" > "HOL4Base.hreal.HREAL_LT_LEMMA"
   25.73 +  "HREAL_LT" > "HOL4Base.hreal.HREAL_LT"
   25.74 +  "HREAL_LDISTRIB" > "HOL4Base.hreal.HREAL_LDISTRIB"
   25.75 +  "HREAL_INV_ISACUT" > "HOL4Base.hreal.HREAL_INV_ISACUT"
   25.76 +  "HREAL_ADD_TOTAL" > "HOL4Base.hreal.HREAL_ADD_TOTAL"
   25.77 +  "HREAL_ADD_SYM" > "HOL4Base.hreal.HREAL_ADD_SYM"
   25.78 +  "HREAL_ADD_ISACUT" > "HOL4Base.hreal.HREAL_ADD_ISACUT"
   25.79 +  "HREAL_ADD_ASSOC" > "HOL4Base.hreal.HREAL_ADD_ASSOC"
   25.80 +  "HRAT_UP" > "HOL4Base.hreal.HRAT_UP"
   25.81 +  "HRAT_RDISTRIB" > "HOL4Base.hreal.HRAT_RDISTRIB"
   25.82 +  "HRAT_MUL_RINV" > "HOL4Base.hreal.HRAT_MUL_RINV"
   25.83 +  "HRAT_MUL_RID" > "HOL4Base.hreal.HRAT_MUL_RID"
   25.84 +  "HRAT_MEAN" > "HOL4Base.hreal.HRAT_MEAN"
   25.85 +  "HRAT_LT_TRANS" > "HOL4Base.hreal.HRAT_LT_TRANS"
   25.86 +  "HRAT_LT_TOTAL" > "HOL4Base.hreal.HRAT_LT_TOTAL"
   25.87 +  "HRAT_LT_RMUL1" > "HOL4Base.hreal.HRAT_LT_RMUL1"
   25.88 +  "HRAT_LT_RMUL" > "HOL4Base.hreal.HRAT_LT_RMUL"
   25.89 +  "HRAT_LT_REFL" > "HOL4Base.hreal.HRAT_LT_REFL"
   25.90 +  "HRAT_LT_RADD" > "HOL4Base.hreal.HRAT_LT_RADD"
   25.91 +  "HRAT_LT_R1" > "HOL4Base.hreal.HRAT_LT_R1"
   25.92 +  "HRAT_LT_NE" > "HOL4Base.hreal.HRAT_LT_NE"
   25.93 +  "HRAT_LT_MUL2" > "HOL4Base.hreal.HRAT_LT_MUL2"
   25.94 +  "HRAT_LT_LMUL1" > "HOL4Base.hreal.HRAT_LT_LMUL1"
   25.95 +  "HRAT_LT_LMUL" > "HOL4Base.hreal.HRAT_LT_LMUL"
   25.96 +  "HRAT_LT_LADD" > "HOL4Base.hreal.HRAT_LT_LADD"
   25.97 +  "HRAT_LT_L1" > "HOL4Base.hreal.HRAT_LT_L1"
   25.98 +  "HRAT_LT_GT" > "HOL4Base.hreal.HRAT_LT_GT"
   25.99 +  "HRAT_LT_ANTISYM" > "HOL4Base.hreal.HRAT_LT_ANTISYM"
  25.100 +  "HRAT_LT_ADDR" > "HOL4Base.hreal.HRAT_LT_ADDR"
  25.101 +  "HRAT_LT_ADDL" > "HOL4Base.hreal.HRAT_LT_ADDL"
  25.102 +  "HRAT_LT_ADD2" > "HOL4Base.hreal.HRAT_LT_ADD2"
  25.103 +  "HRAT_INV_MUL" > "HOL4Base.hreal.HRAT_INV_MUL"
  25.104 +  "HRAT_GT_LMUL1" > "HOL4Base.hreal.HRAT_GT_LMUL1"
  25.105 +  "HRAT_GT_L1" > "HOL4Base.hreal.HRAT_GT_L1"
  25.106 +  "HRAT_EQ_LMUL" > "HOL4Base.hreal.HRAT_EQ_LMUL"
  25.107 +  "HRAT_EQ_LADD" > "HOL4Base.hreal.HRAT_EQ_LADD"
  25.108 +  "HRAT_DOWN2" > "HOL4Base.hreal.HRAT_DOWN2"
  25.109 +  "HRAT_DOWN" > "HOL4Base.hreal.HRAT_DOWN"
  25.110 +  "EQUAL_CUTS" > "HOL4Base.hreal.EQUAL_CUTS"
  25.111 +  "CUT_UP" > "HOL4Base.hreal.CUT_UP"
  25.112 +  "CUT_UBOUND" > "HOL4Base.hreal.CUT_UBOUND"
  25.113 +  "CUT_STRADDLE" > "HOL4Base.hreal.CUT_STRADDLE"
  25.114 +  "CUT_NONEMPTY" > "HOL4Base.hreal.CUT_NONEMPTY"
  25.115 +  "CUT_NEARTOP_MUL" > "HOL4Base.hreal.CUT_NEARTOP_MUL"
  25.116 +  "CUT_NEARTOP_ADD" > "HOL4Base.hreal.CUT_NEARTOP_ADD"
  25.117 +  "CUT_ISACUT" > "HOL4Base.hreal.CUT_ISACUT"
  25.118 +  "CUT_DOWN" > "HOL4Base.hreal.CUT_DOWN"
  25.119 +  "CUT_BOUNDED" > "HOL4Base.hreal.CUT_BOUNDED"
  25.120 +
  25.121 +end
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/src/HOL/Import/HOL/ind_type.imp	Fri Apr 02 17:37:45 2004 +0200
    26.3 @@ -0,0 +1,99 @@
    26.4 +import
    26.5 +
    26.6 +import_segment "hol4"
    26.7 +
    26.8 +def_maps
    26.9 +  "mk_rec" > "mk_rec_def"
   26.10 +  "dest_rec" > "dest_rec_def"
   26.11 +  "ZRECSPACE" > "ZRECSPACE_def"
   26.12 +  "ZCONSTR" > "ZCONSTR_def"
   26.13 +  "ZBOT" > "ZBOT_def"
   26.14 +  "NUMSUM" > "NUMSUM_def"
   26.15 +  "NUMSND" > "NUMSND_def"
   26.16 +  "NUMRIGHT" > "NUMRIGHT_def"
   26.17 +  "NUMPAIR" > "NUMPAIR_def"
   26.18 +  "NUMLEFT" > "NUMLEFT_def"
   26.19 +  "NUMFST" > "NUMFST_def"
   26.20 +  "ISO" > "ISO_def"
   26.21 +  "INJP" > "INJP_def"
   26.22 +  "INJN" > "INJN_def"
   26.23 +  "INJF" > "INJF_def"
   26.24 +  "INJA" > "INJA_def"
   26.25 +  "FNIL" > "FNIL_def"
   26.26 +  "FCONS" > "FCONS_def"
   26.27 +  "CONSTR" > "CONSTR_def"
   26.28 +  "BOTTOM" > "BOTTOM_def"
   26.29 +
   26.30 +type_maps
   26.31 +  "recspace" > "HOL4Base.ind_type.recspace"
   26.32 +
   26.33 +const_maps
   26.34 +  "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
   26.35 +  "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
   26.36 +  "ZBOT" > "HOL4Base.ind_type.ZBOT"
   26.37 +  "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
   26.38 +  "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
   26.39 +  "ISO" > "HOL4Base.ind_type.ISO"
   26.40 +  "INJP" > "HOL4Base.ind_type.INJP"
   26.41 +  "INJN" > "HOL4Base.ind_type.INJN"
   26.42 +  "INJF" > "HOL4Base.ind_type.INJF"
   26.43 +  "INJA" > "HOL4Base.ind_type.INJA"
   26.44 +  "FNIL" > "HOL4Base.ind_type.FNIL"
   26.45 +  "CONSTR" > "HOL4Base.ind_type.CONSTR"
   26.46 +  "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
   26.47 +
   26.48 +thm_maps
   26.49 +  "recspace_repfns" > "HOL4Base.ind_type.recspace_repfns"
   26.50 +  "recspace_TY_DEF" > "HOL4Base.ind_type.recspace_TY_DEF"
   26.51 +  "ZRECSPACE_rules" > "HOL4Base.ind_type.ZRECSPACE_rules"
   26.52 +  "ZRECSPACE_ind" > "HOL4Base.ind_type.ZRECSPACE_ind"
   26.53 +  "ZRECSPACE_def" > "HOL4Base.ind_type.ZRECSPACE_def"
   26.54 +  "ZRECSPACE_cases" > "HOL4Base.ind_type.ZRECSPACE_cases"
   26.55 +  "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
   26.56 +  "ZCONSTR_def" > "HOL4Base.ind_type.ZCONSTR_def"
   26.57 +  "ZCONSTR_ZBOT" > "HOL4Base.ind_type.ZCONSTR_ZBOT"
   26.58 +  "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
   26.59 +  "ZBOT_def" > "HOL4Base.ind_type.ZBOT_def"
   26.60 +  "ZBOT" > "HOL4Base.ind_type.ZBOT"
   26.61 +  "NUMSUM_def" > "HOL4Base.ind_type.NUMSUM_def"
   26.62 +  "NUMSUM_INJ" > "HOL4Base.ind_type.NUMSUM_INJ"
   26.63 +  "NUMSUM_DEST" > "HOL4Base.ind_type.NUMSUM_DEST"
   26.64 +  "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
   26.65 +  "NUMPAIR_def" > "HOL4Base.ind_type.NUMPAIR_def"
   26.66 +  "NUMPAIR_INJ_LEMMA" > "HOL4Base.ind_type.NUMPAIR_INJ_LEMMA"
   26.67 +  "NUMPAIR_INJ" > "HOL4Base.ind_type.NUMPAIR_INJ"
   26.68 +  "NUMPAIR_DEST" > "HOL4Base.ind_type.NUMPAIR_DEST"
   26.69 +  "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
   26.70 +  "MK_REC_INJ" > "HOL4Base.ind_type.MK_REC_INJ"
   26.71 +  "ISO_def" > "HOL4Base.ind_type.ISO_def"
   26.72 +  "ISO_USAGE" > "HOL4Base.ind_type.ISO_USAGE"
   26.73 +  "ISO_REFL" > "HOL4Base.ind_type.ISO_REFL"
   26.74 +  "ISO_FUN" > "HOL4Base.ind_type.ISO_FUN"
   26.75 +  "ISO" > "HOL4Base.ind_type.ISO"
   26.76 +  "INJ_INVERSE2" > "HOL4Base.ind_type.INJ_INVERSE2"
   26.77 +  "INJP_def" > "HOL4Base.ind_type.INJP_def"
   26.78 +  "INJP_INJ" > "HOL4Base.ind_type.INJP_INJ"
   26.79 +  "INJP" > "HOL4Base.ind_type.INJP"
   26.80 +  "INJN_def" > "HOL4Base.ind_type.INJN_def"
   26.81 +  "INJN_INJ" > "HOL4Base.ind_type.INJN_INJ"
   26.82 +  "INJN" > "HOL4Base.ind_type.INJN"
   26.83 +  "INJF_def" > "HOL4Base.ind_type.INJF_def"
   26.84 +  "INJF_INJ" > "HOL4Base.ind_type.INJF_INJ"
   26.85 +  "INJF" > "HOL4Base.ind_type.INJF"
   26.86 +  "INJA_def" > "HOL4Base.ind_type.INJA_def"
   26.87 +  "INJA_INJ" > "HOL4Base.ind_type.INJA_INJ"
   26.88 +  "INJA" > "HOL4Base.ind_type.INJA"
   26.89 +  "FNIL_def" > "HOL4Base.ind_type.FNIL_def"
   26.90 +  "FNIL" > "HOL4Base.ind_type.FNIL"
   26.91 +  "FCONS" > "HOL4Base.ind_type.FCONS"
   26.92 +  "DEST_REC_INJ" > "HOL4Base.ind_type.DEST_REC_INJ"
   26.93 +  "CONSTR_def" > "HOL4Base.ind_type.CONSTR_def"
   26.94 +  "CONSTR_REC" > "HOL4Base.ind_type.CONSTR_REC"
   26.95 +  "CONSTR_INJ" > "HOL4Base.ind_type.CONSTR_INJ"
   26.96 +  "CONSTR_IND" > "HOL4Base.ind_type.CONSTR_IND"
   26.97 +  "CONSTR_BOT" > "HOL4Base.ind_type.CONSTR_BOT"
   26.98 +  "CONSTR" > "HOL4Base.ind_type.CONSTR"
   26.99 +  "BOTTOM_def" > "HOL4Base.ind_type.BOTTOM_def"
  26.100 +  "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
  26.101 +
  26.102 +end
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/src/HOL/Import/HOL/lim.imp	Fri Apr 02 17:37:45 2004 +0200
    27.3 @@ -0,0 +1,93 @@
    27.4 +import
    27.5 +
    27.6 +import_segment "hol4"
    27.7 +
    27.8 +def_maps
    27.9 +  "tends_real_real" > "tends_real_real_def"
   27.10 +  "diffl" > "diffl_def"
   27.11 +  "differentiable" > "differentiable_def"
   27.12 +  "contl" > "contl_def"
   27.13 +
   27.14 +const_maps
   27.15 +  "tends_real_real" > "HOL4Real.lim.tends_real_real"
   27.16 +  "diffl" > "HOL4Real.lim.diffl"
   27.17 +  "differentiable" > "HOL4Real.lim.differentiable"
   27.18 +  "contl" > "HOL4Real.lim.contl"
   27.19 +
   27.20 +thm_maps
   27.21 +  "tends_real_real_def" > "HOL4Real.lim.tends_real_real_def"
   27.22 +  "tends_real_real" > "HOL4Real.lim.tends_real_real"
   27.23 +  "diffl_def" > "HOL4Real.lim.diffl_def"
   27.24 +  "diffl" > "HOL4Real.lim.diffl"
   27.25 +  "differentiable_def" > "HOL4Real.lim.differentiable_def"
   27.26 +  "differentiable" > "HOL4Real.lim.differentiable"
   27.27 +  "contl_def" > "HOL4Real.lim.contl_def"
   27.28 +  "contl" > "HOL4Real.lim.contl"
   27.29 +  "ROLLE" > "HOL4Real.lim.ROLLE"
   27.30 +  "MVT_LEMMA" > "HOL4Real.lim.MVT_LEMMA"
   27.31 +  "MVT" > "HOL4Real.lim.MVT"
   27.32 +  "LIM_X" > "HOL4Real.lim.LIM_X"
   27.33 +  "LIM_UNIQ" > "HOL4Real.lim.LIM_UNIQ"
   27.34 +  "LIM_TRANSFORM" > "HOL4Real.lim.LIM_TRANSFORM"
   27.35 +  "LIM_SUB" > "HOL4Real.lim.LIM_SUB"
   27.36 +  "LIM_NULL" > "HOL4Real.lim.LIM_NULL"
   27.37 +  "LIM_NEG" > "HOL4Real.lim.LIM_NEG"
   27.38 +  "LIM_MUL" > "HOL4Real.lim.LIM_MUL"
   27.39 +  "LIM_INV" > "HOL4Real.lim.LIM_INV"
   27.40 +  "LIM_EQUAL" > "HOL4Real.lim.LIM_EQUAL"
   27.41 +  "LIM_DIV" > "HOL4Real.lim.LIM_DIV"
   27.42 +  "LIM_CONST" > "HOL4Real.lim.LIM_CONST"
   27.43 +  "LIM_ADD" > "HOL4Real.lim.LIM_ADD"
   27.44 +  "LIM" > "HOL4Real.lim.LIM"
   27.45 +  "IVT2" > "HOL4Real.lim.IVT2"
   27.46 +  "IVT" > "HOL4Real.lim.IVT"
   27.47 +  "INTERVAL_LEMMA" > "HOL4Real.lim.INTERVAL_LEMMA"
   27.48 +  "INTERVAL_CLEMMA" > "HOL4Real.lim.INTERVAL_CLEMMA"
   27.49 +  "INTERVAL_ABS" > "HOL4Real.lim.INTERVAL_ABS"
   27.50 +  "DIFF_XM1" > "HOL4Real.lim.DIFF_XM1"
   27.51 +  "DIFF_X" > "HOL4Real.lim.DIFF_X"
   27.52 +  "DIFF_UNIQ" > "HOL4Real.lim.DIFF_UNIQ"
   27.53 +  "DIFF_SUM" > "HOL4Real.lim.DIFF_SUM"
   27.54 +  "DIFF_SUB" > "HOL4Real.lim.DIFF_SUB"
   27.55 +  "DIFF_POW" > "HOL4Real.lim.DIFF_POW"
   27.56 +  "DIFF_NEG" > "HOL4Real.lim.DIFF_NEG"
   27.57 +  "DIFF_MUL" > "HOL4Real.lim.DIFF_MUL"
   27.58 +  "DIFF_LMIN" > "HOL4Real.lim.DIFF_LMIN"
   27.59 +  "DIFF_LMAX" > "HOL4Real.lim.DIFF_LMAX"
   27.60 +  "DIFF_LINC" > "HOL4Real.lim.DIFF_LINC"
   27.61 +  "DIFF_LDEC" > "HOL4Real.lim.DIFF_LDEC"
   27.62 +  "DIFF_LCONST" > "HOL4Real.lim.DIFF_LCONST"
   27.63 +  "DIFF_ISCONST_END" > "HOL4Real.lim.DIFF_ISCONST_END"
   27.64 +  "DIFF_ISCONST_ALL" > "HOL4Real.lim.DIFF_ISCONST_ALL"
   27.65 +  "DIFF_ISCONST" > "HOL4Real.lim.DIFF_ISCONST"
   27.66 +  "DIFF_INVERSE_OPEN" > "HOL4Real.lim.DIFF_INVERSE_OPEN"
   27.67 +  "DIFF_INVERSE_LT" > "HOL4Real.lim.DIFF_INVERSE_LT"
   27.68 +  "DIFF_INVERSE" > "HOL4Real.lim.DIFF_INVERSE"
   27.69 +  "DIFF_INV" > "HOL4Real.lim.DIFF_INV"
   27.70 +  "DIFF_DIV" > "HOL4Real.lim.DIFF_DIV"
   27.71 +  "DIFF_CONT" > "HOL4Real.lim.DIFF_CONT"
   27.72 +  "DIFF_CONST" > "HOL4Real.lim.DIFF_CONST"
   27.73 +  "DIFF_CMUL" > "HOL4Real.lim.DIFF_CMUL"
   27.74 +  "DIFF_CHAIN" > "HOL4Real.lim.DIFF_CHAIN"
   27.75 +  "DIFF_CARAT" > "HOL4Real.lim.DIFF_CARAT"
   27.76 +  "DIFF_ADD" > "HOL4Real.lim.DIFF_ADD"
   27.77 +  "CONT_SUB" > "HOL4Real.lim.CONT_SUB"
   27.78 +  "CONT_NEG" > "HOL4Real.lim.CONT_NEG"
   27.79 +  "CONT_MUL" > "HOL4Real.lim.CONT_MUL"
   27.80 +  "CONT_INVERSE" > "HOL4Real.lim.CONT_INVERSE"
   27.81 +  "CONT_INV" > "HOL4Real.lim.CONT_INV"
   27.82 +  "CONT_INJ_RANGE" > "HOL4Real.lim.CONT_INJ_RANGE"
   27.83 +  "CONT_INJ_LEMMA2" > "HOL4Real.lim.CONT_INJ_LEMMA2"
   27.84 +  "CONT_INJ_LEMMA" > "HOL4Real.lim.CONT_INJ_LEMMA"
   27.85 +  "CONT_HASSUP" > "HOL4Real.lim.CONT_HASSUP"
   27.86 +  "CONT_DIV" > "HOL4Real.lim.CONT_DIV"
   27.87 +  "CONT_CONST" > "HOL4Real.lim.CONT_CONST"
   27.88 +  "CONT_COMPOSE" > "HOL4Real.lim.CONT_COMPOSE"
   27.89 +  "CONT_BOUNDED" > "HOL4Real.lim.CONT_BOUNDED"
   27.90 +  "CONT_ATTAINS_ALL" > "HOL4Real.lim.CONT_ATTAINS_ALL"
   27.91 +  "CONT_ATTAINS2" > "HOL4Real.lim.CONT_ATTAINS2"
   27.92 +  "CONT_ATTAINS" > "HOL4Real.lim.CONT_ATTAINS"
   27.93 +  "CONT_ADD" > "HOL4Real.lim.CONT_ADD"
   27.94 +  "CONTL_LIM" > "HOL4Real.lim.CONTL_LIM"
   27.95 +
   27.96 +end
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/src/HOL/Import/HOL/list.imp	Fri Apr 02 17:37:45 2004 +0200
    28.3 @@ -0,0 +1,135 @@
    28.4 +import
    28.5 +
    28.6 +import_segment "hol4"
    28.7 +
    28.8 +def_maps
    28.9 +  "EL" > "EL_def"
   28.10 +
   28.11 +type_maps
   28.12 +  "list" > "List.list"
   28.13 +
   28.14 +const_maps
   28.15 +  "list_size" > "HOL4Compat.list_size"
   28.16 +  "list_case" > "List.list.list_case"
   28.17 +  "ZIP" > "HOL4Compat.ZIP"
   28.18 +  "UNZIP" > "HOL4Compat.unzip"
   28.19 +  "TL" > "List.tl"
   28.20 +  "SUM" > "HOL4Compat.sum"
   28.21 +  "REVERSE" > "List.rev"
   28.22 +  "REPLICATE" > "List.replicate"
   28.23 +  "NULL" > "List.null"
   28.24 +  "NIL" > "List.list.Nil"
   28.25 +  "MEM" > "List.op mem"
   28.26 +  "MAP2" > "HOL4Compat.map2"
   28.27 +  "MAP" > "List.map"
   28.28 +  "LENGTH" > "Nat.size"
   28.29 +  "LAST" > "List.last"
   28.30 +  "HD" > "List.hd"
   28.31 +  "FRONT" > "List.butlast"
   28.32 +  "FOLDR" > "HOL4Compat.FOLDR"
   28.33 +  "FOLDL" > "List.foldl"
   28.34 +  "FLAT" > "List.concat"
   28.35 +  "FILTER" > "List.filter"
   28.36 +  "EXISTS" > "HOL4Compat.list_exists"
   28.37 +  "EVERY" > "List.list_all"
   28.38 +  "CONS" > "List.list.Cons"
   28.39 +  "APPEND" > "List.op @"
   28.40 +
   28.41 +thm_maps
   28.42 +  "list_size_def" > "HOL4Compat.list_size_def"
   28.43 +  "list_size_cong" > "HOL4Base.list.list_size_cong"
   28.44 +  "list_nchotomy" > "HOL4Compat.list_CASES"
   28.45 +  "list_induction" > "HOL4Compat.unzip.induct"
   28.46 +  "list_distinct" > "List.list.simps_1"
   28.47 +  "list_case_def" > "HOL4Compat.list_case_def"
   28.48 +  "list_case_cong" > "HOL4Compat.list_case_cong"
   28.49 +  "list_case_compute" > "HOL4Base.list.list_case_compute"
   28.50 +  "list_INDUCT" > "HOL4Compat.unzip.induct"
   28.51 +  "list_CASES" > "HOL4Compat.list_CASES"
   28.52 +  "list_Axiom_old" > "HOL4Compat.list_Axiom_old"
   28.53 +  "list_Axiom" > "HOL4Compat.list_Axiom"
   28.54 +  "list_11" > "List.list.simps_3"
   28.55 +  "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
   28.56 +  "ZIP_MAP" > "HOL4Base.list.ZIP_MAP"
   28.57 +  "ZIP" > "HOL4Compat.ZIP"
   28.58 +  "WF_LIST_PRED" > "HOL4Base.list.WF_LIST_PRED"
   28.59 +  "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
   28.60 +  "UNZIP" > "HOL4Compat.UNZIP"
   28.61 +  "TL" > "List.tl.simps_2"
   28.62 +  "SUM" > "HOL4Compat.SUM"
   28.63 +  "REVERSE_REVERSE" > "List.rev_rev_ident"
   28.64 +  "REVERSE_DEF" > "HOL4Compat.REVERSE"
   28.65 +  "REVERSE_APPEND" > "List.rev_append"
   28.66 +  "NULL_DEF" > "HOL4Compat.NULL_DEF"
   28.67 +  "NULL" > "HOL4Base.list.NULL"
   28.68 +  "NOT_NIL_CONS" > "List.list.simps_1"
   28.69 +  "NOT_EXISTS" > "HOL4Base.list.NOT_EXISTS"
   28.70 +  "NOT_EVERY" > "HOL4Base.list.NOT_EVERY"
   28.71 +  "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
   28.72 +  "NOT_CONS_NIL" > "List.list.simps_2"
   28.73 +  "MEM_ZIP" > "HOL4Base.list.MEM_ZIP"
   28.74 +  "MEM_MAP" > "HOL4Base.list.MEM_MAP"
   28.75 +  "MEM_EL" > "HOL4Base.list.MEM_EL"
   28.76 +  "MEM_APPEND" > "HOL4Base.list.MEM_APPEND"
   28.77 +  "MEM" > "HOL4Compat.MEM"
   28.78 +  "MAP_EQ_NIL" > "HOL4Base.list.MAP_EQ_NIL"
   28.79 +  "MAP_CONG" > "HOL4Base.list.MAP_CONG"
   28.80 +  "MAP_APPEND" > "List.map_append"
   28.81 +  "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
   28.82 +  "MAP2" > "HOL4Compat.MAP2"
   28.83 +  "MAP" > "HOL4Compat.MAP"
   28.84 +  "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
   28.85 +  "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
   28.86 +  "LENGTH_UNZIP" > "HOL4Base.list.LENGTH_UNZIP"
   28.87 +  "LENGTH_NIL" > "List.length_0_conv"
   28.88 +  "LENGTH_MAP" > "List.length_map"
   28.89 +  "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
   28.90 +  "LENGTH_EQ_CONS" > "HOL4Base.list.LENGTH_EQ_CONS"
   28.91 +  "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
   28.92 +  "LENGTH_APPEND" > "List.length_append"
   28.93 +  "LENGTH" > "HOL4Compat.LENGTH"
   28.94 +  "LAST_DEF" > "List.last.simps"
   28.95 +  "LAST_CONS" > "HOL4Base.list.LAST_CONS"
   28.96 +  "HD" > "List.hd.simps"
   28.97 +  "FRONT_DEF" > "List.butlast.simps_2"
   28.98 +  "FRONT_CONS" > "HOL4Base.list.FRONT_CONS"
   28.99 +  "FOLDR_CONG" > "HOL4Base.list.FOLDR_CONG"
  28.100 +  "FOLDR" > "HOL4Compat.FOLDR"
  28.101 +  "FOLDL_CONG" > "HOL4Base.list.FOLDL_CONG"
  28.102 +  "FOLDL" > "HOL4Compat.FOLDL"
  28.103 +  "FLAT" > "HOL4Compat.FLAT"
  28.104 +  "FILTER" > "HOL4Compat.FILTER"
  28.105 +  "EXISTS_MEM" > "HOL4Base.list.EXISTS_MEM"
  28.106 +  "EXISTS_DEF" > "HOL4Compat.list_exists_DEF"
  28.107 +  "EXISTS_CONG" > "HOL4Base.list.EXISTS_CONG"
  28.108 +  "EXISTS_APPEND" > "HOL4Base.list.EXISTS_APPEND"
  28.109 +  "EVERY_MONOTONIC" > "HOL4Base.list.EVERY_MONOTONIC"
  28.110 +  "EVERY_MEM" > "HOL4Base.list.EVERY_MEM"
  28.111 +  "EVERY_EL" > "HOL4Base.list.EVERY_EL"
  28.112 +  "EVERY_DEF" > "HOL4Compat.EVERY_DEF"
  28.113 +  "EVERY_CONJ" > "HOL4Base.list.EVERY_CONJ"
  28.114 +  "EVERY_CONG" > "HOL4Base.list.EVERY_CONG"
  28.115 +  "EVERY_APPEND" > "List.list_all_append"
  28.116 +  "EQ_LIST" > "HOL4Base.list.EQ_LIST"
  28.117 +  "EL_compute" > "HOL4Base.list.EL_compute"
  28.118 +  "EL_ZIP" > "HOL4Base.list.EL_ZIP"
  28.119 +  "EL" > "HOL4Base.list.EL"
  28.120 +  "CONS_ACYCLIC" > "HOL4Base.list.CONS_ACYCLIC"
  28.121 +  "CONS_11" > "List.list.simps_3"
  28.122 +  "CONS" > "HOL4Base.list.CONS"
  28.123 +  "APPEND_eq_NIL" > "HOL4Base.list.APPEND_eq_NIL"
  28.124 +  "APPEND_NIL" > "List.append_Nil2"
  28.125 +  "APPEND_FRONT_LAST" > "List.append_butlast_last_id"
  28.126 +  "APPEND_ASSOC" > "List.append_assoc"
  28.127 +  "APPEND_11" > "HOL4Base.list.APPEND_11"
  28.128 +  "APPEND" > "HOL4Compat.APPEND"
  28.129 +
  28.130 +ignore_thms
  28.131 +  "list_repfns"
  28.132 +  "list_TY_DEF"
  28.133 +  "list1_def"
  28.134 +  "list0_def"
  28.135 +  "NIL"
  28.136 +  "CONS_def"
  28.137 +
  28.138 +end
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/src/HOL/Import/HOL/marker.imp	Fri Apr 02 17:37:45 2004 +0200
    29.3 @@ -0,0 +1,19 @@
    29.4 +import
    29.5 +
    29.6 +import_segment "hol4"
    29.7 +
    29.8 +def_maps
    29.9 +  "stmarker" > "stmarker_primdef"
   29.10 +
   29.11 +const_maps
   29.12 +  "stmarker" > "HOL4Base.marker.stmarker"
   29.13 +
   29.14 +thm_maps
   29.15 +  "stmarker_primdef" > "HOL4Base.marker.stmarker_primdef"
   29.16 +  "stmarker_def" > "HOL4Base.marker.stmarker_def"
   29.17 +  "move_right_disj" > "HOL4Base.marker.move_right_disj"
   29.18 +  "move_right_conj" > "HOL4Base.marker.move_right_conj"
   29.19 +  "move_left_disj" > "HOL4Base.marker.move_left_disj"
   29.20 +  "move_left_conj" > "HOL4Base.marker.move_left_conj"
   29.21 +
   29.22 +end
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/src/HOL/Import/HOL/nets.imp	Fri Apr 02 17:37:45 2004 +0200
    30.3 @@ -0,0 +1,51 @@
    30.4 +import
    30.5 +
    30.6 +import_segment "hol4"
    30.7 +
    30.8 +def_maps
    30.9 +  "tendsto" > "tendsto_def"
   30.10 +  "tends" > "tends_def"
   30.11 +  "dorder" > "dorder_def"
   30.12 +  "bounded" > "bounded_def"
   30.13 +
   30.14 +const_maps
   30.15 +  "tendsto" > "HOL4Real.nets.tendsto"
   30.16 +  "tends" > "HOL4Real.nets.tends"
   30.17 +  "dorder" > "HOL4Real.nets.dorder"
   30.18 +  "bounded" > "HOL4Real.nets.bounded"
   30.19 +
   30.20 +thm_maps
   30.21 +  "tendsto_def" > "HOL4Real.nets.tendsto_def"
   30.22 +  "tendsto" > "HOL4Real.nets.tendsto"
   30.23 +  "tends_def" > "HOL4Real.nets.tends_def"
   30.24 +  "tends" > "HOL4Real.nets.tends"
   30.25 +  "dorder_def" > "HOL4Real.nets.dorder_def"
   30.26 +  "dorder" > "HOL4Real.nets.dorder"
   30.27 +  "bounded_def" > "HOL4Real.nets.bounded_def"
   30.28 +  "bounded" > "HOL4Real.nets.bounded"
   30.29 +  "SEQ_TENDS" > "HOL4Real.nets.SEQ_TENDS"
   30.30 +  "NET_SUB" > "HOL4Real.nets.NET_SUB"
   30.31 +  "NET_NULL_MUL" > "HOL4Real.nets.NET_NULL_MUL"
   30.32 +  "NET_NULL_CMUL" > "HOL4Real.nets.NET_NULL_CMUL"
   30.33 +  "NET_NULL_ADD" > "HOL4Real.nets.NET_NULL_ADD"
   30.34 +  "NET_NULL" > "HOL4Real.nets.NET_NULL"
   30.35 +  "NET_NEG" > "HOL4Real.nets.NET_NEG"
   30.36 +  "NET_MUL" > "HOL4Real.nets.NET_MUL"
   30.37 +  "NET_LE" > "HOL4Real.nets.NET_LE"
   30.38 +  "NET_INV" > "HOL4Real.nets.NET_INV"
   30.39 +  "NET_DIV" > "HOL4Real.nets.NET_DIV"
   30.40 +  "NET_CONV_NZ" > "HOL4Real.nets.NET_CONV_NZ"
   30.41 +  "NET_CONV_IBOUNDED" > "HOL4Real.nets.NET_CONV_IBOUNDED"
   30.42 +  "NET_CONV_BOUNDED" > "HOL4Real.nets.NET_CONV_BOUNDED"
   30.43 +  "NET_ADD" > "HOL4Real.nets.NET_ADD"
   30.44 +  "NET_ABS" > "HOL4Real.nets.NET_ABS"
   30.45 +  "MTOP_TENDS_UNIQ" > "HOL4Real.nets.MTOP_TENDS_UNIQ"
   30.46 +  "MTOP_TENDS" > "HOL4Real.nets.MTOP_TENDS"
   30.47 +  "MR1_BOUNDED" > "HOL4Real.nets.MR1_BOUNDED"
   30.48 +  "LIM_TENDS2" > "HOL4Real.nets.LIM_TENDS2"
   30.49 +  "LIM_TENDS" > "HOL4Real.nets.LIM_TENDS"
   30.50 +  "DORDER_TENDSTO" > "HOL4Real.nets.DORDER_TENDSTO"
   30.51 +  "DORDER_NGE" > "HOL4Real.nets.DORDER_NGE"
   30.52 +  "DORDER_LEMMA" > "HOL4Real.nets.DORDER_LEMMA"
   30.53 +
   30.54 +end
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/src/HOL/Import/HOL/num.imp	Fri Apr 02 17:37:45 2004 +0200
    31.3 @@ -0,0 +1,26 @@
    31.4 +import
    31.5 +
    31.6 +import_segment "hol4"
    31.7 +
    31.8 +type_maps
    31.9 +  "num" > "nat"
   31.10 +
   31.11 +const_maps
   31.12 +  "SUC" > "Suc"
   31.13 +  "0" > "0" :: "nat"
   31.14 +
   31.15 +thm_maps
   31.16 +  "NOT_SUC" > "Nat.nat.simps_1"
   31.17 +  "INV_SUC" > "Nat.Suc_inject"
   31.18 +  "INDUCTION" > "List.lexn.induct"
   31.19 +
   31.20 +ignore_thms
   31.21 +  "num_TY_DEF"
   31.22 +  "num_ISO_DEF"
   31.23 +  "ZERO_REP_DEF"
   31.24 +  "ZERO_DEF"
   31.25 +  "SUC_REP_DEF"
   31.26 +  "SUC_DEF"
   31.27 +  "IS_NUM_REP"
   31.28 +
   31.29 +end
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/src/HOL/Import/HOL/numeral.imp	Fri Apr 02 17:37:45 2004 +0200
    32.3 @@ -0,0 +1,49 @@
    32.4 +import
    32.5 +
    32.6 +import_segment "hol4"
    32.7 +
    32.8 +def_maps
    32.9 +  "iiSUC" > "iiSUC_def"
   32.10 +  "iZ" > "iZ_def"
   32.11 +  "iSUB" > "iSUB_def"
   32.12 +  "iSQR" > "iSQR_def"
   32.13 +  "iDUB" > "iDUB_def"
   32.14 +  "iBIT_cases" > "iBIT_cases_def"
   32.15 +
   32.16 +const_maps
   32.17 +  "iiSUC" > "HOL4Base.numeral.iiSUC"
   32.18 +  "iZ" > "HOL4Base.numeral.iZ"
   32.19 +  "iSQR" > "HOL4Base.numeral.iSQR"
   32.20 +  "iDUB" > "HOL4Base.numeral.iDUB"
   32.21 +
   32.22 +thm_maps
   32.23 +  "numeral_suc" > "HOL4Base.numeral.numeral_suc"
   32.24 +  "numeral_sub" > "HOL4Base.numeral.numeral_sub"
   32.25 +  "numeral_pre" > "HOL4Base.numeral.numeral_pre"
   32.26 +  "numeral_mult" > "HOL4Base.numeral.numeral_mult"
   32.27 +  "numeral_lte" > "HOL4Base.numeral.numeral_lte"
   32.28 +  "numeral_lt" > "HOL4Base.numeral.numeral_lt"
   32.29 +  "numeral_iisuc" > "HOL4Base.numeral.numeral_iisuc"
   32.30 +  "numeral_funpow" > "HOL4Base.numeral.numeral_funpow"
   32.31 +  "numeral_fact" > "HOL4Base.numeral.numeral_fact"
   32.32 +  "numeral_exp" > "HOL4Base.numeral.numeral_exp"
   32.33 +  "numeral_evenodd" > "HOL4Base.numeral.numeral_evenodd"
   32.34 +  "numeral_eq" > "HOL4Base.numeral.numeral_eq"
   32.35 +  "numeral_distrib" > "HOL4Base.numeral.numeral_distrib"
   32.36 +  "numeral_add" > "HOL4Base.numeral.numeral_add"
   32.37 +  "iiSUC_def" > "HOL4Base.numeral.iiSUC_def"
   32.38 +  "iiSUC" > "HOL4Base.numeral.iiSUC"
   32.39 +  "iZ_def" > "HOL4Base.numeral.iZ_def"
   32.40 +  "iZ" > "HOL4Base.numeral.iZ"
   32.41 +  "iSUB_THM" > "HOL4Base.numeral.iSUB_THM"
   32.42 +  "iSUB_DEF" > "HOL4Base.numeral.iSUB_DEF"
   32.43 +  "iSQR_def" > "HOL4Base.numeral.iSQR_def"
   32.44 +  "iSQR" > "HOL4Base.numeral.iSQR"
   32.45 +  "iDUB_removal" > "HOL4Base.numeral.iDUB_removal"
   32.46 +  "iDUB_def" > "HOL4Base.numeral.iDUB_def"
   32.47 +  "iDUB" > "HOL4Base.numeral.iDUB"
   32.48 +  "iBIT_cases" > "HOL4Base.numeral.iBIT_cases"
   32.49 +  "bit_initiality" > "HOL4Base.numeral.bit_initiality"
   32.50 +  "bit_induction" > "HOL4Base.numeral.bit_induction"
   32.51 +
   32.52 +end
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/src/HOL/Import/HOL/one.imp	Fri Apr 02 17:37:45 2004 +0200
    33.3 @@ -0,0 +1,20 @@
    33.4 +import
    33.5 +
    33.6 +import_segment "hol4"
    33.7 +
    33.8 +type_maps
    33.9 +  "one" > "Product_Type.unit"
   33.10 +
   33.11 +const_maps
   33.12 +  "one" > "Product_Type.Unity"
   33.13 +
   33.14 +thm_maps
   33.15 +  "one" > "HOL4Compat.one"
   33.16 +
   33.17 +ignore_thms
   33.18 +  "one_axiom"
   33.19 +  "one_TY_DEF"
   33.20 +  "one_DEF"
   33.21 +  "one_Axiom"
   33.22 +
   33.23 +end
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/src/HOL/Import/HOL/operator.imp	Fri Apr 02 17:37:45 2004 +0200
    34.3 @@ -0,0 +1,40 @@
    34.4 +import
    34.5 +
    34.6 +import_segment "hol4"
    34.7 +
    34.8 +def_maps
    34.9 +  "RIGHT_ID" > "RIGHT_ID_def"
   34.10 +  "MONOID" > "MONOID_def"
   34.11 +  "LEFT_ID" > "LEFT_ID_def"
   34.12 +  "FCOMM" > "FCOMM_def"
   34.13 +  "COMM" > "COMM_def"
   34.14 +  "ASSOC" > "ASSOC_def"
   34.15 +
   34.16 +const_maps
   34.17 +  "RIGHT_ID" > "HOL4Base.operator.RIGHT_ID"
   34.18 +  "MONOID" > "HOL4Base.operator.MONOID"
   34.19 +  "LEFT_ID" > "HOL4Base.operator.LEFT_ID"
   34.20 +  "FCOMM" > "HOL4Base.operator.FCOMM"
   34.21 +  "COMM" > "HOL4Base.operator.COMM"
   34.22 +  "ASSOC" > "HOL4Base.operator.ASSOC"
   34.23 +
   34.24 +thm_maps
   34.25 +  "RIGHT_ID_def" > "HOL4Base.operator.RIGHT_ID_def"
   34.26 +  "RIGHT_ID_DEF" > "HOL4Base.operator.RIGHT_ID_DEF"
   34.27 +  "MONOID_def" > "HOL4Base.operator.MONOID_def"
   34.28 +  "MONOID_DISJ_F" > "HOL4Base.operator.MONOID_DISJ_F"
   34.29 +  "MONOID_DEF" > "HOL4Base.operator.MONOID_DEF"
   34.30 +  "MONOID_CONJ_T" > "HOL4Base.operator.MONOID_CONJ_T"
   34.31 +  "LEFT_ID_def" > "HOL4Base.operator.LEFT_ID_def"
   34.32 +  "LEFT_ID_DEF" > "HOL4Base.operator.LEFT_ID_DEF"
   34.33 +  "FCOMM_def" > "HOL4Base.operator.FCOMM_def"
   34.34 +  "FCOMM_DEF" > "HOL4Base.operator.FCOMM_DEF"
   34.35 +  "FCOMM_ASSOC" > "HOL4Base.operator.FCOMM_ASSOC"
   34.36 +  "COMM_def" > "HOL4Base.operator.COMM_def"
   34.37 +  "COMM_DEF" > "HOL4Base.operator.COMM_DEF"
   34.38 +  "ASSOC_def" > "HOL4Base.operator.ASSOC_def"
   34.39 +  "ASSOC_DISJ" > "HOL4Base.operator.ASSOC_DISJ"
   34.40 +  "ASSOC_DEF" > "HOL4Base.operator.ASSOC_DEF"
   34.41 +  "ASSOC_CONJ" > "HOL4Base.operator.ASSOC_CONJ"
   34.42 +
   34.43 +end
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/src/HOL/Import/HOL/option.imp	Fri Apr 02 17:37:45 2004 +0200
    35.3 @@ -0,0 +1,45 @@
    35.4 +import
    35.5 +
    35.6 +import_segment "hol4"
    35.7 +
    35.8 +type_maps
    35.9 +  "option" > "Datatype.option"
   35.10 +
   35.11 +const_maps
   35.12 +  "option_case" > "Datatype.option.option_case"
   35.13 +  "THE" > "Datatype.the"
   35.14 +  "SOME" > "Datatype.option.Some"
   35.15 +  "OPTION_MAP" > "Datatype.option_map"
   35.16 +  "OPTION_JOIN" > "HOL4Compat.OPTION_JOIN"
   35.17 +  "NONE" > "Datatype.option.None"
   35.18 +  "IS_SOME" > "HOL4Compat.IS_SOME"
   35.19 +  "IS_NONE" > "HOL4Compat.IS_NONE"
   35.20 +
   35.21 +thm_maps
   35.22 +  "option_nchotomy" > "Datatype.option.nchotomy"
   35.23 +  "option_induction" > "HOL4Compat.OPTION_JOIN.induct"
   35.24 +  "option_case_def" > "HOL4Compat.option_case_def"
   35.25 +  "option_case_cong" > "HOL4Base.option.option_case_cong"
   35.26 +  "option_case_compute" > "HOL4Base.option.option_case_compute"
   35.27 +  "option_CLAUSES" > "HOL4Base.option.option_CLAUSES"
   35.28 +  "THE_DEF" > "Datatype.the.simps"
   35.29 +  "SOME_11" > "Datatype.option.simps_3"
   35.30 +  "OPTION_MAP_EQ_SOME" > "HOL4Base.option.OPTION_MAP_EQ_SOME"
   35.31 +  "OPTION_MAP_EQ_NONE" > "Datatype.option_map_is_None"
   35.32 +  "OPTION_MAP_DEF" > "HOL4Compat.OPTION_MAP_DEF"
   35.33 +  "OPTION_JOIN_EQ_SOME" > "HOL4Base.option.OPTION_JOIN_EQ_SOME"
   35.34 +  "OPTION_JOIN_DEF" > "HOL4Compat.OPTION_JOIN_DEF"
   35.35 +  "NOT_SOME_NONE" > "Datatype.option.simps_2"
   35.36 +  "NOT_NONE_SOME" > "Datatype.option.simps_1"
   35.37 +  "IS_SOME_DEF" > "HOL4Compat.IS_SOME_DEF"
   35.38 +  "IS_NONE_DEF" > "HOL4Compat.IS_NONE_DEF"
   35.39 +
   35.40 +ignore_thms
   35.41 +  "option_axiom"
   35.42 +  "option_TY_DEF"
   35.43 +  "option_REP_ABS_DEF"
   35.44 +  "option_Axiom"
   35.45 +  "SOME_DEF"
   35.46 +  "NONE_DEF"
   35.47 +
   35.48 +end
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/src/HOL/Import/HOL/pair.imp	Fri Apr 02 17:37:45 2004 +0200
    36.3 @@ -0,0 +1,70 @@
    36.4 +import
    36.5 +
    36.6 +import_segment "hol4"
    36.7 +
    36.8 +def_maps
    36.9 +  "RPROD" > "RPROD_def"
   36.10 +  "LEX" > "LEX_def"
   36.11 +
   36.12 +type_maps
   36.13 +  "prod" > "*"
   36.14 +
   36.15 +const_maps
   36.16 +  "pair_case" > "split"
   36.17 +  "UNCURRY" > "split"
   36.18 +  "SND" > "snd"
   36.19 +  "RPROD" > "HOL4Base.pair.RPROD"
   36.20 +  "LEX" > "HOL4Base.pair.LEX"
   36.21 +  "FST" > "fst"
   36.22 +  "CURRY" > "curry"
   36.23 +  "," > "Pair"
   36.24 +  "##" > "prod_fun"
   36.25 +
   36.26 +thm_maps
   36.27 +  "pair_induction" > "Product_Type.prod_induct"
   36.28 +  "pair_case_thm" > "Product_Type.split"
   36.29 +  "pair_case_def" > "HOL4Compat.pair_case_def"
   36.30 +  "pair_case_cong" > "HOL4Base.pair.pair_case_cong"
   36.31 +  "pair_Axiom" > "HOL4Base.pair.pair_Axiom"
   36.32 +  "WF_RPROD" > "HOL4Base.pair.WF_RPROD"
   36.33 +  "WF_LEX" > "HOL4Base.pair.WF_LEX"
   36.34 +  "UNCURRY_VAR" > "Product_Type.split_beta"
   36.35 +  "UNCURRY_ONE_ONE_THM" > "HOL4Base.pair.UNCURRY_ONE_ONE_THM"
   36.36 +  "UNCURRY_DEF" > "Product_Type.split"
   36.37 +  "UNCURRY_CURRY_THM" > "Product_Type.split_curry"
   36.38 +  "UNCURRY_CONG" > "HOL4Base.pair.UNCURRY_CONG"
   36.39 +  "UNCURRY" > "Product_Type.split_beta"
   36.40 +  "SND" > "Product_Type.snd_conv"
   36.41 +  "RPROD_def" > "HOL4Base.pair.RPROD_def"
   36.42 +  "RPROD_DEF" > "HOL4Base.pair.RPROD_DEF"
   36.43 +  "PFORALL_THM" > "HOL4Base.pair.PFORALL_THM"
   36.44 +  "PEXISTS_THM" > "HOL4Base.pair.PEXISTS_THM"
   36.45 +  "PAIR_MAP_THM" > "Product_Type.prod_fun"
   36.46 +  "PAIR_MAP" > "HOL4Compat.PAIR_MAP"
   36.47 +  "PAIR_EQ" > "Product_Type.Pair_eq"
   36.48 +  "PAIR" > "HOL4Compat.PAIR"
   36.49 +  "LEX_def" > "HOL4Base.pair.LEX_def"
   36.50 +  "LEX_DEF" > "HOL4Base.pair.LEX_DEF"
   36.51 +  "LET2_RATOR" > "HOL4Base.pair.LET2_RATOR"
   36.52 +  "LET2_RAND" > "HOL4Base.pair.LET2_RAND"
   36.53 +  "LAMBDA_PROD" > "Product_Type.split_eta"
   36.54 +  "FST" > "Product_Type.fst_conv"
   36.55 +  "FORALL_PROD" > "Product_Type.split_paired_All"
   36.56 +  "EXISTS_PROD" > "Product_Type.split_paired_Ex"
   36.57 +  "ELIM_UNCURRY" > "Product_Type.split_beta"
   36.58 +  "ELIM_PFORALL" > "HOL4Base.pair.ELIM_PFORALL"
   36.59 +  "ELIM_PEXISTS" > "HOL4Base.pair.ELIM_PEXISTS"
   36.60 +  "CURRY_UNCURRY_THM" > "Product_Type.curry_split"
   36.61 +  "CURRY_ONE_ONE_THM" > "HOL4Base.pair.CURRY_ONE_ONE_THM"
   36.62 +  "CURRY_DEF" > "Product_Type.curry_conv"
   36.63 +  "CLOSED_PAIR_EQ" > "Product_Type.Pair_eq"
   36.64 +  "ABS_PAIR_THM" > "Product_Type.surj_pair"
   36.65 +
   36.66 +ignore_thms
   36.67 +  "prod_TY_DEF"
   36.68 +  "MK_PAIR_DEF"
   36.69 +  "IS_PAIR_DEF"
   36.70 +  "COMMA_DEF"
   36.71 +  "ABS_REP_prod"
   36.72 +
   36.73 +end
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/src/HOL/Import/HOL/poly.imp	Fri Apr 02 17:37:45 2004 +0200
    37.3 @@ -0,0 +1,128 @@
    37.4 +import
    37.5 +
    37.6 +import_segment "hol4"
    37.7 +
    37.8 +def_maps
    37.9 +  "rsquarefree" > "rsquarefree_def"
   37.10 +  "poly_order" > "poly_order_def"
   37.11 +  "poly_neg" > "poly_neg_primdef"
   37.12 +  "poly_mul" > "poly_mul_primdef"
   37.13 +  "poly_exp" > "poly_exp_primdef"
   37.14 +  "poly_divides" > "poly_divides_def"
   37.15 +  "poly_diff_aux" > "poly_diff_aux_primdef"
   37.16 +  "poly_add" > "poly_add_primdef"
   37.17 +  "poly" > "poly_primdef"
   37.18 +  "normalize" > "normalize_def"
   37.19 +  "diff" > "diff_def"
   37.20 +  "degree" > "degree_def"
   37.21 +  "##" > "##_def"
   37.22 +
   37.23 +const_maps
   37.24 +  "rsquarefree" > "HOL4Real.poly.rsquarefree"
   37.25 +  "poly_order" > "HOL4Real.poly.poly_order"
   37.26 +  "poly_neg" > "HOL4Real.poly.poly_neg"
   37.27 +  "poly_divides" > "HOL4Real.poly.poly_divides"
   37.28 +  "diff" > "HOL4Real.poly.diff"
   37.29 +  "degree" > "HOL4Real.poly.degree"
   37.30 +
   37.31 +thm_maps
   37.32 +  "rsquarefree_def" > "HOL4Real.poly.rsquarefree_def"
   37.33 +  "rsquarefree" > "HOL4Real.poly.rsquarefree"
   37.34 +  "poly_order_def" > "HOL4Real.poly.poly_order_def"
   37.35 +  "poly_order" > "HOL4Real.poly.poly_order"
   37.36 +  "poly_neg_primdef" > "HOL4Real.poly.poly_neg_primdef"
   37.37 +  "poly_neg_def" > "HOL4Real.poly.poly_neg_def"
   37.38 +  "poly_mul_def" > "HOL4Real.poly.poly_mul_def"
   37.39 +  "poly_exp_def" > "HOL4Real.poly.poly_exp_def"
   37.40 +  "poly_divides_def" > "HOL4Real.poly.poly_divides_def"
   37.41 +  "poly_divides" > "HOL4Real.poly.poly_divides"
   37.42 +  "poly_diff_def" > "HOL4Real.poly.poly_diff_def"
   37.43 +  "poly_diff_aux_def" > "HOL4Real.poly.poly_diff_aux_def"
   37.44 +  "poly_def" > "HOL4Real.poly.poly_def"
   37.45 +  "poly_cmul_def" > "HOL4Real.poly.poly_cmul_def"
   37.46 +  "poly_add_def" > "HOL4Real.poly.poly_add_def"
   37.47 +  "normalize" > "HOL4Real.poly.normalize"
   37.48 +  "diff_def" > "HOL4Real.poly.diff_def"
   37.49 +  "degree_def" > "HOL4Real.poly.degree_def"
   37.50 +  "degree" > "HOL4Real.poly.degree"
   37.51 +  "RSQUAREFREE_ROOTS" > "HOL4Real.poly.RSQUAREFREE_ROOTS"
   37.52 +  "RSQUAREFREE_DECOMP" > "HOL4Real.poly.RSQUAREFREE_DECOMP"
   37.53 +  "POLY_ZERO_LEMMA" > "HOL4Real.poly.POLY_ZERO_LEMMA"
   37.54 +  "POLY_ZERO" > "HOL4Real.poly.POLY_ZERO"
   37.55 +  "POLY_SQUAREFREE_DECOMP_ORDER" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP_ORDER"
   37.56 +  "POLY_SQUAREFREE_DECOMP" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP"
   37.57 +  "POLY_ROOTS_INDEX_LENGTH" > "HOL4Real.poly.POLY_ROOTS_INDEX_LENGTH"
   37.58 +  "POLY_ROOTS_INDEX_LEMMA" > "HOL4Real.poly.POLY_ROOTS_INDEX_LEMMA"
   37.59 +  "POLY_ROOTS_FINITE_SET" > "HOL4Real.poly.POLY_ROOTS_FINITE_SET"
   37.60 +  "POLY_ROOTS_FINITE_LEMMA" > "HOL4Real.poly.POLY_ROOTS_FINITE_LEMMA"
   37.61 +  "POLY_ROOTS_FINITE" > "HOL4Real.poly.POLY_ROOTS_FINITE"
   37.62 +  "POLY_PRIME_EQ_0" > "HOL4Real.poly.POLY_PRIME_EQ_0"
   37.63 +  "POLY_PRIMES" > "HOL4Real.poly.POLY_PRIMES"
   37.64 +  "POLY_ORDER_EXISTS" > "HOL4Real.poly.POLY_ORDER_EXISTS"
   37.65 +  "POLY_ORDER" > "HOL4Real.poly.POLY_ORDER"
   37.66 +  "POLY_NORMALIZE" > "HOL4Real.poly.POLY_NORMALIZE"
   37.67 +  "POLY_NEG_CLAUSES" > "HOL4Real.poly.POLY_NEG_CLAUSES"
   37.68 +  "POLY_NEG" > "HOL4Real.poly.POLY_NEG"
   37.69 +  "POLY_MVT" > "HOL4Real.poly.POLY_MVT"
   37.70 +  "POLY_MUL_LCANCEL" > "HOL4Real.poly.POLY_MUL_LCANCEL"
   37.71 +  "POLY_MUL_CLAUSES" > "HOL4Real.poly.POLY_MUL_CLAUSES"
   37.72 +  "POLY_MUL_ASSOC" > "HOL4Real.poly.POLY_MUL_ASSOC"
   37.73 +  "POLY_MUL" > "HOL4Real.poly.POLY_MUL"
   37.74 +  "POLY_MONO" > "HOL4Real.poly.POLY_MONO"
   37.75 +  "POLY_LINEAR_REM" > "HOL4Real.poly.POLY_LINEAR_REM"
   37.76 +  "POLY_LINEAR_DIVIDES" > "HOL4Real.poly.POLY_LINEAR_DIVIDES"
   37.77 +  "POLY_LENGTH_MUL" > "HOL4Real.poly.POLY_LENGTH_MUL"
   37.78 +  "POLY_IVT_POS" > "HOL4Real.poly.POLY_IVT_POS"
   37.79 +  "POLY_IVT_NEG" > "HOL4Real.poly.POLY_IVT_NEG"
   37.80 +  "POLY_EXP_PRIME_EQ_0" > "HOL4Real.poly.POLY_EXP_PRIME_EQ_0"
   37.81 +  "POLY_EXP_EQ_0" > "HOL4Real.poly.POLY_EXP_EQ_0"
   37.82 +  "POLY_EXP_DIVIDES" > "HOL4Real.poly.POLY_EXP_DIVIDES"
   37.83 +  "POLY_EXP_ADD" > "HOL4Real.poly.POLY_EXP_ADD"
   37.84 +  "POLY_EXP" > "HOL4Real.poly.POLY_EXP"
   37.85 +  "POLY_ENTIRE_LEMMA" > "HOL4Real.poly.POLY_ENTIRE_LEMMA"
   37.86 +  "POLY_ENTIRE" > "HOL4Real.poly.POLY_ENTIRE"
   37.87 +  "POLY_DIVIDES_ZERO" > "HOL4Real.poly.POLY_DIVIDES_ZERO"
   37.88 +  "POLY_DIVIDES_TRANS" > "HOL4Real.poly.POLY_DIVIDES_TRANS"
   37.89 +  "POLY_DIVIDES_SUB2" > "HOL4Real.poly.POLY_DIVIDES_SUB2"
   37.90 +  "POLY_DIVIDES_SUB" > "HOL4Real.poly.POLY_DIVIDES_SUB"
   37.91 +  "POLY_DIVIDES_REFL" > "HOL4Real.poly.POLY_DIVIDES_REFL"
   37.92 +  "POLY_DIVIDES_EXP" > "HOL4Real.poly.POLY_DIVIDES_EXP"
   37.93 +  "POLY_DIVIDES_ADD" > "HOL4Real.poly.POLY_DIVIDES_ADD"
   37.94 +  "POLY_DIFF_ZERO" > "HOL4Real.poly.POLY_DIFF_ZERO"
   37.95 +  "POLY_DIFF_WELLDEF" > "HOL4Real.poly.POLY_DIFF_WELLDEF"
   37.96 +  "POLY_DIFF_NEG" > "HOL4Real.poly.POLY_DIFF_NEG"
   37.97 +  "POLY_DIFF_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_MUL_LEMMA"
   37.98 +  "POLY_DIFF_MUL" > "HOL4Real.poly.POLY_DIFF_MUL"
   37.99 +  "POLY_DIFF_LEMMA" > "HOL4Real.poly.POLY_DIFF_LEMMA"
  37.100 +  "POLY_DIFF_ISZERO" > "HOL4Real.poly.POLY_DIFF_ISZERO"
  37.101 +  "POLY_DIFF_EXP_PRIME" > "HOL4Real.poly.POLY_DIFF_EXP_PRIME"
  37.102 +  "POLY_DIFF_EXP" > "HOL4Real.poly.POLY_DIFF_EXP"
  37.103 +  "POLY_DIFF_CMUL" > "HOL4Real.poly.POLY_DIFF_CMUL"
  37.104 +  "POLY_DIFF_CLAUSES" > "HOL4Real.poly.POLY_DIFF_CLAUSES"
  37.105 +  "POLY_DIFF_AUX_NEG" > "HOL4Real.poly.POLY_DIFF_AUX_NEG"
  37.106 +  "POLY_DIFF_AUX_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_AUX_MUL_LEMMA"
  37.107 +  "POLY_DIFF_AUX_ISZERO" > "HOL4Real.poly.POLY_DIFF_AUX_ISZERO"
  37.108 +  "POLY_DIFF_AUX_CMUL" > "HOL4Real.poly.POLY_DIFF_AUX_CMUL"
  37.109 +  "POLY_DIFF_AUX_ADD" > "HOL4Real.poly.POLY_DIFF_AUX_ADD"
  37.110 +  "POLY_DIFF_ADD" > "HOL4Real.poly.POLY_DIFF_ADD"
  37.111 +  "POLY_DIFFERENTIABLE" > "HOL4Real.poly.POLY_DIFFERENTIABLE"
  37.112 +  "POLY_DIFF" > "HOL4Real.poly.POLY_DIFF"
  37.113 +  "POLY_CONT" > "HOL4Real.poly.POLY_CONT"
  37.114 +  "POLY_CMUL_CLAUSES" > "HOL4Real.poly.POLY_CMUL_CLAUSES"
  37.115 +  "POLY_CMUL" > "HOL4Real.poly.POLY_CMUL"
  37.116 +  "POLY_ADD_RZERO" > "HOL4Real.poly.POLY_ADD_RZERO"
  37.117 +  "POLY_ADD_CLAUSES" > "HOL4Real.poly.POLY_ADD_CLAUSES"
  37.118 +  "POLY_ADD" > "HOL4Real.poly.POLY_ADD"
  37.119 +  "ORDER_UNIQUE" > "HOL4Real.poly.ORDER_UNIQUE"
  37.120 +  "ORDER_THM" > "HOL4Real.poly.ORDER_THM"
  37.121 +  "ORDER_ROOT" > "HOL4Real.poly.ORDER_ROOT"
  37.122 +  "ORDER_POLY" > "HOL4Real.poly.ORDER_POLY"
  37.123 +  "ORDER_MUL" > "HOL4Real.poly.ORDER_MUL"
  37.124 +  "ORDER_DIVIDES" > "HOL4Real.poly.ORDER_DIVIDES"
  37.125 +  "ORDER_DIFF" > "HOL4Real.poly.ORDER_DIFF"
  37.126 +  "ORDER_DECOMP" > "HOL4Real.poly.ORDER_DECOMP"
  37.127 +  "ORDER" > "HOL4Real.poly.ORDER"
  37.128 +  "FINITE_LEMMA" > "HOL4Real.poly.FINITE_LEMMA"
  37.129 +  "DEGREE_ZERO" > "HOL4Real.poly.DEGREE_ZERO"
  37.130 +
  37.131 +end
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/src/HOL/Import/HOL/powser.imp	Fri Apr 02 17:37:45 2004 +0200
    38.3 @@ -0,0 +1,30 @@
    38.4 +import
    38.5 +
    38.6 +import_segment "hol4"
    38.7 +
    38.8 +def_maps
    38.9 +  "diffs" > "diffs_def"
   38.10 +
   38.11 +const_maps
   38.12 +  "diffs" > "HOL4Real.powser.diffs"
   38.13 +
   38.14 +thm_maps
   38.15 +  "diffs_def" > "HOL4Real.powser.diffs_def"
   38.16 +  "diffs" > "HOL4Real.powser.diffs"
   38.17 +  "TERMDIFF_LEMMA5" > "HOL4Real.powser.TERMDIFF_LEMMA5"
   38.18 +  "TERMDIFF_LEMMA4" > "HOL4Real.powser.TERMDIFF_LEMMA4"
   38.19 +  "TERMDIFF_LEMMA3" > "HOL4Real.powser.TERMDIFF_LEMMA3"
   38.20 +  "TERMDIFF_LEMMA2" > "HOL4Real.powser.TERMDIFF_LEMMA2"
   38.21 +  "TERMDIFF_LEMMA1" > "HOL4Real.powser.TERMDIFF_LEMMA1"
   38.22 +  "TERMDIFF" > "HOL4Real.powser.TERMDIFF"
   38.23 +  "POWSER_INSIDEA" > "HOL4Real.powser.POWSER_INSIDEA"
   38.24 +  "POWSER_INSIDE" > "HOL4Real.powser.POWSER_INSIDE"
   38.25 +  "POWREV" > "HOL4Real.powser.POWREV"
   38.26 +  "POWDIFF_LEMMA" > "HOL4Real.powser.POWDIFF_LEMMA"
   38.27 +  "POWDIFF" > "HOL4Real.powser.POWDIFF"
   38.28 +  "DIFFS_NEG" > "HOL4Real.powser.DIFFS_NEG"
   38.29 +  "DIFFS_LEMMA2" > "HOL4Real.powser.DIFFS_LEMMA2"
   38.30 +  "DIFFS_LEMMA" > "HOL4Real.powser.DIFFS_LEMMA"
   38.31 +  "DIFFS_EQUIV" > "HOL4Real.powser.DIFFS_EQUIV"
   38.32 +
   38.33 +end
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/src/HOL/Import/HOL/pred_set.imp	Fri Apr 02 17:37:45 2004 +0200
    39.3 @@ -0,0 +1,322 @@
    39.4 +import
    39.5 +
    39.6 +import_segment "hol4"
    39.7 +
    39.8 +def_maps
    39.9 +  "count" > "count_primdef"
   39.10 +  "UNIV" > "UNIV_def"
   39.11 +  "UNION" > "UNION_def"
   39.12 +  "SURJ" > "SURJ_def"
   39.13 +  "SUBSET" > "SUBSET_def"
   39.14 +  "SING" > "SING_def"
   39.15 +  "RINV" > "RINV_def"
   39.16 +  "REST" > "REST_def"
   39.17 +  "PSUBSET" > "PSUBSET_def"
   39.18 +  "LINV" > "LINV_def"
   39.19 +  "ITSET_tupled" > "ITSET_tupled_def"
   39.20 +  "ITSET" > "ITSET_def"
   39.21 +  "INTER" > "INTER_def"
   39.22 +  "INSERT" > "INSERT_def"
   39.23 +  "INJ" > "INJ_def"
   39.24 +  "INFINITE" > "INFINITE_def"
   39.25 +  "IMAGE" > "IMAGE_def"
   39.26 +  "GSPEC" > "GSPEC_def"
   39.27 +  "FINITE" > "FINITE_def"
   39.28 +  "EMPTY" > "EMPTY_def"
   39.29 +  "DISJOINT" > "DISJOINT_def"
   39.30 +  "DIFF" > "DIFF_def"
   39.31 +  "DELETE" > "DELETE_def"
   39.32 +  "CROSS" > "CROSS_def"
   39.33 +  "COMPL" > "COMPL_def"
   39.34 +  "CHOICE" > "CHOICE_def"
   39.35 +  "CARD" > "CARD_def"
   39.36 +  "BIJ" > "BIJ_def"
   39.37 +  "BIGUNION" > "BIGUNION_def"
   39.38 +  "BIGINTER" > "BIGINTER_def"
   39.39 +
   39.40 +const_maps
   39.41 +  "count" > "HOL4Base.pred_set.count"
   39.42 +  "UNIV" > "HOL4Base.pred_set.UNIV"
   39.43 +  "UNION" > "HOL4Base.pred_set.UNION"
   39.44 +  "SURJ" > "HOL4Base.pred_set.SURJ"
   39.45 +  "SUBSET" > "HOL4Base.pred_set.SUBSET"
   39.46 +  "SING" > "HOL4Base.pred_set.SING"
   39.47 +  "REST" > "HOL4Base.pred_set.REST"
   39.48 +  "PSUBSET" > "HOL4Base.pred_set.PSUBSET"
   39.49 +  "ITSET_tupled" > "HOL4Base.pred_set.ITSET_tupled"
   39.50 +  "ITSET" > "HOL4Base.pred_set.ITSET"
   39.51 +  "INTER" > "HOL4Base.pred_set.INTER"
   39.52 +  "INSERT" > "HOL4Base.pred_set.INSERT"
   39.53 +  "INJ" > "HOL4Base.pred_set.INJ"
   39.54 +  "INFINITE" > "HOL4Base.pred_set.INFINITE"
   39.55 +  "IMAGE" > "HOL4Base.pred_set.IMAGE"
   39.56 +  "FINITE" > "HOL4Base.pred_set.FINITE"
   39.57 +  "EMPTY" > "HOL4Base.pred_set.EMPTY"
   39.58 +  "DISJOINT" > "HOL4Base.pred_set.DISJOINT"
   39.59 +  "DIFF" > "HOL4Base.pred_set.DIFF"
   39.60 +  "DELETE" > "HOL4Base.pred_set.DELETE"
   39.61 +  "CROSS" > "HOL4Base.pred_set.CROSS"
   39.62 +  "COMPL" > "HOL4Base.pred_set.COMPL"
   39.63 +  "BIJ" > "HOL4Base.pred_set.BIJ"
   39.64 +  "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
   39.65 +  "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
   39.66 +
   39.67 +thm_maps
   39.68 +  "count_primdef" > "HOL4Base.pred_set.count_primdef"
   39.69 +  "count_def" > "HOL4Base.pred_set.count_def"
   39.70 +  "UNIV_def" > "HOL4Base.pred_set.UNIV_def"
   39.71 +  "UNIV_SUBSET" > "HOL4Base.pred_set.UNIV_SUBSET"
   39.72 +  "UNIV_NOT_EMPTY" > "HOL4Base.pred_set.UNIV_NOT_EMPTY"
   39.73 +  "UNIV_DEF" > "HOL4Base.pred_set.UNIV_DEF"
   39.74 +  "UNION_def" > "HOL4Base.pred_set.UNION_def"
   39.75 +  "UNION_UNIV" > "HOL4Base.pred_set.UNION_UNIV"
   39.76 +  "UNION_SUBSET" > "HOL4Base.pred_set.UNION_SUBSET"
   39.77 +  "UNION_OVER_INTER" > "HOL4Base.pred_set.UNION_OVER_INTER"
   39.78 +  "UNION_IDEMPOT" > "HOL4Base.pred_set.UNION_IDEMPOT"
   39.79 +  "UNION_EMPTY" > "HOL4Base.pred_set.UNION_EMPTY"
   39.80 +  "UNION_DEF" > "HOL4Base.pred_set.UNION_DEF"
   39.81 +  "UNION_COMM" > "HOL4Base.pred_set.UNION_COMM"
   39.82 +  "UNION_ASSOC" > "HOL4Base.pred_set.UNION_ASSOC"
   39.83 +  "SURJ_def" > "HOL4Base.pred_set.SURJ_def"
   39.84 +  "SURJ_ID" > "HOL4Base.pred_set.SURJ_ID"
   39.85 +  "SURJ_EMPTY" > "HOL4Base.pred_set.SURJ_EMPTY"
   39.86 +  "SURJ_DEF" > "HOL4Base.pred_set.SURJ_DEF"
   39.87 +  "SURJ_COMPOSE" > "HOL4Base.pred_set.SURJ_COMPOSE"
   39.88 +  "SUBSET_def" > "HOL4Base.pred_set.SUBSET_def"
   39.89 +  "SUBSET_UNIV" > "HOL4Base.pred_set.SUBSET_UNIV"
   39.90 +  "SUBSET_UNION_ABSORPTION" > "HOL4Base.pred_set.SUBSET_UNION_ABSORPTION"
   39.91 +  "SUBSET_UNION" > "HOL4Base.pred_set.SUBSET_UNION"
   39.92 +  "SUBSET_TRANS" > "HOL4Base.pred_set.SUBSET_TRANS"
   39.93 +  "SUBSET_REFL" > "HOL4Base.pred_set.SUBSET_REFL"
   39.94 +  "SUBSET_INTER_ABSORPTION" > "HOL4Base.pred_set.SUBSET_INTER_ABSORPTION"
   39.95 +  "SUBSET_INTER" > "HOL4Base.pred_set.SUBSET_INTER"
   39.96 +  "SUBSET_INSERT_DELETE" > "HOL4Base.pred_set.SUBSET_INSERT_DELETE"
   39.97 +  "SUBSET_INSERT" > "HOL4Base.pred_set.SUBSET_INSERT"
   39.98 +  "SUBSET_FINITE" > "HOL4Base.pred_set.SUBSET_FINITE"
   39.99 +  "SUBSET_EMPTY" > "HOL4Base.pred_set.SUBSET_EMPTY"
  39.100 +  "SUBSET_DELETE" > "HOL4Base.pred_set.SUBSET_DELETE"
  39.101 +  "SUBSET_DEF" > "HOL4Base.pred_set.SUBSET_DEF"
  39.102 +  "SUBSET_BIGINTER" > "HOL4Base.pred_set.SUBSET_BIGINTER"
  39.103 +  "SUBSET_ANTISYM" > "HOL4Base.pred_set.SUBSET_ANTISYM"
  39.104 +  "SPECIFICATION" > "HOL4Base.bool.IN_DEF"
  39.105 +  "SING_def" > "HOL4Base.pred_set.SING_def"
  39.106 +  "SING_IFF_EMPTY_REST" > "HOL4Base.pred_set.SING_IFF_EMPTY_REST"
  39.107 +  "SING_IFF_CARD1" > "HOL4Base.pred_set.SING_IFF_CARD1"
  39.108 +  "SING_FINITE" > "HOL4Base.pred_set.SING_FINITE"
  39.109 +  "SING_DELETE" > "HOL4Base.pred_set.SING_DELETE"
  39.110 +  "SING_DEF" > "HOL4Base.pred_set.SING_DEF"
  39.111 +  "SING" > "HOL4Base.pred_set.SING"
  39.112 +  "SET_MINIMUM" > "HOL4Base.pred_set.SET_MINIMUM"
  39.113 +  "SET_CASES" > "HOL4Base.pred_set.SET_CASES"
  39.114 +  "RINV_DEF" > "HOL4Base.pred_set.RINV_DEF"
  39.115 +  "REST_def" > "HOL4Base.pred_set.REST_def"
  39.116 +  "REST_SUBSET" > "HOL4Base.pred_set.REST_SUBSET"
  39.117 +  "REST_SING" > "HOL4Base.pred_set.REST_SING"
  39.118 +  "REST_PSUBSET" > "HOL4Base.pred_set.REST_PSUBSET"
  39.119 +  "REST_DEF" > "HOL4Base.pred_set.REST_DEF"
  39.120 +  "PSUBSET_def" > "HOL4Base.pred_set.PSUBSET_def"
  39.121 +  "PSUBSET_UNIV" > "HOL4Base.pred_set.PSUBSET_UNIV"
  39.122 +  "PSUBSET_TRANS" > "HOL4Base.pred_set.PSUBSET_TRANS"
  39.123 +  "PSUBSET_MEMBER" > "HOL4Base.pred_set.PSUBSET_MEMBER"
  39.124 +  "PSUBSET_IRREFL" > "HOL4Base.pred_set.PSUBSET_IRREFL"
  39.125 +  "PSUBSET_INSERT_SUBSET" > "HOL4Base.pred_set.PSUBSET_INSERT_SUBSET"
  39.126 +  "PSUBSET_FINITE" > "HOL4Base.pred_set.PSUBSET_FINITE"
  39.127 +  "PSUBSET_DEF" > "HOL4Base.pred_set.PSUBSET_DEF"
  39.128 +  "NUM_SET_WOP" > "HOL4Base.pred_set.NUM_SET_WOP"
  39.129 +  "NOT_UNIV_PSUBSET" > "HOL4Base.pred_set.NOT_UNIV_PSUBSET"
  39.130 +  "NOT_SING_EMPTY" > "HOL4Base.pred_set.NOT_SING_EMPTY"
  39.131 +  "NOT_PSUBSET_EMPTY" > "HOL4Base.pred_set.NOT_PSUBSET_EMPTY"
  39.132 +  "NOT_IN_FINITE" > "HOL4Base.pred_set.NOT_IN_FINITE"
  39.133 +  "NOT_IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
  39.134 +  "NOT_INSERT_EMPTY" > "HOL4Base.pred_set.NOT_INSERT_EMPTY"
  39.135 +  "NOT_EQUAL_SETS" > "HOL4Base.pred_set.NOT_EQUAL_SETS"
  39.136 +  "NOT_EMPTY_SING" > "HOL4Base.pred_set.NOT_EMPTY_SING"
  39.137 +  "NOT_EMPTY_INSERT" > "HOL4Base.pred_set.NOT_EMPTY_INSERT"
  39.138 +  "MEMBER_NOT_EMPTY" > "HOL4Base.pred_set.MEMBER_NOT_EMPTY"
  39.139 +  "LINV_DEF" > "HOL4Base.pred_set.LINV_DEF"
  39.140 +  "LESS_CARD_DIFF" > "HOL4Base.pred_set.LESS_CARD_DIFF"
  39.141 +  "ITSET_tupled_primitive_def" > "HOL4Base.pred_set.ITSET_tupled_primitive_def"
  39.142 +  "ITSET_tupled_def" > "HOL4Base.pred_set.ITSET_tupled_def"
  39.143 +  "ITSET_def" > "HOL4Base.pred_set.ITSET_def"
  39.144 +  "ITSET_curried_def" > "HOL4Base.pred_set.ITSET_curried_def"
  39.145 +  "ITSET_THM" > "HOL4Base.pred_set.ITSET_THM"
  39.146 +  "ITSET_IND" > "HOL4Base.pred_set.ITSET_IND"
  39.147 +  "ITSET_EMPTY" > "HOL4Base.pred_set.ITSET_EMPTY"
  39.148 +  "IN_UNIV" > "HOL4Base.pred_set.IN_UNIV"
  39.149 +  "IN_UNION" > "HOL4Base.pred_set.IN_UNION"
  39.150 +  "IN_SING" > "HOL4Base.pred_set.IN_SING"
  39.151 +  "IN_INTER" > "HOL4Base.pred_set.IN_INTER"
  39.152 +  "IN_INSERT" > "HOL4Base.pred_set.IN_INSERT"
  39.153 +  "IN_INFINITE_NOT_FINITE" > "HOL4Base.pred_set.IN_INFINITE_NOT_FINITE"
  39.154 +  "IN_IMAGE" > "HOL4Base.pred_set.IN_IMAGE"
  39.155 +  "IN_DISJOINT" > "HOL4Base.pred_set.IN_DISJOINT"
  39.156 +  "IN_DIFF" > "HOL4Base.pred_set.IN_DIFF"
  39.157 +  "IN_DELETE_EQ" > "HOL4Base.pred_set.IN_DELETE_EQ"
  39.158 +  "IN_DELETE" > "HOL4Base.pred_set.IN_DELETE"
  39.159 +  "IN_CROSS" > "HOL4Base.pred_set.IN_CROSS"
  39.160 +  "IN_COUNT" > "HOL4Base.pred_set.IN_COUNT"
  39.161 +  "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
  39.162 +  "IN_BIGUNION" > "HOL4Base.pred_set.IN_BIGUNION"
  39.163 +  "IN_BIGINTER" > "HOL4Base.pred_set.IN_BIGINTER"
  39.164 +  "INTER_def" > "HOL4Base.pred_set.INTER_def"
  39.165 +  "INTER_UNIV" > "HOL4Base.pred_set.INTER_UNIV"
  39.166 +  "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
  39.167 +  "INTER_SUBSET" > "HOL4Base.pred_set.INTER_SUBSET"
  39.168 +  "INTER_OVER_UNION" > "HOL4Base.pred_set.INTER_OVER_UNION"
  39.169 +  "INTER_IDEMPOT" > "HOL4Base.pred_set.INTER_IDEMPOT"
  39.170 +  "INTER_FINITE" > "HOL4Base.pred_set.INTER_FINITE"
  39.171 +  "INTER_EMPTY" > "HOL4Base.pred_set.INTER_EMPTY"
  39.172 +  "INTER_DEF" > "HOL4Base.pred_set.INTER_DEF"
  39.173 +  "INTER_COMM" > "HOL4Base.pred_set.INTER_COMM"
  39.174 +  "INTER_ASSOC" > "HOL4Base.pred_set.INTER_ASSOC"
  39.175 +  "INSERT_def" > "HOL4Base.pred_set.INSERT_def"
  39.176 +  "INSERT_UNIV" > "HOL4Base.pred_set.INSERT_UNIV"
  39.177 +  "INSERT_UNION_EQ" > "HOL4Base.pred_set.INSERT_UNION_EQ"
  39.178 +  "INSERT_UNION" > "HOL4Base.pred_set.INSERT_UNION"
  39.179 +  "INSERT_SUBSET" > "HOL4Base.pred_set.INSERT_SUBSET"
  39.180 +  "INSERT_SING_UNION" > "HOL4Base.pred_set.INSERT_SING_UNION"
  39.181 +  "INSERT_INTER" > "HOL4Base.pred_set.INSERT_INTER"
  39.182 +  "INSERT_INSERT" > "HOL4Base.pred_set.INSERT_INSERT"
  39.183 +  "INSERT_DIFF" > "HOL4Base.pred_set.INSERT_DIFF"
  39.184 +  "INSERT_DELETE" > "HOL4Base.pred_set.INSERT_DELETE"
  39.185 +  "INSERT_DEF" > "HOL4Base.pred_set.INSERT_DEF"
  39.186 +  "INSERT_COMM" > "HOL4Base.pred_set.INSERT_COMM"
  39.187 +  "INJ_def" > "HOL4Base.pred_set.INJ_def"
  39.188 +  "INJ_ID" > "HOL4Base.pred_set.INJ_ID"
  39.189 +  "INJ_EMPTY" > "HOL4Base.pred_set.INJ_EMPTY"
  39.190 +  "INJ_DEF" > "HOL4Base.pred_set.INJ_DEF"
  39.191 +  "INJ_COMPOSE" > "HOL4Base.pred_set.INJ_COMPOSE"
  39.192 +  "INFINITE_def" > "HOL4Base.pred_set.INFINITE_def"
  39.193 +  "INFINITE_UNIV" > "HOL4Base.pred_set.INFINITE_UNIV"
  39.194 +  "INFINITE_SUBSET" > "HOL4Base.pred_set.INFINITE_SUBSET"
  39.195 +  "INFINITE_INHAB" > "HOL4Base.pred_set.INFINITE_INHAB"
  39.196 +  "INFINITE_DIFF_FINITE" > "HOL4Base.pred_set.INFINITE_DIFF_FINITE"
  39.197 +  "INFINITE_DEF" > "HOL4Base.pred_set.INFINITE_DEF"
  39.198 +  "IMAGE_def" > "HOL4Base.pred_set.IMAGE_def"
  39.199 +  "IMAGE_UNION" > "HOL4Base.pred_set.IMAGE_UNION"
  39.200 +  "IMAGE_SURJ" > "HOL4Base.pred_set.IMAGE_SURJ"
  39.201 +  "IMAGE_SUBSET" > "HOL4Base.pred_set.IMAGE_SUBSET"
  39.202 +  "IMAGE_INTER" > "HOL4Base.pred_set.IMAGE_INTER"
  39.203 +  "IMAGE_INSERT" > "HOL4Base.pred_set.IMAGE_INSERT"
  39.204 +  "IMAGE_IN" > "HOL4Base.pred_set.IMAGE_IN"
  39.205 +  "IMAGE_ID" > "HOL4Base.pred_set.IMAGE_ID"
  39.206 +  "IMAGE_FINITE" > "HOL4Base.pred_set.IMAGE_FINITE"
  39.207 +  "IMAGE_EQ_EMPTY" > "HOL4Base.pred_set.IMAGE_EQ_EMPTY"
  39.208 +  "IMAGE_EMPTY" > "HOL4Base.pred_set.IMAGE_EMPTY"
  39.209 +  "IMAGE_DELETE" > "HOL4Base.pred_set.IMAGE_DELETE"
  39.210 +  "IMAGE_DEF" > "HOL4Base.pred_set.IMAGE_DEF"
  39.211 +  "IMAGE_COMPOSE" > "HOL4Base.pred_set.IMAGE_COMPOSE"
  39.212 +  "IMAGE_11_INFINITE" > "HOL4Base.pred_set.IMAGE_11_INFINITE"
  39.213 +  "GSPECIFICATION" > "HOL4Base.pred_set.GSPECIFICATION"
  39.214 +  "FINITE_def" > "HOL4Base.pred_set.FINITE_def"
  39.215 +  "FINITE_WEAK_ENUMERATE" > "HOL4Base.pred_set.FINITE_WEAK_ENUMERATE"
  39.216 +  "FINITE_UNION" > "HOL4Base.pred_set.FINITE_UNION"
  39.217 +  "FINITE_SING" > "HOL4Base.pred_set.FINITE_SING"
  39.218 +  "FINITE_PSUBSET_UNIV" > "HOL4Base.pred_set.FINITE_PSUBSET_UNIV"
  39.219 +  "FINITE_PSUBSET_INFINITE" > "HOL4Base.pred_set.FINITE_PSUBSET_INFINITE"
  39.220 +  "FINITE_ISO_NUM" > "HOL4Base.pred_set.FINITE_ISO_NUM"
  39.221 +  "FINITE_INSERT" > "HOL4Base.pred_set.FINITE_INSERT"
  39.222 +  "FINITE_INDUCT" > "HOL4Base.pred_set.FINITE_INDUCT"
  39.223 +  "FINITE_EMPTY" > "HOL4Base.pred_set.FINITE_EMPTY"
  39.224 +  "FINITE_DIFF" > "HOL4Base.pred_set.FINITE_DIFF"
  39.225 +  "FINITE_DELETE" > "HOL4Base.pred_set.FINITE_DELETE"
  39.226 +  "FINITE_DEF" > "HOL4Base.pred_set.FINITE_DEF"
  39.227 +  "FINITE_CROSS_EQ" > "HOL4Base.pred_set.FINITE_CROSS_EQ"
  39.228 +  "FINITE_CROSS" > "HOL4Base.pred_set.FINITE_CROSS"
  39.229 +  "FINITE_COUNT" > "HOL4Base.pred_set.FINITE_COUNT"
  39.230 +  "FINITE_COMPLETE_INDUCTION" > "HOL4Base.pred_set.FINITE_COMPLETE_INDUCTION"
  39.231 +  "FINITE_BIGUNION" > "HOL4Base.pred_set.FINITE_BIGUNION"
  39.232 +  "EXTENSION" > "HOL4Base.pred_set.EXTENSION"
  39.233 +  "EQ_UNIV" > "HOL4Base.pred_set.EQ_UNIV"
  39.234 +  "EQUAL_SING" > "HOL4Base.pred_set.EQUAL_SING"
  39.235 +  "EMPTY_def" > "HOL4Base.pred_set.EMPTY_def"
  39.236 +  "EMPTY_UNION" > "HOL4Base.pred_set.EMPTY_UNION"
  39.237 +  "EMPTY_SUBSET" > "HOL4Base.pred_set.EMPTY_SUBSET"
  39.238 +  "EMPTY_NOT_UNIV" > "HOL4Base.pred_set.EMPTY_NOT_UNIV"
  39.239 +  "EMPTY_DIFF" > "HOL4Base.pred_set.EMPTY_DIFF"
  39.240 +  "EMPTY_DELETE" > "HOL4Base.pred_set.EMPTY_DELETE"
  39.241 +  "EMPTY_DEF" > "HOL4Base.pred_set.EMPTY_DEF"
  39.242 +  "DISJOINT_def" > "HOL4Base.pred_set.DISJOINT_def"
  39.243 +  "DISJOINT_UNION_BOTH" > "HOL4Base.pred_set.DISJOINT_UNION_BOTH"
  39.244 +  "DISJOINT_UNION" > "HOL4Base.pred_set.DISJOINT_UNION"
  39.245 +  "DISJOINT_SYM" > "HOL4Base.pred_set.DISJOINT_SYM"
  39.246 +  "DISJOINT_SING_EMPTY" > "HOL4Base.pred_set.DISJOINT_SING_EMPTY"
  39.247 +  "DISJOINT_INSERT" > "HOL4Base.pred_set.DISJOINT_INSERT"
  39.248 +  "DISJOINT_EMPTY_REFL" > "HOL4Base.pred_set.DISJOINT_EMPTY_REFL"
  39.249 +  "DISJOINT_EMPTY" > "HOL4Base.pred_set.DISJOINT_EMPTY"
  39.250 +  "DISJOINT_DELETE_SYM" > "HOL4Base.pred_set.DISJOINT_DELETE_SYM"
  39.251 +  "DISJOINT_DEF" > "HOL4Base.pred_set.DISJOINT_DEF"
  39.252 +  "DISJOINT_BIGUNION" > "HOL4Base.pred_set.DISJOINT_BIGUNION"
  39.253 +  "DISJOINT_BIGINTER" > "HOL4Base.pred_set.DISJOINT_BIGINTER"
  39.254 +  "DIFF_def" > "HOL4Base.pred_set.DIFF_def"
  39.255 +  "DIFF_UNIV" > "HOL4Base.pred_set.DIFF_UNIV"
  39.256 +  "DIFF_INSERT" > "HOL4Base.pred_set.DIFF_INSERT"
  39.257 +  "DIFF_EQ_EMPTY" > "HOL4Base.pred_set.DIFF_EQ_EMPTY"
  39.258 +  "DIFF_EMPTY" > "HOL4Base.pred_set.DIFF_EMPTY"
  39.259 +  "DIFF_DIFF" > "HOL4Base.pred_set.DIFF_DIFF"
  39.260 +  "DIFF_DEF" > "HOL4Base.pred_set.DIFF_DEF"
  39.261 +  "DELETE_def" > "HOL4Base.pred_set.DELETE_def"
  39.262 +  "DELETE_SUBSET" > "HOL4Base.pred_set.DELETE_SUBSET"
  39.263 +  "DELETE_NON_ELEMENT" > "HOL4Base.pred_set.DELETE_NON_ELEMENT"
  39.264 +  "DELETE_INTER" > "HOL4Base.pred_set.DELETE_INTER"
  39.265 +  "DELETE_INSERT" > "HOL4Base.pred_set.DELETE_INSERT"
  39.266 +  "DELETE_EQ_SING" > "HOL4Base.pred_set.DELETE_EQ_SING"
  39.267 +  "DELETE_DELETE" > "HOL4Base.pred_set.DELETE_DELETE"
  39.268 +  "DELETE_DEF" > "HOL4Base.pred_set.DELETE_DEF"
  39.269 +  "DELETE_COMM" > "HOL4Base.pred_set.DELETE_COMM"
  39.270 +  "DECOMPOSITION" > "HOL4Base.pred_set.DECOMPOSITION"
  39.271 +  "CROSS_def" > "HOL4Base.pred_set.CROSS_def"
  39.272 +  "CROSS_SUBSET" > "HOL4Base.pred_set.CROSS_SUBSET"
  39.273 +  "CROSS_SINGS" > "HOL4Base.pred_set.CROSS_SINGS"
  39.274 +  "CROSS_INSERT_RIGHT" > "HOL4Base.pred_set.CROSS_INSERT_RIGHT"
  39.275 +  "CROSS_INSERT_LEFT" > "HOL4Base.pred_set.CROSS_INSERT_LEFT"
  39.276 +  "CROSS_EMPTY" > "HOL4Base.pred_set.CROSS_EMPTY"
  39.277 +  "CROSS_DEF" > "HOL4Base.pred_set.CROSS_DEF"
  39.278 +  "COUNT_ZERO" > "HOL4Base.pred_set.COUNT_ZERO"
  39.279 +  "COUNT_SUC" > "HOL4Base.pred_set.COUNT_SUC"
  39.280 +  "COMPONENT" > "HOL4Base.pred_set.COMPONENT"
  39.281 +  "COMPL_def" > "HOL4Base.pred_set.COMPL_def"
  39.282 +  "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
  39.283 +  "COMPL_EMPTY" > "HOL4Base.pred_set.COMPL_EMPTY"
  39.284 +  "COMPL_DEF" > "HOL4Base.pred_set.COMPL_DEF"
  39.285 +  "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
  39.286 +  "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
  39.287 +  "CHOICE_SING" > "HOL4Base.pred_set.CHOICE_SING"
  39.288 +  "CHOICE_NOT_IN_REST" > "HOL4Base.pred_set.CHOICE_NOT_IN_REST"
  39.289 +  "CHOICE_INSERT_REST" > "HOL4Base.pred_set.CHOICE_INSERT_REST"
  39.290 +  "CHOICE_DEF" > "HOL4Base.pred_set.CHOICE_DEF"
  39.291 +  "CARD_UNION" > "HOL4Base.pred_set.CARD_UNION"
  39.292 +  "CARD_SUBSET" > "HOL4Base.pred_set.CARD_SUBSET"
  39.293 +  "CARD_SING_CROSS" > "HOL4Base.pred_set.CARD_SING_CROSS"
  39.294 +  "CARD_SING" > "HOL4Base.pred_set.CARD_SING"
  39.295 +  "CARD_PSUBSET" > "HOL4Base.pred_set.CARD_PSUBSET"
  39.296 +  "CARD_INTER_LESS_EQ" > "HOL4Base.pred_set.CARD_INTER_LESS_EQ"
  39.297 +  "CARD_INSERT" > "HOL4Base.pred_set.CARD_INSERT"
  39.298 +  "CARD_EQ_0" > "HOL4Base.pred_set.CARD_EQ_0"
  39.299 +  "CARD_EMPTY" > "HOL4Base.pred_set.CARD_EMPTY"
  39.300 +  "CARD_DIFF" > "HOL4Base.pred_set.CARD_DIFF"
  39.301 +  "CARD_DELETE" > "HOL4Base.pred_set.CARD_DELETE"
  39.302 +  "CARD_DEF" > "HOL4Base.pred_set.CARD_DEF"
  39.303 +  "CARD_CROSS" > "HOL4Base.pred_set.CARD_CROSS"
  39.304 +  "CARD_COUNT" > "HOL4Base.pred_set.CARD_COUNT"
  39.305 +  "BIJ_def" > "HOL4Base.pred_set.BIJ_def"
  39.306 +  "BIJ_ID" > "HOL4Base.pred_set.BIJ_ID"
  39.307 +  "BIJ_EMPTY" > "HOL4Base.pred_set.BIJ_EMPTY"
  39.308 +  "BIJ_DEF" > "HOL4Base.pred_set.BIJ_DEF"
  39.309 +  "BIJ_COMPOSE" > "HOL4Base.pred_set.BIJ_COMPOSE"
  39.310 +  "BIGUNION_def" > "HOL4Base.pred_set.BIGUNION_def"
  39.311 +  "BIGUNION_UNION" > "HOL4Base.pred_set.BIGUNION_UNION"
  39.312 +  "BIGUNION_SUBSET" > "HOL4Base.pred_set.BIGUNION_SUBSET"
  39.313 +  "BIGUNION_SING" > "HOL4Base.pred_set.BIGUNION_SING"
  39.314 +  "BIGUNION_INSERT" > "HOL4Base.pred_set.BIGUNION_INSERT"
  39.315 +  "BIGUNION_EMPTY" > "HOL4Base.pred_set.BIGUNION_EMPTY"
  39.316 +  "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
  39.317 +  "BIGINTER_def" > "HOL4Base.pred_set.BIGINTER_def"
  39.318 +  "BIGINTER_SING" > "HOL4Base.pred_set.BIGINTER_SING"
  39.319 +  "BIGINTER_INTER" > "HOL4Base.pred_set.BIGINTER_INTER"
  39.320 +  "BIGINTER_INSERT" > "HOL4Base.pred_set.BIGINTER_INSERT"
  39.321 +  "BIGINTER_EMPTY" > "HOL4Base.pred_set.BIGINTER_EMPTY"
  39.322 +  "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
  39.323 +  "ABSORPTION" > "HOL4Base.pred_set.ABSORPTION"
  39.324 +
  39.325 +end
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/src/HOL/Import/HOL/prim_rec.imp	Fri Apr 02 17:37:45 2004 +0200
    40.3 @@ -0,0 +1,72 @@
    40.4 +import
    40.5 +
    40.6 +import_segment "hol4"
    40.7 +
    40.8 +def_maps
    40.9 +  "wellfounded" > "wellfounded_primdef"
   40.10 +  "measure" > "measure_primdef"
   40.11 +  "SIMP_REC_REL" > "SIMP_REC_REL_def"
   40.12 +  "SIMP_REC" > "SIMP_REC_def"
   40.13 +  "PRIM_REC_FUN" > "PRIM_REC_FUN_def"
   40.14 +  "PRIM_REC" > "PRIM_REC_def"
   40.15 +  "PRE" > "PRE_def"
   40.16 +
   40.17 +const_maps
   40.18 +  "wellfounded" > "HOL4Base.prim_rec.wellfounded"
   40.19 +  "measure" > "HOL4Base.prim_rec.measure"
   40.20 +  "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
   40.21 +  "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
   40.22 +  "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
   40.23 +  "PRE" > "HOL4Base.prim_rec.PRE"
   40.24 +  "<" > "op <" :: "nat => nat => bool"
   40.25 +
   40.26 +thm_maps
   40.27 +  "wellfounded_primdef" > "HOL4Base.prim_rec.wellfounded_primdef"
   40.28 +  "wellfounded_def" > "HOL4Base.prim_rec.wellfounded_def"
   40.29 +  "num_Axiom_old" > "HOL4Base.prim_rec.num_Axiom_old"
   40.30 +  "num_Axiom" > "HOL4Base.prim_rec.num_Axiom"
   40.31 +  "measure_thm" > "HOL4Base.prim_rec.measure_thm"
   40.32 +  "measure_primdef" > "HOL4Base.prim_rec.measure_primdef"
   40.33 +  "measure_def" > "HOL4Base.prim_rec.measure_def"
   40.34 +  "WF_measure" > "HOL4Base.prim_rec.WF_measure"
   40.35 +  "WF_PRED" > "HOL4Base.prim_rec.WF_PRED"
   40.36 +  "WF_LESS" > "HOL4Base.prim_rec.WF_LESS"
   40.37 +  "WF_IFF_WELLFOUNDED" > "HOL4Base.prim_rec.WF_IFF_WELLFOUNDED"
   40.38 +  "SUC_LESS" > "Nat.Suc_lessD"
   40.39 +  "SUC_ID" > "Nat.Suc_n_not_n"
   40.40 +  "SIMP_REC_THM" > "HOL4Base.prim_rec.SIMP_REC_THM"
   40.41 +  "SIMP_REC_REL_def" > "HOL4Base.prim_rec.SIMP_REC_REL_def"
   40.42 +  "SIMP_REC_REL_UNIQUE_RESULT" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE_RESULT"
   40.43 +  "SIMP_REC_REL_UNIQUE" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE"
   40.44 +  "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
   40.45 +  "SIMP_REC_EXISTS" > "HOL4Base.prim_rec.SIMP_REC_EXISTS"
   40.46 +  "SIMP_REC" > "HOL4Base.prim_rec.SIMP_REC"
   40.47 +  "PRIM_REC_def" > "HOL4Base.prim_rec.PRIM_REC_def"
   40.48 +  "PRIM_REC_THM" > "HOL4Base.prim_rec.PRIM_REC_THM"
   40.49 +  "PRIM_REC_FUN_def" > "HOL4Base.prim_rec.PRIM_REC_FUN_def"
   40.50 +  "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
   40.51 +  "PRIM_REC_EQN" > "HOL4Base.prim_rec.PRIM_REC_EQN"
   40.52 +  "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
   40.53 +  "PRE_def" > "HOL4Base.prim_rec.PRE_def"
   40.54 +  "PRE_DEF" > "HOL4Base.prim_rec.PRE_DEF"
   40.55 +  "PRE" > "HOL4Base.prim_rec.PRE"
   40.56 +  "NOT_LESS_EQ" > "HOL4Base.prim_rec.NOT_LESS_EQ"
   40.57 +  "NOT_LESS_0" > "Nat.not_less0"
   40.58 +  "LESS_THM" > "HOL4Base.prim_rec.LESS_THM"
   40.59 +  "LESS_SUC_SUC" > "HOL4Base.prim_rec.LESS_SUC_SUC"
   40.60 +  "LESS_SUC_REFL" > "Nat.lessI"
   40.61 +  "LESS_SUC_IMP" > "HOL4Base.prim_rec.LESS_SUC_IMP"
   40.62 +  "LESS_SUC" > "Nat.less_SucI"
   40.63 +  "LESS_REFL" > "Nat.less_not_refl"
   40.64 +  "LESS_NOT_EQ" > "Nat.less_not_refl3"
   40.65 +  "LESS_MONO" > "Nat.Suc_mono"
   40.66 +  "LESS_LEMMA2" > "HOL4Base.prim_rec.LESS_LEMMA2"
   40.67 +  "LESS_LEMMA1" > "HOL4Base.prim_rec.LESS_LEMMA1"
   40.68 +  "LESS_DEF" > "HOL4Compat.LESS_DEF"
   40.69 +  "LESS_0_0" > "HOL4Base.prim_rec.LESS_0_0"
   40.70 +  "LESS_0" > "Nat.zero_less_Suc"
   40.71 +  "INV_SUC_EQ" > "Nat.nat.simps_3"
   40.72 +  "EQ_LESS" > "HOL4Base.prim_rec.EQ_LESS"
   40.73 +  "DC" > "HOL4Base.prim_rec.DC"
   40.74 +
   40.75 +end
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/src/HOL/Import/HOL/prime.imp	Fri Apr 02 17:37:45 2004 +0200
    41.3 @@ -0,0 +1,17 @@
    41.4 +import
    41.5 +
    41.6 +import_segment "hol4"
    41.7 +
    41.8 +def_maps
    41.9 +  "prime" > "prime_primdef"
   41.10 +
   41.11 +const_maps
   41.12 +  "prime" > "HOL4Base.prime.prime"
   41.13 +
   41.14 +thm_maps
   41.15 +  "prime_primdef" > "HOL4Base.prime.prime_primdef"
   41.16 +  "prime_def" > "HOL4Base.prime.prime_def"
   41.17 +  "NOT_PRIME_1" > "HOL4Base.prime.NOT_PRIME_1"
   41.18 +  "NOT_PRIME_0" > "HOL4Base.prime.NOT_PRIME_0"
   41.19 +
   41.20 +end
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/src/HOL/Import/HOL/prob.imp	Fri Apr 02 17:37:45 2004 +0200
    42.3 @@ -0,0 +1,61 @@
    42.4 +import
    42.5 +
    42.6 +import_segment "hol4"
    42.7 +
    42.8 +def_maps
    42.9 +  "prob" > "prob_primdef"
   42.10 +  "algebra_measure" > "algebra_measure_primdef"
   42.11 +  "alg_measure" > "alg_measure_primdef"
   42.12 +
   42.13 +const_maps
   42.14 +  "prob" > "HOL4Prob.prob.prob"
   42.15 +  "algebra_measure" > "HOL4Prob.prob.algebra_measure"
   42.16 +
   42.17 +thm_maps
   42.18 +  "prob_primdef" > "HOL4Prob.prob.prob_primdef"
   42.19 +  "prob_def" > "HOL4Prob.prob.prob_def"
   42.20 +  "algebra_measure_primdef" > "HOL4Prob.prob.algebra_measure_primdef"
   42.21 +  "algebra_measure_def" > "HOL4Prob.prob.algebra_measure_def"
   42.22 +  "alg_measure_def" > "HOL4Prob.prob.alg_measure_def"
   42.23 +  "X_LE_PROB" > "HOL4Prob.prob.X_LE_PROB"
   42.24 +  "PROB_SUP_EXISTS2" > "HOL4Prob.prob.PROB_SUP_EXISTS2"
   42.25 +  "PROB_SUP_EXISTS1" > "HOL4Prob.prob.PROB_SUP_EXISTS1"
   42.26 +  "PROB_SUBSET_MONO" > "HOL4Prob.prob.PROB_SUBSET_MONO"
   42.27 +  "PROB_STL" > "HOL4Prob.prob.PROB_STL"
   42.28 +  "PROB_SHD" > "HOL4Prob.prob.PROB_SHD"
   42.29 +  "PROB_SDROP" > "HOL4Prob.prob.PROB_SDROP"
   42.30 +  "PROB_RANGE" > "HOL4Prob.prob.PROB_RANGE"
   42.31 +  "PROB_POS" > "HOL4Prob.prob.PROB_POS"
   42.32 +  "PROB_MAX" > "HOL4Prob.prob.PROB_MAX"
   42.33 +  "PROB_LE_X" > "HOL4Prob.prob.PROB_LE_X"
   42.34 +  "PROB_INTER_SHD" > "HOL4Prob.prob.PROB_INTER_SHD"
   42.35 +  "PROB_INTER_HALVES" > "HOL4Prob.prob.PROB_INTER_HALVES"
   42.36 +  "PROB_COMPL_LE1" > "HOL4Prob.prob.PROB_COMPL_LE1"
   42.37 +  "PROB_COMPL" > "HOL4Prob.prob.PROB_COMPL"
   42.38 +  "PROB_BASIC" > "HOL4Prob.prob.PROB_BASIC"
   42.39 +  "PROB_ALGEBRA" > "HOL4Prob.prob.PROB_ALGEBRA"
   42.40 +  "PROB_ALG" > "HOL4Prob.prob.PROB_ALG"
   42.41 +  "PROB_ADDITIVE" > "HOL4Prob.prob.PROB_ADDITIVE"
   42.42 +  "ALG_TWINS_MEASURE" > "HOL4Prob.prob.ALG_TWINS_MEASURE"
   42.43 +  "ALG_MEASURE_TLS" > "HOL4Prob.prob.ALG_MEASURE_TLS"
   42.44 +  "ALG_MEASURE_POS" > "HOL4Prob.prob.ALG_MEASURE_POS"
   42.45 +  "ALG_MEASURE_COMPL" > "HOL4Prob.prob.ALG_MEASURE_COMPL"
   42.46 +  "ALG_MEASURE_BASIC" > "HOL4Prob.prob.ALG_MEASURE_BASIC"
   42.47 +  "ALG_MEASURE_APPEND" > "HOL4Prob.prob.ALG_MEASURE_APPEND"
   42.48 +  "ALG_MEASURE_ADDITIVE" > "HOL4Prob.prob.ALG_MEASURE_ADDITIVE"
   42.49 +  "ALG_CANON_PREFS_MONO" > "HOL4Prob.prob.ALG_CANON_PREFS_MONO"
   42.50 +  "ALG_CANON_MONO" > "HOL4Prob.prob.ALG_CANON_MONO"
   42.51 +  "ALG_CANON_MERGE_MONO" > "HOL4Prob.prob.ALG_CANON_MERGE_MONO"
   42.52 +  "ALG_CANON_FIND_MONO" > "HOL4Prob.prob.ALG_CANON_FIND_MONO"
   42.53 +  "ALG_CANON2_MONO" > "HOL4Prob.prob.ALG_CANON2_MONO"
   42.54 +  "ALG_CANON1_MONO" > "HOL4Prob.prob.ALG_CANON1_MONO"
   42.55 +  "ALGEBRA_MEASURE_RANGE" > "HOL4Prob.prob.ALGEBRA_MEASURE_RANGE"
   42.56 +  "ALGEBRA_MEASURE_POS" > "HOL4Prob.prob.ALGEBRA_MEASURE_POS"
   42.57 +  "ALGEBRA_MEASURE_MONO_EMBED" > "HOL4Prob.prob.ALGEBRA_MEASURE_MONO_EMBED"
   42.58 +  "ALGEBRA_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_MEASURE_MAX"
   42.59 +  "ALGEBRA_MEASURE_DEF_ALT" > "HOL4Prob.prob.ALGEBRA_MEASURE_DEF_ALT"
   42.60 +  "ALGEBRA_MEASURE_BASIC" > "HOL4Prob.prob.ALGEBRA_MEASURE_BASIC"
   42.61 +  "ALGEBRA_CANON_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_CANON_MEASURE_MAX"
   42.62 +  "ABS_PROB" > "HOL4Prob.prob.ABS_PROB"
   42.63 +
   42.64 +end
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/src/HOL/Import/HOL/prob_algebra.imp	Fri Apr 02 17:37:45 2004 +0200
    43.3 @@ -0,0 +1,54 @@
    43.4 +import
    43.5 +
    43.6 +import_segment "hol4"
    43.7 +
    43.8 +def_maps
    43.9 +  "measurable" > "measurable_primdef"
   43.10 +  "algebra_embed" > "algebra_embed_primdef"
   43.11 +  "alg_embed" > "alg_embed_primdef"
   43.12 +
   43.13 +const_maps
   43.14 +  "measurable" > "HOL4Prob.prob_algebra.measurable"
   43.15 +
   43.16 +thm_maps
   43.17 +  "measurable_primdef" > "HOL4Prob.prob_algebra.measurable_primdef"
   43.18 +  "measurable_def" > "HOL4Prob.prob_algebra.measurable_def"
   43.19 +  "algebra_embed_def" > "HOL4Prob.prob_algebra.algebra_embed_def"
   43.20 +  "alg_embed_def" > "HOL4Prob.prob_algebra.alg_embed_def"
   43.21 +  "MEASURABLE_UNION" > "HOL4Prob.prob_algebra.MEASURABLE_UNION"
   43.22 +  "MEASURABLE_STL" > "HOL4Prob.prob_algebra.MEASURABLE_STL"
   43.23 +  "MEASURABLE_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_SHD"
   43.24 +  "MEASURABLE_SDROP" > "HOL4Prob.prob_algebra.MEASURABLE_SDROP"
   43.25 +  "MEASURABLE_INTER_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_SHD"
   43.26 +  "MEASURABLE_INTER_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_HALVES"
   43.27 +  "MEASURABLE_INTER" > "HOL4Prob.prob_algebra.MEASURABLE_INTER"
   43.28 +  "MEASURABLE_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_HALVES"
   43.29 +  "MEASURABLE_COMPL" > "HOL4Prob.prob_algebra.MEASURABLE_COMPL"
   43.30 +  "MEASURABLE_BASIC" > "HOL4Prob.prob_algebra.MEASURABLE_BASIC"
   43.31 +  "MEASURABLE_ALGEBRA" > "HOL4Prob.prob_algebra.MEASURABLE_ALGEBRA"
   43.32 +  "INTER_STL" > "HOL4Prob.prob_algebra.INTER_STL"
   43.33 +  "HALVES_INTER" > "HOL4Prob.prob_algebra.HALVES_INTER"
   43.34 +  "COMPL_SHD" > "HOL4Prob.prob_algebra.COMPL_SHD"
   43.35 +  "ALG_EMBED_TWINS" > "HOL4Prob.prob_algebra.ALG_EMBED_TWINS"
   43.36 +  "ALG_EMBED_PREFIX_SUBSET" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX_SUBSET"
   43.37 +  "ALG_EMBED_PREFIX" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX"
   43.38 +  "ALG_EMBED_POPULATED" > "HOL4Prob.prob_algebra.ALG_EMBED_POPULATED"
   43.39 +  "ALG_EMBED_NIL" > "HOL4Prob.prob_algebra.ALG_EMBED_NIL"
   43.40 +  "ALG_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALG_EMBED_BASIC"
   43.41 +  "ALG_CANON_REP" > "HOL4Prob.prob_algebra.ALG_CANON_REP"
   43.42 +  "ALG_CANON_PREFS_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_PREFS_EMBED"
   43.43 +  "ALG_CANON_MERGE_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_MERGE_EMBED"
   43.44 +  "ALG_CANON_FIND_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_FIND_EMBED"
   43.45 +  "ALG_CANON_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_EMBED"
   43.46 +  "ALG_CANON2_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON2_EMBED"
   43.47 +  "ALG_CANON1_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON1_EMBED"
   43.48 +  "ALGEBRA_EMBED_TLS" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_TLS"
   43.49 +  "ALGEBRA_EMBED_MEM" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_MEM"
   43.50 +  "ALGEBRA_EMBED_COMPL" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_COMPL"
   43.51 +  "ALGEBRA_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_BASIC"
   43.52 +  "ALGEBRA_EMBED_APPEND" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_APPEND"
   43.53 +  "ALGEBRA_CANON_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_UNIV"
   43.54 +  "ALGEBRA_CANON_EMBED_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_UNIV"
   43.55 +  "ALGEBRA_CANON_EMBED_EMPTY" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_EMPTY"
   43.56 +
   43.57 +end
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/src/HOL/Import/HOL/prob_canon.imp	Fri Apr 02 17:37:45 2004 +0200
    44.3 @@ -0,0 +1,147 @@
    44.4 +import
    44.5 +
    44.6 +import_segment "hol4"
    44.7 +
    44.8 +def_maps
    44.9 +  "algebra_canon" > "algebra_canon_primdef"
   44.10 +  "alg_twinfree" > "alg_twinfree_primdef"
   44.11 +  "alg_twin" > "alg_twin_primdef"
   44.12 +  "alg_sorted" > "alg_sorted_primdef"
   44.13 +  "alg_prefixfree" > "alg_prefixfree_primdef"
   44.14 +  "alg_order_tupled" > "alg_order_tupled_def"
   44.15 +  "alg_order" > "alg_order_primdef"
   44.16 +  "alg_longest" > "alg_longest_primdef"
   44.17 +  "alg_canon_prefs" > "alg_canon_prefs_primdef"
   44.18 +  "alg_canon_merge" > "alg_canon_merge_primdef"
   44.19 +  "alg_canon_find" > "alg_canon_find_primdef"
   44.20 +  "alg_canon2" > "alg_canon2_primdef"
   44.21 +  "alg_canon1" > "alg_canon1_primdef"
   44.22 +  "alg_canon" > "alg_canon_primdef"
   44.23 +
   44.24 +const_maps
   44.25 +  "algebra_canon" > "HOL4Prob.prob_canon.algebra_canon"
   44.26 +  "alg_twinfree" > "HOL4Prob.prob_canon.alg_twinfree"
   44.27 +  "alg_twin" > "HOL4Prob.prob_canon.alg_twin"
   44.28 +  "alg_sorted" > "HOL4Prob.prob_canon.alg_sorted"
   44.29 +  "alg_prefixfree" > "HOL4Prob.prob_canon.alg_prefixfree"
   44.30 +  "alg_order_tupled" > "HOL4Prob.prob_canon.alg_order_tupled"
   44.31 +  "alg_order" > "HOL4Prob.prob_canon.alg_order"
   44.32 +  "alg_longest" > "HOL4Prob.prob_canon.alg_longest"
   44.33 +  "alg_canon2" > "HOL4Prob.prob_canon.alg_canon2"
   44.34 +  "alg_canon1" > "HOL4Prob.prob_canon.alg_canon1"
   44.35 +  "alg_canon" > "HOL4Prob.prob_canon.alg_canon"
   44.36 +
   44.37 +thm_maps
   44.38 +  "algebra_canon_primdef" > "HOL4Prob.prob_canon.algebra_canon_primdef"
   44.39 +  "algebra_canon_def" > "HOL4Prob.prob_canon.algebra_canon_def"
   44.40 +  "alg_twinfree_primitive_def" > "HOL4Prob.prob_canon.alg_twinfree_primitive_def"
   44.41 +  "alg_twinfree_primdef" > "HOL4Prob.prob_canon.alg_twinfree_primdef"
   44.42 +  "alg_twinfree_ind" > "HOL4Prob.prob_canon.alg_twinfree_ind"
   44.43 +  "alg_twinfree_def" > "HOL4Prob.prob_canon.alg_twinfree_def"
   44.44 +  "alg_twin_primdef" > "HOL4Prob.prob_canon.alg_twin_primdef"
   44.45 +  "alg_twin_def" > "HOL4Prob.prob_canon.alg_twin_def"
   44.46 +  "alg_sorted_primitive_def" > "HOL4Prob.prob_canon.alg_sorted_primitive_def"
   44.47 +  "alg_sorted_primdef" > "HOL4Prob.prob_canon.alg_sorted_primdef"
   44.48 +  "alg_sorted_ind" > "HOL4Prob.prob_canon.alg_sorted_ind"
   44.49 +  "alg_sorted_def" > "HOL4Prob.prob_canon.alg_sorted_def"
   44.50 +  "alg_prefixfree_primitive_def" > "HOL4Prob.prob_canon.alg_prefixfree_primitive_def"
   44.51 +  "alg_prefixfree_primdef" > "HOL4Prob.prob_canon.alg_prefixfree_primdef"
   44.52 +  "alg_prefixfree_ind" > "HOL4Prob.prob_canon.alg_prefixfree_ind"
   44.53 +  "alg_prefixfree_def" > "HOL4Prob.prob_canon.alg_prefixfree_def"
   44.54 +  "alg_order_tupled_primitive_def" > "HOL4Prob.prob_canon.alg_order_tupled_primitive_def"
   44.55 +  "alg_order_tupled_def" > "HOL4Prob.prob_canon.alg_order_tupled_def"
   44.56 +  "alg_order_primdef" > "HOL4Prob.prob_canon.alg_order_primdef"
   44.57 +  "alg_order_ind" > "HOL4Prob.prob_canon.alg_order_ind"
   44.58 +  "alg_order_def" > "HOL4Prob.prob_canon.alg_order_def"
   44.59 +  "alg_order_curried_def" > "HOL4Prob.prob_canon.alg_order_curried_def"
   44.60 +  "alg_longest_primdef" > "HOL4Prob.prob_canon.alg_longest_primdef"
   44.61 +  "alg_longest_def" > "HOL4Prob.prob_canon.alg_longest_def"
   44.62 +  "alg_canon_primdef" > "HOL4Prob.prob_canon.alg_canon_primdef"
   44.63 +  "alg_canon_prefs_def" > "HOL4Prob.prob_canon.alg_canon_prefs_def"
   44.64 +  "alg_canon_merge_def" > "HOL4Prob.prob_canon.alg_canon_merge_def"
   44.65 +  "alg_canon_find_def" > "HOL4Prob.prob_canon.alg_canon_find_def"
   44.66 +  "alg_canon_def" > "HOL4Prob.prob_canon.alg_canon_def"
   44.67 +  "alg_canon2_primdef" > "HOL4Prob.prob_canon.alg_canon2_primdef"
   44.68 +  "alg_canon2_def" > "HOL4Prob.prob_canon.alg_canon2_def"
   44.69 +  "alg_canon1_primdef" > "HOL4Prob.prob_canon.alg_canon1_primdef"
   44.70 +  "alg_canon1_def" > "HOL4Prob.prob_canon.alg_canon1_def"
   44.71 +  "MEM_NIL_STEP" > "HOL4Prob.prob_canon.MEM_NIL_STEP"
   44.72 +  "ALG_TWIN_SING" > "HOL4Prob.prob_canon.ALG_TWIN_SING"
   44.73 +  "ALG_TWIN_REDUCE" > "HOL4Prob.prob_canon.ALG_TWIN_REDUCE"
   44.74 +  "ALG_TWIN_NIL" > "HOL4Prob.prob_canon.ALG_TWIN_NIL"
   44.75 +  "ALG_TWIN_CONS" > "HOL4Prob.prob_canon.ALG_TWIN_CONS"
   44.76 +  "ALG_TWINS_PREFIX" > "HOL4Prob.prob_canon.ALG_TWINS_PREFIX"
   44.77 +  "ALG_TWINFREE_TLS" > "HOL4Prob.prob_canon.ALG_TWINFREE_TLS"
   44.78 +  "ALG_TWINFREE_TL" > "HOL4Prob.prob_canon.ALG_TWINFREE_TL"
   44.79 +  "ALG_TWINFREE_STEP2" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP2"
   44.80 +  "ALG_TWINFREE_STEP1" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP1"
   44.81 +  "ALG_TWINFREE_STEP" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP"
   44.82 +  "ALG_SORTED_TLS" > "HOL4Prob.prob_canon.ALG_SORTED_TLS"
   44.83 +  "ALG_SORTED_TL" > "HOL4Prob.prob_canon.ALG_SORTED_TL"
   44.84 +  "ALG_SORTED_STEP" > "HOL4Prob.prob_canon.ALG_SORTED_STEP"
   44.85 +  "ALG_SORTED_PREFIXFREE_MEM_NIL" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_MEM_NIL"
   44.86 +  "ALG_SORTED_PREFIXFREE_EQUALITY" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_EQUALITY"
   44.87 +  "ALG_SORTED_MONO" > "HOL4Prob.prob_canon.ALG_SORTED_MONO"
   44.88 +  "ALG_SORTED_MIN" > "HOL4Prob.prob_canon.ALG_SORTED_MIN"
   44.89 +  "ALG_SORTED_FILTER" > "HOL4Prob.prob_canon.ALG_SORTED_FILTER"
   44.90 +  "ALG_SORTED_DEF_ALT" > "HOL4Prob.prob_canon.ALG_SORTED_DEF_ALT"
   44.91 +  "ALG_SORTED_APPEND" > "HOL4Prob.prob_canon.ALG_SORTED_APPEND"
   44.92 +  "ALG_PREFIXFREE_TLS" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TLS"
   44.93 +  "ALG_PREFIXFREE_TL" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TL"
   44.94 +  "ALG_PREFIXFREE_STEP" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_STEP"
   44.95 +  "ALG_PREFIXFREE_MONO" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_MONO"
   44.96 +  "ALG_PREFIXFREE_FILTER" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_FILTER"
   44.97 +  "ALG_PREFIXFREE_ELT" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_ELT"
   44.98 +  "ALG_PREFIXFREE_APPEND" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_APPEND"
   44.99 +  "ALG_ORDER_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_TRANS"
  44.100 +  "ALG_ORDER_TOTAL" > "HOL4Prob.prob_canon.ALG_ORDER_TOTAL"
  44.101 +  "ALG_ORDER_SNOC" > "HOL4Prob.prob_canon.ALG_ORDER_SNOC"
  44.102 +  "ALG_ORDER_REFL" > "HOL4Prob.prob_canon.ALG_ORDER_REFL"
  44.103 +  "ALG_ORDER_PREFIX_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_TRANS"
  44.104 +  "ALG_ORDER_PREFIX_MONO" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_MONO"
  44.105 +  "ALG_ORDER_PREFIX_ANTI" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_ANTI"
  44.106 +  "ALG_ORDER_PREFIX" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX"
  44.107 +  "ALG_ORDER_NIL" > "HOL4Prob.prob_canon.ALG_ORDER_NIL"
  44.108 +  "ALG_ORDER_ANTISYM" > "HOL4Prob.prob_canon.ALG_ORDER_ANTISYM"
  44.109 +  "ALG_LONGEST_TLS" > "HOL4Prob.prob_canon.ALG_LONGEST_TLS"
  44.110 +  "ALG_LONGEST_TL" > "HOL4Prob.prob_canon.ALG_LONGEST_TL"
  44.111 +  "ALG_LONGEST_HD" > "HOL4Prob.prob_canon.ALG_LONGEST_HD"
  44.112 +  "ALG_LONGEST_APPEND" > "HOL4Prob.prob_canon.ALG_LONGEST_APPEND"
  44.113 +  "ALG_CANON_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_SORTED_PREFIXFREE_TWINFREE"
  44.114 +  "ALG_CANON_PREFS_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_SORTED"
  44.115 +  "ALG_CANON_PREFS_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_PREFIXFREE"
  44.116 +  "ALG_CANON_PREFS_HD" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_HD"
  44.117 +  "ALG_CANON_PREFS_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_DELETES"
  44.118 +  "ALG_CANON_PREFS_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_CONSTANT"
  44.119 +  "ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE"
  44.120 +  "ALG_CANON_MERGE_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SHORTENS"
  44.121 +  "ALG_CANON_MERGE_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_PREFIXFREE_PRESERVE"
  44.122 +  "ALG_CANON_MERGE_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_CONSTANT"
  44.123 +  "ALG_CANON_IDEMPOT" > "HOL4Prob.prob_canon.ALG_CANON_IDEMPOT"
  44.124 +  "ALG_CANON_FIND_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_FIND_SORTED"
  44.125 +  "ALG_CANON_FIND_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_FIND_PREFIXFREE"
  44.126 +  "ALG_CANON_FIND_HD" > "HOL4Prob.prob_canon.ALG_CANON_FIND_HD"
  44.127 +  "ALG_CANON_FIND_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_FIND_DELETES"
  44.128 +  "ALG_CANON_FIND_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_FIND_CONSTANT"
  44.129 +  "ALG_CANON_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_CONSTANT"
  44.130 +  "ALG_CANON_BASIC" > "HOL4Prob.prob_canon.ALG_CANON_BASIC"
  44.131 +  "ALG_CANON2_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON2_SORTED_PREFIXFREE_TWINFREE"
  44.132 +  "ALG_CANON2_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON2_SHORTENS"
  44.133 +  "ALG_CANON2_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON2_PREFIXFREE_PRESERVE"
  44.134 +  "ALG_CANON2_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON2_CONSTANT"
  44.135 +  "ALG_CANON1_SORTED" > "HOL4Prob.prob_canon.ALG_CANON1_SORTED"
  44.136 +  "ALG_CANON1_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON1_PREFIXFREE"
  44.137 +  "ALG_CANON1_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON1_CONSTANT"
  44.138 +  "ALGEBRA_CANON_TLS" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TLS"
  44.139 +  "ALGEBRA_CANON_TL" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TL"
  44.140 +  "ALGEBRA_CANON_STEP2" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP2"
  44.141 +  "ALGEBRA_CANON_STEP1" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP1"
  44.142 +  "ALGEBRA_CANON_STEP" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP"
  44.143 +  "ALGEBRA_CANON_NIL_MEM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_NIL_MEM"
  44.144 +  "ALGEBRA_CANON_INDUCTION" > "HOL4Prob.prob_canon.ALGEBRA_CANON_INDUCTION"
  44.145 +  "ALGEBRA_CANON_DEF_ALT" > "HOL4Prob.prob_canon.ALGEBRA_CANON_DEF_ALT"
  44.146 +  "ALGEBRA_CANON_CASES_THM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES_THM"
  44.147 +  "ALGEBRA_CANON_CASES" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES"
  44.148 +  "ALGEBRA_CANON_BASIC" > "HOL4Prob.prob_canon.ALGEBRA_CANON_BASIC"
  44.149 +
  44.150 +end
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/src/HOL/Import/HOL/prob_extra.imp	Fri Apr 02 17:37:45 2004 +0200
    45.3 @@ -0,0 +1,96 @@
    45.4 +import
    45.5 +
    45.6 +import_segment "hol4"
    45.7 +
    45.8 +def_maps
    45.9 +  "inf" > "inf_primdef"
   45.10 +
   45.11 +const_maps
   45.12 +  "inf" > "HOL4Prob.prob_extra.inf"
   45.13 +  "COMPL" > "HOL4Base.pred_set.COMPL"
   45.14 +
   45.15 +thm_maps
   45.16 +  "inf_primdef" > "HOL4Prob.prob_extra.inf_primdef"
   45.17 +  "inf_def" > "HOL4Prob.prob_extra.inf_def"
   45.18 +  "X_HALF_HALF" > "HOL4Prob.prob_extra.X_HALF_HALF"
   45.19 +  "UNION_DISJOINT_SPLIT" > "HOL4Prob.prob_extra.UNION_DISJOINT_SPLIT"
   45.20 +  "UNION_DEF_ALT" > "HOL4Prob.prob_extra.UNION_DEF_ALT"
   45.21 +  "SUBSET_EQ_DECOMP" > "HOL4Base.pred_set.SUBSET_ANTISYM"
   45.22 +  "SUBSET_EQ" > "HOL4Prob.prob_extra.SUBSET_EQ"
   45.23 +  "SET_EQ_EXT" > "HOL4Base.pred_set.EXTENSION"
   45.24 +  "REAL_X_LE_SUP" > "HOL4Prob.prob_extra.REAL_X_LE_SUP"
   45.25 +  "REAL_SUP_MAX" > "HOL4Prob.prob_extra.REAL_SUP_MAX"
   45.26 +  "REAL_SUP_LE_X" > "HOL4Prob.prob_extra.REAL_SUP_LE_X"
   45.27 +  "REAL_SUP_EXISTS_UNIQUE" > "HOL4Prob.prob_extra.REAL_SUP_EXISTS_UNIQUE"
   45.28 +  "REAL_POW" > "RealPow.realpow_real_of_nat"
   45.29 +  "REAL_LE_INV_LE" > "Ring_and_Field.le_imp_inverse_le"
   45.30 +  "REAL_LE_EQ" > "Set.basic_trans_rules_26"
   45.31 +  "REAL_INVINV_ALL" > "Ring_and_Field.inverse_inverse_eq"
   45.32 +  "REAL_INF_MIN" > "HOL4Prob.prob_extra.REAL_INF_MIN"
   45.33 +  "RAND_THM" > "HOL.arg_cong"
   45.34 +  "POW_HALF_TWICE" > "HOL4Prob.prob_extra.POW_HALF_TWICE"
   45.35 +  "POW_HALF_POS" > "HOL4Prob.prob_extra.POW_HALF_POS"
   45.36 +  "POW_HALF_MONO" > "HOL4Prob.prob_extra.POW_HALF_MONO"
   45.37 +  "POW_HALF_EXP" > "HOL4Prob.prob_extra.POW_HALF_EXP"
   45.38 +  "ONE_MINUS_HALF" > "HOL4Prob.prob_extra.ONE_MINUS_HALF"
   45.39 +  "MOD_TWO" > "HOL4Prob.prob_extra.MOD_TWO"
   45.40 +  "MEM_NIL_MAP_CONS" > "HOL4Prob.prob_extra.MEM_NIL_MAP_CONS"
   45.41 +  "MEM_NIL" > "HOL4Prob.prob_extra.MEM_NIL"
   45.42 +  "MEM_FILTER" > "HOL4Prob.prob_extra.MEM_FILTER"
   45.43 +  "MAP_MEM" > "HOL4Prob.prob_extra.MAP_MEM"
   45.44 +  "MAP_ID" > "List.map_ident"
   45.45 +  "LENGTH_FILTER" > "List.length_filter"
   45.46 +  "LAST_MEM" > "HOL4Prob.prob_extra.LAST_MEM"
   45.47 +  "LAST_MAP_CONS" > "HOL4Prob.prob_extra.LAST_MAP_CONS"
   45.48 +  "IS_PREFIX_TRANS" > "HOL4Prob.prob_extra.IS_PREFIX_TRANS"
   45.49 +  "IS_PREFIX_SNOC" > "HOL4Prob.prob_extra.IS_PREFIX_SNOC"
   45.50 +  "IS_PREFIX_REFL" > "HOL4Prob.prob_extra.IS_PREFIX_REFL"
   45.51 +  "IS_PREFIX_NIL" > "HOL4Prob.prob_extra.IS_PREFIX_NIL"
   45.52 +  "IS_PREFIX_LENGTH_ANTI" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH_ANTI"
   45.53 +  "IS_PREFIX_LENGTH" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH"
   45.54 +  "IS_PREFIX_BUTLAST" > "HOL4Prob.prob_extra.IS_PREFIX_BUTLAST"
   45.55 +  "IS_PREFIX_ANTISYM" > "HOL4Prob.prob_extra.IS_PREFIX_ANTISYM"
   45.56 +  "IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
   45.57 +  "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
   45.58 +  "INV_SUC_POS" > "HOL4Prob.prob_extra.INV_SUC_POS"
   45.59 +  "INV_SUC_MAX" > "HOL4Prob.prob_extra.INV_SUC_MAX"
   45.60 +  "INV_SUC" > "HOL4Prob.prob_extra.INV_SUC"
   45.61 +  "INTER_UNION_RDISTRIB" > "HOL4Prob.prob_extra.INTER_UNION_RDISTRIB"
   45.62 +  "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
   45.63 +  "INTER_IS_EMPTY" > "HOL4Prob.prob_extra.INTER_IS_EMPTY"
   45.64 +  "INF_DEF_ALT" > "HOL4Prob.prob_extra.INF_DEF_ALT"
   45.65 +  "HALF_POS" > "HOL4Prob.prob_extra.HALF_POS"
   45.66 +  "HALF_LT_1" > "HOL4Prob.prob_extra.HALF_LT_1"
   45.67 +  "HALF_CANCEL" > "HOL4Prob.prob_extra.HALF_CANCEL"
   45.68 +  "GSPEC_DEF_ALT" > "HOL4Prob.prob_extra.GSPEC_DEF_ALT"
   45.69 +  "FOLDR_MAP" > "HOL4Prob.prob_extra.FOLDR_MAP"
   45.70 +  "FILTER_TRUE" > "HOL4Prob.prob_extra.FILTER_TRUE"
   45.71 +  "FILTER_OUT_ELT" > "HOL4Prob.prob_extra.FILTER_OUT_ELT"
   45.72 +  "FILTER_MEM" > "HOL4Prob.prob_extra.FILTER_MEM"
   45.73 +  "FILTER_FALSE" > "HOL4Prob.prob_extra.FILTER_FALSE"
   45.74 +  "EXP_DIV_TWO" > "HOL4Prob.prob_extra.EXP_DIV_TWO"
   45.75 +  "EXISTS_LONGEST" > "HOL4Prob.prob_extra.EXISTS_LONGEST"
   45.76 +  "EVEN_ODD_EXISTS_EQ" > "HOL4Prob.prob_extra.EVEN_ODD_EXISTS_EQ"
   45.77 +  "EVEN_ODD_BASIC" > "HOL4Prob.prob_extra.EVEN_ODD_BASIC"
   45.78 +  "EVEN_EXP_TWO" > "HOL4Prob.prob_extra.EVEN_EXP_TWO"
   45.79 +  "EQ_EXT_EQ" > "Fun.expand_fun_eq"
   45.80 +  "DIV_TWO_UNIQUE" > "HOL4Prob.prob_extra.DIV_TWO_UNIQUE"
   45.81 +  "DIV_TWO_MONO_EVEN" > "HOL4Prob.prob_extra.DIV_TWO_MONO_EVEN"
   45.82 +  "DIV_TWO_MONO" > "HOL4Prob.prob_extra.DIV_TWO_MONO"
   45.83 +  "DIV_TWO_EXP" > "HOL4Prob.prob_extra.DIV_TWO_EXP"
   45.84 +  "DIV_TWO_CANCEL" > "HOL4Prob.prob_extra.DIV_TWO_CANCEL"
   45.85 +  "DIV_TWO_BASIC" > "HOL4Prob.prob_extra.DIV_TWO_BASIC"
   45.86 +  "DIV_TWO" > "HOL4Prob.prob_extra.DIV_TWO"
   45.87 +  "DIV_THEN_MULT" > "HOL4Prob.prob_extra.DIV_THEN_MULT"
   45.88 +  "DIVISION_TWO" > "HOL4Prob.prob_extra.DIVISION_TWO"
   45.89 +  "COMPL_def" > "HOL4Base.pred_set.COMPL_DEF"
   45.90 +  "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
   45.91 +  "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
   45.92 +  "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
   45.93 +  "BOOL_BOOL_CASES_THM" > "HOL4Prob.prob_extra.BOOL_BOOL_CASES_THM"
   45.94 +  "BOOL_BOOL_CASES" > "HOL4Base.bool.BOOL_FUN_INDUCT"
   45.95 +  "APPEND_MEM" > "HOL4Base.list.MEM_APPEND"
   45.96 +  "ABS_UNIT_INTERVAL" > "HOL4Prob.prob_extra.ABS_UNIT_INTERVAL"
   45.97 +  "ABS_BETWEEN_LE" > "HOL4Prob.prob_extra.ABS_BETWEEN_LE"
   45.98 +
   45.99 +end
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/src/HOL/Import/HOL/prob_indep.imp	Fri Apr 02 17:37:45 2004 +0200
    46.3 @@ -0,0 +1,56 @@
    46.4 +import
    46.5 +
    46.6 +import_segment "hol4"
    46.7 +
    46.8 +def_maps
    46.9 +  "indep_set" > "indep_set_primdef"
   46.10 +  "indep" > "indep_primdef"
   46.11 +  "alg_cover_set" > "alg_cover_set_primdef"
   46.12 +  "alg_cover" > "alg_cover_primdef"
   46.13 +
   46.14 +const_maps
   46.15 +  "indep_set" > "HOL4Prob.prob_indep.indep_set"
   46.16 +  "indep" > "HOL4Prob.prob_indep.indep"
   46.17 +  "alg_cover_set" > "HOL4Prob.prob_indep.alg_cover_set"
   46.18 +  "alg_cover" > "HOL4Prob.prob_indep.alg_cover"
   46.19 +
   46.20 +thm_maps
   46.21 +  "indep_set_primdef" > "HOL4Prob.prob_indep.indep_set_primdef"
   46.22 +  "indep_set_def" > "HOL4Prob.prob_indep.indep_set_def"
   46.23 +  "indep_primdef" > "HOL4Prob.prob_indep.indep_primdef"
   46.24 +  "indep_def" > "HOL4Prob.prob_indep.indep_def"
   46.25 +  "alg_cover_set_primdef" > "HOL4Prob.prob_indep.alg_cover_set_primdef"
   46.26 +  "alg_cover_set_def" > "HOL4Prob.prob_indep.alg_cover_set_def"
   46.27 +  "alg_cover_primdef" > "HOL4Prob.prob_indep.alg_cover_primdef"
   46.28 +  "alg_cover_def" > "HOL4Prob.prob_indep.alg_cover_def"
   46.29 +  "PROB_INDEP_BOUND" > "HOL4Prob.prob_indep.PROB_INDEP_BOUND"
   46.30 +  "MAP_CONS_TL_FILTER" > "HOL4Prob.prob_indep.MAP_CONS_TL_FILTER"
   46.31 +  "INDEP_UNIT" > "HOL4Prob.prob_indep.INDEP_UNIT"
   46.32 +  "INDEP_SET_SYM" > "HOL4Prob.prob_indep.INDEP_SET_SYM"
   46.33 +  "INDEP_SET_LIST" > "HOL4Prob.prob_indep.INDEP_SET_LIST"
   46.34 +  "INDEP_SET_DISJOINT_DECOMP" > "HOL4Prob.prob_indep.INDEP_SET_DISJOINT_DECOMP"
   46.35 +  "INDEP_SET_BASIC" > "HOL4Prob.prob_indep.INDEP_SET_BASIC"
   46.36 +  "INDEP_SDEST" > "HOL4Prob.prob_indep.INDEP_SDEST"
   46.37 +  "INDEP_PROB" > "HOL4Prob.prob_indep.INDEP_PROB"
   46.38 +  "INDEP_MEASURABLE2" > "HOL4Prob.prob_indep.INDEP_MEASURABLE2"
   46.39 +  "INDEP_MEASURABLE1" > "HOL4Prob.prob_indep.INDEP_MEASURABLE1"
   46.40 +  "INDEP_INDEP_SET_LEMMA" > "HOL4Prob.prob_indep.INDEP_INDEP_SET_LEMMA"
   46.41 +  "INDEP_INDEP_SET" > "HOL4Prob.prob_indep.INDEP_INDEP_SET"
   46.42 +  "INDEP_BIND_SDEST" > "HOL4Prob.prob_indep.INDEP_BIND_SDEST"
   46.43 +  "INDEP_BIND" > "HOL4Prob.prob_indep.INDEP_BIND"
   46.44 +  "BIND_STEP" > "HOL4Prob.prob_indep.BIND_STEP"
   46.45 +  "ALG_COVER_WELL_DEFINED" > "HOL4Prob.prob_indep.ALG_COVER_WELL_DEFINED"
   46.46 +  "ALG_COVER_UNIV" > "HOL4Prob.prob_indep.ALG_COVER_UNIV"
   46.47 +  "ALG_COVER_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_UNIQUE"
   46.48 +  "ALG_COVER_TAIL_STEP" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_STEP"
   46.49 +  "ALG_COVER_TAIL_PROB" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_PROB"
   46.50 +  "ALG_COVER_TAIL_MEASURABLE" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_MEASURABLE"
   46.51 +  "ALG_COVER_STEP" > "HOL4Prob.prob_indep.ALG_COVER_STEP"
   46.52 +  "ALG_COVER_SET_INDUCTION" > "HOL4Prob.prob_indep.ALG_COVER_SET_INDUCTION"
   46.53 +  "ALG_COVER_SET_CASES_THM" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES_THM"
   46.54 +  "ALG_COVER_SET_CASES" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES"
   46.55 +  "ALG_COVER_SET_BASIC" > "HOL4Prob.prob_indep.ALG_COVER_SET_BASIC"
   46.56 +  "ALG_COVER_HEAD" > "HOL4Prob.prob_indep.ALG_COVER_HEAD"
   46.57 +  "ALG_COVER_EXISTS_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_EXISTS_UNIQUE"
   46.58 +
   46.59 +end
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/src/HOL/Import/HOL/prob_pseudo.imp	Fri Apr 02 17:37:45 2004 +0200
    47.3 @@ -0,0 +1,26 @@
    47.4 +import
    47.5 +
    47.6 +import_segment "hol4"
    47.7 +
    47.8 +def_maps
    47.9 +  "pseudo_linear_tl" > "pseudo_linear_tl_primdef"
   47.10 +  "pseudo_linear_hd" > "pseudo_linear_hd_primdef"
   47.11 +  "pseudo_linear1" > "pseudo_linear1_primdef"
   47.12 +  "pseudo" > "pseudo_primdef"
   47.13 +
   47.14 +const_maps
   47.15 +  "pseudo_linear_tl" > "HOL4Prob.prob_pseudo.pseudo_linear_tl"
   47.16 +  "pseudo_linear_hd" > "HOL4Prob.prob_pseudo.pseudo_linear_hd"
   47.17 +  "pseudo" > "HOL4Prob.prob_pseudo.pseudo"
   47.18 +
   47.19 +thm_maps
   47.20 +  "pseudo_primdef" > "HOL4Prob.prob_pseudo.pseudo_primdef"
   47.21 +  "pseudo_linear_tl_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_primdef"
   47.22 +  "pseudo_linear_tl_def" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_def"
   47.23 +  "pseudo_linear_hd_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_primdef"
   47.24 +  "pseudo_linear_hd_def" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_def"
   47.25 +  "pseudo_linear1_def" > "HOL4Prob.prob_pseudo.pseudo_linear1_def"
   47.26 +  "pseudo_def" > "HOL4Prob.prob_pseudo.pseudo_def"
   47.27 +  "PSEUDO_LINEAR1_EXECUTE" > "HOL4Prob.prob_pseudo.PSEUDO_LINEAR1_EXECUTE"
   47.28 +
   47.29 +end
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/src/HOL/Import/HOL/prob_uniform.imp	Fri Apr 02 17:37:45 2004 +0200
    48.3 @@ -0,0 +1,57 @@
    48.4 +import
    48.5 +
    48.6 +import_segment "hol4"
    48.7 +
    48.8 +def_maps
    48.9 +  "uniform_tupled" > "uniform_tupled_def"
   48.10 +  "uniform" > "uniform_primdef"
   48.11 +  "unif_tupled" > "unif_tupled_def"
   48.12 +  "unif_bound" > "unif_bound_primdef"
   48.13 +  "unif" > "unif_primdef"
   48.14 +
   48.15 +const_maps
   48.16 +  "uniform_tupled" > "HOL4Prob.prob_uniform.uniform_tupled"
   48.17 +  "uniform" > "HOL4Prob.prob_uniform.uniform"
   48.18 +  "unif_tupled" > "HOL4Prob.prob_uniform.unif_tupled"
   48.19 +  "unif_bound" > "HOL4Prob.prob_uniform.unif_bound"
   48.20 +  "unif" > "HOL4Prob.prob_uniform.unif"
   48.21 +
   48.22 +thm_maps
   48.23 +  "uniform_tupled_primitive_def" > "HOL4Prob.prob_uniform.uniform_tupled_primitive_def"
   48.24 +  "uniform_tupled_def" > "HOL4Prob.prob_uniform.uniform_tupled_def"
   48.25 +  "uniform_primdef" > "HOL4Prob.prob_uniform.uniform_primdef"
   48.26 +  "uniform_ind" > "HOL4Prob.prob_uniform.uniform_ind"
   48.27 +  "uniform_def" > "HOL4Prob.prob_uniform.uniform_def"
   48.28 +  "uniform_curried_def" > "HOL4Prob.prob_uniform.uniform_curried_def"
   48.29 +  "unif_tupled_primitive_def" > "HOL4Prob.prob_uniform.unif_tupled_primitive_def"
   48.30 +  "unif_tupled_def" > "HOL4Prob.prob_uniform.unif_tupled_def"
   48.31 +  "unif_primdef" > "HOL4Prob.prob_uniform.unif_primdef"
   48.32 +  "unif_ind" > "HOL4Prob.prob_uniform.unif_ind"
   48.33 +  "unif_def" > "HOL4Prob.prob_uniform.unif_def"
   48.34 +  "unif_curried_def" > "HOL4Prob.prob_uniform.unif_curried_def"
   48.35 +  "unif_bound_primitive_def" > "HOL4Prob.prob_uniform.unif_bound_primitive_def"
   48.36 +  "unif_bound_primdef" > "HOL4Prob.prob_uniform.unif_bound_primdef"
   48.37 +  "unif_bound_ind" > "HOL4Prob.prob_uniform.unif_bound_ind"
   48.38 +  "unif_bound_def" > "HOL4Prob.prob_uniform.unif_bound_def"
   48.39 +  "UNIF_RANGE" > "HOL4Prob.prob_uniform.UNIF_RANGE"
   48.40 +  "UNIF_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIF_DEF_MONAD"
   48.41 +  "UNIF_BOUND_UPPER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER_SUC"
   48.42 +  "UNIF_BOUND_UPPER" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER"
   48.43 +  "UNIF_BOUND_LOWER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER_SUC"
   48.44 +  "UNIF_BOUND_LOWER" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER"
   48.45 +  "UNIFORM_RANGE" > "HOL4Prob.prob_uniform.UNIFORM_RANGE"
   48.46 +  "UNIFORM_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIFORM_DEF_MONAD"
   48.47 +  "SUC_DIV_TWO_ZERO" > "HOL4Prob.prob_uniform.SUC_DIV_TWO_ZERO"
   48.48 +  "PROB_UNIF_PAIR" > "HOL4Prob.prob_uniform.PROB_UNIF_PAIR"
   48.49 +  "PROB_UNIF_GOOD" > "HOL4Prob.prob_uniform.PROB_UNIF_GOOD"
   48.50 +  "PROB_UNIF_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIF_BOUND"
   48.51 +  "PROB_UNIFORM_UPPER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_UPPER_BOUND"
   48.52 +  "PROB_UNIFORM_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_SUC"
   48.53 +  "PROB_UNIFORM_PAIR_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_PAIR_SUC"
   48.54 +  "PROB_UNIFORM_LOWER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_LOWER_BOUND"
   48.55 +  "PROB_UNIFORM" > "HOL4Prob.prob_uniform.PROB_UNIFORM"
   48.56 +  "PROB_UNIF" > "HOL4Prob.prob_uniform.PROB_UNIF"
   48.57 +  "INDEP_UNIFORM" > "HOL4Prob.prob_uniform.INDEP_UNIFORM"
   48.58 +  "INDEP_UNIF" > "HOL4Prob.prob_uniform.INDEP_UNIF"
   48.59 +
   48.60 +end
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/src/HOL/Import/HOL/real.imp	Fri Apr 02 17:37:45 2004 +0200
    49.3 @@ -0,0 +1,359 @@
    49.4 +import
    49.5 +
    49.6 +import_segment "hol4"
    49.7 +
    49.8 +def_maps
    49.9 +  "sup" > "sup_def"
   49.10 +  "sumc" > "sumc_def"
   49.11 +  "sum" > "sum_def"
   49.12 +
   49.13 +const_maps
   49.14 +  "sup" > "HOL4Real.real.sup"
   49.15 +  "sum" > "HOL4Real.real.sum"
   49.16 +  "real_sub" > "op -" :: "real => real => real"
   49.17 +  "real_of_num" > "RealDef.real" :: "nat => real"
   49.18 +  "real_lte" > "op <=" :: "real => real => bool"
   49.19 +  "real_gt" > "HOL4Compat.real_gt"
   49.20 +  "real_ge" > "HOL4Compat.real_ge"
   49.21 +  "pow" > "Nat.power" :: "real => nat => real"
   49.22 +  "abs" > "HOL.abs" :: "real => real"
   49.23 +  "/" > "HOL.divide" :: "real => real => real"
   49.24 +
   49.25 +thm_maps
   49.26 +  "sup_def" > "HOL4Real.real.sup_def"
   49.27 +  "sup" > "HOL4Real.real.sup"
   49.28 +  "sumc" > "HOL4Real.real.sumc"
   49.29 +  "sum_def" > "HOL4Real.real.sum_def"
   49.30 +  "sum" > "HOL4Real.real.sum"
   49.31 +  "real_sub" > "Ring_and_Field.compare_rls_1"
   49.32 +  "real_of_num" > "HOL4Compat.real_of_num"
   49.33 +  "real_lte" > "HOL4Compat.real_lte"
   49.34 +  "real_lt" > "HOL.linorder_not_le"
   49.35 +  "real_gt" > "HOL4Compat.real_gt"
   49.36 +  "real_ge" > "HOL4Compat.real_ge"
   49.37 +  "real_div" > "Ring_and_Field.field.divide_inverse"
   49.38 +  "pow" > "HOL4Compat.pow"
   49.39 +  "abs" > "HOL4Compat.abs"
   49.40 +  "SUP_LEMMA3" > "HOL4Real.real.SUP_LEMMA3"
   49.41 +  "SUP_LEMMA2" > "HOL4Real.real.SUP_LEMMA2"
   49.42 +  "SUP_LEMMA1" > "HOL4Real.real.SUP_LEMMA1"
   49.43 +  "SUM_ZERO" > "HOL4Real.real.SUM_ZERO"
   49.44 +  "SUM_TWO" > "HOL4Real.real.SUM_TWO"
   49.45 +  "SUM_SUBST" > "HOL4Real.real.SUM_SUBST"
   49.46 +  "SUM_SUB" > "HOL4Real.real.SUM_SUB"
   49.47 +  "SUM_REINDEX" > "HOL4Real.real.SUM_REINDEX"
   49.48 +  "SUM_POS_GEN" > "HOL4Real.real.SUM_POS_GEN"
   49.49 +  "SUM_POS" > "HOL4Real.real.SUM_POS"
   49.50 +  "SUM_PERMUTE_0" > "HOL4Real.real.SUM_PERMUTE_0"
   49.51 +  "SUM_OFFSET" > "HOL4Real.real.SUM_OFFSET"
   49.52 +  "SUM_NSUB" > "HOL4Real.real.SUM_NSUB"
   49.53 +  "SUM_NEG" > "HOL4Real.real.SUM_NEG"
   49.54 +  "SUM_LE" > "HOL4Real.real.SUM_LE"
   49.55 +  "SUM_GROUP" > "HOL4Real.real.SUM_GROUP"
   49.56 +  "SUM_EQ" > "HOL4Real.real.SUM_EQ"
   49.57 +  "SUM_DIFF" > "HOL4Real.real.SUM_DIFF"
   49.58 +  "SUM_DEF" > "HOL4Real.real.SUM_DEF"
   49.59 +  "SUM_CMUL" > "HOL4Real.real.SUM_CMUL"
   49.60 +  "SUM_CANCEL" > "HOL4Real.real.SUM_CANCEL"
   49.61 +  "SUM_BOUND" > "HOL4Real.real.SUM_BOUND"
   49.62 +  "SUM_ADD" > "HOL4Real.real.SUM_ADD"
   49.63 +  "SUM_ABS_LE" > "HOL4Real.real.SUM_ABS_LE"
   49.64 +  "SUM_ABS" > "HOL4Real.real.SUM_ABS"
   49.65 +  "SUM_2" > "HOL4Real.real.SUM_2"
   49.66 +  "SUM_1" > "HOL4Real.real.SUM_1"
   49.67 +  "SUM_0" > "HOL4Real.real.SUM_0"
   49.68 +  "SETOK_LE_LT" > "HOL4Real.real.SETOK_LE_LT"
   49.69 +  "REAL_SUP_UBOUND_LE" > "HOL4Real.real.REAL_SUP_UBOUND_LE"
   49.70 +  "REAL_SUP_UBOUND" > "HOL4Real.real.REAL_SUP_UBOUND"
   49.71 +  "REAL_SUP_SOMEPOS" > "HOL4Real.real.REAL_SUP_SOMEPOS"
   49.72 +  "REAL_SUP_LE" > "HOL4Real.real.REAL_SUP_LE"
   49.73 +  "REAL_SUP_EXISTS" > "HOL4Real.real.REAL_SUP_EXISTS"
   49.74 +  "REAL_SUP_ALLPOS" > "HOL4Compat.REAL_SUP_ALLPOS"
   49.75 +  "REAL_SUP" > "HOL4Real.real.REAL_SUP"
   49.76 +  "REAL_SUMSQ" > "HOL4Real.real.REAL_SUMSQ"
   49.77 +  "REAL_SUB_TRIANGLE" > "HOL4Real.real.REAL_SUB_TRIANGLE"
   49.78 +  "REAL_SUB_SUB2" > "HOL4Real.real.REAL_SUB_SUB2"
   49.79 +  "REAL_SUB_SUB" > "HOL4Real.real.REAL_SUB_SUB"
   49.80 +  "REAL_SUB_RZERO" > "Ring_and_Field.diff_0_right"
   49.81 +  "REAL_SUB_RNEG" > "Ring_and_Field.diff_minus_eq_add"
   49.82 +  "REAL_SUB_REFL" > "Ring_and_Field.diff_self"
   49.83 +  "REAL_SUB_RDISTRIB" > "Ring_and_Field.left_diff_distrib"
   49.84 +  "REAL_SUB_NEG2" > "HOL4Real.real.REAL_SUB_NEG2"
   49.85 +  "REAL_SUB_LZERO" > "Ring_and_Field.diff_0"
   49.86 +  "REAL_SUB_LT" > "RealDef.real_0_less_diff_iff"
   49.87 +  "REAL_SUB_LNEG" > "HOL4Real.real.REAL_SUB_LNEG"
   49.88 +  "REAL_SUB_LE" > "RealDef.real_0_le_diff_iff"
   49.89 +  "REAL_SUB_LDISTRIB" > "Ring_and_Field.right_diff_distrib"
   49.90 +  "REAL_SUB_INV2" > "HOL4Real.real.REAL_SUB_INV2"
   49.91 +  "REAL_SUB_ADD2" > "Ring_and_Field.add_minus_self_left"
   49.92 +  "REAL_SUB_ADD" > "Ring_and_Field.minus_add_self"
   49.93 +  "REAL_SUB_ABS" > "HOL4Real.real.REAL_SUB_ABS"
   49.94 +  "REAL_SUB_0" > "Ring_and_Field.eq_iff_diff_eq_0"
   49.95 +  "REAL_RNEG_UNIQ" > "RealDef.real_add_eq_0_iff"
   49.96 +  "REAL_RINV_UNIQ" > "RealDef.real_inverse_unique"
   49.97 +  "REAL_RDISTRIB" > "Ring_and_Field.ring_distrib_2"
   49.98 +  "REAL_POW_POW" > "Power.power_mult"
   49.99 +  "REAL_POW_MONO_LT" > "Power.power_strict_increasing"
  49.100 +  "REAL_POW_LT2" > "HOL4Real.real.REAL_POW_LT2"
  49.101 +  "REAL_POW_LT" > "Power.zero_less_power"
  49.102 +  "REAL_POW_INV" > "Power.power_inverse"
  49.103 +  "REAL_POW_DIV" > "Power.power_divide"
  49.104 +  "REAL_POW_ADD" > "Power.power_add"
  49.105 +  "REAL_POW2_ABS" > "NatBin.power2_abs"
  49.106 +  "REAL_POS_NZ" > "HOL4Real.real.REAL_POS_NZ"
  49.107 +  "REAL_POS" > "RealDef.real_of_nat_ge_zero"
  49.108 +  "REAL_POASQ" > "HOL4Real.real.REAL_POASQ"
  49.109 +  "REAL_OVER1" > "Ring_and_Field.divide_1"
  49.110 +  "REAL_OF_NUM_SUC" > "RealDef.real_of_nat_Suc"
  49.111 +  "REAL_OF_NUM_POW" > "RealPow.realpow_real_of_nat"
  49.112 +  "REAL_OF_NUM_MUL" > "RealDef.real_of_nat_mult"
  49.113 +  "REAL_OF_NUM_LE" > "RealDef.real_of_nat_le_iff"
  49.114 +  "REAL_OF_NUM_EQ" > "RealDef.real_of_nat_inject"
  49.115 +  "REAL_OF_NUM_ADD" > "RealDef.real_of_nat_add"
  49.116 +  "REAL_NZ_IMP_LT" > "HOL4Real.real.REAL_NZ_IMP_LT"
  49.117 +  "REAL_NOT_LT" > "HOL4Compat.real_lte"
  49.118 +  "REAL_NOT_LE" > "HOL.linorder_not_le"
  49.119 +  "REAL_NEG_SUB" > "Ring_and_Field.minus_diff_eq"
  49.120 +  "REAL_NEG_RMUL" > "Ring_and_Field.minus_mult_right"
  49.121 +  "REAL_NEG_NEG" > "Ring_and_Field.minus_minus"
  49.122 +  "REAL_NEG_MUL2" > "Ring_and_Field.minus_mult_minus"
  49.123 +  "REAL_NEG_MINUS1" > "HOL4Real.real.REAL_NEG_MINUS1"
  49.124 +  "REAL_NEG_LT0" > "Ring_and_Field.neg_less_0_iff_less"
  49.125 +  "REAL_NEG_LMUL" > "Ring_and_Field.minus_mult_left"
  49.126 +  "REAL_NEG_LE0" > "Ring_and_Field.neg_le_0_iff_le"
  49.127 +  "REAL_NEG_INV" > "Ring_and_Field.nonzero_inverse_minus_eq"
  49.128 +  "REAL_NEG_GT0" > "Ring_and_Field.neg_0_less_iff_less"
  49.129 +  "REAL_NEG_GE0" > "Ring_and_Field.neg_0_le_iff_le"
  49.130 +  "REAL_NEG_EQ0" > "Ring_and_Field.neg_equal_0_iff_equal"
  49.131 +  "REAL_NEG_EQ" > "HOL4Real.real.REAL_NEG_EQ"
  49.132 +  "REAL_NEG_ADD" > "Ring_and_Field.minus_add_distrib"
  49.133 +  "REAL_NEG_0" > "Ring_and_Field.minus_zero"
  49.134 +  "REAL_NEGNEG" > "Ring_and_Field.minus_minus"
  49.135 +  "REAL_MUL_SYM" > "Ring_and_Field.mult_ac_2"
  49.136 +  "REAL_MUL_RZERO" > "Ring_and_Field.mult_zero_right"
  49.137 +  "REAL_MUL_RNEG" > "Ring_and_Field.minus_mult_right"
  49.138 +  "REAL_MUL_RINV" > "Ring_and_Field.right_inverse"
  49.139 +  "REAL_MUL_RID" > "Ring_and_Field.mult_1_right"
  49.140 +  "REAL_MUL_LZERO" > "Ring_and_Field.mult_zero_left"
  49.141 +  "REAL_MUL_LNEG" > "Ring_and_Field.minus_mult_left"
  49.142 +  "REAL_MUL_LINV" > "HOL4Compat.REAL_MUL_LINV"
  49.143 +  "REAL_MUL_LID" > "Ring_and_Field.almost_semiring.mult_1"
  49.144 +  "REAL_MUL_ASSOC" > "HOL4Compat.REAL_MUL_ASSOC"
  49.145 +  "REAL_MUL" > "RealDef.real_of_nat_mult"
  49.146 +  "REAL_MIDDLE2" > "HOL4Real.real.REAL_MIDDLE2"
  49.147 +  "REAL_MIDDLE1" > "HOL4Real.real.REAL_MIDDLE1"
  49.148 +  "REAL_MEAN" > "Ring_and_Field.dense"
  49.149 +  "REAL_LT_TRANS" > "Set.basic_trans_rules_21"
  49.150 +  "REAL_LT_TOTAL" > "HOL4Compat.REAL_LT_TOTAL"
  49.151 +  "REAL_LT_SUB_RADD" > "Ring_and_Field.compare_rls_6"
  49.152 +  "REAL_LT_SUB_LADD" > "Ring_and_Field.compare_rls_7"
  49.153 +  "REAL_LT_RMUL_IMP" > "Ring_and_Field.mult_strict_right_mono"
  49.154 +  "REAL_LT_RMUL_0" > "HOL4Real.real.REAL_LT_RMUL_0"
  49.155 +  "REAL_LT_RMUL" > "RealDef.real_mult_less_iff1"
  49.156 +  "REAL_LT_REFL" > "HOL.order_less_irrefl"
  49.157 +  "REAL_LT_RDIV_EQ" > "Ring_and_Field.pos_less_divide_eq"
  49.158 +  "REAL_LT_RDIV_0" > "HOL4Real.real.REAL_LT_RDIV_0"
  49.159 +  "REAL_LT_RDIV" > "HOL4Real.real.REAL_LT_RDIV"
  49.160 +  "REAL_LT_RADD" > "Ring_and_Field.add_less_cancel_right"
  49.161 +  "REAL_LT_NZ" > "HOL4Real.real.REAL_LT_NZ"
  49.162 +  "REAL_LT_NEGTOTAL" > "HOL4Real.real.REAL_LT_NEGTOTAL"
  49.163 +  "REAL_LT_NEG" > "Ring_and_Field.neg_less_iff_less"
  49.164 +  "REAL_LT_MULTIPLE" > "HOL4Real.real.REAL_LT_MULTIPLE"
  49.165 +  "REAL_LT_MUL2" > "Ring_and_Field.mult_strict_mono'"
  49.166 +  "REAL_LT_MUL" > "Ring_and_Field.mult_pos"
  49.167 +  "REAL_LT_LMUL_IMP" > "Ring_and_Field.almost_ordered_semiring.mult_strict_left_mono"
  49.168 +  "REAL_LT_LMUL_0" > "HOL4Real.real.REAL_LT_LMUL_0"
  49.169 +  "REAL_LT_LMUL" > "HOL4Real.real.REAL_LT_LMUL"
  49.170 +  "REAL_LT_LE" > "HOL.order.order_less_le"
  49.171 +  "REAL_LT_LDIV_EQ" > "Ring_and_Field.pos_divide_less_eq"
  49.172 +  "REAL_LT_LADD" > "Ring_and_Field.add_less_cancel_left"
  49.173 +  "REAL_LT_INV_EQ" > "Ring_and_Field.inverse_positive_iff_positive"
  49.174 +  "REAL_LT_INV" > "Ring_and_Field.less_imp_inverse_less"
  49.175 +  "REAL_LT_IMP_NE" > "HOL.less_imp_neq"
  49.176 +  "REAL_LT_IMP_LE" > "HOL.order_less_imp_le"
  49.177 +  "REAL_LT_IADD" > "Ring_and_Field.add_strict_left_mono"
  49.178 +  "REAL_LT_HALF2" > "HOL4Real.real.REAL_LT_HALF2"
  49.179 +  "REAL_LT_HALF1" > "NatSimprocs.half_gt_zero_iff"
  49.180 +  "REAL_LT_GT" > "HOL.order_less_not_sym"
  49.181 +  "REAL_LT_FRACTION_0" > "HOL4Real.real.REAL_LT_FRACTION_0"
  49.182 +  "REAL_LT_FRACTION" > "HOL4Real.real.REAL_LT_FRACTION"
  49.183 +  "REAL_LT_DIV" > "HOL4Real.real.REAL_LT_DIV"
  49.184 +  "REAL_LT_ANTISYM" > "HOL4Real.real.REAL_LT_ANTISYM"
  49.185 +  "REAL_LT_ADD_SUB" > "Ring_and_Field.compare_rls_7"
  49.186 +  "REAL_LT_ADDR" > "HOL4Real.real.REAL_LT_ADDR"
  49.187 +  "REAL_LT_ADDNEG2" > "HOL4Real.real.REAL_LT_ADDNEG2"
  49.188 +  "REAL_LT_ADDNEG" > "HOL4Real.real.REAL_LT_ADDNEG"
  49.189 +  "REAL_LT_ADDL" > "HOL4Real.real.REAL_LT_ADDL"
  49.190 +  "REAL_LT_ADD2" > "Ring_and_Field.add_strict_mono"
  49.191 +  "REAL_LT_ADD1" > "HOL4Real.real.REAL_LT_ADD1"
  49.192 +  "REAL_LT_ADD" > "RealDef.real_add_order"
  49.193 +  "REAL_LT_1" > "HOL4Real.real.REAL_LT_1"
  49.194 +  "REAL_LT_01" > "Ring_and_Field.ordered_semiring.zero_less_one"
  49.195 +  "REAL_LTE_TRANS" > "Set.basic_trans_rules_24"
  49.196 +  "REAL_LTE_TOTAL" > "HOL4Real.real.REAL_LTE_TOTAL"
  49.197 +  "REAL_LTE_ANTSYM" > "HOL4Real.real.REAL_LTE_ANTSYM"
  49.198 +  "REAL_LTE_ADD2" > "Ring_and_Field.add_less_le_mono"
  49.199 +  "REAL_LTE_ADD" > "HOL4Real.real.REAL_LTE_ADD"
  49.200 +  "REAL_LT1_POW2" > "HOL4Real.real.REAL_LT1_POW2"
  49.201 +  "REAL_LT" > "RealDef.real_of_nat_less_iff"
  49.202 +  "REAL_LNEG_UNIQ" > "HOL4Real.real.REAL_LNEG_UNIQ"
  49.203 +  "REAL_LINV_UNIQ" > "HOL4Real.real.REAL_LINV_UNIQ"
  49.204 +  "REAL_LE_TRANS" > "Set.basic_trans_rules_25"
  49.205 +  "REAL_LE_TOTAL" > "HOL.linorder.linorder_linear"
  49.206 +  "REAL_LE_SUB_RADD" > "Ring_and_Field.compare_rls_8"
  49.207 +  "REAL_LE_SUB_LADD" > "Ring_and_Field.compare_rls_9"
  49.208 +  "REAL_LE_SQUARE" > "Ring_and_Field.zero_le_square"
  49.209 +  "REAL_LE_RNEG" > "HOL4Real.real.REAL_LE_RNEG"
  49.210 +  "REAL_LE_RMUL_IMP" > "Ring_and_Field.mult_right_mono"
  49.211 +  "REAL_LE_RMUL" > "RealDef.real_mult_le_cancel_iff1"
  49.212 +  "REAL_LE_REFL" > "HOL.order.order_refl"
  49.213 +  "REAL_LE_RDIV_EQ" > "Ring_and_Field.pos_le_divide_eq"
  49.214 +  "REAL_LE_RDIV" > "HOL4Real.real.REAL_LE_RDIV"
  49.215 +  "REAL_LE_RADD" > "Ring_and_Field.add_le_cancel_right"
  49.216 +  "REAL_LE_POW2" > "NatBin.zero_le_power2"
  49.217 +  "REAL_LE_NEGTOTAL" > "HOL4Real.real.REAL_LE_NEGTOTAL"
  49.218 +  "REAL_LE_NEGR" > "Ring_and_Field.le_minus_self_iff"
  49.219 +  "REAL_LE_NEGL" > "Ring_and_Field.minus_le_self_iff"
  49.220 +  "REAL_LE_NEG2" > "Ring_and_Field.neg_le_iff_le"
  49.221 +  "REAL_LE_NEG" > "Ring_and_Field.neg_le_iff_le"
  49.222 +  "REAL_LE_MUL2" > "HOL4Real.real.REAL_LE_MUL2"
  49.223 +  "REAL_LE_MUL" > "HOL4Real.real.REAL_LE_MUL"
  49.224 +  "REAL_LE_LT" > "HOL.order_le_less"
  49.225 +  "REAL_LE_LNEG" > "RealDef.real_0_le_add_iff"
  49.226 +  "REAL_LE_LMUL_IMP" > "Ring_and_Field.mult_left_mono"
  49.227 +  "REAL_LE_LMUL" > "RealDef.real_mult_le_cancel_iff2"
  49.228 +  "REAL_LE_LDIV_EQ" > "Ring_and_Field.pos_divide_le_eq"
  49.229 +  "REAL_LE_LDIV" > "HOL4Real.real.REAL_LE_LDIV"
  49.230 +  "REAL_LE_LADD_IMP" > "Ring_and_Field.almost_ordered_semiring.add_left_mono"
  49.231 +  "REAL_LE_LADD" > "Ring_and_Field.add_le_cancel_left"
  49.232 +  "REAL_LE_INV_EQ" > "Ring_and_Field.inverse_nonnegative_iff_nonnegative"
  49.233 +  "REAL_LE_INV" > "HOL4Real.real.REAL_LE_INV"
  49.234 +  "REAL_LE_DOUBLE" > "HOL4Real.real.REAL_LE_DOUBLE"
  49.235 +  "REAL_LE_DIV" > "HOL4Real.real.REAL_LE_DIV"
  49.236 +  "REAL_LE_ANTISYM" > "HOL.order_eq_iff"
  49.237 +  "REAL_LE_ADDR" > "HOL4Real.real.REAL_LE_ADDR"
  49.238 +  "REAL_LE_ADDL" > "HOL4Real.real.REAL_LE_ADDL"
  49.239 +  "REAL_LE_ADD2" > "Ring_and_Field.add_mono"
  49.240 +  "REAL_LE_ADD" > "RealDef.real_le_add_order"
  49.241 +  "REAL_LE_01" > "Ring_and_Field.zero_le_one"
  49.242 +  "REAL_LET_TRANS" > "Set.basic_trans_rules_23"
  49.243 +  "REAL_LET_TOTAL" > "HOL4Real.real.REAL_LET_TOTAL"
  49.244 +  "REAL_LET_ANTISYM" > "HOL4Real.real.REAL_LET_ANTISYM"
  49.245 +  "REAL_LET_ADD2" > "Ring_and_Field.add_le_less_mono"
  49.246 +  "REAL_LET_ADD" > "HOL4Real.real.REAL_LET_ADD"
  49.247 +  "REAL_LE1_POW2" > "HOL4Real.real.REAL_LE1_POW2"
  49.248 +  "REAL_LE" > "RealDef.real_of_nat_le_iff"
  49.249 +  "REAL_LDISTRIB" > "Ring_and_Field.ring_distrib_1"
  49.250 +  "REAL_INV_POS" > "Ring_and_Field.positive_imp_inverse_positive"
  49.251 +  "REAL_INV_NZ" > "Ring_and_Field.nonzero_imp_inverse_nonzero"
  49.252 +  "REAL_INV_MUL" > "HOL4Real.real.REAL_INV_MUL"
  49.253 +  "REAL_INV_LT1" > "RealDef.real_inverse_gt_one"
  49.254 +  "REAL_INV_INV" > "Ring_and_Field.inverse_inverse_eq"
  49.255 +  "REAL_INV_EQ_0" > "Ring_and_Field.inverse_nonzero_iff_nonzero"
  49.256 +  "REAL_INV_1OVER" > "Ring_and_Field.inverse_eq_divide"
  49.257 +  "REAL_INV_0" > "Ring_and_Field.division_by_zero.inverse_zero"
  49.258 +  "REAL_INVINV" > "Ring_and_Field.nonzero_inverse_inverse_eq"
  49.259 +  "REAL_INV1" > "Ring_and_Field.inverse_1"
  49.260 +  "REAL_INJ" > "RealDef.real_of_nat_inject"
  49.261 +  "REAL_HALF_DOUBLE" > "RComplete.real_sum_of_halves"
  49.262 +  "REAL_FACT_NZ" > "HOL4Real.real.REAL_FACT_NZ"
  49.263 +  "REAL_EQ_SUB_RADD" > "Ring_and_Field.compare_rls_10"
  49.264 +  "REAL_EQ_SUB_LADD" > "Ring_and_Field.compare_rls_11"
  49.265 +  "REAL_EQ_RMUL_IMP" > "Ring_and_Field.field_mult_cancel_right_lemma"
  49.266 +  "REAL_EQ_RMUL" > "Ring_and_Field.field_mult_cancel_right"
  49.267 +  "REAL_EQ_RDIV_EQ" > "HOL4Real.real.REAL_EQ_RDIV_EQ"
  49.268 +  "REAL_EQ_RADD" > "Ring_and_Field.add_right_cancel"
  49.269 +  "REAL_EQ_NEG" > "Ring_and_Field.neg_equal_iff_equal"
  49.270 +  "REAL_EQ_MUL_LCANCEL" > "Ring_and_Field.field_mult_cancel_left"
  49.271 +  "REAL_EQ_LMUL_IMP" > "HOL4Real.real.REAL_EQ_LMUL_IMP"
  49.272 +  "REAL_EQ_LMUL2" > "RealDef.real_mult_left_cancel"
  49.273 +  "REAL_EQ_LMUL" > "Ring_and_Field.field_mult_cancel_left"
  49.274 +  "REAL_EQ_LDIV_EQ" > "HOL4Real.real.REAL_EQ_LDIV_EQ"
  49.275 +  "REAL_EQ_LADD" > "Ring_and_Field.add_left_cancel"
  49.276 +  "REAL_EQ_IMP_LE" > "HOL.order_eq_refl"
  49.277 +  "REAL_ENTIRE" > "Ring_and_Field.field_mult_eq_0_iff"
  49.278 +  "REAL_DOWN2" > "RealDef.real_lbound_gt_zero"
  49.279 +  "REAL_DOWN" > "HOL4Real.real.REAL_DOWN"
  49.280 +  "REAL_DOUBLE" > "IntArith.mult_2"
  49.281 +  "REAL_DIV_RMUL" > "HOL4Real.real.REAL_DIV_RMUL"
  49.282 +  "REAL_DIV_REFL" > "Ring_and_Field.divide_self"
  49.283 +  "REAL_DIV_MUL2" > "Ring_and_Field.nonzero_mult_divide_cancel_left"
  49.284 +  "REAL_DIV_LZERO" > "Ring_and_Field.divide_zero_left"
  49.285 +  "REAL_DIV_LMUL" > "HOL4Real.real.REAL_DIV_LMUL"
  49.286 +  "REAL_DIFFSQ" > "HOL4Real.real.REAL_DIFFSQ"
  49.287 +  "REAL_ARCH_LEAST" > "HOL4Real.real.REAL_ARCH_LEAST"
  49.288 +  "REAL_ARCH" > "RComplete.reals_Archimedean3"
  49.289 +  "REAL_ADD_SYM" > "Ring_and_Field.add_ac_2"
  49.290 +  "REAL_ADD_SUB2" > "HOL4Real.real.REAL_ADD_SUB2"
  49.291 +  "REAL_ADD_SUB" > "Ring_and_Field.add_minus_self_right"
  49.292 +  "REAL_ADD_RINV" > "Ring_and_Field.right_minus"
  49.293 +  "REAL_ADD_RID_UNIQ" > "HOL4Real.real.REAL_ADD_RID_UNIQ"
  49.294 +  "REAL_ADD_RID" > "Ring_and_Field.add_0_right"
  49.295 +  "REAL_ADD_RDISTRIB" > "Ring_and_Field.ring_distrib_2"
  49.296 +  "REAL_ADD_LINV" > "HOL4Compat.REAL_ADD_LINV"
  49.297 +  "REAL_ADD_LID_UNIQ" > "HOL4Real.real.REAL_ADD_LID_UNIQ"
  49.298 +  "REAL_ADD_LID" > "Ring_and_Field.abelian_semigroup.add_0"
  49.299 +  "REAL_ADD_LDISTRIB" > "Ring_and_Field.ring_distrib_1"
  49.300 +  "REAL_ADD_ASSOC" > "HOL4Compat.REAL_ADD_ASSOC"
  49.301 +  "REAL_ADD2_SUB2" > "HOL4Real.real.REAL_ADD2_SUB2"
  49.302 +  "REAL_ADD" > "RealDef.real_of_nat_add"
  49.303 +  "REAL_ABS_TRIANGLE" > "Ring_and_Field.abs_triangle_ineq"
  49.304 +  "REAL_ABS_POS" > "Ring_and_Field.abs_ge_zero"
  49.305 +  "REAL_ABS_MUL" > "Ring_and_Field.abs_mult"
  49.306 +  "REAL_ABS_0" > "Ring_and_Field.abs_zero"
  49.307 +  "REAL_10" > "HOL4Compat.REAL_10"
  49.308 +  "REAL_1" > "HOL4Real.real.REAL_1"
  49.309 +  "REAL_0" > "HOL4Real.real.REAL_0"
  49.310 +  "REAL" > "RealDef.real_of_nat_Suc"
  49.311 +  "POW_ZERO_EQ" > "HOL4Real.real.POW_ZERO_EQ"
  49.312 +  "POW_ZERO" > "RealPow.realpow_zero_zero"
  49.313 +  "POW_POS_LT" > "HOL4Real.real.POW_POS_LT"
  49.314 +  "POW_POS" > "Power.zero_le_power"
  49.315 +  "POW_PLUS1" > "HOL4Real.real.POW_PLUS1"
  49.316 +  "POW_ONE" > "Power.power_one"
  49.317 +  "POW_NZ" > "Power.field_power_not_zero"
  49.318 +  "POW_MUL" > "Power.power_mult_distrib"
  49.319 +  "POW_MINUS1" > "NatBin.power_minus1_even"
  49.320 +  "POW_M1" > "HOL4Real.real.POW_M1"
  49.321 +  "POW_LT" > "HOL4Real.real.POW_LT"
  49.322 +  "POW_LE" > "Power.power_mono"
  49.323 +  "POW_INV" > "Power.nonzero_power_inverse"
  49.324 +  "POW_EQ" > "Power.power_inject_base"
  49.325 +  "POW_ADD" > "Power.power_add"
  49.326 +  "POW_ABS" > "Power.power_abs"
  49.327 +  "POW_2_LT" > "RealPow.two_realpow_gt"
  49.328 +  "POW_2_LE1" > "RealPow.two_realpow_ge_one"
  49.329 +  "POW_2" > "NatBin.power2_eq_square"
  49.330 +  "POW_1" > "Power.power_one_right"
  49.331 +  "POW_0" > "Power.power_0_Suc"
  49.332 +  "ABS_ZERO" > "Ring_and_Field.abs_zero_iff"
  49.333 +  "ABS_TRIANGLE" > "Ring_and_Field.abs_triangle_ineq"
  49.334 +  "ABS_SUM" > "HOL4Real.real.ABS_SUM"
  49.335 +  "ABS_SUB_ABS" > "HOL4Real.real.ABS_SUB_ABS"
  49.336 +  "ABS_SUB" > "HOL4Real.real.ABS_SUB"
  49.337 +  "ABS_STILLNZ" > "HOL4Real.real.ABS_STILLNZ"
  49.338 +  "ABS_SIGN2" > "HOL4Real.real.ABS_SIGN2"
  49.339 +  "ABS_SIGN" > "HOL4Real.real.ABS_SIGN"
  49.340 +  "ABS_REFL" > "HOL4Real.real.ABS_REFL"
  49.341 +  "ABS_POW2" > "NatBin.abs_power2"
  49.342 +  "ABS_POS" > "Ring_and_Field.abs_ge_zero"
  49.343 +  "ABS_NZ" > "Ring_and_Field.zero_less_abs_iff"
  49.344 +  "ABS_NEG" > "Ring_and_Field.abs_minus_cancel"
  49.345 +  "ABS_N" > "RealDef.abs_real_of_nat_cancel"
  49.346 +  "ABS_MUL" > "Ring_and_Field.abs_mult"
  49.347 +  "ABS_LT_MUL2" > "HOL4Real.real.ABS_LT_MUL2"
  49.348 +  "ABS_LE" > "Ring_and_Field.abs_ge_self"
  49.349 +  "ABS_INV" > "Ring_and_Field.nonzero_abs_inverse"
  49.350 +  "ABS_DIV" > "Ring_and_Field.nonzero_abs_divide"
  49.351 +  "ABS_CIRCLE" > "HOL4Real.real.ABS_CIRCLE"
  49.352 +  "ABS_CASES" > "HOL4Real.real.ABS_CASES"
  49.353 +  "ABS_BOUNDS" > "RealDef.abs_le_interval_iff"
  49.354 +  "ABS_BOUND" > "HOL4Real.real.ABS_BOUND"
  49.355 +  "ABS_BETWEEN2" > "HOL4Real.real.ABS_BETWEEN2"
  49.356 +  "ABS_BETWEEN1" > "HOL4Real.real.ABS_BETWEEN1"
  49.357 +  "ABS_BETWEEN" > "HOL4Real.real.ABS_BETWEEN"
  49.358 +  "ABS_ABS" > "Ring_and_Field.abs_idempotent"
  49.359 +  "ABS_1" > "Ring_and_Field.abs_one"
  49.360 +  "ABS_0" > "Ring_and_Field.abs_zero"
  49.361 +
  49.362 +end
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/src/HOL/Import/HOL/realax.imp	Fri Apr 02 17:37:45 2004 +0200
    50.3 @@ -0,0 +1,141 @@
    50.4 +import
    50.5 +
    50.6 +import_segment "hol4"
    50.7 +
    50.8 +def_maps
    50.9 +  "treal_of_hreal" > "treal_of_hreal_def"
   50.10 +  "treal_neg" > "treal_neg_def"
   50.11 +  "treal_mul" > "treal_mul_def"
   50.12 +  "treal_lt" > "treal_lt_def"
   50.13 +  "treal_inv" > "treal_inv_def"
   50.14 +  "treal_eq" > "treal_eq_def"
   50.15 +  "treal_add" > "treal_add_def"
   50.16 +  "treal_1" > "treal_1_def"
   50.17 +  "treal_0" > "treal_0_def"
   50.18 +  "hreal_of_treal" > "hreal_of_treal_def"
   50.19 +
   50.20 +type_maps
   50.21 +  "real" > "RealDef.real"
   50.22 +
   50.23 +const_maps
   50.24 +  "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
   50.25 +  "treal_neg" > "HOL4Real.realax.treal_neg"
   50.26 +  "treal_mul" > "HOL4Real.realax.treal_mul"
   50.27 +  "treal_lt" > "HOL4Real.realax.treal_lt"
   50.28 +  "treal_inv" > "HOL4Real.realax.treal_inv"
   50.29 +  "treal_eq" > "HOL4Real.realax.treal_eq"
   50.30 +  "treal_add" > "HOL4Real.realax.treal_add"
   50.31 +  "treal_1" > "HOL4Real.realax.treal_1"
   50.32 +  "treal_0" > "HOL4Real.realax.treal_0"
   50.33 +  "real_neg" > "uminus" :: "real => real"
   50.34 +  "real_mul" > "op *" :: "real => real => real"
   50.35 +  "real_lt" > "op <" :: "real => real => bool"
   50.36 +  "real_add" > "op +" :: "real => real => real"
   50.37 +  "real_1" > "1" :: "real"
   50.38 +  "real_0" > "0" :: "real"
   50.39 +  "inv" > "HOL.inverse" :: "real => real"
   50.40 +  "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
   50.41 +
   50.42 +thm_maps
   50.43 +  "treal_of_hreal_def" > "HOL4Real.realax.treal_of_hreal_def"
   50.44 +  "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
   50.45 +  "treal_neg_def" > "HOL4Real.realax.treal_neg_def"
   50.46 +  "treal_neg" > "HOL4Real.realax.treal_neg"
   50.47 +  "treal_mul_def" > "HOL4Real.realax.treal_mul_def"
   50.48 +  "treal_mul" > "HOL4Real.realax.treal_mul"
   50.49 +  "treal_lt_def" > "HOL4Real.realax.treal_lt_def"
   50.50 +  "treal_lt" > "HOL4Real.realax.treal_lt"
   50.51 +  "treal_inv_def" > "HOL4Real.realax.treal_inv_def"
   50.52 +  "treal_inv" > "HOL4Real.realax.treal_inv"
   50.53 +  "treal_eq_def" > "HOL4Real.realax.treal_eq_def"
   50.54 +  "treal_eq" > "HOL4Real.realax.treal_eq"
   50.55 +  "treal_add_def" > "HOL4Real.realax.treal_add_def"
   50.56 +  "treal_add" > "HOL4Real.realax.treal_add"
   50.57 +  "treal_1_def" > "HOL4Real.realax.treal_1_def"
   50.58 +  "treal_1" > "HOL4Real.realax.treal_1"
   50.59 +  "treal_0_def" > "HOL4Real.realax.treal_0_def"
   50.60 +  "treal_0" > "HOL4Real.realax.treal_0"
   50.61 +  "hreal_of_treal_def" > "HOL4Real.realax.hreal_of_treal_def"
   50.62 +  "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
   50.63 +  "TREAL_NEG_WELLDEF" > "HOL4Real.realax.TREAL_NEG_WELLDEF"
   50.64 +  "TREAL_MUL_WELLDEFR" > "HOL4Real.realax.TREAL_MUL_WELLDEFR"
   50.65 +  "TREAL_MUL_WELLDEF" > "HOL4Real.realax.TREAL_MUL_WELLDEF"
   50.66 +  "TREAL_MUL_SYM" > "HOL4Real.realax.TREAL_MUL_SYM"
   50.67 +  "TREAL_MUL_LINV" > "HOL4Real.realax.TREAL_MUL_LINV"
   50.68 +  "TREAL_MUL_LID" > "HOL4Real.realax.TREAL_MUL_LID"
   50.69 +  "TREAL_MUL_ASSOC" > "HOL4Real.realax.TREAL_MUL_ASSOC"
   50.70 +  "TREAL_LT_WELLDEFR" > "HOL4Real.realax.TREAL_LT_WELLDEFR"
   50.71 +  "TREAL_LT_WELLDEFL" > "HOL4Real.realax.TREAL_LT_WELLDEFL"
   50.72 +  "TREAL_LT_WELLDEF" > "HOL4Real.realax.TREAL_LT_WELLDEF"
   50.73 +  "TREAL_LT_TRANS" > "HOL4Real.realax.TREAL_LT_TRANS"
   50.74 +  "TREAL_LT_TOTAL" > "HOL4Real.realax.TREAL_LT_TOTAL"
   50.75 +  "TREAL_LT_REFL" > "HOL4Real.realax.TREAL_LT_REFL"
   50.76 +  "TREAL_LT_MUL" > "HOL4Real.realax.TREAL_LT_MUL"
   50.77 +  "TREAL_LT_ADD" > "HOL4Real.realax.TREAL_LT_ADD"
   50.78 +  "TREAL_LDISTRIB" > "HOL4Real.realax.TREAL_LDISTRIB"
   50.79 +  "TREAL_ISO" > "HOL4Real.realax.TREAL_ISO"
   50.80 +  "TREAL_INV_WELLDEF" > "HOL4Real.realax.TREAL_INV_WELLDEF"
   50.81 +  "TREAL_INV_0" > "HOL4Real.realax.TREAL_INV_0"
   50.82 +  "TREAL_EQ_TRANS" > "HOL4Real.realax.TREAL_EQ_TRANS"
   50.83 +  "TREAL_EQ_SYM" > "HOL4Real.realax.TREAL_EQ_SYM"
   50.84 +  "TREAL_EQ_REFL" > "HOL4Real.realax.TREAL_EQ_REFL"
   50.85 +  "TREAL_EQ_EQUIV" > "HOL4Real.realax.TREAL_EQ_EQUIV"
   50.86 +  "TREAL_EQ_AP" > "HOL4Real.realax.TREAL_EQ_AP"
   50.87 +  "TREAL_BIJ_WELLDEF" > "HOL4Real.realax.TREAL_BIJ_WELLDEF"
   50.88 +  "TREAL_BIJ" > "HOL4Real.realax.TREAL_BIJ"
   50.89 +  "TREAL_ADD_WELLDEFR" > "HOL4Real.realax.TREAL_ADD_WELLDEFR"
   50.90 +  "TREAL_ADD_WELLDEF" > "HOL4Real.realax.TREAL_ADD_WELLDEF"
   50.91 +  "TREAL_ADD_SYM" > "HOL4Real.realax.TREAL_ADD_SYM"
   50.92 +  "TREAL_ADD_LINV" > "HOL4Real.realax.TREAL_ADD_LINV"
   50.93 +  "TREAL_ADD_LID" > "HOL4Real.realax.TREAL_ADD_LID"
   50.94 +  "TREAL_ADD_ASSOC" > "HOL4Real.realax.TREAL_ADD_ASSOC"
   50.95 +  "TREAL_10" > "HOL4Real.realax.TREAL_10"
   50.96 +  "REAL_SUP_ALLPOS" > "HOL4Compat.REAL_SUP_ALLPOS"
   50.97 +  "REAL_MUL_SYM" > "Ring_and_Field.mult_ac_2"
   50.98 +  "REAL_MUL_LINV" > "HOL4Compat.REAL_MUL_LINV"
   50.99 +  "REAL_MUL_LID" > "Ring_and_Field.almost_semiring.mult_1"
  50.100 +  "REAL_MUL_ASSOC" > "HOL4Compat.REAL_MUL_ASSOC"
  50.101 +  "REAL_LT_TRANS" > "Set.basic_trans_rules_21"
  50.102 +  "REAL_LT_TOTAL" > "HOL4Compat.REAL_LT_TOTAL"
  50.103 +  "REAL_LT_REFL" > "HOL.order_less_irrefl"
  50.104 +  "REAL_LT_MUL" > "Ring_and_Field.mult_pos"
  50.105 +  "REAL_LT_IADD" > "Ring_and_Field.add_strict_left_mono"
  50.106 +  "REAL_LDISTRIB" > "Ring_and_Field.ring_distrib_1"
  50.107 +  "REAL_INV_0" > "Ring_and_Field.division_by_zero.inverse_zero"
  50.108 +  "REAL_ADD_SYM" > "Ring_and_Field.add_ac_2"
  50.109 +  "REAL_ADD_LINV" > "HOL4Compat.REAL_ADD_LINV"
  50.110 +  "REAL_ADD_LID" > "Ring_and_Field.abelian_semigroup.add_0"
  50.111 +  "REAL_ADD_ASSOC" > "HOL4Compat.REAL_ADD_ASSOC"
  50.112 +  "REAL_10" > "HOL4Compat.REAL_10"
  50.113 +  "HREAL_RDISTRIB" > "HOL4Real.realax.HREAL_RDISTRIB"
  50.114 +  "HREAL_LT_REFL" > "HOL4Real.realax.HREAL_LT_REFL"
  50.115 +  "HREAL_LT_NE" > "HOL4Real.realax.HREAL_LT_NE"
  50.116 +  "HREAL_LT_LADD" > "HOL4Real.realax.HREAL_LT_LADD"
  50.117 +  "HREAL_LT_GT" > "HOL4Real.realax.HREAL_LT_GT"
  50.118 +  "HREAL_LT_ADDR" > "HOL4Real.realax.HREAL_LT_ADDR"
  50.119 +  "HREAL_LT_ADDL" > "HOL4Real.realax.HREAL_LT_ADDL"
  50.120 +  "HREAL_LT_ADD2" > "HOL4Real.realax.HREAL_LT_ADD2"
  50.121 +  "HREAL_EQ_LADD" > "HOL4Real.realax.HREAL_EQ_LADD"
  50.122 +  "HREAL_EQ_ADDR" > "HOL4Base.hreal.HREAL_NOZERO"
  50.123 +  "HREAL_EQ_ADDL" > "HOL4Real.realax.HREAL_EQ_ADDL"
  50.124 +
  50.125 +ignore_thms
  50.126 +  "real_tybij"
  50.127 +  "real_of_hreal"
  50.128 +  "real_neg"
  50.129 +  "real_mul"
  50.130 +  "real_lt"
  50.131 +  "real_inv"
  50.132 +  "real_add"
  50.133 +  "real_TY_DEF"
  50.134 +  "real_1"
  50.135 +  "real_0"
  50.136 +  "hreal_of_real"
  50.137 +  "SUP_ALLPOS_LEMMA4"
  50.138 +  "SUP_ALLPOS_LEMMA3"
  50.139 +  "SUP_ALLPOS_LEMMA2"
  50.140 +  "SUP_ALLPOS_LEMMA1"
  50.141 +  "REAL_POS"
  50.142 +  "REAL_ISO_EQ"
  50.143 +
  50.144 +end
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/src/HOL/Import/HOL/relation.imp	Fri Apr 02 17:37:45 2004 +0200
    51.3 @@ -0,0 +1,102 @@
    51.4 +import
    51.5 +
    51.6 +import_segment "hol4"
    51.7 +
    51.8 +def_maps
    51.9 +  "transitive" > "transitive_primdef"
   51.10 +  "the_fun" > "the_fun_primdef"
   51.11 +  "pred_reflexive" > "pred_reflexive_def"
   51.12 +  "inv_image" > "inv_image_primdef"
   51.13 +  "approx" > "approx_primdef"
   51.14 +  "WFREC" > "WFREC_def"
   51.15 +  "WF" > "WF_def"
   51.16 +  "TC" > "TC_def"
   51.17 +  "RTC" > "RTC_def"
   51.18 +  "RESTRICT" > "RESTRICT_def"
   51.19 +  "RC" > "RC_primdef"
   51.20 +  "EMPTY_REL" > "EMPTY_REL_def"
   51.21 +
   51.22 +const_maps
   51.23 +  "transitive" > "HOL4Base.relation.transitive"
   51.24 +  "the_fun" > "HOL4Base.relation.the_fun"
   51.25 +  "pred_reflexive" > "HOL4Base.relation.pred_reflexive"
   51.26 +  "inv_image" > "HOL4Base.relation.inv_image"
   51.27 +  "approx" > "HOL4Base.relation.approx"
   51.28 +  "WFREC" > "HOL4Base.relation.WFREC"
   51.29 +  "WF" > "HOL4Base.relation.WF"
   51.30 +  "TC" > "HOL4Base.relation.TC"
   51.31 +  "RTC" > "HOL4Base.relation.RTC"
   51.32 +  "RESTRICT" > "HOL4Base.relation.RESTRICT"
   51.33 +  "RC" > "HOL4Base.relation.RC"
   51.34 +  "EMPTY_REL" > "HOL4Base.relation.EMPTY_REL"
   51.35 +
   51.36 +const_renames
   51.37 +  "reflexive" > "pred_reflexive"
   51.38 +
   51.39 +thm_maps
   51.40 +  "transitive_primdef" > "HOL4Base.relation.transitive_primdef"
   51.41 +  "transitive_def" > "HOL4Base.relation.transitive_def"
   51.42 +  "the_fun_primdef" > "HOL4Base.relation.the_fun_primdef"
   51.43 +  "the_fun_def" > "HOL4Base.relation.the_fun_def"
   51.44 +  "reflexive_def" > "HOL4Base.relation.reflexive_def"
   51.45 +  "pred_reflexive_def" > "HOL4Base.relation.pred_reflexive_def"
   51.46 +  "inv_image_primdef" > "HOL4Base.relation.inv_image_primdef"
   51.47 +  "inv_image_def" > "HOL4Base.relation.inv_image_def"
   51.48 +  "approx_primdef" > "HOL4Base.relation.approx_primdef"
   51.49 +  "approx_def" > "HOL4Base.relation.approx_def"
   51.50 +  "WF_inv_image" > "HOL4Base.relation.WF_inv_image"
   51.51 +  "WF_def" > "HOL4Base.relation.WF_def"
   51.52 +  "WF_TC" > "HOL4Base.relation.WF_TC"
   51.53 +  "WF_SUBSET" > "HOL4Base.relation.WF_SUBSET"
   51.54 +  "WF_RECURSION_THM" > "HOL4Base.relation.WF_RECURSION_THM"
   51.55 +  "WF_NOT_REFL" > "HOL4Base.relation.WF_NOT_REFL"
   51.56 +  "WF_INDUCTION_THM" > "HOL4Base.relation.WF_INDUCTION_THM"
   51.57 +  "WF_EMPTY_REL" > "HOL4Base.relation.WF_EMPTY_REL"
   51.58 +  "WF_DEF" > "HOL4Base.relation.WF_DEF"
   51.59 +  "WFREC_def" > "HOL4Base.relation.WFREC_def"
   51.60 +  "WFREC_THM" > "HOL4Base.relation.WFREC_THM"
   51.61 +  "WFREC_DEF" > "HOL4Base.relation.WFREC_DEF"
   51.62 +  "WFREC_COROLLARY" > "HOL4Base.relation.WFREC_COROLLARY"
   51.63 +  "TC_def" > "HOL4Base.relation.TC_def"
   51.64 +  "TC_TRANSITIVE" > "HOL4Base.relation.TC_TRANSITIVE"
   51.65 +  "TC_SUBSET" > "HOL4Base.relation.TC_SUBSET"
   51.66 +  "TC_STRONG_INDUCT_LEFT1" > "HOL4Base.relation.TC_STRONG_INDUCT_LEFT1"
   51.67 +  "TC_STRONG_INDUCT" > "HOL4Base.relation.TC_STRONG_INDUCT"
   51.68 +  "TC_RULES" > "HOL4Base.relation.TC_RULES"
   51.69 +  "TC_RTC" > "HOL4Base.relation.TC_RTC"
   51.70 +  "TC_RC_EQNS" > "HOL4Base.relation.TC_RC_EQNS"
   51.71 +  "TC_MONOTONE" > "HOL4Base.relation.TC_MONOTONE"
   51.72 +  "TC_INDUCT_LEFT1" > "HOL4Base.relation.TC_INDUCT_LEFT1"
   51.73 +  "TC_INDUCT" > "HOL4Base.relation.TC_INDUCT"
   51.74 +  "TC_IDEM" > "HOL4Base.relation.TC_IDEM"
   51.75 +  "TC_DEF" > "HOL4Base.relation.TC_DEF"
   51.76 +  "TC_CASES2" > "HOL4Base.relation.TC_CASES2"
   51.77 +  "TC_CASES1" > "HOL4Base.relation.TC_CASES1"
   51.78 +  "RTC_def" > "HOL4Base.relation.RTC_def"
   51.79 +  "RTC_TRANSITIVE" > "HOL4Base.relation.RTC_TRANSITIVE"
   51.80 +  "RTC_TC_RC" > "HOL4Base.relation.RTC_TC_RC"
   51.81 +  "RTC_SUBSET" > "HOL4Base.relation.RTC_SUBSET"
   51.82 +  "RTC_STRONG_INDUCT" > "HOL4Base.relation.RTC_STRONG_INDUCT"
   51.83 +  "RTC_RULES" > "HOL4Base.relation.RTC_RULES"
   51.84 +  "RTC_RTC" > "HOL4Base.relation.RTC_RTC"
   51.85 +  "RTC_REFLEXIVE" > "HOL4Base.relation.RTC_REFLEXIVE"
   51.86 +  "RTC_MONOTONE" > "HOL4Base.relation.RTC_MONOTONE"
   51.87 +  "RTC_INDUCT" > "HOL4Base.relation.RTC_INDUCT"
   51.88 +  "RTC_IDEM" > "HOL4Base.relation.RTC_IDEM"
   51.89 +  "RTC_DEF" > "HOL4Base.relation.RTC_DEF"
   51.90 +  "RTC_CASES_RTC_TWICE" > "HOL4Base.relation.RTC_CASES_RTC_TWICE"
   51.91 +  "RTC_CASES2" > "HOL4Base.relation.RTC_CASES2"
   51.92 +  "RTC_CASES1" > "HOL4Base.relation.RTC_CASES1"
   51.93 +  "RESTRICT_def" > "HOL4Base.relation.RESTRICT_def"
   51.94 +  "RESTRICT_LEMMA" > "HOL4Base.relation.RESTRICT_LEMMA"
   51.95 +  "RESTRICT_DEF" > "HOL4Base.relation.RESTRICT_DEF"
   51.96 +  "RC_primdef" > "HOL4Base.relation.RC_primdef"
   51.97 +  "RC_def" > "HOL4Base.relation.RC_def"
   51.98 +  "RC_SUBSET" > "HOL4Base.relation.RC_SUBSET"
   51.99 +  "RC_RTC" > "HOL4Base.relation.RC_RTC"
  51.100 +  "RC_REFLEXIVE" > "HOL4Base.relation.RC_REFLEXIVE"
  51.101 +  "RC_IDEM" > "HOL4Base.relation.RC_IDEM"
  51.102 +  "EMPTY_REL_def" > "HOL4Base.relation.EMPTY_REL_def"
  51.103 +  "EMPTY_REL_DEF" > "HOL4Base.relation.EMPTY_REL_DEF"
  51.104 +
  51.105 +end
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/src/HOL/Import/HOL/res_quan.imp	Fri Apr 02 17:37:45 2004 +0200
    52.3 @@ -0,0 +1,37 @@
    52.4 +import
    52.5 +
    52.6 +import_segment "hol4"
    52.7 +
    52.8 +thm_maps
    52.9 +  "RES_SELECT_UNIV" > "HOL4Vec.res_quan.RES_SELECT_UNIV"
   52.10 +  "RES_SELECT_EMPTY" > "HOL4Vec.res_quan.RES_SELECT_EMPTY"
   52.11 +  "RES_SELECT" > "HOL4Base.bool.RES_SELECT_DEF"
   52.12 +  "RES_FORALL_UNIV" > "HOL4Vec.res_quan.RES_FORALL_UNIV"
   52.13 +  "RES_FORALL_UNIQUE" > "HOL4Vec.res_quan.RES_FORALL_UNIQUE"
   52.14 +  "RES_FORALL_REORDER" > "HOL4Vec.res_quan.RES_FORALL_REORDER"
   52.15 +  "RES_FORALL_NULL" > "HOL4Vec.res_quan.RES_FORALL_NULL"
   52.16 +  "RES_FORALL_FORALL" > "HOL4Vec.res_quan.RES_FORALL_FORALL"
   52.17 +  "RES_FORALL_EMPTY" > "HOL4Vec.res_quan.RES_FORALL_EMPTY"
   52.18 +  "RES_FORALL_DISJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_DISJ_DIST"
   52.19 +  "RES_FORALL_CONJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_CONJ_DIST"
   52.20 +  "RES_FORALL" > "HOL4Base.bool.RES_FORALL_DEF"
   52.21 +  "RES_EXISTS_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIV"
   52.22 +  "RES_EXISTS_UNIQUE_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_UNIV"
   52.23 +  "RES_EXISTS_UNIQUE_NULL" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_NULL"
   52.24 +  "RES_EXISTS_UNIQUE_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_EMPTY"
   52.25 +  "RES_EXISTS_UNIQUE_ALT" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_ALT"
   52.26 +  "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
   52.27 +  "RES_EXISTS_REORDER" > "HOL4Vec.res_quan.RES_EXISTS_REORDER"
   52.28 +  "RES_EXISTS_NULL" > "HOL4Vec.res_quan.RES_EXISTS_NULL"
   52.29 +  "RES_EXISTS_EQUAL" > "HOL4Vec.res_quan.RES_EXISTS_EQUAL"
   52.30 +  "RES_EXISTS_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_EMPTY"
   52.31 +  "RES_EXISTS_DISJ_DIST" > "HOL4Vec.res_quan.RES_EXISTS_DISJ_DIST"
   52.32 +  "RES_EXISTS_ALT" > "HOL4Vec.res_quan.RES_EXISTS_ALT"
   52.33 +  "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS_DEF"
   52.34 +  "RES_DISJ_EXISTS_DIST" > "HOL4Vec.res_quan.RES_DISJ_EXISTS_DIST"
   52.35 +  "RES_ABSTRACT_IDEMPOT" > "HOL4Vec.res_quan.RES_ABSTRACT_IDEMPOT"
   52.36 +  "RES_ABSTRACT_EQUAL_EQ" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL_EQ"
   52.37 +  "RES_ABSTRACT_EQUAL" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL"
   52.38 +  "RES_ABSTRACT" > "HOL4Vec.res_quan.RES_ABSTRACT"
   52.39 +
   52.40 +end
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/src/HOL/Import/HOL/rich_list.imp	Fri Apr 02 17:37:45 2004 +0200
    53.3 @@ -0,0 +1,375 @@
    53.4 +import
    53.5 +
    53.6 +import_segment "hol4"
    53.7 +
    53.8 +def_maps
    53.9 +  "UNZIP_SND" > "UNZIP_SND_def"
   53.10 +  "UNZIP_FST" > "UNZIP_FST_def"
   53.11 +  "SUFFIX" > "SUFFIX_def"
   53.12 +  "SPLITP" > "SPLITP_def"
   53.13 +  "SNOC" > "SNOC_def"
   53.14 +  "SEG" > "SEG_def"
   53.15 +  "SCANR" > "SCANR_def"
   53.16 +  "SCANL" > "SCANL_def"
   53.17 +  "REPLICATE" > "REPLICATE_def"
   53.18 +  "PREFIX" > "PREFIX_def"
   53.19 +  "OR_EL" > "OR_EL_def"
   53.20 +  "LASTN" > "LASTN_def"
   53.21 +  "IS_SUFFIX" > "IS_SUFFIX_def"
   53.22 +  "IS_SUBLIST" > "IS_SUBLIST_def"
   53.23 +  "IS_PREFIX" > "IS_PREFIX_def"
   53.24 +  "GENLIST" > "GENLIST_def"
   53.25 +  "FIRSTN" > "FIRSTN_def"
   53.26 +  "ELL" > "ELL_def"
   53.27 +  "BUTLASTN" > "BUTLASTN_def"
   53.28 +  "BUTFIRSTN" > "BUTFIRSTN_def"
   53.29 +  "AND_EL" > "AND_EL_def"
   53.30 +
   53.31 +const_maps
   53.32 +  "UNZIP_SND" > "HOL4Base.rich_list.UNZIP_SND"
   53.33 +  "UNZIP_FST" > "HOL4Base.rich_list.UNZIP_FST"
   53.34 +  "SUFFIX" > "HOL4Base.rich_list.SUFFIX"
   53.35 +  "PREFIX" > "HOL4Base.rich_list.PREFIX"
   53.36 +  "OR_EL" > "HOL4Base.rich_list.OR_EL"
   53.37 +  "AND_EL" > "HOL4Base.rich_list.AND_EL"
   53.38 +
   53.39 +thm_maps
   53.40 +  "list_INDUCT" > "HOL4Compat.unzip.induct"
   53.41 +  "list_CASES" > "HOL4Compat.list_CASES"
   53.42 +  "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
   53.43 +  "ZIP_SNOC" > "HOL4Base.rich_list.ZIP_SNOC"
   53.44 +  "ZIP" > "HOL4Compat.ZIP"
   53.45 +  "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
   53.46 +  "UNZIP_SNOC" > "HOL4Base.rich_list.UNZIP_SNOC"
   53.47 +  "UNZIP_SND_def" > "HOL4Base.rich_list.UNZIP_SND_def"
   53.48 +  "UNZIP_SND_DEF" > "HOL4Base.rich_list.UNZIP_SND_DEF"
   53.49 +  "UNZIP_FST_def" > "HOL4Base.rich_list.UNZIP_FST_def"
   53.50 +  "UNZIP_FST_DEF" > "HOL4Base.rich_list.UNZIP_FST_DEF"
   53.51 +  "UNZIP" > "HOL4Compat.UNZIP"
   53.52 +  "TL_SNOC" > "HOL4Base.rich_list.TL_SNOC"
   53.53 +  "TL" > "List.tl.simps_2"
   53.54 +  "SUM_SNOC" > "HOL4Base.rich_list.SUM_SNOC"
   53.55 +  "SUM_REVERSE" > "HOL4Base.rich_list.SUM_REVERSE"
   53.56 +  "SUM_FOLDR" > "HOL4Compat.sum_def"
   53.57 +  "SUM_FOLDL" > "HOL4Base.rich_list.SUM_FOLDL"
   53.58 +  "SUM_FLAT" > "HOL4Base.rich_list.SUM_FLAT"
   53.59 +  "SUM_APPEND" > "HOL4Base.rich_list.SUM_APPEND"
   53.60 +  "SUM" > "HOL4Compat.SUM"
   53.61 +  "SUFFIX_def" > "HOL4Base.rich_list.SUFFIX_def"
   53.62 +  "SUFFIX_DEF" > "HOL4Base.rich_list.SUFFIX_DEF"
   53.63 +  "SPLITP" > "HOL4Base.rich_list.SPLITP"
   53.64 +  "SOME_EL_SNOC" > "HOL4Base.rich_list.SOME_EL_SNOC"
   53.65 +  "SOME_EL_SEG" > "HOL4Base.rich_list.SOME_EL_SEG"
   53.66 +  "SOME_EL_REVERSE" > "HOL4Base.rich_list.SOME_EL_REVERSE"
   53.67 +  "SOME_EL_MAP" > "HOL4Base.rich_list.SOME_EL_MAP"
   53.68 +  "SOME_EL_LASTN" > "HOL4Base.rich_list.SOME_EL_LASTN"
   53.69 +  "SOME_EL_FOLDR_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDR_MAP"
   53.70 +  "SOME_EL_FOLDR" > "HOL4Base.rich_list.SOME_EL_FOLDR"
   53.71 +  "SOME_EL_FOLDL_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDL_MAP"
   53.72 +  "SOME_EL_FOLDL" > "HOL4Base.rich_list.SOME_EL_FOLDL"
   53.73 +  "SOME_EL_FIRSTN" > "HOL4Base.rich_list.SOME_EL_FIRSTN"
   53.74 +  "SOME_EL_DISJ" > "HOL4Base.rich_list.SOME_EL_DISJ"
   53.75 +  "SOME_EL_BUTLASTN" > "HOL4Base.rich_list.SOME_EL_BUTLASTN"
   53.76 +  "SOME_EL_BUTFIRSTN" > "HOL4Base.rich_list.SOME_EL_BUTFIRSTN"
   53.77 +  "SOME_EL_APPEND" > "HOL4Base.list.EXISTS_APPEND"
   53.78 +  "SOME_EL" > "HOL4Compat.list_exists_DEF"
   53.79 +  "SNOC_REVERSE_CONS" > "HOL4Base.rich_list.SNOC_REVERSE_CONS"
   53.80 +  "SNOC_INDUCT" > "HOL4Base.rich_list.SNOC_INDUCT"
   53.81 +  "SNOC_FOLDR" > "HOL4Base.rich_list.SNOC_FOLDR"
   53.82 +  "SNOC_EQ_LENGTH_EQ" > "HOL4Base.rich_list.SNOC_EQ_LENGTH_EQ"
   53.83 +  "SNOC_CASES" > "HOL4Base.rich_list.SNOC_CASES"
   53.84 +  "SNOC_Axiom" > "HOL4Base.rich_list.SNOC_Axiom"
   53.85 +  "SNOC_APPEND" > "HOL4Base.rich_list.SNOC_APPEND"
   53.86 +  "SNOC_11" > "HOL4Base.rich_list.SNOC_11"
   53.87 +  "SNOC" > "HOL4Base.rich_list.SNOC"
   53.88 +  "SEG_SUC_CONS" > "HOL4Base.rich_list.SEG_SUC_CONS"
   53.89 +  "SEG_SNOC" > "HOL4Base.rich_list.SEG_SNOC"
   53.90 +  "SEG_SEG" > "HOL4Base.rich_list.SEG_SEG"
   53.91 +  "SEG_REVERSE" > "HOL4Base.rich_list.SEG_REVERSE"
   53.92 +  "SEG_LENGTH_SNOC" > "HOL4Base.rich_list.SEG_LENGTH_SNOC"
   53.93 +  "SEG_LENGTH_ID" > "HOL4Base.rich_list.SEG_LENGTH_ID"
   53.94 +  "SEG_LASTN_BUTLASTN" > "HOL4Base.rich_list.SEG_LASTN_BUTLASTN"
   53.95 +  "SEG_FIRSTN_BUTFISTN" > "HOL4Base.rich_list.SEG_FIRSTN_BUTFISTN"
   53.96 +  "SEG_APPEND2" > "HOL4Base.rich_list.SEG_APPEND2"
   53.97 +  "SEG_APPEND1" > "HOL4Base.rich_list.SEG_APPEND1"
   53.98 +  "SEG_APPEND" > "HOL4Base.rich_list.SEG_APPEND"
   53.99 +  "SEG_0_SNOC" > "HOL4Base.rich_list.SEG_0_SNOC"
  53.100 +  "SEG" > "HOL4Base.rich_list.SEG"
  53.101 +  "SCANR" > "HOL4Base.rich_list.SCANR"
  53.102 +  "SCANL" > "HOL4Base.rich_list.SCANL"
  53.103 +  "REVERSE_SNOC" > "HOL4Base.rich_list.REVERSE_SNOC"
  53.104 +  "REVERSE_REVERSE" > "List.rev_rev_ident"
  53.105 +  "REVERSE_FOLDR" > "HOL4Base.rich_list.REVERSE_FOLDR"
  53.106 +  "REVERSE_FOLDL" > "HOL4Base.rich_list.REVERSE_FOLDL"
  53.107 +  "REVERSE_FLAT" > "HOL4Base.rich_list.REVERSE_FLAT"
  53.108 +  "REVERSE_EQ_NIL" > "List.rev_is_Nil_conv"
  53.109 +  "REVERSE_APPEND" > "List.rev_append"
  53.110 +  "REVERSE" > "HOL4Base.rich_list.REVERSE"
  53.111 +  "REPLICATE" > "HOL4Base.rich_list.REPLICATE"
  53.112 +  "PREFIX_def" > "HOL4Base.rich_list.PREFIX_def"
  53.113 +  "PREFIX_FOLDR" > "HOL4Base.rich_list.PREFIX_FOLDR"
  53.114 +  "PREFIX_DEF" > "HOL4Base.rich_list.PREFIX_DEF"
  53.115 +  "PREFIX" > "HOL4Base.rich_list.PREFIX"
  53.116 +  "OR_EL_def" > "HOL4Base.rich_list.OR_EL_def"
  53.117 +  "OR_EL_FOLDR" > "HOL4Base.rich_list.OR_EL_FOLDR"
  53.118 +  "OR_EL_FOLDL" > "HOL4Base.rich_list.OR_EL_FOLDL"
  53.119 +  "OR_EL_DEF" > "HOL4Base.rich_list.OR_EL_DEF"
  53.120 +  "NULL_FOLDR" > "HOL4Base.rich_list.NULL_FOLDR"
  53.121 +  "NULL_FOLDL" > "HOL4Base.rich_list.NULL_FOLDL"
  53.122 +  "NULL_EQ_NIL" > "HOL4Base.rich_list.NULL_EQ_NIL"
  53.123 +  "NULL_DEF" > "HOL4Compat.NULL_DEF"
  53.124 +  "NULL" > "HOL4Base.list.NULL"
  53.125 +  "NOT_SOME_EL_ALL_EL" > "HOL4Base.list.NOT_EXISTS"
  53.126 +  "NOT_SNOC_NIL" > "HOL4Base.rich_list.NOT_SNOC_NIL"
  53.127 +  "NOT_NIL_SNOC" > "HOL4Base.rich_list.NOT_NIL_SNOC"
  53.128 +  "NOT_NIL_CONS" > "List.list.simps_1"
  53.129 +  "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
  53.130 +  "NOT_CONS_NIL" > "List.list.simps_2"
  53.131 +  "NOT_ALL_EL_SOME_EL" > "HOL4Base.list.NOT_EVERY"
  53.132 +  "MONOID_APPEND_NIL" > "HOL4Base.rich_list.MONOID_APPEND_NIL"
  53.133 +  "MAP_o" > "HOL4Base.rich_list.MAP_o"
  53.134 +  "MAP_SNOC" > "HOL4Base.rich_list.MAP_SNOC"
  53.135 +  "MAP_REVERSE" > "List.rev_map"
  53.136 +  "MAP_MAP_o" > "List.map_compose"
  53.137 +  "MAP_FOLDR" > "HOL4Base.rich_list.MAP_FOLDR"
  53.138 +  "MAP_FOLDL" > "HOL4Base.rich_list.MAP_FOLDL"
  53.139 +  "MAP_FLAT" > "List.map_concat"
  53.140 +  "MAP_FILTER" > "HOL4Base.rich_list.MAP_FILTER"
  53.141 +  "MAP_APPEND" > "List.map_append"
  53.142 +  "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
  53.143 +  "MAP2" > "HOL4Compat.MAP2"
  53.144 +  "MAP" > "HOL4Compat.MAP"
  53.145 +  "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
  53.146 +  "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
  53.147 +  "LENGTH_UNZIP_SND" > "HOL4Base.rich_list.LENGTH_UNZIP_SND"
  53.148 +  "LENGTH_UNZIP_FST" > "HOL4Base.rich_list.LENGTH_UNZIP_FST"
  53.149 +  "LENGTH_SNOC" > "HOL4Base.rich_list.LENGTH_SNOC"
  53.150 +  "LENGTH_SEG" > "HOL4Base.rich_list.LENGTH_SEG"
  53.151 +  "LENGTH_SCANR" > "HOL4Base.rich_list.LENGTH_SCANR"
  53.152 +  "LENGTH_SCANL" > "HOL4Base.rich_list.LENGTH_SCANL"
  53.153 +  "LENGTH_REVERSE" > "List.length_rev"
  53.154 +  "LENGTH_REPLICATE" > "HOL4Base.rich_list.LENGTH_REPLICATE"
  53.155 +  "LENGTH_NOT_NULL" > "HOL4Base.rich_list.LENGTH_NOT_NULL"
  53.156 +  "LENGTH_NIL" > "List.length_0_conv"
  53.157 +  "LENGTH_MAP2" > "HOL4Base.rich_list.LENGTH_MAP2"
  53.158 +  "LENGTH_MAP" > "List.length_map"
  53.159 +  "LENGTH_LASTN" > "HOL4Base.rich_list.LENGTH_LASTN"
  53.160 +  "LENGTH_GENLIST" > "HOL4Base.rich_list.LENGTH_GENLIST"
  53.161 +  "LENGTH_FOLDR" > "HOL4Base.rich_list.LENGTH_FOLDR"
  53.162 +  "LENGTH_FOLDL" > "HOL4Base.rich_list.LENGTH_FOLDL"
  53.163 +  "LENGTH_FLAT" > "HOL4Base.rich_list.LENGTH_FLAT"
  53.164 +  "LENGTH_FIRSTN" > "HOL4Base.rich_list.LENGTH_FIRSTN"
  53.165 +  "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
  53.166 +  "LENGTH_EQ" > "HOL4Base.rich_list.LENGTH_EQ"
  53.167 +  "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
  53.168 +  "LENGTH_BUTLASTN" > "HOL4Base.rich_list.LENGTH_BUTLASTN"
  53.169 +  "LENGTH_BUTLAST" > "HOL4Base.rich_list.LENGTH_BUTLAST"
  53.170 +  "LENGTH_BUTFIRSTN" > "HOL4Base.rich_list.LENGTH_BUTFIRSTN"
  53.171 +  "LENGTH_APPEND" > "List.length_append"
  53.172 +  "LENGTH" > "HOL4Compat.LENGTH"
  53.173 +  "LAST_LASTN_LAST" > "HOL4Base.rich_list.LAST_LASTN_LAST"
  53.174 +  "LAST_CONS" > "HOL4Base.list.LAST_CONS"
  53.175 +  "LASTN_SEG" > "HOL4Base.rich_list.LASTN_SEG"
  53.176 +  "LASTN_REVERSE" > "HOL4Base.rich_list.LASTN_REVERSE"
  53.177 +  "LASTN_MAP" > "HOL4Base.rich_list.LASTN_MAP"
  53.178 +  "LASTN_LENGTH_ID" > "HOL4Base.rich_list.LASTN_LENGTH_ID"
  53.179 +  "LASTN_LENGTH_APPEND" > "HOL4Base.rich_list.LASTN_LENGTH_APPEND"
  53.180 +  "LASTN_LASTN" > "HOL4Base.rich_list.LASTN_LASTN"
  53.181 +  "LASTN_CONS" > "HOL4Base.rich_list.LASTN_CONS"
  53.182 +  "LASTN_BUTLASTN" > "HOL4Base.rich_list.LASTN_BUTLASTN"
  53.183 +  "LASTN_BUTFIRSTN" > "HOL4Base.rich_list.LASTN_BUTFIRSTN"
  53.184 +  "LASTN_APPEND2" > "HOL4Base.rich_list.LASTN_APPEND2"
  53.185 +  "LASTN_APPEND1" > "HOL4Base.rich_list.LASTN_APPEND1"
  53.186 +  "LASTN_1" > "HOL4Base.rich_list.LASTN_1"
  53.187 +  "LASTN" > "HOL4Base.rich_list.LASTN"
  53.188 +  "LAST" > "HOL4Base.rich_list.LAST"
  53.189 +  "IS_SUFFIX_REVERSE" > "HOL4Base.rich_list.IS_SUFFIX_REVERSE"
  53.190 +  "IS_SUFFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_SUFFIX_IS_SUBLIST"
  53.191 +  "IS_SUFFIX_APPEND" > "HOL4Base.rich_list.IS_SUFFIX_APPEND"
  53.192 +  "IS_SUFFIX" > "HOL4Base.rich_list.IS_SUFFIX"
  53.193 +  "IS_SUBLIST_REVERSE" > "HOL4Base.rich_list.IS_SUBLIST_REVERSE"
  53.194 +  "IS_SUBLIST_APPEND" > "HOL4Base.rich_list.IS_SUBLIST_APPEND"
  53.195 +  "IS_SUBLIST" > "HOL4Base.rich_list.IS_SUBLIST"
  53.196 +  "IS_PREFIX_REVERSE" > "HOL4Base.rich_list.IS_PREFIX_REVERSE"
  53.197 +  "IS_PREFIX_PREFIX" > "HOL4Base.rich_list.IS_PREFIX_PREFIX"
  53.198 +  "IS_PREFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_PREFIX_IS_SUBLIST"
  53.199 +  "IS_PREFIX_APPEND" > "HOL4Base.rich_list.IS_PREFIX_APPEND"
  53.200 +  "IS_PREFIX" > "HOL4Base.rich_list.IS_PREFIX"
  53.201 +  "IS_EL_SOME_EL" > "HOL4Base.rich_list.IS_EL_SOME_EL"
  53.202 +  "IS_EL_SNOC" > "HOL4Base.rich_list.IS_EL_SNOC"
  53.203 +  "IS_EL_SEG" > "HOL4Base.rich_list.IS_EL_SEG"
  53.204 +  "IS_EL_REVERSE" > "HOL4Base.rich_list.IS_EL_REVERSE"
  53.205 +  "IS_EL_REPLICATE" > "HOL4Base.rich_list.IS_EL_REPLICATE"
  53.206 +  "IS_EL_LASTN" > "HOL4Base.rich_list.IS_EL_LASTN"
  53.207 +  "IS_EL_FOLDR_MAP" > "HOL4Base.rich_list.IS_EL_FOLDR_MAP"
  53.208 +  "IS_EL_FOLDR" > "HOL4Base.rich_list.IS_EL_FOLDR"
  53.209 +  "IS_EL_FOLDL_MAP" > "HOL4Base.rich_list.IS_EL_FOLDL_MAP"
  53.210 +  "IS_EL_FOLDL" > "HOL4Base.rich_list.IS_EL_FOLDL"
  53.211 +  "IS_EL_FIRSTN" > "HOL4Base.rich_list.IS_EL_FIRSTN"
  53.212 +  "IS_EL_FILTER" > "HOL4Base.rich_list.IS_EL_FILTER"
  53.213 +  "IS_EL_DEF" > "HOL4Base.rich_list.IS_EL_DEF"
  53.214 +  "IS_EL_BUTLASTN" > "HOL4Base.rich_list.IS_EL_BUTLASTN"
  53.215 +  "IS_EL_BUTFIRSTN" > "HOL4Base.rich_list.IS_EL_BUTFIRSTN"
  53.216 +  "IS_EL_APPEND" > "HOL4Base.list.MEM_APPEND"
  53.217 +  "IS_EL" > "HOL4Compat.MEM"
  53.218 +  "HD" > "List.hd.simps"
  53.219 +  "GENLIST" > "HOL4Base.rich_list.GENLIST"
  53.220 +  "FOLDR_SNOC" > "HOL4Base.rich_list.FOLDR_SNOC"
  53.221 +  "FOLDR_SINGLE" > "HOL4Base.rich_list.FOLDR_SINGLE"
  53.222 +  "FOLDR_REVERSE" > "HOL4Base.rich_list.FOLDR_REVERSE"
  53.223 +  "FOLDR_MAP_REVERSE" > "HOL4Base.rich_list.FOLDR_MAP_REVERSE"
  53.224 +  "FOLDR_MAP" > "HOL4Base.rich_list.FOLDR_MAP"
  53.225 +  "FOLDR_FOLDL_REVERSE" > "List.foldr_foldl"
  53.226 +  "FOLDR_FOLDL" > "HOL4Base.rich_list.FOLDR_FOLDL"
  53.227 +  "FOLDR_FILTER_REVERSE" > "HOL4Base.rich_list.FOLDR_FILTER_REVERSE"
  53.228 +  "FOLDR_FILTER" > "HOL4Base.rich_list.FOLDR_FILTER"
  53.229 +  "FOLDR_CONS_NIL" > "HOL4Base.rich_list.FOLDR_CONS_NIL"
  53.230 +  "FOLDR_APPEND" > "List.foldr_append"
  53.231 +  "FOLDR" > "HOL4Compat.FOLDR"
  53.232 +  "FOLDL_SNOC_NIL" > "HOL4Base.rich_list.FOLDL_SNOC_NIL"
  53.233 +  "FOLDL_SNOC" > "HOL4Base.rich_list.FOLDL_SNOC"
  53.234 +  "FOLDL_SINGLE" > "HOL4Base.rich_list.FOLDL_SINGLE"
  53.235 +  "FOLDL_REVERSE" > "HOL4Base.rich_list.FOLDL_REVERSE"
  53.236 +  "FOLDL_MAP" > "HOL4Base.rich_list.FOLDL_MAP"
  53.237 +  "FOLDL_FOLDR_REVERSE" > "List.foldl_foldr"
  53.238 +  "FOLDL_FILTER" > "HOL4Base.rich_list.FOLDL_FILTER"
  53.239 +  "FOLDL_APPEND" > "List.foldl_append"
  53.240 +  "FOLDL" > "HOL4Compat.FOLDL"
  53.241 +  "FLAT_SNOC" > "HOL4Base.rich_list.FLAT_SNOC"
  53.242 +  "FLAT_REVERSE" > "HOL4Base.rich_list.FLAT_REVERSE"
  53.243 +  "FLAT_FOLDR" > "HOL4Base.rich_list.FLAT_FOLDR"
  53.244 +  "FLAT_FOLDL" > "HOL4Base.rich_list.FLAT_FOLDL"
  53.245 +  "FLAT_FLAT" > "HOL4Base.rich_list.FLAT_FLAT"
  53.246 +  "FLAT_APPEND" > "List.concat_append"
  53.247 +  "FLAT" > "HOL4Compat.FLAT"
  53.248 +  "FIRSTN_SNOC" > "HOL4Base.rich_list.FIRSTN_SNOC"
  53.249 +  "FIRSTN_SEG" > "HOL4Base.rich_list.FIRSTN_SEG"
  53.250 +  "FIRSTN_REVERSE" > "HOL4Base.rich_list.FIRSTN_REVERSE"
  53.251 +  "FIRSTN_LENGTH_ID" > "HOL4Base.rich_list.FIRSTN_LENGTH_ID"
  53.252 +  "FIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.FIRSTN_LENGTH_APPEND"
  53.253 +  "FIRSTN_FIRSTN" > "HOL4Base.rich_list.FIRSTN_FIRSTN"
  53.254 +  "FIRSTN_BUTLASTN" > "HOL4Base.rich_list.FIRSTN_BUTLASTN"
  53.255 +  "FIRSTN_APPEND2" > "HOL4Base.rich_list.FIRSTN_APPEND2"
  53.256 +  "FIRSTN_APPEND1" > "HOL4Base.rich_list.FIRSTN_APPEND1"
  53.257 +  "FIRSTN" > "HOL4Base.rich_list.FIRSTN"
  53.258 +  "FILTER_SNOC" > "HOL4Base.rich_list.FILTER_SNOC"
  53.259 +  "FILTER_REVERSE" > "HOL4Base.rich_list.FILTER_REVERSE"
  53.260 +  "FILTER_MAP" > "HOL4Base.rich_list.FILTER_MAP"
  53.261 +  "FILTER_IDEM" > "HOL4Base.rich_list.FILTER_IDEM"
  53.262 +  "FILTER_FOLDR" > "HOL4Base.rich_list.FILTER_FOLDR"
  53.263 +  "FILTER_FOLDL" > "HOL4Base.rich_list.FILTER_FOLDL"
  53.264 +  "FILTER_FLAT" > "List.filter_concat"
  53.265 +  "FILTER_FILTER" > "HOL4Base.rich_list.FILTER_FILTER"
  53.266 +  "FILTER_COMM" > "HOL4Base.rich_list.FILTER_COMM"
  53.267 +  "FILTER_APPEND" > "List.filter_append"
  53.268 +  "FILTER" > "HOL4Compat.FILTER"
  53.269 +  "FCOMM_FOLDR_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDR_FLAT"
  53.270 +  "FCOMM_FOLDR_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDR_APPEND"
  53.271 +  "FCOMM_FOLDL_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDL_FLAT"
  53.272 +  "FCOMM_FOLDL_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDL_APPEND"
  53.273 +  "EQ_LIST" > "HOL4Base.list.EQ_LIST"
  53.274 +  "EL_SNOC" > "HOL4Base.rich_list.EL_SNOC"
  53.275 +  "EL_SEG" > "HOL4Base.rich_list.EL_SEG"
  53.276 +  "EL_REVERSE_ELL" > "HOL4Base.rich_list.EL_REVERSE_ELL"
  53.277 +  "EL_REVERSE" > "HOL4Base.rich_list.EL_REVERSE"
  53.278 +  "EL_PRE_LENGTH" > "HOL4Base.rich_list.EL_PRE_LENGTH"
  53.279 +  "EL_MAP" > "HOL4Base.rich_list.EL_MAP"
  53.280 +  "EL_LENGTH_SNOC" > "HOL4Base.rich_list.EL_LENGTH_SNOC"
  53.281 +  "EL_LENGTH_APPEND" > "HOL4Base.rich_list.EL_LENGTH_APPEND"
  53.282 +  "EL_IS_EL" > "HOL4Base.rich_list.EL_IS_EL"
  53.283 +  "EL_ELL" > "HOL4Base.rich_list.EL_ELL"
  53.284 +  "EL_CONS" > "HOL4Base.rich_list.EL_CONS"
  53.285 +  "EL_APPEND2" > "HOL4Base.rich_list.EL_APPEND2"
  53.286 +  "EL_APPEND1" > "HOL4Base.rich_list.EL_APPEND1"
  53.287 +  "ELL_SUC_SNOC" > "HOL4Base.rich_list.ELL_SUC_SNOC"
  53.288 +  "ELL_SNOC" > "HOL4Base.rich_list.ELL_SNOC"
  53.289 +  "ELL_SEG" > "HOL4Base.rich_list.ELL_SEG"
  53.290 +  "ELL_REVERSE_EL" > "HOL4Base.rich_list.ELL_REVERSE_EL"
  53.291 +  "ELL_REVERSE" > "HOL4Base.rich_list.ELL_REVERSE"
  53.292 +  "ELL_PRE_LENGTH" > "HOL4Base.rich_list.ELL_PRE_LENGTH"
  53.293 +  "ELL_MAP" > "HOL4Base.rich_list.ELL_MAP"
  53.294 +  "ELL_LENGTH_SNOC" > "HOL4Base.rich_list.ELL_LENGTH_SNOC"
  53.295 +  "ELL_LENGTH_CONS" > "HOL4Base.rich_list.ELL_LENGTH_CONS"
  53.296 +  "ELL_LENGTH_APPEND" > "HOL4Base.rich_list.ELL_LENGTH_APPEND"
  53.297 +  "ELL_LAST" > "HOL4Base.rich_list.ELL_LAST"
  53.298 +  "ELL_IS_EL" > "HOL4Base.rich_list.ELL_IS_EL"
  53.299 +  "ELL_EL" > "HOL4Base.rich_list.ELL_EL"
  53.300 +  "ELL_CONS" > "HOL4Base.rich_list.ELL_CONS"
  53.301 +  "ELL_APPEND2" > "HOL4Base.rich_list.ELL_APPEND2"
  53.302 +  "ELL_APPEND1" > "HOL4Base.rich_list.ELL_APPEND1"
  53.303 +  "ELL_0_SNOC" > "HOL4Base.rich_list.ELL_0_SNOC"
  53.304 +  "ELL" > "HOL4Base.rich_list.ELL"
  53.305 +  "EL" > "HOL4Base.rich_list.EL"
  53.306 +  "CONS_APPEND" > "HOL4Base.rich_list.CONS_APPEND"
  53.307 +  "CONS_11" > "List.list.simps_3"
  53.308 +  "CONS" > "HOL4Base.list.CONS"
  53.309 +  "COMM_MONOID_FOLDR" > "HOL4Base.rich_list.COMM_MONOID_FOLDR"
  53.310 +  "COMM_MONOID_FOLDL" > "HOL4Base.rich_list.COMM_MONOID_FOLDL"
  53.311 +  "COMM_ASSOC_FOLDR_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDR_REVERSE"
  53.312 +  "COMM_ASSOC_FOLDL_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDL_REVERSE"
  53.313 +  "BUTLAST_CONS" > "HOL4Base.list.FRONT_CONS"
  53.314 +  "BUTLASTN_SUC_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_SUC_BUTLAST"
  53.315 +  "BUTLASTN_SEG" > "HOL4Base.rich_list.BUTLASTN_SEG"
  53.316 +  "BUTLASTN_REVERSE" > "HOL4Base.rich_list.BUTLASTN_REVERSE"
  53.317 +  "BUTLASTN_MAP" > "HOL4Base.rich_list.BUTLASTN_MAP"
  53.318 +  "BUTLASTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTLASTN_LENGTH_NIL"
  53.319 +  "BUTLASTN_LENGTH_CONS" > "HOL4Base.rich_list.BUTLASTN_LENGTH_CONS"
  53.320 +  "BUTLASTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTLASTN_LENGTH_APPEND"
  53.321 +  "BUTLASTN_LASTN_NIL" > "HOL4Base.rich_list.BUTLASTN_LASTN_NIL"
  53.322 +  "BUTLASTN_LASTN" > "HOL4Base.rich_list.BUTLASTN_LASTN"
  53.323 +  "BUTLASTN_FIRSTN" > "HOL4Base.rich_list.BUTLASTN_FIRSTN"
  53.324 +  "BUTLASTN_CONS" > "HOL4Base.rich_list.BUTLASTN_CONS"
  53.325 +  "BUTLASTN_BUTLASTN" > "HOL4Base.rich_list.BUTLASTN_BUTLASTN"
  53.326 +  "BUTLASTN_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_BUTLAST"
  53.327 +  "BUTLASTN_APPEND2" > "HOL4Base.rich_list.BUTLASTN_APPEND2"
  53.328 +  "BUTLASTN_APPEND1" > "HOL4Base.rich_list.BUTLASTN_APPEND1"
  53.329 +  "BUTLASTN_1" > "HOL4Base.rich_list.BUTLASTN_1"
  53.330 +  "BUTLASTN" > "HOL4Base.rich_list.BUTLASTN"
  53.331 +  "BUTLAST" > "HOL4Base.rich_list.BUTLAST"
  53.332 +  "BUTFIRSTN_SNOC" > "HOL4Base.rich_list.BUTFIRSTN_SNOC"
  53.333 +  "BUTFIRSTN_SEG" > "HOL4Base.rich_list.BUTFIRSTN_SEG"
  53.334 +  "BUTFIRSTN_REVERSE" > "HOL4Base.rich_list.BUTFIRSTN_REVERSE"
  53.335 +  "BUTFIRSTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_NIL"
  53.336 +  "BUTFIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_APPEND"
  53.337 +  "BUTFIRSTN_LASTN" > "HOL4Base.rich_list.BUTFIRSTN_LASTN"
  53.338 +  "BUTFIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN_BUTFIRSTN"
  53.339 +  "BUTFIRSTN_APPEND2" > "HOL4Base.rich_list.BUTFIRSTN_APPEND2"
  53.340 +  "BUTFIRSTN_APPEND1" > "HOL4Base.rich_list.BUTFIRSTN_APPEND1"
  53.341 +  "BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN"
  53.342 +  "ASSOC_FOLDR_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDR_FLAT"
  53.343 +  "ASSOC_FOLDL_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDL_FLAT"
  53.344 +  "ASSOC_APPEND" > "HOL4Base.rich_list.ASSOC_APPEND"
  53.345 +  "APPEND_SNOC" > "HOL4Base.rich_list.APPEND_SNOC"
  53.346 +  "APPEND_NIL" > "HOL4Base.rich_list.APPEND_NIL"
  53.347 +  "APPEND_LENGTH_EQ" > "HOL4Base.rich_list.APPEND_LENGTH_EQ"
  53.348 +  "APPEND_FOLDR" > "HOL4Base.rich_list.APPEND_FOLDR"
  53.349 +  "APPEND_FOLDL" > "HOL4Base.rich_list.APPEND_FOLDL"
  53.350 +  "APPEND_FIRSTN_LASTN" > "HOL4Base.rich_list.APPEND_FIRSTN_LASTN"
  53.351 +  "APPEND_FIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_FIRSTN_BUTFIRSTN"
  53.352 +  "APPEND_BUTLAST_LAST" > "List.append_butlast_last_id"
  53.353 +  "APPEND_BUTLASTN_LASTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_LASTN"
  53.354 +  "APPEND_BUTLASTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_BUTFIRSTN"
  53.355 +  "APPEND_ASSOC" > "List.append_assoc"
  53.356 +  "APPEND" > "HOL4Compat.APPEND"
  53.357 +  "AND_EL_def" > "HOL4Base.rich_list.AND_EL_def"
  53.358 +  "AND_EL_FOLDR" > "HOL4Base.rich_list.AND_EL_FOLDR"
  53.359 +  "AND_EL_FOLDL" > "HOL4Base.rich_list.AND_EL_FOLDL"
  53.360 +  "AND_EL_DEF" > "HOL4Base.rich_list.AND_EL_DEF"
  53.361 +  "ALL_EL_SNOC" > "HOL4Base.rich_list.ALL_EL_SNOC"
  53.362 +  "ALL_EL_SEG" > "HOL4Base.rich_list.ALL_EL_SEG"
  53.363 +  "ALL_EL_REVERSE" > "HOL4Base.rich_list.ALL_EL_REVERSE"
  53.364 +  "ALL_EL_REPLICATE" > "HOL4Base.rich_list.ALL_EL_REPLICATE"
  53.365 +  "ALL_EL_MAP" > "HOL4Base.rich_list.ALL_EL_MAP"
  53.366 +  "ALL_EL_LASTN" > "HOL4Base.rich_list.ALL_EL_LASTN"
  53.367 +  "ALL_EL_FOLDR_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDR_MAP"
  53.368 +  "ALL_EL_FOLDR" > "HOL4Base.rich_list.ALL_EL_FOLDR"
  53.369 +  "ALL_EL_FOLDL_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDL_MAP"
  53.370 +  "ALL_EL_FOLDL" > "HOL4Base.rich_list.ALL_EL_FOLDL"
  53.371 +  "ALL_EL_FIRSTN" > "HOL4Base.rich_list.ALL_EL_FIRSTN"
  53.372 +  "ALL_EL_CONJ" > "HOL4Base.list.EVERY_CONJ"
  53.373 +  "ALL_EL_BUTLASTN" > "HOL4Base.rich_list.ALL_EL_BUTLASTN"
  53.374 +  "ALL_EL_BUTFIRSTN" > "HOL4Base.rich_list.ALL_EL_BUTFIRSTN"
  53.375 +  "ALL_EL_APPEND" > "List.list_all_append"
  53.376 +  "ALL_EL" > "HOL4Compat.EVERY_DEF"
  53.377 +
  53.378 +end
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/src/HOL/Import/HOL/seq.imp	Fri Apr 02 17:37:45 2004 +0200
    54.3 @@ -0,0 +1,109 @@
    54.4 +import
    54.5 +
    54.6 +import_segment "hol4"
    54.7 +
    54.8 +def_maps
    54.9 +  "sums" > "sums_def"
   54.10 +  "summable" > "summable_def"
   54.11 +  "suminf" > "suminf_def"
   54.12 +  "subseq" > "subseq_def"
   54.13 +  "mono" > "mono_def"
   54.14 +  "lim" > "lim_def"
   54.15 +  "convergent" > "convergent_def"
   54.16 +  "cauchy" > "cauchy_def"
   54.17 +  "-->" > "-->_def"
   54.18 +
   54.19 +const_maps
   54.20 +  "sums" > "HOL4Real.seq.sums"
   54.21 +  "summable" > "HOL4Real.seq.summable"
   54.22 +  "suminf" > "HOL4Real.seq.suminf"
   54.23 +  "subseq" > "HOL4Real.seq.subseq"
   54.24 +  "mono" > "HOL4Real.seq.mono"
   54.25 +  "lim" > "HOL4Real.seq.lim"
   54.26 +  "convergent" > "HOL4Real.seq.convergent"
   54.27 +  "cauchy" > "HOL4Real.seq.cauchy"
   54.28 +  "-->" > "HOL4Real.seq.-->"
   54.29 +
   54.30 +thm_maps
   54.31 +  "tends_num_real" > "HOL4Real.seq.tends_num_real"
   54.32 +  "sums_def" > "HOL4Real.seq.sums_def"
   54.33 +  "sums" > "HOL4Real.seq.sums"
   54.34 +  "summable_def" > "HOL4Real.seq.summable_def"
   54.35 +  "summable" > "HOL4Real.seq.summable"
   54.36 +  "suminf_def" > "HOL4Real.seq.suminf_def"
   54.37 +  "suminf" > "HOL4Real.seq.suminf"
   54.38 +  "subseq_def" > "HOL4Real.seq.subseq_def"
   54.39 +  "subseq" > "HOL4Real.seq.subseq"
   54.40 +  "mono_def" > "HOL4Real.seq.mono_def"
   54.41 +  "mono" > "HOL4Real.seq.mono"
   54.42 +  "lim_def" > "HOL4Real.seq.lim_def"
   54.43 +  "lim" > "HOL4Real.seq.lim"
   54.44 +  "convergent_def" > "HOL4Real.seq.convergent_def"
   54.45 +  "convergent" > "HOL4Real.seq.convergent"
   54.46 +  "cauchy_def" > "HOL4Real.seq.cauchy_def"
   54.47 +  "cauchy" > "HOL4Real.seq.cauchy"
   54.48 +  "SUM_UNIQ" > "HOL4Real.seq.SUM_UNIQ"
   54.49 +  "SUM_SUMMABLE" > "HOL4Real.seq.SUM_SUMMABLE"
   54.50 +  "SUMMABLE_SUM" > "HOL4Real.seq.SUMMABLE_SUM"
   54.51 +  "SUBSEQ_SUC" > "HOL4Real.seq.SUBSEQ_SUC"
   54.52 +  "SER_ZERO" > "HOL4Real.seq.SER_ZERO"
   54.53 +  "SER_SUB" > "HOL4Real.seq.SER_SUB"
   54.54 +  "SER_RATIO" > "HOL4Real.seq.SER_RATIO"
   54.55 +  "SER_POS_LT_PAIR" > "HOL4Real.seq.SER_POS_LT_PAIR"
   54.56 +  "SER_POS_LT" > "HOL4Real.seq.SER_POS_LT"
   54.57 +  "SER_POS_LE" > "HOL4Real.seq.SER_POS_LE"
   54.58 +  "SER_PAIR" > "HOL4Real.seq.SER_PAIR"
   54.59 +  "SER_OFFSET" > "HOL4Real.seq.SER_OFFSET"
   54.60 +  "SER_NEG" > "HOL4Real.seq.SER_NEG"
   54.61 +  "SER_LE2" > "HOL4Real.seq.SER_LE2"
   54.62 +  "SER_LE" > "HOL4Real.seq.SER_LE"
   54.63 +  "SER_GROUP" > "HOL4Real.seq.SER_GROUP"
   54.64 +  "SER_COMPARA" > "HOL4Real.seq.SER_COMPARA"
   54.65 +  "SER_COMPAR" > "HOL4Real.seq.SER_COMPAR"
   54.66 +  "SER_CMUL" > "HOL4Real.seq.SER_CMUL"
   54.67 +  "SER_CDIV" > "HOL4Real.seq.SER_CDIV"
   54.68 +  "SER_CAUCHY" > "HOL4Real.seq.SER_CAUCHY"
   54.69 +  "SER_ADD" > "HOL4Real.seq.SER_ADD"
   54.70 +  "SER_ACONV" > "HOL4Real.seq.SER_ACONV"
   54.71 +  "SER_ABS" > "HOL4Real.seq.SER_ABS"
   54.72 +  "SER_0" > "HOL4Real.seq.SER_0"
   54.73 +  "SEQ_UNIQ" > "HOL4Real.seq.SEQ_UNIQ"
   54.74 +  "SEQ_SUC" > "HOL4Real.seq.SEQ_SUC"
   54.75 +  "SEQ_SUBLE" > "HOL4Real.seq.SEQ_SUBLE"
   54.76 +  "SEQ_SUB" > "HOL4Real.seq.SEQ_SUB"
   54.77 +  "SEQ_SBOUNDED" > "HOL4Real.seq.SEQ_SBOUNDED"
   54.78 +  "SEQ_POWER_ABS" > "HOL4Real.seq.SEQ_POWER_ABS"
   54.79 +  "SEQ_POWER" > "HOL4Real.seq.SEQ_POWER"
   54.80 +  "SEQ_NEG_CONV" > "HOL4Real.seq.SEQ_NEG_CONV"
   54.81 +  "SEQ_NEG_BOUNDED" > "HOL4Real.seq.SEQ_NEG_BOUNDED"
   54.82 +  "SEQ_NEG" > "HOL4Real.seq.SEQ_NEG"
   54.83 +  "SEQ_MUL" > "HOL4Real.seq.SEQ_MUL"
   54.84 +  "SEQ_MONOSUB" > "HOL4Real.seq.SEQ_MONOSUB"
   54.85 +  "SEQ_LIM" > "HOL4Real.seq.SEQ_LIM"
   54.86 +  "SEQ_LE" > "HOL4Real.seq.SEQ_LE"
   54.87 +  "SEQ_INV0" > "HOL4Real.seq.SEQ_INV0"
   54.88 +  "SEQ_INV" > "HOL4Real.seq.SEQ_INV"
   54.89 +  "SEQ_ICONV" > "HOL4Real.seq.SEQ_ICONV"
   54.90 +  "SEQ_DIV" > "HOL4Real.seq.SEQ_DIV"
   54.91 +  "SEQ_DIRECT" > "HOL4Real.seq.SEQ_DIRECT"
   54.92 +  "SEQ_CONST" > "HOL4Real.seq.SEQ_CONST"
   54.93 +  "SEQ_CBOUNDED" > "HOL4Real.seq.SEQ_CBOUNDED"
   54.94 +  "SEQ_CAUCHY" > "HOL4Real.seq.SEQ_CAUCHY"
   54.95 +  "SEQ_BOUNDED_2" > "HOL4Real.seq.SEQ_BOUNDED_2"
   54.96 +  "SEQ_BOUNDED" > "HOL4Real.seq.SEQ_BOUNDED"
   54.97 +  "SEQ_BCONV" > "HOL4Real.seq.SEQ_BCONV"
   54.98 +  "SEQ_ADD" > "HOL4Real.seq.SEQ_ADD"
   54.99 +  "SEQ_ABS_IMP" > "HOL4Real.seq.SEQ_ABS_IMP"
  54.100 +  "SEQ_ABS" > "HOL4Real.seq.SEQ_ABS"
  54.101 +  "SEQ" > "HOL4Real.seq.SEQ"
  54.102 +  "NEST_LEMMA_UNIQ" > "HOL4Real.seq.NEST_LEMMA_UNIQ"
  54.103 +  "NEST_LEMMA" > "HOL4Real.seq.NEST_LEMMA"
  54.104 +  "MONO_SUC" > "HOL4Real.seq.MONO_SUC"
  54.105 +  "MAX_LEMMA" > "HOL4Real.seq.MAX_LEMMA"
  54.106 +  "GP_FINITE" > "HOL4Real.seq.GP_FINITE"
  54.107 +  "GP" > "HOL4Real.seq.GP"
  54.108 +  "BOLZANO_LEMMA" > "HOL4Real.seq.BOLZANO_LEMMA"
  54.109 +  "ABS_NEG_LEMMA" > "HOL4Real.seq.ABS_NEG_LEMMA"
  54.110 +  "-->_def" > "HOL4Real.seq.-->_def"
  54.111 +
  54.112 +end
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/src/HOL/Import/HOL/state_transformer.imp	Fri Apr 02 17:37:45 2004 +0200
    55.3 @@ -0,0 +1,42 @@
    55.4 +import
    55.5 +
    55.6 +import_segment "hol4"
    55.7 +
    55.8 +def_maps
    55.9 +  "UNIT" > "UNIT_def"
   55.10 +  "MMAP" > "MMAP_def"
   55.11 +  "JOIN" > "JOIN_def"
   55.12 +  "BIND" > "BIND_def"
   55.13 +
   55.14 +const_maps
   55.15 +  "UNIT" > "HOL4Base.state_transformer.UNIT"
   55.16 +  "MMAP" > "HOL4Base.state_transformer.MMAP"
   55.17 +  "JOIN" > "HOL4Base.state_transformer.JOIN"
   55.18 +  "BIND" > "HOL4Base.state_transformer.BIND"
   55.19 +
   55.20 +thm_maps
   55.21 +  "UNIT_def" > "HOL4Base.state_transformer.UNIT_def"
   55.22 +  "UNIT_UNCURRY" > "HOL4Base.state_transformer.UNIT_UNCURRY"
   55.23 +  "UNIT_DEF" > "HOL4Base.state_transformer.UNIT_DEF"
   55.24 +  "SND_o_UNIT" > "HOL4Base.state_transformer.SND_o_UNIT"
   55.25 +  "MMAP_def" > "HOL4Base.state_transformer.MMAP_def"
   55.26 +  "MMAP_UNIT" > "HOL4Base.state_transformer.MMAP_UNIT"
   55.27 +  "MMAP_JOIN" > "HOL4Base.state_transformer.MMAP_JOIN"
   55.28 +  "MMAP_ID" > "HOL4Base.state_transformer.MMAP_ID"
   55.29 +  "MMAP_DEF" > "HOL4Base.state_transformer.MMAP_DEF"
   55.30 +  "MMAP_COMP" > "HOL4Base.state_transformer.MMAP_COMP"
   55.31 +  "JOIN_def" > "HOL4Base.state_transformer.JOIN_def"
   55.32 +  "JOIN_UNIT" > "HOL4Base.state_transformer.JOIN_UNIT"
   55.33 +  "JOIN_MMAP_UNIT" > "HOL4Base.state_transformer.JOIN_MMAP_UNIT"
   55.34 +  "JOIN_MAP_JOIN" > "HOL4Base.state_transformer.JOIN_MAP_JOIN"
   55.35 +  "JOIN_MAP" > "HOL4Base.state_transformer.JOIN_MAP"
   55.36 +  "JOIN_DEF" > "HOL4Base.state_transformer.JOIN_DEF"
   55.37 +  "FST_o_UNIT" > "HOL4Base.state_transformer.FST_o_UNIT"
   55.38 +  "FST_o_MMAP" > "HOL4Base.state_transformer.FST_o_MMAP"
   55.39 +  "BIND_def" > "HOL4Base.state_transformer.BIND_def"
   55.40 +  "BIND_RIGHT_UNIT" > "HOL4Base.state_transformer.BIND_RIGHT_UNIT"
   55.41 +  "BIND_LEFT_UNIT" > "HOL4Base.state_transformer.BIND_LEFT_UNIT"
   55.42 +  "BIND_DEF" > "HOL4Base.state_transformer.BIND_DEF"
   55.43 +  "BIND_ASSOC" > "HOL4Base.state_transformer.BIND_ASSOC"
   55.44 +
   55.45 +end
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/src/HOL/Import/HOL/sum.imp	Fri Apr 02 17:37:45 2004 +0200
    56.3 @@ -0,0 +1,43 @@
    56.4 +import
    56.5 +
    56.6 +import_segment "hol4"
    56.7 +
    56.8 +type_maps
    56.9 +  "sum" > "+"
   56.10 +
   56.11 +const_maps
   56.12 +  "sum_case" > "Datatype.sum.sum_case"
   56.13 +  "OUTR" > "HOL4Compat.OUTR"
   56.14 +  "OUTL" > "HOL4Compat.OUTL"
   56.15 +  "ISR" > "HOL4Compat.ISR"
   56.16 +  "ISL" > "HOL4Compat.ISL"
   56.17 +  "INR" > "Inr"
   56.18 +  "INL" > "Inl"
   56.19 +
   56.20 +thm_maps
   56.21 +  "sum_distinct1" > "Sum_Type.Inr_not_Inl"
   56.22 +  "sum_distinct" > "Sum_Type.Inl_not_Inr"
   56.23 +  "sum_case_def" > "HOL4Compat.sum_case_def"
   56.24 +  "sum_case_cong" > "HOL4Base.sum.sum_case_cong"
   56.25 +  "sum_INDUCT" > "HOL4Compat.OUTR.induct"
   56.26 +  "sum_CASES" > "Datatype.sum.nchotomy"
   56.27 +  "OUTR" > "HOL4Compat.OUTR"
   56.28 +  "OUTL" > "HOL4Compat.OUTL"
   56.29 +  "ISR" > "HOL4Compat.ISR"
   56.30 +  "ISL_OR_ISR" > "HOL4Base.sum.ISL_OR_ISR"
   56.31 +  "ISL" > "HOL4Compat.ISL"
   56.32 +  "INR_neq_INL" > "Sum_Type.Inr_not_Inl"
   56.33 +  "INR_INL_11" > "HOL4Compat.INR_INL_11"
   56.34 +  "INR" > "HOL4Base.sum.INR"
   56.35 +  "INL" > "HOL4Base.sum.INL"
   56.36 +
   56.37 +ignore_thms
   56.38 +  "sum_axiom"
   56.39 +  "sum_TY_DEF"
   56.40 +  "sum_ISO_DEF"
   56.41 +  "sum_Axiom"
   56.42 +  "IS_SUM_REP"
   56.43 +  "INR_DEF"
   56.44 +  "INL_DEF"
   56.45 +
   56.46 +end
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/src/HOL/Import/HOL/topology.imp	Fri Apr 02 17:37:45 2004 +0200
    57.3 @@ -0,0 +1,116 @@
    57.4 +import
    57.5 +
    57.6 +import_segment "hol4"
    57.7 +
    57.8 +def_maps
    57.9 +  "topology" > "topology_def"
   57.10 +  "re_universe" > "re_universe_def"
   57.11 +  "re_union" > "re_union_def"
   57.12 +  "re_subset" > "re_subset_def"
   57.13 +  "re_null" > "re_null_def"
   57.14 +  "re_intersect" > "re_intersect_def"
   57.15 +  "re_compl" > "re_compl_def"
   57.16 +  "re_Union" > "re_Union_def"
   57.17 +  "open" > "open_def"
   57.18 +  "neigh" > "neigh_def"
   57.19 +  "mtop" > "mtop_def"
   57.20 +  "mr1" > "mr1_def"
   57.21 +  "metric" > "metric_def"
   57.22 +  "limpt" > "limpt_def"
   57.23 +  "istopology" > "istopology_def"
   57.24 +  "ismet" > "ismet_def"
   57.25 +  "dist" > "dist_def"
   57.26 +  "closed" > "closed_def"
   57.27 +  "B" > "B_def"
   57.28 +
   57.29 +type_maps
   57.30 +  "topology" > "HOL4Real.topology.topology"
   57.31 +  "metric" > "HOL4Real.topology.metric"
   57.32 +
   57.33 +const_maps
   57.34 +  "re_universe" > "HOL4Real.topology.re_universe"
   57.35 +  "re_union" > "HOL4Real.topology.re_union"
   57.36 +  "re_subset" > "HOL4Real.topology.re_subset"
   57.37 +  "re_null" > "HOL4Real.topology.re_null"
   57.38 +  "re_intersect" > "HOL4Real.topology.re_intersect"
   57.39 +  "re_compl" > "HOL4Real.topology.re_compl"
   57.40 +  "re_Union" > "HOL4Real.topology.re_Union"
   57.41 +  "neigh" > "HOL4Real.topology.neigh"
   57.42 +  "mtop" > "HOL4Real.topology.mtop"
   57.43 +  "mr1" > "HOL4Real.topology.mr1"
   57.44 +  "limpt" > "HOL4Real.topology.limpt"
   57.45 +  "istopology" > "HOL4Real.topology.istopology"
   57.46 +  "ismet" > "HOL4Real.topology.ismet"
   57.47 +  "closed" > "HOL4Real.topology.closed"
   57.48 +  "B" > "HOL4Real.topology.B"
   57.49 +
   57.50 +thm_maps
   57.51 +  "topology_tybij" > "HOL4Real.topology.topology_tybij"
   57.52 +  "topology_TY_DEF" > "HOL4Real.topology.topology_TY_DEF"
   57.53 +  "re_universe_def" > "HOL4Real.topology.re_universe_def"
   57.54 +  "re_universe" > "HOL4Real.topology.re_universe"
   57.55 +  "re_union_def" > "HOL4Real.topology.re_union_def"
   57.56 +  "re_union" > "HOL4Real.topology.re_union"
   57.57 +  "re_subset_def" > "HOL4Real.topology.re_subset_def"
   57.58 +  "re_subset" > "HOL4Real.topology.re_subset"
   57.59 +  "re_null_def" > "HOL4Real.topology.re_null_def"
   57.60 +  "re_null" > "HOL4Real.topology.re_null"
   57.61 +  "re_intersect_def" > "HOL4Real.topology.re_intersect_def"
   57.62 +  "re_intersect" > "HOL4Real.topology.re_intersect"
   57.63 +  "re_compl_def" > "HOL4Real.topology.re_compl_def"
   57.64 +  "re_compl" > "HOL4Real.topology.re_compl"
   57.65 +  "re_Union_def" > "HOL4Real.topology.re_Union_def"
   57.66 +  "re_Union" > "HOL4Real.topology.re_Union"
   57.67 +  "neigh_def" > "HOL4Real.topology.neigh_def"
   57.68 +  "neigh" > "HOL4Real.topology.neigh"
   57.69 +  "mtop_istopology" > "HOL4Real.topology.mtop_istopology"
   57.70 +  "mtop_def" > "HOL4Real.topology.mtop_def"
   57.71 +  "mtop" > "HOL4Real.topology.mtop"
   57.72 +  "mr1_def" > "HOL4Real.topology.mr1_def"
   57.73 +  "mr1" > "HOL4Real.topology.mr1"
   57.74 +  "metric_tybij" > "HOL4Real.topology.metric_tybij"
   57.75 +  "metric_TY_DEF" > "HOL4Real.topology.metric_TY_DEF"
   57.76 +  "limpt_def" > "HOL4Real.topology.limpt_def"
   57.77 +  "limpt" > "HOL4Real.topology.limpt"
   57.78 +  "istopology_def" > "HOL4Real.topology.istopology_def"
   57.79 +  "istopology" > "HOL4Real.topology.istopology"
   57.80 +  "ismet_def" > "HOL4Real.topology.ismet_def"
   57.81 +  "ismet" > "HOL4Real.topology.ismet"
   57.82 +  "closed_def" > "HOL4Real.topology.closed_def"
   57.83 +  "closed" > "HOL4Real.topology.closed"
   57.84 +  "ball" > "HOL4Real.topology.ball"
   57.85 +  "TOPOLOGY_UNION" > "HOL4Real.topology.TOPOLOGY_UNION"
   57.86 +  "TOPOLOGY" > "HOL4Real.topology.TOPOLOGY"
   57.87 +  "SUBSET_TRANS" > "HOL4Real.topology.SUBSET_TRANS"
   57.88 +  "SUBSET_REFL" > "HOL4Real.topology.SUBSET_REFL"
   57.89 +  "SUBSET_ANTISYM" > "HOL4Real.topology.SUBSET_ANTISYM"
   57.90 +  "OPEN_UNOPEN" > "HOL4Real.topology.OPEN_UNOPEN"
   57.91 +  "OPEN_SUBOPEN" > "HOL4Real.topology.OPEN_SUBOPEN"
   57.92 +  "OPEN_OWN_NEIGH" > "HOL4Real.topology.OPEN_OWN_NEIGH"
   57.93 +  "OPEN_NEIGH" > "HOL4Real.topology.OPEN_NEIGH"
   57.94 +  "MTOP_OPEN" > "HOL4Real.topology.MTOP_OPEN"
   57.95 +  "MTOP_LIMPT" > "HOL4Real.topology.MTOP_LIMPT"
   57.96 +  "MR1_SUB_LT" > "HOL4Real.topology.MR1_SUB_LT"
   57.97 +  "MR1_SUB_LE" > "HOL4Real.topology.MR1_SUB_LE"
   57.98 +  "MR1_SUB" > "HOL4Real.topology.MR1_SUB"
   57.99 +  "MR1_LIMPT" > "HOL4Real.topology.MR1_LIMPT"
  57.100 +  "MR1_DEF" > "HOL4Real.topology.MR1_DEF"
  57.101 +  "MR1_BETWEEN1" > "HOL4Real.topology.MR1_BETWEEN1"
  57.102 +  "MR1_ADD_POS" > "HOL4Real.topology.MR1_ADD_POS"
  57.103 +  "MR1_ADD_LT" > "HOL4Real.topology.MR1_ADD_LT"
  57.104 +  "MR1_ADD" > "HOL4Real.topology.MR1_ADD"
  57.105 +  "METRIC_ZERO" > "HOL4Real.topology.METRIC_ZERO"
  57.106 +  "METRIC_TRIANGLE" > "HOL4Real.topology.METRIC_TRIANGLE"
  57.107 +  "METRIC_SYM" > "HOL4Real.topology.METRIC_SYM"
  57.108 +  "METRIC_SAME" > "HOL4Real.topology.METRIC_SAME"
  57.109 +  "METRIC_POS" > "HOL4Real.topology.METRIC_POS"
  57.110 +  "METRIC_NZ" > "HOL4Real.topology.METRIC_NZ"
  57.111 +  "METRIC_ISMET" > "HOL4Real.topology.METRIC_ISMET"
  57.112 +  "ISMET_R1" > "HOL4Real.topology.ISMET_R1"
  57.113 +  "COMPL_MEM" > "HOL4Real.topology.COMPL_MEM"
  57.114 +  "CLOSED_LIMPT" > "HOL4Real.topology.CLOSED_LIMPT"
  57.115 +  "B_def" > "HOL4Real.topology.B_def"
  57.116 +  "BALL_OPEN" > "HOL4Real.topology.BALL_OPEN"
  57.117 +  "BALL_NEIGH" > "HOL4Real.topology.BALL_NEIGH"
  57.118 +
  57.119 +end
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/src/HOL/Import/HOL/transc.imp	Fri Apr 02 17:37:45 2004 +0200
    58.3 @@ -0,0 +1,273 @@
    58.4 +import
    58.5 +
    58.6 +import_segment "hol4"
    58.7 +
    58.8 +def_maps
    58.9 +  "tdiv" > "tdiv_def"
   58.10 +  "tan" > "tan_def"
   58.11 +  "sqrt" > "sqrt_def"
   58.12 +  "sin" > "sin_def"
   58.13 +  "rsum" > "rsum_def"
   58.14 +  "root" > "root_def"
   58.15 +  "pi" > "pi_def"
   58.16 +  "ln" > "ln_def"
   58.17 +  "gauge" > "gauge_def"
   58.18 +  "fine" > "fine_def"
   58.19 +  "exp" > "exp_def"
   58.20 +  "dsize" > "dsize_def"
   58.21 +  "division" > "division_def"
   58.22 +  "cos" > "cos_def"
   58.23 +  "atn" > "atn_def"
   58.24 +  "asn" > "asn_def"
   58.25 +  "acs" > "acs_def"
   58.26 +  "Dint" > "Dint_def"
   58.27 +
   58.28 +const_maps
   58.29 +  "tdiv" > "HOL4Real.transc.tdiv"
   58.30 +  "tan" > "HOL4Real.transc.tan"
   58.31 +  "sqrt" > "HOL4Real.transc.sqrt"
   58.32 +  "sin" > "HOL4Real.transc.sin"
   58.33 +  "rsum" > "HOL4Real.transc.rsum"
   58.34 +  "root" > "HOL4Real.transc.root"
   58.35 +  "pi" > "HOL4Real.transc.pi"
   58.36 +  "ln" > "HOL4Real.transc.ln"
   58.37 +  "gauge" > "HOL4Real.transc.gauge"
   58.38 +  "fine" > "HOL4Real.transc.fine"
   58.39 +  "exp" > "HOL4Real.transc.exp"
   58.40 +  "dsize" > "HOL4Real.transc.dsize"
   58.41 +  "division" > "HOL4Real.transc.division"
   58.42 +  "cos" > "HOL4Real.transc.cos"
   58.43 +  "atn" > "HOL4Real.transc.atn"
   58.44 +  "asn" > "HOL4Real.transc.asn"
   58.45 +  "acs" > "HOL4Real.transc.acs"
   58.46 +  "Dint" > "HOL4Real.transc.Dint"
   58.47 +
   58.48 +thm_maps
   58.49 +  "tdiv_def" > "HOL4Real.transc.tdiv_def"
   58.50 +  "tdiv" > "HOL4Real.transc.tdiv"
   58.51 +  "tan_def" > "HOL4Real.transc.tan_def"
   58.52 +  "tan" > "HOL4Real.transc.tan"
   58.53 +  "sqrt_def" > "HOL4Real.transc.sqrt_def"
   58.54 +  "sqrt" > "HOL4Real.transc.sqrt"
   58.55 +  "sin_def" > "HOL4Real.transc.sin_def"
   58.56 +  "sin" > "HOL4Real.transc.sin"
   58.57 +  "rsum_def" > "HOL4Real.transc.rsum_def"
   58.58 +  "rsum" > "HOL4Real.transc.rsum"
   58.59 +  "root_def" > "HOL4Real.transc.root_def"
   58.60 +  "root" > "HOL4Real.transc.root"
   58.61 +  "pi_def" > "HOL4Real.transc.pi_def"
   58.62 +  "pi" > "HOL4Real.transc.pi"
   58.63 +  "ln_def" > "HOL4Real.transc.ln_def"
   58.64 +  "ln" > "HOL4Real.transc.ln"
   58.65 +  "gauge_def" > "HOL4Real.transc.gauge_def"
   58.66 +  "gauge" > "HOL4Real.transc.gauge"
   58.67 +  "fine_def" > "HOL4Real.transc.fine_def"
   58.68 +  "fine" > "HOL4Real.transc.fine"
   58.69 +  "exp_def" > "HOL4Real.transc.exp_def"
   58.70 +  "exp" > "HOL4Real.transc.exp"
   58.71 +  "dsize_def" > "HOL4Real.transc.dsize_def"
   58.72 +  "dsize" > "HOL4Real.transc.dsize"
   58.73 +  "division_def" > "HOL4Real.transc.division_def"
   58.74 +  "division" > "HOL4Real.transc.division"
   58.75 +  "cos_def" > "HOL4Real.transc.cos_def"
   58.76 +  "cos" > "HOL4Real.transc.cos"
   58.77 +  "atn_def" > "HOL4Real.transc.atn_def"
   58.78 +  "atn" > "HOL4Real.transc.atn"
   58.79 +  "asn_def" > "HOL4Real.transc.asn_def"
   58.80 +  "asn" > "HOL4Real.transc.asn"
   58.81 +  "acs_def" > "HOL4Real.transc.acs_def"
   58.82 +  "acs" > "HOL4Real.transc.acs"
   58.83 +  "TAN_TOTAL_POS" > "HOL4Real.transc.TAN_TOTAL_POS"
   58.84 +  "TAN_TOTAL_LEMMA" > "HOL4Real.transc.TAN_TOTAL_LEMMA"
   58.85 +  "TAN_TOTAL" > "HOL4Real.transc.TAN_TOTAL"
   58.86 +  "TAN_SEC" > "HOL4Real.transc.TAN_SEC"
   58.87 +  "TAN_POS_PI2" > "HOL4Real.transc.TAN_POS_PI2"
   58.88 +  "TAN_PI" > "HOL4Real.transc.TAN_PI"
   58.89 +  "TAN_PERIODIC" > "HOL4Real.transc.TAN_PERIODIC"
   58.90 +  "TAN_NPI" > "HOL4Real.transc.TAN_NPI"
   58.91 +  "TAN_NEG" > "HOL4Real.transc.TAN_NEG"
   58.92 +  "TAN_DOUBLE" > "HOL4Real.transc.TAN_DOUBLE"
   58.93 +  "TAN_ATN" > "HOL4Real.transc.TAN_ATN"
   58.94 +  "TAN_ADD" > "HOL4Real.transc.TAN_ADD"
   58.95 +  "TAN_0" > "HOL4Real.transc.TAN_0"
   58.96 +  "SQRT_POW_2" > "HOL4Real.transc.SQRT_POW_2"
   58.97 +  "SQRT_POW2" > "HOL4Real.transc.SQRT_POW2"
   58.98 +  "SQRT_POS_UNIQ" > "HOL4Real.transc.SQRT_POS_UNIQ"
   58.99 +  "SQRT_POS_LT" > "HOL4Real.transc.SQRT_POS_LT"
  58.100 +  "SQRT_POS_LE" > "HOL4Real.transc.SQRT_POS_LE"
  58.101 +  "SQRT_MUL" > "HOL4Real.transc.SQRT_MUL"
  58.102 +  "SQRT_MONO_LE" > "HOL4Real.transc.SQRT_MONO_LE"
  58.103 +  "SQRT_INV" > "HOL4Real.transc.SQRT_INV"
  58.104 +  "SQRT_EVEN_POW2" > "HOL4Real.transc.SQRT_EVEN_POW2"
  58.105 +  "SQRT_EQ" > "HOL4Real.transc.SQRT_EQ"
  58.106 +  "SQRT_DIV" > "HOL4Real.transc.SQRT_DIV"
  58.107 +  "SQRT_1" > "HOL4Real.transc.SQRT_1"
  58.108 +  "SQRT_0" > "HOL4Real.transc.SQRT_0"
  58.109 +  "SIN_ZERO_LEMMA" > "HOL4Real.transc.SIN_ZERO_LEMMA"
  58.110 +  "SIN_ZERO" > "HOL4Real.transc.SIN_ZERO"
  58.111 +  "SIN_TOTAL" > "HOL4Real.transc.SIN_TOTAL"
  58.112 +  "SIN_POS_PI_LE" > "HOL4Real.transc.SIN_POS_PI_LE"
  58.113 +  "SIN_POS_PI2_LE" > "HOL4Real.transc.SIN_POS_PI2_LE"
  58.114 +  "SIN_POS_PI2" > "HOL4Real.transc.SIN_POS_PI2"
  58.115 +  "SIN_POS_PI" > "HOL4Real.transc.SIN_POS_PI"
  58.116 +  "SIN_POS" > "HOL4Real.transc.SIN_POS"
  58.117 +  "SIN_PI2" > "HOL4Real.transc.SIN_PI2"
  58.118 +  "SIN_PI" > "HOL4Real.transc.SIN_PI"
  58.119 +  "SIN_PERIODIC_PI" > "HOL4Real.transc.SIN_PERIODIC_PI"
  58.120 +  "SIN_PERIODIC" > "HOL4Real.transc.SIN_PERIODIC"
  58.121 +  "SIN_PAIRED" > "HOL4Real.transc.SIN_PAIRED"
  58.122 +  "SIN_NPI" > "HOL4Real.transc.SIN_NPI"
  58.123 +  "SIN_NEGLEMMA" > "HOL4Real.transc.SIN_NEGLEMMA"
  58.124 +  "SIN_NEG" > "HOL4Real.transc.SIN_NEG"
  58.125 +  "SIN_FDIFF" > "HOL4Real.transc.SIN_FDIFF"
  58.126 +  "SIN_DOUBLE" > "HOL4Real.transc.SIN_DOUBLE"
  58.127 +  "SIN_COS_SQRT" > "HOL4Real.transc.SIN_COS_SQRT"
  58.128 +  "SIN_COS_SQ" > "HOL4Real.transc.SIN_COS_SQ"
  58.129 +  "SIN_COS_NEG" > "HOL4Real.transc.SIN_COS_NEG"
  58.130 +  "SIN_COS_ADD" > "HOL4Real.transc.SIN_COS_ADD"
  58.131 +  "SIN_COS" > "HOL4Real.transc.SIN_COS"
  58.132 +  "SIN_CONVERGES" > "HOL4Real.transc.SIN_CONVERGES"
  58.133 +  "SIN_CIRCLE" > "HOL4Real.transc.SIN_CIRCLE"
  58.134 +  "SIN_BOUNDS" > "HOL4Real.transc.SIN_BOUNDS"
  58.135 +  "SIN_BOUND" > "HOL4Real.transc.SIN_BOUND"
  58.136 +  "SIN_ASN" > "HOL4Real.transc.SIN_ASN"
  58.137 +  "SIN_ADD" > "HOL4Real.transc.SIN_ADD"
  58.138 +  "SIN_ACS_NZ" > "HOL4Real.transc.SIN_ACS_NZ"
  58.139 +  "SIN_0" > "HOL4Real.transc.SIN_0"
  58.140 +  "ROOT_POW_POS" > "HOL4Real.transc.ROOT_POW_POS"
  58.141 +  "ROOT_POS_UNIQ" > "HOL4Real.transc.ROOT_POS_UNIQ"
  58.142 +  "ROOT_POS_LT" > "HOL4Real.transc.ROOT_POS_LT"
  58.143 +  "ROOT_POS" > "HOL4Real.transc.ROOT_POS"
  58.144 +  "ROOT_MUL" > "HOL4Real.transc.ROOT_MUL"
  58.145 +  "ROOT_MONO_LE" > "HOL4Real.transc.ROOT_MONO_LE"
  58.146 +  "ROOT_LT_LEMMA" > "HOL4Real.transc.ROOT_LT_LEMMA"
  58.147 +  "ROOT_LN" > "HOL4Real.transc.ROOT_LN"
  58.148 +  "ROOT_INV" > "HOL4Real.transc.ROOT_INV"
  58.149 +  "ROOT_DIV" > "HOL4Real.transc.ROOT_DIV"
  58.150 +  "ROOT_1" > "HOL4Real.transc.ROOT_1"
  58.151 +  "ROOT_0" > "HOL4Real.transc.ROOT_0"
  58.152 +  "REAL_DIV_SQRT" > "HOL4Real.transc.REAL_DIV_SQRT"
  58.153 +  "POW_ROOT_POS" > "HOL4Real.transc.POW_ROOT_POS"
  58.154 +  "POW_2_SQRT" > "HOL4Real.transc.POW_2_SQRT"
  58.155 +  "PI_POS" > "HOL4Real.transc.PI_POS"
  58.156 +  "PI2_BOUNDS" > "HOL4Real.transc.PI2_BOUNDS"
  58.157 +  "PI2" > "HOL4Real.transc.PI2"
  58.158 +  "MCLAURIN_ZERO" > "HOL4Real.transc.MCLAURIN_ZERO"
  58.159 +  "MCLAURIN_NEG" > "HOL4Real.transc.MCLAURIN_NEG"
  58.160 +  "MCLAURIN_EXP_LT" > "HOL4Real.transc.MCLAURIN_EXP_LT"
  58.161 +  "MCLAURIN_EXP_LE" > "HOL4Real.transc.MCLAURIN_EXP_LE"
  58.162 +  "MCLAURIN_ALL_LT" > "HOL4Real.transc.MCLAURIN_ALL_LT"
  58.163 +  "MCLAURIN_ALL_LE" > "HOL4Real.transc.MCLAURIN_ALL_LE"
  58.164 +  "MCLAURIN" > "HOL4Real.transc.MCLAURIN"
  58.165 +  "LN_POW" > "HOL4Real.transc.LN_POW"
  58.166 +  "LN_POS" > "HOL4Real.transc.LN_POS"
  58.167 +  "LN_MUL" > "HOL4Real.transc.LN_MUL"
  58.168 +  "LN_MONO_LT" > "HOL4Real.transc.LN_MONO_LT"
  58.169 +  "LN_MONO_LE" > "HOL4Real.transc.LN_MONO_LE"
  58.170 +  "LN_LT_X" > "HOL4Real.transc.LN_LT_X"
  58.171 +  "LN_LE" > "HOL4Real.transc.LN_LE"
  58.172 +  "LN_INV" > "HOL4Real.transc.LN_INV"
  58.173 +  "LN_INJ" > "HOL4Real.transc.LN_INJ"
  58.174 +  "LN_EXP" > "HOL4Real.transc.LN_EXP"
  58.175 +  "LN_DIV" > "HOL4Real.transc.LN_DIV"
  58.176 +  "LN_1" > "HOL4Real.transc.LN_1"
  58.177 +  "INTEGRAL_NULL" > "HOL4Real.transc.INTEGRAL_NULL"
  58.178 +  "GAUGE_MIN" > "HOL4Real.transc.GAUGE_MIN"
  58.179 +  "FTC1" > "HOL4Real.transc.FTC1"
  58.180 +  "FINE_MIN" > "HOL4Real.transc.FINE_MIN"
  58.181 +  "EXP_TOTAL_LEMMA" > "HOL4Real.transc.EXP_TOTAL_LEMMA"
  58.182 +  "EXP_TOTAL" > "HOL4Real.transc.EXP_TOTAL"
  58.183 +  "EXP_SUB" > "HOL4Real.transc.EXP_SUB"
  58.184 +  "EXP_POS_LT" > "HOL4Real.transc.EXP_POS_LT"
  58.185 +  "EXP_POS_LE" > "HOL4Real.transc.EXP_POS_LE"
  58.186 +  "EXP_NZ" > "HOL4Real.transc.EXP_NZ"
  58.187 +  "EXP_NEG_MUL2" > "HOL4Real.transc.EXP_NEG_MUL2"
  58.188 +  "EXP_NEG_MUL" > "HOL4Real.transc.EXP_NEG_MUL"
  58.189 +  "EXP_NEG" > "HOL4Real.transc.EXP_NEG"
  58.190 +  "EXP_N" > "HOL4Real.transc.EXP_N"
  58.191 +  "EXP_MONO_LT" > "HOL4Real.transc.EXP_MONO_LT"
  58.192 +  "EXP_MONO_LE" > "HOL4Real.transc.EXP_MONO_LE"
  58.193 +  "EXP_MONO_IMP" > "HOL4Real.transc.EXP_MONO_IMP"
  58.194 +  "EXP_LT_1" > "HOL4Real.transc.EXP_LT_1"
  58.195 +  "EXP_LN" > "HOL4Real.transc.EXP_LN"
  58.196 +  "EXP_LE_X" > "HOL4Real.transc.EXP_LE_X"
  58.197 +  "EXP_INJ" > "HOL4Real.transc.EXP_INJ"
  58.198 +  "EXP_FDIFF" > "HOL4Real.transc.EXP_FDIFF"
  58.199 +  "EXP_CONVERGES" > "HOL4Real.transc.EXP_CONVERGES"
  58.200 +  "EXP_ADD_MUL" > "HOL4Real.transc.EXP_ADD_MUL"
  58.201 +  "EXP_ADD" > "HOL4Real.transc.EXP_ADD"
  58.202 +  "EXP_0" > "HOL4Real.transc.EXP_0"
  58.203 +  "Dint_def" > "HOL4Real.transc.Dint_def"
  58.204 +  "Dint" > "HOL4Real.transc.Dint"
  58.205 +  "DIVISION_UBOUND_LT" > "HOL4Real.transc.DIVISION_UBOUND_LT"
  58.206 +  "DIVISION_UBOUND" > "HOL4Real.transc.DIVISION_UBOUND"
  58.207 +  "DIVISION_THM" > "HOL4Real.transc.DIVISION_THM"
  58.208 +  "DIVISION_SINGLE" > "HOL4Real.transc.DIVISION_SINGLE"
  58.209 +  "DIVISION_RHS" > "HOL4Real.transc.DIVISION_RHS"
  58.210 +  "DIVISION_LT_GEN" > "HOL4Real.transc.DIVISION_LT_GEN"
  58.211 +  "DIVISION_LT" > "HOL4Real.transc.DIVISION_LT"
  58.212 +  "DIVISION_LHS" > "HOL4Real.transc.DIVISION_LHS"
  58.213 +  "DIVISION_LE" > "HOL4Real.transc.DIVISION_LE"
  58.214 +  "DIVISION_LBOUND_LT" > "HOL4Real.transc.DIVISION_LBOUND_LT"
  58.215 +  "DIVISION_LBOUND" > "HOL4Real.transc.DIVISION_LBOUND"
  58.216 +  "DIVISION_GT" > "HOL4Real.transc.DIVISION_GT"
  58.217 +  "DIVISION_EXISTS" > "HOL4Real.transc.DIVISION_EXISTS"
  58.218 +  "DIVISION_EQ" > "HOL4Real.transc.DIVISION_EQ"
  58.219 +  "DIVISION_APPEND" > "HOL4Real.transc.DIVISION_APPEND"
  58.220 +  "DIVISION_1" > "HOL4Real.transc.DIVISION_1"
  58.221 +  "DIVISION_0" > "HOL4Real.transc.DIVISION_0"
  58.222 +  "DINT_UNIQ" > "HOL4Real.transc.DINT_UNIQ"
  58.223 +  "DIFF_TAN" > "HOL4Real.transc.DIFF_TAN"
  58.224 +  "DIFF_SIN" > "HOL4Real.transc.DIFF_SIN"
  58.225 +  "DIFF_LN_COMPOSITE" > "HOL4Real.transc.DIFF_LN_COMPOSITE"
  58.226 +  "DIFF_LN" > "HOL4Real.transc.DIFF_LN"
  58.227 +  "DIFF_EXP" > "HOL4Real.transc.DIFF_EXP"
  58.228 +  "DIFF_COS" > "HOL4Real.transc.DIFF_COS"
  58.229 +  "DIFF_COMPOSITE" > "HOL4Real.transc.DIFF_COMPOSITE"
  58.230 +  "DIFF_ATN" > "HOL4Real.transc.DIFF_ATN"
  58.231 +  "DIFF_ASN_LEMMA" > "HOL4Real.transc.DIFF_ASN_LEMMA"
  58.232 +  "DIFF_ASN" > "HOL4Real.transc.DIFF_ASN"
  58.233 +  "DIFF_ACS_LEMMA" > "HOL4Real.transc.DIFF_ACS_LEMMA"
  58.234 +  "DIFF_ACS" > "HOL4Real.transc.DIFF_ACS"
  58.235 +  "COS_ZERO_LEMMA" > "HOL4Real.transc.COS_ZERO_LEMMA"
  58.236 +  "COS_ZERO" > "HOL4Real.transc.COS_ZERO"
  58.237 +  "COS_TOTAL" > "HOL4Real.transc.COS_TOTAL"
  58.238 +  "COS_SIN_SQRT" > "HOL4Real.transc.COS_SIN_SQRT"
  58.239 +  "COS_SIN_SQ" > "HOL4Real.transc.COS_SIN_SQ"
  58.240 +  "COS_SIN" > "HOL4Real.transc.COS_SIN"
  58.241 +  "COS_POS_PI_LE" > "HOL4Real.transc.COS_POS_PI_LE"
  58.242 +  "COS_POS_PI2_LE" > "HOL4Real.transc.COS_POS_PI2_LE"
  58.243 +  "COS_POS_PI2" > "HOL4Real.transc.COS_POS_PI2"
  58.244 +  "COS_POS_PI" > "HOL4Real.transc.COS_POS_PI"
  58.245 +  "COS_PI2" > "HOL4Real.transc.COS_PI2"
  58.246 +  "COS_PI" > "HOL4Real.transc.COS_PI"
  58.247 +  "COS_PERIODIC_PI" > "HOL4Real.transc.COS_PERIODIC_PI"
  58.248 +  "COS_PERIODIC" > "HOL4Real.transc.COS_PERIODIC"
  58.249 +  "COS_PAIRED" > "HOL4Real.transc.COS_PAIRED"
  58.250 +  "COS_NPI" > "HOL4Real.transc.COS_NPI"
  58.251 +  "COS_NEG" > "HOL4Real.transc.COS_NEG"
  58.252 +  "COS_ISZERO" > "HOL4Real.transc.COS_ISZERO"
  58.253 +  "COS_FDIFF" > "HOL4Real.transc.COS_FDIFF"
  58.254 +  "COS_DOUBLE" > "HOL4Real.transc.COS_DOUBLE"
  58.255 +  "COS_CONVERGES" > "HOL4Real.transc.COS_CONVERGES"
  58.256 +  "COS_BOUNDS" > "HOL4Real.transc.COS_BOUNDS"
  58.257 +  "COS_BOUND" > "HOL4Real.transc.COS_BOUND"
  58.258 +  "COS_ATN_NZ" > "HOL4Real.transc.COS_ATN_NZ"
  58.259 +  "COS_ASN_NZ" > "HOL4Real.transc.COS_ASN_NZ"
  58.260 +  "COS_ADD" > "HOL4Real.transc.COS_ADD"
  58.261 +  "COS_ACS" > "HOL4Real.transc.COS_ACS"
  58.262 +  "COS_2" > "HOL4Real.transc.COS_2"
  58.263 +  "COS_0" > "HOL4Real.transc.COS_0"
  58.264 +  "ATN_TAN" > "HOL4Real.transc.ATN_TAN"
  58.265 +  "ATN_BOUNDS" > "HOL4Real.transc.ATN_BOUNDS"
  58.266 +  "ATN" > "HOL4Real.transc.ATN"
  58.267 +  "ASN_SIN" > "HOL4Real.transc.ASN_SIN"
  58.268 +  "ASN_BOUNDS_LT" > "HOL4Real.transc.ASN_BOUNDS_LT"
  58.269 +  "ASN_BOUNDS" > "HOL4Real.transc.ASN_BOUNDS"
  58.270 +  "ASN" > "HOL4Real.transc.ASN"
  58.271 +  "ACS_COS" > "HOL4Real.transc.ACS_COS"
  58.272 +  "ACS_BOUNDS_LT" > "HOL4Real.transc.ACS_BOUNDS_LT"
  58.273 +  "ACS_BOUNDS" > "HOL4Real.transc.ACS_BOUNDS"
  58.274 +  "ACS" > "HOL4Real.transc.ACS"
  58.275 +
  58.276 +end
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/src/HOL/Import/HOL/word32.imp	Fri Apr 02 17:37:45 2004 +0200
    59.3 @@ -0,0 +1,377 @@
    59.4 +import
    59.5 +
    59.6 +import_segment "hol4"
    59.7 +
    59.8 +def_maps
    59.9 +  "word_suc" > "word_suc_def"
   59.10 +  "word_sub" > "word_sub_def"
   59.11 +  "word_ror1" > "word_ror1_def"
   59.12 +  "word_ror" > "word_ror_def"
   59.13 +  "word_mul" > "word_mul_def"
   59.14 +  "word_lsr1" > "word_lsr1_def"
   59.15 +  "word_lsr" > "word_lsr_def"
   59.16 +  "word_lsl" > "word_lsl_def"
   59.17 +  "word_asr1" > "word_asr1_def"
   59.18 +  "word_asr" > "word_asr_def"
   59.19 +  "word_add" > "word_add_def"
   59.20 +  "word_2comp" > "word_2comp_def"
   59.21 +  "word_1comp" > "word_1comp_def"
   59.22 +  "w_T" > "w_T_primdef"
   59.23 +  "w_1" > "w_1_primdef"
   59.24 +  "w_0" > "w_0_primdef"
   59.25 +  "w2n" > "w2n_primdef"
   59.26 +  "n2w" > "n2w_primdef"
   59.27 +  "mk_word32" > "mk_word32_def"
   59.28 +  "dest_word32" > "dest_word32_def"
   59.29 +  "bitwise_or" > "bitwise_or_def"
   59.30 +  "bitwise_eor" > "bitwise_eor_def"
   59.31 +  "bitwise_and" > "bitwise_and_def"
   59.32 +  "WL" > "WL_primdef"
   59.33 +  "TWO_COMP" > "TWO_COMP_primdef"
   59.34 +  "TOw" > "TOw_primdef"
   59.35 +  "SLICEw" > "SLICEw_primdef"
   59.36 +  "RRXn" > "RRXn_primdef"
   59.37 +  "RRX" > "RRX_primdef"
   59.38 +  "ROR_ONE" > "ROR_ONE_primdef"
   59.39 +  "OR" > "OR_primdef"
   59.40 +  "ONE_COMP" > "ONE_COMP_primdef"
   59.41 +  "MSBn" > "MSBn_primdef"
   59.42 +  "MSB" > "MSB_primdef"
   59.43 +  "MODw" > "MODw_primdef"
   59.44 +  "LSR_ONE" > "LSR_ONE_primdef"
   59.45 +  "LSB" > "LSB_primdef"
   59.46 +  "INw" > "INw_primdef"
   59.47 +  "HB" > "HB_primdef"
   59.48 +  "EQUIV" > "EQUIV_primdef"
   59.49 +  "EOR" > "EOR_primdef"
   59.50 +  "COMP0" > "COMP0_primdef"
   59.51 +  "BITw" > "BITw_primdef"
   59.52 +  "BITSw" > "BITSw_primdef"
   59.53 +  "ASR_ONE" > "ASR_ONE_primdef"
   59.54 +  "AONE" > "AONE_primdef"
   59.55 +  "AND" > "AND_primdef"
   59.56 +
   59.57 +type_maps
   59.58 +  "word32" > "HOL4Word32.word32.word32"
   59.59 +
   59.60 +const_maps
   59.61 +  "word_suc" > "HOL4Word32.word32.word_suc"
   59.62 +  "word_sub" > "HOL4Word32.word32.word_sub"
   59.63 +  "word_ror1" > "HOL4Word32.word32.word_ror1"
   59.64 +  "word_ror" > "HOL4Word32.word32.word_ror"
   59.65 +  "word_mul" > "HOL4Word32.word32.word_mul"
   59.66 +  "word_lsr1" > "HOL4Word32.word32.word_lsr1"
   59.67 +  "word_lsr" > "HOL4Word32.word32.word_lsr"
   59.68 +  "word_lsl" > "HOL4Word32.word32.word_lsl"
   59.69 +  "word_asr1" > "HOL4Word32.word32.word_asr1"
   59.70 +  "word_asr" > "HOL4Word32.word32.word_asr"
   59.71 +  "word_add" > "HOL4Word32.word32.word_add"
   59.72 +  "word_2comp" > "HOL4Word32.word32.word_2comp"
   59.73 +  "word_1comp" > "HOL4Word32.word32.word_1comp"
   59.74 +  "w_T" > "HOL4Word32.word32.w_T"
   59.75 +  "w_1" > "HOL4Word32.word32.w_1"
   59.76 +  "w_0" > "HOL4Word32.word32.w_0"
   59.77 +  "w2n" > "HOL4Word32.word32.w2n"
   59.78 +  "n2w" > "HOL4Word32.word32.n2w"
   59.79 +  "bitwise_or" > "HOL4Word32.word32.bitwise_or"
   59.80 +  "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
   59.81 +  "bitwise_and" > "HOL4Word32.word32.bitwise_and"
   59.82 +  "WL" > "HOL4Word32.word32.WL"
   59.83 +  "TWO_COMP" > "HOL4Word32.word32.TWO_COMP"
   59.84 +  "TOw" > "HOL4Word32.word32.TOw"
   59.85 +  "SLICEw" > "HOL4Word32.word32.SLICEw"
   59.86 +  "RRXn" > "HOL4Word32.word32.RRXn"
   59.87 +  "RRX" > "HOL4Word32.word32.RRX"
   59.88 +  "ROR_ONE" > "HOL4Word32.word32.ROR_ONE"
   59.89 +  "OR" > "HOL4Word32.word32.OR"
   59.90 +  "ONE_COMP" > "HOL4Word32.word32.ONE_COMP"
   59.91 +  "MSBn" > "HOL4Word32.word32.MSBn"
   59.92 +  "MSB" > "HOL4Word32.word32.MSB"
   59.93 +  "MODw" > "HOL4Word32.word32.MODw"
   59.94 +  "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
   59.95 +  "LSB" > "HOL4Word32.word32.LSB"
   59.96 +  "INw" > "HOL4Word32.word32.INw"
   59.97 +  "HB" > "HOL4Word32.word32.HB"
   59.98 +  "EQUIV" > "HOL4Word32.word32.EQUIV"
   59.99 +  "EOR" > "HOL4Word32.word32.EOR"
  59.100 +  "COMP0" > "HOL4Word32.word32.COMP0"
  59.101 +  "BITw" > "HOL4Word32.word32.BITw"
  59.102 +  "BITSw" > "HOL4Word32.word32.BITSw"
  59.103 +  "ASR_ONE" > "HOL4Word32.word32.ASR_ONE"
  59.104 +  "AONE" > "HOL4Word32.word32.AONE"
  59.105 +  "AND" > "HOL4Word32.word32.AND"
  59.106 +
  59.107 +const_renames
  59.108 +  "==" > "EQUIV"
  59.109 +
  59.110 +thm_maps
  59.111 +  "word_suc_def" > "HOL4Word32.word32.word_suc_def"
  59.112 +  "word_suc" > "HOL4Word32.word32.word_suc"
  59.113 +  "word_sub_def" > "HOL4Word32.word32.word_sub_def"
  59.114 +  "word_sub" > "HOL4Word32.word32.word_sub"
  59.115 +  "word_ror_def" > "HOL4Word32.word32.word_ror_def"
  59.116 +  "word_ror1_def" > "HOL4Word32.word32.word_ror1_def"
  59.117 +  "word_ror1" > "HOL4Word32.word32.word_ror1"
  59.118 +  "word_ror" > "HOL4Word32.word32.word_ror"
  59.119 +  "word_nchotomy" > "HOL4Word32.word32.word_nchotomy"
  59.120 +  "word_mul_def" > "HOL4Word32.word32.word_mul_def"
  59.121 +  "word_mul" > "HOL4Word32.word32.word_mul"
  59.122 +  "word_lsr_def" > "HOL4Word32.word32.word_lsr_def"
  59.123 +  "word_lsr1_def" > "HOL4Word32.word32.word_lsr1_def"
  59.124 +  "word_lsr1" > "HOL4Word32.word32.word_lsr1"
  59.125 +  "word_lsr" > "HOL4Word32.word32.word_lsr"
  59.126 +  "word_lsl_def" > "HOL4Word32.word32.word_lsl_def"
  59.127 +  "word_lsl" > "HOL4Word32.word32.word_lsl"
  59.128 +  "word_asr_def" > "HOL4Word32.word32.word_asr_def"
  59.129 +  "word_asr1_def" > "HOL4Word32.word32.word_asr1_def"
  59.130 +  "word_asr1" > "HOL4Word32.word32.word_asr1"
  59.131 +  "word_asr" > "HOL4Word32.word32.word_asr"
  59.132 +  "word_add_def" > "HOL4Word32.word32.word_add_def"
  59.133 +  "word_add" > "HOL4Word32.word32.word_add"
  59.134 +  "word_2comp_def" > "HOL4Word32.word32.word_2comp_def"
  59.135 +  "word_2comp" > "HOL4Word32.word32.word_2comp"
  59.136 +  "word_1comp_def" > "HOL4Word32.word32.word_1comp_def"
  59.137 +  "word_1comp" > "HOL4Word32.word32.word_1comp"
  59.138 +  "word32_tybij" > "HOL4Word32.word32.word32_tybij"
  59.139 +  "word32_TY_DEF" > "HOL4Word32.word32.word32_TY_DEF"
  59.140 +  "w_T_primdef" > "HOL4Word32.word32.w_T_primdef"
  59.141 +  "w_T_def" > "HOL4Word32.word32.w_T_def"
  59.142 +  "w_T" > "HOL4Word32.word32.w_T"
  59.143 +  "w_1_primdef" > "HOL4Word32.word32.w_1_primdef"
  59.144 +  "w_1_def" > "HOL4Word32.word32.w_1_def"
  59.145 +  "w_1" > "HOL4Word32.word32.w_1"
  59.146 +  "w_0_primdef" > "HOL4Word32.word32.w_0_primdef"
  59.147 +  "w_0_def" > "HOL4Word32.word32.w_0_def"
  59.148 +  "w_0" > "HOL4Word32.word32.w_0"
  59.149 +  "w2n_primdef" > "HOL4Word32.word32.w2n_primdef"
  59.150 +  "w2n_def" > "HOL4Word32.word32.w2n_def"
  59.151 +  "w2n_EVAL" > "HOL4Word32.word32.w2n_EVAL"
  59.152 +  "w2n_ELIM" > "HOL4Word32.word32.w2n_ELIM"
  59.153 +  "n2w_primdef" > "HOL4Word32.word32.n2w_primdef"
  59.154 +  "n2w_def" > "HOL4Word32.word32.n2w_def"
  59.155 +  "n2w_11" > "HOL4Word32.word32.n2w_11"
  59.156 +  "dest_word_mk_word_eq3" > "HOL4Word32.word32.dest_word_mk_word_eq3"
  59.157 +  "bitwise_or_def" > "HOL4Word32.word32.bitwise_or_def"
  59.158 +  "bitwise_or" > "HOL4Word32.word32.bitwise_or"
  59.159 +  "bitwise_eor_def" > "HOL4Word32.word32.bitwise_eor_def"
  59.160 +  "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
  59.161 +  "bitwise_and_def" > "HOL4Word32.word32.bitwise_and_def"
  59.162 +  "bitwise_and" > "HOL4Word32.word32.bitwise_and"
  59.163 +  "ZERO_SHIFT2" > "HOL4Word32.word32.ZERO_SHIFT2"
  59.164 +  "ZERO_SHIFT" > "HOL4Word32.word32.ZERO_SHIFT"
  59.165 +  "WL_primdef" > "HOL4Word32.word32.WL_primdef"
  59.166 +  "WL_def" > "HOL4Word32.word32.WL_def"
  59.167 +  "TWO_COMP_primdef" > "HOL4Word32.word32.TWO_COMP_primdef"
  59.168 +  "TWO_COMP_def" > "HOL4Word32.word32.TWO_COMP_def"
  59.169 +  "TWO_COMP_WELLDEF" > "HOL4Word32.word32.TWO_COMP_WELLDEF"
  59.170 +  "TWO_COMP_ONE_COMP_QT" > "HOL4Word32.word32.TWO_COMP_ONE_COMP_QT"
  59.171 +  "TWO_COMP_ONE_COMP" > "HOL4Word32.word32.TWO_COMP_ONE_COMP"
  59.172 +  "TWO_COMP_EVAL2" > "HOL4Word32.word32.TWO_COMP_EVAL2"
  59.173 +  "TWO_COMP_EVAL" > "HOL4Word32.word32.TWO_COMP_EVAL"
  59.174 +  "TWO_COMP_ELIM" > "HOL4Word32.word32.TWO_COMP_ELIM"
  59.175 +  "TWO_COMP_ADD" > "HOL4Word32.word32.TWO_COMP_ADD"
  59.176 +  "TOw_primdef" > "HOL4Word32.word32.TOw_primdef"
  59.177 +  "TOw_def" > "HOL4Word32.word32.TOw_def"
  59.178 +  "TOw_WELLDEF" > "HOL4Word32.word32.TOw_WELLDEF"
  59.179 +  "TOw_QT" > "HOL4Word32.word32.TOw_QT"
  59.180 +  "TOw_IDEM" > "HOL4Word32.word32.TOw_IDEM"
  59.181 +  "SUC_WELLDEF" > "HOL4Word32.word32.SUC_WELLDEF"
  59.182 +  "SUC_EQUIV_COMP" > "HOL4Word32.word32.SUC_EQUIV_COMP"
  59.183 +  "SUBw" > "HOL4Word32.word32.SUBw"
  59.184 +  "SUB_SUBw" > "HOL4Word32.word32.SUB_SUBw"
  59.185 +  "SUB_PLUSw" > "HOL4Word32.word32.SUB_PLUSw"
  59.186 +  "SUB_EQUALw" > "HOL4Word32.word32.SUB_EQUALw"
  59.187 +  "SLICEw_primdef" > "HOL4Word32.word32.SLICEw_primdef"
  59.188 +  "SLICEw_def" > "HOL4Word32.word32.SLICEw_def"
  59.189 +  "SLICEw_ZERO_THM" > "HOL4Word32.word32.SLICEw_ZERO_THM"
  59.190 +  "SLICEw_ZERO" > "HOL4Word32.word32.SLICEw_ZERO"
  59.191 +  "SLICEw_THM" > "HOL4Word32.word32.SLICEw_THM"
  59.192 +  "SLICEw_COMP_THM" > "HOL4Word32.word32.SLICEw_COMP_THM"
  59.193 +  "SLICE_EVAL" > "HOL4Word32.word32.SLICE_EVAL"
  59.194 +  "RRXn_primdef" > "HOL4Word32.word32.RRXn_primdef"
  59.195 +  "RRXn_def" > "HOL4Word32.word32.RRXn_def"
  59.196 +  "RRX_primdef" > "HOL4Word32.word32.RRX_primdef"
  59.197 +  "RRX_def" > "HOL4Word32.word32.RRX_def"
  59.198 +  "RRX_WELLDEF" > "HOL4Word32.word32.RRX_WELLDEF"
  59.199 +  "RRX_EVAL2" > "HOL4Word32.word32.RRX_EVAL2"
  59.200 +  "RRX_EVAL" > "HOL4Word32.word32.RRX_EVAL"
  59.201 +  "ROR_w_T" > "HOL4Word32.word32.ROR_w_T"
  59.202 +  "ROR_THM" > "HOL4Word32.word32.ROR_THM"
  59.203 +  "ROR_ONE_primdef" > "HOL4Word32.word32.ROR_ONE_primdef"
  59.204 +  "ROR_ONE_def" > "HOL4Word32.word32.ROR_ONE_def"
  59.205 +  "ROR_ONE_WELLDEF" > "HOL4Word32.word32.ROR_ONE_WELLDEF"
  59.206 +  "ROR_ONE_EVAL2" > "HOL4Word32.word32.ROR_ONE_EVAL2"
  59.207 +  "ROR_ONE_EVAL" > "HOL4Word32.word32.ROR_ONE_EVAL"
  59.208 +  "ROR_CYCLE" > "HOL4Word32.word32.ROR_CYCLE"
  59.209 +  "ROR_ADD" > "HOL4Word32.word32.ROR_ADD"
  59.210 +  "RIGHT_OR_OVER_ANDw" > "HOL4Word32.word32.RIGHT_OR_OVER_ANDw"
  59.211 +  "RIGHT_OR_OVER_AND_QT" > "HOL4Word32.word32.RIGHT_OR_OVER_AND_QT"
  59.212 +  "RIGHT_AND_OVER_ORw" > "HOL4Word32.word32.RIGHT_AND_OVER_ORw"
  59.213 +  "RIGHT_AND_OVER_OR_QT" > "HOL4Word32.word32.RIGHT_AND_OVER_OR_QT"
  59.214 +  "OR_primdef" > "HOL4Word32.word32.OR_primdef"
  59.215 +  "OR_def" > "HOL4Word32.word32.OR_def"
  59.216 +  "OR_IDEMw" > "HOL4Word32.word32.OR_IDEMw"
  59.217 +  "OR_IDEM_QT" > "HOL4Word32.word32.OR_IDEM_QT"
  59.218 +  "OR_EVAL2" > "HOL4Word32.word32.OR_EVAL2"
  59.219 +  "OR_EVAL" > "HOL4Word32.word32.OR_EVAL"
  59.220 +  "OR_COMP_QT" > "HOL4Word32.word32.OR_COMP_QT"
  59.221 +  "OR_COMMw" > "HOL4Word32.word32.OR_COMMw"
  59.222 +  "OR_COMM_QT" > "HOL4Word32.word32.OR_COMM_QT"
  59.223 +  "OR_ASSOCw" > "HOL4Word32.word32.OR_ASSOCw"
  59.224 +  "OR_ASSOC_QT" > "HOL4Word32.word32.OR_ASSOC_QT"
  59.225 +  "OR_ABSORBw" > "HOL4Word32.word32.OR_ABSORBw"
  59.226 +  "OR_ABSORB_QT" > "HOL4Word32.word32.OR_ABSORB_QT"
  59.227 +  "ONE_COMPw" > "HOL4Word32.word32.ONE_COMPw"
  59.228 +  "ONE_COMP_primdef" > "HOL4Word32.word32.ONE_COMP_primdef"
  59.229 +  "ONE_COMP_def" > "HOL4Word32.word32.ONE_COMP_def"
  59.230 +  "ONE_COMP_WELLDEF" > "HOL4Word32.word32.ONE_COMP_WELLDEF"
  59.231 +  "ONE_COMP_TWO_COMP" > "HOL4Word32.word32.ONE_COMP_TWO_COMP"
  59.232 +  "ONE_COMP_THM" > "HOL4Word32.word32.ONE_COMP_THM"
  59.233 +  "ONE_COMP_QT" > "HOL4Word32.word32.ONE_COMP_QT"
  59.234 +  "ONE_COMP_EVAL2" > "HOL4Word32.word32.ONE_COMP_EVAL2"
  59.235 +  "ONE_COMP_EVAL" > "HOL4Word32.word32.ONE_COMP_EVAL"
  59.236 +  "MUL_WELLDEF" > "HOL4Word32.word32.MUL_WELLDEF"
  59.237 +  "MUL_EVAL2" > "HOL4Word32.word32.MUL_EVAL2"
  59.238 +  "MUL_EVAL" > "HOL4Word32.word32.MUL_EVAL"
  59.239 +  "MULT_QT" > "HOL4Word32.word32.MULT_QT"
  59.240 +  "MULT_COMMw" > "HOL4Word32.word32.MULT_COMMw"
  59.241 +  "MULT_COMM_QT" > "HOL4Word32.word32.MULT_COMM_QT"
  59.242 +  "MULT_CLAUSESw" > "HOL4Word32.word32.MULT_CLAUSESw"
  59.243 +  "MULT_CLAUSES_QT" > "HOL4Word32.word32.MULT_CLAUSES_QT"
  59.244 +  "MULT_ASSOCw" > "HOL4Word32.word32.MULT_ASSOCw"
  59.245 +  "MULT_ASSOC_QT" > "HOL4Word32.word32.MULT_ASSOC_QT"
  59.246 +  "MSBn_primdef" > "HOL4Word32.word32.MSBn_primdef"
  59.247 +  "MSBn_def" > "HOL4Word32.word32.MSBn_def"
  59.248 +  "MSB_primdef" > "HOL4Word32.word32.MSB_primdef"
  59.249 +  "MSB_def" > "HOL4Word32.word32.MSB_def"
  59.250 +  "MSB_WELLDEF" > "HOL4Word32.word32.MSB_WELLDEF"
  59.251 +  "MSB_EVAL2" > "HOL4Word32.word32.MSB_EVAL2"
  59.252 +  "MSB_EVAL" > "HOL4Word32.word32.MSB_EVAL"
  59.253 +  "MODw_primdef" > "HOL4Word32.word32.MODw_primdef"
  59.254 +  "MODw_def" > "HOL4Word32.word32.MODw_def"
  59.255 +  "MODw_THM" > "HOL4Word32.word32.MODw_THM"
  59.256 +  "MODw_MULT" > "HOL4Word32.word32.MODw_MULT"
  59.257 +  "MODw_IDEM2" > "HOL4Word32.word32.MODw_IDEM2"
  59.258 +  "MODw_EVAL" > "HOL4Word32.word32.MODw_EVAL"
  59.259 +  "MODw_ELIM" > "HOL4Word32.word32.MODw_ELIM"
  59.260 +  "MOD_MOD_DIV_2EXP" > "HOL4Word32.word32.MOD_MOD_DIV_2EXP"
  59.261 +  "MOD_MOD_DIV" > "HOL4Word32.word32.MOD_MOD_DIV"
  59.262 +  "MOD_ADD" > "HOL4Word32.word32.MOD_ADD"
  59.263 +  "LSR_THM" > "HOL4Word32.word32.LSR_THM"
  59.264 +  "LSR_ONE_primdef" > "HOL4Word32.word32.LSR_ONE_primdef"
  59.265 +  "LSR_ONE_def" > "HOL4Word32.word32.LSR_ONE_def"
  59.266 +  "LSR_ONE_WELLDEF" > "HOL4Word32.word32.LSR_ONE_WELLDEF"
  59.267 +  "LSR_ONE_EVAL2" > "HOL4Word32.word32.LSR_ONE_EVAL2"
  59.268 +  "LSR_ONE_EVAL" > "HOL4Word32.word32.LSR_ONE_EVAL"
  59.269 +  "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
  59.270 +  "LSR_LIMIT" > "HOL4Word32.word32.LSR_LIMIT"
  59.271 +  "LSR_EVAL" > "HOL4Word32.word32.LSR_EVAL"
  59.272 +  "LSR_ADD" > "HOL4Word32.word32.LSR_ADD"
  59.273 +  "LSL_LIMIT" > "HOL4Word32.word32.LSL_LIMIT"
  59.274 +  "LSL_ADD" > "HOL4Word32.word32.LSL_ADD"
  59.275 +  "LSB_primdef" > "HOL4Word32.word32.LSB_primdef"
  59.276 +  "LSB_def" > "HOL4Word32.word32.LSB_def"
  59.277 +  "LSB_WELLDEF" > "HOL4Word32.word32.LSB_WELLDEF"
  59.278 +  "LSB_EVAL2" > "HOL4Word32.word32.LSB_EVAL2"
  59.279 +  "LSB_EVAL" > "HOL4Word32.word32.LSB_EVAL"
  59.280 +  "LEFT_SHIFT_LESS" > "HOL4Word32.word32.LEFT_SHIFT_LESS"
  59.281 +  "LEFT_ADD_DISTRIBw" > "HOL4Word32.word32.LEFT_ADD_DISTRIBw"
  59.282 +  "LEFT_ADD_DISTRIB_QT" > "HOL4Word32.word32.LEFT_ADD_DISTRIB_QT"
  59.283 +  "INw_primdef" > "HOL4Word32.word32.INw_primdef"
  59.284 +  "INw_def" > "HOL4Word32.word32.INw_def"
  59.285 +  "INw_MODw" > "HOL4Word32.word32.INw_MODw"
  59.286 +  "INV_SUC_EQ_QT" > "HOL4Word32.word32.INV_SUC_EQ_QT"
  59.287 +  "HB_primdef" > "HOL4Word32.word32.HB_primdef"
  59.288 +  "HB_def" > "HOL4Word32.word32.HB_def"
  59.289 +  "FUNPOW_THM2" > "HOL4Word32.word32.FUNPOW_THM2"
  59.290 +  "FUNPOW_THM" > "HOL4Word32.word32.FUNPOW_THM"
  59.291 +  "FUNPOW_COMP" > "HOL4Word32.word32.FUNPOW_COMP"
  59.292 +  "EQ_ADD_RCANCELw" > "HOL4Word32.word32.EQ_ADD_RCANCELw"
  59.293 +  "EQ_ADD_RCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_RCANCEL_QT"
  59.294 +  "EQ_ADD_LCANCELw" > "HOL4Word32.word32.EQ_ADD_LCANCELw"
  59.295 +  "EQ_ADD_LCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_LCANCEL_QT"
  59.296 +  "EQUIV_primdef" > "HOL4Word32.word32.EQUIV_primdef"
  59.297 +  "EQUIV_def" > "HOL4Word32.word32.EQUIV_def"
  59.298 +  "EQUIV_QT" > "HOL4Word32.word32.EQUIV_QT"
  59.299 +  "EOR_primdef" > "HOL4Word32.word32.EOR_primdef"
  59.300 +  "EOR_def" > "HOL4Word32.word32.EOR_def"
  59.301 +  "EOR_EVAL2" > "HOL4Word32.word32.EOR_EVAL2"
  59.302 +  "EOR_EVAL" > "HOL4Word32.word32.EOR_EVAL"
  59.303 +  "DE_MORGAN_THMw" > "HOL4Word32.word32.DE_MORGAN_THMw"
  59.304 +  "DE_MORGAN_THM_QT" > "HOL4Word32.word32.DE_MORGAN_THM_QT"
  59.305 +  "COMP0_primdef" > "HOL4Word32.word32.COMP0_primdef"
  59.306 +  "COMP0_def" > "HOL4Word32.word32.COMP0_def"
  59.307 +  "CANCEL_SUBw" > "HOL4Word32.word32.CANCEL_SUBw"
  59.308 +  "BITw_primdef" > "HOL4Word32.word32.BITw_primdef"
  59.309 +  "BITw_def" > "HOL4Word32.word32.BITw_def"
  59.310 +  "BITw_THM" > "HOL4Word32.word32.BITw_THM"
  59.311 +  "BIT_EVAL" > "HOL4Word32.word32.BIT_EVAL"
  59.312 +  "BIT_EQUIV_THM" > "HOL4Word32.word32.BIT_EQUIV_THM"
  59.313 +  "BIT_EQUIV" > "HOL4Word32.word32.BIT_EQUIV"
  59.314 +  "BITWISEw_WELLDEF" > "HOL4Word32.word32.BITWISEw_WELLDEF"
  59.315 +  "BITWISE_WELLDEF" > "HOL4Word32.word32.BITWISE_WELLDEF"
  59.316 +  "BITWISE_THM2" > "HOL4Word32.word32.BITWISE_THM2"
  59.317 +  "BITWISE_ONE_COMP_THM" > "HOL4Word32.word32.BITWISE_ONE_COMP_THM"
  59.318 +  "BITWISE_ISTEP" > "HOL4Word32.word32.BITWISE_ISTEP"
  59.319 +  "BITWISE_EVAL2" > "HOL4Word32.word32.BITWISE_EVAL2"
  59.320 +  "BITWISE_EVAL" > "HOL4Word32.word32.BITWISE_EVAL"
  59.321 +  "BITSw_primdef" > "HOL4Word32.word32.BITSw_primdef"
  59.322 +  "BITSw_def" > "HOL4Word32.word32.BITSw_def"
  59.323 +  "BITSw_ZERO" > "HOL4Word32.word32.BITSw_ZERO"
  59.324 +  "BITSw_DIV_THM" > "HOL4Word32.word32.BITSw_DIV_THM"
  59.325 +  "BITSw_COMP_THM" > "HOL4Word32.word32.BITSw_COMP_THM"
  59.326 +  "BITSwLT_THM" > "HOL4Word32.word32.BITSwLT_THM"
  59.327 +  "BITS_SUC2" > "HOL4Word32.word32.BITS_SUC2"
  59.328 +  "BITS_SLICEw_THM" > "HOL4Word32.word32.BITS_SLICEw_THM"
  59.329 +  "BITS_EVAL" > "HOL4Word32.word32.BITS_EVAL"
  59.330 +  "ASR_w_T" > "HOL4Word32.word32.ASR_w_T"
  59.331 +  "ASR_THM" > "HOL4Word32.word32.ASR_THM"
  59.332 +  "ASR_ONE_primdef" > "HOL4Word32.word32.ASR_ONE_primdef"
  59.333 +  "ASR_ONE_def" > "HOL4Word32.word32.ASR_ONE_def"
  59.334 +  "ASR_ONE_WELLDEF" > "HOL4Word32.word32.ASR_ONE_WELLDEF"
  59.335 +  "ASR_ONE_EVAL2" > "HOL4Word32.word32.ASR_ONE_EVAL2"
  59.336 +  "ASR_ONE_EVAL" > "HOL4Word32.word32.ASR_ONE_EVAL"
  59.337 +  "ASR_LIMIT" > "HOL4Word32.word32.ASR_LIMIT"
  59.338 +  "ASR_ADD" > "HOL4Word32.word32.ASR_ADD"
  59.339 +  "AONE_primdef" > "HOL4Word32.word32.AONE_primdef"
  59.340 +  "AONE_def" > "HOL4Word32.word32.AONE_def"
  59.341 +  "AND_primdef" > "HOL4Word32.word32.AND_primdef"
  59.342 +  "AND_def" > "HOL4Word32.word32.AND_def"
  59.343 +  "AND_IDEMw" > "HOL4Word32.word32.AND_IDEMw"
  59.344 +  "AND_IDEM_QT" > "HOL4Word32.word32.AND_IDEM_QT"
  59.345 +  "AND_EVAL2" > "HOL4Word32.word32.AND_EVAL2"
  59.346 +  "AND_EVAL" > "HOL4Word32.word32.AND_EVAL"
  59.347 +  "AND_COMP_QT" > "HOL4Word32.word32.AND_COMP_QT"
  59.348 +  "AND_COMMw" > "HOL4Word32.word32.AND_COMMw"
  59.349 +  "AND_COMM_QT" > "HOL4Word32.word32.AND_COMM_QT"
  59.350 +  "AND_ASSOCw" > "HOL4Word32.word32.AND_ASSOCw"
  59.351 +  "AND_ASSOC_QT" > "HOL4Word32.word32.AND_ASSOC_QT"
  59.352 +  "AND_ABSORBw" > "HOL4Word32.word32.AND_ABSORBw"
  59.353 +  "AND_ABSORB_QT" > "HOL4Word32.word32.AND_ABSORB_QT"
  59.354 +  "ADDw" > "HOL4Word32.word32.ADDw"
  59.355 +  "ADD_WELLDEF" > "HOL4Word32.word32.ADD_WELLDEF"
  59.356 +  "ADD_TWO_COMP_QT" > "HOL4Word32.word32.ADD_TWO_COMP_QT"
  59.357 +  "ADD_TWO_COMP2" > "HOL4Word32.word32.ADD_TWO_COMP2"
  59.358 +  "ADD_TWO_COMP" > "HOL4Word32.word32.ADD_TWO_COMP"
  59.359 +  "ADD_SUBw" > "HOL4Word32.word32.ADD_SUBw"
  59.360 +  "ADD_SUB_SYM" > "HOL4Word32.word32.ADD_SUB_SYM"
  59.361 +  "ADD_SUB_ASSOC" > "HOL4Word32.word32.ADD_SUB_ASSOC"
  59.362 +  "ADD_QT" > "HOL4Word32.word32.ADD_QT"
  59.363 +  "ADD_INV_0_QT" > "HOL4Word32.word32.ADD_INV_0_QT"
  59.364 +  "ADD_INV_0_EQw" > "HOL4Word32.word32.ADD_INV_0_EQw"
  59.365 +  "ADD_INV_0_EQ_QT" > "HOL4Word32.word32.ADD_INV_0_EQ_QT"
  59.366 +  "ADD_EVAL2" > "HOL4Word32.word32.ADD_EVAL2"
  59.367 +  "ADD_EVAL" > "HOL4Word32.word32.ADD_EVAL"
  59.368 +  "ADD_EQ_SUBw" > "HOL4Word32.word32.ADD_EQ_SUBw"
  59.369 +  "ADD_COMMw" > "HOL4Word32.word32.ADD_COMMw"
  59.370 +  "ADD_COMM_QT" > "HOL4Word32.word32.ADD_COMM_QT"
  59.371 +  "ADD_CLAUSESw" > "HOL4Word32.word32.ADD_CLAUSESw"
  59.372 +  "ADD_CLAUSES_QT" > "HOL4Word32.word32.ADD_CLAUSES_QT"
  59.373 +  "ADD_ASSOCw" > "HOL4Word32.word32.ADD_ASSOCw"
  59.374 +  "ADD_ASSOC_QT" > "HOL4Word32.word32.ADD_ASSOC_QT"
  59.375 +  "ADD_0w" > "HOL4Word32.word32.ADD_0w"
  59.376 +  "ADD_0_QT" > "HOL4Word32.word32.ADD_0_QT"
  59.377 +  "ADD1w" > "HOL4Word32.word32.ADD1w"
  59.378 +  "ADD1_QT" > "HOL4Word32.word32.ADD1_QT"
  59.379 +
  59.380 +end
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/src/HOL/Import/HOL/word_base.imp	Fri Apr 02 17:37:45 2004 +0200
    60.3 @@ -0,0 +1,102 @@
    60.4 +import
    60.5 +
    60.6 +import_segment "hol4"
    60.7 +
    60.8 +def_maps
    60.9 +  "word_size" > "word_size_primdef"
   60.10 +  "word_case" > "word_case_primdef"
   60.11 +  "word_base0" > "word_base0_primdef"
   60.12 +  "mk_word" > "mk_word_def"
   60.13 +  "dest_word" > "dest_word_def"
   60.14 +  "bit" > "bit_def"
   60.15 +  "WSPLIT" > "WSPLIT_def"
   60.16 +  "WSEG" > "WSEG_def"
   60.17 +  "WORDLEN" > "WORDLEN_def"
   60.18 +  "WORD" > "WORD_def"
   60.19 +  "WCAT" > "WCAT_def"
   60.20 +  "PWORDLEN" > "PWORDLEN_primdef"
   60.21 +  "MSB" > "MSB_def"
   60.22 +  "LSB" > "LSB_def"
   60.23 +
   60.24 +type_maps
   60.25 +  "word" > "HOL4Vec.word_base.word"
   60.26 +
   60.27 +const_maps
   60.28 +  "word_base0" > "HOL4Vec.word_base.word_base0"
   60.29 +  "WORD" > "HOL4Vec.word_base.WORD"
   60.30 +  "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
   60.31 +
   60.32 +const_renames
   60.33 +  "BIT" > "bit"
   60.34 +
   60.35 +thm_maps
   60.36 +  "word_size_def" > "HOL4Vec.word_base.word_size_def"
   60.37 +  "word_repfns" > "HOL4Vec.word_base.word_repfns"
   60.38 +  "word_nchotomy" > "HOL4Vec.word_base.word_nchotomy"
   60.39 +  "word_induction" > "HOL4Vec.word_base.word_induction"
   60.40 +  "word_induct" > "HOL4Vec.word_base.word_induct"
   60.41 +  "word_cases" > "HOL4Vec.word_base.word_cases"
   60.42 +  "word_case_def" > "HOL4Vec.word_base.word_case_def"
   60.43 +  "word_case_cong" > "HOL4Vec.word_base.word_case_cong"
   60.44 +  "word_base0_primdef" > "HOL4Vec.word_base.word_base0_primdef"
   60.45 +  "word_base0_def" > "HOL4Vec.word_base.word_base0_def"
   60.46 +  "word_TY_DEF" > "HOL4Vec.word_base.word_TY_DEF"
   60.47 +  "word_Axiom" > "HOL4Vec.word_base.word_Axiom"
   60.48 +  "word_Ax" > "HOL4Vec.word_base.word_Ax"
   60.49 +  "word_11" > "HOL4Vec.word_base.word_11"
   60.50 +  "WSPLIT_WSEG2" > "HOL4Vec.word_base.WSPLIT_WSEG2"
   60.51 +  "WSPLIT_WSEG1" > "HOL4Vec.word_base.WSPLIT_WSEG1"
   60.52 +  "WSPLIT_WSEG" > "HOL4Vec.word_base.WSPLIT_WSEG"
   60.53 +  "WSPLIT_PWORDLEN" > "HOL4Vec.word_base.WSPLIT_PWORDLEN"
   60.54 +  "WSPLIT_DEF" > "HOL4Vec.word_base.WSPLIT_DEF"
   60.55 +  "WSEG_WSEG" > "HOL4Vec.word_base.WSEG_WSEG"
   60.56 +  "WSEG_WORD_LENGTH" > "HOL4Vec.word_base.WSEG_WORD_LENGTH"
   60.57 +  "WSEG_WORDLEN" > "HOL4Vec.word_base.WSEG_WORDLEN"
   60.58 +  "WSEG_WCAT_WSEG2" > "HOL4Vec.word_base.WSEG_WCAT_WSEG2"
   60.59 +  "WSEG_WCAT_WSEG1" > "HOL4Vec.word_base.WSEG_WCAT_WSEG1"
   60.60 +  "WSEG_WCAT_WSEG" > "HOL4Vec.word_base.WSEG_WCAT_WSEG"
   60.61 +  "WSEG_WCAT2" > "HOL4Vec.word_base.WSEG_WCAT2"
   60.62 +  "WSEG_WCAT1" > "HOL4Vec.word_base.WSEG_WCAT1"
   60.63 +  "WSEG_SUC" > "HOL4Vec.word_base.WSEG_SUC"
   60.64 +  "WSEG_PWORDLEN" > "HOL4Vec.word_base.WSEG_PWORDLEN"
   60.65 +  "WSEG_DEF" > "HOL4Vec.word_base.WSEG_DEF"
   60.66 +  "WSEG_BIT" > "HOL4Vec.word_base.WSEG_BIT"
   60.67 +  "WSEG0" > "HOL4Vec.word_base.WSEG0"
   60.68 +  "WORD_def" > "HOL4Vec.word_base.WORD_def"
   60.69 +  "WORD_SPLIT" > "HOL4Vec.word_base.WORD_SPLIT"
   60.70 +  "WORD_SNOC_WCAT" > "HOL4Vec.word_base.WORD_SNOC_WCAT"
   60.71 +  "WORD_PARTITION" > "HOL4Vec.word_base.WORD_PARTITION"
   60.72 +  "WORD_CONS_WCAT" > "HOL4Vec.word_base.WORD_CONS_WCAT"
   60.73 +  "WORD_11" > "HOL4Vec.word_base.WORD_11"
   60.74 +  "WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT"
   60.75 +  "WORDLEN_SUC_WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG"
   60.76 +  "WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT"
   60.77 +  "WORDLEN_SUC_WCAT_BIT_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG"
   60.78 +  "WORDLEN_SUC_WCAT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT"
   60.79 +  "WORDLEN_DEF" > "HOL4Vec.word_base.WORDLEN_DEF"
   60.80 +  "WORD" > "HOL4Vec.word_base.WORD"
   60.81 +  "WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WCAT_WSEG_WSEG"
   60.82 +  "WCAT_PWORDLEN" > "HOL4Vec.word_base.WCAT_PWORDLEN"
   60.83 +  "WCAT_DEF" > "HOL4Vec.word_base.WCAT_DEF"
   60.84 +  "WCAT_ASSOC" > "HOL4Vec.word_base.WCAT_ASSOC"
   60.85 +  "WCAT_11" > "HOL4Vec.word_base.WCAT_11"
   60.86 +  "WCAT0" > "HOL4Vec.word_base.WCAT0"
   60.87 +  "PWORDLEN_primdef" > "HOL4Vec.word_base.PWORDLEN_primdef"
   60.88 +  "PWORDLEN_def" > "HOL4Vec.word_base.PWORDLEN_def"
   60.89 +  "PWORDLEN1" > "HOL4Vec.word_base.PWORDLEN1"
   60.90 +  "PWORDLEN0" > "HOL4Vec.word_base.PWORDLEN0"
   60.91 +  "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
   60.92 +  "MSB_DEF" > "HOL4Vec.word_base.MSB_DEF"
   60.93 +  "MSB" > "HOL4Vec.word_base.MSB"
   60.94 +  "LSB_DEF" > "HOL4Vec.word_base.LSB_DEF"
   60.95 +  "LSB" > "HOL4Vec.word_base.LSB"
   60.96 +  "IN_PWORDLEN" > "HOL4Vec.word_base.IN_PWORDLEN"
   60.97 +  "BIT_WSEG" > "HOL4Vec.word_base.BIT_WSEG"
   60.98 +  "BIT_WCAT_SND" > "HOL4Vec.word_base.BIT_WCAT_SND"
   60.99 +  "BIT_WCAT_FST" > "HOL4Vec.word_base.BIT_WCAT_FST"
  60.100 +  "BIT_WCAT1" > "HOL4Vec.word_base.BIT_WCAT1"
  60.101 +  "BIT_EQ_IMP_WORD_EQ" > "HOL4Vec.word_base.BIT_EQ_IMP_WORD_EQ"
  60.102 +  "BIT_DEF" > "HOL4Vec.word_base.BIT_DEF"
  60.103 +  "BIT0" > "HOL4Vec.word_base.BIT0"
  60.104 +
  60.105 +end
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/src/HOL/Import/HOL/word_bitop.imp	Fri Apr 02 17:37:45 2004 +0200
    61.3 @@ -0,0 +1,64 @@
    61.4 +import
    61.5 +
    61.6 +import_segment "hol4"
    61.7 +
    61.8 +def_maps
    61.9 +  "WMAP" > "WMAP_def"
   61.10 +  "SHR" > "SHR_def"
   61.11 +  "SHL" > "SHL_def"
   61.12 +  "PBITOP" > "PBITOP_primdef"
   61.13 +  "PBITBOP" > "PBITBOP_primdef"
   61.14 +  "FORALLBITS" > "FORALLBITS_def"
   61.15 +  "EXISTSABIT" > "EXISTSABIT_def"
   61.16 +
   61.17 +const_maps
   61.18 +  "SHR" > "HOL4Vec.word_bitop.SHR"
   61.19 +  "SHL" > "HOL4Vec.word_bitop.SHL"
   61.20 +  "PBITOP" > "HOL4Vec.word_bitop.PBITOP"
   61.21 +  "PBITBOP" > "HOL4Vec.word_bitop.PBITBOP"
   61.22 +
   61.23 +thm_maps
   61.24 +  "WSEG_SHL_0" > "HOL4Vec.word_bitop.WSEG_SHL_0"
   61.25 +  "WSEG_SHL" > "HOL4Vec.word_bitop.WSEG_SHL"
   61.26 +  "WMAP_o" > "HOL4Vec.word_bitop.WMAP_o"
   61.27 +  "WMAP_WSEG" > "HOL4Vec.word_bitop.WMAP_WSEG"
   61.28 +  "WMAP_WCAT" > "HOL4Vec.word_bitop.WMAP_WCAT"
   61.29 +  "WMAP_PWORDLEN" > "HOL4Vec.word_bitop.WMAP_PWORDLEN"
   61.30 +  "WMAP_PBITOP" > "HOL4Vec.word_bitop.WMAP_PBITOP"
   61.31 +  "WMAP_DEF" > "HOL4Vec.word_bitop.WMAP_DEF"
   61.32 +  "WMAP_BIT" > "HOL4Vec.word_bitop.WMAP_BIT"
   61.33 +  "WMAP_0" > "HOL4Vec.word_bitop.WMAP_0"
   61.34 +  "SHR_def" > "HOL4Vec.word_bitop.SHR_def"
   61.35 +  "SHR_WSEG_NF" > "HOL4Vec.word_bitop.SHR_WSEG_NF"
   61.36 +  "SHR_WSEG_1F" > "HOL4Vec.word_bitop.SHR_WSEG_1F"
   61.37 +  "SHR_WSEG" > "HOL4Vec.word_bitop.SHR_WSEG"
   61.38 +  "SHR_DEF" > "HOL4Vec.word_bitop.SHR_DEF"
   61.39 +  "SHL_def" > "HOL4Vec.word_bitop.SHL_def"
   61.40 +  "SHL_WSEG_NF" > "HOL4Vec.word_bitop.SHL_WSEG_NF"
   61.41 +  "SHL_WSEG_1F" > "HOL4Vec.word_bitop.SHL_WSEG_1F"
   61.42 +  "SHL_WSEG" > "HOL4Vec.word_bitop.SHL_WSEG"
   61.43 +  "SHL_DEF" > "HOL4Vec.word_bitop.SHL_DEF"
   61.44 +  "PBITOP_primdef" > "HOL4Vec.word_bitop.PBITOP_primdef"
   61.45 +  "PBITOP_def" > "HOL4Vec.word_bitop.PBITOP_def"
   61.46 +  "PBITOP_WSEG" > "HOL4Vec.word_bitop.PBITOP_WSEG"
   61.47 +  "PBITOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITOP_PWORDLEN"
   61.48 +  "PBITOP_BIT" > "HOL4Vec.word_bitop.PBITOP_BIT"
   61.49 +  "PBITBOP_primdef" > "HOL4Vec.word_bitop.PBITBOP_primdef"
   61.50 +  "PBITBOP_def" > "HOL4Vec.word_bitop.PBITBOP_def"
   61.51 +  "PBITBOP_WSEG" > "HOL4Vec.word_bitop.PBITBOP_WSEG"
   61.52 +  "PBITBOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITBOP_PWORDLEN"
   61.53 +  "PBITBOP_EXISTS" > "HOL4Vec.word_bitop.PBITBOP_EXISTS"
   61.54 +  "NOT_FORALLBITS" > "HOL4Vec.word_bitop.NOT_FORALLBITS"
   61.55 +  "NOT_EXISTSABIT" > "HOL4Vec.word_bitop.NOT_EXISTSABIT"
   61.56 +  "IN_PBITOP" > "HOL4Vec.word_bitop.IN_PBITOP"
   61.57 +  "IN_PBITBOP" > "HOL4Vec.word_bitop.IN_PBITBOP"
   61.58 +  "FORALLBITS_WSEG" > "HOL4Vec.word_bitop.FORALLBITS_WSEG"
   61.59 +  "FORALLBITS_WCAT" > "HOL4Vec.word_bitop.FORALLBITS_WCAT"
   61.60 +  "FORALLBITS_DEF" > "HOL4Vec.word_bitop.FORALLBITS_DEF"
   61.61 +  "FORALLBITS" > "HOL4Vec.word_bitop.FORALLBITS"
   61.62 +  "EXISTSABIT_WSEG" > "HOL4Vec.word_bitop.EXISTSABIT_WSEG"
   61.63 +  "EXISTSABIT_WCAT" > "HOL4Vec.word_bitop.EXISTSABIT_WCAT"
   61.64 +  "EXISTSABIT_DEF" > "HOL4Vec.word_bitop.EXISTSABIT_DEF"
   61.65 +  "EXISTSABIT" > "HOL4Vec.word_bitop.EXISTSABIT"
   61.66 +
   61.67 +end
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/src/HOL/Import/HOL/word_num.imp	Fri Apr 02 17:37:45 2004 +0200
    62.3 @@ -0,0 +1,35 @@
    62.4 +import
    62.5 +
    62.6 +import_segment "hol4"
    62.7 +
    62.8 +def_maps
    62.9 +  "NWORD" > "NWORD_def"
   62.10 +  "NVAL" > "NVAL_def"
   62.11 +  "NLIST" > "NLIST_def"
   62.12 +  "LVAL" > "LVAL_def"
   62.13 +
   62.14 +const_maps
   62.15 +  "NWORD" > "HOL4Vec.word_num.NWORD"
   62.16 +  "LVAL" > "HOL4Vec.word_num.LVAL"
   62.17 +
   62.18 +thm_maps
   62.19 +  "NWORD_def" > "HOL4Vec.word_num.NWORD_def"
   62.20 +  "NWORD_PWORDLEN" > "HOL4Vec.word_num.NWORD_PWORDLEN"
   62.21 +  "NWORD_LENGTH" > "HOL4Vec.word_num.NWORD_LENGTH"
   62.22 +  "NWORD_DEF" > "HOL4Vec.word_num.NWORD_DEF"
   62.23 +  "NVAL_WORDLEN_0" > "HOL4Vec.word_num.NVAL_WORDLEN_0"
   62.24 +  "NVAL_WCAT2" > "HOL4Vec.word_num.NVAL_WCAT2"
   62.25 +  "NVAL_WCAT1" > "HOL4Vec.word_num.NVAL_WCAT1"
   62.26 +  "NVAL_WCAT" > "HOL4Vec.word_num.NVAL_WCAT"
   62.27 +  "NVAL_MAX" > "HOL4Vec.word_num.NVAL_MAX"
   62.28 +  "NVAL_DEF" > "HOL4Vec.word_num.NVAL_DEF"
   62.29 +  "NVAL1" > "HOL4Vec.word_num.NVAL1"
   62.30 +  "NVAL0" > "HOL4Vec.word_num.NVAL0"
   62.31 +  "NLIST_DEF" > "HOL4Vec.word_num.NLIST_DEF"
   62.32 +  "LVAL_def" > "HOL4Vec.word_num.LVAL_def"
   62.33 +  "LVAL_SNOC" > "HOL4Vec.word_num.LVAL_SNOC"
   62.34 +  "LVAL_MAX" > "HOL4Vec.word_num.LVAL_MAX"
   62.35 +  "LVAL_DEF" > "HOL4Vec.word_num.LVAL_DEF"
   62.36 +  "LVAL" > "HOL4Vec.word_num.LVAL"
   62.37 +
   62.38 +end
    63.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2 +++ b/src/HOL/Import/HOL4Compat.thy	Fri Apr 02 17:37:45 2004 +0200
    63.3 @@ -0,0 +1,533 @@
    63.4 +theory HOL4Compat = HOL4Setup + Divides + Primes + Real:
    63.5 +
    63.6 +lemma EXISTS_UNIQUE_DEF: "(Ex1 P) = (Ex P & (ALL x y. P x & P y --> (x = y)))"
    63.7 +  by auto
    63.8 +
    63.9 +lemma COND_DEF:"(If b t f) = (@x. ((b = True) --> (x = t)) & ((b = False) --> (x = f)))"
   63.10 +  by auto
   63.11 +
   63.12 +constdefs
   63.13 +  LET :: "['a \<Rightarrow> 'b,'a] \<Rightarrow> 'b"
   63.14 +  "LET f s == f s"
   63.15 +
   63.16 +lemma [hol4rew]: "LET f s = Let s f"
   63.17 +  by (simp add: LET_def Let_def)
   63.18 +
   63.19 +lemmas [hol4rew] = ONE_ONE_rew
   63.20 +
   63.21 +lemma bool_case_DEF: "(bool_case x y b) = (if b then x else y)"
   63.22 +  by simp;
   63.23 +
   63.24 +lemma INR_INL_11: "(ALL y x. (Inl x = Inl y) = (x = y)) & (ALL y x. (Inr x = Inr y) = (x = y))"
   63.25 +  by safe
   63.26 +
   63.27 +consts
   63.28 +  ISL :: "'a + 'b => bool"
   63.29 +  ISR :: "'a + 'b => bool"
   63.30 +
   63.31 +primrec ISL_def:
   63.32 +  "ISL (Inl x) = True"
   63.33 +  "ISL (Inr x) = False"
   63.34 +
   63.35 +primrec ISR_def:
   63.36 +  "ISR (Inl x) = False"
   63.37 +  "ISR (Inr x) = True"
   63.38 +
   63.39 +lemma ISL: "(ALL x. ISL (Inl x)) & (ALL y. ~ISL (Inr y))"
   63.40 +  by simp
   63.41 +
   63.42 +lemma ISR: "(ALL x. ISR (Inr x)) & (ALL y. ~ISR (Inl y))"
   63.43 +  by simp
   63.44 +
   63.45 +consts
   63.46 +  OUTL :: "'a + 'b => 'a"
   63.47 +  OUTR :: "'a + 'b => 'b"
   63.48 +
   63.49 +primrec OUTL_def:
   63.50 +  "OUTL (Inl x) = x"
   63.51 +
   63.52 +primrec OUTR_def:
   63.53 +  "OUTR (Inr x) = x"
   63.54 +
   63.55 +lemma OUTL: "OUTL (Inl x) = x"
   63.56 +  by simp
   63.57 +
   63.58 +lemma OUTR: "OUTR (Inr x) = x"
   63.59 +  by simp
   63.60 +
   63.61 +lemma sum_case_def: "(ALL f g x. sum_case f g (Inl x) = f x) & (ALL f g y. sum_case f g (Inr y) = g y)"
   63.62 +  by simp;
   63.63 +
   63.64 +lemma one: "ALL v. v = ()"
   63.65 +  by simp;
   63.66 +
   63.67 +lemma option_case_def: "(!u f. option_case u f None = u) & (!u f x. option_case u f (Some x) = f x)"
   63.68 +  by simp
   63.69 +
   63.70 +lemma OPTION_MAP_DEF: "(!f x. option_map f (Some x) = Some (f x)) & (!f. option_map f None = None)"
   63.71 +  by simp
   63.72 +
   63.73 +consts
   63.74 +  IS_SOME :: "'a option => bool"
   63.75 +  IS_NONE :: "'a option => bool"
   63.76 +
   63.77 +primrec IS_SOME_def:
   63.78 +  "IS_SOME (Some x) = True"
   63.79 +  "IS_SOME None = False"
   63.80 +
   63.81 +primrec IS_NONE_def:
   63.82 +  "IS_NONE (Some x) = False"
   63.83 +  "IS_NONE None = True"
   63.84 +
   63.85 +lemma IS_NONE_DEF: "(!x. IS_NONE (Some x) = False) & (IS_NONE None = True)"
   63.86 +  by simp
   63.87 +
   63.88 +lemma IS_SOME_DEF: "(!x. IS_SOME (Some x) = True) & (IS_SOME None = False)"
   63.89 +  by simp
   63.90 +
   63.91 +consts
   63.92 +  OPTION_JOIN :: "'a option option => 'a option"
   63.93 +
   63.94 +primrec OPTION_JOIN_def:
   63.95 +  "OPTION_JOIN None = None"
   63.96 +  "OPTION_JOIN (Some x) = x"
   63.97 +
   63.98 +lemma OPTION_JOIN_DEF: "(OPTION_JOIN None = None) & (ALL x. OPTION_JOIN (Some x) = x)"
   63.99 +  by simp;
  63.100 +
  63.101 +lemma PAIR: "(fst x,snd x) = x"
  63.102 +  by simp
  63.103 +
  63.104 +lemma PAIR_MAP: "prod_fun f g p = (f (fst p),g (snd p))"
  63.105 +  by (simp add: prod_fun_def split_def)
  63.106 +
  63.107 +lemma pair_case_def: "split = split"
  63.108 +  ..;
  63.109 +
  63.110 +lemma LESS_OR_EQ: "m <= (n::nat) = (m < n | m = n)"
  63.111 +  by auto
  63.112 +
  63.113 +constdefs
  63.114 +  nat_gt :: "nat => nat => bool"
  63.115 +  "nat_gt == %m n. n < m"
  63.116 +  nat_ge :: "nat => nat => bool"
  63.117 +  "nat_ge == %m n. nat_gt m n | m = n"
  63.118 +
  63.119 +lemma [hol4rew]: "nat_gt m n = (n < m)"
  63.120 +  by (simp add: nat_gt_def)
  63.121 +
  63.122 +lemma [hol4rew]: "nat_ge m n = (n <= m)"
  63.123 +  by (auto simp add: nat_ge_def nat_gt_def)
  63.124 +
  63.125 +lemma GREATER_DEF: "ALL m n. (n < m) = (n < m)"
  63.126 +  by simp
  63.127 +
  63.128 +lemma GREATER_OR_EQ: "ALL m n. n <= (m::nat) = (n < m | m = n)"
  63.129 +  by auto
  63.130 +
  63.131 +lemma LESS_DEF: "m < n = (? P. (!n. P (Suc n) --> P n) & P m & ~P n)"
  63.132 +proof safe
  63.133 +  assume "m < n"
  63.134 +  def P == "%n. n <= m"
  63.135 +  have "(!n. P (Suc n) \<longrightarrow> P n) & P m & ~P n"
  63.136 +  proof (auto simp add: P_def)
  63.137 +    assume "n <= m"
  63.138 +    from prems
  63.139 +    show False
  63.140 +      by auto
  63.141 +  qed
  63.142 +  thus "? P. (!n. P (Suc n) \<longrightarrow> P n) & P m & ~P n"
  63.143 +    by auto
  63.144 +next
  63.145 +  fix P
  63.146 +  assume alln: "!n. P (Suc n) \<longrightarrow> P n"
  63.147 +  assume pm: "P m"
  63.148 +  assume npn: "~P n"
  63.149 +  have "!k q. q + k = m \<longrightarrow> P q"
  63.150 +  proof
  63.151 +    fix k
  63.152 +    show "!q. q + k = m \<longrightarrow> P q"
  63.153 +    proof (induct k,simp_all)
  63.154 +      show "P m" .
  63.155 +    next
  63.156 +      fix k
  63.157 +      assume ind: "!q. q + k = m \<longrightarrow> P q"
  63.158 +      show "!q. Suc (q + k) = m \<longrightarrow> P q"
  63.159 +      proof (rule+)
  63.160 +	fix q
  63.161 +	assume "Suc (q + k) = m"
  63.162 +	hence "(Suc q) + k = m"
  63.163 +	  by simp
  63.164 +	with ind
  63.165 +	have psq: "P (Suc q)"
  63.166 +	  by simp
  63.167 +	from alln
  63.168 +	have "P (Suc q) --> P q"
  63.169 +	  ..
  63.170 +	with psq
  63.171 +	show "P q"
  63.172 +	  by simp
  63.173 +      qed
  63.174 +    qed
  63.175 +  qed
  63.176 +  hence "!q. q + (m - n) = m \<longrightarrow> P q"
  63.177 +    ..
  63.178 +  hence hehe: "n + (m - n) = m \<longrightarrow> P n"
  63.179 +    ..
  63.180 +  show "m < n"
  63.181 +  proof (rule classical)
  63.182 +    assume "~(m<n)"
  63.183 +    hence "n <= m"
  63.184 +      by simp
  63.185 +    with hehe
  63.186 +    have "P n"
  63.187 +      by simp
  63.188 +    with npn
  63.189 +    show "m < n"
  63.190 +      ..
  63.191 +  qed
  63.192 +qed;
  63.193 +
  63.194 +constdefs
  63.195 +  FUNPOW :: "('a => 'a) => nat => 'a => 'a"
  63.196 +  "FUNPOW f n == f ^ n"
  63.197 +
  63.198 +lemma FUNPOW: "(ALL f x. (f ^ 0) x = x) &
  63.199 +  (ALL f n x. (f ^ Suc n) x = (f ^ n) (f x))"
  63.200 +proof auto
  63.201 +  fix f n x
  63.202 +  have "ALL x. f ((f ^ n) x) = (f ^ n) (f x)"
  63.203 +    by (induct n,auto)
  63.204 +  thus "f ((f ^ n) x) = (f ^ n) (f x)"
  63.205 +    ..
  63.206 +qed
  63.207 +
  63.208 +lemma [hol4rew]: "FUNPOW f n = f ^ n"
  63.209 +  by (simp add: FUNPOW_def)
  63.210 +
  63.211 +lemma ADD: "(!n. (0::nat) + n = n) & (!m n. Suc m + n = Suc (m + n))"
  63.212 +  by simp
  63.213 +
  63.214 +lemma MULT: "(!n. (0::nat) * n = 0) & (!m n. Suc m * n = m * n + n)"
  63.215 +  by simp
  63.216 +
  63.217 +lemma SUB: "(!m. (0::nat) - m = 0) & (!m n. (Suc m) - n = (if m < n then 0 else Suc (m - n)))"
  63.218 +  apply simp
  63.219 +  apply arith
  63.220 +  done
  63.221 +
  63.222 +lemma MAX_DEF: "max (m::nat) n = (if m < n then n else m)"
  63.223 +  by (simp add: max_def)
  63.224 +
  63.225 +lemma MIN_DEF: "min (m::nat) n = (if m < n then m else n)"
  63.226 +  by (simp add: min_def)
  63.227 +
  63.228 +lemma DIVISION: "(0::nat) < n --> (!k. (k = k div n * n + k mod n) & k mod n < n)"
  63.229 +  by simp
  63.230 +
  63.231 +constdefs
  63.232 +  ALT_ZERO :: nat
  63.233 +  "ALT_ZERO == 0"
  63.234 +  NUMERAL_BIT1 :: "nat \<Rightarrow> nat"
  63.235 +  "NUMERAL_BIT1 n == n + (n + Suc 0)"
  63.236 +  NUMERAL_BIT2 :: "nat \<Rightarrow> nat"
  63.237 +  "NUMERAL_BIT2 n == n + (n + Suc (Suc 0))"
  63.238 +  NUMERAL :: "nat \<Rightarrow> nat"
  63.239 +  "NUMERAL x == x"
  63.240 +
  63.241 +lemma [hol4rew]: "NUMERAL ALT_ZERO = 0"
  63.242 +  by (simp add: ALT_ZERO_def NUMERAL_def)
  63.243 +
  63.244 +lemma [hol4rew]: "NUMERAL (NUMERAL_BIT1 ALT_ZERO) = 1"
  63.245 +  by (simp add: ALT_ZERO_def NUMERAL_BIT1_def NUMERAL_def)
  63.246 +
  63.247 +lemma [hol4rew]: "NUMERAL (NUMERAL_BIT2 ALT_ZERO) = 2"
  63.248 +  by (simp add: ALT_ZERO_def NUMERAL_BIT2_def NUMERAL_def)
  63.249 +
  63.250 +lemma EXP: "(!m. m ^ 0 = (1::nat)) & (!m n. m ^ Suc n = m * (m::nat) ^ n)"
  63.251 +  by auto
  63.252 +
  63.253 +lemma num_case_def: "(!b f. nat_case b f 0 = b) & (!b f n. nat_case b f (Suc n) = f n)"
  63.254 +  by simp;
  63.255 +
  63.256 +lemma divides_def: "(a::nat) dvd b = (? q. b = q * a)"
  63.257 +  by (auto simp add: dvd_def);
  63.258 +
  63.259 +lemma list_case_def: "(!v f. list_case v f [] = v) & (!v f a0 a1. list_case v f (a0#a1) = f a0 a1)"
  63.260 +  by simp
  63.261 +
  63.262 +consts
  63.263 +  list_size :: "('a \<Rightarrow> nat) \<Rightarrow> 'a list \<Rightarrow> nat"
  63.264 +
  63.265 +primrec
  63.266 +  "list_size f [] = 0"
  63.267 +  "list_size f (a0#a1) = 1 + (f a0 + list_size f a1)"
  63.268 +
  63.269 +lemma list_size_def: "(!f. list_size f [] = 0) &
  63.270 +         (!f a0 a1. list_size f (a0#a1) = 1 + (f a0 + list_size f a1))"
  63.271 +  by simp
  63.272 +
  63.273 +lemma list_case_cong: "! M M' v f. M = M' & (M' = [] \<longrightarrow>  v = v') &
  63.274 +           (!a0 a1. (M' = a0#a1) \<longrightarrow> (f a0 a1 = f' a0 a1)) -->
  63.275 +           (list_case v f M = list_case v' f' M')"
  63.276 +proof clarify
  63.277 +  fix M M' v f
  63.278 +  assume "M' = [] \<longrightarrow> v = v'"
  63.279 +    and "!a0 a1. M' = a0 # a1 \<longrightarrow> f a0 a1 = f' a0 a1"
  63.280 +  show "list_case v f M' = list_case v' f' M'"
  63.281 +  proof (rule List.list.case_cong)
  63.282 +    show "M' = M'"
  63.283 +      ..
  63.284 +  next
  63.285 +    assume "M' = []"
  63.286 +    with prems
  63.287 +    show "v = v'"
  63.288 +      by auto
  63.289 +  next
  63.290 +    fix a0 a1
  63.291 +    assume "M' = a0 # a1"
  63.292 +    with prems
  63.293 +    show "f a0 a1 = f' a0 a1"
  63.294 +      by auto
  63.295 +  qed
  63.296 +qed
  63.297 +
  63.298 +lemma list_Axiom: "ALL f0 f1. EX fn. (fn [] = f0) & (ALL a0 a1. fn (a0#a1) = f1 a0 a1 (fn a1))"
  63.299 +proof safe
  63.300 +  fix f0 f1
  63.301 +  def fn == "list_rec f0 f1"
  63.302 +  have "fn [] = f0 & (ALL a0 a1. fn (a0 # a1) = f1 a0 a1 (fn a1))"
  63.303 +    by (simp add: fn_def)
  63.304 +  thus "EX fn. fn [] = f0 & (ALL a0 a1. fn (a0 # a1) = f1 a0 a1 (fn a1))"
  63.305 +    by auto
  63.306 +qed
  63.307 +
  63.308 +lemma list_Axiom_old: "EX! fn. (fn [] = x) & (ALL h t. fn (h#t) = f (fn t) h t)"
  63.309 +proof safe
  63.310 +  def fn == "list_rec x (%h t r. f r h t)"
  63.311 +  have "fn [] = x & (ALL h t. fn (h # t) = f (fn t) h t)"
  63.312 +    by (simp add: fn_def)
  63.313 +  thus "EX fn. fn [] = x & (ALL h t. fn (h # t) = f (fn t) h t)"
  63.314 +    by auto
  63.315 +next
  63.316 +  fix fn1 fn2
  63.317 +  assume "ALL h t. fn1 (h # t) = f (fn1 t) h t"
  63.318 +  assume "ALL h t. fn2 (h # t) = f (fn2 t) h t"
  63.319 +  assume "fn2 [] = fn1 []"
  63.320 +  show "fn1 = fn2"
  63.321 +  proof
  63.322 +    fix xs
  63.323 +    show "fn1 xs = fn2 xs"
  63.324 +      by (induct xs,simp_all add: prems) 
  63.325 +  qed
  63.326 +qed
  63.327 +
  63.328 +lemma NULL_DEF: "(null [] = True) & (!h t. null (h # t) = False)"
  63.329 +  by simp
  63.330 +
  63.331 +constdefs
  63.332 +  sum :: "nat list \<Rightarrow> nat"
  63.333 +  "sum l == foldr (op +) l 0"
  63.334 +
  63.335 +lemma SUM: "(sum [] = 0) & (!h t. sum (h#t) = h + sum t)"
  63.336 +  by (simp add: sum_def)
  63.337 +
  63.338 +lemma APPEND: "(!l. [] @ l = l) & (!l1 l2 h. (h#l1) @ l2 = h# l1 @ l2)"
  63.339 +  by simp
  63.340 +
  63.341 +lemma FLAT: "(concat [] = []) & (!h t. concat (h#t) = h @ (concat t))"
  63.342 +  by simp
  63.343 +
  63.344 +lemma LENGTH: "(length [] = 0) & (!h t. length (h#t) = Suc (length t))"
  63.345 +  by simp
  63.346 +
  63.347 +lemma MAP: "(!f. map f [] = []) & (!f h t. map f (h#t) = f h#map f t)"
  63.348 +  by simp
  63.349 +
  63.350 +lemma MEM: "(!x. x mem [] = False) & (!x h t. x mem (h#t) = ((x = h) | x mem t))"
  63.351 +  by auto
  63.352 +
  63.353 +lemma FILTER: "(!P. filter P [] = []) & (!P h t.
  63.354 +           filter P (h#t) = (if P h then h#filter P t else filter P t))"
  63.355 +  by simp
  63.356 +
  63.357 +lemma REPLICATE: "(ALL x. replicate 0 x = []) &
  63.358 +  (ALL n x. replicate (Suc n) x = x # replicate n x)"
  63.359 +  by simp
  63.360 +
  63.361 +constdefs
  63.362 +  FOLDR :: "[['a,'b]\<Rightarrow>'b,'b,'a list] \<Rightarrow> 'b"
  63.363 +  "FOLDR f e l == foldr f l e"
  63.364 +
  63.365 +lemma [hol4rew]: "FOLDR f e l = foldr f l e"
  63.366 +  by (simp add: FOLDR_def)
  63.367 +
  63.368 +lemma FOLDR: "(!f e. foldr f [] e = e) & (!f e x l. foldr f (x#l) e = f x (foldr f l e))"
  63.369 +  by simp
  63.370 +
  63.371 +lemma FOLDL: "(!f e. foldl f e [] = e) & (!f e x l. foldl f e (x#l) = foldl f (f e x) l)"
  63.372 +  by simp
  63.373 +
  63.374 +lemma EVERY_DEF: "(!P. list_all P [] = True) & (!P h t. list_all P (h#t) = (P h & list_all P t))"
  63.375 +  by simp
  63.376 +
  63.377 +consts
  63.378 +  list_exists :: "['a \<Rightarrow> bool,'a list] \<Rightarrow> bool"
  63.379 +
  63.380 +primrec
  63.381 +  list_exists_Nil: "list_exists P Nil = False"
  63.382 +  list_exists_Cons: "list_exists P (x#xs) = (if P x then True else list_exists P xs)"
  63.383 +
  63.384 +lemma list_exists_DEF: "(!P. list_exists P [] = False) &
  63.385 +         (!P h t. list_exists P (h#t) = (P h | list_exists P t))"
  63.386 +  by simp
  63.387 +
  63.388 +consts
  63.389 +  map2 :: "[['a,'b]\<Rightarrow>'c,'a list,'b list] \<Rightarrow> 'c list"
  63.390 +
  63.391 +primrec
  63.392 +  map2_Nil: "map2 f [] l2 = []"
  63.393 +  map2_Cons: "map2 f (x#xs) l2 = f x (hd l2) # map2 f xs (tl l2)"
  63.394 +
  63.395 +lemma MAP2: "(!f. map2 f [] [] = []) & (!f h1 t1 h2 t2. map2 f (h1#t1) (h2#t2) = f h1 h2#map2 f t1 t2)"
  63.396 +  by simp
  63.397 +
  63.398 +lemma list_INDUCT: "\<lbrakk> P [] ; !t. P t \<longrightarrow> (!h. P (h#t)) \<rbrakk> \<Longrightarrow> !l. P l"
  63.399 +proof
  63.400 +  fix l
  63.401 +  assume "P []"
  63.402 +  assume allt: "!t. P t \<longrightarrow> (!h. P (h # t))"
  63.403 +  show "P l"
  63.404 +  proof (induct l)
  63.405 +    show "P []" .
  63.406 +  next
  63.407 +    fix h t
  63.408 +    assume "P t"
  63.409 +    with allt
  63.410 +    have "!h. P (h # t)"
  63.411 +      by auto
  63.412 +    thus "P (h # t)"
  63.413 +      ..
  63.414 +  qed
  63.415 +qed
  63.416 +
  63.417 +lemma list_CASES: "(l = []) | (? t h. l = h#t)"
  63.418 +  by (induct l,auto)
  63.419 +
  63.420 +constdefs
  63.421 +  ZIP :: "'a list * 'b list \<Rightarrow> ('a * 'b) list"
  63.422 +  "ZIP == %(a,b). zip a b"
  63.423 +
  63.424 +lemma ZIP: "(zip [] [] = []) &
  63.425 +  (!x1 l1 x2 l2. zip (x1#l1) (x2#l2) = (x1,x2)#zip l1 l2)"
  63.426 +  by simp
  63.427 +
  63.428 +lemma [hol4rew]: "ZIP (a,b) = zip a b"
  63.429 +  by (simp add: ZIP_def)
  63.430 +
  63.431 +consts
  63.432 +  unzip :: "('a * 'b) list \<Rightarrow> 'a list * 'b list"
  63.433 +
  63.434 +primrec
  63.435 +  unzip_Nil: "unzip [] = ([],[])"
  63.436 +  unzip_Cons: "unzip (xy#xys) = (let zs = unzip xys in (fst xy # fst zs,snd xy # snd zs))"
  63.437 +
  63.438 +lemma UNZIP: "(unzip [] = ([],[])) &
  63.439 +         (!x l. unzip (x#l) = (fst x#fst (unzip l),snd x#snd (unzip l)))"
  63.440 +  by (simp add: Let_def)
  63.441 +
  63.442 +lemma REVERSE: "(rev [] = []) & (!h t. rev (h#t) = (rev t) @ [h])"
  63.443 +  by simp;
  63.444 +
  63.445 +lemma REAL_SUP_ALLPOS: "\<lbrakk> ALL x. P (x::real) \<longrightarrow> 0 < x ; EX x. P x; EX z. ALL x. P x \<longrightarrow> x < z \<rbrakk> \<Longrightarrow> EX s. ALL y. (EX x. P x & y < x) = (y < s)"
  63.446 +proof safe
  63.447 +  fix x z
  63.448 +  assume allx: "ALL x. P x \<longrightarrow> 0 < x"
  63.449 +  assume px: "P x"
  63.450 +  assume allx': "ALL x. P x \<longrightarrow> x < z"
  63.451 +  have "EX s. ALL y. (EX x : Collect P. y < x) = (y < s)"
  63.452 +  proof (rule posreal_complete)
  63.453 +    show "ALL x : Collect P. 0 < x"
  63.454 +    proof safe
  63.455 +      fix x
  63.456 +      assume "P x"
  63.457 +      from allx
  63.458 +      have "P x \<longrightarrow> 0 < x"
  63.459 +	..
  63.460 +      thus "0 < x"
  63.461 +	by (simp add: prems)
  63.462 +    qed
  63.463 +  next
  63.464 +    from px
  63.465 +    show "EX x. x : Collect P"
  63.466 +      by auto
  63.467 +  next
  63.468 +    from allx'
  63.469 +    show "EX y. ALL x : Collect P. x < y"
  63.470 +      apply simp
  63.471 +      ..
  63.472 +  qed
  63.473 +  thus "EX s. ALL y. (EX x. P x & y < x) = (y < s)"
  63.474 +    by simp
  63.475 +qed
  63.476 +
  63.477 +lemma REAL_10: "~((1::real) = 0)"
  63.478 +  by simp
  63.479 +
  63.480 +lemma REAL_ADD_ASSOC: "(x::real) + (y + z) = x + y + z"
  63.481 +  by simp
  63.482 +
  63.483 +lemma REAL_MUL_ASSOC: "(x::real) * (y * z) = x * y * z"
  63.484 +  by simp
  63.485 +
  63.486 +lemma REAL_ADD_LINV:  "-x + x = (0::real)"
  63.487 +  by simp
  63.488 +
  63.489 +lemma REAL_MUL_LINV: "x ~= (0::real) ==> inverse x * x = 1"
  63.490 +  by simp
  63.491 +
  63.492 +lemma REAL_LT_TOTAL: "((x::real) = y) | x < y | y < x"
  63.493 +  by auto;
  63.494 +
  63.495 +lemma [hol4rew]: "real (0::nat) = 0"
  63.496 +  by simp
  63.497 +
  63.498 +lemma [hol4rew]: "real (1::nat) = 1"
  63.499 +  by simp
  63.500 +
  63.501 +lemma [hol4rew]: "real (2::nat) = 2"
  63.502 +  by simp
  63.503 +
  63.504 +lemma real_lte: "((x::real) <= y) = (~(y < x))"
  63.505 +  by auto
  63.506 +
  63.507 +lemma real_of_num: "((0::real) = 0) & (!n. real (Suc n) = real n + 1)"
  63.508 +  by (simp add: real_of_nat_Suc)
  63.509 +
  63.510 +lemma abs: "abs (x::real) = (if 0 <= x then x else -x)"
  63.511 +  by (simp add: real_abs_def)
  63.512 +
  63.513 +lemma pow: "(!x::real. x ^ 0 = 1) & (!x::real. ALL n. x ^ (Suc n) = x * x ^ n)"
  63.514 +  by simp;
  63.515 +
  63.516 +constdefs
  63.517 +  real_gt :: "real => real => bool" 
  63.518 +  "real_gt == %x y. y < x"
  63.519 +
  63.520 +lemma [hol4rew]: "real_gt x y = (y < x)"
  63.521 +  by (simp add: real_gt_def)
  63.522 +
  63.523 +lemma real_gt: "ALL x (y::real). (y < x) = (y < x)"
  63.524 +  by simp
  63.525 +
  63.526 +constdefs
  63.527 +  real_ge :: "real => real => bool"
  63.528 +  "real_ge x y == y <= x"
  63.529 +
  63.530 +lemma [hol4rew]: "real_ge x y = (y <= x)"
  63.531 +  by (simp add: real_ge_def)
  63.532 +
  63.533 +lemma real_ge: "ALL x y. (y <= x) = (y <= x)"
  63.534 +  by simp
  63.535 +
  63.536 +end
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/src/HOL/Import/HOL4Setup.thy	Fri Apr 02 17:37:45 2004 +0200
    64.3 @@ -0,0 +1,166 @@
    64.4 +theory HOL4Setup = MakeEqual
    64.5 +  files ("proof_kernel.ML") ("replay.ML") ("hol4rews.ML") ("import_package.ML"):
    64.6 +
    64.7 +section {* General Setup *}
    64.8 +
    64.9 +lemma eq_imp: "P = Q \<Longrightarrow> P \<longrightarrow> Q"
   64.10 +  by auto
   64.11 +
   64.12 +lemma HOLallI: "(!! bogus. P bogus) \<Longrightarrow> (ALL bogus. P bogus)"
   64.13 +proof -
   64.14 +  assume "!! bogus. P bogus"
   64.15 +  thus "ALL x. P x"
   64.16 +    ..
   64.17 +qed
   64.18 +
   64.19 +consts
   64.20 +  ONE_ONE :: "('a => 'b) => bool"
   64.21 +  ONTO    :: "('a => 'b) => bool"
   64.22 +
   64.23 +defs
   64.24 +  ONE_ONE_DEF: "ONE_ONE f == ALL x y. f x = f y --> x = y"
   64.25 +  ONTO_DEF   : "ONTO f == ALL y. EX x. y = f x"
   64.26 +
   64.27 +lemma ONE_ONE_rew: "ONE_ONE f = inj_on f UNIV"
   64.28 +  by (simp add: ONE_ONE_DEF inj_on_def)
   64.29 +
   64.30 +lemma INFINITY_AX: "EX (f::ind \<Rightarrow> ind). (inj f & ~(ONTO f))"
   64.31 +proof (rule exI,safe)
   64.32 +  show "inj Suc_Rep"
   64.33 +    by (rule inj_Suc_Rep)
   64.34 +next
   64.35 +  assume "ONTO Suc_Rep"
   64.36 +  hence "ALL y. EX x. y = Suc_Rep x"
   64.37 +    by (simp add: ONTO_DEF surj_def)
   64.38 +  hence "EX x. Zero_Rep = Suc_Rep x"
   64.39 +    by (rule spec)
   64.40 +  thus False
   64.41 +  proof (rule exE)
   64.42 +    fix x
   64.43 +    assume "Zero_Rep = Suc_Rep x"
   64.44 +    hence "Suc_Rep x = Zero_Rep"
   64.45 +      ..
   64.46 +    with Suc_Rep_not_Zero_Rep
   64.47 +    show False
   64.48 +      ..
   64.49 +  qed
   64.50 +qed
   64.51 +
   64.52 +lemma EXISTS_DEF: "Ex P = P (Eps P)"
   64.53 +proof (rule iffI)
   64.54 +  assume "Ex P"
   64.55 +  thus "P (Eps P)"
   64.56 +    ..
   64.57 +next
   64.58 +  assume "P (Eps P)"
   64.59 +  thus "Ex P"
   64.60 +    ..
   64.61 +qed
   64.62 +
   64.63 +consts
   64.64 +  TYPE_DEFINITION :: "('a => bool) => ('b => 'a) => bool"
   64.65 +
   64.66 +defs
   64.67 +  TYPE_DEFINITION: "TYPE_DEFINITION p rep == ((ALL x y. (rep x = rep y) --> (x = y)) & (ALL x. (p x = (EX y. x = rep y))))"
   64.68 +
   64.69 +lemma ex_imp_nonempty: "Ex P ==> EX x. x : (Collect P)"
   64.70 +  by simp
   64.71 +
   64.72 +lemma light_ex_imp_nonempty: "P t ==> EX x. x : (Collect P)"
   64.73 +proof -
   64.74 +  assume "P t"
   64.75 +  hence "EX x. P x"
   64.76 +    ..
   64.77 +  thus ?thesis
   64.78 +    by (rule ex_imp_nonempty)
   64.79 +qed
   64.80 +
   64.81 +lemma light_imp_as: "[| Q --> P; P --> Q |] ==> P = Q"
   64.82 +  by blast
   64.83 +
   64.84 +lemma typedef_hol2hol4:
   64.85 +  assumes a: "type_definition (Rep::'a=>'b) Abs (Collect P)"
   64.86 +  shows "EX rep. TYPE_DEFINITION P (rep::'a=>'b)"
   64.87 +proof -
   64.88 +  from a
   64.89 +  have td: "(ALL x. P (Rep x)) & (ALL x. Abs (Rep x) = x) & (ALL y. P y \<longrightarrow> Rep (Abs y) = y)"
   64.90 +    by (simp add: type_definition_def)
   64.91 +  have ed: "TYPE_DEFINITION P Rep"
   64.92 +  proof (auto simp add: TYPE_DEFINITION)
   64.93 +    fix x y
   64.94 +    assume "Rep x = Rep y"
   64.95 +    from td have "x = Abs (Rep x)"
   64.96 +      by auto
   64.97 +    also have "Abs (Rep x) = Abs (Rep y)"
   64.98 +      by (simp add: prems)
   64.99 +    also from td have "Abs (Rep y) = y"
  64.100 +      by auto
  64.101 +    finally show "x = y" .
  64.102 +  next
  64.103 +    fix x
  64.104 +    assume "P x"
  64.105 +    with td
  64.106 +    have "Rep (Abs x) = x"
  64.107 +      by auto
  64.108 +    hence "x = Rep (Abs x)"
  64.109 +      ..
  64.110 +    thus "EX y. x = Rep y"
  64.111 +      ..
  64.112 +  next
  64.113 +    fix y
  64.114 +    from td
  64.115 +    show "P (Rep y)"
  64.116 +      by auto
  64.117 +  qed
  64.118 +  show ?thesis
  64.119 +    apply (rule exI [of _ Rep])
  64.120 +    apply (rule ed)
  64.121 +    .
  64.122 +qed
  64.123 +
  64.124 +lemma typedef_hol2hollight:
  64.125 +  assumes a: "type_definition (Rep::'a=>'b) Abs (Collect P)"
  64.126 +  shows "(Abs (Rep a) = a) & (P r = (Rep (Abs r) = r))"
  64.127 +proof
  64.128 +  from a
  64.129 +  show "Abs (Rep a) = a"
  64.130 +    by (rule type_definition.Rep_inverse)
  64.131 +next
  64.132 +  show "P r = (Rep (Abs r) = r)"
  64.133 +  proof
  64.134 +    assume "P r"
  64.135 +    hence "r \<in> (Collect P)"
  64.136 +      by simp
  64.137 +    with a
  64.138 +    show "Rep (Abs r) = r"
  64.139 +      by (rule type_definition.Abs_inverse)
  64.140 +  next
  64.141 +    assume ra: "Rep (Abs r) = r"
  64.142 +    from a
  64.143 +    have "Rep (Abs r) \<in> (Collect P)"
  64.144 +      by (rule type_definition.Rep)
  64.145 +    thus "P r"
  64.146 +      by (simp add: ra)
  64.147 +  qed
  64.148 +qed
  64.149 +
  64.150 +lemma termspec_help: "[| Ex P ; c == Eps P |] ==> P c"
  64.151 +  apply simp
  64.152 +  apply (rule someI_ex)
  64.153 +  .
  64.154 +
  64.155 +lemma typedef_helper: "EX x. P x \<Longrightarrow> EX x. x \<in> (Collect P)"
  64.156 +  by simp
  64.157 +
  64.158 +use "hol4rews.ML"
  64.159 +
  64.160 +setup hol4_setup
  64.161 +parse_ast_translation smarter_trueprop_parsing
  64.162 +
  64.163 +use "proof_kernel.ML"
  64.164 +use "replay.ML"
  64.165 +use "import_package.ML"
  64.166 +
  64.167 +setup ImportPackage.setup
  64.168 +
  64.169 +end
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/src/HOL/Import/HOL4Syntax.thy	Fri Apr 02 17:37:45 2004 +0200
    65.3 @@ -0,0 +1,6 @@
    65.4 +theory HOL4Syntax = HOL4Setup
    65.5 +  files "import_syntax.ML":
    65.6 +
    65.7 +ML {* HOL4ImportSyntax.setup() *}
    65.8 +
    65.9 +end
   65.10 \ No newline at end of file
    66.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2 +++ b/src/HOL/Import/MakeEqual.thy	Fri Apr 02 17:37:45 2004 +0200
    66.3 @@ -0,0 +1,68 @@
    66.4 +theory MakeEqual = Main
    66.5 +  files "shuffler.ML":
    66.6 +
    66.7 +setup Shuffler.setup
    66.8 +
    66.9 +lemma conj_norm [shuffle_rule]: "(A & B ==> PROP C) == ([| A ; B |] ==> PROP C)"
   66.10 +proof
   66.11 +  assume "A & B ==> PROP C" A B
   66.12 +  thus "PROP C"
   66.13 +    by auto
   66.14 +next
   66.15 +  assume "[| A; B |] ==> PROP C" "A & B"
   66.16 +  thus "PROP C"
   66.17 +    by auto
   66.18 +qed
   66.19 +
   66.20 +lemma imp_norm [shuffle_rule]: "(Trueprop (A --> B)) == (A ==> B)"
   66.21 +proof
   66.22 +  assume "A --> B" A
   66.23 +  thus B ..
   66.24 +next
   66.25 +  assume "A ==> B"
   66.26 +  thus "A --> B"
   66.27 +    by auto
   66.28 +qed
   66.29 +
   66.30 +lemma all_norm [shuffle_rule]: "(Trueprop (ALL x. P x)) == (!!x. P x)"
   66.31 +proof
   66.32 +  fix x
   66.33 +  assume "ALL x. P x"
   66.34 +  thus "P x" ..
   66.35 +next
   66.36 +  assume "!!x. P x"
   66.37 +  thus "ALL x. P x"
   66.38 +    ..
   66.39 +qed
   66.40 +
   66.41 +lemma ex_norm [shuffle_rule]: "(EX x. P x ==> PROP Q) == (!!x. P x ==> PROP Q)"
   66.42 +proof
   66.43 +  fix x
   66.44 +  assume ex: "EX x. P x ==> PROP Q"
   66.45 +  assume "P x"
   66.46 +  hence "EX x. P x" ..
   66.47 +  with ex show "PROP Q" .
   66.48 +next
   66.49 +  assume allx: "!!x. P x ==> PROP Q"
   66.50 +  assume "EX x. P x"
   66.51 +  hence p: "P (SOME x. P x)"
   66.52 +    ..
   66.53 +  from allx
   66.54 +  have "P (SOME x. P x) ==> PROP Q"
   66.55 +    .
   66.56 +  with p
   66.57 +  show "PROP Q"
   66.58 +    by auto
   66.59 +qed
   66.60 +
   66.61 +lemma eq_norm [shuffle_rule]: "Trueprop (t = u) == (t == u)"
   66.62 +proof
   66.63 +  assume "t = u"
   66.64 +  thus "t == u" by simp
   66.65 +next
   66.66 +  assume "t == u"
   66.67 +  thus "t = u"
   66.68 +    by simp
   66.69 +qed
   66.70 +
   66.71 +end
    67.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2 +++ b/src/HOL/Import/ROOT.ML	Fri Apr 02 17:37:45 2004 +0200
    67.3 @@ -0,0 +1,2 @@
    67.4 +use_thy "HOL4Compat";
    67.5 +use_thy "HOL4Syntax";
    68.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2 +++ b/src/HOL/Import/hol4rews.ML	Fri Apr 02 17:37:45 2004 +0200
    68.3 @@ -0,0 +1,773 @@
    68.4 +structure StringPair = TableFun(type key = string * string val ord = prod_ord string_ord string_ord);
    68.5 +
    68.6 +type holthm = (term * term) list * thm
    68.7 +
    68.8 +datatype ImportStatus =
    68.9 +	 NoImport
   68.10 +       | Generating of string
   68.11 +       | Replaying of string
   68.12 +
   68.13 +structure HOL4DefThyArgs: THEORY_DATA_ARGS =
   68.14 +struct
   68.15 +val name = "HOL4/import_status"
   68.16 +type T = ImportStatus
   68.17 +val empty = NoImport
   68.18 +val copy = I
   68.19 +val prep_ext = I
   68.20 +fun merge (NoImport,NoImport) = NoImport
   68.21 +  | merge _ = (warning "Import status set during merge"; NoImport)
   68.22 +fun print sg import_status =
   68.23 +    Pretty.writeln (Pretty.str (case import_status of NoImport => "No current import" | Generating thyname => ("Generating " ^ thyname) | Replaying thyname => ("Replaying " ^ thyname)))
   68.24 +end;
   68.25 +
   68.26 +structure HOL4DefThy = TheoryDataFun(HOL4DefThyArgs);
   68.27 +
   68.28 +structure ImportSegmentArgs: THEORY_DATA_ARGS =
   68.29 +struct
   68.30 +val name = "HOL4/import"
   68.31 +type T = string
   68.32 +val empty = ""
   68.33 +val copy = I
   68.34 +val prep_ext = I
   68.35 +fun merge ("",arg) = arg
   68.36 +  | merge (arg,"") = arg
   68.37 +  | merge (s1,s2) =
   68.38 +    if s1 = s2
   68.39 +    then s1
   68.40 +    else error "Trying to merge two different import segments"
   68.41 +fun print sg import_segment =
   68.42 +    Pretty.writeln (Pretty.str ("Import segment: " ^ import_segment))
   68.43 +end;
   68.44 +
   68.45 +structure ImportSegment = TheoryDataFun(ImportSegmentArgs);
   68.46 +
   68.47 +val get_import_segment = ImportSegment.get
   68.48 +val set_import_segment = ImportSegment.put
   68.49 +
   68.50 +structure HOL4UNamesArgs: THEORY_DATA_ARGS =
   68.51 +struct
   68.52 +val name = "HOL4/used_names"
   68.53 +type T = string list
   68.54 +val empty = []
   68.55 +val copy = I
   68.56 +val prep_ext = I
   68.57 +fun merge ([],[]) = []
   68.58 +  | merge _ = error "Used names not empty during merge"
   68.59 +fun print sg used_names =
   68.60 +    Pretty.writeln (Pretty.str "Printing of HOL4/used_names Not implemented")
   68.61 +end;
   68.62 +
   68.63 +structure HOL4UNames = TheoryDataFun(HOL4UNamesArgs);
   68.64 +
   68.65 +structure HOL4DumpArgs: THEORY_DATA_ARGS =
   68.66 +struct
   68.67 +val name = "HOL4/dump_data"
   68.68 +type T = string * string * string list
   68.69 +val empty = ("","",[])
   68.70 +val copy = I
   68.71 +val prep_ext = I
   68.72 +fun merge (("","",[]),("","",[])) = ("","",[])
   68.73 +  | merge _ = error "Dump data not empty during merge"
   68.74 +fun print sg dump_data =
   68.75 +    Pretty.writeln (Pretty.str "Printing of HOL4/dump_data Not implemented")
   68.76 +end;
   68.77 +
   68.78 +structure HOL4Dump = TheoryDataFun(HOL4DumpArgs);
   68.79 +
   68.80 +structure HOL4MovesArgs: THEORY_DATA_ARGS =
   68.81 +struct
   68.82 +val name = "HOL4/moves"
   68.83 +type T = string Symtab.table
   68.84 +val empty = Symtab.empty
   68.85 +val copy = I
   68.86 +val prep_ext = I
   68.87 +val merge = Symtab.merge (K true)
   68.88 +fun print sg tab =
   68.89 +    Pretty.writeln (Pretty.big_list "HOL4 moves:"
   68.90 +	(Symtab.foldl (fn (xl,(bef,aft)) => (Pretty.str (bef ^ " --> " ^ aft)::xl)) ([],tab)))
   68.91 +end;
   68.92 +
   68.93 +structure HOL4Moves = TheoryDataFun(HOL4MovesArgs);
   68.94 +
   68.95 +structure HOL4ImportsArgs: THEORY_DATA_ARGS =
   68.96 +struct
   68.97 +val name = "HOL4/imports"
   68.98 +type T = string Symtab.table
   68.99 +val empty = Symtab.empty
  68.100 +val copy = I
  68.101 +val prep_ext = I
  68.102 +val merge = Symtab.merge (K true)
  68.103 +fun print sg tab =
  68.104 +    Pretty.writeln (Pretty.big_list "HOL4 imports:"
  68.105 +	(Symtab.foldl (fn (xl,(thyname,segname)) => (Pretty.str (thyname ^ " imported from segment " ^ segname)::xl)) ([],tab)))
  68.106 +end;
  68.107 +
  68.108 +structure HOL4Imports = TheoryDataFun(HOL4ImportsArgs);
  68.109 +
  68.110 +fun get_segment2 thyname thy =
  68.111 +    let
  68.112 +	val imps = HOL4Imports.get thy
  68.113 +    in
  68.114 +	Symtab.lookup(imps,thyname)
  68.115 +    end
  68.116 +
  68.117 +fun set_segment thyname segname thy =
  68.118 +    let
  68.119 +	val imps = HOL4Imports.get thy
  68.120 +	val imps' = Symtab.update_new((thyname,segname),imps)
  68.121 +    in
  68.122 +	HOL4Imports.put imps' thy
  68.123 +    end
  68.124 +
  68.125 +structure HOL4CMovesArgs: THEORY_DATA_ARGS =
  68.126 +struct
  68.127 +val name = "HOL4/constant_moves"
  68.128 +type T = string Symtab.table
  68.129 +val empty = Symtab.empty
  68.130 +val copy = I
  68.131 +val prep_ext = I
  68.132 +val merge = Symtab.merge (K true)
  68.133 +fun print sg tab =
  68.134 +    Pretty.writeln (Pretty.big_list "HOL4 constant moves:"
  68.135 +	(Symtab.foldl (fn (xl,(bef,aft)) => (Pretty.str (bef ^ " --> " ^ aft)::xl)) ([],tab)))
  68.136 +end;
  68.137 +
  68.138 +structure HOL4CMoves = TheoryDataFun(HOL4CMovesArgs);
  68.139 +
  68.140 +structure HOL4MapsArgs: THEORY_DATA_ARGS =
  68.141 +struct
  68.142 +val name = "HOL4/mappings"
  68.143 +type T = (string option) StringPair.table
  68.144 +val empty = StringPair.empty
  68.145 +val copy = I
  68.146 +val prep_ext = I
  68.147 +val merge = StringPair.merge (K true)
  68.148 +fun print sg tab =
  68.149 +    Pretty.writeln (Pretty.big_list "HOL4 mappings:"
  68.150 +	(StringPair.foldl (fn (xl,((bthy,bthm),isathm)) => (Pretty.str (bthy ^ "." ^ bthm ^ (case isathm of Some th => " --> " ^ th | None => "IGNORED"))::xl)) ([],tab)))
  68.151 +end;
  68.152 +
  68.153 +structure HOL4Maps = TheoryDataFun(HOL4MapsArgs);
  68.154 +
  68.155 +structure HOL4ThmsArgs: THEORY_DATA_ARGS =
  68.156 +struct
  68.157 +val name = "HOL4/theorems"
  68.158 +type T = holthm StringPair.table
  68.159 +val empty = StringPair.empty
  68.160 +val copy = I
  68.161 +val prep_ext = I
  68.162 +val merge = StringPair.merge (K true)
  68.163 +fun print sg tab =
  68.164 +    Pretty.writeln (Pretty.big_list "HOL4 mappings:"
  68.165 +	(StringPair.foldl (fn (xl,((bthy,bthm),(_,thm))) => (Pretty.str (bthy ^ "." ^ bthm ^ ":")::(Display.pretty_thm thm)::xl)) ([],tab)))
  68.166 +end;
  68.167 +
  68.168 +structure HOL4Thms = TheoryDataFun(HOL4ThmsArgs);
  68.169 +
  68.170 +structure HOL4ConstMapsArgs: THEORY_DATA_ARGS =
  68.171 +struct
  68.172 +val name = "HOL4/constmappings"
  68.173 +type T = (bool * string * typ option) StringPair.table
  68.174 +val empty = StringPair.empty
  68.175 +val copy = I
  68.176 +val prep_ext = I
  68.177 +val merge = StringPair.merge (K true)
  68.178 +fun print sg tab =
  68.179 +    Pretty.writeln (Pretty.big_list "HOL4 constant mappings:"
  68.180 +	(StringPair.foldl (fn (xl,((bthy,bconst),(internal,isaconst,_))) => (Pretty.str (bthy ^ "." ^ bconst ^ " --> " ^ isaconst ^ (if internal then " (*)" else ""))::xl)) ([],tab)))
  68.181 +end;
  68.182 +
  68.183 +structure HOL4ConstMaps = TheoryDataFun(HOL4ConstMapsArgs);
  68.184 +
  68.185 +structure HOL4RenameArgs: THEORY_DATA_ARGS =
  68.186 +struct
  68.187 +val name = "HOL4/renamings"
  68.188 +type T = string StringPair.table
  68.189 +val empty = StringPair.empty
  68.190 +val copy = I
  68.191 +val prep_ext = I
  68.192 +val merge = StringPair.merge (K true)
  68.193 +fun print sg tab =
  68.194 +    Pretty.writeln (Pretty.big_list "HOL4 constant renamings:"
  68.195 +	(StringPair.foldl (fn (xl,((bthy,bconst),newname)) => (Pretty.str (bthy ^ "." ^ bconst ^ " --> " ^ newname)::xl)) ([],tab)))
  68.196 +end;
  68.197 +
  68.198 +structure HOL4Rename = TheoryDataFun(HOL4RenameArgs);
  68.199 +
  68.200 +structure HOL4DefMapsArgs: THEORY_DATA_ARGS =
  68.201 +struct
  68.202 +val name = "HOL4/def_maps"
  68.203 +type T = string StringPair.table
  68.204 +val empty = StringPair.empty
  68.205 +val copy = I
  68.206 +val prep_ext = I
  68.207 +val merge = StringPair.merge (K true)
  68.208 +fun print sg tab =
  68.209 +    Pretty.writeln (Pretty.big_list "HOL4 constant definitions:"
  68.210 +	(StringPair.foldl (fn (xl,((bthy,bconst),newname)) => (Pretty.str (bthy ^ "." ^ bconst ^ ": " ^ newname)::xl)) ([],tab)))
  68.211 +end;
  68.212 +
  68.213 +structure HOL4DefMaps = TheoryDataFun(HOL4DefMapsArgs);
  68.214 +
  68.215 +structure HOL4TypeMapsArgs: THEORY_DATA_ARGS =
  68.216 +struct
  68.217 +val name = "HOL4/typemappings"
  68.218 +type T = (bool * string) StringPair.table
  68.219 +val empty = StringPair.empty
  68.220 +val copy = I
  68.221 +val prep_ext = I
  68.222 +val merge = StringPair.merge (K true)
  68.223 +fun print sg tab =
  68.224 +    Pretty.writeln (Pretty.big_list "HOL4 type mappings:"
  68.225 +	(StringPair.foldl (fn (xl,((bthy,bconst),(internal,isaconst))) => (Pretty.str (bthy ^ "." ^ bconst ^ " --> " ^ isaconst ^ (if internal then " (*)" else ""))::xl)) ([],tab)))
  68.226 +end;
  68.227 +
  68.228 +structure HOL4TypeMaps = TheoryDataFun(HOL4TypeMapsArgs);
  68.229 +
  68.230 +structure HOL4PendingArgs: THEORY_DATA_ARGS =
  68.231 +struct
  68.232 +val name = "HOL4/pending"
  68.233 +type T = ((term * term) list * thm) StringPair.table
  68.234 +val empty = StringPair.empty
  68.235 +val copy = I
  68.236 +val prep_ext = I
  68.237 +val merge = StringPair.merge (K true)
  68.238 +fun print sg tab =
  68.239 +    Pretty.writeln (Pretty.big_list "HOL4 pending theorems:"
  68.240 +	(StringPair.foldl (fn (xl,((bthy,bthm),(_,th))) => (Pretty.chunks [Pretty.str (bthy ^ "." ^ bthm ^ ":"),Display.pretty_thm th]::xl)) ([],tab)))
  68.241 +end;
  68.242 +
  68.243 +structure HOL4Pending = TheoryDataFun(HOL4PendingArgs);
  68.244 +
  68.245 +structure HOL4RewritesArgs: THEORY_DATA_ARGS =
  68.246 +struct
  68.247 +val name = "HOL4/rewrites"
  68.248 +type T = thm list
  68.249 +val empty = []
  68.250 +val copy = I
  68.251 +val prep_ext = I
  68.252 +val merge = Library.gen_union Thm.eq_thm
  68.253 +fun print sg thms =
  68.254 +    Pretty.writeln (Pretty.big_list "HOL4 rewrite rules:"
  68.255 +				    (map Display.pretty_thm thms))
  68.256 +end;
  68.257 +
  68.258 +structure HOL4Rewrites = TheoryDataFun(HOL4RewritesArgs);
  68.259 +
  68.260 +val hol4_debug = ref false
  68.261 +fun message s = if !hol4_debug then writeln s else ()
  68.262 +
  68.263 +fun add_hol4_rewrite (thy,th) =
  68.264 +    let
  68.265 +	val _ = message "Adding HOL4 rewrite"
  68.266 +	val th1 = th RS eq_reflection
  68.267 +	val current_rews = HOL4Rewrites.get thy
  68.268 +	val new_rews = gen_ins Thm.eq_thm (th1,current_rews)
  68.269 +	val updated_thy  = HOL4Rewrites.put new_rews thy
  68.270 +    in
  68.271 +	(updated_thy,th1)
  68.272 +    end;
  68.273 +
  68.274 +fun ignore_hol4 bthy bthm thy =
  68.275 +    let
  68.276 +	val _ = message ("Ignoring " ^ bthy ^ "." ^ bthm)
  68.277 +	val curmaps = HOL4Maps.get thy
  68.278 +	val newmaps = StringPair.update_new(((bthy,bthm),None),curmaps)
  68.279 +	val upd_thy = HOL4Maps.put newmaps thy
  68.280 +    in
  68.281 +	upd_thy
  68.282 +    end
  68.283 +
  68.284 +val opt_get_output_thy = #2 o HOL4Dump.get
  68.285 +
  68.286 +fun get_output_thy thy =
  68.287 +    case #2 (HOL4Dump.get thy) of
  68.288 +	"" => error "No theory file being output"
  68.289 +      | thyname => thyname
  68.290 +
  68.291 +val get_output_dir = #1 o HOL4Dump.get
  68.292 +
  68.293 +fun add_hol4_move bef aft thy =
  68.294 +    let
  68.295 +	val curmoves = HOL4Moves.get thy
  68.296 +	val newmoves = Symtab.update_new((bef,aft),curmoves)
  68.297 +    in
  68.298 +	HOL4Moves.put newmoves thy
  68.299 +    end
  68.300 +
  68.301 +fun get_hol4_move bef thy =
  68.302 +    let
  68.303 +	val moves = HOL4Moves.get thy
  68.304 +    in
  68.305 +	Symtab.lookup(moves,bef)
  68.306 +    end
  68.307 +
  68.308 +fun follow_name thmname thy =
  68.309 +    let
  68.310 +	val moves = HOL4Moves.get thy
  68.311 +	fun F thmname =
  68.312 +	    case Symtab.lookup(moves,thmname) of
  68.313 +		Some name => F name
  68.314 +	      | None => thmname
  68.315 +    in
  68.316 +	F thmname
  68.317 +    end
  68.318 +
  68.319 +fun add_hol4_cmove bef aft thy =
  68.320 +    let
  68.321 +	val curmoves = HOL4CMoves.get thy
  68.322 +	val newmoves = Symtab.update_new((bef,aft),curmoves)
  68.323 +    in
  68.324 +	HOL4CMoves.put newmoves thy
  68.325 +    end
  68.326 +
  68.327 +fun get_hol4_cmove bef thy =
  68.328 +    let
  68.329 +	val moves = HOL4CMoves.get thy
  68.330 +    in
  68.331 +	Symtab.lookup(moves,bef)
  68.332 +    end
  68.333 +
  68.334 +fun follow_cname thmname thy =
  68.335 +    let
  68.336 +	val moves = HOL4CMoves.get thy
  68.337 +	fun F thmname =
  68.338 +	    case Symtab.lookup(moves,thmname) of
  68.339 +		Some name => F name
  68.340 +	      | None => thmname
  68.341 +    in
  68.342 +	F thmname
  68.343 +    end
  68.344 +
  68.345 +fun add_hol4_mapping bthy bthm isathm thy =
  68.346 +    let
  68.347 +	val isathm = follow_name isathm thy
  68.348 +	val _ = message ("Adding theorem map: " ^ bthy ^ "." ^ bthm ^ " --> " ^ isathm)
  68.349 +	val curmaps = HOL4Maps.get thy
  68.350 +	val newmaps = StringPair.update_new(((bthy,bthm),Some isathm),curmaps)
  68.351 +	val upd_thy = HOL4Maps.put newmaps thy
  68.352 +    in
  68.353 +	upd_thy
  68.354 +    end;
  68.355 +
  68.356 +fun get_hol4_type_mapping bthy tycon thy =
  68.357 +    let
  68.358 +	val maps = HOL4TypeMaps.get thy
  68.359 +    in
  68.360 +	StringPair.lookup(maps,(bthy,tycon))
  68.361 +    end
  68.362 +
  68.363 +fun get_hol4_mapping bthy bthm thy =
  68.364 +    let
  68.365 +	val curmaps = HOL4Maps.get thy
  68.366 +    in
  68.367 +	StringPair.lookup(curmaps,(bthy,bthm))
  68.368 +    end;
  68.369 +
  68.370 +fun add_hol4_const_mapping bthy bconst internal isaconst thy =
  68.371 +    let
  68.372 +	val thy = case opt_get_output_thy thy of
  68.373 +		      "" => thy
  68.374 +		    | output_thy => if internal
  68.375 +				    then add_hol4_cmove (Sign.full_name (sign_of thy) bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
  68.376 +				    else thy
  68.377 +	val _ = message ("Adding cmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
  68.378 +	val curmaps = HOL4ConstMaps.get thy
  68.379 +	val newmaps = StringPair.update_new(((bthy,bconst),(internal,isaconst,None)),curmaps)
  68.380 +	val upd_thy = HOL4ConstMaps.put newmaps thy
  68.381 +    in
  68.382 +	upd_thy
  68.383 +    end;
  68.384 +
  68.385 +fun add_hol4_const_renaming bthy bconst newname thy =
  68.386 +    let
  68.387 +	val currens = HOL4Rename.get thy
  68.388 +	val _ = message ("Adding renaming " ^ bthy ^ "." ^ bconst ^ " -> " ^ newname)
  68.389 +	val newrens = StringPair.update_new(((bthy,bconst),newname),currens)
  68.390 +	val upd_thy = HOL4Rename.put newrens thy
  68.391 +    in
  68.392 +	upd_thy
  68.393 +    end;
  68.394 +
  68.395 +fun get_hol4_const_renaming bthy bconst thy =
  68.396 +    let
  68.397 +	val currens = HOL4Rename.get thy
  68.398 +    in
  68.399 +	StringPair.lookup(currens,(bthy,bconst))
  68.400 +    end;
  68.401 +
  68.402 +fun get_hol4_const_mapping bthy bconst thy =
  68.403 +    let
  68.404 +	val bconst = case get_hol4_const_renaming bthy bconst thy of
  68.405 +			 Some name => name
  68.406 +		       | None => bconst
  68.407 +	val maps = HOL4ConstMaps.get thy
  68.408 +    in
  68.409 +	StringPair.lookup(maps,(bthy,bconst))
  68.410 +    end
  68.411 +
  68.412 +fun add_hol4_const_wt_mapping bthy bconst internal isaconst typ thy =
  68.413 +    let
  68.414 +	val thy = case opt_get_output_thy thy of
  68.415 +		      "" => thy
  68.416 +		    | output_thy => if internal
  68.417 +				    then add_hol4_cmove (Sign.full_name (sign_of thy) bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
  68.418 +				    else thy
  68.419 +	val _ = message ("Adding cmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
  68.420 +	val curmaps = HOL4ConstMaps.get thy
  68.421 +	val newmaps = StringPair.update_new(((bthy,bconst),(internal,isaconst,Some typ)),curmaps)
  68.422 +	val upd_thy = HOL4ConstMaps.put newmaps thy
  68.423 +    in
  68.424 +	upd_thy
  68.425 +    end;
  68.426 +
  68.427 +fun add_hol4_type_mapping bthy bconst internal isaconst thy =
  68.428 +    let
  68.429 +	val curmaps = HOL4TypeMaps.get thy
  68.430 +	val _ = message ("Adding tmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
  68.431 +	val newmaps = StringPair.update_new(((bthy,bconst),(internal,isaconst)),curmaps)
  68.432 +	val upd_thy = HOL4TypeMaps.put newmaps thy
  68.433 +    in
  68.434 +	upd_thy
  68.435 +    end;
  68.436 +
  68.437 +fun add_hol4_pending bthy bthm hth thy =
  68.438 +    let
  68.439 +	val thmname = Sign.full_name (sign_of thy) bthm
  68.440 +	val _ = message ("Add pending " ^ bthy ^ "." ^ bthm)
  68.441 +	val curpend = HOL4Pending.get thy
  68.442 +	val newpend = StringPair.update_new(((bthy,bthm),hth),curpend)
  68.443 +	val upd_thy = HOL4Pending.put newpend thy
  68.444 +	val thy' = case opt_get_output_thy upd_thy of
  68.445 +		       "" => add_hol4_mapping bthy bthm thmname upd_thy
  68.446 +		     | output_thy =>
  68.447 +		       let
  68.448 +			   val new_thmname = output_thy ^ "." ^ bthy ^ "." ^ bthm
  68.449 +		       in
  68.450 +			   upd_thy |> add_hol4_move thmname new_thmname
  68.451 +				   |> add_hol4_mapping bthy bthm new_thmname
  68.452 +		       end
  68.453 +    in
  68.454 +	thy'
  68.455 +    end;
  68.456 +
  68.457 +fun get_hol4_theorem thyname thmname thy =
  68.458 +    let
  68.459 +	val isathms = HOL4Thms.get thy
  68.460 +    in
  68.461 +	StringPair.lookup (isathms,(thyname,thmname))
  68.462 +    end
  68.463 +
  68.464 +fun add_hol4_theorem thyname thmname hth thy =
  68.465 +    let
  68.466 +	val _ = message ("Adding HOL4 theorem " ^ thyname ^ "." ^ thmname)
  68.467 +	val isathms = HOL4Thms.get thy
  68.468 +	val isathms' = StringPair.update_new (((thyname,thmname),hth),isathms)
  68.469 +	val thy' = HOL4Thms.put isathms' thy
  68.470 +    in
  68.471 +	thy'
  68.472 +    end
  68.473 +
  68.474 +fun export_hol4_pending thy =
  68.475 +    let
  68.476 +	val rews    = HOL4Rewrites.get thy
  68.477 +	val outthy  = get_output_thy thy
  68.478 +	fun process (thy,((bthy,bthm),hth as (_,thm))) =
  68.479 +	    let
  68.480 +		val sg      = sign_of thy
  68.481 +		val thm1 = rewrite_rule (map (transfer_sg sg) rews) (transfer_sg sg thm)
  68.482 +		val thm2 = standard thm1
  68.483 +		val (thy2,_) = PureThy.store_thm((bthm,thm2),[]) thy
  68.484 +		val thy5 = add_hol4_theorem bthy bthm hth thy2
  68.485 +	    in
  68.486 +		thy5
  68.487 +	    end
  68.488 +
  68.489 +	val pending = HOL4Pending.get thy
  68.490 +	val thy1    = StringPair.foldl process (thy,pending)
  68.491 +	val thy2    = HOL4Pending.put (StringPair.empty) thy1
  68.492 +    in
  68.493 +	thy2
  68.494 +    end;
  68.495 +
  68.496 +fun setup_dump (dir,thyname) thy =
  68.497 +    HOL4Dump.put (dir,thyname,[]) thy
  68.498 +
  68.499 +fun add_dump str thy =
  68.500 +    let
  68.501 +	val (dir,thyname,curdump) = HOL4Dump.get thy
  68.502 +    in
  68.503 +	HOL4Dump.put (dir,thyname,str::curdump) thy
  68.504 +    end
  68.505 +
  68.506 +fun flush_dump thy =
  68.507 +    let
  68.508 +	val (dir,thyname,dumpdata) = HOL4Dump.get thy
  68.509 +	val os = TextIO.openOut (OS.Path.joinDirFile {dir=dir,
  68.510 +						      file=thyname ^ ".thy"})
  68.511 +	val _  = app (fn s => TextIO.output(os,s ^ "\n\n")) (rev dumpdata)
  68.512 +	val  _ = TextIO.closeOut os
  68.513 +    in
  68.514 +	HOL4Dump.put ("","",[]) thy
  68.515 +    end
  68.516 +
  68.517 +fun set_generating_thy thyname thy =
  68.518 +    case HOL4DefThy.get thy of
  68.519 +	NoImport => HOL4DefThy.put (Generating thyname) thy
  68.520 +      | _ => error "Import already in progess"
  68.521 +
  68.522 +fun set_replaying_thy thyname thy =
  68.523 +    case HOL4DefThy.get thy of
  68.524 +	NoImport => HOL4DefThy.put (Replaying thyname) thy
  68.525 +      | _ => error "Import already in progess"
  68.526 +
  68.527 +fun clear_import_thy thy =
  68.528 +    case HOL4DefThy.get thy of
  68.529 +	NoImport => error "No import in progress"
  68.530 +      | _ => HOL4DefThy.put NoImport thy
  68.531 +
  68.532 +fun get_generating_thy thy =
  68.533 +    case HOL4DefThy.get thy of
  68.534 +	Generating thyname => thyname
  68.535 +      | _ => error "No theory being generated"
  68.536 +
  68.537 +fun get_replaying_thy thy =
  68.538 +    case HOL4DefThy.get thy of
  68.539 +	Replaying thyname => thyname
  68.540 +      | _ => error "No theory being replayed"
  68.541 +
  68.542 +fun get_import_thy thy =
  68.543 +    case HOL4DefThy.get thy of
  68.544 +	Replaying thyname => thyname
  68.545 +      | Generating thyname => thyname
  68.546 +      | _ => error "No theory being imported"
  68.547 +
  68.548 +fun should_ignore thyname thy thmname =
  68.549 +    case get_hol4_mapping thyname thmname thy of
  68.550 +	Some None => true 
  68.551 +      | _ => false
  68.552 +
  68.553 +val trans_string =
  68.554 +    let
  68.555 +	fun quote s = "\"" ^ s ^ "\""
  68.556 +	fun F [] = []
  68.557 +	  | F (#"\\" :: cs) = patch #"\\" cs
  68.558 +	  | F (#"\"" :: cs) = patch #"\"" cs
  68.559 +	  | F (c     :: cs) = c :: F cs
  68.560 +	and patch c rest = #"\\" :: c :: F rest
  68.561 +    in
  68.562 +	quote o String.implode o F o String.explode
  68.563 +    end
  68.564 +
  68.565 +fun dump_import_thy thyname thy =
  68.566 +    let
  68.567 +	val output_dir = get_output_dir thy
  68.568 +	val output_thy = get_output_thy thy
  68.569 +	val import_segment = get_import_segment thy
  68.570 +	val sg = sign_of thy
  68.571 +	val os = TextIO.openOut (OS.Path.joinDirFile {dir=output_dir,
  68.572 +						      file=thyname ^ ".imp"})
  68.573 +	fun out s = TextIO.output(os,s)
  68.574 +	val (ignored,mapped) =
  68.575 +	    StringPair.foldl (fn ((ign,map),((bthy,bthm),v)) =>
  68.576 +				 if bthy = thyname
  68.577 +				 then (case v of
  68.578 +					   None => (bthm::ign,map)
  68.579 +					 | Some w => (ign,(bthm,w)::map))
  68.580 +				 else (ign,map))
  68.581 +				 (([],[]),HOL4Maps.get thy)
  68.582 +	val constmaps =
  68.583 +	    StringPair.foldl (fn (map,((bthy,bthm),v)) =>
  68.584 +				 if bthy = thyname
  68.585 +				 then (bthm,v)::map
  68.586 +				 else map)
  68.587 +				 ([],HOL4ConstMaps.get thy)
  68.588 +
  68.589 +	val constrenames =
  68.590 +	    StringPair.foldl (fn (map,((bthy,bthm),v)) =>
  68.591 +				 if bthy = thyname
  68.592 +				 then (bthm,v)::map
  68.593 +				 else map)
  68.594 +				 ([],HOL4Rename.get thy)
  68.595 +
  68.596 +	val typemaps =
  68.597 +	    StringPair.foldl (fn (map,((bthy,bthm),v)) =>
  68.598 +				 if bthy = thyname
  68.599 +				 then (bthm,v)::map
  68.600 +				 else map)
  68.601 +				 ([],HOL4TypeMaps.get thy)
  68.602 +
  68.603 +	val defmaps =
  68.604 +	    StringPair.foldl (fn (map,((bthy,bthm),v)) =>
  68.605 +				 if bthy = thyname
  68.606 +				 then (bthm,v)::map
  68.607 +				 else map)
  68.608 +				 ([],HOL4DefMaps.get thy)
  68.609 +
  68.610 +	fun new_name internal isa =
  68.611 +	    if internal
  68.612 +	    then
  68.613 +		let
  68.614 +		    val paths = NameSpace.unpack isa
  68.615 +		    val i = drop(length paths - 2,paths)
  68.616 +		in
  68.617 +		    case i of
  68.618 +			[seg,con] => output_thy ^ "." ^ seg ^ "." ^ con
  68.619 +		      | _ => error "hol4rews.dump internal error"
  68.620 +		end
  68.621 +	    else
  68.622 +		isa
  68.623 +
  68.624 +	val _ = out "import\n\n"
  68.625 +
  68.626 +	val _ = out ("import_segment " ^ trans_string import_segment ^ "\n\n")
  68.627 +	val _ = if null defmaps
  68.628 +		then ()
  68.629 +		else out "def_maps"
  68.630 +	val _ = app (fn (hol,isa) =>
  68.631 +			out ("\n  " ^ (trans_string hol) ^ " > " ^ (trans_string isa))) defmaps
  68.632 +	val _ = if null defmaps
  68.633 +		then ()
  68.634 +		else out "\n\n"
  68.635 +
  68.636 +	val _ = if null typemaps
  68.637 +		then ()
  68.638 +		else out "type_maps"
  68.639 +	val _ = app (fn (hol,(internal,isa)) =>
  68.640 +			out ("\n  " ^ (trans_string hol) ^ " > " ^ (trans_string (new_name internal isa)))) typemaps
  68.641 +	val _ = if null typemaps
  68.642 +		then ()
  68.643 +		else out "\n\n"
  68.644 +
  68.645 +	val _ = if null constmaps
  68.646 +		then ()
  68.647 +		else out "const_maps"
  68.648 +	val _ = app (fn (hol,(internal,isa,opt_ty)) =>
  68.649 +			(out ("\n  " ^ (trans_string hol) ^ " > " ^ (trans_string (follow_cname isa thy)));
  68.650 +			 case opt_ty of
  68.651 +			     Some ty => out (" :: \"" ^ (string_of_ctyp (ctyp_of sg ty)) ^ "\"")
  68.652 +			   | None => ())) constmaps
  68.653 +	val _ = if null constmaps
  68.654 +		then ()
  68.655 +		else out "\n\n"
  68.656 +
  68.657 +	val _ = if null constrenames
  68.658 +		then ()
  68.659 +		else out "const_renames"
  68.660 +	val _ = app (fn (old,new) =>
  68.661 +			out ("\n  " ^ (trans_string old) ^ " > " ^ (trans_string new))) constrenames
  68.662 +	val _ = if null constrenames
  68.663 +		then ()
  68.664 +		else out "\n\n"
  68.665 +
  68.666 +	val _ = if null mapped
  68.667 +		then ()
  68.668 +		else out "thm_maps"
  68.669 +	val _ = app (fn (hol,isa) => out ("\n  " ^ (trans_string hol) ^ " > " ^ (trans_string isa))) mapped
  68.670 +	val _ = if null mapped 
  68.671 +		then ()
  68.672 +		else out "\n\n"
  68.673 +
  68.674 +	val _ = if null ignored
  68.675 +		then ()
  68.676 +		else out "ignore_thms"
  68.677 +	val _ = app (fn ign => out ("\n  " ^ (trans_string ign))) ignored
  68.678 +	val _ = if null ignored
  68.679 +		then ()
  68.680 +		else out "\n\n"
  68.681 +
  68.682 +	val _ = out "end\n"
  68.683 +	val _ = TextIO.closeOut os
  68.684 +    in
  68.685 +	thy
  68.686 +    end
  68.687 +
  68.688 +fun set_used_names names thy =
  68.689 +    let
  68.690 +	val unames = HOL4UNames.get thy
  68.691 +    in
  68.692 +	case unames of
  68.693 +	    [] => HOL4UNames.put names thy
  68.694 +	  | _ => error "hol4rews.set_used_names called on initialized data!"
  68.695 +    end
  68.696 +
  68.697 +val clear_used_names = HOL4UNames.put HOL4UNamesArgs.empty
  68.698 +
  68.699 +fun get_defmap thyname const thy =
  68.700 +    let
  68.701 +	val maps = HOL4DefMaps.get thy
  68.702 +    in
  68.703 +	StringPair.lookup(maps,(thyname,const))
  68.704 +    end
  68.705 +
  68.706 +fun add_defmap thyname const defname thy =
  68.707 +    let
  68.708 +	val _ = message ("Adding defmap " ^ thyname ^ "." ^ const ^ " --> " ^ defname)
  68.709 +	val maps = HOL4DefMaps.get thy
  68.710 +	val maps' = StringPair.update_new(((thyname,const),defname),maps)
  68.711 +	val thy' = HOL4DefMaps.put maps' thy
  68.712 +    in
  68.713 +	thy'
  68.714 +    end
  68.715 +
  68.716 +fun get_defname thyname name thy =
  68.717 +    let
  68.718 +	val maps = HOL4DefMaps.get thy
  68.719 +	fun F dname = (dname,add_defmap thyname name dname thy)
  68.720 +    in
  68.721 +	case StringPair.lookup(maps,(thyname,name)) of
  68.722 +	    Some thmname => (thmname,thy)
  68.723 +	  | None =>
  68.724 +	    let
  68.725 +		val used = HOL4UNames.get thy
  68.726 +		val defname = def_name name
  68.727 +		val pdefname = name ^ "_primdef"
  68.728 +	    in
  68.729 +		if not (defname mem used)
  68.730 +		then F defname                 (* name_def *)
  68.731 +		else if not (pdefname mem used)
  68.732 +		then F pdefname                (* name_primdef *)
  68.733 +		else F (variant used pdefname) (* last resort *)
  68.734 +	    end
  68.735 +    end
  68.736 +
  68.737 +local
  68.738 +    fun handle_meta [x as Appl[Appl[Constant "_constrain", Constant "==", _],_,_]] = x
  68.739 +      | handle_meta [x as Appl[Appl[Constant "_constrain", Constant "all", _],_]] = x
  68.740 +      | handle_meta [x as Appl[Appl[Constant "_constrain", Constant "==>", _],_,_]] = x
  68.741 +      | handle_meta [x] = Appl[Constant "Trueprop",x]
  68.742 +in
  68.743 +val smarter_trueprop_parsing = [("Trueprop",handle_meta)]
  68.744 +end
  68.745 +
  68.746 +local
  68.747 +    fun initial_maps thy =
  68.748 +	thy |> add_hol4_type_mapping "min" "bool" false "bool"
  68.749 +	    |> add_hol4_type_mapping "min" "fun" false "fun"
  68.750 +	    |> add_hol4_type_mapping "min" "ind" false "Nat.ind"
  68.751 +	    |> add_hol4_const_mapping "min" "=" false "op ="
  68.752 +	    |> add_hol4_const_mapping "min" "==>" false "op -->"
  68.753 +	    |> add_hol4_const_mapping "min" "@" false "Hilbert_Choice.Eps"
  68.754 +in
  68.755 +val hol4_setup =
  68.756 +    [HOL4Rewrites.init,
  68.757 +     HOL4Maps.init,
  68.758 +     HOL4UNames.init,
  68.759 +     HOL4DefMaps.init,
  68.760 +     HOL4Moves.init,
  68.761 +     HOL4CMoves.init,
  68.762 +     HOL4ConstMaps.init,
  68.763 +     HOL4Rename.init,
  68.764 +     HOL4TypeMaps.init,
  68.765 +     HOL4Pending.init,
  68.766 +     HOL4Thms.init,
  68.767 +     HOL4Dump.init,
  68.768 +     HOL4DefThy.init,
  68.769 +     HOL4Imports.init,
  68.770 +     ImportSegment.init,
  68.771 +     initial_maps,
  68.772 +     Attrib.add_attributes [("hol4rew",
  68.773 +			     (Attrib.no_args add_hol4_rewrite,
  68.774 +			      Attrib.no_args Attrib.undef_local_attribute),
  68.775 +			     "HOL4 rewrite rule")]]
  68.776 +end
    69.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2 +++ b/src/HOL/Import/import_package.ML	Fri Apr 02 17:37:45 2004 +0200
    69.3 @@ -0,0 +1,61 @@
    69.4 +signature IMPORT_PACKAGE =
    69.5 +sig
    69.6 +    val import_meth: Args.src -> Proof.context -> Proof.method
    69.7 +    val setup      : (theory -> theory) list
    69.8 +    val debug      : bool ref
    69.9 +end
   69.10 +
   69.11 +structure ImportPackage :> IMPORT_PACKAGE =
   69.12 +struct
   69.13 +
   69.14 +val debug = ref false
   69.15 +fun message s = if !debug then writeln s else ()
   69.16 +
   69.17 +val string_of_thm = Library.setmp print_mode [] string_of_thm
   69.18 +val string_of_cterm = Library.setmp print_mode [] string_of_cterm
   69.19 +
   69.20 +fun import_tac (thyname,thmname) =
   69.21 +    if !SkipProof.quick_and_dirty
   69.22 +    then SkipProof.cheat_tac
   69.23 +    else
   69.24 +     fn thy =>
   69.25 +     fn th =>
   69.26 +	let
   69.27 +	    val sg = sign_of_thm th
   69.28 +	    val prem = hd (prems_of th)
   69.29 +	    val _ = message ("Import trying to prove " ^ (string_of_cterm (cterm_of sg prem)))
   69.30 +	    val int_thms = fst (Replay.setup_int_thms thyname thy)
   69.31 +	    val proof = snd (ProofKernel.import_proof thyname thmname thy) thy
   69.32 +	    val hol4thm = snd (Replay.replay_proof int_thms thyname thmname proof thy)
   69.33 +	    val thm = snd (ProofKernel.to_isa_thm hol4thm)
   69.34 +	    val rew = ProofKernel.rewrite_hol4_term (concl_of thm) thy
   69.35 +	    val thm = equal_elim rew thm
   69.36 +	    val prew = ProofKernel.rewrite_hol4_term prem thy
   69.37 +	    val prem' = #2 (Logic.dest_equals (prop_of prew))
   69.38 +	    val _ = message ("Import proved " ^ (string_of_thm thm))  
   69.39 +	in
   69.40 +	    case Shuffler.set_prop thy prem' [("",thm)] of
   69.41 +		Some (_,thm) =>
   69.42 +		let
   69.43 +		    val _ = if prem' aconv (prop_of thm)
   69.44 +			    then message "import: Terms match up"
   69.45 +			    else message "import: Terms DO NOT match up"
   69.46 +		    val thm' = equal_elim (symmetric prew) thm
   69.47 +		    val res = bicompose true (false,thm',0) 1 th
   69.48 +		in
   69.49 +		    res
   69.50 +		end
   69.51 +	      | None => (message "import: set_prop didn't succeed"; no_tac th)
   69.52 +	end
   69.53 +	
   69.54 +val import_meth = Method.simple_args (Args.name -- Args.name)
   69.55 +		  (fn arg =>
   69.56 +		   fn ctxt =>
   69.57 +		      let
   69.58 +			  val thy = ProofContext.theory_of ctxt
   69.59 +		      in
   69.60 +			  Method.SIMPLE_METHOD (import_tac arg thy)
   69.61 +		      end)
   69.62 +
   69.63 +val setup = [Method.add_method("import",import_meth,"Import HOL4 theorem")]
   69.64 +end
    70.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2 +++ b/src/HOL/Import/import_syntax.ML	Fri Apr 02 17:37:45 2004 +0200
    70.3 @@ -0,0 +1,227 @@
    70.4 +signature HOL4_IMPORT_SYNTAX =
    70.5 +sig
    70.6 +    type token = OuterSyntax.token
    70.7 +
    70.8 +    val import_segment: token list -> (theory -> theory) * token list
    70.9 +    val import_theory : token list -> (theory -> theory) * token list
   70.10 +    val end_import    : token list -> (theory -> theory) * token list
   70.11 +
   70.12 +    val setup_theory  : token list -> (theory -> theory) * token list
   70.13 +    val end_setup     : token list -> (theory -> theory) * token list
   70.14 +
   70.15 +    val thm_maps      : token list -> (theory -> theory) * token list
   70.16 +    val ignore_thms   : token list -> (theory -> theory) * token list
   70.17 +    val type_maps     : token list -> (theory -> theory) * token list
   70.18 +    val def_maps      : token list -> (theory -> theory) * token list
   70.19 +    val const_maps    : token list -> (theory -> theory) * token list
   70.20 +    val const_moves   : token list -> (theory -> theory) * token list
   70.21 +    val const_renames : token list -> (theory -> theory) * token list
   70.22 +
   70.23 +    val setup        : unit -> unit
   70.24 +end
   70.25 +
   70.26 +structure HOL4ImportSyntax :> HOL4_IMPORT_SYNTAX =
   70.27 +struct
   70.28 +
   70.29 +type token = OuterSyntax.token
   70.30 +
   70.31 +local structure P = OuterParse and K = OuterSyntax.Keyword in
   70.32 +
   70.33 +(* Parsers *)
   70.34 +
   70.35 +val import_segment = P.name >> set_import_segment
   70.36 +
   70.37 +val import_theory = P.name >> (fn thyname =>
   70.38 +			       fn thy =>
   70.39 +				  thy |> set_generating_thy thyname
   70.40 +				      |> Theory.add_path thyname
   70.41 +				      |> add_dump (";setup_theory " ^ thyname))
   70.42 +
   70.43 +val end_import = Scan.succeed
   70.44 +		     (fn thy =>
   70.45 +			 let
   70.46 +			     val thyname = get_generating_thy thy
   70.47 +			     val segname = get_import_segment thy
   70.48 +			     val (int_thms,facts) = Replay.setup_int_thms thyname thy
   70.49 +			     val thmnames = filter (not o should_ignore thyname thy) facts
   70.50 +			 in
   70.51 +			     thy |> clear_import_thy
   70.52 +				 |> set_segment thyname segname
   70.53 +				 |> set_used_names facts
   70.54 +				 |> Replay.import_thms thyname int_thms thmnames
   70.55 +				 |> clear_used_names
   70.56 +				 |> export_hol4_pending
   70.57 +				 |> Theory.parent_path
   70.58 +				 |> dump_import_thy thyname
   70.59 +				 |> add_dump ";end_setup"
   70.60 +			 end)
   70.61 +
   70.62 +val ignore_thms = Scan.repeat1 P.name
   70.63 +			       >> (fn ignored =>
   70.64 +				   fn thy =>
   70.65 +				      let
   70.66 +					  val thyname = get_import_thy thy
   70.67 +				      in
   70.68 +					  foldl (fn (thy,thmname) => ignore_hol4 thyname thmname thy) (thy,ignored)
   70.69 +				      end)
   70.70 +
   70.71 +val thm_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
   70.72 +			    >> (fn thmmaps =>
   70.73 +				fn thy =>
   70.74 +				   let
   70.75 +				       val thyname = get_import_thy thy
   70.76 +				   in
   70.77 +				       foldl (fn (thy,(hol,isa)) => add_hol4_mapping thyname hol isa thy) (thy,thmmaps)
   70.78 +				   end)
   70.79 +
   70.80 +val type_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
   70.81 +			     >> (fn typmaps =>
   70.82 +				 fn thy =>
   70.83 +				    let
   70.84 +					val thyname = get_import_thy thy
   70.85 +				    in
   70.86 +					foldl (fn (thy,(hol,isa)) => add_hol4_type_mapping thyname hol false isa thy) (thy,typmaps)
   70.87 +				    end)
   70.88 +
   70.89 +val def_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
   70.90 +			    >> (fn defmaps =>
   70.91 +				fn thy =>
   70.92 +				   let
   70.93 +				       val thyname = get_import_thy thy
   70.94 +				   in
   70.95 +				       foldl (fn (thy,(hol,isa)) => add_defmap thyname hol isa thy) (thy,defmaps)
   70.96 +				   end)
   70.97 +
   70.98 +val const_renames = Scan.repeat1 (P.name --| P.$$$ ">" -- P.name)
   70.99 +				 >> (fn renames =>
  70.100 +				     fn thy =>
  70.101 +					let
  70.102 +					    val thyname = get_import_thy thy
  70.103 +					in
  70.104 +					    foldl (fn (thy,(hol,isa)) => add_hol4_const_renaming thyname hol isa thy) (thy,renames)
  70.105 +					end)
  70.106 +																      
  70.107 +val const_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname -- Scan.option (P.$$$ "::" |-- P.typ))
  70.108 +			      >> (fn constmaps =>
  70.109 +				  fn thy =>
  70.110 +				     let
  70.111 +					 val thyname = get_import_thy thy
  70.112 +				     in
  70.113 +					 foldl (fn (thy,((hol,isa),None)) => add_hol4_const_mapping thyname hol false isa thy
  70.114 +						 | (thy,((hol,isa),Some ty)) => add_hol4_const_wt_mapping thyname hol false isa (typ_of (read_ctyp (sign_of thy) ty)) thy) (thy,constmaps)
  70.115 +				     end)
  70.116 +
  70.117 +val const_moves = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname -- Scan.option (P.$$$ "::" |-- P.typ))
  70.118 +			       >> (fn constmaps =>
  70.119 +				   fn thy =>
  70.120 +				      let
  70.121 +					  val thyname = get_import_thy thy
  70.122 +				      in
  70.123 +					  foldl (fn (thy,((hol,isa),None)) => add_hol4_const_mapping thyname hol true isa thy
  70.124 +						  | (thy,((hol,isa),Some ty)) => add_hol4_const_wt_mapping thyname hol true isa (typ_of (read_ctyp (sign_of thy) ty)) thy) (thy,constmaps)
  70.125 +				      end)
  70.126 +
  70.127 +fun import_thy s =
  70.128 +    let
  70.129 +	val is = TextIO.openIn(s ^ ".imp")
  70.130 +	val inp = TextIO.inputAll is
  70.131 +	val _ = TextIO.closeIn is
  70.132 +	val orig_source = Source.of_string inp
  70.133 +	val symb_source = Symbol.source false orig_source
  70.134 +	val lexes = ref (OuterLex.make_lexicon ["import_segment","ignore_thms","import","end",">","::","const_maps","const_moves","thm_maps","const_renames","type_maps","def_maps"],
  70.135 +			 Scan.empty_lexicon)
  70.136 +	val get_lexes = fn () => !lexes
  70.137 +	val token_source = OuterLex.source false get_lexes (Position.line 1) symb_source
  70.138 +	val token_list = filter (not o (OuterLex.is_kind OuterLex.Space)) (Source.exhaust token_source)
  70.139 +	val import_segmentP = OuterParse.$$$ "import_segment" |-- import_segment
  70.140 +	val type_mapsP = OuterParse.$$$ "type_maps" |-- type_maps
  70.141 +	val def_mapsP = OuterParse.$$$ "def_maps" |-- def_maps
  70.142 +	val const_mapsP = OuterParse.$$$ "const_maps" |-- const_maps
  70.143 +	val const_movesP = OuterParse.$$$ "const_moves" |-- const_moves
  70.144 +	val const_renamesP = OuterParse.$$$ "const_renames" |-- const_renames
  70.145 +	val ignore_thmsP = OuterParse.$$$ "ignore_thms" |-- ignore_thms
  70.146 +	val thm_mapsP = OuterParse.$$$ "thm_maps" |-- thm_maps
  70.147 +	val parser = type_mapsP || def_mapsP || const_mapsP || const_movesP || const_renamesP || thm_mapsP || ignore_thmsP || import_segmentP
  70.148 +	val importP = OuterParse.$$$ "import" |-- Scan.repeat parser --| OuterParse.$$$ "end"
  70.149 +	fun apply [] thy = thy
  70.150 +	  | apply (f::fs) thy = apply fs (f thy)
  70.151 +    in
  70.152 +	apply (set_replaying_thy s::Theory.add_path s::(fst (importP token_list)))
  70.153 +    end
  70.154 +
  70.155 +val setup_theory = P.name
  70.156 +		       >>
  70.157 +		       (fn thyname =>
  70.158 +			fn thy =>
  70.159 +			   case HOL4DefThy.get thy of
  70.160 +			       NoImport => thy |> import_thy thyname
  70.161 +			     | Generating _ => error "Currently generating a theory!"
  70.162 +			     | Replaying _ => thy |> clear_import_thy |> import_thy thyname)
  70.163 +
  70.164 +val end_setup = Scan.succeed (fn thy =>
  70.165 +				 let
  70.166 +				     val thyname = get_import_thy thy
  70.167 +				     val segname = get_import_segment thy
  70.168 +				 in
  70.169 +				     thy |> set_segment thyname segname
  70.170 +					 |> clear_import_thy
  70.171 +					 |> Theory.parent_path
  70.172 +				 end)
  70.173 +
  70.174 +val set_dump  = P.string -- P.string   >> setup_dump
  70.175 +val fl_dump   = Scan.succeed flush_dump
  70.176 +val append_dump = (P.verbatim || P.string) >> add_dump
  70.177 +
  70.178 +val parsers = 
  70.179 +  [OuterSyntax.command "import_segment"
  70.180 +		       "Set import segment name"
  70.181 +		       K.thy_decl (import_segment >> Toplevel.theory),
  70.182 +   OuterSyntax.command "import_theory"
  70.183 +		       "Set default HOL4 theory name"
  70.184 +		       K.thy_decl (import_theory >> Toplevel.theory),
  70.185 +   OuterSyntax.command "end_import"
  70.186 +		       "End HOL4 import"
  70.187 +		       K.thy_decl (end_import >> Toplevel.theory),
  70.188 +   OuterSyntax.command "setup_theory"
  70.189 +		       "Setup HOL4 theory replaying"
  70.190 +		       K.thy_decl (setup_theory >> Toplevel.theory),
  70.191 +   OuterSyntax.command "end_setup"
  70.192 +		       "End HOL4 setup"
  70.193 +		       K.thy_decl (end_setup >> Toplevel.theory),
  70.194 +   OuterSyntax.command "setup_dump"
  70.195 +		       "Setup the dump file name"
  70.196 +		       K.thy_decl (set_dump >> Toplevel.theory),
  70.197 +   OuterSyntax.command "append_dump"
  70.198 +		       "Add text to dump file"
  70.199 +		       K.thy_decl (append_dump >> Toplevel.theory),
  70.200 +   OuterSyntax.command "flush_dump"
  70.201 +		       "Write the dump to file"
  70.202 +		       K.thy_decl (fl_dump >> Toplevel.theory),
  70.203 +   OuterSyntax.command "ignore_thms"
  70.204 +		       "Theorems to ignore in next HOL4 theory import"
  70.205 +		       K.thy_decl (ignore_thms >> Toplevel.theory),
  70.206 +   OuterSyntax.command "type_maps"
  70.207 +		       "Map HOL4 type names to existing Isabelle/HOL type names"
  70.208 +		       K.thy_decl (type_maps >> Toplevel.theory),
  70.209 +   OuterSyntax.command "def_maps"
  70.210 +		       "Map HOL4 constant names to their primitive definitions"
  70.211 +		       K.thy_decl (def_maps >> Toplevel.theory),
  70.212 +   OuterSyntax.command "thm_maps"
  70.213 +		       "Map HOL4 theorem names to existing Isabelle/HOL theorem names"
  70.214 +		       K.thy_decl (thm_maps >> Toplevel.theory),
  70.215 +   OuterSyntax.command "const_renames"
  70.216 +		       "Rename HOL4 const names"
  70.217 +		       K.thy_decl (const_renames >> Toplevel.theory),
  70.218 +   OuterSyntax.command "const_moves"
  70.219 +		       "Rename HOL4 const names to other HOL4 constants"
  70.220 +		       K.thy_decl (const_moves >> Toplevel.theory),
  70.221 +   OuterSyntax.command "const_maps"
  70.222 +		       "Map HOL4 const names to existing Isabelle/HOL const names"
  70.223 +		       K.thy_decl (const_maps >> Toplevel.theory)]
  70.224 +
  70.225 +fun setup () = (OuterSyntax.add_keywords[">"];
  70.226 +		OuterSyntax.add_parsers parsers)
  70.227 +
  70.228 +end
  70.229 +
  70.230 +end
    71.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2 +++ b/src/HOL/Import/proof_kernel.ML	Fri Apr 02 17:37:45 2004 +0200
    71.3 @@ -0,0 +1,2142 @@
    71.4 +signature ProofKernel =
    71.5 +sig
    71.6 +    type hol_type
    71.7 +    type tag
    71.8 +    type term
    71.9 +    type thm
   71.10 +    type ('a,'b) subst
   71.11 +	 
   71.12 +    type proof_info
   71.13 +    datatype proof = Proof of proof_info * proof_content
   71.14 +	 and proof_content
   71.15 +	   = PRefl of term
   71.16 +	   | PInstT of proof * (hol_type,hol_type) subst
   71.17 +	   | PSubst of proof list * term * proof
   71.18 +	   | PAbs of proof * term
   71.19 +	   | PDisch of proof * term
   71.20 +	   | PMp of proof * proof
   71.21 +	   | PHyp of term
   71.22 +	   | PAxm of string * term
   71.23 +	   | PDef of string * string * term
   71.24 +	   | PTmSpec of string * string list * proof
   71.25 +	   | PTyDef of string * string * proof
   71.26 +	   | PTyIntro of string * string * string * string * term * term * proof
   71.27 +	   | POracle of tag * term list * term
   71.28 +	   | PDisk
   71.29 +	   | PSpec of proof * term
   71.30 +	   | PInst of proof * (term,term) subst
   71.31 +	   | PGen of proof * term
   71.32 +	   | PGenAbs of proof * term option * term list
   71.33 +	   | PImpAS of proof * proof
   71.34 +	   | PSym of proof
   71.35 +	   | PTrans of proof * proof
   71.36 +	   | PComb of proof * proof
   71.37 +	   | PEqMp of proof * proof
   71.38 +	   | PEqImp of proof
   71.39 +	   | PExists of proof * term * term
   71.40 +	   | PChoose of term * proof * proof
   71.41 +	   | PConj of proof * proof
   71.42 +	   | PConjunct1 of proof
   71.43 +	   | PConjunct2 of proof
   71.44 +	   | PDisj1 of proof * term
   71.45 +	   | PDisj2 of proof * term
   71.46 +	   | PDisjCases of proof * proof * proof
   71.47 +	   | PNotI of proof
   71.48 +	   | PNotE of proof
   71.49 +	   | PContr of proof * term
   71.50 +
   71.51 +    exception PK of string * string
   71.52 +
   71.53 +    val get_proof_dir: string -> theory -> string
   71.54 +    val debug : bool ref
   71.55 +    val disk_info_of : proof -> (string * string) option
   71.56 +    val set_disk_info_of : proof -> string -> string -> unit
   71.57 +    val mk_proof : proof_content -> proof
   71.58 +    val content_of : proof -> proof_content
   71.59 +    val import_proof : string -> string -> theory -> (theory -> term) option * (theory -> proof)
   71.60 +
   71.61 +    val rewrite_hol4_term: Term.term -> theory -> Thm.thm
   71.62 +
   71.63 +    val type_of : term -> hol_type
   71.64 +
   71.65 +    val get_thm  : string -> string         -> theory -> (theory * thm option)
   71.66 +    val get_def  : string -> string -> term -> theory -> (theory * thm option)
   71.67 +    val get_axiom: string -> string         -> theory -> (theory * thm option)
   71.68 +
   71.69 +    val store_thm : string -> string -> thm -> theory -> theory * thm
   71.70 +
   71.71 +    val to_isa_thm : thm -> (term * term) list * Thm.thm
   71.72 +    val to_isa_term: term -> Term.term
   71.73 +
   71.74 +    val REFL : term -> theory -> theory * thm
   71.75 +    val ASSUME : term -> theory -> theory * thm
   71.76 +    val INST_TYPE : (hol_type,hol_type) subst -> thm -> theory -> theory * thm
   71.77 +    val INST : (term,term)subst -> thm -> theory -> theory * thm
   71.78 +    val EQ_MP : thm -> thm -> theory -> theory * thm
   71.79 +    val EQ_IMP_RULE : thm -> theory -> theory * thm
   71.80 +    val SUBST : thm list -> term -> thm -> theory -> theory * thm
   71.81 +    val DISJ_CASES : thm -> thm -> thm -> theory -> theory * thm
   71.82 +    val DISJ1: thm -> term -> theory -> theory * thm
   71.83 +    val DISJ2: term -> thm -> theory -> theory * thm
   71.84 +    val IMP_ANTISYM: thm -> thm -> theory -> theory * thm
   71.85 +    val SYM : thm -> theory -> theory * thm
   71.86 +    val MP : thm -> thm -> theory -> theory * thm
   71.87 +    val GEN : term -> thm -> theory -> theory * thm
   71.88 +    val CHOOSE : term -> thm -> thm -> theory -> theory * thm
   71.89 +    val EXISTS : term -> term -> thm -> theory -> theory * thm
   71.90 +    val ABS : term -> thm -> theory -> theory * thm
   71.91 +    val GEN_ABS : term option -> term list -> thm -> theory -> theory * thm
   71.92 +    val TRANS : thm -> thm -> theory -> theory * thm
   71.93 +    val CCONTR : term -> thm -> theory -> theory * thm
   71.94 +    val CONJ : thm -> thm -> theory -> theory * thm
   71.95 +    val CONJUNCT1: thm -> theory -> theory * thm
   71.96 +    val CONJUNCT2: thm -> theory -> theory * thm
   71.97 +    val NOT_INTRO: thm -> theory -> theory * thm
   71.98 +    val NOT_ELIM : thm -> theory -> theory * thm
   71.99 +    val SPEC : term -> thm -> theory -> theory * thm
  71.100 +    val COMB : thm -> thm -> theory -> theory * thm
  71.101 +    val DISCH: term -> thm -> theory -> theory * thm
  71.102 +
  71.103 +    val type_introduction: string -> string -> string -> string -> string -> term * term -> thm -> theory -> theory * thm
  71.104 +
  71.105 +    val new_definition : string -> string -> term -> theory -> theory * thm
  71.106 +    val new_specification : string -> string -> string list -> thm -> theory -> theory * thm
  71.107 +    val new_type_definition : string -> string -> string -> thm -> theory -> theory * thm
  71.108 +    val new_axiom : string -> term -> theory -> theory * thm
  71.109 +
  71.110 +end
  71.111 +
  71.112 +structure ProofKernel :> ProofKernel =
  71.113 +struct
  71.114 +type hol_type = Term.typ
  71.115 +type term = Term.term
  71.116 +datatype tag = Tag of string list
  71.117 +type ('a,'b) subst = ('a * 'b) list
  71.118 +datatype thm = HOLThm of (Term.term * Term.term) list * Thm.thm
  71.119 +
  71.120 +datatype proof_info
  71.121 +  = Info of {disk_info: (string * string) option ref}
  71.122 +	    
  71.123 +datatype proof = Proof of proof_info * proof_content
  71.124 +     and proof_content
  71.125 +       = PRefl of term
  71.126 +       | PInstT of proof * (hol_type,hol_type) subst
  71.127 +       | PSubst of proof list * term * proof
  71.128 +       | PAbs of proof * term
  71.129 +       | PDisch of proof * term
  71.130 +       | PMp of proof * proof
  71.131 +       | PHyp of term
  71.132 +       | PAxm of string * term
  71.133 +       | PDef of string * string * term
  71.134 +       | PTmSpec of string * string list * proof
  71.135 +       | PTyDef of string * string * proof
  71.136 +       | PTyIntro of string * string * string * string * term * term * proof
  71.137 +       | POracle of tag * term list * term
  71.138 +       | PDisk
  71.139 +       | PSpec of proof * term
  71.140 +       | PInst of proof * (term,term) subst
  71.141 +       | PGen of proof * term
  71.142 +       | PGenAbs of proof * term option * term list
  71.143 +       | PImpAS of proof * proof
  71.144 +       | PSym of proof
  71.145 +       | PTrans of proof * proof
  71.146 +       | PComb of proof * proof
  71.147 +       | PEqMp of proof * proof
  71.148 +       | PEqImp of proof
  71.149 +       | PExists of proof * term * term
  71.150 +       | PChoose of term * proof * proof
  71.151 +       | PConj of proof * proof
  71.152 +       | PConjunct1 of proof
  71.153 +       | PConjunct2 of proof
  71.154 +       | PDisj1 of proof * term
  71.155 +       | PDisj2 of proof * term
  71.156 +       | PDisjCases of proof * proof * proof
  71.157 +       | PNotI of proof
  71.158 +       | PNotE of proof
  71.159 +       | PContr of proof * term
  71.160 +
  71.161 +exception PK of string * string
  71.162 +fun ERR f mesg = PK (f,mesg)
  71.163 +
  71.164 +fun print_exn e = 
  71.165 +    case e of
  71.166 +	PK (m,s) => (writeln ("PK (" ^ m ^ "): " ^ s); raise e)
  71.167 +      | _ => Goals.print_exn e
  71.168 +
  71.169 +(* Compatibility. *)
  71.170 +
  71.171 +fun quote s = "\"" ^ s ^ "\""
  71.172 +
  71.173 +fun alphanum str = case String.explode str of
  71.174 +		       first::rest => Char.isAlpha first andalso forall (fn c => Char.isAlphaNum c orelse c = #"_") rest
  71.175 +		     | _ => error "ProofKernel.alphanum: Empty constname??"
  71.176 +
  71.177 +fun mk_syn c = if alphanum c then NoSyn else Syntax.literal c
  71.178 +
  71.179 +val keywords = ["open"]
  71.180 +fun quotename c = if alphanum c andalso not (c mem keywords) then c else quote c
  71.181 +
  71.182 +fun smart_string_of_cterm ct =
  71.183 +    let
  71.184 +	val {sign,t,T,...} = rep_cterm ct
  71.185 +        (* Hack to avoid parse errors with Trueprop *)
  71.186 +	val ct  = (cterm_of sign (HOLogic.dest_Trueprop t)
  71.187 +		   handle TERM _ => ct)
  71.188 +	fun match cu = t aconv (term_of cu)
  71.189 +	fun G 0 = I
  71.190 +	  | G 1 = Library.setmp show_types true
  71.191 +	  | G 2 = Library.setmp show_all_types true
  71.192 +	  | G _ = error ("ProofKernel.smart_string_of_cterm internal error: " ^ (G 2 string_of_cterm ct))
  71.193 +	fun F sh_br n =
  71.194 +	    let
  71.195 +		val str = Library.setmp show_brackets sh_br (G n string_of_cterm) ct
  71.196 +		val cu  = transform_error (read_cterm sign) (str,T)
  71.197 +	    in
  71.198 +		if match cu
  71.199 +		then quote str
  71.200 +		else F false (n+1)
  71.201 +	    end
  71.202 +	    handle ERROR_MESSAGE mesg =>
  71.203 +		   if String.isPrefix "Ambiguous" mesg andalso
  71.204 +		      not sh_br
  71.205 +		   then F true n
  71.206 +		   else F false (n+1)
  71.207 +    in
  71.208 +	transform_error (Library.setmp Syntax.ambiguity_is_error true (F false)) 0
  71.209 +    end
  71.210 +    handle ERROR_MESSAGE mesg =>
  71.211 +	   (writeln "Exception in smart_string_of_cterm!";
  71.212 +	    writeln mesg;
  71.213 +	    quote (string_of_cterm ct))
  71.214 +
  71.215 +val smart_string_of_thm = smart_string_of_cterm o cprop_of
  71.216 +
  71.217 +fun prth th = writeln ((Library.setmp print_mode [] string_of_thm) th)
  71.218 +fun prc ct = writeln ((Library.setmp print_mode [] string_of_cterm) ct)
  71.219 +val prin = Library.setmp print_mode [] prin
  71.220 +fun pth (HOLThm(ren,thm)) =
  71.221 +    let
  71.222 +	val _ = writeln "Renaming:"
  71.223 +	val _ = app (fn(v,w) => (prin v; writeln " -->"; prin w)) ren
  71.224 +	val _ = prth thm
  71.225 +    in
  71.226 +	()
  71.227 +    end
  71.228 +
  71.229 +fun disk_info_of (Proof(Info{disk_info,...},_)) = !disk_info
  71.230 +fun mk_proof p = Proof(Info{disk_info = ref None},p)
  71.231 +fun content_of (Proof(_,p)) = p
  71.232 +
  71.233 +fun set_disk_info_of (Proof(Info{disk_info,...},_)) thyname thmname =
  71.234 +    disk_info := Some(thyname,thmname)
  71.235 +
  71.236 +structure Lib =
  71.237 +struct
  71.238 +fun wrap b e s = String.concat[b,s,e]
  71.239 +
  71.240 +fun assoc x =
  71.241 +    let
  71.242 +	fun F [] = raise PK("Lib.assoc","Not found")
  71.243 +	  | F ((x',y)::rest) = if x = x'
  71.244 +			       then y
  71.245 +			       else F rest
  71.246 +    in
  71.247 +	F
  71.248 +    end
  71.249 +fun i mem L = 
  71.250 +    let fun itr [] = false 
  71.251 +	  | itr (a::rst) = i=a orelse itr rst 
  71.252 +    in itr L end;
  71.253 +    
  71.254 +fun insert i L = if i mem L then L else i::L
  71.255 +					
  71.256 +fun mk_set [] = []
  71.257 +  | mk_set (a::rst) = insert a (mk_set rst)
  71.258 +		      
  71.259 +fun [] union S = S
  71.260 +  | S union [] = S
  71.261 +  | (a::rst) union S2 = rst union (insert a S2)
  71.262 +			
  71.263 +fun implode_subst [] = []
  71.264 +  | implode_subst (x::r::rest) = ((x,r)::(implode_subst rest))
  71.265 +  | implode_subst _ = raise ERR "implode_subst" "malformed substitution list"
  71.266 +
  71.267 +fun apboth f (x,y) = (f x,f y)
  71.268 +end
  71.269 +open Lib
  71.270 +
  71.271 +structure Tag =
  71.272 +struct
  71.273 +val empty_tag = Tag []
  71.274 +fun read name = Tag [name]
  71.275 +fun merge (Tag tag1) (Tag tag2) = Tag (Lib.union(tag1,tag2))
  71.276 +end
  71.277 +
  71.278 +(* Acutal code. *)
  71.279 +
  71.280 +fun get_segment thyname l = (Lib.assoc "s" l
  71.281 +			     handle PK _ => thyname)
  71.282 +val get_name    = Lib.assoc "n"
  71.283 +
  71.284 +local
  71.285 +    open LazyScan
  71.286 +    infix 7 |-- --|
  71.287 +    infix 5 :-- -- ^^
  71.288 +    infix 3 >>
  71.289 +    infix 0 ||
  71.290 +in
  71.291 +exception XML of string
  71.292 +
  71.293 +datatype xml = Elem of string * (string * string) list * xml list
  71.294 +datatype XMLtype = XMLty of xml | FullType of hol_type
  71.295 +datatype XMLterm = XMLtm of xml | FullTerm of term
  71.296 +
  71.297 +fun pair x y = (x,y)
  71.298 +
  71.299 +fun scan_id toks =
  71.300 +    let
  71.301 +        val (x,toks2) = one Char.isAlpha toks
  71.302 +        val (xs,toks3) = any Char.isAlphaNum toks2
  71.303 +    in
  71.304 +        (String.implode (x::xs),toks3)
  71.305 +    end
  71.306 +
  71.307 +fun scan_string str c =
  71.308 +    let
  71.309 +	fun F [] toks = (c,toks)
  71.310 +	  | F (c::cs) toks =
  71.311 +	    case LazySeq.getItem toks of
  71.312 +		Some(c',toks') =>
  71.313 +		if c = c'
  71.314 +		then F cs toks'
  71.315 +		else raise SyntaxError
  71.316 +	      | None => raise SyntaxError
  71.317 +    in
  71.318 +	F (String.explode str)
  71.319 +    end
  71.320 +
  71.321 +local
  71.322 +    val scan_entity =
  71.323 +	(scan_string "amp;" #"&")
  71.324 +	    || scan_string "quot;" #"\""
  71.325 +	    || scan_string "gt;" #">"
  71.326 +	    || scan_string "lt;" #"<"
  71.327 +in
  71.328 +fun scan_nonquote toks =
  71.329 +    case LazySeq.getItem toks of
  71.330 +	Some (c,toks') =>
  71.331 +	(case c of
  71.332 +	     #"\"" => raise SyntaxError
  71.333 +	   | #"&" => scan_entity toks'
  71.334 +	   | c => (c,toks'))
  71.335 +      | None => raise SyntaxError
  71.336 +end
  71.337 +
  71.338 +val scan_string = $$ #"\"" |-- repeat scan_nonquote --| $$ #"\"" >>
  71.339 +		     String.implode
  71.340 +
  71.341 +val scan_attribute = scan_id -- $$ #"=" |-- scan_string
  71.342 +
  71.343 +val scan_start_of_tag = $$ #"<" |-- scan_id --
  71.344 +			   repeat ($$ #" " |-- scan_attribute)
  71.345 +
  71.346 +val scan_end_of_tag = $$ #"/" |-- $$ #">" |-- succeed []
  71.347 +val scan_end_tag = $$ #"<" |-- $$ #"/" |-- scan_id --| $$ #">"
  71.348 +
  71.349 +fun scan_children id = $$ #">" |-- repeat scan_tag -- scan_end_tag >>
  71.350 +		       (fn (chldr,id') => if id = id'
  71.351 +					  then chldr
  71.352 +					  else raise XML "Tag mismatch")
  71.353 +and scan_tag toks =
  71.354 +    let
  71.355 +	val ((id,atts),toks2) = scan_start_of_tag toks
  71.356 +	val (chldr,toks3) = (scan_children id || scan_end_of_tag) toks2
  71.357 +    in
  71.358 +	(Elem (id,atts,chldr),toks3)
  71.359 +    end
  71.360 +end
  71.361 +
  71.362 +val type_of = Term.type_of
  71.363 +
  71.364 +val boolT = Type("bool",[])
  71.365 +val propT = Type("prop",[])
  71.366 +
  71.367 +fun mk_defeq name rhs thy =
  71.368 +    let
  71.369 +	val ty = type_of rhs
  71.370 +    in
  71.371 +	Logic.mk_equals (Const(Sign.intern_const (sign_of thy) name,ty),rhs)
  71.372 +    end
  71.373 +
  71.374 +fun mk_teq name rhs thy =
  71.375 +    let
  71.376 +	val ty = type_of rhs
  71.377 +    in
  71.378 +	HOLogic.mk_eq (Const(Sign.intern_const (sign_of thy) name,ty),rhs)
  71.379 +    end
  71.380 +
  71.381 +fun intern_const_name thyname const thy =
  71.382 +    case get_hol4_const_mapping thyname const thy of
  71.383 +	Some (_,cname,_) => cname
  71.384 +      | None => (case get_hol4_const_renaming thyname const thy of
  71.385 +		     Some cname => Sign.intern_const (sign_of thy) (thyname ^ "." ^ cname)
  71.386 +		   | None => Sign.intern_const (sign_of thy) (thyname ^ "." ^ const))
  71.387 +
  71.388 +fun intern_type_name thyname const thy =
  71.389 +    case get_hol4_type_mapping thyname const thy of
  71.390 +	Some (_,cname) => cname
  71.391 +      | None => Sign.intern_const (sign_of thy) (thyname ^ "." ^ const)
  71.392 +
  71.393 +fun mk_vartype name = TFree(name,["HOL.type"])
  71.394 +fun mk_thy_type thy Thy Tyop Args = Type(intern_type_name Thy Tyop thy,Args)
  71.395 +
  71.396 +val mk_var = Free
  71.397 +
  71.398 +fun dom_rng (Type("fun",[dom,rng])) = (dom,rng)
  71.399 +  | dom_rng _ = raise ERR "dom_rng" "Not a functional type"
  71.400 +
  71.401 +fun mk_thy_const thy Thy Name Ty = Const(intern_const_name Thy Name thy,Ty)
  71.402 +
  71.403 +local
  71.404 +    fun get_type sg thyname name =
  71.405 +	case Sign.const_type sg name of
  71.406 +	    Some ty => ty
  71.407 +	  | None => raise ERR "get_type" (name ^ ": No such constant")
  71.408 +in
  71.409 +fun prim_mk_const thy Thy Name =
  71.410 +    let
  71.411 +	val name = intern_const_name Thy Name thy
  71.412 +	val cmaps = HOL4ConstMaps.get thy
  71.413 +    in
  71.414 +	case StringPair.lookup(cmaps,(Thy,Name)) of
  71.415 +	    Some(_,_,Some ty) => Const(name,ty)
  71.416 +	  | _ => Const(name,get_type (sign_of thy) Thy name)
  71.417 +    end
  71.418 +end
  71.419 +
  71.420 +fun mk_comb(f,a) = f $ a
  71.421 +fun mk_abs(x,a) = Term.lambda x a
  71.422 +
  71.423 +(* Needed for HOL Light *)
  71.424 +fun protect_tyvarname s =
  71.425 +    let
  71.426 +	fun no_quest s =
  71.427 +	    if Char.contains s #"?"
  71.428 +	    then String.translate (fn #"?" => "q_" | c => Char.toString c) s
  71.429 +	    else s
  71.430 +	fun beg_prime s =
  71.431 +	    if String.isPrefix "'" s
  71.432 +	    then s
  71.433 +	    else "'" ^ s
  71.434 +    in
  71.435 +	s |> no_quest |> beg_prime
  71.436 +    end
  71.437 +fun protect_varname s =
  71.438 +    let
  71.439 +	fun no_beg_underscore s =
  71.440 +	    if String.isPrefix "_" s
  71.441 +	    then "dummy" ^ s
  71.442 +	    else s
  71.443 +    in
  71.444 +	s |> no_beg_underscore
  71.445 +    end
  71.446 +
  71.447 +structure TypeNet =
  71.448 +struct
  71.449 +fun get_type_from_index thy thyname types is =
  71.450 +    case Int.fromString is of
  71.451 +	SOME i => (case Array.sub(types,i) of
  71.452 +		       FullType ty => ty
  71.453 +		     | XMLty xty =>
  71.454 +		       let
  71.455 +			   val ty = get_type_from_xml thy thyname types xty
  71.456 +			   val _  = Array.update(types,i,FullType ty)
  71.457 +		       in
  71.458 +			   ty
  71.459 +		       end)
  71.460 +      | NONE => raise ERR "get_type_from_index" "Bad index"
  71.461 +and get_type_from_xml thy thyname types =
  71.462 +    let
  71.463 +	fun gtfx (Elem("tyi",[("i",iS)],[])) =
  71.464 +		 get_type_from_index thy thyname types iS
  71.465 +	  | gtfx (Elem("tyc",atts,[])) =
  71.466 +	    mk_thy_type thy
  71.467 +			(get_segment thyname atts)
  71.468 +			(get_name atts)
  71.469 +			[]
  71.470 +	  | gtfx (Elem("tyv",[("n",s)],[])) = mk_vartype (protect_tyvarname s)
  71.471 +	  | gtfx (Elem("tya",[],(Elem("tyc",atts,[]))::tys)) =
  71.472 +	    mk_thy_type thy
  71.473 +			(get_segment thyname atts)
  71.474 +			(get_name atts)
  71.475 +			(map gtfx tys)
  71.476 +	  | gtfx _ = raise ERR "get_type" "Bad type"
  71.477 +    in
  71.478 +	gtfx
  71.479 +    end
  71.480 +
  71.481 +fun input_types thyname (Elem("tylist",[("i",i)],xtys)) =
  71.482 +    let
  71.483 +	val types = Array.array(valOf (Int.fromString i),XMLty (Elem("",[],[])))
  71.484 +	fun IT _ [] = ()
  71.485 +	  | IT n (xty::xtys) =
  71.486 +	    (Array.update(types,n,XMLty xty);
  71.487 +	     IT (n+1) xtys)
  71.488 +	val _ = IT 0 xtys
  71.489 +    in
  71.490 +	types
  71.491 +    end
  71.492 +  | input_types _ _ = raise ERR "input_types" "Bad type list"
  71.493 +end
  71.494 +
  71.495 +structure TermNet =
  71.496 +struct
  71.497 +fun get_term_from_index thy thyname types terms is =
  71.498 +    case Int.fromString is of
  71.499 +	SOME i => (case Array.sub(terms,i) of
  71.500 +		       FullTerm tm => tm
  71.501 +		     | XMLtm xtm =>
  71.502 +		       let
  71.503 +			   val tm = get_term_from_xml thy thyname types terms xtm
  71.504 +			   val _  = Array.update(terms,i,FullTerm tm)
  71.505 +		       in
  71.506 +			   tm
  71.507 +		       end)
  71.508 +      | NONE => raise ERR "get_term_from_index" "Bad index"
  71.509 +and get_term_from_xml thy thyname types terms =
  71.510 +    let
  71.511 +	fun get_type [] = None
  71.512 +	  | get_type [ty] = Some (TypeNet.get_type_from_xml thy thyname types ty)
  71.513 +	  | get_type _ = raise ERR "get_term" "Bad type"
  71.514 +
  71.515 +	fun gtfx (Elem("tmv",[("n",name),("t",tyi)],[])) =
  71.516 +	    mk_var(protect_varname name,TypeNet.get_type_from_index thy thyname types tyi)
  71.517 +	  | gtfx (Elem("tmc",atts,[])) =
  71.518 +	    let
  71.519 +		val segment = get_segment thyname atts
  71.520 +		val name = get_name atts
  71.521 +	    in
  71.522 +		mk_thy_const thy segment name (TypeNet.get_type_from_index thy thyname types (Lib.assoc "t" atts))
  71.523 +		handle PK _ => prim_mk_const thy segment name
  71.524 +	    end
  71.525 +	  | gtfx (Elem("tma",[("f",tmf),("a",tma)],[])) =
  71.526 +	    let
  71.527 +		val f = get_term_from_index thy thyname types terms tmf
  71.528 +		val a = get_term_from_index thy thyname types terms tma
  71.529 +	    in
  71.530 +		mk_comb(f,a)
  71.531 +	    end
  71.532 +	  | gtfx (Elem("tml",[("x",tmx),("a",tma)],[])) =
  71.533 +	    let
  71.534 +		val x = get_term_from_index thy thyname types terms tmx
  71.535 +		val a = get_term_from_index thy thyname types terms tma
  71.536 +	    in
  71.537 +		mk_abs(x,a)
  71.538 +	    end
  71.539 +	  | gtfx (Elem("tmi",[("i",iS)],[])) =
  71.540 +	    get_term_from_index thy thyname types terms iS
  71.541 +	  | gtfx (Elem(tag,_,_)) =
  71.542 +	    raise ERR "get_term" ("Not a term: "^tag)
  71.543 +    in
  71.544 +	gtfx
  71.545 +    end
  71.546 +
  71.547 +fun input_terms thyname types (Elem("tmlist",[("i",i)],xtms)) =
  71.548 +    let
  71.549 +	val terms = Array.array(valOf(Int.fromString i),XMLtm (Elem("",[],[])))
  71.550 +
  71.551 +	fun IT _ [] = ()
  71.552 +	  | IT n (xtm::xtms) =
  71.553 +	    (Array.update(terms,n,XMLtm xtm);
  71.554 +	     IT (n+1) xtms)
  71.555 +	val _ = IT 0 xtms
  71.556 +    in
  71.557 +	terms
  71.558 +    end
  71.559 +  | input_terms _ _ _ = raise ERR "input_terms" "Bad term list"
  71.560 +end
  71.561 +
  71.562 +fun get_proof_dir (thyname:string) thy =
  71.563 +    let
  71.564 +	val import_segment =
  71.565 +	    case get_segment2 thyname thy of
  71.566 +		Some seg => seg
  71.567 +	      | None => get_import_segment thy
  71.568 +	val defpath = [(getenv "ISABELLE_HOME_USER") ^ "/proofs"]
  71.569 +	val path =
  71.570 +	    case getenv "PROOF_DIRS" of
  71.571 +		"" => defpath
  71.572 +	      | path => (space_explode ":" path) @ defpath
  71.573 +	fun find [] = error ("Unable to find import segment " ^ import_segment)
  71.574 +	  | find (p::ps) = (let
  71.575 +				val dir = p ^ "/" ^ import_segment
  71.576 +			    in
  71.577 +				if OS.FileSys.isDir dir
  71.578 +				then dir
  71.579 +				else find ps
  71.580 +			    end) handle OS.SysErr _ => find ps
  71.581 +    in
  71.582 +	find path ^ "/" ^ thyname
  71.583 +    end
  71.584 +			   
  71.585 +fun proof_file_name thyname thmname thy =
  71.586 +    let
  71.587 +	val path = get_proof_dir thyname thy
  71.588 +	val _ = OS.FileSys.mkDir path handle OS.SysErr _ => ()
  71.589 +    in
  71.590 +	String.concat[path,"/",thmname,".prf"]
  71.591 +    end
  71.592 +	
  71.593 +fun xml_to_proof thyname types terms prf thy =
  71.594 +    let
  71.595 +	val xml_to_hol_type = TypeNet.get_type_from_xml thy thyname types
  71.596 +	val xml_to_term = TermNet.get_term_from_xml thy thyname types terms
  71.597 +
  71.598 +	fun index_to_term is =
  71.599 +	    TermNet.get_term_from_index thy thyname types terms is
  71.600 +
  71.601 +	fun x2p (Elem("prefl",[("i",is)],[])) = mk_proof (PRefl (index_to_term is))
  71.602 +	  | x2p (Elem("pinstt",[],p::lambda)) =
  71.603 +	    let
  71.604 +		val p = x2p p
  71.605 +		val lambda = implode_subst (map xml_to_hol_type lambda)
  71.606 +	    in
  71.607 +		mk_proof (PInstT(p,lambda))
  71.608 +	    end
  71.609 +	  | x2p (Elem("psubst",[("i",is)],prf::prfs)) =
  71.610 +	    let
  71.611 +		val tm = index_to_term is
  71.612 +		val prf = x2p prf
  71.613 +		val prfs = map x2p prfs
  71.614 +	    in
  71.615 +		mk_proof (PSubst(prfs,tm,prf))
  71.616 +	    end
  71.617 +	  | x2p (Elem("pabs",[("i",is)],[prf])) =
  71.618 +	    let
  71.619 +		val p = x2p prf
  71.620 +		val t = index_to_term is
  71.621 +	    in
  71.622 +		mk_proof (PAbs (p,t))
  71.623 +	    end
  71.624 +	  | x2p (Elem("pdisch",[("i",is)],[prf])) =
  71.625 +	    let
  71.626 +		val p = x2p prf
  71.627 +		val t = index_to_term is
  71.628 +	    in
  71.629 +		mk_proof (PDisch (p,t))
  71.630 +	    end
  71.631 +	  | x2p (Elem("pmp",[],[prf1,prf2])) =
  71.632 +	    let
  71.633 +		val p1 = x2p prf1
  71.634 +		val p2 = x2p prf2
  71.635 +	    in
  71.636 +		mk_proof (PMp(p1,p2))
  71.637 +	    end
  71.638 +	  | x2p (Elem("phyp",[("i",is)],[])) = mk_proof (PHyp (index_to_term is))
  71.639 +	  | x2p (Elem("paxiom",[("n",n),("i",is)],[])) =
  71.640 +	    mk_proof (PAxm(n,index_to_term is))
  71.641 +	  | x2p (Elem("pfact",atts,[])) =
  71.642 +	    let
  71.643 +		val thyname = get_segment thyname atts
  71.644 +		val thmname = get_name atts
  71.645 +		val p = mk_proof PDisk
  71.646 +		val _  = set_disk_info_of p thyname thmname
  71.647 +	    in
  71.648 +		p
  71.649 +	    end
  71.650 +	  | x2p (Elem("pdef",[("s",seg),("n",name),("i",is)],[])) =
  71.651 +	    mk_proof (PDef(seg,name,index_to_term is))
  71.652 +	  | x2p (Elem("ptmspec",[("s",seg)],p::names)) =
  71.653 +	    let
  71.654 +		val names = map (fn Elem("name",[("n",name)],[]) => name
  71.655 +				  | _ => raise ERR "x2p" "Bad proof (ptmspec)") names
  71.656 +	    in
  71.657 +		mk_proof (PTmSpec(seg,names,x2p p))
  71.658 +	    end
  71.659 +	  | x2p (Elem("ptyintro",[("s",seg),("n",name),("a",abs_name),("r",rep_name)],[xP,xt,p])) =
  71.660 +	    let
  71.661 +		val P = xml_to_term xP
  71.662 +		val t = xml_to_term xt
  71.663 +	    in
  71.664 +		mk_proof (PTyIntro(seg,name,abs_name,rep_name,P,t,x2p p))
  71.665 +	    end
  71.666 +	  | x2p (Elem("ptydef",[("s",seg),("n",name)],[p])) =
  71.667 +	    mk_proof (PTyDef(seg,name,x2p p))
  71.668 +	  | x2p (xml as Elem("poracle",[],chldr)) =
  71.669 +	    let
  71.670 +		val (oracles,terms) = Library.partition (fn (Elem("oracle",_,_)) => true | _ => false) chldr
  71.671 +		val ors = map (fn (Elem("oracle",[("n",name)],[])) => name | xml => raise ERR "x2p" "bad oracle") oracles
  71.672 +		val (c,asl) = case terms of
  71.673 +				  [] => raise ERR "x2p" "Bad oracle description"
  71.674 +				| (hd::tl) => (hd,tl)
  71.675 +		val tg = foldr (fn (oracle,tg) => Tag.merge (Tag.read oracle) tg) (ors,Tag.empty_tag)
  71.676 +	    in
  71.677 +		mk_proof (POracle(tg,map xml_to_term asl,xml_to_term c))
  71.678 +	    end
  71.679 +	  | x2p (Elem("pspec",[("i",is)],[prf])) =
  71.680 +	    let
  71.681 +		val p = x2p prf
  71.682 +		val tm = index_to_term is
  71.683 +	    in
  71.684 +		mk_proof (PSpec(p,tm))
  71.685 +	    end
  71.686 +	  | x2p (Elem("pinst",[],p::theta)) =
  71.687 +	    let
  71.688 +		val p = x2p p
  71.689 +		val theta = implode_subst (map xml_to_term theta)
  71.690 +	    in
  71.691 +		mk_proof (PInst(p,theta))
  71.692 +	    end
  71.693 +	  | x2p (Elem("pgen",[("i",is)],[prf])) =
  71.694 +	    let
  71.695 +		val p = x2p prf
  71.696 +		val tm = index_to_term is
  71.697 +	    in
  71.698 +		mk_proof (PGen(p,tm))
  71.699 +	    end
  71.700 +	  | x2p (Elem("pgenabs",[],prf::tms)) =
  71.701 +	    let
  71.702 +		val p = x2p prf
  71.703 +		val tml = map xml_to_term tms
  71.704 +	    in
  71.705 +		mk_proof (PGenAbs(p,None,tml))
  71.706 +	    end
  71.707 +	  | x2p (Elem("pgenabs",[("i",is)],prf::tms)) =
  71.708 +	    let
  71.709 +		val p = x2p prf
  71.710 +		val tml = map xml_to_term tms
  71.711 +	    in
  71.712 +		mk_proof (PGenAbs(p,Some (index_to_term is),tml))
  71.713 +	    end
  71.714 +	  | x2p (Elem("pimpas",[],[prf1,prf2])) =
  71.715 +	    let
  71.716 +		val p1 = x2p prf1
  71.717 +		val p2 = x2p prf2
  71.718 +	    in
  71.719 +		mk_proof (PImpAS(p1,p2))
  71.720 +	    end
  71.721 +	  | x2p (Elem("psym",[],[prf])) =
  71.722 +	    let
  71.723 +		val p = x2p prf
  71.724 +	    in
  71.725 +		mk_proof (PSym p)
  71.726 +	    end
  71.727 +	  | x2p (Elem("ptrans",[],[prf1,prf2])) =
  71.728 +	    let
  71.729 +		val p1 = x2p prf1
  71.730 +		val p2 = x2p prf2
  71.731 +	    in
  71.732 +		mk_proof (PTrans(p1,p2))
  71.733 +	    end
  71.734 +	  | x2p (Elem("pcomb",[],[prf1,prf2])) =
  71.735 +	    let
  71.736 +		val p1 = x2p prf1
  71.737 +		val p2 = x2p prf2
  71.738 +	    in
  71.739 +		mk_proof (PComb(p1,p2))
  71.740 +	    end
  71.741 +	  | x2p (Elem("peqmp",[],[prf1,prf2])) =
  71.742 +	    let
  71.743 +		val p1 = x2p prf1
  71.744 +		val p2 = x2p prf2
  71.745 +	    in
  71.746 +		mk_proof (PEqMp(p1,p2))
  71.747 +	    end
  71.748 +	  | x2p (Elem("peqimp",[],[prf])) =
  71.749 +	    let
  71.750 +		val p = x2p prf
  71.751 +	    in
  71.752 +		mk_proof (PEqImp p)
  71.753 +	    end
  71.754 +	  | x2p (Elem("pexists",[("e",ise),("w",isw)],[prf])) =
  71.755 +	    let
  71.756 +		val p = x2p prf
  71.757 +		val ex = index_to_term ise
  71.758 +		val w = index_to_term isw
  71.759 +	    in
  71.760 +		mk_proof (PExists(p,ex,w))
  71.761 +	    end
  71.762 +	  | x2p (Elem("pchoose",[("i",is)],[prf1,prf2])) =
  71.763 +	    let
  71.764 +		val v  = index_to_term is
  71.765 +		val p1 = x2p prf1
  71.766 +		val p2 = x2p prf2
  71.767 +	    in
  71.768 +		mk_proof (PChoose(v,p1,p2))
  71.769 +	    end
  71.770 +	  | x2p (Elem("pconj",[],[prf1,prf2])) =
  71.771 +	    let
  71.772 +		val p1 = x2p prf1
  71.773 +		val p2 = x2p prf2
  71.774 +	    in
  71.775 +		mk_proof (PConj(p1,p2))
  71.776 +	    end
  71.777 +	  | x2p (Elem("pconjunct1",[],[prf])) =
  71.778 +	    let
  71.779 +		val p = x2p prf
  71.780 +	    in
  71.781 +		mk_proof (PConjunct1 p)
  71.782 +	    end
  71.783 +	  | x2p (Elem("pconjunct2",[],[prf])) =
  71.784 +	    let
  71.785 +		val p = x2p prf
  71.786 +	    in
  71.787 +		mk_proof (PConjunct2 p)
  71.788 +	    end
  71.789 +	  | x2p (Elem("pdisj1",[("i",is)],[prf])) =
  71.790 +	    let
  71.791 +		val p = x2p prf
  71.792 +		val t = index_to_term is
  71.793 +	    in
  71.794 +		mk_proof (PDisj1 (p,t))
  71.795 +	    end
  71.796 +	  | x2p (Elem("pdisj2",[("i",is)],[prf])) =
  71.797 +	    let
  71.798 +		val p = x2p prf
  71.799 +		val t = index_to_term is
  71.800 +	    in
  71.801 +		mk_proof (PDisj2 (p,t))
  71.802 +	    end
  71.803 +	  | x2p (Elem("pdisjcases",[],[prf1,prf2,prf3])) =
  71.804 +	    let
  71.805 +		val p1 = x2p prf1
  71.806 +		val p2 = x2p prf2
  71.807 +		val p3 = x2p prf3
  71.808 +	    in
  71.809 +		mk_proof (PDisjCases(p1,p2,p3))
  71.810 +	    end
  71.811 +	  | x2p (Elem("pnoti",[],[prf])) =
  71.812 +	    let
  71.813 +		val p = x2p prf
  71.814 +	    in
  71.815 +		mk_proof (PNotI p)
  71.816 +	    end
  71.817 +	  | x2p (Elem("pnote",[],[prf])) =
  71.818 +	    let
  71.819 +		val p = x2p prf
  71.820 +	    in
  71.821 +		mk_proof (PNotE p)
  71.822 +	    end
  71.823 +	  | x2p (Elem("pcontr",[("i",is)],[prf])) =
  71.824 +	    let
  71.825 +		val p = x2p prf
  71.826 +		val t = index_to_term is
  71.827 +	    in
  71.828 +		mk_proof (PContr (p,t))
  71.829 +	    end
  71.830 +	  | x2p xml = raise ERR "x2p" "Bad proof"
  71.831 +    in
  71.832 +	x2p prf
  71.833 +    end
  71.834 +
  71.835 +fun import_proof thyname thmname thy =
  71.836 +    let
  71.837 +	val is = TextIO.openIn(proof_file_name thyname thmname thy)
  71.838 +	val (proof_xml,_) = scan_tag (LazySeq.of_instream is)
  71.839 +	val _ = TextIO.closeIn is
  71.840 +    in
  71.841 +	case proof_xml of
  71.842 +	    Elem("proof",[],xtypes::xterms::prf::rest) =>
  71.843 +	    let
  71.844 +		val types = TypeNet.input_types thyname xtypes
  71.845 +		val terms = TermNet.input_terms thyname types xterms
  71.846 +	    in
  71.847 +		(case rest of
  71.848 +		     [] => None
  71.849 +		   | [xtm] => Some (fn thy => TermNet.get_term_from_xml thy thyname types terms xtm)
  71.850 +		   | _ => raise ERR "import_proof" "Bad argument list",
  71.851 +		 xml_to_proof thyname types terms prf)
  71.852 +	    end
  71.853 +	  | _ => raise ERR "import_proof" "Bad proof"
  71.854 +    end
  71.855 +
  71.856 +fun uniq_compose m th i st =
  71.857 +    let
  71.858 +	val res = bicompose false (false,th,m) i st
  71.859 +    in
  71.860 +	case Seq.pull res of
  71.861 +	    Some (th,rest) => (case Seq.pull rest of
  71.862 +				   Some _ => raise ERR "uniq_compose" "Not unique!"
  71.863 +				 | None => th)
  71.864 +	  | None => raise ERR "uniq_compose" "No result"
  71.865 +    end
  71.866 +
  71.867 +val reflexivity_thm = thm "refl"
  71.868 +val substitution_thm = thm "subst"
  71.869 +val mp_thm = thm "mp"
  71.870 +val imp_antisym_thm = thm "light_imp_as"
  71.871 +val disch_thm = thm "impI"
  71.872 +val ccontr_thm = thm "ccontr"
  71.873 +
  71.874 +val meta_eq_to_obj_eq_thm = thm "meta_eq_to_obj_eq"
  71.875 +
  71.876 +val gen_thm = thm "HOLallI"
  71.877 +val choose_thm = thm "exE"
  71.878 +val exists_thm = thm "exI"
  71.879 +val conj_thm = thm "conjI"
  71.880 +val conjunct1_thm = thm "conjunct1"
  71.881 +val conjunct2_thm = thm "conjunct2"
  71.882 +val spec_thm = thm "spec"
  71.883 +val disj_cases_thm = thm "disjE"
  71.884 +val disj1_thm = thm "disjI1"
  71.885 +val disj2_thm = thm "disjI2"
  71.886 +
  71.887 +local
  71.888 +    val th = thm "not_def"
  71.889 +    val sg = sign_of_thm th
  71.890 +    val pp = reflexive (cterm_of sg (Const("Trueprop",boolT-->propT)))
  71.891 +in
  71.892 +val not_elim_thm = combination pp th
  71.893 +end
  71.894 +
  71.895 +val not_intro_thm = symmetric not_elim_thm
  71.896 +val abs_thm = thm "ext"
  71.897 +val trans_thm = thm "trans"
  71.898 +val symmetry_thm = thm "sym"
  71.899 +val transitivity_thm = thm "trans"
  71.900 +val eqmp_thm = thm "iffD1"
  71.901 +val eqimp_thm = thm "HOL4Setup.eq_imp"
  71.902 +val comb_thm = thm "cong"
  71.903 +
  71.904 +(* Beta-eta normalizes a theorem (only the conclusion, not the *
  71.905 +hypotheses!)  *)
  71.906 +
  71.907 +fun beta_eta_thm th =
  71.908 +    let
  71.909 +	val th1 = Thm.equal_elim (Thm.beta_conversion true (cprop_of th))  th
  71.910 +	val th2 = Thm.equal_elim (Thm.eta_conversion       (cprop_of th1)) th1
  71.911 +    in
  71.912 +	th2
  71.913 +    end
  71.914 +
  71.915 +fun implies_elim_all th =
  71.916 +    foldl (fn (th,p) => implies_elim th (assume p)) (th,cprems_of th)
  71.917 +
  71.918 +fun norm_hyps th =
  71.919 +    th |> beta_eta_thm
  71.920 +       |> implies_elim_all
  71.921 +       |> implies_intr_hyps
  71.922 +
  71.923 +fun mk_GEN v th sg =
  71.924 +    let
  71.925 +	val c = HOLogic.dest_Trueprop (concl_of th)
  71.926 +	val cv = cterm_of sg v
  71.927 +	val lc = Term.lambda v c
  71.928 +	val clc = Thm.cterm_of sg lc
  71.929 +	val cvty = ctyp_of_term cv
  71.930 +	val th1 = implies_elim_all th
  71.931 +	val th2 = beta_eta_thm (forall_intr cv th1)
  71.932 +	val th3 = th2 COMP (beta_eta_thm (Drule.instantiate' [Some cvty] [Some clc] gen_thm))
  71.933 +	val c = prop_of th3
  71.934 +	val vname = fst(dest_Free v)
  71.935 +	val (cold,cnew) = case c of
  71.936 +			      tpc $ (Const("All",allT) $ Abs(oldname,ty,body)) =>
  71.937 +			      (Abs(oldname,dummyT,Bound 0),Abs(vname,dummyT,Bound 0))
  71.938 +			    | tpc $ (Const("All",allT) $ rest) => (tpc,tpc)
  71.939 +			    | _ => raise ERR "mk_GEN" "Unknown conclusion"
  71.940 +	val th4 = Thm.rename_boundvars cold cnew th3
  71.941 +	val res = implies_intr_hyps th4
  71.942 +    in
  71.943 +	res
  71.944 +    end
  71.945 +
  71.946 +(* rotate left k places, leaving the first j and last l premises alone
  71.947 +*)
  71.948 +
  71.949 +fun permute_prems j k 0 th = Thm.permute_prems j k th
  71.950 +  | permute_prems j k l th =
  71.951 +    th |> Thm.permute_prems 0 (~l)
  71.952 +       |> Thm.permute_prems (j+l) k
  71.953 +       |> Thm.permute_prems 0 l
  71.954 +
  71.955 +fun rearrange sg tm th =
  71.956 +    let
  71.957 +	val tm' = Pattern.beta_eta_contract tm
  71.958 +	fun find []      n = permute_prems 0 1 0 (implies_intr (Thm.cterm_of sg tm) th)
  71.959 +	  | find (p::ps) n = if tm' aconv (Pattern.beta_eta_contract p)
  71.960 +			     then permute_prems n 1 0 th
  71.961 +			     else find ps (n+1)
  71.962 +    in
  71.963 +	find (prems_of th) 0
  71.964 +    end
  71.965 +
  71.966 +fun zip (x::xs) (y::ys) = (x,y)::(zip xs ys)
  71.967 +  | zip [] [] = []
  71.968 +  | zip _ _ = raise ERR "zip" "arguments not of same length"
  71.969 +
  71.970 +fun mk_INST dom rng th =
  71.971 +    th |> forall_intr_list dom
  71.972 +       |> forall_elim_list rng
  71.973 +
  71.974 +fun apply_tyinst_typ tyinst =
  71.975 +    let
  71.976 +	fun G (ty as TFree _) =
  71.977 +	    (case try (Lib.assoc ty) tyinst of
  71.978 +		 Some ty' => ty'
  71.979 +	       | None => ty)
  71.980 +	  | G (Type(tyname,tys)) = Type(tyname,map G tys)
  71.981 +	  | G (TVar _) = raise ERR "apply_tyinst_typ" "Scematic variable found"
  71.982 +    in
  71.983 +	G
  71.984 +    end
  71.985 +
  71.986 +fun apply_tyinst_term tyinst =
  71.987 +    let
  71.988 +	val G = apply_tyinst_typ tyinst
  71.989 +	fun F (tm as Bound _) = tm
  71.990 +	  | F (tm as Free(vname,ty)) = Free(vname,G ty)
  71.991 +	  | F (tm as Const(vname,ty)) = Const(vname,G ty)
  71.992 +	  | F (tm1 $ tm2) = (F tm1) $ (F tm2)
  71.993 +	  | F (Abs(vname,ty,body)) = Abs(vname,G ty,F body)
  71.994 +	  | F (Var _) = raise ERR "apply_tyinst_term" "Schematic variable found"
  71.995 +    in
  71.996 +	F
  71.997 +    end
  71.998 +
  71.999 +fun apply_inst_term tminst =
 71.1000 +    let
 71.1001 +	fun F (tm as Bound _) = tm
 71.1002 +	  | F (tm as Free _) =
 71.1003 +	    (case try (Lib.assoc tm) tminst of
 71.1004 +		 Some tm' => tm'
 71.1005 +	       | None => tm)
 71.1006 +	  | F (tm as Const _) = tm
 71.1007 +	  | F (tm1 $ tm2) = (F tm1) $ (F tm2)
 71.1008 +	  | F (Abs(vname,ty,body)) = Abs(vname,ty,F body)
 71.1009 +	  | F (Var _) = raise ERR "apply_inst_term" "Schematic variable found"
 71.1010 +    in
 71.1011 +	F
 71.1012 +    end
 71.1013 +
 71.1014 +val collect_vars =
 71.1015 +    let
 71.1016 +	fun F vars (Bound _) = vars
 71.1017 +	  | F vars (tm as Free _) =
 71.1018 +	    if tm mem vars
 71.1019 +	    then vars
 71.1020 +	    else (tm::vars)
 71.1021 +	  | F vars (Const _) = vars
 71.1022 +	  | F vars (tm1 $ tm2) = F (F vars tm1) tm2
 71.1023 +	  | F vars (Abs(_,_,body)) = F vars body
 71.1024 +	  | F vars (Var _) = raise ERR "collect_vars" "Schematic variable found"
 71.1025 +    in
 71.1026 +	F []
 71.1027 +    end
 71.1028 +
 71.1029 +(* Code for disambiguating variablenames (wrt. types) *)
 71.1030 +
 71.1031 +val disamb_info_empty = {vars=[],rens=[]}
 71.1032 +
 71.1033 +fun rens_of {vars,rens} = rens
 71.1034 +
 71.1035 +fun name_of_var (Free(vname,_)) = vname
 71.1036 +  | name_of_var _ = raise ERR "name_of_var" "Not a variable"
 71.1037 +
 71.1038 +fun disamb_helper {vars,rens} tm =
 71.1039 +    let
 71.1040 +	val varstm = collect_vars tm
 71.1041 +	fun process (v as Free(vname,ty),(vars,rens,inst)) =
 71.1042 +	    if v mem vars
 71.1043 +	    then (vars,rens,inst)
 71.1044 +	    else (case try (Lib.assoc v) rens of
 71.1045 +		      Some vnew => (vars,rens,(v,vnew)::inst)
 71.1046 +		    | None => if exists (fn Free(vname',_) => vname = vname' | _ => raise ERR "disamb_helper" "Bad varlist") vars
 71.1047 +			      then
 71.1048 +				  let
 71.1049 +				      val tmnames = map name_of_var varstm
 71.1050 +				      val varnames = map name_of_var vars
 71.1051 +				      val (dom,rng) = ListPair.unzip rens
 71.1052 +				      val rensnames = (map name_of_var dom) @ (map name_of_var rng)
 71.1053 +				      val instnames = map name_of_var (snd (ListPair.unzip inst))
 71.1054 +				      val allnames = tmnames @ varnames @ rensnames @ instnames
 71.1055 +				      val vnewname = Term.variant allnames vname
 71.1056 +				      val vnew = Free(vnewname,ty)
 71.1057 +				  in
 71.1058 +				      (vars,(v,vnew)::rens,(v,vnew)::inst)
 71.1059 +				  end
 71.1060 +			      else (v::vars,rens,inst))
 71.1061 +	  | process _ = raise ERR "disamb_helper" "Internal error"
 71.1062 +
 71.1063 +	val (vars',rens',inst) =
 71.1064 +	    foldr process (varstm,(vars,rens,[]))
 71.1065 +    in
 71.1066 +	({vars=vars',rens=rens'},inst)
 71.1067 +    end
 71.1068 +
 71.1069 +fun disamb_term_from info tm =
 71.1070 +    let
 71.1071 +	val (info',inst) = disamb_helper info tm
 71.1072 +    in
 71.1073 +	(info',apply_inst_term inst tm)
 71.1074 +    end
 71.1075 +
 71.1076 +fun swap (x,y) = (y,x)
 71.1077 +
 71.1078 +fun has_ren (HOLThm([],_)) = false
 71.1079 +  | has_ren _ = true
 71.1080 +
 71.1081 +fun prinfo {vars,rens} = (writeln "Vars:";
 71.1082 +			  app prin vars;
 71.1083 +			  writeln "Renaming:";
 71.1084 +			  app (fn(x,y)=>(prin x; writeln " -->"; prin y)) rens)
 71.1085 +
 71.1086 +fun disamb_thm_from info (hth as HOLThm(rens,thm)) =
 71.1087 +    let
 71.1088 +	val inv_rens = map swap rens
 71.1089 +	val orig_thm = apply_inst_term inv_rens (prop_of thm)
 71.1090 +	val (info',inst) = disamb_helper info orig_thm
 71.1091 +	val rens' = map (apsnd (apply_inst_term inst)) inv_rens
 71.1092 +	val (dom,rng) = ListPair.unzip (rens' @ inst)
 71.1093 +	val sg = sign_of_thm thm
 71.1094 +	val thm' = mk_INST (map (cterm_of sg) dom) (map (cterm_of sg) rng) thm
 71.1095 +    in
 71.1096 +	(info',thm')
 71.1097 +    end
 71.1098 +
 71.1099 +fun disamb_terms_from info tms =
 71.1100 +    foldr (fn (tm,(info,tms)) =>
 71.1101 +	      let
 71.1102 +		  val (info',tm') = disamb_term_from info tm
 71.1103 +	      in
 71.1104 +		  (info',tm'::tms)
 71.1105 +	      end)
 71.1106 +	  (tms,(info,[]))
 71.1107 +
 71.1108 +fun disamb_thms_from info hthms =
 71.1109 +    foldr (fn (hthm,(info,thms)) =>
 71.1110 +	      let
 71.1111 +		  val (info',tm') = disamb_thm_from info hthm
 71.1112 +	      in
 71.1113 +		  (info',tm'::thms)
 71.1114 +	      end)
 71.1115 +	  (hthms,(info,[]))
 71.1116 +
 71.1117 +fun disamb_term tm   = disamb_term_from disamb_info_empty tm
 71.1118 +fun disamb_terms tms = disamb_terms_from disamb_info_empty tms
 71.1119 +fun disamb_thm thm   = disamb_thm_from disamb_info_empty thm
 71.1120 +fun disamb_thms thms = disamb_thms_from disamb_info_empty thms
 71.1121 +
 71.1122 +fun norm_hthm sg (hth as HOLThm([],_)) = hth
 71.1123 +  | norm_hthm sg (hth as HOLThm(rens,th)) =
 71.1124 +    let
 71.1125 +	val vars = collect_vars (prop_of th)
 71.1126 +	val (rens',inst,_) =
 71.1127 +	    foldr (fn((ren as (vold as Free(vname,_),vnew)),
 71.1128 +		      (rens,inst,vars)) =>
 71.1129 +		     (case Library.find_first (fn Free(v,_) => v = vname | _ => false) vars of
 71.1130 +			  Some v' => if v' = vold
 71.1131 +				     then (rens,(vnew,vold)::inst,vold::vars)
 71.1132 +				     else (ren::rens,(vold,vnew)::inst,vnew::vars)
 71.1133 +			| None => (rens,(vnew,vold)::inst,vold::vars))
 71.1134 +		   | _ => raise ERR "norm_hthm" "Internal error")
 71.1135 +		  (rens,([],[],vars))
 71.1136 +	val (dom,rng) = ListPair.unzip inst
 71.1137 +	val th' = mk_INST (map (cterm_of sg) dom) (map (cterm_of sg) rng) th
 71.1138 +	val nvars = collect_vars (prop_of th')
 71.1139 +	val rens' = filter (fn(_,v) => v mem nvars) rens
 71.1140 +	val res = HOLThm(rens',th')
 71.1141 +    in
 71.1142 +	res
 71.1143 +    end
 71.1144 +
 71.1145 +(* End of disambiguating code *)
 71.1146 +
 71.1147 +val debug = ref false
 71.1148 +
 71.1149 +fun if_debug f x = if !debug then f x else ()
 71.1150 +val message = if_debug writeln
 71.1151 +
 71.1152 +val conjE_helper = Thm.permute_prems 0 1 conjE
 71.1153 +
 71.1154 +fun get_hol4_thm thyname thmname thy =
 71.1155 +    case get_hol4_theorem thyname thmname thy of
 71.1156 +	Some hth => Some (HOLThm hth)
 71.1157 +      | None => 
 71.1158 +	let
 71.1159 +	    val pending = HOL4Pending.get thy
 71.1160 +	in
 71.1161 +	    case StringPair.lookup (pending,(thyname,thmname)) of
 71.1162 +		Some hth => Some (HOLThm hth)
 71.1163 +	      | None => None
 71.1164 +	end
 71.1165 +
 71.1166 +fun non_trivial_term_consts tm =
 71.1167 +    filter (fn c => not (c = "Trueprop" orelse
 71.1168 +			 c = "All" orelse
 71.1169 +			 c = "op -->" orelse
 71.1170 +			 c = "op &" orelse
 71.1171 +			 c = "op =")) (Term.term_consts tm) 
 71.1172 +
 71.1173 +fun match_consts t (* th *) =
 71.1174 +    let
 71.1175 +	fun add_consts (Const (c, _), cs) =
 71.1176 +	    (case c of
 71.1177 +		 "op =" => "==" ins_string cs
 71.1178 +	       | "op -->" => "==>" ins_string cs
 71.1179 +	       | "All" => cs
 71.1180 +	       | "all" => cs
 71.1181 +	       | "op &" => cs
 71.1182 +	       | "Trueprop" => cs
 71.1183 +	       | _ => c ins_string cs)
 71.1184 +	  | add_consts (t $ u, cs) = add_consts (t, add_consts (u, cs))
 71.1185 +	  | add_consts (Abs (_, _, t), cs) = add_consts (t, cs)
 71.1186 +	  | add_consts (_, cs) = cs
 71.1187 +	val t_consts = add_consts(t,[])
 71.1188 +    in
 71.1189 +	fn th => eq_set(t_consts,add_consts(prop_of th,[]))
 71.1190 +    end
 71.1191 +
 71.1192 +fun split_name str =
 71.1193 +    let
 71.1194 +	val sub = Substring.all str
 71.1195 +	val (f,idx) = apsnd Substring.string (Substring.splitr Char.isDigit sub)
 71.1196 +	val (newstr,u) = apboth Substring.string (Substring.splitr (fn c => c = #"_") f)
 71.1197 +    in
 71.1198 +	if not (idx = "") andalso u = "_"
 71.1199 +	then Some (newstr,valOf(Int.fromString idx))
 71.1200 +	else None
 71.1201 +    end
 71.1202 +    handle _ => None
 71.1203 +
 71.1204 +fun rewrite_hol4_term t thy =
 71.1205 +    let
 71.1206 +	val sg = sign_of thy
 71.1207 +
 71.1208 +	val hol4rews1 = map (transfer_sg sg) (HOL4Rewrites.get thy)
 71.1209 +	val hol4ss = empty_ss setmksimps single addsimps hol4rews1
 71.1210 +    in
 71.1211 +	transfer_sg sg (Simplifier.full_rewrite hol4ss (cterm_of sg t))
 71.1212 +    end
 71.1213 +
 71.1214 +
 71.1215 +fun get_isabelle_thm thyname thmname hol4conc thy =
 71.1216 +    let
 71.1217 +	val sg = sign_of thy
 71.1218 +
 71.1219 +	val (info,hol4conc') = disamb_term hol4conc
 71.1220 +	val i2h_conc = symmetric (rewrite_hol4_term (HOLogic.mk_Trueprop hol4conc') thy)
 71.1221 +	val isaconc =
 71.1222 +	    case concl_of i2h_conc of
 71.1223 +		Const("==",_) $ lhs $ _ => lhs
 71.1224 +	      | _ => error "get_isabelle_thm" "Bad rewrite rule"
 71.1225 +	val _ = (message "Original conclusion:";
 71.1226 +		 if_debug prin hol4conc';
 71.1227 +		 message "Modified conclusion:";
 71.1228 +		 if_debug prin isaconc)
 71.1229 +
 71.1230 +	fun mk_res th = HOLThm(rens_of info,equal_elim i2h_conc th)
 71.1231 +    in
 71.1232 +	case get_hol4_mapping thyname thmname thy of
 71.1233 +	    Some (Some thmname) =>
 71.1234 +	    let
 71.1235 +		val _ = message ("Looking for " ^ thmname)
 71.1236 +		val th1 = (Some (transform_error (PureThy.get_thm thy) thmname)
 71.1237 +			   handle ERROR_MESSAGE _ =>
 71.1238 +				  (case split_name thmname of
 71.1239 +				       Some (listname,idx) => (Some (nth_elem(idx-1,PureThy.get_thms thy listname))
 71.1240 +							       handle _ => None)
 71.1241 +				     | None => None))
 71.1242 +	    in
 71.1243 +		case th1 of
 71.1244 +		    Some th2 =>
 71.1245 +		    (case Shuffler.set_prop thy isaconc [(thmname,th2)] of
 71.1246 +			 Some (_,th) => (message "YES";(thy, Some (mk_res th)))
 71.1247 +		       | None => (message "NO2";error "get_isabelle_thm" "Bad mapping"))
 71.1248 +		  | None => (message "NO1";error "get_isabelle_thm" "Bad mapping")
 71.1249 +	    end
 71.1250 +	  | Some None => error ("Trying to access ignored theorem " ^ thmname)
 71.1251 +	  | None =>
 71.1252 +	    let
 71.1253 +		val _ = (message "Looking for conclusion:";
 71.1254 +			 if_debug prin isaconc)
 71.1255 +		val cs = non_trivial_term_consts isaconc
 71.1256 +		val _ = (message "Looking for consts:";
 71.1257 +			 message (String.concat cs))
 71.1258 +		val pot_thms = Shuffler.find_potential thy isaconc
 71.1259 +		val _ = message ((Int.toString (length pot_thms)) ^ " potential theorems")
 71.1260 +	    in
 71.1261 +		case Shuffler.set_prop thy isaconc pot_thms of
 71.1262 +		    Some (isaname,th) =>
 71.1263 +		    let
 71.1264 +			val hth as HOLThm args = mk_res th
 71.1265 +			val thy' =  thy |> add_hol4_theorem thyname thmname args
 71.1266 +					|> add_hol4_mapping thyname thmname isaname
 71.1267 +		    in
 71.1268 +			(thy',Some hth)
 71.1269 +		    end
 71.1270 +		  | None => (thy,None)
 71.1271 +	    end
 71.1272 +    end
 71.1273 +    handle _ => (thy,None)
 71.1274 +
 71.1275 +fun get_thm thyname thmname thy =
 71.1276 +    case get_hol4_thm thyname thmname thy of
 71.1277 +	Some hth => (thy,Some hth)
 71.1278 +      | None => ((case fst (import_proof thyname thmname thy) of
 71.1279 +		      Some f => get_isabelle_thm thyname thmname (f thy) thy
 71.1280 +		    | None => (thy,None))
 71.1281 +		 handle e as IO.Io _ => (thy,None)
 71.1282 +		      | e as PK _ => (thy,None))
 71.1283 +
 71.1284 +fun rename_const thyname thy name =
 71.1285 +    case get_hol4_const_renaming thyname name thy of
 71.1286 +	Some cname => cname
 71.1287 +      | None => name
 71.1288 +
 71.1289 +fun get_def thyname constname rhs thy =
 71.1290 +    let
 71.1291 +	val constname = rename_const thyname thy constname
 71.1292 +	val (thmname,thy') = get_defname thyname constname thy
 71.1293 +	val _ = message ("Looking for definition " ^ thyname ^ "." ^ thmname)
 71.1294 +    in
 71.1295 +	get_isabelle_thm thyname thmname (mk_teq (thyname ^ "." ^ constname) rhs thy') thy'
 71.1296 +    end
 71.1297 +
 71.1298 +fun get_axiom thyname axname thy =
 71.1299 +    case get_thm thyname axname thy of
 71.1300 +	arg as (_,Some _) => arg
 71.1301 +      | _ => raise ERR "get_axiom" ("Trying to retrieve axiom (" ^ axname ^ ")")
 71.1302 +
 71.1303 +fun intern_store_thm gen_output thyname thmname hth thy =
 71.1304 +    let
 71.1305 +	val sg = sign_of thy
 71.1306 +	val (hth' as HOLThm (args as (_,th))) = norm_hthm sg hth
 71.1307 +	val _ = if has_ren hth' then warning ("Theorem " ^ thmname ^ " needs variable-disambiguating")
 71.1308 +		else ()
 71.1309 +	val rew = rewrite_hol4_term (concl_of th) thy
 71.1310 +	val th  = equal_elim rew th
 71.1311 +	val thy' = add_hol4_pending thyname thmname args thy
 71.1312 +	val thy2 = if gen_output
 71.1313 +		   then add_dump ("lemma " ^ thmname ^ ": " ^ (smart_string_of_thm th) ^ "\n  by (import " ^ thyname ^ " " ^ thmname ^ ")") thy'
 71.1314 +		   else thy'
 71.1315 +    in
 71.1316 +	(thy2,hth')
 71.1317 +    end
 71.1318 +
 71.1319 +val store_thm = intern_store_thm true
 71.1320 +
 71.1321 +fun mk_REFL ctm =
 71.1322 +    let
 71.1323 +	val cty = Thm.ctyp_of_term ctm
 71.1324 +    in
 71.1325 +	Drule.instantiate' [Some cty] [Some ctm] reflexivity_thm
 71.1326 +    end
 71.1327 +
 71.1328 +fun REFL tm thy =
 71.1329 +    let
 71.1330 +	val _ = message "REFL:"
 71.1331 +	val (info,tm') = disamb_term tm
 71.1332 +	val sg = sign_of thy
 71.1333 +	val ctm = Thm.cterm_of sg tm'
 71.1334 +	val res = HOLThm(rens_of info,mk_REFL ctm)
 71.1335 +	val _ = if_debug pth res
 71.1336 +    in
 71.1337 +	(thy,res)
 71.1338 +    end
 71.1339 +
 71.1340 +fun ASSUME tm thy =
 71.1341 +    let
 71.1342 +	val _ = message "ASSUME:"
 71.1343 +	val (info,tm') = disamb_term tm
 71.1344 +	val sg = sign_of thy
 71.1345 +	val ctm = Thm.cterm_of sg (HOLogic.mk_Trueprop tm')
 71.1346 +	val th = Thm.trivial ctm
 71.1347 +	val res = HOLThm(rens_of info,th)
 71.1348 +	val _ = if_debug pth res
 71.1349 +    in
 71.1350 +	(thy,res)
 71.1351 +    end
 71.1352 +
 71.1353 +fun INST_TYPE lambda (hth as HOLThm(rens,th)) thy =
 71.1354 +    let
 71.1355 +	val _ = message "INST_TYPE:"
 71.1356 +	val _ = if_debug pth hth
 71.1357 +	val sg = sign_of thy
 71.1358 +	val tys_before = add_term_tfrees (prop_of th,[])
 71.1359 +	val th1 = varifyT th
 71.1360 +	val tys_after = add_term_tvars (prop_of th1,[])
 71.1361 +	val tyinst = map (fn (bef,(i,_)) =>
 71.1362 +			     (case try (Lib.assoc (TFree bef)) lambda of
 71.1363 +				  Some ty => (i,ctyp_of sg ty)
 71.1364 +				| None => (i,ctyp_of sg (TFree bef))
 71.1365 +			     ))
 71.1366 +			 (zip tys_before tys_after)
 71.1367 +	val res = Drule.instantiate (tyinst,[]) th1
 71.1368 +	val appty = apboth (apply_tyinst_term lambda)
 71.1369 +	val hth = HOLThm(map appty rens,res)
 71.1370 +	val res = norm_hthm sg hth
 71.1371 +	val _ = message "RESULT:"
 71.1372 +	val _ = if_debug pth res
 71.1373 +    in
 71.1374 +	(thy,res)
 71.1375 +    end
 71.1376 +
 71.1377 +fun INST sigma hth thy =
 71.1378 +    let
 71.1379 +	val _ = message "INST:"
 71.1380 +	val _ = if_debug (app (fn (x,y) => (prin x; prin y))) sigma
 71.1381 +	val _ = if_debug pth hth
 71.1382 +	val sg = sign_of thy
 71.1383 +	val (sdom,srng) = ListPair.unzip sigma
 71.1384 +	val (info,th) = disamb_thm hth
 71.1385 +	val (info',srng') = disamb_terms_from info srng
 71.1386 +	val rens = rens_of info'
 71.1387 +	val sdom' = map (apply_inst_term rens) sdom
 71.1388 +	val th1 = mk_INST (map (cterm_of sg) sdom') (map (cterm_of sg) srng') th
 71.1389 +	val res = HOLThm(rens,th1)
 71.1390 +	val _ = message "RESULT:"
 71.1391 +	val _ = if_debug pth res
 71.1392 +    in
 71.1393 +	(thy,res)
 71.1394 +    end
 71.1395 +
 71.1396 +fun EQ_IMP_RULE (hth as HOLThm(rens,th)) thy =
 71.1397 +    let
 71.1398 +	val _ = message "EQ_IMP_RULE:"
 71.1399 +	val _ = if_debug pth hth
 71.1400 +	val res = HOLThm(rens,th RS eqimp_thm)
 71.1401 +	val _ = message "RESULT:"
 71.1402 +	val _ = if_debug pth res
 71.1403 +    in
 71.1404 +	(thy,res)
 71.1405 +    end
 71.1406 +
 71.1407 +fun mk_EQ_MP th1 th2 = [beta_eta_thm th1,beta_eta_thm th2] MRS eqmp_thm
 71.1408 +
 71.1409 +fun EQ_MP hth1 hth2 thy =
 71.1410 +    let
 71.1411 +	val _ = message "EQ_MP:"
 71.1412 +	val _ = if_debug pth hth1
 71.1413 +	val _ = if_debug pth hth2
 71.1414 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1415 +	val res = HOLThm(rens_of info,mk_EQ_MP th1 th2)
 71.1416 +	val _ = message "RESULT:"
 71.1417 +	val _ = if_debug pth res
 71.1418 +    in
 71.1419 +	(thy,res)
 71.1420 +    end
 71.1421 +
 71.1422 +fun mk_COMB th1 th2 sg =
 71.1423 +    let
 71.1424 +	val (f,g) = case concl_of th1 of
 71.1425 +			_ $ (Const("op =",_) $ f $ g) => (f,g)
 71.1426 +		      | _ => raise ERR "mk_COMB" "First theorem not an equality"
 71.1427 +	val (x,y) = case concl_of th2 of
 71.1428 +			_ $ (Const("op =",_) $ x $ y) => (x,y)
 71.1429 +		      | _ => raise ERR "mk_COMB" "Second theorem not an equality"
 71.1430 +	val fty = type_of f
 71.1431 +	val (fd,fr) = dom_rng fty
 71.1432 +	val comb_thm' = Drule.instantiate'
 71.1433 +			    [Some (ctyp_of sg fd),Some (ctyp_of sg fr)]
 71.1434 +			    [Some (cterm_of sg f),Some (cterm_of sg g),
 71.1435 +			     Some (cterm_of sg x),Some (cterm_of sg y)] comb_thm
 71.1436 +    in
 71.1437 +	[th1,th2] MRS comb_thm'
 71.1438 +    end
 71.1439 +
 71.1440 +fun SUBST rews ctxt hth thy =
 71.1441 +    let
 71.1442 +	val _ = message "SUBST:"
 71.1443 +	val _ = if_debug (app pth) rews
 71.1444 +	val _ = if_debug prin ctxt
 71.1445 +	val _ = if_debug pth hth
 71.1446 +	val (info,th) = disamb_thm hth
 71.1447 +	val (info1,ctxt') = disamb_term_from info ctxt
 71.1448 +	val (info2,rews') = disamb_thms_from info1 rews
 71.1449 +
 71.1450 +	val sg = sign_of thy
 71.1451 +	val cctxt = cterm_of sg ctxt'
 71.1452 +	fun subst th [] = th
 71.1453 +	  | subst th (rew::rews) = subst (mk_COMB th rew sg) rews
 71.1454 +	val res = HOLThm(rens_of info2,mk_EQ_MP (subst (mk_REFL cctxt) rews') th)
 71.1455 +	val _ = message "RESULT:"
 71.1456 +	val _ = if_debug pth res
 71.1457 +    in
 71.1458 +	(thy,res)
 71.1459 +    end
 71.1460 +
 71.1461 +fun DISJ_CASES hth hth1 hth2 thy =
 71.1462 +    let
 71.1463 +	val _ = message "DISJ_CASES:"
 71.1464 +	val _ = if_debug (app pth) [hth,hth1,hth2]
 71.1465 +	val (info,th) = disamb_thm hth
 71.1466 +	val (info1,th1) = disamb_thm_from info hth1
 71.1467 +	val (info2,th2) = disamb_thm_from info1 hth2
 71.1468 +	val sg = sign_of thy
 71.1469 +	val th1 = norm_hyps th1
 71.1470 +	val th2 = norm_hyps th2
 71.1471 +	val (l,r) = case concl_of th of
 71.1472 +			_ $ (Const("op |",_) $ l $ r) => (l,r)
 71.1473 +		      | _ => raise ERR "DISJ_CASES" "Conclusion not a disjunction"
 71.1474 +	val th1' = rearrange sg (HOLogic.mk_Trueprop l) th1
 71.1475 +	val th2' = rearrange sg (HOLogic.mk_Trueprop r) th2
 71.1476 +	val res1 = th RS disj_cases_thm
 71.1477 +	val res2 = uniq_compose ((nprems_of th1')-1) th1' ((nprems_of th)+1) res1
 71.1478 +	val res3 = uniq_compose ((nprems_of th2')-1) th2' (nprems_of res2) res2
 71.1479 +	val res  = HOLThm(rens_of info2,res3)
 71.1480 +	val _ = message "RESULT:"
 71.1481 +	val _ = if_debug pth res
 71.1482 +    in
 71.1483 +	(thy,res)
 71.1484 +    end
 71.1485 +
 71.1486 +fun DISJ1 hth tm thy =
 71.1487 +    let
 71.1488 +	val _ = message "DISJ1:"
 71.1489 +	val _ = if_debug pth hth
 71.1490 +	val _ = if_debug prin tm
 71.1491 +	val (info,th) = disamb_thm hth
 71.1492 +	val (info',tm') = disamb_term_from info tm
 71.1493 +	val sg = sign_of thy
 71.1494 +	val ct = Thm.cterm_of sg tm'
 71.1495 +	val disj1_thm' = Drule.instantiate' [] [None,Some ct] disj1_thm
 71.1496 +	val res = HOLThm(rens_of info',th RS disj1_thm')
 71.1497 +	val _ = message "RESULT:"
 71.1498 +	val _ = if_debug pth res
 71.1499 +    in
 71.1500 +	(thy,res)
 71.1501 +    end
 71.1502 +
 71.1503 +fun DISJ2 tm hth thy =
 71.1504 +    let
 71.1505 +	val _ = message "DISJ1:"
 71.1506 +	val _ = if_debug prin tm
 71.1507 +	val _ = if_debug pth hth
 71.1508 +	val (info,th) = disamb_thm hth
 71.1509 +	val (info',tm') = disamb_term_from info tm
 71.1510 +	val sg = sign_of thy
 71.1511 +	val ct = Thm.cterm_of sg tm'
 71.1512 +	val disj2_thm' = Drule.instantiate' [] [None,Some ct] disj2_thm
 71.1513 +	val res = HOLThm(rens_of info',th RS disj2_thm')
 71.1514 +	val _ = message "RESULT:"
 71.1515 +	val _ = if_debug pth res
 71.1516 +    in
 71.1517 +	(thy,res)
 71.1518 +    end
 71.1519 +
 71.1520 +fun IMP_ANTISYM hth1 hth2 thy =
 71.1521 +    let
 71.1522 +	val _ = message "IMP_ANTISYM:"
 71.1523 +	val _ = if_debug pth hth1
 71.1524 +	val _ = if_debug pth hth2
 71.1525 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1526 +	val th = [beta_eta_thm th1,beta_eta_thm th2] MRS imp_antisym_thm
 71.1527 +	val res = HOLThm(rens_of info,th)
 71.1528 +	val _ = message "RESULT:"
 71.1529 +	val _ = if_debug pth res
 71.1530 +    in
 71.1531 +	(thy,res)
 71.1532 +    end
 71.1533 +
 71.1534 +fun SYM (hth as HOLThm(rens,th)) thy =
 71.1535 +    let
 71.1536 +	val _ = message "SYM:"
 71.1537 +	val _ = if_debug pth hth
 71.1538 +	val th = th RS symmetry_thm
 71.1539 +	val res = HOLThm(rens,th)
 71.1540 +	val _ = message "RESULT:"
 71.1541 +	val _ = if_debug pth res
 71.1542 +    in
 71.1543 +	(thy,res)
 71.1544 +    end
 71.1545 +
 71.1546 +fun MP hth1 hth2 thy =
 71.1547 +    let
 71.1548 +	val _ = message "MP:"
 71.1549 +	val _ = if_debug pth hth1
 71.1550 +	val _ = if_debug pth hth2
 71.1551 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1552 +	val th = [beta_eta_thm th1,beta_eta_thm th2] MRS mp_thm
 71.1553 +	val res = HOLThm(rens_of info,th)
 71.1554 +	val _ = message "RESULT:"
 71.1555 +	val _ = if_debug pth res
 71.1556 +    in
 71.1557 +	(thy,res)
 71.1558 +    end
 71.1559 +
 71.1560 +fun CONJ hth1 hth2 thy =
 71.1561 +    let
 71.1562 +	val _ = message "CONJ:"
 71.1563 +	val _ = if_debug pth hth1
 71.1564 +	val _ = if_debug pth hth2
 71.1565 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1566 +	val th = [th1,th2] MRS conj_thm
 71.1567 +	val res = HOLThm(rens_of info,th)
 71.1568 +	val _ = message "RESULT:"
 71.1569 +	val _ = if_debug pth res
 71.1570 +    in
 71.1571 +	(thy,res)
 71.1572 +    end
 71.1573 +
 71.1574 +fun CONJUNCT1 (hth as HOLThm(rens,th)) thy =
 71.1575 +    let
 71.1576 +	val _ = message "CONJUNCT1:"
 71.1577 +	val _ = if_debug pth hth
 71.1578 +	val res = HOLThm(rens,th RS conjunct1_thm)
 71.1579 +	val _ = message "RESULT:"
 71.1580 +	val _ = if_debug pth res
 71.1581 +    in
 71.1582 +	(thy,res)
 71.1583 +    end
 71.1584 +
 71.1585 +fun CONJUNCT2 (hth as HOLThm(rens,th)) thy =
 71.1586 +    let
 71.1587 +	val _ = message "CONJUNCT1:"
 71.1588 +	val _ = if_debug pth hth
 71.1589 +	val res = HOLThm(rens,th RS conjunct2_thm)
 71.1590 +	val _ = message "RESULT:"
 71.1591 +	val _ = if_debug pth res
 71.1592 +    in
 71.1593 +	(thy,res)
 71.1594 +    end
 71.1595 +
 71.1596 +fun EXISTS ex wit hth thy =
 71.1597 +    let
 71.1598 +	val _ = message "EXISTS:"
 71.1599 +	val _ = if_debug prin ex
 71.1600 +	val _ = if_debug prin wit
 71.1601 +	val _ = if_debug pth hth
 71.1602 +	val (info,th) = disamb_thm hth
 71.1603 +	val (info',[ex',wit']) = disamb_terms_from info [ex,wit]
 71.1604 +	val sg = sign_of thy
 71.1605 +	val cwit = cterm_of sg wit'
 71.1606 +	val cty = ctyp_of_term cwit
 71.1607 +	val a = case ex' of
 71.1608 +		    (Const("Ex",_) $ a) => a
 71.1609 +		  | _ => raise ERR "EXISTS" "Argument not existential"
 71.1610 +	val ca = cterm_of sg a
 71.1611 +	val exists_thm' = beta_eta_thm (Drule.instantiate' [Some cty] [Some ca,Some cwit] exists_thm)
 71.1612 +	val th1 = beta_eta_thm th
 71.1613 +	val th2 = implies_elim_all th1
 71.1614 +	val th3 = th2 COMP exists_thm'
 71.1615 +	val th  = implies_intr_hyps th3
 71.1616 +	val res = HOLThm(rens_of info',th)
 71.1617 +	val _   = message "RESULT:"
 71.1618 +	val _   = if_debug pth res
 71.1619 +    in
 71.1620 +	(thy,res)
 71.1621 +    end
 71.1622 +
 71.1623 +fun CHOOSE v hth1 hth2 thy =
 71.1624 +    let
 71.1625 +	val _ = message "CHOOSE:"
 71.1626 +	val _ = if_debug prin v
 71.1627 +	val _ = if_debug pth hth1
 71.1628 +	val _ = if_debug pth hth2
 71.1629 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1630 +	val (info',v') = disamb_term_from info v
 71.1631 +	fun strip 0 _ th = th
 71.1632 +	  | strip n (p::ps) th =
 71.1633 +	    strip (n-1) ps (implies_elim th (assume p))
 71.1634 +	  | strip _ _ _ = raise ERR "CHOOSE" "strip error"
 71.1635 +	val sg = sign_of thy
 71.1636 +	val cv = cterm_of sg v'
 71.1637 +	val th2 = norm_hyps th2
 71.1638 +	val cvty = ctyp_of_term cv
 71.1639 +	val _$c = concl_of th2
 71.1640 +	val cc = cterm_of sg c
 71.1641 +	val a = case concl_of th1 of
 71.1642 +		    _ $ (Const("Ex",_) $ a) => a
 71.1643 +		  | _ => raise ERR "CHOOSE" "Conclusion not existential"
 71.1644 +	val ca = cterm_of (sign_of_thm th1) a
 71.1645 +	val choose_thm' = beta_eta_thm (Drule.instantiate' [Some cvty] [Some ca,Some cc] choose_thm)
 71.1646 +	val th21 = rearrange sg (HOLogic.mk_Trueprop (a $ v')) th2
 71.1647 +	val th22 = strip ((nprems_of th21)-1) (cprems_of th21) th21
 71.1648 +	val th23 = beta_eta_thm (forall_intr cv th22)
 71.1649 +	val th11 = implies_elim_all (beta_eta_thm th1)
 71.1650 +	val th' = th23 COMP (th11 COMP choose_thm')
 71.1651 +	val th = implies_intr_hyps th'
 71.1652 +	val res = HOLThm(rens_of info',th)
 71.1653 +	val _   = message "RESULT:"
 71.1654 +	val _   = if_debug pth res
 71.1655 +    in
 71.1656 +	(thy,res)
 71.1657 +    end
 71.1658 +
 71.1659 +fun GEN v hth thy =
 71.1660 +    let
 71.1661 +	val _ = message "GEN:"
 71.1662 +	val _ = if_debug prin v
 71.1663 +	val _ = if_debug pth hth
 71.1664 +	val (info,th) = disamb_thm hth
 71.1665 +	val (info',v') = disamb_term_from info v
 71.1666 +	val res = HOLThm(rens_of info',mk_GEN v' th (sign_of thy))
 71.1667 +	val _ = message "RESULT:"
 71.1668 +	val _ = if_debug pth res
 71.1669 +    in
 71.1670 +	(thy,res)
 71.1671 +    end
 71.1672 +
 71.1673 +fun SPEC tm hth thy =
 71.1674 +    let
 71.1675 +	val _ = message "SPEC:"
 71.1676 +	val _ = if_debug prin tm
 71.1677 +	val _ = if_debug pth hth
 71.1678 +	val (info,th) = disamb_thm hth
 71.1679 +	val (info',tm') = disamb_term_from info tm
 71.1680 +	val sg = sign_of thy
 71.1681 +	val ctm = Thm.cterm_of sg tm'
 71.1682 +	val cty = Thm.ctyp_of_term ctm
 71.1683 +	val spec' = Drule.instantiate' [Some cty] [None,Some ctm] spec_thm
 71.1684 +	val th = th RS spec'
 71.1685 +	val res = HOLThm(rens_of info',th)
 71.1686 +	val _ = message "RESULT:"
 71.1687 +	val _ = if_debug pth res
 71.1688 +    in
 71.1689 +	(thy,res)
 71.1690 +    end
 71.1691 +
 71.1692 +fun COMB hth1 hth2 thy =
 71.1693 +    let
 71.1694 +	val _ = message "COMB:"
 71.1695 +	val _ = if_debug pth hth1
 71.1696 +	val _ = if_debug pth hth2
 71.1697 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1698 +	val sg = sign_of thy
 71.1699 +	val res = HOLThm(rens_of info,mk_COMB th1 th2 sg)
 71.1700 +	val _ = message "RESULT:"
 71.1701 +	val _ = if_debug pth res
 71.1702 +    in
 71.1703 +	(thy,res)
 71.1704 +    end
 71.1705 +
 71.1706 +fun TRANS hth1 hth2 thy =
 71.1707 +    let
 71.1708 +	val _ = message "TRANS:"
 71.1709 +	val _ = if_debug pth hth1
 71.1710 +	val _ = if_debug pth hth2
 71.1711 +	val (info,[th1,th2]) = disamb_thms [hth1,hth2]
 71.1712 +	val th = [th1,th2] MRS trans_thm
 71.1713 +	val res = HOLThm(rens_of info,th)
 71.1714 +	val _ = message "RESULT:"
 71.1715 +	val _ = if_debug pth res
 71.1716 +    in
 71.1717 +	(thy,res)
 71.1718 +    end
 71.1719 +	
 71.1720 +
 71.1721 +fun CCONTR tm hth thy =
 71.1722 +    let
 71.1723 +	val _ = message "SPEC:"
 71.1724 +	val _ = if_debug prin tm
 71.1725 +	val _ = if_debug pth hth
 71.1726 +	val (info,th) = disamb_thm hth
 71.1727 +	val (info',tm') = disamb_term_from info tm
 71.1728 +	val th = norm_hyps th
 71.1729 +	val sg = sign_of thy
 71.1730 +	val ct = cterm_of sg tm'
 71.1731 +	val th1 = rearrange sg (HOLogic.mk_Trueprop (Const("Not",boolT-->boolT) $ tm')) th
 71.1732 +	val ccontr_thm' = Drule.instantiate' [] [Some ct] ccontr_thm
 71.1733 +	val res1 = uniq_compose ((nprems_of th1) - 1) th1 1 ccontr_thm'
 71.1734 +	val res = HOLThm(rens_of info',res1)
 71.1735 +	val _ = message "RESULT:"
 71.1736 +	val _ = if_debug pth res
 71.1737 +    in
 71.1738 +	(thy,res)
 71.1739 +    end
 71.1740 +
 71.1741 +fun mk_ABS v th sg =
 71.1742 +    let
 71.1743 +	val cv = cterm_of sg v
 71.1744 +	val th1 = implies_elim_all (beta_eta_thm th)
 71.1745 +	val (f,g) = case concl_of th1 of
 71.1746 +			_ $ (Const("op =",_) $ f $ g) => (Term.lambda v f,Term.lambda v g)
 71.1747 +		      | _ => raise ERR "mk_ABS" "Bad conclusion"
 71.1748 +	val (fd,fr) = dom_rng (type_of f)
 71.1749 +	val abs_thm' = Drule.instantiate' [Some (ctyp_of sg fd), Some (ctyp_of sg fr)] [Some (cterm_of sg f), Some (cterm_of sg g)] abs_thm
 71.1750 +	val th2 = forall_intr cv th1
 71.1751 +	val th3 = th2 COMP abs_thm'
 71.1752 +	val res = implies_intr_hyps th3
 71.1753 +    in
 71.1754 +	res
 71.1755 +    end
 71.1756 +
 71.1757 +fun ABS v hth thy =
 71.1758 +    let
 71.1759 +	val _ = message "ABS:"
 71.1760 +	val _ = if_debug prin v
 71.1761 +	val _ = if_debug pth hth
 71.1762 +	val (info,th) = disamb_thm hth
 71.1763 +	val (info',v') = disamb_term_from info v
 71.1764 +	val sg = sign_of thy
 71.1765 +	val res = HOLThm(rens_of info',mk_ABS v' th sg)
 71.1766 +	val _ = message "RESULT:"
 71.1767 +	val _ = if_debug pth res
 71.1768 +    in
 71.1769 +	(thy,res)
 71.1770 +    end
 71.1771 +
 71.1772 +fun GEN_ABS copt vlist hth thy =
 71.1773 +    let
 71.1774 +	val _ = message "GEN_ABS:"
 71.1775 +	val _ = case copt of
 71.1776 +		    Some c => if_debug prin c
 71.1777 +		  | None => ()
 71.1778 +	val _ = if_debug (app prin) vlist
 71.1779 +	val _ = if_debug pth hth
 71.1780 +	val (info,th) = disamb_thm hth
 71.1781 +	val (info',vlist') = disamb_terms_from info vlist
 71.1782 +	val sg = sign_of thy
 71.1783 +	val th1 =
 71.1784 +	    case copt of
 71.1785 +		Some (c as Const(cname,cty)) =>
 71.1786 +		let
 71.1787 +		    fun inst_type ty1 ty2 (TVar _) = raise ERR "GEN_ABS" "Type variable found!"
 71.1788 +		      | inst_type ty1 ty2 (ty as TFree _) = if ty1 = ty
 71.1789 +							    then ty2
 71.1790 +							    else ty
 71.1791 +		      | inst_type ty1 ty2 (ty as Type(name,tys)) =
 71.1792 +			Type(name,map (inst_type ty1 ty2) tys)
 71.1793 +		in
 71.1794 +		    foldr (fn (v,th) =>
 71.1795 +			      let
 71.1796 +				  val cdom = fst (dom_rng (fst (dom_rng cty)))
 71.1797 +				  val vty  = type_of v
 71.1798 +				  val newcty = inst_type cdom vty cty
 71.1799 +				  val cc = cterm_of sg (Const(cname,newcty))
 71.1800 +			      in
 71.1801 +				  mk_COMB (mk_REFL cc) (mk_ABS v th sg) sg
 71.1802 +			      end) (vlist',th)
 71.1803 +		end
 71.1804 +	      | Some _ => raise ERR "GEN_ABS" "Bad constant"
 71.1805 +	      | None => 
 71.1806 +		foldr (fn (v,th) => mk_ABS v th sg) (vlist',th)
 71.1807 +	val res = HOLThm(rens_of info',th1)
 71.1808 +	val _ = message "RESULT:"
 71.1809 +	val _ = if_debug pth res
 71.1810 +    in
 71.1811 +	(thy,res)
 71.1812 +    end
 71.1813 +
 71.1814 +fun NOT_INTRO (hth as HOLThm(rens,th)) thy =
 71.1815 +    let
 71.1816 +	val _ = message "NOT_INTRO:"
 71.1817 +	val _ = if_debug pth hth
 71.1818 +	val sg = sign_of thy
 71.1819 +	val th1 = implies_elim_all (beta_eta_thm th)
 71.1820 +	val a = case concl_of th1 of
 71.1821 +		    _ $ (Const("op -->",_) $ a $ Const("False",_)) => a
 71.1822 +		  | _ => raise ERR "NOT_INTRO" "Conclusion of bad form"
 71.1823 +	val ca = cterm_of sg a
 71.1824 +	val th2 = equal_elim (Drule.instantiate' [] [Some ca] not_intro_thm) th1
 71.1825 +	val res = HOLThm(rens,implies_intr_hyps th2)
 71.1826 +	val _ = message "RESULT:"
 71.1827 +	val _ = if_debug pth res
 71.1828 +    in
 71.1829 +	(thy,res)
 71.1830 +    end
 71.1831 +
 71.1832 +fun NOT_ELIM (hth as HOLThm(rens,th)) thy =
 71.1833 +    let
 71.1834 +	val _ = message "NOT_INTRO:"
 71.1835 +	val _ = if_debug pth hth
 71.1836 +	val sg = sign_of thy
 71.1837 +	val th1 = implies_elim_all (beta_eta_thm th)
 71.1838 +	val a = case concl_of th1 of
 71.1839 +		    _ $ (Const("Not",_) $ a) => a
 71.1840 +		  | _ => raise ERR "NOT_ELIM" "Conclusion of bad form"
 71.1841 +	val ca = cterm_of sg a
 71.1842 +	val th2 = equal_elim (Drule.instantiate' [] [Some ca] not_elim_thm) th1
 71.1843 +	val res = HOLThm(rens,implies_intr_hyps th2)
 71.1844 +	val _ = message "RESULT:"
 71.1845 +	val _ = if_debug pth res
 71.1846 +    in
 71.1847 +	(thy,res)
 71.1848 +    end
 71.1849 +
 71.1850 +fun DISCH tm hth thy =
 71.1851 +    let
 71.1852 +	val _ = message "DISCH:"
 71.1853 +	val _ = if_debug prin tm
 71.1854 +	val _ = if_debug pth hth
 71.1855 +	val (info,th) = disamb_thm hth
 71.1856 +	val (info',tm') = disamb_term_from info tm
 71.1857 +	val prems = prems_of th
 71.1858 +	val sg = sign_of thy
 71.1859 +	val th1 = beta_eta_thm th
 71.1860 +	val th2 = implies_elim_all th1
 71.1861 +	val th3 = implies_intr (cterm_of sg (HOLogic.mk_Trueprop tm')) th2
 71.1862 +	val th4 = th3 COMP disch_thm
 71.1863 +	val res = HOLThm(rens_of info',implies_intr_hyps th4)
 71.1864 +	val _ = message "RESULT:"
 71.1865 +	val _ = if_debug pth res
 71.1866 +    in
 71.1867 +	(thy,res)
 71.1868 +    end
 71.1869 +
 71.1870 +val spaces = String.concat o separate " "
 71.1871 +
 71.1872 +fun new_definition thyname constname rhs thy =
 71.1873 +    let
 71.1874 +	val constname = rename_const thyname thy constname
 71.1875 +	val _ = warning ("Introducing constant " ^ constname)
 71.1876 +	val (thmname,thy) = get_defname thyname constname thy
 71.1877 +	val (info,rhs') = disamb_term rhs
 71.1878 +	val ctype = type_of rhs'
 71.1879 +	val csyn = mk_syn constname
 71.1880 +	val thy1 = case HOL4DefThy.get thy of
 71.1881 +		       Replaying _ => thy
 71.1882 +		     | _ => Theory.add_consts_i [(constname,ctype,csyn)] thy
 71.1883 +	val eq = mk_defeq constname rhs' thy1
 71.1884 +	val (thy2,thms) = PureThy.add_defs_i false [((thmname,eq),[])] thy1
 71.1885 +	val def_thm = hd thms
 71.1886 +	val thm' = def_thm RS meta_eq_to_obj_eq_thm
 71.1887 +	val (thy',th) = (thy2, thm')
 71.1888 +	val fullcname = Sign.intern_const (sign_of thy') constname
 71.1889 +	val thy'' = add_hol4_const_mapping thyname constname true fullcname thy'
 71.1890 +	val (linfo,tm24) = disamb_term (mk_teq constname rhs' thy'')
 71.1891 +	val sg = sign_of thy''
 71.1892 +	val rew = rewrite_hol4_term eq thy''
 71.1893 +	val crhs = cterm_of sg (#2 (Logic.dest_equals (prop_of rew)))
 71.1894 +	val thy22 = if (def_name constname) = thmname
 71.1895 +		    then
 71.1896 +			add_dump ("constdefs\n  " ^ (quotename constname) ^ " :: \"" ^ (string_of_ctyp (ctyp_of sg ctype)) ^ "\" " ^ (Syntax.string_of_mixfix csyn) ^ "\n  " ^ (smart_string_of_cterm crhs)) thy''
 71.1897 +		    else
 71.1898 +			add_dump ("consts\n  " ^ (quotename constname) ^ " :: \"" ^ (string_of_ctyp (ctyp_of sg ctype)) ^
 71.1899 +				  "\" " ^ (Syntax.string_of_mixfix csyn) ^ "\n\ndefs\n  " ^ (quotename thmname) ^ ": " ^ (smart_string_of_cterm crhs))
 71.1900 +				 thy''
 71.1901 +
 71.1902 +	val hth = case Shuffler.set_prop thy22 (HOLogic.mk_Trueprop tm24) [("",th)] of
 71.1903 +		     Some (_,res) => HOLThm(rens_of linfo,res)
 71.1904 +		   | None => raise ERR "new_definition" "Bad conclusion"
 71.1905 +	val fullname = Sign.full_name sg thmname
 71.1906 +	val thy22' = case opt_get_output_thy thy22 of
 71.1907 +			 "" => add_hol4_mapping thyname thmname fullname thy22
 71.1908 +		       | output_thy =>
 71.1909 +			 let
 71.1910 +			     val moved_thmname = output_thy ^ "." ^ thyname ^ "." ^ thmname
 71.1911 +			 in
 71.1912 +			     thy22 |> add_hol4_move fullname moved_thmname
 71.1913 +				   |> add_hol4_mapping thyname thmname moved_thmname
 71.1914 +			 end
 71.1915 +	val _ = message "new_definition:"
 71.1916 +	val _ = if_debug pth hth
 71.1917 +    in
 71.1918 +	(thy22',hth)
 71.1919 +    end
 71.1920 +    handle e => (message "exception in new_definition"; print_exn e)
 71.1921 +
 71.1922 +val commafy = String.concat o separate ", "
 71.1923 +
 71.1924 +local
 71.1925 +    val helper = thm "termspec_help"
 71.1926 +in
 71.1927 +fun new_specification thyname thmname names hth thy =
 71.1928 +    case HOL4DefThy.get thy of
 71.1929 +	Replaying _ => (thy,hth)
 71.1930 +      | _ => 
 71.1931 +	let
 71.1932 +	    val _ = message "NEW_SPEC:"
 71.1933 +	    val _ = if_debug pth hth
 71.1934 +	    val names = map (rename_const thyname thy) names
 71.1935 +	    val _ = warning ("Introducing constants " ^ (commafy names))
 71.1936 +	    val (HOLThm(rens,th)) = norm_hthm (sign_of thy) hth
 71.1937 +	    val thy1 = case HOL4DefThy.get thy of
 71.1938 +			   Replaying _ => thy
 71.1939 +			 | _ =>
 71.1940 +			   let
 71.1941 +			       fun dest_eta_abs (Abs(x,xT,body)) = (x,xT,body)
 71.1942 +				 | dest_eta_abs body =
 71.1943 +				   let
 71.1944 +				       val (dT,rT) = dom_rng (type_of body)
 71.1945 +				   in
 71.1946 +				       ("x",dT,body $ Bound 0)
 71.1947 +				   end
 71.1948 +				   handle TYPE _ => raise ERR "new_specification" "not an abstraction type"
 71.1949 +			       fun dest_exists (Const("Ex",_) $ abody) =
 71.1950 +				   dest_eta_abs abody
 71.1951 +				 | dest_exists tm =
 71.1952 +				   raise ERR "new_specification" "Bad existential formula"
 71.1953 +					 
 71.1954 +			       val (consts,_) = foldl (fn ((cs,ex),cname) =>
 71.1955 +							  let
 71.1956 +							      val (_,cT,p) = dest_exists ex
 71.1957 +							  in
 71.1958 +							      ((cname,cT,mk_syn cname)::cs,p)
 71.1959 +							  end) (([],HOLogic.dest_Trueprop (concl_of th)),names)
 71.1960 +			       val sg = sign_of thy
 71.1961 +			       val str = foldl (fn (acc,(c,T,csyn)) =>
 71.1962 +						   acc ^ "\n  " ^ (quotename c) ^ " :: \"" ^ (string_of_ctyp (ctyp_of sg T)) ^ "\" " ^ (Syntax.string_of_mixfix csyn)) ("consts",consts)
 71.1963 +			       val thy' = add_dump str thy
 71.1964 +			   in
 71.1965 +			       Theory.add_consts_i consts thy'
 71.1966 +			   end
 71.1967 +
 71.1968 +	    val thy1 = foldr (fn(name,thy)=>
 71.1969 +				snd (get_defname thyname name thy)) (names,thy1)
 71.1970 +	    fun new_name name = fst (get_defname thyname name thy1)
 71.1971 +	    val (thy',res) = SpecificationPackage.add_specification_i None
 71.1972 +				 (map (fn name => (new_name name,name,false)) names)
 71.1973 +				 (thy1,th)
 71.1974 +	    val res' = Drule.freeze_all res
 71.1975 +	    val hth = HOLThm(rens,res')
 71.1976 +	    val rew = rewrite_hol4_term (concl_of res') thy'
 71.1977 +	    val th  = equal_elim rew res'
 71.1978 +	    fun handle_const (name,thy) =
 71.1979 +		let
 71.1980 +		    val defname = def_name name
 71.1981 +		    val (newname,thy') = get_defname thyname name thy
 71.1982 +		in
 71.1983 +		    (if defname = newname
 71.1984 +		     then quotename name
 71.1985 +		     else (quotename newname) ^ ": " ^ (quotename name),thy')
 71.1986 +		end
 71.1987 +	    val (new_names,thy') = foldr (fn(name,(names,thy)) =>
 71.1988 +					    let
 71.1989 +						val (name',thy') = handle_const (name,thy)
 71.1990 +					    in
 71.1991 +						(name'::names,thy')
 71.1992 +					    end) (names,([],thy'))
 71.1993 +	    val thy'' = add_dump ("specification (" ^ (spaces new_names) ^ ") " ^ thmname ^ ": " ^ (smart_string_of_thm th) ^
 71.1994 +				  "\n  by (import " ^ thyname ^ " " ^ thmname ^ ")")
 71.1995 +				 thy'
 71.1996 +	    val _ = message "RESULT:"
 71.1997 +	    val _ = if_debug pth hth
 71.1998 +	in
 71.1999 +	    intern_store_thm false thyname thmname hth thy''
 71.2000 +	end
 71.2001 +	handle e => (message "exception in new_specification"; print_exn e)
 71.2002 +		    
 71.2003 +end
 71.2004 +			   
 71.2005 +fun new_axiom name tm thy = raise ERR "new_axiom" ("Oh, no you don't! (" ^ name ^ ")")
 71.2006 +				      
 71.2007 +fun to_isa_thm (hth as HOLThm(_,th)) =
 71.2008 +    let
 71.2009 +	val (HOLThm args) = norm_hthm (sign_of_thm th) hth
 71.2010 +    in
 71.2011 +	apsnd strip_shyps args
 71.2012 +    end
 71.2013 +
 71.2014 +fun to_isa_term tm = tm
 71.2015 +
 71.2016 +local
 71.2017 +    val light_nonempty = thm "light_ex_imp_nonempty"
 71.2018 +    val ex_imp_nonempty = thm "ex_imp_nonempty"
 71.2019 +    val typedef_hol2hol4 = thm "typedef_hol2hol4"
 71.2020 +    val typedef_hol2hollight = thm "typedef_hol2hollight"
 71.2021 +in
 71.2022 +fun new_type_definition thyname thmname tycname hth thy =
 71.2023 +    case HOL4DefThy.get thy of
 71.2024 +	Replaying _ => (thy,hth)
 71.2025 +      | _ => 
 71.2026 +	let
 71.2027 +	    val _ = message "TYPE_DEF:"
 71.2028 +	    val _ = if_debug pth hth
 71.2029 +	    val _ = warning ("Introducing type " ^ tycname)
 71.2030 +	    val (HOLThm(rens,td_th)) = norm_hthm (sign_of thy) hth
 71.2031 +	    val th2 = beta_eta_thm (td_th RS ex_imp_nonempty)
 71.2032 +	    val c = case concl_of th2 of
 71.2033 +			_ $ (Const("Ex",_) $ Abs(_,_,Const("op :",_) $ _ $ c)) => c
 71.2034 +		      | _ => raise ERR "new_type_definition" "Bad type definition theorem"
 71.2035 +	    val tfrees = term_tfrees c
 71.2036 +	    val tnames = map fst tfrees
 71.2037 +	    val tsyn = mk_syn tycname
 71.2038 +	    val typ = (tycname,tnames,tsyn)
 71.2039 +	    val (thy',typedef_info) = TypedefPackage.add_typedef_i false (Some thmname) typ c None (rtac th2 1) thy
 71.2040 +				      
 71.2041 +	    val th3 = (#type_definition typedef_info) RS typedef_hol2hol4
 71.2042 +
 71.2043 +	    val fulltyname = Sign.intern_tycon (sign_of thy') tycname
 71.2044 +	    val thy'' = add_hol4_type_mapping thyname tycname true fulltyname thy'
 71.2045 +
 71.2046 +	    val sg = sign_of thy''
 71.2047 +	    val (hth' as HOLThm args) = norm_hthm sg (HOLThm(rens,th3))
 71.2048 +	    val _ = if has_ren hth' then warning ("Theorem " ^ thmname ^ " needs variable-disambiguating")
 71.2049 +		    else ()
 71.2050 +	    val thy4 = add_hol4_pending thyname thmname args thy''
 71.2051 +
 71.2052 +	    val sg = sign_of thy4
 71.2053 +	    val rew = rewrite_hol4_term (concl_of td_th) thy4
 71.2054 +	    val th  = equal_elim rew (transfer_sg sg td_th)
 71.2055 +	    val c   = case HOLogic.dest_Trueprop (prop_of th) of
 71.2056 +			  Const("Ex",exT) $ P =>
 71.2057 +			  let
 71.2058 +			      val PT = domain_type exT
 71.2059 +			  in
 71.2060 +			      Const("Collect",PT-->HOLogic.mk_setT (domain_type PT)) $ P
 71.2061 +			  end
 71.2062 +			| _ => error "Internal error in ProofKernel.new_typedefinition"
 71.2063 +	    val tnames_string = if null tnames
 71.2064 +				then ""
 71.2065 +				else "(" ^ (commafy tnames) ^ ") "
 71.2066 +	    val proc_prop = if null tnames
 71.2067 +			    then smart_string_of_cterm
 71.2068 +			    else Library.setmp show_all_types true smart_string_of_cterm
 71.2069 +	    val thy5 = add_dump ("typedef (open) " ^ tnames_string ^ (quotename tycname) ^ " = " ^ (proc_prop (cterm_of sg c)) ^ " " ^ (Syntax.string_of_mixfix tsyn) ^ "\n  by (rule typedef_helper,import " ^ thyname ^ " " ^ thmname ^ ")") thy4
 71.2070 +	    val thy6 = add_dump ("lemmas " ^ thmname ^ " = typedef_hol2hol4 [OF type_definition_" ^ tycname ^ "]")
 71.2071 +		       thy5
 71.2072 +	    val _ = message "RESULT:"
 71.2073 +	    val _ = if_debug pth hth'
 71.2074 +	in
 71.2075 +	    (thy6,hth')
 71.2076 +	end
 71.2077 +	handle e => (message "exception in new_type_definition"; print_exn e)
 71.2078 +
 71.2079 +fun type_introduction thyname thmname tycname abs_name rep_name (P,t) hth thy =
 71.2080 +    case HOL4DefThy.get thy of
 71.2081 +	Replaying _ => (thy,hth)
 71.2082 +      | _ => 
 71.2083 +	let
 71.2084 +	    val _ = message "TYPE_INTRO:"
 71.2085 +	    val _ = if_debug pth hth
 71.2086 +	    val _ = warning ("Introducing type " ^ tycname ^ " (with morphisms " ^ abs_name ^ " and " ^ rep_name ^ ")")
 71.2087 +	    val (HOLThm(rens,td_th)) = norm_hthm (sign_of thy) hth
 71.2088 +	    val sg = sign_of thy
 71.2089 +	    val tT = type_of t
 71.2090 +	    val light_nonempty' =
 71.2091 +		Drule.instantiate' [Some (ctyp_of sg tT)]
 71.2092 +				   [Some (cterm_of sg P),
 71.2093 +				    Some (cterm_of sg t)] light_nonempty
 71.2094 +	    val th2 = beta_eta_thm (td_th RS (beta_eta_thm light_nonempty'))
 71.2095 +	    val c = case concl_of th2 of
 71.2096 +			_ $ (Const("Ex",_) $ Abs(_,_,Const("op :",_) $ _ $ c)) => c
 71.2097 +		      | _ => raise ERR "type_introduction" "Bad type definition theorem"
 71.2098 +	    val tfrees = term_tfrees c
 71.2099 +	    val tnames = map fst tfrees
 71.2100 +	    val tsyn = mk_syn tycname
 71.2101 +	    val typ = (tycname,tnames,tsyn)
 71.2102 +	    val (thy',typedef_info) = TypedefPackage.add_typedef_i false (Some thmname) typ c (Some(rep_name,abs_name)) (rtac th2 1) thy
 71.2103 +				      
 71.2104 +	    val th3 = (#type_definition typedef_info) RS typedef_hol2hollight
 71.2105 +
 71.2106 +	    val th4 = Drule.freeze_all th3
 71.2107 +	    val fulltyname = Sign.intern_tycon (sign_of thy') tycname
 71.2108 +	    val thy'' = add_hol4_type_mapping thyname tycname true fulltyname thy'
 71.2109 +
 71.2110 +	    val sg = sign_of thy''
 71.2111 +	    val (hth' as HOLThm args) = norm_hthm sg (HOLThm(rens,th4))
 71.2112 +	    val _ = if #maxidx (rep_thm th4) <> ~1
 71.2113 +		    then (Library.setmp show_types true pth hth' ; error "SCHEME!")
 71.2114 +		    else ()
 71.2115 +	    val _ = if has_ren hth' then warning ("Theorem " ^ thmname ^ " needs variable-disambiguating")
 71.2116 +		    else ()
 71.2117 +	    val thy4 = add_hol4_pending thyname thmname args thy''
 71.2118 +
 71.2119 +	    val sg = sign_of thy4
 71.2120 +	    val P' = #2 (Logic.dest_equals (concl_of (rewrite_hol4_term P thy4)))
 71.2121 +	    val c   =
 71.2122 +		let
 71.2123 +		    val PT = type_of P'
 71.2124 +		in
 71.2125 +		    Const("Collect",PT-->HOLogic.mk_setT (domain_type PT)) $ P'
 71.2126 +		end
 71.2127 +
 71.2128 +	    val tnames_string = if null tnames
 71.2129 +				then ""
 71.2130 +				else "(" ^ (commafy tnames) ^ ") "
 71.2131 +	    val proc_prop = if null tnames
 71.2132 +			    then smart_string_of_cterm
 71.2133 +			    else Library.setmp show_all_types true smart_string_of_cterm
 71.2134 +	    val thy5 = add_dump ("typedef (open) " ^ tnames_string ^ (quotename tycname) ^ " = " ^ (proc_prop (cterm_of sg c)) ^ " " ^ (Syntax.string_of_mixfix tsyn) ^ "\n  by (rule light_ex_imp_nonempty,import " ^ thyname ^ " " ^ thmname ^ ")") thy4
 71.2135 +	    val thy6 = add_dump ("lemmas " ^ thmname ^ " = typedef_hol2hollight [OF type_definition_" ^ tycname ^ "]")
 71.2136 +		       thy5
 71.2137 +	    val _ = message "RESULT:"
 71.2138 +	    val _ = if_debug pth hth'
 71.2139 +	in
 71.2140 +	    (thy6,hth')
 71.2141 +	end
 71.2142 +	handle e => (message "exception in type_introduction"; print_exn e)
 71.2143 +end
 71.2144 +
 71.2145 +end
    72.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2 +++ b/src/HOL/Import/replay.ML	Fri Apr 02 17:37:45 2004 +0200
    72.3 @@ -0,0 +1,333 @@
    72.4 +structure Replay =
    72.5 +struct
    72.6 +
    72.7 +structure P = ProofKernel
    72.8 +
    72.9 +open ProofKernel
   72.10 +
   72.11 +exception REPLAY of string * string
   72.12 +fun ERR f mesg = REPLAY (f,mesg)
   72.13 +fun NY f = raise ERR f "NOT YET!"
   72.14 +
   72.15 +fun replay_proof int_thms thyname thmname prf thy =
   72.16 +    let
   72.17 +	fun rp (PRefl tm) thy = P.REFL tm thy
   72.18 +	  | rp (PInstT(p,lambda)) thy =
   72.19 +	    let
   72.20 +		val (thy',th) = rp' p thy
   72.21 +	    in
   72.22 +		P.INST_TYPE lambda th thy'
   72.23 +	    end
   72.24 +	  | rp (PSubst(prfs,ctxt,prf)) thy =
   72.25 +	    let
   72.26 +		val (thy',ths) = foldr (fn (p,(thy,ths)) =>
   72.27 +					   let
   72.28 +					       val (thy',th) = rp' p thy
   72.29 +					   in
   72.30 +					       (thy',th::ths)
   72.31 +					   end) (prfs,(thy,[]))
   72.32 +		val (thy'',th) = rp' prf thy'
   72.33 +	    in
   72.34 +		P.SUBST ths ctxt th thy''
   72.35 +	    end
   72.36 +	  | rp (PAbs(prf,v)) thy =
   72.37 +	    let
   72.38 +		val (thy',th) = rp' prf thy
   72.39 +	    in
   72.40 +		P.ABS v th thy'
   72.41 +	    end
   72.42 +	  | rp (PDisch(prf,tm)) thy =
   72.43 +	    let
   72.44 +		val (thy',th) = rp' prf thy
   72.45 +	    in
   72.46 +		P.DISCH tm th thy'
   72.47 +	    end
   72.48 +	  | rp (PMp(prf1,prf2)) thy =
   72.49 +	    let
   72.50 +		val (thy1,th1) = rp' prf1 thy
   72.51 +		val (thy2,th2) = rp' prf2 thy1
   72.52 +	    in
   72.53 +		P.MP th1 th2 thy2
   72.54 +	    end
   72.55 +	  | rp (PHyp tm) thy = P.ASSUME tm thy
   72.56 +	  | rp (PDef(seg,name,rhs)) thy =
   72.57 +	    (case P.get_def seg name rhs thy of
   72.58 +		 (thy',Some res) => (thy',res)
   72.59 +	       | (thy',None) => 
   72.60 +		 if seg = thyname
   72.61 +		 then P.new_definition seg name rhs thy'
   72.62 +		 else raise ERR "replay_proof" "Too late for term definition")
   72.63 +	  | rp (POracle(tg,asl,c)) thy = (*P.mk_oracle_thm tg (map be_contract asl,c)*) NY "ORACLE"
   72.64 +	  | rp (PSpec(prf,tm)) thy =
   72.65 +	    let
   72.66 +		val (thy',th) = rp' prf thy
   72.67 +	    in
   72.68 +		P.SPEC tm th thy'
   72.69 +	    end
   72.70 +	  | rp (PInst(prf,theta)) thy =
   72.71 +	    let
   72.72 +		val (thy',th) = rp' prf thy
   72.73 +	    in
   72.74 +		P.INST theta th thy'
   72.75 +	    end
   72.76 +	  | rp (PGen(prf,v)) thy =
   72.77 +	    let
   72.78 +		val (thy',th) = rp' prf thy
   72.79 +	    in
   72.80 +		P.GEN v th thy'
   72.81 +	    end
   72.82 +	  | rp (PGenAbs(prf,opt,vl)) thy =
   72.83 +	    let
   72.84 +		val (thy',th) = rp' prf thy
   72.85 +	    in
   72.86 +		P.GEN_ABS opt vl th thy'
   72.87 +	    end
   72.88 +	  | rp (PImpAS(prf1,prf2)) thy =
   72.89 +	    let
   72.90 +		val (thy1,th1) = rp' prf1 thy
   72.91 +		val (thy2,th2) = rp' prf2 thy1
   72.92 +	    in
   72.93 +		P.IMP_ANTISYM th1 th2 thy2
   72.94 +	    end
   72.95 +	  | rp (PSym prf) thy =
   72.96 +	    let
   72.97 +		val (thy1,th) = rp' prf thy
   72.98 +	    in
   72.99 +		P.SYM th thy1
  72.100 +	    end
  72.101 +	  | rp (PTrans(prf1,prf2)) thy =
  72.102 +	    let
  72.103 +		val (thy1,th1) = rp' prf1 thy
  72.104 +		val (thy2,th2) = rp' prf2 thy1
  72.105 +	    in
  72.106 +		P.TRANS th1 th2 thy2
  72.107 +	    end
  72.108 +	  | rp (PComb(prf1,prf2)) thy =
  72.109 +	    let
  72.110 +		val (thy1,th1) = rp' prf1 thy
  72.111 +		val (thy2,th2) = rp' prf2 thy1
  72.112 +	    in
  72.113 +		P.COMB th1 th2 thy2
  72.114 +	    end
  72.115 +	  | rp (PEqMp(prf1,prf2)) thy =
  72.116 +	    let
  72.117 +		val (thy1,th1) = rp' prf1 thy
  72.118 +		val (thy2,th2) = rp' prf2 thy1
  72.119 +	    in
  72.120 +		P.EQ_MP th1 th2 thy2
  72.121 +	    end
  72.122 +	  | rp (PEqImp prf) thy =
  72.123 +	    let
  72.124 +		val (thy',th) = rp' prf thy
  72.125 +	    in
  72.126 +		P.EQ_IMP_RULE th thy'
  72.127 +	    end
  72.128 +	  | rp (PExists(prf,ex,wit)) thy =
  72.129 +	    let
  72.130 +		val (thy',th) = rp' prf thy
  72.131 +	    in
  72.132 +		P.EXISTS ex wit th thy'
  72.133 +	    end
  72.134 +	  | rp (PChoose(v,prf1,prf2)) thy =
  72.135 +	    let
  72.136 +		val (thy1,th1) = rp' prf1 thy
  72.137 +		val (thy2,th2) = rp' prf2 thy1
  72.138 +	    in
  72.139 +		P.CHOOSE v th1 th2 thy2
  72.140 +	    end
  72.141 +	  | rp (PConj(prf1,prf2)) thy =
  72.142 +	    let
  72.143 +		val (thy1,th1) = rp' prf1 thy
  72.144 +		val (thy2,th2) = rp' prf2 thy1
  72.145 +	    in
  72.146 +		P.CONJ th1 th2 thy2
  72.147 +	    end
  72.148 +	  | rp (PConjunct1 prf) thy =
  72.149 +	    let
  72.150 +		val (thy',th) = rp' prf thy
  72.151 +	    in
  72.152 +		P.CONJUNCT1 th thy'
  72.153 +	    end
  72.154 +	  | rp (PConjunct2 prf) thy =
  72.155 +	    let
  72.156 +		val (thy',th) = rp' prf thy
  72.157 +	    in
  72.158 +		P.CONJUNCT2 th thy'
  72.159 +	    end
  72.160 +	  | rp (PDisj1(prf,tm)) thy =
  72.161 +	    let
  72.162 +		val (thy',th) = rp' prf thy
  72.163 +	    in
  72.164 +		P.DISJ1 th tm thy'
  72.165 +	    end
  72.166 +	  | rp (PDisj2(prf,tm)) thy =
  72.167 +	    let
  72.168 +		val (thy',th) = rp' prf thy
  72.169 +	    in
  72.170 +		P.DISJ2 tm th thy'
  72.171 +	    end
  72.172 +	  | rp (PDisjCases(prf,prf1,prf2)) thy =
  72.173 +	    let
  72.174 +		val (thy',th)  = rp' prf  thy
  72.175 +		val (thy1,th1) = rp' prf1 thy'
  72.176 +		val (thy2,th2) = rp' prf2 thy1
  72.177 +	    in
  72.178 +		P.DISJ_CASES th th1 th2 thy2
  72.179 +	    end
  72.180 +	  | rp (PNotI prf) thy =
  72.181 +	    let
  72.182 +		val (thy',th) = rp' prf thy
  72.183 +	    in
  72.184 +		P.NOT_INTRO th thy'
  72.185 +	    end
  72.186 +	  | rp (PNotE prf) thy =
  72.187 +	    let
  72.188 +		val (thy',th) = rp' prf thy
  72.189 +	    in
  72.190 +		P.NOT_ELIM th thy'
  72.191 +	    end
  72.192 +	  | rp (PContr(prf,tm)) thy =
  72.193 +	    let
  72.194 +		val (thy',th) = rp' prf thy
  72.195 +	    in
  72.196 +		P.CCONTR tm th thy'
  72.197 +	    end
  72.198 +	  | rp (PTmSpec _) _ = raise ERR "rp" "Shouldn't reach here (PTmSpec)"
  72.199 +	  | rp (PTyDef _) _ = raise ERR "rp" "Shouldn't reach here (PTyDef)"
  72.200 +	  | rp (PTyIntro _) _ = raise ERR "rp" "Shouldn't reach here (PTyIntro)"
  72.201 +	  | rp PDisk _ = raise ERR "rp" "Shouldn't reach here (PDisk)"
  72.202 +	  | rp _ _ = raise ERR "rp" "What the hell is this? Which case did I forget?"
  72.203 +	and rp' p thy =
  72.204 +	    let
  72.205 +		val pc = content_of p
  72.206 +	    in
  72.207 +		case pc of
  72.208 +		    PDisk => (case disk_info_of p of
  72.209 +				  Some(thyname',thmname) =>
  72.210 +				  (case Int.fromString thmname of
  72.211 +				       SOME i =>
  72.212 +				       if thyname' = thyname
  72.213 +				       then
  72.214 +					   (case Array.sub(int_thms,i-1) of
  72.215 +						None =>
  72.216 +						let
  72.217 +						    val (thy',th) = rp' (snd (import_proof thyname' thmname thy) thy) thy
  72.218 +						    val _ = Array.update(int_thms,i-1,Some th)
  72.219 +						in
  72.220 +						    (thy',th)
  72.221 +						end
  72.222 +					      | Some th => (thy,th))
  72.223 +				       else raise ERR "replay_proof" ("Library " ^ thyname' ^ " should be built before " ^ thyname ^ " (" ^ thmname ^ ")")
  72.224 +				     | NONE => 
  72.225 +				       (case P.get_thm thyname' thmname thy of
  72.226 +					    (thy',Some res) => (thy',res)
  72.227 +					  | (thy',None) => 
  72.228 +					    if thyname' = thyname
  72.229 +					    then
  72.230 +						let
  72.231 +						    val _ = writeln ("Found no " ^ thmname ^ " theorem, replaying...")
  72.232 +						    val (f_opt,prf) = import_proof thyname' thmname thy'
  72.233 +						    val prf = prf thy'
  72.234 +						    val (thy',th) = replay_proof int_thms thyname' thmname prf thy'
  72.235 +						in
  72.236 +						    case content_of prf of
  72.237 +							PTmSpec _ => (thy',th)
  72.238 +						      | PTyDef  _ => (thy',th)
  72.239 +						      | PTyIntro _ => (thy',th)
  72.240 +						      | _ => P.store_thm thyname' thmname th thy'
  72.241 +						end
  72.242 +					    else raise ERR "replay_proof" ("Library " ^ thyname' ^ " should be built before " ^ thyname ^ " (" ^ thmname ^ ")")))
  72.243 +				| None => raise ERR "rp'.PDisk" "Not enough information")
  72.244 +		  | PAxm(name,c) =>
  72.245 +		    (case P.get_axiom thyname name thy of
  72.246 +			    (thy',Some res) => (thy',res)
  72.247 +			  | (thy',None) => P.new_axiom name c thy')
  72.248 +		  | PTmSpec(seg,names,prf') =>
  72.249 +		    let
  72.250 +			val (thy',th) = rp' prf' thy
  72.251 +		    in
  72.252 +			P.new_specification seg thmname names th thy'
  72.253 +		    end
  72.254 +		  | PTyDef(seg,name,prf') =>
  72.255 +		    let
  72.256 +			val (thy',th) = rp' prf' thy
  72.257 +		    in
  72.258 +			P.new_type_definition seg thmname name th thy'
  72.259 +		    end
  72.260 +		  | PTyIntro(seg,name,abs_name,rep_name,P,t,prf') =>
  72.261 +		    let
  72.262 +			val (thy',th) = rp' prf' thy
  72.263 +		    in
  72.264 +			P.type_introduction seg thmname name abs_name rep_name (P,t) th thy'
  72.265 +		    end
  72.266 +		  | _ => rp pc thy
  72.267 +	    end
  72.268 +    in
  72.269 +	rp' prf thy handle e => (writeln "Exception in replay_proof"; print_exn e)
  72.270 +    end
  72.271 +
  72.272 +fun setup_int_thms thyname thy =
  72.273 +    let
  72.274 +	val is = TextIO.openIn(P.get_proof_dir thyname thy ^"/facts.lst")
  72.275 +	val (num_int_thms,facts) =
  72.276 +	    let
  72.277 +		fun get_facts facts =
  72.278 +		    case TextIO.inputLine is of
  72.279 +			"" => (case facts of
  72.280 +				   i::facts => (valOf (Int.fromString i),rev facts)
  72.281 +				 | _ => raise ERR "replay_thm" "Bad facts.lst file")
  72.282 +		      | fact => get_facts ((String.substring(fact,0,String.size fact -1 ))::facts)
  72.283 +	    in
  72.284 +		get_facts []
  72.285 +	    end
  72.286 +	val _ = TextIO.closeIn is
  72.287 +	val int_thms = Array.array(num_int_thms,None:thm option)
  72.288 +    in
  72.289 +	(int_thms,facts)
  72.290 +    end
  72.291 +
  72.292 +fun import_single_thm thyname int_thms thmname thy =
  72.293 +    let
  72.294 +	fun replay_fact (thmname,thy) =
  72.295 +	    let
  72.296 +		val _ = writeln ("Replaying " ^ thmname)
  72.297 +		val prf = mk_proof PDisk
  72.298 +		val _ = set_disk_info_of prf thyname thmname
  72.299 +	    in
  72.300 +		fst (replay_proof int_thms thyname thmname prf thy)
  72.301 +	    end
  72.302 +    in
  72.303 +	replay_fact (thmname,thy)
  72.304 +    end
  72.305 +
  72.306 +fun import_thms thyname int_thms thmnames thy =
  72.307 +    let
  72.308 +	fun replay_fact (thy,thmname) =
  72.309 +	    let
  72.310 +		val _ = writeln ("Replaying " ^ thmname)
  72.311 +		val prf = mk_proof PDisk
  72.312 +		val _ = set_disk_info_of prf thyname thmname
  72.313 +	    in
  72.314 +		fst (replay_proof int_thms thyname thmname prf thy)
  72.315 +	    end
  72.316 +	val res_thy = foldl replay_fact (thy,thmnames)
  72.317 +    in
  72.318 +	res_thy
  72.319 +    end
  72.320 +
  72.321 +fun import_thm thyname thmname thy =
  72.322 +    let
  72.323 +	val int_thms = fst (setup_int_thms thyname thy)
  72.324 +	fun replay_fact (thmname,thy) =
  72.325 +	    let
  72.326 +		val _ = writeln ("Replaying " ^ thmname)
  72.327 +		val prf = mk_proof PDisk
  72.328 +		val _ = set_disk_info_of prf thyname thmname
  72.329 +	    in
  72.330 +		fst (replay_proof int_thms thyname thmname prf thy)
  72.331 +	    end
  72.332 +    in
  72.333 +	replay_fact (thmname,thy)
  72.334 +    end
  72.335 +
  72.336 +end
    73.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    73.2 +++ b/src/HOL/Import/shuffler.ML	Fri Apr 02 17:37:45 2004 +0200
    73.3 @@ -0,0 +1,685 @@
    73.4 +(*  Title:      Provers/shuffler.ML
    73.5 +    ID:         $Id$
    73.6 +    Author:     Sebastian Skalberg, TU Muenchen
    73.7 +    License:    GPL (GNU GENERAL PUBLIC LICENSE)
    73.8 +
    73.9 +Package for proving two terms equal by normalizing (hence the
   73.10 +"shuffler" name).  Uses the simplifier for the normalization.
   73.11 +*)
   73.12 +
   73.13 +signature Shuffler =
   73.14 +sig
   73.15 +    val debug      : bool ref
   73.16 +
   73.17 +    val norm_term  : theory -> term -> thm
   73.18 +    val make_equal : theory -> term -> term -> thm option
   73.19 +    val set_prop   : theory -> term -> (string * thm) list -> (string * thm) option
   73.20 +
   73.21 +    val find_potential: theory -> term -> (string * thm) list
   73.22 +
   73.23 +    val gen_shuffle_tac: theory -> bool -> (string * thm) list -> int -> tactic
   73.24 +
   73.25 +    val shuffle_tac: (string * thm) list -> int -> tactic
   73.26 +    val search_tac : (string * thm) list -> int -> tactic
   73.27 +
   73.28 +    val print_shuffles: theory -> unit
   73.29 +
   73.30 +    val add_shuffle_rule: thm -> theory -> theory
   73.31 +    val shuffle_attr: theory attribute
   73.32 +
   73.33 +    val setup      : (theory -> theory) list
   73.34 +end
   73.35 +
   73.36 +structure Shuffler :> Shuffler =
   73.37 +struct
   73.38 +
   73.39 +val debug = ref false
   73.40 +
   73.41 +fun if_debug f x = if !debug then f x else ()
   73.42 +val message = if_debug writeln
   73.43 +
   73.44 +(*Prints exceptions readably to users*)
   73.45 +fun print_sign_exn_unit sign e = 
   73.46 +  case e of
   73.47 +     THM (msg,i,thms) =>
   73.48 +	 (writeln ("Exception THM " ^ string_of_int i ^ " raised:\n" ^ msg);
   73.49 +	  seq print_thm thms)
   73.50 +   | THEORY (msg,thys) =>
   73.51 +	 (writeln ("Exception THEORY raised:\n" ^ msg);
   73.52 +	  seq (Pretty.writeln o Display.pretty_theory) thys)
   73.53 +   | TERM (msg,ts) =>
   73.54 +	 (writeln ("Exception TERM raised:\n" ^ msg);
   73.55 +	  seq (writeln o Sign.string_of_term sign) ts)
   73.56 +   | TYPE (msg,Ts,ts) =>
   73.57 +	 (writeln ("Exception TYPE raised:\n" ^ msg);
   73.58 +	  seq (writeln o Sign.string_of_typ sign) Ts;
   73.59 +	  seq (writeln o Sign.string_of_term sign) ts)
   73.60 +   | e => raise e
   73.61 +
   73.62 +(*Prints an exception, then fails*)
   73.63 +fun print_sign_exn sign e = (print_sign_exn_unit sign e; raise e)
   73.64 +
   73.65 +val string_of_thm = Library.setmp print_mode [] string_of_thm
   73.66 +val string_of_cterm = Library.setmp print_mode [] string_of_cterm
   73.67 +
   73.68 +val commafy = String.concat o separate ", "
   73.69 +
   73.70 +fun mk_meta_eq th =
   73.71 +    (case concl_of th of
   73.72 +	 Const("Trueprop",_) $ (Const("op =",_) $ _ $ _) => th RS eq_reflection
   73.73 +       | Const("==",_) $ _ $ _ => th
   73.74 +       | _ => raise THM("Not an equality",0,[th]))
   73.75 +    handle _ => raise THM("Couldn't make meta equality",0,[th])
   73.76 +				   
   73.77 +fun mk_obj_eq th =
   73.78 +    (case concl_of th of
   73.79 +	 Const("Trueprop",_) $ (Const("op =",_) $ _ $ _) => th
   73.80 +       | Const("==",_) $ _ $ _ => th RS meta_eq_to_obj_eq
   73.81 +       | _ => raise THM("Not an equality",0,[th]))
   73.82 +    handle _ => raise THM("Couldn't make object equality",0,[th])
   73.83 +
   73.84 +structure ShuffleDataArgs: THEORY_DATA_ARGS =
   73.85 +struct
   73.86 +val name = "HOL/shuffles"
   73.87 +type T = thm list
   73.88 +val empty = []
   73.89 +val copy = I
   73.90 +val prep_ext = I
   73.91 +val merge = Library.gen_union Thm.eq_thm
   73.92 +fun print sg thms =
   73.93 +    Pretty.writeln (Pretty.big_list "Shuffle theorems:"
   73.94 +				    (map Display.pretty_thm thms))
   73.95 +end
   73.96 +
   73.97 +structure ShuffleData = TheoryDataFun(ShuffleDataArgs)
   73.98 +
   73.99 +val weaken =
  73.100 +    let
  73.101 +	val cert = cterm_of (sign_of ProtoPure.thy)
  73.102 +	val P = Free("P",propT)
  73.103 +	val Q = Free("Q",propT)
  73.104 +	val PQ = Logic.mk_implies(P,Q)
  73.105 +	val PPQ = Logic.mk_implies(P,PQ)
  73.106 +	val cP = cert P
  73.107 +	val cQ = cert Q
  73.108 +	val cPQ = cert PQ
  73.109 +	val cPPQ = cert PPQ
  73.110 +	val th1 = assume cPQ |> implies_intr_list [cPQ,cP]
  73.111 +	val th3 = assume cP
  73.112 +	val th4 = implies_elim_list (assume cPPQ) [th3,th3]
  73.113 +				    |> implies_intr_list [cPPQ,cP]
  73.114 +    in
  73.115 +	equal_intr th4 th1 |> standard
  73.116 +    end
  73.117 +
  73.118 +val imp_comm =
  73.119 +    let
  73.120 +	val cert = cterm_of (sign_of ProtoPure.thy)
  73.121 +	val P = Free("P",propT)
  73.122 +	val Q = Free("Q",propT)
  73.123 +	val R = Free("R",propT)
  73.124 +	val PQR = Logic.mk_implies(P,Logic.mk_implies(Q,R))
  73.125 +	val QPR = Logic.mk_implies(Q,Logic.mk_implies(P,R))
  73.126 +	val cP = cert P
  73.127 +	val cQ = cert Q
  73.128 +	val cPQR = cert PQR
  73.129 +	val cQPR = cert QPR
  73.130 +	val th1 = implies_elim_list (assume cPQR) [assume cP,assume cQ]
  73.131 +				    |> implies_intr_list [cPQR,cQ,cP]
  73.132 +	val th2 = implies_elim_list (assume cQPR) [assume cQ,assume cP]
  73.133 +				    |> implies_intr_list [cQPR,cP,cQ]
  73.134 +    in
  73.135 +	equal_intr th1 th2 |> standard
  73.136 +    end
  73.137 +
  73.138 +val def_norm =
  73.139 +    let
  73.140 +	val cert = cterm_of (sign_of ProtoPure.thy)
  73.141 +	val aT = TFree("'a",logicS)
  73.142 +	val bT = TFree("'b",logicS)
  73.143 +	val v = Free("v",aT)
  73.144 +	val P = Free("P",aT-->bT)
  73.145 +	val Q = Free("Q",aT-->bT)
  73.146 +	val cvPQ = cert (list_all ([("v",aT)],Logic.mk_equals(P $ Bound 0,Q $ Bound 0)))
  73.147 +	val cPQ = cert (Logic.mk_equals(P,Q))
  73.148 +	val cv = cert v
  73.149 +	val rew = assume cvPQ
  73.150 +			 |> forall_elim cv
  73.151 +			 |> abstract_rule "v" cv
  73.152 +	val (lhs,rhs) = Logic.dest_equals(concl_of rew)
  73.153 +	val th1 = transitive (transitive
  73.154 +				  (eta_conversion (cert lhs) |> symmetric)
  73.155 +				  rew)
  73.156 +			     (eta_conversion (cert rhs))
  73.157 +			     |> implies_intr cvPQ
  73.158 +	val th2 = combination (assume cPQ) (reflexive cv)
  73.159 +			      |> forall_intr cv
  73.160 +			      |> implies_intr cPQ
  73.161 +    in
  73.162 +	equal_intr th1 th2 |> standard
  73.163 +    end
  73.164 +
  73.165 +val all_comm =
  73.166 +    let
  73.167 +	val cert = cterm_of (sign_of ProtoPure.thy)
  73.168 +	val xT = TFree("'a",logicS)
  73.169 +	val yT = TFree("'b",logicS)
  73.170 +	val P = Free("P",xT-->yT-->propT)
  73.171 +	val lhs = all xT $ (Abs("x",xT,all yT $ (Abs("y",yT,P $ Bound 1 $ Bound 0))))
  73.172 +	val rhs = all yT $ (Abs("y",yT,all xT $ (Abs("x",xT,P $ Bound 0 $ Bound 1))))
  73.173 +	val cl = cert lhs
  73.174 +	val cr = cert rhs
  73.175 +	val cx = cert (Free("x",xT))
  73.176 +	val cy = cert (Free("y",yT))
  73.177 +	val th1 = assume cr
  73.178 +			 |> forall_elim_list [cy,cx]
  73.179 +			 |> forall_intr_list [cx,cy]
  73.180 +			 |> implies_intr cr
  73.181 +	val th2 = assume cl
  73.182 +			 |> forall_elim_list [cx,cy]
  73.183 +			 |> forall_intr_list [cy,cx]
  73.184 +			 |> implies_intr cl
  73.185 +    in
  73.186 +	equal_intr th1 th2 |> standard
  73.187 +    end
  73.188 +
  73.189 +val equiv_comm =
  73.190 +    let
  73.191 +	val cert = cterm_of (sign_of ProtoPure.thy)
  73.192 +	val T    = TFree("'a",[])
  73.193 +	val t    = Free("t",T)
  73.194 +	val u    = Free("u",T)
  73.195 +	val ctu  = cert (Logic.mk_equals(t,u))
  73.196 +	val cut  = cert (Logic.mk_equals(u,t))
  73.197 +	val th1  = assume ctu |> symmetric |> implies_intr ctu
  73.198 +	val th2  = assume cut |> symmetric |> implies_intr cut
  73.199 +    in
  73.200 +	equal_intr th1 th2 |> standard
  73.201 +    end
  73.202 +
  73.203 +(* This simplification procedure rewrites !!x y. P x y
  73.204 +deterministicly, in order for the normalization function, defined
  73.205 +below, to handle nested quantifiers robustly *)
  73.206 +
  73.207 +local
  73.208 +
  73.209 +exception RESULT of int
  73.210 +
  73.211 +fun find_bound n (Bound i) = if i = n then raise RESULT 0
  73.212 +			     else if i = n+1 then raise RESULT 1
  73.213 +			     else ()
  73.214 +  | find_bound n (t $ u) = (find_bound n t; find_bound n u)
  73.215 +  | find_bound n (Abs(_,_,t)) = find_bound (n+1) t
  73.216 +  | find_bound _ _ = ()
  73.217 +
  73.218 +fun swap_bound n (Bound i) = if i = n then Bound (n+1)
  73.219 +			     else if i = n+1 then Bound n
  73.220 +			     else Bound i
  73.221 +  | swap_bound n (t $ u) = (swap_bound n t $ swap_bound n u)
  73.222 +  | swap_bound n (Abs(x,xT,t)) = Abs(x,xT,swap_bound (n+1) t)
  73.223 +  | swap_bound n t = t
  73.224 +
  73.225 +fun rew_th sg (xv as (x,xT)) (yv as (y,yT)) t =
  73.226 +    let
  73.227 +	val lhs = list_all ([xv,yv],t)
  73.228 +	val rhs = list_all ([yv,xv],swap_bound 0 t)
  73.229 +	val rew = Logic.mk_equals (lhs,rhs)
  73.230 +	val init = trivial (cterm_of sg rew)
  73.231 +    in
  73.232 +	(all_comm RS init handle e => (message "rew_th"; print_exn e))
  73.233 +    end
  73.234 +
  73.235 +fun quant_rewrite sg assumes (t as Const("all",T1) $ (Abs(x,xT,Const("all",T2) $ Abs(y,yT,body)))) =
  73.236 +    let
  73.237 +	val res = (find_bound 0 body;2) handle RESULT i => i
  73.238 +    in
  73.239 +	case res of
  73.240 +	    0 => Some (rew_th sg (x,xT) (y,yT) body)
  73.241 +	  | 1 => if string_ord(y,x) = LESS
  73.242 +		 then
  73.243 +		     let
  73.244 +			 val newt = Const("all",T1) $ (Abs(y,xT,Const("all",T2) $ Abs(x,yT,body)))
  73.245 +			 val t_th    = reflexive (cterm_of sg t)
  73.246 +			 val newt_th = reflexive (cterm_of sg newt)
  73.247 +		     in
  73.248 +			 Some (transitive t_th newt_th)
  73.249 +		     end
  73.250 +		 else None
  73.251 +	  | _ => error "norm_term (quant_rewrite) internal error"
  73.252 +     end
  73.253 +  | quant_rewrite _ _ _ = (warning "quant_rewrite: Unknown lhs"; None)
  73.254 +
  73.255 +fun freeze_thaw_term t =
  73.256 +    let
  73.257 +	val tvars = term_tvars t
  73.258 +	val tfree_names = add_term_tfree_names(t,[])
  73.259 +	val (type_inst,_) =
  73.260 +	    foldl (fn ((inst,used),(w as (v,_),S)) =>
  73.261 +		      let
  73.262 +			  val v' = variant used v
  73.263 +		      in
  73.264 +			  ((w,TFree(v',S))::inst,v'::used)
  73.265 +		      end)
  73.266 +		  (([],tfree_names),tvars)
  73.267 +	val t' = subst_TVars type_inst t
  73.268 +    in
  73.269 +	(t',map (fn (w,TFree(v,S)) => (v,TVar(w,S))) type_inst)
  73.270 +    end
  73.271 +
  73.272 +fun inst_tfrees sg [] thm = thm
  73.273 +  | inst_tfrees sg ((name,U)::rest) thm = 
  73.274 +    let
  73.275 +	val cU = ctyp_of sg U
  73.276 +	val tfree_names = add_term_tfree_names (prop_of thm,[])
  73.277 +	val (thm',rens) = varifyT' (tfree_names \ name) thm
  73.278 +	val mid = 
  73.279 +	    case rens of
  73.280 +		[] => thm'
  73.281 +	      | [(_,idx)] => instantiate ([(idx,cU)],[]) thm'
  73.282 +	      | _ => error "Shuffler.inst_tfrees internal error"
  73.283 +    in
  73.284 +	inst_tfrees sg rest mid
  73.285 +    end
  73.286 +
  73.287 +fun is_Abs (Abs _) = true
  73.288 +  | is_Abs _ = false
  73.289 +
  73.290 +fun eta_redex (t $ Bound 0) =
  73.291 +    let
  73.292 +	fun free n (Bound i) = i = n
  73.293 +	  | free n (t $ u) = free n t orelse free n u
  73.294 +	  | free n (Abs(_,_,t)) = free (n+1) t
  73.295 +	  | free n _ = false
  73.296 +    in
  73.297 +	not (free 0 t)
  73.298 +    end
  73.299 +  | eta_redex _ = false
  73.300 +
  73.301 +fun eta_contract sg assumes origt =
  73.302 +    let
  73.303 +	val (typet,Tinst) = freeze_thaw_term origt
  73.304 +	val (init,thaw) = freeze_thaw (reflexive (cterm_of sg typet))
  73.305 +	val final = inst_tfrees sg Tinst o thaw
  73.306 +	val t = #1 (Logic.dest_equals (prop_of init))
  73.307 +	val _ =
  73.308 +	    let
  73.309 +		val lhs = #1 (Logic.dest_equals (prop_of (final init)))
  73.310 +	    in
  73.311 +		if not (lhs aconv origt)
  73.312 +		then (writeln "Something is utterly wrong: (orig,lhs,frozen type,t,tinst)";
  73.313 +		      writeln (string_of_cterm (cterm_of sg origt));
  73.314 +		      writeln (string_of_cterm (cterm_of sg lhs));
  73.315 +		      writeln (string_of_cterm (cterm_of sg typet));
  73.316 +		      writeln (string_of_cterm (cterm_of sg t));
  73.317 +		      app (fn (n,T) => writeln (n ^ ": " ^ (string_of_ctyp (ctyp_of sg T)))) Tinst;
  73.318 +		      writeln "done")
  73.319 +		else ()
  73.320 +	    end
  73.321 +    in
  73.322 +	case t of
  73.323 +	    Const("all",_) $ (Abs(x,xT,Const("==",eqT) $ P $ Q)) =>
  73.324 +	    ((if eta_redex P andalso eta_redex Q
  73.325 +	      then
  73.326 +		  let
  73.327 +		      val cert = cterm_of sg
  73.328 +		      val v = Free(variant (add_term_free_names(t,[])) "v",xT)
  73.329 +		      val cv = cert v
  73.330 +		      val ct = cert t
  73.331 +		      val th = (assume ct)
  73.332 +				   |> forall_elim cv
  73.333 +				   |> abstract_rule x cv
  73.334 +		      val ext_th = eta_conversion (cert (Abs(x,xT,P)))
  73.335 +		      val th' = transitive (symmetric ext_th) th
  73.336 +		      val cu = cert (prop_of th')
  73.337 +		      val uth = combination (assume cu) (reflexive cv)
  73.338 +		      val uth' = (beta_conversion false (cert (Abs(x,xT,Q) $ v)))
  73.339 +				     |> transitive uth
  73.340 +				     |> forall_intr cv
  73.341 +				     |> implies_intr cu
  73.342 +		      val rew_th = equal_intr (th' |> implies_intr ct) uth'
  73.343 +		      val res = final rew_th
  73.344 +		      val lhs = (#1 (Logic.dest_equals (prop_of res)))
  73.345 +		  in
  73.346 +		       Some res
  73.347 +		  end
  73.348 +	      else None)
  73.349 +	     handle e => (writeln "eta_contract:";print_exn e))
  73.350 +	  | _ => (error ("Bad eta_contract argument" ^ (string_of_cterm (cterm_of sg t))); None)
  73.351 +    end
  73.352 +
  73.353 +fun beta_fun sg assume t =
  73.354 +    Some (beta_conversion true (cterm_of sg t))
  73.355 +
  73.356 +fun eta_expand sg assumes origt =
  73.357 +    let
  73.358 +	val (typet,Tinst) = freeze_thaw_term origt
  73.359 +	val (init,thaw) = freeze_thaw (reflexive (cterm_of sg typet))
  73.360 +	val final = inst_tfrees sg Tinst o thaw
  73.361 +	val t = #1 (Logic.dest_equals (prop_of init))
  73.362 +	val _ =
  73.363 +	    let
  73.364 +		val lhs = #1 (Logic.dest_equals (prop_of (final init)))
  73.365 +	    in
  73.366 +		if not (lhs aconv origt)
  73.367 +		then (writeln "Something is utterly wrong: (orig,lhs,frozen type,t,tinst)";
  73.368 +		      writeln (string_of_cterm (cterm_of sg origt));
  73.369 +		      writeln (string_of_cterm (cterm_of sg lhs));
  73.370 +		      writeln (string_of_cterm (cterm_of sg typet));
  73.371 +		      writeln (string_of_cterm (cterm_of sg t));
  73.372 +		      app (fn (n,T) => writeln (n ^ ": " ^ (string_of_ctyp (ctyp_of sg T)))) Tinst;
  73.373 +		      writeln "done")
  73.374 +		else ()
  73.375 +	    end
  73.376 +    in
  73.377 +	case t of
  73.378 +	    Const("==",T) $ P $ Q =>
  73.379 +	    if is_Abs P orelse is_Abs Q
  73.380 +	    then (case domain_type T of
  73.381 +		      Type("fun",[aT,bT]) =>
  73.382 +		      let
  73.383 +			  val cert = cterm_of sg
  73.384 +			  val vname = variant (add_term_free_names(t,[])) "v"
  73.385 +			  val v = Free(vname,aT)
  73.386 +			  val cv = cert v
  73.387 +			  val ct = cert t
  73.388 +			  val th1 = (combination (assume ct) (reflexive cv))
  73.389 +					|> forall_intr cv
  73.390 +					|> implies_intr ct
  73.391 +			  val concl = cert (concl_of th1)
  73.392 +			  val th2 = (assume concl)
  73.393 +					|> forall_elim cv
  73.394 +					|> abstract_rule vname cv
  73.395 +			  val (lhs,rhs) = Logic.dest_equals (prop_of th2)
  73.396 +			  val elhs = eta_conversion (cert lhs)
  73.397 +			  val erhs = eta_conversion (cert rhs)
  73.398 +			  val th2' = transitive
  73.399 +					 (transitive (symmetric elhs) th2)
  73.400 +					 erhs
  73.401 +			  val res = equal_intr th1 (th2' |> implies_intr concl)
  73.402 +			  val res' = final res
  73.403 +		      in
  73.404 +			  Some res'
  73.405 +		      end
  73.406 +		    | _ => None)
  73.407 +	    else None
  73.408 +	  | _ => (error ("Bad eta_expand argument" ^ (string_of_cterm (cterm_of sg t))); None)
  73.409 +    end
  73.410 +    handle e => (writeln "eta_expand internal error";print_exn e)
  73.411 +
  73.412 +fun mk_tfree s = TFree("'"^s,logicS)
  73.413 +val xT = mk_tfree "a"
  73.414 +val yT = mk_tfree "b"
  73.415 +val P  = Var(("P",0),xT-->yT-->propT)
  73.416 +val Q  = Var(("Q",0),xT-->yT)
  73.417 +val R  = Var(("R",0),xT-->yT)
  73.418 +val S  = Var(("S",0),xT)
  73.419 +in
  73.420 +fun beta_simproc sg = Simplifier.simproc_i
  73.421 +		      sg
  73.422 +		      "Beta-contraction"
  73.423 +		      [Abs("x",xT,Q) $ S]
  73.424 +		      beta_fun
  73.425 +
  73.426 +fun quant_simproc sg = Simplifier.simproc_i
  73.427 +			   sg
  73.428 +			   "Ordered rewriting of nested quantifiers"
  73.429 +			   [all xT $ (Abs("x",xT,all yT $ (Abs("y",yT,P $ Bound 1 $ Bound 0))))]
  73.430 +			   quant_rewrite
  73.431 +fun eta_expand_simproc sg = Simplifier.simproc_i
  73.432 +			 sg
  73.433 +			 "Smart eta-expansion by equivalences"
  73.434 +			 [Logic.mk_equals(Q,R)]
  73.435 +			 eta_expand
  73.436 +fun eta_contract_simproc sg = Simplifier.simproc_i
  73.437 +			 sg
  73.438 +			 "Smart handling of eta-contractions"
  73.439 +			 [all xT $ (Abs("x",xT,Logic.mk_equals(Q $ Bound 0,R $ Bound 0)))]
  73.440 +			 eta_contract
  73.441 +end
  73.442 +
  73.443 +(* Disambiguates the names of bound variables in a term, returning t
  73.444 +== t' where all the names of bound variables in t' are unique *)
  73.445 +
  73.446 +fun disamb_bound sg t =
  73.447 +    let
  73.448 +	
  73.449 +	fun F (t $ u,idx) =
  73.450 +	    let
  73.451 +		val (t',idx') = F (t,idx)
  73.452 +		val (u',idx'') = F (u,idx')
  73.453 +	    in
  73.454 +		(t' $ u',idx'')
  73.455 +	    end
  73.456 +	  | F (Abs(x,xT,t),idx) =
  73.457 +	    let
  73.458 +		val x' = "x" ^ (LargeInt.toString idx) (* amazing *)
  73.459 +		val (t',idx') = F (t,idx+1)
  73.460 +	    in
  73.461 +		(Abs(x',xT,t'),idx')
  73.462 +	    end
  73.463 +	  | F arg = arg
  73.464 +	val (t',_) = F (t,0)
  73.465 +	val ct = cterm_of sg t
  73.466 +	val ct' = cterm_of sg t'
  73.467 +	val res = transitive (reflexive ct) (reflexive ct')
  73.468 +	val _ = message ("disamb_term: " ^ (string_of_thm res))
  73.469 +    in
  73.470 +	res
  73.471 +    end
  73.472 +
  73.473 +(* Transforms a term t to some normal form t', returning the theorem t
  73.474 +== t'.  This is originally a help function for make_equal, but might
  73.475 +be handy in its own right, for example for indexing terms. *)
  73.476 +
  73.477 +fun norm_term thy t =
  73.478 +    let
  73.479 +	val sg = sign_of thy
  73.480 +
  73.481 +	val norms = ShuffleData.get thy
  73.482 +	val ss = empty_ss setmksimps single
  73.483 +			  addsimps (map (transfer_sg sg) norms)
  73.484 +	fun chain f th =
  73.485 +	    let
  73.486 +		val rhs = snd (dest_equals (cprop_of th))
  73.487 +	    in
  73.488 +		transitive th (f rhs)
  73.489 +	    end
  73.490 +
  73.491 +	val th =
  73.492 +	    t |> disamb_bound sg
  73.493 +	      |> chain (Simplifier.full_rewrite
  73.494 +			    (ss addsimprocs [quant_simproc sg,eta_expand_simproc sg,eta_contract_simproc sg]))
  73.495 +	      |> chain eta_conversion
  73.496 +	      |> strip_shyps
  73.497 +	val _ = message ("norm_term: " ^ (string_of_thm th))
  73.498 +    in
  73.499 +	th
  73.500 +    end
  73.501 +    handle e => (writeln "norm_term internal error"; print_sign_exn (sign_of thy) e)
  73.502 +
  73.503 +fun is_logic_var sg v =
  73.504 +    Type.of_sort (Sign.tsig_of sg) (type_of v,logicS)
  73.505 +
  73.506 +(* Closes a theorem with respect to free and schematic variables (does
  73.507 +not touch type variables, though). *)
  73.508 +
  73.509 +fun close_thm th =
  73.510 +    let
  73.511 +	val sg = sign_of_thm th
  73.512 +	val c = prop_of th
  73.513 +	val all_vars = add_term_frees (c,add_term_vars(c,[]))
  73.514 +	val all_rel_vars = filter (is_logic_var sg) all_vars
  73.515 +    in
  73.516 +	Drule.forall_intr_list (map (cterm_of sg) all_rel_vars) th
  73.517 +    end
  73.518 +    handle e => (writeln "close_thm internal error"; print_exn e)
  73.519 +
  73.520 +(* Normalizes a theorem's conclusion using norm_term. *)
  73.521 +
  73.522 +fun norm_thm thy th =
  73.523 +    let
  73.524 +	val c = prop_of th
  73.525 +    in
  73.526 +	equal_elim (norm_term thy c) th
  73.527 +    end
  73.528 +
  73.529 +(* make_equal sg t u tries to construct the theorem t == u under the
  73.530 +signature sg.  If it succeeds, Some (t == u) is returned, otherwise
  73.531 +None is returned. *)
  73.532 +
  73.533 +fun make_equal sg t u =
  73.534 +    let
  73.535 +	val t_is_t' = norm_term sg t
  73.536 +	val u_is_u' = norm_term sg u
  73.537 +	val th = transitive t_is_t' (symmetric u_is_u')
  73.538 +	val _ = message ("make_equal: Some " ^ (string_of_thm th))
  73.539 +    in
  73.540 +	Some th
  73.541 +    end
  73.542 +    handle e as THM _ => (message "make_equal: None";None)
  73.543 +			 
  73.544 +fun match_consts ignore t (* th *) =
  73.545 +    let
  73.546 +	fun add_consts (Const (c, _), cs) =
  73.547 +	    if c mem_string ignore
  73.548 +	    then cs
  73.549 +	    else c ins_string cs
  73.550 +	  | add_consts (t $ u, cs) = add_consts (t, add_consts (u, cs))
  73.551 +	  | add_consts (Abs (_, _, t), cs) = add_consts (t, cs)
  73.552 +	  | add_consts (_, cs) = cs
  73.553 +	val t_consts = add_consts(t,[])
  73.554 +    in
  73.555 +     fn (name,th) =>
  73.556 +	let
  73.557 +	    val th_consts = add_consts(prop_of th,[])
  73.558 +	in
  73.559 +	    eq_set(t_consts,th_consts)
  73.560 +	end
  73.561 +    end
  73.562 +    
  73.563 +val collect_ignored =
  73.564 +    foldr (fn (thm,cs) =>
  73.565 +	      let
  73.566 +		  val (lhs,rhs) = Logic.dest_equals (prop_of thm)
  73.567 +		  val ignore_lhs = term_consts lhs \\ term_consts rhs
  73.568 +		  val ignore_rhs = term_consts rhs \\ term_consts lhs
  73.569 +	      in
  73.570 +		  foldr (op ins_string) (ignore_lhs @ ignore_rhs,cs)
  73.571 +	      end)
  73.572 +
  73.573 +(* set_prop t thms tries to make a theorem with the proposition t from
  73.574 +one of the theorems thms, by shuffling the propositions around.  If it
  73.575 +succeeds, Some theorem is returned, otherwise None.  *)
  73.576 +
  73.577 +fun set_prop thy t =
  73.578 +    let
  73.579 +	val sg = sign_of thy
  73.580 +	val all_vars = add_term_frees (t,add_term_vars (t,[]))
  73.581 +	val all_rel_vars = filter (is_logic_var sg) all_vars
  73.582 +	val closed_t = foldr (fn (v,body) => let val vT = type_of v
  73.583 +					     in all vT $ (Abs("x",vT,abstract_over(v,body))) end) (all_rel_vars,t)
  73.584 +	val rew_th = norm_term thy closed_t
  73.585 +	val rhs = snd (dest_equals (cprop_of rew_th))
  73.586 +
  73.587 +	val shuffles = ShuffleData.get thy
  73.588 +	fun process [] = None
  73.589 +	  | process ((name,th)::thms) =
  73.590 +	    let
  73.591 +		val norm_th = varifyT (norm_thm thy (close_thm (transfer_sg sg th)))
  73.592 +		val triv_th = trivial rhs
  73.593 +		val _ = message ("Shuffler.set_prop: Gluing together " ^ (string_of_thm norm_th) ^ " and " ^ (string_of_thm triv_th))
  73.594 +		val mod_th = case Seq.pull (bicompose true (false,norm_th,0) 1 triv_th) of
  73.595 +				 Some(th,_) => Some th
  73.596 +			       | None => None
  73.597 +	    in
  73.598 +		case mod_th of
  73.599 +		    Some mod_th =>
  73.600 +		    let
  73.601 +			val closed_th = equal_elim (symmetric rew_th) mod_th
  73.602 +		    in
  73.603 +			message ("Shuffler.set_prop succeeded by " ^ name);
  73.604 +			Some (name,forall_elim_list (map (cterm_of sg) all_rel_vars) closed_th)
  73.605 +		    end
  73.606 +		  | None => process thms
  73.607 +	    end
  73.608 +	    handle e as THM _ => process thms
  73.609 +    in
  73.610 +	fn thms =>
  73.611 +	   case process thms of
  73.612 +	       res as Some (name,th) => if (prop_of th) aconv t
  73.613 +					then res
  73.614 +					else error "Internal error in set_prop"
  73.615 +	     | None => None
  73.616 +    end
  73.617 +    handle e => (writeln "set_prop internal error"; print_exn e)
  73.618 +
  73.619 +fun find_potential thy t =
  73.620 +    let
  73.621 +	val shuffles = ShuffleData.get thy
  73.622 +	val ignored = collect_ignored(shuffles,[])
  73.623 +	val rel_consts = term_consts t \\ ignored
  73.624 +	val pot_thms = PureThy.thms_containing_consts thy rel_consts
  73.625 +    in
  73.626 +	filter (match_consts ignored t) pot_thms
  73.627 +    end
  73.628 +
  73.629 +fun gen_shuffle_tac thy search thms i st =
  73.630 +    let
  73.631 +	val _ = message ("Shuffling " ^ (string_of_thm st))
  73.632 +	val t = nth_elem(i-1,prems_of st)
  73.633 +	val set = set_prop thy t
  73.634 +	fun process_tac thms st =
  73.635 +	    case set thms of
  73.636 +		Some (_,th) => Seq.of_list (compose (th,i,st))
  73.637 +	      | None => Seq.empty
  73.638 +    in
  73.639 +	(process_tac thms APPEND (if search
  73.640 +				  then process_tac (find_potential thy t)
  73.641 +				  else no_tac)) st
  73.642 +    end
  73.643 +
  73.644 +fun shuffle_tac thms i st =
  73.645 +    gen_shuffle_tac (the_context()) false thms i st
  73.646 +
  73.647 +fun search_tac thms i st =
  73.648 +    gen_shuffle_tac (the_context()) true thms i st
  73.649 +
  73.650 +fun shuffle_meth (thms:thm list) ctxt =
  73.651 +    let
  73.652 +	val thy = ProofContext.theory_of ctxt
  73.653 +    in
  73.654 +	Method.SIMPLE_METHOD' HEADGOAL (gen_shuffle_tac thy false (map (pair "") thms))
  73.655 +    end
  73.656 +
  73.657 +fun search_meth ctxt =
  73.658 +    let
  73.659 +	val thy = ProofContext.theory_of ctxt
  73.660 +	val prems = ProofContext.prems_of ctxt
  73.661 +    in
  73.662 +	Method.SIMPLE_METHOD' HEADGOAL (gen_shuffle_tac thy true (map (pair "premise") prems))
  73.663 +    end
  73.664 +
  73.665 +val print_shuffles = ShuffleData.print
  73.666 +
  73.667 +fun add_shuffle_rule thm thy =
  73.668 +    let
  73.669 +	val shuffles = ShuffleData.get thy
  73.670 +    in
  73.671 +	if exists (curry Thm.eq_thm thm) shuffles
  73.672 +	then (warning ((string_of_thm thm) ^ " already known to the shuffler");
  73.673 +	      thy)
  73.674 +	else ShuffleData.put (thm::shuffles) thy
  73.675 +    end
  73.676 +
  73.677 +fun shuffle_attr (thy,thm) = (add_shuffle_rule thm thy,thm)
  73.678 +
  73.679 +val setup = [Method.add_method ("shuffle_tac",Method.thms_ctxt_args shuffle_meth,"solve goal by shuffling terms around"),
  73.680 +	     Method.add_method ("search_tac",Method.ctxt_args search_meth,"search for suitable theorems"),
  73.681 +	     ShuffleData.init,
  73.682 +	     add_shuffle_rule weaken,
  73.683 +	     add_shuffle_rule equiv_comm,
  73.684 +	     add_shuffle_rule imp_comm,
  73.685 +	     add_shuffle_rule Drule.norm_hhf_eq,
  73.686 +	     add_shuffle_rule Drule.triv_forall_equality,
  73.687 +	     Attrib.add_attributes [("shuffle_rule",(Attrib.no_args shuffle_attr,K Attrib.undef_local_attribute),"tell the shuffler about the theorem")]]
  73.688 +end
    74.1 --- a/src/HOL/IsaMakefile	Fri Apr 02 17:36:01 2004 +0200
    74.2 +++ b/src/HOL/IsaMakefile	Fri Apr 02 17:37:45 2004 +0200
    74.3 @@ -19,6 +19,7 @@
    74.4    HOL-CTL \
    74.5    HOL-Extraction \
    74.6        HOL-Complex-HahnBanach \
    74.7 +      HOL-Complex-Import \
    74.8    HOL-Hoare \
    74.9    HOL-HoareParallel \
   74.10    HOL-IMP \
   74.11 @@ -236,6 +237,51 @@
   74.12  	@$(ISATOOL) usedir $(OUT)/HOL IMPP
   74.13  
   74.14  
   74.15 +## HOL-Complex-Import
   74.16 +
   74.17 +IMPORTER_FILES = Import/proof_kernel.ML Import/replay.ML \
   74.18 +  Import/shuffler.ML Import/MakeEqual.thy Import/HOL4Setup.thy \
   74.19 +  Import/HOL4Syntax.thy Import/HOL4Compat.thy Import/import_syntax.ML \
   74.20 +  Import/hol4rews.ML Import/import_package.ML Import/ROOT.ML
   74.21 +
   74.22 +HOL-Complex-Import: HOL-Complex $(LOG)/HOL-Complex-Import.gz
   74.23 +
   74.24 +$(LOG)/HOL-Complex-Import.gz: $(OUT)/HOL-Complex $(IMPORTER_FILES)
   74.25 +	@$(ISATOOL) usedir $(OUT)/HOL-Complex Import
   74.26 +
   74.27 +
   74.28 +## HOL-Complex-Generate-HOL
   74.29 +
   74.30 +HOL-Complex-Generate-HOL: HOL-Complex $(LOG)/HOL-Complex-Generate-HOL.gz
   74.31 +
   74.32 +$(LOG)/HOL-Complex-Generate-HOL.gz: $(OUT)/HOL-Complex $(IMPORTER_FILES)  \
   74.33 +  Import/Generate-HOL/GenHOL4Base.thy Import/Generate-HOL/GenHOL4Prob.thy \
   74.34 +  Import/Generate-HOL/GenHOL4Real.thy Import/Generate-HOL/GenHOL4Vec.thy  \
   74.35 +  Import/Generate-HOL/GenHOL4Word32.thy Import/Generate-HOL/ROOT.ML
   74.36 +	@cd Import; $(ISATOOL) usedir $(OUT)/HOL-Complex Generate-HOL
   74.37 +
   74.38 +
   74.39 +## HOL-Import-HOL
   74.40 +
   74.41 +HOL-Import-HOL: HOL-Complex $(LOG)/HOL-Import-HOL.gz
   74.42 +
   74.43 +HOL_IMPORT_FILES = arithmetic.imp bits.imp boolean_sequence.imp bool.imp \
   74.44 +  bword_arith.imp bword_bitop.imp bword_num.imp combin.imp divides.imp \
   74.45 +  hrat.imp hreal.imp ind_type.imp lim.imp list.imp marker.imp nets.imp \
   74.46 +  numeral.imp num.imp one.imp operator.imp option.imp pair.imp poly.imp \
   74.47 +  powser.imp pred_set.imp prime.imp prim_rec.imp prob_algebra.imp \
   74.48 +  prob_canon.imp prob_extra.imp prob.imp prob_indep.imp prob_pseudo.imp \
   74.49 +  prob_uniform.imp realax.imp real.imp relation.imp res_quan.imp rich_list.imp \
   74.50 +  seq.imp state_transformer.imp sum.imp topology.imp transc.imp word32.imp \
   74.51 +  word_base.imp word_bitop.imp word_num.imp
   74.52 +
   74.53 +$(LOG)/HOL-Import-HOL.gz: $(OUT)/HOL-Complex $(IMPORTER_FILES) \
   74.54 +  $(HOL_IMPORT_FILES:%=Import/HOL/%) Import/HOL/HOL4Base.thy \
   74.55 +  Import/HOL/HOL4Prob.thy Import/HOL/HOL4Real.thy Import/HOL/HOL4Vec.thy \
   74.56 +  Import/HOL/HOL4Word32.thy Import/HOL/HOL4.thy Import/HOL/ROOT.ML
   74.57 +	@cd Import/HOL; $(ISATOOL) usedir -b $(OUT)/HOL-Complex HOL-Import-HOL
   74.58 +
   74.59 +
   74.60  ## HOL-NumberTheory
   74.61  
   74.62  HOL-NumberTheory: HOL $(LOG)/HOL-NumberTheory.gz