file system structure separating HOL4 and HOL Light concerns
authorhaftmann
Sat, 03 Mar 2012 22:37:41 +0100
changeset 46787 3d3d8f8929a7
parent 46786 f0285e69d704
child 46788 aefdc0095d7e
file system structure separating HOL4 and HOL Light concerns
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/Generate-HOLLight/GenHOLLight.thy
src/HOL/Import/Generate-HOLLight/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/HOL4/Generated/HOL4Base.thy
src/HOL/Import/HOL4/Generated/HOL4Prob.thy
src/HOL/Import/HOL4/Generated/HOL4Real.thy
src/HOL/Import/HOL4/Generated/HOL4Vec.thy
src/HOL/Import/HOL4/Generated/HOL4Word32.thy
src/HOL/Import/HOL4/Generated/arithmetic.imp
src/HOL/Import/HOL4/Generated/bits.imp
src/HOL/Import/HOL4/Generated/bool.imp
src/HOL/Import/HOL4/Generated/boolean_sequence.imp
src/HOL/Import/HOL4/Generated/bword_arith.imp
src/HOL/Import/HOL4/Generated/bword_bitop.imp
src/HOL/Import/HOL4/Generated/bword_num.imp
src/HOL/Import/HOL4/Generated/combin.imp
src/HOL/Import/HOL4/Generated/divides.imp
src/HOL/Import/HOL4/Generated/hrat.imp
src/HOL/Import/HOL4/Generated/hreal.imp
src/HOL/Import/HOL4/Generated/ind_type.imp
src/HOL/Import/HOL4/Generated/lim.imp
src/HOL/Import/HOL4/Generated/list.imp
src/HOL/Import/HOL4/Generated/marker.imp
src/HOL/Import/HOL4/Generated/nets.imp
src/HOL/Import/HOL4/Generated/num.imp
src/HOL/Import/HOL4/Generated/numeral.imp
src/HOL/Import/HOL4/Generated/one.imp
src/HOL/Import/HOL4/Generated/operator.imp
src/HOL/Import/HOL4/Generated/option.imp
src/HOL/Import/HOL4/Generated/pair.imp
src/HOL/Import/HOL4/Generated/poly.imp
src/HOL/Import/HOL4/Generated/powser.imp
src/HOL/Import/HOL4/Generated/pred_set.imp
src/HOL/Import/HOL4/Generated/prim_rec.imp
src/HOL/Import/HOL4/Generated/prime.imp
src/HOL/Import/HOL4/Generated/prob.imp
src/HOL/Import/HOL4/Generated/prob_algebra.imp
src/HOL/Import/HOL4/Generated/prob_canon.imp
src/HOL/Import/HOL4/Generated/prob_extra.imp
src/HOL/Import/HOL4/Generated/prob_indep.imp
src/HOL/Import/HOL4/Generated/prob_pseudo.imp
src/HOL/Import/HOL4/Generated/prob_uniform.imp
src/HOL/Import/HOL4/Generated/real.imp
src/HOL/Import/HOL4/Generated/realax.imp
src/HOL/Import/HOL4/Generated/relation.imp
src/HOL/Import/HOL4/Generated/res_quan.imp
src/HOL/Import/HOL4/Generated/rich_list.imp
src/HOL/Import/HOL4/Generated/seq.imp
src/HOL/Import/HOL4/Generated/state_transformer.imp
src/HOL/Import/HOL4/Generated/sum.imp
src/HOL/Import/HOL4/Generated/topology.imp
src/HOL/Import/HOL4/Generated/transc.imp
src/HOL/Import/HOL4/Generated/word32.imp
src/HOL/Import/HOL4/Generated/word_base.imp
src/HOL/Import/HOL4/Generated/word_bitop.imp
src/HOL/Import/HOL4/Generated/word_num.imp
src/HOL/Import/HOL4/Template/GenHOL4Base.thy
src/HOL/Import/HOL4/Template/GenHOL4Prob.thy
src/HOL/Import/HOL4/Template/GenHOL4Real.thy
src/HOL/Import/HOL4/Template/GenHOL4Vec.thy
src/HOL/Import/HOL4/Template/GenHOL4Word32.thy
src/HOL/Import/HOLLight/HOLLight.thy
src/HOL/Import/HOLLight/ROOT.ML
src/HOL/Import/HOLLight/hollight.imp
src/HOL/Import/HOL_Light/Generated/HOLLight.thy
src/HOL/Import/HOL_Light/Generated/hollight.imp
src/HOL/Import/HOL_Light/Template/GenHOLLight.thy
src/HOL/Import/README
--- a/src/HOL/Import/Generate-HOL/GenHOL4Base.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,279 +0,0 @@
-(*  Title:      HOL/Import/Generate-HOL/GenHOL4Base.thy
-    Author:     Sebastian Skalberg, TU Muenchen
-*)
-
-theory GenHOL4Base imports "../HOL4Compat" "../HOL4Syntax" begin;
-
-import_segment "hol4";
-
-setup_dump "../HOL" "HOL4Base";
-
-append_dump {*theory HOL4Base imports "../HOL4Compat" "../HOL4Syntax" begin*};
-
-import_theory "~~/src/HOL/Import/HOL" bool;
-
-type_maps
-  bool            > HOL.bool;
-
-const_maps
-  T               > HOL.True
-  F               > HOL.False
-  "!"             > HOL.All
-  "/\\"           > HOL.conj
-  "\\/"           > HOL.disj
-  "?"             > HOL.Ex
-  "?!"            > HOL.Ex1
-  "~"             > HOL.Not
-  COND            > HOL.If
-  bool_case       > Product_Type.bool.bool_case
-  ONE_ONE         > HOL4Setup.ONE_ONE
-  ONTO            > Fun.surj
-  TYPE_DEFINITION > HOL4Setup.TYPE_DEFINITION
-  LET             > HOL4Compat.LET;
-
-ignore_thms
-  BOUNDED_DEF
-  BOUNDED_THM
-  UNBOUNDED_DEF
-  UNBOUNDED_THM;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" combin;
-
-const_maps
-  o > Fun.comp;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" sum;
-
-type_maps
-  sum > Sum_Type.sum;
-
-const_maps
-  INL      > Sum_Type.Inl
-  INR      > Sum_Type.Inr
-  ISL      > HOL4Compat.ISL
-  ISR      > HOL4Compat.ISR
-  OUTL     > HOL4Compat.OUTL
-  OUTR     > HOL4Compat.OUTR
-  sum_case > Sum_Type.sum.sum_case;
-
-ignore_thms
-  sum_TY_DEF
-  sum_ISO_DEF
-  IS_SUM_REP
-  INL_DEF
-  INR_DEF
-  sum_Axiom;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" one;
-
-type_maps
-  one > Product_Type.unit;
-
-const_maps
-  one > Product_Type.Unity;
-
-ignore_thms
-    one_TY_DEF
-    one_axiom
-    one_Axiom
-    one_DEF;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" option;
-
-type_maps
-    option > Option.option;
-
-const_maps
-    NONE        > Option.option.None
-    SOME        > Option.option.Some
-    option_case > Option.option.option_case
-    OPTION_MAP  > Option.map
-    THE         > Option.the
-    IS_SOME     > HOL4Compat.IS_SOME
-    IS_NONE     > HOL4Compat.IS_NONE
-    OPTION_JOIN > HOL4Compat.OPTION_JOIN;
-
-ignore_thms
-    option_axiom
-    option_Axiom
-    option_TY_DEF
-    option_REP_ABS_DEF
-    SOME_DEF
-    NONE_DEF;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" marker;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" relation;
-
-const_renames
-  reflexive > pred_reflexive;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" pair;
-
-type_maps
-    prod > Product_Type.prod;
-
-const_maps
-    ","       > Product_Type.Pair
-    FST       > Product_Type.fst
-    SND       > Product_Type.snd
-    CURRY     > Product_Type.curry
-    UNCURRY   > Product_Type.prod.prod_case
-    "##"      > Product_Type.map_pair
-    pair_case > Product_Type.prod.prod_case;
-
-ignore_thms
-    prod_TY_DEF
-    MK_PAIR_DEF
-    IS_PAIR_DEF
-    ABS_REP_prod
-    COMMA_DEF;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" num;
-
-type_maps
-  num > Nat.nat;
-
-const_maps
-  SUC > Nat.Suc
-  0   > Groups.zero_class.zero :: nat;
-
-ignore_thms
-    num_TY_DEF
-    num_ISO_DEF
-    IS_NUM_REP
-    ZERO_REP_DEF
-    SUC_REP_DEF
-    ZERO_DEF
-    SUC_DEF;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prim_rec;
-
-const_maps
-    "<" > Orderings.ord_class.less :: "nat \<Rightarrow> nat \<Rightarrow> bool";
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" arithmetic;
-
-const_maps
-  ALT_ZERO     > HOL4Compat.ALT_ZERO
-  NUMERAL_BIT1 > HOL4Compat.NUMERAL_BIT1
-  NUMERAL_BIT2 > HOL4Compat.NUMERAL_BIT2
-  NUMERAL      > HOL4Compat.NUMERAL
-  num_case     > Nat.nat.nat_case
-  ">"          > HOL4Compat.nat_gt
-  ">="         > HOL4Compat.nat_ge
-  FUNPOW       > HOL4Compat.FUNPOW
-  "<="         > Orderings.ord_class.less_eq :: "nat \<Rightarrow> nat \<Rightarrow> bool"
-  "+"          > Groups.plus_class.plus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  "*"          > Groups.times_class.times :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  "-"          > Groups.minus_class.minus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  MIN          > Orderings.ord_class.min :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  MAX          > Orderings.ord_class.max :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  DIV          > Divides.div_class.div :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  MOD          > Divides.div_class.mod :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  EXP          > Power.power_class.power :: "nat \<Rightarrow> nat \<Rightarrow> nat";
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" hrat;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" hreal;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" numeral;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" ind_type;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" divides;
-
-const_maps
-  divides > Rings.dvd_class.dvd :: "nat \<Rightarrow> nat \<Rightarrow> bool";
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prime;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" list;
-
-type_maps
-    list > List.list;
-
-const_maps
-  CONS      > List.list.Cons
-  NIL       > List.list.Nil
-  list_case > List.list.list_case
-  NULL      > List.null
-  HD        > List.hd
-  TL        > List.tl
-  MAP       > List.map
-  MEM       > HOL4Compat.list_mem
-  FILTER    > List.filter
-  FOLDL     > List.foldl
-  EVERY     > List.list_all
-  REVERSE   > List.rev
-  LAST      > List.last
-  FRONT     > List.butlast
-  APPEND    > List.append
-  FLAT      > List.concat
-  LENGTH    > Nat.size_class.size
-  REPLICATE > List.replicate
-  list_size > HOL4Compat.list_size
-  SUM       > HOL4Compat.sum
-  FOLDR     > HOL4Compat.FOLDR
-  EXISTS    > List.list_ex
-  MAP2      > HOL4Compat.map2
-  ZIP       > HOL4Compat.ZIP
-  UNZIP     > HOL4Compat.unzip;
-
-ignore_thms
-  list_TY_DEF
-  list_repfns
-  list0_def
-  list1_def
-  NIL
-  CONS_def;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" pred_set;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" operator;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" rich_list;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" state_transformer;
-end_import;
-
-append_dump "end";
-
-flush_dump;
-
-import_segment "";
-
-end
--- a/src/HOL/Import/Generate-HOL/GenHOL4Prob.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-(*  Title:      HOL/Import/Generate-HOL/GenHOL4Prob.thy
-    Author:     Sebastian Skalberg, TU Muenchen
-*)
-
-theory GenHOL4Prob imports GenHOL4Real begin
-
-import_segment "hol4";
-
-setup_dump "../HOL" "HOL4Prob";
-
-append_dump "theory HOL4Prob imports HOL4Real begin";
-
-import_theory "~~/src/HOL/Import/HOL" prob_extra;
-
-const_moves
-  COMPL > GenHOL4Base.pred_set.COMPL;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prob_canon;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" boolean_sequence;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prob_algebra;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prob;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prob_pseudo;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prob_indep;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" prob_uniform;
-end_import;
-
-append_dump "end";
-
-flush_dump;
-
-import_segment "";
-
-end
--- a/src/HOL/Import/Generate-HOL/GenHOL4Real.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-(*  Title:      HOL/Import/Generate-HOL/GenHOL4Real.thy
-    Author:     Sebastian Skalberg (TU Muenchen)
-*)
-
-theory GenHOL4Real imports GenHOL4Base begin
-
-import_segment "hol4";
-
-setup_dump "../HOL" "HOL4Real";
-
-append_dump "theory HOL4Real imports HOL4Base begin";
-
-import_theory "~~/src/HOL/Import/HOL" realax;
-
-type_maps
-  real > RealDef.real;
-
-const_maps
-  real_0   > Groups.zero_class.zero :: real
-  real_1   > Groups.one_class.one   :: real
-  real_neg > Groups.uminus_class.uminus :: "real \<Rightarrow> real"
-  inv > Fields.inverse_class.inverse :: "real \<Rightarrow> real"
-  real_add > Groups.plus_class.plus :: "real \<Rightarrow> real \<Rightarrow> real"
-  real_sub > Groups.minus_class.minus :: "real \<Rightarrow> real \<Rightarrow> real"
-  real_mul > Groups.times_class.times :: "real \<Rightarrow> real \<Rightarrow> real"
-  real_div > Fields.inverse_class.divide :: "real \<Rightarrow> real \<Rightarrow> real"
-  real_lt > Orderings.ord_class.less :: "real \<Rightarrow> real \<Rightarrow> bool"
-  mk_real > HOL.undefined   (* Otherwise proof_import_concl fails *)
-  dest_real > HOL.undefined
-
-ignore_thms
-    real_TY_DEF
-    real_tybij
-    real_0
-    real_1
-    real_neg
-    real_inv
-    real_add
-    real_mul
-    real_lt
-    real_of_hreal
-    hreal_of_real
-    REAL_ISO_EQ
-    REAL_POS
-    SUP_ALLPOS_LEMMA1
-    SUP_ALLPOS_LEMMA2
-    SUP_ALLPOS_LEMMA3
-    SUP_ALLPOS_LEMMA4;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" real;
-
-const_maps
-  real_gt     > HOL4Compat.real_gt
-  real_ge     > HOL4Compat.real_ge
-  real_lte    > Orderings.ord_class.less_eq :: "real \<Rightarrow> real \<Rightarrow> bool"
-  real_sub    > Groups.minus_class.minus :: "real \<Rightarrow> real \<Rightarrow> real"
-  "/"         > Fields.inverse_class.divide :: "real \<Rightarrow> real \<Rightarrow> real"
-  pow         > Power.power_class.power :: "real \<Rightarrow> nat \<Rightarrow> real"
-  abs         > Groups.abs_class.abs :: "real => real"
-  real_of_num > RealDef.real :: "nat => real";
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" topology;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" nets;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" seq;
-const_renames
-"-->" > "hol4-->";
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" lim;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" powser;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" transc;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" poly;
-end_import;
-
-append_dump "end";
-
-flush_dump;
-
-import_segment "";
-
-end
--- a/src/HOL/Import/Generate-HOL/GenHOL4Vec.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-(*  Title:      HOL/Import/Generate-HOL/GenHOL4Vec.thy
-    Author:     Sebastian Skalberg, TU Muenchen
-*)
-
-theory GenHOL4Vec imports GenHOL4Base begin
-
-import_segment "hol4";
-
-setup_dump "../HOL" "HOL4Vec";
-
-append_dump "theory HOL4Vec imports HOL4Base begin";
-
-import_theory "~~/src/HOL/Import/HOL" res_quan;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" word_base;
-
-const_renames
-  BIT > bit;
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" word_num;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" word_bitop;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" bword_num;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" bword_arith;
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" bword_bitop;
-end_import;
-
-append_dump "end";
-
-flush_dump;
-
-import_segment "";
-
-end
--- a/src/HOL/Import/Generate-HOL/GenHOL4Word32.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-(*  Title:      HOL/Import/Generate-HOL/GenHOL4Word32.thy
-    Author:     Sebastian Skalberg, TU Muenchen
-*)
-
-theory GenHOL4Word32 imports GenHOL4Base begin;
-
-import_segment "hol4";
-
-setup_dump "../HOL" "HOL4Word32";
-
-append_dump "theory HOL4Word32 imports HOL4Base begin";
-
-import_theory "~~/src/HOL/Import/HOL" bits;
-
-const_renames
-  BIT > bit
-
-end_import;
-
-import_theory "~~/src/HOL/Import/HOL" word32;
-
-const_renames
-  "==" > EQUIV;
-
-end_import;
-
-append_dump "end";
-
-flush_dump;
-
-import_segment "";
-
-end
--- a/src/HOL/Import/Generate-HOL/ROOT.ML	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-use_thy "GenHOL4Prob";
-use_thy "GenHOL4Vec";
-use_thy "GenHOL4Word32";
--- a/src/HOL/Import/Generate-HOLLight/GenHOLLight.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-(*  Title:      HOL/Import/Generate-HOLLight/GenHOLLight.thy
-    Author:     Steven Obua, TU Muenchen
-    Author:     Cezary Kaliszyk
-*)
-
-theory GenHOLLight imports "../HOLLightCompat" "../HOL4Syntax" begin
-
-;import_segment "hollight"
-
-;setup_dump "../HOLLight" "HOLLight";
-
-;append_dump {*theory HOLLight imports "../HOLLightCompat" "../HOL4Syntax" begin *}
-
-import_theory "~~/src/HOL/Import/HOLLight" hollight
-
-;ignore_thms
-  (* Unit type *)
-  TYDEF_1 DEF_one
-  (* Product type *)
-  TYDEF_prod "DEF_," DEF_mk_pair REP_ABS_PAIR
-  (* Option type *)
-  TYDEF_option DEF_NONE DEF_SOME
-  (* Sum type *)
-  TYDEF_sum DEF_INL DEF_INR DEF_OUTL DEF_OUTR
-  (* Naturals *)
-  TYDEF_num DEF__0 DEF_SUC
-  (* Lists *)
-  TYDEF_list DEF_NIL DEF_CONS DEF_HD DEF_TL DEF_MAP2 DEF_ITLIST2 ALL_MAP EX_MAP
-  DEF_ASSOC MEM_ASSOC DEF_ZIP EL_TL
-
-  (* list_of_set uses Isabelle lists with HOLLight CARD *)
-  DEF_list_of_set LIST_OF_SET_PROPERTIES SET_OF_LIST_OF_SET LENGTH_LIST_OF_SET
-  MEM_LIST_OF_SET HAS_SIZE_SET_OF_LIST FINITE_SET_OF_LIST
-  (* UNIV *)
-  DIMINDEX_FINITE_SUM  DIMINDEX_HAS_SIZE_FINITE_SUM FSTCART_PASTECART
-  SNDCART_PASTECART PASTECART_FST_SND PASTECART_EQ FORALL_PASTECART EXISTS_PASTECART
-  (* Reals *)
-  (* TYDEF_real DEF_real_of_num DEF_real_neg DEF_real_add DEF_real_mul DEF_real_le
-  DEF_real_inv REAL_HREAL_LEMMA1 REAL_HREAL_LEMMA2 *)
-  (* Integers *)
-  (* TYDEF_int DEF_int_divides DEF_int_coprime*)
-  (* HOLLight CARD and CASEWISE with Isabelle lists *)
-  CARD_SET_OF_LIST_LE CASEWISE CASEWISE_CASES RECURSION_CASEWISE CASEWISE_WORKS
-  WF_REC_CASES RECURSION_CASEWISE_PAIRWISE
-
-;type_maps
-  bool > HOL.bool
-  "fun" > "fun"
-  N_1 >  Product_Type.unit
-  prod > Product_Type.prod
-  ind > Nat.ind
-  num > Nat.nat
-  sum > Sum_Type.sum
-  option > Datatype.option
-  list > List.list
-(*real > RealDef.real *)
-(*int > Int.int *)
-
-;const_renames
-  "==" > "eqeq"
-  "ALL" > list_ALL
-  "EX" > list_EX
-
-;const_maps
-  T > HOL.True
-  F > HOL.False
-  "=" > HOL.eq
-  "==>" > HOL.implies
-  "/\\" > HOL.conj
-  "\\/" > HOL.disj
-  "!" > HOL.All
-  "?" > HOL.Ex
-  "?!" > HOL.Ex1
-  "~" > HOL.Not
-  COND > HOL.If
-  ONE_ONE > Fun.inj
-  ONTO > Fun.surj
-  o > Fun.comp
-  "@" > Hilbert_Choice.Eps
-  CHOICE > Hilbert_Choice.Eps
-  I > Fun.id
-  one > Product_Type.Unity
-  LET > HOLLightCompat.LET
-  mk_pair > Product_Type.Pair_Rep
-  "," > Product_Type.Pair
-  FST > Product_Type.fst
-  SND > Product_Type.snd
-  CURRY > Product_Type.curry
-  "_0" > Groups.zero_class.zero :: nat
-  SUC > Nat.Suc
-  PRE > HOLLightCompat.Pred
-  NUMERAL > HOLLightCompat.NUMERAL
-  mk_num > Fun.id
-  "+" > Groups.plus_class.plus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  "*" > Groups.times_class.times :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  "-" > Groups.minus_class.minus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  "<" > Orderings.ord_class.less :: "nat \<Rightarrow> nat \<Rightarrow> bool"
-  "<=" > Orderings.ord_class.less_eq :: "nat \<Rightarrow> nat \<Rightarrow> bool"
-  ">" > Orderings.ord_class.greater :: "nat \<Rightarrow> nat \<Rightarrow> bool"
-  ">=" > Orderings.ord_class.greater_eq :: "nat \<Rightarrow> nat \<Rightarrow> bool"
-  EXP > Power.power_class.power :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  MAX > Orderings.ord_class.max :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  MIN > Orderings.ord_class.min :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  DIV > Divides.div_class.div :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  MOD > Divides.div_class.mod :: "nat \<Rightarrow> nat \<Rightarrow> nat"
-  BIT0 > HOLLightCompat.NUMERAL_BIT0
-  BIT1 > HOLLightCompat.NUMERAL_BIT1
-  INL > Sum_Type.Inl
-  INR > Sum_Type.Inr
-  OUTL > HOLLightCompat.OUTL
-  OUTR > HOLLightCompat.OUTR
-  NONE > Datatype.None
-  SOME > Datatype.Some
-  EVEN > Parity.even_odd_class.even :: "nat \<Rightarrow> bool"
-  ODD > HOLLightCompat.ODD
-  FACT > Fact.fact_class.fact :: "nat \<Rightarrow> nat"
-  WF > Wellfounded.wfP
-  NIL > List.list.Nil
-  CONS > List.list.Cons
-  APPEND > List.append
-  REVERSE > List.rev
-  LENGTH > List.length
-  MAP > List.map
-  LAST > List.last
-  BUTLAST > List.butlast
-  REPLICATE > List.replicate
-  ITLIST > List.foldr
-  list_ALL > List.list_all
-  ALL2 > List.list_all2
-  list_EX > List.list_ex
-  FILTER > List.filter
-  NULL > List.null
-  HD > List.hd
-  TL > List.tl
-  EL > HOLLightList.list_el
-  ZIP > List.zip
-  MAP2 > HOLLightList.map2
-  ITLIST2 > HOLLightList.fold2
-  MEM > HOLLightList.list_mem
-  set_of_list > List.set
-  IN > Set.member
-  INSERT > Set.insert
-  EMPTY > Orderings.bot_class.bot :: "'a \<Rightarrow> bool"
-  GABS > Hilbert_Choice.Eps
-  GEQ > HOL.eq
-  GSPEC > Set.Collect
-  SETSPEC > HOLLightCompat.SETSPEC
-  UNION > Lattices.sup_class.sup :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
-  UNIONS > Complete_Lattices.Sup_class.Sup :: "(('a \<Rightarrow> bool) \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
-  INTER > Lattices.inf_class.inf :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
-  INTERS > Complete_Lattices.Inf_class.Inf :: "(('a \<Rightarrow> bool) \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
-  DIFF > Groups.minus_class.minus :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
-  SUBSET > Orderings.ord_class.less_eq :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
-  PSUBSET > Orderings.ord_class.less :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
-  DELETE > HOLLightCompat.DELETE
-  DISJOINT > HOLLightCompat.DISJOINT
-  IMAGE > Set.image
-  FINITE > Finite_Set.finite
-  INFINITE > HOLLightCompat.INFINITE
-  ".." > HOLLightCompat.dotdot
-  UNIV > Orderings.top_class.top :: "'a \<Rightarrow> bool"
-  MEASURE > HOLLightCompat.MEASURE
-(*real_of_num > RealDef.real :: "nat => real"
-  real_neg > Groups.uminus_class.uminus :: "real => real"
-  real_inv > Fields.inverse_class.inverse :: "real => real"
-  real_add > Groups.plus_class.plus :: "real => real => real"
-  real_sub > Groups.minus_class.minus :: "real => real => real"
-  real_mul > Groups.times_class.times :: "real => real => real"
-  real_div > Fields.inverse_class.divide :: "real => real => real"
-  real_lt > Orderings.ord_class.less :: "real \<Rightarrow> real \<Rightarrow> bool"
-  real_le > Orderings.ord_class.less_eq :: "real \<Rightarrow> real \<Rightarrow> bool"
-  real_gt > Orderings.ord_class.greater :: "real \<Rightarrow> real \<Rightarrow> bool"
-  real_ge > Orderings.ord_class.greater_eq :: "real \<Rightarrow> real \<Rightarrow> bool"
-  real_pow > Power.power_class.power :: "real \<Rightarrow> nat \<Rightarrow> real"
-  real_abs > Groups.abs_class.abs :: "real \<Rightarrow> real"
-  real_max > Orderings.ord_class.max :: "real \<Rightarrow> real \<Rightarrow> real"
-  real_min > Orderings.ord_class.min :: "real \<Rightarrow> real \<Rightarrow> real"
-  real_sgn > Groups.sgn_class.sgn :: "real \<Rightarrow> real"*)
-(*real_of_int > RealDef.real :: "int => real"
-  int_of_real > Archimedean_Field.floor :: "real \<Rightarrow> int"
-  dest_int > RealDef.real :: "int => real"
-  mk_int > Archimedean_Field.floor :: "real \<Rightarrow> int"
-  int_lt > Orderings.ord_class.less :: "int \<Rightarrow> int \<Rightarrow> bool"
-  int_le > Orderings.ord_class.less_eq :: "int \<Rightarrow> int \<Rightarrow> bool"
-  int_gt > Orderings.ord_class.greater :: "int \<Rightarrow> int \<Rightarrow> bool"
-  int_ge > Orderings.ord_class.greater_eq :: "int \<Rightarrow> int \<Rightarrow> bool"
-  int_of_num > Nat.semiring_1_class.of_nat :: "nat \<Rightarrow> int"
-  int_neg > Groups.uminus_class.uminus :: "int \<Rightarrow> int"
-  int_add > Groups.plus_class.plus :: "int => int => int"
-  int_sub > Groups.minus_class.minus :: "int => int => int"
-  int_mul > Groups.times_class.times :: "int => int => int"
-  int_abs > Groups.abs_class.abs :: "int \<Rightarrow> int"
-  int_max > Orderings.ord_class.max :: "int \<Rightarrow> int \<Rightarrow> int"
-  int_min > Orderings.ord_class.min :: "int \<Rightarrow> int \<Rightarrow> int"
-  int_sgn > Groups.sgn_class.sgn :: "int \<Rightarrow> int"
-  int_pow > Power.power_class.power :: "int \<Rightarrow> nat \<Rightarrow> int"
-  int_div > HOLLightInt.hl_div :: "int \<Rightarrow> int \<Rightarrow> int"
-  div > HOLLightInt.hl_div :: "int \<Rightarrow> int \<Rightarrow> int"
-  mod_int > HOLLightInt.hl_mod :: "int \<Rightarrow> int \<Rightarrow> int"
-  rem > HOLLightInt.hl_mod :: "int \<Rightarrow> int \<Rightarrow> int"
-  int_divides > Rings.dvd_class.dvd :: "int \<Rightarrow> int \<Rightarrow> bool"
-  int_mod > HOLLightInt.int_mod :: "int \<Rightarrow> int \<Rightarrow> int \<Rightarrow> bool"
-  int_gcd > HOLLightInt.int_gcd :: "int \<times> int \<Rightarrow> int"
-  int_coprime > HOLLightInt.int_coprime :: "int \<times> int \<Rightarrow> bool"
-  eqeq > HOLLightInt.eqeq*)
-
-;end_import
-
-;append_dump "end"
-
-;flush_dump
-
-;import_segment ""
-
-end
--- a/src/HOL/Import/Generate-HOLLight/ROOT.ML	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-use_thy "GenHOLLight";
--- a/src/HOL/Import/HOL/HOL4.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-(*  Title:      HOL/Import/HOL/HOL4.thy
-    Author:     Sebastian Skalberg, TU Muenchen
-*)
-
-theory HOL4
-imports HOL4Vec HOL4Word32 HOL4Real
-begin
-
-end
-
--- a/src/HOL/Import/HOL/HOL4Base.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4499 +0,0 @@
-(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
-
-theory HOL4Base imports "../HOL4Compat" "../HOL4Syntax" begin
-
-setup_theory "~~/src/HOL/Import/HOL" bool
-
-definition
-  ARB :: "'a"  where
-  "ARB == SOME x. True"
-
-lemma ARB_DEF: "ARB = (SOME x. True)"
-  sorry
-
-definition
-  IN :: "'a => ('a => bool) => bool"  where
-  "IN == %x f. f x"
-
-lemma IN_DEF: "IN = (%x f. f x)"
-  sorry
-
-definition
-  RES_FORALL :: "('a => bool) => ('a => bool) => bool"  where
-  "RES_FORALL == %p m. ALL x. IN x p --> m x"
-
-lemma RES_FORALL_DEF: "RES_FORALL = (%p m. ALL x. IN x p --> m x)"
-  sorry
-
-definition
-  RES_EXISTS :: "('a => bool) => ('a => bool) => bool"  where
-  "RES_EXISTS == %p m. EX x. IN x p & m x"
-
-lemma RES_EXISTS_DEF: "RES_EXISTS = (%p m. EX x. IN x p & m x)"
-  sorry
-
-definition
-  RES_EXISTS_UNIQUE :: "('a => bool) => ('a => bool) => bool"  where
-  "RES_EXISTS_UNIQUE ==
-%p m. RES_EXISTS p m &
-      RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y))"
-
-lemma RES_EXISTS_UNIQUE_DEF: "RES_EXISTS_UNIQUE =
-(%p m. RES_EXISTS p m &
-       RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y)))"
-  sorry
-
-definition
-  RES_SELECT :: "('a => bool) => ('a => bool) => 'a"  where
-  "RES_SELECT == %p m. SOME x. IN x p & m x"
-
-lemma RES_SELECT_DEF: "RES_SELECT = (%p m. SOME x. IN x p & m x)"
-  sorry
-
-lemma EXCLUDED_MIDDLE: "t | ~ t"
-  sorry
-
-lemma FORALL_THM: "All f = All f"
-  sorry
-
-lemma EXISTS_THM: "Ex f = Ex f"
-  sorry
-
-lemma F_IMP: "[| ~ t; t |] ==> False"
-  sorry
-
-lemma NOT_AND: "~ (t & ~ t)"
-  sorry
-
-lemma AND_CLAUSES: "(True & t) = t &
-(t & True) = t & (False & t) = False & (t & False) = False & (t & t) = t"
-  sorry
-
-lemma OR_CLAUSES: "(True | t) = True &
-(t | True) = True & (False | t) = t & (t | False) = t & (t | t) = t"
-  sorry
-
-lemma IMP_CLAUSES: "(True --> t) = t &
-(t --> True) = True &
-(False --> t) = True & (t --> t) = True & (t --> False) = (~ t)"
-  sorry
-
-lemma NOT_CLAUSES: "(ALL t. (~ ~ t) = t) & (~ True) = False & (~ False) = True"
-  sorry
-
-lemma BOOL_EQ_DISTINCT: "True ~= False & False ~= True"
-  sorry
-
-lemma EQ_CLAUSES: "(True = t) = t & (t = True) = t & (False = t) = (~ t) & (t = False) = (~ t)"
-  sorry
-
-lemma COND_CLAUSES: "(if True then t1 else t2) = t1 & (if False then t1 else t2) = t2"
-  sorry
-
-lemma SELECT_UNIQUE: "(!!y. P y = (y = x)) ==> Eps P = x"
-  sorry
-
-lemma BOTH_EXISTS_AND_THM: "(EX x::'a. (P::bool) & (Q::bool)) = ((EX x::'a. P) & (EX x::'a. Q))"
-  sorry
-
-lemma BOTH_FORALL_OR_THM: "(ALL x::'a. (P::bool) | (Q::bool)) = ((ALL x::'a. P) | (ALL x::'a. Q))"
-  sorry
-
-lemma BOTH_FORALL_IMP_THM: "(ALL x::'a. (P::bool) --> (Q::bool)) = ((EX x::'a. P) --> (ALL x::'a. Q))"
-  sorry
-
-lemma BOTH_EXISTS_IMP_THM: "(EX x::'a. (P::bool) --> (Q::bool)) = ((ALL x::'a. P) --> (EX x::'a. Q))"
-  sorry
-
-lemma OR_IMP_THM: "(A = (B | A)) = (B --> A)"
-  sorry
-
-lemma DE_MORGAN_THM: "(~ (A & B)) = (~ A | ~ B) & (~ (A | B)) = (~ A & ~ B)"
-  sorry
-
-lemma IMP_F_EQ_F: "(t --> False) = (t = False)"
-  sorry
-
-lemma COND_RATOR: "(if b::bool then f::'a => 'b else (g::'a => 'b)) (x::'a) =
-(if b then f x else g x)"
-  sorry
-
-lemma COND_ABS: "(%x. if b then f x else g x) = (if b then f else g)"
-  sorry
-
-lemma COND_EXPAND: "(if b then t1 else t2) = ((~ b | t1) & (b | t2))"
-  sorry
-
-lemma ONE_ONE_THM: "inj f = (ALL x1 x2. f x1 = f x2 --> x1 = x2)"
-  sorry
-
-lemma ABS_REP_THM: "(op ==>::prop => prop => prop)
- ((Trueprop::bool => prop)
-   ((Ex::(('b::type => 'a::type) => bool) => bool)
-     ((TYPE_DEFINITION::('a::type => bool)
-                        => ('b::type => 'a::type) => bool)
-       (P::'a::type => bool))))
- ((Trueprop::bool => prop)
-   ((Ex::(('b::type => 'a::type) => bool) => bool)
-     (%x::'b::type => 'a::type.
-         (Ex::(('a::type => 'b::type) => bool) => bool)
-          (%abs::'a::type => 'b::type.
-              (op &::bool => bool => bool)
-               ((All::('b::type => bool) => bool)
-                 (%a::'b::type.
-                     (op =::'b::type => 'b::type => bool) (abs (x a)) a))
-               ((All::('a::type => bool) => bool)
-                 (%r::'a::type.
-                     (op =::bool => bool => bool) (P r)
-                      ((op =::'a::type => 'a::type => bool) (x (abs r))
-                        r)))))))"
-  sorry
-
-lemma LET_RAND: "(P::'b => bool) (Let (M::'a) (N::'a => 'b)) = (let x::'a = M in P (N x))"
-  sorry
-
-lemma LET_RATOR: "Let (M::'a) (N::'a => 'b => 'c) (b::'b) = (let x::'a = M in N x b)"
-  sorry
-
-lemma AND_CONG: "(Q --> P = P') & (P' --> Q = Q') ==> (P & Q) = (P' & Q')"
-  sorry
-
-lemma OR_CONG: "(~ Q --> P = P') & (~ P' --> Q = Q') ==> (P | Q) = (P' | Q')"
-  sorry
-
-lemma COND_CONG: "P = Q & (Q --> x = x') & (~ Q --> y = y')
-==> (if P then x else y) = (if Q then x' else y')"
-  sorry
-
-lemma MONO_COND: "[| x ==> y; z ==> w; if b then x else z |] ==> if b then y else w"
-  sorry
-
-lemma SKOLEM_THM: "(ALL x. Ex (P x)) = (EX f. ALL x. P x (f x))"
-  sorry
-
-lemma bool_case_thm: "(ALL (e0::'a) e1::'a. (case True of True => e0 | False => e1) = e0) &
-(ALL (e0::'a) e1::'a. (case False of True => e0 | False => e1) = e1)"
-  sorry
-
-lemma bool_case_ID: "(case b of True => x | _ => x) = x"
-  sorry
-
-lemma boolAxiom: "EX x. x True = e0 & x False = e1"
-  sorry
-
-lemma UEXISTS_OR_THM: "EX! x. P x | Q x ==> Ex1 P | Ex1 Q"
-  sorry
-
-lemma UEXISTS_SIMP: "(EX! x::'a. (t::bool)) = (t & (ALL x::'a. All (op = x)))"
-  sorry
-
-consts
-  RES_ABSTRACT :: "('a => bool) => ('a => 'b) => 'a => 'b" 
-
-specification (RES_ABSTRACT) RES_ABSTRACT_DEF: "(ALL (p::'a => bool) (m::'a => 'b) x::'a.
-    IN x p --> RES_ABSTRACT p m x = m x) &
-(ALL (p::'a => bool) (m1::'a => 'b) m2::'a => 'b.
-    (ALL x::'a. IN x p --> m1 x = m2 x) -->
-    RES_ABSTRACT p m1 = RES_ABSTRACT p m2)"
-  sorry
-
-lemma BOOL_FUN_CASES_THM: "f = (%b. True) | f = (%b. False) | f = (%b. b) | f = Not"
-  sorry
-
-lemma BOOL_FUN_INDUCT: "P (%b. True) & P (%b. False) & P (%b. b) & P Not ==> P x"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" combin
-
-definition
-  K :: "'a => 'b => 'a"  where
-  "K == %x y. x"
-
-lemma K_DEF: "K = (%x y. x)"
-  sorry
-
-definition
-  S :: "('a => 'b => 'c) => ('a => 'b) => 'a => 'c"  where
-  "S == %f g x. f x (g x)"
-
-lemma S_DEF: "S = (%f g x. f x (g x))"
-  sorry
-
-definition
-  I :: "'a => 'a"  where
-  "(op ==::('a::type => 'a::type) => ('a::type => 'a::type) => prop)
- (I::'a::type => 'a::type)
- ((S::('a::type => ('a::type => 'a::type) => 'a::type)
-      => ('a::type => 'a::type => 'a::type) => 'a::type => 'a::type)
-   (K::'a::type => ('a::type => 'a::type) => 'a::type)
-   (K::'a::type => 'a::type => 'a::type))"
-
-lemma I_DEF: "(op =::('a::type => 'a::type) => ('a::type => 'a::type) => bool)
- (I::'a::type => 'a::type)
- ((S::('a::type => ('a::type => 'a::type) => 'a::type)
-      => ('a::type => 'a::type => 'a::type) => 'a::type => 'a::type)
-   (K::'a::type => ('a::type => 'a::type) => 'a::type)
-   (K::'a::type => 'a::type => 'a::type))"
-  sorry
-
-definition
-  C :: "('a => 'b => 'c) => 'b => 'a => 'c"  where
-  "C == %f x y. f y x"
-
-lemma C_DEF: "C = (%f x y. f y x)"
-  sorry
-
-definition
-  W :: "('a => 'a => 'b) => 'a => 'b"  where
-  "W == %f x. f x x"
-
-lemma W_DEF: "W = (%f x. f x x)"
-  sorry
-
-lemma I_THM: "I x = x"
-  sorry
-
-lemma I_o_ID: "I o f = f & f o I = f"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" sum
-
-lemma ISL_OR_ISR: "ISL x | ISR x"
-  sorry
-
-lemma INL: "ISL x ==> Inl (OUTL x) = x"
-  sorry
-
-lemma INR: "ISR x ==> Inr (OUTR x) = x"
-  sorry
-
-lemma sum_case_cong: "(M::'b + 'c) = (M'::'b + 'c) &
-(ALL x::'b. M' = Inl x --> (f::'b => 'a) x = (f'::'b => 'a) x) &
-(ALL y::'c. M' = Inr y --> (g::'c => 'a) y = (g'::'c => 'a) y)
-==> sum_case f g M = sum_case f' g' M'"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" one
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" option
-
-lemma option_CLAUSES: "(op &::bool => bool => bool)
- ((All::('a::type => bool) => bool)
-   (%x::'a::type.
-       (All::('a::type => bool) => bool)
-        (%y::'a::type.
-            (op =::bool => bool => bool)
-             ((op =::'a::type option => 'a::type option => bool)
-               ((Some::'a::type => 'a::type option) x)
-               ((Some::'a::type => 'a::type option) y))
-             ((op =::'a::type => 'a::type => bool) x y))))
- ((op &::bool => bool => bool)
-   ((All::('a::type => bool) => bool)
-     (%x::'a::type.
-         (op =::'a::type => 'a::type => bool)
-          ((the::'a::type option => 'a::type)
-            ((Some::'a::type => 'a::type option) x))
-          x))
-   ((op &::bool => bool => bool)
-     ((All::('a::type => bool) => bool)
-       (%x::'a::type.
-           (op ~=::'a::type option => 'a::type option => bool)
-            (None::'a::type option)
-            ((Some::'a::type => 'a::type option) x)))
-     ((op &::bool => bool => bool)
-       ((All::('a::type => bool) => bool)
-         (%x::'a::type.
-             (op ~=::'a::type option => 'a::type option => bool)
-              ((Some::'a::type => 'a::type option) x)
-              (None::'a::type option)))
-       ((op &::bool => bool => bool)
-         ((All::('a::type => bool) => bool)
-           (%x::'a::type.
-               (op =::bool => bool => bool)
-                ((IS_SOME::'a::type option => bool)
-                  ((Some::'a::type => 'a::type option) x))
-                (True::bool)))
-         ((op &::bool => bool => bool)
-           ((op =::bool => bool => bool)
-             ((IS_SOME::'a::type option => bool) (None::'a::type option))
-             (False::bool))
-           ((op &::bool => bool => bool)
-             ((All::('a::type option => bool) => bool)
-               (%x::'a::type option.
-                   (op =::bool => bool => bool)
-                    ((IS_NONE::'a::type option => bool) x)
-                    ((op =::'a::type option => 'a::type option => bool) x
-                      (None::'a::type option))))
-             ((op &::bool => bool => bool)
-               ((All::('a::type option => bool) => bool)
-                 (%x::'a::type option.
-                     (op =::bool => bool => bool)
-                      ((Not::bool => bool)
-                        ((IS_SOME::'a::type option => bool) x))
-                      ((op =::'a::type option => 'a::type option => bool) x
-                        (None::'a::type option))))
-               ((op &::bool => bool => bool)
-                 ((All::('a::type option => bool) => bool)
-                   (%x::'a::type option.
-                       (op -->::bool => bool => bool)
-                        ((IS_SOME::'a::type option => bool) x)
-                        ((op =::'a::type option => 'a::type option => bool)
-                          ((Some::'a::type => 'a::type option)
-                            ((the::'a::type option => 'a::type) x))
-                          x)))
-                 ((op &::bool => bool => bool)
-                   ((All::('a::type option => bool) => bool)
-                     (%x::'a::type option.
-                         (op =::'a::type option => 'a::type option => bool)
-                          ((option_case::'a::type option
-   => ('a::type => 'a::type option) => 'a::type option => 'a::type option)
-                            (None::'a::type option)
-                            (Some::'a::type => 'a::type option) x)
-                          x))
-                   ((op &::bool => bool => bool)
-                     ((All::('a::type option => bool) => bool)
-                       (%x::'a::type option.
-                           (op =::'a::type option
-                                  => 'a::type option => bool)
-                            ((option_case::'a::type option
-     => ('a::type => 'a::type option) => 'a::type option => 'a::type option)
-                              x (Some::'a::type => 'a::type option) x)
-                            x))
-                     ((op &::bool => bool => bool)
-                       ((All::('a::type option => bool) => bool)
-                         (%x::'a::type option.
-                             (op -->::bool => bool => bool)
-                              ((IS_NONE::'a::type option => bool) x)
-                              ((op =::'b::type => 'b::type => bool)
-                                ((option_case::'b::type
-         => ('a::type => 'b::type) => 'a::type option => 'b::type)
-                                  (e::'b::type) (f::'a::type => 'b::type) x)
-                                e)))
-                       ((op &::bool => bool => bool)
-                         ((All::('a::type option => bool) => bool)
-                           (%x::'a::type option.
-                               (op -->::bool => bool => bool)
-                                ((IS_SOME::'a::type option => bool) x)
-                                ((op =::'b::type => 'b::type => bool)
-                                  ((option_case::'b::type
-           => ('a::type => 'b::type) => 'a::type option => 'b::type)
-                                    e f x)
-                                  (f ((the::'a::type option => 'a::type)
- x)))))
-                         ((op &::bool => bool => bool)
-                           ((All::('a::type option => bool) => bool)
-                             (%x::'a::type option.
-                                 (op -->::bool => bool => bool)
-                                  ((IS_SOME::'a::type option => bool) x)
-                                  ((op =::'a::type option
-    => 'a::type option => bool)
-                                    ((option_case::'a::type option
-             => ('a::type => 'a::type option)
-                => 'a::type option => 'a::type option)
-(ea::'a::type option) (Some::'a::type => 'a::type option) x)
-                                    x)))
-                           ((op &::bool => bool => bool)
-                             ((All::('b::type => bool) => bool)
-                               (%u::'b::type.
-                                   (All::(('a::type => 'b::type) => bool)
-   => bool)
-                                    (%f::'a::type => 'b::type.
-  (op =::'b::type => 'b::type => bool)
-   ((option_case::'b::type
-                  => ('a::type => 'b::type) => 'a::type option => 'b::type)
-     u f (None::'a::type option))
-   u)))
-                             ((op &::bool => bool => bool)
-                               ((All::('b::type => bool) => bool)
-                                 (%u::'b::type.
-                                     (All::(('a::type => 'b::type) => bool)
-     => bool)
-(%f::'a::type => 'b::type.
-    (All::('a::type => bool) => bool)
-     (%x::'a::type.
-         (op =::'b::type => 'b::type => bool)
-          ((option_case::'b::type
-                         => ('a::type => 'b::type)
-                            => 'a::type option => 'b::type)
-            u f ((Some::'a::type => 'a::type option) x))
-          (f x)))))
-                               ((op &::bool => bool => bool)
-                                 ((All::(('a::type => 'b::type) => bool)
-  => bool)
-                                   (%f::'a::type => 'b::type.
- (All::('a::type => bool) => bool)
-  (%x::'a::type.
-      (op =::'b::type option => 'b::type option => bool)
-       ((Option.map::('a::type => 'b::type)
-                     => 'a::type option => 'b::type option)
-         f ((Some::'a::type => 'a::type option) x))
-       ((Some::'b::type => 'b::type option) (f x)))))
-                                 ((op &::bool => bool => bool)
-                                   ((All::(('a::type => 'b::type) => bool)
-    => bool)
-                                     (%f::'a::type => 'b::type.
-   (op =::'b::type option => 'b::type option => bool)
-    ((Option.map::('a::type => 'b::type)
-                  => 'a::type option => 'b::type option)
-      f (None::'a::type option))
-    (None::'b::type option)))
-                                   ((op &::bool => bool => bool)
-                                     ((op =::'a::type option
-       => 'a::type option => bool)
- ((OPTION_JOIN::'a::type option option => 'a::type option)
-   (None::'a::type option option))
- (None::'a::type option))
-                                     ((All::('a::type option => bool)
-      => bool)
- (%x::'a::type option.
-     (op =::'a::type option => 'a::type option => bool)
-      ((OPTION_JOIN::'a::type option option => 'a::type option)
-        ((Some::'a::type option => 'a::type option option) x))
-      x))))))))))))))))))))"
-  sorry
-
-lemma option_case_compute: "option_case (e::'b) (f::'a => 'b) (x::'a option) =
-(if IS_SOME x then f (the x) else e)"
-  sorry
-
-lemma OPTION_MAP_EQ_SOME: "(Option.map (f::'a => 'b) (x::'a option) = Some (y::'b)) =
-(EX z::'a. x = Some z & y = f z)"
-  sorry
-
-lemma OPTION_JOIN_EQ_SOME: "(OPTION_JOIN x = Some xa) = (x = Some (Some xa))"
-  sorry
-
-lemma option_case_cong: "M = M' & (M' = None --> u = u') & (ALL x. M' = Some x --> f x = f' x)
-==> option_case u f M = option_case u' f' M'"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" marker
-
-consts
-  stmarker :: "'a => 'a" 
-
-defs
-  stmarker_primdef: "stmarker == %x. x"
-
-lemma stmarker_def: "stmarker x = x"
-  sorry
-
-lemma move_left_conj: "(x & stmarker xb) = (stmarker xb & x) &
-((stmarker xb & x) & xa) = (stmarker xb & x & xa) &
-(x & stmarker xb & xa) = (stmarker xb & x & xa)"
-  sorry
-
-lemma move_right_conj: "(stmarker xb & x) = (x & stmarker xb) &
-(x & xa & stmarker xb) = ((x & xa) & stmarker xb) &
-((x & stmarker xb) & xa) = ((x & xa) & stmarker xb)"
-  sorry
-
-lemma move_left_disj: "(x | stmarker xb) = (stmarker xb | x) &
-((stmarker xb | x) | xa) = (stmarker xb | x | xa) &
-(x | stmarker xb | xa) = (stmarker xb | x | xa)"
-  sorry
-
-lemma move_right_disj: "(stmarker xb | x) = (x | stmarker xb) &
-(x | xa | stmarker xb) = ((x | xa) | stmarker xb) &
-((x | stmarker xb) | xa) = ((x | xa) | stmarker xb)"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" relation
-
-definition
-  TC :: "('a => 'a => bool) => 'a => 'a => bool"  where
-  "TC ==
-%R a b.
-   ALL P.
-      (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
-      P a b"
-
-lemma TC_DEF: "TC R a b =
-(ALL P.
-    (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
-    P a b)"
-  sorry
-
-definition
-  RTC :: "('a => 'a => bool) => 'a => 'a => bool"  where
-  "RTC ==
-%R a b.
-   ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b"
-
-lemma RTC_DEF: "RTC R a b =
-(ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b)"
-  sorry
-
-consts
-  RC :: "('a => 'a => bool) => 'a => 'a => bool" 
-
-defs
-  RC_primdef: "RC == %R x y. x = y | R x y"
-
-lemma RC_def: "RC R x y = (x = y | R x y)"
-  sorry
-
-consts
-  transitive :: "('a => 'a => bool) => bool" 
-
-defs
-  transitive_primdef: "transitive == %R. ALL x y z. R x y & R y z --> R x z"
-
-lemma transitive_def: "transitive R = (ALL x y z. R x y & R y z --> R x z)"
-  sorry
-
-definition
-  pred_reflexive :: "('a => 'a => bool) => bool"  where
-  "pred_reflexive == %R. ALL x. R x x"
-
-lemma reflexive_def: "pred_reflexive R = (ALL x. R x x)"
-  sorry
-
-lemma TC_TRANSITIVE: "transitive (TC x)"
-  sorry
-
-lemma RTC_INDUCT: "[| (ALL x. xa x x) & (ALL xb y z. x xb y & xa y z --> xa xb z);
-   RTC x xb xc |]
-==> xa xb xc"
-  sorry
-
-lemma TC_RULES: "(ALL xa xb. x xa xb --> TC x xa xb) &
-(ALL xa xb xc. TC x xa xb & TC x xb xc --> TC x xa xc)"
-  sorry
-
-lemma RTC_RULES: "(ALL xa. RTC x xa xa) &
-(ALL xa xb xc. x xa xb & RTC x xb xc --> RTC x xa xc)"
-  sorry
-
-lemma RTC_STRONG_INDUCT: "[| (ALL x. P x x) & (ALL x y z. R x y & RTC R y z & P y z --> P x z);
-   RTC R x y |]
-==> P x y"
-  sorry
-
-lemma RTC_RTC: "[| RTC R x y; RTC R y z |] ==> RTC R x z"
-  sorry
-
-lemma RTC_TRANSITIVE: "transitive (RTC x)"
-  sorry
-
-lemma RTC_REFLEXIVE: "pred_reflexive (RTC R)"
-  sorry
-
-lemma RC_REFLEXIVE: "pred_reflexive (RC R)"
-  sorry
-
-lemma TC_SUBSET: "x xa xb ==> TC x xa xb"
-  sorry
-
-lemma RTC_SUBSET: "R x y ==> RTC R x y"
-  sorry
-
-lemma RC_SUBSET: "R x y ==> RC R x y"
-  sorry
-
-lemma RC_RTC: "RC R x y ==> RTC R x y"
-  sorry
-
-lemma TC_INDUCT: "[| (ALL xb y. x xb y --> xa xb y) & (ALL x y z. xa x y & xa y z --> xa x z);
-   TC x xb xc |]
-==> xa xb xc"
-  sorry
-
-lemma TC_INDUCT_LEFT1: "[| (ALL xb y. x xb y --> xa xb y) &
-   (ALL xb y z. x xb y & xa y z --> xa xb z);
-   TC x xb xc |]
-==> xa xb xc"
-  sorry
-
-lemma TC_STRONG_INDUCT: "[| (ALL x y. R x y --> P x y) &
-   (ALL x y z. P x y & P y z & TC R x y & TC R y z --> P x z);
-   TC R u v |]
-==> P u v"
-  sorry
-
-lemma TC_STRONG_INDUCT_LEFT1: "[| (ALL x y. R x y --> P x y) &
-   (ALL x y z. R x y & P y z & TC R y z --> P x z);
-   TC R u v |]
-==> P u v"
-  sorry
-
-lemma TC_RTC: "TC R x y ==> RTC R x y"
-  sorry
-
-lemma RTC_TC_RC: "RTC R x y ==> RC R x y | TC R x y"
-  sorry
-
-lemma TC_RC_EQNS: "RC (TC R) = RTC R & TC (RC R) = RTC R"
-  sorry
-
-lemma RC_IDEM: "RC (RC R) = RC R"
-  sorry
-
-lemma TC_IDEM: "TC (TC R) = TC R"
-  sorry
-
-lemma RTC_IDEM: "RTC (RTC R) = RTC R"
-  sorry
-
-lemma RTC_CASES1: "RTC x xa xb = (xa = xb | (EX u. x xa u & RTC x u xb))"
-  sorry
-
-lemma RTC_CASES2: "RTC x xa xb = (xa = xb | (EX u. RTC x xa u & x u xb))"
-  sorry
-
-lemma RTC_CASES_RTC_TWICE: "RTC x xa xb = (EX u. RTC x xa u & RTC x u xb)"
-  sorry
-
-lemma TC_CASES1: "TC R x z ==> R x z | (EX y. R x y & TC R y z)"
-  sorry
-
-lemma TC_CASES2: "TC R x z ==> R x z | (EX y. TC R x y & R y z)"
-  sorry
-
-lemma TC_MONOTONE: "[| !!x y. R x y ==> Q x y; TC R x y |] ==> TC Q x y"
-  sorry
-
-lemma RTC_MONOTONE: "[| !!x y. R x y ==> Q x y; RTC R x y |] ==> RTC Q x y"
-  sorry
-
-definition
-  WF :: "('a => 'a => bool) => bool"  where
-  "WF == %R. ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b))"
-
-lemma WF_DEF: "WF R = (ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b)))"
-  sorry
-
-lemma WF_INDUCTION_THM: "[| WF R; !!x. (!!y. R y x ==> P y) ==> P x |] ==> P x"
-  sorry
-
-lemma WF_NOT_REFL: "[| WF x; x xa xb |] ==> xa ~= xb"
-  sorry
-
-definition
-  EMPTY_REL :: "'a => 'a => bool"  where
-  "EMPTY_REL == %x y. False"
-
-lemma EMPTY_REL_DEF: "EMPTY_REL x y = False"
-  sorry
-
-lemma WF_EMPTY_REL: "WF EMPTY_REL"
-  sorry
-
-lemma WF_SUBSET: "WF x & (ALL xb y. xa xb y --> x xb y) ==> WF xa"
-  sorry
-
-lemma WF_TC: "WF R ==> WF (TC R)"
-  sorry
-
-consts
-  inv_image :: "('b => 'b => bool) => ('a => 'b) => 'a => 'a => bool" 
-
-defs
-  inv_image_primdef: "relation.inv_image ==
-%(R::'b => 'b => bool) (f::'a => 'b) (x::'a) y::'a. R (f x) (f y)"
-
-lemma inv_image_def: "relation.inv_image R f = (%x y. R (f x) (f y))"
-  sorry
-
-lemma WF_inv_image: "WF (R::'b => 'b => bool) ==> WF (relation.inv_image R (f::'a => 'b))"
-  sorry
-
-definition
-  RESTRICT :: "('a => 'b) => ('a => 'a => bool) => 'a => 'a => 'b"  where
-  "RESTRICT == %f R x y. if R y x then f y else ARB"
-
-lemma RESTRICT_DEF: "RESTRICT f R x = (%y. if R y x then f y else ARB)"
-  sorry
-
-lemma RESTRICT_LEMMA: "xa xb xc ==> RESTRICT x xa xc xb = x xb"
-  sorry
-
-consts
-  approx :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => ('a => 'b) => bool" 
-
-defs
-  approx_primdef: "approx == %R M x f. f = RESTRICT (%y. M (RESTRICT f R y) y) R x"
-
-lemma approx_def: "approx R M x f = (f = RESTRICT (%y. M (RESTRICT f R y) y) R x)"
-  sorry
-
-consts
-  the_fun :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'a => 'b" 
-
-defs
-  the_fun_primdef: "the_fun == %R M x. Eps (approx R M x)"
-
-lemma the_fun_def: "the_fun R M x = Eps (approx R M x)"
-  sorry
-
-definition
-  WFREC :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'b"  where
-  "WFREC ==
-%R M x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x"
-
-lemma WFREC_DEF: "WFREC R M =
-(%x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x)"
-  sorry
-
-lemma WFREC_THM: "WF R ==> WFREC R M x = M (RESTRICT (WFREC R M) R x) x"
-  sorry
-
-lemma WFREC_COROLLARY: "[| f = WFREC R M; WF R |] ==> f x = M (RESTRICT f R x) x"
-  sorry
-
-lemma WF_RECURSION_THM: "WF R ==> EX! f. ALL x. f x = M (RESTRICT f R x) x"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" pair
-
-lemma CURRY_ONE_ONE_THM: "(curry f = curry g) = (f = g)"
-  sorry
-
-lemma UNCURRY_ONE_ONE_THM: "((%(x, y). f x y) = (%(x, y). g x y)) = (f = g)"
-  sorry
-
-lemma pair_Axiom: "EX x. ALL xa y. x (xa, y) = f xa y"
-  sorry
-
-lemma UNCURRY_CONG: "M = M' & (ALL x y. M' = (x, y) --> f x y = f' x y)
-==> prod_case f M = prod_case f' M'"
-  sorry
-
-lemma ELIM_PEXISTS: "(EX p. P (fst p) (snd p)) = (EX p1. Ex (P p1))"
-  sorry
-
-lemma ELIM_PFORALL: "(ALL p. P (fst p) (snd p)) = (ALL p1. All (P p1))"
-  sorry
-
-lemma PFORALL_THM: "(ALL xa. All (x xa)) = All (%(xa, y). x xa y)"
-  sorry
-
-lemma PEXISTS_THM: "(EX xa. Ex (x xa)) = Ex (%(xa, y). x xa y)"
-  sorry
-
-lemma LET2_RAND: "(x::'c => 'd)
- (let (x::'a, y::'b) = xa::'a * 'b in (xb::'a => 'b => 'c) x y) =
-(let (xa::'a, y::'b) = xa in x (xb xa y))"
-  sorry
-
-lemma LET2_RATOR: "(let (x::'a1, y::'a2) = x::'a1 * 'a2 in (xa::'a1 => 'a2 => 'b => 'c) x y)
- (xb::'b) =
-(let (x::'a1, y::'a2) = x in xa x y xb)"
-  sorry
-
-lemma pair_case_cong: "x = xa & (ALL x y. xa = (x, y) --> xb x y = f' x y)
-==> prod_case xb x = prod_case f' xa"
-  sorry
-
-definition
-  LEX :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool"  where
-  "LEX == %R1 R2 (s, t) (u, v). R1 s u | s = u & R2 t v"
-
-lemma LEX_DEF: "LEX R1 R2 = (%(s, t) (u, v). R1 s u | s = u & R2 t v)"
-  sorry
-
-lemma WF_LEX: "WF x & WF xa ==> WF (LEX x xa)"
-  sorry
-
-definition
-  RPROD :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool"  where
-  "RPROD == %R1 R2 (s, t) (u, v). R1 s u & R2 t v"
-
-lemma RPROD_DEF: "RPROD R1 R2 = (%(s, t) (u, v). R1 s u & R2 t v)"
-  sorry
-
-lemma WF_RPROD: "WF R & WF Q ==> WF (RPROD R Q)"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" num
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prim_rec
-
-lemma LESS_0_0: "0 < Suc 0"
-  sorry
-
-lemma LESS_LEMMA1: "x < Suc xa ==> x = xa | x < xa"
-  sorry
-
-lemma LESS_LEMMA2: "m = n | m < n ==> m < Suc n"
-  sorry
-
-lemma LESS_THM: "(m < Suc n) = (m = n | m < n)"
-  sorry
-
-lemma LESS_SUC_IMP: "[| x < Suc xa; x ~= xa |] ==> x < xa"
-  sorry
-
-lemma EQ_LESS: "Suc m = n ==> m < n"
-  sorry
-
-lemma NOT_LESS_EQ: "(m::nat) = (n::nat) ==> ~ m < n"
-  sorry
-
-definition
-  SIMP_REC_REL :: "(nat => 'a) => 'a => ('a => 'a) => nat => bool"  where
-  "SIMP_REC_REL == %fun x f n. fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m))"
-
-lemma SIMP_REC_REL: "SIMP_REC_REL fun x f n = (fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m)))"
-  sorry
-
-lemma SIMP_REC_EXISTS: "EX fun. SIMP_REC_REL fun x f n"
-  sorry
-
-lemma SIMP_REC_REL_UNIQUE: "[| SIMP_REC_REL xb x xa xd & SIMP_REC_REL xc x xa xe; n < xd & n < xe |]
-==> xb n = xc n"
-  sorry
-
-lemma SIMP_REC_REL_UNIQUE_RESULT: "EX! y. EX g. SIMP_REC_REL g x f (Suc n) & y = g n"
-  sorry
-
-consts
-  SIMP_REC :: "'a => ('a => 'a) => nat => 'a" 
-
-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"
-  sorry
-
-lemma LESS_SUC_SUC: "m < Suc m & m < Suc (Suc m)"
-  sorry
-
-lemma SIMP_REC_THM: "SIMP_REC x f 0 = x & (ALL m. SIMP_REC x f (Suc m) = f (SIMP_REC x f m))"
-  sorry
-
-definition
-  PRE :: "nat => nat"  where
-  "PRE == %m. if m = 0 then 0 else SOME n. m = Suc n"
-
-lemma PRE_DEF: "PRE m = (if m = 0 then 0 else SOME n. m = Suc n)"
-  sorry
-
-lemma PRE: "PRE 0 = 0 & (ALL m. PRE (Suc m) = m)"
-  sorry
-
-definition
-  PRIM_REC_FUN :: "'a => ('a => nat => 'a) => nat => nat => 'a"  where
-  "PRIM_REC_FUN == %x f. SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
-
-lemma PRIM_REC_FUN: "PRIM_REC_FUN x f = SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
-  sorry
-
-lemma PRIM_REC_EQN: "(ALL n. PRIM_REC_FUN x f 0 n = x) &
-(ALL m n. PRIM_REC_FUN x f (Suc m) n = f (PRIM_REC_FUN x f m (PRE n)) n)"
-  sorry
-
-definition
-  PRIM_REC :: "'a => ('a => nat => 'a) => nat => 'a"  where
-  "PRIM_REC == %x f m. PRIM_REC_FUN x f m (PRE m)"
-
-lemma PRIM_REC: "PRIM_REC x f m = PRIM_REC_FUN x f m (PRE m)"
-  sorry
-
-lemma PRIM_REC_THM: "PRIM_REC x f 0 = x & (ALL m. PRIM_REC x f (Suc m) = f (PRIM_REC x f m) m)"
-  sorry
-
-lemma DC: "P a & (ALL x. P x --> (EX y. P y & R x y))
-==> EX x. x 0 = a & (ALL n. P (x n) & R (x n) (x (Suc n)))"
-  sorry
-
-lemma num_Axiom_old: "EX! fn1. fn1 0 = e & (ALL n. fn1 (Suc n) = f (fn1 n) n)"
-  sorry
-
-lemma num_Axiom: "EX x. x 0 = e & (ALL n. x (Suc n) = f n (x n))"
-  sorry
-
-consts
-  wellfounded :: "('a => 'a => bool) => bool" 
-
-defs
-  wellfounded_primdef: "wellfounded == %R. ~ (EX f. ALL n. R (f (Suc n)) (f n))"
-
-lemma wellfounded_def: "wellfounded R = (~ (EX f. ALL n. R (f (Suc n)) (f n)))"
-  sorry
-
-lemma WF_IFF_WELLFOUNDED: "WF R = wellfounded R"
-  sorry
-
-lemma WF_PRED: "WF (%x y. y = Suc x)"
-  sorry
-
-lemma WF_LESS: "(WF::(nat => nat => bool) => bool) (op <::nat => nat => bool)"
-  sorry
-
-consts
-  measure :: "('a => nat) => 'a => 'a => bool" 
-
-defs
-  measure_primdef: "prim_rec.measure == relation.inv_image op <"
-
-lemma measure_def: "prim_rec.measure = relation.inv_image op <"
-  sorry
-
-lemma WF_measure: "WF (prim_rec.measure x)"
-  sorry
-
-lemma measure_thm: "prim_rec.measure x xa xb = (x xa < x xb)"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" arithmetic
-
-definition
-  nat_elim__magic :: "nat => nat"  where
-  "nat_elim__magic == %n. n"
-
-lemma nat_elim__magic: "nat_elim__magic n = n"
-  sorry
-
-consts
-  EVEN :: "nat => bool" 
-
-specification (EVEN) EVEN: "EVEN 0 = True & (ALL n. EVEN (Suc n) = (~ EVEN n))"
-  sorry
-
-consts
-  ODD :: "nat => bool" 
-
-specification (ODD) ODD: "ODD 0 = False & (ALL n. ODD (Suc n) = (~ ODD n))"
-  sorry
-
-lemma TWO: "2 = Suc 1"
-  sorry
-
-lemma NORM_0: "(0::nat) = (0::nat)"
-  sorry
-
-lemma num_case_compute: "nat_case f g n = (if n = 0 then f else g (PRE n))"
-  sorry
-
-lemma ADD_CLAUSES: "0 + m = m & m + 0 = m & Suc m + n = Suc (m + n) & m + Suc n = Suc (m + n)"
-  sorry
-
-lemma LESS_ADD: "(n::nat) < (m::nat) ==> EX p::nat. p + n = m"
-  sorry
-
-lemma LESS_ANTISYM: "~ ((m::nat) < (n::nat) & n < m)"
-  sorry
-
-lemma LESS_LESS_SUC: "~ (x < xa & xa < Suc x)"
-  sorry
-
-lemma FUN_EQ_LEMMA: "f x1 & ~ f x2 ==> x1 ~= x2"
-  sorry
-
-lemma LESS_NOT_SUC: "m < n & n ~= Suc m ==> Suc m < n"
-  sorry
-
-lemma LESS_0_CASES: "(0::nat) = (m::nat) | (0::nat) < m"
-  sorry
-
-lemma LESS_CASES_IMP: "~ (m::nat) < (n::nat) & m ~= n ==> n < m"
-  sorry
-
-lemma LESS_CASES: "(m::nat) < (n::nat) | n <= m"
-  sorry
-
-lemma LESS_EQ_SUC_REFL: "m <= Suc m"
-  sorry
-
-lemma LESS_ADD_NONZERO: "(n::nat) ~= (0::nat) ==> (m::nat) < m + n"
-  sorry
-
-lemma LESS_EQ_ANTISYM: "~ ((x::nat) < (xa::nat) & xa <= x)"
-  sorry
-
-lemma SUB_0: "(0::nat) - (m::nat) = (0::nat) & m - (0::nat) = m"
-  sorry
-
-lemma PRE_SUB1: "PRE m = m - 1"
-  sorry
-
-lemma MULT_CLAUSES: "0 * x = 0 &
-x * 0 = 0 &
-1 * x = x & x * 1 = x & Suc x * xa = x * xa + xa & x * Suc xa = x + x * xa"
-  sorry
-
-lemma PRE_SUB: "PRE (m - n) = PRE m - n"
-  sorry
-
-lemma ADD_EQ_1: "((m::nat) + (n::nat) = (1::nat)) =
-(m = (1::nat) & n = (0::nat) | m = (0::nat) & n = (1::nat))"
-  sorry
-
-lemma ADD_INV_0_EQ: "((m::nat) + (n::nat) = m) = (n = (0::nat))"
-  sorry
-
-lemma PRE_SUC_EQ: "0 < n ==> (m = PRE n) = (Suc m = n)"
-  sorry
-
-lemma INV_PRE_EQ: "0 < m & 0 < n ==> (PRE m = PRE n) = (m = n)"
-  sorry
-
-lemma LESS_SUC_NOT: "m < n ==> ~ n < Suc m"
-  sorry
-
-lemma ADD_EQ_SUB: "(n::nat) <= (p::nat) ==> ((m::nat) + n = p) = (m = p - n)"
-  sorry
-
-lemma LESS_ADD_1: "(xa::nat) < (x::nat) ==> EX xb::nat. x = xa + (xb + (1::nat))"
-  sorry
-
-lemma NOT_ODD_EQ_EVEN: "Suc (n + n) ~= m + m"
-  sorry
-
-lemma MULT_SUC_EQ: "(n * Suc p = m * Suc p) = (n = m)"
-  sorry
-
-lemma MULT_EXP_MONO: "(n * Suc q ^ p = m * Suc q ^ p) = (n = m)"
-  sorry
-
-lemma LESS_ADD_SUC: "m < m + Suc n"
-  sorry
-
-lemma LESS_OR_EQ_ADD: "(n::nat) < (m::nat) | (EX p::nat. n = p + m)"
-  sorry
-
-lemma WOP: "Ex (P::nat => bool) ==> EX n::nat. P n & (ALL m<n. ~ P m)"
-  sorry
-
-lemma INV_PRE_LESS: "0 < m ==> (PRE m < PRE n) = (m < n)"
-  sorry
-
-lemma INV_PRE_LESS_EQ: "0 < n ==> (PRE m <= PRE n) = (m <= n)"
-  sorry
-
-lemma SUB_EQ_EQ_0: "((m::nat) - (n::nat) = m) = (m = (0::nat) | n = (0::nat))"
-  sorry
-
-lemma SUB_LESS_OR: "(n::nat) < (m::nat) ==> n <= m - (1::nat)"
-  sorry
-
-lemma LESS_SUB_ADD_LESS: "(i::nat) < (n::nat) - (m::nat) ==> i + m < n"
-  sorry
-
-lemma LESS_EQ_SUB_LESS: "(xa::nat) <= (x::nat) ==> (x - xa < (c::nat)) = (x < xa + c)"
-  sorry
-
-lemma NOT_SUC_LESS_EQ: "(~ Suc x <= xa) = (xa <= x)"
-  sorry
-
-lemma SUB_LESS_EQ_ADD: "(m::nat) <= (p::nat) ==> (p - m <= (n::nat)) = (p <= m + n)"
-  sorry
-
-lemma SUB_CANCEL: "(xa::nat) <= (x::nat) & (xb::nat) <= x ==> (x - xa = x - xb) = (xa = xb)"
-  sorry
-
-lemma NOT_EXP_0: "Suc n ^ m ~= 0"
-  sorry
-
-lemma ZERO_LESS_EXP: "0 < Suc n ^ m"
-  sorry
-
-lemma ODD_OR_EVEN: "EX xa. x = Suc (Suc 0) * xa | x = Suc (Suc 0) * xa + 1"
-  sorry
-
-lemma LESS_EXP_SUC_MONO: "Suc (Suc m) ^ n < Suc (Suc m) ^ Suc n"
-  sorry
-
-lemma LESS_LESS_CASES: "(m::nat) = (n::nat) | m < n | n < m"
-  sorry
-
-consts
-  FACT :: "nat => nat" 
-
-specification (FACT) FACT: "FACT 0 = 1 & (ALL n. FACT (Suc n) = Suc n * FACT n)"
-  sorry
-
-lemma FACT_LESS: "0 < FACT n"
-  sorry
-
-lemma EVEN_ODD: "EVEN n = (~ ODD n)"
-  sorry
-
-lemma ODD_EVEN: "ODD x = (~ EVEN x)"
-  sorry
-
-lemma EVEN_OR_ODD: "EVEN x | ODD x"
-  sorry
-
-lemma EVEN_AND_ODD: "~ (EVEN x & ODD x)"
-  sorry
-
-lemma EVEN_ADD: "EVEN (m + n) = (EVEN m = EVEN n)"
-  sorry
-
-lemma EVEN_MULT: "EVEN (m * n) = (EVEN m | EVEN n)"
-  sorry
-
-lemma ODD_ADD: "ODD (m + n) = (ODD m ~= ODD n)"
-  sorry
-
-lemma ODD_MULT: "ODD (m * n) = (ODD m & ODD n)"
-  sorry
-
-lemma EVEN_DOUBLE: "EVEN (2 * n)"
-  sorry
-
-lemma ODD_DOUBLE: "ODD (Suc (2 * x))"
-  sorry
-
-lemma EVEN_ODD_EXISTS: "(EVEN x --> (EX m. x = 2 * m)) & (ODD x --> (EX m. x = Suc (2 * m)))"
-  sorry
-
-lemma EVEN_EXISTS: "EVEN n = (EX m. n = 2 * m)"
-  sorry
-
-lemma ODD_EXISTS: "ODD n = (EX m. n = Suc (2 * m))"
-  sorry
-
-lemma NOT_SUC_LESS_EQ_0: "~ Suc x <= 0"
-  sorry
-
-lemma NOT_NUM_EQ: "(x ~= xa) = (Suc x <= xa | Suc xa <= x)"
-  sorry
-
-lemma SUC_ADD_SYM: "Suc (m + n) = Suc n + m"
-  sorry
-
-lemma NOT_SUC_ADD_LESS_EQ: "~ Suc (m + n) <= m"
-  sorry
-
-lemma SUB_LEFT_ADD: "(m::nat) + ((n::nat) - (p::nat)) = (if n <= p then m else m + n - p)"
-  sorry
-
-lemma SUB_RIGHT_ADD: "(m::nat) - (n::nat) + (p::nat) = (if m <= n then p else m + p - n)"
-  sorry
-
-lemma SUB_LEFT_SUB: "(m::nat) - ((n::nat) - (p::nat)) = (if n <= p then m else m + p - n)"
-  sorry
-
-lemma SUB_LEFT_SUC: "Suc (m - n) = (if m <= n then Suc 0 else Suc m - n)"
-  sorry
-
-lemma SUB_LEFT_LESS_EQ: "((m::nat) <= (n::nat) - (p::nat)) = (m + p <= n | m <= (0::nat))"
-  sorry
-
-lemma SUB_RIGHT_LESS_EQ: "((m::nat) - (n::nat) <= (p::nat)) = (m <= n + p)"
-  sorry
-
-lemma SUB_RIGHT_LESS: "((m::nat) - (n::nat) < (p::nat)) = (m < n + p & (0::nat) < p)"
-  sorry
-
-lemma SUB_RIGHT_GREATER_EQ: "((p::nat) <= (m::nat) - (n::nat)) = (n + p <= m | p <= (0::nat))"
-  sorry
-
-lemma SUB_LEFT_GREATER: "((n::nat) - (p::nat) < (m::nat)) = (n < m + p & (0::nat) < m)"
-  sorry
-
-lemma SUB_RIGHT_GREATER: "((p::nat) < (m::nat) - (n::nat)) = (n + p < m)"
-  sorry
-
-lemma SUB_LEFT_EQ: "((m::nat) = (n::nat) - (p::nat)) = (m + p = n | m <= (0::nat) & n <= p)"
-  sorry
-
-lemma SUB_RIGHT_EQ: "((m::nat) - (n::nat) = (p::nat)) = (m = n + p | m <= n & p <= (0::nat))"
-  sorry
-
-lemma LE: "(ALL n::nat. (n <= (0::nat)) = (n = (0::nat))) &
-(ALL (m::nat) n::nat. (m <= Suc n) = (m = Suc n | m <= n))"
-  sorry
-
-lemma DA: "(0::nat) < (n::nat) ==> EX (x::nat) q::nat. (k::nat) = q * n + x & x < n"
-  sorry
-
-lemma DIV_LESS_EQ: "(0::nat) < (n::nat) ==> (k::nat) div n <= k"
-  sorry
-
-lemma DIV_UNIQUE: "EX r::nat. (k::nat) = (q::nat) * (n::nat) + r & r < n ==> k div n = q"
-  sorry
-
-lemma MOD_UNIQUE: "EX q::nat. (k::nat) = q * (n::nat) + (r::nat) & r < n ==> k mod n = r"
-  sorry
-
-lemma DIV_MULT: "(r::nat) < (n::nat) ==> ((q::nat) * n + r) div n = q"
-  sorry
-
-lemma MOD_EQ_0: "(0::nat) < (n::nat) ==> (k::nat) * n mod n = (0::nat)"
-  sorry
-
-lemma ZERO_MOD: "(0::nat) < (n::nat) ==> (0::nat) mod n = (0::nat)"
-  sorry
-
-lemma ZERO_DIV: "(0::nat) < (n::nat) ==> (0::nat) div n = (0::nat)"
-  sorry
-
-lemma MOD_MULT: "(r::nat) < (n::nat) ==> ((q::nat) * n + r) mod n = r"
-  sorry
-
-lemma MOD_TIMES: "(0::nat) < (n::nat) ==> ((q::nat) * n + (r::nat)) mod n = r mod n"
-  sorry
-
-lemma MOD_PLUS: "(0::nat) < (n::nat)
-==> ((j::nat) mod n + (k::nat) mod n) mod n = (j + k) mod n"
-  sorry
-
-lemma MOD_MOD: "(0::nat) < (n::nat) ==> (k::nat) mod n mod n = k mod n"
-  sorry
-
-lemma ADD_DIV_ADD_DIV: "(0::nat) < (x::nat) ==> ((xa::nat) * x + (r::nat)) div x = xa + r div x"
-  sorry
-
-lemma MOD_MULT_MOD: "(0::nat) < (n::nat) & (0::nat) < (m::nat)
-==> (x::nat) mod (n * m) mod n = x mod n"
-  sorry
-
-lemma DIVMOD_ID: "(0::nat) < (n::nat) ==> n div n = (1::nat) & n mod n = (0::nat)"
-  sorry
-
-lemma DIV_DIV_DIV_MULT: "(0::nat) < (x::nat) & (0::nat) < (xa::nat)
-==> (xb::nat) div x div xa = xb div (x * xa)"
-  sorry
-
-lemma DIV_P: "(0::nat) < (q::nat)
-==> (P::nat => bool) ((p::nat) div q) =
-    (EX (k::nat) r::nat. p = k * q + r & r < q & P k)"
-  sorry
-
-lemma MOD_P: "(0::nat) < (q::nat)
-==> (P::nat => bool) ((p::nat) mod q) =
-    (EX (k::nat) r::nat. p = k * q + r & r < q & P r)"
-  sorry
-
-lemma MOD_TIMES2: "(0::nat) < (n::nat)
-==> (j::nat) mod n * ((k::nat) mod n) mod n = j * k mod n"
-  sorry
-
-lemma MOD_COMMON_FACTOR: "(0::nat) < (n::nat) & (0::nat) < (q::nat)
-==> n * ((p::nat) mod q) = n * p mod (n * q)"
-  sorry
-
-lemma num_case_cong: "M = M' & (M' = 0 --> b = b') & (ALL n. M' = Suc n --> f n = f' n)
-==> nat_case b f M = nat_case b' f' M'"
-  sorry
-
-lemma SUC_ELIM_THM: "(ALL n. P (Suc n) n) = (ALL n>0. P n (n - 1))"
-  sorry
-
-lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) =
-(ALL x::nat. (b = a + x --> P (0::nat)) & (a = b + x --> P x))"
-  sorry
-
-lemma PRE_ELIM_THM: "P (PRE n) = (ALL m. (n = 0 --> P 0) & (n = Suc m --> P m))"
-  sorry
-
-lemma MULT_INCREASES: "1 < m & 0 < n ==> Suc n <= m * n"
-  sorry
-
-lemma EXP_ALWAYS_BIG_ENOUGH: "(1::nat) < (b::nat) ==> EX m::nat. (n::nat) <= b ^ m"
-  sorry
-
-lemma EXP_EQ_0: "((n::nat) ^ (m::nat) = (0::nat)) = (n = (0::nat) & (0::nat) < m)"
-  sorry
-
-lemma EXP_1: "(1::nat) ^ (x::nat) = (1::nat) & x ^ (1::nat) = x"
-  sorry
-
-lemma MIN_MAX_EQ: "(min (x::nat) (xa::nat) = max x xa) = (x = xa)"
-  sorry
-
-lemma MIN_MAX_LT: "(min (x::nat) (xa::nat) < max x xa) = (x ~= xa)"
-  sorry
-
-lemma MIN_MAX_PRED: "(P::nat => bool) (m::nat) & P (n::nat) ==> P (min m n) & P (max m n)"
-  sorry
-
-lemma MIN_LT: "(min (xa::nat) (x::nat) < xa) = (xa ~= x & min xa x = x) &
-(min xa x < x) = (xa ~= x & min xa x = xa) &
-(xa < min xa x) = False & (x < min xa x) = False"
-  sorry
-
-lemma MAX_LT: "((xa::nat) < max xa (x::nat)) = (xa ~= x & max xa x = x) &
-(x < max xa x) = (xa ~= x & max xa x = xa) &
-(max xa x < xa) = False & (max xa x < x) = False"
-  sorry
-
-lemma MIN_LE: "min (xa::nat) (x::nat) <= xa & min xa x <= x"
-  sorry
-
-lemma MAX_LE: "(xa::nat) <= max xa (x::nat) & x <= max xa x"
-  sorry
-
-lemma MIN_0: "min (x::nat) (0::nat) = (0::nat) & min (0::nat) x = (0::nat)"
-  sorry
-
-lemma MAX_0: "max (x::nat) (0::nat) = x & max (0::nat) x = x"
-  sorry
-
-lemma EXISTS_GREATEST: "(Ex (P::nat => bool) & (EX x::nat. ALL y>x. ~ P y)) =
-(EX x::nat. P x & (ALL y>x. ~ P y))"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" hrat
-
-definition
-  trat_1 :: "nat * nat"  where
-  "trat_1 == (0, 0)"
-
-lemma trat_1: "trat_1 = (0, 0)"
-  sorry
-
-definition
-  trat_inv :: "nat * nat => nat * nat"  where
-  "trat_inv == %(x, y). (y, x)"
-
-lemma trat_inv: "trat_inv (x, y) = (y, x)"
-  sorry
-
-definition
-  trat_add :: "nat * nat => nat * nat => nat * nat"  where
-  "trat_add ==
-%(x, y) (x', y').
-   (PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
-
-lemma trat_add: "trat_add (x, y) (x', y') =
-(PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
-  sorry
-
-definition
-  trat_mul :: "nat * nat => nat * nat => nat * nat"  where
-  "trat_mul == %(x, y) (x', y'). (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
-
-lemma trat_mul: "trat_mul (x, y) (x', y') = (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
-  sorry
-
-consts
-  trat_sucint :: "nat => nat * nat" 
-
-specification (trat_sucint) trat_sucint: "trat_sucint 0 = trat_1 &
-(ALL n. trat_sucint (Suc n) = trat_add (trat_sucint n) trat_1)"
-  sorry
-
-definition
-  trat_eq :: "nat * nat => nat * nat => bool"  where
-  "trat_eq == %(x, y) (x', y'). Suc x * Suc y' = Suc x' * Suc y"
-
-lemma trat_eq: "trat_eq (x, y) (x', y') = (Suc x * Suc y' = Suc x' * Suc y)"
-  sorry
-
-lemma TRAT_EQ_REFL: "trat_eq p p"
-  sorry
-
-lemma TRAT_EQ_SYM: "trat_eq p q = trat_eq q p"
-  sorry
-
-lemma TRAT_EQ_TRANS: "trat_eq p q & trat_eq q r ==> trat_eq p r"
-  sorry
-
-lemma TRAT_EQ_AP: "p = q ==> trat_eq p q"
-  sorry
-
-lemma TRAT_ADD_SYM_EQ: "trat_add h i = trat_add i h"
-  sorry
-
-lemma TRAT_MUL_SYM_EQ: "trat_mul h i = trat_mul i h"
-  sorry
-
-lemma TRAT_INV_WELLDEFINED: "trat_eq p q ==> trat_eq (trat_inv p) (trat_inv q)"
-  sorry
-
-lemma TRAT_ADD_WELLDEFINED: "trat_eq p q ==> trat_eq (trat_add p r) (trat_add q r)"
-  sorry
-
-lemma TRAT_ADD_WELLDEFINED2: "trat_eq p1 p2 & trat_eq q1 q2 ==> trat_eq (trat_add p1 q1) (trat_add p2 q2)"
-  sorry
-
-lemma TRAT_MUL_WELLDEFINED: "trat_eq p q ==> trat_eq (trat_mul p r) (trat_mul q r)"
-  sorry
-
-lemma TRAT_MUL_WELLDEFINED2: "trat_eq p1 p2 & trat_eq q1 q2 ==> trat_eq (trat_mul p1 q1) (trat_mul p2 q2)"
-  sorry
-
-lemma TRAT_ADD_SYM: "trat_eq (trat_add h i) (trat_add i h)"
-  sorry
-
-lemma TRAT_ADD_ASSOC: "trat_eq (trat_add h (trat_add i j)) (trat_add (trat_add h i) j)"
-  sorry
-
-lemma TRAT_MUL_SYM: "trat_eq (trat_mul h i) (trat_mul i h)"
-  sorry
-
-lemma TRAT_MUL_ASSOC: "trat_eq (trat_mul h (trat_mul i j)) (trat_mul (trat_mul h i) j)"
-  sorry
-
-lemma TRAT_LDISTRIB: "trat_eq (trat_mul h (trat_add i j)) (trat_add (trat_mul h i) (trat_mul h j))"
-  sorry
-
-lemma TRAT_MUL_LID: "trat_eq (trat_mul trat_1 h) h"
-  sorry
-
-lemma TRAT_MUL_LINV: "trat_eq (trat_mul (trat_inv h) h) trat_1"
-  sorry
-
-lemma TRAT_NOZERO: "~ trat_eq (trat_add h i) h"
-  sorry
-
-lemma TRAT_ADD_TOTAL: "trat_eq h i |
-(EX d. trat_eq h (trat_add i d)) | (EX d. trat_eq i (trat_add h d))"
-  sorry
-
-lemma TRAT_SUCINT_0: "trat_eq (trat_sucint n) (n, 0)"
-  sorry
-
-lemma TRAT_ARCH: "EX n d. trat_eq (trat_sucint n) (trat_add h d)"
-  sorry
-
-lemma TRAT_SUCINT: "trat_eq (trat_sucint 0) trat_1 &
-(ALL n. trat_eq (trat_sucint (Suc n)) (trat_add (trat_sucint n) trat_1))"
-  sorry
-
-lemma TRAT_EQ_EQUIV: "trat_eq p q = (trat_eq p = trat_eq q)"
-  sorry
-
-typedef (open) hrat = "{x. EX xa. x = trat_eq xa}" 
-  sorry
-
-lemmas hrat_TY_DEF = typedef_hol2hol4 [OF type_definition_hrat]
-
-consts
-  mk_hrat :: "(nat * nat => bool) => hrat" 
-  dest_hrat :: "hrat => nat * nat => bool" 
-
-specification (dest_hrat mk_hrat) hrat_tybij: "(ALL a. mk_hrat (dest_hrat a) = a) &
-(ALL r. (EX x. r = trat_eq x) = (dest_hrat (mk_hrat r) = r))"
-  sorry
-
-definition
-  hrat_1 :: "hrat"  where
-  "hrat_1 == mk_hrat (trat_eq trat_1)"
-
-lemma hrat_1: "hrat_1 = mk_hrat (trat_eq trat_1)"
-  sorry
-
-definition
-  hrat_inv :: "hrat => hrat"  where
-  "hrat_inv == %T1. mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
-
-lemma hrat_inv: "hrat_inv T1 = mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
-  sorry
-
-definition
-  hrat_add :: "hrat => hrat => hrat"  where
-  "hrat_add ==
-%T1 T2.
-   mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
-
-lemma hrat_add: "hrat_add T1 T2 =
-mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
-  sorry
-
-definition
-  hrat_mul :: "hrat => hrat => hrat"  where
-  "hrat_mul ==
-%T1 T2.
-   mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
-
-lemma hrat_mul: "hrat_mul T1 T2 =
-mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
-  sorry
-
-definition
-  hrat_sucint :: "nat => hrat"  where
-  "hrat_sucint == %T1. mk_hrat (trat_eq (trat_sucint T1))"
-
-lemma hrat_sucint: "hrat_sucint T1 = mk_hrat (trat_eq (trat_sucint T1))"
-  sorry
-
-lemma HRAT_ADD_SYM: "hrat_add h i = hrat_add i h"
-  sorry
-
-lemma HRAT_ADD_ASSOC: "hrat_add h (hrat_add i j) = hrat_add (hrat_add h i) j"
-  sorry
-
-lemma HRAT_MUL_SYM: "hrat_mul h i = hrat_mul i h"
-  sorry
-
-lemma HRAT_MUL_ASSOC: "hrat_mul h (hrat_mul i j) = hrat_mul (hrat_mul h i) j"
-  sorry
-
-lemma HRAT_LDISTRIB: "hrat_mul h (hrat_add i j) = hrat_add (hrat_mul h i) (hrat_mul h j)"
-  sorry
-
-lemma HRAT_MUL_LID: "hrat_mul hrat_1 h = h"
-  sorry
-
-lemma HRAT_MUL_LINV: "hrat_mul (hrat_inv h) h = hrat_1"
-  sorry
-
-lemma HRAT_NOZERO: "hrat_add h i ~= h"
-  sorry
-
-lemma HRAT_ADD_TOTAL: "h = i | (EX x. h = hrat_add i x) | (EX x. i = hrat_add h x)"
-  sorry
-
-lemma HRAT_ARCH: "EX x xa. hrat_sucint x = hrat_add h xa"
-  sorry
-
-lemma HRAT_SUCINT: "hrat_sucint 0 = hrat_1 &
-(ALL x. hrat_sucint (Suc x) = hrat_add (hrat_sucint x) hrat_1)"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" hreal
-
-definition
-  hrat_lt :: "hrat => hrat => bool"  where
-  "hrat_lt == %x y. EX d. y = hrat_add x d"
-
-lemma hrat_lt: "hrat_lt x y = (EX d. y = hrat_add x d)"
-  sorry
-
-lemma HRAT_LT_REFL: "~ hrat_lt x x"
-  sorry
-
-lemma HRAT_LT_TRANS: "hrat_lt x y & hrat_lt y z ==> hrat_lt x z"
-  sorry
-
-lemma HRAT_LT_ANTISYM: "~ (hrat_lt x y & hrat_lt y x)"
-  sorry
-
-lemma HRAT_LT_TOTAL: "x = y | hrat_lt x y | hrat_lt y x"
-  sorry
-
-lemma HRAT_MUL_RID: "hrat_mul x hrat_1 = x"
-  sorry
-
-lemma HRAT_MUL_RINV: "hrat_mul x (hrat_inv x) = hrat_1"
-  sorry
-
-lemma HRAT_RDISTRIB: "hrat_mul (hrat_add x y) z = hrat_add (hrat_mul x z) (hrat_mul y z)"
-  sorry
-
-lemma HRAT_LT_ADDL: "hrat_lt x (hrat_add x y)"
-  sorry
-
-lemma HRAT_LT_ADDR: "hrat_lt xa (hrat_add x xa)"
-  sorry
-
-lemma HRAT_LT_GT: "hrat_lt x y ==> ~ hrat_lt y x"
-  sorry
-
-lemma HRAT_LT_NE: "hrat_lt x y ==> x ~= y"
-  sorry
-
-lemma HRAT_EQ_LADD: "(hrat_add x y = hrat_add x z) = (y = z)"
-  sorry
-
-lemma HRAT_EQ_LMUL: "(hrat_mul x y = hrat_mul x z) = (y = z)"
-  sorry
-
-lemma HRAT_LT_ADD2: "hrat_lt u x & hrat_lt v y ==> hrat_lt (hrat_add u v) (hrat_add x y)"
-  sorry
-
-lemma HRAT_LT_LADD: "hrat_lt (hrat_add z x) (hrat_add z y) = hrat_lt x y"
-  sorry
-
-lemma HRAT_LT_RADD: "hrat_lt (hrat_add x z) (hrat_add y z) = hrat_lt x y"
-  sorry
-
-lemma HRAT_LT_MUL2: "hrat_lt u x & hrat_lt v y ==> hrat_lt (hrat_mul u v) (hrat_mul x y)"
-  sorry
-
-lemma HRAT_LT_LMUL: "hrat_lt (hrat_mul z x) (hrat_mul z y) = hrat_lt x y"
-  sorry
-
-lemma HRAT_LT_RMUL: "hrat_lt (hrat_mul x z) (hrat_mul y z) = hrat_lt x y"
-  sorry
-
-lemma HRAT_LT_LMUL1: "hrat_lt (hrat_mul x y) y = hrat_lt x hrat_1"
-  sorry
-
-lemma HRAT_LT_RMUL1: "hrat_lt (hrat_mul x y) x = hrat_lt y hrat_1"
-  sorry
-
-lemma HRAT_GT_LMUL1: "hrat_lt y (hrat_mul x y) = hrat_lt hrat_1 x"
-  sorry
-
-lemma HRAT_LT_L1: "hrat_lt (hrat_mul (hrat_inv x) y) hrat_1 = hrat_lt y x"
-  sorry
-
-lemma HRAT_LT_R1: "hrat_lt (hrat_mul x (hrat_inv y)) hrat_1 = hrat_lt x y"
-  sorry
-
-lemma HRAT_GT_L1: "hrat_lt hrat_1 (hrat_mul (hrat_inv x) y) = hrat_lt x y"
-  sorry
-
-lemma HRAT_INV_MUL: "hrat_inv (hrat_mul x y) = hrat_mul (hrat_inv x) (hrat_inv y)"
-  sorry
-
-lemma HRAT_UP: "Ex (hrat_lt x)"
-  sorry
-
-lemma HRAT_DOWN: "EX xa. hrat_lt xa x"
-  sorry
-
-lemma HRAT_DOWN2: "EX xa. hrat_lt xa x & hrat_lt xa y"
-  sorry
-
-lemma HRAT_MEAN: "hrat_lt x y ==> EX xa. hrat_lt x xa & hrat_lt xa y"
-  sorry
-
-definition
-  isacut :: "(hrat => bool) => bool"  where
-  "isacut ==
-%C. Ex C &
-    (EX x. ~ C x) &
-    (ALL x y. C x & hrat_lt y x --> C y) &
-    (ALL x. C x --> (EX y. C y & hrat_lt x y))"
-
-lemma isacut: "isacut (CC::hrat => bool) =
-(Ex CC &
- (EX x::hrat. ~ CC x) &
- (ALL (x::hrat) y::hrat. CC x & hrat_lt y x --> CC y) &
- (ALL x::hrat. CC x --> (EX y::hrat. CC y & hrat_lt x y)))"
-  sorry
-
-definition
-  cut_of_hrat :: "hrat => hrat => bool"  where
-  "cut_of_hrat == %x y. hrat_lt y x"
-
-lemma cut_of_hrat: "cut_of_hrat x = (%y. hrat_lt y x)"
-  sorry
-
-lemma ISACUT_HRAT: "isacut (cut_of_hrat h)"
-  sorry
-
-typedef (open) hreal = "Collect isacut" 
-  sorry
-
-lemmas hreal_TY_DEF = typedef_hol2hol4 [OF type_definition_hreal]
-
-consts
-  hreal :: "(hrat => bool) => hreal" 
-  cut :: "hreal => hrat => bool" 
-
-specification (cut hreal) hreal_tybij: "(ALL a. hreal (cut a) = a) & (ALL r. isacut r = (cut (hreal r) = r))"
-  sorry
-
-lemma EQUAL_CUTS: "cut X = cut Y ==> X = Y"
-  sorry
-
-lemma CUT_ISACUT: "isacut (cut x)"
-  sorry
-
-lemma CUT_NONEMPTY: "Ex (cut x)"
-  sorry
-
-lemma CUT_BOUNDED: "EX xa. ~ cut x xa"
-  sorry
-
-lemma CUT_DOWN: "cut x xa & hrat_lt xb xa ==> cut x xb"
-  sorry
-
-lemma CUT_UP: "cut x xa ==> EX y. cut x y & hrat_lt xa y"
-  sorry
-
-lemma CUT_UBOUND: "~ cut x xa & hrat_lt xa xb ==> ~ cut x xb"
-  sorry
-
-lemma CUT_STRADDLE: "cut X x & ~ cut X y ==> hrat_lt x y"
-  sorry
-
-lemma CUT_NEARTOP_ADD: "EX x. cut X x & ~ cut X (hrat_add x e)"
-  sorry
-
-lemma CUT_NEARTOP_MUL: "hrat_lt hrat_1 u ==> EX x. cut X x & ~ cut X (hrat_mul u x)"
-  sorry
-
-definition
-  hreal_1 :: "hreal"  where
-  "hreal_1 == hreal (cut_of_hrat hrat_1)"
-
-lemma hreal_1: "hreal_1 = hreal (cut_of_hrat hrat_1)"
-  sorry
-
-definition
-  hreal_add :: "hreal => hreal => hreal"  where
-  "hreal_add == %X Y. hreal (%w. EX x y. w = hrat_add x y & cut X x & cut Y y)"
-
-lemma hreal_add: "hreal_add X Y = hreal (%w. EX x y. w = hrat_add x y & cut X x & cut Y y)"
-  sorry
-
-definition
-  hreal_mul :: "hreal => hreal => hreal"  where
-  "hreal_mul == %X Y. hreal (%w. EX x y. w = hrat_mul x y & cut X x & cut Y y)"
-
-lemma hreal_mul: "hreal_mul X Y = hreal (%w. EX x y. w = hrat_mul x y & cut X x & cut Y y)"
-  sorry
-
-definition
-  hreal_inv :: "hreal => hreal"  where
-  "hreal_inv ==
-%X. hreal
-     (%w. EX d. hrat_lt d hrat_1 &
-                (ALL x. cut X x --> hrat_lt (hrat_mul w x) d))"
-
-lemma hreal_inv: "hreal_inv X =
-hreal
- (%w. EX d. hrat_lt d hrat_1 &
-            (ALL x. cut X x --> hrat_lt (hrat_mul w x) d))"
-  sorry
-
-definition
-  hreal_sup :: "(hreal => bool) => hreal"  where
-  "hreal_sup == %P. hreal (%w. EX X. P X & cut X w)"
-
-lemma hreal_sup: "hreal_sup P = hreal (%w. EX X. P X & cut X w)"
-  sorry
-
-definition
-  hreal_lt :: "hreal => hreal => bool"  where
-  "hreal_lt == %X Y. X ~= Y & (ALL x. cut X x --> cut Y x)"
-
-lemma hreal_lt: "hreal_lt X Y = (X ~= Y & (ALL x. cut X x --> cut Y x))"
-  sorry
-
-lemma HREAL_INV_ISACUT: "isacut
- (%w. EX d. hrat_lt d hrat_1 &
-            (ALL x. cut X x --> hrat_lt (hrat_mul w x) d))"
-  sorry
-
-lemma HREAL_ADD_ISACUT: "isacut (%w. EX x y. w = hrat_add x y & cut X x & cut Y y)"
-  sorry
-
-lemma HREAL_MUL_ISACUT: "isacut (%w. EX x y. w = hrat_mul x y & cut X x & cut Y y)"
-  sorry
-
-lemma HREAL_ADD_SYM: "hreal_add X Y = hreal_add Y X"
-  sorry
-
-lemma HREAL_MUL_SYM: "hreal_mul X Y = hreal_mul Y X"
-  sorry
-
-lemma HREAL_ADD_ASSOC: "hreal_add X (hreal_add Y Z) = hreal_add (hreal_add X Y) Z"
-  sorry
-
-lemma HREAL_MUL_ASSOC: "hreal_mul X (hreal_mul Y Z) = hreal_mul (hreal_mul X Y) Z"
-  sorry
-
-lemma HREAL_LDISTRIB: "hreal_mul X (hreal_add Y Z) = hreal_add (hreal_mul X Y) (hreal_mul X Z)"
-  sorry
-
-lemma HREAL_MUL_LID: "hreal_mul hreal_1 X = X"
-  sorry
-
-lemma HREAL_MUL_LINV: "hreal_mul (hreal_inv X) X = hreal_1"
-  sorry
-
-lemma HREAL_NOZERO: "hreal_add X Y ~= X"
-  sorry
-
-definition
-  hreal_sub :: "hreal => hreal => hreal"  where
-  "hreal_sub == %Y X. hreal (%w. EX x. ~ cut X x & cut Y (hrat_add x w))"
-
-lemma hreal_sub: "hreal_sub Y X = hreal (%w. EX x. ~ cut X x & cut Y (hrat_add x w))"
-  sorry
-
-lemma HREAL_LT_LEMMA: "hreal_lt X Y ==> EX x. ~ cut X x & cut Y x"
-  sorry
-
-lemma HREAL_SUB_ISACUT: "hreal_lt X Y ==> isacut (%w. EX x. ~ cut X x & cut Y (hrat_add x w))"
-  sorry
-
-lemma HREAL_SUB_ADD: "hreal_lt X Y ==> hreal_add (hreal_sub Y X) X = Y"
-  sorry
-
-lemma HREAL_LT_TOTAL: "X = Y | hreal_lt X Y | hreal_lt Y X"
-  sorry
-
-lemma HREAL_LT: "hreal_lt X Y = (EX D. Y = hreal_add X D)"
-  sorry
-
-lemma HREAL_ADD_TOTAL: "X = Y | (EX D. Y = hreal_add X D) | (EX D. X = hreal_add Y D)"
-  sorry
-
-lemma HREAL_SUP_ISACUT: "Ex P & (EX Y. ALL X. P X --> hreal_lt X Y)
-==> isacut (%w. EX X. P X & cut X w)"
-  sorry
-
-lemma HREAL_SUP: "Ex P & (EX Y. ALL X. P X --> hreal_lt X Y)
-==> (EX X. P X & hreal_lt Y X) = hreal_lt Y (hreal_sup P)"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" numeral
-
-lemma numeral_suc: "Suc ALT_ZERO = NUMERAL_BIT1 ALT_ZERO &
-(ALL x. Suc (NUMERAL_BIT1 x) = NUMERAL_BIT2 x) &
-(ALL x. Suc (NUMERAL_BIT2 x) = NUMERAL_BIT1 (Suc x))"
-  sorry
-
-definition
-  iZ :: "nat => nat"  where
-  "iZ == %x. x"
-
-lemma iZ: "iZ x = x"
-  sorry
-
-definition
-  iiSUC :: "nat => nat"  where
-  "iiSUC == %n. Suc (Suc n)"
-
-lemma iiSUC: "iiSUC n = Suc (Suc n)"
-  sorry
-
-lemma numeral_distrib: "(ALL x::nat. (0::nat) + x = x) &
-(ALL x::nat. x + (0::nat) = x) &
-(ALL (x::nat) xa::nat. NUMERAL x + NUMERAL xa = NUMERAL (iZ (x + xa))) &
-(ALL x::nat. (0::nat) * x = (0::nat)) &
-(ALL x::nat. x * (0::nat) = (0::nat)) &
-(ALL (x::nat) xa::nat. NUMERAL x * NUMERAL xa = NUMERAL (x * xa)) &
-(ALL x::nat. (0::nat) - x = (0::nat)) &
-(ALL x::nat. x - (0::nat) = x) &
-(ALL (x::nat) xa::nat. NUMERAL x - NUMERAL xa = NUMERAL (x - xa)) &
-(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT1 x) = (0::nat)) &
-(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT2 x) = (0::nat)) &
-(ALL x::nat. x ^ (0::nat) = (1::nat)) &
-(ALL (x::nat) xa::nat. NUMERAL x ^ NUMERAL xa = NUMERAL (x ^ xa)) &
-Suc (0::nat) = (1::nat) &
-(ALL x::nat. Suc (NUMERAL x) = NUMERAL (Suc x)) &
-PRE (0::nat) = (0::nat) &
-(ALL x::nat. PRE (NUMERAL x) = NUMERAL (PRE x)) &
-(ALL x::nat. (NUMERAL x = (0::nat)) = (x = ALT_ZERO)) &
-(ALL x::nat. ((0::nat) = NUMERAL x) = (x = ALT_ZERO)) &
-(ALL (x::nat) xa::nat. (NUMERAL x = NUMERAL xa) = (x = xa)) &
-(ALL x::nat. (x < (0::nat)) = False) &
-(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
-(ALL (x::nat) xa::nat. (NUMERAL x < NUMERAL xa) = (x < xa)) &
-(ALL x::nat. (x < (0::nat)) = False) &
-(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
-(ALL (x::nat) xa::nat. (NUMERAL xa < NUMERAL x) = (xa < x)) &
-(ALL x::nat. ((0::nat) <= x) = True) &
-(ALL x::nat. (NUMERAL x <= (0::nat)) = (x <= ALT_ZERO)) &
-(ALL (x::nat) xa::nat. (NUMERAL x <= NUMERAL xa) = (x <= xa)) &
-(ALL x::nat. ((0::nat) <= x) = True) &
-(ALL x::nat. (x <= (0::nat)) = (x = (0::nat))) &
-(ALL (x::nat) xa::nat. (NUMERAL xa <= NUMERAL x) = (xa <= x)) &
-(ALL x::nat. ODD (NUMERAL x) = ODD x) &
-(ALL x::nat. EVEN (NUMERAL x) = EVEN x) & ~ ODD (0::nat) & EVEN (0::nat)"
-  sorry
-
-lemma numeral_iisuc: "iiSUC ALT_ZERO = NUMERAL_BIT2 ALT_ZERO &
-iiSUC (NUMERAL_BIT1 n) = NUMERAL_BIT1 (Suc n) &
-iiSUC (NUMERAL_BIT2 n) = NUMERAL_BIT2 (Suc n)"
-  sorry
-
-lemma numeral_add: "iZ (ALT_ZERO + x) = x &
-iZ (x + ALT_ZERO) = x &
-iZ (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (iZ (x + xa)) &
-iZ (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
-iZ (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
-iZ (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
-Suc (ALT_ZERO + x) = Suc x &
-Suc (x + ALT_ZERO) = Suc x &
-Suc (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
-Suc (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
-Suc (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
-Suc (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
-iiSUC (ALT_ZERO + x) = iiSUC x &
-iiSUC (x + ALT_ZERO) = iiSUC x &
-iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
-iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
-iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
-iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (iiSUC (x + xa))"
-  sorry
-
-lemma numeral_eq: "(ALT_ZERO = NUMERAL_BIT1 x) = False &
-(NUMERAL_BIT1 x = ALT_ZERO) = False &
-(ALT_ZERO = NUMERAL_BIT2 x) = False &
-(NUMERAL_BIT2 x = ALT_ZERO) = False &
-(NUMERAL_BIT1 x = NUMERAL_BIT2 xa) = False &
-(NUMERAL_BIT2 x = NUMERAL_BIT1 xa) = False &
-(NUMERAL_BIT1 x = NUMERAL_BIT1 xa) = (x = xa) &
-(NUMERAL_BIT2 x = NUMERAL_BIT2 xa) = (x = xa)"
-  sorry
-
-lemma numeral_lt: "(ALT_ZERO < NUMERAL_BIT1 x) = True &
-(ALT_ZERO < NUMERAL_BIT2 x) = True &
-(x < ALT_ZERO) = False &
-(NUMERAL_BIT1 x < NUMERAL_BIT1 xa) = (x < xa) &
-(NUMERAL_BIT2 x < NUMERAL_BIT2 xa) = (x < xa) &
-(NUMERAL_BIT1 x < NUMERAL_BIT2 xa) = (~ xa < x) &
-(NUMERAL_BIT2 x < NUMERAL_BIT1 xa) = (x < xa)"
-  sorry
-
-lemma numeral_lte: "(ALT_ZERO <= x) = True &
-(NUMERAL_BIT1 x <= ALT_ZERO) = False &
-(NUMERAL_BIT2 x <= ALT_ZERO) = False &
-(NUMERAL_BIT1 x <= NUMERAL_BIT1 xa) = (x <= xa) &
-(NUMERAL_BIT1 x <= NUMERAL_BIT2 xa) = (x <= xa) &
-(NUMERAL_BIT2 x <= NUMERAL_BIT1 xa) = (~ xa <= x) &
-(NUMERAL_BIT2 x <= NUMERAL_BIT2 xa) = (x <= xa)"
-  sorry
-
-lemma numeral_pre: "PRE ALT_ZERO = ALT_ZERO &
-PRE (NUMERAL_BIT1 ALT_ZERO) = ALT_ZERO &
-(ALL x.
-    PRE (NUMERAL_BIT1 (NUMERAL_BIT1 x)) =
-    NUMERAL_BIT2 (PRE (NUMERAL_BIT1 x))) &
-(ALL x.
-    PRE (NUMERAL_BIT1 (NUMERAL_BIT2 x)) = NUMERAL_BIT2 (NUMERAL_BIT1 x)) &
-(ALL x. PRE (NUMERAL_BIT2 x) = NUMERAL_BIT1 x)"
-  sorry
-
-lemma bit_initiality: "EX x. x ALT_ZERO = zf &
-      (ALL n. x (NUMERAL_BIT1 n) = b1f n (x n)) &
-      (ALL n. x (NUMERAL_BIT2 n) = b2f n (x n))"
-  sorry
-
-consts
-  iBIT_cases :: "nat => 'a => (nat => 'a) => (nat => 'a) => 'a" 
-
-specification (iBIT_cases) iBIT_cases: "(ALL (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
-    iBIT_cases ALT_ZERO zf bf1 bf2 = zf) &
-(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
-    iBIT_cases (NUMERAL_BIT1 n) zf bf1 bf2 = bf1 n) &
-(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
-    iBIT_cases (NUMERAL_BIT2 n) zf bf1 bf2 = bf2 n)"
-  sorry
-
-definition
-  iDUB :: "nat => nat"  where
-  "iDUB == %x. x + x"
-
-lemma iDUB: "iDUB x = x + x"
-  sorry
-
-consts
-  iSUB :: "bool => nat => nat => nat" 
-
-specification (iSUB) iSUB_DEF: "(ALL b x. iSUB b ALT_ZERO x = ALT_ZERO) &
-(ALL b n x.
-    iSUB b (NUMERAL_BIT1 n) x =
-    (if b
-     then iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
-           (%m. NUMERAL_BIT1 (iSUB False n m))
-     else iBIT_cases x (iDUB n) (%m. NUMERAL_BIT1 (iSUB False n m))
-           (%m. iDUB (iSUB False n m)))) &
-(ALL b n x.
-    iSUB b (NUMERAL_BIT2 n) x =
-    (if b
-     then iBIT_cases x (NUMERAL_BIT2 n) (%m. NUMERAL_BIT1 (iSUB True n m))
-           (%m. iDUB (iSUB True n m))
-     else iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
-           (%m. NUMERAL_BIT1 (iSUB False n m))))"
-  sorry
-
-lemma bit_induction: "P ALT_ZERO &
-(ALL n. P n --> P (NUMERAL_BIT1 n)) & (ALL n. P n --> P (NUMERAL_BIT2 n))
-==> P x"
-  sorry
-
-lemma iSUB_THM: "iSUB (x::bool) ALT_ZERO (xn::nat) = ALT_ZERO &
-iSUB True (xa::nat) ALT_ZERO = xa &
-iSUB False (NUMERAL_BIT1 xa) ALT_ZERO = iDUB xa &
-iSUB True (NUMERAL_BIT1 xa) (NUMERAL_BIT1 (xb::nat)) =
-iDUB (iSUB True xa xb) &
-iSUB False (NUMERAL_BIT1 xa) (NUMERAL_BIT1 xb) =
-NUMERAL_BIT1 (iSUB False xa xb) &
-iSUB True (NUMERAL_BIT1 xa) (NUMERAL_BIT2 xb) =
-NUMERAL_BIT1 (iSUB False xa xb) &
-iSUB False (NUMERAL_BIT1 xa) (NUMERAL_BIT2 xb) = iDUB (iSUB False xa xb) &
-iSUB False (NUMERAL_BIT2 xa) ALT_ZERO = NUMERAL_BIT1 xa &
-iSUB True (NUMERAL_BIT2 xa) (NUMERAL_BIT1 xb) =
-NUMERAL_BIT1 (iSUB True xa xb) &
-iSUB False (NUMERAL_BIT2 xa) (NUMERAL_BIT1 xb) = iDUB (iSUB True xa xb) &
-iSUB True (NUMERAL_BIT2 xa) (NUMERAL_BIT2 xb) = iDUB (iSUB True xa xb) &
-iSUB False (NUMERAL_BIT2 xa) (NUMERAL_BIT2 xb) =
-NUMERAL_BIT1 (iSUB False xa xb)"
-  sorry
-
-lemma numeral_sub: "NUMERAL (x - xa) = (if xa < x then NUMERAL (iSUB True x xa) else 0)"
-  sorry
-
-lemma iDUB_removal: "iDUB (NUMERAL_BIT1 x) = NUMERAL_BIT2 (iDUB x) &
-iDUB (NUMERAL_BIT2 x) = NUMERAL_BIT2 (NUMERAL_BIT1 x) &
-iDUB ALT_ZERO = ALT_ZERO"
-  sorry
-
-lemma numeral_mult: "ALT_ZERO * x = ALT_ZERO &
-x * ALT_ZERO = ALT_ZERO &
-NUMERAL_BIT1 x * xa = iZ (iDUB (x * xa) + xa) &
-NUMERAL_BIT2 x * xa = iDUB (iZ (x * xa + xa))"
-  sorry
-
-definition
-  iSQR :: "nat => nat"  where
-  "iSQR == %x. x * x"
-
-lemma iSQR: "iSQR x = x * x"
-  sorry
-
-lemma numeral_exp: "(ALL x. x ^ ALT_ZERO = NUMERAL_BIT1 ALT_ZERO) &
-(ALL x xa. x ^ NUMERAL_BIT1 xa = x * iSQR (x ^ xa)) &
-(ALL x xa. x ^ NUMERAL_BIT2 xa = iSQR x * iSQR (x ^ xa))"
-  sorry
-
-lemma numeral_evenodd: "EVEN ALT_ZERO &
-EVEN (NUMERAL_BIT2 x) &
-~ EVEN (NUMERAL_BIT1 x) &
-~ ODD ALT_ZERO & ~ ODD (NUMERAL_BIT2 x) & ODD (NUMERAL_BIT1 x)"
-  sorry
-
-lemma numeral_fact: "FACT n = (if n = 0 then 1 else n * FACT (PRE n))"
-  sorry
-
-lemma numeral_funpow: "(f ^^ n) x = (if n = 0 then x else (f ^^ (n - 1)) (f x))"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" ind_type
-
-lemma INJ_INVERSE2: "(!!(x1::'A) (y1::'B) (x2::'A) y2::'B.
-    ((P::'A => 'B => 'C) x1 y1 = P x2 y2) = (x1 = x2 & y1 = y2))
-==> EX (x::'C => 'A) Y::'C => 'B.
-       ALL (xa::'A) y::'B. x (P xa y) = xa & Y (P xa y) = y"
-  sorry
-
-definition
-  NUMPAIR :: "nat => nat => nat"  where
-  "NUMPAIR == %x y. 2 ^ x * (2 * y + 1)"
-
-lemma NUMPAIR: "NUMPAIR x y = 2 ^ x * (2 * y + 1)"
-  sorry
-
-lemma NUMPAIR_INJ_LEMMA: "NUMPAIR x xa = NUMPAIR xb xc ==> x = xb"
-  sorry
-
-lemma NUMPAIR_INJ: "(NUMPAIR x1 y1 = NUMPAIR x2 y2) = (x1 = x2 & y1 = y2)"
-  sorry
-
-consts
-  NUMSND :: "nat => nat" 
-  NUMFST :: "nat => nat" 
-
-specification (NUMFST NUMSND) NUMPAIR_DEST: "ALL x y. NUMFST (NUMPAIR x y) = x & NUMSND (NUMPAIR x y) = y"
-  sorry
-
-definition
-  NUMSUM :: "bool => nat => nat"  where
-  "NUMSUM == %b x. if b then Suc (2 * x) else 2 * x"
-
-lemma NUMSUM: "NUMSUM b x = (if b then Suc (2 * x) else 2 * x)"
-  sorry
-
-lemma NUMSUM_INJ: "(NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)"
-  sorry
-
-consts
-  NUMRIGHT :: "nat => nat" 
-  NUMLEFT :: "nat => bool" 
-
-specification (NUMLEFT NUMRIGHT) NUMSUM_DEST: "ALL x y. NUMLEFT (NUMSUM x y) = x & NUMRIGHT (NUMSUM x y) = y"
-  sorry
-
-definition
-  INJN :: "nat => nat => 'a => bool"  where
-  "INJN == %m n a. n = m"
-
-lemma INJN: "INJN m = (%n a. n = m)"
-  sorry
-
-lemma INJN_INJ: "(INJN n1 = INJN n2) = (n1 = n2)"
-  sorry
-
-definition
-  INJA :: "'a => nat => 'a => bool"  where
-  "INJA == %a n b. b = a"
-
-lemma INJA: "INJA a = (%n b. b = a)"
-  sorry
-
-lemma INJA_INJ: "(INJA a1 = INJA a2) = (a1 = a2)"
-  sorry
-
-definition
-  INJF :: "(nat => nat => 'a => bool) => nat => 'a => bool"  where
-  "INJF == %f n. f (NUMFST n) (NUMSND n)"
-
-lemma INJF: "INJF f = (%n. f (NUMFST n) (NUMSND n))"
-  sorry
-
-lemma INJF_INJ: "(INJF f1 = INJF f2) = (f1 = f2)"
-  sorry
-
-definition
-  INJP :: "(nat => 'a => bool) => (nat => 'a => bool) => nat => 'a => bool"  where
-  "INJP ==
-%f1 f2 n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a"
-
-lemma INJP: "INJP f1 f2 =
-(%n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a)"
-  sorry
-
-lemma INJP_INJ: "(INJP f1 f2 = INJP f1' f2') = (f1 = f1' & f2 = f2')"
-  sorry
-
-definition
-  ZCONSTR :: "nat => 'a => (nat => nat => 'a => bool) => nat => 'a => bool"  where
-  "ZCONSTR == %c i r. INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
-
-lemma ZCONSTR: "ZCONSTR c i r = INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
-  sorry
-
-definition
-  ZBOT :: "nat => 'a => bool"  where
-  "ZBOT == INJP (INJN 0) (SOME z. True)"
-
-lemma ZBOT: "ZBOT = INJP (INJN 0) (SOME z. True)"
-  sorry
-
-lemma ZCONSTR_ZBOT: "ZCONSTR x xa xb ~= ZBOT"
-  sorry
-
-definition
-  ZRECSPACE :: "(nat => 'a => bool) => bool"  where
-  "ZRECSPACE ==
-%a0. ALL ZRECSPACE'.
-        (ALL a0.
-            a0 = ZBOT |
-            (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
-            ZRECSPACE' a0) -->
-        ZRECSPACE' a0"
-
-lemma ZRECSPACE: "ZRECSPACE =
-(%a0. ALL ZRECSPACE'.
-         (ALL a0.
-             a0 = ZBOT |
-             (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
-             ZRECSPACE' a0) -->
-         ZRECSPACE' a0)"
-  sorry
-
-lemma ZRECSPACE_rules: "(op &::bool => bool => bool)
- ((ZRECSPACE::(nat => 'a::type => bool) => bool)
-   (ZBOT::nat => 'a::type => bool))
- ((All::(nat => bool) => bool)
-   (%c::nat.
-       (All::('a::type => bool) => bool)
-        (%i::'a::type.
-            (All::((nat => nat => 'a::type => bool) => bool) => bool)
-             (%r::nat => nat => 'a::type => bool.
-                 (op -->::bool => bool => bool)
-                  ((All::(nat => bool) => bool)
-                    (%n::nat.
-                        (ZRECSPACE::(nat => 'a::type => bool) => bool)
-                         (r n)))
-                  ((ZRECSPACE::(nat => 'a::type => bool) => bool)
-                    ((ZCONSTR::nat
-                               => 'a::type
-                                  => (nat => nat => 'a::type => bool)
-                                     => nat => 'a::type => bool)
-                      c i r))))))"
-  sorry
-
-lemma ZRECSPACE_ind: "[| x ZBOT & (ALL c i r. (ALL n. x (r n)) --> x (ZCONSTR c i r));
-   ZRECSPACE a0 |]
-==> x a0"
-  sorry
-
-lemma ZRECSPACE_cases: "ZRECSPACE a0 =
-(a0 = ZBOT | (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE (r n))))"
-  sorry
-
-typedef (open) ('a) recspace = "Collect ZRECSPACE :: (nat \<Rightarrow> 'a\<Colon>type \<Rightarrow> bool) set"
-  sorry
-
-lemmas recspace_TY_DEF = typedef_hol2hol4 [OF type_definition_recspace]
-
-consts
-  mk_rec :: "(nat => 'a => bool) => 'a recspace" 
-  dest_rec :: "'a recspace => nat => 'a => bool" 
-
-specification (dest_rec mk_rec) recspace_repfns: "(ALL a::'a recspace. mk_rec (dest_rec a) = a) &
-(ALL r::nat => 'a => bool. ZRECSPACE r = (dest_rec (mk_rec r) = r))"
-  sorry
-
-definition
-  BOTTOM :: "'a recspace"  where
-  "BOTTOM == mk_rec ZBOT"
-
-lemma BOTTOM: "BOTTOM = mk_rec ZBOT"
-  sorry
-
-definition
-  CONSTR :: "nat => 'a => (nat => 'a recspace) => 'a recspace"  where
-  "CONSTR == %c i r. mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
-
-lemma CONSTR: "CONSTR c i r = mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
-  sorry
-
-lemma MK_REC_INJ: "[| mk_rec x = mk_rec y; ZRECSPACE x & ZRECSPACE y |] ==> x = y"
-  sorry
-
-lemma DEST_REC_INJ: "(dest_rec x = dest_rec y) = (x = y)"
-  sorry
-
-lemma CONSTR_BOT: "CONSTR c i r ~= BOTTOM"
-  sorry
-
-lemma CONSTR_INJ: "(CONSTR c1 i1 r1 = CONSTR c2 i2 r2) = (c1 = c2 & i1 = i2 & r1 = r2)"
-  sorry
-
-lemma CONSTR_IND: "P BOTTOM & (ALL c i r. (ALL n. P (r n)) --> P (CONSTR c i r)) ==> P x"
-  sorry
-
-lemma CONSTR_REC: "EX f. ALL c i r. f (CONSTR c i r) = Fn c i r (%n. f (r n))"
-  sorry
-
-consts
-  FCONS :: "'a => (nat => 'a) => nat => 'a" 
-
-specification (FCONS) FCONS: "(ALL (a::'a) f::nat => 'a. FCONS a f (0::nat) = a) &
-(ALL (a::'a) (f::nat => 'a) n::nat. FCONS a f (Suc n) = f n)"
-  sorry
-
-definition
-  FNIL :: "nat => 'a"  where
-  "FNIL == %n. SOME x. True"
-
-lemma FNIL: "FNIL n = (SOME x. True)"
-  sorry
-
-definition
-  ISO :: "('a => 'b) => ('b => 'a) => bool"  where
-  "ISO == %f g. (ALL x. f (g x) = x) & (ALL y. g (f y) = y)"
-
-lemma ISO: "ISO f g = ((ALL x. f (g x) = x) & (ALL y. g (f y) = y))"
-  sorry
-
-lemma ISO_REFL: "ISO (%x. x) (%x. x)"
-  sorry
-
-lemma ISO_FUN: "ISO (f::'a => 'c) (f'::'c => 'a) & ISO (g::'b => 'd) (g'::'d => 'b)
-==> ISO (%(h::'a => 'b) a'::'c. g (h (f' a')))
-     (%(h::'c => 'd) a::'a. g' (h (f a)))"
-  sorry
-
-lemma ISO_USAGE: "ISO f g
-==> (ALL P. All P = (ALL x. P (g x))) &
-    (ALL P. Ex P = (EX x. P (g x))) & (ALL a b. (a = g b) = (f a = b))"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" divides
-
-lemma DIVIDES_FACT: "0 < b ==> b dvd FACT b"
-  sorry
-
-lemma DIVIDES_MULT_LEFT: "((x::nat) * (xa::nat) dvd xa) = (xa = (0::nat) | x = (1::nat))"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prime
-
-consts
-  prime :: "nat => bool" 
-
-defs
-  prime_primdef: "prime.prime == %a. a ~= 1 & (ALL b. b dvd a --> b = a | b = 1)"
-
-lemma prime_def: "prime.prime a = (a ~= 1 & (ALL b. b dvd a --> b = a | b = 1))"
-  sorry
-
-lemma NOT_PRIME_0: "~ prime.prime 0"
-  sorry
-
-lemma NOT_PRIME_1: "~ prime.prime 1"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" list
-
-consts
-  EL :: "nat => 'a list => 'a" 
-
-specification (EL) EL: "(ALL l::'a list. EL (0::nat) l = hd l) &
-(ALL (l::'a list) n::nat. EL (Suc n) l = EL n (tl l))"
-  sorry
-
-lemma NULL: "(op &::bool => bool => bool)
- ((List.null::'a::type list => bool) ([]::'a::type list))
- ((All::('a::type => bool) => bool)
-   (%x::'a::type.
-       (All::('a::type list => bool) => bool)
-        (%xa::'a::type list.
-            (Not::bool => bool)
-             ((List.null::'a::type list => bool)
-               ((op #::'a::type => 'a::type list => 'a::type list) x xa)))))"
-  sorry
-
-lemma list_case_compute: "list_case (b::'b) (f::'a => 'a list => 'b) (l::'a list) =
-(if List.null l then b else f (hd l) (tl l))"
-  sorry
-
-lemma LIST_NOT_EQ: "l1 ~= l2 ==> x # l1 ~= xa # l2"
-  sorry
-
-lemma NOT_EQ_LIST: "h1 ~= h2 ==> h1 # x ~= h2 # xa"
-  sorry
-
-lemma EQ_LIST: "[| h1 = h2; l1 = l2 |] ==> h1 # l1 = h2 # l2"
-  sorry
-
-lemma CONS: "~ List.null l ==> hd l # tl l = l"
-  sorry
-
-lemma MAP_EQ_NIL: "(map (f::'a => 'b) (l::'a list) = []) = (l = []) & ([] = map f l) = (l = [])"
-  sorry
-
-lemma EVERY_EL: "list_all P l = (ALL n<length l. P (EL n l))"
-  sorry
-
-lemma EVERY_CONJ: "list_all (%x. P x & Q x) l = (list_all P l & list_all Q l)"
-  sorry
-
-lemma EVERY_MEM: "list_all P l = (ALL e. List.member l e --> P e)"
-  sorry
-
-lemma EXISTS_MEM: "list_ex P l = (EX e. List.member l e & P e)"
-  sorry
-
-lemma MEM_APPEND: "List.member (l1 @ l2) e = (List.member l1 e | List.member l2 e)"
-  sorry
-
-lemma NOT_EVERY: "(~ list_all P l) = list_ex (Not o P) l"
-  sorry
-
-lemma NOT_EXISTS: "(~ list_ex P l) = list_all (Not o P) l"
-  sorry
-
-lemma MEM_MAP: "List.member (map (f::'a => 'b) (l::'a list)) (x::'b) =
-(EX y::'a. x = f y & List.member l y)"
-  sorry
-
-lemma LENGTH_CONS: "(length l = Suc n) = (EX h l'. length l' = n & l = h # l')"
-  sorry
-
-lemma LENGTH_EQ_CONS: "(ALL l. length l = Suc n --> P l) =
-(ALL l. length l = n --> (ALL x. P (x # l)))"
-  sorry
-
-lemma LENGTH_EQ_NIL: "(ALL l. length l = 0 --> P l) = P []"
-  sorry
-
-lemma CONS_ACYCLIC: "l ~= x # l & x # l ~= l"
-  sorry
-
-lemma APPEND_eq_NIL: "(ALL (l1::'a list) l2::'a list. ([] = l1 @ l2) = (l1 = [] & l2 = [])) &
-(ALL (l1::'a list) l2::'a list. (l1 @ l2 = []) = (l1 = [] & l2 = []))"
-  sorry
-
-lemma APPEND_11: "(ALL (l1::'a list) (l2::'a list) l3::'a list.
-    (l1 @ l2 = l1 @ l3) = (l2 = l3)) &
-(ALL (l1::'a list) (l2::'a list) l3::'a list.
-    (l2 @ l1 = l3 @ l1) = (l2 = l3))"
-  sorry
-
-lemma EL_compute: "EL n l = (if n = 0 then hd l else EL (PRE n) (tl l))"
-  sorry
-
-lemma WF_LIST_PRED: "WF (%L1 L2. EX h. L2 = h # L1)"
-  sorry
-
-lemma list_size_cong: "M = N & (ALL x. List.member N x --> f x = f' x)
-==> HOL4Compat.list_size f M = HOL4Compat.list_size f' N"
-  sorry
-
-lemma FOLDR_CONG: "l = l' & b = b' & (ALL x a. List.member l' x --> f x a = f' x a)
-==> foldr f l b = foldr f' l' b'"
-  sorry
-
-lemma FOLDL_CONG: "l = l' & b = b' & (ALL x a. List.member l' x --> f a x = f' a x)
-==> foldl f b l = foldl f' b' l'"
-  sorry
-
-lemma MAP_CONG: "l1 = l2 & (ALL x. List.member l2 x --> f x = f' x) ==> map f l1 = map f' l2"
-  sorry
-
-lemma EXISTS_CONG: "l1 = l2 & (ALL x. List.member l2 x --> P x = P' x)
-==> list_ex P l1 = list_ex P' l2"
-  sorry
-
-lemma EVERY_CONG: "l1 = l2 & (ALL x. List.member l2 x --> P x = P' x)
-==> list_all P l1 = list_all P' l2"
-  sorry
-
-lemma EVERY_MONOTONIC: "[| !!x. P x ==> Q x; list_all P l |] ==> list_all Q l"
-  sorry
-
-lemma LENGTH_ZIP: "length l1 = length l2
-==> length (zip l1 l2) = length l1 & length (zip l1 l2) = length l2"
-  sorry
-
-lemma LENGTH_UNZIP: "length (fst (unzip pl)) = length pl & length (snd (unzip pl)) = length pl"
-  sorry
-
-lemma ZIP_UNZIP: "ZIP (unzip l) = l"
-  sorry
-
-lemma UNZIP_ZIP: "length l1 = length l2 ==> unzip (zip l1 l2) = (l1, l2)"
-  sorry
-
-lemma ZIP_MAP: "length l1 = length l2
-==> zip (map f1 l1) l2 = map (%p. (f1 (fst p), snd p)) (zip l1 l2) &
-    zip l1 (map f2 l2) = map (%p. (fst p, f2 (snd p))) (zip l1 l2)"
-  sorry
-
-lemma MEM_ZIP: "length l1 = length l2
-==> List.member (zip l1 l2) p = (EX n<length l1. p = (EL n l1, EL n l2))"
-  sorry
-
-lemma EL_ZIP: "length l1 = length l2 & n < length l1
-==> EL n (zip l1 l2) = (EL n l1, EL n l2)"
-  sorry
-
-lemma MAP2_ZIP: "length l1 = length l2 ==> map2 f l1 l2 = map (%(x, y). f x y) (zip l1 l2)"
-  sorry
-
-lemma MEM_EL: "List.member l x = (EX n<length l. x = EL n l)"
-  sorry
-
-lemma LAST_CONS: "(ALL x::'a. last [x] = x) &
-(ALL (x::'a) (xa::'a) xb::'a list. last (x # xa # xb) = last (xa # xb))"
-  sorry
-
-lemma FRONT_CONS: "(ALL x::'a. butlast [x] = []) &
-(ALL (x::'a) (xa::'a) xb::'a list.
-    butlast (x # xa # xb) = x # butlast (xa # xb))"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" pred_set
-
-lemma EXTENSION: "(s = t) = (ALL x. IN x s = IN x t)"
-  sorry
-
-lemma NOT_EQUAL_SETS: "(x ~= xa) = (EX xb. IN xb xa = (~ IN xb x))"
-  sorry
-
-lemma NUM_SET_WOP: "(EX n::nat. IN n (s::nat => bool)) =
-(EX n::nat. IN n s & (ALL m::nat. IN m s --> n <= m))"
-  sorry
-
-consts
-  GSPEC :: "('b => 'a * bool) => 'a => bool" 
-
-specification (GSPEC) GSPECIFICATION: "ALL (f::'b => 'a * bool) v::'a. IN v (GSPEC f) = (EX x::'b. (v, True) = f x)"
-  sorry
-
-lemma SET_MINIMUM: "(EX x::'a. IN x (s::'a => bool)) =
-(EX x::'a. IN x s & (ALL y::'a. IN y s --> (M::'a => nat) x <= M y))"
-  sorry
-
-definition
-  EMPTY :: "'a => bool"  where
-  "EMPTY == %x. False"
-
-lemma EMPTY_DEF: "EMPTY = (%x. False)"
-  sorry
-
-lemma NOT_IN_EMPTY: "~ IN x EMPTY"
-  sorry
-
-lemma MEMBER_NOT_EMPTY: "(EX xa. IN xa x) = (x ~= EMPTY)"
-  sorry
-
-definition
-  UNIV :: "'a => bool"  where
-  "UNIV == %x. True"
-
-lemma UNIV_DEF: "pred_set.UNIV = (%x. True)"
-  sorry
-
-lemma IN_UNIV: "IN x pred_set.UNIV"
-  sorry
-
-lemma UNIV_NOT_EMPTY: "pred_set.UNIV ~= EMPTY"
-  sorry
-
-lemma EMPTY_NOT_UNIV: "EMPTY ~= pred_set.UNIV"
-  sorry
-
-lemma EQ_UNIV: "(ALL x. IN x s) = (s = pred_set.UNIV)"
-  sorry
-
-definition
-  SUBSET :: "('a => bool) => ('a => bool) => bool"  where
-  "SUBSET == %s t. ALL x. IN x s --> IN x t"
-
-lemma SUBSET_DEF: "SUBSET s t = (ALL x. IN x s --> IN x t)"
-  sorry
-
-lemma SUBSET_TRANS: "SUBSET x xa & SUBSET xa xb ==> SUBSET x xb"
-  sorry
-
-lemma SUBSET_REFL: "SUBSET x x"
-  sorry
-
-lemma SUBSET_ANTISYM: "SUBSET x xa & SUBSET xa x ==> x = xa"
-  sorry
-
-lemma EMPTY_SUBSET: "SUBSET EMPTY x"
-  sorry
-
-lemma SUBSET_EMPTY: "SUBSET x EMPTY = (x = EMPTY)"
-  sorry
-
-lemma SUBSET_UNIV: "SUBSET x pred_set.UNIV"
-  sorry
-
-lemma UNIV_SUBSET: "SUBSET pred_set.UNIV x = (x = pred_set.UNIV)"
-  sorry
-
-definition
-  PSUBSET :: "('a => bool) => ('a => bool) => bool"  where
-  "PSUBSET == %s t. SUBSET s t & s ~= t"
-
-lemma PSUBSET_DEF: "PSUBSET s t = (SUBSET s t & s ~= t)"
-  sorry
-
-lemma PSUBSET_TRANS: "PSUBSET x xa & PSUBSET xa xb ==> PSUBSET x xb"
-  sorry
-
-lemma PSUBSET_IRREFL: "~ PSUBSET x x"
-  sorry
-
-lemma NOT_PSUBSET_EMPTY: "~ PSUBSET x EMPTY"
-  sorry
-
-lemma NOT_UNIV_PSUBSET: "~ PSUBSET pred_set.UNIV x"
-  sorry
-
-lemma PSUBSET_UNIV: "PSUBSET x pred_set.UNIV = (EX xa. ~ IN xa x)"
-  sorry
-
-definition
-  UNION :: "('a => bool) => ('a => bool) => 'a => bool"  where
-  "UNION == %s t. GSPEC (%x. (x, IN x s | IN x t))"
-
-lemma UNION_DEF: "pred_set.UNION s t = GSPEC (%x. (x, IN x s | IN x t))"
-  sorry
-
-lemma IN_UNION: "IN xb (pred_set.UNION x xa) = (IN xb x | IN xb xa)"
-  sorry
-
-lemma UNION_ASSOC: "pred_set.UNION x (pred_set.UNION xa xb) =
-pred_set.UNION (pred_set.UNION x xa) xb"
-  sorry
-
-lemma UNION_IDEMPOT: "pred_set.UNION x x = x"
-  sorry
-
-lemma UNION_COMM: "pred_set.UNION x xa = pred_set.UNION xa x"
-  sorry
-
-lemma SUBSET_UNION: "(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION x xa)) &
-(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION xa x))"
-  sorry
-
-lemma UNION_SUBSET: "SUBSET (pred_set.UNION s t) u = (SUBSET s u & SUBSET t u)"
-  sorry
-
-lemma SUBSET_UNION_ABSORPTION: "SUBSET x xa = (pred_set.UNION x xa = xa)"
-  sorry
-
-lemma UNION_EMPTY: "(ALL x::'a => bool. pred_set.UNION EMPTY x = x) &
-(ALL x::'a => bool. pred_set.UNION x EMPTY = x)"
-  sorry
-
-lemma UNION_UNIV: "(ALL x::'a => bool. pred_set.UNION pred_set.UNIV x = pred_set.UNIV) &
-(ALL x::'a => bool. pred_set.UNION x pred_set.UNIV = pred_set.UNIV)"
-  sorry
-
-lemma EMPTY_UNION: "(pred_set.UNION x xa = EMPTY) = (x = EMPTY & xa = EMPTY)"
-  sorry
-
-definition
-  INTER :: "('a => bool) => ('a => bool) => 'a => bool"  where
-  "INTER == %s t. GSPEC (%x. (x, IN x s & IN x t))"
-
-lemma INTER_DEF: "pred_set.INTER s t = GSPEC (%x. (x, IN x s & IN x t))"
-  sorry
-
-lemma IN_INTER: "IN xb (pred_set.INTER x xa) = (IN xb x & IN xb xa)"
-  sorry
-
-lemma INTER_ASSOC: "pred_set.INTER x (pred_set.INTER xa xb) =
-pred_set.INTER (pred_set.INTER x xa) xb"
-  sorry
-
-lemma INTER_IDEMPOT: "pred_set.INTER x x = x"
-  sorry
-
-lemma INTER_COMM: "pred_set.INTER x xa = pred_set.INTER xa x"
-  sorry
-
-lemma INTER_SUBSET: "(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER x xa) x) &
-(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER xa x) x)"
-  sorry
-
-lemma SUBSET_INTER: "SUBSET s (pred_set.INTER t u) = (SUBSET s t & SUBSET s u)"
-  sorry
-
-lemma SUBSET_INTER_ABSORPTION: "SUBSET x xa = (pred_set.INTER x xa = x)"
-  sorry
-
-lemma INTER_EMPTY: "(ALL x::'a => bool. pred_set.INTER EMPTY x = EMPTY) &
-(ALL x::'a => bool. pred_set.INTER x EMPTY = EMPTY)"
-  sorry
-
-lemma INTER_UNIV: "(ALL x::'a => bool. pred_set.INTER pred_set.UNIV x = x) &
-(ALL x::'a => bool. pred_set.INTER x pred_set.UNIV = x)"
-  sorry
-
-lemma UNION_OVER_INTER: "pred_set.INTER x (pred_set.UNION xa xb) =
-pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER x xb)"
-  sorry
-
-lemma INTER_OVER_UNION: "pred_set.UNION x (pred_set.INTER xa xb) =
-pred_set.INTER (pred_set.UNION x xa) (pred_set.UNION x xb)"
-  sorry
-
-definition
-  DISJOINT :: "('a => bool) => ('a => bool) => bool"  where
-  "DISJOINT == %s t. pred_set.INTER s t = EMPTY"
-
-lemma DISJOINT_DEF: "DISJOINT s t = (pred_set.INTER s t = EMPTY)"
-  sorry
-
-lemma IN_DISJOINT: "DISJOINT x xa = (~ (EX xb. IN xb x & IN xb xa))"
-  sorry
-
-lemma DISJOINT_SYM: "DISJOINT x xa = DISJOINT xa x"
-  sorry
-
-lemma DISJOINT_EMPTY: "DISJOINT EMPTY x & DISJOINT x EMPTY"
-  sorry
-
-lemma DISJOINT_EMPTY_REFL: "(x = EMPTY) = DISJOINT x x"
-  sorry
-
-lemma DISJOINT_UNION: "DISJOINT (pred_set.UNION x xa) xb = (DISJOINT x xb & DISJOINT xa xb)"
-  sorry
-
-lemma DISJOINT_UNION_BOTH: "DISJOINT (pred_set.UNION s t) u = (DISJOINT s u & DISJOINT t u) &
-DISJOINT u (pred_set.UNION s t) = (DISJOINT s u & DISJOINT t u)"
-  sorry
-
-definition
-  DIFF :: "('a => bool) => ('a => bool) => 'a => bool"  where
-  "DIFF == %s t. GSPEC (%x. (x, IN x s & ~ IN x t))"
-
-lemma DIFF_DEF: "DIFF s t = GSPEC (%x. (x, IN x s & ~ IN x t))"
-  sorry
-
-lemma IN_DIFF: "IN x (DIFF s t) = (IN x s & ~ IN x t)"
-  sorry
-
-lemma DIFF_EMPTY: "DIFF s EMPTY = s"
-  sorry
-
-lemma EMPTY_DIFF: "DIFF EMPTY s = EMPTY"
-  sorry
-
-lemma DIFF_UNIV: "DIFF s pred_set.UNIV = EMPTY"
-  sorry
-
-lemma DIFF_DIFF: "DIFF (DIFF x xa) xa = DIFF x xa"
-  sorry
-
-lemma DIFF_EQ_EMPTY: "DIFF x x = EMPTY"
-  sorry
-
-definition
-  INSERT :: "'a => ('a => bool) => 'a => bool"  where
-  "INSERT == %x s. GSPEC (%y. (y, y = x | IN y s))"
-
-lemma INSERT_DEF: "INSERT x s = GSPEC (%y. (y, y = x | IN y s))"
-  sorry
-
-lemma IN_INSERT: "IN x (INSERT xa xb) = (x = xa | IN x xb)"
-  sorry
-
-lemma COMPONENT: "IN x (INSERT x xa)"
-  sorry
-
-lemma SET_CASES: "x = EMPTY | (EX xa xb. x = INSERT xa xb & ~ IN xa xb)"
-  sorry
-
-lemma DECOMPOSITION: "IN x s = (EX t. s = INSERT x t & ~ IN x t)"
-  sorry
-
-lemma ABSORPTION: "IN x xa = (INSERT x xa = xa)"
-  sorry
-
-lemma INSERT_INSERT: "INSERT x (INSERT x xa) = INSERT x xa"
-  sorry
-
-lemma INSERT_COMM: "INSERT x (INSERT xa xb) = INSERT xa (INSERT x xb)"
-  sorry
-
-lemma INSERT_UNIV: "INSERT x pred_set.UNIV = pred_set.UNIV"
-  sorry
-
-lemma NOT_INSERT_EMPTY: "INSERT x xa ~= EMPTY"
-  sorry
-
-lemma NOT_EMPTY_INSERT: "EMPTY ~= INSERT x xa"
-  sorry
-
-lemma INSERT_UNION: "pred_set.UNION (INSERT x s) t =
-(if IN x t then pred_set.UNION s t else INSERT x (pred_set.UNION s t))"
-  sorry
-
-lemma INSERT_UNION_EQ: "pred_set.UNION (INSERT x s) t = INSERT x (pred_set.UNION s t)"
-  sorry
-
-lemma INSERT_INTER: "pred_set.INTER (INSERT x s) t =
-(if IN x t then INSERT x (pred_set.INTER s t) else pred_set.INTER s t)"
-  sorry
-
-lemma DISJOINT_INSERT: "DISJOINT (INSERT x xa) xb = (DISJOINT xa xb & ~ IN x xb)"
-  sorry
-
-lemma INSERT_SUBSET: "SUBSET (INSERT x xa) xb = (IN x xb & SUBSET xa xb)"
-  sorry
-
-lemma SUBSET_INSERT: "~ IN x xa ==> SUBSET xa (INSERT x xb) = SUBSET xa xb"
-  sorry
-
-lemma INSERT_DIFF: "DIFF (INSERT x s) t = (if IN x t then DIFF s t else INSERT x (DIFF s t))"
-  sorry
-
-definition
-  DELETE :: "('a => bool) => 'a => 'a => bool"  where
-  "DELETE == %s x. DIFF s (INSERT x EMPTY)"
-
-lemma DELETE_DEF: "DELETE s x = DIFF s (INSERT x EMPTY)"
-  sorry
-
-lemma IN_DELETE: "IN xa (DELETE x xb) = (IN xa x & xa ~= xb)"
-  sorry
-
-lemma DELETE_NON_ELEMENT: "(~ IN x xa) = (DELETE xa x = xa)"
-  sorry
-
-lemma IN_DELETE_EQ: "(IN x s = IN x' s) = (IN x (DELETE s x') = IN x' (DELETE s x))"
-  sorry
-
-lemma EMPTY_DELETE: "DELETE EMPTY x = EMPTY"
-  sorry
-
-lemma DELETE_DELETE: "DELETE (DELETE xa x) x = DELETE xa x"
-  sorry
-
-lemma DELETE_COMM: "DELETE (DELETE xb x) xa = DELETE (DELETE xb xa) x"
-  sorry
-
-lemma DELETE_SUBSET: "SUBSET (DELETE xa x) xa"
-  sorry
-
-lemma SUBSET_DELETE: "SUBSET xa (DELETE xb x) = (~ IN x xa & SUBSET xa xb)"
-  sorry
-
-lemma SUBSET_INSERT_DELETE: "SUBSET s (INSERT x t) = SUBSET (DELETE s x) t"
-  sorry
-
-lemma DIFF_INSERT: "DIFF x (INSERT xb xa) = DIFF (DELETE x xb) xa"
-  sorry
-
-lemma PSUBSET_INSERT_SUBSET: "PSUBSET x xa = (EX xb. ~ IN xb x & SUBSET (INSERT xb x) xa)"
-  sorry
-
-lemma PSUBSET_MEMBER: "PSUBSET s t = (SUBSET s t & (EX y. IN y t & ~ IN y s))"
-  sorry
-
-lemma DELETE_INSERT: "DELETE (INSERT x xb) xa =
-(if x = xa then DELETE xb xa else INSERT x (DELETE xb xa))"
-  sorry
-
-lemma INSERT_DELETE: "IN x xa ==> INSERT x (DELETE xa x) = xa"
-  sorry
-
-lemma DELETE_INTER: "pred_set.INTER (DELETE x xb) xa = DELETE (pred_set.INTER x xa) xb"
-  sorry
-
-lemma DISJOINT_DELETE_SYM: "DISJOINT (DELETE x xb) xa = DISJOINT (DELETE xa xb) x"
-  sorry
-
-consts
-  CHOICE :: "('a => bool) => 'a" 
-
-specification (CHOICE) CHOICE_DEF: "ALL x. x ~= EMPTY --> IN (CHOICE x) x"
-  sorry
-
-definition
-  REST :: "('a => bool) => 'a => bool"  where
-  "REST == %s. DELETE s (CHOICE s)"
-
-lemma REST_DEF: "REST s = DELETE s (CHOICE s)"
-  sorry
-
-lemma CHOICE_NOT_IN_REST: "~ IN (CHOICE x) (REST x)"
-  sorry
-
-lemma CHOICE_INSERT_REST: "s ~= EMPTY ==> INSERT (CHOICE s) (REST s) = s"
-  sorry
-
-lemma REST_SUBSET: "SUBSET (REST x) x"
-  sorry
-
-lemma REST_PSUBSET: "x ~= EMPTY ==> PSUBSET (REST x) x"
-  sorry
-
-definition
-  SING :: "('a => bool) => bool"  where
-  "SING == %s. EX x. s = INSERT x EMPTY"
-
-lemma SING_DEF: "SING s = (EX x. s = INSERT x EMPTY)"
-  sorry
-
-lemma SING: "SING (INSERT x EMPTY)"
-  sorry
-
-lemma IN_SING: "IN x (INSERT xa EMPTY) = (x = xa)"
-  sorry
-
-lemma NOT_SING_EMPTY: "INSERT x EMPTY ~= EMPTY"
-  sorry
-
-lemma NOT_EMPTY_SING: "EMPTY ~= INSERT x EMPTY"
-  sorry
-
-lemma EQUAL_SING: "(INSERT x EMPTY = INSERT xa EMPTY) = (x = xa)"
-  sorry
-
-lemma DISJOINT_SING_EMPTY: "DISJOINT (INSERT x EMPTY) EMPTY"
-  sorry
-
-lemma INSERT_SING_UNION: "INSERT xa x = pred_set.UNION (INSERT xa EMPTY) x"
-  sorry
-
-lemma SING_DELETE: "DELETE (INSERT x EMPTY) x = EMPTY"
-  sorry
-
-lemma DELETE_EQ_SING: "IN xa x ==> (DELETE x xa = EMPTY) = (x = INSERT xa EMPTY)"
-  sorry
-
-lemma CHOICE_SING: "CHOICE (INSERT x EMPTY) = x"
-  sorry
-
-lemma REST_SING: "REST (INSERT x EMPTY) = EMPTY"
-  sorry
-
-lemma SING_IFF_EMPTY_REST: "SING x = (x ~= EMPTY & REST x = EMPTY)"
-  sorry
-
-definition
-  IMAGE :: "('a => 'b) => ('a => bool) => 'b => bool"  where
-  "IMAGE == %f s. GSPEC (%x. (f x, IN x s))"
-
-lemma IMAGE_DEF: "IMAGE (f::'a => 'b) (s::'a => bool) = GSPEC (%x::'a. (f x, IN x s))"
-  sorry
-
-lemma IN_IMAGE: "IN (x::'b) (IMAGE (xb::'a => 'b) (xa::'a => bool)) =
-(EX xc::'a. x = xb xc & IN xc xa)"
-  sorry
-
-lemma IMAGE_IN: "IN x xa ==> IN (xb x) (IMAGE xb xa)"
-  sorry
-
-lemma IMAGE_EMPTY: "IMAGE (x::'a => 'b) EMPTY = EMPTY"
-  sorry
-
-lemma IMAGE_ID: "IMAGE (%x. x) x = x"
-  sorry
-
-lemma IMAGE_COMPOSE: "IMAGE ((x::'b => 'c) o (xa::'a => 'b)) (xb::'a => bool) =
-IMAGE x (IMAGE xa xb)"
-  sorry
-
-lemma IMAGE_INSERT: "IMAGE (x::'a => 'b) (INSERT (xa::'a) (xb::'a => bool)) =
-INSERT (x xa) (IMAGE x xb)"
-  sorry
-
-lemma IMAGE_EQ_EMPTY: "(IMAGE (x::'a => 'b) (s::'a => bool) = EMPTY) = (s = EMPTY)"
-  sorry
-
-lemma IMAGE_DELETE: "~ IN x s ==> IMAGE f (DELETE s x) = IMAGE f s"
-  sorry
-
-lemma IMAGE_UNION: "IMAGE (x::'a => 'b) (pred_set.UNION (xa::'a => bool) (xb::'a => bool)) =
-pred_set.UNION (IMAGE x xa) (IMAGE x xb)"
-  sorry
-
-lemma IMAGE_SUBSET: "SUBSET x xa ==> SUBSET (IMAGE xb x) (IMAGE xb xa)"
-  sorry
-
-lemma IMAGE_INTER: "SUBSET
- (IMAGE (f::'a => 'b) (pred_set.INTER (s::'a => bool) (t::'a => bool)))
- (pred_set.INTER (IMAGE f s) (IMAGE f t))"
-  sorry
-
-definition
-  INJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"  where
-  "INJ ==
-%f s t.
-   (ALL x. IN x s --> IN (f x) t) &
-   (ALL x y. IN x s & IN y s --> f x = f y --> x = y)"
-
-lemma INJ_DEF: "INJ f s t =
-((ALL x. IN x s --> IN (f x) t) &
- (ALL x y. IN x s & IN y s --> f x = f y --> x = y))"
-  sorry
-
-lemma INJ_ID: "INJ (%x. x) x x"
-  sorry
-
-lemma INJ_COMPOSE: "INJ x xb xc & INJ xa xc xd ==> INJ (xa o x) xb xd"
-  sorry
-
-lemma INJ_EMPTY: "All (INJ (x::'a => 'b) EMPTY) &
-(ALL xa::'a => bool. INJ x xa EMPTY = (xa = EMPTY))"
-  sorry
-
-definition
-  SURJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"  where
-  "SURJ ==
-%f s t.
-   (ALL x. IN x s --> IN (f x) t) &
-   (ALL x. IN x t --> (EX y. IN y s & f y = x))"
-
-lemma SURJ_DEF: "SURJ f s t =
-((ALL x. IN x s --> IN (f x) t) &
- (ALL x. IN x t --> (EX y. IN y s & f y = x)))"
-  sorry
-
-lemma SURJ_ID: "SURJ (%x. x) x x"
-  sorry
-
-lemma SURJ_COMPOSE: "SURJ x xb xc & SURJ xa xc xd ==> SURJ (xa o x) xb xd"
-  sorry
-
-lemma SURJ_EMPTY: "(ALL xa::'b => bool. SURJ (x::'a => 'b) EMPTY xa = (xa = EMPTY)) &
-(ALL xa::'a => bool. SURJ x xa EMPTY = (xa = EMPTY))"
-  sorry
-
-lemma IMAGE_SURJ: "SURJ x xa xb = (IMAGE x xa = xb)"
-  sorry
-
-definition
-  BIJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"  where
-  "BIJ == %f s t. INJ f s t & SURJ f s t"
-
-lemma BIJ_DEF: "BIJ f s t = (INJ f s t & SURJ f s t)"
-  sorry
-
-lemma BIJ_ID: "BIJ (%x. x) x x"
-  sorry
-
-lemma BIJ_EMPTY: "(ALL xa::'b => bool. BIJ (x::'a => 'b) EMPTY xa = (xa = EMPTY)) &
-(ALL xa::'a => bool. BIJ x xa EMPTY = (xa = EMPTY))"
-  sorry
-
-lemma BIJ_COMPOSE: "BIJ x xb xc & BIJ xa xc xd ==> BIJ (xa o x) xb xd"
-  sorry
-
-consts
-  LINV :: "('a => 'b) => ('a => bool) => 'b => 'a" 
-
-specification (LINV) LINV_DEF: "ALL f s t. INJ f s t --> (ALL x. IN x s --> LINV f s (f x) = x)"
-  sorry
-
-consts
-  RINV :: "('a => 'b) => ('a => bool) => 'b => 'a" 
-
-specification (RINV) RINV_DEF: "ALL f s t. SURJ f s t --> (ALL x. IN x t --> f (RINV f s x) = x)"
-  sorry
-
-definition
-  FINITE :: "('a => bool) => bool"  where
-  "FINITE ==
-%s. ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s"
-
-lemma FINITE_DEF: "FINITE s =
-(ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s)"
-  sorry
-
-lemma FINITE_EMPTY: "FINITE EMPTY"
-  sorry
-
-lemma FINITE_INDUCT: "[| P EMPTY &
-   (ALL s. FINITE s & P s --> (ALL e. ~ IN e s --> P (INSERT e s)));
-   FINITE s |]
-==> P s"
-  sorry
-
-lemma FINITE_INSERT: "FINITE (INSERT x s) = FINITE s"
-  sorry
-
-lemma FINITE_DELETE: "FINITE (DELETE s x) = FINITE s"
-  sorry
-
-lemma FINITE_UNION: "FINITE (pred_set.UNION s t) = (FINITE s & FINITE t)"
-  sorry
-
-lemma INTER_FINITE: "FINITE s ==> FINITE (pred_set.INTER s t)"
-  sorry
-
-lemma SUBSET_FINITE: "[| FINITE s; SUBSET t s |] ==> FINITE t"
-  sorry
-
-lemma PSUBSET_FINITE: "[| FINITE x; PSUBSET xa x |] ==> FINITE xa"
-  sorry
-
-lemma FINITE_DIFF: "FINITE s ==> FINITE (DIFF s t)"
-  sorry
-
-lemma FINITE_SING: "FINITE (INSERT x EMPTY)"
-  sorry
-
-lemma SING_FINITE: "SING x ==> FINITE x"
-  sorry
-
-lemma IMAGE_FINITE: "FINITE s ==> FINITE (IMAGE f s)"
-  sorry
-
-consts
-  CARD :: "('a => bool) => nat" 
-
-specification (CARD) CARD_DEF: "(op &::bool => bool => bool)
- ((op =::nat => nat => bool)
-   ((CARD::('a::type => bool) => nat) (EMPTY::'a::type => bool)) (0::nat))
- ((All::(('a::type => bool) => bool) => bool)
-   (%s::'a::type => bool.
-       (op -->::bool => bool => bool)
-        ((FINITE::('a::type => bool) => bool) s)
-        ((All::('a::type => bool) => bool)
-          (%x::'a::type.
-              (op =::nat => nat => bool)
-               ((CARD::('a::type => bool) => nat)
-                 ((INSERT::'a::type
-                           => ('a::type => bool) => 'a::type => bool)
-                   x s))
-               ((If::bool => nat => nat => nat)
-                 ((IN::'a::type => ('a::type => bool) => bool) x s)
-                 ((CARD::('a::type => bool) => nat) s)
-                 ((Suc::nat => nat)
-                   ((CARD::('a::type => bool) => nat) s)))))))"
-  sorry
-
-lemma CARD_EMPTY: "CARD EMPTY = 0"
-  sorry
-
-lemma CARD_INSERT: "FINITE s ==> CARD (INSERT x s) = (if IN x s then CARD s else Suc (CARD s))"
-  sorry
-
-lemma CARD_EQ_0: "FINITE s ==> (CARD s = 0) = (s = EMPTY)"
-  sorry
-
-lemma CARD_DELETE: "FINITE s ==> CARD (DELETE s x) = (if IN x s then CARD s - 1 else CARD s)"
-  sorry
-
-lemma CARD_INTER_LESS_EQ: "FINITE s ==> CARD (pred_set.INTER s t) <= CARD s"
-  sorry
-
-lemma CARD_UNION: "[| FINITE s; FINITE t |]
-==> CARD (pred_set.UNION s t) + CARD (pred_set.INTER s t) = CARD s + CARD t"
-  sorry
-
-lemma CARD_SUBSET: "[| FINITE s; SUBSET t s |] ==> CARD t <= CARD s"
-  sorry
-
-lemma CARD_PSUBSET: "[| FINITE s; PSUBSET t s |] ==> CARD t < CARD s"
-  sorry
-
-lemma CARD_SING: "CARD (INSERT x EMPTY) = 1"
-  sorry
-
-lemma SING_IFF_CARD1: "SING x = (CARD x = 1 & FINITE x)"
-  sorry
-
-lemma CARD_DIFF: "[| FINITE t; FINITE s |]
-==> CARD (DIFF s t) = CARD s - CARD (pred_set.INTER s t)"
-  sorry
-
-lemma LESS_CARD_DIFF: "[| FINITE t; FINITE s; CARD t < CARD s |] ==> 0 < CARD (DIFF s t)"
-  sorry
-
-lemma FINITE_COMPLETE_INDUCTION: "[| !!x. [| !!y. PSUBSET y x ==> P y; FINITE x |] ==> P x; FINITE x |]
-==> P x"
-  sorry
-
-definition
-  INFINITE :: "('a => bool) => bool"  where
-  "INFINITE == %s. ~ FINITE s"
-
-lemma INFINITE_DEF: "INFINITE s = (~ FINITE s)"
-  sorry
-
-lemma NOT_IN_FINITE: "(op =::bool => bool => bool)
- ((INFINITE::('a::type => bool) => bool) (pred_set.UNIV::'a::type => bool))
- ((All::(('a::type => bool) => bool) => bool)
-   (%s::'a::type => bool.
-       (op -->::bool => bool => bool)
-        ((FINITE::('a::type => bool) => bool) s)
-        ((Ex::('a::type => bool) => bool)
-          (%x::'a::type.
-              (Not::bool => bool)
-               ((IN::'a::type => ('a::type => bool) => bool) x s)))))"
-  sorry
-
-lemma INFINITE_INHAB: "INFINITE x ==> EX xa. IN xa x"
-  sorry
-
-lemma IMAGE_11_INFINITE: "[| !!x y. f x = f y ==> x = y; INFINITE s |] ==> INFINITE (IMAGE f s)"
-  sorry
-
-lemma INFINITE_SUBSET: "[| INFINITE x; SUBSET x xa |] ==> INFINITE xa"
-  sorry
-
-lemma IN_INFINITE_NOT_FINITE: "INFINITE x & FINITE xa ==> EX xb. IN xb x & ~ IN xb xa"
-  sorry
-
-lemma INFINITE_UNIV: "(op =::bool => bool => bool)
- ((INFINITE::('a::type => bool) => bool) (pred_set.UNIV::'a::type => bool))
- ((Ex::(('a::type => 'a::type) => bool) => bool)
-   (%f::'a::type => 'a::type.
-       (op &::bool => bool => bool)
-        ((All::('a::type => bool) => bool)
-          (%x::'a::type.
-              (All::('a::type => bool) => bool)
-               (%y::'a::type.
-                   (op -->::bool => bool => bool)
-                    ((op =::'a::type => 'a::type => bool) (f x) (f y))
-                    ((op =::'a::type => 'a::type => bool) x y))))
-        ((Ex::('a::type => bool) => bool)
-          (%y::'a::type.
-              (All::('a::type => bool) => bool)
-               (%x::'a::type.
-                   (op ~=::'a::type => 'a::type => bool) (f x) y)))))"
-  sorry
-
-lemma FINITE_PSUBSET_INFINITE: "INFINITE x = (ALL xa. FINITE xa --> SUBSET xa x --> PSUBSET xa x)"
-  sorry
-
-lemma FINITE_PSUBSET_UNIV: "(op =::bool => bool => bool)
- ((INFINITE::('a::type => bool) => bool) (pred_set.UNIV::'a::type => bool))
- ((All::(('a::type => bool) => bool) => bool)
-   (%s::'a::type => bool.
-       (op -->::bool => bool => bool)
-        ((FINITE::('a::type => bool) => bool) s)
-        ((PSUBSET::('a::type => bool) => ('a::type => bool) => bool) s
-          (pred_set.UNIV::'a::type => bool))))"
-  sorry
-
-lemma INFINITE_DIFF_FINITE: "INFINITE s & FINITE t ==> DIFF s t ~= EMPTY"
-  sorry
-
-lemma FINITE_ISO_NUM: "FINITE s
-==> EX f. (ALL n m. n < CARD s & m < CARD s --> f n = f m --> n = m) &
-          s = GSPEC (%n. (f n, n < CARD s))"
-  sorry
-
-lemma FINITE_WEAK_ENUMERATE: "FINITE (x::'a => bool) =
-(EX (f::nat => 'a) b::nat. ALL e::'a. IN e x = (EX n<b. e = f n))"
-  sorry
-
-definition
-  BIGUNION :: "(('a => bool) => bool) => 'a => bool"  where
-  "BIGUNION == %P. GSPEC (%x. (x, EX p. IN p P & IN x p))"
-
-lemma BIGUNION: "BIGUNION P = GSPEC (%x. (x, EX p. IN p P & IN x p))"
-  sorry
-
-lemma IN_BIGUNION: "IN x (BIGUNION xa) = (EX s. IN x s & IN s xa)"
-  sorry
-
-lemma BIGUNION_EMPTY: "BIGUNION EMPTY = EMPTY"
-  sorry
-
-lemma BIGUNION_SING: "BIGUNION (INSERT x EMPTY) = x"
-  sorry
-
-lemma BIGUNION_UNION: "BIGUNION (pred_set.UNION x xa) = pred_set.UNION (BIGUNION x) (BIGUNION xa)"
-  sorry
-
-lemma DISJOINT_BIGUNION: "(ALL (s::('a => bool) => bool) t::'a => bool.
-    DISJOINT (BIGUNION s) t =
-    (ALL s'::'a => bool. IN s' s --> DISJOINT s' t)) &
-(ALL (x::('a => bool) => bool) xa::'a => bool.
-    DISJOINT xa (BIGUNION x) =
-    (ALL xb::'a => bool. IN xb x --> DISJOINT xa xb))"
-  sorry
-
-lemma BIGUNION_INSERT: "BIGUNION (INSERT x xa) = pred_set.UNION x (BIGUNION xa)"
-  sorry
-
-lemma BIGUNION_SUBSET: "SUBSET (BIGUNION P) X = (ALL Y. IN Y P --> SUBSET Y X)"
-  sorry
-
-lemma FINITE_BIGUNION: "FINITE x & (ALL s. IN s x --> FINITE s) ==> FINITE (BIGUNION x)"
-  sorry
-
-definition
-  BIGINTER :: "(('a => bool) => bool) => 'a => bool"  where
-  "BIGINTER == %B. GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
-
-lemma BIGINTER: "BIGINTER B = GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
-  sorry
-
-lemma IN_BIGINTER: "IN x (BIGINTER B) = (ALL P. IN P B --> IN x P)"
-  sorry
-
-lemma BIGINTER_INSERT: "BIGINTER (INSERT P B) = pred_set.INTER P (BIGINTER B)"
-  sorry
-
-lemma BIGINTER_EMPTY: "BIGINTER EMPTY = pred_set.UNIV"
-  sorry
-
-lemma BIGINTER_INTER: "BIGINTER (INSERT x (INSERT xa EMPTY)) = pred_set.INTER x xa"
-  sorry
-
-lemma BIGINTER_SING: "BIGINTER (INSERT x EMPTY) = x"
-  sorry
-
-lemma SUBSET_BIGINTER: "SUBSET X (BIGINTER P) = (ALL x. IN x P --> SUBSET X x)"
-  sorry
-
-lemma DISJOINT_BIGINTER: "IN xa xb & DISJOINT xa x
-==> DISJOINT x (BIGINTER xb) & DISJOINT (BIGINTER xb) x"
-  sorry
-
-definition
-  CROSS :: "('a => bool) => ('b => bool) => 'a * 'b => bool"  where
-  "CROSS == %P Q. GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
-
-lemma CROSS_DEF: "CROSS P Q = GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
-  sorry
-
-lemma IN_CROSS: "IN xb (CROSS x xa) = (IN (fst xb) x & IN (snd xb) xa)"
-  sorry
-
-lemma CROSS_EMPTY: "CROSS x EMPTY = EMPTY & CROSS EMPTY x = EMPTY"
-  sorry
-
-lemma CROSS_INSERT_LEFT: "CROSS (INSERT xb x) xa =
-pred_set.UNION (CROSS (INSERT xb EMPTY) xa) (CROSS x xa)"
-  sorry
-
-lemma CROSS_INSERT_RIGHT: "CROSS x (INSERT xb xa) =
-pred_set.UNION (CROSS x (INSERT xb EMPTY)) (CROSS x xa)"
-  sorry
-
-lemma FINITE_CROSS: "FINITE x & FINITE xa ==> FINITE (CROSS x xa)"
-  sorry
-
-lemma CROSS_SINGS: "CROSS (INSERT x EMPTY) (INSERT xa EMPTY) = INSERT (x, xa) EMPTY"
-  sorry
-
-lemma CARD_SING_CROSS: "FINITE (s::'b => bool) ==> CARD (CROSS (INSERT (x::'a) EMPTY) s) = CARD s"
-  sorry
-
-lemma CARD_CROSS: "FINITE x & FINITE xa ==> CARD (CROSS x xa) = CARD x * CARD xa"
-  sorry
-
-lemma CROSS_SUBSET: "SUBSET (CROSS xb xc) (CROSS x xa) =
-(xb = EMPTY | xc = EMPTY | SUBSET xb x & SUBSET xc xa)"
-  sorry
-
-lemma FINITE_CROSS_EQ: "FINITE (CROSS P Q) = (P = EMPTY | Q = EMPTY | FINITE P & FINITE Q)"
-  sorry
-
-definition
-  COMPL :: "('a => bool) => 'a => bool"  where
-  "COMPL == DIFF pred_set.UNIV"
-
-lemma COMPL_DEF: "COMPL P = DIFF pred_set.UNIV P"
-  sorry
-
-lemma IN_COMPL: "IN x (COMPL xa) = (~ IN x xa)"
-  sorry
-
-lemma COMPL_COMPL: "COMPL (COMPL x) = x"
-  sorry
-
-lemma COMPL_CLAUSES: "pred_set.INTER (COMPL x) x = EMPTY &
-pred_set.UNION (COMPL x) x = pred_set.UNIV"
-  sorry
-
-lemma COMPL_SPLITS: "pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER (COMPL x) xa) = xa"
-  sorry
-
-lemma INTER_UNION_COMPL: "pred_set.INTER x xa = COMPL (pred_set.UNION (COMPL x) (COMPL xa))"
-  sorry
-
-lemma COMPL_EMPTY: "COMPL EMPTY = pred_set.UNIV"
-  sorry
-
-consts
-  count :: "nat => nat => bool" 
-
-defs
-  count_primdef: "count == %n. GSPEC (%m. (m, m < n))"
-
-lemma count_def: "count n = GSPEC (%m. (m, m < n))"
-  sorry
-
-lemma IN_COUNT: "IN m (count n) = (m < n)"
-  sorry
-
-lemma COUNT_ZERO: "count 0 = EMPTY"
-  sorry
-
-lemma COUNT_SUC: "count (Suc n) = INSERT n (count n)"
-  sorry
-
-lemma FINITE_COUNT: "FINITE (count n)"
-  sorry
-
-lemma CARD_COUNT: "CARD (count n) = n"
-  sorry
-
-definition
-  ITSET_tupled :: "('a => 'b => 'b) => ('a => bool) * 'b => 'b"  where
-  "ITSET_tupled ==
-%f. WFREC
-     (SOME R.
-         WF R &
-         (ALL b s.
-             FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
-     (%ITSET_tupled (v, v1).
-         if FINITE v
-         then if v = EMPTY then v1
-              else ITSET_tupled (REST v, f (CHOICE v) v1)
-         else ARB)"
-
-lemma ITSET_tupled_primitive_def: "ITSET_tupled f =
-WFREC
- (SOME R.
-     WF R &
-     (ALL b s. FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
- (%ITSET_tupled (v, v1).
-     if FINITE v
-     then if v = EMPTY then v1 else ITSET_tupled (REST v, f (CHOICE v) v1)
-     else ARB)"
-  sorry
-
-definition
-  ITSET :: "('a => 'b => 'b) => ('a => bool) => 'b => 'b"  where
-  "ITSET == %f x x1. ITSET_tupled f (x, x1)"
-
-lemma ITSET_curried_def: "ITSET (f::'a => 'b => 'b) (x::'a => bool) (x1::'b) = ITSET_tupled f (x, x1)"
-  sorry
-
-lemma ITSET_IND: "(!!(s::'a => bool) b::'b.
-    (FINITE s & s ~= EMPTY
-     ==> (P::('a => bool) => 'b => bool) (REST s)
-          ((f::'a => 'b => 'b) (CHOICE s) b))
-    ==> P s b)
-==> P (v::'a => bool) (x::'b)"
-  sorry
-
-lemma ITSET_THM: "FINITE s
-==> ITSET f s b =
-    (if s = EMPTY then b else ITSET f (REST s) (f (CHOICE s) b))"
-  sorry
-
-lemma ITSET_EMPTY: "ITSET (x::'a => 'b => 'b) EMPTY (xa::'b) = xa"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" operator
-
-definition
-  ASSOC :: "('a => 'a => 'a) => bool"  where
-  "ASSOC == %f. ALL x y z. f x (f y z) = f (f x y) z"
-
-lemma ASSOC_DEF: "ASSOC f = (ALL x y z. f x (f y z) = f (f x y) z)"
-  sorry
-
-definition
-  COMM :: "('a => 'a => 'b) => bool"  where
-  "COMM == %f. ALL x y. f x y = f y x"
-
-lemma COMM_DEF: "COMM f = (ALL x y. f x y = f y x)"
-  sorry
-
-definition
-  FCOMM :: "('a => 'b => 'a) => ('c => 'a => 'a) => bool"  where
-  "FCOMM == %f g. ALL x y z. g x (f y z) = f (g x y) z"
-
-lemma FCOMM_DEF: "FCOMM f g = (ALL x y z. g x (f y z) = f (g x y) z)"
-  sorry
-
-definition
-  RIGHT_ID :: "('a => 'b => 'a) => 'b => bool"  where
-  "RIGHT_ID == %f e. ALL x. f x e = x"
-
-lemma RIGHT_ID_DEF: "RIGHT_ID f e = (ALL x. f x e = x)"
-  sorry
-
-definition
-  LEFT_ID :: "('a => 'b => 'b) => 'a => bool"  where
-  "LEFT_ID == %f e. ALL x. f e x = x"
-
-lemma LEFT_ID_DEF: "LEFT_ID f e = (ALL x. f e x = x)"
-  sorry
-
-definition
-  MONOID :: "('a => 'a => 'a) => 'a => bool"  where
-  "MONOID == %f e. ASSOC f & RIGHT_ID f e & LEFT_ID f e"
-
-lemma MONOID_DEF: "MONOID f e = (ASSOC f & RIGHT_ID f e & LEFT_ID f e)"
-  sorry
-
-lemma ASSOC_CONJ: "ASSOC op &"
-  sorry
-
-lemma ASSOC_DISJ: "ASSOC op |"
-  sorry
-
-lemma FCOMM_ASSOC: "FCOMM x x = ASSOC x"
-  sorry
-
-lemma MONOID_CONJ_T: "MONOID op & True"
-  sorry
-
-lemma MONOID_DISJ_F: "MONOID op | False"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" rich_list
-
-consts
-  SNOC :: "'a => 'a list => 'a list" 
-
-specification (SNOC) SNOC: "(ALL x::'a. SNOC x [] = [x]) &
-(ALL (x::'a) (x'::'a) l::'a list. SNOC x (x' # l) = x' # SNOC x l)"
-  sorry
-
-consts
-  SCANL :: "('b => 'a => 'b) => 'b => 'a list => 'b list" 
-
-specification (SCANL) SCANL: "(ALL (f::'b => 'a => 'b) e::'b. SCANL f e [] = [e]) &
-(ALL (f::'b => 'a => 'b) (e::'b) (x::'a) l::'a list.
-    SCANL f e (x # l) = e # SCANL f (f e x) l)"
-  sorry
-
-consts
-  SCANR :: "('a => 'b => 'b) => 'b => 'a list => 'b list" 
-
-specification (SCANR) SCANR: "(ALL (f::'a => 'b => 'b) e::'b. SCANR f e [] = [e]) &
-(ALL (f::'a => 'b => 'b) (e::'b) (x::'a) l::'a list.
-    SCANR f e (x # l) = f x (hd (SCANR f e l)) # SCANR f e l)"
-  sorry
-
-lemma IS_EL_DEF: "List.member l x = list_ex (op = x) l"
-  sorry
-
-definition
-  AND_EL :: "bool list => bool"  where
-  "AND_EL == list_all I"
-
-lemma AND_EL_DEF: "AND_EL = list_all I"
-  sorry
-
-definition
-  OR_EL :: "bool list => bool"  where
-  "OR_EL == list_ex I"
-
-lemma OR_EL_DEF: "OR_EL = list_ex I"
-  sorry
-
-consts
-  FIRSTN :: "nat => 'a list => 'a list" 
-
-specification (FIRSTN) FIRSTN: "(ALL l::'a list. FIRSTN (0::nat) l = []) &
-(ALL (n::nat) (x::'a) l::'a list. FIRSTN (Suc n) (x # l) = x # FIRSTN n l)"
-  sorry
-
-consts
-  BUTFIRSTN :: "nat => 'a list => 'a list" 
-
-specification (BUTFIRSTN) BUTFIRSTN: "(ALL l::'a list. BUTFIRSTN (0::nat) l = l) &
-(ALL (n::nat) (x::'a) l::'a list. BUTFIRSTN (Suc n) (x # l) = BUTFIRSTN n l)"
-  sorry
-
-consts
-  SEG :: "nat => nat => 'a list => 'a list" 
-
-specification (SEG) SEG: "(ALL (k::nat) l::'a list. SEG (0::nat) k l = []) &
-(ALL (m::nat) (x::'a) l::'a list.
-    SEG (Suc m) (0::nat) (x # l) = x # SEG m (0::nat) l) &
-(ALL (m::nat) (k::nat) (x::'a) l::'a list.
-    SEG (Suc m) (Suc k) (x # l) = SEG (Suc m) k l)"
-  sorry
-
-lemma LAST: "last (SNOC x l) = x"
-  sorry
-
-lemma BUTLAST: "butlast (SNOC x l) = l"
-  sorry
-
-consts
-  LASTN :: "nat => 'a list => 'a list" 
-
-specification (LASTN) LASTN: "(ALL l::'a list. LASTN (0::nat) l = []) &
-(ALL (n::nat) (x::'a) l::'a list.
-    LASTN (Suc n) (SNOC x l) = SNOC x (LASTN n l))"
-  sorry
-
-consts
-  BUTLASTN :: "nat => 'a list => 'a list" 
-
-specification (BUTLASTN) BUTLASTN: "(ALL l::'a list. BUTLASTN (0::nat) l = l) &
-(ALL (n::nat) (x::'a) l::'a list.
-    BUTLASTN (Suc n) (SNOC x l) = BUTLASTN n l)"
-  sorry
-
-lemma EL: "(ALL x::'a list. EL (0::nat) x = hd x) &
-(ALL (x::nat) xa::'a list. EL (Suc x) xa = EL x (tl xa))"
-  sorry
-
-consts
-  ELL :: "nat => 'a list => 'a" 
-
-specification (ELL) ELL: "(ALL l::'a list. ELL (0::nat) l = last l) &
-(ALL (n::nat) l::'a list. ELL (Suc n) l = ELL n (butlast l))"
-  sorry
-
-consts
-  IS_PREFIX :: "'a list => 'a list => bool" 
-
-specification (IS_PREFIX) IS_PREFIX: "(ALL l::'a list. IS_PREFIX l [] = True) &
-(ALL (x::'a) l::'a list. IS_PREFIX [] (x # l) = False) &
-(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
-    IS_PREFIX (x1 # l1) (x2 # l2) = (x1 = x2 & IS_PREFIX l1 l2))"
-  sorry
-
-lemma SNOC_APPEND: "SNOC x l = l @ [x]"
-  sorry
-
-lemma REVERSE: "rev [] = [] & (ALL (x::'a) xa::'a list. rev (x # xa) = SNOC x (rev xa))"
-  sorry
-
-lemma REVERSE_SNOC: "rev (SNOC x l) = x # rev l"
-  sorry
-
-lemma SNOC_Axiom: "EX x. x [] = e & (ALL xa l. x (SNOC xa l) = f xa l (x l))"
-  sorry
-
-consts
-  IS_SUFFIX :: "'a list => 'a list => bool" 
-
-specification (IS_SUFFIX) IS_SUFFIX: "(ALL l::'a list. IS_SUFFIX l [] = True) &
-(ALL (x::'a) l::'a list. IS_SUFFIX [] (SNOC x l) = False) &
-(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
-    IS_SUFFIX (SNOC x1 l1) (SNOC x2 l2) = (x1 = x2 & IS_SUFFIX l1 l2))"
-  sorry
-
-consts
-  IS_SUBLIST :: "'a list => 'a list => bool" 
-
-specification (IS_SUBLIST) IS_SUBLIST: "(ALL l::'a list. IS_SUBLIST l [] = True) &
-(ALL (x::'a) l::'a list. IS_SUBLIST [] (x # l) = False) &
-(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
-    IS_SUBLIST (x1 # l1) (x2 # l2) =
-    (x1 = x2 & IS_PREFIX l1 l2 | IS_SUBLIST l1 (x2 # l2)))"
-  sorry
-
-consts
-  SPLITP :: "('a => bool) => 'a list => 'a list * 'a list" 
-
-specification (SPLITP) SPLITP: "(ALL P::'a => bool. SPLITP P [] = ([], [])) &
-(ALL (P::'a => bool) (x::'a) l::'a list.
-    SPLITP P (x # l) =
-    (if P x then ([], x # l) else (x # fst (SPLITP P l), snd (SPLITP P l))))"
-  sorry
-
-definition
-  PREFIX :: "('a => bool) => 'a list => 'a list"  where
-  "PREFIX == %P l. fst (SPLITP (Not o P) l)"
-
-lemma PREFIX_DEF: "PREFIX P l = fst (SPLITP (Not o P) l)"
-  sorry
-
-definition
-  SUFFIX :: "('a => bool) => 'a list => 'a list"  where
-  "SUFFIX == %P. foldl (%l' x. if P x then SNOC x l' else []) []"
-
-lemma SUFFIX_DEF: "SUFFIX P l = foldl (%l' x. if P x then SNOC x l' else []) [] l"
-  sorry
-
-definition
-  UNZIP_FST :: "('a * 'b) list => 'a list"  where
-  "UNZIP_FST == %l. fst (unzip l)"
-
-lemma UNZIP_FST_DEF: "UNZIP_FST l = fst (unzip l)"
-  sorry
-
-definition
-  UNZIP_SND :: "('a * 'b) list => 'b list"  where
-  "UNZIP_SND == %l. snd (unzip l)"
-
-lemma UNZIP_SND_DEF: "UNZIP_SND (l::('a * 'b) list) = snd (unzip l)"
-  sorry
-
-consts
-  GENLIST :: "(nat => 'a) => nat => 'a list" 
-
-specification (GENLIST) GENLIST: "(ALL f::nat => 'a. GENLIST f (0::nat) = []) &
-(ALL (f::nat => 'a) n::nat. GENLIST f (Suc n) = SNOC (f n) (GENLIST f n))"
-  sorry
-
-consts
-  REPLICATE :: "nat => 'a => 'a list" 
-
-specification (REPLICATE) REPLICATE: "(ALL x::'a. REPLICATE (0::nat) x = []) &
-(ALL (n::nat) x::'a. REPLICATE (Suc n) x = x # REPLICATE n x)"
-  sorry
-
-lemma LENGTH_MAP2: "length l1 = length l2
-==> length (map2 f l1 l2) = length l1 & length (map2 f l1 l2) = length l2"
-  sorry
-
-lemma LENGTH_EQ: "x = y ==> length x = length y"
-  sorry
-
-lemma LENGTH_NOT_NULL: "(0 < length l) = (~ List.null l)"
-  sorry
-
-lemma SNOC_INDUCT: "P [] & (ALL l. P l --> (ALL x. P (SNOC x l))) ==> P x"
-  sorry
-
-lemma SNOC_CASES: "x' = [] | (EX x l. x' = SNOC x l)"
-  sorry
-
-lemma LENGTH_SNOC: "length (SNOC x l) = Suc (length l)"
-  sorry
-
-lemma NOT_NIL_SNOC: "[] ~= SNOC x xa"
-  sorry
-
-lemma NOT_SNOC_NIL: "SNOC x xa ~= []"
-  sorry
-
-lemma SNOC_11: "(SNOC x l = SNOC x' l') = (x = x' & l = l')"
-  sorry
-
-lemma SNOC_EQ_LENGTH_EQ: "SNOC x1 l1 = SNOC x2 l2 ==> length l1 = length l2"
-  sorry
-
-lemma SNOC_REVERSE_CONS: "SNOC x xa = rev (x # rev xa)"
-  sorry
-
-lemma MAP_SNOC: "map (x::'a => 'b) (SNOC (xa::'a) (xb::'a list)) = SNOC (x xa) (map x xb)"
-  sorry
-
-lemma FOLDR_SNOC: "foldr (f::'a => 'b => 'b) (SNOC (x::'a) (l::'a list)) (e::'b) =
-foldr f l (f x e)"
-  sorry
-
-lemma FOLDL_SNOC: "foldl (f::'b => 'a => 'b) (e::'b) (SNOC (x::'a) (l::'a list)) =
-f (foldl f e l) x"
-  sorry
-
-lemma FOLDR_FOLDL: "MONOID f e ==> foldr f l e = foldl f e l"
-  sorry
-
-lemma LENGTH_FOLDR: "length l = foldr (%x. Suc) l 0"
-  sorry
-
-lemma LENGTH_FOLDL: "length l = foldl (%l' x. Suc l') 0 l"
-  sorry
-
-lemma MAP_FOLDR: "map (f::'a => 'b) (l::'a list) = foldr (%x::'a. op # (f x)) l []"
-  sorry
-
-lemma MAP_FOLDL: "map (f::'a => 'b) (l::'a list) =
-foldl (%(l'::'b list) x::'a. SNOC (f x) l') [] l"
-  sorry
-
-lemma FILTER_FOLDR: "filter P l = foldr (%x l'. if P x then x # l' else l') l []"
-  sorry
-
-lemma FILTER_SNOC: "filter P (SNOC x l) = (if P x then SNOC x (filter P l) else filter P l)"
-  sorry
-
-lemma FILTER_FOLDL: "filter P l = foldl (%l' x. if P x then SNOC x l' else l') [] l"
-  sorry
-
-lemma FILTER_COMM: "filter f1 (filter f2 l) = filter f2 (filter f1 l)"
-  sorry
-
-lemma FILTER_IDEM: "filter f (filter f l) = filter f l"
-  sorry
-
-lemma LENGTH_SEG: "n + k <= length l ==> length (SEG n k l) = n"
-  sorry
-
-lemma APPEND_NIL: "(ALL l::'a list. l @ [] = l) & (ALL x::'a list. [] @ x = x)"
-  sorry
-
-lemma APPEND_SNOC: "l1 @ SNOC x l2 = SNOC x (l1 @ l2)"
-  sorry
-
-lemma APPEND_FOLDR: "l1 @ l2 = foldr op # l1 l2"
-  sorry
-
-lemma APPEND_FOLDL: "l1 @ l2 = foldl (%l' x. SNOC x l') l1 l2"
-  sorry
-
-lemma CONS_APPEND: "x # l = [x] @ l"
-  sorry
-
-lemma ASSOC_APPEND: "ASSOC op @"
-  sorry
-
-lemma MONOID_APPEND_NIL: "MONOID op @ []"
-  sorry
-
-lemma APPEND_LENGTH_EQ: "[| length l1 = length l1'; length l2 = length l2' |]
-==> (l1 @ l2 = l1' @ l2') = (l1 = l1' & l2 = l2')"
-  sorry
-
-lemma FLAT_SNOC: "concat (SNOC x l) = concat l @ x"
-  sorry
-
-lemma FLAT_FOLDR: "concat l = foldr op @ l []"
-  sorry
-
-lemma LENGTH_FLAT: "length (concat l) = HOL4Compat.sum (map length l)"
-  sorry
-
-lemma REVERSE_FOLDR: "rev l = foldr SNOC l []"
-  sorry
-
-lemma ALL_EL_SNOC: "list_all P (SNOC x l) = (list_all P l & P x)"
-  sorry
-
-lemma ALL_EL_MAP: "list_all (P::'b => bool) (map (f::'a => 'b) (l::'a list)) =
-list_all (P o f) l"
-  sorry
-
-lemma SOME_EL_SNOC: "list_ex P (SNOC x l) = (P x | list_ex P l)"
-  sorry
-
-lemma IS_EL_SNOC: "List.member (SNOC x l) y = (y = x | List.member l y)"
-  sorry
-
-lemma SUM_SNOC: "HOL4Compat.sum (SNOC x l) = HOL4Compat.sum l + x"
-  sorry
-
-lemma SUM_FOLDL: "HOL4Compat.sum l = foldl op + 0 l"
-  sorry
-
-lemma IS_PREFIX_APPEND: "IS_PREFIX l1 l2 = (EX l. l1 = l2 @ l)"
-  sorry
-
-lemma IS_SUFFIX_APPEND: "IS_SUFFIX l1 l2 = (EX l. l1 = l @ l2)"
-  sorry
-
-lemma IS_SUBLIST_APPEND: "IS_SUBLIST l1 l2 = (EX l l'. l1 = l @ l2 @ l')"
-  sorry
-
-lemma IS_PREFIX_IS_SUBLIST: "IS_PREFIX l1 l2 ==> IS_SUBLIST l1 l2"
-  sorry
-
-lemma IS_SUFFIX_IS_SUBLIST: "IS_SUFFIX l1 l2 ==> IS_SUBLIST l1 l2"
-  sorry
-
-lemma IS_PREFIX_REVERSE: "IS_PREFIX (rev l1) (rev l2) = IS_SUFFIX l1 l2"
-  sorry
-
-lemma IS_SUFFIX_REVERSE: "IS_SUFFIX (rev l1) (rev l2) = IS_PREFIX l1 l2"
-  sorry
-
-lemma IS_SUBLIST_REVERSE: "IS_SUBLIST (rev l1) (rev l2) = IS_SUBLIST l1 l2"
-  sorry
-
-lemma PREFIX_FOLDR: "PREFIX P x = foldr (%x l'. if P x then x # l' else []) x []"
-  sorry
-
-lemma PREFIX: "(ALL x::'a => bool. PREFIX x [] = []) &
-(ALL (x::'a => bool) (xa::'a) xb::'a list.
-    PREFIX x (xa # xb) = (if x xa then xa # PREFIX x xb else []))"
-  sorry
-
-lemma IS_PREFIX_PREFIX: "IS_PREFIX l (PREFIX P l)"
-  sorry
-
-lemma LENGTH_SCANL: "length (SCANL (f::'b => 'a => 'b) (e::'b) (l::'a list)) = Suc (length l)"
-  sorry
-
-lemma LENGTH_SCANR: "length (SCANR (f::'a => 'b => 'b) (e::'b) (l::'a list)) = Suc (length l)"
-  sorry
-
-lemma COMM_MONOID_FOLDL: "[| COMM x; MONOID x xa |] ==> foldl x e l = x e (foldl x xa l)"
-  sorry
-
-lemma COMM_MONOID_FOLDR: "[| COMM x; MONOID x xa |] ==> foldr x l e = x e (foldr x l xa)"
-  sorry
-
-lemma FCOMM_FOLDR_APPEND: "[| FCOMM x xa; LEFT_ID x xb |]
-==> foldr xa (l1 @ l2) xb = x (foldr xa l1 xb) (foldr xa l2 xb)"
-  sorry
-
-lemma FCOMM_FOLDL_APPEND: "[| FCOMM x xa; RIGHT_ID xa xb |]
-==> foldl x xb (l1 @ l2) = xa (foldl x xb l1) (foldl x xb l2)"
-  sorry
-
-lemma FOLDL_SINGLE: "foldl x xa [xb] = x xa xb"
-  sorry
-
-lemma FOLDR_SINGLE: "foldr (x::'a => 'b => 'b) [xb::'a] (xa::'b) = x xb xa"
-  sorry
-
-lemma FOLDR_CONS_NIL: "foldr op # l [] = l"
-  sorry
-
-lemma FOLDL_SNOC_NIL: "foldl (%xs x. SNOC x xs) [] l = l"
-  sorry
-
-lemma FOLDR_REVERSE: "foldr (x::'a => 'b => 'b) (rev (xb::'a list)) (xa::'b) =
-foldl (%(xa::'b) y::'a. x y xa) xa xb"
-  sorry
-
-lemma FOLDL_REVERSE: "foldl x xa (rev xb) = foldr (%xa y. x y xa) xb xa"
-  sorry
-
-lemma FOLDR_MAP: "foldr (f::'a => 'a => 'a) (map (g::'b => 'a) (l::'b list)) (e::'a) =
-foldr (%x::'b. f (g x)) l e"
-  sorry
-
-lemma ALL_EL_FOLDR: "list_all P l = foldr (%x. op & (P x)) l True"
-  sorry
-
-lemma ALL_EL_FOLDL: "list_all P l = foldl (%l' x. l' & P x) True l"
-  sorry
-
-lemma SOME_EL_FOLDR: "list_ex P l = foldr (%x. op | (P x)) l False"
-  sorry
-
-lemma SOME_EL_FOLDL: "list_ex P l = foldl (%l' x. l' | P x) False l"
-  sorry
-
-lemma ALL_EL_FOLDR_MAP: "list_all x xa = foldr op & (map x xa) True"
-  sorry
-
-lemma ALL_EL_FOLDL_MAP: "list_all x xa = foldl op & True (map x xa)"
-  sorry
-
-lemma SOME_EL_FOLDR_MAP: "list_ex x xa = foldr op | (map x xa) False"
-  sorry
-
-lemma SOME_EL_FOLDL_MAP: "list_ex x xa = foldl op | False (map x xa)"
-  sorry
-
-lemma FOLDR_FILTER: "foldr (f::'a => 'a => 'a) (filter (P::'a => bool) (l::'a list)) (e::'a) =
-foldr (%(x::'a) y::'a. if P x then f x y else y) l e"
-  sorry
-
-lemma FOLDL_FILTER: "foldl (f::'a => 'a => 'a) (e::'a) (filter (P::'a => bool) (l::'a list)) =
-foldl (%(x::'a) y::'a. if P y then f x y else x) e l"
-  sorry
-
-lemma ASSOC_FOLDR_FLAT: "[| ASSOC f; LEFT_ID f e |]
-==> foldr f (concat l) e = foldr f (map (FOLDR f e) l) e"
-  sorry
-
-lemma ASSOC_FOLDL_FLAT: "[| ASSOC f; RIGHT_ID f e |]
-==> foldl f e (concat l) = foldl f e (map (foldl f e) l)"
-  sorry
-
-lemma SOME_EL_MAP: "list_ex (P::'b => bool) (map (f::'a => 'b) (l::'a list)) = list_ex (P o f) l"
-  sorry
-
-lemma SOME_EL_DISJ: "list_ex (%x. P x | Q x) l = (list_ex P l | list_ex Q l)"
-  sorry
-
-lemma IS_EL_FOLDR: "List.member xa x = foldr (%xa. op | (x = xa)) xa False"
-  sorry
-
-lemma IS_EL_FOLDL: "List.member xa x = foldl (%l' xa. l' | x = xa) False xa"
-  sorry
-
-lemma NULL_FOLDR: "List.null l = foldr (%x l'. False) l True"
-  sorry
-
-lemma NULL_FOLDL: "List.null l = foldl (%x l'. False) True l"
-  sorry
-
-lemma SEG_LENGTH_ID: "SEG (length l) 0 l = l"
-  sorry
-
-lemma SEG_SUC_CONS: "SEG m (Suc n) (x # l) = SEG m n l"
-  sorry
-
-lemma SEG_0_SNOC: "m <= length l ==> SEG m 0 (SNOC x l) = SEG m 0 l"
-  sorry
-
-lemma BUTLASTN_SEG: "n <= length l ==> BUTLASTN n l = SEG (length l - n) 0 l"
-  sorry
-
-lemma LASTN_CONS: "n <= length l ==> LASTN n (x # l) = LASTN n l"
-  sorry
-
-lemma LENGTH_LASTN: "n <= length l ==> length (LASTN n l) = n"
-  sorry
-
-lemma LASTN_LENGTH_ID: "LASTN (length l) l = l"
-  sorry
-
-lemma LASTN_LASTN: "[| m <= length l; n <= m |] ==> LASTN n (LASTN m l) = LASTN n l"
-  sorry
-
-lemma FIRSTN_LENGTH_ID: "FIRSTN (length l) l = l"
-  sorry
-
-lemma FIRSTN_SNOC: "n <= length l ==> FIRSTN n (SNOC x l) = FIRSTN n l"
-  sorry
-
-lemma BUTLASTN_LENGTH_NIL: "BUTLASTN (length l) l = []"
-  sorry
-
-lemma BUTLASTN_SUC_BUTLAST: "n < length l ==> BUTLASTN (Suc n) l = BUTLASTN n (butlast l)"
-  sorry
-
-lemma BUTLASTN_BUTLAST: "n < length l ==> BUTLASTN n (butlast l) = butlast (BUTLASTN n l)"
-  sorry
-
-lemma LENGTH_BUTLASTN: "n <= length l ==> length (BUTLASTN n l) = length l - n"
-  sorry
-
-lemma BUTLASTN_BUTLASTN: "n + m <= length l ==> BUTLASTN n (BUTLASTN m l) = BUTLASTN (n + m) l"
-  sorry
-
-lemma APPEND_BUTLASTN_LASTN: "n <= length l ==> BUTLASTN n l @ LASTN n l = l"
-  sorry
-
-lemma APPEND_FIRSTN_LASTN: "m + n = length l ==> FIRSTN n l @ LASTN m l = l"
-  sorry
-
-lemma BUTLASTN_APPEND2: "n <= length l2 ==> BUTLASTN n (l1 @ l2) = l1 @ BUTLASTN n l2"
-  sorry
-
-lemma BUTLASTN_LENGTH_APPEND: "BUTLASTN (length l2) (l1 @ l2) = l1"
-  sorry
-
-lemma LASTN_LENGTH_APPEND: "LASTN (length l2) (l1 @ l2) = l2"
-  sorry
-
-lemma BUTLASTN_CONS: "n <= length l ==> BUTLASTN n (x # l) = x # BUTLASTN n l"
-  sorry
-
-lemma BUTLASTN_LENGTH_CONS: "BUTLASTN (length l) (x # l) = [x]"
-  sorry
-
-lemma LAST_LASTN_LAST: "[| n <= length l; 0 < n |] ==> last (LASTN n l) = last l"
-  sorry
-
-lemma BUTLASTN_LASTN_NIL: "n <= length l ==> BUTLASTN n (LASTN n l) = []"
-  sorry
-
-lemma LASTN_BUTLASTN: "n + m <= length l ==> LASTN n (BUTLASTN m l) = BUTLASTN m (LASTN (n + m) l)"
-  sorry
-
-lemma BUTLASTN_LASTN: "m <= n & n <= length l
-==> BUTLASTN m (LASTN n l) = LASTN (n - m) (BUTLASTN m l)"
-  sorry
-
-lemma LASTN_1: "l ~= [] ==> LASTN 1 l = [last l]"
-  sorry
-
-lemma BUTLASTN_1: "l ~= [] ==> BUTLASTN 1 l = butlast l"
-  sorry
-
-lemma BUTLASTN_APPEND1: "length l2 <= n ==> BUTLASTN n (l1 @ l2) = BUTLASTN (n - length l2) l1"
-  sorry
-
-lemma LASTN_APPEND2: "n <= length l2 ==> LASTN n (l1 @ l2) = LASTN n l2"
-  sorry
-
-lemma LASTN_APPEND1: "length l2 <= n ==> LASTN n (l1 @ l2) = LASTN (n - length l2) l1 @ l2"
-  sorry
-
-lemma LASTN_MAP: "n <= length l ==> LASTN n (map f l) = map f (LASTN n l)"
-  sorry
-
-lemma BUTLASTN_MAP: "n <= length l ==> BUTLASTN n (map f l) = map f (BUTLASTN n l)"
-  sorry
-
-lemma ALL_EL_LASTN: "[| list_all P l; m <= length l |] ==> list_all P (LASTN m l)"
-  sorry
-
-lemma ALL_EL_BUTLASTN: "[| list_all P l; m <= length l |] ==> list_all P (BUTLASTN m l)"
-  sorry
-
-lemma LENGTH_FIRSTN: "n <= length l ==> length (FIRSTN n l) = n"
-  sorry
-
-lemma FIRSTN_FIRSTN: "[| m <= length l; n <= m |] ==> FIRSTN n (FIRSTN m l) = FIRSTN n l"
-  sorry
-
-lemma LENGTH_BUTFIRSTN: "n <= length l ==> length (BUTFIRSTN n l) = length l - n"
-  sorry
-
-lemma BUTFIRSTN_LENGTH_NIL: "BUTFIRSTN (length l) l = []"
-  sorry
-
-lemma BUTFIRSTN_APPEND1: "n <= length l1 ==> BUTFIRSTN n (l1 @ l2) = BUTFIRSTN n l1 @ l2"
-  sorry
-
-lemma BUTFIRSTN_APPEND2: "length l1 <= n ==> BUTFIRSTN n (l1 @ l2) = BUTFIRSTN (n - length l1) l2"
-  sorry
-
-lemma BUTFIRSTN_BUTFIRSTN: "n + m <= length l ==> BUTFIRSTN n (BUTFIRSTN m l) = BUTFIRSTN (n + m) l"
-  sorry
-
-lemma APPEND_FIRSTN_BUTFIRSTN: "n <= length l ==> FIRSTN n l @ BUTFIRSTN n l = l"
-  sorry
-
-lemma LASTN_SEG: "n <= length l ==> LASTN n l = SEG n (length l - n) l"
-  sorry
-
-lemma FIRSTN_SEG: "n <= length l ==> FIRSTN n l = SEG n 0 l"
-  sorry
-
-lemma BUTFIRSTN_SEG: "n <= length l ==> BUTFIRSTN n l = SEG (length l - n) n l"
-  sorry
-
-lemma BUTFIRSTN_SNOC: "n <= length l ==> BUTFIRSTN n (SNOC x l) = SNOC x (BUTFIRSTN n l)"
-  sorry
-
-lemma APPEND_BUTLASTN_BUTFIRSTN: "m + n = length l ==> BUTLASTN m l @ BUTFIRSTN n l = l"
-  sorry
-
-lemma SEG_SEG: "n1 + m1 <= length l & n2 + m2 <= n1
-==> SEG n2 m2 (SEG n1 m1 l) = SEG n2 (m1 + m2) l"
-  sorry
-
-lemma SEG_APPEND1: "n + m <= length l1 ==> SEG n m (l1 @ l2) = SEG n m l1"
-  sorry
-
-lemma SEG_APPEND2: "length l1 <= m & n <= length l2
-==> SEG n m (l1 @ l2) = SEG n (m - length l1) l2"
-  sorry
-
-lemma SEG_FIRSTN_BUTFISTN: "n + m <= length l ==> SEG n m l = FIRSTN n (BUTFIRSTN m l)"
-  sorry
-
-lemma SEG_APPEND: "m < length l1 & length l1 <= n + m & n + m <= length l1 + length l2
-==> SEG n m (l1 @ l2) =
-    SEG (length l1 - m) m l1 @ SEG (n + m - length l1) 0 l2"
-  sorry
-
-lemma SEG_LENGTH_SNOC: "SEG 1 (length x) (SNOC xa x) = [xa]"
-  sorry
-
-lemma SEG_SNOC: "n + m <= length l ==> SEG n m (SNOC x l) = SEG n m l"
-  sorry
-
-lemma ELL_SEG: "n < length l ==> ELL n l = hd (SEG 1 (PRE (length l - n)) l)"
-  sorry
-
-lemma SNOC_FOLDR: "SNOC x l = foldr op # l [x]"
-  sorry
-
-lemma IS_EL_FOLDR_MAP: "List.member xa x = foldr op | (map (op = x) xa) False"
-  sorry
-
-lemma IS_EL_FOLDL_MAP: "List.member xa x = foldl op | False (map (op = x) xa)"
-  sorry
-
-lemma FILTER_FILTER: "filter P (filter Q l) = [x<-l. P x & Q x]"
-  sorry
-
-lemma FCOMM_FOLDR_FLAT: "[| FCOMM g f; LEFT_ID g e |]
-==> foldr f (concat l) e = foldr g (map (FOLDR f e) l) e"
-  sorry
-
-lemma FCOMM_FOLDL_FLAT: "[| FCOMM f g; RIGHT_ID g e |]
-==> foldl f e (concat l) = foldl g e (map (foldl f e) l)"
-  sorry
-
-lemma FOLDR_MAP_REVERSE: "(!!(a::'a) (b::'a) c::'a. (f::'a => 'a => 'a) a (f b c) = f b (f a c))
-==> foldr f (map (g::'b => 'a) (rev (l::'b list))) (e::'a) =
-    foldr f (map g l) e"
-  sorry
-
-lemma FOLDR_FILTER_REVERSE: "(!!(a::'a) (b::'a) c::'a. (f::'a => 'a => 'a) a (f b c) = f b (f a c))
-==> foldr f (filter (P::'a => bool) (rev (l::'a list))) (e::'a) =
-    foldr f (filter P l) e"
-  sorry
-
-lemma COMM_ASSOC_FOLDR_REVERSE: "[| COMM f; ASSOC f |] ==> foldr f (rev l) e = foldr f l e"
-  sorry
-
-lemma COMM_ASSOC_FOLDL_REVERSE: "[| COMM f; ASSOC f |] ==> foldl f e (rev l) = foldl f e l"
-  sorry
-
-lemma ELL_LAST: "~ List.null l ==> ELL 0 l = last l"
-  sorry
-
-lemma ELL_0_SNOC: "ELL 0 (SNOC x l) = x"
-  sorry
-
-lemma ELL_SNOC: "0 < n ==> ELL n (SNOC x l) = ELL (PRE n) l"
-  sorry
-
-lemma ELL_SUC_SNOC: "ELL (Suc n) (SNOC x xa) = ELL n xa"
-  sorry
-
-lemma ELL_CONS: "n < length l ==> ELL n (x # l) = ELL n l"
-  sorry
-
-lemma ELL_LENGTH_CONS: "ELL (length l) (x # l) = x"
-  sorry
-
-lemma ELL_LENGTH_SNOC: "ELL (length l) (SNOC x l) = (if List.null l then x else hd l)"
-  sorry
-
-lemma ELL_APPEND2: "n < length l2 ==> ELL n (l1 @ l2) = ELL n l2"
-  sorry
-
-lemma ELL_APPEND1: "length l2 <= n ==> ELL n (l1 @ l2) = ELL (n - length l2) l1"
-  sorry
-
-lemma ELL_PRE_LENGTH: "l ~= [] ==> ELL (PRE (length l)) l = hd l"
-  sorry
-
-lemma EL_LENGTH_SNOC: "EL (length l) (SNOC x l) = x"
-  sorry
-
-lemma EL_PRE_LENGTH: "l ~= [] ==> EL (PRE (length l)) l = last l"
-  sorry
-
-lemma EL_SNOC: "n < length l ==> EL n (SNOC x l) = EL n l"
-  sorry
-
-lemma EL_ELL: "n < length l ==> EL n l = ELL (PRE (length l - n)) l"
-  sorry
-
-lemma EL_LENGTH_APPEND: "~ List.null l2 ==> EL (length l1) (l1 @ l2) = hd l2"
-  sorry
-
-lemma ELL_EL: "n < length l ==> ELL n l = EL (PRE (length l - n)) l"
-  sorry
-
-lemma ELL_MAP: "n < length l ==> ELL n (map f l) = f (ELL n l)"
-  sorry
-
-lemma LENGTH_BUTLAST: "l ~= [] ==> length (butlast l) = PRE (length l)"
-  sorry
-
-lemma BUTFIRSTN_LENGTH_APPEND: "BUTFIRSTN (length l1) (l1 @ l2) = l2"
-  sorry
-
-lemma FIRSTN_APPEND1: "n <= length l1 ==> FIRSTN n (l1 @ l2) = FIRSTN n l1"
-  sorry
-
-lemma FIRSTN_APPEND2: "length l1 <= n ==> FIRSTN n (l1 @ l2) = l1 @ FIRSTN (n - length l1) l2"
-  sorry
-
-lemma FIRSTN_LENGTH_APPEND: "FIRSTN (length l1) (l1 @ l2) = l1"
-  sorry
-
-lemma REVERSE_FLAT: "rev (concat l) = concat (rev (map rev l))"
-  sorry
-
-lemma MAP_FILTER: "(!!x. P (f x) = P x) ==> map f (filter P l) = filter P (map f l)"
-  sorry
-
-lemma FLAT_REVERSE: "concat (rev l) = rev (concat (map rev l))"
-  sorry
-
-lemma FLAT_FLAT: "concat (concat l) = concat (map concat l)"
-  sorry
-
-lemma ALL_EL_SEG: "[| list_all P l; m + k <= length l |] ==> list_all P (SEG m k l)"
-  sorry
-
-lemma ALL_EL_FIRSTN: "[| list_all P l; m <= length l |] ==> list_all P (FIRSTN m l)"
-  sorry
-
-lemma ALL_EL_BUTFIRSTN: "[| list_all P l; m <= length l |] ==> list_all P (BUTFIRSTN m l)"
-  sorry
-
-lemma SOME_EL_SEG: "[| m + k <= length l; list_ex P (SEG m k l) |] ==> list_ex P l"
-  sorry
-
-lemma SOME_EL_FIRSTN: "[| m <= length l; list_ex P (FIRSTN m l) |] ==> list_ex P l"
-  sorry
-
-lemma SOME_EL_BUTFIRSTN: "[| m <= length l; list_ex P (BUTFIRSTN m l) |] ==> list_ex P l"
-  sorry
-
-lemma SOME_EL_LASTN: "[| m <= length l; list_ex P (LASTN m l) |] ==> list_ex P l"
-  sorry
-
-lemma SOME_EL_BUTLASTN: "[| m <= length l; list_ex P (BUTLASTN m l) |] ==> list_ex P l"
-  sorry
-
-lemma IS_EL_REVERSE: "List.member (rev l) x = List.member l x"
-  sorry
-
-lemma IS_EL_FILTER: "P x ==> List.member (filter P l) x = List.member l x"
-  sorry
-
-lemma IS_EL_SEG: "[| n + m <= length l; List.member (SEG n m l) x |] ==> List.member l x"
-  sorry
-
-lemma IS_EL_SOME_EL: "List.member l x = list_ex (op = x) l"
-  sorry
-
-lemma IS_EL_FIRSTN: "[| x <= length xa; List.member (FIRSTN x xa) xb |] ==> List.member xa xb"
-  sorry
-
-lemma IS_EL_BUTFIRSTN: "[| x <= length xa; List.member (BUTFIRSTN x xa) xb |] ==> List.member xa xb"
-  sorry
-
-lemma IS_EL_BUTLASTN: "[| x <= length xa; List.member (BUTLASTN x xa) xb |] ==> List.member xa xb"
-  sorry
-
-lemma IS_EL_LASTN: "[| x <= length xa; List.member (LASTN x xa) xb |] ==> List.member xa xb"
-  sorry
-
-lemma ZIP_SNOC: "length l1 = length l2
-==> zip (SNOC x1 l1) (SNOC x2 l2) = SNOC (x1, x2) (zip l1 l2)"
-  sorry
-
-lemma UNZIP_SNOC: "unzip (SNOC x l) =
-(SNOC (fst x) (fst (unzip l)), SNOC (snd x) (snd (unzip l)))"
-  sorry
-
-lemma LENGTH_UNZIP_FST: "length (UNZIP_FST x) = length x"
-  sorry
-
-lemma LENGTH_UNZIP_SND: "length (UNZIP_SND (x::('a * 'b) list)) = length x"
-  sorry
-
-lemma SUM_APPEND: "HOL4Compat.sum (l1 @ l2) = HOL4Compat.sum l1 + HOL4Compat.sum l2"
-  sorry
-
-lemma SUM_REVERSE: "HOL4Compat.sum (rev l) = HOL4Compat.sum l"
-  sorry
-
-lemma SUM_FLAT: "HOL4Compat.sum (concat l) = HOL4Compat.sum (map HOL4Compat.sum l)"
-  sorry
-
-lemma EL_APPEND1: "n < length l1 ==> EL n (l1 @ l2) = EL n l1"
-  sorry
-
-lemma EL_APPEND2: "length l1 <= n ==> EL n (l1 @ l2) = EL (n - length l1) l2"
-  sorry
-
-lemma EL_MAP: "n < length l ==> EL n (map f l) = f (EL n l)"
-  sorry
-
-lemma EL_CONS: "0 < n ==> EL n (x # l) = EL (PRE n) l"
-  sorry
-
-lemma EL_SEG: "n < length l ==> EL n l = hd (SEG 1 n l)"
-  sorry
-
-lemma EL_IS_EL: "n < length l ==> List.member l (EL n l)"
-  sorry
-
-lemma TL_SNOC: "tl (SNOC x l) = (if List.null l then [] else SNOC x (tl l))"
-  sorry
-
-lemma EL_REVERSE: "n < length l ==> EL n (rev l) = EL (PRE (length l - n)) l"
-  sorry
-
-lemma EL_REVERSE_ELL: "n < length l ==> EL n (rev l) = ELL n l"
-  sorry
-
-lemma ELL_LENGTH_APPEND: "~ List.null l1 ==> ELL (length l2) (l1 @ l2) = last l1"
-  sorry
-
-lemma ELL_IS_EL: "n < length l ==> List.member l (ELL n l)"
-  sorry
-
-lemma ELL_REVERSE: "n < length l ==> ELL n (rev l) = ELL (PRE (length l - n)) l"
-  sorry
-
-lemma ELL_REVERSE_EL: "n < length l ==> ELL n (rev l) = EL n l"
-  sorry
-
-lemma FIRSTN_BUTLASTN: "n <= length l ==> FIRSTN n l = BUTLASTN (length l - n) l"
-  sorry
-
-lemma BUTLASTN_FIRSTN: "n <= length l ==> BUTLASTN n l = FIRSTN (length l - n) l"
-  sorry
-
-lemma LASTN_BUTFIRSTN: "n <= length l ==> LASTN n l = BUTFIRSTN (length l - n) l"
-  sorry
-
-lemma BUTFIRSTN_LASTN: "n <= length l ==> BUTFIRSTN n l = LASTN (length l - n) l"
-  sorry
-
-lemma SEG_LASTN_BUTLASTN: "n + m <= length l ==> SEG n m l = LASTN n (BUTLASTN (length l - (n + m)) l)"
-  sorry
-
-lemma BUTFIRSTN_REVERSE: "n <= length l ==> BUTFIRSTN n (rev l) = rev (BUTLASTN n l)"
-  sorry
-
-lemma BUTLASTN_REVERSE: "n <= length l ==> BUTLASTN n (rev l) = rev (BUTFIRSTN n l)"
-  sorry
-
-lemma LASTN_REVERSE: "n <= length l ==> LASTN n (rev l) = rev (FIRSTN n l)"
-  sorry
-
-lemma FIRSTN_REVERSE: "n <= length l ==> FIRSTN n (rev l) = rev (LASTN n l)"
-  sorry
-
-lemma SEG_REVERSE: "n + m <= length l ==> SEG n m (rev l) = rev (SEG n (length l - (n + m)) l)"
-  sorry
-
-lemma LENGTH_GENLIST: "length (GENLIST f n) = n"
-  sorry
-
-lemma LENGTH_REPLICATE: "length (REPLICATE n x) = n"
-  sorry
-
-lemma IS_EL_REPLICATE: "0 < n ==> List.member (REPLICATE n x) x"
-  sorry
-
-lemma ALL_EL_REPLICATE: "list_all (op = x) (REPLICATE n x)"
-  sorry
-
-lemma AND_EL_FOLDL: "AND_EL l = foldl op & True l"
-  sorry
-
-lemma AND_EL_FOLDR: "AND_EL l = foldr op & l True"
-  sorry
-
-lemma OR_EL_FOLDL: "OR_EL l = foldl op | False l"
-  sorry
-
-lemma OR_EL_FOLDR: "OR_EL l = foldr op | l False"
-  sorry
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" state_transformer
-
-definition
-  UNIT :: "'b => 'a => 'b * 'a"  where
-  "(op ==::('b::type => 'a::type => 'b::type * 'a::type)
-        => ('b::type => 'a::type => 'b::type * 'a::type) => prop)
- (UNIT::'b::type => 'a::type => 'b::type * 'a::type)
- (Pair::'b::type => 'a::type => 'b::type * 'a::type)"
-
-lemma UNIT_DEF: "UNIT x = Pair x"
-  sorry
-
-definition
-  BIND :: "('a => 'b * 'a) => ('b => 'a => 'c * 'a) => 'a => 'c * 'a"  where
-  "BIND == %g f. (%(x, y). f x y) o g"
-
-lemma BIND_DEF: "BIND (g::'a => 'b * 'a) (f::'b => 'a => 'c * 'a) =
-(%(x::'b, y::'a). f x y) o g"
-  sorry
-
-definition
-  MMAP :: "('c => 'b) => ('a => 'c * 'a) => 'a => 'b * 'a"  where
-  "MMAP == %(f::'c => 'b) m::'a => 'c * 'a. BIND m (UNIT o f)"
-
-lemma MMAP_DEF: "MMAP f m = BIND m (UNIT o f)"
-  sorry
-
-definition
-  JOIN :: "('a => ('a => 'b * 'a) * 'a) => 'a => 'b * 'a"  where
-  "JOIN == %z. BIND z I"
-
-lemma JOIN_DEF: "JOIN z = BIND z I"
-  sorry
-
-lemma BIND_LEFT_UNIT: "BIND (UNIT (x::'a)) (k::'a => 'b => 'c * 'b) = k x"
-  sorry
-
-lemma UNIT_UNCURRY: "prod_case UNIT x = x"
-  sorry
-
-lemma BIND_RIGHT_UNIT: "BIND k UNIT = k"
-  sorry
-
-lemma BIND_ASSOC: "BIND (x::'a => 'b * 'a)
- (%a::'b. BIND ((xa::'b => 'a => 'c * 'a) a) (xb::'c => 'a => 'd * 'a)) =
-BIND (BIND x xa) xb"
-  sorry
-
-lemma MMAP_ID: "MMAP I = I"
-  sorry
-
-lemma MMAP_COMP: "MMAP ((f::'c => 'd) o (g::'b => 'c)) = MMAP f o MMAP g"
-  sorry
-
-lemma MMAP_UNIT: "MMAP (f::'b => 'c) o UNIT = UNIT o f"
-  sorry
-
-lemma MMAP_JOIN: "MMAP f o JOIN = JOIN o MMAP (MMAP f)"
-  sorry
-
-lemma JOIN_UNIT: "JOIN o UNIT = I"
-  sorry
-
-lemma JOIN_MMAP_UNIT: "JOIN o MMAP UNIT = I"
-  sorry
-
-lemma JOIN_MAP_JOIN: "JOIN o MMAP JOIN = JOIN o JOIN"
-  sorry
-
-lemma JOIN_MAP: "BIND (x::'a => 'b * 'a) (xa::'b => 'a => 'c * 'a) = JOIN (MMAP xa x)"
-  sorry
-
-lemma FST_o_UNIT: "fst o UNIT (x::'a) = K x"
-  sorry
-
-lemma SND_o_UNIT: "snd o UNIT (x::'a) = I"
-  sorry
-
-lemma FST_o_MMAP: "fst o MMAP (x::'a => 'b) (xa::'c => 'a * 'c) = x o (fst o xa)"
-  sorry
-
-;end_setup
-
-end
-
--- a/src/HOL/Import/HOL/HOL4Prob.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1594 +0,0 @@
-(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
-
-theory HOL4Prob imports HOL4Real begin
-
-setup_theory "~~/src/HOL/Import/HOL" prob_extra
-
-lemma BOOL_BOOL_CASES_THM: "f = (%b. False) | f = (%b. True) | f = (%b. b) | f = Not"
-  by (import prob_extra BOOL_BOOL_CASES_THM)
-
-lemma EVEN_ODD_BASIC: "EVEN 0 & ~ EVEN 1 & EVEN 2 & ~ ODD 0 & ODD 1 & ~ ODD 2"
-  by (import prob_extra EVEN_ODD_BASIC)
-
-lemma EVEN_ODD_EXISTS_EQ: "EVEN n = (EX m. n = 2 * m) & ODD n = (EX m. n = Suc (2 * m))"
-  by (import prob_extra EVEN_ODD_EXISTS_EQ)
-
-lemma DIV_THEN_MULT: "Suc q * (p div Suc q) <= p"
-  by (import prob_extra DIV_THEN_MULT)
-
-lemma DIV_TWO_UNIQUE: "(n::nat) = (2::nat) * (q::nat) + (r::nat) & (r = (0::nat) | r = (1::nat))
-==> q = n div (2::nat) & r = n mod (2::nat)"
-  by (import prob_extra DIV_TWO_UNIQUE)
-
-lemma DIVISION_TWO: "(n::nat) = (2::nat) * (n div (2::nat)) + n mod (2::nat) &
-(n mod (2::nat) = (0::nat) | n mod (2::nat) = (1::nat))"
-  by (import prob_extra DIVISION_TWO)
-
-lemma DIV_TWO: "(n::nat) = (2::nat) * (n div (2::nat)) + n mod (2::nat)"
-  by (import prob_extra DIV_TWO)
-
-lemma MOD_TWO: "n mod 2 = (if EVEN n then 0 else 1)"
-  by (import prob_extra MOD_TWO)
-
-lemma DIV_TWO_BASIC: "(0::nat) div (2::nat) = (0::nat) &
-(1::nat) div (2::nat) = (0::nat) & (2::nat) div (2::nat) = (1::nat)"
-  by (import prob_extra DIV_TWO_BASIC)
-
-lemma DIV_TWO_MONO: "(m::nat) div (2::nat) < (n::nat) div (2::nat) ==> m < n"
-  by (import prob_extra DIV_TWO_MONO)
-
-lemma DIV_TWO_MONO_EVEN: "EVEN n ==> (m div 2 < n div 2) = (m < n)"
-  by (import prob_extra DIV_TWO_MONO_EVEN)
-
-lemma DIV_TWO_CANCEL: "2 * n div 2 = n & Suc (2 * n) div 2 = n"
-  by (import prob_extra DIV_TWO_CANCEL)
-
-lemma EXP_DIV_TWO: "(2::nat) ^ Suc (n::nat) div (2::nat) = (2::nat) ^ n"
-  by (import prob_extra EXP_DIV_TWO)
-
-lemma EVEN_EXP_TWO: "EVEN (2 ^ n) = (n ~= 0)"
-  by (import prob_extra EVEN_EXP_TWO)
-
-lemma DIV_TWO_EXP: "((k::nat) div (2::nat) < (2::nat) ^ (n::nat)) = (k < (2::nat) ^ Suc n)"
-  by (import prob_extra DIV_TWO_EXP)
-
-consts
-  inf :: "(real => bool) => real" 
-
-defs
-  inf_primdef: "prob_extra.inf == %P. - real.sup (IMAGE uminus P)"
-
-lemma inf_def: "prob_extra.inf P = - real.sup (IMAGE uminus P)"
-  by (import prob_extra inf_def)
-
-lemma INF_DEF_ALT: "prob_extra.inf P = - real.sup (%r. P (- r))"
-  by (import prob_extra INF_DEF_ALT)
-
-lemma REAL_SUP_EXISTS_UNIQUE: "Ex (P::real => bool) & (EX z::real. ALL x::real. P x --> x <= z)
-==> EX! s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s)"
-  by (import prob_extra REAL_SUP_EXISTS_UNIQUE)
-
-lemma REAL_SUP_MAX: "P z & (ALL x. P x --> x <= z) ==> real.sup P = z"
-  by (import prob_extra REAL_SUP_MAX)
-
-lemma REAL_INF_MIN: "P z & (ALL x. P x --> z <= x) ==> prob_extra.inf P = z"
-  by (import prob_extra REAL_INF_MIN)
-
-lemma HALF_CANCEL: "(2::real) * ((1::real) / (2::real)) = (1::real)"
-  by (import prob_extra HALF_CANCEL)
-
-lemma POW_HALF_POS: "(0::real) < ((1::real) / (2::real)) ^ (n::nat)"
-  by (import prob_extra POW_HALF_POS)
-
-lemma POW_HALF_MONO: "(m::nat) <= (n::nat)
-==> ((1::real) / (2::real)) ^ n <= ((1::real) / (2::real)) ^ m"
-  by (import prob_extra POW_HALF_MONO)
-
-lemma POW_HALF_TWICE: "((1::real) / (2::real)) ^ (n::nat) =
-(2::real) * ((1::real) / (2::real)) ^ Suc n"
-  by (import prob_extra POW_HALF_TWICE)
-
-lemma X_HALF_HALF: "(1::real) / (2::real) * (x::real) + (1::real) / (2::real) * x = x"
-  by (import prob_extra X_HALF_HALF)
-
-lemma REAL_SUP_LE_X: "Ex P & (ALL r. P r --> r <= x) ==> real.sup P <= x"
-  by (import prob_extra REAL_SUP_LE_X)
-
-lemma REAL_X_LE_SUP: "Ex P & (EX z. ALL r. P r --> r <= z) & (EX r. P r & x <= r)
-==> x <= real.sup P"
-  by (import prob_extra REAL_X_LE_SUP)
-
-lemma ABS_BETWEEN_LE: "((0::real) <= (d::real) & (x::real) - d <= (y::real) & y <= x + d) =
-(abs (y - x) <= d)"
-  by (import prob_extra ABS_BETWEEN_LE)
-
-lemma ONE_MINUS_HALF: "(1::real) - (1::real) / (2::real) = (1::real) / (2::real)"
-  by (import prob_extra ONE_MINUS_HALF)
-
-lemma HALF_LT_1: "(1::real) / (2::real) < (1::real)"
-  by (import prob_extra HALF_LT_1)
-
-lemma POW_HALF_EXP: "((1::real) / (2::real)) ^ (n::nat) = inverse (real ((2::nat) ^ n))"
-  by (import prob_extra POW_HALF_EXP)
-
-lemma INV_SUC_POS: "0 < 1 / real (Suc n)"
-  by (import prob_extra INV_SUC_POS)
-
-lemma INV_SUC_MAX: "1 / real (Suc x) <= 1"
-  by (import prob_extra INV_SUC_MAX)
-
-lemma INV_SUC: "0 < 1 / real (Suc n) & 1 / real (Suc n) <= 1"
-  by (import prob_extra INV_SUC)
-
-lemma ABS_UNIT_INTERVAL: "(0::real) <= (x::real) &
-x <= (1::real) & (0::real) <= (y::real) & y <= (1::real)
-==> abs (x - y) <= (1::real)"
-  by (import prob_extra ABS_UNIT_INTERVAL)
-
-lemma MEM_NIL: "(ALL x. ~ List.member l x) = (l = [])"
-  by (import prob_extra MEM_NIL)
-
-lemma MAP_MEM: "List.member (map (f::'a => 'b) (l::'a list)) (x::'b) =
-(EX y::'a. List.member l y & x = f y)"
-  by (import prob_extra MAP_MEM)
-
-lemma MEM_NIL_MAP_CONS: "~ List.member (map (op # x) l) []"
-  by (import prob_extra MEM_NIL_MAP_CONS)
-
-lemma FILTER_TRUE: "[x<-l. True] = l"
-  by (import prob_extra FILTER_TRUE)
-
-lemma FILTER_FALSE: "[x<-l. False] = []"
-  by (import prob_extra FILTER_FALSE)
-
-lemma FILTER_MEM: "List.member (filter P l) x ==> P x"
-  by (import prob_extra FILTER_MEM)
-
-lemma MEM_FILTER: "List.member (filter P l) x ==> List.member l x"
-  by (import prob_extra MEM_FILTER)
-
-lemma FILTER_OUT_ELT: "List.member l x | [y<-l. y ~= x] = l"
-  by (import prob_extra FILTER_OUT_ELT)
-
-lemma IS_PREFIX_NIL: "IS_PREFIX x [] & IS_PREFIX [] x = (x = [])"
-  by (import prob_extra IS_PREFIX_NIL)
-
-lemma IS_PREFIX_REFL: "IS_PREFIX x x"
-  by (import prob_extra IS_PREFIX_REFL)
-
-lemma IS_PREFIX_ANTISYM: "IS_PREFIX y x & IS_PREFIX x y ==> x = y"
-  by (import prob_extra IS_PREFIX_ANTISYM)
-
-lemma IS_PREFIX_TRANS: "IS_PREFIX x y & IS_PREFIX y z ==> IS_PREFIX x z"
-  by (import prob_extra IS_PREFIX_TRANS)
-
-lemma IS_PREFIX_BUTLAST: "IS_PREFIX (x # y) (butlast (x # y))"
-  by (import prob_extra IS_PREFIX_BUTLAST)
-
-lemma IS_PREFIX_LENGTH: "IS_PREFIX y x ==> length x <= length y"
-  by (import prob_extra IS_PREFIX_LENGTH)
-
-lemma IS_PREFIX_LENGTH_ANTI: "IS_PREFIX y x & length x = length y ==> x = y"
-  by (import prob_extra IS_PREFIX_LENGTH_ANTI)
-
-lemma IS_PREFIX_SNOC: "IS_PREFIX (SNOC x y) z = (IS_PREFIX y z | z = SNOC x y)"
-  by (import prob_extra IS_PREFIX_SNOC)
-
-lemma FOLDR_MAP: "foldr (f::'b => 'c => 'c) (map (g::'a => 'b) (l::'a list)) (e::'c) =
-foldr (%x::'a. f (g x)) l e"
-  by (import prob_extra FOLDR_MAP)
-
-lemma LAST_MEM: "List.member (h # t) (last (h # t))"
-  by (import prob_extra LAST_MEM)
-
-lemma LAST_MAP_CONS: "EX x::bool list.
-   last (map (op # (b::bool)) ((h::bool list) # (t::bool list list))) =
-   b # x"
-  by (import prob_extra LAST_MAP_CONS)
-
-lemma EXISTS_LONGEST: "EX z. List.member (x # y) z &
-      (ALL w. List.member (x # y) w --> length w <= length z)"
-  by (import prob_extra EXISTS_LONGEST)
-
-lemma UNION_DEF_ALT: "pred_set.UNION s t = (%x. s x | t x)"
-  by (import prob_extra UNION_DEF_ALT)
-
-lemma INTER_UNION_RDISTRIB: "pred_set.INTER (pred_set.UNION p q) r =
-pred_set.UNION (pred_set.INTER p r) (pred_set.INTER q r)"
-  by (import prob_extra INTER_UNION_RDISTRIB)
-
-lemma SUBSET_EQ: "(x = xa) = (SUBSET x xa & SUBSET xa x)"
-  by (import prob_extra SUBSET_EQ)
-
-lemma INTER_IS_EMPTY: "(pred_set.INTER s t = EMPTY) = (ALL x. ~ s x | ~ t x)"
-  by (import prob_extra INTER_IS_EMPTY)
-
-lemma UNION_DISJOINT_SPLIT: "pred_set.UNION s t = pred_set.UNION s u &
-pred_set.INTER s t = EMPTY & pred_set.INTER s u = EMPTY
-==> t = u"
-  by (import prob_extra UNION_DISJOINT_SPLIT)
-
-lemma GSPEC_DEF_ALT: "GSPEC (f::'a => 'b * bool) = (%v::'b. EX x::'a. (v, True) = f x)"
-  by (import prob_extra GSPEC_DEF_ALT)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prob_canon
-
-consts
-  alg_twin :: "bool list => bool list => bool" 
-
-defs
-  alg_twin_primdef: "alg_twin == %x y. EX l. x = SNOC True l & y = SNOC False l"
-
-lemma alg_twin_def: "alg_twin x y = (EX l. x = SNOC True l & y = SNOC False l)"
-  by (import prob_canon alg_twin_def)
-
-definition
-  alg_order_tupled :: "bool list * bool list => bool"  where
-  "alg_order_tupled ==
-WFREC (SOME R. WF R & (ALL h' h t' t. R (t, t') (h # t, h' # t')))
- (%alg_order_tupled (v, v1).
-     case v of [] => case v1 of [] => True | _ => True
-     | v4 # v5 =>
-         case v1 of [] => False
-         | v10 # v11 =>
-             v4 = True & v10 = False |
-             v4 = v10 & alg_order_tupled (v5, v11))"
-
-lemma alg_order_tupled_primitive_def: "alg_order_tupled =
-WFREC (SOME R. WF R & (ALL h' h t' t. R (t, t') (h # t, h' # t')))
- (%alg_order_tupled (v, v1).
-     case v of [] => case v1 of [] => True | _ => True
-     | v4 # v5 =>
-         case v1 of [] => False
-         | v10 # v11 =>
-             v4 = True & v10 = False |
-             v4 = v10 & alg_order_tupled (v5, v11))"
-  by (import prob_canon alg_order_tupled_primitive_def)
-
-consts
-  alg_order :: "bool list => bool list => bool" 
-
-defs
-  alg_order_primdef: "alg_order == %x x1. alg_order_tupled (x, x1)"
-
-lemma alg_order_curried_def: "alg_order x x1 = alg_order_tupled (x, x1)"
-  by (import prob_canon alg_order_curried_def)
-
-lemma alg_order_ind: "(ALL (x::bool) xa::bool list.
-    (P::bool list => bool list => bool) [] (x # xa)) &
-P [] [] &
-(ALL (x::bool) xa::bool list. P (x # xa) []) &
-(ALL (x::bool) (xa::bool list) (xb::bool) xc::bool list.
-    P xa xc --> P (x # xa) (xb # xc))
-==> P (x::bool list) (xa::bool list)"
-  by (import prob_canon alg_order_ind)
-
-lemma alg_order_def: "alg_order [] (v6 # v7) = True &
-alg_order [] [] = True &
-alg_order (v2 # v3) [] = False &
-alg_order (h # t) (h' # t') =
-(h = True & h' = False | h = h' & alg_order t t')"
-  by (import prob_canon alg_order_def)
-
-consts
-  alg_sorted :: "bool list list => bool" 
-
-defs
-  alg_sorted_primdef: "alg_sorted ==
-WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
- (%alg_sorted.
-     list_case True
-      (%v2. list_case True
-             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
-
-lemma alg_sorted_primitive_def: "alg_sorted =
-WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
- (%alg_sorted.
-     list_case True
-      (%v2. list_case True
-             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
-  by (import prob_canon alg_sorted_primitive_def)
-
-lemma alg_sorted_ind: "(ALL (x::bool list) (y::bool list) z::bool list list.
-    (P::bool list list => bool) (y # z) --> P (x # y # z)) &
-(ALL v::bool list. P [v]) & P []
-==> P (x::bool list list)"
-  by (import prob_canon alg_sorted_ind)
-
-lemma alg_sorted_def: "alg_sorted (x # y # z) = (alg_order x y & alg_sorted (y # z)) &
-alg_sorted [v] = True & alg_sorted [] = True"
-  by (import prob_canon alg_sorted_def)
-
-consts
-  alg_prefixfree :: "bool list list => bool" 
-
-defs
-  alg_prefixfree_primdef: "alg_prefixfree ==
-WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
- (%alg_prefixfree.
-     list_case True
-      (%v2. list_case True
-             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
-
-lemma alg_prefixfree_primitive_def: "alg_prefixfree =
-WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
- (%alg_prefixfree.
-     list_case True
-      (%v2. list_case True
-             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
-  by (import prob_canon alg_prefixfree_primitive_def)
-
-lemma alg_prefixfree_ind: "(ALL (x::bool list) (y::bool list) z::bool list list.
-    (P::bool list list => bool) (y # z) --> P (x # y # z)) &
-(ALL v::bool list. P [v]) & P []
-==> P (x::bool list list)"
-  by (import prob_canon alg_prefixfree_ind)
-
-lemma alg_prefixfree_def: "alg_prefixfree (x # y # z) = (~ IS_PREFIX y x & alg_prefixfree (y # z)) &
-alg_prefixfree [v] = True & alg_prefixfree [] = True"
-  by (import prob_canon alg_prefixfree_def)
-
-consts
-  alg_twinfree :: "bool list list => bool" 
-
-defs
-  alg_twinfree_primdef: "alg_twinfree ==
-WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
- (%alg_twinfree.
-     list_case True
-      (%v2. list_case True
-             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
-
-lemma alg_twinfree_primitive_def: "alg_twinfree =
-WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
- (%alg_twinfree.
-     list_case True
-      (%v2. list_case True
-             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
-  by (import prob_canon alg_twinfree_primitive_def)
-
-lemma alg_twinfree_ind: "(ALL (x::bool list) (y::bool list) z::bool list list.
-    (P::bool list list => bool) (y # z) --> P (x # y # z)) &
-(ALL v::bool list. P [v]) & P []
-==> P (x::bool list list)"
-  by (import prob_canon alg_twinfree_ind)
-
-lemma alg_twinfree_def: "alg_twinfree (x # y # z) = (~ alg_twin x y & alg_twinfree (y # z)) &
-alg_twinfree [v] = True & alg_twinfree [] = True"
-  by (import prob_canon alg_twinfree_def)
-
-consts
-  alg_longest :: "bool list list => nat" 
-
-defs
-  alg_longest_primdef: "alg_longest == FOLDR (%h t. if t <= length h then length h else t) 0"
-
-lemma alg_longest_def: "alg_longest = FOLDR (%h t. if t <= length h then length h else t) 0"
-  by (import prob_canon alg_longest_def)
-
-consts
-  alg_canon_prefs :: "bool list => bool list list => bool list list" 
-
-specification (alg_canon_prefs_primdef: alg_canon_prefs) alg_canon_prefs_def: "(ALL l. alg_canon_prefs l [] = [l]) &
-(ALL l h t.
-    alg_canon_prefs l (h # t) =
-    (if IS_PREFIX h l then alg_canon_prefs l t else l # h # t))"
-  by (import prob_canon alg_canon_prefs_def)
-
-consts
-  alg_canon_find :: "bool list => bool list list => bool list list" 
-
-specification (alg_canon_find_primdef: alg_canon_find) alg_canon_find_def: "(ALL l. alg_canon_find l [] = [l]) &
-(ALL l h t.
-    alg_canon_find l (h # t) =
-    (if alg_order h l
-     then if IS_PREFIX l h then h # t else h # alg_canon_find l t
-     else alg_canon_prefs l (h # t)))"
-  by (import prob_canon alg_canon_find_def)
-
-consts
-  alg_canon1 :: "bool list list => bool list list" 
-
-defs
-  alg_canon1_primdef: "alg_canon1 == FOLDR alg_canon_find []"
-
-lemma alg_canon1_def: "alg_canon1 = FOLDR alg_canon_find []"
-  by (import prob_canon alg_canon1_def)
-
-consts
-  alg_canon_merge :: "bool list => bool list list => bool list list" 
-
-specification (alg_canon_merge_primdef: alg_canon_merge) alg_canon_merge_def: "(ALL l. alg_canon_merge l [] = [l]) &
-(ALL l h t.
-    alg_canon_merge l (h # t) =
-    (if alg_twin l h then alg_canon_merge (butlast h) t else l # h # t))"
-  by (import prob_canon alg_canon_merge_def)
-
-consts
-  alg_canon2 :: "bool list list => bool list list" 
-
-defs
-  alg_canon2_primdef: "alg_canon2 == FOLDR alg_canon_merge []"
-
-lemma alg_canon2_def: "alg_canon2 = FOLDR alg_canon_merge []"
-  by (import prob_canon alg_canon2_def)
-
-consts
-  alg_canon :: "bool list list => bool list list" 
-
-defs
-  alg_canon_primdef: "alg_canon == %l. alg_canon2 (alg_canon1 l)"
-
-lemma alg_canon_def: "alg_canon l = alg_canon2 (alg_canon1 l)"
-  by (import prob_canon alg_canon_def)
-
-consts
-  algebra_canon :: "bool list list => bool" 
-
-defs
-  algebra_canon_primdef: "algebra_canon == %l. alg_canon l = l"
-
-lemma algebra_canon_def: "algebra_canon l = (alg_canon l = l)"
-  by (import prob_canon algebra_canon_def)
-
-lemma ALG_TWIN_NIL: "~ alg_twin l [] & ~ alg_twin [] l"
-  by (import prob_canon ALG_TWIN_NIL)
-
-lemma ALG_TWIN_SING: "alg_twin [x] l = (x = True & l = [False]) &
-alg_twin l [x] = (l = [True] & x = False)"
-  by (import prob_canon ALG_TWIN_SING)
-
-lemma ALG_TWIN_CONS: "alg_twin (x # y # z) (h # t) = (x = h & alg_twin (y # z) t) &
-alg_twin (h # t) (x # y # z) = (x = h & alg_twin t (y # z))"
-  by (import prob_canon ALG_TWIN_CONS)
-
-lemma ALG_TWIN_REDUCE: "alg_twin (h # t) (h # t') = alg_twin t t'"
-  by (import prob_canon ALG_TWIN_REDUCE)
-
-lemma ALG_TWINS_PREFIX: "IS_PREFIX x l
-==> x = l | IS_PREFIX x (SNOC True l) | IS_PREFIX x (SNOC False l)"
-  by (import prob_canon ALG_TWINS_PREFIX)
-
-lemma ALG_ORDER_NIL: "alg_order [] x & alg_order x [] = (x = [])"
-  by (import prob_canon ALG_ORDER_NIL)
-
-lemma ALG_ORDER_REFL: "alg_order x x"
-  by (import prob_canon ALG_ORDER_REFL)
-
-lemma ALG_ORDER_ANTISYM: "alg_order x y & alg_order y x ==> x = y"
-  by (import prob_canon ALG_ORDER_ANTISYM)
-
-lemma ALG_ORDER_TRANS: "alg_order x y & alg_order y z ==> alg_order x z"
-  by (import prob_canon ALG_ORDER_TRANS)
-
-lemma ALG_ORDER_TOTAL: "alg_order x y | alg_order y x"
-  by (import prob_canon ALG_ORDER_TOTAL)
-
-lemma ALG_ORDER_PREFIX: "IS_PREFIX y x ==> alg_order x y"
-  by (import prob_canon ALG_ORDER_PREFIX)
-
-lemma ALG_ORDER_PREFIX_ANTI: "alg_order x y & IS_PREFIX x y ==> x = y"
-  by (import prob_canon ALG_ORDER_PREFIX_ANTI)
-
-lemma ALG_ORDER_PREFIX_MONO: "alg_order x y & alg_order y z & IS_PREFIX z x ==> IS_PREFIX y x"
-  by (import prob_canon ALG_ORDER_PREFIX_MONO)
-
-lemma ALG_ORDER_PREFIX_TRANS: "alg_order x y & IS_PREFIX y z ==> alg_order x z | IS_PREFIX x z"
-  by (import prob_canon ALG_ORDER_PREFIX_TRANS)
-
-lemma ALG_ORDER_SNOC: "~ alg_order (SNOC x l) l"
-  by (import prob_canon ALG_ORDER_SNOC)
-
-lemma ALG_SORTED_MIN: "[| alg_sorted (h # t); List.member t x |] ==> alg_order h x"
-  by (import prob_canon ALG_SORTED_MIN)
-
-lemma ALG_SORTED_DEF_ALT: "alg_sorted (h # t) =
-((ALL x. List.member t x --> alg_order h x) & alg_sorted t)"
-  by (import prob_canon ALG_SORTED_DEF_ALT)
-
-lemma ALG_SORTED_TL: "alg_sorted (h # t) ==> alg_sorted t"
-  by (import prob_canon ALG_SORTED_TL)
-
-lemma ALG_SORTED_MONO: "alg_sorted (x # y # z) ==> alg_sorted (x # z)"
-  by (import prob_canon ALG_SORTED_MONO)
-
-lemma ALG_SORTED_TLS: "alg_sorted (map (op # b) l) = alg_sorted l"
-  by (import prob_canon ALG_SORTED_TLS)
-
-lemma ALG_SORTED_STEP: "alg_sorted (map (op # True) l1 @ map (op # False) l2) =
-(alg_sorted l1 & alg_sorted l2)"
-  by (import prob_canon ALG_SORTED_STEP)
-
-lemma ALG_SORTED_APPEND: "alg_sorted ((h # t) @ h' # t') =
-(alg_sorted (h # t) & alg_sorted (h' # t') & alg_order (last (h # t)) h')"
-  by (import prob_canon ALG_SORTED_APPEND)
-
-lemma ALG_SORTED_FILTER: "alg_sorted b ==> alg_sorted (filter P b)"
-  by (import prob_canon ALG_SORTED_FILTER)
-
-lemma ALG_PREFIXFREE_TL: "alg_prefixfree (h # t) ==> alg_prefixfree t"
-  by (import prob_canon ALG_PREFIXFREE_TL)
-
-lemma ALG_PREFIXFREE_MONO: "alg_sorted (x # y # z) & alg_prefixfree (x # y # z)
-==> alg_prefixfree (x # z)"
-  by (import prob_canon ALG_PREFIXFREE_MONO)
-
-lemma ALG_PREFIXFREE_ELT: "[| alg_sorted (h # t) & alg_prefixfree (h # t); List.member t x |]
-==> ~ IS_PREFIX x h & ~ IS_PREFIX h x"
-  by (import prob_canon ALG_PREFIXFREE_ELT)
-
-lemma ALG_PREFIXFREE_TLS: "alg_prefixfree (map (op # b) l) = alg_prefixfree l"
-  by (import prob_canon ALG_PREFIXFREE_TLS)
-
-lemma ALG_PREFIXFREE_STEP: "alg_prefixfree (map (op # True) l1 @ map (op # False) l2) =
-(alg_prefixfree l1 & alg_prefixfree l2)"
-  by (import prob_canon ALG_PREFIXFREE_STEP)
-
-lemma ALG_PREFIXFREE_APPEND: "alg_prefixfree ((h # t) @ h' # t') =
-(alg_prefixfree (h # t) &
- alg_prefixfree (h' # t') & ~ IS_PREFIX h' (last (h # t)))"
-  by (import prob_canon ALG_PREFIXFREE_APPEND)
-
-lemma ALG_PREFIXFREE_FILTER: "alg_sorted b & alg_prefixfree b ==> alg_prefixfree (filter P b)"
-  by (import prob_canon ALG_PREFIXFREE_FILTER)
-
-lemma ALG_TWINFREE_TL: "alg_twinfree (h # t) ==> alg_twinfree t"
-  by (import prob_canon ALG_TWINFREE_TL)
-
-lemma ALG_TWINFREE_TLS: "alg_twinfree (map (op # b) l) = alg_twinfree l"
-  by (import prob_canon ALG_TWINFREE_TLS)
-
-lemma ALG_TWINFREE_STEP1: "alg_twinfree (map (op # True) l1 @ map (op # False) l2)
-==> alg_twinfree l1 & alg_twinfree l2"
-  by (import prob_canon ALG_TWINFREE_STEP1)
-
-lemma ALG_TWINFREE_STEP2: "(~ List.member l1 [] | ~ List.member l2 []) &
-alg_twinfree l1 & alg_twinfree l2
-==> alg_twinfree (map (op # True) l1 @ map (op # False) l2)"
-  by (import prob_canon ALG_TWINFREE_STEP2)
-
-lemma ALG_TWINFREE_STEP: "~ List.member l1 [] | ~ List.member l2 []
-==> alg_twinfree (map (op # True) l1 @ map (op # False) l2) =
-    (alg_twinfree l1 & alg_twinfree l2)"
-  by (import prob_canon ALG_TWINFREE_STEP)
-
-lemma ALG_LONGEST_HD: "length h <= alg_longest (h # t)"
-  by (import prob_canon ALG_LONGEST_HD)
-
-lemma ALG_LONGEST_TL: "alg_longest t <= alg_longest (h # t)"
-  by (import prob_canon ALG_LONGEST_TL)
-
-lemma ALG_LONGEST_TLS: "alg_longest (map (op # b) (h # t)) = Suc (alg_longest (h # t))"
-  by (import prob_canon ALG_LONGEST_TLS)
-
-lemma ALG_LONGEST_APPEND: "alg_longest l1 <= alg_longest (l1 @ l2) &
-alg_longest l2 <= alg_longest (l1 @ l2)"
-  by (import prob_canon ALG_LONGEST_APPEND)
-
-lemma ALG_CANON_PREFS_HD: "hd (alg_canon_prefs l b) = l"
-  by (import prob_canon ALG_CANON_PREFS_HD)
-
-lemma ALG_CANON_PREFS_DELETES: "List.member (alg_canon_prefs l b) x ==> List.member (l # b) x"
-  by (import prob_canon ALG_CANON_PREFS_DELETES)
-
-lemma ALG_CANON_PREFS_SORTED: "alg_sorted (l # b) ==> alg_sorted (alg_canon_prefs l b)"
-  by (import prob_canon ALG_CANON_PREFS_SORTED)
-
-lemma ALG_CANON_PREFS_PREFIXFREE: "alg_sorted b & alg_prefixfree b ==> alg_prefixfree (alg_canon_prefs l b)"
-  by (import prob_canon ALG_CANON_PREFS_PREFIXFREE)
-
-lemma ALG_CANON_PREFS_CONSTANT: "alg_prefixfree (l # b) ==> alg_canon_prefs l b = l # b"
-  by (import prob_canon ALG_CANON_PREFS_CONSTANT)
-
-lemma ALG_CANON_FIND_HD: "hd (alg_canon_find l (h # t)) = l | hd (alg_canon_find l (h # t)) = h"
-  by (import prob_canon ALG_CANON_FIND_HD)
-
-lemma ALG_CANON_FIND_DELETES: "List.member (alg_canon_find l b) x ==> List.member (l # b) x"
-  by (import prob_canon ALG_CANON_FIND_DELETES)
-
-lemma ALG_CANON_FIND_SORTED: "alg_sorted b ==> alg_sorted (alg_canon_find l b)"
-  by (import prob_canon ALG_CANON_FIND_SORTED)
-
-lemma ALG_CANON_FIND_PREFIXFREE: "alg_sorted b & alg_prefixfree b ==> alg_prefixfree (alg_canon_find l b)"
-  by (import prob_canon ALG_CANON_FIND_PREFIXFREE)
-
-lemma ALG_CANON_FIND_CONSTANT: "alg_sorted (l # b) & alg_prefixfree (l # b) ==> alg_canon_find l b = l # b"
-  by (import prob_canon ALG_CANON_FIND_CONSTANT)
-
-lemma ALG_CANON1_SORTED: "alg_sorted (alg_canon1 x)"
-  by (import prob_canon ALG_CANON1_SORTED)
-
-lemma ALG_CANON1_PREFIXFREE: "alg_prefixfree (alg_canon1 l)"
-  by (import prob_canon ALG_CANON1_PREFIXFREE)
-
-lemma ALG_CANON1_CONSTANT: "alg_sorted l & alg_prefixfree l ==> alg_canon1 l = l"
-  by (import prob_canon ALG_CANON1_CONSTANT)
-
-lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "alg_sorted (l # b) & alg_prefixfree (l # b) & alg_twinfree b
-==> alg_sorted (alg_canon_merge l b) &
-    alg_prefixfree (alg_canon_merge l b) &
-    alg_twinfree (alg_canon_merge l b)"
-  by (import prob_canon ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE)
-
-lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "[| !!x. List.member (l # b) x ==> ~ IS_PREFIX h x & ~ IS_PREFIX x h;
-   List.member (alg_canon_merge l b) x |]
-==> ~ IS_PREFIX h x & ~ IS_PREFIX x h"
-  by (import prob_canon ALG_CANON_MERGE_PREFIXFREE_PRESERVE)
-
-lemma ALG_CANON_MERGE_SHORTENS: "List.member (alg_canon_merge l b) x
-==> EX y. List.member (l # b) y & IS_PREFIX y x"
-  by (import prob_canon ALG_CANON_MERGE_SHORTENS)
-
-lemma ALG_CANON_MERGE_CONSTANT: "alg_twinfree (l # b) ==> alg_canon_merge l b = l # b"
-  by (import prob_canon ALG_CANON_MERGE_CONSTANT)
-
-lemma ALG_CANON2_PREFIXFREE_PRESERVE: "[| !!xb. List.member x xb ==> ~ IS_PREFIX xa xb & ~ IS_PREFIX xb xa;
-   List.member (alg_canon2 x) xb |]
-==> ~ IS_PREFIX xa xb & ~ IS_PREFIX xb xa"
-  by (import prob_canon ALG_CANON2_PREFIXFREE_PRESERVE)
-
-lemma ALG_CANON2_SHORTENS: "List.member (alg_canon2 x) xa ==> EX y. List.member x y & IS_PREFIX y xa"
-  by (import prob_canon ALG_CANON2_SHORTENS)
-
-lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "alg_sorted x & alg_prefixfree x
-==> alg_sorted (alg_canon2 x) &
-    alg_prefixfree (alg_canon2 x) & alg_twinfree (alg_canon2 x)"
-  by (import prob_canon ALG_CANON2_SORTED_PREFIXFREE_TWINFREE)
-
-lemma ALG_CANON2_CONSTANT: "alg_twinfree l ==> alg_canon2 l = l"
-  by (import prob_canon ALG_CANON2_CONSTANT)
-
-lemma ALG_CANON_SORTED_PREFIXFREE_TWINFREE: "alg_sorted (alg_canon l) &
-alg_prefixfree (alg_canon l) & alg_twinfree (alg_canon l)"
-  by (import prob_canon ALG_CANON_SORTED_PREFIXFREE_TWINFREE)
-
-lemma ALG_CANON_CONSTANT: "alg_sorted l & alg_prefixfree l & alg_twinfree l ==> alg_canon l = l"
-  by (import prob_canon ALG_CANON_CONSTANT)
-
-lemma ALG_CANON_IDEMPOT: "alg_canon (alg_canon l) = alg_canon l"
-  by (import prob_canon ALG_CANON_IDEMPOT)
-
-lemma ALGEBRA_CANON_DEF_ALT: "algebra_canon l = (alg_sorted l & alg_prefixfree l & alg_twinfree l)"
-  by (import prob_canon ALGEBRA_CANON_DEF_ALT)
-
-lemma ALGEBRA_CANON_BASIC: "algebra_canon [] & algebra_canon [[]] & (ALL x. algebra_canon [x])"
-  by (import prob_canon ALGEBRA_CANON_BASIC)
-
-lemma ALG_CANON_BASIC: "alg_canon [] = [] & alg_canon [[]] = [[]] & (ALL x. alg_canon [x] = [x])"
-  by (import prob_canon ALG_CANON_BASIC)
-
-lemma ALGEBRA_CANON_TL: "algebra_canon (h # t) ==> algebra_canon t"
-  by (import prob_canon ALGEBRA_CANON_TL)
-
-lemma ALGEBRA_CANON_NIL_MEM: "(algebra_canon l & List.member l []) = (l = [[]])"
-  by (import prob_canon ALGEBRA_CANON_NIL_MEM)
-
-lemma ALGEBRA_CANON_TLS: "algebra_canon (map (op # b) l) = algebra_canon l"
-  by (import prob_canon ALGEBRA_CANON_TLS)
-
-lemma ALGEBRA_CANON_STEP1: "algebra_canon (map (op # True) l1 @ map (op # False) l2)
-==> algebra_canon l1 & algebra_canon l2"
-  by (import prob_canon ALGEBRA_CANON_STEP1)
-
-lemma ALGEBRA_CANON_STEP2: "(l1 ~= [[]] | l2 ~= [[]]) & algebra_canon l1 & algebra_canon l2
-==> algebra_canon (map (op # True) l1 @ map (op # False) l2)"
-  by (import prob_canon ALGEBRA_CANON_STEP2)
-
-lemma ALGEBRA_CANON_STEP: "l1 ~= [[]] | l2 ~= [[]]
-==> algebra_canon (map (op # True) l1 @ map (op # False) l2) =
-    (algebra_canon l1 & algebra_canon l2)"
-  by (import prob_canon ALGEBRA_CANON_STEP)
-
-lemma ALGEBRA_CANON_CASES_THM: "algebra_canon l
-==> l = [] |
-    l = [[]] |
-    (EX l1 l2.
-        algebra_canon l1 &
-        algebra_canon l2 & l = map (op # True) l1 @ map (op # False) l2)"
-  by (import prob_canon ALGEBRA_CANON_CASES_THM)
-
-lemma ALGEBRA_CANON_CASES: "[| P [] &
-   P [[]] &
-   (ALL l1 l2.
-       algebra_canon l1 &
-       algebra_canon l2 &
-       algebra_canon (map (op # True) l1 @ map (op # False) l2) -->
-       P (map (op # True) l1 @ map (op # False) l2));
-   algebra_canon l |]
-==> P l"
-  by (import prob_canon ALGEBRA_CANON_CASES)
-
-lemma ALGEBRA_CANON_INDUCTION: "[| P [] &
-   P [[]] &
-   (ALL l1 l2.
-       algebra_canon l1 &
-       algebra_canon l2 &
-       P l1 &
-       P l2 & algebra_canon (map (op # True) l1 @ map (op # False) l2) -->
-       P (map (op # True) l1 @ map (op # False) l2));
-   algebra_canon l |]
-==> P l"
-  by (import prob_canon ALGEBRA_CANON_INDUCTION)
-
-lemma MEM_NIL_STEP: "~ List.member (map (op # True) l1 @ map (op # False) l2) []"
-  by (import prob_canon MEM_NIL_STEP)
-
-lemma ALG_SORTED_PREFIXFREE_MEM_NIL: "(alg_sorted l & alg_prefixfree l & List.member l []) = (l = [[]])"
-  by (import prob_canon ALG_SORTED_PREFIXFREE_MEM_NIL)
-
-lemma ALG_SORTED_PREFIXFREE_EQUALITY: "(ALL x. List.member l x = List.member l' x) &
-alg_sorted l & alg_sorted l' & alg_prefixfree l & alg_prefixfree l'
-==> l = l'"
-  by (import prob_canon ALG_SORTED_PREFIXFREE_EQUALITY)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" boolean_sequence
-
-consts
-  SHD :: "(nat => bool) => bool" 
-
-defs
-  SHD_primdef: "SHD == %f. f 0"
-
-lemma SHD_def: "SHD f = f 0"
-  by (import boolean_sequence SHD_def)
-
-consts
-  STL :: "(nat => bool) => nat => bool" 
-
-defs
-  STL_primdef: "STL == %f n. f (Suc n)"
-
-lemma STL_def: "STL f n = f (Suc n)"
-  by (import boolean_sequence STL_def)
-
-consts
-  SCONS :: "bool => (nat => bool) => nat => bool" 
-
-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)"
-  by (import boolean_sequence SCONS_def)
-
-consts
-  SDEST :: "(nat => bool) => bool * (nat => bool)" 
-
-defs
-  SDEST_primdef: "SDEST == %s. (SHD s, STL s)"
-
-lemma SDEST_def: "SDEST = (%s. (SHD s, STL s))"
-  by (import boolean_sequence SDEST_def)
-
-consts
-  SCONST :: "bool => nat => bool" 
-
-defs
-  SCONST_primdef: "SCONST == K"
-
-lemma SCONST_def: "SCONST = K"
-  by (import boolean_sequence SCONST_def)
-
-consts
-  STAKE :: "nat => (nat => bool) => bool list" 
-
-specification (STAKE_primdef: STAKE) STAKE_def: "(ALL s. STAKE 0 s = []) &
-(ALL n s. STAKE (Suc n) s = SHD s # STAKE n (STL s))"
-  by (import boolean_sequence STAKE_def)
-
-consts
-  SDROP :: "nat => (nat => bool) => nat => bool" 
-
-specification (SDROP_primdef: SDROP) SDROP_def: "SDROP 0 = I & (ALL n. SDROP (Suc n) = SDROP n o STL)"
-  by (import boolean_sequence SDROP_def)
-
-lemma SCONS_SURJ: "EX xa t. x = SCONS xa t"
-  by (import boolean_sequence SCONS_SURJ)
-
-lemma SHD_STL_ISO: "EX x. SHD x = h & STL x = t"
-  by (import boolean_sequence SHD_STL_ISO)
-
-lemma SHD_SCONS: "SHD (SCONS h t) = h"
-  by (import boolean_sequence SHD_SCONS)
-
-lemma STL_SCONS: "STL (SCONS h t) = t"
-  by (import boolean_sequence STL_SCONS)
-
-lemma SHD_SCONST: "SHD (SCONST b) = b"
-  by (import boolean_sequence SHD_SCONST)
-
-lemma STL_SCONST: "STL (SCONST b) = SCONST b"
-  by (import boolean_sequence STL_SCONST)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prob_algebra
-
-consts
-  alg_embed :: "bool list => (nat => bool) => bool" 
-
-specification (alg_embed_primdef: alg_embed) alg_embed_def: "(ALL s. alg_embed [] s = True) &
-(ALL h t s. alg_embed (h # t) s = (h = SHD s & alg_embed t (STL s)))"
-  by (import prob_algebra alg_embed_def)
-
-consts
-  algebra_embed :: "bool list list => (nat => bool) => bool" 
-
-specification (algebra_embed_primdef: algebra_embed) algebra_embed_def: "algebra_embed [] = EMPTY &
-(ALL h t.
-    algebra_embed (h # t) = pred_set.UNION (alg_embed h) (algebra_embed t))"
-  by (import prob_algebra algebra_embed_def)
-
-consts
-  measurable :: "((nat => bool) => bool) => bool" 
-
-defs
-  measurable_primdef: "measurable == %s. EX b. s = algebra_embed b"
-
-lemma measurable_def: "measurable s = (EX b. s = algebra_embed b)"
-  by (import prob_algebra measurable_def)
-
-lemma HALVES_INTER: "pred_set.INTER (%x. SHD x = True) (%x. SHD x = False) = EMPTY"
-  by (import prob_algebra HALVES_INTER)
-
-lemma INTER_STL: "pred_set.INTER p q o STL = pred_set.INTER (p o STL) (q o STL)"
-  by (import prob_algebra INTER_STL)
-
-lemma COMPL_SHD: "COMPL (%x. SHD x = b) = (%x. SHD x = (~ b))"
-  by (import prob_algebra COMPL_SHD)
-
-lemma ALG_EMBED_BASIC: "alg_embed [] = pred_set.UNIV &
-(ALL h t.
-    alg_embed (h # t) = pred_set.INTER (%x. SHD x = h) (alg_embed t o STL))"
-  by (import prob_algebra ALG_EMBED_BASIC)
-
-lemma ALG_EMBED_NIL: "All (alg_embed c) = (c = [])"
-  by (import prob_algebra ALG_EMBED_NIL)
-
-lemma ALG_EMBED_POPULATED: "Ex (alg_embed b)"
-  by (import prob_algebra ALG_EMBED_POPULATED)
-
-lemma ALG_EMBED_PREFIX: "alg_embed b s & alg_embed c s ==> IS_PREFIX b c | IS_PREFIX c b"
-  by (import prob_algebra ALG_EMBED_PREFIX)
-
-lemma ALG_EMBED_PREFIX_SUBSET: "SUBSET (alg_embed b) (alg_embed c) = IS_PREFIX b c"
-  by (import prob_algebra ALG_EMBED_PREFIX_SUBSET)
-
-lemma ALG_EMBED_TWINS: "pred_set.UNION (alg_embed (SNOC True l)) (alg_embed (SNOC False l)) =
-alg_embed l"
-  by (import prob_algebra ALG_EMBED_TWINS)
-
-lemma ALGEBRA_EMBED_BASIC: "algebra_embed [] = EMPTY &
-algebra_embed [[]] = pred_set.UNIV &
-(ALL b. algebra_embed [[b]] = (%s. SHD s = b))"
-  by (import prob_algebra ALGEBRA_EMBED_BASIC)
-
-lemma ALGEBRA_EMBED_MEM: "algebra_embed b x ==> EX l. List.member b l & alg_embed l x"
-  by (import prob_algebra ALGEBRA_EMBED_MEM)
-
-lemma ALGEBRA_EMBED_APPEND: "algebra_embed (l1 @ l2) =
-pred_set.UNION (algebra_embed l1) (algebra_embed l2)"
-  by (import prob_algebra ALGEBRA_EMBED_APPEND)
-
-lemma ALGEBRA_EMBED_TLS: "algebra_embed (map (op # b) l) (SCONS h t) = (h = b & algebra_embed l t)"
-  by (import prob_algebra ALGEBRA_EMBED_TLS)
-
-lemma ALG_CANON_PREFS_EMBED: "algebra_embed (alg_canon_prefs l b) = algebra_embed (l # b)"
-  by (import prob_algebra ALG_CANON_PREFS_EMBED)
-
-lemma ALG_CANON_FIND_EMBED: "algebra_embed (alg_canon_find l b) = algebra_embed (l # b)"
-  by (import prob_algebra ALG_CANON_FIND_EMBED)
-
-lemma ALG_CANON1_EMBED: "algebra_embed (alg_canon1 x) = algebra_embed x"
-  by (import prob_algebra ALG_CANON1_EMBED)
-
-lemma ALG_CANON_MERGE_EMBED: "algebra_embed (alg_canon_merge l b) = algebra_embed (l # b)"
-  by (import prob_algebra ALG_CANON_MERGE_EMBED)
-
-lemma ALG_CANON2_EMBED: "algebra_embed (alg_canon2 x) = algebra_embed x"
-  by (import prob_algebra ALG_CANON2_EMBED)
-
-lemma ALG_CANON_EMBED: "algebra_embed (alg_canon l) = algebra_embed l"
-  by (import prob_algebra ALG_CANON_EMBED)
-
-lemma ALGEBRA_CANON_UNIV: "[| algebra_canon l; algebra_embed l = pred_set.UNIV |] ==> l = [[]]"
-  by (import prob_algebra ALGEBRA_CANON_UNIV)
-
-lemma ALG_CANON_REP: "(alg_canon b = alg_canon c) = (algebra_embed b = algebra_embed c)"
-  by (import prob_algebra ALG_CANON_REP)
-
-lemma ALGEBRA_CANON_EMBED_EMPTY: "algebra_canon l ==> (ALL v. ~ algebra_embed l v) = (l = [])"
-  by (import prob_algebra ALGEBRA_CANON_EMBED_EMPTY)
-
-lemma ALGEBRA_CANON_EMBED_UNIV: "algebra_canon l ==> All (algebra_embed l) = (l = [[]])"
-  by (import prob_algebra ALGEBRA_CANON_EMBED_UNIV)
-
-lemma MEASURABLE_ALGEBRA: "measurable (algebra_embed b)"
-  by (import prob_algebra MEASURABLE_ALGEBRA)
-
-lemma MEASURABLE_BASIC: "measurable EMPTY &
-measurable pred_set.UNIV & (ALL b. measurable (%s. SHD s = b))"
-  by (import prob_algebra MEASURABLE_BASIC)
-
-lemma MEASURABLE_SHD: "measurable (%s. SHD s = b)"
-  by (import prob_algebra MEASURABLE_SHD)
-
-lemma ALGEBRA_EMBED_COMPL: "EX l'. COMPL (algebra_embed l) = algebra_embed l'"
-  by (import prob_algebra ALGEBRA_EMBED_COMPL)
-
-lemma MEASURABLE_COMPL: "measurable (COMPL s) = measurable s"
-  by (import prob_algebra MEASURABLE_COMPL)
-
-lemma MEASURABLE_UNION: "measurable s & measurable t ==> measurable (pred_set.UNION s t)"
-  by (import prob_algebra MEASURABLE_UNION)
-
-lemma MEASURABLE_INTER: "measurable s & measurable t ==> measurable (pred_set.INTER s t)"
-  by (import prob_algebra MEASURABLE_INTER)
-
-lemma MEASURABLE_STL: "measurable (p o STL) = measurable p"
-  by (import prob_algebra MEASURABLE_STL)
-
-lemma MEASURABLE_SDROP: "measurable (p o SDROP n) = measurable p"
-  by (import prob_algebra MEASURABLE_SDROP)
-
-lemma MEASURABLE_INTER_HALVES: "(measurable (pred_set.INTER (%x. SHD x = True) p) &
- measurable (pred_set.INTER (%x. SHD x = False) p)) =
-measurable p"
-  by (import prob_algebra MEASURABLE_INTER_HALVES)
-
-lemma MEASURABLE_HALVES: "measurable
- (pred_set.UNION (pred_set.INTER (%x. SHD x = True) p)
-   (pred_set.INTER (%x. SHD x = False) q)) =
-(measurable (pred_set.INTER (%x. SHD x = True) p) &
- measurable (pred_set.INTER (%x. SHD x = False) q))"
-  by (import prob_algebra MEASURABLE_HALVES)
-
-lemma MEASURABLE_INTER_SHD: "measurable (pred_set.INTER (%x. SHD x = b) (p o STL)) = measurable p"
-  by (import prob_algebra MEASURABLE_INTER_SHD)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prob
-
-consts
-  alg_measure :: "bool list list => real" 
-
-specification (alg_measure_primdef: alg_measure) alg_measure_def: "alg_measure [] = 0 &
-(ALL l rest. alg_measure (l # rest) = (1 / 2) ^ length l + alg_measure rest)"
-  by (import prob alg_measure_def)
-
-consts
-  algebra_measure :: "bool list list => real" 
-
-defs
-  algebra_measure_primdef: "algebra_measure ==
-%b. prob_extra.inf
-     (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
-
-lemma algebra_measure_def: "algebra_measure b =
-prob_extra.inf
- (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
-  by (import prob algebra_measure_def)
-
-consts
-  prob :: "((nat => bool) => bool) => real" 
-
-defs
-  prob_primdef: "prob ==
-%s. real.sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
-
-lemma prob_def: "prob s =
-real.sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
-  by (import prob prob_def)
-
-lemma ALG_TWINS_MEASURE: "((1::real) / (2::real)) ^ length (SNOC True (l::bool list)) +
-((1::real) / (2::real)) ^ length (SNOC False l) =
-((1::real) / (2::real)) ^ length l"
-  by (import prob ALG_TWINS_MEASURE)
-
-lemma ALG_MEASURE_BASIC: "alg_measure [] = 0 &
-alg_measure [[]] = 1 & (ALL b. alg_measure [[b]] = 1 / 2)"
-  by (import prob ALG_MEASURE_BASIC)
-
-lemma ALG_MEASURE_POS: "0 <= alg_measure l"
-  by (import prob ALG_MEASURE_POS)
-
-lemma ALG_MEASURE_APPEND: "alg_measure (l1 @ l2) = alg_measure l1 + alg_measure l2"
-  by (import prob ALG_MEASURE_APPEND)
-
-lemma ALG_MEASURE_TLS: "2 * alg_measure (map (op # b) l) = alg_measure l"
-  by (import prob ALG_MEASURE_TLS)
-
-lemma ALG_CANON_PREFS_MONO: "alg_measure (alg_canon_prefs l b) <= alg_measure (l # b)"
-  by (import prob ALG_CANON_PREFS_MONO)
-
-lemma ALG_CANON_FIND_MONO: "alg_measure (alg_canon_find l b) <= alg_measure (l # b)"
-  by (import prob ALG_CANON_FIND_MONO)
-
-lemma ALG_CANON1_MONO: "alg_measure (alg_canon1 x) <= alg_measure x"
-  by (import prob ALG_CANON1_MONO)
-
-lemma ALG_CANON_MERGE_MONO: "alg_measure (alg_canon_merge l b) <= alg_measure (l # b)"
-  by (import prob ALG_CANON_MERGE_MONO)
-
-lemma ALG_CANON2_MONO: "alg_measure (alg_canon2 x) <= alg_measure x"
-  by (import prob ALG_CANON2_MONO)
-
-lemma ALG_CANON_MONO: "alg_measure (alg_canon l) <= alg_measure l"
-  by (import prob ALG_CANON_MONO)
-
-lemma ALGEBRA_MEASURE_DEF_ALT: "algebra_measure l = alg_measure (alg_canon l)"
-  by (import prob ALGEBRA_MEASURE_DEF_ALT)
-
-lemma ALGEBRA_MEASURE_BASIC: "algebra_measure [] = 0 &
-algebra_measure [[]] = 1 & (ALL b. algebra_measure [[b]] = 1 / 2)"
-  by (import prob ALGEBRA_MEASURE_BASIC)
-
-lemma ALGEBRA_CANON_MEASURE_MAX: "algebra_canon l ==> alg_measure l <= 1"
-  by (import prob ALGEBRA_CANON_MEASURE_MAX)
-
-lemma ALGEBRA_MEASURE_MAX: "algebra_measure l <= 1"
-  by (import prob ALGEBRA_MEASURE_MAX)
-
-lemma ALGEBRA_MEASURE_MONO_EMBED: "SUBSET (algebra_embed x) (algebra_embed xa)
-==> algebra_measure x <= algebra_measure xa"
-  by (import prob ALGEBRA_MEASURE_MONO_EMBED)
-
-lemma ALG_MEASURE_COMPL: "[| algebra_canon l; algebra_canon c;
-   COMPL (algebra_embed l) = algebra_embed c |]
-==> alg_measure l + alg_measure c = 1"
-  by (import prob ALG_MEASURE_COMPL)
-
-lemma ALG_MEASURE_ADDITIVE: "[| algebra_canon l; algebra_canon c; algebra_canon d;
-   pred_set.INTER (algebra_embed c) (algebra_embed d) = EMPTY &
-   algebra_embed l = pred_set.UNION (algebra_embed c) (algebra_embed d) |]
-==> alg_measure l = alg_measure c + alg_measure d"
-  by (import prob ALG_MEASURE_ADDITIVE)
-
-lemma PROB_ALGEBRA: "prob (algebra_embed l) = algebra_measure l"
-  by (import prob PROB_ALGEBRA)
-
-lemma PROB_BASIC: "prob EMPTY = 0 &
-prob pred_set.UNIV = 1 & (ALL b. prob (%s. SHD s = b) = 1 / 2)"
-  by (import prob PROB_BASIC)
-
-lemma PROB_ADDITIVE: "measurable s & measurable t & pred_set.INTER s t = EMPTY
-==> prob (pred_set.UNION s t) = prob s + prob t"
-  by (import prob PROB_ADDITIVE)
-
-lemma PROB_COMPL: "measurable s ==> prob (COMPL s) = 1 - prob s"
-  by (import prob PROB_COMPL)
-
-lemma PROB_SUP_EXISTS1: "EX x b. algebra_measure b = x & SUBSET (algebra_embed b) s"
-  by (import prob PROB_SUP_EXISTS1)
-
-lemma PROB_SUP_EXISTS2: "EX x. ALL r.
-         (EX b. algebra_measure b = r & SUBSET (algebra_embed b) s) -->
-         r <= x"
-  by (import prob PROB_SUP_EXISTS2)
-
-lemma PROB_LE_X: "(!!s'. measurable s' & SUBSET s' s ==> prob s' <= x) ==> prob s <= x"
-  by (import prob PROB_LE_X)
-
-lemma X_LE_PROB: "EX s'. measurable s' & SUBSET s' s & x <= prob s' ==> x <= prob s"
-  by (import prob X_LE_PROB)
-
-lemma PROB_SUBSET_MONO: "SUBSET s t ==> prob s <= prob t"
-  by (import prob PROB_SUBSET_MONO)
-
-lemma PROB_ALG: "prob (alg_embed x) = (1 / 2) ^ length x"
-  by (import prob PROB_ALG)
-
-lemma PROB_STL: "measurable p ==> prob (p o STL) = prob p"
-  by (import prob PROB_STL)
-
-lemma PROB_SDROP: "measurable p ==> prob (p o SDROP n) = prob p"
-  by (import prob PROB_SDROP)
-
-lemma PROB_INTER_HALVES: "measurable p
-==> prob (pred_set.INTER (%x. SHD x = True) p) +
-    prob (pred_set.INTER (%x. SHD x = False) p) =
-    prob p"
-  by (import prob PROB_INTER_HALVES)
-
-lemma PROB_INTER_SHD: "measurable p
-==> prob (pred_set.INTER (%x. SHD x = b) (p o STL)) = 1 / 2 * prob p"
-  by (import prob PROB_INTER_SHD)
-
-lemma ALGEBRA_MEASURE_POS: "0 <= algebra_measure l"
-  by (import prob ALGEBRA_MEASURE_POS)
-
-lemma ALGEBRA_MEASURE_RANGE: "0 <= algebra_measure l & algebra_measure l <= 1"
-  by (import prob ALGEBRA_MEASURE_RANGE)
-
-lemma PROB_POS: "0 <= prob p"
-  by (import prob PROB_POS)
-
-lemma PROB_MAX: "prob p <= 1"
-  by (import prob PROB_MAX)
-
-lemma PROB_RANGE: "0 <= prob p & prob p <= 1"
-  by (import prob PROB_RANGE)
-
-lemma ABS_PROB: "abs (prob p) = prob p"
-  by (import prob ABS_PROB)
-
-lemma PROB_SHD: "prob (%s. SHD s = b) = 1 / 2"
-  by (import prob PROB_SHD)
-
-lemma PROB_COMPL_LE1: "measurable p ==> (prob (COMPL p) <= r) = (1 - r <= prob p)"
-  by (import prob PROB_COMPL_LE1)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prob_pseudo
-
-consts
-  pseudo_linear_hd :: "nat => bool" 
-
-defs
-  pseudo_linear_hd_primdef: "pseudo_linear_hd == EVEN"
-
-lemma pseudo_linear_hd_def: "pseudo_linear_hd = EVEN"
-  by (import prob_pseudo pseudo_linear_hd_def)
-
-consts
-  pseudo_linear_tl :: "nat => nat => nat => nat => nat" 
-
-defs
-  pseudo_linear_tl_primdef: "pseudo_linear_tl == %a b n x. (a * x + b) mod (2 * n + 1)"
-
-lemma pseudo_linear_tl_def: "pseudo_linear_tl a b n x = (a * x + b) mod (2 * n + 1)"
-  by (import prob_pseudo pseudo_linear_tl_def)
-
-lemma PSEUDO_LINEAR1_EXECUTE: "EX x. (ALL xa. SHD (x xa) = pseudo_linear_hd xa) &
-      (ALL xa.
-          STL (x xa) =
-          x (pseudo_linear_tl
-              (NUMERAL
-                (NUMERAL_BIT1
-                  (NUMERAL_BIT1
-                    (NUMERAL_BIT1
-                      (NUMERAL_BIT2
-                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
-              (NUMERAL
-                (NUMERAL_BIT1
-                  (NUMERAL_BIT1
-                    (NUMERAL_BIT1
-                      (NUMERAL_BIT1
-                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
-              (NUMERAL
-                (NUMERAL_BIT1
-                  (NUMERAL_BIT1
-                    (NUMERAL_BIT1
-                      (NUMERAL_BIT1
-                        (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
-              xa))"
-  by (import prob_pseudo PSEUDO_LINEAR1_EXECUTE)
-
-consts
-  pseudo_linear1 :: "nat => nat => bool" 
-
-specification (pseudo_linear1_primdef: pseudo_linear1) pseudo_linear1_def: "(ALL x. SHD (pseudo_linear1 x) = pseudo_linear_hd x) &
-(ALL x.
-    STL (pseudo_linear1 x) =
-    pseudo_linear1
-     (pseudo_linear_tl
-       (NUMERAL
-         (NUMERAL_BIT1
-           (NUMERAL_BIT1
-             (NUMERAL_BIT1
-               (NUMERAL_BIT2 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
-       (NUMERAL
-         (NUMERAL_BIT1
-           (NUMERAL_BIT1
-             (NUMERAL_BIT1
-               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
-       (NUMERAL
-         (NUMERAL_BIT1
-           (NUMERAL_BIT1
-             (NUMERAL_BIT1
-               (NUMERAL_BIT1 (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
-       x))"
-  by (import prob_pseudo pseudo_linear1_def)
-
-consts
-  pseudo :: "nat => nat => bool" 
-
-defs
-  pseudo_primdef: "pseudo == pseudo_linear1"
-
-lemma pseudo_def: "pseudo = pseudo_linear1"
-  by (import prob_pseudo pseudo_def)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prob_indep
-
-consts
-  indep_set :: "((nat => bool) => bool) => ((nat => bool) => bool) => bool" 
-
-defs
-  indep_set_primdef: "indep_set ==
-%p q. measurable p &
-      measurable q & prob (pred_set.INTER p q) = prob p * prob q"
-
-lemma indep_set_def: "indep_set p q =
-(measurable p & measurable q & prob (pred_set.INTER p q) = prob p * prob q)"
-  by (import prob_indep indep_set_def)
-
-consts
-  alg_cover_set :: "bool list list => bool" 
-
-defs
-  alg_cover_set_primdef: "alg_cover_set ==
-%l. alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV"
-
-lemma alg_cover_set_def: "alg_cover_set l =
-(alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV)"
-  by (import prob_indep alg_cover_set_def)
-
-consts
-  alg_cover :: "bool list list => (nat => bool) => bool list" 
-
-defs
-  alg_cover_primdef: "alg_cover == %l x. SOME b. List.member l b & alg_embed b x"
-
-lemma alg_cover_def: "alg_cover l x = (SOME b. List.member l b & alg_embed b x)"
-  by (import prob_indep alg_cover_def)
-
-consts
-  indep :: "((nat => bool) => 'a * (nat => bool)) => bool" 
-
-defs
-  indep_primdef: "indep ==
-%f. EX l r.
-       alg_cover_set l &
-       (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s)))"
-
-lemma indep_def: "indep f =
-(EX l r.
-    alg_cover_set l &
-    (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s))))"
-  by (import prob_indep indep_def)
-
-lemma INDEP_SET_BASIC: "measurable p ==> indep_set EMPTY p & indep_set pred_set.UNIV p"
-  by (import prob_indep INDEP_SET_BASIC)
-
-lemma INDEP_SET_SYM: "indep_set p q = indep_set p q"
-  by (import prob_indep INDEP_SET_SYM)
-
-lemma INDEP_SET_DISJOINT_DECOMP: "indep_set p r & indep_set q r & pred_set.INTER p q = EMPTY
-==> indep_set (pred_set.UNION p q) r"
-  by (import prob_indep INDEP_SET_DISJOINT_DECOMP)
-
-lemma ALG_COVER_SET_BASIC: "~ alg_cover_set [] & alg_cover_set [[]] & alg_cover_set [[True], [False]]"
-  by (import prob_indep ALG_COVER_SET_BASIC)
-
-lemma ALG_COVER_WELL_DEFINED: "alg_cover_set l
-==> List.member l (alg_cover l x) & alg_embed (alg_cover l x) x"
-  by (import prob_indep ALG_COVER_WELL_DEFINED)
-
-lemma ALG_COVER_UNIV: "alg_cover [[]] = K []"
-  by (import prob_indep ALG_COVER_UNIV)
-
-lemma MAP_CONS_TL_FILTER: "~ List.member (l::bool list list) []
-==> map (op # (b::bool)) (map tl [x::bool list<-l. hd x = b]) =
-    [x::bool list<-l. hd x = b]"
-  by (import prob_indep MAP_CONS_TL_FILTER)
-
-lemma ALG_COVER_SET_CASES_THM: "alg_cover_set l =
-(l = [[]] |
- (EX x xa.
-     alg_cover_set x &
-     alg_cover_set xa & l = map (op # True) x @ map (op # False) xa))"
-  by (import prob_indep ALG_COVER_SET_CASES_THM)
-
-lemma ALG_COVER_SET_CASES: "[| P [[]] &
-   (ALL l1 l2.
-       alg_cover_set l1 &
-       alg_cover_set l2 &
-       alg_cover_set (map (op # True) l1 @ map (op # False) l2) -->
-       P (map (op # True) l1 @ map (op # False) l2));
-   alg_cover_set l |]
-==> P l"
-  by (import prob_indep ALG_COVER_SET_CASES)
-
-lemma ALG_COVER_SET_INDUCTION: "[| P [[]] &
-   (ALL l1 l2.
-       alg_cover_set l1 &
-       alg_cover_set l2 &
-       P l1 &
-       P l2 & alg_cover_set (map (op # True) l1 @ map (op # False) l2) -->
-       P (map (op # True) l1 @ map (op # False) l2));
-   alg_cover_set l |]
-==> P l"
-  by (import prob_indep ALG_COVER_SET_INDUCTION)
-
-lemma ALG_COVER_EXISTS_UNIQUE: "alg_cover_set l ==> EX! x. List.member l x & alg_embed x s"
-  by (import prob_indep ALG_COVER_EXISTS_UNIQUE)
-
-lemma ALG_COVER_UNIQUE: "alg_cover_set l & List.member l x & alg_embed x s ==> alg_cover l s = x"
-  by (import prob_indep ALG_COVER_UNIQUE)
-
-lemma ALG_COVER_STEP: "alg_cover_set l1 & alg_cover_set l2
-==> alg_cover (map (op # True) l1 @ map (op # False) l2) (SCONS h t) =
-    (if h then True # alg_cover l1 t else False # alg_cover l2 t)"
-  by (import prob_indep ALG_COVER_STEP)
-
-lemma ALG_COVER_HEAD: "alg_cover_set l ==> f o alg_cover l = algebra_embed (filter f l)"
-  by (import prob_indep ALG_COVER_HEAD)
-
-lemma ALG_COVER_TAIL_STEP: "alg_cover_set l1 & alg_cover_set l2
-==> q o
-    (%x. SDROP
-          (length (alg_cover (map (op # True) l1 @ map (op # False) l2) x))
-          x) =
-    pred_set.UNION
-     (pred_set.INTER (%x. SHD x = True)
-       (q o ((%x. SDROP (length (alg_cover l1 x)) x) o STL)))
-     (pred_set.INTER (%x. SHD x = False)
-       (q o ((%x. SDROP (length (alg_cover l2 x)) x) o STL)))"
-  by (import prob_indep ALG_COVER_TAIL_STEP)
-
-lemma ALG_COVER_TAIL_MEASURABLE: "alg_cover_set l
-==> measurable (q o (%x. SDROP (length (alg_cover l x)) x)) = measurable q"
-  by (import prob_indep ALG_COVER_TAIL_MEASURABLE)
-
-lemma ALG_COVER_TAIL_PROB: "[| alg_cover_set l; measurable q |]
-==> prob (q o (%x. SDROP (length (alg_cover l x)) x)) = prob q"
-  by (import prob_indep ALG_COVER_TAIL_PROB)
-
-lemma INDEP_INDEP_SET_LEMMA: "[| alg_cover_set l; measurable q; List.member l x |]
-==> prob
-     (pred_set.INTER (alg_embed x)
-       (q o (%x. SDROP (length (alg_cover l x)) x))) =
-    (1 / 2) ^ length x * prob q"
-  by (import prob_indep INDEP_INDEP_SET_LEMMA)
-
-lemma INDEP_SET_LIST: "alg_sorted l &
-alg_prefixfree l &
-measurable q & (ALL x. List.member l x --> indep_set (alg_embed x) q)
-==> indep_set (algebra_embed l) q"
-  by (import prob_indep INDEP_SET_LIST)
-
-lemma INDEP_INDEP_SET: "indep f & measurable q ==> indep_set (p o (fst o f)) (q o (snd o f))"
-  by (import prob_indep INDEP_INDEP_SET)
-
-lemma INDEP_UNIT: "indep (UNIT x)"
-  by (import prob_indep INDEP_UNIT)
-
-lemma INDEP_SDEST: "indep SDEST"
-  by (import prob_indep INDEP_SDEST)
-
-lemma BIND_STEP: "BIND SDEST (%k. f o SCONS k) = f"
-  by (import prob_indep BIND_STEP)
-
-lemma INDEP_BIND_SDEST: "(!!x. indep (f x)) ==> indep (BIND SDEST f)"
-  by (import prob_indep INDEP_BIND_SDEST)
-
-lemma INDEP_BIND: "indep f & (ALL x. indep (g x)) ==> indep (BIND f g)"
-  by (import prob_indep INDEP_BIND)
-
-lemma INDEP_PROB: "indep f & measurable q
-==> prob (pred_set.INTER (p o (fst o f)) (q o (snd o f))) =
-    prob (p o (fst o f)) * prob q"
-  by (import prob_indep INDEP_PROB)
-
-lemma INDEP_MEASURABLE1: "indep f ==> measurable (p o (fst o f))"
-  by (import prob_indep INDEP_MEASURABLE1)
-
-lemma INDEP_MEASURABLE2: "indep f & measurable q ==> measurable (q o (snd o f))"
-  by (import prob_indep INDEP_MEASURABLE2)
-
-lemma PROB_INDEP_BOUND: "indep f
-==> prob (%s. fst (f s) < Suc n) =
-    prob (%s. fst (f s) < n) + prob (%s. fst (f s) = n)"
-  by (import prob_indep PROB_INDEP_BOUND)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" prob_uniform
-
-consts
-  unif_bound :: "nat => nat" 
-
-defs
-  unif_bound_primdef: "unif_bound ==
-WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
- (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
-
-lemma unif_bound_primitive_def: "unif_bound =
-WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
- (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
-  by (import prob_uniform unif_bound_primitive_def)
-
-lemma unif_bound_def: "unif_bound 0 = 0 & unif_bound (Suc v) = Suc (unif_bound (Suc v div 2))"
-  by (import prob_uniform unif_bound_def)
-
-lemma unif_bound_ind: "P 0 & (ALL v. P (Suc v div 2) --> P (Suc v)) ==> P x"
-  by (import prob_uniform unif_bound_ind)
-
-definition
-  unif_tupled :: "nat * (nat => bool) => nat * (nat => bool)"  where
-  "unif_tupled ==
-WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
- (%unif_tupled (v, v1).
-     case v of 0 => (0, v1)
-     | Suc v3 =>
-         let (m, s') = unif_tupled (Suc v3 div 2, v1)
-         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
-
-lemma unif_tupled_primitive_def: "unif_tupled =
-WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
- (%unif_tupled (v, v1).
-     case v of 0 => (0, v1)
-     | Suc v3 =>
-         let (m, s') = unif_tupled (Suc v3 div 2, v1)
-         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
-  by (import prob_uniform unif_tupled_primitive_def)
-
-consts
-  unif :: "nat => (nat => bool) => nat * (nat => bool)" 
-
-defs
-  unif_primdef: "unif == %x x1. unif_tupled (x, x1)"
-
-lemma unif_curried_def: "unif x x1 = unif_tupled (x, x1)"
-  by (import prob_uniform unif_curried_def)
-
-lemma unif_def: "unif 0 s = (0, s) &
-unif (Suc v2) s =
-(let (m, s') = unif (Suc v2 div 2) s
- in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
-  by (import prob_uniform unif_def)
-
-lemma unif_ind: "All ((P::nat => (nat => bool) => bool) (0::nat)) &
-(ALL (v2::nat) s::nat => bool. P (Suc v2 div (2::nat)) s --> P (Suc v2) s)
-==> P (v::nat) (x::nat => bool)"
-  by (import prob_uniform unif_ind)
-
-definition
-  uniform_tupled :: "nat * nat * (nat => bool) => nat * (nat => bool)"  where
-  "uniform_tupled ==
-WFREC
- (SOME R.
-     WF R &
-     (ALL t s n res s'.
-         (res, s') = unif n s & ~ res < Suc n -->
-         R (t, Suc n, s') (Suc t, Suc n, s)))
- (%uniform_tupled (v, v1).
-     case v of 0 => case v1 of (0, v4) => ARB | (Suc v5, v4) => (0, v4)
-     | Suc v2 =>
-         case v1 of (0, v8) => ARB
-         | (Suc v9, v8) =>
-             let (res, s') = unif v9 v8
-             in if res < Suc v9 then (res, s')
-                else uniform_tupled (v2, Suc v9, s'))"
-
-lemma uniform_tupled_primitive_def: "uniform_tupled =
-WFREC
- (SOME R.
-     WF R &
-     (ALL t s n res s'.
-         (res, s') = unif n s & ~ res < Suc n -->
-         R (t, Suc n, s') (Suc t, Suc n, s)))
- (%uniform_tupled (v, v1).
-     case v of 0 => case v1 of (0, v4) => ARB | (Suc v5, v4) => (0, v4)
-     | Suc v2 =>
-         case v1 of (0, v8) => ARB
-         | (Suc v9, v8) =>
-             let (res, s') = unif v9 v8
-             in if res < Suc v9 then (res, s')
-                else uniform_tupled (v2, Suc v9, s'))"
-  by (import prob_uniform uniform_tupled_primitive_def)
-
-consts
-  uniform :: "nat => nat => (nat => bool) => nat * (nat => bool)" 
-
-defs
-  uniform_primdef: "uniform == %x x1 x2. uniform_tupled (x, x1, x2)"
-
-lemma uniform_curried_def: "uniform x x1 x2 = uniform_tupled (x, x1, x2)"
-  by (import prob_uniform uniform_curried_def)
-
-lemma uniform_ind: "(ALL x. All (P (Suc x) 0)) &
-All (P 0 0) &
-(ALL x. All (P 0 (Suc x))) &
-(ALL x xa xb.
-    (ALL xc xd.
-        (xc, xd) = unif xa xb & ~ xc < Suc xa --> P x (Suc xa) xd) -->
-    P (Suc x) (Suc xa) xb)
-==> P x xa xb"
-  by (import prob_uniform uniform_ind)
-
-lemma uniform_def: "uniform 0 (Suc n) s = (0, s) &
-uniform (Suc t) (Suc n) s =
-(let (xa, x) = unif n s
- in if xa < Suc n then (xa, x) else uniform t (Suc n) x)"
-  by (import prob_uniform uniform_def)
-
-lemma SUC_DIV_TWO_ZERO: "(Suc n div 2 = 0) = (n = 0)"
-  by (import prob_uniform SUC_DIV_TWO_ZERO)
-
-lemma UNIF_BOUND_LOWER: "n < 2 ^ unif_bound n"
-  by (import prob_uniform UNIF_BOUND_LOWER)
-
-lemma UNIF_BOUND_LOWER_SUC: "Suc n <= 2 ^ unif_bound n"
-  by (import prob_uniform UNIF_BOUND_LOWER_SUC)
-
-lemma UNIF_BOUND_UPPER: "n ~= 0 ==> 2 ^ unif_bound n <= 2 * n"
-  by (import prob_uniform UNIF_BOUND_UPPER)
-
-lemma UNIF_BOUND_UPPER_SUC: "2 ^ unif_bound n <= Suc (2 * n)"
-  by (import prob_uniform UNIF_BOUND_UPPER_SUC)
-
-lemma UNIF_DEF_MONAD: "unif 0 = UNIT 0 &
-(ALL n.
-    unif (Suc n) =
-    BIND (unif (Suc n div 2))
-     (%m. BIND SDEST (%b. UNIT (if b then 2 * m + 1 else 2 * m))))"
-  by (import prob_uniform UNIF_DEF_MONAD)
-
-lemma UNIFORM_DEF_MONAD: "(ALL x. uniform 0 (Suc x) = UNIT 0) &
-(ALL x xa.
-    uniform (Suc x) (Suc xa) =
-    BIND (unif xa) (%m. if m < Suc xa then UNIT m else uniform x (Suc xa)))"
-  by (import prob_uniform UNIFORM_DEF_MONAD)
-
-lemma INDEP_UNIF: "indep (unif n)"
-  by (import prob_uniform INDEP_UNIF)
-
-lemma INDEP_UNIFORM: "indep (uniform t (Suc n))"
-  by (import prob_uniform INDEP_UNIFORM)
-
-lemma PROB_UNIF: "prob (%s. fst (unif n s) = k) =
-(if k < 2 ^ unif_bound n then (1 / 2) ^ unif_bound n else 0)"
-  by (import prob_uniform PROB_UNIF)
-
-lemma UNIF_RANGE: "fst (unif n s) < 2 ^ unif_bound n"
-  by (import prob_uniform UNIF_RANGE)
-
-lemma PROB_UNIF_PAIR: "(prob (%s. fst (unif n s) = k) = prob (%s. fst (unif n s) = k')) =
-((k < 2 ^ unif_bound n) = (k' < 2 ^ unif_bound n))"
-  by (import prob_uniform PROB_UNIF_PAIR)
-
-lemma PROB_UNIF_BOUND: "k <= 2 ^ unif_bound n
-==> prob (%s. fst (unif n s) < k) = real k * (1 / 2) ^ unif_bound n"
-  by (import prob_uniform PROB_UNIF_BOUND)
-
-lemma PROB_UNIF_GOOD: "1 / 2 <= prob (%s. fst (unif n s) < Suc n)"
-  by (import prob_uniform PROB_UNIF_GOOD)
-
-lemma UNIFORM_RANGE: "fst (uniform t (Suc n) s) < Suc n"
-  by (import prob_uniform UNIFORM_RANGE)
-
-lemma PROB_UNIFORM_LOWER_BOUND: "[| !!k. k < Suc n ==> prob (%s. fst (uniform t (Suc n) s) = k) < b;
-   m < Suc n |]
-==> prob (%s. fst (uniform t (Suc n) s) < Suc m) < real (Suc m) * b"
-  by (import prob_uniform PROB_UNIFORM_LOWER_BOUND)
-
-lemma PROB_UNIFORM_UPPER_BOUND: "[| !!k. k < Suc n ==> b < prob (%s. fst (uniform t (Suc n) s) = k);
-   m < Suc n |]
-==> real (Suc m) * b < prob (%s. fst (uniform t (Suc n) s) < Suc m)"
-  by (import prob_uniform PROB_UNIFORM_UPPER_BOUND)
-
-lemma PROB_UNIFORM_PAIR_SUC: "k < Suc n & k' < Suc n
-==> abs (prob (%s. fst (uniform t (Suc n) s) = k) -
-         prob (%s. fst (uniform t (Suc n) s) = k'))
-    <= (1 / 2) ^ t"
-  by (import prob_uniform PROB_UNIFORM_PAIR_SUC)
-
-lemma PROB_UNIFORM_SUC: "k < Suc n
-==> abs (prob (%s. fst (uniform t (Suc n) s) = k) - 1 / real (Suc n))
-    <= (1 / 2) ^ t"
-  by (import prob_uniform PROB_UNIFORM_SUC)
-
-lemma PROB_UNIFORM: "k < n
-==> abs (prob (%s. fst (uniform t n s) = k) - 1 / real n) <= (1 / 2) ^ t"
-  by (import prob_uniform PROB_UNIFORM)
-
-;end_setup
-
-end
-
--- a/src/HOL/Import/HOL/HOL4Real.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2950 +0,0 @@
-(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
-
-theory HOL4Real imports HOL4Base begin
-
-setup_theory "~~/src/HOL/Import/HOL" realax
-
-lemma HREAL_RDISTRIB: "hreal_mul (hreal_add x y) z = hreal_add (hreal_mul x z) (hreal_mul y z)"
-  by (import realax HREAL_RDISTRIB)
-
-lemma HREAL_EQ_ADDL: "x ~= hreal_add x y"
-  by (import realax HREAL_EQ_ADDL)
-
-lemma HREAL_EQ_LADD: "(hreal_add x y = hreal_add x z) = (y = z)"
-  by (import realax HREAL_EQ_LADD)
-
-lemma HREAL_LT_REFL: "~ hreal_lt x x"
-  by (import realax HREAL_LT_REFL)
-
-lemma HREAL_LT_ADDL: "hreal_lt x (hreal_add x y)"
-  by (import realax HREAL_LT_ADDL)
-
-lemma HREAL_LT_NE: "hreal_lt x y ==> x ~= y"
-  by (import realax HREAL_LT_NE)
-
-lemma HREAL_LT_ADDR: "~ hreal_lt (hreal_add x y) x"
-  by (import realax HREAL_LT_ADDR)
-
-lemma HREAL_LT_GT: "hreal_lt x y ==> ~ hreal_lt y x"
-  by (import realax HREAL_LT_GT)
-
-lemma HREAL_LT_ADD2: "hreal_lt x1 y1 & hreal_lt x2 y2
-==> hreal_lt (hreal_add x1 x2) (hreal_add y1 y2)"
-  by (import realax HREAL_LT_ADD2)
-
-lemma HREAL_LT_LADD: "hreal_lt (hreal_add x y) (hreal_add x z) = hreal_lt y z"
-  by (import realax HREAL_LT_LADD)
-
-definition
-  treal_0 :: "hreal * hreal"  where
-  "treal_0 == (hreal_1, hreal_1)"
-
-lemma treal_0: "treal_0 = (hreal_1, hreal_1)"
-  by (import realax treal_0)
-
-definition
-  treal_1 :: "hreal * hreal"  where
-  "treal_1 == (hreal_add hreal_1 hreal_1, hreal_1)"
-
-lemma treal_1: "treal_1 = (hreal_add hreal_1 hreal_1, hreal_1)"
-  by (import realax treal_1)
-
-definition
-  treal_neg :: "hreal * hreal => hreal * hreal"  where
-  "treal_neg == %(x, y). (y, x)"
-
-lemma treal_neg: "treal_neg (x, y) = (y, x)"
-  by (import realax treal_neg)
-
-definition
-  treal_add :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
-  "treal_add == %(x1, y1) (x2, y2). (hreal_add x1 x2, hreal_add y1 y2)"
-
-lemma treal_add: "treal_add (x1, y1) (x2, y2) = (hreal_add x1 x2, hreal_add y1 y2)"
-  by (import realax treal_add)
-
-definition
-  treal_mul :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
-  "treal_mul ==
-%(x1, y1) (x2, y2).
-   (hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
-    hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
-
-lemma treal_mul: "treal_mul (x1, y1) (x2, y2) =
-(hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
- hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
-  by (import realax treal_mul)
-
-definition
-  treal_lt :: "hreal * hreal => hreal * hreal => bool"  where
-  "treal_lt == %(x1, y1) (x2, y2). hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
-
-lemma treal_lt: "treal_lt (x1, y1) (x2, y2) = hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
-  by (import realax treal_lt)
-
-definition
-  treal_inv :: "hreal * hreal => hreal * hreal"  where
-  "treal_inv ==
-%(x, y).
-   if x = y then treal_0
-   else if hreal_lt y x
-        then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
-        else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1)"
-
-lemma treal_inv: "treal_inv (x, y) =
-(if x = y then treal_0
- else if hreal_lt y x
-      then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
-      else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1))"
-  by (import realax treal_inv)
-
-definition
-  treal_eq :: "hreal * hreal => hreal * hreal => bool"  where
-  "treal_eq == %(x1, y1) (x2, y2). hreal_add x1 y2 = hreal_add x2 y1"
-
-lemma treal_eq: "treal_eq (x1, y1) (x2, y2) = (hreal_add x1 y2 = hreal_add x2 y1)"
-  by (import realax treal_eq)
-
-lemma TREAL_EQ_REFL: "treal_eq x x"
-  by (import realax TREAL_EQ_REFL)
-
-lemma TREAL_EQ_SYM: "treal_eq x y = treal_eq y x"
-  by (import realax TREAL_EQ_SYM)
-
-lemma TREAL_EQ_TRANS: "treal_eq x y & treal_eq y z ==> treal_eq x z"
-  by (import realax TREAL_EQ_TRANS)
-
-lemma TREAL_EQ_EQUIV: "treal_eq p q = (treal_eq p = treal_eq q)"
-  by (import realax TREAL_EQ_EQUIV)
-
-lemma TREAL_EQ_AP: "p = q ==> treal_eq p q"
-  by (import realax TREAL_EQ_AP)
-
-lemma TREAL_10: "~ treal_eq treal_1 treal_0"
-  by (import realax TREAL_10)
-
-lemma TREAL_ADD_SYM: "treal_add x y = treal_add y x"
-  by (import realax TREAL_ADD_SYM)
-
-lemma TREAL_MUL_SYM: "treal_mul x y = treal_mul y x"
-  by (import realax TREAL_MUL_SYM)
-
-lemma TREAL_ADD_ASSOC: "treal_add x (treal_add y z) = treal_add (treal_add x y) z"
-  by (import realax TREAL_ADD_ASSOC)
-
-lemma TREAL_MUL_ASSOC: "treal_mul x (treal_mul y z) = treal_mul (treal_mul x y) z"
-  by (import realax TREAL_MUL_ASSOC)
-
-lemma TREAL_LDISTRIB: "treal_mul x (treal_add y z) = treal_add (treal_mul x y) (treal_mul x z)"
-  by (import realax TREAL_LDISTRIB)
-
-lemma TREAL_ADD_LID: "treal_eq (treal_add treal_0 x) x"
-  by (import realax TREAL_ADD_LID)
-
-lemma TREAL_MUL_LID: "treal_eq (treal_mul treal_1 x) x"
-  by (import realax TREAL_MUL_LID)
-
-lemma TREAL_ADD_LINV: "treal_eq (treal_add (treal_neg x) x) treal_0"
-  by (import realax TREAL_ADD_LINV)
-
-lemma TREAL_INV_0: "treal_eq (treal_inv treal_0) treal_0"
-  by (import realax TREAL_INV_0)
-
-lemma TREAL_MUL_LINV: "~ treal_eq x treal_0 ==> treal_eq (treal_mul (treal_inv x) x) treal_1"
-  by (import realax TREAL_MUL_LINV)
-
-lemma TREAL_LT_TOTAL: "treal_eq x y | treal_lt x y | treal_lt y x"
-  by (import realax TREAL_LT_TOTAL)
-
-lemma TREAL_LT_REFL: "~ treal_lt x x"
-  by (import realax TREAL_LT_REFL)
-
-lemma TREAL_LT_TRANS: "treal_lt x y & treal_lt y z ==> treal_lt x z"
-  by (import realax TREAL_LT_TRANS)
-
-lemma TREAL_LT_ADD: "treal_lt y z ==> treal_lt (treal_add x y) (treal_add x z)"
-  by (import realax TREAL_LT_ADD)
-
-lemma TREAL_LT_MUL: "treal_lt treal_0 x & treal_lt treal_0 y ==> treal_lt treal_0 (treal_mul x y)"
-  by (import realax TREAL_LT_MUL)
-
-definition
-  treal_of_hreal :: "hreal => hreal * hreal"  where
-  "treal_of_hreal == %x. (hreal_add x hreal_1, hreal_1)"
-
-lemma treal_of_hreal: "treal_of_hreal x = (hreal_add x hreal_1, hreal_1)"
-  by (import realax treal_of_hreal)
-
-definition
-  hreal_of_treal :: "hreal * hreal => hreal"  where
-  "hreal_of_treal == %(x, y). SOME d. x = hreal_add y d"
-
-lemma hreal_of_treal: "hreal_of_treal (x, y) = (SOME d. x = hreal_add y d)"
-  by (import realax hreal_of_treal)
-
-lemma TREAL_BIJ: "(ALL h. hreal_of_treal (treal_of_hreal h) = h) &
-(ALL r. treal_lt treal_0 r = treal_eq (treal_of_hreal (hreal_of_treal r)) r)"
-  by (import realax TREAL_BIJ)
-
-lemma TREAL_ISO: "hreal_lt h i ==> treal_lt (treal_of_hreal h) (treal_of_hreal i)"
-  by (import realax TREAL_ISO)
-
-lemma TREAL_BIJ_WELLDEF: "treal_eq h i ==> hreal_of_treal h = hreal_of_treal i"
-  by (import realax TREAL_BIJ_WELLDEF)
-
-lemma TREAL_NEG_WELLDEF: "treal_eq x1 x2 ==> treal_eq (treal_neg x1) (treal_neg x2)"
-  by (import realax TREAL_NEG_WELLDEF)
-
-lemma TREAL_ADD_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_add x1 y) (treal_add x2 y)"
-  by (import realax TREAL_ADD_WELLDEFR)
-
-lemma TREAL_ADD_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
-==> treal_eq (treal_add x1 y1) (treal_add x2 y2)"
-  by (import realax TREAL_ADD_WELLDEF)
-
-lemma TREAL_MUL_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_mul x1 y) (treal_mul x2 y)"
-  by (import realax TREAL_MUL_WELLDEFR)
-
-lemma TREAL_MUL_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
-==> treal_eq (treal_mul x1 y1) (treal_mul x2 y2)"
-  by (import realax TREAL_MUL_WELLDEF)
-
-lemma TREAL_LT_WELLDEFR: "treal_eq x1 x2 ==> treal_lt x1 y = treal_lt x2 y"
-  by (import realax TREAL_LT_WELLDEFR)
-
-lemma TREAL_LT_WELLDEFL: "treal_eq y1 y2 ==> treal_lt x y1 = treal_lt x y2"
-  by (import realax TREAL_LT_WELLDEFL)
-
-lemma TREAL_LT_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2 ==> treal_lt x1 y1 = treal_lt x2 y2"
-  by (import realax TREAL_LT_WELLDEF)
-
-lemma TREAL_INV_WELLDEF: "treal_eq x1 x2 ==> treal_eq (treal_inv x1) (treal_inv x2)"
-  by (import realax TREAL_INV_WELLDEF)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" real
-
-lemma REAL_0: "(0::real) = (0::real)"
-  by (import real REAL_0)
-
-lemma REAL_1: "(1::real) = (1::real)"
-  by (import real REAL_1)
-
-lemma REAL_ADD_LID_UNIQ: "((x::real) + (y::real) = y) = (x = (0::real))"
-  by (import real REAL_ADD_LID_UNIQ)
-
-lemma REAL_ADD_RID_UNIQ: "((x::real) + (y::real) = x) = (y = (0::real))"
-  by (import real REAL_ADD_RID_UNIQ)
-
-lemma REAL_LT_ANTISYM: "~ ((x::real) < (y::real) & y < x)"
-  by (import real REAL_LT_ANTISYM)
-
-lemma REAL_LTE_TOTAL: "(x::real) < (y::real) | y <= x"
-  by (import real REAL_LTE_TOTAL)
-
-lemma REAL_LET_ANTISYM: "~ ((x::real) < (y::real) & y <= x)"
-  by (import real REAL_LET_ANTISYM)
-
-lemma REAL_LTE_ANTSYM: "~ ((x::real) <= (y::real) & y < x)"
-  by (import real REAL_LTE_ANTSYM)
-
-lemma REAL_LT_NEGTOTAL: "(x::real) = (0::real) | (0::real) < x | (0::real) < - x"
-  by (import real REAL_LT_NEGTOTAL)
-
-lemma REAL_LE_NEGTOTAL: "(0::real) <= (x::real) | (0::real) <= - x"
-  by (import real REAL_LE_NEGTOTAL)
-
-lemma REAL_LT_ADDNEG: "((y::real) < (x::real) + - (z::real)) = (y + z < x)"
-  by (import real REAL_LT_ADDNEG)
-
-lemma REAL_LT_ADDNEG2: "((x::real) + - (y::real) < (z::real)) = (x < z + y)"
-  by (import real REAL_LT_ADDNEG2)
-
-lemma REAL_LT_ADD1: "(x::real) <= (y::real) ==> x < y + (1::real)"
-  by (import real REAL_LT_ADD1)
-
-lemma REAL_SUB_ADD2: "(y::real) + ((x::real) - y) = x"
-  by (import real REAL_SUB_ADD2)
-
-lemma REAL_SUB_LT: "((0::real) < (x::real) - (y::real)) = (y < x)"
-  by (import real REAL_SUB_LT)
-
-lemma REAL_SUB_LE: "((0::real) <= (x::real) - (y::real)) = (y <= x)"
-  by (import real REAL_SUB_LE)
-
-lemma REAL_ADD_SUB: "(x::real) + (y::real) - x = y"
-  by (import real REAL_ADD_SUB)
-
-lemma REAL_NEG_EQ: "(- (x::real) = (y::real)) = (x = - y)"
-  by (import real REAL_NEG_EQ)
-
-lemma REAL_LT_LMUL_0: "(0::real) < (x::real) ==> ((0::real) < x * (y::real)) = ((0::real) < y)"
-  by (import real REAL_LT_LMUL_0)
-
-lemma REAL_LT_RMUL_0: "(0::real) < (y::real) ==> ((0::real) < (x::real) * y) = ((0::real) < x)"
-  by (import real REAL_LT_RMUL_0)
-
-lemma REAL_LINV_UNIQ: "(x::real) * (y::real) = (1::real) ==> x = inverse y"
-  by (import real REAL_LINV_UNIQ)
-
-lemma REAL_LE_INV: "(0::real) <= (x::real) ==> (0::real) <= inverse x"
-  by (import real REAL_LE_INV)
-
-lemma REAL_LE_ADDR: "((x::real) <= x + (y::real)) = ((0::real) <= y)"
-  by (import real REAL_LE_ADDR)
-
-lemma REAL_LE_ADDL: "((y::real) <= (x::real) + y) = ((0::real) <= x)"
-  by (import real REAL_LE_ADDL)
-
-lemma REAL_LT_ADDR: "((x::real) < x + (y::real)) = ((0::real) < y)"
-  by (import real REAL_LT_ADDR)
-
-lemma REAL_LT_ADDL: "((y::real) < (x::real) + y) = ((0::real) < x)"
-  by (import real REAL_LT_ADDL)
-
-lemma REAL_LT_NZ: "(real (n::nat) ~= (0::real)) = ((0::real) < real n)"
-  by (import real REAL_LT_NZ)
-
-lemma REAL_NZ_IMP_LT: "(n::nat) ~= (0::nat) ==> (0::real) < real n"
-  by (import real REAL_NZ_IMP_LT)
-
-lemma REAL_LT_RDIV_0: "(0::real) < (z::real) ==> ((0::real) < (y::real) / z) = ((0::real) < y)"
-  by (import real REAL_LT_RDIV_0)
-
-lemma REAL_LT_RDIV: "(0::real) < (z::real) ==> ((x::real) / z < (y::real) / z) = (x < y)"
-  by (import real REAL_LT_RDIV)
-
-lemma REAL_LT_FRACTION_0: "(n::nat) ~= (0::nat) ==> ((0::real) < (d::real) / real n) = ((0::real) < d)"
-  by (import real REAL_LT_FRACTION_0)
-
-lemma REAL_LT_MULTIPLE: "(1::nat) < (x::nat) ==> ((xa::real) < real x * xa) = ((0::real) < xa)"
-  by (import real REAL_LT_MULTIPLE)
-
-lemma REAL_LT_FRACTION: "(1::nat) < (n::nat) ==> ((d::real) / real n < d) = ((0::real) < d)"
-  by (import real REAL_LT_FRACTION)
-
-lemma REAL_LT_HALF2: "((d::real) / (2::real) < d) = ((0::real) < d)"
-  by (import real REAL_LT_HALF2)
-
-lemma REAL_DIV_LMUL: "(y::real) ~= (0::real) ==> y * ((x::real) / y) = x"
-  by (import real REAL_DIV_LMUL)
-
-lemma REAL_DIV_RMUL: "(y::real) ~= (0::real) ==> (x::real) / y * y = x"
-  by (import real REAL_DIV_RMUL)
-
-lemma REAL_DOWN: "(0::real) < (x::real) ==> EX xa>0::real. xa < x"
-  by (import real REAL_DOWN)
-
-lemma REAL_SUB_SUB: "(x::real) - (y::real) - x = - y"
-  by (import real REAL_SUB_SUB)
-
-lemma REAL_SUB_LNEG: "- (x::real) - (y::real) = - (x + y)"
-  by (import real REAL_SUB_LNEG)
-
-lemma REAL_SUB_NEG2: "- (x::real) - - (y::real) = y - x"
-  by (import real REAL_SUB_NEG2)
-
-lemma REAL_SUB_TRIANGLE: "(a::real) - (b::real) + (b - (c::real)) = a - c"
-  by (import real REAL_SUB_TRIANGLE)
-
-lemma REAL_INV_MUL: "(x::real) ~= (0::real) & (y::real) ~= (0::real)
-==> inverse (x * y) = inverse x * inverse y"
-  by (import real REAL_INV_MUL)
-
-lemma REAL_SUB_INV2: "(x::real) ~= (0::real) & (y::real) ~= (0::real)
-==> inverse x - inverse y = (y - x) / (x * y)"
-  by (import real REAL_SUB_INV2)
-
-lemma REAL_SUB_SUB2: "(x::real) - (x - (y::real)) = y"
-  by (import real REAL_SUB_SUB2)
-
-lemma REAL_ADD_SUB2: "(x::real) - (x + (y::real)) = - y"
-  by (import real REAL_ADD_SUB2)
-
-lemma REAL_LE_DIV: "(0::real) <= (x::real) & (0::real) <= (xa::real) ==> (0::real) <= x / xa"
-  by (import real REAL_LE_DIV)
-
-lemma REAL_LT_1: "(0::real) <= (x::real) & x < (y::real) ==> x / y < (1::real)"
-  by (import real REAL_LT_1)
-
-lemma REAL_POS_NZ: "(0::real) < (x::real) ==> x ~= (0::real)"
-  by (import real REAL_POS_NZ)
-
-lemma REAL_EQ_RMUL_IMP: "(z::real) ~= (0::real) & (x::real) * z = (y::real) * z ==> x = y"
-  by (import real REAL_EQ_RMUL_IMP)
-
-lemma REAL_EQ_LMUL_IMP: "(x::real) ~= (0::real) & x * (xa::real) = x * (xb::real) ==> xa = xb"
-  by (import real REAL_EQ_LMUL_IMP)
-
-lemma REAL_FACT_NZ: "real (FACT n) ~= 0"
-  by (import real REAL_FACT_NZ)
-
-lemma REAL_POASQ: "((0::real) < (x::real) * x) = (x ~= (0::real))"
-  by (import real REAL_POASQ)
-
-lemma REAL_DIV_MUL2: "(x::real) ~= (0::real) & (z::real) ~= (0::real)
-==> (y::real) / z = x * y / (x * z)"
-  by (import real REAL_DIV_MUL2)
-
-lemma REAL_MIDDLE1: "(a::real) <= (b::real) ==> a <= (a + b) / (2::real)"
-  by (import real REAL_MIDDLE1)
-
-lemma REAL_MIDDLE2: "(a::real) <= (b::real) ==> (a + b) / (2::real) <= b"
-  by (import real REAL_MIDDLE2)
-
-lemma ABS_LT_MUL2: "abs (w::real) < (y::real) & abs (x::real) < (z::real)
-==> abs (w * x) < y * z"
-  by (import real ABS_LT_MUL2)
-
-lemma ABS_REFL: "(abs (x::real) = x) = ((0::real) <= x)"
-  by (import real ABS_REFL)
-
-lemma ABS_BETWEEN: "((0::real) < (d::real) & (x::real) - d < (y::real) & y < x + d) =
-(abs (y - x) < d)"
-  by (import real ABS_BETWEEN)
-
-lemma ABS_BOUND: "abs ((x::real) - (y::real)) < (d::real) ==> y < x + d"
-  by (import real ABS_BOUND)
-
-lemma ABS_STILLNZ: "abs ((x::real) - (y::real)) < abs y ==> x ~= (0::real)"
-  by (import real ABS_STILLNZ)
-
-lemma ABS_CASES: "(x::real) = (0::real) | (0::real) < abs x"
-  by (import real ABS_CASES)
-
-lemma ABS_BETWEEN1: "(x::real) < (z::real) & abs ((y::real) - x) < z - x ==> y < z"
-  by (import real ABS_BETWEEN1)
-
-lemma ABS_SIGN: "abs ((x::real) - (y::real)) < y ==> (0::real) < x"
-  by (import real ABS_SIGN)
-
-lemma ABS_SIGN2: "abs ((x::real) - (y::real)) < - y ==> x < (0::real)"
-  by (import real ABS_SIGN2)
-
-lemma ABS_CIRCLE: "abs (h::real) < abs (y::real) - abs (x::real) ==> abs (x + h) < abs y"
-  by (import real ABS_CIRCLE)
-
-lemma ABS_BETWEEN2: "(x0::real) < (y0::real) &
-abs ((x::real) - x0) < (y0 - x0) / (2::real) &
-abs ((y::real) - y0) < (y0 - x0) / (2::real)
-==> x < y"
-  by (import real ABS_BETWEEN2)
-
-lemma POW_PLUS1: "0 < e ==> 1 + real n * e <= (1 + e) ^ n"
-  by (import real POW_PLUS1)
-
-lemma POW_M1: "abs ((- (1::real)) ^ (n::nat)) = (1::real)"
-  by (import real POW_M1)
-
-lemma REAL_LE1_POW2: "(1::real) <= (x::real) ==> (1::real) <= x ^ (2::nat)"
-  by (import real REAL_LE1_POW2)
-
-lemma REAL_LT1_POW2: "(1::real) < (x::real) ==> (1::real) < x ^ (2::nat)"
-  by (import real REAL_LT1_POW2)
-
-lemma POW_POS_LT: "(0::real) < (x::real) ==> (0::real) < x ^ Suc (n::nat)"
-  by (import real POW_POS_LT)
-
-lemma POW_LT: "(0::real) <= (x::real) & x < (y::real) ==> x ^ Suc (n::nat) < y ^ Suc n"
-  by (import real POW_LT)
-
-lemma POW_ZERO: "(x::real) ^ (n::nat) = (0::real) ==> x = (0::real)"
-  by (import real POW_ZERO)
-
-lemma POW_ZERO_EQ: "((x::real) ^ Suc (n::nat) = (0::real)) = (x = (0::real))"
-  by (import real POW_ZERO_EQ)
-
-lemma REAL_POW_LT2: "(n::nat) ~= (0::nat) & (0::real) <= (x::real) & x < (y::real)
-==> x ^ n < y ^ n"
-  by (import real REAL_POW_LT2)
-
-lemma REAL_POW_MONO_LT: "(1::real) < (x::real) & (m::nat) < (n::nat) ==> x ^ m < x ^ n"
-  by (import real REAL_POW_MONO_LT)
-
-lemma REAL_SUP_SOMEPOS: "(EX x::real. (P::real => bool) x & (0::real) < x) &
-(EX z::real. ALL x::real. P x --> x < z)
-==> EX s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s)"
-  by (import real REAL_SUP_SOMEPOS)
-
-lemma SUP_LEMMA1: "(!!y::real.
-    (EX x::real. (P::real => bool) (x + (d::real)) & y < x) =
-    (y < (s::real)))
-==> (EX x::real. P x & (y::real) < x) = (y < s + d)"
-  by (import real SUP_LEMMA1)
-
-lemma SUP_LEMMA2: "Ex (P::real => bool) ==> EX (d::real) x::real. P (x + d) & (0::real) < x"
-  by (import real SUP_LEMMA2)
-
-lemma SUP_LEMMA3: "EX z::real. ALL x::real. (P::real => bool) x --> x < z
-==> EX x::real. ALL xa::real. P (xa + (d::real)) --> xa < x"
-  by (import real SUP_LEMMA3)
-
-lemma REAL_SUP_EXISTS: "Ex (P::real => bool) & (EX z::real. ALL x::real. P x --> x < z)
-==> EX x::real. ALL y::real. (EX x::real. P x & y < x) = (y < x)"
-  by (import real REAL_SUP_EXISTS)
-
-consts
-  sup :: "(real => bool) => real" 
-
-defs
-  sup_def: "real.sup == %P. SOME s. ALL y. (EX x. P x & y < x) = (y < s)"
-
-lemma sup: "real.sup P = (SOME s. ALL y. (EX x. P x & y < x) = (y < s))"
-  by (import real sup)
-
-lemma REAL_SUP: "Ex P & (EX z. ALL x. P x --> x < z)
-==> (EX x. P x & y < x) = (y < real.sup P)"
-  by (import real REAL_SUP)
-
-lemma REAL_SUP_UBOUND: "[| Ex P & (EX z. ALL x. P x --> x < z); P y |] ==> y <= real.sup P"
-  by (import real REAL_SUP_UBOUND)
-
-lemma SETOK_LE_LT: "(Ex (P::real => bool) & (EX z::real. ALL x::real. P x --> x <= z)) =
-(Ex P & (EX z::real. ALL x::real. P x --> x < z))"
-  by (import real SETOK_LE_LT)
-
-lemma REAL_SUP_LE: "Ex P & (EX z. ALL x. P x --> x <= z)
-==> (EX x. P x & y < x) = (y < real.sup P)"
-  by (import real REAL_SUP_LE)
-
-lemma REAL_SUP_UBOUND_LE: "[| Ex P & (EX z. ALL x. P x --> x <= z); P y |] ==> y <= real.sup P"
-  by (import real REAL_SUP_UBOUND_LE)
-
-consts
-  sumc :: "nat => nat => (nat => real) => real" 
-
-specification (sumc) sumc: "(ALL n f. sumc n 0 f = 0) &
-(ALL n m f. sumc n (Suc m) f = sumc n m f + f (n + m))"
-  by (import real sumc)
-
-consts
-  sum :: "nat * nat => (nat => real) => real" 
-
-defs
-  sum_def: "real.sum == %(x, y). sumc x y"
-
-lemma SUM_DEF: "real.sum (m, n) f = sumc m n f"
-  by (import real SUM_DEF)
-
-lemma sum: "real.sum (xa, 0) x = 0 &
-real.sum (xa, Suc xb) x = real.sum (xa, xb) x + x (xa + xb)"
-  by (import real sum)
-
-lemma SUM_TWO: "real.sum (0, n) f + real.sum (n, p) f = real.sum (0, n + p) f"
-  by (import real SUM_TWO)
-
-lemma SUM_DIFF: "real.sum (m, n) f = real.sum (0, m + n) f - real.sum (0, m) f"
-  by (import real SUM_DIFF)
-
-lemma ABS_SUM: "abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
-  by (import real ABS_SUM)
-
-lemma SUM_LE: "(!!r. m <= r & r < n + m ==> f r <= g r)
-==> real.sum (m, n) f <= real.sum (m, n) g"
-  by (import real SUM_LE)
-
-lemma SUM_EQ: "(!!r. m <= r & r < n + m ==> f r = g r)
-==> real.sum (m, n) f = real.sum (m, n) g"
-  by (import real SUM_EQ)
-
-lemma SUM_POS: "(!!n. 0 <= f n) ==> 0 <= real.sum (m, n) f"
-  by (import real SUM_POS)
-
-lemma SUM_POS_GEN: "(!!n. m <= n ==> 0 <= f n) ==> 0 <= real.sum (m, n) f"
-  by (import real SUM_POS_GEN)
-
-lemma SUM_ABS: "abs (real.sum (m, x) (%m. abs (f m))) = real.sum (m, x) (%m. abs (f m))"
-  by (import real SUM_ABS)
-
-lemma SUM_ABS_LE: "abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
-  by (import real SUM_ABS_LE)
-
-lemma SUM_ZERO: "[| !!n. N <= n ==> f n = 0; N <= m |] ==> real.sum (m, n) f = 0"
-  by (import real SUM_ZERO)
-
-lemma SUM_ADD: "real.sum (m, n) (%n. f n + g n) = real.sum (m, n) f + real.sum (m, n) g"
-  by (import real SUM_ADD)
-
-lemma SUM_CMUL: "real.sum (m, n) (%n. c * f n) = c * real.sum (m, n) f"
-  by (import real SUM_CMUL)
-
-lemma SUM_NEG: "real.sum (n, d) (%n. - f n) = - real.sum (n, d) f"
-  by (import real SUM_NEG)
-
-lemma SUM_SUB: "real.sum (m, n) (%x. f x - g x) = real.sum (m, n) f - real.sum (m, n) g"
-  by (import real SUM_SUB)
-
-lemma SUM_SUBST: "(!!p. m <= p & p < m + n ==> f p = g p)
-==> real.sum (m, n) f = real.sum (m, n) g"
-  by (import real SUM_SUBST)
-
-lemma SUM_NSUB: "real.sum (0, n) f - real n * c = real.sum (0, n) (%p. f p - c)"
-  by (import real SUM_NSUB)
-
-lemma SUM_BOUND: "(!!p. m <= p & p < m + n ==> f p <= k) ==> real.sum (m, n) f <= real n * k"
-  by (import real SUM_BOUND)
-
-lemma SUM_GROUP: "real.sum (0, n) (%m. real.sum (m * k, k) f) = real.sum (0, n * k) f"
-  by (import real SUM_GROUP)
-
-lemma SUM_1: "real.sum (n, 1) f = f n"
-  by (import real SUM_1)
-
-lemma SUM_2: "real.sum (n, 2) f = f n + f (n + 1)"
-  by (import real SUM_2)
-
-lemma SUM_OFFSET: "real.sum (0, n) (%m. f (m + k)) = real.sum (0, n + k) f - real.sum (0, k) f"
-  by (import real SUM_OFFSET)
-
-lemma SUM_REINDEX: "real.sum (m + k, n) f = real.sum (m, n) (%r. f (r + k))"
-  by (import real SUM_REINDEX)
-
-lemma SUM_0: "real.sum (m, n) (%r. 0) = 0"
-  by (import real SUM_0)
-
-lemma SUM_PERMUTE_0: "(!!y. y < n ==> EX! x. x < n & p x = y)
-==> real.sum (0, n) (%n. f (p n)) = real.sum (0, n) f"
-  by (import real SUM_PERMUTE_0)
-
-lemma SUM_CANCEL: "real.sum (n, d) (%n. f (Suc n) - f n) = f (n + d) - f n"
-  by (import real SUM_CANCEL)
-
-lemma REAL_LE_RNEG: "((x::real) <= - (y::real)) = (x + y <= (0::real))"
-  by (import real REAL_LE_RNEG)
-
-lemma REAL_EQ_RDIV_EQ: "(0::real) < (xb::real) ==> ((x::real) = (xa::real) / xb) = (x * xb = xa)"
-  by (import real REAL_EQ_RDIV_EQ)
-
-lemma REAL_EQ_LDIV_EQ: "(0::real) < (xb::real) ==> ((x::real) / xb = (xa::real)) = (x = xa * xb)"
-  by (import real REAL_EQ_LDIV_EQ)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" topology
-
-definition
-  re_Union :: "(('a => bool) => bool) => 'a => bool"  where
-  "re_Union == %P x. EX s. P s & s x"
-
-lemma re_Union: "re_Union P = (%x. EX s. P s & s x)"
-  by (import topology re_Union)
-
-definition
-  re_union :: "('a => bool) => ('a => bool) => 'a => bool"  where
-  "re_union == %P Q x. P x | Q x"
-
-lemma re_union: "re_union P Q = (%x. P x | Q x)"
-  by (import topology re_union)
-
-definition
-  re_intersect :: "('a => bool) => ('a => bool) => 'a => bool"  where
-  "re_intersect == %P Q x. P x & Q x"
-
-lemma re_intersect: "re_intersect P Q = (%x. P x & Q x)"
-  by (import topology re_intersect)
-
-definition
-  re_null :: "'a => bool"  where
-  "re_null == %x. False"
-
-lemma re_null: "re_null = (%x. False)"
-  by (import topology re_null)
-
-definition
-  re_universe :: "'a => bool"  where
-  "re_universe == %x. True"
-
-lemma re_universe: "re_universe = (%x. True)"
-  by (import topology re_universe)
-
-definition
-  re_subset :: "('a => bool) => ('a => bool) => bool"  where
-  "re_subset == %P Q. ALL x. P x --> Q x"
-
-lemma re_subset: "re_subset P Q = (ALL x. P x --> Q x)"
-  by (import topology re_subset)
-
-definition
-  re_compl :: "('a => bool) => 'a => bool"  where
-  "re_compl == %P x. ~ P x"
-
-lemma re_compl: "re_compl P = (%x. ~ P x)"
-  by (import topology re_compl)
-
-lemma SUBSET_REFL: "re_subset P P"
-  by (import topology SUBSET_REFL)
-
-lemma COMPL_MEM: "P x = (~ re_compl P x)"
-  by (import topology COMPL_MEM)
-
-lemma SUBSET_ANTISYM: "(re_subset P Q & re_subset Q P) = (P = Q)"
-  by (import topology SUBSET_ANTISYM)
-
-lemma SUBSET_TRANS: "re_subset P Q & re_subset Q R ==> re_subset P R"
-  by (import topology SUBSET_TRANS)
-
-definition
-  istopology :: "(('a => bool) => bool) => bool"  where
-  "istopology ==
-%L. L re_null &
-    L re_universe &
-    (ALL a b. L a & L b --> L (re_intersect a b)) &
-    (ALL P. re_subset P L --> L (re_Union P))"
-
-lemma istopology: "istopology L =
-(L re_null &
- L re_universe &
- (ALL a b. L a & L b --> L (re_intersect a b)) &
- (ALL P. re_subset P L --> L (re_Union P)))"
-  by (import topology istopology)
-
-typedef (open) ('a) topology = "Collect istopology::(('a::type => bool) => bool) set"
-  by (rule typedef_helper,import topology topology_TY_DEF)
-
-lemmas topology_TY_DEF = typedef_hol2hol4 [OF type_definition_topology]
-
-consts
-  topology :: "(('a => bool) => bool) => 'a topology" 
-  "open" :: "'a topology => ('a => bool) => bool" 
-
-specification ("open" topology) topology_tybij: "(ALL a::'a topology. topology (topology.open a) = a) &
-(ALL r::('a => bool) => bool.
-    istopology r = (topology.open (topology r) = r))"
-  by (import topology topology_tybij)
-
-lemma TOPOLOGY: "topology.open L re_null &
-topology.open L re_universe &
-(ALL a b.
-    topology.open L a & topology.open L b -->
-    topology.open L (re_intersect a b)) &
-(ALL P. re_subset P (topology.open L) --> topology.open L (re_Union P))"
-  by (import topology TOPOLOGY)
-
-lemma TOPOLOGY_UNION: "re_subset xa (topology.open x) ==> topology.open x (re_Union xa)"
-  by (import topology TOPOLOGY_UNION)
-
-definition
-  neigh :: "'a topology => ('a => bool) * 'a => bool"  where
-  "neigh == %tp (N, x). EX P. topology.open tp P & re_subset P N & P x"
-
-lemma neigh: "neigh (tp::'a::type topology) (N::'a::type => bool, x::'a::type) =
-(EX P::'a::type => bool. topology.open tp P & re_subset P N & P x)"
-  by (import topology neigh)
-
-lemma OPEN_OWN_NEIGH: "topology.open (tp::'a::type topology) (S'::'a::type => bool) &
-S' (x::'a::type)
-==> neigh tp (S', x)"
-  by (import topology OPEN_OWN_NEIGH)
-
-lemma OPEN_UNOPEN: "topology.open (tp::'a::type topology) (S'::'a::type => bool) =
-(re_Union (%P::'a::type => bool. topology.open tp P & re_subset P S') = S')"
-  by (import topology OPEN_UNOPEN)
-
-lemma OPEN_SUBOPEN: "topology.open (tp::'a::type topology) (S'::'a::type => bool) =
-(ALL x::'a::type.
-    S' x -->
-    (EX P::'a::type => bool. P x & topology.open tp P & re_subset P S'))"
-  by (import topology OPEN_SUBOPEN)
-
-lemma OPEN_NEIGH: "topology.open (tp::'a::type topology) (S'::'a::type => bool) =
-(ALL x::'a::type.
-    S' x --> (EX N::'a::type => bool. neigh tp (N, x) & re_subset N S'))"
-  by (import topology OPEN_NEIGH)
-
-consts
-  closed :: "'a topology => ('a => bool) => bool" 
-
-defs
-  closed_def: "topology.closed == %L S'. topology.open L (re_compl S')"
-
-lemma closed: "topology.closed L S' = topology.open L (re_compl S')"
-  by (import topology closed)
-
-definition
-  limpt :: "'a topology => 'a => ('a => bool) => bool"  where
-  "limpt == %tp x S'. ALL N. neigh tp (N, x) --> (EX y. x ~= y & S' y & N y)"
-
-lemma limpt: "limpt (tp::'a::type topology) (x::'a::type) (S'::'a::type => bool) =
-(ALL N::'a::type => bool.
-    neigh tp (N, x) --> (EX y::'a::type. x ~= y & S' y & N y))"
-  by (import topology limpt)
-
-lemma CLOSED_LIMPT: "topology.closed (tp::'a::type topology) (S'::'a::type => bool) =
-(ALL x::'a::type. limpt tp x S' --> S' x)"
-  by (import topology CLOSED_LIMPT)
-
-definition
-  ismet :: "('a * 'a => real) => bool"  where
-  "ismet ==
-%m. (ALL x y. (m (x, y) = 0) = (x = y)) &
-    (ALL x y z. m (y, z) <= m (x, y) + m (x, z))"
-
-lemma ismet: "ismet m =
-((ALL x y. (m (x, y) = 0) = (x = y)) &
- (ALL x y z. m (y, z) <= m (x, y) + m (x, z)))"
-  by (import topology ismet)
-
-typedef (open) ('a) metric = "Collect ismet :: ('a::type * 'a::type => real) set"
-  by (rule typedef_helper,import topology metric_TY_DEF)
-
-lemmas metric_TY_DEF = typedef_hol2hol4 [OF type_definition_metric]
-
-consts
-  metric :: "('a * 'a => real) => 'a metric" 
-  dist :: "'a metric => 'a * 'a => real" 
-
-specification (dist metric) metric_tybij: "(ALL a::'a metric. metric (topology.dist a) = a) &
-(ALL r::'a * 'a => real. ismet r = (topology.dist (metric r) = r))"
-  by (import topology metric_tybij)
-
-lemma METRIC_ISMET: "ismet (topology.dist m)"
-  by (import topology METRIC_ISMET)
-
-lemma METRIC_ZERO: "(topology.dist m (x, y) = 0) = (x = y)"
-  by (import topology METRIC_ZERO)
-
-lemma METRIC_SAME: "topology.dist m (x, x) = 0"
-  by (import topology METRIC_SAME)
-
-lemma METRIC_POS: "0 <= topology.dist m (x, y)"
-  by (import topology METRIC_POS)
-
-lemma METRIC_SYM: "topology.dist m (x, y) = topology.dist m (y, x)"
-  by (import topology METRIC_SYM)
-
-lemma METRIC_TRIANGLE: "topology.dist m (x, z) <= topology.dist m (x, y) + topology.dist m (y, z)"
-  by (import topology METRIC_TRIANGLE)
-
-lemma METRIC_NZ: "x ~= y ==> 0 < topology.dist m (x, y)"
-  by (import topology METRIC_NZ)
-
-definition
-  mtop :: "'a metric => 'a topology"  where
-  "mtop ==
-%m. topology
-     (%S'. ALL x.
-              S' x --> (EX e>0. ALL y. topology.dist m (x, y) < e --> S' y))"
-
-lemma mtop: "mtop m =
-topology
- (%S'. ALL x. S' x --> (EX e>0. ALL y. topology.dist m (x, y) < e --> S' y))"
-  by (import topology mtop)
-
-lemma mtop_istopology: "istopology
- (%S'. ALL x. S' x --> (EX e>0. ALL y. topology.dist m (x, y) < e --> S' y))"
-  by (import topology mtop_istopology)
-
-lemma MTOP_OPEN: "topology.open (mtop x) S' =
-(ALL xa. S' xa --> (EX e>0. ALL y. topology.dist x (xa, y) < e --> S' y))"
-  by (import topology MTOP_OPEN)
-
-definition
-  B :: "'a metric => 'a * real => 'a => bool"  where
-  "B == %m (x, e) y. topology.dist m (x, y) < e"
-
-lemma ball: "B m (x, e) = (%y. topology.dist m (x, y) < e)"
-  by (import topology ball)
-
-lemma BALL_OPEN: "0 < e ==> topology.open (mtop m) (B m (x, e))"
-  by (import topology BALL_OPEN)
-
-lemma BALL_NEIGH: "0 < e ==> neigh (mtop m) (B m (x, e), x)"
-  by (import topology BALL_NEIGH)
-
-lemma MTOP_LIMPT: "limpt (mtop m) x S' =
-(ALL e>0. EX y. x ~= y & S' y & topology.dist m (x, y) < e)"
-  by (import topology MTOP_LIMPT)
-
-lemma ISMET_R1: "ismet (%(x, y). abs (y - x))"
-  by (import topology ISMET_R1)
-
-definition
-  mr1 :: "real metric"  where
-  "mr1 == metric (%(x, y). abs (y - x))"
-
-lemma mr1: "mr1 = metric (%(x, y). abs (y - x))"
-  by (import topology mr1)
-
-lemma MR1_DEF: "topology.dist mr1 (x, y) = abs (y - x)"
-  by (import topology MR1_DEF)
-
-lemma MR1_ADD: "topology.dist mr1 (x, x + d) = abs d"
-  by (import topology MR1_ADD)
-
-lemma MR1_SUB: "topology.dist mr1 (x, x - d) = abs d"
-  by (import topology MR1_SUB)
-
-lemma MR1_ADD_POS: "0 <= d ==> topology.dist mr1 (x, x + d) = d"
-  by (import topology MR1_ADD_POS)
-
-lemma MR1_SUB_LE: "0 <= d ==> topology.dist mr1 (x, x - d) = d"
-  by (import topology MR1_SUB_LE)
-
-lemma MR1_ADD_LT: "0 < d ==> topology.dist mr1 (x, x + d) = d"
-  by (import topology MR1_ADD_LT)
-
-lemma MR1_SUB_LT: "0 < d ==> topology.dist mr1 (x, x - d) = d"
-  by (import topology MR1_SUB_LT)
-
-lemma MR1_BETWEEN1: "x < z & topology.dist mr1 (x, y) < z - x ==> y < z"
-  by (import topology MR1_BETWEEN1)
-
-lemma MR1_LIMPT: "limpt (mtop mr1) x re_universe"
-  by (import topology MR1_LIMPT)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" nets
-
-definition
-  dorder :: "('a => 'a => bool) => bool"  where
-  "dorder ==
-%g. ALL x y.
-       g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y))"
-
-lemma dorder: "dorder g =
-(ALL x y.
-    g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y)))"
-  by (import nets dorder)
-
-definition
-  tends :: "('b => 'a) => 'a => 'a topology * ('b => 'b => bool) => bool"  where
-  "tends ==
-%(s::'b => 'a) (l::'a) (tp::'a topology, g::'b => 'b => bool).
-   ALL N::'a => bool.
-      neigh tp (N, l) -->
-      (EX n::'b. g n n & (ALL m::'b. g m n --> N (s m)))"
-
-lemma tends: "tends (s::'b::type => 'a::type) (l::'a::type)
- (tp::'a::type topology, g::'b::type => 'b::type => bool) =
-(ALL N::'a::type => bool.
-    neigh tp (N, l) -->
-    (EX n::'b::type. g n n & (ALL m::'b::type. g m n --> N (s m))))"
-  by (import nets tends)
-
-definition
-  bounded :: "'a metric * ('b => 'b => bool) => ('b => 'a) => bool"  where
-  "bounded ==
-%(m, g) f. EX k x N. g N N & (ALL n. g n N --> topology.dist m (f n, x) < k)"
-
-lemma bounded: "bounded (m, g) f =
-(EX k x N. g N N & (ALL n. g n N --> topology.dist m (f n, x) < k))"
-  by (import nets bounded)
-
-consts
-  tendsto :: "'a metric * 'a => 'a => 'a => bool" 
-
-defs
-  tendsto_def: "nets.tendsto ==
-%(m, x) y z.
-   0 < topology.dist m (x, y) &
-   topology.dist m (x, y) <= topology.dist m (x, z)"
-
-lemma tendsto: "nets.tendsto (m, x) y z =
-(0 < topology.dist m (x, y) &
- topology.dist m (x, y) <= topology.dist m (x, z))"
-  by (import nets tendsto)
-
-lemma DORDER_LEMMA: "[| dorder g;
-   (EX n. g n n & (ALL m. g m n --> P m)) &
-   (EX n. g n n & (ALL m. g m n --> Q m)) |]
-==> EX n. g n n & (ALL m. g m n --> P m & Q m)"
-  by (import nets DORDER_LEMMA)
-
-lemma DORDER_NGE: "dorder nat_ge"
-  by (import nets DORDER_NGE)
-
-lemma DORDER_TENDSTO: "dorder (nets.tendsto (m, x))"
-  by (import nets DORDER_TENDSTO)
-
-lemma MTOP_TENDS: "tends (x::'b => 'a) (x0::'a) (mtop (d::'a metric), g::'b => 'b => bool) =
-(ALL e>0::real.
-    EX n::'b. g n n & (ALL m::'b. g m n --> topology.dist d (x m, x0) < e))"
-  by (import nets MTOP_TENDS)
-
-lemma MTOP_TENDS_UNIQ: "[| dorder (g::'b => 'b => bool);
-   tends (x::'b => 'a) (x0::'a) (mtop (d::'a metric), g) &
-   tends x (x1::'a) (mtop d, g) |]
-==> x0 = x1"
-  by (import nets MTOP_TENDS_UNIQ)
-
-lemma SEQ_TENDS: "tends x x0 (mtop d, nat_ge) =
-(ALL xa>0. EX xb. ALL xc>=xb. topology.dist d (x xc, x0) < xa)"
-  by (import nets SEQ_TENDS)
-
-lemma LIM_TENDS: "limpt (mtop m1) x0 re_universe
-==> tends f y0 (mtop m2, nets.tendsto (m1, x0)) =
-    (ALL e>0.
-        EX d>0.
-           ALL x.
-              0 < topology.dist m1 (x, x0) &
-              topology.dist m1 (x, x0) <= d -->
-              topology.dist m2 (f x, y0) < e)"
-  by (import nets LIM_TENDS)
-
-lemma LIM_TENDS2: "limpt (mtop m1) x0 re_universe
-==> tends f y0 (mtop m2, nets.tendsto (m1, x0)) =
-    (ALL e>0.
-        EX d>0.
-           ALL x.
-              0 < topology.dist m1 (x, x0) &
-              topology.dist m1 (x, x0) < d -->
-              topology.dist m2 (f x, y0) < e)"
-  by (import nets LIM_TENDS2)
-
-lemma MR1_BOUNDED: "bounded (mr1, g) f = (EX k N. g N N & (ALL n. g n N --> abs (f n) < k))"
-  by (import nets MR1_BOUNDED)
-
-lemma NET_NULL: "tends x x0 (mtop mr1, g) = tends (%n. x n - x0) 0 (mtop mr1, g)"
-  by (import nets NET_NULL)
-
-lemma NET_CONV_BOUNDED: "tends x x0 (mtop mr1, g) ==> bounded (mr1, g) x"
-  by (import nets NET_CONV_BOUNDED)
-
-lemma NET_CONV_NZ: "tends x x0 (mtop mr1, g) & x0 ~= 0
-==> EX N. g N N & (ALL n. g n N --> x n ~= 0)"
-  by (import nets NET_CONV_NZ)
-
-lemma NET_CONV_IBOUNDED: "tends x x0 (mtop mr1, g) & x0 ~= 0 ==> bounded (mr1, g) (%n. inverse (x n))"
-  by (import nets NET_CONV_IBOUNDED)
-
-lemma NET_NULL_ADD: "[| dorder g; tends x 0 (mtop mr1, g) & tends y 0 (mtop mr1, g) |]
-==> tends (%n. x n + y n) 0 (mtop mr1, g)"
-  by (import nets NET_NULL_ADD)
-
-lemma NET_NULL_MUL: "[| dorder g; bounded (mr1, g) x & tends y 0 (mtop mr1, g) |]
-==> tends (%n. x n * y n) 0 (mtop mr1, g)"
-  by (import nets NET_NULL_MUL)
-
-lemma NET_NULL_CMUL: "tends x 0 (mtop mr1, g) ==> tends (%n. k * x n) 0 (mtop mr1, g)"
-  by (import nets NET_NULL_CMUL)
-
-lemma NET_ADD: "[| dorder g; tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) |]
-==> tends (%n. x n + y n) (x0 + y0) (mtop mr1, g)"
-  by (import nets NET_ADD)
-
-lemma NET_NEG: "dorder g
-==> tends x x0 (mtop mr1, g) = tends (%n. - x n) (- x0) (mtop mr1, g)"
-  by (import nets NET_NEG)
-
-lemma NET_SUB: "[| dorder g; tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) |]
-==> tends (%xa. x xa - y xa) (x0 - y0) (mtop mr1, g)"
-  by (import nets NET_SUB)
-
-lemma NET_MUL: "[| dorder g; tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) |]
-==> tends (%n. x n * y n) (x0 * y0) (mtop mr1, g)"
-  by (import nets NET_MUL)
-
-lemma NET_INV: "[| dorder g; tends x x0 (mtop mr1, g) & x0 ~= 0 |]
-==> tends (%n. inverse (x n)) (inverse x0) (mtop mr1, g)"
-  by (import nets NET_INV)
-
-lemma NET_DIV: "[| dorder g;
-   tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) & y0 ~= 0 |]
-==> tends (%xa. x xa / y xa) (x0 / y0) (mtop mr1, g)"
-  by (import nets NET_DIV)
-
-lemma NET_ABS: "tends x x0 (mtop mr1, g) ==> tends (%n. abs (x n)) (abs x0) (mtop mr1, g)"
-  by (import nets NET_ABS)
-
-lemma NET_LE: "[| dorder g;
-   tends x x0 (mtop mr1, g) &
-   tends y y0 (mtop mr1, g) &
-   (EX N. g N N & (ALL n. g n N --> x n <= y n)) |]
-==> x0 <= y0"
-  by (import nets NET_LE)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" seq
-
-consts
-  "hol4-->" :: "(nat => real) => real => bool" ("hol4-->")
-
-defs
-  "hol4-->_def": "hol4--> == %x x0. tends x x0 (mtop mr1, nat_ge)"
-
-lemma tends_num_real: "hol4--> x x0 = tends x x0 (mtop mr1, nat_ge)"
-  by (import seq tends_num_real)
-
-lemma SEQ: "hol4--> x x0 = (ALL e>0. EX N. ALL n>=N. abs (x n - x0) < e)"
-  by (import seq SEQ)
-
-lemma SEQ_CONST: "hol4--> (%x. k) k"
-  by (import seq SEQ_CONST)
-
-lemma SEQ_ADD: "hol4--> x x0 & hol4--> y y0 ==> hol4--> (%n. x n + y n) (x0 + y0)"
-  by (import seq SEQ_ADD)
-
-lemma SEQ_MUL: "hol4--> x x0 & hol4--> y y0 ==> hol4--> (%n. x n * y n) (x0 * y0)"
-  by (import seq SEQ_MUL)
-
-lemma SEQ_NEG: "hol4--> x x0 = hol4--> (%n. - x n) (- x0)"
-  by (import seq SEQ_NEG)
-
-lemma SEQ_INV: "hol4--> x x0 & x0 ~= 0 ==> hol4--> (%n. inverse (x n)) (inverse x0)"
-  by (import seq SEQ_INV)
-
-lemma SEQ_SUB: "hol4--> x x0 & hol4--> y y0 ==> hol4--> (%n. x n - y n) (x0 - y0)"
-  by (import seq SEQ_SUB)
-
-lemma SEQ_DIV: "hol4--> x x0 & hol4--> y y0 & y0 ~= 0 ==> hol4--> (%n. x n / y n) (x0 / y0)"
-  by (import seq SEQ_DIV)
-
-lemma SEQ_UNIQ: "hol4--> x x1 & hol4--> x x2 ==> x1 = x2"
-  by (import seq SEQ_UNIQ)
-
-consts
-  convergent :: "(nat => real) => bool" 
-
-defs
-  convergent_def: "seq.convergent == %f. Ex (hol4--> f)"
-
-lemma convergent: "seq.convergent f = Ex (hol4--> f)"
-  by (import seq convergent)
-
-definition
-  cauchy :: "(nat => real) => bool"  where
-  "cauchy ==
-%f. ALL e>0. EX N. ALL m n. N <= m & N <= n --> abs (f m - f n) < e"
-
-lemma cauchy: "cauchy f = (ALL e>0. EX N. ALL m n. N <= m & N <= n --> abs (f m - f n) < e)"
-  by (import seq cauchy)
-
-consts
-  lim :: "(nat => real) => real" 
-
-defs
-  lim_def: "seq.lim == %f. Eps (hol4--> f)"
-
-lemma lim: "seq.lim f = Eps (hol4--> f)"
-  by (import seq lim)
-
-lemma SEQ_LIM: "seq.convergent f = hol4--> f (seq.lim f)"
-  by (import seq SEQ_LIM)
-
-consts
-  subseq :: "(nat => nat) => bool" 
-
-defs
-  subseq_def: "seq.subseq == %f. ALL m n. m < n --> f m < f n"
-
-lemma subseq: "seq.subseq f = (ALL m n. m < n --> f m < f n)"
-  by (import seq subseq)
-
-lemma SUBSEQ_SUC: "seq.subseq f = (ALL n. f n < f (Suc n))"
-  by (import seq SUBSEQ_SUC)
-
-consts
-  mono :: "(nat => real) => bool" 
-
-defs
-  mono_def: "seq.mono ==
-%f. (ALL m n. m <= n --> f m <= f n) | (ALL m n. m <= n --> f n <= f m)"
-
-lemma mono: "seq.mono f =
-((ALL m n. m <= n --> f m <= f n) | (ALL m n. m <= n --> f n <= f m))"
-  by (import seq mono)
-
-lemma MONO_SUC: "seq.mono f = ((ALL x. f x <= f (Suc x)) | (ALL n. f (Suc n) <= f n))"
-  by (import seq MONO_SUC)
-
-lemma MAX_LEMMA: "EX k::real. ALL n<N::nat. abs ((s::nat => real) n) < k"
-  by (import seq MAX_LEMMA)
-
-lemma SEQ_BOUNDED: "bounded (mr1, nat_ge) s = (EX k. ALL n. abs (s n) < k)"
-  by (import seq SEQ_BOUNDED)
-
-lemma SEQ_BOUNDED_2: "(!!n. k <= f n & f n <= k') ==> bounded (mr1, nat_ge) f"
-  by (import seq SEQ_BOUNDED_2)
-
-lemma SEQ_CBOUNDED: "cauchy f ==> bounded (mr1, nat_ge) f"
-  by (import seq SEQ_CBOUNDED)
-
-lemma SEQ_ICONV: "bounded (mr1, nat_ge) f & (ALL m n. n <= m --> f n <= f m)
-==> seq.convergent f"
-  by (import seq SEQ_ICONV)
-
-lemma SEQ_NEG_CONV: "seq.convergent f = seq.convergent (%n. - f n)"
-  by (import seq SEQ_NEG_CONV)
-
-lemma SEQ_NEG_BOUNDED: "bounded (mr1, nat_ge) (%n. - f n) = bounded (mr1, nat_ge) f"
-  by (import seq SEQ_NEG_BOUNDED)
-
-lemma SEQ_BCONV: "bounded (mr1, nat_ge) f & seq.mono f ==> seq.convergent f"
-  by (import seq SEQ_BCONV)
-
-lemma SEQ_MONOSUB: "EX f. seq.subseq f & seq.mono (%n. s (f n))"
-  by (import seq SEQ_MONOSUB)
-
-lemma SEQ_SBOUNDED: "bounded (mr1, nat_ge) s ==> bounded (mr1, nat_ge) (%n. s (f n))"
-  by (import seq SEQ_SBOUNDED)
-
-lemma SEQ_SUBLE: "seq.subseq f ==> n <= f n"
-  by (import seq SEQ_SUBLE)
-
-lemma SEQ_DIRECT: "seq.subseq f ==> EX x>=N1. N2 <= f x"
-  by (import seq SEQ_DIRECT)
-
-lemma SEQ_CAUCHY: "cauchy f = seq.convergent f"
-  by (import seq SEQ_CAUCHY)
-
-lemma SEQ_LE: "hol4--> f l & hol4--> g m & (EX x. ALL xa>=x. f xa <= g xa) ==> l <= m"
-  by (import seq SEQ_LE)
-
-lemma SEQ_SUC: "hol4--> f l = hol4--> (%n. f (Suc n)) l"
-  by (import seq SEQ_SUC)
-
-lemma SEQ_ABS: "hol4--> (%n. abs (f n)) 0 = hol4--> f 0"
-  by (import seq SEQ_ABS)
-
-lemma SEQ_ABS_IMP: "hol4--> f l ==> hol4--> (%n. abs (f n)) (abs l)"
-  by (import seq SEQ_ABS_IMP)
-
-lemma SEQ_INV0: "(!!y. EX N. ALL n>=N. y < f n) ==> hol4--> (%n. inverse (f n)) 0"
-  by (import seq SEQ_INV0)
-
-lemma SEQ_POWER_ABS: "abs c < 1 ==> hol4--> (op ^ (abs c)) 0"
-  by (import seq SEQ_POWER_ABS)
-
-lemma SEQ_POWER: "abs c < 1 ==> hol4--> (op ^ c) 0"
-  by (import seq SEQ_POWER)
-
-lemma NEST_LEMMA: "(ALL n. f n <= f (Suc n)) & (ALL n. g (Suc n) <= g n) & (ALL n. f n <= g n)
-==> EX l m.
-       l <= m &
-       ((ALL n. f n <= l) & hol4--> f l) & (ALL n. m <= g n) & hol4--> g m"
-  by (import seq NEST_LEMMA)
-
-lemma NEST_LEMMA_UNIQ: "(ALL n. f n <= f (Suc n)) &
-(ALL n. g (Suc n) <= g n) & (ALL n. f n <= g n) & hol4--> (%n. f n - g n) 0
-==> EX x. ((ALL n. f n <= x) & hol4--> f x) &
-          (ALL n. x <= g n) & hol4--> g x"
-  by (import seq NEST_LEMMA_UNIQ)
-
-consts
-  sums :: "(nat => real) => real => bool" 
-
-defs
-  sums_def: "seq.sums == %f. hol4--> (%n. real.sum (0, n) f)"
-
-lemma sums: "seq.sums f s = hol4--> (%n. real.sum (0, n) f) s"
-  by (import seq sums)
-
-consts
-  summable :: "(nat => real) => bool" 
-
-defs
-  summable_def: "seq.summable == %f. Ex (seq.sums f)"
-
-lemma summable: "seq.summable f = Ex (seq.sums f)"
-  by (import seq summable)
-
-consts
-  suminf :: "(nat => real) => real" 
-
-defs
-  suminf_def: "seq.suminf == %f. Eps (seq.sums f)"
-
-lemma suminf: "seq.suminf f = Eps (seq.sums f)"
-  by (import seq suminf)
-
-lemma SUM_SUMMABLE: "seq.sums f l ==> seq.summable f"
-  by (import seq SUM_SUMMABLE)
-
-lemma SUMMABLE_SUM: "seq.summable f ==> seq.sums f (seq.suminf f)"
-  by (import seq SUMMABLE_SUM)
-
-lemma SUM_UNIQ: "seq.sums f x ==> x = seq.suminf f"
-  by (import seq SUM_UNIQ)
-
-lemma SER_0: "(!!m. n <= m ==> f m = 0) ==> seq.sums f (real.sum (0, n) f)"
-  by (import seq SER_0)
-
-lemma SER_POS_LE: "seq.summable f & (ALL m>=n. 0 <= f m) ==> real.sum (0, n) f <= seq.suminf f"
-  by (import seq SER_POS_LE)
-
-lemma SER_POS_LT: "seq.summable f & (ALL m>=n. 0 < f m) ==> real.sum (0, n) f < seq.suminf f"
-  by (import seq SER_POS_LT)
-
-lemma SER_GROUP: "seq.summable f & 0 < k
-==> seq.sums (%n. real.sum (n * k, k) f) (seq.suminf f)"
-  by (import seq SER_GROUP)
-
-lemma SER_PAIR: "seq.summable f ==> seq.sums (%n. real.sum (2 * n, 2) f) (seq.suminf f)"
-  by (import seq SER_PAIR)
-
-lemma SER_OFFSET: "seq.summable f
-==> seq.sums (%n. f (n + k)) (seq.suminf f - real.sum (0, k) f)"
-  by (import seq SER_OFFSET)
-
-lemma SER_POS_LT_PAIR: "seq.summable f & (ALL d. 0 < f (n + 2 * d) + f (n + (2 * d + 1)))
-==> real.sum (0, n) f < seq.suminf f"
-  by (import seq SER_POS_LT_PAIR)
-
-lemma SER_ADD: "seq.sums x x0 & seq.sums y y0 ==> seq.sums (%n. x n + y n) (x0 + y0)"
-  by (import seq SER_ADD)
-
-lemma SER_CMUL: "seq.sums x x0 ==> seq.sums (%n. c * x n) (c * x0)"
-  by (import seq SER_CMUL)
-
-lemma SER_NEG: "seq.sums x x0 ==> seq.sums (%xa. - x xa) (- x0)"
-  by (import seq SER_NEG)
-
-lemma SER_SUB: "seq.sums x x0 & seq.sums y y0 ==> seq.sums (%xa. x xa - y xa) (x0 - y0)"
-  by (import seq SER_SUB)
-
-lemma SER_CDIV: "seq.sums x x0 ==> seq.sums (%xa. x xa / c) (x0 / c)"
-  by (import seq SER_CDIV)
-
-lemma SER_CAUCHY: "seq.summable f =
-(ALL e>0. EX N. ALL m n. N <= m --> abs (real.sum (m, n) f) < e)"
-  by (import seq SER_CAUCHY)
-
-lemma SER_ZERO: "seq.summable f ==> hol4--> f 0"
-  by (import seq SER_ZERO)
-
-lemma SER_COMPAR: "(EX x. ALL xa>=x. abs (f xa) <= g xa) & seq.summable g ==> seq.summable f"
-  by (import seq SER_COMPAR)
-
-lemma SER_COMPARA: "(EX x. ALL xa>=x. abs (f xa) <= g xa) & seq.summable g
-==> seq.summable (%k. abs (f k))"
-  by (import seq SER_COMPARA)
-
-lemma SER_LE: "(ALL n. f n <= g n) & seq.summable f & seq.summable g
-==> seq.suminf f <= seq.suminf g"
-  by (import seq SER_LE)
-
-lemma SER_LE2: "(ALL n. abs (f n) <= g n) & seq.summable g
-==> seq.summable f & seq.suminf f <= seq.suminf g"
-  by (import seq SER_LE2)
-
-lemma SER_ACONV: "seq.summable (%n. abs (f n)) ==> seq.summable f"
-  by (import seq SER_ACONV)
-
-lemma SER_ABS: "seq.summable (%n. abs (f n))
-==> abs (seq.suminf f) <= seq.suminf (%n. abs (f n))"
-  by (import seq SER_ABS)
-
-lemma GP_FINITE: "x ~= 1 ==> real.sum (0, n) (op ^ x) = (x ^ n - 1) / (x - 1)"
-  by (import seq GP_FINITE)
-
-lemma GP: "abs x < 1 ==> seq.sums (op ^ x) (inverse (1 - x))"
-  by (import seq GP)
-
-lemma SER_RATIO: "c < 1 & (ALL n>=N. abs (f (Suc n)) <= c * abs (f n)) ==> seq.summable f"
-  by (import seq SER_RATIO)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" lim
-
-definition
-  tends_real_real :: "(real => real) => real => real => bool"  where
-  "tends_real_real == %f l x0. tends f l (mtop mr1, nets.tendsto (mr1, x0))"
-
-lemma tends_real_real: "tends_real_real f l x0 = tends f l (mtop mr1, nets.tendsto (mr1, x0))"
-  by (import lim tends_real_real)
-
-lemma LIM: "tends_real_real f y0 x0 =
-(ALL e>0.
-    EX d>0.
-       ALL x. 0 < abs (x - x0) & abs (x - x0) < d --> abs (f x - y0) < e)"
-  by (import lim LIM)
-
-lemma LIM_CONST: "tends_real_real (%x. k) k x"
-  by (import lim LIM_CONST)
-
-lemma LIM_ADD: "tends_real_real f l x & tends_real_real g m x
-==> tends_real_real (%x. f x + g x) (l + m) x"
-  by (import lim LIM_ADD)
-
-lemma LIM_MUL: "tends_real_real f l x & tends_real_real g m x
-==> tends_real_real (%x. f x * g x) (l * m) x"
-  by (import lim LIM_MUL)
-
-lemma LIM_NEG: "tends_real_real f l x = tends_real_real (%x. - f x) (- l) x"
-  by (import lim LIM_NEG)
-
-lemma LIM_INV: "tends_real_real f l x & l ~= 0
-==> tends_real_real (%x. inverse (f x)) (inverse l) x"
-  by (import lim LIM_INV)
-
-lemma LIM_SUB: "tends_real_real f l x & tends_real_real g m x
-==> tends_real_real (%x. f x - g x) (l - m) x"
-  by (import lim LIM_SUB)
-
-lemma LIM_DIV: "tends_real_real f l x & tends_real_real g m x & m ~= 0
-==> tends_real_real (%x. f x / g x) (l / m) x"
-  by (import lim LIM_DIV)
-
-lemma LIM_NULL: "tends_real_real f l x = tends_real_real (%x. f x - l) 0 x"
-  by (import lim LIM_NULL)
-
-lemma LIM_X: "tends_real_real (%x. x) x0 x0"
-  by (import lim LIM_X)
-
-lemma LIM_UNIQ: "tends_real_real f l x & tends_real_real f m x ==> l = m"
-  by (import lim LIM_UNIQ)
-
-lemma LIM_EQUAL: "(!!x. x ~= x0 ==> f x = g x)
-==> tends_real_real f l x0 = tends_real_real g l x0"
-  by (import lim LIM_EQUAL)
-
-lemma LIM_TRANSFORM: "tends_real_real (%x. f x - g x) 0 x0 & tends_real_real g l x0
-==> tends_real_real f l x0"
-  by (import lim LIM_TRANSFORM)
-
-definition
-  diffl :: "(real => real) => real => real => bool"  where
-  "diffl == %f l x. tends_real_real (%h. (f (x + h) - f x) / h) l 0"
-
-lemma diffl: "diffl f l x = tends_real_real (%h. (f (x + h) - f x) / h) l 0"
-  by (import lim diffl)
-
-definition
-  contl :: "(real => real) => real => bool"  where
-  "contl == %f x. tends_real_real (%h. f (x + h)) (f x) 0"
-
-lemma contl: "contl f x = tends_real_real (%h. f (x + h)) (f x) 0"
-  by (import lim contl)
-
-consts
-  differentiable :: "(real => real) => real => bool" 
-
-defs
-  differentiable_def: "lim.differentiable == %f x. EX l. diffl f l x"
-
-lemma differentiable: "lim.differentiable f x = (EX l. diffl f l x)"
-  by (import lim differentiable)
-
-lemma DIFF_UNIQ: "diffl f l x & diffl f m x ==> l = m"
-  by (import lim DIFF_UNIQ)
-
-lemma DIFF_CONT: "diffl f l x ==> contl f x"
-  by (import lim DIFF_CONT)
-
-lemma CONTL_LIM: "contl f x = tends_real_real f (f x) x"
-  by (import lim CONTL_LIM)
-
-lemma DIFF_CARAT: "diffl f l x =
-(EX g. (ALL z. f z - f x = g z * (z - x)) & contl g x & g x = l)"
-  by (import lim DIFF_CARAT)
-
-lemma CONT_CONST: "contl (%x. k) x"
-  by (import lim CONT_CONST)
-
-lemma CONT_ADD: "contl f x & contl g x ==> contl (%x. f x + g x) x"
-  by (import lim CONT_ADD)
-
-lemma CONT_MUL: "contl f x & contl g x ==> contl (%x. f x * g x) x"
-  by (import lim CONT_MUL)
-
-lemma CONT_NEG: "contl f x ==> contl (%x. - f x) x"
-  by (import lim CONT_NEG)
-
-lemma CONT_INV: "contl f x & f x ~= 0 ==> contl (%x. inverse (f x)) x"
-  by (import lim CONT_INV)
-
-lemma CONT_SUB: "contl f x & contl g x ==> contl (%x. f x - g x) x"
-  by (import lim CONT_SUB)
-
-lemma CONT_DIV: "contl f x & contl g x & g x ~= 0 ==> contl (%x. f x / g x) x"
-  by (import lim CONT_DIV)
-
-lemma CONT_COMPOSE: "contl f x & contl g (f x) ==> contl (%x. g (f x)) x"
-  by (import lim CONT_COMPOSE)
-
-lemma IVT: "a <= b & (f a <= y & y <= f b) & (ALL x. a <= x & x <= b --> contl f x)
-==> EX x>=a. x <= b & f x = y"
-  by (import lim IVT)
-
-lemma IVT2: "a <= b & (f b <= y & y <= f a) & (ALL x. a <= x & x <= b --> contl f x)
-==> EX x>=a. x <= b & f x = y"
-  by (import lim IVT2)
-
-lemma DIFF_CONST: "diffl (%x. k) 0 x"
-  by (import lim DIFF_CONST)
-
-lemma DIFF_ADD: "diffl f l x & diffl g m x ==> diffl (%x. f x + g x) (l + m) x"
-  by (import lim DIFF_ADD)
-
-lemma DIFF_MUL: "diffl f l x & diffl g m x ==> diffl (%x. f x * g x) (l * g x + m * f x) x"
-  by (import lim DIFF_MUL)
-
-lemma DIFF_CMUL: "diffl f l x ==> diffl (%x. c * f x) (c * l) x"
-  by (import lim DIFF_CMUL)
-
-lemma DIFF_NEG: "diffl f l x ==> diffl (%x. - f x) (- l) x"
-  by (import lim DIFF_NEG)
-
-lemma DIFF_SUB: "diffl f l x & diffl g m x ==> diffl (%x. f x - g x) (l - m) x"
-  by (import lim DIFF_SUB)
-
-lemma DIFF_CHAIN: "diffl f l (g x) & diffl g m x ==> diffl (%x. f (g x)) (l * m) x"
-  by (import lim DIFF_CHAIN)
-
-lemma DIFF_X: "diffl (%x. x) 1 x"
-  by (import lim DIFF_X)
-
-lemma DIFF_POW: "diffl (%x. x ^ n) (real n * x ^ (n - 1)) x"
-  by (import lim DIFF_POW)
-
-lemma DIFF_XM1: "x ~= 0 ==> diffl inverse (- (inverse x ^ 2)) x"
-  by (import lim DIFF_XM1)
-
-lemma DIFF_INV: "diffl f l x & f x ~= 0 ==> diffl (%x. inverse (f x)) (- (l / f x ^ 2)) x"
-  by (import lim DIFF_INV)
-
-lemma DIFF_DIV: "diffl f l x & diffl g m x & g x ~= 0
-==> diffl (%x. f x / g x) ((l * g x - m * f x) / g x ^ 2) x"
-  by (import lim DIFF_DIV)
-
-lemma DIFF_SUM: "(!!r. m <= r & r < m + n ==> diffl (f r) (f' r x) x)
-==> diffl (%x. real.sum (m, n) (%n. f n x)) (real.sum (m, n) (%r. f' r x)) x"
-  by (import lim DIFF_SUM)
-
-lemma CONT_BOUNDED: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
-==> EX M. ALL x. a <= x & x <= b --> f x <= M"
-  by (import lim CONT_BOUNDED)
-
-lemma CONT_HASSUP: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
-==> EX M. (ALL x. a <= x & x <= b --> f x <= M) &
-          (ALL N<M. EX x>=a. x <= b & N < f x)"
-  by (import lim CONT_HASSUP)
-
-lemma CONT_ATTAINS: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
-==> EX x. (ALL xa. a <= xa & xa <= b --> f xa <= x) &
-          (EX xa>=a. xa <= b & f xa = x)"
-  by (import lim CONT_ATTAINS)
-
-lemma CONT_ATTAINS2: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
-==> EX x. (ALL xa. a <= xa & xa <= b --> x <= f xa) &
-          (EX xa>=a. xa <= b & f xa = x)"
-  by (import lim CONT_ATTAINS2)
-
-lemma CONT_ATTAINS_ALL: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
-==> EX x M.
-       x <= M &
-       (ALL y. x <= y & y <= M --> (EX x>=a. x <= b & f x = y)) &
-       (ALL xa. a <= xa & xa <= b --> x <= f xa & f xa <= M)"
-  by (import lim CONT_ATTAINS_ALL)
-
-lemma DIFF_LINC: "diffl f l x & 0 < l ==> EX d>0. ALL h. 0 < h & h < d --> f x < f (x + h)"
-  by (import lim DIFF_LINC)
-
-lemma DIFF_LDEC: "diffl f l x & l < 0 ==> EX d>0. ALL h. 0 < h & h < d --> f x < f (x - h)"
-  by (import lim DIFF_LDEC)
-
-lemma DIFF_LMAX: "diffl f l x & (EX d>0. ALL y. abs (x - y) < d --> f y <= f x) ==> l = 0"
-  by (import lim DIFF_LMAX)
-
-lemma DIFF_LMIN: "diffl f l x & (EX d>0. ALL y. abs (x - y) < d --> f x <= f y) ==> l = 0"
-  by (import lim DIFF_LMIN)
-
-lemma DIFF_LCONST: "diffl f l x & (EX d>0. ALL y. abs (x - y) < d --> f y = f x) ==> l = 0"
-  by (import lim DIFF_LCONST)
-
-lemma ROLLE: "a < b &
-f a = f b &
-(ALL x. a <= x & x <= b --> contl f x) &
-(ALL x. a < x & x < b --> lim.differentiable f x)
-==> EX z>a. z < b & diffl f 0 z"
-  by (import lim ROLLE)
-
-lemma MVT: "a < b &
-(ALL x. a <= x & x <= b --> contl f x) &
-(ALL x. a < x & x < b --> lim.differentiable f x)
-==> EX l z. a < z & z < b & diffl f l z & f b - f a = (b - a) * l"
-  by (import lim MVT)
-
-lemma DIFF_ISCONST_END: "a < b &
-(ALL x. a <= x & x <= b --> contl f x) &
-(ALL x. a < x & x < b --> diffl f 0 x)
-==> f b = f a"
-  by (import lim DIFF_ISCONST_END)
-
-lemma DIFF_ISCONST: "[| a < b &
-   (ALL x. a <= x & x <= b --> contl f x) &
-   (ALL x. a < x & x < b --> diffl f 0 x);
-   a <= x & x <= b |]
-==> f x = f a"
-  by (import lim DIFF_ISCONST)
-
-lemma DIFF_ISCONST_ALL: "(!!x. diffl f 0 x) ==> f x = f y"
-  by (import lim DIFF_ISCONST_ALL)
-
-lemma INTERVAL_ABS: "((x::real) - (d::real) <= (z::real) & z <= x + d) = (abs (z - x) <= d)"
-  by (import lim INTERVAL_ABS)
-
-lemma CONT_INJ_LEMMA: "0 < d &
-(ALL z. abs (z - x) <= d --> g (f z) = z) &
-(ALL z. abs (z - x) <= d --> contl f z)
-==> ~ (ALL z. abs (z - x) <= d --> f z <= f x)"
-  by (import lim CONT_INJ_LEMMA)
-
-lemma CONT_INJ_LEMMA2: "0 < d &
-(ALL z. abs (z - x) <= d --> g (f z) = z) &
-(ALL z. abs (z - x) <= d --> contl f z)
-==> ~ (ALL z. abs (z - x) <= d --> f x <= f z)"
-  by (import lim CONT_INJ_LEMMA2)
-
-lemma CONT_INJ_RANGE: "0 < d &
-(ALL z. abs (z - x) <= d --> g (f z) = z) &
-(ALL z. abs (z - x) <= d --> contl f z)
-==> EX e>0. ALL y. abs (y - f x) <= e --> (EX z. abs (z - x) <= d & f z = y)"
-  by (import lim CONT_INJ_RANGE)
-
-lemma CONT_INVERSE: "0 < d &
-(ALL z. abs (z - x) <= d --> g (f z) = z) &
-(ALL z. abs (z - x) <= d --> contl f z)
-==> contl g (f x)"
-  by (import lim CONT_INVERSE)
-
-lemma DIFF_INVERSE: "0 < d &
-(ALL z. abs (z - x) <= d --> g (f z) = z) &
-(ALL z. abs (z - x) <= d --> contl f z) & diffl f l x & l ~= 0
-==> diffl g (inverse l) (f x)"
-  by (import lim DIFF_INVERSE)
-
-lemma DIFF_INVERSE_LT: "0 < d &
-(ALL z. abs (z - x) < d --> g (f z) = z) &
-(ALL z. abs (z - x) < d --> contl f z) & diffl f l x & l ~= 0
-==> diffl g (inverse l) (f x)"
-  by (import lim DIFF_INVERSE_LT)
-
-lemma INTERVAL_CLEMMA: "(a::real) < (x::real) & x < (b::real)
-==> EX d>0::real. ALL y::real. abs (y - x) <= d --> a < y & y < b"
-  by (import lim INTERVAL_CLEMMA)
-
-lemma DIFF_INVERSE_OPEN: "a < x &
-x < b &
-(ALL z. a < z & z < b --> g (f z) = z & contl f z) & diffl f l x & l ~= 0
-==> diffl g (inverse l) (f x)"
-  by (import lim DIFF_INVERSE_OPEN)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" powser
-
-lemma POWDIFF_LEMMA: "real.sum (0, Suc n) (%p. x ^ p * y ^ (Suc n - p)) =
-y * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
-  by (import powser POWDIFF_LEMMA)
-
-lemma POWDIFF: "x ^ Suc n - y ^ Suc n =
-(x - y) * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
-  by (import powser POWDIFF)
-
-lemma POWREV: "real.sum (0, Suc n) (%xa. x ^ xa * y ^ (n - xa)) =
-real.sum (0, Suc n) (%xa. x ^ (n - xa) * y ^ xa)"
-  by (import powser POWREV)
-
-lemma POWSER_INSIDEA: "seq.summable (%n. f n * x ^ n) & abs z < abs x
-==> seq.summable (%n. abs (f n) * z ^ n)"
-  by (import powser POWSER_INSIDEA)
-
-lemma POWSER_INSIDE: "seq.summable (%n. f n * x ^ n) & abs z < abs x
-==> seq.summable (%n. f n * z ^ n)"
-  by (import powser POWSER_INSIDE)
-
-consts
-  diffs :: "(nat => real) => nat => real" 
-
-defs
-  diffs_def: "powser.diffs == %c n. real (Suc n) * c (Suc n)"
-
-lemma diffs: "powser.diffs c = (%n. real (Suc n) * c (Suc n))"
-  by (import powser diffs)
-
-lemma DIFFS_NEG: "powser.diffs (%n. - c n) = (%x. - powser.diffs c x)"
-  by (import powser DIFFS_NEG)
-
-lemma DIFFS_LEMMA: "real.sum (0, n) (%n. powser.diffs c n * x ^ n) =
-real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) +
-real n * (c n * x ^ (n - 1))"
-  by (import powser DIFFS_LEMMA)
-
-lemma DIFFS_LEMMA2: "real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) =
-real.sum (0, n) (%n. powser.diffs c n * x ^ n) -
-real n * (c n * x ^ (n - 1))"
-  by (import powser DIFFS_LEMMA2)
-
-lemma DIFFS_EQUIV: "seq.summable (%n. powser.diffs c n * x ^ n)
-==> seq.sums (%n. real n * (c n * x ^ (n - 1)))
-     (seq.suminf (%n. powser.diffs c n * x ^ n))"
-  by (import powser DIFFS_EQUIV)
-
-lemma TERMDIFF_LEMMA1: "real.sum (0, m) (%p. (z + h) ^ (m - p) * z ^ p - z ^ m) =
-real.sum (0, m) (%p. z ^ p * ((z + h) ^ (m - p) - z ^ (m - p)))"
-  by (import powser TERMDIFF_LEMMA1)
-
-lemma TERMDIFF_LEMMA2: "h ~= 0
-==> ((z + h) ^ n - z ^ n) / h - real n * z ^ (n - 1) =
-    h *
-    real.sum (0, n - 1)
-     (%p. z ^ p *
-          real.sum (0, n - 1 - p) (%q. (z + h) ^ q * z ^ (n - 2 - p - q)))"
-  by (import powser TERMDIFF_LEMMA2)
-
-lemma TERMDIFF_LEMMA3: "h ~= 0 & abs z <= k' & abs (z + h) <= k'
-==> abs (((z + h) ^ n - z ^ n) / h - real n * z ^ (n - 1))
-    <= real n * (real (n - 1) * (k' ^ (n - 2) * abs h))"
-  by (import powser TERMDIFF_LEMMA3)
-
-lemma TERMDIFF_LEMMA4: "0 < k & (ALL h. 0 < abs h & abs h < k --> abs (f h) <= k' * abs h)
-==> tends_real_real f 0 0"
-  by (import powser TERMDIFF_LEMMA4)
-
-lemma TERMDIFF_LEMMA5: "0 < k &
-seq.summable f &
-(ALL h. 0 < abs h & abs h < k --> (ALL n. abs (g h n) <= f n * abs h))
-==> tends_real_real (%h. seq.suminf (g h)) 0 0"
-  by (import powser TERMDIFF_LEMMA5)
-
-lemma TERMDIFF: "seq.summable (%n. c n * k' ^ n) &
-seq.summable (%n. powser.diffs c n * k' ^ n) &
-seq.summable (%n. powser.diffs (powser.diffs c) n * k' ^ n) & abs x < abs k'
-==> diffl (%x. seq.suminf (%n. c n * x ^ n))
-     (seq.suminf (%n. powser.diffs c n * x ^ n)) x"
-  by (import powser TERMDIFF)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" transc
-
-consts
-  exp :: "real => real" 
-
-defs
-  exp_def: "transc.exp == %x. seq.suminf (%n. inverse (real (FACT n)) * x ^ n)"
-
-lemma exp: "transc.exp x = seq.suminf (%n. inverse (real (FACT n)) * x ^ n)"
-  by (import transc exp)
-
-consts
-  cos :: "real => real" 
-
-defs
-  cos_def: "transc.cos ==
-%x. seq.suminf
-     (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
-
-lemma cos: "transc.cos x =
-seq.suminf
- (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
-  by (import transc cos)
-
-consts
-  sin :: "real => real" 
-
-defs
-  sin_def: "transc.sin ==
-%x. seq.suminf
-     (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
-          x ^ n)"
-
-lemma sin: "transc.sin x =
-seq.suminf
- (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
-      x ^ n)"
-  by (import transc sin)
-
-lemma EXP_CONVERGES: "seq.sums (%n. inverse (real (FACT n)) * x ^ n) (transc.exp x)"
-  by (import transc EXP_CONVERGES)
-
-lemma SIN_CONVERGES: "seq.sums
- (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
-      x ^ n)
- (transc.sin x)"
-  by (import transc SIN_CONVERGES)
-
-lemma COS_CONVERGES: "seq.sums
- (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)
- (transc.cos x)"
-  by (import transc COS_CONVERGES)
-
-lemma EXP_FDIFF: "powser.diffs (%n. inverse (real (FACT n))) = (%n. inverse (real (FACT n)))"
-  by (import transc EXP_FDIFF)
-
-lemma SIN_FDIFF: "powser.diffs
- (%n. if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) =
-(%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0)"
-  by (import transc SIN_FDIFF)
-
-lemma COS_FDIFF: "powser.diffs (%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) =
-(%n. - (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)))"
-  by (import transc COS_FDIFF)
-
-lemma SIN_NEGLEMMA: "- transc.sin x =
-seq.suminf
- (%n. - ((if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
-         x ^ n))"
-  by (import transc SIN_NEGLEMMA)
-
-lemma DIFF_EXP: "diffl transc.exp (transc.exp x) x"
-  by (import transc DIFF_EXP)
-
-lemma DIFF_SIN: "diffl transc.sin (transc.cos x) x"
-  by (import transc DIFF_SIN)
-
-lemma DIFF_COS: "diffl transc.cos (- transc.sin x) x"
-  by (import transc DIFF_COS)
-
-lemma DIFF_COMPOSITE: "(diffl f l x & f x ~= 0 --> diffl (%x. inverse (f x)) (- (l / f x ^ 2)) x) &
-(diffl f l x & diffl g m x & g x ~= 0 -->
- diffl (%x. f x / g x) ((l * g x - m * f x) / g x ^ 2) x) &
-(diffl f l x & diffl g m x --> diffl (%x. f x + g x) (l + m) x) &
-(diffl f l x & diffl g m x -->
- diffl (%x. f x * g x) (l * g x + m * f x) x) &
-(diffl f l x & diffl g m x --> diffl (%x. f x - g x) (l - m) x) &
-(diffl f l x --> diffl (%x. - f x) (- l) x) &
-(diffl g m x --> diffl (%x. g x ^ n) (real n * g x ^ (n - 1) * m) x) &
-(diffl g m x --> diffl (%x. transc.exp (g x)) (transc.exp (g x) * m) x) &
-(diffl g m x --> diffl (%x. transc.sin (g x)) (transc.cos (g x) * m) x) &
-(diffl g m x --> diffl (%x. transc.cos (g x)) (- transc.sin (g x) * m) x)"
-  by (import transc DIFF_COMPOSITE)
-
-lemma EXP_0: "transc.exp 0 = 1"
-  by (import transc EXP_0)
-
-lemma EXP_LE_X: "0 <= x ==> 1 + x <= transc.exp x"
-  by (import transc EXP_LE_X)
-
-lemma EXP_LT_1: "0 < x ==> 1 < transc.exp x"
-  by (import transc EXP_LT_1)
-
-lemma EXP_ADD_MUL: "transc.exp (x + y) * transc.exp (- x) = transc.exp y"
-  by (import transc EXP_ADD_MUL)
-
-lemma EXP_NEG_MUL: "transc.exp x * transc.exp (- x) = 1"
-  by (import transc EXP_NEG_MUL)
-
-lemma EXP_NEG_MUL2: "transc.exp (- x) * transc.exp x = 1"
-  by (import transc EXP_NEG_MUL2)
-
-lemma EXP_NEG: "transc.exp (- x) = inverse (transc.exp x)"
-  by (import transc EXP_NEG)
-
-lemma EXP_ADD: "transc.exp (x + y) = transc.exp x * transc.exp y"
-  by (import transc EXP_ADD)
-
-lemma EXP_POS_LE: "0 <= transc.exp x"
-  by (import transc EXP_POS_LE)
-
-lemma EXP_NZ: "transc.exp x ~= 0"
-  by (import transc EXP_NZ)
-
-lemma EXP_POS_LT: "0 < transc.exp x"
-  by (import transc EXP_POS_LT)
-
-lemma EXP_N: "transc.exp (real n * x) = transc.exp x ^ n"
-  by (import transc EXP_N)
-
-lemma EXP_SUB: "transc.exp (x - y) = transc.exp x / transc.exp y"
-  by (import transc EXP_SUB)
-
-lemma EXP_MONO_IMP: "x < y ==> transc.exp x < transc.exp y"
-  by (import transc EXP_MONO_IMP)
-
-lemma EXP_MONO_LT: "(transc.exp x < transc.exp y) = (x < y)"
-  by (import transc EXP_MONO_LT)
-
-lemma EXP_MONO_LE: "(transc.exp x <= transc.exp y) = (x <= y)"
-  by (import transc EXP_MONO_LE)
-
-lemma EXP_INJ: "(transc.exp x = transc.exp y) = (x = y)"
-  by (import transc EXP_INJ)
-
-lemma EXP_TOTAL_LEMMA: "1 <= y ==> EX x>=0. x <= y - 1 & transc.exp x = y"
-  by (import transc EXP_TOTAL_LEMMA)
-
-lemma EXP_TOTAL: "0 < y ==> EX x. transc.exp x = y"
-  by (import transc EXP_TOTAL)
-
-consts
-  ln :: "real => real" 
-
-defs
-  ln_def: "transc.ln == %x. SOME u. transc.exp u = x"
-
-lemma ln: "transc.ln x = (SOME u. transc.exp u = x)"
-  by (import transc ln)
-
-lemma LN_EXP: "transc.ln (transc.exp x) = x"
-  by (import transc LN_EXP)
-
-lemma EXP_LN: "(transc.exp (transc.ln x) = x) = (0 < x)"
-  by (import transc EXP_LN)
-
-lemma LN_MUL: "0 < x & 0 < y ==> transc.ln (x * y) = transc.ln x + transc.ln y"
-  by (import transc LN_MUL)
-
-lemma LN_INJ: "0 < x & 0 < y ==> (transc.ln x = transc.ln y) = (x = y)"
-  by (import transc LN_INJ)
-
-lemma LN_1: "transc.ln 1 = 0"
-  by (import transc LN_1)
-
-lemma LN_INV: "0 < x ==> transc.ln (inverse x) = - transc.ln x"
-  by (import transc LN_INV)
-
-lemma LN_DIV: "0 < x & 0 < y ==> transc.ln (x / y) = transc.ln x - transc.ln y"
-  by (import transc LN_DIV)
-
-lemma LN_MONO_LT: "0 < x & 0 < y ==> (transc.ln x < transc.ln y) = (x < y)"
-  by (import transc LN_MONO_LT)
-
-lemma LN_MONO_LE: "0 < x & 0 < y ==> (transc.ln x <= transc.ln y) = (x <= y)"
-  by (import transc LN_MONO_LE)
-
-lemma LN_POW: "0 < x ==> transc.ln (x ^ n) = real n * transc.ln x"
-  by (import transc LN_POW)
-
-lemma LN_LE: "0 <= x ==> transc.ln (1 + x) <= x"
-  by (import transc LN_LE)
-
-lemma LN_LT_X: "0 < x ==> transc.ln x < x"
-  by (import transc LN_LT_X)
-
-lemma LN_POS: "1 <= x ==> 0 <= transc.ln x"
-  by (import transc LN_POS)
-
-consts
-  root :: "nat => real => real" 
-
-defs
-  root_def: "transc.root == %n x. SOME u. (0 < x --> 0 < u) & u ^ n = x"
-
-lemma root: "transc.root n x = (SOME u. (0 < x --> 0 < u) & u ^ n = x)"
-  by (import transc root)
-
-consts
-  sqrt :: "real => real" 
-
-defs
-  sqrt_def: "transc.sqrt == transc.root 2"
-
-lemma sqrt: "transc.sqrt x = transc.root 2 x"
-  by (import transc sqrt)
-
-lemma ROOT_LT_LEMMA: "0 < x ==> transc.exp (transc.ln x / real (Suc n)) ^ Suc n = x"
-  by (import transc ROOT_LT_LEMMA)
-
-lemma ROOT_LN: "0 < x ==> transc.root (Suc n) x = transc.exp (transc.ln x / real (Suc n))"
-  by (import transc ROOT_LN)
-
-lemma ROOT_0: "transc.root (Suc n) 0 = 0"
-  by (import transc ROOT_0)
-
-lemma ROOT_1: "transc.root (Suc n) 1 = 1"
-  by (import transc ROOT_1)
-
-lemma ROOT_POS_LT: "0 < x ==> 0 < transc.root (Suc n) x"
-  by (import transc ROOT_POS_LT)
-
-lemma ROOT_POW_POS: "0 <= x ==> transc.root (Suc n) x ^ Suc n = x"
-  by (import transc ROOT_POW_POS)
-
-lemma POW_ROOT_POS: "0 <= x ==> transc.root (Suc n) (x ^ Suc n) = x"
-  by (import transc POW_ROOT_POS)
-
-lemma ROOT_POS: "0 <= x ==> 0 <= transc.root (Suc n) x"
-  by (import transc ROOT_POS)
-
-lemma ROOT_POS_UNIQ: "0 <= x & 0 <= y & y ^ Suc n = x ==> transc.root (Suc n) x = y"
-  by (import transc ROOT_POS_UNIQ)
-
-lemma ROOT_MUL: "0 <= x & 0 <= y
-==> transc.root (Suc n) (x * y) =
-    transc.root (Suc n) x * transc.root (Suc n) y"
-  by (import transc ROOT_MUL)
-
-lemma ROOT_INV: "0 <= x ==> transc.root (Suc n) (inverse x) = inverse (transc.root (Suc n) x)"
-  by (import transc ROOT_INV)
-
-lemma ROOT_DIV: "0 <= xa & 0 <= xb
-==> transc.root (Suc x) (xa / xb) =
-    transc.root (Suc x) xa / transc.root (Suc x) xb"
-  by (import transc ROOT_DIV)
-
-lemma ROOT_MONO_LE: "0 <= x & x <= y ==> transc.root (Suc n) x <= transc.root (Suc n) y"
-  by (import transc ROOT_MONO_LE)
-
-lemma SQRT_0: "transc.sqrt 0 = 0"
-  by (import transc SQRT_0)
-
-lemma SQRT_1: "transc.sqrt 1 = 1"
-  by (import transc SQRT_1)
-
-lemma SQRT_POS_LT: "0 < x ==> 0 < transc.sqrt x"
-  by (import transc SQRT_POS_LT)
-
-lemma SQRT_POS_LE: "0 <= x ==> 0 <= transc.sqrt x"
-  by (import transc SQRT_POS_LE)
-
-lemma SQRT_POW2: "(transc.sqrt x ^ 2 = x) = (0 <= x)"
-  by (import transc SQRT_POW2)
-
-lemma SQRT_POW_2: "0 <= x ==> transc.sqrt x ^ 2 = x"
-  by (import transc SQRT_POW_2)
-
-lemma POW_2_SQRT: "0 <= x ==> transc.sqrt (x ^ 2) = x"
-  by (import transc POW_2_SQRT)
-
-lemma SQRT_POS_UNIQ: "0 <= x & 0 <= xa & xa ^ 2 = x ==> transc.sqrt x = xa"
-  by (import transc SQRT_POS_UNIQ)
-
-lemma SQRT_MUL: "0 <= x & 0 <= xa ==> transc.sqrt (x * xa) = transc.sqrt x * transc.sqrt xa"
-  by (import transc SQRT_MUL)
-
-lemma SQRT_INV: "0 <= x ==> transc.sqrt (inverse x) = inverse (transc.sqrt x)"
-  by (import transc SQRT_INV)
-
-lemma SQRT_DIV: "0 <= x & 0 <= xa ==> transc.sqrt (x / xa) = transc.sqrt x / transc.sqrt xa"
-  by (import transc SQRT_DIV)
-
-lemma SQRT_MONO_LE: "0 <= x & x <= xa ==> transc.sqrt x <= transc.sqrt xa"
-  by (import transc SQRT_MONO_LE)
-
-lemma SQRT_EVEN_POW2: "EVEN n ==> transc.sqrt (2 ^ n) = 2 ^ (n div 2)"
-  by (import transc SQRT_EVEN_POW2)
-
-lemma REAL_DIV_SQRT: "0 <= x ==> x / transc.sqrt x = transc.sqrt x"
-  by (import transc REAL_DIV_SQRT)
-
-lemma SQRT_EQ: "x ^ 2 = y & 0 <= x ==> x = transc.sqrt y"
-  by (import transc SQRT_EQ)
-
-lemma SIN_0: "transc.sin 0 = 0"
-  by (import transc SIN_0)
-
-lemma COS_0: "transc.cos 0 = 1"
-  by (import transc COS_0)
-
-lemma SIN_CIRCLE: "transc.sin x ^ 2 + transc.cos x ^ 2 = 1"
-  by (import transc SIN_CIRCLE)
-
-lemma SIN_BOUND: "abs (transc.sin x) <= 1"
-  by (import transc SIN_BOUND)
-
-lemma SIN_BOUNDS: "- 1 <= transc.sin x & transc.sin x <= 1"
-  by (import transc SIN_BOUNDS)
-
-lemma COS_BOUND: "abs (transc.cos x) <= 1"
-  by (import transc COS_BOUND)
-
-lemma COS_BOUNDS: "- 1 <= transc.cos x & transc.cos x <= 1"
-  by (import transc COS_BOUNDS)
-
-lemma SIN_COS_ADD: "(transc.sin (x + y) -
- (transc.sin x * transc.cos y + transc.cos x * transc.sin y)) ^
-2 +
-(transc.cos (x + y) -
- (transc.cos x * transc.cos y - transc.sin x * transc.sin y)) ^
-2 =
-0"
-  by (import transc SIN_COS_ADD)
-
-lemma SIN_COS_NEG: "(transc.sin (- x) + transc.sin x) ^ 2 +
-(transc.cos (- x) - transc.cos x) ^ 2 =
-0"
-  by (import transc SIN_COS_NEG)
-
-lemma SIN_ADD: "transc.sin (x + y) =
-transc.sin x * transc.cos y + transc.cos x * transc.sin y"
-  by (import transc SIN_ADD)
-
-lemma COS_ADD: "transc.cos (x + y) =
-transc.cos x * transc.cos y - transc.sin x * transc.sin y"
-  by (import transc COS_ADD)
-
-lemma SIN_NEG: "transc.sin (- x) = - transc.sin x"
-  by (import transc SIN_NEG)
-
-lemma COS_NEG: "transc.cos (- x) = transc.cos x"
-  by (import transc COS_NEG)
-
-lemma SIN_DOUBLE: "transc.sin (2 * x) = 2 * (transc.sin x * transc.cos x)"
-  by (import transc SIN_DOUBLE)
-
-lemma COS_DOUBLE: "transc.cos (2 * x) = transc.cos x ^ 2 - transc.sin x ^ 2"
-  by (import transc COS_DOUBLE)
-
-lemma SIN_PAIRED: "seq.sums (%n. (- 1) ^ n / real (FACT (2 * n + 1)) * x ^ (2 * n + 1))
- (transc.sin x)"
-  by (import transc SIN_PAIRED)
-
-lemma SIN_POS: "0 < x & x < 2 ==> 0 < transc.sin x"
-  by (import transc SIN_POS)
-
-lemma COS_PAIRED: "seq.sums (%n. (- 1) ^ n / real (FACT (2 * n)) * x ^ (2 * n)) (transc.cos x)"
-  by (import transc COS_PAIRED)
-
-lemma COS_2: "transc.cos 2 < 0"
-  by (import transc COS_2)
-
-lemma COS_ISZERO: "EX! x. 0 <= x & x <= 2 & transc.cos x = 0"
-  by (import transc COS_ISZERO)
-
-consts
-  pi :: "real" 
-
-defs
-  pi_def: "transc.pi == 2 * (SOME x. 0 <= x & x <= 2 & transc.cos x = 0)"
-
-lemma pi: "transc.pi = 2 * (SOME x. 0 <= x & x <= 2 & transc.cos x = 0)"
-  by (import transc pi)
-
-lemma PI2: "transc.pi / 2 = (SOME x. 0 <= x & x <= 2 & transc.cos x = 0)"
-  by (import transc PI2)
-
-lemma COS_PI2: "transc.cos (transc.pi / 2) = 0"
-  by (import transc COS_PI2)
-
-lemma PI2_BOUNDS: "0 < transc.pi / 2 & transc.pi / 2 < 2"
-  by (import transc PI2_BOUNDS)
-
-lemma PI_POS: "0 < transc.pi"
-  by (import transc PI_POS)
-
-lemma SIN_PI2: "transc.sin (transc.pi / 2) = 1"
-  by (import transc SIN_PI2)
-
-lemma COS_PI: "transc.cos transc.pi = - 1"
-  by (import transc COS_PI)
-
-lemma SIN_PI: "transc.sin transc.pi = 0"
-  by (import transc SIN_PI)
-
-lemma SIN_COS: "transc.sin x = transc.cos (transc.pi / 2 - x)"
-  by (import transc SIN_COS)
-
-lemma COS_SIN: "transc.cos x = transc.sin (transc.pi / 2 - x)"
-  by (import transc COS_SIN)
-
-lemma SIN_PERIODIC_PI: "transc.sin (x + transc.pi) = - transc.sin x"
-  by (import transc SIN_PERIODIC_PI)
-
-lemma COS_PERIODIC_PI: "transc.cos (x + transc.pi) = - transc.cos x"
-  by (import transc COS_PERIODIC_PI)
-
-lemma SIN_PERIODIC: "transc.sin (x + 2 * transc.pi) = transc.sin x"
-  by (import transc SIN_PERIODIC)
-
-lemma COS_PERIODIC: "transc.cos (x + 2 * transc.pi) = transc.cos x"
-  by (import transc COS_PERIODIC)
-
-lemma COS_NPI: "transc.cos (real n * transc.pi) = (- 1) ^ n"
-  by (import transc COS_NPI)
-
-lemma SIN_NPI: "transc.sin (real (n::nat) * transc.pi) = (0::real)"
-  by (import transc SIN_NPI)
-
-lemma SIN_POS_PI2: "0 < x & x < transc.pi / 2 ==> 0 < transc.sin x"
-  by (import transc SIN_POS_PI2)
-
-lemma COS_POS_PI2: "0 < x & x < transc.pi / 2 ==> 0 < transc.cos x"
-  by (import transc COS_POS_PI2)
-
-lemma COS_POS_PI: "- (transc.pi / 2) < x & x < transc.pi / 2 ==> 0 < transc.cos x"
-  by (import transc COS_POS_PI)
-
-lemma SIN_POS_PI: "0 < x & x < transc.pi ==> 0 < transc.sin x"
-  by (import transc SIN_POS_PI)
-
-lemma COS_POS_PI2_LE: "0 <= x & x <= transc.pi / 2 ==> 0 <= transc.cos x"
-  by (import transc COS_POS_PI2_LE)
-
-lemma COS_POS_PI_LE: "- (transc.pi / 2) <= x & x <= transc.pi / 2 ==> 0 <= transc.cos x"
-  by (import transc COS_POS_PI_LE)
-
-lemma SIN_POS_PI2_LE: "0 <= x & x <= transc.pi / 2 ==> 0 <= transc.sin x"
-  by (import transc SIN_POS_PI2_LE)
-
-lemma SIN_POS_PI_LE: "0 <= x & x <= transc.pi ==> 0 <= transc.sin x"
-  by (import transc SIN_POS_PI_LE)
-
-lemma COS_TOTAL: "- 1 <= y & y <= 1 ==> EX! x. 0 <= x & x <= transc.pi & transc.cos x = y"
-  by (import transc COS_TOTAL)
-
-lemma SIN_TOTAL: "- 1 <= y & y <= 1
-==> EX! x. - (transc.pi / 2) <= x & x <= transc.pi / 2 & transc.sin x = y"
-  by (import transc SIN_TOTAL)
-
-lemma COS_ZERO_LEMMA: "0 <= x & transc.cos x = 0 ==> EX n. ~ EVEN n & x = real n * (transc.pi / 2)"
-  by (import transc COS_ZERO_LEMMA)
-
-lemma SIN_ZERO_LEMMA: "0 <= x & transc.sin x = 0 ==> EX n. EVEN n & x = real n * (transc.pi / 2)"
-  by (import transc SIN_ZERO_LEMMA)
-
-lemma COS_ZERO: "(transc.cos x = 0) =
-((EX n. ~ EVEN n & x = real n * (transc.pi / 2)) |
- (EX n. ~ EVEN n & x = - (real n * (transc.pi / 2))))"
-  by (import transc COS_ZERO)
-
-lemma SIN_ZERO: "(transc.sin x = 0) =
-((EX n. EVEN n & x = real n * (transc.pi / 2)) |
- (EX n. EVEN n & x = - (real n * (transc.pi / 2))))"
-  by (import transc SIN_ZERO)
-
-consts
-  tan :: "real => real" 
-
-defs
-  tan_def: "transc.tan == %x. transc.sin x / transc.cos x"
-
-lemma tan: "transc.tan x = transc.sin x / transc.cos x"
-  by (import transc tan)
-
-lemma TAN_0: "transc.tan 0 = 0"
-  by (import transc TAN_0)
-
-lemma TAN_PI: "transc.tan transc.pi = 0"
-  by (import transc TAN_PI)
-
-lemma TAN_NPI: "transc.tan (real (n::nat) * transc.pi) = (0::real)"
-  by (import transc TAN_NPI)
-
-lemma TAN_NEG: "transc.tan (- x) = - transc.tan x"
-  by (import transc TAN_NEG)
-
-lemma TAN_PERIODIC: "transc.tan (x + 2 * transc.pi) = transc.tan x"
-  by (import transc TAN_PERIODIC)
-
-lemma TAN_ADD: "transc.cos x ~= 0 & transc.cos y ~= 0 & transc.cos (x + y) ~= 0
-==> transc.tan (x + y) =
-    (transc.tan x + transc.tan y) / (1 - transc.tan x * transc.tan y)"
-  by (import transc TAN_ADD)
-
-lemma TAN_DOUBLE: "transc.cos x ~= 0 & transc.cos (2 * x) ~= 0
-==> transc.tan (2 * x) = 2 * transc.tan x / (1 - transc.tan x ^ 2)"
-  by (import transc TAN_DOUBLE)
-
-lemma TAN_POS_PI2: "0 < x & x < transc.pi / 2 ==> 0 < transc.tan x"
-  by (import transc TAN_POS_PI2)
-
-lemma DIFF_TAN: "transc.cos x ~= 0 ==> diffl transc.tan (inverse (transc.cos x ^ 2)) x"
-  by (import transc DIFF_TAN)
-
-lemma TAN_TOTAL_LEMMA: "0 < y ==> EX x>0. x < transc.pi / 2 & y < transc.tan x"
-  by (import transc TAN_TOTAL_LEMMA)
-
-lemma TAN_TOTAL_POS: "0 <= y ==> EX x>=0. x < transc.pi / 2 & transc.tan x = y"
-  by (import transc TAN_TOTAL_POS)
-
-lemma TAN_TOTAL: "EX! x. - (transc.pi / 2) < x & x < transc.pi / 2 & transc.tan x = y"
-  by (import transc TAN_TOTAL)
-
-definition
-  asn :: "real => real"  where
-  "asn ==
-%y. SOME x. - (transc.pi / 2) <= x & x <= transc.pi / 2 & transc.sin x = y"
-
-lemma asn: "asn y =
-(SOME x. - (transc.pi / 2) <= x & x <= transc.pi / 2 & transc.sin x = y)"
-  by (import transc asn)
-
-definition
-  acs :: "real => real"  where
-  "acs == %y. SOME x. 0 <= x & x <= transc.pi & transc.cos x = y"
-
-lemma acs: "acs y = (SOME x. 0 <= x & x <= transc.pi & transc.cos x = y)"
-  by (import transc acs)
-
-definition
-  atn :: "real => real"  where
-  "atn ==
-%y. SOME x. - (transc.pi / 2) < x & x < transc.pi / 2 & transc.tan x = y"
-
-lemma atn: "atn y =
-(SOME x. - (transc.pi / 2) < x & x < transc.pi / 2 & transc.tan x = y)"
-  by (import transc atn)
-
-lemma ASN: "- 1 <= y & y <= 1
-==> - (transc.pi / 2) <= asn y &
-    asn y <= transc.pi / 2 & transc.sin (asn y) = y"
-  by (import transc ASN)
-
-lemma ASN_SIN: "- 1 <= y & y <= 1 ==> transc.sin (asn y) = y"
-  by (import transc ASN_SIN)
-
-lemma ASN_BOUNDS: "- 1 <= y & y <= 1 ==> - (transc.pi / 2) <= asn y & asn y <= transc.pi / 2"
-  by (import transc ASN_BOUNDS)
-
-lemma ASN_BOUNDS_LT: "- 1 < y & y < 1 ==> - (transc.pi / 2) < asn y & asn y < transc.pi / 2"
-  by (import transc ASN_BOUNDS_LT)
-
-lemma SIN_ASN: "- (transc.pi / 2) <= x & x <= transc.pi / 2 ==> asn (transc.sin x) = x"
-  by (import transc SIN_ASN)
-
-lemma ACS: "- 1 <= y & y <= 1
-==> 0 <= acs y & acs y <= transc.pi & transc.cos (acs y) = y"
-  by (import transc ACS)
-
-lemma ACS_COS: "- 1 <= y & y <= 1 ==> transc.cos (acs y) = y"
-  by (import transc ACS_COS)
-
-lemma ACS_BOUNDS: "- 1 <= y & y <= 1 ==> 0 <= acs y & acs y <= transc.pi"
-  by (import transc ACS_BOUNDS)
-
-lemma ACS_BOUNDS_LT: "- 1 < y & y < 1 ==> 0 < acs y & acs y < transc.pi"
-  by (import transc ACS_BOUNDS_LT)
-
-lemma COS_ACS: "0 <= x & x <= transc.pi ==> acs (transc.cos x) = x"
-  by (import transc COS_ACS)
-
-lemma ATN: "- (transc.pi / 2) < atn y & atn y < transc.pi / 2 & transc.tan (atn y) = y"
-  by (import transc ATN)
-
-lemma ATN_TAN: "transc.tan (atn x) = x"
-  by (import transc ATN_TAN)
-
-lemma ATN_BOUNDS: "- (transc.pi / 2) < atn x & atn x < transc.pi / 2"
-  by (import transc ATN_BOUNDS)
-
-lemma TAN_ATN: "- (transc.pi / 2) < x & x < transc.pi / 2 ==> atn (transc.tan x) = x"
-  by (import transc TAN_ATN)
-
-lemma TAN_SEC: "transc.cos x ~= 0 ==> 1 + transc.tan x ^ 2 = inverse (transc.cos x) ^ 2"
-  by (import transc TAN_SEC)
-
-lemma SIN_COS_SQ: "0 <= x & x <= transc.pi
-==> transc.sin x = transc.sqrt (1 - transc.cos x ^ 2)"
-  by (import transc SIN_COS_SQ)
-
-lemma COS_SIN_SQ: "- (transc.pi / 2) <= x & x <= transc.pi / 2
-==> transc.cos x = transc.sqrt (1 - transc.sin x ^ 2)"
-  by (import transc COS_SIN_SQ)
-
-lemma COS_ATN_NZ: "transc.cos (atn x) ~= 0"
-  by (import transc COS_ATN_NZ)
-
-lemma COS_ASN_NZ: "- 1 < x & x < 1 ==> transc.cos (asn x) ~= 0"
-  by (import transc COS_ASN_NZ)
-
-lemma SIN_ACS_NZ: "- 1 < x & x < 1 ==> transc.sin (acs x) ~= 0"
-  by (import transc SIN_ACS_NZ)
-
-lemma COS_SIN_SQRT: "0 <= transc.cos x ==> transc.cos x = transc.sqrt (1 - transc.sin x ^ 2)"
-  by (import transc COS_SIN_SQRT)
-
-lemma SIN_COS_SQRT: "0 <= transc.sin x ==> transc.sin x = transc.sqrt (1 - transc.cos x ^ 2)"
-  by (import transc SIN_COS_SQRT)
-
-lemma DIFF_LN: "0 < x ==> diffl transc.ln (inverse x) x"
-  by (import transc DIFF_LN)
-
-lemma DIFF_ASN_LEMMA: "- 1 < x & x < 1 ==> diffl asn (inverse (transc.cos (asn x))) x"
-  by (import transc DIFF_ASN_LEMMA)
-
-lemma DIFF_ASN: "- 1 < x & x < 1 ==> diffl asn (inverse (transc.sqrt (1 - x ^ 2))) x"
-  by (import transc DIFF_ASN)
-
-lemma DIFF_ACS_LEMMA: "- 1 < x & x < 1 ==> diffl acs (inverse (- transc.sin (acs x))) x"
-  by (import transc DIFF_ACS_LEMMA)
-
-lemma DIFF_ACS: "- 1 < x & x < 1 ==> diffl acs (- inverse (transc.sqrt (1 - x ^ 2))) x"
-  by (import transc DIFF_ACS)
-
-lemma DIFF_ATN: "diffl atn (inverse (1 + x ^ 2)) x"
-  by (import transc DIFF_ATN)
-
-definition
-  division :: "real * real => (nat => real) => bool"  where
-  "division ==
-%(a, b) D.
-   D 0 = a & (EX N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = b))"
-
-lemma division: "division (a, b) D =
-(D 0 = a & (EX N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = b)))"
-  by (import transc division)
-
-definition
-  dsize :: "(nat => real) => nat"  where
-  "dsize == %D. SOME N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = D N)"
-
-lemma dsize: "dsize D = (SOME N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = D N))"
-  by (import transc dsize)
-
-definition
-  tdiv :: "real * real => (nat => real) * (nat => real) => bool"  where
-  "tdiv ==
-%(a, b) (D, p). division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n))"
-
-lemma tdiv: "tdiv (a, b) (D, p) =
-(division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n)))"
-  by (import transc tdiv)
-
-definition
-  gauge :: "(real => bool) => (real => real) => bool"  where
-  "gauge == %E g. ALL x. E x --> 0 < g x"
-
-lemma gauge: "gauge E g = (ALL x. E x --> 0 < g x)"
-  by (import transc gauge)
-
-definition
-  fine :: "(real => real) => (nat => real) * (nat => real) => bool"  where
-  "fine == %g (D, p). ALL n<dsize D. D (Suc n) - D n < g (p n)"
-
-lemma fine: "fine g (D, p) = (ALL n<dsize D. D (Suc n) - D n < g (p n))"
-  by (import transc fine)
-
-definition
-  rsum :: "(nat => real) * (nat => real) => (real => real) => real"  where
-  "rsum == %(D, p) f. real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
-
-lemma rsum: "rsum (D, p) f = real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
-  by (import transc rsum)
-
-definition
-  Dint :: "real * real => (real => real) => real => bool"  where
-  "Dint ==
-%(a, b) f k.
-   ALL e>0.
-      EX g. gauge (%x. a <= x & x <= b) g &
-            (ALL D p.
-                tdiv (a, b) (D, p) & fine g (D, p) -->
-                abs (rsum (D, p) f - k) < e)"
-
-lemma Dint: "Dint (a, b) f k =
-(ALL e>0.
-    EX g. gauge (%x. a <= x & x <= b) g &
-          (ALL D p.
-              tdiv (a, b) (D, p) & fine g (D, p) -->
-              abs (rsum (D, p) f - k) < e))"
-  by (import transc Dint)
-
-lemma DIVISION_0: "a = b ==> dsize (%n. if n = 0 then a else b) = 0"
-  by (import transc DIVISION_0)
-
-lemma DIVISION_1: "a < b ==> dsize (%n. if n = 0 then a else b) = 1"
-  by (import transc DIVISION_1)
-
-lemma DIVISION_SINGLE: "a <= b ==> division (a, b) (%n. if n = 0 then a else b)"
-  by (import transc DIVISION_SINGLE)
-
-lemma DIVISION_LHS: "division (a, b) D ==> D 0 = a"
-  by (import transc DIVISION_LHS)
-
-lemma DIVISION_THM: "division (a, b) D =
-(D 0 = a & (ALL n<dsize D. D n < D (Suc n)) & (ALL n>=dsize D. D n = b))"
-  by (import transc DIVISION_THM)
-
-lemma DIVISION_RHS: "division (a, b) D ==> D (dsize D) = b"
-  by (import transc DIVISION_RHS)
-
-lemma DIVISION_LT_GEN: "division (a, b) D & m < n & n <= dsize D ==> D m < D n"
-  by (import transc DIVISION_LT_GEN)
-
-lemma DIVISION_LT: "[| division (a, b) D; n < dsize D |] ==> D 0 < D (Suc n)"
-  by (import transc DIVISION_LT)
-
-lemma DIVISION_LE: "division (a, b) D ==> a <= b"
-  by (import transc DIVISION_LE)
-
-lemma DIVISION_GT: "[| division (a, b) D; n < dsize D |] ==> D n < D (dsize D)"
-  by (import transc DIVISION_GT)
-
-lemma DIVISION_EQ: "division (a, b) D ==> (a = b) = (dsize D = 0)"
-  by (import transc DIVISION_EQ)
-
-lemma DIVISION_LBOUND: "division (a, b) D ==> a <= D r"
-  by (import transc DIVISION_LBOUND)
-
-lemma DIVISION_LBOUND_LT: "division (a, b) D & dsize D ~= 0 ==> a < D (Suc n)"
-  by (import transc DIVISION_LBOUND_LT)
-
-lemma DIVISION_UBOUND: "division (a, b) D ==> D r <= b"
-  by (import transc DIVISION_UBOUND)
-
-lemma DIVISION_UBOUND_LT: "division (a, b) D & n < dsize D ==> D n < b"
-  by (import transc DIVISION_UBOUND_LT)
-
-lemma DIVISION_APPEND: "(EX D1 p1. tdiv (a, b) (D1, p1) & fine g (D1, p1)) &
-(EX D2 p2. tdiv (b, c) (D2, p2) & fine g (D2, p2))
-==> EX x p. tdiv (a, c) (x, p) & fine g (x, p)"
-  by (import transc DIVISION_APPEND)
-
-lemma DIVISION_EXISTS: "a <= b & gauge (%x. a <= x & x <= b) g
-==> EX D p. tdiv (a, b) (D, p) & fine g (D, p)"
-  by (import transc DIVISION_EXISTS)
-
-lemma GAUGE_MIN: "gauge E g1 & gauge E g2 ==> gauge E (%x. if g1 x < g2 x then g1 x else g2 x)"
-  by (import transc GAUGE_MIN)
-
-lemma FINE_MIN: "fine (%x. if g1 x < g2 x then g1 x else g2 x) (D, p)
-==> fine g1 (D, p) & fine g2 (D, p)"
-  by (import transc FINE_MIN)
-
-lemma DINT_UNIQ: "a <= b & Dint (a, b) f k1 & Dint (a, b) f k2 ==> k1 = k2"
-  by (import transc DINT_UNIQ)
-
-lemma INTEGRAL_NULL: "Dint (a, a) f 0"
-  by (import transc INTEGRAL_NULL)
-
-lemma FTC1: "a <= b & (ALL x. a <= x & x <= b --> diffl f (f' x) x)
-==> Dint (a, b) f' (f b - f a)"
-  by (import transc FTC1)
-
-lemma MCLAURIN: "0 < h &
-0 < n &
-diff 0 = f &
-(ALL m t. m < n & 0 <= t & t <= h --> diffl (diff m) (diff (Suc m) t) t)
-==> EX t>0.
-       t < h &
-       f h =
-       real.sum (0, n) (%m. diff m 0 / real (FACT m) * h ^ m) +
-       diff n t / real (FACT n) * h ^ n"
-  by (import transc MCLAURIN)
-
-lemma MCLAURIN_NEG: "h < 0 &
-0 < n &
-diff 0 = f &
-(ALL m t. m < n & h <= t & t <= 0 --> diffl (diff m) (diff (Suc m) t) t)
-==> EX t>h.
-       t < 0 &
-       f h =
-       real.sum (0, n) (%m. diff m 0 / real (FACT m) * h ^ m) +
-       diff n t / real (FACT n) * h ^ n"
-  by (import transc MCLAURIN_NEG)
-
-lemma MCLAURIN_ALL_LT: "[| diff 0 = f & (ALL m x. diffl (diff m) (diff (Suc m) x) x);
-   x ~= 0 & 0 < n |]
-==> EX t. 0 < abs t &
-          abs t < abs x &
-          f x =
-          real.sum (0, n) (%m. diff m 0 / real (FACT m) * x ^ m) +
-          diff n t / real (FACT n) * x ^ n"
-  by (import transc MCLAURIN_ALL_LT)
-
-lemma MCLAURIN_ZERO: "(x::real) = (0::real) & (0::nat) < (n::nat)
-==> real.sum (0::nat, n)
-     (%m::nat.
-         (diff::nat => real => real) m (0::real) / real (FACT m) * x ^ m) =
-    diff (0::nat) (0::real)"
-  by (import transc MCLAURIN_ZERO)
-
-lemma MCLAURIN_ALL_LE: "diff 0 = f & (ALL m x. diffl (diff m) (diff (Suc m) x) x)
-==> EX t. abs t <= abs x &
-          f x =
-          real.sum (0, n) (%m. diff m 0 / real (FACT m) * x ^ m) +
-          diff n t / real (FACT n) * x ^ n"
-  by (import transc MCLAURIN_ALL_LE)
-
-lemma MCLAURIN_EXP_LT: "x ~= 0 & 0 < n
-==> EX xa.
-       0 < abs xa &
-       abs xa < abs x &
-       transc.exp x =
-       real.sum (0, n) (%m. x ^ m / real (FACT m)) +
-       transc.exp xa / real (FACT n) * x ^ n"
-  by (import transc MCLAURIN_EXP_LT)
-
-lemma MCLAURIN_EXP_LE: "EX xa.
-   abs xa <= abs x &
-   transc.exp x =
-   real.sum (0, n) (%m. x ^ m / real (FACT m)) +
-   transc.exp xa / real (FACT n) * x ^ n"
-  by (import transc MCLAURIN_EXP_LE)
-
-lemma DIFF_LN_COMPOSITE: "diffl g m x & 0 < g x ==> diffl (%x. transc.ln (g x)) (inverse (g x) * m) x"
-  by (import transc DIFF_LN_COMPOSITE)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" poly
-
-consts
-  poly :: "real list => real => real" 
-
-specification (poly_primdef: poly) poly_def: "(ALL x. poly [] x = 0) & (ALL h t x. poly (h # t) x = h + x * poly t x)"
-  by (import poly poly_def)
-
-consts
-  poly_add :: "real list => real list => real list" 
-
-specification (poly_add_primdef: poly_add) poly_add_def: "(ALL l2. poly_add [] l2 = l2) &
-(ALL h t l2.
-    poly_add (h # t) l2 =
-    (if l2 = [] then h # t else (h + hd l2) # poly_add t (tl l2)))"
-  by (import poly poly_add_def)
-
-consts
-  "##" :: "real => real list => real list" ("##")
-
-specification ("##") poly_cmul_def: "(ALL c. ## c [] = []) & (ALL c h t. ## c (h # t) = c * h # ## c t)"
-  by (import poly poly_cmul_def)
-
-consts
-  poly_neg :: "real list => real list" 
-
-defs
-  poly_neg_primdef: "poly_neg == ## (- 1)"
-
-lemma poly_neg_def: "poly_neg = ## (- 1)"
-  by (import poly poly_neg_def)
-
-consts
-  poly_mul :: "real list => real list => real list" 
-
-specification (poly_mul_primdef: poly_mul) poly_mul_def: "(ALL l2. poly_mul [] l2 = []) &
-(ALL h t l2.
-    poly_mul (h # t) l2 =
-    (if t = [] then ## h l2 else poly_add (## h l2) (0 # poly_mul t l2)))"
-  by (import poly poly_mul_def)
-
-consts
-  poly_exp :: "real list => nat => real list" 
-
-specification (poly_exp_primdef: poly_exp) poly_exp_def: "(ALL p. poly_exp p 0 = [1]) &
-(ALL p n. poly_exp p (Suc n) = poly_mul p (poly_exp p n))"
-  by (import poly poly_exp_def)
-
-consts
-  poly_diff_aux :: "nat => real list => real list" 
-
-specification (poly_diff_aux_primdef: poly_diff_aux) poly_diff_aux_def: "(ALL n. poly_diff_aux n [] = []) &
-(ALL n h t. poly_diff_aux n (h # t) = real n * h # poly_diff_aux (Suc n) t)"
-  by (import poly poly_diff_aux_def)
-
-definition
-  diff :: "real list => real list"  where
-  "diff == %l. if l = [] then [] else poly_diff_aux 1 (tl l)"
-
-lemma poly_diff_def: "diff l = (if l = [] then [] else poly_diff_aux 1 (tl l))"
-  by (import poly poly_diff_def)
-
-lemma POLY_ADD_CLAUSES: "poly_add [] p2 = p2 &
-poly_add p1 [] = p1 &
-poly_add (h1 # t1) (h2 # t2) = (h1 + h2) # poly_add t1 t2"
-  by (import poly POLY_ADD_CLAUSES)
-
-lemma POLY_CMUL_CLAUSES: "## c [] = [] & ## c (h # t) = c * h # ## c t"
-  by (import poly POLY_CMUL_CLAUSES)
-
-lemma POLY_NEG_CLAUSES: "poly_neg [] = [] & poly_neg (h # t) = - h # poly_neg t"
-  by (import poly POLY_NEG_CLAUSES)
-
-lemma POLY_MUL_CLAUSES: "poly_mul [] p2 = [] &
-poly_mul [h1] p2 = ## h1 p2 &
-poly_mul (h1 # k1 # t1) p2 = poly_add (## h1 p2) (0 # poly_mul (k1 # t1) p2)"
-  by (import poly POLY_MUL_CLAUSES)
-
-lemma POLY_DIFF_CLAUSES: "diff [] = [] & diff [c] = [] & diff (h # t) = poly_diff_aux 1 t"
-  by (import poly POLY_DIFF_CLAUSES)
-
-lemma POLY_ADD: "poly (poly_add t p2) x = poly t x + poly p2 x"
-  by (import poly POLY_ADD)
-
-lemma POLY_CMUL: "poly (## c t) x = c * poly t x"
-  by (import poly POLY_CMUL)
-
-lemma POLY_NEG: "poly (poly_neg x) xa = - poly x xa"
-  by (import poly POLY_NEG)
-
-lemma POLY_MUL: "poly (poly_mul t p2) x = poly t x * poly p2 x"
-  by (import poly POLY_MUL)
-
-lemma POLY_EXP: "poly (poly_exp p n) x = poly p x ^ n"
-  by (import poly POLY_EXP)
-
-lemma POLY_DIFF_LEMMA: "diffl (%x. x ^ Suc n * poly t x) (x ^ n * poly (poly_diff_aux (Suc n) t) x)
- x"
-  by (import poly POLY_DIFF_LEMMA)
-
-lemma POLY_DIFF: "diffl (poly t) (poly (diff t) x) x"
-  by (import poly POLY_DIFF)
-
-lemma POLY_DIFFERENTIABLE: "lim.differentiable (poly l) x"
-  by (import poly POLY_DIFFERENTIABLE)
-
-lemma POLY_CONT: "contl (poly l) x"
-  by (import poly POLY_CONT)
-
-lemma POLY_IVT_POS: "xa < xb & poly x xa < 0 & 0 < poly x xb
-==> EX xc>xa. xc < xb & poly x xc = 0"
-  by (import poly POLY_IVT_POS)
-
-lemma POLY_IVT_NEG: "a < b & 0 < poly p a & poly p b < 0 ==> EX x>a. x < b & poly p x = 0"
-  by (import poly POLY_IVT_NEG)
-
-lemma POLY_MVT: "a < b ==> EX x>a. x < b & poly p b - poly p a = (b - a) * poly (diff p) x"
-  by (import poly POLY_MVT)
-
-lemma POLY_ADD_RZERO: "poly (poly_add x []) = poly x"
-  by (import poly POLY_ADD_RZERO)
-
-lemma POLY_MUL_ASSOC: "poly (poly_mul x (poly_mul xa xb)) = poly (poly_mul (poly_mul x xa) xb)"
-  by (import poly POLY_MUL_ASSOC)
-
-lemma POLY_EXP_ADD: "poly (poly_exp xb (xa + x)) =
-poly (poly_mul (poly_exp xb xa) (poly_exp xb x))"
-  by (import poly POLY_EXP_ADD)
-
-lemma POLY_DIFF_AUX_ADD: "poly (poly_diff_aux n (poly_add t p2)) =
-poly (poly_add (poly_diff_aux n t) (poly_diff_aux n p2))"
-  by (import poly POLY_DIFF_AUX_ADD)
-
-lemma POLY_DIFF_AUX_CMUL: "poly (poly_diff_aux n (## c t)) = poly (## c (poly_diff_aux n t))"
-  by (import poly POLY_DIFF_AUX_CMUL)
-
-lemma POLY_DIFF_AUX_NEG: "poly (poly_diff_aux xa (poly_neg x)) = poly (poly_neg (poly_diff_aux xa x))"
-  by (import poly POLY_DIFF_AUX_NEG)
-
-lemma POLY_DIFF_AUX_MUL_LEMMA: "poly (poly_diff_aux (Suc n) t) = poly (poly_add (poly_diff_aux n t) t)"
-  by (import poly POLY_DIFF_AUX_MUL_LEMMA)
-
-lemma POLY_DIFF_ADD: "poly (diff (poly_add t p2)) = poly (poly_add (diff t) (diff p2))"
-  by (import poly POLY_DIFF_ADD)
-
-lemma POLY_DIFF_CMUL: "poly (diff (## c t)) = poly (## c (diff t))"
-  by (import poly POLY_DIFF_CMUL)
-
-lemma POLY_DIFF_NEG: "poly (diff (poly_neg x)) = poly (poly_neg (diff x))"
-  by (import poly POLY_DIFF_NEG)
-
-lemma POLY_DIFF_MUL_LEMMA: "poly (diff (xa # x)) = poly (poly_add (0 # diff x) x)"
-  by (import poly POLY_DIFF_MUL_LEMMA)
-
-lemma POLY_DIFF_MUL: "poly (diff (poly_mul t p2)) =
-poly (poly_add (poly_mul t (diff p2)) (poly_mul (diff t) p2))"
-  by (import poly POLY_DIFF_MUL)
-
-lemma POLY_DIFF_EXP: "poly (diff (poly_exp p (Suc n))) =
-poly (poly_mul (## (real (Suc n)) (poly_exp p n)) (diff p))"
-  by (import poly POLY_DIFF_EXP)
-
-lemma POLY_DIFF_EXP_PRIME: "poly (diff (poly_exp [- a, 1] (Suc n))) =
-poly (## (real (Suc n)) (poly_exp [- a, 1] n))"
-  by (import poly POLY_DIFF_EXP_PRIME)
-
-lemma POLY_LINEAR_REM: "EX q r. h # t = poly_add [r] (poly_mul [- a, 1] q)"
-  by (import poly POLY_LINEAR_REM)
-
-lemma POLY_LINEAR_DIVIDES: "(poly t a = 0) = (t = [] | (EX q. t = poly_mul [- a, 1] q))"
-  by (import poly POLY_LINEAR_DIVIDES)
-
-lemma POLY_LENGTH_MUL: "length (poly_mul [- a, 1] x) = Suc (length x)"
-  by (import poly POLY_LENGTH_MUL)
-
-lemma POLY_ROOTS_INDEX_LEMMA: "poly p ~= poly [] & length p = n
-==> EX i. ALL x. poly p x = 0 --> (EX m<=n. x = i m)"
-  by (import poly POLY_ROOTS_INDEX_LEMMA)
-
-lemma POLY_ROOTS_INDEX_LENGTH: "poly p ~= poly []
-==> EX i. ALL x. poly p x = 0 --> (EX n<=length p. x = i n)"
-  by (import poly POLY_ROOTS_INDEX_LENGTH)
-
-lemma POLY_ROOTS_FINITE_LEMMA: "poly (p::real list) ~= poly []
-==> EX (N::nat) i::nat => real.
-       ALL x::real. poly p x = (0::real) --> (EX n<N. x = i n)"
-  by (import poly POLY_ROOTS_FINITE_LEMMA)
-
-lemma FINITE_LEMMA: "(!!xb::real. (xa::real => bool) xb ==> EX n<x::nat. xb = (i::nat => real) n)
-==> EX a::real. ALL x::real. xa x --> x < a"
-  by (import poly FINITE_LEMMA)
-
-lemma POLY_ROOTS_FINITE: "(poly (p::real list) ~= poly []) =
-(EX (N::nat) i::nat => real.
-    ALL x::real. poly p x = (0::real) --> (EX n<N. x = i n))"
-  by (import poly POLY_ROOTS_FINITE)
-
-lemma POLY_ENTIRE_LEMMA: "poly p ~= poly [] & poly q ~= poly [] ==> poly (poly_mul p q) ~= poly []"
-  by (import poly POLY_ENTIRE_LEMMA)
-
-lemma POLY_ENTIRE: "(poly (poly_mul p q) = poly []) = (poly p = poly [] | poly q = poly [])"
-  by (import poly POLY_ENTIRE)
-
-lemma POLY_MUL_LCANCEL: "(poly (poly_mul x xa) = poly (poly_mul x xb)) =
-(poly x = poly [] | poly xa = poly xb)"
-  by (import poly POLY_MUL_LCANCEL)
-
-lemma POLY_EXP_EQ_0: "(poly (poly_exp p n) = poly []) = (poly p = poly [] & n ~= 0)"
-  by (import poly POLY_EXP_EQ_0)
-
-lemma POLY_PRIME_EQ_0: "poly [a, 1] ~= poly []"
-  by (import poly POLY_PRIME_EQ_0)
-
-lemma POLY_EXP_PRIME_EQ_0: "poly (poly_exp [a, 1] n) ~= poly []"
-  by (import poly POLY_EXP_PRIME_EQ_0)
-
-lemma POLY_ZERO_LEMMA: "poly (h # t) = poly [] ==> h = 0 & poly t = poly []"
-  by (import poly POLY_ZERO_LEMMA)
-
-lemma POLY_ZERO: "(poly t = poly []) = list_all (%c. c = 0) t"
-  by (import poly POLY_ZERO)
-
-lemma POLY_DIFF_AUX_ISZERO: "list_all (%c. c = 0) (poly_diff_aux (Suc n) t) = list_all (%c. c = 0) t"
-  by (import poly POLY_DIFF_AUX_ISZERO)
-
-lemma POLY_DIFF_ISZERO: "poly (diff x) = poly [] ==> EX h. poly x = poly [h]"
-  by (import poly POLY_DIFF_ISZERO)
-
-lemma POLY_DIFF_ZERO: "poly x = poly [] ==> poly (diff x) = poly []"
-  by (import poly POLY_DIFF_ZERO)
-
-lemma POLY_DIFF_WELLDEF: "poly p = poly q ==> poly (diff p) = poly (diff q)"
-  by (import poly POLY_DIFF_WELLDEF)
-
-definition
-  poly_divides :: "real list => real list => bool"  where
-  "poly_divides == %p1 p2. EX q. poly p2 = poly (poly_mul p1 q)"
-
-lemma poly_divides: "poly_divides p1 p2 = (EX q. poly p2 = poly (poly_mul p1 q))"
-  by (import poly poly_divides)
-
-lemma POLY_PRIMES: "poly_divides [a, 1] (poly_mul p q) =
-(poly_divides [a, 1] p | poly_divides [a, 1] q)"
-  by (import poly POLY_PRIMES)
-
-lemma POLY_DIVIDES_REFL: "poly_divides p p"
-  by (import poly POLY_DIVIDES_REFL)
-
-lemma POLY_DIVIDES_TRANS: "poly_divides p q & poly_divides q r ==> poly_divides p r"
-  by (import poly POLY_DIVIDES_TRANS)
-
-lemma POLY_DIVIDES_EXP: "m <= n ==> poly_divides (poly_exp p m) (poly_exp p n)"
-  by (import poly POLY_DIVIDES_EXP)
-
-lemma POLY_EXP_DIVIDES: "poly_divides (poly_exp p n) q & m <= n ==> poly_divides (poly_exp p m) q"
-  by (import poly POLY_EXP_DIVIDES)
-
-lemma POLY_DIVIDES_ADD: "poly_divides p q & poly_divides p r ==> poly_divides p (poly_add q r)"
-  by (import poly POLY_DIVIDES_ADD)
-
-lemma POLY_DIVIDES_SUB: "poly_divides p q & poly_divides p (poly_add q r) ==> poly_divides p r"
-  by (import poly POLY_DIVIDES_SUB)
-
-lemma POLY_DIVIDES_SUB2: "poly_divides p r & poly_divides p (poly_add q r) ==> poly_divides p q"
-  by (import poly POLY_DIVIDES_SUB2)
-
-lemma POLY_DIVIDES_ZERO: "poly p = poly [] ==> poly_divides q p"
-  by (import poly POLY_DIVIDES_ZERO)
-
-lemma POLY_ORDER_EXISTS: "length p = d & poly p ~= poly []
-==> EX x. poly_divides (poly_exp [- a, 1] x) p &
-          ~ poly_divides (poly_exp [- a, 1] (Suc x)) p"
-  by (import poly POLY_ORDER_EXISTS)
-
-lemma POLY_ORDER: "poly p ~= poly []
-==> EX! n.
-       poly_divides (poly_exp [- a, 1] n) p &
-       ~ poly_divides (poly_exp [- a, 1] (Suc n)) p"
-  by (import poly POLY_ORDER)
-
-definition
-  poly_order :: "real => real list => nat"  where
-  "poly_order ==
-%a p. SOME n.
-         poly_divides (poly_exp [- a, 1] n) p &
-         ~ poly_divides (poly_exp [- a, 1] (Suc n)) p"
-
-lemma poly_order: "poly_order a p =
-(SOME n.
-    poly_divides (poly_exp [- a, 1] n) p &
-    ~ poly_divides (poly_exp [- a, 1] (Suc n)) p)"
-  by (import poly poly_order)
-
-lemma ORDER: "(poly_divides (poly_exp [- a, 1] n) p &
- ~ poly_divides (poly_exp [- a, 1] (Suc n)) p) =
-(n = poly_order a p & poly p ~= poly [])"
-  by (import poly ORDER)
-
-lemma ORDER_THM: "poly p ~= poly []
-==> poly_divides (poly_exp [- a, 1] (poly_order a p)) p &
-    ~ poly_divides (poly_exp [- a, 1] (Suc (poly_order a p))) p"
-  by (import poly ORDER_THM)
-
-lemma ORDER_UNIQUE: "poly p ~= poly [] &
-poly_divides (poly_exp [- a, 1] n) p &
-~ poly_divides (poly_exp [- a, 1] (Suc n)) p
-==> n = poly_order a p"
-  by (import poly ORDER_UNIQUE)
-
-lemma ORDER_POLY: "poly p = poly q ==> poly_order a p = poly_order a q"
-  by (import poly ORDER_POLY)
-
-lemma ORDER_ROOT: "(poly p a = 0) = (poly p = poly [] | poly_order a p ~= 0)"
-  by (import poly ORDER_ROOT)
-
-lemma ORDER_DIVIDES: "poly_divides (poly_exp [- a, 1] n) p =
-(poly p = poly [] | n <= poly_order a p)"
-  by (import poly ORDER_DIVIDES)
-
-lemma ORDER_DECOMP: "poly p ~= poly []
-==> EX x. poly p = poly (poly_mul (poly_exp [- a, 1] (poly_order a p)) x) &
-          ~ poly_divides [- a, 1] x"
-  by (import poly ORDER_DECOMP)
-
-lemma ORDER_MUL: "poly (poly_mul p q) ~= poly []
-==> poly_order a (poly_mul p q) = poly_order a p + poly_order a q"
-  by (import poly ORDER_MUL)
-
-lemma ORDER_DIFF: "poly (diff p) ~= poly [] & poly_order a p ~= 0
-==> poly_order a p = Suc (poly_order a (diff p))"
-  by (import poly ORDER_DIFF)
-
-lemma POLY_SQUAREFREE_DECOMP_ORDER: "poly (diff p) ~= poly [] &
-poly p = poly (poly_mul q d) &
-poly (diff p) = poly (poly_mul e d) &
-poly d = poly (poly_add (poly_mul r p) (poly_mul s (diff p)))
-==> poly_order a q = (if poly_order a p = 0 then 0 else 1)"
-  by (import poly POLY_SQUAREFREE_DECOMP_ORDER)
-
-definition
-  rsquarefree :: "real list => bool"  where
-  "rsquarefree ==
-%p. poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1)"
-
-lemma rsquarefree: "rsquarefree p =
-(poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1))"
-  by (import poly rsquarefree)
-
-lemma RSQUAREFREE_ROOTS: "rsquarefree p = (ALL a. ~ (poly p a = 0 & poly (diff p) a = 0))"
-  by (import poly RSQUAREFREE_ROOTS)
-
-lemma RSQUAREFREE_DECOMP: "rsquarefree p & poly p a = 0
-==> EX q. poly p = poly (poly_mul [- a, 1] q) & poly q a ~= 0"
-  by (import poly RSQUAREFREE_DECOMP)
-
-lemma POLY_SQUAREFREE_DECOMP: "poly (diff p) ~= poly [] &
-poly p = poly (poly_mul q d) &
-poly (diff p) = poly (poly_mul e d) &
-poly d = poly (poly_add (poly_mul r p) (poly_mul s (diff p)))
-==> rsquarefree q & (ALL x. (poly q x = 0) = (poly p x = 0))"
-  by (import poly POLY_SQUAREFREE_DECOMP)
-
-consts
-  normalize :: "real list => real list" 
-
-specification (normalize) normalize: "normalize [] = [] &
-(ALL h t.
-    normalize (h # t) =
-    (if normalize t = [] then if h = 0 then [] else [h]
-     else h # normalize t))"
-  by (import poly normalize)
-
-lemma POLY_NORMALIZE: "poly (normalize t) = poly t"
-  by (import poly POLY_NORMALIZE)
-
-definition
-  degree :: "real list => nat"  where
-  "degree == %p. PRE (length (normalize p))"
-
-lemma degree: "degree p = PRE (length (normalize p))"
-  by (import poly degree)
-
-lemma DEGREE_ZERO: "poly p = poly [] ==> degree p = 0"
-  by (import poly DEGREE_ZERO)
-
-lemma POLY_ROOTS_FINITE_SET: "poly p ~= poly [] ==> FINITE (GSPEC (%x. (x, poly p x = 0)))"
-  by (import poly POLY_ROOTS_FINITE_SET)
-
-lemma POLY_MONO: "abs x <= k ==> abs (poly xa x) <= poly (map abs xa) k"
-  by (import poly POLY_MONO)
-
-;end_setup
-
-end
-
--- a/src/HOL/Import/HOL/HOL4Vec.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1105 +0,0 @@
-(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
-
-theory HOL4Vec imports HOL4Base begin
-
-setup_theory "~~/src/HOL/Import/HOL" res_quan
-
-lemma RES_FORALL_CONJ_DIST: "RES_FORALL P (%i. Q i & R i) = (RES_FORALL P Q & RES_FORALL P R)"
-  by (import res_quan RES_FORALL_CONJ_DIST)
-
-lemma RES_FORALL_DISJ_DIST: "RES_FORALL (%j. P j | Q j) R = (RES_FORALL P R & RES_FORALL Q R)"
-  by (import res_quan RES_FORALL_DISJ_DIST)
-
-lemma RES_FORALL_UNIQUE: "RES_FORALL (op = xa) x = x xa"
-  by (import res_quan RES_FORALL_UNIQUE)
-
-lemma RES_FORALL_FORALL: "(ALL x::'b.
-    RES_FORALL (P::'a => bool) (%i::'a. (R::'a => 'b => bool) i x)) =
-RES_FORALL P (%i::'a. All (R i))"
-  by (import res_quan RES_FORALL_FORALL)
-
-lemma RES_FORALL_REORDER: "RES_FORALL P (%i. RES_FORALL Q (R i)) =
-RES_FORALL Q (%j. RES_FORALL P (%i. R i j))"
-  by (import res_quan RES_FORALL_REORDER)
-
-lemma RES_FORALL_EMPTY: "RES_FORALL EMPTY x"
-  by (import res_quan RES_FORALL_EMPTY)
-
-lemma RES_FORALL_UNIV: "RES_FORALL pred_set.UNIV p = All p"
-  by (import res_quan RES_FORALL_UNIV)
-
-lemma RES_FORALL_NULL: "RES_FORALL p (%x. m) = (p = EMPTY | m)"
-  by (import res_quan RES_FORALL_NULL)
-
-lemma RES_EXISTS_DISJ_DIST: "RES_EXISTS P (%i. Q i | R i) = (RES_EXISTS P Q | RES_EXISTS P R)"
-  by (import res_quan RES_EXISTS_DISJ_DIST)
-
-lemma RES_DISJ_EXISTS_DIST: "RES_EXISTS (%i. P i | Q i) R = (RES_EXISTS P R | RES_EXISTS Q R)"
-  by (import res_quan RES_DISJ_EXISTS_DIST)
-
-lemma RES_EXISTS_EQUAL: "RES_EXISTS (op = xa) x = x xa"
-  by (import res_quan RES_EXISTS_EQUAL)
-
-lemma RES_EXISTS_REORDER: "RES_EXISTS P (%i. RES_EXISTS Q (R i)) =
-RES_EXISTS Q (%j. RES_EXISTS P (%i. R i j))"
-  by (import res_quan RES_EXISTS_REORDER)
-
-lemma RES_EXISTS_EMPTY: "~ RES_EXISTS EMPTY p"
-  by (import res_quan RES_EXISTS_EMPTY)
-
-lemma RES_EXISTS_UNIV: "RES_EXISTS pred_set.UNIV p = Ex p"
-  by (import res_quan RES_EXISTS_UNIV)
-
-lemma RES_EXISTS_NULL: "RES_EXISTS p (%x. m) = (p ~= EMPTY & m)"
-  by (import res_quan RES_EXISTS_NULL)
-
-lemma RES_EXISTS_ALT: "RES_EXISTS p m = (IN (RES_SELECT p m) p & m (RES_SELECT p m))"
-  by (import res_quan RES_EXISTS_ALT)
-
-lemma RES_EXISTS_UNIQUE_EMPTY: "~ RES_EXISTS_UNIQUE EMPTY p"
-  by (import res_quan RES_EXISTS_UNIQUE_EMPTY)
-
-lemma RES_EXISTS_UNIQUE_UNIV: "RES_EXISTS_UNIQUE pred_set.UNIV p = Ex1 p"
-  by (import res_quan RES_EXISTS_UNIQUE_UNIV)
-
-lemma RES_EXISTS_UNIQUE_NULL: "RES_EXISTS_UNIQUE p (%x. m) = ((EX x. p = INSERT x EMPTY) & m)"
-  by (import res_quan RES_EXISTS_UNIQUE_NULL)
-
-lemma RES_EXISTS_UNIQUE_ALT: "RES_EXISTS_UNIQUE p m =
-RES_EXISTS p (%x. m x & RES_FORALL p (%y. m y --> y = x))"
-  by (import res_quan RES_EXISTS_UNIQUE_ALT)
-
-lemma RES_SELECT_EMPTY: "RES_SELECT EMPTY p = (SOME x. False)"
-  by (import res_quan RES_SELECT_EMPTY)
-
-lemma RES_SELECT_UNIV: "RES_SELECT pred_set.UNIV p = Eps p"
-  by (import res_quan RES_SELECT_UNIV)
-
-lemma RES_ABSTRACT: "IN x p ==> RES_ABSTRACT p m x = m x"
-  by (import res_quan RES_ABSTRACT)
-
-lemma RES_ABSTRACT_EQUAL: "(!!x. IN x p ==> m1 x = m2 x) ==> RES_ABSTRACT p m1 = RES_ABSTRACT p m2"
-  by (import res_quan RES_ABSTRACT_EQUAL)
-
-lemma RES_ABSTRACT_IDEMPOT: "RES_ABSTRACT p (RES_ABSTRACT p m) = RES_ABSTRACT p m"
-  by (import res_quan RES_ABSTRACT_IDEMPOT)
-
-lemma RES_ABSTRACT_EQUAL_EQ: "(RES_ABSTRACT p m1 = RES_ABSTRACT p m2) = (ALL x. IN x p --> m1 x = m2 x)"
-  by (import res_quan RES_ABSTRACT_EQUAL_EQ)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" word_base
-
-typedef (open) ('a) word = "{x. ALL word.
-       (ALL a0. (EX a. a0 = CONSTR 0 a (%n. BOTTOM)) --> word a0) -->
-       word x} :: ('a::type list recspace set)"
-  by (rule typedef_helper,import word_base word_TY_DEF)
-
-lemmas word_TY_DEF = typedef_hol2hol4 [OF type_definition_word]
-
-consts
-  mk_word :: "'a list recspace => 'a word" 
-  dest_word :: "'a word => 'a list recspace" 
-
-specification (dest_word mk_word) word_repfns: "(ALL a::'a word. mk_word (dest_word a) = a) &
-(ALL r::'a list recspace.
-    (ALL word::'a list recspace => bool.
-        (ALL a0::'a list recspace.
-            (EX a::'a list. a0 = CONSTR (0::nat) a (%n::nat. BOTTOM)) -->
-            word a0) -->
-        word r) =
-    (dest_word (mk_word r) = r))"
-  by (import word_base word_repfns)
-
-consts
-  word_base0 :: "'a list => 'a word" 
-
-defs
-  word_base0_primdef: "word_base0 == %a. mk_word (CONSTR 0 a (%n. BOTTOM))"
-
-lemma word_base0_def: "word_base0 = (%a. mk_word (CONSTR 0 a (%n. BOTTOM)))"
-  by (import word_base word_base0_def)
-
-definition
-  WORD :: "'a list => 'a word"  where
-  "WORD == word_base0"
-
-lemma WORD: "WORD = word_base0"
-  by (import word_base WORD)
-
-consts
-  word_case :: "('a list => 'b) => 'a word => 'b" 
-
-specification (word_case_primdef: word_case) word_case_def: "ALL f a. word_base.word_case f (WORD a) = f a"
-  by (import word_base word_case_def)
-
-consts
-  word_size :: "('a => nat) => 'a word => nat" 
-
-specification (word_size_primdef: word_size) word_size_def: "ALL f a. word_base.word_size f (WORD a) = 1 + HOL4Compat.list_size f a"
-  by (import word_base word_size_def)
-
-lemma word_11: "(WORD a = WORD a') = (a = a')"
-  by (import word_base word_11)
-
-lemma word_case_cong: "M = M' & (ALL a. M' = WORD a --> f a = f' a)
-==> word_base.word_case f M = word_base.word_case f' M'"
-  by (import word_base word_case_cong)
-
-lemma word_nchotomy: "EX l. x = WORD l"
-  by (import word_base word_nchotomy)
-
-lemma word_Axiom: "EX fn. ALL a. fn (WORD a) = f a"
-  by (import word_base word_Axiom)
-
-lemma word_induction: "(!!a. P (WORD a)) ==> P x"
-  by (import word_base word_induction)
-
-lemma word_Ax: "EX fn. ALL a. fn (WORD a) = f a"
-  by (import word_base word_Ax)
-
-lemma WORD_11: "(WORD x = WORD xa) = (x = xa)"
-  by (import word_base WORD_11)
-
-lemma word_induct: "(!!l. x (WORD l)) ==> x xa"
-  by (import word_base word_induct)
-
-lemma word_cases: "EX l. x = WORD l"
-  by (import word_base word_cases)
-
-consts
-  WORDLEN :: "'a word => nat" 
-
-specification (WORDLEN) WORDLEN_DEF: "ALL l. WORDLEN (WORD l) = length l"
-  by (import word_base WORDLEN_DEF)
-
-consts
-  PWORDLEN :: "nat => 'a word => bool" 
-
-defs
-  PWORDLEN_primdef: "PWORDLEN == %n. GSPEC (%w. (w, WORDLEN w = n))"
-
-lemma PWORDLEN_def: "PWORDLEN n = GSPEC (%w. (w, WORDLEN w = n))"
-  by (import word_base PWORDLEN_def)
-
-lemma IN_PWORDLEN: "IN (WORD l) (PWORDLEN n) = (length l = n)"
-  by (import word_base IN_PWORDLEN)
-
-lemma PWORDLEN: "IN w (PWORDLEN n) = (WORDLEN w = n)"
-  by (import word_base PWORDLEN)
-
-lemma PWORDLEN0: "IN w (PWORDLEN 0) ==> w = WORD []"
-  by (import word_base PWORDLEN0)
-
-lemma PWORDLEN1: "IN (WORD [x]) (PWORDLEN 1)"
-  by (import word_base PWORDLEN1)
-
-consts
-  WSEG :: "nat => nat => 'a word => 'a word" 
-
-specification (WSEG) WSEG_DEF: "ALL m k l. WSEG m k (WORD l) = WORD (LASTN m (BUTLASTN k l))"
-  by (import word_base WSEG_DEF)
-
-lemma WSEG0: "WSEG 0 k w = WORD []"
-  by (import word_base WSEG0)
-
-lemma WSEG_PWORDLEN: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k. m + k <= n --> IN (WSEG m k w) (PWORDLEN m))"
-  by (import word_base WSEG_PWORDLEN)
-
-lemma WSEG_WORDLEN: "RES_FORALL (PWORDLEN x)
- (%xa. ALL xb xc. xb + xc <= x --> WORDLEN (WSEG xb xc xa) = xb)"
-  by (import word_base WSEG_WORDLEN)
-
-lemma WSEG_WORD_LENGTH: "RES_FORALL (PWORDLEN n) (%w. WSEG n 0 w = w)"
-  by (import word_base WSEG_WORD_LENGTH)
-
-consts
-  bit :: "nat => 'a word => 'a" 
-
-specification (bit) BIT_DEF: "ALL k l. bit k (WORD l) = ELL k l"
-  by (import word_base BIT_DEF)
-
-lemma BIT0: "bit 0 (WORD [x]) = x"
-  by (import word_base BIT0)
-
-lemma WSEG_BIT: "RES_FORALL (PWORDLEN n) (%w. ALL k<n. WSEG 1 k w = WORD [bit k w])"
-  by (import word_base WSEG_BIT)
-
-lemma BIT_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k j.
-         m + k <= n --> j < m --> bit j (WSEG m k w) = bit (j + k) w)"
-  by (import word_base BIT_WSEG)
-
-consts
-  MSB :: "'a word => 'a" 
-
-specification (MSB) MSB_DEF: "ALL l. MSB (WORD l) = hd l"
-  by (import word_base MSB_DEF)
-
-lemma MSB: "RES_FORALL (PWORDLEN n) (%w. 0 < n --> MSB w = bit (PRE n) w)"
-  by (import word_base MSB)
-
-consts
-  LSB :: "'a word => 'a" 
-
-specification (LSB) LSB_DEF: "ALL l. LSB (WORD l) = last l"
-  by (import word_base LSB_DEF)
-
-lemma LSB: "RES_FORALL (PWORDLEN n) (%w. 0 < n --> LSB w = bit 0 w)"
-  by (import word_base LSB)
-
-consts
-  WSPLIT :: "nat => 'a word => 'a word * 'a word" 
-
-specification (WSPLIT) WSPLIT_DEF: "ALL m l. WSPLIT m (WORD l) = (WORD (BUTLASTN m l), WORD (LASTN m l))"
-  by (import word_base WSPLIT_DEF)
-
-consts
-  WCAT :: "'a word * 'a word => 'a word" 
-
-specification (WCAT) WCAT_DEF: "ALL l1 l2. WCAT (WORD l1, WORD l2) = WORD (l1 @ l2)"
-  by (import word_base WCAT_DEF)
-
-lemma WORD_PARTITION: "(ALL n::nat.
-    RES_FORALL (PWORDLEN n)
-     (%w::'a word. ALL m<=n. WCAT (WSPLIT m w) = w)) &
-(ALL (n::nat) m::nat.
-    RES_FORALL (PWORDLEN n)
-     (%w1::'a word.
-         RES_FORALL (PWORDLEN m)
-          (%w2::'a word. WSPLIT m (WCAT (w1, w2)) = (w1, w2))))"
-  by (import word_base WORD_PARTITION)
-
-lemma WCAT_ASSOC: "WCAT (w1, WCAT (w2, w3)) = WCAT (WCAT (w1, w2), w3)"
-  by (import word_base WCAT_ASSOC)
-
-lemma WCAT0: "WCAT (WORD [], w) = w & WCAT (w, WORD []) = w"
-  by (import word_base WCAT0)
-
-lemma WCAT_11: "RES_FORALL (PWORDLEN m)
- (%wm1. RES_FORALL (PWORDLEN m)
-         (%wm2. RES_FORALL (PWORDLEN n)
-                 (%wn1. RES_FORALL (PWORDLEN n)
-                         (%wn2. (WCAT (wm1, wn1) = WCAT (wm2, wn2)) =
-                                (wm1 = wm2 & wn1 = wn2)))))"
-  by (import word_base WCAT_11)
-
-lemma WSPLIT_PWORDLEN: "RES_FORALL (PWORDLEN n)
- (%w. ALL m<=n.
-         IN (fst (WSPLIT m w)) (PWORDLEN (n - m)) &
-         IN (snd (WSPLIT m w)) (PWORDLEN m))"
-  by (import word_base WSPLIT_PWORDLEN)
-
-lemma WCAT_PWORDLEN: "RES_FORALL (PWORDLEN n1)
- (%w1. ALL n2.
-          RES_FORALL (PWORDLEN n2)
-           (%w2. IN (WCAT (w1, w2)) (PWORDLEN (n1 + n2))))"
-  by (import word_base WCAT_PWORDLEN)
-
-lemma WORDLEN_SUC_WCAT: "IN w (PWORDLEN (Suc n))
-==> RES_EXISTS (PWORDLEN 1)
-     (%b. RES_EXISTS (PWORDLEN n) (%w'. w = WCAT (b, w')))"
-  by (import word_base WORDLEN_SUC_WCAT)
-
-lemma WSEG_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m1 k1 m2 k2.
-         m1 + k1 <= n & m2 + k2 <= m1 -->
-         WSEG m2 k2 (WSEG m1 k1 w) = WSEG m2 (k1 + k2) w)"
-  by (import word_base WSEG_WSEG)
-
-lemma WSPLIT_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL k<=n. WSPLIT k w = (WSEG (n - k) k w, WSEG k 0 w))"
-  by (import word_base WSPLIT_WSEG)
-
-lemma WSPLIT_WSEG1: "RES_FORALL (PWORDLEN n) (%w. ALL k<=n. fst (WSPLIT k w) = WSEG (n - k) k w)"
-  by (import word_base WSPLIT_WSEG1)
-
-lemma WSPLIT_WSEG2: "RES_FORALL (PWORDLEN n) (%w. ALL k<=n. snd (WSPLIT k w) = WSEG k 0 w)"
-  by (import word_base WSPLIT_WSEG2)
-
-lemma WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m1 m2 k.
-         m1 + (m2 + k) <= n -->
-         WCAT (WSEG m2 (m1 + k) w, WSEG m1 k w) = WSEG (m1 + m2) k w)"
-  by (import word_base WCAT_WSEG_WSEG)
-
-lemma WORD_SPLIT: "RES_FORALL (PWORDLEN (x + xa)) (%w. w = WCAT (WSEG x xa w, WSEG xa 0 w))"
-  by (import word_base WORD_SPLIT)
-
-lemma WORDLEN_SUC_WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG 1 n w, WSEG n 0 w))"
-  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG)
-
-lemma WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WSEG 1 0 w))"
-  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT)
-
-lemma WORDLEN_SUC_WCAT_BIT_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WORD [bit n w], WSEG n 0 w))"
-  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG)
-
-lemma WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WORD [bit 0 w]))"
-  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT)
-
-lemma WSEG_WCAT1: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n1 n2 (WCAT (w1, w2)) = w1))"
-  by (import word_base WSEG_WCAT1)
-
-lemma WSEG_WCAT2: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n2 0 (WCAT (w1, w2)) = w2))"
-  by (import word_base WSEG_WCAT2)
-
-lemma WSEG_SUC: "RES_FORALL (PWORDLEN n)
- (%w. ALL k m1.
-         k + Suc m1 < n -->
-         WSEG (Suc m1) k w = WCAT (WSEG 1 (k + m1) w, WSEG m1 k w))"
-  by (import word_base WSEG_SUC)
-
-lemma WORD_CONS_WCAT: "WORD (x # l) = WCAT (WORD [x], WORD l)"
-  by (import word_base WORD_CONS_WCAT)
-
-lemma WORD_SNOC_WCAT: "WORD (SNOC x l) = WCAT (WORD l, WORD [x])"
-  by (import word_base WORD_SNOC_WCAT)
-
-lemma BIT_WCAT_FST: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2)
-        (%w2. ALL k.
-                 n2 <= k & k < n1 + n2 -->
-                 bit k (WCAT (w1, w2)) = bit (k - n2) w1))"
-  by (import word_base BIT_WCAT_FST)
-
-lemma BIT_WCAT_SND: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2)
-        (%w2. ALL k<n2. bit k (WCAT (w1, w2)) = bit k w2))"
-  by (import word_base BIT_WCAT_SND)
-
-lemma BIT_WCAT1: "RES_FORALL (PWORDLEN n) (%w. ALL b. bit n (WCAT (WORD [b], w)) = b)"
-  by (import word_base BIT_WCAT1)
-
-lemma WSEG_WCAT_WSEG1: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2)
-        (%w2. ALL m k.
-                 m <= n1 & n2 <= k -->
-                 WSEG m k (WCAT (w1, w2)) = WSEG m (k - n2) w1))"
-  by (import word_base WSEG_WCAT_WSEG1)
-
-lemma WSEG_WCAT_WSEG2: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2)
-        (%w2. ALL m k.
-                 m + k <= n2 --> WSEG m k (WCAT (w1, w2)) = WSEG m k w2))"
-  by (import word_base WSEG_WCAT_WSEG2)
-
-lemma WSEG_WCAT_WSEG: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2)
-        (%w2. ALL m k.
-                 m + k <= n1 + n2 & k < n2 & n2 <= m + k -->
-                 WSEG m k (WCAT (w1, w2)) =
-                 WCAT (WSEG (m + k - n2) 0 w1, WSEG (n2 - k) k w2)))"
-  by (import word_base WSEG_WCAT_WSEG)
-
-lemma BIT_EQ_IMP_WORD_EQ: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. (ALL k<n. bit k w1 = bit k w2) --> w1 = w2))"
-  by (import word_base BIT_EQ_IMP_WORD_EQ)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" word_num
-
-definition
-  LVAL :: "('a => nat) => nat => 'a list => nat"  where
-  "LVAL == %f b. foldl (%e x. b * e + f x) 0"
-
-lemma LVAL_DEF: "LVAL f b l = foldl (%e x. b * e + f x) 0 l"
-  by (import word_num LVAL_DEF)
-
-consts
-  NVAL :: "('a => nat) => nat => 'a word => nat" 
-
-specification (NVAL) NVAL_DEF: "ALL f b l. NVAL f b (WORD l) = LVAL f b l"
-  by (import word_num NVAL_DEF)
-
-lemma LVAL: "(ALL (x::'a => nat) xa::nat. LVAL x xa [] = (0::nat)) &
-(ALL (x::'a list) (xa::'a => nat) (xb::nat) xc::'a.
-    LVAL xa xb (xc # x) = xa xc * xb ^ length x + LVAL xa xb x)"
-  by (import word_num LVAL)
-
-lemma LVAL_SNOC: "LVAL f b (SNOC h l) = LVAL f b l * b + f h"
-  by (import word_num LVAL_SNOC)
-
-lemma LVAL_MAX: "(!!x. f x < b) ==> LVAL f b l < b ^ length l"
-  by (import word_num LVAL_MAX)
-
-lemma NVAL_MAX: "(!!x. f x < b) ==> RES_FORALL (PWORDLEN n) (%w. NVAL f b w < b ^ n)"
-  by (import word_num NVAL_MAX)
-
-lemma NVAL0: "NVAL x xa (WORD []) = 0"
-  by (import word_num NVAL0)
-
-lemma NVAL1: "NVAL x xa (WORD [xb]) = x xb"
-  by (import word_num NVAL1)
-
-lemma NVAL_WORDLEN_0: "RES_FORALL (PWORDLEN 0) (%w. ALL fv r. NVAL fv r w = 0)"
-  by (import word_num NVAL_WORDLEN_0)
-
-lemma NVAL_WCAT1: "NVAL f b (WCAT (w, WORD [x])) = NVAL f b w * b + f x"
-  by (import word_num NVAL_WCAT1)
-
-lemma NVAL_WCAT2: "RES_FORALL (PWORDLEN n)
- (%w. ALL f b x. NVAL f b (WCAT (WORD [x], w)) = f x * b ^ n + NVAL f b w)"
-  by (import word_num NVAL_WCAT2)
-
-lemma NVAL_WCAT: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN m)
-        (%w2. ALL f b.
-                 NVAL f b (WCAT (w1, w2)) =
-                 NVAL f b w1 * b ^ m + NVAL f b w2))"
-  by (import word_num NVAL_WCAT)
-
-consts
-  NLIST :: "nat => (nat => 'a) => nat => nat => 'a list" 
-
-specification (NLIST) NLIST_DEF: "(ALL (frep::nat => 'a) (b::nat) m::nat. NLIST (0::nat) frep b m = []) &
-(ALL (n::nat) (frep::nat => 'a) (b::nat) m::nat.
-    NLIST (Suc n) frep b m =
-    SNOC (frep (m mod b)) (NLIST n frep b (m div b)))"
-  by (import word_num NLIST_DEF)
-
-definition
-  NWORD :: "nat => (nat => 'a) => nat => nat => 'a word"  where
-  "NWORD == %n frep b m. WORD (NLIST n frep b m)"
-
-lemma NWORD_DEF: "NWORD n frep b m = WORD (NLIST n frep b m)"
-  by (import word_num NWORD_DEF)
-
-lemma NWORD_LENGTH: "WORDLEN (NWORD x xa xb xc) = x"
-  by (import word_num NWORD_LENGTH)
-
-lemma NWORD_PWORDLEN: "IN (NWORD x xa xb xc) (PWORDLEN x)"
-  by (import word_num NWORD_PWORDLEN)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" word_bitop
-
-consts
-  PBITOP :: "('a word => 'b word) => bool" 
-
-defs
-  PBITOP_primdef: "PBITOP ==
-GSPEC
- (%oper.
-     (oper,
-      ALL n.
-         RES_FORALL (PWORDLEN n)
-          (%w. IN (oper w) (PWORDLEN n) &
-               (ALL m k.
-                   m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
-
-lemma PBITOP_def: "PBITOP =
-GSPEC
- (%oper.
-     (oper,
-      ALL n.
-         RES_FORALL (PWORDLEN n)
-          (%w. IN (oper w) (PWORDLEN n) &
-               (ALL m k.
-                   m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
-  by (import word_bitop PBITOP_def)
-
-lemma IN_PBITOP: "IN oper PBITOP =
-(ALL n.
-    RES_FORALL (PWORDLEN n)
-     (%w. IN (oper w) (PWORDLEN n) &
-          (ALL m k. m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w))))"
-  by (import word_bitop IN_PBITOP)
-
-lemma PBITOP_PWORDLEN: "RES_FORALL PBITOP
- (%oper. ALL n. RES_FORALL (PWORDLEN n) (%w. IN (oper w) (PWORDLEN n)))"
-  by (import word_bitop PBITOP_PWORDLEN)
-
-lemma PBITOP_WSEG: "RES_FORALL PBITOP
- (%oper.
-     ALL n.
-        RES_FORALL (PWORDLEN n)
-         (%w. ALL m k.
-                 m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))"
-  by (import word_bitop PBITOP_WSEG)
-
-lemma PBITOP_BIT: "RES_FORALL PBITOP
- (%oper.
-     ALL n.
-        RES_FORALL (PWORDLEN n)
-         (%w. ALL k<n. oper (WORD [bit k w]) = WORD [bit k (oper w)]))"
-  by (import word_bitop PBITOP_BIT)
-
-consts
-  PBITBOP :: "('a word => 'b word => 'c word) => bool" 
-
-defs
-  PBITBOP_primdef: "PBITBOP ==
-GSPEC
- (%oper.
-     (oper,
-      ALL n.
-         RES_FORALL (PWORDLEN n)
-          (%w1. RES_FORALL (PWORDLEN n)
-                 (%w2. IN (oper w1 w2) (PWORDLEN n) &
-                       (ALL m k.
-                           m + k <= n -->
-                           oper (WSEG m k w1) (WSEG m k w2) =
-                           WSEG m k (oper w1 w2))))))"
-
-lemma PBITBOP_def: "PBITBOP =
-GSPEC
- (%oper.
-     (oper,
-      ALL n.
-         RES_FORALL (PWORDLEN n)
-          (%w1. RES_FORALL (PWORDLEN n)
-                 (%w2. IN (oper w1 w2) (PWORDLEN n) &
-                       (ALL m k.
-                           m + k <= n -->
-                           oper (WSEG m k w1) (WSEG m k w2) =
-                           WSEG m k (oper w1 w2))))))"
-  by (import word_bitop PBITBOP_def)
-
-lemma IN_PBITBOP: "IN oper PBITBOP =
-(ALL n.
-    RES_FORALL (PWORDLEN n)
-     (%w1. RES_FORALL (PWORDLEN n)
-            (%w2. IN (oper w1 w2) (PWORDLEN n) &
-                  (ALL m k.
-                      m + k <= n -->
-                      oper (WSEG m k w1) (WSEG m k w2) =
-                      WSEG m k (oper w1 w2)))))"
-  by (import word_bitop IN_PBITBOP)
-
-lemma PBITBOP_PWORDLEN: "RES_FORALL PBITBOP
- (%oper.
-     ALL n.
-        RES_FORALL (PWORDLEN n)
-         (%w1. RES_FORALL (PWORDLEN n) (%w2. IN (oper w1 w2) (PWORDLEN n))))"
-  by (import word_bitop PBITBOP_PWORDLEN)
-
-lemma PBITBOP_WSEG: "RES_FORALL PBITBOP
- (%oper.
-     ALL n.
-        RES_FORALL (PWORDLEN n)
-         (%w1. RES_FORALL (PWORDLEN n)
-                (%w2. ALL m k.
-                         m + k <= n -->
-                         oper (WSEG m k w1) (WSEG m k w2) =
-                         WSEG m k (oper w1 w2))))"
-  by (import word_bitop PBITBOP_WSEG)
-
-lemma PBITBOP_EXISTS: "EX x. ALL l1 l2. x (WORD l1) (WORD l2) = WORD (map2 f l1 l2)"
-  by (import word_bitop PBITBOP_EXISTS)
-
-consts
-  WMAP :: "('a => 'b) => 'a word => 'b word" 
-
-specification (WMAP) WMAP_DEF: "ALL f l. WMAP f (WORD l) = WORD (map f l)"
-  by (import word_bitop WMAP_DEF)
-
-lemma WMAP_PWORDLEN: "RES_FORALL (PWORDLEN n) (%w. ALL f. IN (WMAP f w) (PWORDLEN n))"
-  by (import word_bitop WMAP_PWORDLEN)
-
-lemma WMAP_0: "WMAP (x::'a => 'b) (WORD []) = WORD []"
-  by (import word_bitop WMAP_0)
-
-lemma WMAP_BIT: "RES_FORALL (PWORDLEN n) (%w. ALL k<n. ALL f. bit k (WMAP f w) = f (bit k w))"
-  by (import word_bitop WMAP_BIT)
-
-lemma WMAP_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k.
-         m + k <= n --> (ALL f. WMAP f (WSEG m k w) = WSEG m k (WMAP f w)))"
-  by (import word_bitop WMAP_WSEG)
-
-lemma WMAP_PBITOP: "IN (WMAP f) PBITOP"
-  by (import word_bitop WMAP_PBITOP)
-
-lemma WMAP_WCAT: "WMAP (f::'a => 'b) (WCAT (w1::'a word, w2::'a word)) =
-WCAT (WMAP f w1, WMAP f w2)"
-  by (import word_bitop WMAP_WCAT)
-
-lemma WMAP_o: "WMAP (g::'b => 'c) (WMAP (f::'a => 'b) (w::'a word)) = WMAP (g o f) w"
-  by (import word_bitop WMAP_o)
-
-consts
-  FORALLBITS :: "('a => bool) => 'a word => bool" 
-
-specification (FORALLBITS) FORALLBITS_DEF: "ALL P l. FORALLBITS P (WORD l) = list_all P l"
-  by (import word_bitop FORALLBITS_DEF)
-
-lemma FORALLBITS: "RES_FORALL (PWORDLEN n) (%w. ALL P. FORALLBITS P w = (ALL k<n. P (bit k w)))"
-  by (import word_bitop FORALLBITS)
-
-lemma FORALLBITS_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL P.
-         FORALLBITS P w -->
-         (ALL m k. m + k <= n --> FORALLBITS P (WSEG m k w)))"
-  by (import word_bitop FORALLBITS_WSEG)
-
-lemma FORALLBITS_WCAT: "FORALLBITS P (WCAT (w1, w2)) = (FORALLBITS P w1 & FORALLBITS P w2)"
-  by (import word_bitop FORALLBITS_WCAT)
-
-consts
-  EXISTSABIT :: "('a => bool) => 'a word => bool" 
-
-specification (EXISTSABIT) EXISTSABIT_DEF: "ALL P l. EXISTSABIT P (WORD l) = list_ex P l"
-  by (import word_bitop EXISTSABIT_DEF)
-
-lemma NOT_EXISTSABIT: "(~ EXISTSABIT P w) = FORALLBITS (Not o P) w"
-  by (import word_bitop NOT_EXISTSABIT)
-
-lemma NOT_FORALLBITS: "(~ FORALLBITS P w) = EXISTSABIT (Not o P) w"
-  by (import word_bitop NOT_FORALLBITS)
-
-lemma EXISTSABIT: "RES_FORALL (PWORDLEN n) (%w. ALL P. EXISTSABIT P w = (EX k<n. P (bit k w)))"
-  by (import word_bitop EXISTSABIT)
-
-lemma EXISTSABIT_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k.
-         m + k <= n -->
-         (ALL P. EXISTSABIT P (WSEG m k w) --> EXISTSABIT P w))"
-  by (import word_bitop EXISTSABIT_WSEG)
-
-lemma EXISTSABIT_WCAT: "EXISTSABIT P (WCAT (w1, w2)) = (EXISTSABIT P w1 | EXISTSABIT P w2)"
-  by (import word_bitop EXISTSABIT_WCAT)
-
-definition
-  SHR :: "bool => 'a => 'a word => 'a word * 'a"  where
-  "SHR ==
-%f b w.
-   (WCAT
-     (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
-      WSEG (PRE (WORDLEN w)) 1 w),
-    bit 0 w)"
-
-lemma SHR_DEF: "SHR f b w =
-(WCAT
-  (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
-   WSEG (PRE (WORDLEN w)) 1 w),
- bit 0 w)"
-  by (import word_bitop SHR_DEF)
-
-definition
-  SHL :: "bool => 'a word => 'a => 'a * 'a word"  where
-  "SHL ==
-%f w b.
-   (bit (PRE (WORDLEN w)) w,
-    WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
-
-lemma SHL_DEF: "SHL f w b =
-(bit (PRE (WORDLEN w)) w,
- WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
-  by (import word_bitop SHL_DEF)
-
-lemma SHR_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k.
-         m + k <= n -->
-         0 < m -->
-         (ALL f b.
-             SHR f b (WSEG m k w) =
-             (if f
-              then WCAT (WSEG 1 (k + (m - 1)) w, WSEG (m - 1) (k + 1) w)
-              else WCAT (WORD [b], WSEG (m - 1) (k + 1) w),
-              bit k w)))"
-  by (import word_bitop SHR_WSEG)
-
-lemma SHR_WSEG_1F: "RES_FORALL (PWORDLEN n)
- (%w. ALL b m k.
-         m + k <= n -->
-         0 < m -->
-         SHR False b (WSEG m k w) =
-         (WCAT (WORD [b], WSEG (m - 1) (k + 1) w), bit k w))"
-  by (import word_bitop SHR_WSEG_1F)
-
-lemma SHR_WSEG_NF: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k.
-         m + k < n -->
-         0 < m -->
-         SHR False (bit (m + k) w) (WSEG m k w) =
-         (WSEG m (k + 1) w, bit k w))"
-  by (import word_bitop SHR_WSEG_NF)
-
-lemma SHL_WSEG: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k.
-         m + k <= n -->
-         0 < m -->
-         (ALL f b.
-             SHL f (WSEG m k w) b =
-             (bit (k + (m - 1)) w,
-              if f then WCAT (WSEG (m - 1) k w, WSEG 1 k w)
-              else WCAT (WSEG (m - 1) k w, WORD [b]))))"
-  by (import word_bitop SHL_WSEG)
-
-lemma SHL_WSEG_1F: "RES_FORALL (PWORDLEN n)
- (%w. ALL b m k.
-         m + k <= n -->
-         0 < m -->
-         SHL False (WSEG m k w) b =
-         (bit (k + (m - 1)) w, WCAT (WSEG (m - 1) k w, WORD [b])))"
-  by (import word_bitop SHL_WSEG_1F)
-
-lemma SHL_WSEG_NF: "RES_FORALL (PWORDLEN n)
- (%w. ALL m k.
-         m + k <= n -->
-         0 < m -->
-         0 < k -->
-         SHL False (WSEG m k w) (bit (k - 1) w) =
-         (bit (k + (m - 1)) w, WSEG m (k - 1) w))"
-  by (import word_bitop SHL_WSEG_NF)
-
-lemma WSEG_SHL: "RES_FORALL (PWORDLEN (Suc n))
- (%w. ALL m k.
-         0 < k & m + k <= Suc n -->
-         (ALL b. WSEG m k (snd (SHL f w b)) = WSEG m (k - 1) w))"
-  by (import word_bitop WSEG_SHL)
-
-lemma WSEG_SHL_0: "RES_FORALL (PWORDLEN (Suc n))
- (%w. ALL m b.
-         0 < m & m <= Suc n -->
-         WSEG m 0 (snd (SHL f w b)) =
-         WCAT (WSEG (m - 1) 0 w, if f then WSEG 1 0 w else WORD [b]))"
-  by (import word_bitop WSEG_SHL_0)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" bword_num
-
-definition
-  BV :: "bool => nat"  where
-  "BV == %b. if b then Suc 0 else 0"
-
-lemma BV_DEF: "BV b = (if b then Suc 0 else 0)"
-  by (import bword_num BV_DEF)
-
-consts
-  BNVAL :: "bool word => nat" 
-
-specification (BNVAL) BNVAL_DEF: "ALL l. BNVAL (WORD l) = LVAL BV 2 l"
-  by (import bword_num BNVAL_DEF)
-
-lemma BV_LESS_2: "BV x < 2"
-  by (import bword_num BV_LESS_2)
-
-lemma BNVAL_NVAL: "BNVAL w = NVAL BV 2 w"
-  by (import bword_num BNVAL_NVAL)
-
-lemma BNVAL0: "BNVAL (WORD []) = 0"
-  by (import bword_num BNVAL0)
-
-lemma BNVAL_11: "[| WORDLEN w1 = WORDLEN w2; BNVAL w1 = BNVAL w2 |] ==> w1 = w2"
-  by (import bword_num BNVAL_11)
-
-lemma BNVAL_ONTO: "Ex (op = (BNVAL w))"
-  by (import bword_num BNVAL_ONTO)
-
-lemma BNVAL_MAX: "RES_FORALL (PWORDLEN n) (%w. BNVAL w < 2 ^ n)"
-  by (import bword_num BNVAL_MAX)
-
-lemma BNVAL_WCAT1: "RES_FORALL (PWORDLEN n)
- (%w. ALL x. BNVAL (WCAT (w, WORD [x])) = BNVAL w * 2 + BV x)"
-  by (import bword_num BNVAL_WCAT1)
-
-lemma BNVAL_WCAT2: "RES_FORALL (PWORDLEN n)
- (%w. ALL x. BNVAL (WCAT (WORD [x], w)) = BV x * 2 ^ n + BNVAL w)"
-  by (import bword_num BNVAL_WCAT2)
-
-lemma BNVAL_WCAT: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN m)
-        (%w2. BNVAL (WCAT (w1, w2)) = BNVAL w1 * 2 ^ m + BNVAL w2))"
-  by (import bword_num BNVAL_WCAT)
-
-definition
-  VB :: "nat => bool"  where
-  "VB == %n. n mod 2 ~= 0"
-
-lemma VB_DEF: "VB n = (n mod 2 ~= 0)"
-  by (import bword_num VB_DEF)
-
-definition
-  NBWORD :: "nat => nat => bool word"  where
-  "NBWORD == %n m. WORD (NLIST n VB 2 m)"
-
-lemma NBWORD_DEF: "NBWORD n m = WORD (NLIST n VB 2 m)"
-  by (import bword_num NBWORD_DEF)
-
-lemma NBWORD0: "NBWORD 0 x = WORD []"
-  by (import bword_num NBWORD0)
-
-lemma WORDLEN_NBWORD: "WORDLEN (NBWORD x xa) = x"
-  by (import bword_num WORDLEN_NBWORD)
-
-lemma PWORDLEN_NBWORD: "IN (NBWORD x xa) (PWORDLEN x)"
-  by (import bword_num PWORDLEN_NBWORD)
-
-lemma NBWORD_SUC: "NBWORD (Suc n) m = WCAT (NBWORD n (m div 2), WORD [VB (m mod 2)])"
-  by (import bword_num NBWORD_SUC)
-
-lemma VB_BV: "VB (BV x) = x"
-  by (import bword_num VB_BV)
-
-lemma BV_VB: "x < 2 ==> BV (VB x) = x"
-  by (import bword_num BV_VB)
-
-lemma NBWORD_BNVAL: "RES_FORALL (PWORDLEN n) (%w. NBWORD n (BNVAL w) = w)"
-  by (import bword_num NBWORD_BNVAL)
-
-lemma BNVAL_NBWORD: "m < 2 ^ n ==> BNVAL (NBWORD n m) = m"
-  by (import bword_num BNVAL_NBWORD)
-
-lemma ZERO_WORD_VAL: "RES_FORALL (PWORDLEN n) (%w. (w = NBWORD n 0) = (BNVAL w = 0))"
-  by (import bword_num ZERO_WORD_VAL)
-
-lemma WCAT_NBWORD_0: "WCAT (NBWORD n1 0, NBWORD n2 0) = NBWORD (n1 + n2) 0"
-  by (import bword_num WCAT_NBWORD_0)
-
-lemma WSPLIT_NBWORD_0: "m <= n ==> WSPLIT m (NBWORD n 0) = (NBWORD (n - m) 0, NBWORD m 0)"
-  by (import bword_num WSPLIT_NBWORD_0)
-
-lemma EQ_NBWORD0_SPLIT: "RES_FORALL (PWORDLEN n)
- (%w. ALL m<=n.
-         (w = NBWORD n 0) =
-         (WSEG (n - m) m w = NBWORD (n - m) 0 & WSEG m 0 w = NBWORD m 0))"
-  by (import bword_num EQ_NBWORD0_SPLIT)
-
-lemma NBWORD_MOD: "NBWORD n (m mod 2 ^ n) = NBWORD n m"
-  by (import bword_num NBWORD_MOD)
-
-lemma WSEG_NBWORD_SUC: "WSEG n 0 (NBWORD (Suc n) m) = NBWORD n m"
-  by (import bword_num WSEG_NBWORD_SUC)
-
-lemma NBWORD_SUC_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. NBWORD n (BNVAL w) = WSEG n 0 w)"
-  by (import bword_num NBWORD_SUC_WSEG)
-
-lemma DOUBL_EQ_SHL: "0 < x
-==> RES_FORALL (PWORDLEN x)
-     (%xa. ALL xb.
-              NBWORD x (BNVAL xa + BNVAL xa + BV xb) =
-              snd (SHL False xa xb))"
-  by (import bword_num DOUBL_EQ_SHL)
-
-lemma MSB_NBWORD: "bit n (NBWORD (Suc n) m) = VB (m div 2 ^ n mod 2)"
-  by (import bword_num MSB_NBWORD)
-
-lemma NBWORD_SPLIT: "NBWORD (n1 + n2) m = WCAT (NBWORD n1 (m div 2 ^ n2), NBWORD n2 m)"
-  by (import bword_num NBWORD_SPLIT)
-
-lemma WSEG_NBWORD: "m + k <= n ==> WSEG m k (NBWORD n l) = NBWORD m (l div 2 ^ k)"
-  by (import bword_num WSEG_NBWORD)
-
-lemma NBWORD_SUC_FST: "NBWORD (Suc n) x = WCAT (WORD [VB (x div 2 ^ n mod 2)], NBWORD n x)"
-  by (import bword_num NBWORD_SUC_FST)
-
-lemma BIT_NBWORD0: "k < n ==> bit k (NBWORD n 0) = False"
-  by (import bword_num BIT_NBWORD0)
-
-lemma ADD_BNVAL_LEFT: "RES_FORALL (PWORDLEN (Suc n))
- (%w1. RES_FORALL (PWORDLEN (Suc n))
-        (%w2. BNVAL w1 + BNVAL w2 =
-              (BV (bit n w1) + BV (bit n w2)) * 2 ^ n +
-              (BNVAL (WSEG n 0 w1) + BNVAL (WSEG n 0 w2))))"
-  by (import bword_num ADD_BNVAL_LEFT)
-
-lemma ADD_BNVAL_RIGHT: "RES_FORALL (PWORDLEN (Suc n))
- (%w1. RES_FORALL (PWORDLEN (Suc n))
-        (%w2. BNVAL w1 + BNVAL w2 =
-              (BNVAL (WSEG n 1 w1) + BNVAL (WSEG n 1 w2)) * 2 +
-              (BV (bit 0 w1) + BV (bit 0 w2))))"
-  by (import bword_num ADD_BNVAL_RIGHT)
-
-lemma ADD_BNVAL_SPLIT: "RES_FORALL (PWORDLEN (n1 + n2))
- (%w1. RES_FORALL (PWORDLEN (n1 + n2))
-        (%w2. BNVAL w1 + BNVAL w2 =
-              (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2)) * 2 ^ n2 +
-              (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2))))"
-  by (import bword_num ADD_BNVAL_SPLIT)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" bword_arith
-
-consts
-  ACARRY :: "nat => bool word => bool word => bool => bool" 
-
-specification (ACARRY) ACARRY_DEF: "(ALL w1 w2 cin. ACARRY 0 w1 w2 cin = cin) &
-(ALL n w1 w2 cin.
-    ACARRY (Suc n) w1 w2 cin =
-    VB ((BV (bit n w1) + BV (bit n w2) + BV (ACARRY n w1 w2 cin)) div 2))"
-  by (import bword_arith ACARRY_DEF)
-
-consts
-  ICARRY :: "nat => bool word => bool word => bool => bool" 
-
-specification (ICARRY) ICARRY_DEF: "(ALL w1 w2 cin. ICARRY 0 w1 w2 cin = cin) &
-(ALL n w1 w2 cin.
-    ICARRY (Suc n) w1 w2 cin =
-    (bit n w1 & bit n w2 | (bit n w1 | bit n w2) & ICARRY n w1 w2 cin))"
-  by (import bword_arith ICARRY_DEF)
-
-lemma ACARRY_EQ_ICARRY: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL cin k.
-                 k <= n --> ACARRY k w1 w2 cin = ICARRY k w1 w2 cin))"
-  by (import bword_arith ACARRY_EQ_ICARRY)
-
-lemma BNVAL_LESS_EQ: "RES_FORALL (PWORDLEN n) (%w. BNVAL w <= 2 ^ n - 1)"
-  by (import bword_arith BNVAL_LESS_EQ)
-
-lemma ADD_BNVAL_LESS_EQ1: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n <= Suc 0))"
-  by (import bword_arith ADD_BNVAL_LESS_EQ1)
-
-lemma ADD_BV_BNVAL_DIV_LESS_EQ1: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. (BV x1 + BV x2 +
-               (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n) div
-              2
-              <= 1))"
-  by (import bword_arith ADD_BV_BNVAL_DIV_LESS_EQ1)
-
-lemma ADD_BV_BNVAL_LESS_EQ: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))
-              <= Suc (2 ^ Suc n)))"
-  by (import bword_arith ADD_BV_BNVAL_LESS_EQ)
-
-lemma ADD_BV_BNVAL_LESS_EQ1: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. (BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))) div
-              2 ^ Suc n
-              <= 1))"
-  by (import bword_arith ADD_BV_BNVAL_LESS_EQ1)
-
-lemma ACARRY_EQ_ADD_DIV: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL k<n.
-                 BV (ACARRY k w1 w2 cin) =
-                 (BNVAL (WSEG k 0 w1) + BNVAL (WSEG k 0 w2) + BV cin) div
-                 2 ^ k))"
-  by (import bword_arith ACARRY_EQ_ADD_DIV)
-
-lemma ADD_WORD_SPLIT: "RES_FORALL (PWORDLEN (n1 + n2))
- (%w1. RES_FORALL (PWORDLEN (n1 + n2))
-        (%w2. ALL cin.
-                 NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
-                 WCAT
-                  (NBWORD n1
-                    (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
-                     BV (ACARRY n2 w1 w2 cin)),
-                   NBWORD n2
-                    (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) +
-                     BV cin))))"
-  by (import bword_arith ADD_WORD_SPLIT)
-
-lemma WSEG_NBWORD_ADD: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL m k cin.
-                 m + k <= n -->
-                 WSEG m k (NBWORD n (BNVAL w1 + BNVAL w2 + BV cin)) =
-                 NBWORD m
-                  (BNVAL (WSEG m k w1) + BNVAL (WSEG m k w2) +
-                   BV (ACARRY k w1 w2 cin))))"
-  by (import bword_arith WSEG_NBWORD_ADD)
-
-lemma ADD_NBWORD_EQ0_SPLIT: "RES_FORALL (PWORDLEN (n1 + n2))
- (%w1. RES_FORALL (PWORDLEN (n1 + n2))
-        (%w2. ALL cin.
-                 (NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
-                  NBWORD (n1 + n2) 0) =
-                 (NBWORD n1
-                   (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
-                    BV (ACARRY n2 w1 w2 cin)) =
-                  NBWORD n1 0 &
-                  NBWORD n2
-                   (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) + BV cin) =
-                  NBWORD n2 0)))"
-  by (import bword_arith ADD_NBWORD_EQ0_SPLIT)
-
-lemma ACARRY_MSB: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL cin.
-                 ACARRY n w1 w2 cin =
-                 bit n (NBWORD (Suc n) (BNVAL w1 + BNVAL w2 + BV cin))))"
-  by (import bword_arith ACARRY_MSB)
-
-lemma ACARRY_WSEG: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL cin k m.
-                 k < m & m <= n -->
-                 ACARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
-                 ACARRY k w1 w2 cin))"
-  by (import bword_arith ACARRY_WSEG)
-
-lemma ICARRY_WSEG: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL cin k m.
-                 k < m & m <= n -->
-                 ICARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
-                 ICARRY k w1 w2 cin))"
-  by (import bword_arith ICARRY_WSEG)
-
-lemma ACARRY_ACARRY_WSEG: "RES_FORALL (PWORDLEN n)
- (%w1. RES_FORALL (PWORDLEN n)
-        (%w2. ALL cin m k1 k2.
-                 k1 < m & k2 < n & m + k2 <= n -->
-                 ACARRY k1 (WSEG m k2 w1) (WSEG m k2 w2)
-                  (ACARRY k2 w1 w2 cin) =
-                 ACARRY (k1 + k2) w1 w2 cin))"
-  by (import bword_arith ACARRY_ACARRY_WSEG)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" bword_bitop
-
-consts
-  WNOT :: "bool word => bool word" 
-
-specification (WNOT) WNOT_DEF: "ALL l. WNOT (WORD l) = WORD (map Not l)"
-  by (import bword_bitop WNOT_DEF)
-
-lemma PBITOP_WNOT: "IN WNOT PBITOP"
-  by (import bword_bitop PBITOP_WNOT)
-
-lemma WNOT_WNOT: "WNOT (WNOT w) = w"
-  by (import bword_bitop WNOT_WNOT)
-
-lemma WCAT_WNOT: "RES_FORALL (PWORDLEN n1)
- (%w1. RES_FORALL (PWORDLEN n2)
-        (%w2. WCAT (WNOT w1, WNOT w2) = WNOT (WCAT (w1, w2))))"
-  by (import bword_bitop WCAT_WNOT)
-
-consts
-  WAND :: "bool word => bool word => bool word" 
-
-specification (WAND) WAND_DEF: "ALL l1 l2. WAND (WORD l1) (WORD l2) = WORD (map2 op & l1 l2)"
-  by (import bword_bitop WAND_DEF)
-
-lemma PBITBOP_WAND: "IN WAND PBITBOP"
-  by (import bword_bitop PBITBOP_WAND)
-
-consts
-  WOR :: "bool word => bool word => bool word" 
-
-specification (WOR) WOR_DEF: "ALL l1 l2. WOR (WORD l1) (WORD l2) = WORD (map2 op | l1 l2)"
-  by (import bword_bitop WOR_DEF)
-
-lemma PBITBOP_WOR: "IN WOR PBITBOP"
-  by (import bword_bitop PBITBOP_WOR)
-
-consts
-  WXOR :: "bool word => bool word => bool word" 
-
-specification (WXOR) WXOR_DEF: "ALL l1 l2. WXOR (WORD l1) (WORD l2) = WORD (map2 op ~= l1 l2)"
-  by (import bword_bitop WXOR_DEF)
-
-lemma PBITBOP_WXOR: "IN WXOR PBITBOP"
-  by (import bword_bitop PBITBOP_WXOR)
-
-;end_setup
-
-end
-
--- a/src/HOL/Import/HOL/HOL4Word32.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1382 +0,0 @@
-(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
-
-theory HOL4Word32 imports HOL4Base begin
-
-setup_theory "~~/src/HOL/Import/HOL" bits
-
-consts
-  DIV2 :: "nat => nat" 
-
-defs
-  DIV2_primdef: "DIV2 == %n. n div 2"
-
-lemma DIV2_def: "DIV2 n = n div 2"
-  by (import bits DIV2_def)
-
-consts
-  TIMES_2EXP :: "nat => nat => nat" 
-
-defs
-  TIMES_2EXP_primdef: "TIMES_2EXP == %x n. n * 2 ^ x"
-
-lemma TIMES_2EXP_def: "TIMES_2EXP x n = n * 2 ^ x"
-  by (import bits TIMES_2EXP_def)
-
-consts
-  DIV_2EXP :: "nat => nat => nat" 
-
-defs
-  DIV_2EXP_primdef: "DIV_2EXP == %x n. n div 2 ^ x"
-
-lemma DIV_2EXP_def: "DIV_2EXP x n = n div 2 ^ x"
-  by (import bits DIV_2EXP_def)
-
-consts
-  MOD_2EXP :: "nat => nat => nat" 
-
-defs
-  MOD_2EXP_primdef: "MOD_2EXP == %x n. n mod 2 ^ x"
-
-lemma MOD_2EXP_def: "MOD_2EXP x n = n mod 2 ^ x"
-  by (import bits MOD_2EXP_def)
-
-consts
-  DIVMOD_2EXP :: "nat => nat => nat * nat" 
-
-defs
-  DIVMOD_2EXP_primdef: "DIVMOD_2EXP == %x n. (n div 2 ^ x, n mod 2 ^ x)"
-
-lemma DIVMOD_2EXP_def: "DIVMOD_2EXP x n = (n div 2 ^ x, n mod 2 ^ x)"
-  by (import bits DIVMOD_2EXP_def)
-
-consts
-  SBIT :: "bool => nat => nat" 
-
-defs
-  SBIT_primdef: "SBIT == %b n. if b then 2 ^ n else 0"
-
-lemma SBIT_def: "SBIT b n = (if b then 2 ^ n else 0)"
-  by (import bits SBIT_def)
-
-consts
-  BITS :: "nat => nat => nat => nat" 
-
-defs
-  BITS_primdef: "BITS == %h l n. MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
-
-lemma BITS_def: "BITS h l n = MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
-  by (import bits BITS_def)
-
-definition
-  bit :: "nat => nat => bool"  where
-  "bit == %b n. BITS b b n = 1"
-
-lemma BIT_def: "bit b n = (BITS b b n = 1)"
-  by (import bits BIT_def)
-
-consts
-  SLICE :: "nat => nat => nat => nat" 
-
-defs
-  SLICE_primdef: "SLICE == %h l n. MOD_2EXP (Suc h) n - MOD_2EXP l n"
-
-lemma SLICE_def: "SLICE h l n = MOD_2EXP (Suc h) n - MOD_2EXP l n"
-  by (import bits SLICE_def)
-
-consts
-  LSBn :: "nat => bool" 
-
-defs
-  LSBn_primdef: "LSBn == bit 0"
-
-lemma LSBn_def: "LSBn = bit 0"
-  by (import bits LSBn_def)
-
-consts
-  BITWISE :: "nat => (bool => bool => bool) => nat => nat => nat" 
-
-specification (BITWISE_primdef: BITWISE) BITWISE_def: "(ALL oper x y. BITWISE 0 oper x y = 0) &
-(ALL n oper x y.
-    BITWISE (Suc n) oper x y =
-    BITWISE n oper x y + SBIT (oper (bit n x) (bit n y)) n)"
-  by (import bits BITWISE_def)
-
-lemma SUC_SUB: "Suc a - a = 1"
-  by (import bits SUC_SUB)
-
-lemma DIV_MULT_1: "(r::nat) < (n::nat) ==> (n + r) div n = (1::nat)"
-  by (import bits DIV_MULT_1)
-
-lemma ZERO_LT_TWOEXP: "(0::nat) < (2::nat) ^ (n::nat)"
-  by (import bits ZERO_LT_TWOEXP)
-
-lemma MOD_2EXP_LT: "(k::nat) mod (2::nat) ^ (n::nat) < (2::nat) ^ n"
-  by (import bits MOD_2EXP_LT)
-
-lemma TWOEXP_DIVISION: "(k::nat) = k div (2::nat) ^ (n::nat) * (2::nat) ^ n + k mod (2::nat) ^ n"
-  by (import bits TWOEXP_DIVISION)
-
-lemma TWOEXP_MONO: "(a::nat) < (b::nat) ==> (2::nat) ^ a < (2::nat) ^ b"
-  by (import bits TWOEXP_MONO)
-
-lemma TWOEXP_MONO2: "(a::nat) <= (b::nat) ==> (2::nat) ^ a <= (2::nat) ^ b"
-  by (import bits TWOEXP_MONO2)
-
-lemma EXP_SUB_LESS_EQ: "(2::nat) ^ ((a::nat) - (b::nat)) <= (2::nat) ^ a"
-  by (import bits EXP_SUB_LESS_EQ)
-
-lemma BITS_THM: "BITS x xa xb = xb div 2 ^ xa mod 2 ^ (Suc x - xa)"
-  by (import bits BITS_THM)
-
-lemma BITSLT_THM: "BITS h l n < 2 ^ (Suc h - l)"
-  by (import bits BITSLT_THM)
-
-lemma DIV_MULT_LEM: "(0::nat) < (n::nat) ==> (m::nat) div n * n <= m"
-  by (import bits DIV_MULT_LEM)
-
-lemma MOD_2EXP_LEM: "(n::nat) mod (2::nat) ^ (x::nat) = n - n div (2::nat) ^ x * (2::nat) ^ x"
-  by (import bits MOD_2EXP_LEM)
-
-lemma BITS2_THM: "BITS h l n = n mod 2 ^ Suc h div 2 ^ l"
-  by (import bits BITS2_THM)
-
-lemma BITS_COMP_THM: "h2 + l1 <= h1 ==> BITS h2 l2 (BITS h1 l1 n) = BITS (h2 + l1) (l2 + l1) n"
-  by (import bits BITS_COMP_THM)
-
-lemma BITS_DIV_THM: "BITS h l x div 2 ^ n = BITS h (l + n) x"
-  by (import bits BITS_DIV_THM)
-
-lemma BITS_LT_HIGH: "n < 2 ^ Suc h ==> BITS h l n = n div 2 ^ l"
-  by (import bits BITS_LT_HIGH)
-
-lemma BITS_ZERO: "h < l ==> BITS h l n = 0"
-  by (import bits BITS_ZERO)
-
-lemma BITS_ZERO2: "BITS h l 0 = 0"
-  by (import bits BITS_ZERO2)
-
-lemma BITS_ZERO3: "BITS h 0 x = x mod 2 ^ Suc h"
-  by (import bits BITS_ZERO3)
-
-lemma BITS_COMP_THM2: "BITS h2 l2 (BITS h1 l1 n) = BITS (min h1 (h2 + l1)) (l2 + l1) n"
-  by (import bits BITS_COMP_THM2)
-
-lemma NOT_MOD2_LEM: "((n::nat) mod (2::nat) ~= (0::nat)) = (n mod (2::nat) = (1::nat))"
-  by (import bits NOT_MOD2_LEM)
-
-lemma NOT_MOD2_LEM2: "((n::nat) mod (2::nat) ~= (1::nat)) = (n mod (2::nat) = (0::nat))"
-  by (import bits NOT_MOD2_LEM2)
-
-lemma EVEN_MOD2_LEM: "EVEN n = (n mod 2 = 0)"
-  by (import bits EVEN_MOD2_LEM)
-
-lemma ODD_MOD2_LEM: "ODD n = (n mod 2 = 1)"
-  by (import bits ODD_MOD2_LEM)
-
-lemma LSB_ODD: "LSBn = ODD"
-  by (import bits LSB_ODD)
-
-lemma DIV_MULT_THM: "(n::nat) div (2::nat) ^ (x::nat) * (2::nat) ^ x = n - n mod (2::nat) ^ x"
-  by (import bits DIV_MULT_THM)
-
-lemma DIV_MULT_THM2: "(2::nat) * ((x::nat) div (2::nat)) = x - x mod (2::nat)"
-  by (import bits DIV_MULT_THM2)
-
-lemma LESS_EQ_EXP_MULT: "(a::nat) <= (b::nat) ==> EX x::nat. (2::nat) ^ b = x * (2::nat) ^ a"
-  by (import bits LESS_EQ_EXP_MULT)
-
-lemma SLICE_LEM1: "(a::nat) div (2::nat) ^ ((x::nat) + (y::nat)) * (2::nat) ^ (x + y) =
-a div (2::nat) ^ x * (2::nat) ^ x -
-a div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
-  by (import bits SLICE_LEM1)
-
-lemma SLICE_LEM2: "(n::nat) mod (2::nat) ^ ((x::nat) + (y::nat)) =
-n mod (2::nat) ^ x + n div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
-  by (import bits SLICE_LEM2)
-
-lemma SLICE_LEM3: "(l::nat) < (h::nat) ==> (n::nat) mod (2::nat) ^ Suc l <= n mod (2::nat) ^ h"
-  by (import bits SLICE_LEM3)
-
-lemma SLICE_THM: "SLICE h l n = BITS h l n * 2 ^ l"
-  by (import bits SLICE_THM)
-
-lemma SLICELT_THM: "SLICE h l n < 2 ^ Suc h"
-  by (import bits SLICELT_THM)
-
-lemma BITS_SLICE_THM: "BITS h l (SLICE h l n) = BITS h l n"
-  by (import bits BITS_SLICE_THM)
-
-lemma BITS_SLICE_THM2: "h <= h2 ==> BITS h2 l (SLICE h l n) = BITS h l n"
-  by (import bits BITS_SLICE_THM2)
-
-lemma MOD_2EXP_MONO: "(l::nat) <= (h::nat) ==> (n::nat) mod (2::nat) ^ l <= n mod (2::nat) ^ Suc h"
-  by (import bits MOD_2EXP_MONO)
-
-lemma SLICE_COMP_THM: "Suc m <= h & l <= m ==> SLICE h (Suc m) n + SLICE m l n = SLICE h l n"
-  by (import bits SLICE_COMP_THM)
-
-lemma SLICE_ZERO: "h < l ==> SLICE h l n = 0"
-  by (import bits SLICE_ZERO)
-
-lemma BIT_COMP_THM3: "Suc m <= h & l <= m
-==> BITS h (Suc m) n * 2 ^ (Suc m - l) + BITS m l n = BITS h l n"
-  by (import bits BIT_COMP_THM3)
-
-lemma NOT_BIT: "(~ bit n a) = (BITS n n a = 0)"
-  by (import bits NOT_BIT)
-
-lemma NOT_BITS: "(BITS n n a ~= 0) = (BITS n n a = 1)"
-  by (import bits NOT_BITS)
-
-lemma NOT_BITS2: "(BITS n n a ~= 1) = (BITS n n a = 0)"
-  by (import bits NOT_BITS2)
-
-lemma BIT_SLICE: "(bit n a = bit n b) = (SLICE n n a = SLICE n n b)"
-  by (import bits BIT_SLICE)
-
-lemma BIT_SLICE_LEM: "SBIT (bit x n) (x + y) = SLICE x x n * 2 ^ y"
-  by (import bits BIT_SLICE_LEM)
-
-lemma BIT_SLICE_THM: "SBIT (bit x xa) x = SLICE x x xa"
-  by (import bits BIT_SLICE_THM)
-
-lemma SBIT_DIV: "n < m ==> SBIT b (m - n) = SBIT b m div 2 ^ n"
-  by (import bits SBIT_DIV)
-
-lemma BITS_SUC: "l <= Suc h
-==> SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n = BITS (Suc h) l n"
-  by (import bits BITS_SUC)
-
-lemma BITS_SUC_THM: "BITS (Suc h) l n =
-(if Suc h < l then 0 else SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n)"
-  by (import bits BITS_SUC_THM)
-
-lemma BIT_BITS_THM: "(ALL x. l <= x & x <= h --> bit x a = bit x b) = (BITS h l a = BITS h l b)"
-  by (import bits BIT_BITS_THM)
-
-lemma BITWISE_LT_2EXP: "BITWISE n oper a b < 2 ^ n"
-  by (import bits BITWISE_LT_2EXP)
-
-lemma LESS_EXP_MULT2: "(a::nat) < (b::nat)
-==> EX x::nat. (2::nat) ^ b = (2::nat) ^ (x + (1::nat)) * (2::nat) ^ a"
-  by (import bits LESS_EXP_MULT2)
-
-lemma BITWISE_THM: "x < n ==> bit x (BITWISE n oper a b) = oper (bit x a) (bit x b)"
-  by (import bits BITWISE_THM)
-
-lemma BITWISE_COR: "[| x < n; oper (bit x a) (bit x b) |]
-==> BITWISE n oper a b div 2 ^ x mod 2 = 1"
-  by (import bits BITWISE_COR)
-
-lemma BITWISE_NOT_COR: "[| x < n; ~ oper (bit x a) (bit x b) |]
-==> BITWISE n oper a b div 2 ^ x mod 2 = 0"
-  by (import bits BITWISE_NOT_COR)
-
-lemma MOD_PLUS_RIGHT: "(0::nat) < (n::nat) ==> ((j::nat) + (k::nat) mod n) mod n = (j + k) mod n"
-  by (import bits MOD_PLUS_RIGHT)
-
-lemma MOD_PLUS_1: "(0::nat) < (n::nat)
-==> (((x::nat) + (1::nat)) mod n = (0::nat)) = (x mod n + (1::nat) = n)"
-  by (import bits MOD_PLUS_1)
-
-lemma MOD_ADD_1: "[| (0::nat) < (n::nat); ((x::nat) + (1::nat)) mod n ~= (0::nat) |]
-==> (x + (1::nat)) mod n = x mod n + (1::nat)"
-  by (import bits MOD_ADD_1)
-
-;end_setup
-
-setup_theory "~~/src/HOL/Import/HOL" word32
-
-consts
-  HB :: "nat" 
-
-defs
-  HB_primdef: "HB ==
-NUMERAL
- (NUMERAL_BIT1
-   (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
-
-lemma HB_def: "HB =
-NUMERAL
- (NUMERAL_BIT1
-   (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
-  by (import word32 HB_def)
-
-consts
-  WL :: "nat" 
-
-defs
-  WL_primdef: "WL == Suc HB"
-
-lemma WL_def: "WL = Suc HB"
-  by (import word32 WL_def)
-
-consts
-  MODw :: "nat => nat" 
-
-defs
-  MODw_primdef: "MODw == %n. n mod 2 ^ WL"
-
-lemma MODw_def: "MODw n = n mod 2 ^ WL"
-  by (import word32 MODw_def)
-
-consts
-  INw :: "nat => bool" 
-
-defs
-  INw_primdef: "INw == %n. n < 2 ^ WL"
-
-lemma INw_def: "INw n = (n < 2 ^ WL)"
-  by (import word32 INw_def)
-
-consts
-  EQUIV :: "nat => nat => bool" 
-
-defs
-  EQUIV_primdef: "EQUIV == %x y. MODw x = MODw y"
-
-lemma EQUIV_def: "EQUIV x y = (MODw x = MODw y)"
-  by (import word32 EQUIV_def)
-
-lemma EQUIV_QT: "EQUIV x y = (EQUIV x = EQUIV y)"
-  by (import word32 EQUIV_QT)
-
-lemma FUNPOW_THM2: "(f ^^ Suc n) x = f ((f ^^ n) x)"
-  by (import word32 FUNPOW_THM2)
-
-lemma FUNPOW_COMP: "(f ^^ m) ((f ^^ n) a) = (f ^^ (m + n)) a"
-  by (import word32 FUNPOW_COMP)
-
-lemma INw_MODw: "INw (MODw n)"
-  by (import word32 INw_MODw)
-
-lemma TOw_IDEM: "INw a ==> MODw a = a"
-  by (import word32 TOw_IDEM)
-
-lemma MODw_IDEM2: "MODw (MODw a) = MODw a"
-  by (import word32 MODw_IDEM2)
-
-lemma TOw_QT: "EQUIV (MODw a) a"
-  by (import word32 TOw_QT)
-
-lemma MODw_THM: "MODw = BITS HB 0"
-  by (import word32 MODw_THM)
-
-lemma MOD_ADD: "MODw (a + b) = MODw (MODw a + MODw b)"
-  by (import word32 MOD_ADD)
-
-lemma MODw_MULT: "MODw (a * b) = MODw (MODw a * MODw b)"
-  by (import word32 MODw_MULT)
-
-consts
-  AONE :: "nat" 
-
-defs
-  AONE_primdef: "AONE == 1"
-
-lemma AONE_def: "AONE = 1"
-  by (import word32 AONE_def)
-
-lemma ADD_QT: "(ALL n. EQUIV (0 + n) n) & (ALL m n. EQUIV (Suc m + n) (Suc (m + n)))"
-  by (import word32 ADD_QT)
-
-lemma ADD_0_QT: "EQUIV (a + 0) a"
-  by (import word32 ADD_0_QT)
-
-lemma ADD_COMM_QT: "EQUIV (a + b) (b + a)"
-  by (import word32 ADD_COMM_QT)
-
-lemma ADD_ASSOC_QT: "EQUIV (a + (b + c)) (a + b + c)"
-  by (import word32 ADD_ASSOC_QT)
-
-lemma MULT_QT: "(ALL n. EQUIV (0 * n) 0) & (ALL m n. EQUIV (Suc m * n) (m * n + n))"
-  by (import word32 MULT_QT)
-
-lemma ADD1_QT: "EQUIV (Suc m) (m + AONE)"
-  by (import word32 ADD1_QT)
-
-lemma ADD_CLAUSES_QT: "(ALL m. EQUIV (0 + m) m) &
-(ALL m. EQUIV (m + 0) m) &
-(ALL m n. EQUIV (Suc m + n) (Suc (m + n))) &
-(ALL m n. EQUIV (m + Suc n) (Suc (m + n)))"
-  by (import word32 ADD_CLAUSES_QT)
-
-lemma SUC_EQUIV_COMP: "EQUIV (Suc a) b ==> EQUIV a (b + (2 ^ WL - 1))"
-  by (import word32 SUC_EQUIV_COMP)
-
-lemma INV_SUC_EQ_QT: "EQUIV (Suc m) (Suc n) = EQUIV m n"
-  by (import word32 INV_SUC_EQ_QT)
-
-lemma ADD_INV_0_QT: "EQUIV (m + n) m ==> EQUIV n 0"
-  by (import word32 ADD_INV_0_QT)
-
-lemma ADD_INV_0_EQ_QT: "EQUIV (m + n) m = EQUIV n 0"
-  by (import word32 ADD_INV_0_EQ_QT)
-
-lemma EQ_ADD_LCANCEL_QT: "EQUIV (m + n) (m + p) = EQUIV n p"
-  by (import word32 EQ_ADD_LCANCEL_QT)
-
-lemma EQ_ADD_RCANCEL_QT: "EQUIV (x + xb) (xa + xb) = EQUIV x xa"
-  by (import word32 EQ_ADD_RCANCEL_QT)
-
-lemma LEFT_ADD_DISTRIB_QT: "EQUIV (p * (m + n)) (p * m + p * n)"
-  by (import word32 LEFT_ADD_DISTRIB_QT)
-
-lemma MULT_ASSOC_QT: "EQUIV (m * (n * p)) (m * n * p)"
-  by (import word32 MULT_ASSOC_QT)
-
-lemma MULT_COMM_QT: "EQUIV (m * n) (n * m)"
-  by (import word32 MULT_COMM_QT)
-
-lemma MULT_CLAUSES_QT: "EQUIV (0 * m) 0 &
-EQUIV (m * 0) 0 &
-EQUIV (AONE * m) m &
-EQUIV (m * AONE) m &
-EQUIV (Suc m * n) (m * n + n) & EQUIV (m * Suc n) (m + m * n)"
-  by (import word32 MULT_CLAUSES_QT)
-
-consts
-  MSBn :: "nat => bool" 
-
-defs
-  MSBn_primdef: "MSBn == bit HB"
-
-lemma MSBn_def: "MSBn = bit HB"
-  by (import word32 MSBn_def)
-
-consts
-  ONE_COMP :: "nat => nat" 
-
-defs
-  ONE_COMP_primdef: "ONE_COMP == %x. 2 ^ WL - 1 - MODw x"
-
-lemma ONE_COMP_def: "ONE_COMP x = 2 ^ WL - 1 - MODw x"
-  by (import word32 ONE_COMP_def)
-
-consts
-  TWO_COMP :: "nat => nat" 
-
-defs
-  TWO_COMP_primdef: "TWO_COMP == %x. 2 ^ WL - MODw x"
-
-lemma TWO_COMP_def: "TWO_COMP x = 2 ^ WL - MODw x"
-  by (import word32 TWO_COMP_def)
-
-lemma ADD_TWO_COMP_QT: "EQUIV (MODw a + TWO_COMP a) 0"
-  by (import word32 ADD_TWO_COMP_QT)
-
-lemma TWO_COMP_ONE_COMP_QT: "EQUIV (TWO_COMP a) (ONE_COMP a + AONE)"
-  by (import word32 TWO_COMP_ONE_COMP_QT)
-
-lemma BIT_EQUIV_THM: "(ALL xb<WL. bit xb x = bit xb xa) = EQUIV x xa"
-  by (import word32 BIT_EQUIV_THM)
-
-lemma BITS_SUC2: "BITS (Suc n) 0 a = SLICE (Suc n) (Suc n) a + BITS n 0 a"
-  by (import word32 BITS_SUC2)
-
-lemma BITWISE_ONE_COMP_THM: "BITWISE WL (%x y. ~ x) a b = ONE_COMP a"
-  by (import word32 BITWISE_ONE_COMP_THM)
-
-lemma ONE_COMP_THM: "xa < WL ==> bit xa (ONE_COMP x) = (~ bit xa x)"
-  by (import word32 ONE_COMP_THM)
-
-consts
-  OR :: "nat => nat => nat" 
-
-defs
-  OR_primdef: "OR == BITWISE WL op |"
-
-lemma OR_def: "OR = BITWISE WL op |"
-  by (import word32 OR_def)
-
-consts
-  AND :: "nat => nat => nat" 
-
-defs
-  AND_primdef: "AND == BITWISE WL op &"
-
-lemma AND_def: "AND = BITWISE WL op &"
-  by (import word32 AND_def)
-
-consts
-  EOR :: "nat => nat => nat" 
-
-defs
-  EOR_primdef: "EOR == BITWISE WL op ~="
-
-lemma EOR_def: "EOR = BITWISE WL op ~="
-  by (import word32 EOR_def)
-
-consts
-  COMP0 :: "nat" 
-
-defs
-  COMP0_primdef: "COMP0 == ONE_COMP 0"
-
-lemma COMP0_def: "COMP0 = ONE_COMP 0"
-  by (import word32 COMP0_def)
-
-lemma BITWISE_THM2: "(ALL x<WL. oper (bit x a) (bit x b) = bit x y) =
-EQUIV (BITWISE WL oper a b) y"
-  by (import word32 BITWISE_THM2)
-
-lemma OR_ASSOC_QT: "EQUIV (OR a (OR b c)) (OR (OR a b) c)"
-  by (import word32 OR_ASSOC_QT)
-
-lemma OR_COMM_QT: "EQUIV (OR a b) (OR b a)"
-  by (import word32 OR_COMM_QT)
-
-lemma OR_ABSORB_QT: "EQUIV (AND a (OR a b)) a"
-  by (import word32 OR_ABSORB_QT)
-
-lemma OR_IDEM_QT: "EQUIV (OR a a) a"
-  by (import word32 OR_IDEM_QT)
-
-lemma AND_ASSOC_QT: "EQUIV (AND a (AND b c)) (AND (AND a b) c)"
-  by (import word32 AND_ASSOC_QT)
-
-lemma AND_COMM_QT: "EQUIV (AND a b) (AND b a)"
-  by (import word32 AND_COMM_QT)
-
-lemma AND_ABSORB_QT: "EQUIV (OR a (AND a b)) a"
-  by (import word32 AND_ABSORB_QT)
-
-lemma AND_IDEM_QT: "EQUIV (AND a a) a"
-  by (import word32 AND_IDEM_QT)
-
-lemma OR_COMP_QT: "EQUIV (OR a (ONE_COMP a)) COMP0"
-  by (import word32 OR_COMP_QT)
-
-lemma AND_COMP_QT: "EQUIV (AND a (ONE_COMP a)) 0"
-  by (import word32 AND_COMP_QT)
-
-lemma ONE_COMP_QT: "EQUIV (ONE_COMP (ONE_COMP a)) a"
-  by (import word32 ONE_COMP_QT)
-
-lemma RIGHT_AND_OVER_OR_QT: "EQUIV (AND (OR a b) c) (OR (AND a c) (AND b c))"
-  by (import word32 RIGHT_AND_OVER_OR_QT)
-
-lemma RIGHT_OR_OVER_AND_QT: "EQUIV (OR (AND a b) c) (AND (OR a c) (OR b c))"
-  by (import word32 RIGHT_OR_OVER_AND_QT)
-
-lemma DE_MORGAN_THM_QT: "EQUIV (ONE_COMP (AND a b)) (OR (ONE_COMP a) (ONE_COMP b)) &
-EQUIV (ONE_COMP (OR a b)) (AND (ONE_COMP a) (ONE_COMP b))"
-  by (import word32 DE_MORGAN_THM_QT)
-
-lemma BIT_EQUIV: "[| n < WL; EQUIV a b |] ==> bit n a = bit n b"
-  by (import word32 BIT_EQUIV)
-
-lemma LSB_WELLDEF: "EQUIV a b ==> LSBn a = LSBn b"
-  by (import word32 LSB_WELLDEF)
-
-lemma MSB_WELLDEF: "EQUIV a b ==> MSBn a = MSBn b"
-  by (import word32 MSB_WELLDEF)
-
-lemma BITWISE_ISTEP: "0 < n
-==> BITWISE n oper (a div 2) (b div 2) =
-    BITWISE n oper a b div 2 + SBIT (oper (bit n a) (bit n b)) (n - 1)"
-  by (import word32 BITWISE_ISTEP)
-
-lemma BITWISE_EVAL: "BITWISE (Suc n) oper a b =
-2 * BITWISE n oper (a div 2) (b div 2) + SBIT (oper (LSBn a) (LSBn b)) 0"
-  by (import word32 BITWISE_EVAL)
-
-lemma BITWISE_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (BITWISE n oper a c) (BITWISE n oper b d)"
-  by (import word32 BITWISE_WELLDEF)
-
-lemma BITWISEw_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (BITWISE WL oper a c) (BITWISE WL oper b d)"
-  by (import word32 BITWISEw_WELLDEF)
-
-lemma SUC_WELLDEF: "EQUIV a b ==> EQUIV (Suc a) (Suc b)"
-  by (import word32 SUC_WELLDEF)
-
-lemma ADD_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (a + c) (b + d)"
-  by (import word32 ADD_WELLDEF)
-
-lemma MUL_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (a * c) (b * d)"
-  by (import word32 MUL_WELLDEF)
-
-lemma ONE_COMP_WELLDEF: "EQUIV a b ==> EQUIV (ONE_COMP a) (ONE_COMP b)"
-  by (import word32 ONE_COMP_WELLDEF)
-
-lemma TWO_COMP_WELLDEF: "EQUIV a b ==> EQUIV (TWO_COMP a) (TWO_COMP b)"
-  by (import word32 TWO_COMP_WELLDEF)
-
-lemma TOw_WELLDEF: "EQUIV a b ==> EQUIV (MODw a) (MODw b)"
-  by (import word32 TOw_WELLDEF)
-
-consts
-  LSR_ONE :: "nat => nat" 
-
-defs
-  LSR_ONE_primdef: "LSR_ONE == %a. MODw a div 2"
-
-lemma LSR_ONE_def: "LSR_ONE a = MODw a div 2"
-  by (import word32 LSR_ONE_def)
-
-consts
-  ASR_ONE :: "nat => nat" 
-
-defs
-  ASR_ONE_primdef: "ASR_ONE == %a. LSR_ONE a + SBIT (MSBn a) HB"
-
-lemma ASR_ONE_def: "ASR_ONE a = LSR_ONE a + SBIT (MSBn a) HB"
-  by (import word32 ASR_ONE_def)
-
-consts
-  ROR_ONE :: "nat => nat" 
-
-defs
-  ROR_ONE_primdef: "ROR_ONE == %a. LSR_ONE a + SBIT (LSBn a) HB"
-
-lemma ROR_ONE_def: "ROR_ONE a = LSR_ONE a + SBIT (LSBn a) HB"
-  by (import word32 ROR_ONE_def)
-
-consts
-  RRXn :: "bool => nat => nat" 
-
-defs
-  RRXn_primdef: "RRXn == %c a. LSR_ONE a + SBIT c HB"
-
-lemma RRXn_def: "RRXn c a = LSR_ONE a + SBIT c HB"
-  by (import word32 RRXn_def)
-
-lemma LSR_ONE_WELLDEF: "EQUIV a b ==> EQUIV (LSR_ONE a) (LSR_ONE b)"
-  by (import word32 LSR_ONE_WELLDEF)
-
-lemma ASR_ONE_WELLDEF: "EQUIV a b ==> EQUIV (ASR_ONE a) (ASR_ONE b)"
-  by (import word32 ASR_ONE_WELLDEF)
-
-lemma ROR_ONE_WELLDEF: "EQUIV a b ==> EQUIV (ROR_ONE a) (ROR_ONE b)"
-  by (import word32 ROR_ONE_WELLDEF)
-
-lemma RRX_WELLDEF: "EQUIV a b ==> EQUIV (RRXn c a) (RRXn c b)"
-  by (import word32 RRX_WELLDEF)
-
-lemma LSR_ONE: "LSR_ONE = BITS HB 1"
-  by (import word32 LSR_ONE)
-
-typedef (open) word32 = "{x::nat => bool. EX xa. x = EQUIV xa}" 
-  by (rule typedef_helper,import word32 word32_TY_DEF)
-
-lemmas word32_TY_DEF = typedef_hol2hol4 [OF type_definition_word32]
-
-consts
-  mk_word32 :: "(nat => bool) => word32" 
-  dest_word32 :: "word32 => nat => bool" 
-
-specification (dest_word32 mk_word32) word32_tybij: "(ALL a. mk_word32 (dest_word32 a) = a) &
-(ALL r. (EX x. r = EQUIV x) = (dest_word32 (mk_word32 r) = r))"
-  by (import word32 word32_tybij)
-
-consts
-  w_0 :: "word32" 
-
-defs
-  w_0_primdef: "w_0 == mk_word32 (EQUIV 0)"
-
-lemma w_0_def: "w_0 = mk_word32 (EQUIV 0)"
-  by (import word32 w_0_def)
-
-consts
-  w_1 :: "word32" 
-
-defs
-  w_1_primdef: "w_1 == mk_word32 (EQUIV AONE)"
-
-lemma w_1_def: "w_1 = mk_word32 (EQUIV AONE)"
-  by (import word32 w_1_def)
-
-consts
-  w_T :: "word32" 
-
-defs
-  w_T_primdef: "w_T == mk_word32 (EQUIV COMP0)"
-
-lemma w_T_def: "w_T = mk_word32 (EQUIV COMP0)"
-  by (import word32 w_T_def)
-
-definition
-  word_suc :: "word32 => word32"  where
-  "word_suc == %T1. mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
-
-lemma word_suc: "word_suc T1 = mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
-  by (import word32 word_suc)
-
-definition
-  word_add :: "word32 => word32 => word32"  where
-  "word_add ==
-%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
-
-lemma word_add: "word_add T1 T2 =
-mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
-  by (import word32 word_add)
-
-definition
-  word_mul :: "word32 => word32 => word32"  where
-  "word_mul ==
-%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
-
-lemma word_mul: "word_mul T1 T2 =
-mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
-  by (import word32 word_mul)
-
-definition
-  word_1comp :: "word32 => word32"  where
-  "word_1comp == %T1. mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
-
-lemma word_1comp: "word_1comp T1 = mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
-  by (import word32 word_1comp)
-
-definition
-  word_2comp :: "word32 => word32"  where
-  "word_2comp == %T1. mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
-
-lemma word_2comp: "word_2comp T1 = mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
-  by (import word32 word_2comp)
-
-definition
-  word_lsr1 :: "word32 => word32"  where
-  "word_lsr1 == %T1. mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
-
-lemma word_lsr1: "word_lsr1 T1 = mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
-  by (import word32 word_lsr1)
-
-definition
-  word_asr1 :: "word32 => word32"  where
-  "word_asr1 == %T1. mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
-
-lemma word_asr1: "word_asr1 T1 = mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
-  by (import word32 word_asr1)
-
-definition
-  word_ror1 :: "word32 => word32"  where
-  "word_ror1 == %T1. mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
-
-lemma word_ror1: "word_ror1 T1 = mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
-  by (import word32 word_ror1)
-
-consts
-  RRX :: "bool => word32 => word32" 
-
-defs
-  RRX_primdef: "RRX == %T1 T2. mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
-
-lemma RRX_def: "RRX T1 T2 = mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
-  by (import word32 RRX_def)
-
-consts
-  LSB :: "word32 => bool" 
-
-defs
-  LSB_primdef: "LSB == %T1. LSBn (Eps (dest_word32 T1))"
-
-lemma LSB_def: "LSB T1 = LSBn (Eps (dest_word32 T1))"
-  by (import word32 LSB_def)
-
-consts
-  MSB :: "word32 => bool" 
-
-defs
-  MSB_primdef: "MSB == %T1. MSBn (Eps (dest_word32 T1))"
-
-lemma MSB_def: "MSB T1 = MSBn (Eps (dest_word32 T1))"
-  by (import word32 MSB_def)
-
-definition
-  bitwise_or :: "word32 => word32 => word32"  where
-  "bitwise_or ==
-%T1 T2. mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
-
-lemma bitwise_or: "bitwise_or T1 T2 =
-mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
-  by (import word32 bitwise_or)
-
-definition
-  bitwise_eor :: "word32 => word32 => word32"  where
-  "bitwise_eor ==
-%T1 T2.
-   mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
-
-lemma bitwise_eor: "bitwise_eor T1 T2 =
-mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
-  by (import word32 bitwise_eor)
-
-definition
-  bitwise_and :: "word32 => word32 => word32"  where
-  "bitwise_and ==
-%T1 T2.
-   mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
-
-lemma bitwise_and: "bitwise_and T1 T2 =
-mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
-  by (import word32 bitwise_and)
-
-consts
-  TOw :: "word32 => word32" 
-
-defs
-  TOw_primdef: "TOw == %T1. mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
-
-lemma TOw_def: "TOw T1 = mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
-  by (import word32 TOw_def)
-
-consts
-  n2w :: "nat => word32" 
-
-defs
-  n2w_primdef: "n2w == %n. mk_word32 (EQUIV n)"
-
-lemma n2w_def: "n2w n = mk_word32 (EQUIV n)"
-  by (import word32 n2w_def)
-
-consts
-  w2n :: "word32 => nat" 
-
-defs
-  w2n_primdef: "w2n == %w. MODw (Eps (dest_word32 w))"
-
-lemma w2n_def: "w2n w = MODw (Eps (dest_word32 w))"
-  by (import word32 w2n_def)
-
-lemma ADDw: "(ALL x. word_add w_0 x = x) &
-(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa))"
-  by (import word32 ADDw)
-
-lemma ADD_0w: "word_add x w_0 = x"
-  by (import word32 ADD_0w)
-
-lemma ADD1w: "word_suc x = word_add x w_1"
-  by (import word32 ADD1w)
-
-lemma ADD_ASSOCw: "word_add x (word_add xa xb) = word_add (word_add x xa) xb"
-  by (import word32 ADD_ASSOCw)
-
-lemma ADD_CLAUSESw: "(ALL x. word_add w_0 x = x) &
-(ALL x. word_add x w_0 = x) &
-(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa)) &
-(ALL x xa. word_add x (word_suc xa) = word_suc (word_add x xa))"
-  by (import word32 ADD_CLAUSESw)
-
-lemma ADD_COMMw: "word_add x xa = word_add xa x"
-  by (import word32 ADD_COMMw)
-
-lemma ADD_INV_0_EQw: "(word_add x xa = x) = (xa = w_0)"
-  by (import word32 ADD_INV_0_EQw)
-
-lemma EQ_ADD_LCANCELw: "(word_add x xa = word_add x xb) = (xa = xb)"
-  by (import word32 EQ_ADD_LCANCELw)
-
-lemma EQ_ADD_RCANCELw: "(word_add x xb = word_add xa xb) = (x = xa)"
-  by (import word32 EQ_ADD_RCANCELw)
-
-lemma LEFT_ADD_DISTRIBw: "word_mul xb (word_add x xa) = word_add (word_mul xb x) (word_mul xb xa)"
-  by (import word32 LEFT_ADD_DISTRIBw)
-
-lemma MULT_ASSOCw: "word_mul x (word_mul xa xb) = word_mul (word_mul x xa) xb"
-  by (import word32 MULT_ASSOCw)
-
-lemma MULT_COMMw: "word_mul x xa = word_mul xa x"
-  by (import word32 MULT_COMMw)
-
-lemma MULT_CLAUSESw: "word_mul w_0 x = w_0 &
-word_mul x w_0 = w_0 &
-word_mul w_1 x = x &
-word_mul x w_1 = x &
-word_mul (word_suc x) xa = word_add (word_mul x xa) xa &
-word_mul x (word_suc xa) = word_add x (word_mul x xa)"
-  by (import word32 MULT_CLAUSESw)
-
-lemma TWO_COMP_ONE_COMP: "word_2comp x = word_add (word_1comp x) w_1"
-  by (import word32 TWO_COMP_ONE_COMP)
-
-lemma OR_ASSOCw: "bitwise_or x (bitwise_or xa xb) = bitwise_or (bitwise_or x xa) xb"
-  by (import word32 OR_ASSOCw)
-
-lemma OR_COMMw: "bitwise_or x xa = bitwise_or xa x"
-  by (import word32 OR_COMMw)
-
-lemma OR_IDEMw: "bitwise_or x x = x"
-  by (import word32 OR_IDEMw)
-
-lemma OR_ABSORBw: "bitwise_and x (bitwise_or x xa) = x"
-  by (import word32 OR_ABSORBw)
-
-lemma AND_ASSOCw: "bitwise_and x (bitwise_and xa xb) = bitwise_and (bitwise_and x xa) xb"
-  by (import word32 AND_ASSOCw)
-
-lemma AND_COMMw: "bitwise_and x xa = bitwise_and xa x"
-  by (import word32 AND_COMMw)
-
-lemma AND_IDEMw: "bitwise_and x x = x"
-  by (import word32 AND_IDEMw)
-
-lemma AND_ABSORBw: "bitwise_or x (bitwise_and x xa) = x"
-  by (import word32 AND_ABSORBw)
-
-lemma ONE_COMPw: "word_1comp (word_1comp x) = x"
-  by (import word32 ONE_COMPw)
-
-lemma RIGHT_AND_OVER_ORw: "bitwise_and (bitwise_or x xa) xb =
-bitwise_or (bitwise_and x xb) (bitwise_and xa xb)"
-  by (import word32 RIGHT_AND_OVER_ORw)
-
-lemma RIGHT_OR_OVER_ANDw: "bitwise_or (bitwise_and x xa) xb =
-bitwise_and (bitwise_or x xb) (bitwise_or xa xb)"
-  by (import word32 RIGHT_OR_OVER_ANDw)
-
-lemma DE_MORGAN_THMw: "word_1comp (bitwise_and x xa) = bitwise_or (word_1comp x) (word_1comp xa) &
-word_1comp (bitwise_or x xa) = bitwise_and (word_1comp x) (word_1comp xa)"
-  by (import word32 DE_MORGAN_THMw)
-
-lemma w_0: "w_0 = n2w 0"
-  by (import word32 w_0)
-
-lemma w_1: "w_1 = n2w 1"
-  by (import word32 w_1)
-
-lemma w_T: "w_T =
-n2w (NUMERAL
-      (NUMERAL_BIT1
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1
-              (NUMERAL_BIT1
-                (NUMERAL_BIT1
-                  (NUMERAL_BIT1
-                    (NUMERAL_BIT1
-                      (NUMERAL_BIT1
-                        (NUMERAL_BIT1
-                          (NUMERAL_BIT1
-                            (NUMERAL_BIT1
-                              (NUMERAL_BIT1
-                                (NUMERAL_BIT1
-                                  (NUMERAL_BIT1
-                                    (NUMERAL_BIT1
-(NUMERAL_BIT1
-  (NUMERAL_BIT1
-    (NUMERAL_BIT1
-      (NUMERAL_BIT1
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1
-              (NUMERAL_BIT1
-                (NUMERAL_BIT1
-                  (NUMERAL_BIT1
-                    (NUMERAL_BIT1
-                      (NUMERAL_BIT1
-                        (NUMERAL_BIT1
-                          (NUMERAL_BIT1
-                            (NUMERAL_BIT1
-                              (NUMERAL_BIT1
-                                ALT_ZERO)))))))))))))))))))))))))))))))))"
-  by (import word32 w_T)
-
-lemma ADD_TWO_COMP: "word_add x (word_2comp x) = w_0"
-  by (import word32 ADD_TWO_COMP)
-
-lemma ADD_TWO_COMP2: "word_add (word_2comp x) x = w_0"
-  by (import word32 ADD_TWO_COMP2)
-
-definition
-  word_sub :: "word32 => word32 => word32"  where
-  "word_sub == %a b. word_add a (word_2comp b)"
-
-lemma word_sub: "word_sub a b = word_add a (word_2comp b)"
-  by (import word32 word_sub)
-
-definition
-  word_lsl :: "word32 => nat => word32"  where
-  "word_lsl == %a n. word_mul a (n2w (2 ^ n))"
-
-lemma word_lsl: "word_lsl a n = word_mul a (n2w (2 ^ n))"
-  by (import word32 word_lsl)
-
-definition
-  word_lsr :: "word32 => nat => word32"  where
-  "word_lsr == %a n. (word_lsr1 ^^ n) a"
-
-lemma word_lsr: "word_lsr a n = (word_lsr1 ^^ n) a"
-  by (import word32 word_lsr)
-
-definition
-  word_asr :: "word32 => nat => word32"  where
-  "word_asr == %a n. (word_asr1 ^^ n) a"
-
-lemma word_asr: "word_asr a n = (word_asr1 ^^ n) a"
-  by (import word32 word_asr)
-
-definition
-  word_ror :: "word32 => nat => word32"  where
-  "word_ror == %a n. (word_ror1 ^^ n) a"
-
-lemma word_ror: "word_ror a n = (word_ror1 ^^ n) a"
-  by (import word32 word_ror)
-
-consts
-  BITw :: "nat => word32 => bool" 
-
-defs
-  BITw_primdef: "BITw == %b n. bit b (w2n n)"
-
-lemma BITw_def: "BITw b n = bit b (w2n n)"
-  by (import word32 BITw_def)
-
-consts
-  BITSw :: "nat => nat => word32 => nat" 
-
-defs
-  BITSw_primdef: "BITSw == %h l n. BITS h l (w2n n)"
-
-lemma BITSw_def: "BITSw h l n = BITS h l (w2n n)"
-  by (import word32 BITSw_def)
-
-consts
-  SLICEw :: "nat => nat => word32 => nat" 
-
-defs
-  SLICEw_primdef: "SLICEw == %h l n. SLICE h l (w2n n)"
-
-lemma SLICEw_def: "SLICEw h l n = SLICE h l (w2n n)"
-  by (import word32 SLICEw_def)
-
-lemma TWO_COMP_ADD: "word_2comp (word_add a b) = word_add (word_2comp a) (word_2comp b)"
-  by (import word32 TWO_COMP_ADD)
-
-lemma TWO_COMP_ELIM: "word_2comp (word_2comp a) = a"
-  by (import word32 TWO_COMP_ELIM)
-
-lemma ADD_SUB_ASSOC: "word_sub (word_add a b) c = word_add a (word_sub b c)"
-  by (import word32 ADD_SUB_ASSOC)
-
-lemma ADD_SUB_SYM: "word_sub (word_add a b) c = word_add (word_sub a c) b"
-  by (import word32 ADD_SUB_SYM)
-
-lemma SUB_EQUALw: "word_sub a a = w_0"
-  by (import word32 SUB_EQUALw)
-
-lemma ADD_SUBw: "word_sub (word_add a b) b = a"
-  by (import word32 ADD_SUBw)
-
-lemma SUB_SUBw: "word_sub a (word_sub b c) = word_sub (word_add a c) b"
-  by (import word32 SUB_SUBw)
-
-lemma ONE_COMP_TWO_COMP: "word_1comp a = word_sub (word_2comp a) w_1"
-  by (import word32 ONE_COMP_TWO_COMP)
-
-lemma SUBw: "word_sub (word_suc m) n = word_suc (word_sub m n)"
-  by (import word32 SUBw)
-
-lemma ADD_EQ_SUBw: "(word_add m n = p) = (m = word_sub p n)"
-  by (import word32 ADD_EQ_SUBw)
-
-lemma CANCEL_SUBw: "(word_sub n p = word_sub m p) = (n = m)"
-  by (import word32 CANCEL_SUBw)
-
-lemma SUB_PLUSw: "word_sub a (word_add b c) = word_sub (word_sub a b) c"
-  by (import word32 SUB_PLUSw)
-
-lemma word_nchotomy: "EX n. w = n2w n"
-  by (import word32 word_nchotomy)
-
-lemma dest_word_mk_word_eq3: "dest_word32 (mk_word32 (EQUIV a)) = EQUIV a"
-  by (import word32 dest_word_mk_word_eq3)
-
-lemma MODw_ELIM: "n2w (MODw n) = n2w n"
-  by (import word32 MODw_ELIM)
-
-lemma w2n_EVAL: "w2n (n2w n) = MODw n"
-  by (import word32 w2n_EVAL)
-
-lemma w2n_ELIM: "n2w (w2n a) = a"
-  by (import word32 w2n_ELIM)
-
-lemma n2w_11: "(n2w a = n2w b) = (MODw a = MODw b)"
-  by (import word32 n2w_11)
-
-lemma ADD_EVAL: "word_add (n2w a) (n2w b) = n2w (a + b)"
-  by (import word32 ADD_EVAL)
-
-lemma MUL_EVAL: "word_mul (n2w a) (n2w b) = n2w (a * b)"
-  by (import word32 MUL_EVAL)
-
-lemma ONE_COMP_EVAL: "word_1comp (n2w a) = n2w (ONE_COMP a)"
-  by (import word32 ONE_COMP_EVAL)
-
-lemma TWO_COMP_EVAL: "word_2comp (n2w a) = n2w (TWO_COMP a)"
-  by (import word32 TWO_COMP_EVAL)
-
-lemma LSR_ONE_EVAL: "word_lsr1 (n2w a) = n2w (LSR_ONE a)"
-  by (import word32 LSR_ONE_EVAL)
-
-lemma ASR_ONE_EVAL: "word_asr1 (n2w a) = n2w (ASR_ONE a)"
-  by (import word32 ASR_ONE_EVAL)
-
-lemma ROR_ONE_EVAL: "word_ror1 (n2w a) = n2w (ROR_ONE a)"
-  by (import word32 ROR_ONE_EVAL)
-
-lemma RRX_EVAL: "RRX c (n2w a) = n2w (RRXn c a)"
-  by (import word32 RRX_EVAL)
-
-lemma LSB_EVAL: "LSB (n2w a) = LSBn a"
-  by (import word32 LSB_EVAL)
-
-lemma MSB_EVAL: "MSB (n2w a) = MSBn a"
-  by (import word32 MSB_EVAL)
-
-lemma OR_EVAL: "bitwise_or (n2w a) (n2w b) = n2w (OR a b)"
-  by (import word32 OR_EVAL)
-
-lemma EOR_EVAL: "bitwise_eor (n2w a) (n2w b) = n2w (EOR a b)"
-  by (import word32 EOR_EVAL)
-
-lemma AND_EVAL: "bitwise_and (n2w a) (n2w b) = n2w (AND a b)"
-  by (import word32 AND_EVAL)
-
-lemma BITS_EVAL: "BITSw h l (n2w a) = BITS h l (MODw a)"
-  by (import word32 BITS_EVAL)
-
-lemma BIT_EVAL: "BITw b (n2w a) = bit b (MODw a)"
-  by (import word32 BIT_EVAL)
-
-lemma SLICE_EVAL: "SLICEw h l (n2w a) = SLICE h l (MODw a)"
-  by (import word32 SLICE_EVAL)
-
-lemma LSL_ADD: "word_lsl (word_lsl a m) n = word_lsl a (m + n)"
-  by (import word32 LSL_ADD)
-
-lemma LSR_ADD: "word_lsr (word_lsr x xa) xb = word_lsr x (xa + xb)"
-  by (import word32 LSR_ADD)
-
-lemma ASR_ADD: "word_asr (word_asr x xa) xb = word_asr x (xa + xb)"
-  by (import word32 ASR_ADD)
-
-lemma ROR_ADD: "word_ror (word_ror x xa) xb = word_ror x (xa + xb)"
-  by (import word32 ROR_ADD)
-
-lemma LSL_LIMIT: "HB < n ==> word_lsl w n = w_0"
-  by (import word32 LSL_LIMIT)
-
-lemma MOD_MOD_DIV: "INw (MODw a div 2 ^ b)"
-  by (import word32 MOD_MOD_DIV)
-
-lemma MOD_MOD_DIV_2EXP: "MODw (MODw a div 2 ^ n) div 2 = MODw a div 2 ^ Suc n"
-  by (import word32 MOD_MOD_DIV_2EXP)
-
-lemma LSR_EVAL: "word_lsr (n2w a) n = n2w (MODw a div 2 ^ n)"
-  by (import word32 LSR_EVAL)
-
-lemma LSR_THM: "word_lsr (n2w n) x = n2w (BITS HB (min WL x) n)"
-  by (import word32 LSR_THM)
-
-lemma LSR_LIMIT: "HB < x ==> word_lsr w x = w_0"
-  by (import word32 LSR_LIMIT)
-
-lemma LEFT_SHIFT_LESS: "(a::nat) < (2::nat) ^ (m::nat)
-==> (2::nat) ^ (n::nat) + a * (2::nat) ^ n <= (2::nat) ^ (m + n)"
-  by (import word32 LEFT_SHIFT_LESS)
-
-lemma ROR_THM: "word_ror (n2w n) x =
-(let x' = x mod WL
- in n2w (BITS HB x' n + BITS (x' - 1) 0 n * 2 ^ (WL - x')))"
-  by (import word32 ROR_THM)
-
-lemma ROR_CYCLE: "word_ror w (x * WL) = w"
-  by (import word32 ROR_CYCLE)
-
-lemma ASR_THM: "word_asr (n2w n) x =
-(let x' = min HB x; s = BITS HB x' n
- in n2w (if MSBn n then 2 ^ WL - 2 ^ (WL - x') + s else s))"
-  by (import word32 ASR_THM)
-
-lemma ASR_LIMIT: "HB <= x ==> word_asr w x = (if MSB w then w_T else w_0)"
-  by (import word32 ASR_LIMIT)
-
-lemma ZERO_SHIFT: "(ALL n. word_lsl w_0 n = w_0) &
-(ALL n. word_asr w_0 n = w_0) &
-(ALL n. word_lsr w_0 n = w_0) & (ALL n. word_ror w_0 n = w_0)"
-  by (import word32 ZERO_SHIFT)
-
-lemma ZERO_SHIFT2: "(ALL a. word_lsl a 0 = a) &
-(ALL a. word_asr a 0 = a) &
-(ALL a. word_lsr a 0 = a) & (ALL a. word_ror a 0 = a)"
-  by (import word32 ZERO_SHIFT2)
-
-lemma ASR_w_T: "word_asr w_T n = w_T"
-  by (import word32 ASR_w_T)
-
-lemma ROR_w_T: "word_ror w_T n = w_T"
-  by (import word32 ROR_w_T)
-
-lemma MODw_EVAL: "MODw x =
-x mod
-NUMERAL
- (NUMERAL_BIT2
-   (NUMERAL_BIT1
-     (NUMERAL_BIT1
-       (NUMERAL_BIT1
-         (NUMERAL_BIT1
-           (NUMERAL_BIT1
-             (NUMERAL_BIT1
-               (NUMERAL_BIT1
-                 (NUMERAL_BIT1
-                   (NUMERAL_BIT1
-                     (NUMERAL_BIT1
-                       (NUMERAL_BIT1
-                         (NUMERAL_BIT1
-                           (NUMERAL_BIT1
-                             (NUMERAL_BIT1
-                               (NUMERAL_BIT1
-                                 (NUMERAL_BIT1
-                                   (NUMERAL_BIT1
-                                     (NUMERAL_BIT1
- (NUMERAL_BIT1
-   (NUMERAL_BIT1
-     (NUMERAL_BIT1
-       (NUMERAL_BIT1
-         (NUMERAL_BIT1
-           (NUMERAL_BIT1
-             (NUMERAL_BIT1
-               (NUMERAL_BIT1
-                 (NUMERAL_BIT1
-                   (NUMERAL_BIT1
-                     (NUMERAL_BIT1
-                       (NUMERAL_BIT1
-                         (NUMERAL_BIT1
-                           ALT_ZERO))))))))))))))))))))))))))))))))"
-  by (import word32 MODw_EVAL)
-
-lemma ADD_EVAL2: "word_add (n2w a) (n2w b) = n2w (MODw (a + b))"
-  by (import word32 ADD_EVAL2)
-
-lemma MUL_EVAL2: "word_mul (n2w a) (n2w b) = n2w (MODw (a * b))"
-  by (import word32 MUL_EVAL2)
-
-lemma ONE_COMP_EVAL2: "word_1comp (n2w a) =
-n2w (2 ^
-     NUMERAL
-      (NUMERAL_BIT2
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
-     1 -
-     MODw a)"
-  by (import word32 ONE_COMP_EVAL2)
-
-lemma TWO_COMP_EVAL2: "word_2comp (n2w a) =
-n2w (MODw
-      (2 ^
-       NUMERAL
-        (NUMERAL_BIT2
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
-       MODw a))"
-  by (import word32 TWO_COMP_EVAL2)
-
-lemma LSR_ONE_EVAL2: "word_lsr1 (n2w a) = n2w (MODw a div 2)"
-  by (import word32 LSR_ONE_EVAL2)
-
-lemma ASR_ONE_EVAL2: "word_asr1 (n2w a) =
-n2w (MODw a div 2 +
-     SBIT (MSBn a)
-      (NUMERAL
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
-  by (import word32 ASR_ONE_EVAL2)
-
-lemma ROR_ONE_EVAL2: "word_ror1 (n2w a) =
-n2w (MODw a div 2 +
-     SBIT (LSBn a)
-      (NUMERAL
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
-  by (import word32 ROR_ONE_EVAL2)
-
-lemma RRX_EVAL2: "RRX c (n2w a) =
-n2w (MODw a div 2 +
-     SBIT c
-      (NUMERAL
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
-  by (import word32 RRX_EVAL2)
-
-lemma LSB_EVAL2: "LSB (n2w a) = ODD a"
-  by (import word32 LSB_EVAL2)
-
-lemma MSB_EVAL2: "MSB (n2w a) =
-bit (NUMERAL
-      (NUMERAL_BIT1
-        (NUMERAL_BIT1
-          (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
- a"
-  by (import word32 MSB_EVAL2)
-
-lemma OR_EVAL2: "bitwise_or (n2w a) (n2w b) =
-n2w (BITWISE
-      (NUMERAL
-        (NUMERAL_BIT2
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
-      op | a b)"
-  by (import word32 OR_EVAL2)
-
-lemma AND_EVAL2: "bitwise_and (n2w a) (n2w b) =
-n2w (BITWISE
-      (NUMERAL
-        (NUMERAL_BIT2
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
-      op & a b)"
-  by (import word32 AND_EVAL2)
-
-lemma EOR_EVAL2: "bitwise_eor (n2w a) (n2w b) =
-n2w (BITWISE
-      (NUMERAL
-        (NUMERAL_BIT2
-          (NUMERAL_BIT1
-            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
-      op ~= a b)"
-  by (import word32 EOR_EVAL2)
-
-lemma BITWISE_EVAL2: "BITWISE n oper x y =
-(if n = 0 then 0
- else 2 * BITWISE (n - 1) oper (x div 2) (y div 2) +
-      (if oper (ODD x) (ODD y) then 1 else 0))"
-  by (import word32 BITWISE_EVAL2)
-
-lemma BITSwLT_THM: "BITSw h l n < 2 ^ (Suc h - l)"
-  by (import word32 BITSwLT_THM)
-
-lemma BITSw_COMP_THM: "h2 + l1 <= h1 ==> BITS h2 l2 (BITSw h1 l1 n) = BITSw (h2 + l1) (l2 + l1) n"
-  by (import word32 BITSw_COMP_THM)
-
-lemma BITSw_DIV_THM: "BITSw h l x div 2 ^ n = BITSw h (l + n) x"
-  by (import word32 BITSw_DIV_THM)
-
-lemma BITw_THM: "BITw b n = (BITSw b b n = 1)"
-  by (import word32 BITw_THM)
-
-lemma SLICEw_THM: "SLICEw h l n = BITSw h l n * 2 ^ l"
-  by (import word32 SLICEw_THM)
-
-lemma BITS_SLICEw_THM: "BITS h l (SLICEw h l n) = BITSw h l n"
-  by (import word32 BITS_SLICEw_THM)
-
-lemma SLICEw_ZERO_THM: "SLICEw h 0 n = BITSw h 0 n"
-  by (import word32 SLICEw_ZERO_THM)
-
-lemma SLICEw_COMP_THM: "Suc m <= h & l <= m ==> SLICEw h (Suc m) a + SLICEw m l a = SLICEw h l a"
-  by (import word32 SLICEw_COMP_THM)
-
-lemma BITSw_ZERO: "h < l ==> BITSw h l n = 0"
-  by (import word32 BITSw_ZERO)
-
-lemma SLICEw_ZERO: "h < l ==> SLICEw h l n = 0"
-  by (import word32 SLICEw_ZERO)
-
-;end_setup
-
-end
-
--- a/src/HOL/Import/HOL/README	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-(*  Title:      HOL/Import/HOL/README
-    ID:         $Id$
-    Author:     Sebastian Skalberg (TU Muenchen)
-*)
-
-All the files in this directory (except this README, HOL4.thy, and
-ROOT.ML) are automatically generated.  Edit the files in
-../Generate-HOL and run "isabelle make HOL-Complex-Generate-HOL" in
-~~/src/HOL, if something needs to be changed.
-
-To build the logic in this directory, simply do a "isabelle make
-HOL-Import-HOL" in ~~/src/HOL.
-
-Note that the quick_and_dirty flag is on as default for this
-directory, which means that the original HOL4 proofs are not consulted
-at all.  If a real replay of the HOL4 proofs is desired, get and
-unpack the HOL4 proof objects to somewhere on your harddisk, and set
-the variable PROOF_DIRS to the directory where the directory "hol4"
-is.  Now edit the ROOT.ML file to unset the quick_and_dirty flag and
-do "isabelle make HOL-Import-HOL" in ~~/src/HOL.
--- a/src/HOL/Import/HOL/ROOT.ML	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-use_thy "~~/src/HOL/Old_Number_Theory/Primes";
-Unsynchronized.setmp quick_and_dirty true use_thys ["HOL4Prob", "HOL4"];
--- a/src/HOL/Import/HOL/arithmetic.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,271 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "nat_elim__magic" > "nat_elim__magic_def"
-  "ODD" > "ODD_def"
-  "FACT" > "FACT_def"
-  "EVEN" > "EVEN_def"
-
-const_maps
-  "num_case" > "Nat.nat.nat_case"
-  "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
-  "NUMERAL_BIT2" > "HOL4Compat.NUMERAL_BIT2"
-  "NUMERAL_BIT1" > "HOL4Compat.NUMERAL_BIT1"
-  "NUMERAL" > "HOL4Compat.NUMERAL"
-  "MOD" > "Divides.div_class.mod" :: "nat => nat => nat"
-  "MIN" > "Orderings.ord_class.min" :: "nat => nat => nat"
-  "MAX" > "Orderings.ord_class.max" :: "nat => nat => nat"
-  "FUNPOW" > "HOL4Compat.FUNPOW"
-  "EXP" > "Power.power_class.power" :: "nat => nat => nat"
-  "DIV" > "Divides.div_class.div" :: "nat => nat => nat"
-  "ALT_ZERO" > "HOL4Compat.ALT_ZERO"
-  ">=" > "HOL4Compat.nat_ge"
-  ">" > "HOL4Compat.nat_gt"
-  "<=" > "Orderings.ord_class.less_eq" :: "nat => nat => bool"
-  "-" > "Groups.minus_class.minus" :: "nat => nat => nat"
-  "+" > "Groups.plus_class.plus" :: "nat => nat => nat"
-  "*" > "Groups.times_class.times" :: "nat => nat => nat"
-
-thm_maps
-  "num_case_def" > "HOL4Compat.num_case_def"
-  "num_case_cong" > "HOL4Base.arithmetic.num_case_cong"
-  "num_case_compute" > "HOL4Base.arithmetic.num_case_compute"
-  "num_CASES" > "Nat.nat.nchotomy"
-  "nat_elim__magic_def" > "HOL4Base.arithmetic.nat_elim__magic_def"
-  "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
-  "ZERO_MOD" > "HOL4Base.arithmetic.ZERO_MOD"
-  "ZERO_LESS_EXP" > "HOL4Base.arithmetic.ZERO_LESS_EXP"
-  "ZERO_LESS_EQ" > "Nat.le0"
-  "ZERO_DIV" > "HOL4Base.arithmetic.ZERO_DIV"
-  "WOP" > "HOL4Base.arithmetic.WOP"
-  "TWO" > "HOL4Base.arithmetic.TWO"
-  "TIMES2" > "Int.semiring_mult_2"
-  "SUC_SUB1" > "Nat.diff_Suc_1"
-  "SUC_ONE_ADD" > "Nat_Numeral.Suc_eq_plus1_left"
-  "SUC_NOT" > "Nat.Zero_not_Suc"
-  "SUC_ELIM_THM" > "HOL4Base.arithmetic.SUC_ELIM_THM"
-  "SUC_ADD_SYM" > "HOL4Base.arithmetic.SUC_ADD_SYM"
-  "SUB_SUB" > "Nat.diff_diff_right"
-  "SUB_RIGHT_SUB" > "Nat.diff_diff_left"
-  "SUB_RIGHT_LESS_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_LESS_EQ"
-  "SUB_RIGHT_LESS" > "HOL4Base.arithmetic.SUB_RIGHT_LESS"
-  "SUB_RIGHT_GREATER_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER_EQ"
-  "SUB_RIGHT_GREATER" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER"
-  "SUB_RIGHT_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_EQ"
-  "SUB_RIGHT_ADD" > "HOL4Base.arithmetic.SUB_RIGHT_ADD"
-  "SUB_PLUS" > "Nat.diff_diff_left"
-  "SUB_MONO_EQ" > "Nat.diff_Suc_Suc"
-  "SUB_LESS_OR" > "HOL4Base.arithmetic.SUB_LESS_OR"
-  "SUB_LESS_EQ_ADD" > "HOL4Base.arithmetic.SUB_LESS_EQ_ADD"
-  "SUB_LESS_EQ" > "Nat.diff_le_self"
-  "SUB_LESS_0" > "Nat.zero_less_diff"
-  "SUB_LEFT_SUC" > "HOL4Base.arithmetic.SUB_LEFT_SUC"
-  "SUB_LEFT_SUB" > "HOL4Base.arithmetic.SUB_LEFT_SUB"
-  "SUB_LEFT_LESS_EQ" > "HOL4Base.arithmetic.SUB_LEFT_LESS_EQ"
-  "SUB_LEFT_LESS" > "Nat.less_diff_conv"
-  "SUB_LEFT_GREATER_EQ" > "Nat.le_diff_conv"
-  "SUB_LEFT_GREATER" > "HOL4Base.arithmetic.SUB_LEFT_GREATER"
-  "SUB_LEFT_EQ" > "HOL4Base.arithmetic.SUB_LEFT_EQ"
-  "SUB_LEFT_ADD" > "HOL4Base.arithmetic.SUB_LEFT_ADD"
-  "SUB_EQ_EQ_0" > "HOL4Base.arithmetic.SUB_EQ_EQ_0"
-  "SUB_EQ_0" > "Nat.diff_is_0_eq"
-  "SUB_EQUAL_0" > "Nat.diff_self_eq_0"
-  "SUB_ELIM_THM" > "HOL4Base.arithmetic.SUB_ELIM_THM"
-  "SUB_CANCEL" > "HOL4Base.arithmetic.SUB_CANCEL"
-  "SUB_ADD" > "Nat.le_add_diff_inverse2"
-  "SUB_0" > "HOL4Base.arithmetic.SUB_0"
-  "SUB" > "HOL4Compat.SUB"
-  "RIGHT_SUB_DISTRIB" > "Nat.diff_mult_distrib"
-  "RIGHT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_26"
-  "PRE_SUC_EQ" > "HOL4Base.arithmetic.PRE_SUC_EQ"
-  "PRE_SUB1" > "HOL4Base.arithmetic.PRE_SUB1"
-  "PRE_SUB" > "HOL4Base.arithmetic.PRE_SUB"
-  "PRE_ELIM_THM" > "HOL4Base.arithmetic.PRE_ELIM_THM"
-  "OR_LESS" > "Nat.Suc_le_lessD"
-  "ONE" > "Nat.One_nat_def"
-  "ODD_OR_EVEN" > "HOL4Base.arithmetic.ODD_OR_EVEN"
-  "ODD_MULT" > "HOL4Base.arithmetic.ODD_MULT"
-  "ODD_EXISTS" > "HOL4Base.arithmetic.ODD_EXISTS"
-  "ODD_EVEN" > "HOL4Base.arithmetic.ODD_EVEN"
-  "ODD_DOUBLE" > "HOL4Base.arithmetic.ODD_DOUBLE"
-  "ODD_ADD" > "HOL4Base.arithmetic.ODD_ADD"
-  "ODD" > "HOL4Base.arithmetic.ODD"
-  "NUMERAL_DEF" > "HOL4Compat.NUMERAL_def"
-  "NUMERAL_BIT2" > "HOL4Compat.NUMERAL_BIT2_def"
-  "NUMERAL_BIT1" > "HOL4Compat.NUMERAL_BIT1_def"
-  "NOT_ZERO_LT_ZERO" > "Nat.neq0_conv"
-  "NOT_SUC_LESS_EQ_0" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ_0"
-  "NOT_SUC_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ"
-  "NOT_SUC_ADD_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_ADD_LESS_EQ"
-  "NOT_ODD_EQ_EVEN" > "HOL4Base.arithmetic.NOT_ODD_EQ_EVEN"
-  "NOT_NUM_EQ" > "HOL4Base.arithmetic.NOT_NUM_EQ"
-  "NOT_LESS_EQUAL" > "Orderings.linorder_class.not_le"
-  "NOT_LESS" > "Orderings.linorder_class.not_less"
-  "NOT_LEQ" > "Nat.not_less_eq_eq"
-  "NOT_GREATER_EQ" > "Nat.not_less_eq_eq"
-  "NOT_GREATER" > "Orderings.linorder_class.not_less"
-  "NOT_EXP_0" > "HOL4Base.arithmetic.NOT_EXP_0"
-  "NORM_0" > "HOL4Base.arithmetic.NORM_0"
-  "MULT_SYM" > "Fields.linordered_field_class.sign_simps_40"
-  "MULT_SUC_EQ" > "HOL4Base.arithmetic.MULT_SUC_EQ"
-  "MULT_SUC" > "Nat.mult_Suc_right"
-  "MULT_RIGHT_1" > "Divides.arithmetic_simps_43"
-  "MULT_MONO_EQ" > "Nat.Suc_mult_cancel1"
-  "MULT_LESS_EQ_SUC" > "Nat.Suc_mult_le_cancel1"
-  "MULT_LEFT_1" > "Divides.arithmetic_simps_42"
-  "MULT_INCREASES" > "HOL4Base.arithmetic.MULT_INCREASES"
-  "MULT_EXP_MONO" > "HOL4Base.arithmetic.MULT_EXP_MONO"
-  "MULT_EQ_1" > "Nat.nat_mult_eq_1_iff"
-  "MULT_EQ_0" > "Nat.mult_is_0"
-  "MULT_DIV" > "Divides.div_mult_self_is_m"
-  "MULT_COMM" > "Fields.linordered_field_class.sign_simps_40"
-  "MULT_CLAUSES" > "HOL4Base.arithmetic.MULT_CLAUSES"
-  "MULT_ASSOC" > "Fields.linordered_field_class.sign_simps_41"
-  "MULT_0" > "Divides.arithmetic_simps_41"
-  "MULT" > "HOL4Compat.MULT"
-  "MOD_UNIQUE" > "HOL4Base.arithmetic.MOD_UNIQUE"
-  "MOD_TIMES2" > "HOL4Base.arithmetic.MOD_TIMES2"
-  "MOD_TIMES" > "HOL4Base.arithmetic.MOD_TIMES"
-  "MOD_PLUS" > "HOL4Base.arithmetic.MOD_PLUS"
-  "MOD_P" > "HOL4Base.arithmetic.MOD_P"
-  "MOD_ONE" > "Divides.mod_1"
-  "MOD_MULT_MOD" > "HOL4Base.arithmetic.MOD_MULT_MOD"
-  "MOD_MULT" > "HOL4Base.arithmetic.MOD_MULT"
-  "MOD_MOD" > "HOL4Base.arithmetic.MOD_MOD"
-  "MOD_EQ_0" > "HOL4Base.arithmetic.MOD_EQ_0"
-  "MOD_COMMON_FACTOR" > "HOL4Base.arithmetic.MOD_COMMON_FACTOR"
-  "MIN_MAX_PRED" > "HOL4Base.arithmetic.MIN_MAX_PRED"
-  "MIN_MAX_LT" > "HOL4Base.arithmetic.MIN_MAX_LT"
-  "MIN_MAX_EQ" > "HOL4Base.arithmetic.MIN_MAX_EQ"
-  "MIN_LT" > "HOL4Base.arithmetic.MIN_LT"
-  "MIN_LE" > "HOL4Base.arithmetic.MIN_LE"
-  "MIN_IDEM" > "Big_Operators.linorder_class.Min.idem"
-  "MIN_DEF" > "HOL4Compat.MIN_DEF"
-  "MIN_COMM" > "Lattices.linorder_class.min_max.inf.commute"
-  "MIN_ASSOC" > "Lattices.linorder_class.min_max.inf.assoc"
-  "MIN_0" > "HOL4Base.arithmetic.MIN_0"
-  "MAX_LT" > "HOL4Base.arithmetic.MAX_LT"
-  "MAX_LE" > "HOL4Base.arithmetic.MAX_LE"
-  "MAX_IDEM" > "Big_Operators.linorder_class.Max.idem"
-  "MAX_DEF" > "HOL4Compat.MAX_DEF"
-  "MAX_COMM" > "Lattices.linorder_class.min_max.inf_sup_aci_5"
-  "MAX_ASSOC" > "Lattices.linorder_class.min_max.inf_sup_aci_6"
-  "MAX_0" > "HOL4Base.arithmetic.MAX_0"
-  "LESS_TRANS" > "Orderings.order_less_trans"
-  "LESS_SUC_NOT" > "HOL4Base.arithmetic.LESS_SUC_NOT"
-  "LESS_SUC_EQ_COR" > "Nat.Suc_lessI"
-  "LESS_SUB_ADD_LESS" > "HOL4Base.arithmetic.LESS_SUB_ADD_LESS"
-  "LESS_OR_EQ_ADD" > "HOL4Base.arithmetic.LESS_OR_EQ_ADD"
-  "LESS_OR_EQ" > "HOL4Compat.LESS_OR_EQ"
-  "LESS_OR" > "Nat.Suc_leI"
-  "LESS_NOT_SUC" > "HOL4Base.arithmetic.LESS_NOT_SUC"
-  "LESS_MULT_MONO" > "Nat.Suc_mult_less_cancel1"
-  "LESS_MULT2" > "Rings.linordered_semiring_strict_class.mult_pos_pos"
-  "LESS_MONO_REV" > "Nat.Suc_less_SucD"
-  "LESS_MONO_MULT" > "Nat.mult_le_mono1"
-  "LESS_MONO_EQ" > "Nat.Suc_less_eq"
-  "LESS_MONO_ADD_INV" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_imp_less_right"
-  "LESS_MONO_ADD_EQ" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_right"
-  "LESS_MONO_ADD" > "Groups.ordered_cancel_ab_semigroup_add_class.add_strict_right_mono"
-  "LESS_MOD" > "Divides.mod_less"
-  "LESS_LESS_SUC" > "HOL4Base.arithmetic.LESS_LESS_SUC"
-  "LESS_LESS_EQ_TRANS" > "Orderings.order_less_le_trans"
-  "LESS_LESS_CASES" > "HOL4Base.arithmetic.LESS_LESS_CASES"
-  "LESS_IMP_LESS_OR_EQ" > "FunDef.termination_basic_simps_5"
-  "LESS_IMP_LESS_ADD" > "FunDef.termination_basic_simps_1"
-  "LESS_EXP_SUC_MONO" > "HOL4Base.arithmetic.LESS_EXP_SUC_MONO"
-  "LESS_EQ_TRANS" > "Nat.le_trans"
-  "LESS_EQ_SUC_REFL" > "HOL4Base.arithmetic.LESS_EQ_SUC_REFL"
-  "LESS_EQ_SUB_LESS" > "HOL4Base.arithmetic.LESS_EQ_SUB_LESS"
-  "LESS_EQ_REFL" > "Nat.le_refl"
-  "LESS_EQ_MONO_ADD_EQ" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_right"
-  "LESS_EQ_MONO" > "Nat.Suc_le_mono"
-  "LESS_EQ_LESS_TRANS" > "Orderings.order_le_less_trans"
-  "LESS_EQ_LESS_EQ_MONO" > "Groups.add_mono_thms_linordered_semiring_1"
-  "LESS_EQ_IMP_LESS_SUC" > "Nat.le_imp_less_Suc"
-  "LESS_EQ_EXISTS" > "Nat.le_iff_add"
-  "LESS_EQ_CASES" > "Nat.nat_le_linear"
-  "LESS_EQ_ANTISYM" > "HOL4Base.arithmetic.LESS_EQ_ANTISYM"
-  "LESS_EQ_ADD_SUB" > "Nat.add_diff_assoc"
-  "LESS_EQ_ADD" > "Nat.le_add1"
-  "LESS_EQ_0" > "Nat.le_0_eq"
-  "LESS_EQUAL_ANTISYM" > "Nat.le_antisym"
-  "LESS_EQUAL_ADD" > "Series.le_Suc_ex"
-  "LESS_EQ" > "Nat.Suc_le_eq"
-  "LESS_DIV_EQ_ZERO" > "Divides.div_less"
-  "LESS_CASES_IMP" > "HOL4Base.arithmetic.LESS_CASES_IMP"
-  "LESS_CASES" > "HOL4Base.arithmetic.LESS_CASES"
-  "LESS_ANTISYM" > "HOL4Base.arithmetic.LESS_ANTISYM"
-  "LESS_ADD_SUC" > "HOL4Base.arithmetic.LESS_ADD_SUC"
-  "LESS_ADD_NONZERO" > "HOL4Base.arithmetic.LESS_ADD_NONZERO"
-  "LESS_ADD_1" > "HOL4Base.arithmetic.LESS_ADD_1"
-  "LESS_ADD" > "HOL4Base.arithmetic.LESS_ADD"
-  "LESS_0_CASES" > "HOL4Base.arithmetic.LESS_0_CASES"
-  "LEFT_SUB_DISTRIB" > "Nat.diff_mult_distrib2"
-  "LEFT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_25"
-  "LE" > "HOL4Base.arithmetic.LE"
-  "INV_PRE_LESS_EQ" > "HOL4Base.arithmetic.INV_PRE_LESS_EQ"
-  "INV_PRE_LESS" > "HOL4Base.arithmetic.INV_PRE_LESS"
-  "INV_PRE_EQ" > "HOL4Base.arithmetic.INV_PRE_EQ"
-  "GREATER_OR_EQ" > "HOL4Compat.GREATER_OR_EQ"
-  "GREATER_EQ" > "HOL4Compat.real_ge"
-  "GREATER_DEF" > "HOL4Compat.GREATER_DEF"
-  "FUN_EQ_LEMMA" > "HOL4Base.arithmetic.FUN_EQ_LEMMA"
-  "FUNPOW" > "HOL4Compat.FUNPOW"
-  "FACT_LESS" > "HOL4Base.arithmetic.FACT_LESS"
-  "FACT" > "HOL4Base.arithmetic.FACT"
-  "EXP_INJECTIVE" > "Power.linordered_semidom_class.power_inject_exp"
-  "EXP_EQ_1" > "Primes.exp_eq_1"
-  "EXP_EQ_0" > "HOL4Base.arithmetic.EXP_EQ_0"
-  "EXP_ALWAYS_BIG_ENOUGH" > "HOL4Base.arithmetic.EXP_ALWAYS_BIG_ENOUGH"
-  "EXP_ADD" > "Power.monoid_mult_class.power_add"
-  "EXP_1" > "HOL4Base.arithmetic.EXP_1"
-  "EXP" > "HOL4Compat.EXP"
-  "EXISTS_GREATEST" > "HOL4Base.arithmetic.EXISTS_GREATEST"
-  "EVEN_OR_ODD" > "HOL4Base.arithmetic.EVEN_OR_ODD"
-  "EVEN_ODD_EXISTS" > "HOL4Base.arithmetic.EVEN_ODD_EXISTS"
-  "EVEN_ODD" > "HOL4Base.arithmetic.EVEN_ODD"
-  "EVEN_MULT" > "HOL4Base.arithmetic.EVEN_MULT"
-  "EVEN_EXISTS" > "HOL4Base.arithmetic.EVEN_EXISTS"
-  "EVEN_DOUBLE" > "HOL4Base.arithmetic.EVEN_DOUBLE"
-  "EVEN_AND_ODD" > "HOL4Base.arithmetic.EVEN_AND_ODD"
-  "EVEN_ADD" > "HOL4Base.arithmetic.EVEN_ADD"
-  "EVEN" > "HOL4Base.arithmetic.EVEN"
-  "EQ_MULT_LCANCEL" > "Numeral_Simprocs.nat_mult_eq_cancel_disj"
-  "EQ_MONO_ADD_EQ" > "Groups.cancel_semigroup_add_class.add_right_cancel"
-  "EQ_LESS_EQ" > "Orderings.order_class.eq_iff"
-  "EQ_ADD_RCANCEL" > "Groups.cancel_semigroup_add_class.add_right_cancel"
-  "EQ_ADD_LCANCEL" > "Groups.cancel_semigroup_add_class.add_left_cancel"
-  "DIV_UNIQUE" > "HOL4Base.arithmetic.DIV_UNIQUE"
-  "DIV_P" > "HOL4Base.arithmetic.DIV_P"
-  "DIV_ONE" > "Divides.div_1"
-  "DIV_MULT" > "HOL4Base.arithmetic.DIV_MULT"
-  "DIV_LESS_EQ" > "HOL4Base.arithmetic.DIV_LESS_EQ"
-  "DIV_LESS" > "Divides.div_less_dividend"
-  "DIV_DIV_DIV_MULT" > "HOL4Base.arithmetic.DIV_DIV_DIV_MULT"
-  "DIVMOD_ID" > "HOL4Base.arithmetic.DIVMOD_ID"
-  "DIVISION" > "HOL4Compat.DIVISION"
-  "DA" > "HOL4Base.arithmetic.DA"
-  "COMPLETE_INDUCTION" > "Nat.nat_less_induct"
-  "CANCEL_SUB" > "Nat.eq_diff_iff"
-  "ALT_ZERO" > "HOL4Compat.ALT_ZERO_def"
-  "ADD_SYM" > "Fields.linordered_field_class.sign_simps_43"
-  "ADD_SUC" > "Nat.add_Suc_right"
-  "ADD_SUB" > "Nat.diff_add_inverse2"
-  "ADD_MONO_LESS_EQ" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_left"
-  "ADD_INV_0_EQ" > "HOL4Base.arithmetic.ADD_INV_0_EQ"
-  "ADD_INV_0" > "Nat.add_eq_self_zero"
-  "ADD_EQ_SUB" > "HOL4Base.arithmetic.ADD_EQ_SUB"
-  "ADD_EQ_1" > "HOL4Base.arithmetic.ADD_EQ_1"
-  "ADD_EQ_0" > "Nat.add_is_0"
-  "ADD_DIV_ADD_DIV" > "HOL4Base.arithmetic.ADD_DIV_ADD_DIV"
-  "ADD_COMM" > "Fields.linordered_field_class.sign_simps_43"
-  "ADD_CLAUSES" > "HOL4Base.arithmetic.ADD_CLAUSES"
-  "ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_44"
-  "ADD_0" > "Divides.arithmetic_simps_39"
-  "ADD1" > "Nat_Numeral.Suc_eq_plus1"
-  "ADD" > "HOL4Compat.ADD"
-
-end
--- a/src/HOL/Import/HOL/bits.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "bit" > "bit_def"
-  "TIMES_2EXP" > "TIMES_2EXP_primdef"
-  "SLICE" > "SLICE_primdef"
-  "SBIT" > "SBIT_primdef"
-  "MOD_2EXP" > "MOD_2EXP_primdef"
-  "LSBn" > "LSBn_primdef"
-  "DIV_2EXP" > "DIV_2EXP_primdef"
-  "DIVMOD_2EXP" > "DIVMOD_2EXP_primdef"
-  "DIV2" > "DIV2_primdef"
-  "BITWISE" > "BITWISE_primdef"
-  "BITS" > "BITS_primdef"
-
-const_maps
-  "bit" > "HOL4Word32.bits.bit"
-  "TIMES_2EXP" > "HOL4Word32.bits.TIMES_2EXP"
-  "SLICE" > "HOL4Word32.bits.SLICE"
-  "SBIT" > "HOL4Word32.bits.SBIT"
-  "MOD_2EXP" > "HOL4Word32.bits.MOD_2EXP"
-  "LSBn" > "HOL4Word32.bits.LSBn"
-  "DIV_2EXP" > "HOL4Word32.bits.DIV_2EXP"
-  "DIVMOD_2EXP" > "HOL4Word32.bits.DIVMOD_2EXP"
-  "DIV2" > "HOL4Word32.bits.DIV2"
-  "BITS" > "HOL4Word32.bits.BITS"
-
-const_renames
-  "BIT" > "bit"
-
-thm_maps
-  "bit_def" > "HOL4Word32.bits.bit_def"
-  "ZERO_LT_TWOEXP" > "HOL4Word32.bits.ZERO_LT_TWOEXP"
-  "TWOEXP_MONO2" > "HOL4Word32.bits.TWOEXP_MONO2"
-  "TWOEXP_MONO" > "HOL4Word32.bits.TWOEXP_MONO"
-  "TWOEXP_DIVISION" > "HOL4Word32.bits.TWOEXP_DIVISION"
-  "TIMES_2EXP_primdef" > "HOL4Word32.bits.TIMES_2EXP_primdef"
-  "TIMES_2EXP_def" > "HOL4Word32.bits.TIMES_2EXP_def"
-  "SUC_SUB" > "HOL4Word32.bits.SUC_SUB"
-  "SLICE_primdef" > "HOL4Word32.bits.SLICE_primdef"
-  "SLICE_def" > "HOL4Word32.bits.SLICE_def"
-  "SLICE_ZERO" > "HOL4Word32.bits.SLICE_ZERO"
-  "SLICE_THM" > "HOL4Word32.bits.SLICE_THM"
-  "SLICE_LEM3" > "HOL4Word32.bits.SLICE_LEM3"
-  "SLICE_LEM2" > "HOL4Word32.bits.SLICE_LEM2"
-  "SLICE_LEM1" > "HOL4Word32.bits.SLICE_LEM1"
-  "SLICE_COMP_THM" > "HOL4Word32.bits.SLICE_COMP_THM"
-  "SLICELT_THM" > "HOL4Word32.bits.SLICELT_THM"
-  "SBIT_primdef" > "HOL4Word32.bits.SBIT_primdef"
-  "SBIT_def" > "HOL4Word32.bits.SBIT_def"
-  "SBIT_DIV" > "HOL4Word32.bits.SBIT_DIV"
-  "ODD_MOD2_LEM" > "HOL4Word32.bits.ODD_MOD2_LEM"
-  "NOT_ZERO_ADD1" > "Nat.not0_implies_Suc"
-  "NOT_MOD2_LEM2" > "HOL4Word32.bits.NOT_MOD2_LEM2"
-  "NOT_MOD2_LEM" > "HOL4Word32.bits.NOT_MOD2_LEM"
-  "NOT_BITS2" > "HOL4Word32.bits.NOT_BITS2"
-  "NOT_BITS" > "HOL4Word32.bits.NOT_BITS"
-  "NOT_BIT" > "HOL4Word32.bits.NOT_BIT"
-  "MOD_PLUS_RIGHT" > "HOL4Word32.bits.MOD_PLUS_RIGHT"
-  "MOD_PLUS_1" > "HOL4Word32.bits.MOD_PLUS_1"
-  "MOD_ADD_1" > "HOL4Word32.bits.MOD_ADD_1"
-  "MOD_2EXP_primdef" > "HOL4Word32.bits.MOD_2EXP_primdef"
-  "MOD_2EXP_def" > "HOL4Word32.bits.MOD_2EXP_def"
-  "MOD_2EXP_MONO" > "HOL4Word32.bits.MOD_2EXP_MONO"
-  "MOD_2EXP_LT" > "HOL4Word32.bits.MOD_2EXP_LT"
-  "MOD_2EXP_LEM" > "HOL4Word32.bits.MOD_2EXP_LEM"
-  "LSBn_primdef" > "HOL4Word32.bits.LSBn_primdef"
-  "LSBn_def" > "HOL4Word32.bits.LSBn_def"
-  "LSB_ODD" > "HOL4Word32.bits.LSB_ODD"
-  "LESS_EXP_MULT2" > "HOL4Word32.bits.LESS_EXP_MULT2"
-  "LESS_EQ_EXP_MULT" > "HOL4Word32.bits.LESS_EQ_EXP_MULT"
-  "EXP_SUB_LESS_EQ" > "HOL4Word32.bits.EXP_SUB_LESS_EQ"
-  "EVEN_MOD2_LEM" > "HOL4Word32.bits.EVEN_MOD2_LEM"
-  "DIV_MULT_THM2" > "HOL4Word32.bits.DIV_MULT_THM2"
-  "DIV_MULT_THM" > "HOL4Word32.bits.DIV_MULT_THM"
-  "DIV_MULT_LEM" > "HOL4Word32.bits.DIV_MULT_LEM"
-  "DIV_MULT_1" > "HOL4Word32.bits.DIV_MULT_1"
-  "DIV_2EXP_primdef" > "HOL4Word32.bits.DIV_2EXP_primdef"
-  "DIV_2EXP_def" > "HOL4Word32.bits.DIV_2EXP_def"
-  "DIVMOD_2EXP_primdef" > "HOL4Word32.bits.DIVMOD_2EXP_primdef"
-  "DIVMOD_2EXP_def" > "HOL4Word32.bits.DIVMOD_2EXP_def"
-  "DIV2_primdef" > "HOL4Word32.bits.DIV2_primdef"
-  "DIV2_def" > "HOL4Word32.bits.DIV2_def"
-  "DIV1" > "Divides.semiring_div_class.div_by_1"
-  "BIT_def" > "HOL4Word32.bits.BIT_def"
-  "BIT_SLICE_THM" > "HOL4Word32.bits.BIT_SLICE_THM"
-  "BIT_SLICE_LEM" > "HOL4Word32.bits.BIT_SLICE_LEM"
-  "BIT_SLICE" > "HOL4Word32.bits.BIT_SLICE"
-  "BIT_COMP_THM3" > "HOL4Word32.bits.BIT_COMP_THM3"
-  "BIT_BITS_THM" > "HOL4Word32.bits.BIT_BITS_THM"
-  "BITWISE_def" > "HOL4Word32.bits.BITWISE_def"
-  "BITWISE_THM" > "HOL4Word32.bits.BITWISE_THM"
-  "BITWISE_NOT_COR" > "HOL4Word32.bits.BITWISE_NOT_COR"
-  "BITWISE_LT_2EXP" > "HOL4Word32.bits.BITWISE_LT_2EXP"
-  "BITWISE_COR" > "HOL4Word32.bits.BITWISE_COR"
-  "BITS_primdef" > "HOL4Word32.bits.BITS_primdef"
-  "BITS_def" > "HOL4Word32.bits.BITS_def"
-  "BITS_ZERO3" > "HOL4Word32.bits.BITS_ZERO3"
-  "BITS_ZERO2" > "HOL4Word32.bits.BITS_ZERO2"
-  "BITS_ZERO" > "HOL4Word32.bits.BITS_ZERO"
-  "BITS_THM" > "HOL4Word32.bits.BITS_THM"
-  "BITS_SUC_THM" > "HOL4Word32.bits.BITS_SUC_THM"
-  "BITS_SUC" > "HOL4Word32.bits.BITS_SUC"
-  "BITS_SLICE_THM2" > "HOL4Word32.bits.BITS_SLICE_THM2"
-  "BITS_SLICE_THM" > "HOL4Word32.bits.BITS_SLICE_THM"
-  "BITS_LT_HIGH" > "HOL4Word32.bits.BITS_LT_HIGH"
-  "BITS_DIV_THM" > "HOL4Word32.bits.BITS_DIV_THM"
-  "BITS_COMP_THM2" > "HOL4Word32.bits.BITS_COMP_THM2"
-  "BITS_COMP_THM" > "HOL4Word32.bits.BITS_COMP_THM"
-  "BITSLT_THM" > "HOL4Word32.bits.BITSLT_THM"
-  "BITS2_THM" > "HOL4Word32.bits.BITS2_THM"
-
-end
--- a/src/HOL/Import/HOL/bool.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "RES_SELECT" > "RES_SELECT_def"
-  "RES_FORALL" > "RES_FORALL_def"
-  "RES_EXISTS_UNIQUE" > "RES_EXISTS_UNIQUE_def"
-  "RES_EXISTS" > "RES_EXISTS_def"
-  "RES_ABSTRACT" > "RES_ABSTRACT_def"
-  "IN" > "IN_def"
-  "ARB" > "ARB_def"
-
-type_maps
-  "bool" > "HOL.bool"
-
-const_maps
-  "~" > "HOL.Not"
-  "bool_case" > "Product_Type.bool.bool_case"
-  "\\/" > "HOL.disj"
-  "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
-  "T" > "HOL.True"
-  "RES_SELECT" > "HOL4Base.bool.RES_SELECT"
-  "RES_FORALL" > "HOL4Base.bool.RES_FORALL"
-  "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE"
-  "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS"
-  "ONTO" > "Fun.surj"
-  "ONE_ONE" > "HOL4Setup.ONE_ONE"
-  "LET" > "HOL4Compat.LET"
-  "IN" > "HOL4Base.bool.IN"
-  "F" > "HOL.False"
-  "COND" > "HOL.If"
-  "ARB" > "HOL4Base.bool.ARB"
-  "?!" > "HOL.Ex1"
-  "?" > "HOL.Ex"
-  "/\\" > "HOL.conj"
-  "!" > "HOL.All"
-
-thm_maps
-  "bool_case_thm" > "HOL4Base.bool.bool_case_thm"
-  "bool_case_ID" > "HOL4Base.bool.bool_case_ID"
-  "bool_case_DEF" > "HOL4Compat.bool_case_DEF"
-  "bool_INDUCT" > "Product_Type.bool.induct"
-  "boolAxiom" > "HOL4Base.bool.boolAxiom"
-  "UNWIND_THM2" > "HOL.simp_thms_39"
-  "UNWIND_THM1" > "HOL.simp_thms_40"
-  "UNWIND_FORALL_THM2" > "HOL.simp_thms_41"
-  "UNWIND_FORALL_THM1" > "HOL.simp_thms_42"
-  "UEXISTS_SIMP" > "HOL4Base.bool.UEXISTS_SIMP"
-  "UEXISTS_OR_THM" > "HOL4Base.bool.UEXISTS_OR_THM"
-  "T_DEF" > "HOL.True_def"
-  "TYPE_DEFINITION_THM" > "HOL4Setup.TYPE_DEFINITION"
-  "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
-  "TRUTH" > "HOL.TrueI"
-  "SWAP_FORALL_THM" > "HOL.all_comm"
-  "SWAP_EXISTS_THM" > "HOL.ex_comm"
-  "SKOLEM_THM" > "HOL4Base.bool.SKOLEM_THM"
-  "SELECT_UNIQUE" > "HOL4Base.bool.SELECT_UNIQUE"
-  "SELECT_THM" > "HOL4Setup.EXISTS_DEF"
-  "SELECT_REFL_2" > "Hilbert_Choice.some_sym_eq_trivial"
-  "SELECT_REFL" > "Hilbert_Choice.some_eq_trivial"
-  "SELECT_AX" > "Hilbert_Choice.someI"
-  "RIGHT_OR_OVER_AND" > "HOL.disj_conj_distribR"
-  "RIGHT_OR_EXISTS_THM" > "HOL.ex_simps_4"
-  "RIGHT_FORALL_OR_THM" > "HOL.all_simps_4"
-  "RIGHT_FORALL_IMP_THM" > "HOL.all_simps_6"
-  "RIGHT_EXISTS_IMP_THM" > "HOL.ex_simps_6"
-  "RIGHT_EXISTS_AND_THM" > "HOL.ex_simps_2"
-  "RIGHT_AND_OVER_OR" > "Groebner_Basis.dnf_2"
-  "RIGHT_AND_FORALL_THM" > "HOL.all_simps_2"
-  "RES_SELECT_def" > "HOL4Base.bool.RES_SELECT_def"
-  "RES_SELECT_DEF" > "HOL4Base.bool.RES_SELECT_DEF"
-  "RES_FORALL_def" > "HOL4Base.bool.RES_FORALL_def"
-  "RES_FORALL_DEF" > "HOL4Base.bool.RES_FORALL_DEF"
-  "RES_EXISTS_def" > "HOL4Base.bool.RES_EXISTS_def"
-  "RES_EXISTS_UNIQUE_def" > "HOL4Base.bool.RES_EXISTS_UNIQUE_def"
-  "RES_EXISTS_UNIQUE_DEF" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
-  "RES_EXISTS_DEF" > "HOL4Base.bool.RES_EXISTS_DEF"
-  "RES_ABSTRACT_DEF" > "HOL4Base.bool.RES_ABSTRACT_DEF"
-  "REFL_CLAUSE" > "Groebner_Basis.bool_simps_6"
-  "OR_INTRO_THM2" > "HOL.disjI2"
-  "OR_INTRO_THM1" > "HOL.disjI1"
-  "OR_IMP_THM" > "HOL4Base.bool.OR_IMP_THM"
-  "OR_ELIM_THM" > "HOL.disjE"
-  "OR_DEF" > "HOL.or_def"
-  "OR_CONG" > "HOL4Base.bool.OR_CONG"
-  "OR_CLAUSES" > "HOL4Base.bool.OR_CLAUSES"
-  "ONTO_THM" > "Fun.surj_def"
-  "ONTO_DEF" > "Fun.surj_def"
-  "ONE_ONE_THM" > "HOL4Base.bool.ONE_ONE_THM"
-  "ONE_ONE_DEF" > "HOL4Setup.ONE_ONE_DEF"
-  "NOT_IMP" > "HOL.not_imp"
-  "NOT_FORALL_THM" > "HOL.not_all"
-  "NOT_F" > "Groebner_Basis.PFalse_2"
-  "NOT_EXISTS_THM" > "HOL.not_ex"
-  "NOT_DEF" > "Groebner_Basis.bool_simps_19"
-  "NOT_CLAUSES" > "HOL4Base.bool.NOT_CLAUSES"
-  "NOT_AND" > "HOL4Base.bool.NOT_AND"
-  "MONO_OR" > "Inductive.basic_monos_3"
-  "MONO_NOT" > "HOL.contrapos_nn"
-  "MONO_IMP" > "Set.imp_mono"
-  "MONO_EXISTS" > "Inductive.basic_monos_5"
-  "MONO_COND" > "HOL4Base.bool.MONO_COND"
-  "MONO_AND" > "Inductive.basic_monos_4"
-  "MONO_ALL" > "Inductive.basic_monos_6"
-  "LET_THM" > "HOL.Let_def"
-  "LET_RATOR" > "HOL4Base.bool.LET_RATOR"
-  "LET_RAND" > "HOL4Base.bool.LET_RAND"
-  "LET_DEF" > "HOL4Compat.LET_def"
-  "LET_CONG" > "FunDef.let_cong"
-  "LEFT_OR_OVER_AND" > "HOL.disj_conj_distribL"
-  "LEFT_OR_EXISTS_THM" > "HOL.ex_simps_3"
-  "LEFT_FORALL_OR_THM" > "HOL.all_simps_3"
-  "LEFT_FORALL_IMP_THM" > "HOL.all_simps_5"
-  "LEFT_EXISTS_IMP_THM" > "HOL.ex_simps_5"
-  "LEFT_EXISTS_AND_THM" > "HOL.ex_simps_1"
-  "LEFT_AND_OVER_OR" > "Groebner_Basis.dnf_1"
-  "LEFT_AND_FORALL_THM" > "HOL.all_simps_1"
-  "IN_def" > "HOL4Base.bool.IN_def"
-  "IN_DEF" > "HOL4Base.bool.IN_DEF"
-  "INFINITY_AX" > "HOL4Setup.INFINITY_AX"
-  "IMP_F_EQ_F" > "HOL4Base.bool.IMP_F_EQ_F"
-  "IMP_F" > "HOL.notI"
-  "IMP_DISJ_THM" > "Groebner_Basis.nnf_simps_3"
-  "IMP_CONG" > "HOL.imp_cong"
-  "IMP_CLAUSES" > "HOL4Base.bool.IMP_CLAUSES"
-  "IMP_ANTISYM_AX" > "HOL.iff"
-  "F_IMP" > "HOL4Base.bool.F_IMP"
-  "F_DEF" > "HOL.False_def"
-  "FUN_EQ_THM" > "HOL.fun_eq_iff"
-  "FORALL_THM" > "HOL4Base.bool.FORALL_THM"
-  "FORALL_SIMP" > "HOL.simp_thms_35"
-  "FORALL_DEF" > "HOL.All_def"
-  "FORALL_AND_THM" > "HOL.all_conj_distrib"
-  "FALSITY" > "HOL.FalseE"
-  "EXISTS_UNIQUE_THM" > "HOL4Compat.EXISTS_UNIQUE_DEF"
-  "EXISTS_UNIQUE_REFL" > "HOL.ex1_eq_1"
-  "EXISTS_UNIQUE_DEF" > "HOL4Compat.EXISTS_UNIQUE_DEF"
-  "EXISTS_THM" > "HOL4Base.bool.EXISTS_THM"
-  "EXISTS_SIMP" > "HOL.simp_thms_36"
-  "EXISTS_REFL" > "HOL.simp_thms_37"
-  "EXISTS_OR_THM" > "HOL.ex_disj_distrib"
-  "EXISTS_DEF" > "HOL4Setup.EXISTS_DEF"
-  "EXCLUDED_MIDDLE" > "HOL4Base.bool.EXCLUDED_MIDDLE"
-  "ETA_THM" > "HOL.eta_contract_eq"
-  "ETA_AX" > "HOL.eta_contract_eq"
-  "EQ_TRANS" > "HOL.trans"
-  "EQ_SYM_EQ" > "HOL.eq_ac_1"
-  "EQ_SYM" > "HOL.eq_reflection"
-  "EQ_REFL" > "HOL.refl"
-  "EQ_IMP_THM" > "HOL.iff_conv_conj_imp"
-  "EQ_EXT" > "HOL.eq_reflection"
-  "EQ_EXPAND" > "Groebner_Basis.nnf_simps_4"
-  "EQ_CLAUSES" > "HOL4Base.bool.EQ_CLAUSES"
-  "DISJ_SYM" > "Groebner_Basis.dnf_4"
-  "DISJ_IMP_THM" > "HOL.imp_disjL"
-  "DISJ_COMM" > "Groebner_Basis.dnf_4"
-  "DISJ_ASSOC" > "HOL.disj_ac_3"
-  "DE_MORGAN_THM" > "HOL4Base.bool.DE_MORGAN_THM"
-  "CONJ_SYM" > "Groebner_Basis.dnf_3"
-  "CONJ_COMM" > "Groebner_Basis.dnf_3"
-  "CONJ_ASSOC" > "HOL.conj_ac_3"
-  "COND_RATOR" > "HOL4Base.bool.COND_RATOR"
-  "COND_RAND" > "HOL.if_distrib"
-  "COND_ID" > "HOL.if_cancel"
-  "COND_EXPAND" > "HOL4Base.bool.COND_EXPAND"
-  "COND_DEF" > "HOL4Compat.COND_DEF"
-  "COND_CONG" > "HOL4Base.bool.COND_CONG"
-  "COND_CLAUSES" > "HOL4Base.bool.COND_CLAUSES"
-  "COND_ABS" > "HOL4Base.bool.COND_ABS"
-  "BOTH_FORALL_OR_THM" > "HOL4Base.bool.BOTH_FORALL_OR_THM"
-  "BOTH_FORALL_IMP_THM" > "HOL4Base.bool.BOTH_FORALL_IMP_THM"
-  "BOTH_EXISTS_IMP_THM" > "HOL4Base.bool.BOTH_EXISTS_IMP_THM"
-  "BOTH_EXISTS_AND_THM" > "HOL4Base.bool.BOTH_EXISTS_AND_THM"
-  "BOOL_FUN_INDUCT" > "HOL4Base.bool.BOOL_FUN_INDUCT"
-  "BOOL_FUN_CASES_THM" > "HOL4Base.bool.BOOL_FUN_CASES_THM"
-  "BOOL_EQ_DISTINCT" > "HOL4Base.bool.BOOL_EQ_DISTINCT"
-  "BOOL_CASES_AX" > "HOL.True_or_False"
-  "BETA_THM" > "HOL.eta_contract_eq"
-  "ARB_def" > "HOL4Base.bool.ARB_def"
-  "ARB_DEF" > "HOL4Base.bool.ARB_DEF"
-  "AND_INTRO_THM" > "HOL.conjI"
-  "AND_IMP_INTRO" > "HOL.imp_conjL"
-  "AND_DEF" > "HOL.and_def"
-  "AND_CONG" > "HOL4Base.bool.AND_CONG"
-  "AND_CLAUSES" > "HOL4Base.bool.AND_CLAUSES"
-  "AND2_THM" > "HOL.conjunct2"
-  "AND1_THM" > "HOL.conjunct1"
-  "ABS_SIMP" > "HOL.refl"
-  "ABS_REP_THM" > "HOL4Base.bool.ABS_REP_THM"
-
-ignore_thms
-  "UNBOUNDED_THM"
-  "UNBOUNDED_DEF"
-  "BOUNDED_THM"
-  "BOUNDED_DEF"
-
-end
--- a/src/HOL/Import/HOL/boolean_sequence.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "STL" > "STL_primdef"
-  "STAKE" > "STAKE_primdef"
-  "SHD" > "SHD_primdef"
-  "SDROP" > "SDROP_primdef"
-  "SDEST" > "SDEST_primdef"
-  "SCONST" > "SCONST_primdef"
-  "SCONS" > "SCONS_primdef"
-
-const_maps
-  "STL" > "HOL4Prob.boolean_sequence.STL"
-  "SHD" > "HOL4Prob.boolean_sequence.SHD"
-  "SDEST" > "HOL4Prob.boolean_sequence.SDEST"
-  "SCONST" > "HOL4Prob.boolean_sequence.SCONST"
-
-thm_maps
-  "STL_primdef" > "HOL4Prob.boolean_sequence.STL_primdef"
-  "STL_def" > "HOL4Prob.boolean_sequence.STL_def"
-  "STL_SCONST" > "HOL4Prob.boolean_sequence.STL_SCONST"
-  "STL_SCONS" > "HOL4Prob.boolean_sequence.STL_SCONS"
-  "STAKE_def" > "HOL4Prob.boolean_sequence.STAKE_def"
-  "SHD_primdef" > "HOL4Prob.boolean_sequence.SHD_primdef"
-  "SHD_def" > "HOL4Prob.boolean_sequence.SHD_def"
-  "SHD_STL_ISO" > "HOL4Prob.boolean_sequence.SHD_STL_ISO"
-  "SHD_SCONST" > "HOL4Prob.boolean_sequence.SHD_SCONST"
-  "SHD_SCONS" > "HOL4Prob.boolean_sequence.SHD_SCONS"
-  "SDROP_def" > "HOL4Prob.boolean_sequence.SDROP_def"
-  "SDEST_primdef" > "HOL4Prob.boolean_sequence.SDEST_primdef"
-  "SDEST_def" > "HOL4Prob.boolean_sequence.SDEST_def"
-  "SCONS_def" > "HOL4Prob.boolean_sequence.SCONS_def"
-  "SCONS_SURJ" > "HOL4Prob.boolean_sequence.SCONS_SURJ"
-  "SCONST_primdef" > "HOL4Prob.boolean_sequence.SCONST_primdef"
-  "SCONST_def" > "HOL4Prob.boolean_sequence.SCONST_def"
-
-end
--- a/src/HOL/Import/HOL/bword_arith.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "ICARRY" > "ICARRY_def"
-  "ACARRY" > "ACARRY_def"
-
-thm_maps
-  "WSEG_NBWORD_ADD" > "HOL4Vec.bword_arith.WSEG_NBWORD_ADD"
-  "ICARRY_WSEG" > "HOL4Vec.bword_arith.ICARRY_WSEG"
-  "ICARRY_DEF" > "HOL4Vec.bword_arith.ICARRY_DEF"
-  "BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.BNVAL_LESS_EQ"
-  "ADD_WORD_SPLIT" > "HOL4Vec.bword_arith.ADD_WORD_SPLIT"
-  "ADD_NBWORD_EQ0_SPLIT" > "HOL4Vec.bword_arith.ADD_NBWORD_EQ0_SPLIT"
-  "ADD_BV_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ1"
-  "ADD_BV_BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ"
-  "ADD_BV_BNVAL_DIV_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_DIV_LESS_EQ1"
-  "ADD_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BNVAL_LESS_EQ1"
-  "ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_WSEG"
-  "ACARRY_MSB" > "HOL4Vec.bword_arith.ACARRY_MSB"
-  "ACARRY_EQ_ICARRY" > "HOL4Vec.bword_arith.ACARRY_EQ_ICARRY"
-  "ACARRY_EQ_ADD_DIV" > "HOL4Vec.bword_arith.ACARRY_EQ_ADD_DIV"
-  "ACARRY_DEF" > "HOL4Vec.bword_arith.ACARRY_DEF"
-  "ACARRY_ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_ACARRY_WSEG"
-
-end
--- a/src/HOL/Import/HOL/bword_bitop.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "WXOR" > "WXOR_def"
-  "WOR" > "WOR_def"
-  "WNOT" > "WNOT_def"
-  "WAND" > "WAND_def"
-
-thm_maps
-  "WXOR_DEF" > "HOL4Vec.bword_bitop.WXOR_DEF"
-  "WOR_DEF" > "HOL4Vec.bword_bitop.WOR_DEF"
-  "WNOT_WNOT" > "HOL4Vec.bword_bitop.WNOT_WNOT"
-  "WNOT_DEF" > "HOL4Vec.bword_bitop.WNOT_DEF"
-  "WCAT_WNOT" > "HOL4Vec.bword_bitop.WCAT_WNOT"
-  "WAND_DEF" > "HOL4Vec.bword_bitop.WAND_DEF"
-  "PBITOP_WNOT" > "HOL4Vec.bword_bitop.PBITOP_WNOT"
-  "PBITBOP_WXOR" > "HOL4Vec.bword_bitop.PBITBOP_WXOR"
-  "PBITBOP_WOR" > "HOL4Vec.bword_bitop.PBITBOP_WOR"
-  "PBITBOP_WAND" > "HOL4Vec.bword_bitop.PBITBOP_WAND"
-
-end
--- a/src/HOL/Import/HOL/bword_num.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "VB" > "VB_def"
-  "NBWORD" > "NBWORD_def"
-  "BV" > "BV_def"
-  "BNVAL" > "BNVAL_def"
-
-const_maps
-  "VB" > "HOL4Vec.bword_num.VB"
-  "NBWORD" > "HOL4Vec.bword_num.NBWORD"
-  "BV" > "HOL4Vec.bword_num.BV"
-
-thm_maps
-  "ZERO_WORD_VAL" > "HOL4Vec.bword_num.ZERO_WORD_VAL"
-  "WSPLIT_NBWORD_0" > "HOL4Vec.bword_num.WSPLIT_NBWORD_0"
-  "WSEG_NBWORD_SUC" > "HOL4Vec.bword_num.WSEG_NBWORD_SUC"
-  "WSEG_NBWORD" > "HOL4Vec.bword_num.WSEG_NBWORD"
-  "WORDLEN_NBWORD" > "HOL4Vec.bword_num.WORDLEN_NBWORD"
-  "WCAT_NBWORD_0" > "HOL4Vec.bword_num.WCAT_NBWORD_0"
-  "VB_def" > "HOL4Vec.bword_num.VB_def"
-  "VB_DEF" > "HOL4Vec.bword_num.VB_DEF"
-  "VB_BV" > "HOL4Vec.bword_num.VB_BV"
-  "PWORDLEN_NBWORD" > "HOL4Vec.bword_num.PWORDLEN_NBWORD"
-  "NBWORD_def" > "HOL4Vec.bword_num.NBWORD_def"
-  "NBWORD_SUC_WSEG" > "HOL4Vec.bword_num.NBWORD_SUC_WSEG"
-  "NBWORD_SUC_FST" > "HOL4Vec.bword_num.NBWORD_SUC_FST"
-  "NBWORD_SUC" > "HOL4Vec.bword_num.NBWORD_SUC"
-  "NBWORD_SPLIT" > "HOL4Vec.bword_num.NBWORD_SPLIT"
-  "NBWORD_MOD" > "HOL4Vec.bword_num.NBWORD_MOD"
-  "NBWORD_DEF" > "HOL4Vec.bword_num.NBWORD_DEF"
-  "NBWORD_BNVAL" > "HOL4Vec.bword_num.NBWORD_BNVAL"
-  "NBWORD0" > "HOL4Vec.bword_num.NBWORD0"
-  "MSB_NBWORD" > "HOL4Vec.bword_num.MSB_NBWORD"
-  "EQ_NBWORD0_SPLIT" > "HOL4Vec.bword_num.EQ_NBWORD0_SPLIT"
-  "DOUBL_EQ_SHL" > "HOL4Vec.bword_num.DOUBL_EQ_SHL"
-  "BV_def" > "HOL4Vec.bword_num.BV_def"
-  "BV_VB" > "HOL4Vec.bword_num.BV_VB"
-  "BV_LESS_2" > "HOL4Vec.bword_num.BV_LESS_2"
-  "BV_DEF" > "HOL4Vec.bword_num.BV_DEF"
-  "BNVAL_WCAT2" > "HOL4Vec.bword_num.BNVAL_WCAT2"
-  "BNVAL_WCAT1" > "HOL4Vec.bword_num.BNVAL_WCAT1"
-  "BNVAL_WCAT" > "HOL4Vec.bword_num.BNVAL_WCAT"
-  "BNVAL_ONTO" > "HOL4Vec.bword_num.BNVAL_ONTO"
-  "BNVAL_NVAL" > "HOL4Vec.bword_num.BNVAL_NVAL"
-  "BNVAL_NBWORD" > "HOL4Vec.bword_num.BNVAL_NBWORD"
-  "BNVAL_MAX" > "HOL4Vec.bword_num.BNVAL_MAX"
-  "BNVAL_DEF" > "HOL4Vec.bword_num.BNVAL_DEF"
-  "BNVAL_11" > "HOL4Vec.bword_num.BNVAL_11"
-  "BNVAL0" > "HOL4Vec.bword_num.BNVAL0"
-  "BIT_NBWORD0" > "HOL4Vec.bword_num.BIT_NBWORD0"
-  "ADD_BNVAL_SPLIT" > "HOL4Vec.bword_num.ADD_BNVAL_SPLIT"
-  "ADD_BNVAL_RIGHT" > "HOL4Vec.bword_num.ADD_BNVAL_RIGHT"
-  "ADD_BNVAL_LEFT" > "HOL4Vec.bword_num.ADD_BNVAL_LEFT"
-
-end
--- a/src/HOL/Import/HOL/combin.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "W" > "W_def"
-  "S" > "S_def"
-  "K" > "K_def"
-  "I" > "I_def"
-  "C" > "C_def"
-
-const_maps
-  "o" > "Fun.comp"
-  "W" > "HOL4Base.combin.W"
-  "S" > "HOL4Base.combin.S"
-  "K" > "HOL4Base.combin.K"
-  "I" > "HOL4Base.combin.I"
-  "C" > "HOL4Base.combin.C"
-
-thm_maps
-  "o_THM" > "Fun.comp_def"
-  "o_DEF" > "Fun.comp_def"
-  "o_ASSOC" > "Fun.o_assoc"
-  "W_def" > "HOL4Base.combin.W_def"
-  "W_THM" > "HOL4Base.combin.W_def"
-  "W_DEF" > "HOL4Base.combin.W_DEF"
-  "S_def" > "HOL4Base.combin.S_def"
-  "S_THM" > "HOL4Base.combin.S_def"
-  "S_DEF" > "HOL4Base.combin.S_DEF"
-  "K_def" > "HOL4Base.combin.K_def"
-  "K_THM" > "HOL4Base.combin.K_def"
-  "K_DEF" > "HOL4Base.combin.K_DEF"
-  "I_o_ID" > "HOL4Base.combin.I_o_ID"
-  "I_def" > "HOL4Base.combin.I_def"
-  "I_THM" > "HOL4Base.combin.I_THM"
-  "I_DEF" > "HOL4Base.combin.I_DEF"
-  "C_def" > "HOL4Base.combin.C_def"
-  "C_THM" > "HOL4Base.combin.C_def"
-  "C_DEF" > "HOL4Base.combin.C_DEF"
-
-end
--- a/src/HOL/Import/HOL/divides.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-import
-
-import_segment "hol4"
-
-const_maps
-  "divides" > "Rings.dvd_class.dvd" :: "nat => nat => bool"
-
-thm_maps
-  "divides_def" > "HOL4Compat.divides_def"
-  "ONE_DIVIDES_ALL" > "GCD.gcd_lcm_complete_lattice_nat.bot_least"
-  "NOT_LT_DIV" > "Nat.nat_dvd_not_less"
-  "DIVIDES_TRANS" > "Nat.dvd.order_trans"
-  "DIVIDES_SUB" > "Nat.dvd_diff_nat"
-  "DIVIDES_REFL" > "Nat.dvd.order_refl"
-  "DIVIDES_MULT_LEFT" > "HOL4Base.divides.DIVIDES_MULT_LEFT"
-  "DIVIDES_MULT" > "Rings.comm_semiring_1_class.dvd_mult2"
-  "DIVIDES_LE" > "Nat.dvd_imp_le"
-  "DIVIDES_FACT" > "HOL4Base.divides.DIVIDES_FACT"
-  "DIVIDES_ANTISYM" > "Nat.dvd.antisym"
-  "DIVIDES_ADD_2" > "Primes.divides_add_revr"
-  "DIVIDES_ADD_1" > "Rings.comm_semiring_1_class.dvd_add"
-  "ALL_DIVIDES_0" > "GCD.gcd_lcm_complete_lattice_nat.top_greatest"
-
-end
--- a/src/HOL/Import/HOL/hrat.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "trat_sucint" > "trat_sucint_def"
-  "trat_mul" > "trat_mul_def"
-  "trat_inv" > "trat_inv_def"
-  "trat_eq" > "trat_eq_def"
-  "trat_add" > "trat_add_def"
-  "trat_1" > "trat_1_def"
-  "mk_hrat" > "mk_hrat_def"
-  "hrat_sucint" > "hrat_sucint_def"
-  "hrat_mul" > "hrat_mul_def"
-  "hrat_inv" > "hrat_inv_def"
-  "hrat_add" > "hrat_add_def"
-  "hrat_1" > "hrat_1_def"
-  "dest_hrat" > "dest_hrat_def"
-
-type_maps
-  "hrat" > "HOL4Base.hrat.hrat"
-
-const_maps
-  "trat_mul" > "HOL4Base.hrat.trat_mul"
-  "trat_inv" > "HOL4Base.hrat.trat_inv"
-  "trat_eq" > "HOL4Base.hrat.trat_eq"
-  "trat_add" > "HOL4Base.hrat.trat_add"
-  "trat_1" > "HOL4Base.hrat.trat_1"
-  "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
-  "hrat_mul" > "HOL4Base.hrat.hrat_mul"
-  "hrat_inv" > "HOL4Base.hrat.hrat_inv"
-  "hrat_add" > "HOL4Base.hrat.hrat_add"
-  "hrat_1" > "HOL4Base.hrat.hrat_1"
-
-thm_maps
-  "trat_sucint" > "HOL4Base.hrat.trat_sucint"
-  "trat_mul_def" > "HOL4Base.hrat.trat_mul_def"
-  "trat_mul" > "HOL4Base.hrat.trat_mul"
-  "trat_inv_def" > "HOL4Base.hrat.trat_inv_def"
-  "trat_inv" > "HOL4Base.hrat.trat_inv"
-  "trat_eq_def" > "HOL4Base.hrat.trat_eq_def"
-  "trat_eq" > "HOL4Base.hrat.trat_eq"
-  "trat_add_def" > "HOL4Base.hrat.trat_add_def"
-  "trat_add" > "HOL4Base.hrat.trat_add"
-  "trat_1_def" > "HOL4Base.hrat.trat_1_def"
-  "trat_1" > "HOL4Base.hrat.trat_1"
-  "hrat_tybij" > "HOL4Base.hrat.hrat_tybij"
-  "hrat_sucint_def" > "HOL4Base.hrat.hrat_sucint_def"
-  "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
-  "hrat_mul_def" > "HOL4Base.hrat.hrat_mul_def"
-  "hrat_mul" > "HOL4Base.hrat.hrat_mul"
-  "hrat_inv_def" > "HOL4Base.hrat.hrat_inv_def"
-  "hrat_inv" > "HOL4Base.hrat.hrat_inv"
-  "hrat_add_def" > "HOL4Base.hrat.hrat_add_def"
-  "hrat_add" > "HOL4Base.hrat.hrat_add"
-  "hrat_TY_DEF" > "HOL4Base.hrat.hrat_TY_DEF"
-  "hrat_1_def" > "HOL4Base.hrat.hrat_1_def"
-  "hrat_1" > "HOL4Base.hrat.hrat_1"
-  "TRAT_SUCINT_0" > "HOL4Base.hrat.TRAT_SUCINT_0"
-  "TRAT_SUCINT" > "HOL4Base.hrat.TRAT_SUCINT"
-  "TRAT_NOZERO" > "HOL4Base.hrat.TRAT_NOZERO"
-  "TRAT_MUL_WELLDEFINED2" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED2"
-  "TRAT_MUL_WELLDEFINED" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED"
-  "TRAT_MUL_SYM_EQ" > "HOL4Base.hrat.TRAT_MUL_SYM_EQ"
-  "TRAT_MUL_SYM" > "HOL4Base.hrat.TRAT_MUL_SYM"
-  "TRAT_MUL_LINV" > "HOL4Base.hrat.TRAT_MUL_LINV"
-  "TRAT_MUL_LID" > "HOL4Base.hrat.TRAT_MUL_LID"
-  "TRAT_MUL_ASSOC" > "HOL4Base.hrat.TRAT_MUL_ASSOC"
-  "TRAT_LDISTRIB" > "HOL4Base.hrat.TRAT_LDISTRIB"
-  "TRAT_INV_WELLDEFINED" > "HOL4Base.hrat.TRAT_INV_WELLDEFINED"
-  "TRAT_EQ_TRANS" > "HOL4Base.hrat.TRAT_EQ_TRANS"
-  "TRAT_EQ_SYM" > "HOL4Base.hrat.TRAT_EQ_SYM"
-  "TRAT_EQ_REFL" > "HOL4Base.hrat.TRAT_EQ_REFL"
-  "TRAT_EQ_EQUIV" > "HOL4Base.hrat.TRAT_EQ_EQUIV"
-  "TRAT_EQ_AP" > "HOL4Base.hrat.TRAT_EQ_AP"
-  "TRAT_ARCH" > "HOL4Base.hrat.TRAT_ARCH"
-  "TRAT_ADD_WELLDEFINED2" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED2"
-  "TRAT_ADD_WELLDEFINED" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED"
-  "TRAT_ADD_TOTAL" > "HOL4Base.hrat.TRAT_ADD_TOTAL"
-  "TRAT_ADD_SYM_EQ" > "HOL4Base.hrat.TRAT_ADD_SYM_EQ"
-  "TRAT_ADD_SYM" > "HOL4Base.hrat.TRAT_ADD_SYM"
-  "TRAT_ADD_ASSOC" > "HOL4Base.hrat.TRAT_ADD_ASSOC"
-  "HRAT_SUCINT" > "HOL4Base.hrat.HRAT_SUCINT"
-  "HRAT_NOZERO" > "HOL4Base.hrat.HRAT_NOZERO"
-  "HRAT_MUL_SYM" > "HOL4Base.hrat.HRAT_MUL_SYM"
-  "HRAT_MUL_LINV" > "HOL4Base.hrat.HRAT_MUL_LINV"
-  "HRAT_MUL_LID" > "HOL4Base.hrat.HRAT_MUL_LID"
-  "HRAT_MUL_ASSOC" > "HOL4Base.hrat.HRAT_MUL_ASSOC"
-  "HRAT_LDISTRIB" > "HOL4Base.hrat.HRAT_LDISTRIB"
-  "HRAT_ARCH" > "HOL4Base.hrat.HRAT_ARCH"
-  "HRAT_ADD_TOTAL" > "HOL4Base.hrat.HRAT_ADD_TOTAL"
-  "HRAT_ADD_SYM" > "HOL4Base.hrat.HRAT_ADD_SYM"
-  "HRAT_ADD_ASSOC" > "HOL4Base.hrat.HRAT_ADD_ASSOC"
-
-end
--- a/src/HOL/Import/HOL/hreal.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "isacut" > "isacut_def"
-  "hreal_sup" > "hreal_sup_def"
-  "hreal_sub" > "hreal_sub_def"
-  "hreal_mul" > "hreal_mul_def"
-  "hreal_lt" > "hreal_lt_def"
-  "hreal_inv" > "hreal_inv_def"
-  "hreal_add" > "hreal_add_def"
-  "hreal_1" > "hreal_1_def"
-  "hreal" > "hreal_def"
-  "hrat_lt" > "hrat_lt_def"
-  "cut_of_hrat" > "cut_of_hrat_def"
-  "cut" > "cut_def"
-
-type_maps
-  "hreal" > "HOL4Base.hreal.hreal"
-
-const_maps
-  "isacut" > "HOL4Base.hreal.isacut"
-  "hreal_sup" > "HOL4Base.hreal.hreal_sup"
-  "hreal_sub" > "HOL4Base.hreal.hreal_sub"
-  "hreal_mul" > "HOL4Base.hreal.hreal_mul"
-  "hreal_lt" > "HOL4Base.hreal.hreal_lt"
-  "hreal_inv" > "HOL4Base.hreal.hreal_inv"
-  "hreal_add" > "HOL4Base.hreal.hreal_add"
-  "hreal_1" > "HOL4Base.hreal.hreal_1"
-  "hrat_lt" > "HOL4Base.hreal.hrat_lt"
-  "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
-
-thm_maps
-  "isacut_def" > "HOL4Base.hreal.isacut_def"
-  "isacut" > "HOL4Base.hreal.isacut"
-  "hreal_tybij" > "HOL4Base.hreal.hreal_tybij"
-  "hreal_sup_def" > "HOL4Base.hreal.hreal_sup_def"
-  "hreal_sup" > "HOL4Base.hreal.hreal_sup"
-  "hreal_sub_def" > "HOL4Base.hreal.hreal_sub_def"
-  "hreal_sub" > "HOL4Base.hreal.hreal_sub"
-  "hreal_mul_def" > "HOL4Base.hreal.hreal_mul_def"
-  "hreal_mul" > "HOL4Base.hreal.hreal_mul"
-  "hreal_lt_def" > "HOL4Base.hreal.hreal_lt_def"
-  "hreal_lt" > "HOL4Base.hreal.hreal_lt"
-  "hreal_inv_def" > "HOL4Base.hreal.hreal_inv_def"
-  "hreal_inv" > "HOL4Base.hreal.hreal_inv"
-  "hreal_add_def" > "HOL4Base.hreal.hreal_add_def"
-  "hreal_add" > "HOL4Base.hreal.hreal_add"
-  "hreal_TY_DEF" > "HOL4Base.hreal.hreal_TY_DEF"
-  "hreal_1_def" > "HOL4Base.hreal.hreal_1_def"
-  "hreal_1" > "HOL4Base.hreal.hreal_1"
-  "hrat_lt_def" > "HOL4Base.hreal.hrat_lt_def"
-  "hrat_lt" > "HOL4Base.hreal.hrat_lt"
-  "cut_of_hrat_def" > "HOL4Base.hreal.cut_of_hrat_def"
-  "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
-  "ISACUT_HRAT" > "HOL4Base.hreal.ISACUT_HRAT"
-  "HREAL_SUP_ISACUT" > "HOL4Base.hreal.HREAL_SUP_ISACUT"
-  "HREAL_SUP" > "HOL4Base.hreal.HREAL_SUP"
-  "HREAL_SUB_ISACUT" > "HOL4Base.hreal.HREAL_SUB_ISACUT"
-  "HREAL_SUB_ADD" > "HOL4Base.hreal.HREAL_SUB_ADD"
-  "HREAL_NOZERO" > "HOL4Base.hreal.HREAL_NOZERO"
-  "HREAL_MUL_SYM" > "HOL4Base.hreal.HREAL_MUL_SYM"
-  "HREAL_MUL_LINV" > "HOL4Base.hreal.HREAL_MUL_LINV"
-  "HREAL_MUL_LID" > "HOL4Base.hreal.HREAL_MUL_LID"
-  "HREAL_MUL_ISACUT" > "HOL4Base.hreal.HREAL_MUL_ISACUT"
-  "HREAL_MUL_ASSOC" > "HOL4Base.hreal.HREAL_MUL_ASSOC"
-  "HREAL_LT_TOTAL" > "HOL4Base.hreal.HREAL_LT_TOTAL"
-  "HREAL_LT_LEMMA" > "HOL4Base.hreal.HREAL_LT_LEMMA"
-  "HREAL_LT" > "HOL4Base.hreal.HREAL_LT"
-  "HREAL_LDISTRIB" > "HOL4Base.hreal.HREAL_LDISTRIB"
-  "HREAL_INV_ISACUT" > "HOL4Base.hreal.HREAL_INV_ISACUT"
-  "HREAL_ADD_TOTAL" > "HOL4Base.hreal.HREAL_ADD_TOTAL"
-  "HREAL_ADD_SYM" > "HOL4Base.hreal.HREAL_ADD_SYM"
-  "HREAL_ADD_ISACUT" > "HOL4Base.hreal.HREAL_ADD_ISACUT"
-  "HREAL_ADD_ASSOC" > "HOL4Base.hreal.HREAL_ADD_ASSOC"
-  "HRAT_UP" > "HOL4Base.hreal.HRAT_UP"
-  "HRAT_RDISTRIB" > "HOL4Base.hreal.HRAT_RDISTRIB"
-  "HRAT_MUL_RINV" > "HOL4Base.hreal.HRAT_MUL_RINV"
-  "HRAT_MUL_RID" > "HOL4Base.hreal.HRAT_MUL_RID"
-  "HRAT_MEAN" > "HOL4Base.hreal.HRAT_MEAN"
-  "HRAT_LT_TRANS" > "HOL4Base.hreal.HRAT_LT_TRANS"
-  "HRAT_LT_TOTAL" > "HOL4Base.hreal.HRAT_LT_TOTAL"
-  "HRAT_LT_RMUL1" > "HOL4Base.hreal.HRAT_LT_RMUL1"
-  "HRAT_LT_RMUL" > "HOL4Base.hreal.HRAT_LT_RMUL"
-  "HRAT_LT_REFL" > "HOL4Base.hreal.HRAT_LT_REFL"
-  "HRAT_LT_RADD" > "HOL4Base.hreal.HRAT_LT_RADD"
-  "HRAT_LT_R1" > "HOL4Base.hreal.HRAT_LT_R1"
-  "HRAT_LT_NE" > "HOL4Base.hreal.HRAT_LT_NE"
-  "HRAT_LT_MUL2" > "HOL4Base.hreal.HRAT_LT_MUL2"
-  "HRAT_LT_LMUL1" > "HOL4Base.hreal.HRAT_LT_LMUL1"
-  "HRAT_LT_LMUL" > "HOL4Base.hreal.HRAT_LT_LMUL"
-  "HRAT_LT_LADD" > "HOL4Base.hreal.HRAT_LT_LADD"
-  "HRAT_LT_L1" > "HOL4Base.hreal.HRAT_LT_L1"
-  "HRAT_LT_GT" > "HOL4Base.hreal.HRAT_LT_GT"
-  "HRAT_LT_ANTISYM" > "HOL4Base.hreal.HRAT_LT_ANTISYM"
-  "HRAT_LT_ADDR" > "HOL4Base.hreal.HRAT_LT_ADDR"
-  "HRAT_LT_ADDL" > "HOL4Base.hreal.HRAT_LT_ADDL"
-  "HRAT_LT_ADD2" > "HOL4Base.hreal.HRAT_LT_ADD2"
-  "HRAT_INV_MUL" > "HOL4Base.hreal.HRAT_INV_MUL"
-  "HRAT_GT_LMUL1" > "HOL4Base.hreal.HRAT_GT_LMUL1"
-  "HRAT_GT_L1" > "HOL4Base.hreal.HRAT_GT_L1"
-  "HRAT_EQ_LMUL" > "HOL4Base.hreal.HRAT_EQ_LMUL"
-  "HRAT_EQ_LADD" > "HOL4Base.hreal.HRAT_EQ_LADD"
-  "HRAT_DOWN2" > "HOL4Base.hreal.HRAT_DOWN2"
-  "HRAT_DOWN" > "HOL4Base.hreal.HRAT_DOWN"
-  "EQUAL_CUTS" > "HOL4Base.hreal.EQUAL_CUTS"
-  "CUT_UP" > "HOL4Base.hreal.CUT_UP"
-  "CUT_UBOUND" > "HOL4Base.hreal.CUT_UBOUND"
-  "CUT_STRADDLE" > "HOL4Base.hreal.CUT_STRADDLE"
-  "CUT_NONEMPTY" > "HOL4Base.hreal.CUT_NONEMPTY"
-  "CUT_NEARTOP_MUL" > "HOL4Base.hreal.CUT_NEARTOP_MUL"
-  "CUT_NEARTOP_ADD" > "HOL4Base.hreal.CUT_NEARTOP_ADD"
-  "CUT_ISACUT" > "HOL4Base.hreal.CUT_ISACUT"
-  "CUT_DOWN" > "HOL4Base.hreal.CUT_DOWN"
-  "CUT_BOUNDED" > "HOL4Base.hreal.CUT_BOUNDED"
-
-end
--- a/src/HOL/Import/HOL/ind_type.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "mk_rec" > "mk_rec_def"
-  "dest_rec" > "dest_rec_def"
-  "ZRECSPACE" > "ZRECSPACE_def"
-  "ZCONSTR" > "ZCONSTR_def"
-  "ZBOT" > "ZBOT_def"
-  "NUMSUM" > "NUMSUM_def"
-  "NUMSND" > "NUMSND_def"
-  "NUMRIGHT" > "NUMRIGHT_def"
-  "NUMPAIR" > "NUMPAIR_def"
-  "NUMLEFT" > "NUMLEFT_def"
-  "NUMFST" > "NUMFST_def"
-  "ISO" > "ISO_def"
-  "INJP" > "INJP_def"
-  "INJN" > "INJN_def"
-  "INJF" > "INJF_def"
-  "INJA" > "INJA_def"
-  "FNIL" > "FNIL_def"
-  "FCONS" > "FCONS_def"
-  "CONSTR" > "CONSTR_def"
-  "BOTTOM" > "BOTTOM_def"
-
-type_maps
-  "recspace" > "HOL4Base.ind_type.recspace"
-
-const_maps
-  "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
-  "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
-  "ZBOT" > "HOL4Base.ind_type.ZBOT"
-  "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
-  "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
-  "ISO" > "HOL4Base.ind_type.ISO"
-  "INJP" > "HOL4Base.ind_type.INJP"
-  "INJN" > "HOL4Base.ind_type.INJN"
-  "INJF" > "HOL4Base.ind_type.INJF"
-  "INJA" > "HOL4Base.ind_type.INJA"
-  "FNIL" > "HOL4Base.ind_type.FNIL"
-  "CONSTR" > "HOL4Base.ind_type.CONSTR"
-  "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
-
-thm_maps
-  "recspace_repfns" > "HOL4Base.ind_type.recspace_repfns"
-  "recspace_TY_DEF" > "HOL4Base.ind_type.recspace_TY_DEF"
-  "ZRECSPACE_rules" > "HOL4Base.ind_type.ZRECSPACE_rules"
-  "ZRECSPACE_ind" > "HOL4Base.ind_type.ZRECSPACE_ind"
-  "ZRECSPACE_def" > "HOL4Base.ind_type.ZRECSPACE_def"
-  "ZRECSPACE_cases" > "HOL4Base.ind_type.ZRECSPACE_cases"
-  "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
-  "ZCONSTR_def" > "HOL4Base.ind_type.ZCONSTR_def"
-  "ZCONSTR_ZBOT" > "HOL4Base.ind_type.ZCONSTR_ZBOT"
-  "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
-  "ZBOT_def" > "HOL4Base.ind_type.ZBOT_def"
-  "ZBOT" > "HOL4Base.ind_type.ZBOT"
-  "NUMSUM_def" > "HOL4Base.ind_type.NUMSUM_def"
-  "NUMSUM_INJ" > "HOL4Base.ind_type.NUMSUM_INJ"
-  "NUMSUM_DEST" > "HOL4Base.ind_type.NUMSUM_DEST"
-  "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
-  "NUMPAIR_def" > "HOL4Base.ind_type.NUMPAIR_def"
-  "NUMPAIR_INJ_LEMMA" > "HOL4Base.ind_type.NUMPAIR_INJ_LEMMA"
-  "NUMPAIR_INJ" > "HOL4Base.ind_type.NUMPAIR_INJ"
-  "NUMPAIR_DEST" > "HOL4Base.ind_type.NUMPAIR_DEST"
-  "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
-  "MK_REC_INJ" > "HOL4Base.ind_type.MK_REC_INJ"
-  "ISO_def" > "HOL4Base.ind_type.ISO_def"
-  "ISO_USAGE" > "HOL4Base.ind_type.ISO_USAGE"
-  "ISO_REFL" > "HOL4Base.ind_type.ISO_REFL"
-  "ISO_FUN" > "HOL4Base.ind_type.ISO_FUN"
-  "ISO" > "HOL4Base.ind_type.ISO"
-  "INJ_INVERSE2" > "HOL4Base.ind_type.INJ_INVERSE2"
-  "INJP_def" > "HOL4Base.ind_type.INJP_def"
-  "INJP_INJ" > "HOL4Base.ind_type.INJP_INJ"
-  "INJP" > "HOL4Base.ind_type.INJP"
-  "INJN_def" > "HOL4Base.ind_type.INJN_def"
-  "INJN_INJ" > "HOL4Base.ind_type.INJN_INJ"
-  "INJN" > "HOL4Base.ind_type.INJN"
-  "INJF_def" > "HOL4Base.ind_type.INJF_def"
-  "INJF_INJ" > "HOL4Base.ind_type.INJF_INJ"
-  "INJF" > "HOL4Base.ind_type.INJF"
-  "INJA_def" > "HOL4Base.ind_type.INJA_def"
-  "INJA_INJ" > "HOL4Base.ind_type.INJA_INJ"
-  "INJA" > "HOL4Base.ind_type.INJA"
-  "FNIL_def" > "HOL4Base.ind_type.FNIL_def"
-  "FNIL" > "HOL4Base.ind_type.FNIL"
-  "FCONS" > "HOL4Base.ind_type.FCONS"
-  "DEST_REC_INJ" > "HOL4Base.ind_type.DEST_REC_INJ"
-  "CONSTR_def" > "HOL4Base.ind_type.CONSTR_def"
-  "CONSTR_REC" > "HOL4Base.ind_type.CONSTR_REC"
-  "CONSTR_INJ" > "HOL4Base.ind_type.CONSTR_INJ"
-  "CONSTR_IND" > "HOL4Base.ind_type.CONSTR_IND"
-  "CONSTR_BOT" > "HOL4Base.ind_type.CONSTR_BOT"
-  "CONSTR" > "HOL4Base.ind_type.CONSTR"
-  "BOTTOM_def" > "HOL4Base.ind_type.BOTTOM_def"
-  "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
-
-end
--- a/src/HOL/Import/HOL/lim.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "tends_real_real" > "tends_real_real_def"
-  "diffl" > "diffl_def"
-  "differentiable" > "differentiable_def"
-  "contl" > "contl_def"
-
-const_maps
-  "tends_real_real" > "HOL4Real.lim.tends_real_real"
-  "diffl" > "HOL4Real.lim.diffl"
-  "differentiable" > "HOL4Real.lim.differentiable"
-  "contl" > "HOL4Real.lim.contl"
-
-thm_maps
-  "tends_real_real_def" > "HOL4Real.lim.tends_real_real_def"
-  "tends_real_real" > "HOL4Real.lim.tends_real_real"
-  "diffl_def" > "HOL4Real.lim.diffl_def"
-  "diffl" > "HOL4Real.lim.diffl"
-  "differentiable_def" > "HOL4Real.lim.differentiable_def"
-  "differentiable" > "HOL4Real.lim.differentiable"
-  "contl_def" > "HOL4Real.lim.contl_def"
-  "contl" > "HOL4Real.lim.contl"
-  "ROLLE" > "HOL4Real.lim.ROLLE"
-  "MVT_LEMMA" > "Deriv.lemma_MVT"
-  "MVT" > "HOL4Real.lim.MVT"
-  "LIM_X" > "HOL4Real.lim.LIM_X"
-  "LIM_UNIQ" > "HOL4Real.lim.LIM_UNIQ"
-  "LIM_TRANSFORM" > "HOL4Real.lim.LIM_TRANSFORM"
-  "LIM_SUB" > "HOL4Real.lim.LIM_SUB"
-  "LIM_NULL" > "HOL4Real.lim.LIM_NULL"
-  "LIM_NEG" > "HOL4Real.lim.LIM_NEG"
-  "LIM_MUL" > "HOL4Real.lim.LIM_MUL"
-  "LIM_INV" > "HOL4Real.lim.LIM_INV"
-  "LIM_EQUAL" > "HOL4Real.lim.LIM_EQUAL"
-  "LIM_DIV" > "HOL4Real.lim.LIM_DIV"
-  "LIM_CONST" > "HOL4Real.lim.LIM_CONST"
-  "LIM_ADD" > "HOL4Real.lim.LIM_ADD"
-  "LIM" > "HOL4Real.lim.LIM"
-  "IVT2" > "HOL4Real.lim.IVT2"
-  "IVT" > "HOL4Real.lim.IVT"
-  "INTERVAL_LEMMA" > "Deriv.lemma_interval"
-  "INTERVAL_CLEMMA" > "HOL4Real.lim.INTERVAL_CLEMMA"
-  "INTERVAL_ABS" > "HOL4Real.lim.INTERVAL_ABS"
-  "DIFF_XM1" > "HOL4Real.lim.DIFF_XM1"
-  "DIFF_X" > "HOL4Real.lim.DIFF_X"
-  "DIFF_UNIQ" > "HOL4Real.lim.DIFF_UNIQ"
-  "DIFF_SUM" > "HOL4Real.lim.DIFF_SUM"
-  "DIFF_SUB" > "HOL4Real.lim.DIFF_SUB"
-  "DIFF_POW" > "HOL4Real.lim.DIFF_POW"
-  "DIFF_NEG" > "HOL4Real.lim.DIFF_NEG"
-  "DIFF_MUL" > "HOL4Real.lim.DIFF_MUL"
-  "DIFF_LMIN" > "HOL4Real.lim.DIFF_LMIN"
-  "DIFF_LMAX" > "HOL4Real.lim.DIFF_LMAX"
-  "DIFF_LINC" > "HOL4Real.lim.DIFF_LINC"
-  "DIFF_LDEC" > "HOL4Real.lim.DIFF_LDEC"
-  "DIFF_LCONST" > "HOL4Real.lim.DIFF_LCONST"
-  "DIFF_ISCONST_END" > "HOL4Real.lim.DIFF_ISCONST_END"
-  "DIFF_ISCONST_ALL" > "HOL4Real.lim.DIFF_ISCONST_ALL"
-  "DIFF_ISCONST" > "HOL4Real.lim.DIFF_ISCONST"
-  "DIFF_INVERSE_OPEN" > "HOL4Real.lim.DIFF_INVERSE_OPEN"
-  "DIFF_INVERSE_LT" > "HOL4Real.lim.DIFF_INVERSE_LT"
-  "DIFF_INVERSE" > "HOL4Real.lim.DIFF_INVERSE"
-  "DIFF_INV" > "HOL4Real.lim.DIFF_INV"
-  "DIFF_DIV" > "HOL4Real.lim.DIFF_DIV"
-  "DIFF_CONT" > "HOL4Real.lim.DIFF_CONT"
-  "DIFF_CONST" > "HOL4Real.lim.DIFF_CONST"
-  "DIFF_CMUL" > "HOL4Real.lim.DIFF_CMUL"
-  "DIFF_CHAIN" > "HOL4Real.lim.DIFF_CHAIN"
-  "DIFF_CARAT" > "HOL4Real.lim.DIFF_CARAT"
-  "DIFF_ADD" > "HOL4Real.lim.DIFF_ADD"
-  "CONT_SUB" > "HOL4Real.lim.CONT_SUB"
-  "CONT_NEG" > "HOL4Real.lim.CONT_NEG"
-  "CONT_MUL" > "HOL4Real.lim.CONT_MUL"
-  "CONT_INVERSE" > "HOL4Real.lim.CONT_INVERSE"
-  "CONT_INV" > "HOL4Real.lim.CONT_INV"
-  "CONT_INJ_RANGE" > "HOL4Real.lim.CONT_INJ_RANGE"
-  "CONT_INJ_LEMMA2" > "HOL4Real.lim.CONT_INJ_LEMMA2"
-  "CONT_INJ_LEMMA" > "HOL4Real.lim.CONT_INJ_LEMMA"
-  "CONT_HASSUP" > "HOL4Real.lim.CONT_HASSUP"
-  "CONT_DIV" > "HOL4Real.lim.CONT_DIV"
-  "CONT_CONST" > "HOL4Real.lim.CONT_CONST"
-  "CONT_COMPOSE" > "HOL4Real.lim.CONT_COMPOSE"
-  "CONT_BOUNDED" > "HOL4Real.lim.CONT_BOUNDED"
-  "CONT_ATTAINS_ALL" > "HOL4Real.lim.CONT_ATTAINS_ALL"
-  "CONT_ATTAINS2" > "HOL4Real.lim.CONT_ATTAINS2"
-  "CONT_ATTAINS" > "HOL4Real.lim.CONT_ATTAINS"
-  "CONT_ADD" > "HOL4Real.lim.CONT_ADD"
-  "CONTL_LIM" > "HOL4Real.lim.CONTL_LIM"
-
-end
--- a/src/HOL/Import/HOL/list.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "EL" > "EL_def"
-
-type_maps
-  "list" > "List.list"
-
-const_maps
-  "list_size" > "HOL4Compat.list_size"
-  "list_case" > "List.list.list_case"
-  "ZIP" > "HOL4Compat.ZIP"
-  "UNZIP" > "HOL4Compat.unzip"
-  "TL" > "List.tl"
-  "SUM" > "HOL4Compat.sum"
-  "REVERSE" > "List.rev"
-  "REPLICATE" > "List.replicate"
-  "NULL" > "List.null"
-  "NIL" > "List.list.Nil"
-  "MEM" > "HOL4Compat.list_mem"
-  "MAP2" > "HOL4Compat.map2"
-  "MAP" > "List.map"
-  "LENGTH" > "Nat.size_class.size"
-  "LAST" > "List.last"
-  "HD" > "List.hd"
-  "FRONT" > "List.butlast"
-  "FOLDR" > "HOL4Compat.FOLDR"
-  "FOLDL" > "List.foldl"
-  "FLAT" > "List.concat"
-  "FILTER" > "List.filter"
-  "EXISTS" > "List.list_ex"
-  "EVERY" > "List.list_all"
-  "CONS" > "List.list.Cons"
-  "APPEND" > "List.append"
-
-thm_maps
-  "list_size_def" > "HOL4Compat.list_size_def'"
-  "list_size_cong" > "HOL4Base.list.list_size_cong"
-  "list_nchotomy" > "HOL4Compat.list_CASES"
-  "list_induction" > "HOL4Compat.list_INDUCT"
-  "list_distinct" > "List.list.distinct_1"
-  "list_case_def" > "HOL4Compat.list_case_def"
-  "list_case_cong" > "HOL4Compat.list_case_cong"
-  "list_case_compute" > "HOL4Base.list.list_case_compute"
-  "list_INDUCT" > "HOL4Compat.list_INDUCT"
-  "list_CASES" > "HOL4Compat.list_CASES"
-  "list_Axiom_old" > "HOL4Compat.list_Axiom_old"
-  "list_Axiom" > "HOL4Compat.list_Axiom"
-  "list_11" > "List.list.inject"
-  "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
-  "ZIP_MAP" > "HOL4Base.list.ZIP_MAP"
-  "ZIP" > "HOL4Compat.ZIP"
-  "WF_LIST_PRED" > "HOL4Base.list.WF_LIST_PRED"
-  "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
-  "UNZIP" > "HOL4Compat.UNZIP"
-  "TL" > "List.tl.simps_2"
-  "SUM" > "HOL4Compat.SUM"
-  "REVERSE_REVERSE" > "List.rev_rev_ident"
-  "REVERSE_DEF" > "HOL4Compat.REVERSE"
-  "REVERSE_APPEND" > "List.rev_append"
-  "NULL_DEF" > "HOL4Compat.NULL_DEF"
-  "NULL" > "HOL4Base.list.NULL"
-  "NOT_NIL_CONS" > "List.list.distinct_1"
-  "NOT_EXISTS" > "HOL4Base.list.NOT_EXISTS"
-  "NOT_EVERY" > "HOL4Base.list.NOT_EVERY"
-  "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
-  "NOT_CONS_NIL" > "List.list.distinct_2"
-  "MEM_ZIP" > "HOL4Base.list.MEM_ZIP"
-  "MEM_MAP" > "HOL4Base.list.MEM_MAP"
-  "MEM_EL" > "HOL4Base.list.MEM_EL"
-  "MEM_APPEND" > "HOL4Base.list.MEM_APPEND"
-  "MEM" > "HOL4Compat.MEM"
-  "MAP_EQ_NIL" > "HOL4Base.list.MAP_EQ_NIL"
-  "MAP_CONG" > "HOL4Base.list.MAP_CONG"
-  "MAP_APPEND" > "List.map_append"
-  "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
-  "MAP2" > "HOL4Compat.MAP2"
-  "MAP" > "HOL4Compat.MAP"
-  "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
-  "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
-  "LENGTH_UNZIP" > "HOL4Base.list.LENGTH_UNZIP"
-  "LENGTH_NIL" > "List.length_0_conv"
-  "LENGTH_MAP" > "List.length_map"
-  "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
-  "LENGTH_EQ_CONS" > "HOL4Base.list.LENGTH_EQ_CONS"
-  "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
-  "LENGTH_APPEND" > "List.length_append"
-  "LENGTH" > "HOL4Compat.LENGTH"
-  "LAST_DEF" > "List.last.simps"
-  "LAST_CONS" > "HOL4Base.list.LAST_CONS"
-  "HD" > "List.hd.simps"
-  "FRONT_DEF" > "List.butlast.simps_2"
-  "FRONT_CONS" > "HOL4Base.list.FRONT_CONS"
-  "FOLDR_CONG" > "HOL4Base.list.FOLDR_CONG"
-  "FOLDR" > "HOL4Compat.FOLDR"
-  "FOLDL_CONG" > "HOL4Base.list.FOLDL_CONG"
-  "FOLDL" > "HOL4Compat.FOLDL"
-  "FLAT" > "HOL4Compat.FLAT"
-  "FILTER" > "HOL4Compat.FILTER"
-  "EXISTS_MEM" > "HOL4Base.list.EXISTS_MEM"
-  "EXISTS_DEF" > "HOL4Compat.list_exists_DEF"
-  "EXISTS_CONG" > "HOL4Base.list.EXISTS_CONG"
-  "EXISTS_APPEND" > "List.list_ex_append"
-  "EVERY_MONOTONIC" > "HOL4Base.list.EVERY_MONOTONIC"
-  "EVERY_MEM" > "HOL4Base.list.EVERY_MEM"
-  "EVERY_EL" > "HOL4Base.list.EVERY_EL"
-  "EVERY_DEF" > "HOL4Compat.EVERY_DEF"
-  "EVERY_CONJ" > "HOL4Base.list.EVERY_CONJ"
-  "EVERY_CONG" > "HOL4Base.list.EVERY_CONG"
-  "EVERY_APPEND" > "List.list_all_append"
-  "EQ_LIST" > "HOL4Base.list.EQ_LIST"
-  "EL_compute" > "HOL4Base.list.EL_compute"
-  "EL_ZIP" > "HOL4Base.list.EL_ZIP"
-  "EL" > "HOL4Base.list.EL"
-  "CONS_ACYCLIC" > "HOL4Base.list.CONS_ACYCLIC"
-  "CONS_11" > "List.list.inject"
-  "CONS" > "HOL4Base.list.CONS"
-  "APPEND_eq_NIL" > "HOL4Base.list.APPEND_eq_NIL"
-  "APPEND_NIL" > "List.append_Nil2"
-  "APPEND_FRONT_LAST" > "List.append_butlast_last_id"
-  "APPEND_ASSOC" > "List.append_assoc"
-  "APPEND_11" > "HOL4Base.list.APPEND_11"
-  "APPEND" > "HOL4Compat.APPEND"
-
-ignore_thms
-  "list_repfns"
-  "list_TY_DEF"
-  "list1_def"
-  "list0_def"
-  "NIL"
-  "CONS_def"
-
-end
--- a/src/HOL/Import/HOL/marker.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "stmarker" > "stmarker_primdef"
-
-const_maps
-  "stmarker" > "HOL4Base.marker.stmarker"
-
-thm_maps
-  "stmarker_primdef" > "HOL4Base.marker.stmarker_primdef"
-  "stmarker_def" > "HOL4Base.marker.stmarker_def"
-  "move_right_disj" > "HOL4Base.marker.move_right_disj"
-  "move_right_conj" > "HOL4Base.marker.move_right_conj"
-  "move_left_disj" > "HOL4Base.marker.move_left_disj"
-  "move_left_conj" > "HOL4Base.marker.move_left_conj"
-
-end
--- a/src/HOL/Import/HOL/nets.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "tendsto" > "tendsto_def"
-  "tends" > "tends_def"
-  "dorder" > "dorder_def"
-  "bounded" > "bounded_def"
-
-const_maps
-  "tendsto" > "HOL4Real.nets.tendsto"
-  "tends" > "HOL4Real.nets.tends"
-  "dorder" > "HOL4Real.nets.dorder"
-  "bounded" > "HOL4Real.nets.bounded"
-
-thm_maps
-  "tendsto_def" > "HOL4Real.nets.tendsto_def"
-  "tendsto" > "HOL4Real.nets.tendsto"
-  "tends_def" > "HOL4Real.nets.tends_def"
-  "tends" > "HOL4Real.nets.tends"
-  "dorder_def" > "HOL4Real.nets.dorder_def"
-  "dorder" > "HOL4Real.nets.dorder"
-  "bounded_def" > "HOL4Real.nets.bounded_def"
-  "bounded" > "HOL4Real.nets.bounded"
-  "SEQ_TENDS" > "HOL4Real.nets.SEQ_TENDS"
-  "NET_SUB" > "HOL4Real.nets.NET_SUB"
-  "NET_NULL_MUL" > "HOL4Real.nets.NET_NULL_MUL"
-  "NET_NULL_CMUL" > "HOL4Real.nets.NET_NULL_CMUL"
-  "NET_NULL_ADD" > "HOL4Real.nets.NET_NULL_ADD"
-  "NET_NULL" > "HOL4Real.nets.NET_NULL"
-  "NET_NEG" > "HOL4Real.nets.NET_NEG"
-  "NET_MUL" > "HOL4Real.nets.NET_MUL"
-  "NET_LE" > "HOL4Real.nets.NET_LE"
-  "NET_INV" > "HOL4Real.nets.NET_INV"
-  "NET_DIV" > "HOL4Real.nets.NET_DIV"
-  "NET_CONV_NZ" > "HOL4Real.nets.NET_CONV_NZ"
-  "NET_CONV_IBOUNDED" > "HOL4Real.nets.NET_CONV_IBOUNDED"
-  "NET_CONV_BOUNDED" > "HOL4Real.nets.NET_CONV_BOUNDED"
-  "NET_ADD" > "HOL4Real.nets.NET_ADD"
-  "NET_ABS" > "HOL4Real.nets.NET_ABS"
-  "MTOP_TENDS_UNIQ" > "HOL4Real.nets.MTOP_TENDS_UNIQ"
-  "MTOP_TENDS" > "HOL4Real.nets.MTOP_TENDS"
-  "MR1_BOUNDED" > "HOL4Real.nets.MR1_BOUNDED"
-  "LIM_TENDS2" > "HOL4Real.nets.LIM_TENDS2"
-  "LIM_TENDS" > "HOL4Real.nets.LIM_TENDS"
-  "DORDER_TENDSTO" > "HOL4Real.nets.DORDER_TENDSTO"
-  "DORDER_NGE" > "HOL4Real.nets.DORDER_NGE"
-  "DORDER_LEMMA" > "HOL4Real.nets.DORDER_LEMMA"
-
-end
--- a/src/HOL/Import/HOL/num.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-import
-
-import_segment "hol4"
-
-type_maps
-  "num" > "Nat.nat"
-
-const_maps
-  "SUC" > "Nat.Suc"
-  "0" > "Groups.zero_class.zero" :: "nat"
-
-thm_maps
-  "NOT_SUC" > "Nat.Suc_not_Zero"
-  "INV_SUC" > "Nat.Suc_inject"
-  "INDUCTION" > "Fact.fact_nat.induct"
-
-ignore_thms
-  "num_TY_DEF"
-  "num_ISO_DEF"
-  "ZERO_REP_DEF"
-  "ZERO_DEF"
-  "SUC_REP_DEF"
-  "SUC_DEF"
-  "IS_NUM_REP"
-
-end
--- a/src/HOL/Import/HOL/numeral.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "iiSUC" > "iiSUC_def"
-  "iZ" > "iZ_def"
-  "iSUB" > "iSUB_def"
-  "iSQR" > "iSQR_def"
-  "iDUB" > "iDUB_def"
-  "iBIT_cases" > "iBIT_cases_def"
-
-const_maps
-  "iiSUC" > "HOL4Base.numeral.iiSUC"
-  "iZ" > "HOL4Base.numeral.iZ"
-  "iSQR" > "HOL4Base.numeral.iSQR"
-  "iDUB" > "HOL4Base.numeral.iDUB"
-
-thm_maps
-  "numeral_suc" > "HOL4Base.numeral.numeral_suc"
-  "numeral_sub" > "HOL4Base.numeral.numeral_sub"
-  "numeral_pre" > "HOL4Base.numeral.numeral_pre"
-  "numeral_mult" > "HOL4Base.numeral.numeral_mult"
-  "numeral_lte" > "HOL4Base.numeral.numeral_lte"
-  "numeral_lt" > "HOL4Base.numeral.numeral_lt"
-  "numeral_iisuc" > "HOL4Base.numeral.numeral_iisuc"
-  "numeral_funpow" > "HOL4Base.numeral.numeral_funpow"
-  "numeral_fact" > "HOL4Base.numeral.numeral_fact"
-  "numeral_exp" > "HOL4Base.numeral.numeral_exp"
-  "numeral_evenodd" > "HOL4Base.numeral.numeral_evenodd"
-  "numeral_eq" > "HOL4Base.numeral.numeral_eq"
-  "numeral_distrib" > "HOL4Base.numeral.numeral_distrib"
-  "numeral_add" > "HOL4Base.numeral.numeral_add"
-  "iiSUC_def" > "HOL4Base.numeral.iiSUC_def"
-  "iiSUC" > "HOL4Base.numeral.iiSUC"
-  "iZ_def" > "HOL4Base.numeral.iZ_def"
-  "iZ" > "HOL4Base.numeral.iZ"
-  "iSUB_THM" > "HOL4Base.numeral.iSUB_THM"
-  "iSUB_DEF" > "HOL4Base.numeral.iSUB_DEF"
-  "iSQR_def" > "HOL4Base.numeral.iSQR_def"
-  "iSQR" > "HOL4Base.numeral.iSQR"
-  "iDUB_removal" > "HOL4Base.numeral.iDUB_removal"
-  "iDUB_def" > "HOL4Base.numeral.iDUB_def"
-  "iDUB" > "HOL4Base.numeral.iDUB"
-  "iBIT_cases" > "HOL4Base.numeral.iBIT_cases"
-  "bit_initiality" > "HOL4Base.numeral.bit_initiality"
-  "bit_induction" > "HOL4Base.numeral.bit_induction"
-
-end
--- a/src/HOL/Import/HOL/one.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-import
-
-import_segment "hol4"
-
-type_maps
-  "one" > "Product_Type.unit"
-
-const_maps
-  "one" > "Product_Type.Unity"
-
-thm_maps
-  "one" > "HOL4Compat.one"
-
-ignore_thms
-  "one_axiom"
-  "one_TY_DEF"
-  "one_DEF"
-  "one_Axiom"
-
-end
--- a/src/HOL/Import/HOL/operator.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "RIGHT_ID" > "RIGHT_ID_def"
-  "MONOID" > "MONOID_def"
-  "LEFT_ID" > "LEFT_ID_def"
-  "FCOMM" > "FCOMM_def"
-  "COMM" > "COMM_def"
-  "ASSOC" > "ASSOC_def"
-
-const_maps
-  "RIGHT_ID" > "HOL4Base.operator.RIGHT_ID"
-  "MONOID" > "HOL4Base.operator.MONOID"
-  "LEFT_ID" > "HOL4Base.operator.LEFT_ID"
-  "FCOMM" > "HOL4Base.operator.FCOMM"
-  "COMM" > "HOL4Base.operator.COMM"
-  "ASSOC" > "HOL4Base.operator.ASSOC"
-
-thm_maps
-  "RIGHT_ID_def" > "HOL4Base.operator.RIGHT_ID_def"
-  "RIGHT_ID_DEF" > "HOL4Base.operator.RIGHT_ID_DEF"
-  "MONOID_def" > "HOL4Base.operator.MONOID_def"
-  "MONOID_DISJ_F" > "HOL4Base.operator.MONOID_DISJ_F"
-  "MONOID_DEF" > "HOL4Base.operator.MONOID_DEF"
-  "MONOID_CONJ_T" > "HOL4Base.operator.MONOID_CONJ_T"
-  "LEFT_ID_def" > "HOL4Base.operator.LEFT_ID_def"
-  "LEFT_ID_DEF" > "HOL4Base.operator.LEFT_ID_DEF"
-  "FCOMM_def" > "HOL4Base.operator.FCOMM_def"
-  "FCOMM_DEF" > "HOL4Base.operator.FCOMM_DEF"
-  "FCOMM_ASSOC" > "HOL4Base.operator.FCOMM_ASSOC"
-  "COMM_def" > "HOL4Base.operator.COMM_def"
-  "COMM_DEF" > "HOL4Base.operator.COMM_DEF"
-  "ASSOC_def" > "HOL4Base.operator.ASSOC_def"
-  "ASSOC_DISJ" > "HOL4Base.operator.ASSOC_DISJ"
-  "ASSOC_DEF" > "HOL4Base.operator.ASSOC_DEF"
-  "ASSOC_CONJ" > "HOL4Base.operator.ASSOC_CONJ"
-
-end
--- a/src/HOL/Import/HOL/option.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-import
-
-import_segment "hol4"
-
-type_maps
-  "option" > "Option.option"
-
-const_maps
-  "option_case" > "Option.option.option_case"
-  "THE" > "Option.the"
-  "SOME" > "Option.option.Some"
-  "OPTION_MAP" > "Option.map"
-  "OPTION_JOIN" > "HOL4Compat.OPTION_JOIN"
-  "NONE" > "Option.option.None"
-  "IS_SOME" > "HOL4Compat.IS_SOME"
-  "IS_NONE" > "HOL4Compat.IS_NONE"
-
-thm_maps
-  "option_nchotomy" > "Option.option.nchotomy"
-  "option_induction" > "Option.option.induct"
-  "option_case_def" > "HOL4Compat.option_case_def"
-  "option_case_cong" > "HOL4Base.option.option_case_cong"
-  "option_case_compute" > "HOL4Base.option.option_case_compute"
-  "option_CLAUSES" > "HOL4Base.option.option_CLAUSES"
-  "THE_DEF" > "Option.the.simps"
-  "SOME_11" > "Option.option.inject"
-  "OPTION_MAP_EQ_SOME" > "HOL4Base.option.OPTION_MAP_EQ_SOME"
-  "OPTION_MAP_EQ_NONE" > "Option.option_map_is_None"
-  "OPTION_MAP_DEF" > "HOL4Compat.OPTION_MAP_DEF"
-  "OPTION_JOIN_EQ_SOME" > "HOL4Base.option.OPTION_JOIN_EQ_SOME"
-  "OPTION_JOIN_DEF" > "HOL4Compat.OPTION_JOIN_DEF"
-  "NOT_SOME_NONE" > "Option.option.distinct_2"
-  "NOT_NONE_SOME" > "Option.option.distinct_1"
-  "IS_SOME_DEF" > "HOL4Compat.IS_SOME_DEF"
-  "IS_NONE_DEF" > "HOL4Compat.IS_NONE_DEF"
-
-ignore_thms
-  "option_axiom"
-  "option_TY_DEF"
-  "option_REP_ABS_DEF"
-  "option_Axiom"
-  "SOME_DEF"
-  "NONE_DEF"
-
-end
--- a/src/HOL/Import/HOL/pair.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "RPROD" > "RPROD_def"
-  "LEX" > "LEX_def"
-
-type_maps
-  "prod" > "Product_Type.prod"
-
-const_maps
-  "pair_case" > "Product_Type.prod.prod_case"
-  "UNCURRY" > "Product_Type.prod.prod_case"
-  "SND" > "Product_Type.snd"
-  "RPROD" > "HOL4Base.pair.RPROD"
-  "LEX" > "HOL4Base.pair.LEX"
-  "FST" > "Product_Type.fst"
-  "CURRY" > "Product_Type.curry"
-  "," > "Product_Type.Pair"
-  "##" > "Product_Type.map_pair"
-
-thm_maps
-  "pair_induction" > "Product_Type.prod.induct"
-  "pair_case_thm" > "Product_Type.prod.cases"
-  "pair_case_def" > "HOL4Compat.pair_case_def"
-  "pair_case_cong" > "HOL4Base.pair.pair_case_cong"
-  "pair_Axiom" > "HOL4Base.pair.pair_Axiom"
-  "WF_RPROD" > "HOL4Base.pair.WF_RPROD"
-  "WF_LEX" > "HOL4Base.pair.WF_LEX"
-  "UNCURRY_VAR" > "Product_Type.prod_case_beta"
-  "UNCURRY_ONE_ONE_THM" > "HOL4Base.pair.UNCURRY_ONE_ONE_THM"
-  "UNCURRY_DEF" > "Product_Type.prod.cases"
-  "UNCURRY_CURRY_THM" > "Product_Type.split_curry"
-  "UNCURRY_CONG" > "HOL4Base.pair.UNCURRY_CONG"
-  "UNCURRY" > "Product_Type.prod_case_beta"
-  "SND" > "Product_Type.snd_conv"
-  "RPROD_def" > "HOL4Base.pair.RPROD_def"
-  "RPROD_DEF" > "HOL4Base.pair.RPROD_DEF"
-  "PFORALL_THM" > "HOL4Base.pair.PFORALL_THM"
-  "PEXISTS_THM" > "HOL4Base.pair.PEXISTS_THM"
-  "PAIR_MAP_THM" > "Product_Type.map_pair_simp"
-  "PAIR_MAP" > "HOL4Compat.PAIR_MAP"
-  "PAIR_EQ" > "Product_Type.Pair_eq"
-  "PAIR" > "HOL4Compat.PAIR"
-  "LEX_def" > "HOL4Base.pair.LEX_def"
-  "LEX_DEF" > "HOL4Base.pair.LEX_DEF"
-  "LET2_RATOR" > "HOL4Base.pair.LET2_RATOR"
-  "LET2_RAND" > "HOL4Base.pair.LET2_RAND"
-  "LAMBDA_PROD" > "Product_Type.split_eta"
-  "FST" > "Product_Type.fst_conv"
-  "FORALL_PROD" > "Product_Type.split_paired_All"
-  "EXISTS_PROD" > "Product_Type.split_paired_Ex"
-  "ELIM_UNCURRY" > "Product_Type.prod_case_beta"
-  "ELIM_PFORALL" > "HOL4Base.pair.ELIM_PFORALL"
-  "ELIM_PEXISTS" > "HOL4Base.pair.ELIM_PEXISTS"
-  "CURRY_UNCURRY_THM" > "Product_Type.curry_split"
-  "CURRY_ONE_ONE_THM" > "HOL4Base.pair.CURRY_ONE_ONE_THM"
-  "CURRY_DEF" > "Product_Type.curry_conv"
-  "CLOSED_PAIR_EQ" > "Product_Type.Pair_eq"
-  "ABS_PAIR_THM" > "Product_Type.prod.nchotomy"
-
-ignore_thms
-  "prod_TY_DEF"
-  "MK_PAIR_DEF"
-  "IS_PAIR_DEF"
-  "COMMA_DEF"
-  "ABS_REP_prod"
-
-end
--- a/src/HOL/Import/HOL/poly.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "rsquarefree" > "rsquarefree_def"
-  "poly_order" > "poly_order_def"
-  "poly_neg" > "poly_neg_primdef"
-  "poly_mul" > "poly_mul_primdef"
-  "poly_exp" > "poly_exp_primdef"
-  "poly_divides" > "poly_divides_def"
-  "poly_diff_aux" > "poly_diff_aux_primdef"
-  "poly_add" > "poly_add_primdef"
-  "poly" > "poly_primdef"
-  "normalize" > "normalize_def"
-  "diff" > "diff_def"
-  "degree" > "degree_def"
-  "##" > "##_def"
-
-const_maps
-  "rsquarefree" > "HOL4Real.poly.rsquarefree"
-  "poly_order" > "HOL4Real.poly.poly_order"
-  "poly_neg" > "HOL4Real.poly.poly_neg"
-  "poly_divides" > "HOL4Real.poly.poly_divides"
-  "diff" > "HOL4Real.poly.diff"
-  "degree" > "HOL4Real.poly.degree"
-
-thm_maps
-  "rsquarefree_def" > "HOL4Real.poly.rsquarefree_def"
-  "rsquarefree" > "HOL4Real.poly.rsquarefree"
-  "poly_order_def" > "HOL4Real.poly.poly_order_def"
-  "poly_order" > "HOL4Real.poly.poly_order"
-  "poly_neg_primdef" > "HOL4Real.poly.poly_neg_primdef"
-  "poly_neg_def" > "HOL4Real.poly.poly_neg_def"
-  "poly_mul_def" > "HOL4Real.poly.poly_mul_def"
-  "poly_exp_def" > "HOL4Real.poly.poly_exp_def"
-  "poly_divides_def" > "HOL4Real.poly.poly_divides_def"
-  "poly_divides" > "HOL4Real.poly.poly_divides"
-  "poly_diff_def" > "HOL4Real.poly.poly_diff_def"
-  "poly_diff_aux_def" > "HOL4Real.poly.poly_diff_aux_def"
-  "poly_def" > "HOL4Real.poly.poly_def"
-  "poly_cmul_def" > "HOL4Real.poly.poly_cmul_def"
-  "poly_add_def" > "HOL4Real.poly.poly_add_def"
-  "normalize" > "HOL4Real.poly.normalize"
-  "diff_def" > "HOL4Real.poly.diff_def"
-  "degree_def" > "HOL4Real.poly.degree_def"
-  "degree" > "HOL4Real.poly.degree"
-  "RSQUAREFREE_ROOTS" > "HOL4Real.poly.RSQUAREFREE_ROOTS"
-  "RSQUAREFREE_DECOMP" > "HOL4Real.poly.RSQUAREFREE_DECOMP"
-  "POLY_ZERO_LEMMA" > "HOL4Real.poly.POLY_ZERO_LEMMA"
-  "POLY_ZERO" > "HOL4Real.poly.POLY_ZERO"
-  "POLY_SQUAREFREE_DECOMP_ORDER" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP_ORDER"
-  "POLY_SQUAREFREE_DECOMP" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP"
-  "POLY_ROOTS_INDEX_LENGTH" > "HOL4Real.poly.POLY_ROOTS_INDEX_LENGTH"
-  "POLY_ROOTS_INDEX_LEMMA" > "HOL4Real.poly.POLY_ROOTS_INDEX_LEMMA"
-  "POLY_ROOTS_FINITE_SET" > "HOL4Real.poly.POLY_ROOTS_FINITE_SET"
-  "POLY_ROOTS_FINITE_LEMMA" > "HOL4Real.poly.POLY_ROOTS_FINITE_LEMMA"
-  "POLY_ROOTS_FINITE" > "HOL4Real.poly.POLY_ROOTS_FINITE"
-  "POLY_PRIME_EQ_0" > "HOL4Real.poly.POLY_PRIME_EQ_0"
-  "POLY_PRIMES" > "HOL4Real.poly.POLY_PRIMES"
-  "POLY_ORDER_EXISTS" > "HOL4Real.poly.POLY_ORDER_EXISTS"
-  "POLY_ORDER" > "HOL4Real.poly.POLY_ORDER"
-  "POLY_NORMALIZE" > "HOL4Real.poly.POLY_NORMALIZE"
-  "POLY_NEG_CLAUSES" > "HOL4Real.poly.POLY_NEG_CLAUSES"
-  "POLY_NEG" > "HOL4Real.poly.POLY_NEG"
-  "POLY_MVT" > "HOL4Real.poly.POLY_MVT"
-  "POLY_MUL_LCANCEL" > "HOL4Real.poly.POLY_MUL_LCANCEL"
-  "POLY_MUL_CLAUSES" > "HOL4Real.poly.POLY_MUL_CLAUSES"
-  "POLY_MUL_ASSOC" > "HOL4Real.poly.POLY_MUL_ASSOC"
-  "POLY_MUL" > "HOL4Real.poly.POLY_MUL"
-  "POLY_MONO" > "HOL4Real.poly.POLY_MONO"
-  "POLY_LINEAR_REM" > "HOL4Real.poly.POLY_LINEAR_REM"
-  "POLY_LINEAR_DIVIDES" > "HOL4Real.poly.POLY_LINEAR_DIVIDES"
-  "POLY_LENGTH_MUL" > "HOL4Real.poly.POLY_LENGTH_MUL"
-  "POLY_IVT_POS" > "HOL4Real.poly.POLY_IVT_POS"
-  "POLY_IVT_NEG" > "HOL4Real.poly.POLY_IVT_NEG"
-  "POLY_EXP_PRIME_EQ_0" > "HOL4Real.poly.POLY_EXP_PRIME_EQ_0"
-  "POLY_EXP_EQ_0" > "HOL4Real.poly.POLY_EXP_EQ_0"
-  "POLY_EXP_DIVIDES" > "HOL4Real.poly.POLY_EXP_DIVIDES"
-  "POLY_EXP_ADD" > "HOL4Real.poly.POLY_EXP_ADD"
-  "POLY_EXP" > "HOL4Real.poly.POLY_EXP"
-  "POLY_ENTIRE_LEMMA" > "HOL4Real.poly.POLY_ENTIRE_LEMMA"
-  "POLY_ENTIRE" > "HOL4Real.poly.POLY_ENTIRE"
-  "POLY_DIVIDES_ZERO" > "HOL4Real.poly.POLY_DIVIDES_ZERO"
-  "POLY_DIVIDES_TRANS" > "HOL4Real.poly.POLY_DIVIDES_TRANS"
-  "POLY_DIVIDES_SUB2" > "HOL4Real.poly.POLY_DIVIDES_SUB2"
-  "POLY_DIVIDES_SUB" > "HOL4Real.poly.POLY_DIVIDES_SUB"
-  "POLY_DIVIDES_REFL" > "HOL4Real.poly.POLY_DIVIDES_REFL"
-  "POLY_DIVIDES_EXP" > "HOL4Real.poly.POLY_DIVIDES_EXP"
-  "POLY_DIVIDES_ADD" > "HOL4Real.poly.POLY_DIVIDES_ADD"
-  "POLY_DIFF_ZERO" > "HOL4Real.poly.POLY_DIFF_ZERO"
-  "POLY_DIFF_WELLDEF" > "HOL4Real.poly.POLY_DIFF_WELLDEF"
-  "POLY_DIFF_NEG" > "HOL4Real.poly.POLY_DIFF_NEG"
-  "POLY_DIFF_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_MUL_LEMMA"
-  "POLY_DIFF_MUL" > "HOL4Real.poly.POLY_DIFF_MUL"
-  "POLY_DIFF_LEMMA" > "HOL4Real.poly.POLY_DIFF_LEMMA"
-  "POLY_DIFF_ISZERO" > "HOL4Real.poly.POLY_DIFF_ISZERO"
-  "POLY_DIFF_EXP_PRIME" > "HOL4Real.poly.POLY_DIFF_EXP_PRIME"
-  "POLY_DIFF_EXP" > "HOL4Real.poly.POLY_DIFF_EXP"
-  "POLY_DIFF_CMUL" > "HOL4Real.poly.POLY_DIFF_CMUL"
-  "POLY_DIFF_CLAUSES" > "HOL4Real.poly.POLY_DIFF_CLAUSES"
-  "POLY_DIFF_AUX_NEG" > "HOL4Real.poly.POLY_DIFF_AUX_NEG"
-  "POLY_DIFF_AUX_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_AUX_MUL_LEMMA"
-  "POLY_DIFF_AUX_ISZERO" > "HOL4Real.poly.POLY_DIFF_AUX_ISZERO"
-  "POLY_DIFF_AUX_CMUL" > "HOL4Real.poly.POLY_DIFF_AUX_CMUL"
-  "POLY_DIFF_AUX_ADD" > "HOL4Real.poly.POLY_DIFF_AUX_ADD"
-  "POLY_DIFF_ADD" > "HOL4Real.poly.POLY_DIFF_ADD"
-  "POLY_DIFFERENTIABLE" > "HOL4Real.poly.POLY_DIFFERENTIABLE"
-  "POLY_DIFF" > "HOL4Real.poly.POLY_DIFF"
-  "POLY_CONT" > "HOL4Real.poly.POLY_CONT"
-  "POLY_CMUL_CLAUSES" > "HOL4Real.poly.POLY_CMUL_CLAUSES"
-  "POLY_CMUL" > "HOL4Real.poly.POLY_CMUL"
-  "POLY_ADD_RZERO" > "HOL4Real.poly.POLY_ADD_RZERO"
-  "POLY_ADD_CLAUSES" > "HOL4Real.poly.POLY_ADD_CLAUSES"
-  "POLY_ADD" > "HOL4Real.poly.POLY_ADD"
-  "ORDER_UNIQUE" > "HOL4Real.poly.ORDER_UNIQUE"
-  "ORDER_THM" > "HOL4Real.poly.ORDER_THM"
-  "ORDER_ROOT" > "HOL4Real.poly.ORDER_ROOT"
-  "ORDER_POLY" > "HOL4Real.poly.ORDER_POLY"
-  "ORDER_MUL" > "HOL4Real.poly.ORDER_MUL"
-  "ORDER_DIVIDES" > "HOL4Real.poly.ORDER_DIVIDES"
-  "ORDER_DIFF" > "HOL4Real.poly.ORDER_DIFF"
-  "ORDER_DECOMP" > "HOL4Real.poly.ORDER_DECOMP"
-  "ORDER" > "HOL4Real.poly.ORDER"
-  "FINITE_LEMMA" > "HOL4Real.poly.FINITE_LEMMA"
-  "DEGREE_ZERO" > "HOL4Real.poly.DEGREE_ZERO"
-
-end
--- a/src/HOL/Import/HOL/powser.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "diffs" > "diffs_def"
-
-const_maps
-  "diffs" > "HOL4Real.powser.diffs"
-
-thm_maps
-  "diffs_def" > "HOL4Real.powser.diffs_def"
-  "diffs" > "HOL4Real.powser.diffs"
-  "TERMDIFF_LEMMA5" > "HOL4Real.powser.TERMDIFF_LEMMA5"
-  "TERMDIFF_LEMMA4" > "HOL4Real.powser.TERMDIFF_LEMMA4"
-  "TERMDIFF_LEMMA3" > "HOL4Real.powser.TERMDIFF_LEMMA3"
-  "TERMDIFF_LEMMA2" > "HOL4Real.powser.TERMDIFF_LEMMA2"
-  "TERMDIFF_LEMMA1" > "HOL4Real.powser.TERMDIFF_LEMMA1"
-  "TERMDIFF" > "HOL4Real.powser.TERMDIFF"
-  "POWSER_INSIDEA" > "HOL4Real.powser.POWSER_INSIDEA"
-  "POWSER_INSIDE" > "HOL4Real.powser.POWSER_INSIDE"
-  "POWREV" > "HOL4Real.powser.POWREV"
-  "POWDIFF_LEMMA" > "HOL4Real.powser.POWDIFF_LEMMA"
-  "POWDIFF" > "HOL4Real.powser.POWDIFF"
-  "DIFFS_NEG" > "HOL4Real.powser.DIFFS_NEG"
-  "DIFFS_LEMMA2" > "HOL4Real.powser.DIFFS_LEMMA2"
-  "DIFFS_LEMMA" > "HOL4Real.powser.DIFFS_LEMMA"
-  "DIFFS_EQUIV" > "HOL4Real.powser.DIFFS_EQUIV"
-
-end
--- a/src/HOL/Import/HOL/pred_set.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,322 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "count" > "count_primdef"
-  "UNIV" > "UNIV_def"
-  "UNION" > "UNION_def"
-  "SURJ" > "SURJ_def"
-  "SUBSET" > "SUBSET_def"
-  "SING" > "SING_def"
-  "RINV" > "RINV_def"
-  "REST" > "REST_def"
-  "PSUBSET" > "PSUBSET_def"
-  "LINV" > "LINV_def"
-  "ITSET_tupled" > "ITSET_tupled_def"
-  "ITSET" > "ITSET_def"
-  "INTER" > "INTER_def"
-  "INSERT" > "INSERT_def"
-  "INJ" > "INJ_def"
-  "INFINITE" > "INFINITE_def"
-  "IMAGE" > "IMAGE_def"
-  "GSPEC" > "GSPEC_def"
-  "FINITE" > "FINITE_def"
-  "EMPTY" > "EMPTY_def"
-  "DISJOINT" > "DISJOINT_def"
-  "DIFF" > "DIFF_def"
-  "DELETE" > "DELETE_def"
-  "CROSS" > "CROSS_def"
-  "COMPL" > "COMPL_def"
-  "CHOICE" > "CHOICE_def"
-  "CARD" > "CARD_def"
-  "BIJ" > "BIJ_def"
-  "BIGUNION" > "BIGUNION_def"
-  "BIGINTER" > "BIGINTER_def"
-
-const_maps
-  "count" > "HOL4Base.pred_set.count"
-  "UNIV" > "HOL4Base.pred_set.UNIV"
-  "UNION" > "HOL4Base.pred_set.UNION"
-  "SURJ" > "HOL4Base.pred_set.SURJ"
-  "SUBSET" > "HOL4Base.pred_set.SUBSET"
-  "SING" > "HOL4Base.pred_set.SING"
-  "REST" > "HOL4Base.pred_set.REST"
-  "PSUBSET" > "HOL4Base.pred_set.PSUBSET"
-  "ITSET_tupled" > "HOL4Base.pred_set.ITSET_tupled"
-  "ITSET" > "HOL4Base.pred_set.ITSET"
-  "INTER" > "HOL4Base.pred_set.INTER"
-  "INSERT" > "HOL4Base.pred_set.INSERT"
-  "INJ" > "HOL4Base.pred_set.INJ"
-  "INFINITE" > "HOL4Base.pred_set.INFINITE"
-  "IMAGE" > "HOL4Base.pred_set.IMAGE"
-  "FINITE" > "HOL4Base.pred_set.FINITE"
-  "EMPTY" > "HOL4Base.pred_set.EMPTY"
-  "DISJOINT" > "HOL4Base.pred_set.DISJOINT"
-  "DIFF" > "HOL4Base.pred_set.DIFF"
-  "DELETE" > "HOL4Base.pred_set.DELETE"
-  "CROSS" > "HOL4Base.pred_set.CROSS"
-  "COMPL" > "HOL4Base.pred_set.COMPL"
-  "BIJ" > "HOL4Base.pred_set.BIJ"
-  "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
-  "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
-
-thm_maps
-  "count_primdef" > "HOL4Base.pred_set.count_primdef"
-  "count_def" > "HOL4Base.pred_set.count_def"
-  "UNIV_def" > "HOL4Base.pred_set.UNIV_def"
-  "UNIV_SUBSET" > "HOL4Base.pred_set.UNIV_SUBSET"
-  "UNIV_NOT_EMPTY" > "HOL4Base.pred_set.UNIV_NOT_EMPTY"
-  "UNIV_DEF" > "HOL4Base.pred_set.UNIV_DEF"
-  "UNION_def" > "HOL4Base.pred_set.UNION_def"
-  "UNION_UNIV" > "HOL4Base.pred_set.UNION_UNIV"
-  "UNION_SUBSET" > "HOL4Base.pred_set.UNION_SUBSET"
-  "UNION_OVER_INTER" > "HOL4Base.pred_set.UNION_OVER_INTER"
-  "UNION_IDEMPOT" > "HOL4Base.pred_set.UNION_IDEMPOT"
-  "UNION_EMPTY" > "HOL4Base.pred_set.UNION_EMPTY"
-  "UNION_DEF" > "HOL4Base.pred_set.UNION_DEF"
-  "UNION_COMM" > "HOL4Base.pred_set.UNION_COMM"
-  "UNION_ASSOC" > "HOL4Base.pred_set.UNION_ASSOC"
-  "SURJ_def" > "HOL4Base.pred_set.SURJ_def"
-  "SURJ_ID" > "HOL4Base.pred_set.SURJ_ID"
-  "SURJ_EMPTY" > "HOL4Base.pred_set.SURJ_EMPTY"
-  "SURJ_DEF" > "HOL4Base.pred_set.SURJ_DEF"
-  "SURJ_COMPOSE" > "HOL4Base.pred_set.SURJ_COMPOSE"
-  "SUBSET_def" > "HOL4Base.pred_set.SUBSET_def"
-  "SUBSET_UNIV" > "HOL4Base.pred_set.SUBSET_UNIV"
-  "SUBSET_UNION_ABSORPTION" > "HOL4Base.pred_set.SUBSET_UNION_ABSORPTION"
-  "SUBSET_UNION" > "HOL4Base.pred_set.SUBSET_UNION"
-  "SUBSET_TRANS" > "HOL4Base.pred_set.SUBSET_TRANS"
-  "SUBSET_REFL" > "HOL4Base.pred_set.SUBSET_REFL"
-  "SUBSET_INTER_ABSORPTION" > "HOL4Base.pred_set.SUBSET_INTER_ABSORPTION"
-  "SUBSET_INTER" > "HOL4Base.pred_set.SUBSET_INTER"
-  "SUBSET_INSERT_DELETE" > "HOL4Base.pred_set.SUBSET_INSERT_DELETE"
-  "SUBSET_INSERT" > "HOL4Base.pred_set.SUBSET_INSERT"
-  "SUBSET_FINITE" > "HOL4Base.pred_set.SUBSET_FINITE"
-  "SUBSET_EMPTY" > "HOL4Base.pred_set.SUBSET_EMPTY"
-  "SUBSET_DELETE" > "HOL4Base.pred_set.SUBSET_DELETE"
-  "SUBSET_DEF" > "HOL4Base.pred_set.SUBSET_DEF"
-  "SUBSET_BIGINTER" > "HOL4Base.pred_set.SUBSET_BIGINTER"
-  "SUBSET_ANTISYM" > "HOL4Base.pred_set.SUBSET_ANTISYM"
-  "SPECIFICATION" > "HOL4Base.bool.IN_DEF"
-  "SING_def" > "HOL4Base.pred_set.SING_def"
-  "SING_IFF_EMPTY_REST" > "HOL4Base.pred_set.SING_IFF_EMPTY_REST"
-  "SING_IFF_CARD1" > "HOL4Base.pred_set.SING_IFF_CARD1"
-  "SING_FINITE" > "HOL4Base.pred_set.SING_FINITE"
-  "SING_DELETE" > "HOL4Base.pred_set.SING_DELETE"
-  "SING_DEF" > "HOL4Base.pred_set.SING_DEF"
-  "SING" > "HOL4Base.pred_set.SING"
-  "SET_MINIMUM" > "HOL4Base.pred_set.SET_MINIMUM"
-  "SET_CASES" > "HOL4Base.pred_set.SET_CASES"
-  "RINV_DEF" > "HOL4Base.pred_set.RINV_DEF"
-  "REST_def" > "HOL4Base.pred_set.REST_def"
-  "REST_SUBSET" > "HOL4Base.pred_set.REST_SUBSET"
-  "REST_SING" > "HOL4Base.pred_set.REST_SING"
-  "REST_PSUBSET" > "HOL4Base.pred_set.REST_PSUBSET"
-  "REST_DEF" > "HOL4Base.pred_set.REST_DEF"
-  "PSUBSET_def" > "HOL4Base.pred_set.PSUBSET_def"
-  "PSUBSET_UNIV" > "HOL4Base.pred_set.PSUBSET_UNIV"
-  "PSUBSET_TRANS" > "HOL4Base.pred_set.PSUBSET_TRANS"
-  "PSUBSET_MEMBER" > "HOL4Base.pred_set.PSUBSET_MEMBER"
-  "PSUBSET_IRREFL" > "HOL4Base.pred_set.PSUBSET_IRREFL"
-  "PSUBSET_INSERT_SUBSET" > "HOL4Base.pred_set.PSUBSET_INSERT_SUBSET"
-  "PSUBSET_FINITE" > "HOL4Base.pred_set.PSUBSET_FINITE"
-  "PSUBSET_DEF" > "HOL4Base.pred_set.PSUBSET_DEF"
-  "NUM_SET_WOP" > "HOL4Base.pred_set.NUM_SET_WOP"
-  "NOT_UNIV_PSUBSET" > "HOL4Base.pred_set.NOT_UNIV_PSUBSET"
-  "NOT_SING_EMPTY" > "HOL4Base.pred_set.NOT_SING_EMPTY"
-  "NOT_PSUBSET_EMPTY" > "HOL4Base.pred_set.NOT_PSUBSET_EMPTY"
-  "NOT_IN_FINITE" > "HOL4Base.pred_set.NOT_IN_FINITE"
-  "NOT_IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
-  "NOT_INSERT_EMPTY" > "HOL4Base.pred_set.NOT_INSERT_EMPTY"
-  "NOT_EQUAL_SETS" > "HOL4Base.pred_set.NOT_EQUAL_SETS"
-  "NOT_EMPTY_SING" > "HOL4Base.pred_set.NOT_EMPTY_SING"
-  "NOT_EMPTY_INSERT" > "HOL4Base.pred_set.NOT_EMPTY_INSERT"
-  "MEMBER_NOT_EMPTY" > "HOL4Base.pred_set.MEMBER_NOT_EMPTY"
-  "LINV_DEF" > "HOL4Base.pred_set.LINV_DEF"
-  "LESS_CARD_DIFF" > "HOL4Base.pred_set.LESS_CARD_DIFF"
-  "ITSET_tupled_primitive_def" > "HOL4Base.pred_set.ITSET_tupled_primitive_def"
-  "ITSET_tupled_def" > "HOL4Base.pred_set.ITSET_tupled_def"
-  "ITSET_def" > "HOL4Base.pred_set.ITSET_def"
-  "ITSET_curried_def" > "HOL4Base.pred_set.ITSET_curried_def"
-  "ITSET_THM" > "HOL4Base.pred_set.ITSET_THM"
-  "ITSET_IND" > "HOL4Base.pred_set.ITSET_IND"
-  "ITSET_EMPTY" > "HOL4Base.pred_set.ITSET_EMPTY"
-  "IN_UNIV" > "HOL4Base.pred_set.IN_UNIV"
-  "IN_UNION" > "HOL4Base.pred_set.IN_UNION"
-  "IN_SING" > "HOL4Base.pred_set.IN_SING"
-  "IN_INTER" > "HOL4Base.pred_set.IN_INTER"
-  "IN_INSERT" > "HOL4Base.pred_set.IN_INSERT"
-  "IN_INFINITE_NOT_FINITE" > "HOL4Base.pred_set.IN_INFINITE_NOT_FINITE"
-  "IN_IMAGE" > "HOL4Base.pred_set.IN_IMAGE"
-  "IN_DISJOINT" > "HOL4Base.pred_set.IN_DISJOINT"
-  "IN_DIFF" > "HOL4Base.pred_set.IN_DIFF"
-  "IN_DELETE_EQ" > "HOL4Base.pred_set.IN_DELETE_EQ"
-  "IN_DELETE" > "HOL4Base.pred_set.IN_DELETE"
-  "IN_CROSS" > "HOL4Base.pred_set.IN_CROSS"
-  "IN_COUNT" > "HOL4Base.pred_set.IN_COUNT"
-  "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
-  "IN_BIGUNION" > "HOL4Base.pred_set.IN_BIGUNION"
-  "IN_BIGINTER" > "HOL4Base.pred_set.IN_BIGINTER"
-  "INTER_def" > "HOL4Base.pred_set.INTER_def"
-  "INTER_UNIV" > "HOL4Base.pred_set.INTER_UNIV"
-  "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
-  "INTER_SUBSET" > "HOL4Base.pred_set.INTER_SUBSET"
-  "INTER_OVER_UNION" > "HOL4Base.pred_set.INTER_OVER_UNION"
-  "INTER_IDEMPOT" > "HOL4Base.pred_set.INTER_IDEMPOT"
-  "INTER_FINITE" > "HOL4Base.pred_set.INTER_FINITE"
-  "INTER_EMPTY" > "HOL4Base.pred_set.INTER_EMPTY"
-  "INTER_DEF" > "HOL4Base.pred_set.INTER_DEF"
-  "INTER_COMM" > "HOL4Base.pred_set.INTER_COMM"
-  "INTER_ASSOC" > "HOL4Base.pred_set.INTER_ASSOC"
-  "INSERT_def" > "HOL4Base.pred_set.INSERT_def"
-  "INSERT_UNIV" > "HOL4Base.pred_set.INSERT_UNIV"
-  "INSERT_UNION_EQ" > "HOL4Base.pred_set.INSERT_UNION_EQ"
-  "INSERT_UNION" > "HOL4Base.pred_set.INSERT_UNION"
-  "INSERT_SUBSET" > "HOL4Base.pred_set.INSERT_SUBSET"
-  "INSERT_SING_UNION" > "HOL4Base.pred_set.INSERT_SING_UNION"
-  "INSERT_INTER" > "HOL4Base.pred_set.INSERT_INTER"
-  "INSERT_INSERT" > "HOL4Base.pred_set.INSERT_INSERT"
-  "INSERT_DIFF" > "HOL4Base.pred_set.INSERT_DIFF"
-  "INSERT_DELETE" > "HOL4Base.pred_set.INSERT_DELETE"
-  "INSERT_DEF" > "HOL4Base.pred_set.INSERT_DEF"
-  "INSERT_COMM" > "HOL4Base.pred_set.INSERT_COMM"
-  "INJ_def" > "HOL4Base.pred_set.INJ_def"
-  "INJ_ID" > "HOL4Base.pred_set.INJ_ID"
-  "INJ_EMPTY" > "HOL4Base.pred_set.INJ_EMPTY"
-  "INJ_DEF" > "HOL4Base.pred_set.INJ_DEF"
-  "INJ_COMPOSE" > "HOL4Base.pred_set.INJ_COMPOSE"
-  "INFINITE_def" > "HOL4Base.pred_set.INFINITE_def"
-  "INFINITE_UNIV" > "HOL4Base.pred_set.INFINITE_UNIV"
-  "INFINITE_SUBSET" > "HOL4Base.pred_set.INFINITE_SUBSET"
-  "INFINITE_INHAB" > "HOL4Base.pred_set.INFINITE_INHAB"
-  "INFINITE_DIFF_FINITE" > "HOL4Base.pred_set.INFINITE_DIFF_FINITE"
-  "INFINITE_DEF" > "HOL4Base.pred_set.INFINITE_DEF"
-  "IMAGE_def" > "HOL4Base.pred_set.IMAGE_def"
-  "IMAGE_UNION" > "HOL4Base.pred_set.IMAGE_UNION"
-  "IMAGE_SURJ" > "HOL4Base.pred_set.IMAGE_SURJ"
-  "IMAGE_SUBSET" > "HOL4Base.pred_set.IMAGE_SUBSET"
-  "IMAGE_INTER" > "HOL4Base.pred_set.IMAGE_INTER"
-  "IMAGE_INSERT" > "HOL4Base.pred_set.IMAGE_INSERT"
-  "IMAGE_IN" > "HOL4Base.pred_set.IMAGE_IN"
-  "IMAGE_ID" > "HOL4Base.pred_set.IMAGE_ID"
-  "IMAGE_FINITE" > "HOL4Base.pred_set.IMAGE_FINITE"
-  "IMAGE_EQ_EMPTY" > "HOL4Base.pred_set.IMAGE_EQ_EMPTY"
-  "IMAGE_EMPTY" > "HOL4Base.pred_set.IMAGE_EMPTY"
-  "IMAGE_DELETE" > "HOL4Base.pred_set.IMAGE_DELETE"
-  "IMAGE_DEF" > "HOL4Base.pred_set.IMAGE_DEF"
-  "IMAGE_COMPOSE" > "HOL4Base.pred_set.IMAGE_COMPOSE"
-  "IMAGE_11_INFINITE" > "HOL4Base.pred_set.IMAGE_11_INFINITE"
-  "GSPECIFICATION" > "HOL4Base.pred_set.GSPECIFICATION"
-  "FINITE_def" > "HOL4Base.pred_set.FINITE_def"
-  "FINITE_WEAK_ENUMERATE" > "HOL4Base.pred_set.FINITE_WEAK_ENUMERATE"
-  "FINITE_UNION" > "HOL4Base.pred_set.FINITE_UNION"
-  "FINITE_SING" > "HOL4Base.pred_set.FINITE_SING"
-  "FINITE_PSUBSET_UNIV" > "HOL4Base.pred_set.FINITE_PSUBSET_UNIV"
-  "FINITE_PSUBSET_INFINITE" > "HOL4Base.pred_set.FINITE_PSUBSET_INFINITE"
-  "FINITE_ISO_NUM" > "HOL4Base.pred_set.FINITE_ISO_NUM"
-  "FINITE_INSERT" > "HOL4Base.pred_set.FINITE_INSERT"
-  "FINITE_INDUCT" > "HOL4Base.pred_set.FINITE_INDUCT"
-  "FINITE_EMPTY" > "HOL4Base.pred_set.FINITE_EMPTY"
-  "FINITE_DIFF" > "HOL4Base.pred_set.FINITE_DIFF"
-  "FINITE_DELETE" > "HOL4Base.pred_set.FINITE_DELETE"
-  "FINITE_DEF" > "HOL4Base.pred_set.FINITE_DEF"
-  "FINITE_CROSS_EQ" > "HOL4Base.pred_set.FINITE_CROSS_EQ"
-  "FINITE_CROSS" > "HOL4Base.pred_set.FINITE_CROSS"
-  "FINITE_COUNT" > "HOL4Base.pred_set.FINITE_COUNT"
-  "FINITE_COMPLETE_INDUCTION" > "HOL4Base.pred_set.FINITE_COMPLETE_INDUCTION"
-  "FINITE_BIGUNION" > "HOL4Base.pred_set.FINITE_BIGUNION"
-  "EXTENSION" > "HOL4Base.pred_set.EXTENSION"
-  "EQ_UNIV" > "HOL4Base.pred_set.EQ_UNIV"
-  "EQUAL_SING" > "HOL4Base.pred_set.EQUAL_SING"
-  "EMPTY_def" > "HOL4Base.pred_set.EMPTY_def"
-  "EMPTY_UNION" > "HOL4Base.pred_set.EMPTY_UNION"
-  "EMPTY_SUBSET" > "HOL4Base.pred_set.EMPTY_SUBSET"
-  "EMPTY_NOT_UNIV" > "HOL4Base.pred_set.EMPTY_NOT_UNIV"
-  "EMPTY_DIFF" > "HOL4Base.pred_set.EMPTY_DIFF"
-  "EMPTY_DELETE" > "HOL4Base.pred_set.EMPTY_DELETE"
-  "EMPTY_DEF" > "HOL4Base.pred_set.EMPTY_DEF"
-  "DISJOINT_def" > "HOL4Base.pred_set.DISJOINT_def"
-  "DISJOINT_UNION_BOTH" > "HOL4Base.pred_set.DISJOINT_UNION_BOTH"
-  "DISJOINT_UNION" > "HOL4Base.pred_set.DISJOINT_UNION"
-  "DISJOINT_SYM" > "HOL4Base.pred_set.DISJOINT_SYM"
-  "DISJOINT_SING_EMPTY" > "HOL4Base.pred_set.DISJOINT_SING_EMPTY"
-  "DISJOINT_INSERT" > "HOL4Base.pred_set.DISJOINT_INSERT"
-  "DISJOINT_EMPTY_REFL" > "HOL4Base.pred_set.DISJOINT_EMPTY_REFL"
-  "DISJOINT_EMPTY" > "HOL4Base.pred_set.DISJOINT_EMPTY"
-  "DISJOINT_DELETE_SYM" > "HOL4Base.pred_set.DISJOINT_DELETE_SYM"
-  "DISJOINT_DEF" > "HOL4Base.pred_set.DISJOINT_DEF"
-  "DISJOINT_BIGUNION" > "HOL4Base.pred_set.DISJOINT_BIGUNION"
-  "DISJOINT_BIGINTER" > "HOL4Base.pred_set.DISJOINT_BIGINTER"
-  "DIFF_def" > "HOL4Base.pred_set.DIFF_def"
-  "DIFF_UNIV" > "HOL4Base.pred_set.DIFF_UNIV"
-  "DIFF_INSERT" > "HOL4Base.pred_set.DIFF_INSERT"
-  "DIFF_EQ_EMPTY" > "HOL4Base.pred_set.DIFF_EQ_EMPTY"
-  "DIFF_EMPTY" > "HOL4Base.pred_set.DIFF_EMPTY"
-  "DIFF_DIFF" > "HOL4Base.pred_set.DIFF_DIFF"
-  "DIFF_DEF" > "HOL4Base.pred_set.DIFF_DEF"
-  "DELETE_def" > "HOL4Base.pred_set.DELETE_def"
-  "DELETE_SUBSET" > "HOL4Base.pred_set.DELETE_SUBSET"
-  "DELETE_NON_ELEMENT" > "HOL4Base.pred_set.DELETE_NON_ELEMENT"
-  "DELETE_INTER" > "HOL4Base.pred_set.DELETE_INTER"
-  "DELETE_INSERT" > "HOL4Base.pred_set.DELETE_INSERT"
-  "DELETE_EQ_SING" > "HOL4Base.pred_set.DELETE_EQ_SING"
-  "DELETE_DELETE" > "HOL4Base.pred_set.DELETE_DELETE"
-  "DELETE_DEF" > "HOL4Base.pred_set.DELETE_DEF"
-  "DELETE_COMM" > "HOL4Base.pred_set.DELETE_COMM"
-  "DECOMPOSITION" > "HOL4Base.pred_set.DECOMPOSITION"
-  "CROSS_def" > "HOL4Base.pred_set.CROSS_def"
-  "CROSS_SUBSET" > "HOL4Base.pred_set.CROSS_SUBSET"
-  "CROSS_SINGS" > "HOL4Base.pred_set.CROSS_SINGS"
-  "CROSS_INSERT_RIGHT" > "HOL4Base.pred_set.CROSS_INSERT_RIGHT"
-  "CROSS_INSERT_LEFT" > "HOL4Base.pred_set.CROSS_INSERT_LEFT"
-  "CROSS_EMPTY" > "HOL4Base.pred_set.CROSS_EMPTY"
-  "CROSS_DEF" > "HOL4Base.pred_set.CROSS_DEF"
-  "COUNT_ZERO" > "HOL4Base.pred_set.COUNT_ZERO"
-  "COUNT_SUC" > "HOL4Base.pred_set.COUNT_SUC"
-  "COMPONENT" > "HOL4Base.pred_set.COMPONENT"
-  "COMPL_def" > "HOL4Base.pred_set.COMPL_def"
-  "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
-  "COMPL_EMPTY" > "HOL4Base.pred_set.COMPL_EMPTY"
-  "COMPL_DEF" > "HOL4Base.pred_set.COMPL_DEF"
-  "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
-  "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
-  "CHOICE_SING" > "HOL4Base.pred_set.CHOICE_SING"
-  "CHOICE_NOT_IN_REST" > "HOL4Base.pred_set.CHOICE_NOT_IN_REST"
-  "CHOICE_INSERT_REST" > "HOL4Base.pred_set.CHOICE_INSERT_REST"
-  "CHOICE_DEF" > "HOL4Base.pred_set.CHOICE_DEF"
-  "CARD_UNION" > "HOL4Base.pred_set.CARD_UNION"
-  "CARD_SUBSET" > "HOL4Base.pred_set.CARD_SUBSET"
-  "CARD_SING_CROSS" > "HOL4Base.pred_set.CARD_SING_CROSS"
-  "CARD_SING" > "HOL4Base.pred_set.CARD_SING"
-  "CARD_PSUBSET" > "HOL4Base.pred_set.CARD_PSUBSET"
-  "CARD_INTER_LESS_EQ" > "HOL4Base.pred_set.CARD_INTER_LESS_EQ"
-  "CARD_INSERT" > "HOL4Base.pred_set.CARD_INSERT"
-  "CARD_EQ_0" > "HOL4Base.pred_set.CARD_EQ_0"
-  "CARD_EMPTY" > "HOL4Base.pred_set.CARD_EMPTY"
-  "CARD_DIFF" > "HOL4Base.pred_set.CARD_DIFF"
-  "CARD_DELETE" > "HOL4Base.pred_set.CARD_DELETE"
-  "CARD_DEF" > "HOL4Base.pred_set.CARD_DEF"
-  "CARD_CROSS" > "HOL4Base.pred_set.CARD_CROSS"
-  "CARD_COUNT" > "HOL4Base.pred_set.CARD_COUNT"
-  "BIJ_def" > "HOL4Base.pred_set.BIJ_def"
-  "BIJ_ID" > "HOL4Base.pred_set.BIJ_ID"
-  "BIJ_EMPTY" > "HOL4Base.pred_set.BIJ_EMPTY"
-  "BIJ_DEF" > "HOL4Base.pred_set.BIJ_DEF"
-  "BIJ_COMPOSE" > "HOL4Base.pred_set.BIJ_COMPOSE"
-  "BIGUNION_def" > "HOL4Base.pred_set.BIGUNION_def"
-  "BIGUNION_UNION" > "HOL4Base.pred_set.BIGUNION_UNION"
-  "BIGUNION_SUBSET" > "HOL4Base.pred_set.BIGUNION_SUBSET"
-  "BIGUNION_SING" > "HOL4Base.pred_set.BIGUNION_SING"
-  "BIGUNION_INSERT" > "HOL4Base.pred_set.BIGUNION_INSERT"
-  "BIGUNION_EMPTY" > "HOL4Base.pred_set.BIGUNION_EMPTY"
-  "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
-  "BIGINTER_def" > "HOL4Base.pred_set.BIGINTER_def"
-  "BIGINTER_SING" > "HOL4Base.pred_set.BIGINTER_SING"
-  "BIGINTER_INTER" > "HOL4Base.pred_set.BIGINTER_INTER"
-  "BIGINTER_INSERT" > "HOL4Base.pred_set.BIGINTER_INSERT"
-  "BIGINTER_EMPTY" > "HOL4Base.pred_set.BIGINTER_EMPTY"
-  "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
-  "ABSORPTION" > "HOL4Base.pred_set.ABSORPTION"
-
-end
--- a/src/HOL/Import/HOL/prim_rec.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "wellfounded" > "wellfounded_primdef"
-  "measure" > "measure_primdef"
-  "SIMP_REC_REL" > "SIMP_REC_REL_def"
-  "SIMP_REC" > "SIMP_REC_def"
-  "PRIM_REC_FUN" > "PRIM_REC_FUN_def"
-  "PRIM_REC" > "PRIM_REC_def"
-  "PRE" > "PRE_def"
-
-const_maps
-  "wellfounded" > "HOL4Base.prim_rec.wellfounded"
-  "measure" > "HOL4Base.prim_rec.measure"
-  "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
-  "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
-  "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
-  "PRE" > "HOL4Base.prim_rec.PRE"
-  "<" > "Orderings.ord_class.less" :: "nat => nat => bool"
-
-thm_maps
-  "wellfounded_primdef" > "HOL4Base.prim_rec.wellfounded_primdef"
-  "wellfounded_def" > "HOL4Base.prim_rec.wellfounded_def"
-  "num_Axiom_old" > "HOL4Base.prim_rec.num_Axiom_old"
-  "num_Axiom" > "HOL4Base.prim_rec.num_Axiom"
-  "measure_thm" > "HOL4Base.prim_rec.measure_thm"
-  "measure_primdef" > "HOL4Base.prim_rec.measure_primdef"
-  "measure_def" > "HOL4Base.prim_rec.measure_def"
-  "WF_measure" > "HOL4Base.prim_rec.WF_measure"
-  "WF_PRED" > "HOL4Base.prim_rec.WF_PRED"
-  "WF_LESS" > "HOL4Base.prim_rec.WF_LESS"
-  "WF_IFF_WELLFOUNDED" > "HOL4Base.prim_rec.WF_IFF_WELLFOUNDED"
-  "SUC_LESS" > "Nat.Suc_lessD"
-  "SUC_ID" > "Nat.Suc_n_not_n"
-  "SIMP_REC_THM" > "HOL4Base.prim_rec.SIMP_REC_THM"
-  "SIMP_REC_REL_def" > "HOL4Base.prim_rec.SIMP_REC_REL_def"
-  "SIMP_REC_REL_UNIQUE_RESULT" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE_RESULT"
-  "SIMP_REC_REL_UNIQUE" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE"
-  "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
-  "SIMP_REC_EXISTS" > "HOL4Base.prim_rec.SIMP_REC_EXISTS"
-  "SIMP_REC" > "HOL4Base.prim_rec.SIMP_REC"
-  "PRIM_REC_def" > "HOL4Base.prim_rec.PRIM_REC_def"
-  "PRIM_REC_THM" > "HOL4Base.prim_rec.PRIM_REC_THM"
-  "PRIM_REC_FUN_def" > "HOL4Base.prim_rec.PRIM_REC_FUN_def"
-  "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
-  "PRIM_REC_EQN" > "HOL4Base.prim_rec.PRIM_REC_EQN"
-  "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
-  "PRE_def" > "HOL4Base.prim_rec.PRE_def"
-  "PRE_DEF" > "HOL4Base.prim_rec.PRE_DEF"
-  "PRE" > "HOL4Base.prim_rec.PRE"
-  "NOT_LESS_EQ" > "HOL4Base.prim_rec.NOT_LESS_EQ"
-  "NOT_LESS_0" > "Nat.not_less0"
-  "LESS_THM" > "HOL4Base.prim_rec.LESS_THM"
-  "LESS_SUC_SUC" > "HOL4Base.prim_rec.LESS_SUC_SUC"
-  "LESS_SUC_REFL" > "Nat.lessI"
-  "LESS_SUC_IMP" > "HOL4Base.prim_rec.LESS_SUC_IMP"
-  "LESS_SUC" > "Nat.less_SucI"
-  "LESS_REFL" > "Nat.less_not_refl"
-  "LESS_NOT_EQ" > "Nat.less_not_refl3"
-  "LESS_MONO" > "Nat.Suc_mono"
-  "LESS_LEMMA2" > "HOL4Base.prim_rec.LESS_LEMMA2"
-  "LESS_LEMMA1" > "HOL4Base.prim_rec.LESS_LEMMA1"
-  "LESS_DEF" > "HOL4Compat.LESS_DEF"
-  "LESS_0_0" > "HOL4Base.prim_rec.LESS_0_0"
-  "LESS_0" > "Nat.zero_less_Suc"
-  "INV_SUC_EQ" > "Nat.nat.inject"
-  "EQ_LESS" > "HOL4Base.prim_rec.EQ_LESS"
-  "DC" > "HOL4Base.prim_rec.DC"
-
-end
--- a/src/HOL/Import/HOL/prime.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "prime" > "prime_primdef"
-
-const_maps
-  "prime" > "HOL4Base.prime.prime"
-
-thm_maps
-  "prime_primdef" > "HOL4Base.prime.prime_primdef"
-  "prime_def" > "HOL4Base.prime.prime_def"
-  "NOT_PRIME_1" > "HOL4Base.prime.NOT_PRIME_1"
-  "NOT_PRIME_0" > "HOL4Base.prime.NOT_PRIME_0"
-
-end
--- a/src/HOL/Import/HOL/prob.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "prob" > "prob_primdef"
-  "algebra_measure" > "algebra_measure_primdef"
-  "alg_measure" > "alg_measure_primdef"
-
-const_maps
-  "prob" > "HOL4Prob.prob.prob"
-  "algebra_measure" > "HOL4Prob.prob.algebra_measure"
-
-thm_maps
-  "prob_primdef" > "HOL4Prob.prob.prob_primdef"
-  "prob_def" > "HOL4Prob.prob.prob_def"
-  "algebra_measure_primdef" > "HOL4Prob.prob.algebra_measure_primdef"
-  "algebra_measure_def" > "HOL4Prob.prob.algebra_measure_def"
-  "alg_measure_def" > "HOL4Prob.prob.alg_measure_def"
-  "X_LE_PROB" > "HOL4Prob.prob.X_LE_PROB"
-  "PROB_SUP_EXISTS2" > "HOL4Prob.prob.PROB_SUP_EXISTS2"
-  "PROB_SUP_EXISTS1" > "HOL4Prob.prob.PROB_SUP_EXISTS1"
-  "PROB_SUBSET_MONO" > "HOL4Prob.prob.PROB_SUBSET_MONO"
-  "PROB_STL" > "HOL4Prob.prob.PROB_STL"
-  "PROB_SHD" > "HOL4Prob.prob.PROB_SHD"
-  "PROB_SDROP" > "HOL4Prob.prob.PROB_SDROP"
-  "PROB_RANGE" > "HOL4Prob.prob.PROB_RANGE"
-  "PROB_POS" > "HOL4Prob.prob.PROB_POS"
-  "PROB_MAX" > "HOL4Prob.prob.PROB_MAX"
-  "PROB_LE_X" > "HOL4Prob.prob.PROB_LE_X"
-  "PROB_INTER_SHD" > "HOL4Prob.prob.PROB_INTER_SHD"
-  "PROB_INTER_HALVES" > "HOL4Prob.prob.PROB_INTER_HALVES"
-  "PROB_COMPL_LE1" > "HOL4Prob.prob.PROB_COMPL_LE1"
-  "PROB_COMPL" > "HOL4Prob.prob.PROB_COMPL"
-  "PROB_BASIC" > "HOL4Prob.prob.PROB_BASIC"
-  "PROB_ALGEBRA" > "HOL4Prob.prob.PROB_ALGEBRA"
-  "PROB_ALG" > "HOL4Prob.prob.PROB_ALG"
-  "PROB_ADDITIVE" > "HOL4Prob.prob.PROB_ADDITIVE"
-  "ALG_TWINS_MEASURE" > "HOL4Prob.prob.ALG_TWINS_MEASURE"
-  "ALG_MEASURE_TLS" > "HOL4Prob.prob.ALG_MEASURE_TLS"
-  "ALG_MEASURE_POS" > "HOL4Prob.prob.ALG_MEASURE_POS"
-  "ALG_MEASURE_COMPL" > "HOL4Prob.prob.ALG_MEASURE_COMPL"
-  "ALG_MEASURE_BASIC" > "HOL4Prob.prob.ALG_MEASURE_BASIC"
-  "ALG_MEASURE_APPEND" > "HOL4Prob.prob.ALG_MEASURE_APPEND"
-  "ALG_MEASURE_ADDITIVE" > "HOL4Prob.prob.ALG_MEASURE_ADDITIVE"
-  "ALG_CANON_PREFS_MONO" > "HOL4Prob.prob.ALG_CANON_PREFS_MONO"
-  "ALG_CANON_MONO" > "HOL4Prob.prob.ALG_CANON_MONO"
-  "ALG_CANON_MERGE_MONO" > "HOL4Prob.prob.ALG_CANON_MERGE_MONO"
-  "ALG_CANON_FIND_MONO" > "HOL4Prob.prob.ALG_CANON_FIND_MONO"
-  "ALG_CANON2_MONO" > "HOL4Prob.prob.ALG_CANON2_MONO"
-  "ALG_CANON1_MONO" > "HOL4Prob.prob.ALG_CANON1_MONO"
-  "ALGEBRA_MEASURE_RANGE" > "HOL4Prob.prob.ALGEBRA_MEASURE_RANGE"
-  "ALGEBRA_MEASURE_POS" > "HOL4Prob.prob.ALGEBRA_MEASURE_POS"
-  "ALGEBRA_MEASURE_MONO_EMBED" > "HOL4Prob.prob.ALGEBRA_MEASURE_MONO_EMBED"
-  "ALGEBRA_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_MEASURE_MAX"
-  "ALGEBRA_MEASURE_DEF_ALT" > "HOL4Prob.prob.ALGEBRA_MEASURE_DEF_ALT"
-  "ALGEBRA_MEASURE_BASIC" > "HOL4Prob.prob.ALGEBRA_MEASURE_BASIC"
-  "ALGEBRA_CANON_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_CANON_MEASURE_MAX"
-  "ABS_PROB" > "HOL4Prob.prob.ABS_PROB"
-
-end
--- a/src/HOL/Import/HOL/prob_algebra.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "measurable" > "measurable_primdef"
-  "algebra_embed" > "algebra_embed_primdef"
-  "alg_embed" > "alg_embed_primdef"
-
-const_maps
-  "measurable" > "HOL4Prob.prob_algebra.measurable"
-
-thm_maps
-  "measurable_primdef" > "HOL4Prob.prob_algebra.measurable_primdef"
-  "measurable_def" > "HOL4Prob.prob_algebra.measurable_def"
-  "algebra_embed_def" > "HOL4Prob.prob_algebra.algebra_embed_def"
-  "alg_embed_def" > "HOL4Prob.prob_algebra.alg_embed_def"
-  "MEASURABLE_UNION" > "HOL4Prob.prob_algebra.MEASURABLE_UNION"
-  "MEASURABLE_STL" > "HOL4Prob.prob_algebra.MEASURABLE_STL"
-  "MEASURABLE_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_SHD"
-  "MEASURABLE_SDROP" > "HOL4Prob.prob_algebra.MEASURABLE_SDROP"
-  "MEASURABLE_INTER_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_SHD"
-  "MEASURABLE_INTER_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_HALVES"
-  "MEASURABLE_INTER" > "HOL4Prob.prob_algebra.MEASURABLE_INTER"
-  "MEASURABLE_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_HALVES"
-  "MEASURABLE_COMPL" > "HOL4Prob.prob_algebra.MEASURABLE_COMPL"
-  "MEASURABLE_BASIC" > "HOL4Prob.prob_algebra.MEASURABLE_BASIC"
-  "MEASURABLE_ALGEBRA" > "HOL4Prob.prob_algebra.MEASURABLE_ALGEBRA"
-  "INTER_STL" > "HOL4Prob.prob_algebra.INTER_STL"
-  "HALVES_INTER" > "HOL4Prob.prob_algebra.HALVES_INTER"
-  "COMPL_SHD" > "HOL4Prob.prob_algebra.COMPL_SHD"
-  "ALG_EMBED_TWINS" > "HOL4Prob.prob_algebra.ALG_EMBED_TWINS"
-  "ALG_EMBED_PREFIX_SUBSET" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX_SUBSET"
-  "ALG_EMBED_PREFIX" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX"
-  "ALG_EMBED_POPULATED" > "HOL4Prob.prob_algebra.ALG_EMBED_POPULATED"
-  "ALG_EMBED_NIL" > "HOL4Prob.prob_algebra.ALG_EMBED_NIL"
-  "ALG_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALG_EMBED_BASIC"
-  "ALG_CANON_REP" > "HOL4Prob.prob_algebra.ALG_CANON_REP"
-  "ALG_CANON_PREFS_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_PREFS_EMBED"
-  "ALG_CANON_MERGE_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_MERGE_EMBED"
-  "ALG_CANON_FIND_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_FIND_EMBED"
-  "ALG_CANON_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_EMBED"
-  "ALG_CANON2_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON2_EMBED"
-  "ALG_CANON1_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON1_EMBED"
-  "ALGEBRA_EMBED_TLS" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_TLS"
-  "ALGEBRA_EMBED_MEM" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_MEM"
-  "ALGEBRA_EMBED_COMPL" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_COMPL"
-  "ALGEBRA_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_BASIC"
-  "ALGEBRA_EMBED_APPEND" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_APPEND"
-  "ALGEBRA_CANON_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_UNIV"
-  "ALGEBRA_CANON_EMBED_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_UNIV"
-  "ALGEBRA_CANON_EMBED_EMPTY" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_EMPTY"
-
-end
--- a/src/HOL/Import/HOL/prob_canon.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "algebra_canon" > "algebra_canon_primdef"
-  "alg_twinfree" > "alg_twinfree_primdef"
-  "alg_twin" > "alg_twin_primdef"
-  "alg_sorted" > "alg_sorted_primdef"
-  "alg_prefixfree" > "alg_prefixfree_primdef"
-  "alg_order_tupled" > "alg_order_tupled_def"
-  "alg_order" > "alg_order_primdef"
-  "alg_longest" > "alg_longest_primdef"
-  "alg_canon_prefs" > "alg_canon_prefs_primdef"
-  "alg_canon_merge" > "alg_canon_merge_primdef"
-  "alg_canon_find" > "alg_canon_find_primdef"
-  "alg_canon2" > "alg_canon2_primdef"
-  "alg_canon1" > "alg_canon1_primdef"
-  "alg_canon" > "alg_canon_primdef"
-
-const_maps
-  "algebra_canon" > "HOL4Prob.prob_canon.algebra_canon"
-  "alg_twinfree" > "HOL4Prob.prob_canon.alg_twinfree"
-  "alg_twin" > "HOL4Prob.prob_canon.alg_twin"
-  "alg_sorted" > "HOL4Prob.prob_canon.alg_sorted"
-  "alg_prefixfree" > "HOL4Prob.prob_canon.alg_prefixfree"
-  "alg_order_tupled" > "HOL4Prob.prob_canon.alg_order_tupled"
-  "alg_order" > "HOL4Prob.prob_canon.alg_order"
-  "alg_longest" > "HOL4Prob.prob_canon.alg_longest"
-  "alg_canon2" > "HOL4Prob.prob_canon.alg_canon2"
-  "alg_canon1" > "HOL4Prob.prob_canon.alg_canon1"
-  "alg_canon" > "HOL4Prob.prob_canon.alg_canon"
-
-thm_maps
-  "algebra_canon_primdef" > "HOL4Prob.prob_canon.algebra_canon_primdef"
-  "algebra_canon_def" > "HOL4Prob.prob_canon.algebra_canon_def"
-  "alg_twinfree_primitive_def" > "HOL4Prob.prob_canon.alg_twinfree_primitive_def"
-  "alg_twinfree_primdef" > "HOL4Prob.prob_canon.alg_twinfree_primdef"
-  "alg_twinfree_ind" > "HOL4Prob.prob_canon.alg_twinfree_ind"
-  "alg_twinfree_def" > "HOL4Prob.prob_canon.alg_twinfree_def"
-  "alg_twin_primdef" > "HOL4Prob.prob_canon.alg_twin_primdef"
-  "alg_twin_def" > "HOL4Prob.prob_canon.alg_twin_def"
-  "alg_sorted_primitive_def" > "HOL4Prob.prob_canon.alg_sorted_primitive_def"
-  "alg_sorted_primdef" > "HOL4Prob.prob_canon.alg_sorted_primdef"
-  "alg_sorted_ind" > "HOL4Prob.prob_canon.alg_sorted_ind"
-  "alg_sorted_def" > "HOL4Prob.prob_canon.alg_sorted_def"
-  "alg_prefixfree_primitive_def" > "HOL4Prob.prob_canon.alg_prefixfree_primitive_def"
-  "alg_prefixfree_primdef" > "HOL4Prob.prob_canon.alg_prefixfree_primdef"
-  "alg_prefixfree_ind" > "HOL4Prob.prob_canon.alg_prefixfree_ind"
-  "alg_prefixfree_def" > "HOL4Prob.prob_canon.alg_prefixfree_def"
-  "alg_order_tupled_primitive_def" > "HOL4Prob.prob_canon.alg_order_tupled_primitive_def"
-  "alg_order_tupled_def" > "HOL4Prob.prob_canon.alg_order_tupled_def"
-  "alg_order_primdef" > "HOL4Prob.prob_canon.alg_order_primdef"
-  "alg_order_ind" > "HOL4Prob.prob_canon.alg_order_ind"
-  "alg_order_def" > "HOL4Prob.prob_canon.alg_order_def"
-  "alg_order_curried_def" > "HOL4Prob.prob_canon.alg_order_curried_def"
-  "alg_longest_primdef" > "HOL4Prob.prob_canon.alg_longest_primdef"
-  "alg_longest_def" > "HOL4Prob.prob_canon.alg_longest_def"
-  "alg_canon_primdef" > "HOL4Prob.prob_canon.alg_canon_primdef"
-  "alg_canon_prefs_def" > "HOL4Prob.prob_canon.alg_canon_prefs_def"
-  "alg_canon_merge_def" > "HOL4Prob.prob_canon.alg_canon_merge_def"
-  "alg_canon_find_def" > "HOL4Prob.prob_canon.alg_canon_find_def"
-  "alg_canon_def" > "HOL4Prob.prob_canon.alg_canon_def"
-  "alg_canon2_primdef" > "HOL4Prob.prob_canon.alg_canon2_primdef"
-  "alg_canon2_def" > "HOL4Prob.prob_canon.alg_canon2_def"
-  "alg_canon1_primdef" > "HOL4Prob.prob_canon.alg_canon1_primdef"
-  "alg_canon1_def" > "HOL4Prob.prob_canon.alg_canon1_def"
-  "MEM_NIL_STEP" > "HOL4Prob.prob_canon.MEM_NIL_STEP"
-  "ALG_TWIN_SING" > "HOL4Prob.prob_canon.ALG_TWIN_SING"
-  "ALG_TWIN_REDUCE" > "HOL4Prob.prob_canon.ALG_TWIN_REDUCE"
-  "ALG_TWIN_NIL" > "HOL4Prob.prob_canon.ALG_TWIN_NIL"
-  "ALG_TWIN_CONS" > "HOL4Prob.prob_canon.ALG_TWIN_CONS"
-  "ALG_TWINS_PREFIX" > "HOL4Prob.prob_canon.ALG_TWINS_PREFIX"
-  "ALG_TWINFREE_TLS" > "HOL4Prob.prob_canon.ALG_TWINFREE_TLS"
-  "ALG_TWINFREE_TL" > "HOL4Prob.prob_canon.ALG_TWINFREE_TL"
-  "ALG_TWINFREE_STEP2" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP2"
-  "ALG_TWINFREE_STEP1" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP1"
-  "ALG_TWINFREE_STEP" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP"
-  "ALG_SORTED_TLS" > "HOL4Prob.prob_canon.ALG_SORTED_TLS"
-  "ALG_SORTED_TL" > "HOL4Prob.prob_canon.ALG_SORTED_TL"
-  "ALG_SORTED_STEP" > "HOL4Prob.prob_canon.ALG_SORTED_STEP"
-  "ALG_SORTED_PREFIXFREE_MEM_NIL" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_MEM_NIL"
-  "ALG_SORTED_PREFIXFREE_EQUALITY" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_EQUALITY"
-  "ALG_SORTED_MONO" > "HOL4Prob.prob_canon.ALG_SORTED_MONO"
-  "ALG_SORTED_MIN" > "HOL4Prob.prob_canon.ALG_SORTED_MIN"
-  "ALG_SORTED_FILTER" > "HOL4Prob.prob_canon.ALG_SORTED_FILTER"
-  "ALG_SORTED_DEF_ALT" > "HOL4Prob.prob_canon.ALG_SORTED_DEF_ALT"
-  "ALG_SORTED_APPEND" > "HOL4Prob.prob_canon.ALG_SORTED_APPEND"
-  "ALG_PREFIXFREE_TLS" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TLS"
-  "ALG_PREFIXFREE_TL" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TL"
-  "ALG_PREFIXFREE_STEP" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_STEP"
-  "ALG_PREFIXFREE_MONO" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_MONO"
-  "ALG_PREFIXFREE_FILTER" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_FILTER"
-  "ALG_PREFIXFREE_ELT" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_ELT"
-  "ALG_PREFIXFREE_APPEND" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_APPEND"
-  "ALG_ORDER_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_TRANS"
-  "ALG_ORDER_TOTAL" > "HOL4Prob.prob_canon.ALG_ORDER_TOTAL"
-  "ALG_ORDER_SNOC" > "HOL4Prob.prob_canon.ALG_ORDER_SNOC"
-  "ALG_ORDER_REFL" > "HOL4Prob.prob_canon.ALG_ORDER_REFL"
-  "ALG_ORDER_PREFIX_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_TRANS"
-  "ALG_ORDER_PREFIX_MONO" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_MONO"
-  "ALG_ORDER_PREFIX_ANTI" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_ANTI"
-  "ALG_ORDER_PREFIX" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX"
-  "ALG_ORDER_NIL" > "HOL4Prob.prob_canon.ALG_ORDER_NIL"
-  "ALG_ORDER_ANTISYM" > "HOL4Prob.prob_canon.ALG_ORDER_ANTISYM"
-  "ALG_LONGEST_TLS" > "HOL4Prob.prob_canon.ALG_LONGEST_TLS"
-  "ALG_LONGEST_TL" > "HOL4Prob.prob_canon.ALG_LONGEST_TL"
-  "ALG_LONGEST_HD" > "HOL4Prob.prob_canon.ALG_LONGEST_HD"
-  "ALG_LONGEST_APPEND" > "HOL4Prob.prob_canon.ALG_LONGEST_APPEND"
-  "ALG_CANON_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_SORTED_PREFIXFREE_TWINFREE"
-  "ALG_CANON_PREFS_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_SORTED"
-  "ALG_CANON_PREFS_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_PREFIXFREE"
-  "ALG_CANON_PREFS_HD" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_HD"
-  "ALG_CANON_PREFS_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_DELETES"
-  "ALG_CANON_PREFS_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_CONSTANT"
-  "ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE"
-  "ALG_CANON_MERGE_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SHORTENS"
-  "ALG_CANON_MERGE_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_PREFIXFREE_PRESERVE"
-  "ALG_CANON_MERGE_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_CONSTANT"
-  "ALG_CANON_IDEMPOT" > "HOL4Prob.prob_canon.ALG_CANON_IDEMPOT"
-  "ALG_CANON_FIND_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_FIND_SORTED"
-  "ALG_CANON_FIND_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_FIND_PREFIXFREE"
-  "ALG_CANON_FIND_HD" > "HOL4Prob.prob_canon.ALG_CANON_FIND_HD"
-  "ALG_CANON_FIND_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_FIND_DELETES"
-  "ALG_CANON_FIND_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_FIND_CONSTANT"
-  "ALG_CANON_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_CONSTANT"
-  "ALG_CANON_BASIC" > "HOL4Prob.prob_canon.ALG_CANON_BASIC"
-  "ALG_CANON2_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON2_SORTED_PREFIXFREE_TWINFREE"
-  "ALG_CANON2_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON2_SHORTENS"
-  "ALG_CANON2_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON2_PREFIXFREE_PRESERVE"
-  "ALG_CANON2_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON2_CONSTANT"
-  "ALG_CANON1_SORTED" > "HOL4Prob.prob_canon.ALG_CANON1_SORTED"
-  "ALG_CANON1_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON1_PREFIXFREE"
-  "ALG_CANON1_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON1_CONSTANT"
-  "ALGEBRA_CANON_TLS" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TLS"
-  "ALGEBRA_CANON_TL" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TL"
-  "ALGEBRA_CANON_STEP2" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP2"
-  "ALGEBRA_CANON_STEP1" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP1"
-  "ALGEBRA_CANON_STEP" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP"
-  "ALGEBRA_CANON_NIL_MEM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_NIL_MEM"
-  "ALGEBRA_CANON_INDUCTION" > "HOL4Prob.prob_canon.ALGEBRA_CANON_INDUCTION"
-  "ALGEBRA_CANON_DEF_ALT" > "HOL4Prob.prob_canon.ALGEBRA_CANON_DEF_ALT"
-  "ALGEBRA_CANON_CASES_THM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES_THM"
-  "ALGEBRA_CANON_CASES" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES"
-  "ALGEBRA_CANON_BASIC" > "HOL4Prob.prob_canon.ALGEBRA_CANON_BASIC"
-
-end
--- a/src/HOL/Import/HOL/prob_extra.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "inf" > "inf_primdef"
-
-const_maps
-  "inf" > "HOL4Prob.prob_extra.inf"
-  "COMPL" > "HOL4Base.pred_set.COMPL"
-
-thm_maps
-  "inf_primdef" > "HOL4Prob.prob_extra.inf_primdef"
-  "inf_def" > "HOL4Prob.prob_extra.inf_def"
-  "X_HALF_HALF" > "HOL4Prob.prob_extra.X_HALF_HALF"
-  "UNION_DISJOINT_SPLIT" > "HOL4Prob.prob_extra.UNION_DISJOINT_SPLIT"
-  "UNION_DEF_ALT" > "HOL4Prob.prob_extra.UNION_DEF_ALT"
-  "SUBSET_EQ_DECOMP" > "HOL4Base.pred_set.SUBSET_ANTISYM"
-  "SUBSET_EQ" > "HOL4Prob.prob_extra.SUBSET_EQ"
-  "SET_EQ_EXT" > "HOL4Base.pred_set.EXTENSION"
-  "REAL_X_LE_SUP" > "HOL4Prob.prob_extra.REAL_X_LE_SUP"
-  "REAL_SUP_MAX" > "HOL4Prob.prob_extra.REAL_SUP_MAX"
-  "REAL_SUP_LE_X" > "HOL4Prob.prob_extra.REAL_SUP_LE_X"
-  "REAL_SUP_EXISTS_UNIQUE" > "HOL4Prob.prob_extra.REAL_SUP_EXISTS_UNIQUE"
-  "REAL_POW" > "RealDef.power_real_of_nat"
-  "REAL_LE_INV_LE" > "Fields.linordered_field_class.le_imp_inverse_le"
-  "REAL_LE_EQ" > "Orderings.order_antisym"
-  "REAL_INVINV_ALL" > "Fields.division_ring_inverse_zero_class.inverse_inverse_eq"
-  "REAL_INF_MIN" > "HOL4Prob.prob_extra.REAL_INF_MIN"
-  "RAND_THM" > "HOL.arg_cong"
-  "POW_HALF_TWICE" > "HOL4Prob.prob_extra.POW_HALF_TWICE"
-  "POW_HALF_POS" > "HOL4Prob.prob_extra.POW_HALF_POS"
-  "POW_HALF_MONO" > "HOL4Prob.prob_extra.POW_HALF_MONO"
-  "POW_HALF_EXP" > "HOL4Prob.prob_extra.POW_HALF_EXP"
-  "ONE_MINUS_HALF" > "HOL4Prob.prob_extra.ONE_MINUS_HALF"
-  "MOD_TWO" > "HOL4Prob.prob_extra.MOD_TWO"
-  "MEM_NIL_MAP_CONS" > "HOL4Prob.prob_extra.MEM_NIL_MAP_CONS"
-  "MEM_NIL" > "HOL4Prob.prob_extra.MEM_NIL"
-  "MEM_FILTER" > "HOL4Prob.prob_extra.MEM_FILTER"
-  "MAP_MEM" > "HOL4Prob.prob_extra.MAP_MEM"
-  "MAP_ID" > "List.map_ident"
-  "LENGTH_FILTER" > "List.length_filter_le"
-  "LAST_MEM" > "HOL4Prob.prob_extra.LAST_MEM"
-  "LAST_MAP_CONS" > "HOL4Prob.prob_extra.LAST_MAP_CONS"
-  "IS_PREFIX_TRANS" > "HOL4Prob.prob_extra.IS_PREFIX_TRANS"
-  "IS_PREFIX_SNOC" > "HOL4Prob.prob_extra.IS_PREFIX_SNOC"
-  "IS_PREFIX_REFL" > "HOL4Prob.prob_extra.IS_PREFIX_REFL"
-  "IS_PREFIX_NIL" > "HOL4Prob.prob_extra.IS_PREFIX_NIL"
-  "IS_PREFIX_LENGTH_ANTI" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH_ANTI"
-  "IS_PREFIX_LENGTH" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH"
-  "IS_PREFIX_BUTLAST" > "HOL4Prob.prob_extra.IS_PREFIX_BUTLAST"
-  "IS_PREFIX_ANTISYM" > "HOL4Prob.prob_extra.IS_PREFIX_ANTISYM"
-  "IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
-  "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
-  "INV_SUC_POS" > "HOL4Prob.prob_extra.INV_SUC_POS"
-  "INV_SUC_MAX" > "HOL4Prob.prob_extra.INV_SUC_MAX"
-  "INV_SUC" > "HOL4Prob.prob_extra.INV_SUC"
-  "INTER_UNION_RDISTRIB" > "HOL4Prob.prob_extra.INTER_UNION_RDISTRIB"
-  "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
-  "INTER_IS_EMPTY" > "HOL4Prob.prob_extra.INTER_IS_EMPTY"
-  "INF_DEF_ALT" > "HOL4Prob.prob_extra.INF_DEF_ALT"
-  "HALF_POS" > "Series.half"
-  "HALF_LT_1" > "HOL4Prob.prob_extra.HALF_LT_1"
-  "HALF_CANCEL" > "HOL4Prob.prob_extra.HALF_CANCEL"
-  "GSPEC_DEF_ALT" > "HOL4Prob.prob_extra.GSPEC_DEF_ALT"
-  "FOLDR_MAP" > "HOL4Prob.prob_extra.FOLDR_MAP"
-  "FILTER_TRUE" > "HOL4Prob.prob_extra.FILTER_TRUE"
-  "FILTER_OUT_ELT" > "HOL4Prob.prob_extra.FILTER_OUT_ELT"
-  "FILTER_MEM" > "HOL4Prob.prob_extra.FILTER_MEM"
-  "FILTER_FALSE" > "HOL4Prob.prob_extra.FILTER_FALSE"
-  "EXP_DIV_TWO" > "HOL4Prob.prob_extra.EXP_DIV_TWO"
-  "EXISTS_LONGEST" > "HOL4Prob.prob_extra.EXISTS_LONGEST"
-  "EVEN_ODD_EXISTS_EQ" > "HOL4Prob.prob_extra.EVEN_ODD_EXISTS_EQ"
-  "EVEN_ODD_BASIC" > "HOL4Prob.prob_extra.EVEN_ODD_BASIC"
-  "EVEN_EXP_TWO" > "HOL4Prob.prob_extra.EVEN_EXP_TWO"
-  "EQ_EXT_EQ" > "HOL.fun_eq_iff"
-  "DIV_TWO_UNIQUE" > "HOL4Prob.prob_extra.DIV_TWO_UNIQUE"
-  "DIV_TWO_MONO_EVEN" > "HOL4Prob.prob_extra.DIV_TWO_MONO_EVEN"
-  "DIV_TWO_MONO" > "HOL4Prob.prob_extra.DIV_TWO_MONO"
-  "DIV_TWO_EXP" > "HOL4Prob.prob_extra.DIV_TWO_EXP"
-  "DIV_TWO_CANCEL" > "HOL4Prob.prob_extra.DIV_TWO_CANCEL"
-  "DIV_TWO_BASIC" > "HOL4Prob.prob_extra.DIV_TWO_BASIC"
-  "DIV_TWO" > "HOL4Prob.prob_extra.DIV_TWO"
-  "DIV_THEN_MULT" > "HOL4Prob.prob_extra.DIV_THEN_MULT"
-  "DIVISION_TWO" > "HOL4Prob.prob_extra.DIVISION_TWO"
-  "COMPL_def" > "HOL4Base.pred_set.COMPL_DEF"
-  "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
-  "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
-  "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
-  "BOOL_BOOL_CASES_THM" > "HOL4Prob.prob_extra.BOOL_BOOL_CASES_THM"
-  "BOOL_BOOL_CASES" > "HOL4Base.bool.BOOL_FUN_INDUCT"
-  "APPEND_MEM" > "HOL4Base.list.MEM_APPEND"
-  "ABS_UNIT_INTERVAL" > "HOL4Prob.prob_extra.ABS_UNIT_INTERVAL"
-  "ABS_BETWEEN_LE" > "HOL4Prob.prob_extra.ABS_BETWEEN_LE"
-
-end
--- a/src/HOL/Import/HOL/prob_indep.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "indep_set" > "indep_set_primdef"
-  "indep" > "indep_primdef"
-  "alg_cover_set" > "alg_cover_set_primdef"
-  "alg_cover" > "alg_cover_primdef"
-
-const_maps
-  "indep_set" > "HOL4Prob.prob_indep.indep_set"
-  "indep" > "HOL4Prob.prob_indep.indep"
-  "alg_cover_set" > "HOL4Prob.prob_indep.alg_cover_set"
-  "alg_cover" > "HOL4Prob.prob_indep.alg_cover"
-
-thm_maps
-  "indep_set_primdef" > "HOL4Prob.prob_indep.indep_set_primdef"
-  "indep_set_def" > "HOL4Prob.prob_indep.indep_set_def"
-  "indep_primdef" > "HOL4Prob.prob_indep.indep_primdef"
-  "indep_def" > "HOL4Prob.prob_indep.indep_def"
-  "alg_cover_set_primdef" > "HOL4Prob.prob_indep.alg_cover_set_primdef"
-  "alg_cover_set_def" > "HOL4Prob.prob_indep.alg_cover_set_def"
-  "alg_cover_primdef" > "HOL4Prob.prob_indep.alg_cover_primdef"
-  "alg_cover_def" > "HOL4Prob.prob_indep.alg_cover_def"
-  "PROB_INDEP_BOUND" > "HOL4Prob.prob_indep.PROB_INDEP_BOUND"
-  "MAP_CONS_TL_FILTER" > "HOL4Prob.prob_indep.MAP_CONS_TL_FILTER"
-  "INDEP_UNIT" > "HOL4Prob.prob_indep.INDEP_UNIT"
-  "INDEP_SET_SYM" > "HOL4Prob.prob_indep.INDEP_SET_SYM"
-  "INDEP_SET_LIST" > "HOL4Prob.prob_indep.INDEP_SET_LIST"
-  "INDEP_SET_DISJOINT_DECOMP" > "HOL4Prob.prob_indep.INDEP_SET_DISJOINT_DECOMP"
-  "INDEP_SET_BASIC" > "HOL4Prob.prob_indep.INDEP_SET_BASIC"
-  "INDEP_SDEST" > "HOL4Prob.prob_indep.INDEP_SDEST"
-  "INDEP_PROB" > "HOL4Prob.prob_indep.INDEP_PROB"
-  "INDEP_MEASURABLE2" > "HOL4Prob.prob_indep.INDEP_MEASURABLE2"
-  "INDEP_MEASURABLE1" > "HOL4Prob.prob_indep.INDEP_MEASURABLE1"
-  "INDEP_INDEP_SET_LEMMA" > "HOL4Prob.prob_indep.INDEP_INDEP_SET_LEMMA"
-  "INDEP_INDEP_SET" > "HOL4Prob.prob_indep.INDEP_INDEP_SET"
-  "INDEP_BIND_SDEST" > "HOL4Prob.prob_indep.INDEP_BIND_SDEST"
-  "INDEP_BIND" > "HOL4Prob.prob_indep.INDEP_BIND"
-  "BIND_STEP" > "HOL4Prob.prob_indep.BIND_STEP"
-  "ALG_COVER_WELL_DEFINED" > "HOL4Prob.prob_indep.ALG_COVER_WELL_DEFINED"
-  "ALG_COVER_UNIV" > "HOL4Prob.prob_indep.ALG_COVER_UNIV"
-  "ALG_COVER_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_UNIQUE"
-  "ALG_COVER_TAIL_STEP" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_STEP"
-  "ALG_COVER_TAIL_PROB" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_PROB"
-  "ALG_COVER_TAIL_MEASURABLE" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_MEASURABLE"
-  "ALG_COVER_STEP" > "HOL4Prob.prob_indep.ALG_COVER_STEP"
-  "ALG_COVER_SET_INDUCTION" > "HOL4Prob.prob_indep.ALG_COVER_SET_INDUCTION"
-  "ALG_COVER_SET_CASES_THM" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES_THM"
-  "ALG_COVER_SET_CASES" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES"
-  "ALG_COVER_SET_BASIC" > "HOL4Prob.prob_indep.ALG_COVER_SET_BASIC"
-  "ALG_COVER_HEAD" > "HOL4Prob.prob_indep.ALG_COVER_HEAD"
-  "ALG_COVER_EXISTS_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_EXISTS_UNIQUE"
-
-end
--- a/src/HOL/Import/HOL/prob_pseudo.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "pseudo_linear_tl" > "pseudo_linear_tl_primdef"
-  "pseudo_linear_hd" > "pseudo_linear_hd_primdef"
-  "pseudo_linear1" > "pseudo_linear1_primdef"
-  "pseudo" > "pseudo_primdef"
-
-const_maps
-  "pseudo_linear_tl" > "HOL4Prob.prob_pseudo.pseudo_linear_tl"
-  "pseudo_linear_hd" > "HOL4Prob.prob_pseudo.pseudo_linear_hd"
-  "pseudo" > "HOL4Prob.prob_pseudo.pseudo"
-
-thm_maps
-  "pseudo_primdef" > "HOL4Prob.prob_pseudo.pseudo_primdef"
-  "pseudo_linear_tl_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_primdef"
-  "pseudo_linear_tl_def" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_def"
-  "pseudo_linear_hd_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_primdef"
-  "pseudo_linear_hd_def" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_def"
-  "pseudo_linear1_def" > "HOL4Prob.prob_pseudo.pseudo_linear1_def"
-  "pseudo_def" > "HOL4Prob.prob_pseudo.pseudo_def"
-  "PSEUDO_LINEAR1_EXECUTE" > "HOL4Prob.prob_pseudo.PSEUDO_LINEAR1_EXECUTE"
-
-end
--- a/src/HOL/Import/HOL/prob_uniform.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "uniform_tupled" > "uniform_tupled_def"
-  "uniform" > "uniform_primdef"
-  "unif_tupled" > "unif_tupled_def"
-  "unif_bound" > "unif_bound_primdef"
-  "unif" > "unif_primdef"
-
-const_maps
-  "uniform_tupled" > "HOL4Prob.prob_uniform.uniform_tupled"
-  "uniform" > "HOL4Prob.prob_uniform.uniform"
-  "unif_tupled" > "HOL4Prob.prob_uniform.unif_tupled"
-  "unif_bound" > "HOL4Prob.prob_uniform.unif_bound"
-  "unif" > "HOL4Prob.prob_uniform.unif"
-
-thm_maps
-  "uniform_tupled_primitive_def" > "HOL4Prob.prob_uniform.uniform_tupled_primitive_def"
-  "uniform_tupled_def" > "HOL4Prob.prob_uniform.uniform_tupled_def"
-  "uniform_primdef" > "HOL4Prob.prob_uniform.uniform_primdef"
-  "uniform_ind" > "HOL4Prob.prob_uniform.uniform_ind"
-  "uniform_def" > "HOL4Prob.prob_uniform.uniform_def"
-  "uniform_curried_def" > "HOL4Prob.prob_uniform.uniform_curried_def"
-  "unif_tupled_primitive_def" > "HOL4Prob.prob_uniform.unif_tupled_primitive_def"
-  "unif_tupled_def" > "HOL4Prob.prob_uniform.unif_tupled_def"
-  "unif_primdef" > "HOL4Prob.prob_uniform.unif_primdef"
-  "unif_ind" > "HOL4Prob.prob_uniform.unif_ind"
-  "unif_def" > "HOL4Prob.prob_uniform.unif_def"
-  "unif_curried_def" > "HOL4Prob.prob_uniform.unif_curried_def"
-  "unif_bound_primitive_def" > "HOL4Prob.prob_uniform.unif_bound_primitive_def"
-  "unif_bound_primdef" > "HOL4Prob.prob_uniform.unif_bound_primdef"
-  "unif_bound_ind" > "HOL4Prob.prob_uniform.unif_bound_ind"
-  "unif_bound_def" > "HOL4Prob.prob_uniform.unif_bound_def"
-  "UNIF_RANGE" > "HOL4Prob.prob_uniform.UNIF_RANGE"
-  "UNIF_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIF_DEF_MONAD"
-  "UNIF_BOUND_UPPER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER_SUC"
-  "UNIF_BOUND_UPPER" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER"
-  "UNIF_BOUND_LOWER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER_SUC"
-  "UNIF_BOUND_LOWER" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER"
-  "UNIFORM_RANGE" > "HOL4Prob.prob_uniform.UNIFORM_RANGE"
-  "UNIFORM_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIFORM_DEF_MONAD"
-  "SUC_DIV_TWO_ZERO" > "HOL4Prob.prob_uniform.SUC_DIV_TWO_ZERO"
-  "PROB_UNIF_PAIR" > "HOL4Prob.prob_uniform.PROB_UNIF_PAIR"
-  "PROB_UNIF_GOOD" > "HOL4Prob.prob_uniform.PROB_UNIF_GOOD"
-  "PROB_UNIF_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIF_BOUND"
-  "PROB_UNIFORM_UPPER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_UPPER_BOUND"
-  "PROB_UNIFORM_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_SUC"
-  "PROB_UNIFORM_PAIR_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_PAIR_SUC"
-  "PROB_UNIFORM_LOWER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_LOWER_BOUND"
-  "PROB_UNIFORM" > "HOL4Prob.prob_uniform.PROB_UNIFORM"
-  "PROB_UNIF" > "HOL4Prob.prob_uniform.PROB_UNIF"
-  "INDEP_UNIFORM" > "HOL4Prob.prob_uniform.INDEP_UNIFORM"
-  "INDEP_UNIF" > "HOL4Prob.prob_uniform.INDEP_UNIF"
-
-end
--- a/src/HOL/Import/HOL/real.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,359 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "sup" > "sup_def"
-  "sumc" > "sumc_def"
-  "sum" > "sum_def"
-
-const_maps
-  "sup" > "HOL4Real.real.sup"
-  "sum" > "HOL4Real.real.sum"
-  "real_sub" > "Groups.minus_class.minus" :: "real => real => real"
-  "real_of_num" > "RealDef.real" :: "nat => real"
-  "real_lte" > "Orderings.ord_class.less_eq" :: "real => real => bool"
-  "real_gt" > "HOL4Compat.real_gt"
-  "real_ge" > "HOL4Compat.real_ge"
-  "pow" > "Power.power_class.power" :: "real => nat => real"
-  "abs" > "Groups.abs_class.abs" :: "real => real"
-  "/" > "Fields.inverse_class.divide" :: "real => real => real"
-
-thm_maps
-  "sup_def" > "HOL4Real.real.sup_def"
-  "sup" > "HOL4Real.real.sup"
-  "sumc" > "HOL4Real.real.sumc"
-  "sum_def" > "HOL4Real.real.sum_def"
-  "sum" > "HOL4Real.real.sum"
-  "real_sub" > "Fields.linordered_field_class.sign_simps_16"
-  "real_of_num" > "HOL4Compat.real_of_num"
-  "real_lte" > "HOL4Compat.real_lte"
-  "real_lt" > "Orderings.linorder_class.not_le"
-  "real_gt" > "HOL4Compat.GREATER_DEF"
-  "real_ge" > "HOL4Compat.real_ge"
-  "real_div" > "Fields.division_ring_class.divide_inverse"
-  "pow" > "HOL4Compat.pow"
-  "abs" > "HOL4Compat.abs"
-  "SUP_LEMMA3" > "HOL4Real.real.SUP_LEMMA3"
-  "SUP_LEMMA2" > "HOL4Real.real.SUP_LEMMA2"
-  "SUP_LEMMA1" > "HOL4Real.real.SUP_LEMMA1"
-  "SUM_ZERO" > "HOL4Real.real.SUM_ZERO"
-  "SUM_TWO" > "HOL4Real.real.SUM_TWO"
-  "SUM_SUBST" > "HOL4Real.real.SUM_SUBST"
-  "SUM_SUB" > "HOL4Real.real.SUM_SUB"
-  "SUM_REINDEX" > "HOL4Real.real.SUM_REINDEX"
-  "SUM_POS_GEN" > "HOL4Real.real.SUM_POS_GEN"
-  "SUM_POS" > "HOL4Real.real.SUM_POS"
-  "SUM_PERMUTE_0" > "HOL4Real.real.SUM_PERMUTE_0"
-  "SUM_OFFSET" > "HOL4Real.real.SUM_OFFSET"
-  "SUM_NSUB" > "HOL4Real.real.SUM_NSUB"
-  "SUM_NEG" > "HOL4Real.real.SUM_NEG"
-  "SUM_LE" > "HOL4Real.real.SUM_LE"
-  "SUM_GROUP" > "HOL4Real.real.SUM_GROUP"
-  "SUM_EQ" > "HOL4Real.real.SUM_EQ"
-  "SUM_DIFF" > "HOL4Real.real.SUM_DIFF"
-  "SUM_DEF" > "HOL4Real.real.SUM_DEF"
-  "SUM_CMUL" > "HOL4Real.real.SUM_CMUL"
-  "SUM_CANCEL" > "HOL4Real.real.SUM_CANCEL"
-  "SUM_BOUND" > "HOL4Real.real.SUM_BOUND"
-  "SUM_ADD" > "HOL4Real.real.SUM_ADD"
-  "SUM_ABS_LE" > "HOL4Real.real.SUM_ABS_LE"
-  "SUM_ABS" > "HOL4Real.real.SUM_ABS"
-  "SUM_2" > "HOL4Real.real.SUM_2"
-  "SUM_1" > "HOL4Real.real.SUM_1"
-  "SUM_0" > "HOL4Real.real.SUM_0"
-  "SETOK_LE_LT" > "HOL4Real.real.SETOK_LE_LT"
-  "REAL_SUP_UBOUND_LE" > "HOL4Real.real.REAL_SUP_UBOUND_LE"
-  "REAL_SUP_UBOUND" > "HOL4Real.real.REAL_SUP_UBOUND"
-  "REAL_SUP_SOMEPOS" > "HOL4Real.real.REAL_SUP_SOMEPOS"
-  "REAL_SUP_LE" > "HOL4Real.real.REAL_SUP_LE"
-  "REAL_SUP_EXISTS" > "HOL4Real.real.REAL_SUP_EXISTS"
-  "REAL_SUP_ALLPOS" > "HOL4Compat.REAL_SUP_ALLPOS"
-  "REAL_SUP" > "HOL4Real.real.REAL_SUP"
-  "REAL_SUMSQ" > "Nat_Numeral.linordered_ring_strict_class.sum_squares_eq_zero_iff"
-  "REAL_SUB_TRIANGLE" > "HOL4Real.real.REAL_SUB_TRIANGLE"
-  "REAL_SUB_SUB2" > "HOL4Real.real.REAL_SUB_SUB2"
-  "REAL_SUB_SUB" > "HOL4Real.real.REAL_SUB_SUB"
-  "REAL_SUB_RZERO" > "Groups.group_add_class.diff_0_right"
-  "REAL_SUB_RNEG" > "Groups.group_add_class.diff_minus_eq_add"
-  "REAL_SUB_REFL" > "Groups.group_add_class.diff_self"
-  "REAL_SUB_RDISTRIB" > "Fields.linordered_field_class.sign_simps_5"
-  "REAL_SUB_NEG2" > "HOL4Real.real.REAL_SUB_NEG2"
-  "REAL_SUB_LZERO" > "Groups.group_add_class.diff_0"
-  "REAL_SUB_LT" > "HOL4Real.real.REAL_SUB_LT"
-  "REAL_SUB_LNEG" > "HOL4Real.real.REAL_SUB_LNEG"
-  "REAL_SUB_LE" > "HOL4Real.real.REAL_SUB_LE"
-  "REAL_SUB_LDISTRIB" > "Fields.linordered_field_class.sign_simps_6"
-  "REAL_SUB_INV2" > "HOL4Real.real.REAL_SUB_INV2"
-  "REAL_SUB_ADD2" > "HOL4Real.real.REAL_SUB_ADD2"
-  "REAL_SUB_ADD" > "Groups.group_add_class.diff_add_cancel"
-  "REAL_SUB_ABS" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq2"
-  "REAL_SUB_0" > "Groups.ab_group_add_class.diff_eq_0_iff_eq"
-  "REAL_RNEG_UNIQ" > "Groups.group_add_class.add_eq_0_iff"
-  "REAL_RINV_UNIQ" > "Fields.division_ring_class.inverse_unique"
-  "REAL_RDISTRIB" > "Fields.linordered_field_class.sign_simps_8"
-  "REAL_POW_POW" > "Power.monoid_mult_class.power_mult"
-  "REAL_POW_MONO_LT" > "HOL4Real.real.REAL_POW_MONO_LT"
-  "REAL_POW_LT2" > "HOL4Real.real.REAL_POW_LT2"
-  "REAL_POW_LT" > "Power.linordered_semidom_class.zero_less_power"
-  "REAL_POW_INV" > "Power.power_inverse"
-  "REAL_POW_DIV" > "Power.power_divide"
-  "REAL_POW_ADD" > "Power.monoid_mult_class.power_add"
-  "REAL_POW2_ABS" > "Nat_Numeral.linordered_idom_class.power2_abs"
-  "REAL_POS_NZ" > "HOL4Real.real.REAL_POS_NZ"
-  "REAL_POS" > "RealDef.real_of_nat_ge_zero"
-  "REAL_POASQ" > "HOL4Real.real.REAL_POASQ"
-  "REAL_OVER1" > "Fields.division_ring_class.divide_1"
-  "REAL_OF_NUM_SUC" > "RealDef.real_of_nat_Suc"
-  "REAL_OF_NUM_POW" > "RealDef.power_real_of_nat"
-  "REAL_OF_NUM_MUL" > "RealDef.real_of_nat_mult"
-  "REAL_OF_NUM_LE" > "RealDef.real_of_nat_le_iff"
-  "REAL_OF_NUM_EQ" > "RealDef.real_of_nat_inject"
-  "REAL_OF_NUM_ADD" > "RealDef.real_of_nat_add"
-  "REAL_NZ_IMP_LT" > "HOL4Real.real.REAL_NZ_IMP_LT"
-  "REAL_NOT_LT" > "HOL4Compat.real_lte"
-  "REAL_NOT_LE" > "Orderings.linorder_class.not_le"
-  "REAL_NEG_SUB" > "Groups.group_add_class.minus_diff_eq"
-  "REAL_NEG_RMUL" > "Int.int_arith_rules_14"
-  "REAL_NEG_NEG" > "Groups.group_add_class.minus_minus"
-  "REAL_NEG_MUL2" > "Rings.ring_class.minus_mult_minus"
-  "REAL_NEG_MINUS1" > "Semiring_Normalization.comm_ring_1_class.normalizing_ring_rules_1"
-  "REAL_NEG_LT0" > "Groups.ordered_ab_group_add_class.neg_less_0_iff_less"
-  "REAL_NEG_LMUL" > "Int.int_arith_rules_13"
-  "REAL_NEG_LE0" > "Groups.ordered_ab_group_add_class.neg_le_0_iff_le"
-  "REAL_NEG_INV" > "Fields.division_ring_class.nonzero_inverse_minus_eq"
-  "REAL_NEG_GT0" > "Groups.ordered_ab_group_add_class.neg_0_less_iff_less"
-  "REAL_NEG_GE0" > "Groups.ordered_ab_group_add_class.neg_0_le_iff_le"
-  "REAL_NEG_EQ0" > "Groups.group_add_class.neg_equal_0_iff_equal"
-  "REAL_NEG_EQ" > "HOL4Real.real.REAL_NEG_EQ"
-  "REAL_NEG_ADD" > "Groups.ab_group_add_class.minus_add_distrib"
-  "REAL_NEG_0" > "Groups.group_add_class.minus_zero"
-  "REAL_NEGNEG" > "Groups.group_add_class.minus_minus"
-  "REAL_MUL_SYM" > "Fields.linordered_field_class.sign_simps_21"
-  "REAL_MUL_RZERO" > "Divides.arithmetic_simps_41"
-  "REAL_MUL_RNEG" > "Int.int_arith_rules_14"
-  "REAL_MUL_RINV" > "Fields.division_ring_class.right_inverse"
-  "REAL_MUL_RID" > "Divides.arithmetic_simps_43"
-  "REAL_MUL_LZERO" > "Divides.arithmetic_simps_40"
-  "REAL_MUL_LNEG" > "Int.int_arith_rules_13"
-  "REAL_MUL_LINV" > "Fields.division_ring_class.left_inverse"
-  "REAL_MUL_LID" > "Divides.arithmetic_simps_42"
-  "REAL_MUL_ASSOC" > "Fields.linordered_field_class.sign_simps_22"
-  "REAL_MUL" > "RealDef.real_of_nat_mult"
-  "REAL_MIDDLE2" > "HOL4Real.real.REAL_MIDDLE2"
-  "REAL_MIDDLE1" > "HOL4Real.real.REAL_MIDDLE1"
-  "REAL_MEAN" > "Orderings.dense_linorder_class.dense"
-  "REAL_LT_TRANS" > "Orderings.order_less_trans"
-  "REAL_LT_TOTAL" > "HOL4Compat.REAL_LT_TOTAL"
-  "REAL_LT_SUB_RADD" > "Fields.linordered_field_class.sign_simps_4"
-  "REAL_LT_SUB_LADD" > "Fields.linordered_field_class.sign_simps_3"
-  "REAL_LT_RMUL_IMP" > "Rings.linordered_semiring_strict_class.mult_strict_right_mono"
-  "REAL_LT_RMUL_0" > "HOL4Real.real.REAL_LT_RMUL_0"
-  "REAL_LT_RMUL" > "RealDef.real_mult_less_iff1"
-  "REAL_LT_REFL" > "Orderings.order_less_irrefl"
-  "REAL_LT_RDIV_EQ" > "Fields.linordered_field_class.pos_less_divide_eq"
-  "REAL_LT_RDIV_0" > "HOL4Real.real.REAL_LT_RDIV_0"
-  "REAL_LT_RDIV" > "HOL4Real.real.REAL_LT_RDIV"
-  "REAL_LT_RADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_right"
-  "REAL_LT_NZ" > "HOL4Real.real.REAL_LT_NZ"
-  "REAL_LT_NEGTOTAL" > "HOL4Real.real.REAL_LT_NEGTOTAL"
-  "REAL_LT_NEG" > "Groups.ordered_ab_group_add_class.neg_less_iff_less"
-  "REAL_LT_MULTIPLE" > "HOL4Real.real.REAL_LT_MULTIPLE"
-  "REAL_LT_MUL2" > "Rings.linordered_semiring_strict_class.mult_strict_mono'"
-  "REAL_LT_MUL" > "RealDef.real_mult_order"
-  "REAL_LT_LMUL_IMP" > "RealDef.real_mult_less_mono2"
-  "REAL_LT_LMUL_0" > "HOL4Real.real.REAL_LT_LMUL_0"
-  "REAL_LT_LMUL" > "Rings.linordered_ring_strict_class.mult_less_cancel_left_pos"
-  "REAL_LT_LE" > "Orderings.order_class.less_le"
-  "REAL_LT_LDIV_EQ" > "Fields.linordered_field_class.pos_divide_less_eq"
-  "REAL_LT_LADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_left"
-  "REAL_LT_INV_EQ" > "Fields.linordered_field_inverse_zero_class.inverse_positive_iff_positive"
-  "REAL_LT_INV" > "Fields.linordered_field_class.less_imp_inverse_less"
-  "REAL_LT_IMP_NE" > "Orderings.order_class.less_imp_neq"
-  "REAL_LT_IMP_LE" > "Orderings.order_less_imp_le"
-  "REAL_LT_IADD" > "Groups.ordered_cancel_ab_semigroup_add_class.add_strict_left_mono"
-  "REAL_LT_HALF2" > "HOL4Real.real.REAL_LT_HALF2"
-  "REAL_LT_HALF1" > "Int.half_gt_zero_iff"
-  "REAL_LT_GT" > "Orderings.order_less_not_sym"
-  "REAL_LT_FRACTION_0" > "HOL4Real.real.REAL_LT_FRACTION_0"
-  "REAL_LT_FRACTION" > "HOL4Real.real.REAL_LT_FRACTION"
-  "REAL_LT_DIV" > "Fields.linordered_field_class.divide_pos_pos"
-  "REAL_LT_ANTISYM" > "HOL4Real.real.REAL_LT_ANTISYM"
-  "REAL_LT_ADD_SUB" > "Fields.linordered_field_class.sign_simps_3"
-  "REAL_LT_ADDR" > "HOL4Real.real.REAL_LT_ADDR"
-  "REAL_LT_ADDNEG2" > "HOL4Real.real.REAL_LT_ADDNEG2"
-  "REAL_LT_ADDNEG" > "HOL4Real.real.REAL_LT_ADDNEG"
-  "REAL_LT_ADDL" > "HOL4Real.real.REAL_LT_ADDL"
-  "REAL_LT_ADD2" > "Groups.add_mono_thms_linordered_field_5"
-  "REAL_LT_ADD1" > "HOL4Real.real.REAL_LT_ADD1"
-  "REAL_LT_ADD" > "Groups.ordered_comm_monoid_add_class.add_pos_pos"
-  "REAL_LT_1" > "HOL4Real.real.REAL_LT_1"
-  "REAL_LT_01" > "Rings.linordered_semidom_class.zero_less_one"
-  "REAL_LTE_TRANS" > "Orderings.order_less_le_trans"
-  "REAL_LTE_TOTAL" > "HOL4Real.real.REAL_LTE_TOTAL"
-  "REAL_LTE_ANTSYM" > "HOL4Real.real.REAL_LTE_ANTSYM"
-  "REAL_LTE_ADD2" > "Groups.add_mono_thms_linordered_field_3"
-  "REAL_LTE_ADD" > "Groups.ordered_comm_monoid_add_class.add_pos_nonneg"
-  "REAL_LT1_POW2" > "HOL4Real.real.REAL_LT1_POW2"
-  "REAL_LT" > "RealDef.real_of_nat_less_iff"
-  "REAL_LNEG_UNIQ" > "Groups.group_add_class.eq_neg_iff_add_eq_0"
-  "REAL_LINV_UNIQ" > "HOL4Real.real.REAL_LINV_UNIQ"
-  "REAL_LE_TRANS" > "Orderings.order_trans_rules_23"
-  "REAL_LE_TOTAL" > "Orderings.linorder_class.linear"
-  "REAL_LE_SUB_RADD" > "Fields.linordered_field_class.sign_simps_2"
-  "REAL_LE_SUB_LADD" > "Fields.linordered_field_class.sign_simps_1"
-  "REAL_LE_SQUARE" > "Rings.linordered_ring_class.zero_le_square"
-  "REAL_LE_RNEG" > "HOL4Real.real.REAL_LE_RNEG"
-  "REAL_LE_RMUL_IMP" > "Rings.ordered_semiring_class.mult_right_mono"
-  "REAL_LE_RMUL" > "RealDef.real_mult_le_cancel_iff1"
-  "REAL_LE_REFL" > "Orderings.preorder_class.order_refl"
-  "REAL_LE_RDIV_EQ" > "Fields.linordered_field_class.pos_le_divide_eq"
-  "REAL_LE_RDIV" > "Fields.linordered_field_class.mult_imp_le_div_pos"
-  "REAL_LE_RADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_right"
-  "REAL_LE_POW2" > "Nat_Numeral.linordered_idom_class.zero_le_power2"
-  "REAL_LE_NEGTOTAL" > "HOL4Real.real.REAL_LE_NEGTOTAL"
-  "REAL_LE_NEGR" > "Groups.linordered_ab_group_add_class.le_minus_self_iff"
-  "REAL_LE_NEGL" > "Groups.linordered_ab_group_add_class.minus_le_self_iff"
-  "REAL_LE_NEG2" > "Groups.ordered_ab_group_add_class.neg_le_iff_le"
-  "REAL_LE_NEG" > "Groups.ordered_ab_group_add_class.neg_le_iff_le"
-  "REAL_LE_MUL2" > "Rings.ordered_semiring_class.mult_mono'"
-  "REAL_LE_MUL" > "Rings.mult_sign_intros_1"
-  "REAL_LE_LT" > "Orderings.order_class.le_less"
-  "REAL_LE_LNEG" > "RealDef.real_0_le_add_iff"
-  "REAL_LE_LMUL_IMP" > "Rings.ordered_comm_semiring_class.comm_mult_left_mono"
-  "REAL_LE_LMUL" > "RealDef.real_mult_le_cancel_iff2"
-  "REAL_LE_LDIV_EQ" > "Fields.linordered_field_class.pos_divide_le_eq"
-  "REAL_LE_LDIV" > "Fields.linordered_field_class.mult_imp_div_pos_le"
-  "REAL_LE_LADD_IMP" > "Groups.ordered_ab_semigroup_add_class.add_left_mono"
-  "REAL_LE_LADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_left"
-  "REAL_LE_INV_EQ" > "Fields.linordered_field_inverse_zero_class.inverse_nonnegative_iff_nonnegative"
-  "REAL_LE_INV" > "HOL4Real.real.REAL_LE_INV"
-  "REAL_LE_DOUBLE" > "Groups.linordered_ab_group_add_class.zero_le_double_add_iff_zero_le_single_add"
-  "REAL_LE_DIV" > "HOL4Real.real.REAL_LE_DIV"
-  "REAL_LE_ANTISYM" > "Orderings.order_class.eq_iff"
-  "REAL_LE_ADDR" > "HOL4Real.real.REAL_LE_ADDR"
-  "REAL_LE_ADDL" > "HOL4Real.real.REAL_LE_ADDL"
-  "REAL_LE_ADD2" > "Groups.add_mono_thms_linordered_semiring_1"
-  "REAL_LE_ADD" > "Groups.ordered_comm_monoid_add_class.add_nonneg_nonneg"
-  "REAL_LE_01" > "Rings.linordered_semidom_class.zero_le_one"
-  "REAL_LET_TRANS" > "Orderings.order_le_less_trans"
-  "REAL_LET_TOTAL" > "Orderings.linorder_class.le_less_linear"
-  "REAL_LET_ANTISYM" > "HOL4Real.real.REAL_LET_ANTISYM"
-  "REAL_LET_ADD2" > "Groups.add_mono_thms_linordered_field_4"
-  "REAL_LET_ADD" > "Groups.ordered_comm_monoid_add_class.add_nonneg_pos"
-  "REAL_LE1_POW2" > "HOL4Real.real.REAL_LE1_POW2"
-  "REAL_LE" > "RealDef.real_of_nat_le_iff"
-  "REAL_LDISTRIB" > "Fields.linordered_field_class.sign_simps_7"
-  "REAL_INV_POS" > "Fields.linordered_field_class.positive_imp_inverse_positive"
-  "REAL_INV_NZ" > "Fields.division_ring_class.nonzero_imp_inverse_nonzero"
-  "REAL_INV_MUL" > "HOL4Real.real.REAL_INV_MUL"
-  "REAL_INV_LT1" > "Fields.linordered_field_class.one_less_inverse"
-  "REAL_INV_INV" > "Fields.division_ring_inverse_zero_class.inverse_inverse_eq"
-  "REAL_INV_EQ_0" > "Fields.division_ring_inverse_zero_class.inverse_nonzero_iff_nonzero"
-  "REAL_INV_1OVER" > "Fields.division_ring_class.inverse_eq_divide"
-  "REAL_INV_0" > "Fields.division_ring_inverse_zero_class.inverse_zero"
-  "REAL_INVINV" > "Fields.division_ring_class.nonzero_inverse_inverse_eq"
-  "REAL_INV1" > "Fields.division_ring_class.inverse_1"
-  "REAL_INJ" > "RealDef.real_of_nat_inject"
-  "REAL_HALF_DOUBLE" > "RComplete.real_sum_of_halves"
-  "REAL_FACT_NZ" > "HOL4Real.real.REAL_FACT_NZ"
-  "REAL_EQ_SUB_RADD" > "Fields.linordered_field_class.sign_simps_12"
-  "REAL_EQ_SUB_LADD" > "Fields.linordered_field_class.sign_simps_11"
-  "REAL_EQ_RMUL_IMP" > "HOL4Real.real.REAL_EQ_RMUL_IMP"
-  "REAL_EQ_RMUL" > "Rings.mult_compare_simps_13"
-  "REAL_EQ_RDIV_EQ" > "HOL4Real.real.REAL_EQ_RDIV_EQ"
-  "REAL_EQ_RADD" > "Groups.cancel_semigroup_add_class.add_right_cancel"
-  "REAL_EQ_NEG" > "Groups.group_add_class.neg_equal_iff_equal"
-  "REAL_EQ_MUL_LCANCEL" > "Rings.mult_compare_simps_14"
-  "REAL_EQ_LMUL_IMP" > "HOL4Real.real.REAL_EQ_LMUL_IMP"
-  "REAL_EQ_LMUL2" > "RealDef.real_mult_left_cancel"
-  "REAL_EQ_LMUL" > "Rings.mult_compare_simps_14"
-  "REAL_EQ_LDIV_EQ" > "HOL4Real.real.REAL_EQ_LDIV_EQ"
-  "REAL_EQ_LADD" > "Groups.cancel_semigroup_add_class.add_left_cancel"
-  "REAL_EQ_IMP_LE" > "Orderings.order_eq_refl"
-  "REAL_ENTIRE" > "Rings.ring_no_zero_divisors_class.mult_eq_0_iff"
-  "REAL_DOWN2" > "RealDef.real_lbound_gt_zero"
-  "REAL_DOWN" > "HOL4Real.real.REAL_DOWN"
-  "REAL_DOUBLE" > "Int.mult_2"
-  "REAL_DIV_RMUL" > "HOL4Real.real.REAL_DIV_RMUL"
-  "REAL_DIV_REFL" > "Fields.division_ring_class.divide_self"
-  "REAL_DIV_MUL2" > "HOL4Real.real.REAL_DIV_MUL2"
-  "REAL_DIV_LZERO" > "Fields.division_ring_class.divide_zero_left"
-  "REAL_DIV_LMUL" > "HOL4Real.real.REAL_DIV_LMUL"
-  "REAL_DIFFSQ" > "Rings.comm_ring_class.square_diff_square_factored"
-  "REAL_ARCH_LEAST" > "Transcendental.reals_Archimedean4"
-  "REAL_ARCH" > "RComplete.reals_Archimedean3"
-  "REAL_ADD_SYM" > "Fields.linordered_field_class.sign_simps_18"
-  "REAL_ADD_SUB2" > "HOL4Real.real.REAL_ADD_SUB2"
-  "REAL_ADD_SUB" > "HOL4Real.real.REAL_ADD_SUB"
-  "REAL_ADD_RINV" > "Groups.group_add_class.right_minus"
-  "REAL_ADD_RID_UNIQ" > "HOL4Real.real.REAL_ADD_RID_UNIQ"
-  "REAL_ADD_RID" > "Divides.arithmetic_simps_39"
-  "REAL_ADD_RDISTRIB" > "Fields.linordered_field_class.sign_simps_8"
-  "REAL_ADD_LINV" > "Groups.ab_group_add_class.ab_left_minus"
-  "REAL_ADD_LID_UNIQ" > "HOL4Real.real.REAL_ADD_LID_UNIQ"
-  "REAL_ADD_LID" > "Divides.arithmetic_simps_38"
-  "REAL_ADD_LDISTRIB" > "Fields.linordered_field_class.sign_simps_7"
-  "REAL_ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_19"
-  "REAL_ADD2_SUB2" > "RealDef.add_diff_add"
-  "REAL_ADD" > "RealDef.real_of_nat_add"
-  "REAL_ABS_TRIANGLE" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq"
-  "REAL_ABS_POS" > "Groups.ordered_ab_group_add_abs_class.abs_ge_zero"
-  "REAL_ABS_MUL" > "Rings.linordered_idom_class.abs_mult"
-  "REAL_ABS_0" > "Divides.arithmetic_simps_27"
-  "REAL_10" > "HOL4Compat.REAL_10"
-  "REAL_1" > "HOL4Real.real.REAL_1"
-  "REAL_0" > "HOL4Real.real.REAL_0"
-  "REAL" > "RealDef.real_of_nat_Suc"
-  "POW_ZERO_EQ" > "HOL4Real.real.POW_ZERO_EQ"
-  "POW_ZERO" > "HOL4Real.real.POW_ZERO"
-  "POW_POS_LT" > "HOL4Real.real.POW_POS_LT"
-  "POW_POS" > "Power.linordered_semidom_class.zero_le_power"
-  "POW_PLUS1" > "HOL4Real.real.POW_PLUS1"
-  "POW_ONE" > "Power.monoid_mult_class.power_one"
-  "POW_NZ" > "Power.ring_1_no_zero_divisors_class.field_power_not_zero"
-  "POW_MUL" > "Power.comm_monoid_mult_class.power_mult_distrib"
-  "POW_MINUS1" > "Nat_Numeral.ring_1_class.power_minus1_even"
-  "POW_M1" > "HOL4Real.real.POW_M1"
-  "POW_LT" > "HOL4Real.real.POW_LT"
-  "POW_LE" > "Power.linordered_semidom_class.power_mono"
-  "POW_INV" > "Power.division_ring_class.nonzero_power_inverse"
-  "POW_EQ" > "Power.linordered_semidom_class.power_inject_base"
-  "POW_ADD" > "Power.monoid_mult_class.power_add"
-  "POW_ABS" > "Power.linordered_idom_class.power_abs"
-  "POW_2_LT" > "RealDef.two_realpow_gt"
-  "POW_2_LE1" > "RealDef.two_realpow_ge_one"
-  "POW_2" > "Nat_Numeral.monoid_mult_class.power2_eq_square"
-  "POW_1" > "Power.monoid_mult_class.power_one_right"
-  "POW_0" > "Power.power_0_Suc"
-  "ABS_ZERO" > "Groups.ordered_ab_group_add_abs_class.abs_eq_0"
-  "ABS_TRIANGLE" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq"
-  "ABS_SUM" > "HOL4Real.real.ABS_SUM"
-  "ABS_SUB_ABS" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq3"
-  "ABS_SUB" > "Groups.ordered_ab_group_add_abs_class.abs_minus_commute"
-  "ABS_STILLNZ" > "HOL4Real.real.ABS_STILLNZ"
-  "ABS_SIGN2" > "HOL4Real.real.ABS_SIGN2"
-  "ABS_SIGN" > "HOL4Real.real.ABS_SIGN"
-  "ABS_REFL" > "HOL4Real.real.ABS_REFL"
-  "ABS_POW2" > "Nat_Numeral.linordered_idom_class.abs_power2"
-  "ABS_POS" > "Groups.ordered_ab_group_add_abs_class.abs_ge_zero"
-  "ABS_NZ" > "Groups.ordered_ab_group_add_abs_class.zero_less_abs_iff"
-  "ABS_NEG" > "Groups.ordered_ab_group_add_abs_class.abs_minus_cancel"
-  "ABS_N" > "RealDef.abs_real_of_nat_cancel"
-  "ABS_MUL" > "Rings.linordered_idom_class.abs_mult"
-  "ABS_LT_MUL2" > "HOL4Real.real.ABS_LT_MUL2"
-  "ABS_LE" > "Groups.ordered_ab_group_add_abs_class.abs_ge_self"
-  "ABS_INV" > "Fields.linordered_field_class.nonzero_abs_inverse"
-  "ABS_DIV" > "Fields.linordered_field_class.nonzero_abs_divide"
-  "ABS_CIRCLE" > "HOL4Real.real.ABS_CIRCLE"
-  "ABS_CASES" > "HOL4Real.real.ABS_CASES"
-  "ABS_BOUNDS" > "RealDef.abs_le_interval_iff"
-  "ABS_BOUND" > "HOL4Real.real.ABS_BOUND"
-  "ABS_BETWEEN2" > "HOL4Real.real.ABS_BETWEEN2"
-  "ABS_BETWEEN1" > "HOL4Real.real.ABS_BETWEEN1"
-  "ABS_BETWEEN" > "HOL4Real.real.ABS_BETWEEN"
-  "ABS_ABS" > "Groups.ordered_ab_group_add_abs_class.abs_idempotent"
-  "ABS_1" > "Divides.arithmetic_simps_28"
-  "ABS_0" > "Divides.arithmetic_simps_27"
-
-end
--- a/src/HOL/Import/HOL/realax.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "treal_of_hreal" > "treal_of_hreal_def"
-  "treal_neg" > "treal_neg_def"
-  "treal_mul" > "treal_mul_def"
-  "treal_lt" > "treal_lt_def"
-  "treal_inv" > "treal_inv_def"
-  "treal_eq" > "treal_eq_def"
-  "treal_add" > "treal_add_def"
-  "treal_1" > "treal_1_def"
-  "treal_0" > "treal_0_def"
-  "hreal_of_treal" > "hreal_of_treal_def"
-
-type_maps
-  "real" > "RealDef.real"
-
-const_maps
-  "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
-  "treal_neg" > "HOL4Real.realax.treal_neg"
-  "treal_mul" > "HOL4Real.realax.treal_mul"
-  "treal_lt" > "HOL4Real.realax.treal_lt"
-  "treal_inv" > "HOL4Real.realax.treal_inv"
-  "treal_eq" > "HOL4Real.realax.treal_eq"
-  "treal_add" > "HOL4Real.realax.treal_add"
-  "treal_1" > "HOL4Real.realax.treal_1"
-  "treal_0" > "HOL4Real.realax.treal_0"
-  "real_sub" > "Groups.minus_class.minus" :: "real => real => real"
-  "real_neg" > "Groups.uminus_class.uminus" :: "real => real"
-  "real_mul" > "Groups.times_class.times" :: "real => real => real"
-  "real_lt" > "Orderings.ord_class.less" :: "real => real => bool"
-  "real_div" > "Fields.inverse_class.divide" :: "real => real => real"
-  "real_add" > "Groups.plus_class.plus" :: "real => real => real"
-  "real_1" > "Groups.one_class.one" :: "real"
-  "real_0" > "Groups.zero_class.zero" :: "real"
-  "mk_real" > "HOL.undefined"
-  "inv" > "Fields.inverse_class.inverse" :: "real => real"
-  "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
-  "dest_real" > "HOL.undefined"
-
-thm_maps
-  "treal_of_hreal_def" > "HOL4Real.realax.treal_of_hreal_def"
-  "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
-  "treal_neg_def" > "HOL4Real.realax.treal_neg_def"
-  "treal_neg" > "HOL4Real.realax.treal_neg"
-  "treal_mul_def" > "HOL4Real.realax.treal_mul_def"
-  "treal_mul" > "HOL4Real.realax.treal_mul"
-  "treal_lt_def" > "HOL4Real.realax.treal_lt_def"
-  "treal_lt" > "HOL4Real.realax.treal_lt"
-  "treal_inv_def" > "HOL4Real.realax.treal_inv_def"
-  "treal_inv" > "HOL4Real.realax.treal_inv"
-  "treal_eq_def" > "HOL4Real.realax.treal_eq_def"
-  "treal_eq" > "HOL4Real.realax.treal_eq"
-  "treal_add_def" > "HOL4Real.realax.treal_add_def"
-  "treal_add" > "HOL4Real.realax.treal_add"
-  "treal_1_def" > "HOL4Real.realax.treal_1_def"
-  "treal_1" > "HOL4Real.realax.treal_1"
-  "treal_0_def" > "HOL4Real.realax.treal_0_def"
-  "treal_0" > "HOL4Real.realax.treal_0"
-  "hreal_of_treal_def" > "HOL4Real.realax.hreal_of_treal_def"
-  "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
-  "TREAL_NEG_WELLDEF" > "HOL4Real.realax.TREAL_NEG_WELLDEF"
-  "TREAL_MUL_WELLDEFR" > "HOL4Real.realax.TREAL_MUL_WELLDEFR"
-  "TREAL_MUL_WELLDEF" > "HOL4Real.realax.TREAL_MUL_WELLDEF"
-  "TREAL_MUL_SYM" > "HOL4Real.realax.TREAL_MUL_SYM"
-  "TREAL_MUL_LINV" > "HOL4Real.realax.TREAL_MUL_LINV"
-  "TREAL_MUL_LID" > "HOL4Real.realax.TREAL_MUL_LID"
-  "TREAL_MUL_ASSOC" > "HOL4Real.realax.TREAL_MUL_ASSOC"
-  "TREAL_LT_WELLDEFR" > "HOL4Real.realax.TREAL_LT_WELLDEFR"
-  "TREAL_LT_WELLDEFL" > "HOL4Real.realax.TREAL_LT_WELLDEFL"
-  "TREAL_LT_WELLDEF" > "HOL4Real.realax.TREAL_LT_WELLDEF"
-  "TREAL_LT_TRANS" > "HOL4Real.realax.TREAL_LT_TRANS"
-  "TREAL_LT_TOTAL" > "HOL4Real.realax.TREAL_LT_TOTAL"
-  "TREAL_LT_REFL" > "HOL4Real.realax.TREAL_LT_REFL"
-  "TREAL_LT_MUL" > "HOL4Real.realax.TREAL_LT_MUL"
-  "TREAL_LT_ADD" > "HOL4Real.realax.TREAL_LT_ADD"
-  "TREAL_LDISTRIB" > "HOL4Real.realax.TREAL_LDISTRIB"
-  "TREAL_ISO" > "HOL4Real.realax.TREAL_ISO"
-  "TREAL_INV_WELLDEF" > "HOL4Real.realax.TREAL_INV_WELLDEF"
-  "TREAL_INV_0" > "HOL4Real.realax.TREAL_INV_0"
-  "TREAL_EQ_TRANS" > "HOL4Real.realax.TREAL_EQ_TRANS"
-  "TREAL_EQ_SYM" > "HOL4Real.realax.TREAL_EQ_SYM"
-  "TREAL_EQ_REFL" > "HOL4Real.realax.TREAL_EQ_REFL"
-  "TREAL_EQ_EQUIV" > "HOL4Real.realax.TREAL_EQ_EQUIV"
-  "TREAL_EQ_AP" > "HOL4Real.realax.TREAL_EQ_AP"
-  "TREAL_BIJ_WELLDEF" > "HOL4Real.realax.TREAL_BIJ_WELLDEF"
-  "TREAL_BIJ" > "HOL4Real.realax.TREAL_BIJ"
-  "TREAL_ADD_WELLDEFR" > "HOL4Real.realax.TREAL_ADD_WELLDEFR"
-  "TREAL_ADD_WELLDEF" > "HOL4Real.realax.TREAL_ADD_WELLDEF"
-  "TREAL_ADD_SYM" > "HOL4Real.realax.TREAL_ADD_SYM"
-  "TREAL_ADD_LINV" > "HOL4Real.realax.TREAL_ADD_LINV"
-  "TREAL_ADD_LID" > "HOL4Real.realax.TREAL_ADD_LID"
-  "TREAL_ADD_ASSOC" > "HOL4Real.realax.TREAL_ADD_ASSOC"
-  "TREAL_10" > "HOL4Real.realax.TREAL_10"
-  "REAL_SUP_ALLPOS" > "HOL4Compat.REAL_SUP_ALLPOS"
-  "REAL_MUL_SYM" > "Fields.linordered_field_class.sign_simps_21"
-  "REAL_MUL_LINV" > "Fields.division_ring_class.left_inverse"
-  "REAL_MUL_LID" > "Divides.arithmetic_simps_42"
-  "REAL_MUL_ASSOC" > "Fields.linordered_field_class.sign_simps_22"
-  "REAL_LT_TRANS" > "Orderings.order_less_trans"
-  "REAL_LT_TOTAL" > "HOL4Compat.REAL_LT_TOTAL"
-  "REAL_LT_REFL" > "Orderings.order_less_irrefl"
-  "REAL_LT_MUL" > "RealDef.real_mult_order"
-  "REAL_LT_IADD" > "Groups.ordered_cancel_ab_semigroup_add_class.add_strict_left_mono"
-  "REAL_LDISTRIB" > "Fields.linordered_field_class.sign_simps_7"
-  "REAL_INV_0" > "Fields.division_ring_inverse_zero_class.inverse_zero"
-  "REAL_ADD_SYM" > "Fields.linordered_field_class.sign_simps_18"
-  "REAL_ADD_LINV" > "Groups.ab_group_add_class.ab_left_minus"
-  "REAL_ADD_LID" > "Divides.arithmetic_simps_38"
-  "REAL_ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_19"
-  "REAL_10" > "HOL4Compat.REAL_10"
-  "HREAL_RDISTRIB" > "HOL4Real.realax.HREAL_RDISTRIB"
-  "HREAL_LT_REFL" > "HOL4Real.realax.HREAL_LT_REFL"
-  "HREAL_LT_NE" > "HOL4Real.realax.HREAL_LT_NE"
-  "HREAL_LT_LADD" > "HOL4Real.realax.HREAL_LT_LADD"
-  "HREAL_LT_GT" > "HOL4Real.realax.HREAL_LT_GT"
-  "HREAL_LT_ADDR" > "HOL4Real.realax.HREAL_LT_ADDR"
-  "HREAL_LT_ADDL" > "HOL4Real.realax.HREAL_LT_ADDL"
-  "HREAL_LT_ADD2" > "HOL4Real.realax.HREAL_LT_ADD2"
-  "HREAL_EQ_LADD" > "HOL4Real.realax.HREAL_EQ_LADD"
-  "HREAL_EQ_ADDR" > "HOL4Base.hreal.HREAL_NOZERO"
-  "HREAL_EQ_ADDL" > "HOL4Real.realax.HREAL_EQ_ADDL"
-
-ignore_thms
-  "real_tybij"
-  "real_of_hreal"
-  "real_neg"
-  "real_mul"
-  "real_lt"
-  "real_inv"
-  "real_add"
-  "real_TY_DEF"
-  "real_1"
-  "real_0"
-  "hreal_of_real"
-  "SUP_ALLPOS_LEMMA4"
-  "SUP_ALLPOS_LEMMA3"
-  "SUP_ALLPOS_LEMMA2"
-  "SUP_ALLPOS_LEMMA1"
-  "REAL_POS"
-  "REAL_ISO_EQ"
-
-end
--- a/src/HOL/Import/HOL/relation.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "transitive" > "transitive_primdef"
-  "the_fun" > "the_fun_primdef"
-  "pred_reflexive" > "pred_reflexive_def"
-  "inv_image" > "inv_image_primdef"
-  "approx" > "approx_primdef"
-  "WFREC" > "WFREC_def"
-  "WF" > "WF_def"
-  "TC" > "TC_def"
-  "RTC" > "RTC_def"
-  "RESTRICT" > "RESTRICT_def"
-  "RC" > "RC_primdef"
-  "EMPTY_REL" > "EMPTY_REL_def"
-
-const_maps
-  "transitive" > "HOL4Base.relation.transitive"
-  "the_fun" > "HOL4Base.relation.the_fun"
-  "pred_reflexive" > "HOL4Base.relation.pred_reflexive"
-  "inv_image" > "HOL4Base.relation.inv_image"
-  "approx" > "HOL4Base.relation.approx"
-  "WFREC" > "HOL4Base.relation.WFREC"
-  "WF" > "HOL4Base.relation.WF"
-  "TC" > "HOL4Base.relation.TC"
-  "RTC" > "HOL4Base.relation.RTC"
-  "RESTRICT" > "HOL4Base.relation.RESTRICT"
-  "RC" > "HOL4Base.relation.RC"
-  "EMPTY_REL" > "HOL4Base.relation.EMPTY_REL"
-
-const_renames
-  "reflexive" > "pred_reflexive"
-
-thm_maps
-  "transitive_primdef" > "HOL4Base.relation.transitive_primdef"
-  "transitive_def" > "HOL4Base.relation.transitive_def"
-  "the_fun_primdef" > "HOL4Base.relation.the_fun_primdef"
-  "the_fun_def" > "HOL4Base.relation.the_fun_def"
-  "reflexive_def" > "HOL4Base.relation.reflexive_def"
-  "pred_reflexive_def" > "HOL4Base.relation.pred_reflexive_def"
-  "inv_image_primdef" > "HOL4Base.relation.inv_image_primdef"
-  "inv_image_def" > "HOL4Base.relation.inv_image_def"
-  "approx_primdef" > "HOL4Base.relation.approx_primdef"
-  "approx_def" > "HOL4Base.relation.approx_def"
-  "WF_inv_image" > "HOL4Base.relation.WF_inv_image"
-  "WF_def" > "HOL4Base.relation.WF_def"
-  "WF_TC" > "HOL4Base.relation.WF_TC"
-  "WF_SUBSET" > "HOL4Base.relation.WF_SUBSET"
-  "WF_RECURSION_THM" > "HOL4Base.relation.WF_RECURSION_THM"
-  "WF_NOT_REFL" > "HOL4Base.relation.WF_NOT_REFL"
-  "WF_INDUCTION_THM" > "HOL4Base.relation.WF_INDUCTION_THM"
-  "WF_EMPTY_REL" > "HOL4Base.relation.WF_EMPTY_REL"
-  "WF_DEF" > "HOL4Base.relation.WF_DEF"
-  "WFREC_def" > "HOL4Base.relation.WFREC_def"
-  "WFREC_THM" > "HOL4Base.relation.WFREC_THM"
-  "WFREC_DEF" > "HOL4Base.relation.WFREC_DEF"
-  "WFREC_COROLLARY" > "HOL4Base.relation.WFREC_COROLLARY"
-  "TC_def" > "HOL4Base.relation.TC_def"
-  "TC_TRANSITIVE" > "HOL4Base.relation.TC_TRANSITIVE"
-  "TC_SUBSET" > "HOL4Base.relation.TC_SUBSET"
-  "TC_STRONG_INDUCT_LEFT1" > "HOL4Base.relation.TC_STRONG_INDUCT_LEFT1"
-  "TC_STRONG_INDUCT" > "HOL4Base.relation.TC_STRONG_INDUCT"
-  "TC_RULES" > "HOL4Base.relation.TC_RULES"
-  "TC_RTC" > "HOL4Base.relation.TC_RTC"
-  "TC_RC_EQNS" > "HOL4Base.relation.TC_RC_EQNS"
-  "TC_MONOTONE" > "HOL4Base.relation.TC_MONOTONE"
-  "TC_INDUCT_LEFT1" > "HOL4Base.relation.TC_INDUCT_LEFT1"
-  "TC_INDUCT" > "HOL4Base.relation.TC_INDUCT"
-  "TC_IDEM" > "HOL4Base.relation.TC_IDEM"
-  "TC_DEF" > "HOL4Base.relation.TC_DEF"
-  "TC_CASES2" > "HOL4Base.relation.TC_CASES2"
-  "TC_CASES1" > "HOL4Base.relation.TC_CASES1"
-  "RTC_def" > "HOL4Base.relation.RTC_def"
-  "RTC_TRANSITIVE" > "HOL4Base.relation.RTC_TRANSITIVE"
-  "RTC_TC_RC" > "HOL4Base.relation.RTC_TC_RC"
-  "RTC_SUBSET" > "HOL4Base.relation.RTC_SUBSET"
-  "RTC_STRONG_INDUCT" > "HOL4Base.relation.RTC_STRONG_INDUCT"
-  "RTC_RULES" > "HOL4Base.relation.RTC_RULES"
-  "RTC_RTC" > "HOL4Base.relation.RTC_RTC"
-  "RTC_REFLEXIVE" > "HOL4Base.relation.RTC_REFLEXIVE"
-  "RTC_MONOTONE" > "HOL4Base.relation.RTC_MONOTONE"
-  "RTC_INDUCT" > "HOL4Base.relation.RTC_INDUCT"
-  "RTC_IDEM" > "HOL4Base.relation.RTC_IDEM"
-  "RTC_DEF" > "HOL4Base.relation.RTC_DEF"
-  "RTC_CASES_RTC_TWICE" > "HOL4Base.relation.RTC_CASES_RTC_TWICE"
-  "RTC_CASES2" > "HOL4Base.relation.RTC_CASES2"
-  "RTC_CASES1" > "HOL4Base.relation.RTC_CASES1"
-  "RESTRICT_def" > "HOL4Base.relation.RESTRICT_def"
-  "RESTRICT_LEMMA" > "HOL4Base.relation.RESTRICT_LEMMA"
-  "RESTRICT_DEF" > "HOL4Base.relation.RESTRICT_DEF"
-  "RC_primdef" > "HOL4Base.relation.RC_primdef"
-  "RC_def" > "HOL4Base.relation.RC_def"
-  "RC_SUBSET" > "HOL4Base.relation.RC_SUBSET"
-  "RC_RTC" > "HOL4Base.relation.RC_RTC"
-  "RC_REFLEXIVE" > "HOL4Base.relation.RC_REFLEXIVE"
-  "RC_IDEM" > "HOL4Base.relation.RC_IDEM"
-  "EMPTY_REL_def" > "HOL4Base.relation.EMPTY_REL_def"
-  "EMPTY_REL_DEF" > "HOL4Base.relation.EMPTY_REL_DEF"
-
-end
--- a/src/HOL/Import/HOL/res_quan.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-import
-
-import_segment "hol4"
-
-thm_maps
-  "RES_SELECT_UNIV" > "HOL4Vec.res_quan.RES_SELECT_UNIV"
-  "RES_SELECT_EMPTY" > "HOL4Vec.res_quan.RES_SELECT_EMPTY"
-  "RES_SELECT" > "HOL4Base.bool.RES_SELECT_DEF"
-  "RES_FORALL_UNIV" > "HOL4Vec.res_quan.RES_FORALL_UNIV"
-  "RES_FORALL_UNIQUE" > "HOL4Vec.res_quan.RES_FORALL_UNIQUE"
-  "RES_FORALL_REORDER" > "HOL4Vec.res_quan.RES_FORALL_REORDER"
-  "RES_FORALL_NULL" > "HOL4Vec.res_quan.RES_FORALL_NULL"
-  "RES_FORALL_FORALL" > "HOL4Vec.res_quan.RES_FORALL_FORALL"
-  "RES_FORALL_EMPTY" > "HOL4Vec.res_quan.RES_FORALL_EMPTY"
-  "RES_FORALL_DISJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_DISJ_DIST"
-  "RES_FORALL_CONJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_CONJ_DIST"
-  "RES_FORALL" > "HOL4Base.bool.RES_FORALL_DEF"
-  "RES_EXISTS_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIV"
-  "RES_EXISTS_UNIQUE_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_UNIV"
-  "RES_EXISTS_UNIQUE_NULL" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_NULL"
-  "RES_EXISTS_UNIQUE_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_EMPTY"
-  "RES_EXISTS_UNIQUE_ALT" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_ALT"
-  "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
-  "RES_EXISTS_REORDER" > "HOL4Vec.res_quan.RES_EXISTS_REORDER"
-  "RES_EXISTS_NULL" > "HOL4Vec.res_quan.RES_EXISTS_NULL"
-  "RES_EXISTS_EQUAL" > "HOL4Vec.res_quan.RES_EXISTS_EQUAL"
-  "RES_EXISTS_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_EMPTY"
-  "RES_EXISTS_DISJ_DIST" > "HOL4Vec.res_quan.RES_EXISTS_DISJ_DIST"
-  "RES_EXISTS_ALT" > "HOL4Vec.res_quan.RES_EXISTS_ALT"
-  "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS_DEF"
-  "RES_DISJ_EXISTS_DIST" > "HOL4Vec.res_quan.RES_DISJ_EXISTS_DIST"
-  "RES_ABSTRACT_IDEMPOT" > "HOL4Vec.res_quan.RES_ABSTRACT_IDEMPOT"
-  "RES_ABSTRACT_EQUAL_EQ" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL_EQ"
-  "RES_ABSTRACT_EQUAL" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL"
-  "RES_ABSTRACT" > "HOL4Vec.res_quan.RES_ABSTRACT"
-
-end
--- a/src/HOL/Import/HOL/rich_list.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,373 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "UNZIP_SND" > "UNZIP_SND_def"
-  "UNZIP_FST" > "UNZIP_FST_def"
-  "SUFFIX" > "SUFFIX_def"
-  "SPLITP" > "SPLITP_def"
-  "SNOC" > "SNOC_def"
-  "SEG" > "SEG_def"
-  "SCANR" > "SCANR_def"
-  "SCANL" > "SCANL_def"
-  "REPLICATE" > "REPLICATE_def"
-  "PREFIX" > "PREFIX_def"
-  "OR_EL" > "OR_EL_def"
-  "LASTN" > "LASTN_def"
-  "IS_SUFFIX" > "IS_SUFFIX_def"
-  "IS_SUBLIST" > "IS_SUBLIST_def"
-  "IS_PREFIX" > "IS_PREFIX_def"
-  "GENLIST" > "GENLIST_def"
-  "FIRSTN" > "FIRSTN_def"
-  "ELL" > "ELL_def"
-  "BUTLASTN" > "BUTLASTN_def"
-  "BUTFIRSTN" > "BUTFIRSTN_def"
-  "AND_EL" > "AND_EL_def"
-
-const_maps
-  "UNZIP_SND" > "HOL4Base.rich_list.UNZIP_SND"
-  "UNZIP_FST" > "HOL4Base.rich_list.UNZIP_FST"
-  "SUFFIX" > "HOL4Base.rich_list.SUFFIX"
-  "PREFIX" > "HOL4Base.rich_list.PREFIX"
-  "OR_EL" > "HOL4Base.rich_list.OR_EL"
-  "AND_EL" > "HOL4Base.rich_list.AND_EL"
-
-thm_maps
-  "list_INDUCT" > "HOL4Compat.list_INDUCT"
-  "list_CASES" > "HOL4Compat.list_CASES"
-  "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
-  "ZIP_SNOC" > "HOL4Base.rich_list.ZIP_SNOC"
-  "ZIP" > "HOL4Compat.ZIP"
-  "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
-  "UNZIP_SNOC" > "HOL4Base.rich_list.UNZIP_SNOC"
-  "UNZIP_SND_def" > "HOL4Base.rich_list.UNZIP_SND_def"
-  "UNZIP_SND_DEF" > "HOL4Base.rich_list.UNZIP_SND_DEF"
-  "UNZIP_FST_def" > "HOL4Base.rich_list.UNZIP_FST_def"
-  "UNZIP_FST_DEF" > "HOL4Base.rich_list.UNZIP_FST_DEF"
-  "UNZIP" > "HOL4Compat.UNZIP"
-  "TL_SNOC" > "HOL4Base.rich_list.TL_SNOC"
-  "TL" > "List.tl.simps_2"
-  "SUM_SNOC" > "HOL4Base.rich_list.SUM_SNOC"
-  "SUM_REVERSE" > "HOL4Base.rich_list.SUM_REVERSE"
-  "SUM_FOLDR" > "HOL4Compat.sum_def"
-  "SUM_FOLDL" > "HOL4Base.rich_list.SUM_FOLDL"
-  "SUM_FLAT" > "HOL4Base.rich_list.SUM_FLAT"
-  "SUM_APPEND" > "HOL4Base.rich_list.SUM_APPEND"
-  "SUM" > "HOL4Compat.SUM"
-  "SUFFIX_def" > "HOL4Base.rich_list.SUFFIX_def"
-  "SUFFIX_DEF" > "HOL4Base.rich_list.SUFFIX_DEF"
-  "SPLITP" > "HOL4Base.rich_list.SPLITP"
-  "SOME_EL_SNOC" > "HOL4Base.rich_list.SOME_EL_SNOC"
-  "SOME_EL_SEG" > "HOL4Base.rich_list.SOME_EL_SEG"
-  "SOME_EL_REVERSE" > "List.list_ex_rev"
-  "SOME_EL_MAP" > "HOL4Base.rich_list.SOME_EL_MAP"
-  "SOME_EL_LASTN" > "HOL4Base.rich_list.SOME_EL_LASTN"
-  "SOME_EL_FOLDR_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDR_MAP"
-  "SOME_EL_FOLDR" > "HOL4Base.rich_list.SOME_EL_FOLDR"
-  "SOME_EL_FOLDL_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDL_MAP"
-  "SOME_EL_FOLDL" > "HOL4Base.rich_list.SOME_EL_FOLDL"
-  "SOME_EL_FIRSTN" > "HOL4Base.rich_list.SOME_EL_FIRSTN"
-  "SOME_EL_DISJ" > "HOL4Base.rich_list.SOME_EL_DISJ"
-  "SOME_EL_BUTLASTN" > "HOL4Base.rich_list.SOME_EL_BUTLASTN"
-  "SOME_EL_BUTFIRSTN" > "HOL4Base.rich_list.SOME_EL_BUTFIRSTN"
-  "SOME_EL_APPEND" > "List.list_ex_append"
-  "SOME_EL" > "HOL4Compat.list_exists_DEF"
-  "SNOC_REVERSE_CONS" > "HOL4Base.rich_list.SNOC_REVERSE_CONS"
-  "SNOC_INDUCT" > "HOL4Base.rich_list.SNOC_INDUCT"
-  "SNOC_FOLDR" > "HOL4Base.rich_list.SNOC_FOLDR"
-  "SNOC_EQ_LENGTH_EQ" > "HOL4Base.rich_list.SNOC_EQ_LENGTH_EQ"
-  "SNOC_CASES" > "HOL4Base.rich_list.SNOC_CASES"
-  "SNOC_Axiom" > "HOL4Base.rich_list.SNOC_Axiom"
-  "SNOC_APPEND" > "HOL4Base.rich_list.SNOC_APPEND"
-  "SNOC_11" > "HOL4Base.rich_list.SNOC_11"
-  "SNOC" > "HOL4Base.rich_list.SNOC"
-  "SEG_SUC_CONS" > "HOL4Base.rich_list.SEG_SUC_CONS"
-  "SEG_SNOC" > "HOL4Base.rich_list.SEG_SNOC"
-  "SEG_SEG" > "HOL4Base.rich_list.SEG_SEG"
-  "SEG_REVERSE" > "HOL4Base.rich_list.SEG_REVERSE"
-  "SEG_LENGTH_SNOC" > "HOL4Base.rich_list.SEG_LENGTH_SNOC"
-  "SEG_LENGTH_ID" > "HOL4Base.rich_list.SEG_LENGTH_ID"
-  "SEG_LASTN_BUTLASTN" > "HOL4Base.rich_list.SEG_LASTN_BUTLASTN"
-  "SEG_FIRSTN_BUTFISTN" > "HOL4Base.rich_list.SEG_FIRSTN_BUTFISTN"
-  "SEG_APPEND2" > "HOL4Base.rich_list.SEG_APPEND2"
-  "SEG_APPEND1" > "HOL4Base.rich_list.SEG_APPEND1"
-  "SEG_APPEND" > "HOL4Base.rich_list.SEG_APPEND"
-  "SEG_0_SNOC" > "HOL4Base.rich_list.SEG_0_SNOC"
-  "SEG" > "HOL4Base.rich_list.SEG"
-  "SCANR" > "HOL4Base.rich_list.SCANR"
-  "SCANL" > "HOL4Base.rich_list.SCANL"
-  "REVERSE_SNOC" > "HOL4Base.rich_list.REVERSE_SNOC"
-  "REVERSE_REVERSE" > "List.rev_rev_ident"
-  "REVERSE_FOLDR" > "HOL4Base.rich_list.REVERSE_FOLDR"
-  "REVERSE_FLAT" > "HOL4Base.rich_list.REVERSE_FLAT"
-  "REVERSE_EQ_NIL" > "List.rev_is_Nil_conv"
-  "REVERSE_APPEND" > "List.rev_append"
-  "REVERSE" > "HOL4Base.rich_list.REVERSE"
-  "REPLICATE" > "HOL4Base.rich_list.REPLICATE"
-  "PREFIX_def" > "HOL4Base.rich_list.PREFIX_def"
-  "PREFIX_FOLDR" > "HOL4Base.rich_list.PREFIX_FOLDR"
-  "PREFIX_DEF" > "HOL4Base.rich_list.PREFIX_DEF"
-  "PREFIX" > "HOL4Base.rich_list.PREFIX"
-  "OR_EL_def" > "HOL4Base.rich_list.OR_EL_def"
-  "OR_EL_FOLDR" > "HOL4Base.rich_list.OR_EL_FOLDR"
-  "OR_EL_FOLDL" > "HOL4Base.rich_list.OR_EL_FOLDL"
-  "OR_EL_DEF" > "HOL4Base.rich_list.OR_EL_DEF"
-  "NULL_FOLDR" > "HOL4Base.rich_list.NULL_FOLDR"
-  "NULL_FOLDL" > "HOL4Base.rich_list.NULL_FOLDL"
-  "NULL_EQ_NIL" > "List.eq_Nil_null"
-  "NULL_DEF" > "HOL4Compat.NULL_DEF"
-  "NULL" > "HOL4Base.list.NULL"
-  "NOT_SOME_EL_ALL_EL" > "HOL4Base.list.NOT_EXISTS"
-  "NOT_SNOC_NIL" > "HOL4Base.rich_list.NOT_SNOC_NIL"
-  "NOT_NIL_SNOC" > "HOL4Base.rich_list.NOT_NIL_SNOC"
-  "NOT_NIL_CONS" > "List.list.distinct_1"
-  "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
-  "NOT_CONS_NIL" > "List.list.distinct_2"
-  "NOT_ALL_EL_SOME_EL" > "HOL4Base.list.NOT_EVERY"
-  "MONOID_APPEND_NIL" > "HOL4Base.rich_list.MONOID_APPEND_NIL"
-  "MAP_o" > "List.map.comp"
-  "MAP_SNOC" > "HOL4Base.rich_list.MAP_SNOC"
-  "MAP_REVERSE" > "List.rev_map"
-  "MAP_MAP_o" > "List.map.compositionality"
-  "MAP_FOLDR" > "HOL4Base.rich_list.MAP_FOLDR"
-  "MAP_FOLDL" > "HOL4Base.rich_list.MAP_FOLDL"
-  "MAP_FLAT" > "List.map_concat"
-  "MAP_FILTER" > "HOL4Base.rich_list.MAP_FILTER"
-  "MAP_APPEND" > "List.map_append"
-  "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
-  "MAP2" > "HOL4Compat.MAP2"
-  "MAP" > "HOL4Compat.MAP"
-  "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
-  "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
-  "LENGTH_UNZIP_SND" > "HOL4Base.rich_list.LENGTH_UNZIP_SND"
-  "LENGTH_UNZIP_FST" > "HOL4Base.rich_list.LENGTH_UNZIP_FST"
-  "LENGTH_SNOC" > "HOL4Base.rich_list.LENGTH_SNOC"
-  "LENGTH_SEG" > "HOL4Base.rich_list.LENGTH_SEG"
-  "LENGTH_SCANR" > "HOL4Base.rich_list.LENGTH_SCANR"
-  "LENGTH_SCANL" > "HOL4Base.rich_list.LENGTH_SCANL"
-  "LENGTH_REVERSE" > "List.length_rev"
-  "LENGTH_REPLICATE" > "HOL4Base.rich_list.LENGTH_REPLICATE"
-  "LENGTH_NOT_NULL" > "HOL4Base.rich_list.LENGTH_NOT_NULL"
-  "LENGTH_NIL" > "List.length_0_conv"
-  "LENGTH_MAP2" > "HOL4Base.rich_list.LENGTH_MAP2"
-  "LENGTH_MAP" > "List.length_map"
-  "LENGTH_LASTN" > "HOL4Base.rich_list.LENGTH_LASTN"
-  "LENGTH_GENLIST" > "HOL4Base.rich_list.LENGTH_GENLIST"
-  "LENGTH_FOLDR" > "HOL4Base.rich_list.LENGTH_FOLDR"
-  "LENGTH_FOLDL" > "HOL4Base.rich_list.LENGTH_FOLDL"
-  "LENGTH_FLAT" > "HOL4Base.rich_list.LENGTH_FLAT"
-  "LENGTH_FIRSTN" > "HOL4Base.rich_list.LENGTH_FIRSTN"
-  "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
-  "LENGTH_EQ" > "HOL4Base.rich_list.LENGTH_EQ"
-  "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
-  "LENGTH_BUTLASTN" > "HOL4Base.rich_list.LENGTH_BUTLASTN"
-  "LENGTH_BUTLAST" > "HOL4Base.rich_list.LENGTH_BUTLAST"
-  "LENGTH_BUTFIRSTN" > "HOL4Base.rich_list.LENGTH_BUTFIRSTN"
-  "LENGTH_APPEND" > "List.length_append"
-  "LENGTH" > "HOL4Compat.LENGTH"
-  "LAST_LASTN_LAST" > "HOL4Base.rich_list.LAST_LASTN_LAST"
-  "LAST_CONS" > "HOL4Base.list.LAST_CONS"
-  "LASTN_SEG" > "HOL4Base.rich_list.LASTN_SEG"
-  "LASTN_REVERSE" > "HOL4Base.rich_list.LASTN_REVERSE"
-  "LASTN_MAP" > "HOL4Base.rich_list.LASTN_MAP"
-  "LASTN_LENGTH_ID" > "HOL4Base.rich_list.LASTN_LENGTH_ID"
-  "LASTN_LENGTH_APPEND" > "HOL4Base.rich_list.LASTN_LENGTH_APPEND"
-  "LASTN_LASTN" > "HOL4Base.rich_list.LASTN_LASTN"
-  "LASTN_CONS" > "HOL4Base.rich_list.LASTN_CONS"
-  "LASTN_BUTLASTN" > "HOL4Base.rich_list.LASTN_BUTLASTN"
-  "LASTN_BUTFIRSTN" > "HOL4Base.rich_list.LASTN_BUTFIRSTN"
-  "LASTN_APPEND2" > "HOL4Base.rich_list.LASTN_APPEND2"
-  "LASTN_APPEND1" > "HOL4Base.rich_list.LASTN_APPEND1"
-  "LASTN_1" > "HOL4Base.rich_list.LASTN_1"
-  "LASTN" > "HOL4Base.rich_list.LASTN"
-  "LAST" > "HOL4Base.rich_list.LAST"
-  "IS_SUFFIX_REVERSE" > "HOL4Base.rich_list.IS_SUFFIX_REVERSE"
-  "IS_SUFFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_SUFFIX_IS_SUBLIST"
-  "IS_SUFFIX_APPEND" > "HOL4Base.rich_list.IS_SUFFIX_APPEND"
-  "IS_SUFFIX" > "HOL4Base.rich_list.IS_SUFFIX"
-  "IS_SUBLIST_REVERSE" > "HOL4Base.rich_list.IS_SUBLIST_REVERSE"
-  "IS_SUBLIST_APPEND" > "HOL4Base.rich_list.IS_SUBLIST_APPEND"
-  "IS_SUBLIST" > "HOL4Base.rich_list.IS_SUBLIST"
-  "IS_PREFIX_REVERSE" > "HOL4Base.rich_list.IS_PREFIX_REVERSE"
-  "IS_PREFIX_PREFIX" > "HOL4Base.rich_list.IS_PREFIX_PREFIX"
-  "IS_PREFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_PREFIX_IS_SUBLIST"
-  "IS_PREFIX_APPEND" > "HOL4Base.rich_list.IS_PREFIX_APPEND"
-  "IS_PREFIX" > "HOL4Base.rich_list.IS_PREFIX"
-  "IS_EL_SOME_EL" > "HOL4Base.rich_list.IS_EL_SOME_EL"
-  "IS_EL_SNOC" > "HOL4Base.rich_list.IS_EL_SNOC"
-  "IS_EL_SEG" > "HOL4Base.rich_list.IS_EL_SEG"
-  "IS_EL_REVERSE" > "HOL4Base.rich_list.IS_EL_REVERSE"
-  "IS_EL_REPLICATE" > "HOL4Base.rich_list.IS_EL_REPLICATE"
-  "IS_EL_LASTN" > "HOL4Base.rich_list.IS_EL_LASTN"
-  "IS_EL_FOLDR_MAP" > "HOL4Base.rich_list.IS_EL_FOLDR_MAP"
-  "IS_EL_FOLDR" > "HOL4Base.rich_list.IS_EL_FOLDR"
-  "IS_EL_FOLDL_MAP" > "HOL4Base.rich_list.IS_EL_FOLDL_MAP"
-  "IS_EL_FOLDL" > "HOL4Base.rich_list.IS_EL_FOLDL"
-  "IS_EL_FIRSTN" > "HOL4Base.rich_list.IS_EL_FIRSTN"
-  "IS_EL_FILTER" > "HOL4Base.rich_list.IS_EL_FILTER"
-  "IS_EL_DEF" > "HOL4Base.rich_list.IS_EL_DEF"
-  "IS_EL_BUTLASTN" > "HOL4Base.rich_list.IS_EL_BUTLASTN"
-  "IS_EL_BUTFIRSTN" > "HOL4Base.rich_list.IS_EL_BUTFIRSTN"
-  "IS_EL_APPEND" > "HOL4Base.list.MEM_APPEND"
-  "IS_EL" > "HOL4Compat.MEM"
-  "HD" > "List.hd.simps"
-  "GENLIST" > "HOL4Base.rich_list.GENLIST"
-  "FOLDR_SNOC" > "HOL4Base.rich_list.FOLDR_SNOC"
-  "FOLDR_SINGLE" > "HOL4Base.rich_list.FOLDR_SINGLE"
-  "FOLDR_REVERSE" > "HOL4Base.rich_list.FOLDR_REVERSE"
-  "FOLDR_MAP_REVERSE" > "HOL4Base.rich_list.FOLDR_MAP_REVERSE"
-  "FOLDR_MAP" > "HOL4Base.rich_list.FOLDR_MAP"
-  "FOLDR_FOLDL_REVERSE" > "List.foldr_foldl"
-  "FOLDR_FOLDL" > "HOL4Base.rich_list.FOLDR_FOLDL"
-  "FOLDR_FILTER_REVERSE" > "HOL4Base.rich_list.FOLDR_FILTER_REVERSE"
-  "FOLDR_FILTER" > "HOL4Base.rich_list.FOLDR_FILTER"
-  "FOLDR_CONS_NIL" > "HOL4Base.rich_list.FOLDR_CONS_NIL"
-  "FOLDR_APPEND" > "List.foldr_append"
-  "FOLDR" > "HOL4Compat.FOLDR"
-  "FOLDL_SNOC_NIL" > "HOL4Base.rich_list.FOLDL_SNOC_NIL"
-  "FOLDL_SNOC" > "HOL4Base.rich_list.FOLDL_SNOC"
-  "FOLDL_SINGLE" > "HOL4Base.rich_list.FOLDL_SINGLE"
-  "FOLDL_REVERSE" > "HOL4Base.rich_list.FOLDL_REVERSE"
-  "FOLDL_MAP" > "List.foldl_map"
-  "FOLDL_FOLDR_REVERSE" > "List.foldl_foldr"
-  "FOLDL_FILTER" > "HOL4Base.rich_list.FOLDL_FILTER"
-  "FOLDL_APPEND" > "List.foldl_append"
-  "FOLDL" > "HOL4Compat.FOLDL"
-  "FLAT_SNOC" > "HOL4Base.rich_list.FLAT_SNOC"
-  "FLAT_REVERSE" > "HOL4Base.rich_list.FLAT_REVERSE"
-  "FLAT_FOLDR" > "HOL4Base.rich_list.FLAT_FOLDR"
-  "FLAT_FLAT" > "HOL4Base.rich_list.FLAT_FLAT"
-  "FLAT_APPEND" > "List.concat_append"
-  "FLAT" > "HOL4Compat.FLAT"
-  "FIRSTN_SNOC" > "HOL4Base.rich_list.FIRSTN_SNOC"
-  "FIRSTN_SEG" > "HOL4Base.rich_list.FIRSTN_SEG"
-  "FIRSTN_REVERSE" > "HOL4Base.rich_list.FIRSTN_REVERSE"
-  "FIRSTN_LENGTH_ID" > "HOL4Base.rich_list.FIRSTN_LENGTH_ID"
-  "FIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.FIRSTN_LENGTH_APPEND"
-  "FIRSTN_FIRSTN" > "HOL4Base.rich_list.FIRSTN_FIRSTN"
-  "FIRSTN_BUTLASTN" > "HOL4Base.rich_list.FIRSTN_BUTLASTN"
-  "FIRSTN_APPEND2" > "HOL4Base.rich_list.FIRSTN_APPEND2"
-  "FIRSTN_APPEND1" > "HOL4Base.rich_list.FIRSTN_APPEND1"
-  "FIRSTN" > "HOL4Base.rich_list.FIRSTN"
-  "FILTER_SNOC" > "HOL4Base.rich_list.FILTER_SNOC"
-  "FILTER_REVERSE" > "List.rev_filter"
-  "FILTER_MAP" > "List.filter_map"
-  "FILTER_IDEM" > "HOL4Base.rich_list.FILTER_IDEM"
-  "FILTER_FOLDR" > "HOL4Base.rich_list.FILTER_FOLDR"
-  "FILTER_FOLDL" > "HOL4Base.rich_list.FILTER_FOLDL"
-  "FILTER_FLAT" > "List.filter_concat"
-  "FILTER_FILTER" > "HOL4Base.rich_list.FILTER_FILTER"
-  "FILTER_COMM" > "HOL4Base.rich_list.FILTER_COMM"
-  "FILTER_APPEND" > "List.filter_append"
-  "FILTER" > "HOL4Compat.FILTER"
-  "FCOMM_FOLDR_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDR_FLAT"
-  "FCOMM_FOLDR_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDR_APPEND"
-  "FCOMM_FOLDL_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDL_FLAT"
-  "FCOMM_FOLDL_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDL_APPEND"
-  "EQ_LIST" > "HOL4Base.list.EQ_LIST"
-  "EL_SNOC" > "HOL4Base.rich_list.EL_SNOC"
-  "EL_SEG" > "HOL4Base.rich_list.EL_SEG"
-  "EL_REVERSE_ELL" > "HOL4Base.rich_list.EL_REVERSE_ELL"
-  "EL_REVERSE" > "HOL4Base.rich_list.EL_REVERSE"
-  "EL_PRE_LENGTH" > "HOL4Base.rich_list.EL_PRE_LENGTH"
-  "EL_MAP" > "HOL4Base.rich_list.EL_MAP"
-  "EL_LENGTH_SNOC" > "HOL4Base.rich_list.EL_LENGTH_SNOC"
-  "EL_LENGTH_APPEND" > "HOL4Base.rich_list.EL_LENGTH_APPEND"
-  "EL_IS_EL" > "HOL4Base.rich_list.EL_IS_EL"
-  "EL_ELL" > "HOL4Base.rich_list.EL_ELL"
-  "EL_CONS" > "HOL4Base.rich_list.EL_CONS"
-  "EL_APPEND2" > "HOL4Base.rich_list.EL_APPEND2"
-  "EL_APPEND1" > "HOL4Base.rich_list.EL_APPEND1"
-  "ELL_SUC_SNOC" > "HOL4Base.rich_list.ELL_SUC_SNOC"
-  "ELL_SNOC" > "HOL4Base.rich_list.ELL_SNOC"
-  "ELL_SEG" > "HOL4Base.rich_list.ELL_SEG"
-  "ELL_REVERSE_EL" > "HOL4Base.rich_list.ELL_REVERSE_EL"
-  "ELL_REVERSE" > "HOL4Base.rich_list.ELL_REVERSE"
-  "ELL_PRE_LENGTH" > "HOL4Base.rich_list.ELL_PRE_LENGTH"
-  "ELL_MAP" > "HOL4Base.rich_list.ELL_MAP"
-  "ELL_LENGTH_SNOC" > "HOL4Base.rich_list.ELL_LENGTH_SNOC"
-  "ELL_LENGTH_CONS" > "HOL4Base.rich_list.ELL_LENGTH_CONS"
-  "ELL_LENGTH_APPEND" > "HOL4Base.rich_list.ELL_LENGTH_APPEND"
-  "ELL_LAST" > "HOL4Base.rich_list.ELL_LAST"
-  "ELL_IS_EL" > "HOL4Base.rich_list.ELL_IS_EL"
-  "ELL_EL" > "HOL4Base.rich_list.ELL_EL"
-  "ELL_CONS" > "HOL4Base.rich_list.ELL_CONS"
-  "ELL_APPEND2" > "HOL4Base.rich_list.ELL_APPEND2"
-  "ELL_APPEND1" > "HOL4Base.rich_list.ELL_APPEND1"
-  "ELL_0_SNOC" > "HOL4Base.rich_list.ELL_0_SNOC"
-  "ELL" > "HOL4Base.rich_list.ELL"
-  "EL" > "HOL4Base.rich_list.EL"
-  "CONS_APPEND" > "HOL4Base.rich_list.CONS_APPEND"
-  "CONS_11" > "List.list.inject"
-  "CONS" > "HOL4Base.list.CONS"
-  "COMM_MONOID_FOLDR" > "HOL4Base.rich_list.COMM_MONOID_FOLDR"
-  "COMM_MONOID_FOLDL" > "HOL4Base.rich_list.COMM_MONOID_FOLDL"
-  "COMM_ASSOC_FOLDR_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDR_REVERSE"
-  "COMM_ASSOC_FOLDL_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDL_REVERSE"
-  "BUTLAST_CONS" > "HOL4Base.list.FRONT_CONS"
-  "BUTLASTN_SUC_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_SUC_BUTLAST"
-  "BUTLASTN_SEG" > "HOL4Base.rich_list.BUTLASTN_SEG"
-  "BUTLASTN_REVERSE" > "HOL4Base.rich_list.BUTLASTN_REVERSE"
-  "BUTLASTN_MAP" > "HOL4Base.rich_list.BUTLASTN_MAP"
-  "BUTLASTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTLASTN_LENGTH_NIL"
-  "BUTLASTN_LENGTH_CONS" > "HOL4Base.rich_list.BUTLASTN_LENGTH_CONS"
-  "BUTLASTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTLASTN_LENGTH_APPEND"
-  "BUTLASTN_LASTN_NIL" > "HOL4Base.rich_list.BUTLASTN_LASTN_NIL"
-  "BUTLASTN_LASTN" > "HOL4Base.rich_list.BUTLASTN_LASTN"
-  "BUTLASTN_FIRSTN" > "HOL4Base.rich_list.BUTLASTN_FIRSTN"
-  "BUTLASTN_CONS" > "HOL4Base.rich_list.BUTLASTN_CONS"
-  "BUTLASTN_BUTLASTN" > "HOL4Base.rich_list.BUTLASTN_BUTLASTN"
-  "BUTLASTN_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_BUTLAST"
-  "BUTLASTN_APPEND2" > "HOL4Base.rich_list.BUTLASTN_APPEND2"
-  "BUTLASTN_APPEND1" > "HOL4Base.rich_list.BUTLASTN_APPEND1"
-  "BUTLASTN_1" > "HOL4Base.rich_list.BUTLASTN_1"
-  "BUTLASTN" > "HOL4Base.rich_list.BUTLASTN"
-  "BUTLAST" > "HOL4Base.rich_list.BUTLAST"
-  "BUTFIRSTN_SNOC" > "HOL4Base.rich_list.BUTFIRSTN_SNOC"
-  "BUTFIRSTN_SEG" > "HOL4Base.rich_list.BUTFIRSTN_SEG"
-  "BUTFIRSTN_REVERSE" > "HOL4Base.rich_list.BUTFIRSTN_REVERSE"
-  "BUTFIRSTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_NIL"
-  "BUTFIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_APPEND"
-  "BUTFIRSTN_LASTN" > "HOL4Base.rich_list.BUTFIRSTN_LASTN"
-  "BUTFIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN_BUTFIRSTN"
-  "BUTFIRSTN_APPEND2" > "HOL4Base.rich_list.BUTFIRSTN_APPEND2"
-  "BUTFIRSTN_APPEND1" > "HOL4Base.rich_list.BUTFIRSTN_APPEND1"
-  "BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN"
-  "ASSOC_FOLDR_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDR_FLAT"
-  "ASSOC_FOLDL_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDL_FLAT"
-  "ASSOC_APPEND" > "HOL4Base.rich_list.ASSOC_APPEND"
-  "APPEND_SNOC" > "HOL4Base.rich_list.APPEND_SNOC"
-  "APPEND_NIL" > "HOL4Base.rich_list.APPEND_NIL"
-  "APPEND_LENGTH_EQ" > "HOL4Base.rich_list.APPEND_LENGTH_EQ"
-  "APPEND_FOLDR" > "HOL4Base.rich_list.APPEND_FOLDR"
-  "APPEND_FOLDL" > "HOL4Base.rich_list.APPEND_FOLDL"
-  "APPEND_FIRSTN_LASTN" > "HOL4Base.rich_list.APPEND_FIRSTN_LASTN"
-  "APPEND_FIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_FIRSTN_BUTFIRSTN"
-  "APPEND_BUTLAST_LAST" > "List.append_butlast_last_id"
-  "APPEND_BUTLASTN_LASTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_LASTN"
-  "APPEND_BUTLASTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_BUTFIRSTN"
-  "APPEND_ASSOC" > "List.append_assoc"
-  "APPEND" > "HOL4Compat.APPEND"
-  "AND_EL_def" > "HOL4Base.rich_list.AND_EL_def"
-  "AND_EL_FOLDR" > "HOL4Base.rich_list.AND_EL_FOLDR"
-  "AND_EL_FOLDL" > "HOL4Base.rich_list.AND_EL_FOLDL"
-  "AND_EL_DEF" > "HOL4Base.rich_list.AND_EL_DEF"
-  "ALL_EL_SNOC" > "HOL4Base.rich_list.ALL_EL_SNOC"
-  "ALL_EL_SEG" > "HOL4Base.rich_list.ALL_EL_SEG"
-  "ALL_EL_REVERSE" > "List.list_all_rev"
-  "ALL_EL_REPLICATE" > "HOL4Base.rich_list.ALL_EL_REPLICATE"
-  "ALL_EL_MAP" > "HOL4Base.rich_list.ALL_EL_MAP"
-  "ALL_EL_LASTN" > "HOL4Base.rich_list.ALL_EL_LASTN"
-  "ALL_EL_FOLDR_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDR_MAP"
-  "ALL_EL_FOLDR" > "HOL4Base.rich_list.ALL_EL_FOLDR"
-  "ALL_EL_FOLDL_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDL_MAP"
-  "ALL_EL_FOLDL" > "HOL4Base.rich_list.ALL_EL_FOLDL"
-  "ALL_EL_FIRSTN" > "HOL4Base.rich_list.ALL_EL_FIRSTN"
-  "ALL_EL_CONJ" > "HOL4Base.list.EVERY_CONJ"
-  "ALL_EL_BUTLASTN" > "HOL4Base.rich_list.ALL_EL_BUTLASTN"
-  "ALL_EL_BUTFIRSTN" > "HOL4Base.rich_list.ALL_EL_BUTFIRSTN"
-  "ALL_EL_APPEND" > "List.list_all_append"
-  "ALL_EL" > "HOL4Compat.EVERY_DEF"
-
-end
--- a/src/HOL/Import/HOL/seq.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "sums" > "sums_def"
-  "summable" > "summable_def"
-  "suminf" > "suminf_def"
-  "subseq" > "subseq_def"
-  "mono" > "mono_def"
-  "lim" > "lim_def"
-  "hol4-->" > "hol4-->_def"
-  "convergent" > "convergent_def"
-  "cauchy" > "cauchy_def"
-
-const_maps
-  "sums" > "HOL4Real.seq.sums"
-  "summable" > "HOL4Real.seq.summable"
-  "suminf" > "HOL4Real.seq.suminf"
-  "subseq" > "HOL4Real.seq.subseq"
-  "mono" > "HOL4Real.seq.mono"
-  "lim" > "HOL4Real.seq.lim"
-  "hol4-->" > "HOL4Real.seq.hol4-->"
-  "convergent" > "HOL4Real.seq.convergent"
-  "cauchy" > "HOL4Real.seq.cauchy"
-
-const_renames
-  "-->" > "hol4-->"
-
-thm_maps
-  "tends_num_real" > "HOL4Real.seq.tends_num_real"
-  "sums_def" > "HOL4Real.seq.sums_def"
-  "sums" > "HOL4Real.seq.sums"
-  "summable_def" > "HOL4Real.seq.summable_def"
-  "summable" > "HOL4Real.seq.summable"
-  "suminf_def" > "HOL4Real.seq.suminf_def"
-  "suminf" > "HOL4Real.seq.suminf"
-  "subseq_def" > "HOL4Real.seq.subseq_def"
-  "subseq" > "HOL4Real.seq.subseq"
-  "mono_def" > "HOL4Real.seq.mono_def"
-  "mono" > "HOL4Real.seq.mono"
-  "lim_def" > "HOL4Real.seq.lim_def"
-  "lim" > "HOL4Real.seq.lim"
-  "hol4-->_def" > "HOL4Real.seq.hol4-->_def"
-  "convergent_def" > "HOL4Real.seq.convergent_def"
-  "convergent" > "HOL4Real.seq.convergent"
-  "cauchy_def" > "HOL4Real.seq.cauchy_def"
-  "cauchy" > "HOL4Real.seq.cauchy"
-  "SUM_UNIQ" > "HOL4Real.seq.SUM_UNIQ"
-  "SUM_SUMMABLE" > "HOL4Real.seq.SUM_SUMMABLE"
-  "SUMMABLE_SUM" > "HOL4Real.seq.SUMMABLE_SUM"
-  "SUBSEQ_SUC" > "HOL4Real.seq.SUBSEQ_SUC"
-  "SER_ZERO" > "HOL4Real.seq.SER_ZERO"
-  "SER_SUB" > "HOL4Real.seq.SER_SUB"
-  "SER_RATIO" > "HOL4Real.seq.SER_RATIO"
-  "SER_POS_LT_PAIR" > "HOL4Real.seq.SER_POS_LT_PAIR"
-  "SER_POS_LT" > "HOL4Real.seq.SER_POS_LT"
-  "SER_POS_LE" > "HOL4Real.seq.SER_POS_LE"
-  "SER_PAIR" > "HOL4Real.seq.SER_PAIR"
-  "SER_OFFSET" > "HOL4Real.seq.SER_OFFSET"
-  "SER_NEG" > "HOL4Real.seq.SER_NEG"
-  "SER_LE2" > "HOL4Real.seq.SER_LE2"
-  "SER_LE" > "HOL4Real.seq.SER_LE"
-  "SER_GROUP" > "HOL4Real.seq.SER_GROUP"
-  "SER_COMPARA" > "HOL4Real.seq.SER_COMPARA"
-  "SER_COMPAR" > "HOL4Real.seq.SER_COMPAR"
-  "SER_CMUL" > "HOL4Real.seq.SER_CMUL"
-  "SER_CDIV" > "HOL4Real.seq.SER_CDIV"
-  "SER_CAUCHY" > "HOL4Real.seq.SER_CAUCHY"
-  "SER_ADD" > "HOL4Real.seq.SER_ADD"
-  "SER_ACONV" > "HOL4Real.seq.SER_ACONV"
-  "SER_ABS" > "HOL4Real.seq.SER_ABS"
-  "SER_0" > "HOL4Real.seq.SER_0"
-  "SEQ_UNIQ" > "HOL4Real.seq.SEQ_UNIQ"
-  "SEQ_SUC" > "HOL4Real.seq.SEQ_SUC"
-  "SEQ_SUBLE" > "HOL4Real.seq.SEQ_SUBLE"
-  "SEQ_SUB" > "HOL4Real.seq.SEQ_SUB"
-  "SEQ_SBOUNDED" > "HOL4Real.seq.SEQ_SBOUNDED"
-  "SEQ_POWER_ABS" > "HOL4Real.seq.SEQ_POWER_ABS"
-  "SEQ_POWER" > "HOL4Real.seq.SEQ_POWER"
-  "SEQ_NEG_CONV" > "HOL4Real.seq.SEQ_NEG_CONV"
-  "SEQ_NEG_BOUNDED" > "HOL4Real.seq.SEQ_NEG_BOUNDED"
-  "SEQ_NEG" > "HOL4Real.seq.SEQ_NEG"
-  "SEQ_MUL" > "HOL4Real.seq.SEQ_MUL"
-  "SEQ_MONOSUB" > "HOL4Real.seq.SEQ_MONOSUB"
-  "SEQ_LIM" > "HOL4Real.seq.SEQ_LIM"
-  "SEQ_LE" > "HOL4Real.seq.SEQ_LE"
-  "SEQ_INV0" > "HOL4Real.seq.SEQ_INV0"
-  "SEQ_INV" > "HOL4Real.seq.SEQ_INV"
-  "SEQ_ICONV" > "HOL4Real.seq.SEQ_ICONV"
-  "SEQ_DIV" > "HOL4Real.seq.SEQ_DIV"
-  "SEQ_DIRECT" > "HOL4Real.seq.SEQ_DIRECT"
-  "SEQ_CONST" > "HOL4Real.seq.SEQ_CONST"
-  "SEQ_CBOUNDED" > "HOL4Real.seq.SEQ_CBOUNDED"
-  "SEQ_CAUCHY" > "HOL4Real.seq.SEQ_CAUCHY"
-  "SEQ_BOUNDED_2" > "HOL4Real.seq.SEQ_BOUNDED_2"
-  "SEQ_BOUNDED" > "HOL4Real.seq.SEQ_BOUNDED"
-  "SEQ_BCONV" > "HOL4Real.seq.SEQ_BCONV"
-  "SEQ_ADD" > "HOL4Real.seq.SEQ_ADD"
-  "SEQ_ABS_IMP" > "HOL4Real.seq.SEQ_ABS_IMP"
-  "SEQ_ABS" > "HOL4Real.seq.SEQ_ABS"
-  "SEQ" > "HOL4Real.seq.SEQ"
-  "NEST_LEMMA_UNIQ" > "HOL4Real.seq.NEST_LEMMA_UNIQ"
-  "NEST_LEMMA" > "HOL4Real.seq.NEST_LEMMA"
-  "MONO_SUC" > "HOL4Real.seq.MONO_SUC"
-  "MAX_LEMMA" > "HOL4Real.seq.MAX_LEMMA"
-  "GP_FINITE" > "HOL4Real.seq.GP_FINITE"
-  "GP" > "HOL4Real.seq.GP"
-  "BOLZANO_LEMMA" > "Deriv.lemma_BOLZANO"
-  "ABS_NEG_LEMMA" > "Series.rabs_ratiotest_lemma"
-
-end
--- a/src/HOL/Import/HOL/state_transformer.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "UNIT" > "UNIT_def"
-  "MMAP" > "MMAP_def"
-  "JOIN" > "JOIN_def"
-  "BIND" > "BIND_def"
-
-const_maps
-  "UNIT" > "HOL4Base.state_transformer.UNIT"
-  "MMAP" > "HOL4Base.state_transformer.MMAP"
-  "JOIN" > "HOL4Base.state_transformer.JOIN"
-  "BIND" > "HOL4Base.state_transformer.BIND"
-
-thm_maps
-  "UNIT_def" > "HOL4Base.state_transformer.UNIT_def"
-  "UNIT_UNCURRY" > "HOL4Base.state_transformer.UNIT_UNCURRY"
-  "UNIT_DEF" > "HOL4Base.state_transformer.UNIT_DEF"
-  "SND_o_UNIT" > "HOL4Base.state_transformer.SND_o_UNIT"
-  "MMAP_def" > "HOL4Base.state_transformer.MMAP_def"
-  "MMAP_UNIT" > "HOL4Base.state_transformer.MMAP_UNIT"
-  "MMAP_JOIN" > "HOL4Base.state_transformer.MMAP_JOIN"
-  "MMAP_ID" > "HOL4Base.state_transformer.MMAP_ID"
-  "MMAP_DEF" > "HOL4Base.state_transformer.MMAP_DEF"
-  "MMAP_COMP" > "HOL4Base.state_transformer.MMAP_COMP"
-  "JOIN_def" > "HOL4Base.state_transformer.JOIN_def"
-  "JOIN_UNIT" > "HOL4Base.state_transformer.JOIN_UNIT"
-  "JOIN_MMAP_UNIT" > "HOL4Base.state_transformer.JOIN_MMAP_UNIT"
-  "JOIN_MAP_JOIN" > "HOL4Base.state_transformer.JOIN_MAP_JOIN"
-  "JOIN_MAP" > "HOL4Base.state_transformer.JOIN_MAP"
-  "JOIN_DEF" > "HOL4Base.state_transformer.JOIN_DEF"
-  "FST_o_UNIT" > "HOL4Base.state_transformer.FST_o_UNIT"
-  "FST_o_MMAP" > "HOL4Base.state_transformer.FST_o_MMAP"
-  "BIND_def" > "HOL4Base.state_transformer.BIND_def"
-  "BIND_RIGHT_UNIT" > "HOL4Base.state_transformer.BIND_RIGHT_UNIT"
-  "BIND_LEFT_UNIT" > "HOL4Base.state_transformer.BIND_LEFT_UNIT"
-  "BIND_DEF" > "HOL4Base.state_transformer.BIND_DEF"
-  "BIND_ASSOC" > "HOL4Base.state_transformer.BIND_ASSOC"
-
-end
--- a/src/HOL/Import/HOL/sum.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-import
-
-import_segment "hol4"
-
-type_maps
-  "sum" > "Sum_Type.sum"
-
-const_maps
-  "sum_case" > "Sum_Type.sum.sum_case"
-  "OUTR" > "HOL4Compat.OUTR"
-  "OUTL" > "HOL4Compat.OUTL"
-  "ISR" > "HOL4Compat.ISR"
-  "ISL" > "HOL4Compat.ISL"
-  "INR" > "Sum_Type.Inr"
-  "INL" > "Sum_Type.Inl"
-
-thm_maps
-  "sum_distinct1" > "Sum_Type.Inr_not_Inl"
-  "sum_distinct" > "Sum_Type.Inl_not_Inr"
-  "sum_case_def" > "HOL4Compat.sum_case_def"
-  "sum_case_cong" > "HOL4Base.sum.sum_case_cong"
-  "sum_axiom" > "HOL4Compat.sum_axiom"
-  "sum_INDUCT" > "Sum_Type.sum.induct"
-  "sum_CASES" > "Sum_Type.sum.nchotomy"
-  "OUTR" > "HOL4Compat.OUTR"
-  "OUTL" > "HOL4Compat.OUTL"
-  "ISR" > "HOL4Compat.ISR"
-  "ISL_OR_ISR" > "HOL4Base.sum.ISL_OR_ISR"
-  "ISL" > "HOL4Compat.ISL"
-  "INR_neq_INL" > "Sum_Type.Inr_not_Inl"
-  "INR_INL_11" > "HOL4Compat.INR_INL_11"
-  "INR" > "HOL4Base.sum.INR"
-  "INL" > "HOL4Base.sum.INL"
-
-ignore_thms
-  "sum_TY_DEF"
-  "sum_ISO_DEF"
-  "sum_Axiom"
-  "IS_SUM_REP"
-  "INR_DEF"
-  "INL_DEF"
-
-end
--- a/src/HOL/Import/HOL/topology.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "topology" > "topology_def"
-  "re_universe" > "re_universe_def"
-  "re_union" > "re_union_def"
-  "re_subset" > "re_subset_def"
-  "re_null" > "re_null_def"
-  "re_intersect" > "re_intersect_def"
-  "re_compl" > "re_compl_def"
-  "re_Union" > "re_Union_def"
-  "open" > "open_def"
-  "neigh" > "neigh_def"
-  "mtop" > "mtop_def"
-  "mr1" > "mr1_def"
-  "metric" > "metric_def"
-  "limpt" > "limpt_def"
-  "istopology" > "istopology_def"
-  "ismet" > "ismet_def"
-  "dist" > "dist_def"
-  "closed" > "closed_def"
-  "B" > "B_def"
-
-type_maps
-  "topology" > "HOL4Real.topology.topology"
-  "metric" > "HOL4Real.topology.metric"
-
-const_maps
-  "re_universe" > "HOL4Real.topology.re_universe"
-  "re_union" > "HOL4Real.topology.re_union"
-  "re_subset" > "HOL4Real.topology.re_subset"
-  "re_null" > "HOL4Real.topology.re_null"
-  "re_intersect" > "HOL4Real.topology.re_intersect"
-  "re_compl" > "HOL4Real.topology.re_compl"
-  "re_Union" > "HOL4Real.topology.re_Union"
-  "neigh" > "HOL4Real.topology.neigh"
-  "mtop" > "HOL4Real.topology.mtop"
-  "mr1" > "HOL4Real.topology.mr1"
-  "limpt" > "HOL4Real.topology.limpt"
-  "istopology" > "HOL4Real.topology.istopology"
-  "ismet" > "HOL4Real.topology.ismet"
-  "closed" > "HOL4Real.topology.closed"
-  "B" > "HOL4Real.topology.B"
-
-thm_maps
-  "topology_tybij" > "HOL4Real.topology.topology_tybij"
-  "topology_TY_DEF" > "HOL4Real.topology.topology_TY_DEF"
-  "re_universe_def" > "HOL4Real.topology.re_universe_def"
-  "re_universe" > "HOL4Real.topology.re_universe"
-  "re_union_def" > "HOL4Real.topology.re_union_def"
-  "re_union" > "HOL4Real.topology.re_union"
-  "re_subset_def" > "HOL4Real.topology.re_subset_def"
-  "re_subset" > "HOL4Real.topology.re_subset"
-  "re_null_def" > "HOL4Real.topology.re_null_def"
-  "re_null" > "HOL4Real.topology.re_null"
-  "re_intersect_def" > "HOL4Real.topology.re_intersect_def"
-  "re_intersect" > "HOL4Real.topology.re_intersect"
-  "re_compl_def" > "HOL4Real.topology.re_compl_def"
-  "re_compl" > "HOL4Real.topology.re_compl"
-  "re_Union_def" > "HOL4Real.topology.re_Union_def"
-  "re_Union" > "HOL4Real.topology.re_Union"
-  "neigh_def" > "HOL4Real.topology.neigh_def"
-  "neigh" > "HOL4Real.topology.neigh"
-  "mtop_istopology" > "HOL4Real.topology.mtop_istopology"
-  "mtop_def" > "HOL4Real.topology.mtop_def"
-  "mtop" > "HOL4Real.topology.mtop"
-  "mr1_def" > "HOL4Real.topology.mr1_def"
-  "mr1" > "HOL4Real.topology.mr1"
-  "metric_tybij" > "HOL4Real.topology.metric_tybij"
-  "metric_TY_DEF" > "HOL4Real.topology.metric_TY_DEF"
-  "limpt_def" > "HOL4Real.topology.limpt_def"
-  "limpt" > "HOL4Real.topology.limpt"
-  "istopology_def" > "HOL4Real.topology.istopology_def"
-  "istopology" > "HOL4Real.topology.istopology"
-  "ismet_def" > "HOL4Real.topology.ismet_def"
-  "ismet" > "HOL4Real.topology.ismet"
-  "closed_def" > "HOL4Real.topology.closed_def"
-  "closed" > "HOL4Real.topology.closed"
-  "ball" > "HOL4Real.topology.ball"
-  "TOPOLOGY_UNION" > "HOL4Real.topology.TOPOLOGY_UNION"
-  "TOPOLOGY" > "HOL4Real.topology.TOPOLOGY"
-  "SUBSET_TRANS" > "HOL4Real.topology.SUBSET_TRANS"
-  "SUBSET_REFL" > "HOL4Real.topology.SUBSET_REFL"
-  "SUBSET_ANTISYM" > "HOL4Real.topology.SUBSET_ANTISYM"
-  "OPEN_UNOPEN" > "HOL4Real.topology.OPEN_UNOPEN"
-  "OPEN_SUBOPEN" > "HOL4Real.topology.OPEN_SUBOPEN"
-  "OPEN_OWN_NEIGH" > "HOL4Real.topology.OPEN_OWN_NEIGH"
-  "OPEN_NEIGH" > "HOL4Real.topology.OPEN_NEIGH"
-  "MTOP_OPEN" > "HOL4Real.topology.MTOP_OPEN"
-  "MTOP_LIMPT" > "HOL4Real.topology.MTOP_LIMPT"
-  "MR1_SUB_LT" > "HOL4Real.topology.MR1_SUB_LT"
-  "MR1_SUB_LE" > "HOL4Real.topology.MR1_SUB_LE"
-  "MR1_SUB" > "HOL4Real.topology.MR1_SUB"
-  "MR1_LIMPT" > "HOL4Real.topology.MR1_LIMPT"
-  "MR1_DEF" > "HOL4Real.topology.MR1_DEF"
-  "MR1_BETWEEN1" > "HOL4Real.topology.MR1_BETWEEN1"
-  "MR1_ADD_POS" > "HOL4Real.topology.MR1_ADD_POS"
-  "MR1_ADD_LT" > "HOL4Real.topology.MR1_ADD_LT"
-  "MR1_ADD" > "HOL4Real.topology.MR1_ADD"
-  "METRIC_ZERO" > "HOL4Real.topology.METRIC_ZERO"
-  "METRIC_TRIANGLE" > "HOL4Real.topology.METRIC_TRIANGLE"
-  "METRIC_SYM" > "HOL4Real.topology.METRIC_SYM"
-  "METRIC_SAME" > "HOL4Real.topology.METRIC_SAME"
-  "METRIC_POS" > "HOL4Real.topology.METRIC_POS"
-  "METRIC_NZ" > "HOL4Real.topology.METRIC_NZ"
-  "METRIC_ISMET" > "HOL4Real.topology.METRIC_ISMET"
-  "ISMET_R1" > "HOL4Real.topology.ISMET_R1"
-  "COMPL_MEM" > "HOL4Real.topology.COMPL_MEM"
-  "CLOSED_LIMPT" > "HOL4Real.topology.CLOSED_LIMPT"
-  "B_def" > "HOL4Real.topology.B_def"
-  "BALL_OPEN" > "HOL4Real.topology.BALL_OPEN"
-  "BALL_NEIGH" > "HOL4Real.topology.BALL_NEIGH"
-
-end
--- a/src/HOL/Import/HOL/transc.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,273 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "tdiv" > "tdiv_def"
-  "tan" > "tan_def"
-  "sqrt" > "sqrt_def"
-  "sin" > "sin_def"
-  "rsum" > "rsum_def"
-  "root" > "root_def"
-  "pi" > "pi_def"
-  "ln" > "ln_def"
-  "gauge" > "gauge_def"
-  "fine" > "fine_def"
-  "exp" > "exp_def"
-  "dsize" > "dsize_def"
-  "division" > "division_def"
-  "cos" > "cos_def"
-  "atn" > "atn_def"
-  "asn" > "asn_def"
-  "acs" > "acs_def"
-  "Dint" > "Dint_def"
-
-const_maps
-  "tdiv" > "HOL4Real.transc.tdiv"
-  "tan" > "HOL4Real.transc.tan"
-  "sqrt" > "HOL4Real.transc.sqrt"
-  "sin" > "HOL4Real.transc.sin"
-  "rsum" > "HOL4Real.transc.rsum"
-  "root" > "HOL4Real.transc.root"
-  "pi" > "HOL4Real.transc.pi"
-  "ln" > "HOL4Real.transc.ln"
-  "gauge" > "HOL4Real.transc.gauge"
-  "fine" > "HOL4Real.transc.fine"
-  "exp" > "HOL4Real.transc.exp"
-  "dsize" > "HOL4Real.transc.dsize"
-  "division" > "HOL4Real.transc.division"
-  "cos" > "HOL4Real.transc.cos"
-  "atn" > "HOL4Real.transc.atn"
-  "asn" > "HOL4Real.transc.asn"
-  "acs" > "HOL4Real.transc.acs"
-  "Dint" > "HOL4Real.transc.Dint"
-
-thm_maps
-  "tdiv_def" > "HOL4Real.transc.tdiv_def"
-  "tdiv" > "HOL4Real.transc.tdiv"
-  "tan_def" > "HOL4Real.transc.tan_def"
-  "tan" > "HOL4Real.transc.tan"
-  "sqrt_def" > "HOL4Real.transc.sqrt_def"
-  "sqrt" > "HOL4Real.transc.sqrt"
-  "sin_def" > "HOL4Real.transc.sin_def"
-  "sin" > "HOL4Real.transc.sin"
-  "rsum_def" > "HOL4Real.transc.rsum_def"
-  "rsum" > "HOL4Real.transc.rsum"
-  "root_def" > "HOL4Real.transc.root_def"
-  "root" > "HOL4Real.transc.root"
-  "pi_def" > "HOL4Real.transc.pi_def"
-  "pi" > "HOL4Real.transc.pi"
-  "ln_def" > "HOL4Real.transc.ln_def"
-  "ln" > "HOL4Real.transc.ln"
-  "gauge_def" > "HOL4Real.transc.gauge_def"
-  "gauge" > "HOL4Real.transc.gauge"
-  "fine_def" > "HOL4Real.transc.fine_def"
-  "fine" > "HOL4Real.transc.fine"
-  "exp_def" > "HOL4Real.transc.exp_def"
-  "exp" > "HOL4Real.transc.exp"
-  "dsize_def" > "HOL4Real.transc.dsize_def"
-  "dsize" > "HOL4Real.transc.dsize"
-  "division_def" > "HOL4Real.transc.division_def"
-  "division" > "HOL4Real.transc.division"
-  "cos_def" > "HOL4Real.transc.cos_def"
-  "cos" > "HOL4Real.transc.cos"
-  "atn_def" > "HOL4Real.transc.atn_def"
-  "atn" > "HOL4Real.transc.atn"
-  "asn_def" > "HOL4Real.transc.asn_def"
-  "asn" > "HOL4Real.transc.asn"
-  "acs_def" > "HOL4Real.transc.acs_def"
-  "acs" > "HOL4Real.transc.acs"
-  "TAN_TOTAL_POS" > "HOL4Real.transc.TAN_TOTAL_POS"
-  "TAN_TOTAL_LEMMA" > "HOL4Real.transc.TAN_TOTAL_LEMMA"
-  "TAN_TOTAL" > "HOL4Real.transc.TAN_TOTAL"
-  "TAN_SEC" > "HOL4Real.transc.TAN_SEC"
-  "TAN_POS_PI2" > "HOL4Real.transc.TAN_POS_PI2"
-  "TAN_PI" > "HOL4Real.transc.TAN_PI"
-  "TAN_PERIODIC" > "HOL4Real.transc.TAN_PERIODIC"
-  "TAN_NPI" > "HOL4Real.transc.TAN_NPI"
-  "TAN_NEG" > "HOL4Real.transc.TAN_NEG"
-  "TAN_DOUBLE" > "HOL4Real.transc.TAN_DOUBLE"
-  "TAN_ATN" > "HOL4Real.transc.TAN_ATN"
-  "TAN_ADD" > "HOL4Real.transc.TAN_ADD"
-  "TAN_0" > "HOL4Real.transc.TAN_0"
-  "SQRT_POW_2" > "HOL4Real.transc.SQRT_POW_2"
-  "SQRT_POW2" > "HOL4Real.transc.SQRT_POW2"
-  "SQRT_POS_UNIQ" > "HOL4Real.transc.SQRT_POS_UNIQ"
-  "SQRT_POS_LT" > "HOL4Real.transc.SQRT_POS_LT"
-  "SQRT_POS_LE" > "HOL4Real.transc.SQRT_POS_LE"
-  "SQRT_MUL" > "HOL4Real.transc.SQRT_MUL"
-  "SQRT_MONO_LE" > "HOL4Real.transc.SQRT_MONO_LE"
-  "SQRT_INV" > "HOL4Real.transc.SQRT_INV"
-  "SQRT_EVEN_POW2" > "HOL4Real.transc.SQRT_EVEN_POW2"
-  "SQRT_EQ" > "HOL4Real.transc.SQRT_EQ"
-  "SQRT_DIV" > "HOL4Real.transc.SQRT_DIV"
-  "SQRT_1" > "HOL4Real.transc.SQRT_1"
-  "SQRT_0" > "HOL4Real.transc.SQRT_0"
-  "SIN_ZERO_LEMMA" > "HOL4Real.transc.SIN_ZERO_LEMMA"
-  "SIN_ZERO" > "HOL4Real.transc.SIN_ZERO"
-  "SIN_TOTAL" > "HOL4Real.transc.SIN_TOTAL"
-  "SIN_POS_PI_LE" > "HOL4Real.transc.SIN_POS_PI_LE"
-  "SIN_POS_PI2_LE" > "HOL4Real.transc.SIN_POS_PI2_LE"
-  "SIN_POS_PI2" > "HOL4Real.transc.SIN_POS_PI2"
-  "SIN_POS_PI" > "HOL4Real.transc.SIN_POS_PI"
-  "SIN_POS" > "HOL4Real.transc.SIN_POS"
-  "SIN_PI2" > "HOL4Real.transc.SIN_PI2"
-  "SIN_PI" > "HOL4Real.transc.SIN_PI"
-  "SIN_PERIODIC_PI" > "HOL4Real.transc.SIN_PERIODIC_PI"
-  "SIN_PERIODIC" > "HOL4Real.transc.SIN_PERIODIC"
-  "SIN_PAIRED" > "HOL4Real.transc.SIN_PAIRED"
-  "SIN_NPI" > "HOL4Real.transc.SIN_NPI"
-  "SIN_NEGLEMMA" > "HOL4Real.transc.SIN_NEGLEMMA"
-  "SIN_NEG" > "HOL4Real.transc.SIN_NEG"
-  "SIN_FDIFF" > "HOL4Real.transc.SIN_FDIFF"
-  "SIN_DOUBLE" > "HOL4Real.transc.SIN_DOUBLE"
-  "SIN_COS_SQRT" > "HOL4Real.transc.SIN_COS_SQRT"
-  "SIN_COS_SQ" > "HOL4Real.transc.SIN_COS_SQ"
-  "SIN_COS_NEG" > "HOL4Real.transc.SIN_COS_NEG"
-  "SIN_COS_ADD" > "HOL4Real.transc.SIN_COS_ADD"
-  "SIN_COS" > "HOL4Real.transc.SIN_COS"
-  "SIN_CONVERGES" > "HOL4Real.transc.SIN_CONVERGES"
-  "SIN_CIRCLE" > "HOL4Real.transc.SIN_CIRCLE"
-  "SIN_BOUNDS" > "HOL4Real.transc.SIN_BOUNDS"
-  "SIN_BOUND" > "HOL4Real.transc.SIN_BOUND"
-  "SIN_ASN" > "HOL4Real.transc.SIN_ASN"
-  "SIN_ADD" > "HOL4Real.transc.SIN_ADD"
-  "SIN_ACS_NZ" > "HOL4Real.transc.SIN_ACS_NZ"
-  "SIN_0" > "HOL4Real.transc.SIN_0"
-  "ROOT_POW_POS" > "HOL4Real.transc.ROOT_POW_POS"
-  "ROOT_POS_UNIQ" > "HOL4Real.transc.ROOT_POS_UNIQ"
-  "ROOT_POS_LT" > "HOL4Real.transc.ROOT_POS_LT"
-  "ROOT_POS" > "HOL4Real.transc.ROOT_POS"
-  "ROOT_MUL" > "HOL4Real.transc.ROOT_MUL"
-  "ROOT_MONO_LE" > "HOL4Real.transc.ROOT_MONO_LE"
-  "ROOT_LT_LEMMA" > "HOL4Real.transc.ROOT_LT_LEMMA"
-  "ROOT_LN" > "HOL4Real.transc.ROOT_LN"
-  "ROOT_INV" > "HOL4Real.transc.ROOT_INV"
-  "ROOT_DIV" > "HOL4Real.transc.ROOT_DIV"
-  "ROOT_1" > "HOL4Real.transc.ROOT_1"
-  "ROOT_0" > "HOL4Real.transc.ROOT_0"
-  "REAL_DIV_SQRT" > "HOL4Real.transc.REAL_DIV_SQRT"
-  "POW_ROOT_POS" > "HOL4Real.transc.POW_ROOT_POS"
-  "POW_2_SQRT" > "HOL4Real.transc.POW_2_SQRT"
-  "PI_POS" > "HOL4Real.transc.PI_POS"
-  "PI2_BOUNDS" > "HOL4Real.transc.PI2_BOUNDS"
-  "PI2" > "HOL4Real.transc.PI2"
-  "MCLAURIN_ZERO" > "HOL4Real.transc.MCLAURIN_ZERO"
-  "MCLAURIN_NEG" > "HOL4Real.transc.MCLAURIN_NEG"
-  "MCLAURIN_EXP_LT" > "HOL4Real.transc.MCLAURIN_EXP_LT"
-  "MCLAURIN_EXP_LE" > "HOL4Real.transc.MCLAURIN_EXP_LE"
-  "MCLAURIN_ALL_LT" > "HOL4Real.transc.MCLAURIN_ALL_LT"
-  "MCLAURIN_ALL_LE" > "HOL4Real.transc.MCLAURIN_ALL_LE"
-  "MCLAURIN" > "HOL4Real.transc.MCLAURIN"
-  "LN_POW" > "HOL4Real.transc.LN_POW"
-  "LN_POS" > "HOL4Real.transc.LN_POS"
-  "LN_MUL" > "HOL4Real.transc.LN_MUL"
-  "LN_MONO_LT" > "HOL4Real.transc.LN_MONO_LT"
-  "LN_MONO_LE" > "HOL4Real.transc.LN_MONO_LE"
-  "LN_LT_X" > "HOL4Real.transc.LN_LT_X"
-  "LN_LE" > "HOL4Real.transc.LN_LE"
-  "LN_INV" > "HOL4Real.transc.LN_INV"
-  "LN_INJ" > "HOL4Real.transc.LN_INJ"
-  "LN_EXP" > "HOL4Real.transc.LN_EXP"
-  "LN_DIV" > "HOL4Real.transc.LN_DIV"
-  "LN_1" > "HOL4Real.transc.LN_1"
-  "INTEGRAL_NULL" > "HOL4Real.transc.INTEGRAL_NULL"
-  "GAUGE_MIN" > "HOL4Real.transc.GAUGE_MIN"
-  "FTC1" > "HOL4Real.transc.FTC1"
-  "FINE_MIN" > "HOL4Real.transc.FINE_MIN"
-  "EXP_TOTAL_LEMMA" > "HOL4Real.transc.EXP_TOTAL_LEMMA"
-  "EXP_TOTAL" > "HOL4Real.transc.EXP_TOTAL"
-  "EXP_SUB" > "HOL4Real.transc.EXP_SUB"
-  "EXP_POS_LT" > "HOL4Real.transc.EXP_POS_LT"
-  "EXP_POS_LE" > "HOL4Real.transc.EXP_POS_LE"
-  "EXP_NZ" > "HOL4Real.transc.EXP_NZ"
-  "EXP_NEG_MUL2" > "HOL4Real.transc.EXP_NEG_MUL2"
-  "EXP_NEG_MUL" > "HOL4Real.transc.EXP_NEG_MUL"
-  "EXP_NEG" > "HOL4Real.transc.EXP_NEG"
-  "EXP_N" > "HOL4Real.transc.EXP_N"
-  "EXP_MONO_LT" > "HOL4Real.transc.EXP_MONO_LT"
-  "EXP_MONO_LE" > "HOL4Real.transc.EXP_MONO_LE"
-  "EXP_MONO_IMP" > "HOL4Real.transc.EXP_MONO_IMP"
-  "EXP_LT_1" > "HOL4Real.transc.EXP_LT_1"
-  "EXP_LN" > "HOL4Real.transc.EXP_LN"
-  "EXP_LE_X" > "HOL4Real.transc.EXP_LE_X"
-  "EXP_INJ" > "HOL4Real.transc.EXP_INJ"
-  "EXP_FDIFF" > "HOL4Real.transc.EXP_FDIFF"
-  "EXP_CONVERGES" > "HOL4Real.transc.EXP_CONVERGES"
-  "EXP_ADD_MUL" > "HOL4Real.transc.EXP_ADD_MUL"
-  "EXP_ADD" > "HOL4Real.transc.EXP_ADD"
-  "EXP_0" > "HOL4Real.transc.EXP_0"
-  "Dint_def" > "HOL4Real.transc.Dint_def"
-  "Dint" > "HOL4Real.transc.Dint"
-  "DIVISION_UBOUND_LT" > "HOL4Real.transc.DIVISION_UBOUND_LT"
-  "DIVISION_UBOUND" > "HOL4Real.transc.DIVISION_UBOUND"
-  "DIVISION_THM" > "HOL4Real.transc.DIVISION_THM"
-  "DIVISION_SINGLE" > "HOL4Real.transc.DIVISION_SINGLE"
-  "DIVISION_RHS" > "HOL4Real.transc.DIVISION_RHS"
-  "DIVISION_LT_GEN" > "HOL4Real.transc.DIVISION_LT_GEN"
-  "DIVISION_LT" > "HOL4Real.transc.DIVISION_LT"
-  "DIVISION_LHS" > "HOL4Real.transc.DIVISION_LHS"
-  "DIVISION_LE" > "HOL4Real.transc.DIVISION_LE"
-  "DIVISION_LBOUND_LT" > "HOL4Real.transc.DIVISION_LBOUND_LT"
-  "DIVISION_LBOUND" > "HOL4Real.transc.DIVISION_LBOUND"
-  "DIVISION_GT" > "HOL4Real.transc.DIVISION_GT"
-  "DIVISION_EXISTS" > "HOL4Real.transc.DIVISION_EXISTS"
-  "DIVISION_EQ" > "HOL4Real.transc.DIVISION_EQ"
-  "DIVISION_APPEND" > "HOL4Real.transc.DIVISION_APPEND"
-  "DIVISION_1" > "HOL4Real.transc.DIVISION_1"
-  "DIVISION_0" > "HOL4Real.transc.DIVISION_0"
-  "DINT_UNIQ" > "HOL4Real.transc.DINT_UNIQ"
-  "DIFF_TAN" > "HOL4Real.transc.DIFF_TAN"
-  "DIFF_SIN" > "HOL4Real.transc.DIFF_SIN"
-  "DIFF_LN_COMPOSITE" > "HOL4Real.transc.DIFF_LN_COMPOSITE"
-  "DIFF_LN" > "HOL4Real.transc.DIFF_LN"
-  "DIFF_EXP" > "HOL4Real.transc.DIFF_EXP"
-  "DIFF_COS" > "HOL4Real.transc.DIFF_COS"
-  "DIFF_COMPOSITE" > "HOL4Real.transc.DIFF_COMPOSITE"
-  "DIFF_ATN" > "HOL4Real.transc.DIFF_ATN"
-  "DIFF_ASN_LEMMA" > "HOL4Real.transc.DIFF_ASN_LEMMA"
-  "DIFF_ASN" > "HOL4Real.transc.DIFF_ASN"
-  "DIFF_ACS_LEMMA" > "HOL4Real.transc.DIFF_ACS_LEMMA"
-  "DIFF_ACS" > "HOL4Real.transc.DIFF_ACS"
-  "COS_ZERO_LEMMA" > "HOL4Real.transc.COS_ZERO_LEMMA"
-  "COS_ZERO" > "HOL4Real.transc.COS_ZERO"
-  "COS_TOTAL" > "HOL4Real.transc.COS_TOTAL"
-  "COS_SIN_SQRT" > "HOL4Real.transc.COS_SIN_SQRT"
-  "COS_SIN_SQ" > "HOL4Real.transc.COS_SIN_SQ"
-  "COS_SIN" > "HOL4Real.transc.COS_SIN"
-  "COS_POS_PI_LE" > "HOL4Real.transc.COS_POS_PI_LE"
-  "COS_POS_PI2_LE" > "HOL4Real.transc.COS_POS_PI2_LE"
-  "COS_POS_PI2" > "HOL4Real.transc.COS_POS_PI2"
-  "COS_POS_PI" > "HOL4Real.transc.COS_POS_PI"
-  "COS_PI2" > "HOL4Real.transc.COS_PI2"
-  "COS_PI" > "HOL4Real.transc.COS_PI"
-  "COS_PERIODIC_PI" > "HOL4Real.transc.COS_PERIODIC_PI"
-  "COS_PERIODIC" > "HOL4Real.transc.COS_PERIODIC"
-  "COS_PAIRED" > "HOL4Real.transc.COS_PAIRED"
-  "COS_NPI" > "HOL4Real.transc.COS_NPI"
-  "COS_NEG" > "HOL4Real.transc.COS_NEG"
-  "COS_ISZERO" > "HOL4Real.transc.COS_ISZERO"
-  "COS_FDIFF" > "HOL4Real.transc.COS_FDIFF"
-  "COS_DOUBLE" > "HOL4Real.transc.COS_DOUBLE"
-  "COS_CONVERGES" > "HOL4Real.transc.COS_CONVERGES"
-  "COS_BOUNDS" > "HOL4Real.transc.COS_BOUNDS"
-  "COS_BOUND" > "HOL4Real.transc.COS_BOUND"
-  "COS_ATN_NZ" > "HOL4Real.transc.COS_ATN_NZ"
-  "COS_ASN_NZ" > "HOL4Real.transc.COS_ASN_NZ"
-  "COS_ADD" > "HOL4Real.transc.COS_ADD"
-  "COS_ACS" > "HOL4Real.transc.COS_ACS"
-  "COS_2" > "HOL4Real.transc.COS_2"
-  "COS_0" > "HOL4Real.transc.COS_0"
-  "ATN_TAN" > "HOL4Real.transc.ATN_TAN"
-  "ATN_BOUNDS" > "HOL4Real.transc.ATN_BOUNDS"
-  "ATN" > "HOL4Real.transc.ATN"
-  "ASN_SIN" > "HOL4Real.transc.ASN_SIN"
-  "ASN_BOUNDS_LT" > "HOL4Real.transc.ASN_BOUNDS_LT"
-  "ASN_BOUNDS" > "HOL4Real.transc.ASN_BOUNDS"
-  "ASN" > "HOL4Real.transc.ASN"
-  "ACS_COS" > "HOL4Real.transc.ACS_COS"
-  "ACS_BOUNDS_LT" > "HOL4Real.transc.ACS_BOUNDS_LT"
-  "ACS_BOUNDS" > "HOL4Real.transc.ACS_BOUNDS"
-  "ACS" > "HOL4Real.transc.ACS"
-
-end
--- a/src/HOL/Import/HOL/word32.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,377 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "word_suc" > "word_suc_def"
-  "word_sub" > "word_sub_def"
-  "word_ror1" > "word_ror1_def"
-  "word_ror" > "word_ror_def"
-  "word_mul" > "word_mul_def"
-  "word_lsr1" > "word_lsr1_def"
-  "word_lsr" > "word_lsr_def"
-  "word_lsl" > "word_lsl_def"
-  "word_asr1" > "word_asr1_def"
-  "word_asr" > "word_asr_def"
-  "word_add" > "word_add_def"
-  "word_2comp" > "word_2comp_def"
-  "word_1comp" > "word_1comp_def"
-  "w_T" > "w_T_primdef"
-  "w_1" > "w_1_primdef"
-  "w_0" > "w_0_primdef"
-  "w2n" > "w2n_primdef"
-  "n2w" > "n2w_primdef"
-  "mk_word32" > "mk_word32_def"
-  "dest_word32" > "dest_word32_def"
-  "bitwise_or" > "bitwise_or_def"
-  "bitwise_eor" > "bitwise_eor_def"
-  "bitwise_and" > "bitwise_and_def"
-  "WL" > "WL_primdef"
-  "TWO_COMP" > "TWO_COMP_primdef"
-  "TOw" > "TOw_primdef"
-  "SLICEw" > "SLICEw_primdef"
-  "RRXn" > "RRXn_primdef"
-  "RRX" > "RRX_primdef"
-  "ROR_ONE" > "ROR_ONE_primdef"
-  "OR" > "OR_primdef"
-  "ONE_COMP" > "ONE_COMP_primdef"
-  "MSBn" > "MSBn_primdef"
-  "MSB" > "MSB_primdef"
-  "MODw" > "MODw_primdef"
-  "LSR_ONE" > "LSR_ONE_primdef"
-  "LSB" > "LSB_primdef"
-  "INw" > "INw_primdef"
-  "HB" > "HB_primdef"
-  "EQUIV" > "EQUIV_primdef"
-  "EOR" > "EOR_primdef"
-  "COMP0" > "COMP0_primdef"
-  "BITw" > "BITw_primdef"
-  "BITSw" > "BITSw_primdef"
-  "ASR_ONE" > "ASR_ONE_primdef"
-  "AONE" > "AONE_primdef"
-  "AND" > "AND_primdef"
-
-type_maps
-  "word32" > "HOL4Word32.word32.word32"
-
-const_maps
-  "word_suc" > "HOL4Word32.word32.word_suc"
-  "word_sub" > "HOL4Word32.word32.word_sub"
-  "word_ror1" > "HOL4Word32.word32.word_ror1"
-  "word_ror" > "HOL4Word32.word32.word_ror"
-  "word_mul" > "HOL4Word32.word32.word_mul"
-  "word_lsr1" > "HOL4Word32.word32.word_lsr1"
-  "word_lsr" > "HOL4Word32.word32.word_lsr"
-  "word_lsl" > "HOL4Word32.word32.word_lsl"
-  "word_asr1" > "HOL4Word32.word32.word_asr1"
-  "word_asr" > "HOL4Word32.word32.word_asr"
-  "word_add" > "HOL4Word32.word32.word_add"
-  "word_2comp" > "HOL4Word32.word32.word_2comp"
-  "word_1comp" > "HOL4Word32.word32.word_1comp"
-  "w_T" > "HOL4Word32.word32.w_T"
-  "w_1" > "HOL4Word32.word32.w_1"
-  "w_0" > "HOL4Word32.word32.w_0"
-  "w2n" > "HOL4Word32.word32.w2n"
-  "n2w" > "HOL4Word32.word32.n2w"
-  "bitwise_or" > "HOL4Word32.word32.bitwise_or"
-  "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
-  "bitwise_and" > "HOL4Word32.word32.bitwise_and"
-  "WL" > "HOL4Word32.word32.WL"
-  "TWO_COMP" > "HOL4Word32.word32.TWO_COMP"
-  "TOw" > "HOL4Word32.word32.TOw"
-  "SLICEw" > "HOL4Word32.word32.SLICEw"
-  "RRXn" > "HOL4Word32.word32.RRXn"
-  "RRX" > "HOL4Word32.word32.RRX"
-  "ROR_ONE" > "HOL4Word32.word32.ROR_ONE"
-  "OR" > "HOL4Word32.word32.OR"
-  "ONE_COMP" > "HOL4Word32.word32.ONE_COMP"
-  "MSBn" > "HOL4Word32.word32.MSBn"
-  "MSB" > "HOL4Word32.word32.MSB"
-  "MODw" > "HOL4Word32.word32.MODw"
-  "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
-  "LSB" > "HOL4Word32.word32.LSB"
-  "INw" > "HOL4Word32.word32.INw"
-  "HB" > "HOL4Word32.word32.HB"
-  "EQUIV" > "HOL4Word32.word32.EQUIV"
-  "EOR" > "HOL4Word32.word32.EOR"
-  "COMP0" > "HOL4Word32.word32.COMP0"
-  "BITw" > "HOL4Word32.word32.BITw"
-  "BITSw" > "HOL4Word32.word32.BITSw"
-  "ASR_ONE" > "HOL4Word32.word32.ASR_ONE"
-  "AONE" > "HOL4Word32.word32.AONE"
-  "AND" > "HOL4Word32.word32.AND"
-
-const_renames
-  "==" > "EQUIV"
-
-thm_maps
-  "word_suc_def" > "HOL4Word32.word32.word_suc_def"
-  "word_suc" > "HOL4Word32.word32.word_suc"
-  "word_sub_def" > "HOL4Word32.word32.word_sub_def"
-  "word_sub" > "HOL4Word32.word32.word_sub"
-  "word_ror_def" > "HOL4Word32.word32.word_ror_def"
-  "word_ror1_def" > "HOL4Word32.word32.word_ror1_def"
-  "word_ror1" > "HOL4Word32.word32.word_ror1"
-  "word_ror" > "HOL4Word32.word32.word_ror"
-  "word_nchotomy" > "HOL4Word32.word32.word_nchotomy"
-  "word_mul_def" > "HOL4Word32.word32.word_mul_def"
-  "word_mul" > "HOL4Word32.word32.word_mul"
-  "word_lsr_def" > "HOL4Word32.word32.word_lsr_def"
-  "word_lsr1_def" > "HOL4Word32.word32.word_lsr1_def"
-  "word_lsr1" > "HOL4Word32.word32.word_lsr1"
-  "word_lsr" > "HOL4Word32.word32.word_lsr"
-  "word_lsl_def" > "HOL4Word32.word32.word_lsl_def"
-  "word_lsl" > "HOL4Word32.word32.word_lsl"
-  "word_asr_def" > "HOL4Word32.word32.word_asr_def"
-  "word_asr1_def" > "HOL4Word32.word32.word_asr1_def"
-  "word_asr1" > "HOL4Word32.word32.word_asr1"
-  "word_asr" > "HOL4Word32.word32.word_asr"
-  "word_add_def" > "HOL4Word32.word32.word_add_def"
-  "word_add" > "HOL4Word32.word32.word_add"
-  "word_2comp_def" > "HOL4Word32.word32.word_2comp_def"
-  "word_2comp" > "HOL4Word32.word32.word_2comp"
-  "word_1comp_def" > "HOL4Word32.word32.word_1comp_def"
-  "word_1comp" > "HOL4Word32.word32.word_1comp"
-  "word32_tybij" > "HOL4Word32.word32.word32_tybij"
-  "word32_TY_DEF" > "HOL4Word32.word32.word32_TY_DEF"
-  "w_T_primdef" > "HOL4Word32.word32.w_T_primdef"
-  "w_T_def" > "HOL4Word32.word32.w_T_def"
-  "w_T" > "HOL4Word32.word32.w_T"
-  "w_1_primdef" > "HOL4Word32.word32.w_1_primdef"
-  "w_1_def" > "HOL4Word32.word32.w_1_def"
-  "w_1" > "HOL4Word32.word32.w_1"
-  "w_0_primdef" > "HOL4Word32.word32.w_0_primdef"
-  "w_0_def" > "HOL4Word32.word32.w_0_def"
-  "w_0" > "HOL4Word32.word32.w_0"
-  "w2n_primdef" > "HOL4Word32.word32.w2n_primdef"
-  "w2n_def" > "HOL4Word32.word32.w2n_def"
-  "w2n_EVAL" > "HOL4Word32.word32.w2n_EVAL"
-  "w2n_ELIM" > "HOL4Word32.word32.w2n_ELIM"
-  "n2w_primdef" > "HOL4Word32.word32.n2w_primdef"
-  "n2w_def" > "HOL4Word32.word32.n2w_def"
-  "n2w_11" > "HOL4Word32.word32.n2w_11"
-  "dest_word_mk_word_eq3" > "HOL4Word32.word32.dest_word_mk_word_eq3"
-  "bitwise_or_def" > "HOL4Word32.word32.bitwise_or_def"
-  "bitwise_or" > "HOL4Word32.word32.bitwise_or"
-  "bitwise_eor_def" > "HOL4Word32.word32.bitwise_eor_def"
-  "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
-  "bitwise_and_def" > "HOL4Word32.word32.bitwise_and_def"
-  "bitwise_and" > "HOL4Word32.word32.bitwise_and"
-  "ZERO_SHIFT2" > "HOL4Word32.word32.ZERO_SHIFT2"
-  "ZERO_SHIFT" > "HOL4Word32.word32.ZERO_SHIFT"
-  "WL_primdef" > "HOL4Word32.word32.WL_primdef"
-  "WL_def" > "HOL4Word32.word32.WL_def"
-  "TWO_COMP_primdef" > "HOL4Word32.word32.TWO_COMP_primdef"
-  "TWO_COMP_def" > "HOL4Word32.word32.TWO_COMP_def"
-  "TWO_COMP_WELLDEF" > "HOL4Word32.word32.TWO_COMP_WELLDEF"
-  "TWO_COMP_ONE_COMP_QT" > "HOL4Word32.word32.TWO_COMP_ONE_COMP_QT"
-  "TWO_COMP_ONE_COMP" > "HOL4Word32.word32.TWO_COMP_ONE_COMP"
-  "TWO_COMP_EVAL2" > "HOL4Word32.word32.TWO_COMP_EVAL2"
-  "TWO_COMP_EVAL" > "HOL4Word32.word32.TWO_COMP_EVAL"
-  "TWO_COMP_ELIM" > "HOL4Word32.word32.TWO_COMP_ELIM"
-  "TWO_COMP_ADD" > "HOL4Word32.word32.TWO_COMP_ADD"
-  "TOw_primdef" > "HOL4Word32.word32.TOw_primdef"
-  "TOw_def" > "HOL4Word32.word32.TOw_def"
-  "TOw_WELLDEF" > "HOL4Word32.word32.TOw_WELLDEF"
-  "TOw_QT" > "HOL4Word32.word32.TOw_QT"
-  "TOw_IDEM" > "HOL4Word32.word32.TOw_IDEM"
-  "SUC_WELLDEF" > "HOL4Word32.word32.SUC_WELLDEF"
-  "SUC_EQUIV_COMP" > "HOL4Word32.word32.SUC_EQUIV_COMP"
-  "SUBw" > "HOL4Word32.word32.SUBw"
-  "SUB_SUBw" > "HOL4Word32.word32.SUB_SUBw"
-  "SUB_PLUSw" > "HOL4Word32.word32.SUB_PLUSw"
-  "SUB_EQUALw" > "HOL4Word32.word32.SUB_EQUALw"
-  "SLICEw_primdef" > "HOL4Word32.word32.SLICEw_primdef"
-  "SLICEw_def" > "HOL4Word32.word32.SLICEw_def"
-  "SLICEw_ZERO_THM" > "HOL4Word32.word32.SLICEw_ZERO_THM"
-  "SLICEw_ZERO" > "HOL4Word32.word32.SLICEw_ZERO"
-  "SLICEw_THM" > "HOL4Word32.word32.SLICEw_THM"
-  "SLICEw_COMP_THM" > "HOL4Word32.word32.SLICEw_COMP_THM"
-  "SLICE_EVAL" > "HOL4Word32.word32.SLICE_EVAL"
-  "RRXn_primdef" > "HOL4Word32.word32.RRXn_primdef"
-  "RRXn_def" > "HOL4Word32.word32.RRXn_def"
-  "RRX_primdef" > "HOL4Word32.word32.RRX_primdef"
-  "RRX_def" > "HOL4Word32.word32.RRX_def"
-  "RRX_WELLDEF" > "HOL4Word32.word32.RRX_WELLDEF"
-  "RRX_EVAL2" > "HOL4Word32.word32.RRX_EVAL2"
-  "RRX_EVAL" > "HOL4Word32.word32.RRX_EVAL"
-  "ROR_w_T" > "HOL4Word32.word32.ROR_w_T"
-  "ROR_THM" > "HOL4Word32.word32.ROR_THM"
-  "ROR_ONE_primdef" > "HOL4Word32.word32.ROR_ONE_primdef"
-  "ROR_ONE_def" > "HOL4Word32.word32.ROR_ONE_def"
-  "ROR_ONE_WELLDEF" > "HOL4Word32.word32.ROR_ONE_WELLDEF"
-  "ROR_ONE_EVAL2" > "HOL4Word32.word32.ROR_ONE_EVAL2"
-  "ROR_ONE_EVAL" > "HOL4Word32.word32.ROR_ONE_EVAL"
-  "ROR_CYCLE" > "HOL4Word32.word32.ROR_CYCLE"
-  "ROR_ADD" > "HOL4Word32.word32.ROR_ADD"
-  "RIGHT_OR_OVER_ANDw" > "HOL4Word32.word32.RIGHT_OR_OVER_ANDw"
-  "RIGHT_OR_OVER_AND_QT" > "HOL4Word32.word32.RIGHT_OR_OVER_AND_QT"
-  "RIGHT_AND_OVER_ORw" > "HOL4Word32.word32.RIGHT_AND_OVER_ORw"
-  "RIGHT_AND_OVER_OR_QT" > "HOL4Word32.word32.RIGHT_AND_OVER_OR_QT"
-  "OR_primdef" > "HOL4Word32.word32.OR_primdef"
-  "OR_def" > "HOL4Word32.word32.OR_def"
-  "OR_IDEMw" > "HOL4Word32.word32.OR_IDEMw"
-  "OR_IDEM_QT" > "HOL4Word32.word32.OR_IDEM_QT"
-  "OR_EVAL2" > "HOL4Word32.word32.OR_EVAL2"
-  "OR_EVAL" > "HOL4Word32.word32.OR_EVAL"
-  "OR_COMP_QT" > "HOL4Word32.word32.OR_COMP_QT"
-  "OR_COMMw" > "HOL4Word32.word32.OR_COMMw"
-  "OR_COMM_QT" > "HOL4Word32.word32.OR_COMM_QT"
-  "OR_ASSOCw" > "HOL4Word32.word32.OR_ASSOCw"
-  "OR_ASSOC_QT" > "HOL4Word32.word32.OR_ASSOC_QT"
-  "OR_ABSORBw" > "HOL4Word32.word32.OR_ABSORBw"
-  "OR_ABSORB_QT" > "HOL4Word32.word32.OR_ABSORB_QT"
-  "ONE_COMPw" > "HOL4Word32.word32.ONE_COMPw"
-  "ONE_COMP_primdef" > "HOL4Word32.word32.ONE_COMP_primdef"
-  "ONE_COMP_def" > "HOL4Word32.word32.ONE_COMP_def"
-  "ONE_COMP_WELLDEF" > "HOL4Word32.word32.ONE_COMP_WELLDEF"
-  "ONE_COMP_TWO_COMP" > "HOL4Word32.word32.ONE_COMP_TWO_COMP"
-  "ONE_COMP_THM" > "HOL4Word32.word32.ONE_COMP_THM"
-  "ONE_COMP_QT" > "HOL4Word32.word32.ONE_COMP_QT"
-  "ONE_COMP_EVAL2" > "HOL4Word32.word32.ONE_COMP_EVAL2"
-  "ONE_COMP_EVAL" > "HOL4Word32.word32.ONE_COMP_EVAL"
-  "MUL_WELLDEF" > "HOL4Word32.word32.MUL_WELLDEF"
-  "MUL_EVAL2" > "HOL4Word32.word32.MUL_EVAL2"
-  "MUL_EVAL" > "HOL4Word32.word32.MUL_EVAL"
-  "MULT_QT" > "HOL4Word32.word32.MULT_QT"
-  "MULT_COMMw" > "HOL4Word32.word32.MULT_COMMw"
-  "MULT_COMM_QT" > "HOL4Word32.word32.MULT_COMM_QT"
-  "MULT_CLAUSESw" > "HOL4Word32.word32.MULT_CLAUSESw"
-  "MULT_CLAUSES_QT" > "HOL4Word32.word32.MULT_CLAUSES_QT"
-  "MULT_ASSOCw" > "HOL4Word32.word32.MULT_ASSOCw"
-  "MULT_ASSOC_QT" > "HOL4Word32.word32.MULT_ASSOC_QT"
-  "MSBn_primdef" > "HOL4Word32.word32.MSBn_primdef"
-  "MSBn_def" > "HOL4Word32.word32.MSBn_def"
-  "MSB_primdef" > "HOL4Word32.word32.MSB_primdef"
-  "MSB_def" > "HOL4Word32.word32.MSB_def"
-  "MSB_WELLDEF" > "HOL4Word32.word32.MSB_WELLDEF"
-  "MSB_EVAL2" > "HOL4Word32.word32.MSB_EVAL2"
-  "MSB_EVAL" > "HOL4Word32.word32.MSB_EVAL"
-  "MODw_primdef" > "HOL4Word32.word32.MODw_primdef"
-  "MODw_def" > "HOL4Word32.word32.MODw_def"
-  "MODw_THM" > "HOL4Word32.word32.MODw_THM"
-  "MODw_MULT" > "HOL4Word32.word32.MODw_MULT"
-  "MODw_IDEM2" > "HOL4Word32.word32.MODw_IDEM2"
-  "MODw_EVAL" > "HOL4Word32.word32.MODw_EVAL"
-  "MODw_ELIM" > "HOL4Word32.word32.MODw_ELIM"
-  "MOD_MOD_DIV_2EXP" > "HOL4Word32.word32.MOD_MOD_DIV_2EXP"
-  "MOD_MOD_DIV" > "HOL4Word32.word32.MOD_MOD_DIV"
-  "MOD_ADD" > "HOL4Word32.word32.MOD_ADD"
-  "LSR_THM" > "HOL4Word32.word32.LSR_THM"
-  "LSR_ONE_primdef" > "HOL4Word32.word32.LSR_ONE_primdef"
-  "LSR_ONE_def" > "HOL4Word32.word32.LSR_ONE_def"
-  "LSR_ONE_WELLDEF" > "HOL4Word32.word32.LSR_ONE_WELLDEF"
-  "LSR_ONE_EVAL2" > "HOL4Word32.word32.LSR_ONE_EVAL2"
-  "LSR_ONE_EVAL" > "HOL4Word32.word32.LSR_ONE_EVAL"
-  "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
-  "LSR_LIMIT" > "HOL4Word32.word32.LSR_LIMIT"
-  "LSR_EVAL" > "HOL4Word32.word32.LSR_EVAL"
-  "LSR_ADD" > "HOL4Word32.word32.LSR_ADD"
-  "LSL_LIMIT" > "HOL4Word32.word32.LSL_LIMIT"
-  "LSL_ADD" > "HOL4Word32.word32.LSL_ADD"
-  "LSB_primdef" > "HOL4Word32.word32.LSB_primdef"
-  "LSB_def" > "HOL4Word32.word32.LSB_def"
-  "LSB_WELLDEF" > "HOL4Word32.word32.LSB_WELLDEF"
-  "LSB_EVAL2" > "HOL4Word32.word32.LSB_EVAL2"
-  "LSB_EVAL" > "HOL4Word32.word32.LSB_EVAL"
-  "LEFT_SHIFT_LESS" > "HOL4Word32.word32.LEFT_SHIFT_LESS"
-  "LEFT_ADD_DISTRIBw" > "HOL4Word32.word32.LEFT_ADD_DISTRIBw"
-  "LEFT_ADD_DISTRIB_QT" > "HOL4Word32.word32.LEFT_ADD_DISTRIB_QT"
-  "INw_primdef" > "HOL4Word32.word32.INw_primdef"
-  "INw_def" > "HOL4Word32.word32.INw_def"
-  "INw_MODw" > "HOL4Word32.word32.INw_MODw"
-  "INV_SUC_EQ_QT" > "HOL4Word32.word32.INV_SUC_EQ_QT"
-  "HB_primdef" > "HOL4Word32.word32.HB_primdef"
-  "HB_def" > "HOL4Word32.word32.HB_def"
-  "FUNPOW_THM2" > "HOL4Word32.word32.FUNPOW_THM2"
-  "FUNPOW_THM" > "Nat.funpow_swap1"
-  "FUNPOW_COMP" > "HOL4Word32.word32.FUNPOW_COMP"
-  "EQ_ADD_RCANCELw" > "HOL4Word32.word32.EQ_ADD_RCANCELw"
-  "EQ_ADD_RCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_RCANCEL_QT"
-  "EQ_ADD_LCANCELw" > "HOL4Word32.word32.EQ_ADD_LCANCELw"
-  "EQ_ADD_LCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_LCANCEL_QT"
-  "EQUIV_primdef" > "HOL4Word32.word32.EQUIV_primdef"
-  "EQUIV_def" > "HOL4Word32.word32.EQUIV_def"
-  "EQUIV_QT" > "HOL4Word32.word32.EQUIV_QT"
-  "EOR_primdef" > "HOL4Word32.word32.EOR_primdef"
-  "EOR_def" > "HOL4Word32.word32.EOR_def"
-  "EOR_EVAL2" > "HOL4Word32.word32.EOR_EVAL2"
-  "EOR_EVAL" > "HOL4Word32.word32.EOR_EVAL"
-  "DE_MORGAN_THMw" > "HOL4Word32.word32.DE_MORGAN_THMw"
-  "DE_MORGAN_THM_QT" > "HOL4Word32.word32.DE_MORGAN_THM_QT"
-  "COMP0_primdef" > "HOL4Word32.word32.COMP0_primdef"
-  "COMP0_def" > "HOL4Word32.word32.COMP0_def"
-  "CANCEL_SUBw" > "HOL4Word32.word32.CANCEL_SUBw"
-  "BITw_primdef" > "HOL4Word32.word32.BITw_primdef"
-  "BITw_def" > "HOL4Word32.word32.BITw_def"
-  "BITw_THM" > "HOL4Word32.word32.BITw_THM"
-  "BIT_EVAL" > "HOL4Word32.word32.BIT_EVAL"
-  "BIT_EQUIV_THM" > "HOL4Word32.word32.BIT_EQUIV_THM"
-  "BIT_EQUIV" > "HOL4Word32.word32.BIT_EQUIV"
-  "BITWISEw_WELLDEF" > "HOL4Word32.word32.BITWISEw_WELLDEF"
-  "BITWISE_WELLDEF" > "HOL4Word32.word32.BITWISE_WELLDEF"
-  "BITWISE_THM2" > "HOL4Word32.word32.BITWISE_THM2"
-  "BITWISE_ONE_COMP_THM" > "HOL4Word32.word32.BITWISE_ONE_COMP_THM"
-  "BITWISE_ISTEP" > "HOL4Word32.word32.BITWISE_ISTEP"
-  "BITWISE_EVAL2" > "HOL4Word32.word32.BITWISE_EVAL2"
-  "BITWISE_EVAL" > "HOL4Word32.word32.BITWISE_EVAL"
-  "BITSw_primdef" > "HOL4Word32.word32.BITSw_primdef"
-  "BITSw_def" > "HOL4Word32.word32.BITSw_def"
-  "BITSw_ZERO" > "HOL4Word32.word32.BITSw_ZERO"
-  "BITSw_DIV_THM" > "HOL4Word32.word32.BITSw_DIV_THM"
-  "BITSw_COMP_THM" > "HOL4Word32.word32.BITSw_COMP_THM"
-  "BITSwLT_THM" > "HOL4Word32.word32.BITSwLT_THM"
-  "BITS_SUC2" > "HOL4Word32.word32.BITS_SUC2"
-  "BITS_SLICEw_THM" > "HOL4Word32.word32.BITS_SLICEw_THM"
-  "BITS_EVAL" > "HOL4Word32.word32.BITS_EVAL"
-  "ASR_w_T" > "HOL4Word32.word32.ASR_w_T"
-  "ASR_THM" > "HOL4Word32.word32.ASR_THM"
-  "ASR_ONE_primdef" > "HOL4Word32.word32.ASR_ONE_primdef"
-  "ASR_ONE_def" > "HOL4Word32.word32.ASR_ONE_def"
-  "ASR_ONE_WELLDEF" > "HOL4Word32.word32.ASR_ONE_WELLDEF"
-  "ASR_ONE_EVAL2" > "HOL4Word32.word32.ASR_ONE_EVAL2"
-  "ASR_ONE_EVAL" > "HOL4Word32.word32.ASR_ONE_EVAL"
-  "ASR_LIMIT" > "HOL4Word32.word32.ASR_LIMIT"
-  "ASR_ADD" > "HOL4Word32.word32.ASR_ADD"
-  "AONE_primdef" > "HOL4Word32.word32.AONE_primdef"
-  "AONE_def" > "HOL4Word32.word32.AONE_def"
-  "AND_primdef" > "HOL4Word32.word32.AND_primdef"
-  "AND_def" > "HOL4Word32.word32.AND_def"
-  "AND_IDEMw" > "HOL4Word32.word32.AND_IDEMw"
-  "AND_IDEM_QT" > "HOL4Word32.word32.AND_IDEM_QT"
-  "AND_EVAL2" > "HOL4Word32.word32.AND_EVAL2"
-  "AND_EVAL" > "HOL4Word32.word32.AND_EVAL"
-  "AND_COMP_QT" > "HOL4Word32.word32.AND_COMP_QT"
-  "AND_COMMw" > "HOL4Word32.word32.AND_COMMw"
-  "AND_COMM_QT" > "HOL4Word32.word32.AND_COMM_QT"
-  "AND_ASSOCw" > "HOL4Word32.word32.AND_ASSOCw"
-  "AND_ASSOC_QT" > "HOL4Word32.word32.AND_ASSOC_QT"
-  "AND_ABSORBw" > "HOL4Word32.word32.AND_ABSORBw"
-  "AND_ABSORB_QT" > "HOL4Word32.word32.AND_ABSORB_QT"
-  "ADDw" > "HOL4Word32.word32.ADDw"
-  "ADD_WELLDEF" > "HOL4Word32.word32.ADD_WELLDEF"
-  "ADD_TWO_COMP_QT" > "HOL4Word32.word32.ADD_TWO_COMP_QT"
-  "ADD_TWO_COMP2" > "HOL4Word32.word32.ADD_TWO_COMP2"
-  "ADD_TWO_COMP" > "HOL4Word32.word32.ADD_TWO_COMP"
-  "ADD_SUBw" > "HOL4Word32.word32.ADD_SUBw"
-  "ADD_SUB_SYM" > "HOL4Word32.word32.ADD_SUB_SYM"
-  "ADD_SUB_ASSOC" > "HOL4Word32.word32.ADD_SUB_ASSOC"
-  "ADD_QT" > "HOL4Word32.word32.ADD_QT"
-  "ADD_INV_0_QT" > "HOL4Word32.word32.ADD_INV_0_QT"
-  "ADD_INV_0_EQw" > "HOL4Word32.word32.ADD_INV_0_EQw"
-  "ADD_INV_0_EQ_QT" > "HOL4Word32.word32.ADD_INV_0_EQ_QT"
-  "ADD_EVAL2" > "HOL4Word32.word32.ADD_EVAL2"
-  "ADD_EVAL" > "HOL4Word32.word32.ADD_EVAL"
-  "ADD_EQ_SUBw" > "HOL4Word32.word32.ADD_EQ_SUBw"
-  "ADD_COMMw" > "HOL4Word32.word32.ADD_COMMw"
-  "ADD_COMM_QT" > "HOL4Word32.word32.ADD_COMM_QT"
-  "ADD_CLAUSESw" > "HOL4Word32.word32.ADD_CLAUSESw"
-  "ADD_CLAUSES_QT" > "HOL4Word32.word32.ADD_CLAUSES_QT"
-  "ADD_ASSOCw" > "HOL4Word32.word32.ADD_ASSOCw"
-  "ADD_ASSOC_QT" > "HOL4Word32.word32.ADD_ASSOC_QT"
-  "ADD_0w" > "HOL4Word32.word32.ADD_0w"
-  "ADD_0_QT" > "HOL4Word32.word32.ADD_0_QT"
-  "ADD1w" > "HOL4Word32.word32.ADD1w"
-  "ADD1_QT" > "HOL4Word32.word32.ADD1_QT"
-
-end
--- a/src/HOL/Import/HOL/word_base.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "word_size" > "word_size_primdef"
-  "word_case" > "word_case_primdef"
-  "word_base0" > "word_base0_primdef"
-  "mk_word" > "mk_word_def"
-  "dest_word" > "dest_word_def"
-  "bit" > "bit_def"
-  "WSPLIT" > "WSPLIT_def"
-  "WSEG" > "WSEG_def"
-  "WORDLEN" > "WORDLEN_def"
-  "WORD" > "WORD_def"
-  "WCAT" > "WCAT_def"
-  "PWORDLEN" > "PWORDLEN_primdef"
-  "MSB" > "MSB_def"
-  "LSB" > "LSB_def"
-
-type_maps
-  "word" > "HOL4Vec.word_base.word"
-
-const_maps
-  "word_base0" > "HOL4Vec.word_base.word_base0"
-  "WORD" > "HOL4Vec.word_base.WORD"
-  "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
-
-const_renames
-  "BIT" > "bit"
-
-thm_maps
-  "word_size_def" > "HOL4Vec.word_base.word_size_def"
-  "word_repfns" > "HOL4Vec.word_base.word_repfns"
-  "word_nchotomy" > "HOL4Vec.word_base.word_nchotomy"
-  "word_induction" > "HOL4Vec.word_base.word_induction"
-  "word_induct" > "HOL4Vec.word_base.word_induct"
-  "word_cases" > "HOL4Vec.word_base.word_cases"
-  "word_case_def" > "HOL4Vec.word_base.word_case_def"
-  "word_case_cong" > "HOL4Vec.word_base.word_case_cong"
-  "word_base0_primdef" > "HOL4Vec.word_base.word_base0_primdef"
-  "word_base0_def" > "HOL4Vec.word_base.word_base0_def"
-  "word_TY_DEF" > "HOL4Vec.word_base.word_TY_DEF"
-  "word_Axiom" > "HOL4Vec.word_base.word_Axiom"
-  "word_Ax" > "HOL4Vec.word_base.word_Ax"
-  "word_11" > "HOL4Vec.word_base.word_11"
-  "WSPLIT_WSEG2" > "HOL4Vec.word_base.WSPLIT_WSEG2"
-  "WSPLIT_WSEG1" > "HOL4Vec.word_base.WSPLIT_WSEG1"
-  "WSPLIT_WSEG" > "HOL4Vec.word_base.WSPLIT_WSEG"
-  "WSPLIT_PWORDLEN" > "HOL4Vec.word_base.WSPLIT_PWORDLEN"
-  "WSPLIT_DEF" > "HOL4Vec.word_base.WSPLIT_DEF"
-  "WSEG_WSEG" > "HOL4Vec.word_base.WSEG_WSEG"
-  "WSEG_WORD_LENGTH" > "HOL4Vec.word_base.WSEG_WORD_LENGTH"
-  "WSEG_WORDLEN" > "HOL4Vec.word_base.WSEG_WORDLEN"
-  "WSEG_WCAT_WSEG2" > "HOL4Vec.word_base.WSEG_WCAT_WSEG2"
-  "WSEG_WCAT_WSEG1" > "HOL4Vec.word_base.WSEG_WCAT_WSEG1"
-  "WSEG_WCAT_WSEG" > "HOL4Vec.word_base.WSEG_WCAT_WSEG"
-  "WSEG_WCAT2" > "HOL4Vec.word_base.WSEG_WCAT2"
-  "WSEG_WCAT1" > "HOL4Vec.word_base.WSEG_WCAT1"
-  "WSEG_SUC" > "HOL4Vec.word_base.WSEG_SUC"
-  "WSEG_PWORDLEN" > "HOL4Vec.word_base.WSEG_PWORDLEN"
-  "WSEG_DEF" > "HOL4Vec.word_base.WSEG_DEF"
-  "WSEG_BIT" > "HOL4Vec.word_base.WSEG_BIT"
-  "WSEG0" > "HOL4Vec.word_base.WSEG0"
-  "WORD_def" > "HOL4Vec.word_base.WORD_def"
-  "WORD_SPLIT" > "HOL4Vec.word_base.WORD_SPLIT"
-  "WORD_SNOC_WCAT" > "HOL4Vec.word_base.WORD_SNOC_WCAT"
-  "WORD_PARTITION" > "HOL4Vec.word_base.WORD_PARTITION"
-  "WORD_CONS_WCAT" > "HOL4Vec.word_base.WORD_CONS_WCAT"
-  "WORD_11" > "HOL4Vec.word_base.WORD_11"
-  "WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT"
-  "WORDLEN_SUC_WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG"
-  "WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT"
-  "WORDLEN_SUC_WCAT_BIT_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG"
-  "WORDLEN_SUC_WCAT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT"
-  "WORDLEN_DEF" > "HOL4Vec.word_base.WORDLEN_DEF"
-  "WORD" > "HOL4Vec.word_base.WORD"
-  "WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WCAT_WSEG_WSEG"
-  "WCAT_PWORDLEN" > "HOL4Vec.word_base.WCAT_PWORDLEN"
-  "WCAT_DEF" > "HOL4Vec.word_base.WCAT_DEF"
-  "WCAT_ASSOC" > "HOL4Vec.word_base.WCAT_ASSOC"
-  "WCAT_11" > "HOL4Vec.word_base.WCAT_11"
-  "WCAT0" > "HOL4Vec.word_base.WCAT0"
-  "PWORDLEN_primdef" > "HOL4Vec.word_base.PWORDLEN_primdef"
-  "PWORDLEN_def" > "HOL4Vec.word_base.PWORDLEN_def"
-  "PWORDLEN1" > "HOL4Vec.word_base.PWORDLEN1"
-  "PWORDLEN0" > "HOL4Vec.word_base.PWORDLEN0"
-  "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
-  "MSB_DEF" > "HOL4Vec.word_base.MSB_DEF"
-  "MSB" > "HOL4Vec.word_base.MSB"
-  "LSB_DEF" > "HOL4Vec.word_base.LSB_DEF"
-  "LSB" > "HOL4Vec.word_base.LSB"
-  "IN_PWORDLEN" > "HOL4Vec.word_base.IN_PWORDLEN"
-  "BIT_WSEG" > "HOL4Vec.word_base.BIT_WSEG"
-  "BIT_WCAT_SND" > "HOL4Vec.word_base.BIT_WCAT_SND"
-  "BIT_WCAT_FST" > "HOL4Vec.word_base.BIT_WCAT_FST"
-  "BIT_WCAT1" > "HOL4Vec.word_base.BIT_WCAT1"
-  "BIT_EQ_IMP_WORD_EQ" > "HOL4Vec.word_base.BIT_EQ_IMP_WORD_EQ"
-  "BIT_DEF" > "HOL4Vec.word_base.BIT_DEF"
-  "BIT0" > "HOL4Vec.word_base.BIT0"
-
-end
--- a/src/HOL/Import/HOL/word_bitop.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "WMAP" > "WMAP_def"
-  "SHR" > "SHR_def"
-  "SHL" > "SHL_def"
-  "PBITOP" > "PBITOP_primdef"
-  "PBITBOP" > "PBITBOP_primdef"
-  "FORALLBITS" > "FORALLBITS_def"
-  "EXISTSABIT" > "EXISTSABIT_def"
-
-const_maps
-  "SHR" > "HOL4Vec.word_bitop.SHR"
-  "SHL" > "HOL4Vec.word_bitop.SHL"
-  "PBITOP" > "HOL4Vec.word_bitop.PBITOP"
-  "PBITBOP" > "HOL4Vec.word_bitop.PBITBOP"
-
-thm_maps
-  "WSEG_SHL_0" > "HOL4Vec.word_bitop.WSEG_SHL_0"
-  "WSEG_SHL" > "HOL4Vec.word_bitop.WSEG_SHL"
-  "WMAP_o" > "HOL4Vec.word_bitop.WMAP_o"
-  "WMAP_WSEG" > "HOL4Vec.word_bitop.WMAP_WSEG"
-  "WMAP_WCAT" > "HOL4Vec.word_bitop.WMAP_WCAT"
-  "WMAP_PWORDLEN" > "HOL4Vec.word_bitop.WMAP_PWORDLEN"
-  "WMAP_PBITOP" > "HOL4Vec.word_bitop.WMAP_PBITOP"
-  "WMAP_DEF" > "HOL4Vec.word_bitop.WMAP_DEF"
-  "WMAP_BIT" > "HOL4Vec.word_bitop.WMAP_BIT"
-  "WMAP_0" > "HOL4Vec.word_bitop.WMAP_0"
-  "SHR_def" > "HOL4Vec.word_bitop.SHR_def"
-  "SHR_WSEG_NF" > "HOL4Vec.word_bitop.SHR_WSEG_NF"
-  "SHR_WSEG_1F" > "HOL4Vec.word_bitop.SHR_WSEG_1F"
-  "SHR_WSEG" > "HOL4Vec.word_bitop.SHR_WSEG"
-  "SHR_DEF" > "HOL4Vec.word_bitop.SHR_DEF"
-  "SHL_def" > "HOL4Vec.word_bitop.SHL_def"
-  "SHL_WSEG_NF" > "HOL4Vec.word_bitop.SHL_WSEG_NF"
-  "SHL_WSEG_1F" > "HOL4Vec.word_bitop.SHL_WSEG_1F"
-  "SHL_WSEG" > "HOL4Vec.word_bitop.SHL_WSEG"
-  "SHL_DEF" > "HOL4Vec.word_bitop.SHL_DEF"
-  "PBITOP_primdef" > "HOL4Vec.word_bitop.PBITOP_primdef"
-  "PBITOP_def" > "HOL4Vec.word_bitop.PBITOP_def"
-  "PBITOP_WSEG" > "HOL4Vec.word_bitop.PBITOP_WSEG"
-  "PBITOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITOP_PWORDLEN"
-  "PBITOP_BIT" > "HOL4Vec.word_bitop.PBITOP_BIT"
-  "PBITBOP_primdef" > "HOL4Vec.word_bitop.PBITBOP_primdef"
-  "PBITBOP_def" > "HOL4Vec.word_bitop.PBITBOP_def"
-  "PBITBOP_WSEG" > "HOL4Vec.word_bitop.PBITBOP_WSEG"
-  "PBITBOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITBOP_PWORDLEN"
-  "PBITBOP_EXISTS" > "HOL4Vec.word_bitop.PBITBOP_EXISTS"
-  "NOT_FORALLBITS" > "HOL4Vec.word_bitop.NOT_FORALLBITS"
-  "NOT_EXISTSABIT" > "HOL4Vec.word_bitop.NOT_EXISTSABIT"
-  "IN_PBITOP" > "HOL4Vec.word_bitop.IN_PBITOP"
-  "IN_PBITBOP" > "HOL4Vec.word_bitop.IN_PBITBOP"
-  "FORALLBITS_WSEG" > "HOL4Vec.word_bitop.FORALLBITS_WSEG"
-  "FORALLBITS_WCAT" > "HOL4Vec.word_bitop.FORALLBITS_WCAT"
-  "FORALLBITS_DEF" > "HOL4Vec.word_bitop.FORALLBITS_DEF"
-  "FORALLBITS" > "HOL4Vec.word_bitop.FORALLBITS"
-  "EXISTSABIT_WSEG" > "HOL4Vec.word_bitop.EXISTSABIT_WSEG"
-  "EXISTSABIT_WCAT" > "HOL4Vec.word_bitop.EXISTSABIT_WCAT"
-  "EXISTSABIT_DEF" > "HOL4Vec.word_bitop.EXISTSABIT_DEF"
-  "EXISTSABIT" > "HOL4Vec.word_bitop.EXISTSABIT"
-
-end
--- a/src/HOL/Import/HOL/word_num.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-import
-
-import_segment "hol4"
-
-def_maps
-  "NWORD" > "NWORD_def"
-  "NVAL" > "NVAL_def"
-  "NLIST" > "NLIST_def"
-  "LVAL" > "LVAL_def"
-
-const_maps
-  "NWORD" > "HOL4Vec.word_num.NWORD"
-  "LVAL" > "HOL4Vec.word_num.LVAL"
-
-thm_maps
-  "NWORD_def" > "HOL4Vec.word_num.NWORD_def"
-  "NWORD_PWORDLEN" > "HOL4Vec.word_num.NWORD_PWORDLEN"
-  "NWORD_LENGTH" > "HOL4Vec.word_num.NWORD_LENGTH"
-  "NWORD_DEF" > "HOL4Vec.word_num.NWORD_DEF"
-  "NVAL_WORDLEN_0" > "HOL4Vec.word_num.NVAL_WORDLEN_0"
-  "NVAL_WCAT2" > "HOL4Vec.word_num.NVAL_WCAT2"
-  "NVAL_WCAT1" > "HOL4Vec.word_num.NVAL_WCAT1"
-  "NVAL_WCAT" > "HOL4Vec.word_num.NVAL_WCAT"
-  "NVAL_MAX" > "HOL4Vec.word_num.NVAL_MAX"
-  "NVAL_DEF" > "HOL4Vec.word_num.NVAL_DEF"
-  "NVAL1" > "HOL4Vec.word_num.NVAL1"
-  "NVAL0" > "HOL4Vec.word_num.NVAL0"
-  "NLIST_DEF" > "HOL4Vec.word_num.NLIST_DEF"
-  "LVAL_def" > "HOL4Vec.word_num.LVAL_def"
-  "LVAL_SNOC" > "HOL4Vec.word_num.LVAL_SNOC"
-  "LVAL_MAX" > "HOL4Vec.word_num.LVAL_MAX"
-  "LVAL_DEF" > "HOL4Vec.word_num.LVAL_DEF"
-  "LVAL" > "HOL4Vec.word_num.LVAL"
-
-end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/HOL4Base.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,4501 @@
+(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
+
+theory HOL4Base
+imports "../../HOL4Syntax" "../Compatibility"
+begin
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" bool
+
+definition
+  ARB :: "'a"  where
+  "ARB == SOME x. True"
+
+lemma ARB_DEF: "ARB = (SOME x. True)"
+  sorry
+
+definition
+  IN :: "'a => ('a => bool) => bool"  where
+  "IN == %x f. f x"
+
+lemma IN_DEF: "IN = (%x f. f x)"
+  sorry
+
+definition
+  RES_FORALL :: "('a => bool) => ('a => bool) => bool"  where
+  "RES_FORALL == %p m. ALL x. IN x p --> m x"
+
+lemma RES_FORALL_DEF: "RES_FORALL = (%p m. ALL x. IN x p --> m x)"
+  sorry
+
+definition
+  RES_EXISTS :: "('a => bool) => ('a => bool) => bool"  where
+  "RES_EXISTS == %p m. EX x. IN x p & m x"
+
+lemma RES_EXISTS_DEF: "RES_EXISTS = (%p m. EX x. IN x p & m x)"
+  sorry
+
+definition
+  RES_EXISTS_UNIQUE :: "('a => bool) => ('a => bool) => bool"  where
+  "RES_EXISTS_UNIQUE ==
+%p m. RES_EXISTS p m &
+      RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y))"
+
+lemma RES_EXISTS_UNIQUE_DEF: "RES_EXISTS_UNIQUE =
+(%p m. RES_EXISTS p m &
+       RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y)))"
+  sorry
+
+definition
+  RES_SELECT :: "('a => bool) => ('a => bool) => 'a"  where
+  "RES_SELECT == %p m. SOME x. IN x p & m x"
+
+lemma RES_SELECT_DEF: "RES_SELECT = (%p m. SOME x. IN x p & m x)"
+  sorry
+
+lemma EXCLUDED_MIDDLE: "t | ~ t"
+  sorry
+
+lemma FORALL_THM: "All f = All f"
+  sorry
+
+lemma EXISTS_THM: "Ex f = Ex f"
+  sorry
+
+lemma F_IMP: "[| ~ t; t |] ==> False"
+  sorry
+
+lemma NOT_AND: "~ (t & ~ t)"
+  sorry
+
+lemma AND_CLAUSES: "(True & t) = t &
+(t & True) = t & (False & t) = False & (t & False) = False & (t & t) = t"
+  sorry
+
+lemma OR_CLAUSES: "(True | t) = True &
+(t | True) = True & (False | t) = t & (t | False) = t & (t | t) = t"
+  sorry
+
+lemma IMP_CLAUSES: "(True --> t) = t &
+(t --> True) = True &
+(False --> t) = True & (t --> t) = True & (t --> False) = (~ t)"
+  sorry
+
+lemma NOT_CLAUSES: "(ALL t. (~ ~ t) = t) & (~ True) = False & (~ False) = True"
+  sorry
+
+lemma BOOL_EQ_DISTINCT: "True ~= False & False ~= True"
+  sorry
+
+lemma EQ_CLAUSES: "(True = t) = t & (t = True) = t & (False = t) = (~ t) & (t = False) = (~ t)"
+  sorry
+
+lemma COND_CLAUSES: "(if True then t1 else t2) = t1 & (if False then t1 else t2) = t2"
+  sorry
+
+lemma SELECT_UNIQUE: "(!!y. P y = (y = x)) ==> Eps P = x"
+  sorry
+
+lemma BOTH_EXISTS_AND_THM: "(EX x::'a. (P::bool) & (Q::bool)) = ((EX x::'a. P) & (EX x::'a. Q))"
+  sorry
+
+lemma BOTH_FORALL_OR_THM: "(ALL x::'a. (P::bool) | (Q::bool)) = ((ALL x::'a. P) | (ALL x::'a. Q))"
+  sorry
+
+lemma BOTH_FORALL_IMP_THM: "(ALL x::'a. (P::bool) --> (Q::bool)) = ((EX x::'a. P) --> (ALL x::'a. Q))"
+  sorry
+
+lemma BOTH_EXISTS_IMP_THM: "(EX x::'a. (P::bool) --> (Q::bool)) = ((ALL x::'a. P) --> (EX x::'a. Q))"
+  sorry
+
+lemma OR_IMP_THM: "(A = (B | A)) = (B --> A)"
+  sorry
+
+lemma DE_MORGAN_THM: "(~ (A & B)) = (~ A | ~ B) & (~ (A | B)) = (~ A & ~ B)"
+  sorry
+
+lemma IMP_F_EQ_F: "(t --> False) = (t = False)"
+  sorry
+
+lemma COND_RATOR: "(if b::bool then f::'a => 'b else (g::'a => 'b)) (x::'a) =
+(if b then f x else g x)"
+  sorry
+
+lemma COND_ABS: "(%x. if b then f x else g x) = (if b then f else g)"
+  sorry
+
+lemma COND_EXPAND: "(if b then t1 else t2) = ((~ b | t1) & (b | t2))"
+  sorry
+
+lemma ONE_ONE_THM: "inj f = (ALL x1 x2. f x1 = f x2 --> x1 = x2)"
+  sorry
+
+lemma ABS_REP_THM: "(op ==>::prop => prop => prop)
+ ((Trueprop::bool => prop)
+   ((Ex::(('b::type => 'a::type) => bool) => bool)
+     ((TYPE_DEFINITION::('a::type => bool)
+                        => ('b::type => 'a::type) => bool)
+       (P::'a::type => bool))))
+ ((Trueprop::bool => prop)
+   ((Ex::(('b::type => 'a::type) => bool) => bool)
+     (%x::'b::type => 'a::type.
+         (Ex::(('a::type => 'b::type) => bool) => bool)
+          (%abs::'a::type => 'b::type.
+              (op &::bool => bool => bool)
+               ((All::('b::type => bool) => bool)
+                 (%a::'b::type.
+                     (op =::'b::type => 'b::type => bool) (abs (x a)) a))
+               ((All::('a::type => bool) => bool)
+                 (%r::'a::type.
+                     (op =::bool => bool => bool) (P r)
+                      ((op =::'a::type => 'a::type => bool) (x (abs r))
+                        r)))))))"
+  sorry
+
+lemma LET_RAND: "(P::'b => bool) (Let (M::'a) (N::'a => 'b)) = (let x::'a = M in P (N x))"
+  sorry
+
+lemma LET_RATOR: "Let (M::'a) (N::'a => 'b => 'c) (b::'b) = (let x::'a = M in N x b)"
+  sorry
+
+lemma AND_CONG: "(Q --> P = P') & (P' --> Q = Q') ==> (P & Q) = (P' & Q')"
+  sorry
+
+lemma OR_CONG: "(~ Q --> P = P') & (~ P' --> Q = Q') ==> (P | Q) = (P' | Q')"
+  sorry
+
+lemma COND_CONG: "P = Q & (Q --> x = x') & (~ Q --> y = y')
+==> (if P then x else y) = (if Q then x' else y')"
+  sorry
+
+lemma MONO_COND: "[| x ==> y; z ==> w; if b then x else z |] ==> if b then y else w"
+  sorry
+
+lemma SKOLEM_THM: "(ALL x. Ex (P x)) = (EX f. ALL x. P x (f x))"
+  sorry
+
+lemma bool_case_thm: "(ALL (e0::'a) e1::'a. (case True of True => e0 | False => e1) = e0) &
+(ALL (e0::'a) e1::'a. (case False of True => e0 | False => e1) = e1)"
+  sorry
+
+lemma bool_case_ID: "(case b of True => x | _ => x) = x"
+  sorry
+
+lemma boolAxiom: "EX x. x True = e0 & x False = e1"
+  sorry
+
+lemma UEXISTS_OR_THM: "EX! x. P x | Q x ==> Ex1 P | Ex1 Q"
+  sorry
+
+lemma UEXISTS_SIMP: "(EX! x::'a. (t::bool)) = (t & (ALL x::'a. All (op = x)))"
+  sorry
+
+consts
+  RES_ABSTRACT :: "('a => bool) => ('a => 'b) => 'a => 'b" 
+
+specification (RES_ABSTRACT) RES_ABSTRACT_DEF: "(ALL (p::'a => bool) (m::'a => 'b) x::'a.
+    IN x p --> RES_ABSTRACT p m x = m x) &
+(ALL (p::'a => bool) (m1::'a => 'b) m2::'a => 'b.
+    (ALL x::'a. IN x p --> m1 x = m2 x) -->
+    RES_ABSTRACT p m1 = RES_ABSTRACT p m2)"
+  sorry
+
+lemma BOOL_FUN_CASES_THM: "f = (%b. True) | f = (%b. False) | f = (%b. b) | f = Not"
+  sorry
+
+lemma BOOL_FUN_INDUCT: "P (%b. True) & P (%b. False) & P (%b. b) & P Not ==> P x"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" combin
+
+definition
+  K :: "'a => 'b => 'a"  where
+  "K == %x y. x"
+
+lemma K_DEF: "K = (%x y. x)"
+  sorry
+
+definition
+  S :: "('a => 'b => 'c) => ('a => 'b) => 'a => 'c"  where
+  "S == %f g x. f x (g x)"
+
+lemma S_DEF: "S = (%f g x. f x (g x))"
+  sorry
+
+definition
+  I :: "'a => 'a"  where
+  "(op ==::('a::type => 'a::type) => ('a::type => 'a::type) => prop)
+ (I::'a::type => 'a::type)
+ ((S::('a::type => ('a::type => 'a::type) => 'a::type)
+      => ('a::type => 'a::type => 'a::type) => 'a::type => 'a::type)
+   (K::'a::type => ('a::type => 'a::type) => 'a::type)
+   (K::'a::type => 'a::type => 'a::type))"
+
+lemma I_DEF: "(op =::('a::type => 'a::type) => ('a::type => 'a::type) => bool)
+ (I::'a::type => 'a::type)
+ ((S::('a::type => ('a::type => 'a::type) => 'a::type)
+      => ('a::type => 'a::type => 'a::type) => 'a::type => 'a::type)
+   (K::'a::type => ('a::type => 'a::type) => 'a::type)
+   (K::'a::type => 'a::type => 'a::type))"
+  sorry
+
+definition
+  C :: "('a => 'b => 'c) => 'b => 'a => 'c"  where
+  "C == %f x y. f y x"
+
+lemma C_DEF: "C = (%f x y. f y x)"
+  sorry
+
+definition
+  W :: "('a => 'a => 'b) => 'a => 'b"  where
+  "W == %f x. f x x"
+
+lemma W_DEF: "W = (%f x. f x x)"
+  sorry
+
+lemma I_THM: "I x = x"
+  sorry
+
+lemma I_o_ID: "I o f = f & f o I = f"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" sum
+
+lemma ISL_OR_ISR: "ISL x | ISR x"
+  sorry
+
+lemma INL: "ISL x ==> Inl (OUTL x) = x"
+  sorry
+
+lemma INR: "ISR x ==> Inr (OUTR x) = x"
+  sorry
+
+lemma sum_case_cong: "(M::'b + 'c) = (M'::'b + 'c) &
+(ALL x::'b. M' = Inl x --> (f::'b => 'a) x = (f'::'b => 'a) x) &
+(ALL y::'c. M' = Inr y --> (g::'c => 'a) y = (g'::'c => 'a) y)
+==> sum_case f g M = sum_case f' g' M'"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" one
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" option
+
+lemma option_CLAUSES: "(op &::bool => bool => bool)
+ ((All::('a::type => bool) => bool)
+   (%x::'a::type.
+       (All::('a::type => bool) => bool)
+        (%y::'a::type.
+            (op =::bool => bool => bool)
+             ((op =::'a::type option => 'a::type option => bool)
+               ((Some::'a::type => 'a::type option) x)
+               ((Some::'a::type => 'a::type option) y))
+             ((op =::'a::type => 'a::type => bool) x y))))
+ ((op &::bool => bool => bool)
+   ((All::('a::type => bool) => bool)
+     (%x::'a::type.
+         (op =::'a::type => 'a::type => bool)
+          ((the::'a::type option => 'a::type)
+            ((Some::'a::type => 'a::type option) x))
+          x))
+   ((op &::bool => bool => bool)
+     ((All::('a::type => bool) => bool)
+       (%x::'a::type.
+           (op ~=::'a::type option => 'a::type option => bool)
+            (None::'a::type option)
+            ((Some::'a::type => 'a::type option) x)))
+     ((op &::bool => bool => bool)
+       ((All::('a::type => bool) => bool)
+         (%x::'a::type.
+             (op ~=::'a::type option => 'a::type option => bool)
+              ((Some::'a::type => 'a::type option) x)
+              (None::'a::type option)))
+       ((op &::bool => bool => bool)
+         ((All::('a::type => bool) => bool)
+           (%x::'a::type.
+               (op =::bool => bool => bool)
+                ((IS_SOME::'a::type option => bool)
+                  ((Some::'a::type => 'a::type option) x))
+                (True::bool)))
+         ((op &::bool => bool => bool)
+           ((op =::bool => bool => bool)
+             ((IS_SOME::'a::type option => bool) (None::'a::type option))
+             (False::bool))
+           ((op &::bool => bool => bool)
+             ((All::('a::type option => bool) => bool)
+               (%x::'a::type option.
+                   (op =::bool => bool => bool)
+                    ((IS_NONE::'a::type option => bool) x)
+                    ((op =::'a::type option => 'a::type option => bool) x
+                      (None::'a::type option))))
+             ((op &::bool => bool => bool)
+               ((All::('a::type option => bool) => bool)
+                 (%x::'a::type option.
+                     (op =::bool => bool => bool)
+                      ((Not::bool => bool)
+                        ((IS_SOME::'a::type option => bool) x))
+                      ((op =::'a::type option => 'a::type option => bool) x
+                        (None::'a::type option))))
+               ((op &::bool => bool => bool)
+                 ((All::('a::type option => bool) => bool)
+                   (%x::'a::type option.
+                       (op -->::bool => bool => bool)
+                        ((IS_SOME::'a::type option => bool) x)
+                        ((op =::'a::type option => 'a::type option => bool)
+                          ((Some::'a::type => 'a::type option)
+                            ((the::'a::type option => 'a::type) x))
+                          x)))
+                 ((op &::bool => bool => bool)
+                   ((All::('a::type option => bool) => bool)
+                     (%x::'a::type option.
+                         (op =::'a::type option => 'a::type option => bool)
+                          ((option_case::'a::type option
+   => ('a::type => 'a::type option) => 'a::type option => 'a::type option)
+                            (None::'a::type option)
+                            (Some::'a::type => 'a::type option) x)
+                          x))
+                   ((op &::bool => bool => bool)
+                     ((All::('a::type option => bool) => bool)
+                       (%x::'a::type option.
+                           (op =::'a::type option
+                                  => 'a::type option => bool)
+                            ((option_case::'a::type option
+     => ('a::type => 'a::type option) => 'a::type option => 'a::type option)
+                              x (Some::'a::type => 'a::type option) x)
+                            x))
+                     ((op &::bool => bool => bool)
+                       ((All::('a::type option => bool) => bool)
+                         (%x::'a::type option.
+                             (op -->::bool => bool => bool)
+                              ((IS_NONE::'a::type option => bool) x)
+                              ((op =::'b::type => 'b::type => bool)
+                                ((option_case::'b::type
+         => ('a::type => 'b::type) => 'a::type option => 'b::type)
+                                  (e::'b::type) (f::'a::type => 'b::type) x)
+                                e)))
+                       ((op &::bool => bool => bool)
+                         ((All::('a::type option => bool) => bool)
+                           (%x::'a::type option.
+                               (op -->::bool => bool => bool)
+                                ((IS_SOME::'a::type option => bool) x)
+                                ((op =::'b::type => 'b::type => bool)
+                                  ((option_case::'b::type
+           => ('a::type => 'b::type) => 'a::type option => 'b::type)
+                                    e f x)
+                                  (f ((the::'a::type option => 'a::type)
+ x)))))
+                         ((op &::bool => bool => bool)
+                           ((All::('a::type option => bool) => bool)
+                             (%x::'a::type option.
+                                 (op -->::bool => bool => bool)
+                                  ((IS_SOME::'a::type option => bool) x)
+                                  ((op =::'a::type option
+    => 'a::type option => bool)
+                                    ((option_case::'a::type option
+             => ('a::type => 'a::type option)
+                => 'a::type option => 'a::type option)
+(ea::'a::type option) (Some::'a::type => 'a::type option) x)
+                                    x)))
+                           ((op &::bool => bool => bool)
+                             ((All::('b::type => bool) => bool)
+                               (%u::'b::type.
+                                   (All::(('a::type => 'b::type) => bool)
+   => bool)
+                                    (%f::'a::type => 'b::type.
+  (op =::'b::type => 'b::type => bool)
+   ((option_case::'b::type
+                  => ('a::type => 'b::type) => 'a::type option => 'b::type)
+     u f (None::'a::type option))
+   u)))
+                             ((op &::bool => bool => bool)
+                               ((All::('b::type => bool) => bool)
+                                 (%u::'b::type.
+                                     (All::(('a::type => 'b::type) => bool)
+     => bool)
+(%f::'a::type => 'b::type.
+    (All::('a::type => bool) => bool)
+     (%x::'a::type.
+         (op =::'b::type => 'b::type => bool)
+          ((option_case::'b::type
+                         => ('a::type => 'b::type)
+                            => 'a::type option => 'b::type)
+            u f ((Some::'a::type => 'a::type option) x))
+          (f x)))))
+                               ((op &::bool => bool => bool)
+                                 ((All::(('a::type => 'b::type) => bool)
+  => bool)
+                                   (%f::'a::type => 'b::type.
+ (All::('a::type => bool) => bool)
+  (%x::'a::type.
+      (op =::'b::type option => 'b::type option => bool)
+       ((Option.map::('a::type => 'b::type)
+                     => 'a::type option => 'b::type option)
+         f ((Some::'a::type => 'a::type option) x))
+       ((Some::'b::type => 'b::type option) (f x)))))
+                                 ((op &::bool => bool => bool)
+                                   ((All::(('a::type => 'b::type) => bool)
+    => bool)
+                                     (%f::'a::type => 'b::type.
+   (op =::'b::type option => 'b::type option => bool)
+    ((Option.map::('a::type => 'b::type)
+                  => 'a::type option => 'b::type option)
+      f (None::'a::type option))
+    (None::'b::type option)))
+                                   ((op &::bool => bool => bool)
+                                     ((op =::'a::type option
+       => 'a::type option => bool)
+ ((OPTION_JOIN::'a::type option option => 'a::type option)
+   (None::'a::type option option))
+ (None::'a::type option))
+                                     ((All::('a::type option => bool)
+      => bool)
+ (%x::'a::type option.
+     (op =::'a::type option => 'a::type option => bool)
+      ((OPTION_JOIN::'a::type option option => 'a::type option)
+        ((Some::'a::type option => 'a::type option option) x))
+      x))))))))))))))))))))"
+  sorry
+
+lemma option_case_compute: "option_case (e::'b) (f::'a => 'b) (x::'a option) =
+(if IS_SOME x then f (the x) else e)"
+  sorry
+
+lemma OPTION_MAP_EQ_SOME: "(Option.map (f::'a => 'b) (x::'a option) = Some (y::'b)) =
+(EX z::'a. x = Some z & y = f z)"
+  sorry
+
+lemma OPTION_JOIN_EQ_SOME: "(OPTION_JOIN x = Some xa) = (x = Some (Some xa))"
+  sorry
+
+lemma option_case_cong: "M = M' & (M' = None --> u = u') & (ALL x. M' = Some x --> f x = f' x)
+==> option_case u f M = option_case u' f' M'"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" marker
+
+consts
+  stmarker :: "'a => 'a" 
+
+defs
+  stmarker_primdef: "stmarker == %x. x"
+
+lemma stmarker_def: "stmarker x = x"
+  sorry
+
+lemma move_left_conj: "(x & stmarker xb) = (stmarker xb & x) &
+((stmarker xb & x) & xa) = (stmarker xb & x & xa) &
+(x & stmarker xb & xa) = (stmarker xb & x & xa)"
+  sorry
+
+lemma move_right_conj: "(stmarker xb & x) = (x & stmarker xb) &
+(x & xa & stmarker xb) = ((x & xa) & stmarker xb) &
+((x & stmarker xb) & xa) = ((x & xa) & stmarker xb)"
+  sorry
+
+lemma move_left_disj: "(x | stmarker xb) = (stmarker xb | x) &
+((stmarker xb | x) | xa) = (stmarker xb | x | xa) &
+(x | stmarker xb | xa) = (stmarker xb | x | xa)"
+  sorry
+
+lemma move_right_disj: "(stmarker xb | x) = (x | stmarker xb) &
+(x | xa | stmarker xb) = ((x | xa) | stmarker xb) &
+((x | stmarker xb) | xa) = ((x | xa) | stmarker xb)"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" relation
+
+definition
+  TC :: "('a => 'a => bool) => 'a => 'a => bool"  where
+  "TC ==
+%R a b.
+   ALL P.
+      (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
+      P a b"
+
+lemma TC_DEF: "TC R a b =
+(ALL P.
+    (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
+    P a b)"
+  sorry
+
+definition
+  RTC :: "('a => 'a => bool) => 'a => 'a => bool"  where
+  "RTC ==
+%R a b.
+   ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b"
+
+lemma RTC_DEF: "RTC R a b =
+(ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b)"
+  sorry
+
+consts
+  RC :: "('a => 'a => bool) => 'a => 'a => bool" 
+
+defs
+  RC_primdef: "RC == %R x y. x = y | R x y"
+
+lemma RC_def: "RC R x y = (x = y | R x y)"
+  sorry
+
+consts
+  transitive :: "('a => 'a => bool) => bool" 
+
+defs
+  transitive_primdef: "transitive == %R. ALL x y z. R x y & R y z --> R x z"
+
+lemma transitive_def: "transitive R = (ALL x y z. R x y & R y z --> R x z)"
+  sorry
+
+definition
+  pred_reflexive :: "('a => 'a => bool) => bool"  where
+  "pred_reflexive == %R. ALL x. R x x"
+
+lemma reflexive_def: "pred_reflexive R = (ALL x. R x x)"
+  sorry
+
+lemma TC_TRANSITIVE: "transitive (TC x)"
+  sorry
+
+lemma RTC_INDUCT: "[| (ALL x. xa x x) & (ALL xb y z. x xb y & xa y z --> xa xb z);
+   RTC x xb xc |]
+==> xa xb xc"
+  sorry
+
+lemma TC_RULES: "(ALL xa xb. x xa xb --> TC x xa xb) &
+(ALL xa xb xc. TC x xa xb & TC x xb xc --> TC x xa xc)"
+  sorry
+
+lemma RTC_RULES: "(ALL xa. RTC x xa xa) &
+(ALL xa xb xc. x xa xb & RTC x xb xc --> RTC x xa xc)"
+  sorry
+
+lemma RTC_STRONG_INDUCT: "[| (ALL x. P x x) & (ALL x y z. R x y & RTC R y z & P y z --> P x z);
+   RTC R x y |]
+==> P x y"
+  sorry
+
+lemma RTC_RTC: "[| RTC R x y; RTC R y z |] ==> RTC R x z"
+  sorry
+
+lemma RTC_TRANSITIVE: "transitive (RTC x)"
+  sorry
+
+lemma RTC_REFLEXIVE: "pred_reflexive (RTC R)"
+  sorry
+
+lemma RC_REFLEXIVE: "pred_reflexive (RC R)"
+  sorry
+
+lemma TC_SUBSET: "x xa xb ==> TC x xa xb"
+  sorry
+
+lemma RTC_SUBSET: "R x y ==> RTC R x y"
+  sorry
+
+lemma RC_SUBSET: "R x y ==> RC R x y"
+  sorry
+
+lemma RC_RTC: "RC R x y ==> RTC R x y"
+  sorry
+
+lemma TC_INDUCT: "[| (ALL xb y. x xb y --> xa xb y) & (ALL x y z. xa x y & xa y z --> xa x z);
+   TC x xb xc |]
+==> xa xb xc"
+  sorry
+
+lemma TC_INDUCT_LEFT1: "[| (ALL xb y. x xb y --> xa xb y) &
+   (ALL xb y z. x xb y & xa y z --> xa xb z);
+   TC x xb xc |]
+==> xa xb xc"
+  sorry
+
+lemma TC_STRONG_INDUCT: "[| (ALL x y. R x y --> P x y) &
+   (ALL x y z. P x y & P y z & TC R x y & TC R y z --> P x z);
+   TC R u v |]
+==> P u v"
+  sorry
+
+lemma TC_STRONG_INDUCT_LEFT1: "[| (ALL x y. R x y --> P x y) &
+   (ALL x y z. R x y & P y z & TC R y z --> P x z);
+   TC R u v |]
+==> P u v"
+  sorry
+
+lemma TC_RTC: "TC R x y ==> RTC R x y"
+  sorry
+
+lemma RTC_TC_RC: "RTC R x y ==> RC R x y | TC R x y"
+  sorry
+
+lemma TC_RC_EQNS: "RC (TC R) = RTC R & TC (RC R) = RTC R"
+  sorry
+
+lemma RC_IDEM: "RC (RC R) = RC R"
+  sorry
+
+lemma TC_IDEM: "TC (TC R) = TC R"
+  sorry
+
+lemma RTC_IDEM: "RTC (RTC R) = RTC R"
+  sorry
+
+lemma RTC_CASES1: "RTC x xa xb = (xa = xb | (EX u. x xa u & RTC x u xb))"
+  sorry
+
+lemma RTC_CASES2: "RTC x xa xb = (xa = xb | (EX u. RTC x xa u & x u xb))"
+  sorry
+
+lemma RTC_CASES_RTC_TWICE: "RTC x xa xb = (EX u. RTC x xa u & RTC x u xb)"
+  sorry
+
+lemma TC_CASES1: "TC R x z ==> R x z | (EX y. R x y & TC R y z)"
+  sorry
+
+lemma TC_CASES2: "TC R x z ==> R x z | (EX y. TC R x y & R y z)"
+  sorry
+
+lemma TC_MONOTONE: "[| !!x y. R x y ==> Q x y; TC R x y |] ==> TC Q x y"
+  sorry
+
+lemma RTC_MONOTONE: "[| !!x y. R x y ==> Q x y; RTC R x y |] ==> RTC Q x y"
+  sorry
+
+definition
+  WF :: "('a => 'a => bool) => bool"  where
+  "WF == %R. ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b))"
+
+lemma WF_DEF: "WF R = (ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b)))"
+  sorry
+
+lemma WF_INDUCTION_THM: "[| WF R; !!x. (!!y. R y x ==> P y) ==> P x |] ==> P x"
+  sorry
+
+lemma WF_NOT_REFL: "[| WF x; x xa xb |] ==> xa ~= xb"
+  sorry
+
+definition
+  EMPTY_REL :: "'a => 'a => bool"  where
+  "EMPTY_REL == %x y. False"
+
+lemma EMPTY_REL_DEF: "EMPTY_REL x y = False"
+  sorry
+
+lemma WF_EMPTY_REL: "WF EMPTY_REL"
+  sorry
+
+lemma WF_SUBSET: "WF x & (ALL xb y. xa xb y --> x xb y) ==> WF xa"
+  sorry
+
+lemma WF_TC: "WF R ==> WF (TC R)"
+  sorry
+
+consts
+  inv_image :: "('b => 'b => bool) => ('a => 'b) => 'a => 'a => bool" 
+
+defs
+  inv_image_primdef: "relation.inv_image ==
+%(R::'b => 'b => bool) (f::'a => 'b) (x::'a) y::'a. R (f x) (f y)"
+
+lemma inv_image_def: "relation.inv_image R f = (%x y. R (f x) (f y))"
+  sorry
+
+lemma WF_inv_image: "WF (R::'b => 'b => bool) ==> WF (relation.inv_image R (f::'a => 'b))"
+  sorry
+
+definition
+  RESTRICT :: "('a => 'b) => ('a => 'a => bool) => 'a => 'a => 'b"  where
+  "RESTRICT == %f R x y. if R y x then f y else ARB"
+
+lemma RESTRICT_DEF: "RESTRICT f R x = (%y. if R y x then f y else ARB)"
+  sorry
+
+lemma RESTRICT_LEMMA: "xa xb xc ==> RESTRICT x xa xc xb = x xb"
+  sorry
+
+consts
+  approx :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => ('a => 'b) => bool" 
+
+defs
+  approx_primdef: "approx == %R M x f. f = RESTRICT (%y. M (RESTRICT f R y) y) R x"
+
+lemma approx_def: "approx R M x f = (f = RESTRICT (%y. M (RESTRICT f R y) y) R x)"
+  sorry
+
+consts
+  the_fun :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'a => 'b" 
+
+defs
+  the_fun_primdef: "the_fun == %R M x. Eps (approx R M x)"
+
+lemma the_fun_def: "the_fun R M x = Eps (approx R M x)"
+  sorry
+
+definition
+  WFREC :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'b"  where
+  "WFREC ==
+%R M x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x"
+
+lemma WFREC_DEF: "WFREC R M =
+(%x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x)"
+  sorry
+
+lemma WFREC_THM: "WF R ==> WFREC R M x = M (RESTRICT (WFREC R M) R x) x"
+  sorry
+
+lemma WFREC_COROLLARY: "[| f = WFREC R M; WF R |] ==> f x = M (RESTRICT f R x) x"
+  sorry
+
+lemma WF_RECURSION_THM: "WF R ==> EX! f. ALL x. f x = M (RESTRICT f R x) x"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" pair
+
+lemma CURRY_ONE_ONE_THM: "(curry f = curry g) = (f = g)"
+  sorry
+
+lemma UNCURRY_ONE_ONE_THM: "((%(x, y). f x y) = (%(x, y). g x y)) = (f = g)"
+  sorry
+
+lemma pair_Axiom: "EX x. ALL xa y. x (xa, y) = f xa y"
+  sorry
+
+lemma UNCURRY_CONG: "M = M' & (ALL x y. M' = (x, y) --> f x y = f' x y)
+==> prod_case f M = prod_case f' M'"
+  sorry
+
+lemma ELIM_PEXISTS: "(EX p. P (fst p) (snd p)) = (EX p1. Ex (P p1))"
+  sorry
+
+lemma ELIM_PFORALL: "(ALL p. P (fst p) (snd p)) = (ALL p1. All (P p1))"
+  sorry
+
+lemma PFORALL_THM: "(ALL xa. All (x xa)) = All (%(xa, y). x xa y)"
+  sorry
+
+lemma PEXISTS_THM: "(EX xa. Ex (x xa)) = Ex (%(xa, y). x xa y)"
+  sorry
+
+lemma LET2_RAND: "(x::'c => 'd)
+ (let (x::'a, y::'b) = xa::'a * 'b in (xb::'a => 'b => 'c) x y) =
+(let (xa::'a, y::'b) = xa in x (xb xa y))"
+  sorry
+
+lemma LET2_RATOR: "(let (x::'a1, y::'a2) = x::'a1 * 'a2 in (xa::'a1 => 'a2 => 'b => 'c) x y)
+ (xb::'b) =
+(let (x::'a1, y::'a2) = x in xa x y xb)"
+  sorry
+
+lemma pair_case_cong: "x = xa & (ALL x y. xa = (x, y) --> xb x y = f' x y)
+==> prod_case xb x = prod_case f' xa"
+  sorry
+
+definition
+  LEX :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool"  where
+  "LEX == %R1 R2 (s, t) (u, v). R1 s u | s = u & R2 t v"
+
+lemma LEX_DEF: "LEX R1 R2 = (%(s, t) (u, v). R1 s u | s = u & R2 t v)"
+  sorry
+
+lemma WF_LEX: "WF x & WF xa ==> WF (LEX x xa)"
+  sorry
+
+definition
+  RPROD :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool"  where
+  "RPROD == %R1 R2 (s, t) (u, v). R1 s u & R2 t v"
+
+lemma RPROD_DEF: "RPROD R1 R2 = (%(s, t) (u, v). R1 s u & R2 t v)"
+  sorry
+
+lemma WF_RPROD: "WF R & WF Q ==> WF (RPROD R Q)"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" num
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prim_rec
+
+lemma LESS_0_0: "0 < Suc 0"
+  sorry
+
+lemma LESS_LEMMA1: "x < Suc xa ==> x = xa | x < xa"
+  sorry
+
+lemma LESS_LEMMA2: "m = n | m < n ==> m < Suc n"
+  sorry
+
+lemma LESS_THM: "(m < Suc n) = (m = n | m < n)"
+  sorry
+
+lemma LESS_SUC_IMP: "[| x < Suc xa; x ~= xa |] ==> x < xa"
+  sorry
+
+lemma EQ_LESS: "Suc m = n ==> m < n"
+  sorry
+
+lemma NOT_LESS_EQ: "(m::nat) = (n::nat) ==> ~ m < n"
+  sorry
+
+definition
+  SIMP_REC_REL :: "(nat => 'a) => 'a => ('a => 'a) => nat => bool"  where
+  "SIMP_REC_REL == %fun x f n. fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m))"
+
+lemma SIMP_REC_REL: "SIMP_REC_REL fun x f n = (fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m)))"
+  sorry
+
+lemma SIMP_REC_EXISTS: "EX fun. SIMP_REC_REL fun x f n"
+  sorry
+
+lemma SIMP_REC_REL_UNIQUE: "[| SIMP_REC_REL xb x xa xd & SIMP_REC_REL xc x xa xe; n < xd & n < xe |]
+==> xb n = xc n"
+  sorry
+
+lemma SIMP_REC_REL_UNIQUE_RESULT: "EX! y. EX g. SIMP_REC_REL g x f (Suc n) & y = g n"
+  sorry
+
+consts
+  SIMP_REC :: "'a => ('a => 'a) => nat => 'a" 
+
+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"
+  sorry
+
+lemma LESS_SUC_SUC: "m < Suc m & m < Suc (Suc m)"
+  sorry
+
+lemma SIMP_REC_THM: "SIMP_REC x f 0 = x & (ALL m. SIMP_REC x f (Suc m) = f (SIMP_REC x f m))"
+  sorry
+
+definition
+  PRE :: "nat => nat"  where
+  "PRE == %m. if m = 0 then 0 else SOME n. m = Suc n"
+
+lemma PRE_DEF: "PRE m = (if m = 0 then 0 else SOME n. m = Suc n)"
+  sorry
+
+lemma PRE: "PRE 0 = 0 & (ALL m. PRE (Suc m) = m)"
+  sorry
+
+definition
+  PRIM_REC_FUN :: "'a => ('a => nat => 'a) => nat => nat => 'a"  where
+  "PRIM_REC_FUN == %x f. SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
+
+lemma PRIM_REC_FUN: "PRIM_REC_FUN x f = SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
+  sorry
+
+lemma PRIM_REC_EQN: "(ALL n. PRIM_REC_FUN x f 0 n = x) &
+(ALL m n. PRIM_REC_FUN x f (Suc m) n = f (PRIM_REC_FUN x f m (PRE n)) n)"
+  sorry
+
+definition
+  PRIM_REC :: "'a => ('a => nat => 'a) => nat => 'a"  where
+  "PRIM_REC == %x f m. PRIM_REC_FUN x f m (PRE m)"
+
+lemma PRIM_REC: "PRIM_REC x f m = PRIM_REC_FUN x f m (PRE m)"
+  sorry
+
+lemma PRIM_REC_THM: "PRIM_REC x f 0 = x & (ALL m. PRIM_REC x f (Suc m) = f (PRIM_REC x f m) m)"
+  sorry
+
+lemma DC: "P a & (ALL x. P x --> (EX y. P y & R x y))
+==> EX x. x 0 = a & (ALL n. P (x n) & R (x n) (x (Suc n)))"
+  sorry
+
+lemma num_Axiom_old: "EX! fn1. fn1 0 = e & (ALL n. fn1 (Suc n) = f (fn1 n) n)"
+  sorry
+
+lemma num_Axiom: "EX x. x 0 = e & (ALL n. x (Suc n) = f n (x n))"
+  sorry
+
+consts
+  wellfounded :: "('a => 'a => bool) => bool" 
+
+defs
+  wellfounded_primdef: "wellfounded == %R. ~ (EX f. ALL n. R (f (Suc n)) (f n))"
+
+lemma wellfounded_def: "wellfounded R = (~ (EX f. ALL n. R (f (Suc n)) (f n)))"
+  sorry
+
+lemma WF_IFF_WELLFOUNDED: "WF R = wellfounded R"
+  sorry
+
+lemma WF_PRED: "WF (%x y. y = Suc x)"
+  sorry
+
+lemma WF_LESS: "(WF::(nat => nat => bool) => bool) (op <::nat => nat => bool)"
+  sorry
+
+consts
+  measure :: "('a => nat) => 'a => 'a => bool" 
+
+defs
+  measure_primdef: "prim_rec.measure == relation.inv_image op <"
+
+lemma measure_def: "prim_rec.measure = relation.inv_image op <"
+  sorry
+
+lemma WF_measure: "WF (prim_rec.measure x)"
+  sorry
+
+lemma measure_thm: "prim_rec.measure x xa xb = (x xa < x xb)"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" arithmetic
+
+definition
+  nat_elim__magic :: "nat => nat"  where
+  "nat_elim__magic == %n. n"
+
+lemma nat_elim__magic: "nat_elim__magic n = n"
+  sorry
+
+consts
+  EVEN :: "nat => bool" 
+
+specification (EVEN) EVEN: "EVEN 0 = True & (ALL n. EVEN (Suc n) = (~ EVEN n))"
+  sorry
+
+consts
+  ODD :: "nat => bool" 
+
+specification (ODD) ODD: "ODD 0 = False & (ALL n. ODD (Suc n) = (~ ODD n))"
+  sorry
+
+lemma TWO: "2 = Suc 1"
+  sorry
+
+lemma NORM_0: "(0::nat) = (0::nat)"
+  sorry
+
+lemma num_case_compute: "nat_case f g n = (if n = 0 then f else g (PRE n))"
+  sorry
+
+lemma ADD_CLAUSES: "0 + m = m & m + 0 = m & Suc m + n = Suc (m + n) & m + Suc n = Suc (m + n)"
+  sorry
+
+lemma LESS_ADD: "(n::nat) < (m::nat) ==> EX p::nat. p + n = m"
+  sorry
+
+lemma LESS_ANTISYM: "~ ((m::nat) < (n::nat) & n < m)"
+  sorry
+
+lemma LESS_LESS_SUC: "~ (x < xa & xa < Suc x)"
+  sorry
+
+lemma FUN_EQ_LEMMA: "f x1 & ~ f x2 ==> x1 ~= x2"
+  sorry
+
+lemma LESS_NOT_SUC: "m < n & n ~= Suc m ==> Suc m < n"
+  sorry
+
+lemma LESS_0_CASES: "(0::nat) = (m::nat) | (0::nat) < m"
+  sorry
+
+lemma LESS_CASES_IMP: "~ (m::nat) < (n::nat) & m ~= n ==> n < m"
+  sorry
+
+lemma LESS_CASES: "(m::nat) < (n::nat) | n <= m"
+  sorry
+
+lemma LESS_EQ_SUC_REFL: "m <= Suc m"
+  sorry
+
+lemma LESS_ADD_NONZERO: "(n::nat) ~= (0::nat) ==> (m::nat) < m + n"
+  sorry
+
+lemma LESS_EQ_ANTISYM: "~ ((x::nat) < (xa::nat) & xa <= x)"
+  sorry
+
+lemma SUB_0: "(0::nat) - (m::nat) = (0::nat) & m - (0::nat) = m"
+  sorry
+
+lemma PRE_SUB1: "PRE m = m - 1"
+  sorry
+
+lemma MULT_CLAUSES: "0 * x = 0 &
+x * 0 = 0 &
+1 * x = x & x * 1 = x & Suc x * xa = x * xa + xa & x * Suc xa = x + x * xa"
+  sorry
+
+lemma PRE_SUB: "PRE (m - n) = PRE m - n"
+  sorry
+
+lemma ADD_EQ_1: "((m::nat) + (n::nat) = (1::nat)) =
+(m = (1::nat) & n = (0::nat) | m = (0::nat) & n = (1::nat))"
+  sorry
+
+lemma ADD_INV_0_EQ: "((m::nat) + (n::nat) = m) = (n = (0::nat))"
+  sorry
+
+lemma PRE_SUC_EQ: "0 < n ==> (m = PRE n) = (Suc m = n)"
+  sorry
+
+lemma INV_PRE_EQ: "0 < m & 0 < n ==> (PRE m = PRE n) = (m = n)"
+  sorry
+
+lemma LESS_SUC_NOT: "m < n ==> ~ n < Suc m"
+  sorry
+
+lemma ADD_EQ_SUB: "(n::nat) <= (p::nat) ==> ((m::nat) + n = p) = (m = p - n)"
+  sorry
+
+lemma LESS_ADD_1: "(xa::nat) < (x::nat) ==> EX xb::nat. x = xa + (xb + (1::nat))"
+  sorry
+
+lemma NOT_ODD_EQ_EVEN: "Suc (n + n) ~= m + m"
+  sorry
+
+lemma MULT_SUC_EQ: "(n * Suc p = m * Suc p) = (n = m)"
+  sorry
+
+lemma MULT_EXP_MONO: "(n * Suc q ^ p = m * Suc q ^ p) = (n = m)"
+  sorry
+
+lemma LESS_ADD_SUC: "m < m + Suc n"
+  sorry
+
+lemma LESS_OR_EQ_ADD: "(n::nat) < (m::nat) | (EX p::nat. n = p + m)"
+  sorry
+
+lemma WOP: "Ex (P::nat => bool) ==> EX n::nat. P n & (ALL m<n. ~ P m)"
+  sorry
+
+lemma INV_PRE_LESS: "0 < m ==> (PRE m < PRE n) = (m < n)"
+  sorry
+
+lemma INV_PRE_LESS_EQ: "0 < n ==> (PRE m <= PRE n) = (m <= n)"
+  sorry
+
+lemma SUB_EQ_EQ_0: "((m::nat) - (n::nat) = m) = (m = (0::nat) | n = (0::nat))"
+  sorry
+
+lemma SUB_LESS_OR: "(n::nat) < (m::nat) ==> n <= m - (1::nat)"
+  sorry
+
+lemma LESS_SUB_ADD_LESS: "(i::nat) < (n::nat) - (m::nat) ==> i + m < n"
+  sorry
+
+lemma LESS_EQ_SUB_LESS: "(xa::nat) <= (x::nat) ==> (x - xa < (c::nat)) = (x < xa + c)"
+  sorry
+
+lemma NOT_SUC_LESS_EQ: "(~ Suc x <= xa) = (xa <= x)"
+  sorry
+
+lemma SUB_LESS_EQ_ADD: "(m::nat) <= (p::nat) ==> (p - m <= (n::nat)) = (p <= m + n)"
+  sorry
+
+lemma SUB_CANCEL: "(xa::nat) <= (x::nat) & (xb::nat) <= x ==> (x - xa = x - xb) = (xa = xb)"
+  sorry
+
+lemma NOT_EXP_0: "Suc n ^ m ~= 0"
+  sorry
+
+lemma ZERO_LESS_EXP: "0 < Suc n ^ m"
+  sorry
+
+lemma ODD_OR_EVEN: "EX xa. x = Suc (Suc 0) * xa | x = Suc (Suc 0) * xa + 1"
+  sorry
+
+lemma LESS_EXP_SUC_MONO: "Suc (Suc m) ^ n < Suc (Suc m) ^ Suc n"
+  sorry
+
+lemma LESS_LESS_CASES: "(m::nat) = (n::nat) | m < n | n < m"
+  sorry
+
+consts
+  FACT :: "nat => nat" 
+
+specification (FACT) FACT: "FACT 0 = 1 & (ALL n. FACT (Suc n) = Suc n * FACT n)"
+  sorry
+
+lemma FACT_LESS: "0 < FACT n"
+  sorry
+
+lemma EVEN_ODD: "EVEN n = (~ ODD n)"
+  sorry
+
+lemma ODD_EVEN: "ODD x = (~ EVEN x)"
+  sorry
+
+lemma EVEN_OR_ODD: "EVEN x | ODD x"
+  sorry
+
+lemma EVEN_AND_ODD: "~ (EVEN x & ODD x)"
+  sorry
+
+lemma EVEN_ADD: "EVEN (m + n) = (EVEN m = EVEN n)"
+  sorry
+
+lemma EVEN_MULT: "EVEN (m * n) = (EVEN m | EVEN n)"
+  sorry
+
+lemma ODD_ADD: "ODD (m + n) = (ODD m ~= ODD n)"
+  sorry
+
+lemma ODD_MULT: "ODD (m * n) = (ODD m & ODD n)"
+  sorry
+
+lemma EVEN_DOUBLE: "EVEN (2 * n)"
+  sorry
+
+lemma ODD_DOUBLE: "ODD (Suc (2 * x))"
+  sorry
+
+lemma EVEN_ODD_EXISTS: "(EVEN x --> (EX m. x = 2 * m)) & (ODD x --> (EX m. x = Suc (2 * m)))"
+  sorry
+
+lemma EVEN_EXISTS: "EVEN n = (EX m. n = 2 * m)"
+  sorry
+
+lemma ODD_EXISTS: "ODD n = (EX m. n = Suc (2 * m))"
+  sorry
+
+lemma NOT_SUC_LESS_EQ_0: "~ Suc x <= 0"
+  sorry
+
+lemma NOT_NUM_EQ: "(x ~= xa) = (Suc x <= xa | Suc xa <= x)"
+  sorry
+
+lemma SUC_ADD_SYM: "Suc (m + n) = Suc n + m"
+  sorry
+
+lemma NOT_SUC_ADD_LESS_EQ: "~ Suc (m + n) <= m"
+  sorry
+
+lemma SUB_LEFT_ADD: "(m::nat) + ((n::nat) - (p::nat)) = (if n <= p then m else m + n - p)"
+  sorry
+
+lemma SUB_RIGHT_ADD: "(m::nat) - (n::nat) + (p::nat) = (if m <= n then p else m + p - n)"
+  sorry
+
+lemma SUB_LEFT_SUB: "(m::nat) - ((n::nat) - (p::nat)) = (if n <= p then m else m + p - n)"
+  sorry
+
+lemma SUB_LEFT_SUC: "Suc (m - n) = (if m <= n then Suc 0 else Suc m - n)"
+  sorry
+
+lemma SUB_LEFT_LESS_EQ: "((m::nat) <= (n::nat) - (p::nat)) = (m + p <= n | m <= (0::nat))"
+  sorry
+
+lemma SUB_RIGHT_LESS_EQ: "((m::nat) - (n::nat) <= (p::nat)) = (m <= n + p)"
+  sorry
+
+lemma SUB_RIGHT_LESS: "((m::nat) - (n::nat) < (p::nat)) = (m < n + p & (0::nat) < p)"
+  sorry
+
+lemma SUB_RIGHT_GREATER_EQ: "((p::nat) <= (m::nat) - (n::nat)) = (n + p <= m | p <= (0::nat))"
+  sorry
+
+lemma SUB_LEFT_GREATER: "((n::nat) - (p::nat) < (m::nat)) = (n < m + p & (0::nat) < m)"
+  sorry
+
+lemma SUB_RIGHT_GREATER: "((p::nat) < (m::nat) - (n::nat)) = (n + p < m)"
+  sorry
+
+lemma SUB_LEFT_EQ: "((m::nat) = (n::nat) - (p::nat)) = (m + p = n | m <= (0::nat) & n <= p)"
+  sorry
+
+lemma SUB_RIGHT_EQ: "((m::nat) - (n::nat) = (p::nat)) = (m = n + p | m <= n & p <= (0::nat))"
+  sorry
+
+lemma LE: "(ALL n::nat. (n <= (0::nat)) = (n = (0::nat))) &
+(ALL (m::nat) n::nat. (m <= Suc n) = (m = Suc n | m <= n))"
+  sorry
+
+lemma DA: "(0::nat) < (n::nat) ==> EX (x::nat) q::nat. (k::nat) = q * n + x & x < n"
+  sorry
+
+lemma DIV_LESS_EQ: "(0::nat) < (n::nat) ==> (k::nat) div n <= k"
+  sorry
+
+lemma DIV_UNIQUE: "EX r::nat. (k::nat) = (q::nat) * (n::nat) + r & r < n ==> k div n = q"
+  sorry
+
+lemma MOD_UNIQUE: "EX q::nat. (k::nat) = q * (n::nat) + (r::nat) & r < n ==> k mod n = r"
+  sorry
+
+lemma DIV_MULT: "(r::nat) < (n::nat) ==> ((q::nat) * n + r) div n = q"
+  sorry
+
+lemma MOD_EQ_0: "(0::nat) < (n::nat) ==> (k::nat) * n mod n = (0::nat)"
+  sorry
+
+lemma ZERO_MOD: "(0::nat) < (n::nat) ==> (0::nat) mod n = (0::nat)"
+  sorry
+
+lemma ZERO_DIV: "(0::nat) < (n::nat) ==> (0::nat) div n = (0::nat)"
+  sorry
+
+lemma MOD_MULT: "(r::nat) < (n::nat) ==> ((q::nat) * n + r) mod n = r"
+  sorry
+
+lemma MOD_TIMES: "(0::nat) < (n::nat) ==> ((q::nat) * n + (r::nat)) mod n = r mod n"
+  sorry
+
+lemma MOD_PLUS: "(0::nat) < (n::nat)
+==> ((j::nat) mod n + (k::nat) mod n) mod n = (j + k) mod n"
+  sorry
+
+lemma MOD_MOD: "(0::nat) < (n::nat) ==> (k::nat) mod n mod n = k mod n"
+  sorry
+
+lemma ADD_DIV_ADD_DIV: "(0::nat) < (x::nat) ==> ((xa::nat) * x + (r::nat)) div x = xa + r div x"
+  sorry
+
+lemma MOD_MULT_MOD: "(0::nat) < (n::nat) & (0::nat) < (m::nat)
+==> (x::nat) mod (n * m) mod n = x mod n"
+  sorry
+
+lemma DIVMOD_ID: "(0::nat) < (n::nat) ==> n div n = (1::nat) & n mod n = (0::nat)"
+  sorry
+
+lemma DIV_DIV_DIV_MULT: "(0::nat) < (x::nat) & (0::nat) < (xa::nat)
+==> (xb::nat) div x div xa = xb div (x * xa)"
+  sorry
+
+lemma DIV_P: "(0::nat) < (q::nat)
+==> (P::nat => bool) ((p::nat) div q) =
+    (EX (k::nat) r::nat. p = k * q + r & r < q & P k)"
+  sorry
+
+lemma MOD_P: "(0::nat) < (q::nat)
+==> (P::nat => bool) ((p::nat) mod q) =
+    (EX (k::nat) r::nat. p = k * q + r & r < q & P r)"
+  sorry
+
+lemma MOD_TIMES2: "(0::nat) < (n::nat)
+==> (j::nat) mod n * ((k::nat) mod n) mod n = j * k mod n"
+  sorry
+
+lemma MOD_COMMON_FACTOR: "(0::nat) < (n::nat) & (0::nat) < (q::nat)
+==> n * ((p::nat) mod q) = n * p mod (n * q)"
+  sorry
+
+lemma num_case_cong: "M = M' & (M' = 0 --> b = b') & (ALL n. M' = Suc n --> f n = f' n)
+==> nat_case b f M = nat_case b' f' M'"
+  sorry
+
+lemma SUC_ELIM_THM: "(ALL n. P (Suc n) n) = (ALL n>0. P n (n - 1))"
+  sorry
+
+lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) =
+(ALL x::nat. (b = a + x --> P (0::nat)) & (a = b + x --> P x))"
+  sorry
+
+lemma PRE_ELIM_THM: "P (PRE n) = (ALL m. (n = 0 --> P 0) & (n = Suc m --> P m))"
+  sorry
+
+lemma MULT_INCREASES: "1 < m & 0 < n ==> Suc n <= m * n"
+  sorry
+
+lemma EXP_ALWAYS_BIG_ENOUGH: "(1::nat) < (b::nat) ==> EX m::nat. (n::nat) <= b ^ m"
+  sorry
+
+lemma EXP_EQ_0: "((n::nat) ^ (m::nat) = (0::nat)) = (n = (0::nat) & (0::nat) < m)"
+  sorry
+
+lemma EXP_1: "(1::nat) ^ (x::nat) = (1::nat) & x ^ (1::nat) = x"
+  sorry
+
+lemma MIN_MAX_EQ: "(min (x::nat) (xa::nat) = max x xa) = (x = xa)"
+  sorry
+
+lemma MIN_MAX_LT: "(min (x::nat) (xa::nat) < max x xa) = (x ~= xa)"
+  sorry
+
+lemma MIN_MAX_PRED: "(P::nat => bool) (m::nat) & P (n::nat) ==> P (min m n) & P (max m n)"
+  sorry
+
+lemma MIN_LT: "(min (xa::nat) (x::nat) < xa) = (xa ~= x & min xa x = x) &
+(min xa x < x) = (xa ~= x & min xa x = xa) &
+(xa < min xa x) = False & (x < min xa x) = False"
+  sorry
+
+lemma MAX_LT: "((xa::nat) < max xa (x::nat)) = (xa ~= x & max xa x = x) &
+(x < max xa x) = (xa ~= x & max xa x = xa) &
+(max xa x < xa) = False & (max xa x < x) = False"
+  sorry
+
+lemma MIN_LE: "min (xa::nat) (x::nat) <= xa & min xa x <= x"
+  sorry
+
+lemma MAX_LE: "(xa::nat) <= max xa (x::nat) & x <= max xa x"
+  sorry
+
+lemma MIN_0: "min (x::nat) (0::nat) = (0::nat) & min (0::nat) x = (0::nat)"
+  sorry
+
+lemma MAX_0: "max (x::nat) (0::nat) = x & max (0::nat) x = x"
+  sorry
+
+lemma EXISTS_GREATEST: "(Ex (P::nat => bool) & (EX x::nat. ALL y>x. ~ P y)) =
+(EX x::nat. P x & (ALL y>x. ~ P y))"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" hrat
+
+definition
+  trat_1 :: "nat * nat"  where
+  "trat_1 == (0, 0)"
+
+lemma trat_1: "trat_1 = (0, 0)"
+  sorry
+
+definition
+  trat_inv :: "nat * nat => nat * nat"  where
+  "trat_inv == %(x, y). (y, x)"
+
+lemma trat_inv: "trat_inv (x, y) = (y, x)"
+  sorry
+
+definition
+  trat_add :: "nat * nat => nat * nat => nat * nat"  where
+  "trat_add ==
+%(x, y) (x', y').
+   (PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
+
+lemma trat_add: "trat_add (x, y) (x', y') =
+(PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
+  sorry
+
+definition
+  trat_mul :: "nat * nat => nat * nat => nat * nat"  where
+  "trat_mul == %(x, y) (x', y'). (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
+
+lemma trat_mul: "trat_mul (x, y) (x', y') = (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
+  sorry
+
+consts
+  trat_sucint :: "nat => nat * nat" 
+
+specification (trat_sucint) trat_sucint: "trat_sucint 0 = trat_1 &
+(ALL n. trat_sucint (Suc n) = trat_add (trat_sucint n) trat_1)"
+  sorry
+
+definition
+  trat_eq :: "nat * nat => nat * nat => bool"  where
+  "trat_eq == %(x, y) (x', y'). Suc x * Suc y' = Suc x' * Suc y"
+
+lemma trat_eq: "trat_eq (x, y) (x', y') = (Suc x * Suc y' = Suc x' * Suc y)"
+  sorry
+
+lemma TRAT_EQ_REFL: "trat_eq p p"
+  sorry
+
+lemma TRAT_EQ_SYM: "trat_eq p q = trat_eq q p"
+  sorry
+
+lemma TRAT_EQ_TRANS: "trat_eq p q & trat_eq q r ==> trat_eq p r"
+  sorry
+
+lemma TRAT_EQ_AP: "p = q ==> trat_eq p q"
+  sorry
+
+lemma TRAT_ADD_SYM_EQ: "trat_add h i = trat_add i h"
+  sorry
+
+lemma TRAT_MUL_SYM_EQ: "trat_mul h i = trat_mul i h"
+  sorry
+
+lemma TRAT_INV_WELLDEFINED: "trat_eq p q ==> trat_eq (trat_inv p) (trat_inv q)"
+  sorry
+
+lemma TRAT_ADD_WELLDEFINED: "trat_eq p q ==> trat_eq (trat_add p r) (trat_add q r)"
+  sorry
+
+lemma TRAT_ADD_WELLDEFINED2: "trat_eq p1 p2 & trat_eq q1 q2 ==> trat_eq (trat_add p1 q1) (trat_add p2 q2)"
+  sorry
+
+lemma TRAT_MUL_WELLDEFINED: "trat_eq p q ==> trat_eq (trat_mul p r) (trat_mul q r)"
+  sorry
+
+lemma TRAT_MUL_WELLDEFINED2: "trat_eq p1 p2 & trat_eq q1 q2 ==> trat_eq (trat_mul p1 q1) (trat_mul p2 q2)"
+  sorry
+
+lemma TRAT_ADD_SYM: "trat_eq (trat_add h i) (trat_add i h)"
+  sorry
+
+lemma TRAT_ADD_ASSOC: "trat_eq (trat_add h (trat_add i j)) (trat_add (trat_add h i) j)"
+  sorry
+
+lemma TRAT_MUL_SYM: "trat_eq (trat_mul h i) (trat_mul i h)"
+  sorry
+
+lemma TRAT_MUL_ASSOC: "trat_eq (trat_mul h (trat_mul i j)) (trat_mul (trat_mul h i) j)"
+  sorry
+
+lemma TRAT_LDISTRIB: "trat_eq (trat_mul h (trat_add i j)) (trat_add (trat_mul h i) (trat_mul h j))"
+  sorry
+
+lemma TRAT_MUL_LID: "trat_eq (trat_mul trat_1 h) h"
+  sorry
+
+lemma TRAT_MUL_LINV: "trat_eq (trat_mul (trat_inv h) h) trat_1"
+  sorry
+
+lemma TRAT_NOZERO: "~ trat_eq (trat_add h i) h"
+  sorry
+
+lemma TRAT_ADD_TOTAL: "trat_eq h i |
+(EX d. trat_eq h (trat_add i d)) | (EX d. trat_eq i (trat_add h d))"
+  sorry
+
+lemma TRAT_SUCINT_0: "trat_eq (trat_sucint n) (n, 0)"
+  sorry
+
+lemma TRAT_ARCH: "EX n d. trat_eq (trat_sucint n) (trat_add h d)"
+  sorry
+
+lemma TRAT_SUCINT: "trat_eq (trat_sucint 0) trat_1 &
+(ALL n. trat_eq (trat_sucint (Suc n)) (trat_add (trat_sucint n) trat_1))"
+  sorry
+
+lemma TRAT_EQ_EQUIV: "trat_eq p q = (trat_eq p = trat_eq q)"
+  sorry
+
+typedef (open) hrat = "{x. EX xa. x = trat_eq xa}" 
+  sorry
+
+lemmas hrat_TY_DEF = typedef_hol2hol4 [OF type_definition_hrat]
+
+consts
+  mk_hrat :: "(nat * nat => bool) => hrat" 
+  dest_hrat :: "hrat => nat * nat => bool" 
+
+specification (dest_hrat mk_hrat) hrat_tybij: "(ALL a. mk_hrat (dest_hrat a) = a) &
+(ALL r. (EX x. r = trat_eq x) = (dest_hrat (mk_hrat r) = r))"
+  sorry
+
+definition
+  hrat_1 :: "hrat"  where
+  "hrat_1 == mk_hrat (trat_eq trat_1)"
+
+lemma hrat_1: "hrat_1 = mk_hrat (trat_eq trat_1)"
+  sorry
+
+definition
+  hrat_inv :: "hrat => hrat"  where
+  "hrat_inv == %T1. mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
+
+lemma hrat_inv: "hrat_inv T1 = mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
+  sorry
+
+definition
+  hrat_add :: "hrat => hrat => hrat"  where
+  "hrat_add ==
+%T1 T2.
+   mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
+
+lemma hrat_add: "hrat_add T1 T2 =
+mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
+  sorry
+
+definition
+  hrat_mul :: "hrat => hrat => hrat"  where
+  "hrat_mul ==
+%T1 T2.
+   mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
+
+lemma hrat_mul: "hrat_mul T1 T2 =
+mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
+  sorry
+
+definition
+  hrat_sucint :: "nat => hrat"  where
+  "hrat_sucint == %T1. mk_hrat (trat_eq (trat_sucint T1))"
+
+lemma hrat_sucint: "hrat_sucint T1 = mk_hrat (trat_eq (trat_sucint T1))"
+  sorry
+
+lemma HRAT_ADD_SYM: "hrat_add h i = hrat_add i h"
+  sorry
+
+lemma HRAT_ADD_ASSOC: "hrat_add h (hrat_add i j) = hrat_add (hrat_add h i) j"
+  sorry
+
+lemma HRAT_MUL_SYM: "hrat_mul h i = hrat_mul i h"
+  sorry
+
+lemma HRAT_MUL_ASSOC: "hrat_mul h (hrat_mul i j) = hrat_mul (hrat_mul h i) j"
+  sorry
+
+lemma HRAT_LDISTRIB: "hrat_mul h (hrat_add i j) = hrat_add (hrat_mul h i) (hrat_mul h j)"
+  sorry
+
+lemma HRAT_MUL_LID: "hrat_mul hrat_1 h = h"
+  sorry
+
+lemma HRAT_MUL_LINV: "hrat_mul (hrat_inv h) h = hrat_1"
+  sorry
+
+lemma HRAT_NOZERO: "hrat_add h i ~= h"
+  sorry
+
+lemma HRAT_ADD_TOTAL: "h = i | (EX x. h = hrat_add i x) | (EX x. i = hrat_add h x)"
+  sorry
+
+lemma HRAT_ARCH: "EX x xa. hrat_sucint x = hrat_add h xa"
+  sorry
+
+lemma HRAT_SUCINT: "hrat_sucint 0 = hrat_1 &
+(ALL x. hrat_sucint (Suc x) = hrat_add (hrat_sucint x) hrat_1)"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" hreal
+
+definition
+  hrat_lt :: "hrat => hrat => bool"  where
+  "hrat_lt == %x y. EX d. y = hrat_add x d"
+
+lemma hrat_lt: "hrat_lt x y = (EX d. y = hrat_add x d)"
+  sorry
+
+lemma HRAT_LT_REFL: "~ hrat_lt x x"
+  sorry
+
+lemma HRAT_LT_TRANS: "hrat_lt x y & hrat_lt y z ==> hrat_lt x z"
+  sorry
+
+lemma HRAT_LT_ANTISYM: "~ (hrat_lt x y & hrat_lt y x)"
+  sorry
+
+lemma HRAT_LT_TOTAL: "x = y | hrat_lt x y | hrat_lt y x"
+  sorry
+
+lemma HRAT_MUL_RID: "hrat_mul x hrat_1 = x"
+  sorry
+
+lemma HRAT_MUL_RINV: "hrat_mul x (hrat_inv x) = hrat_1"
+  sorry
+
+lemma HRAT_RDISTRIB: "hrat_mul (hrat_add x y) z = hrat_add (hrat_mul x z) (hrat_mul y z)"
+  sorry
+
+lemma HRAT_LT_ADDL: "hrat_lt x (hrat_add x y)"
+  sorry
+
+lemma HRAT_LT_ADDR: "hrat_lt xa (hrat_add x xa)"
+  sorry
+
+lemma HRAT_LT_GT: "hrat_lt x y ==> ~ hrat_lt y x"
+  sorry
+
+lemma HRAT_LT_NE: "hrat_lt x y ==> x ~= y"
+  sorry
+
+lemma HRAT_EQ_LADD: "(hrat_add x y = hrat_add x z) = (y = z)"
+  sorry
+
+lemma HRAT_EQ_LMUL: "(hrat_mul x y = hrat_mul x z) = (y = z)"
+  sorry
+
+lemma HRAT_LT_ADD2: "hrat_lt u x & hrat_lt v y ==> hrat_lt (hrat_add u v) (hrat_add x y)"
+  sorry
+
+lemma HRAT_LT_LADD: "hrat_lt (hrat_add z x) (hrat_add z y) = hrat_lt x y"
+  sorry
+
+lemma HRAT_LT_RADD: "hrat_lt (hrat_add x z) (hrat_add y z) = hrat_lt x y"
+  sorry
+
+lemma HRAT_LT_MUL2: "hrat_lt u x & hrat_lt v y ==> hrat_lt (hrat_mul u v) (hrat_mul x y)"
+  sorry
+
+lemma HRAT_LT_LMUL: "hrat_lt (hrat_mul z x) (hrat_mul z y) = hrat_lt x y"
+  sorry
+
+lemma HRAT_LT_RMUL: "hrat_lt (hrat_mul x z) (hrat_mul y z) = hrat_lt x y"
+  sorry
+
+lemma HRAT_LT_LMUL1: "hrat_lt (hrat_mul x y) y = hrat_lt x hrat_1"
+  sorry
+
+lemma HRAT_LT_RMUL1: "hrat_lt (hrat_mul x y) x = hrat_lt y hrat_1"
+  sorry
+
+lemma HRAT_GT_LMUL1: "hrat_lt y (hrat_mul x y) = hrat_lt hrat_1 x"
+  sorry
+
+lemma HRAT_LT_L1: "hrat_lt (hrat_mul (hrat_inv x) y) hrat_1 = hrat_lt y x"
+  sorry
+
+lemma HRAT_LT_R1: "hrat_lt (hrat_mul x (hrat_inv y)) hrat_1 = hrat_lt x y"
+  sorry
+
+lemma HRAT_GT_L1: "hrat_lt hrat_1 (hrat_mul (hrat_inv x) y) = hrat_lt x y"
+  sorry
+
+lemma HRAT_INV_MUL: "hrat_inv (hrat_mul x y) = hrat_mul (hrat_inv x) (hrat_inv y)"
+  sorry
+
+lemma HRAT_UP: "Ex (hrat_lt x)"
+  sorry
+
+lemma HRAT_DOWN: "EX xa. hrat_lt xa x"
+  sorry
+
+lemma HRAT_DOWN2: "EX xa. hrat_lt xa x & hrat_lt xa y"
+  sorry
+
+lemma HRAT_MEAN: "hrat_lt x y ==> EX xa. hrat_lt x xa & hrat_lt xa y"
+  sorry
+
+definition
+  isacut :: "(hrat => bool) => bool"  where
+  "isacut ==
+%C. Ex C &
+    (EX x. ~ C x) &
+    (ALL x y. C x & hrat_lt y x --> C y) &
+    (ALL x. C x --> (EX y. C y & hrat_lt x y))"
+
+lemma isacut: "isacut (CC::hrat => bool) =
+(Ex CC &
+ (EX x::hrat. ~ CC x) &
+ (ALL (x::hrat) y::hrat. CC x & hrat_lt y x --> CC y) &
+ (ALL x::hrat. CC x --> (EX y::hrat. CC y & hrat_lt x y)))"
+  sorry
+
+definition
+  cut_of_hrat :: "hrat => hrat => bool"  where
+  "cut_of_hrat == %x y. hrat_lt y x"
+
+lemma cut_of_hrat: "cut_of_hrat x = (%y. hrat_lt y x)"
+  sorry
+
+lemma ISACUT_HRAT: "isacut (cut_of_hrat h)"
+  sorry
+
+typedef (open) hreal = "Collect isacut" 
+  sorry
+
+lemmas hreal_TY_DEF = typedef_hol2hol4 [OF type_definition_hreal]
+
+consts
+  hreal :: "(hrat => bool) => hreal" 
+  cut :: "hreal => hrat => bool" 
+
+specification (cut hreal) hreal_tybij: "(ALL a. hreal (cut a) = a) & (ALL r. isacut r = (cut (hreal r) = r))"
+  sorry
+
+lemma EQUAL_CUTS: "cut X = cut Y ==> X = Y"
+  sorry
+
+lemma CUT_ISACUT: "isacut (cut x)"
+  sorry
+
+lemma CUT_NONEMPTY: "Ex (cut x)"
+  sorry
+
+lemma CUT_BOUNDED: "EX xa. ~ cut x xa"
+  sorry
+
+lemma CUT_DOWN: "cut x xa & hrat_lt xb xa ==> cut x xb"
+  sorry
+
+lemma CUT_UP: "cut x xa ==> EX y. cut x y & hrat_lt xa y"
+  sorry
+
+lemma CUT_UBOUND: "~ cut x xa & hrat_lt xa xb ==> ~ cut x xb"
+  sorry
+
+lemma CUT_STRADDLE: "cut X x & ~ cut X y ==> hrat_lt x y"
+  sorry
+
+lemma CUT_NEARTOP_ADD: "EX x. cut X x & ~ cut X (hrat_add x e)"
+  sorry
+
+lemma CUT_NEARTOP_MUL: "hrat_lt hrat_1 u ==> EX x. cut X x & ~ cut X (hrat_mul u x)"
+  sorry
+
+definition
+  hreal_1 :: "hreal"  where
+  "hreal_1 == hreal (cut_of_hrat hrat_1)"
+
+lemma hreal_1: "hreal_1 = hreal (cut_of_hrat hrat_1)"
+  sorry
+
+definition
+  hreal_add :: "hreal => hreal => hreal"  where
+  "hreal_add == %X Y. hreal (%w. EX x y. w = hrat_add x y & cut X x & cut Y y)"
+
+lemma hreal_add: "hreal_add X Y = hreal (%w. EX x y. w = hrat_add x y & cut X x & cut Y y)"
+  sorry
+
+definition
+  hreal_mul :: "hreal => hreal => hreal"  where
+  "hreal_mul == %X Y. hreal (%w. EX x y. w = hrat_mul x y & cut X x & cut Y y)"
+
+lemma hreal_mul: "hreal_mul X Y = hreal (%w. EX x y. w = hrat_mul x y & cut X x & cut Y y)"
+  sorry
+
+definition
+  hreal_inv :: "hreal => hreal"  where
+  "hreal_inv ==
+%X. hreal
+     (%w. EX d. hrat_lt d hrat_1 &
+                (ALL x. cut X x --> hrat_lt (hrat_mul w x) d))"
+
+lemma hreal_inv: "hreal_inv X =
+hreal
+ (%w. EX d. hrat_lt d hrat_1 &
+            (ALL x. cut X x --> hrat_lt (hrat_mul w x) d))"
+  sorry
+
+definition
+  hreal_sup :: "(hreal => bool) => hreal"  where
+  "hreal_sup == %P. hreal (%w. EX X. P X & cut X w)"
+
+lemma hreal_sup: "hreal_sup P = hreal (%w. EX X. P X & cut X w)"
+  sorry
+
+definition
+  hreal_lt :: "hreal => hreal => bool"  where
+  "hreal_lt == %X Y. X ~= Y & (ALL x. cut X x --> cut Y x)"
+
+lemma hreal_lt: "hreal_lt X Y = (X ~= Y & (ALL x. cut X x --> cut Y x))"
+  sorry
+
+lemma HREAL_INV_ISACUT: "isacut
+ (%w. EX d. hrat_lt d hrat_1 &
+            (ALL x. cut X x --> hrat_lt (hrat_mul w x) d))"
+  sorry
+
+lemma HREAL_ADD_ISACUT: "isacut (%w. EX x y. w = hrat_add x y & cut X x & cut Y y)"
+  sorry
+
+lemma HREAL_MUL_ISACUT: "isacut (%w. EX x y. w = hrat_mul x y & cut X x & cut Y y)"
+  sorry
+
+lemma HREAL_ADD_SYM: "hreal_add X Y = hreal_add Y X"
+  sorry
+
+lemma HREAL_MUL_SYM: "hreal_mul X Y = hreal_mul Y X"
+  sorry
+
+lemma HREAL_ADD_ASSOC: "hreal_add X (hreal_add Y Z) = hreal_add (hreal_add X Y) Z"
+  sorry
+
+lemma HREAL_MUL_ASSOC: "hreal_mul X (hreal_mul Y Z) = hreal_mul (hreal_mul X Y) Z"
+  sorry
+
+lemma HREAL_LDISTRIB: "hreal_mul X (hreal_add Y Z) = hreal_add (hreal_mul X Y) (hreal_mul X Z)"
+  sorry
+
+lemma HREAL_MUL_LID: "hreal_mul hreal_1 X = X"
+  sorry
+
+lemma HREAL_MUL_LINV: "hreal_mul (hreal_inv X) X = hreal_1"
+  sorry
+
+lemma HREAL_NOZERO: "hreal_add X Y ~= X"
+  sorry
+
+definition
+  hreal_sub :: "hreal => hreal => hreal"  where
+  "hreal_sub == %Y X. hreal (%w. EX x. ~ cut X x & cut Y (hrat_add x w))"
+
+lemma hreal_sub: "hreal_sub Y X = hreal (%w. EX x. ~ cut X x & cut Y (hrat_add x w))"
+  sorry
+
+lemma HREAL_LT_LEMMA: "hreal_lt X Y ==> EX x. ~ cut X x & cut Y x"
+  sorry
+
+lemma HREAL_SUB_ISACUT: "hreal_lt X Y ==> isacut (%w. EX x. ~ cut X x & cut Y (hrat_add x w))"
+  sorry
+
+lemma HREAL_SUB_ADD: "hreal_lt X Y ==> hreal_add (hreal_sub Y X) X = Y"
+  sorry
+
+lemma HREAL_LT_TOTAL: "X = Y | hreal_lt X Y | hreal_lt Y X"
+  sorry
+
+lemma HREAL_LT: "hreal_lt X Y = (EX D. Y = hreal_add X D)"
+  sorry
+
+lemma HREAL_ADD_TOTAL: "X = Y | (EX D. Y = hreal_add X D) | (EX D. X = hreal_add Y D)"
+  sorry
+
+lemma HREAL_SUP_ISACUT: "Ex P & (EX Y. ALL X. P X --> hreal_lt X Y)
+==> isacut (%w. EX X. P X & cut X w)"
+  sorry
+
+lemma HREAL_SUP: "Ex P & (EX Y. ALL X. P X --> hreal_lt X Y)
+==> (EX X. P X & hreal_lt Y X) = hreal_lt Y (hreal_sup P)"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" numeral
+
+lemma numeral_suc: "Suc ALT_ZERO = NUMERAL_BIT1 ALT_ZERO &
+(ALL x. Suc (NUMERAL_BIT1 x) = NUMERAL_BIT2 x) &
+(ALL x. Suc (NUMERAL_BIT2 x) = NUMERAL_BIT1 (Suc x))"
+  sorry
+
+definition
+  iZ :: "nat => nat"  where
+  "iZ == %x. x"
+
+lemma iZ: "iZ x = x"
+  sorry
+
+definition
+  iiSUC :: "nat => nat"  where
+  "iiSUC == %n. Suc (Suc n)"
+
+lemma iiSUC: "iiSUC n = Suc (Suc n)"
+  sorry
+
+lemma numeral_distrib: "(ALL x::nat. (0::nat) + x = x) &
+(ALL x::nat. x + (0::nat) = x) &
+(ALL (x::nat) xa::nat. NUMERAL x + NUMERAL xa = NUMERAL (iZ (x + xa))) &
+(ALL x::nat. (0::nat) * x = (0::nat)) &
+(ALL x::nat. x * (0::nat) = (0::nat)) &
+(ALL (x::nat) xa::nat. NUMERAL x * NUMERAL xa = NUMERAL (x * xa)) &
+(ALL x::nat. (0::nat) - x = (0::nat)) &
+(ALL x::nat. x - (0::nat) = x) &
+(ALL (x::nat) xa::nat. NUMERAL x - NUMERAL xa = NUMERAL (x - xa)) &
+(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT1 x) = (0::nat)) &
+(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT2 x) = (0::nat)) &
+(ALL x::nat. x ^ (0::nat) = (1::nat)) &
+(ALL (x::nat) xa::nat. NUMERAL x ^ NUMERAL xa = NUMERAL (x ^ xa)) &
+Suc (0::nat) = (1::nat) &
+(ALL x::nat. Suc (NUMERAL x) = NUMERAL (Suc x)) &
+PRE (0::nat) = (0::nat) &
+(ALL x::nat. PRE (NUMERAL x) = NUMERAL (PRE x)) &
+(ALL x::nat. (NUMERAL x = (0::nat)) = (x = ALT_ZERO)) &
+(ALL x::nat. ((0::nat) = NUMERAL x) = (x = ALT_ZERO)) &
+(ALL (x::nat) xa::nat. (NUMERAL x = NUMERAL xa) = (x = xa)) &
+(ALL x::nat. (x < (0::nat)) = False) &
+(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
+(ALL (x::nat) xa::nat. (NUMERAL x < NUMERAL xa) = (x < xa)) &
+(ALL x::nat. (x < (0::nat)) = False) &
+(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
+(ALL (x::nat) xa::nat. (NUMERAL xa < NUMERAL x) = (xa < x)) &
+(ALL x::nat. ((0::nat) <= x) = True) &
+(ALL x::nat. (NUMERAL x <= (0::nat)) = (x <= ALT_ZERO)) &
+(ALL (x::nat) xa::nat. (NUMERAL x <= NUMERAL xa) = (x <= xa)) &
+(ALL x::nat. ((0::nat) <= x) = True) &
+(ALL x::nat. (x <= (0::nat)) = (x = (0::nat))) &
+(ALL (x::nat) xa::nat. (NUMERAL xa <= NUMERAL x) = (xa <= x)) &
+(ALL x::nat. ODD (NUMERAL x) = ODD x) &
+(ALL x::nat. EVEN (NUMERAL x) = EVEN x) & ~ ODD (0::nat) & EVEN (0::nat)"
+  sorry
+
+lemma numeral_iisuc: "iiSUC ALT_ZERO = NUMERAL_BIT2 ALT_ZERO &
+iiSUC (NUMERAL_BIT1 n) = NUMERAL_BIT1 (Suc n) &
+iiSUC (NUMERAL_BIT2 n) = NUMERAL_BIT2 (Suc n)"
+  sorry
+
+lemma numeral_add: "iZ (ALT_ZERO + x) = x &
+iZ (x + ALT_ZERO) = x &
+iZ (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (iZ (x + xa)) &
+iZ (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
+iZ (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
+iZ (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
+Suc (ALT_ZERO + x) = Suc x &
+Suc (x + ALT_ZERO) = Suc x &
+Suc (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
+Suc (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
+Suc (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
+Suc (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
+iiSUC (ALT_ZERO + x) = iiSUC x &
+iiSUC (x + ALT_ZERO) = iiSUC x &
+iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
+iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
+iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
+iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (iiSUC (x + xa))"
+  sorry
+
+lemma numeral_eq: "(ALT_ZERO = NUMERAL_BIT1 x) = False &
+(NUMERAL_BIT1 x = ALT_ZERO) = False &
+(ALT_ZERO = NUMERAL_BIT2 x) = False &
+(NUMERAL_BIT2 x = ALT_ZERO) = False &
+(NUMERAL_BIT1 x = NUMERAL_BIT2 xa) = False &
+(NUMERAL_BIT2 x = NUMERAL_BIT1 xa) = False &
+(NUMERAL_BIT1 x = NUMERAL_BIT1 xa) = (x = xa) &
+(NUMERAL_BIT2 x = NUMERAL_BIT2 xa) = (x = xa)"
+  sorry
+
+lemma numeral_lt: "(ALT_ZERO < NUMERAL_BIT1 x) = True &
+(ALT_ZERO < NUMERAL_BIT2 x) = True &
+(x < ALT_ZERO) = False &
+(NUMERAL_BIT1 x < NUMERAL_BIT1 xa) = (x < xa) &
+(NUMERAL_BIT2 x < NUMERAL_BIT2 xa) = (x < xa) &
+(NUMERAL_BIT1 x < NUMERAL_BIT2 xa) = (~ xa < x) &
+(NUMERAL_BIT2 x < NUMERAL_BIT1 xa) = (x < xa)"
+  sorry
+
+lemma numeral_lte: "(ALT_ZERO <= x) = True &
+(NUMERAL_BIT1 x <= ALT_ZERO) = False &
+(NUMERAL_BIT2 x <= ALT_ZERO) = False &
+(NUMERAL_BIT1 x <= NUMERAL_BIT1 xa) = (x <= xa) &
+(NUMERAL_BIT1 x <= NUMERAL_BIT2 xa) = (x <= xa) &
+(NUMERAL_BIT2 x <= NUMERAL_BIT1 xa) = (~ xa <= x) &
+(NUMERAL_BIT2 x <= NUMERAL_BIT2 xa) = (x <= xa)"
+  sorry
+
+lemma numeral_pre: "PRE ALT_ZERO = ALT_ZERO &
+PRE (NUMERAL_BIT1 ALT_ZERO) = ALT_ZERO &
+(ALL x.
+    PRE (NUMERAL_BIT1 (NUMERAL_BIT1 x)) =
+    NUMERAL_BIT2 (PRE (NUMERAL_BIT1 x))) &
+(ALL x.
+    PRE (NUMERAL_BIT1 (NUMERAL_BIT2 x)) = NUMERAL_BIT2 (NUMERAL_BIT1 x)) &
+(ALL x. PRE (NUMERAL_BIT2 x) = NUMERAL_BIT1 x)"
+  sorry
+
+lemma bit_initiality: "EX x. x ALT_ZERO = zf &
+      (ALL n. x (NUMERAL_BIT1 n) = b1f n (x n)) &
+      (ALL n. x (NUMERAL_BIT2 n) = b2f n (x n))"
+  sorry
+
+consts
+  iBIT_cases :: "nat => 'a => (nat => 'a) => (nat => 'a) => 'a" 
+
+specification (iBIT_cases) iBIT_cases: "(ALL (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
+    iBIT_cases ALT_ZERO zf bf1 bf2 = zf) &
+(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
+    iBIT_cases (NUMERAL_BIT1 n) zf bf1 bf2 = bf1 n) &
+(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
+    iBIT_cases (NUMERAL_BIT2 n) zf bf1 bf2 = bf2 n)"
+  sorry
+
+definition
+  iDUB :: "nat => nat"  where
+  "iDUB == %x. x + x"
+
+lemma iDUB: "iDUB x = x + x"
+  sorry
+
+consts
+  iSUB :: "bool => nat => nat => nat" 
+
+specification (iSUB) iSUB_DEF: "(ALL b x. iSUB b ALT_ZERO x = ALT_ZERO) &
+(ALL b n x.
+    iSUB b (NUMERAL_BIT1 n) x =
+    (if b
+     then iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
+           (%m. NUMERAL_BIT1 (iSUB False n m))
+     else iBIT_cases x (iDUB n) (%m. NUMERAL_BIT1 (iSUB False n m))
+           (%m. iDUB (iSUB False n m)))) &
+(ALL b n x.
+    iSUB b (NUMERAL_BIT2 n) x =
+    (if b
+     then iBIT_cases x (NUMERAL_BIT2 n) (%m. NUMERAL_BIT1 (iSUB True n m))
+           (%m. iDUB (iSUB True n m))
+     else iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
+           (%m. NUMERAL_BIT1 (iSUB False n m))))"
+  sorry
+
+lemma bit_induction: "P ALT_ZERO &
+(ALL n. P n --> P (NUMERAL_BIT1 n)) & (ALL n. P n --> P (NUMERAL_BIT2 n))
+==> P x"
+  sorry
+
+lemma iSUB_THM: "iSUB (x::bool) ALT_ZERO (xn::nat) = ALT_ZERO &
+iSUB True (xa::nat) ALT_ZERO = xa &
+iSUB False (NUMERAL_BIT1 xa) ALT_ZERO = iDUB xa &
+iSUB True (NUMERAL_BIT1 xa) (NUMERAL_BIT1 (xb::nat)) =
+iDUB (iSUB True xa xb) &
+iSUB False (NUMERAL_BIT1 xa) (NUMERAL_BIT1 xb) =
+NUMERAL_BIT1 (iSUB False xa xb) &
+iSUB True (NUMERAL_BIT1 xa) (NUMERAL_BIT2 xb) =
+NUMERAL_BIT1 (iSUB False xa xb) &
+iSUB False (NUMERAL_BIT1 xa) (NUMERAL_BIT2 xb) = iDUB (iSUB False xa xb) &
+iSUB False (NUMERAL_BIT2 xa) ALT_ZERO = NUMERAL_BIT1 xa &
+iSUB True (NUMERAL_BIT2 xa) (NUMERAL_BIT1 xb) =
+NUMERAL_BIT1 (iSUB True xa xb) &
+iSUB False (NUMERAL_BIT2 xa) (NUMERAL_BIT1 xb) = iDUB (iSUB True xa xb) &
+iSUB True (NUMERAL_BIT2 xa) (NUMERAL_BIT2 xb) = iDUB (iSUB True xa xb) &
+iSUB False (NUMERAL_BIT2 xa) (NUMERAL_BIT2 xb) =
+NUMERAL_BIT1 (iSUB False xa xb)"
+  sorry
+
+lemma numeral_sub: "NUMERAL (x - xa) = (if xa < x then NUMERAL (iSUB True x xa) else 0)"
+  sorry
+
+lemma iDUB_removal: "iDUB (NUMERAL_BIT1 x) = NUMERAL_BIT2 (iDUB x) &
+iDUB (NUMERAL_BIT2 x) = NUMERAL_BIT2 (NUMERAL_BIT1 x) &
+iDUB ALT_ZERO = ALT_ZERO"
+  sorry
+
+lemma numeral_mult: "ALT_ZERO * x = ALT_ZERO &
+x * ALT_ZERO = ALT_ZERO &
+NUMERAL_BIT1 x * xa = iZ (iDUB (x * xa) + xa) &
+NUMERAL_BIT2 x * xa = iDUB (iZ (x * xa + xa))"
+  sorry
+
+definition
+  iSQR :: "nat => nat"  where
+  "iSQR == %x. x * x"
+
+lemma iSQR: "iSQR x = x * x"
+  sorry
+
+lemma numeral_exp: "(ALL x. x ^ ALT_ZERO = NUMERAL_BIT1 ALT_ZERO) &
+(ALL x xa. x ^ NUMERAL_BIT1 xa = x * iSQR (x ^ xa)) &
+(ALL x xa. x ^ NUMERAL_BIT2 xa = iSQR x * iSQR (x ^ xa))"
+  sorry
+
+lemma numeral_evenodd: "EVEN ALT_ZERO &
+EVEN (NUMERAL_BIT2 x) &
+~ EVEN (NUMERAL_BIT1 x) &
+~ ODD ALT_ZERO & ~ ODD (NUMERAL_BIT2 x) & ODD (NUMERAL_BIT1 x)"
+  sorry
+
+lemma numeral_fact: "FACT n = (if n = 0 then 1 else n * FACT (PRE n))"
+  sorry
+
+lemma numeral_funpow: "(f ^^ n) x = (if n = 0 then x else (f ^^ (n - 1)) (f x))"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" ind_type
+
+lemma INJ_INVERSE2: "(!!(x1::'A) (y1::'B) (x2::'A) y2::'B.
+    ((P::'A => 'B => 'C) x1 y1 = P x2 y2) = (x1 = x2 & y1 = y2))
+==> EX (x::'C => 'A) Y::'C => 'B.
+       ALL (xa::'A) y::'B. x (P xa y) = xa & Y (P xa y) = y"
+  sorry
+
+definition
+  NUMPAIR :: "nat => nat => nat"  where
+  "NUMPAIR == %x y. 2 ^ x * (2 * y + 1)"
+
+lemma NUMPAIR: "NUMPAIR x y = 2 ^ x * (2 * y + 1)"
+  sorry
+
+lemma NUMPAIR_INJ_LEMMA: "NUMPAIR x xa = NUMPAIR xb xc ==> x = xb"
+  sorry
+
+lemma NUMPAIR_INJ: "(NUMPAIR x1 y1 = NUMPAIR x2 y2) = (x1 = x2 & y1 = y2)"
+  sorry
+
+consts
+  NUMSND :: "nat => nat" 
+  NUMFST :: "nat => nat" 
+
+specification (NUMFST NUMSND) NUMPAIR_DEST: "ALL x y. NUMFST (NUMPAIR x y) = x & NUMSND (NUMPAIR x y) = y"
+  sorry
+
+definition
+  NUMSUM :: "bool => nat => nat"  where
+  "NUMSUM == %b x. if b then Suc (2 * x) else 2 * x"
+
+lemma NUMSUM: "NUMSUM b x = (if b then Suc (2 * x) else 2 * x)"
+  sorry
+
+lemma NUMSUM_INJ: "(NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)"
+  sorry
+
+consts
+  NUMRIGHT :: "nat => nat" 
+  NUMLEFT :: "nat => bool" 
+
+specification (NUMLEFT NUMRIGHT) NUMSUM_DEST: "ALL x y. NUMLEFT (NUMSUM x y) = x & NUMRIGHT (NUMSUM x y) = y"
+  sorry
+
+definition
+  INJN :: "nat => nat => 'a => bool"  where
+  "INJN == %m n a. n = m"
+
+lemma INJN: "INJN m = (%n a. n = m)"
+  sorry
+
+lemma INJN_INJ: "(INJN n1 = INJN n2) = (n1 = n2)"
+  sorry
+
+definition
+  INJA :: "'a => nat => 'a => bool"  where
+  "INJA == %a n b. b = a"
+
+lemma INJA: "INJA a = (%n b. b = a)"
+  sorry
+
+lemma INJA_INJ: "(INJA a1 = INJA a2) = (a1 = a2)"
+  sorry
+
+definition
+  INJF :: "(nat => nat => 'a => bool) => nat => 'a => bool"  where
+  "INJF == %f n. f (NUMFST n) (NUMSND n)"
+
+lemma INJF: "INJF f = (%n. f (NUMFST n) (NUMSND n))"
+  sorry
+
+lemma INJF_INJ: "(INJF f1 = INJF f2) = (f1 = f2)"
+  sorry
+
+definition
+  INJP :: "(nat => 'a => bool) => (nat => 'a => bool) => nat => 'a => bool"  where
+  "INJP ==
+%f1 f2 n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a"
+
+lemma INJP: "INJP f1 f2 =
+(%n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a)"
+  sorry
+
+lemma INJP_INJ: "(INJP f1 f2 = INJP f1' f2') = (f1 = f1' & f2 = f2')"
+  sorry
+
+definition
+  ZCONSTR :: "nat => 'a => (nat => nat => 'a => bool) => nat => 'a => bool"  where
+  "ZCONSTR == %c i r. INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
+
+lemma ZCONSTR: "ZCONSTR c i r = INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
+  sorry
+
+definition
+  ZBOT :: "nat => 'a => bool"  where
+  "ZBOT == INJP (INJN 0) (SOME z. True)"
+
+lemma ZBOT: "ZBOT = INJP (INJN 0) (SOME z. True)"
+  sorry
+
+lemma ZCONSTR_ZBOT: "ZCONSTR x xa xb ~= ZBOT"
+  sorry
+
+definition
+  ZRECSPACE :: "(nat => 'a => bool) => bool"  where
+  "ZRECSPACE ==
+%a0. ALL ZRECSPACE'.
+        (ALL a0.
+            a0 = ZBOT |
+            (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
+            ZRECSPACE' a0) -->
+        ZRECSPACE' a0"
+
+lemma ZRECSPACE: "ZRECSPACE =
+(%a0. ALL ZRECSPACE'.
+         (ALL a0.
+             a0 = ZBOT |
+             (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
+             ZRECSPACE' a0) -->
+         ZRECSPACE' a0)"
+  sorry
+
+lemma ZRECSPACE_rules: "(op &::bool => bool => bool)
+ ((ZRECSPACE::(nat => 'a::type => bool) => bool)
+   (ZBOT::nat => 'a::type => bool))
+ ((All::(nat => bool) => bool)
+   (%c::nat.
+       (All::('a::type => bool) => bool)
+        (%i::'a::type.
+            (All::((nat => nat => 'a::type => bool) => bool) => bool)
+             (%r::nat => nat => 'a::type => bool.
+                 (op -->::bool => bool => bool)
+                  ((All::(nat => bool) => bool)
+                    (%n::nat.
+                        (ZRECSPACE::(nat => 'a::type => bool) => bool)
+                         (r n)))
+                  ((ZRECSPACE::(nat => 'a::type => bool) => bool)
+                    ((ZCONSTR::nat
+                               => 'a::type
+                                  => (nat => nat => 'a::type => bool)
+                                     => nat => 'a::type => bool)
+                      c i r))))))"
+  sorry
+
+lemma ZRECSPACE_ind: "[| x ZBOT & (ALL c i r. (ALL n. x (r n)) --> x (ZCONSTR c i r));
+   ZRECSPACE a0 |]
+==> x a0"
+  sorry
+
+lemma ZRECSPACE_cases: "ZRECSPACE a0 =
+(a0 = ZBOT | (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE (r n))))"
+  sorry
+
+typedef (open) ('a) recspace = "Collect ZRECSPACE :: (nat \<Rightarrow> 'a\<Colon>type \<Rightarrow> bool) set"
+  sorry
+
+lemmas recspace_TY_DEF = typedef_hol2hol4 [OF type_definition_recspace]
+
+consts
+  mk_rec :: "(nat => 'a => bool) => 'a recspace" 
+  dest_rec :: "'a recspace => nat => 'a => bool" 
+
+specification (dest_rec mk_rec) recspace_repfns: "(ALL a::'a recspace. mk_rec (dest_rec a) = a) &
+(ALL r::nat => 'a => bool. ZRECSPACE r = (dest_rec (mk_rec r) = r))"
+  sorry
+
+definition
+  BOTTOM :: "'a recspace"  where
+  "BOTTOM == mk_rec ZBOT"
+
+lemma BOTTOM: "BOTTOM = mk_rec ZBOT"
+  sorry
+
+definition
+  CONSTR :: "nat => 'a => (nat => 'a recspace) => 'a recspace"  where
+  "CONSTR == %c i r. mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
+
+lemma CONSTR: "CONSTR c i r = mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
+  sorry
+
+lemma MK_REC_INJ: "[| mk_rec x = mk_rec y; ZRECSPACE x & ZRECSPACE y |] ==> x = y"
+  sorry
+
+lemma DEST_REC_INJ: "(dest_rec x = dest_rec y) = (x = y)"
+  sorry
+
+lemma CONSTR_BOT: "CONSTR c i r ~= BOTTOM"
+  sorry
+
+lemma CONSTR_INJ: "(CONSTR c1 i1 r1 = CONSTR c2 i2 r2) = (c1 = c2 & i1 = i2 & r1 = r2)"
+  sorry
+
+lemma CONSTR_IND: "P BOTTOM & (ALL c i r. (ALL n. P (r n)) --> P (CONSTR c i r)) ==> P x"
+  sorry
+
+lemma CONSTR_REC: "EX f. ALL c i r. f (CONSTR c i r) = Fn c i r (%n. f (r n))"
+  sorry
+
+consts
+  FCONS :: "'a => (nat => 'a) => nat => 'a" 
+
+specification (FCONS) FCONS: "(ALL (a::'a) f::nat => 'a. FCONS a f (0::nat) = a) &
+(ALL (a::'a) (f::nat => 'a) n::nat. FCONS a f (Suc n) = f n)"
+  sorry
+
+definition
+  FNIL :: "nat => 'a"  where
+  "FNIL == %n. SOME x. True"
+
+lemma FNIL: "FNIL n = (SOME x. True)"
+  sorry
+
+definition
+  ISO :: "('a => 'b) => ('b => 'a) => bool"  where
+  "ISO == %f g. (ALL x. f (g x) = x) & (ALL y. g (f y) = y)"
+
+lemma ISO: "ISO f g = ((ALL x. f (g x) = x) & (ALL y. g (f y) = y))"
+  sorry
+
+lemma ISO_REFL: "ISO (%x. x) (%x. x)"
+  sorry
+
+lemma ISO_FUN: "ISO (f::'a => 'c) (f'::'c => 'a) & ISO (g::'b => 'd) (g'::'d => 'b)
+==> ISO (%(h::'a => 'b) a'::'c. g (h (f' a')))
+     (%(h::'c => 'd) a::'a. g' (h (f a)))"
+  sorry
+
+lemma ISO_USAGE: "ISO f g
+==> (ALL P. All P = (ALL x. P (g x))) &
+    (ALL P. Ex P = (EX x. P (g x))) & (ALL a b. (a = g b) = (f a = b))"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" divides
+
+lemma DIVIDES_FACT: "0 < b ==> b dvd FACT b"
+  sorry
+
+lemma DIVIDES_MULT_LEFT: "((x::nat) * (xa::nat) dvd xa) = (xa = (0::nat) | x = (1::nat))"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prime
+
+consts
+  prime :: "nat => bool" 
+
+defs
+  prime_primdef: "prime.prime == %a. a ~= 1 & (ALL b. b dvd a --> b = a | b = 1)"
+
+lemma prime_def: "prime.prime a = (a ~= 1 & (ALL b. b dvd a --> b = a | b = 1))"
+  sorry
+
+lemma NOT_PRIME_0: "~ prime.prime 0"
+  sorry
+
+lemma NOT_PRIME_1: "~ prime.prime 1"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" list
+
+consts
+  EL :: "nat => 'a list => 'a" 
+
+specification (EL) EL: "(ALL l::'a list. EL (0::nat) l = hd l) &
+(ALL (l::'a list) n::nat. EL (Suc n) l = EL n (tl l))"
+  sorry
+
+lemma NULL: "(op &::bool => bool => bool)
+ ((List.null::'a::type list => bool) ([]::'a::type list))
+ ((All::('a::type => bool) => bool)
+   (%x::'a::type.
+       (All::('a::type list => bool) => bool)
+        (%xa::'a::type list.
+            (Not::bool => bool)
+             ((List.null::'a::type list => bool)
+               ((op #::'a::type => 'a::type list => 'a::type list) x xa)))))"
+  sorry
+
+lemma list_case_compute: "list_case (b::'b) (f::'a => 'a list => 'b) (l::'a list) =
+(if List.null l then b else f (hd l) (tl l))"
+  sorry
+
+lemma LIST_NOT_EQ: "l1 ~= l2 ==> x # l1 ~= xa # l2"
+  sorry
+
+lemma NOT_EQ_LIST: "h1 ~= h2 ==> h1 # x ~= h2 # xa"
+  sorry
+
+lemma EQ_LIST: "[| h1 = h2; l1 = l2 |] ==> h1 # l1 = h2 # l2"
+  sorry
+
+lemma CONS: "~ List.null l ==> hd l # tl l = l"
+  sorry
+
+lemma MAP_EQ_NIL: "(map (f::'a => 'b) (l::'a list) = []) = (l = []) & ([] = map f l) = (l = [])"
+  sorry
+
+lemma EVERY_EL: "list_all P l = (ALL n<length l. P (EL n l))"
+  sorry
+
+lemma EVERY_CONJ: "list_all (%x. P x & Q x) l = (list_all P l & list_all Q l)"
+  sorry
+
+lemma EVERY_MEM: "list_all P l = (ALL e. List.member l e --> P e)"
+  sorry
+
+lemma EXISTS_MEM: "list_ex P l = (EX e. List.member l e & P e)"
+  sorry
+
+lemma MEM_APPEND: "List.member (l1 @ l2) e = (List.member l1 e | List.member l2 e)"
+  sorry
+
+lemma NOT_EVERY: "(~ list_all P l) = list_ex (Not o P) l"
+  sorry
+
+lemma NOT_EXISTS: "(~ list_ex P l) = list_all (Not o P) l"
+  sorry
+
+lemma MEM_MAP: "List.member (map (f::'a => 'b) (l::'a list)) (x::'b) =
+(EX y::'a. x = f y & List.member l y)"
+  sorry
+
+lemma LENGTH_CONS: "(length l = Suc n) = (EX h l'. length l' = n & l = h # l')"
+  sorry
+
+lemma LENGTH_EQ_CONS: "(ALL l. length l = Suc n --> P l) =
+(ALL l. length l = n --> (ALL x. P (x # l)))"
+  sorry
+
+lemma LENGTH_EQ_NIL: "(ALL l. length l = 0 --> P l) = P []"
+  sorry
+
+lemma CONS_ACYCLIC: "l ~= x # l & x # l ~= l"
+  sorry
+
+lemma APPEND_eq_NIL: "(ALL (l1::'a list) l2::'a list. ([] = l1 @ l2) = (l1 = [] & l2 = [])) &
+(ALL (l1::'a list) l2::'a list. (l1 @ l2 = []) = (l1 = [] & l2 = []))"
+  sorry
+
+lemma APPEND_11: "(ALL (l1::'a list) (l2::'a list) l3::'a list.
+    (l1 @ l2 = l1 @ l3) = (l2 = l3)) &
+(ALL (l1::'a list) (l2::'a list) l3::'a list.
+    (l2 @ l1 = l3 @ l1) = (l2 = l3))"
+  sorry
+
+lemma EL_compute: "EL n l = (if n = 0 then hd l else EL (PRE n) (tl l))"
+  sorry
+
+lemma WF_LIST_PRED: "WF (%L1 L2. EX h. L2 = h # L1)"
+  sorry
+
+lemma list_size_cong: "M = N & (ALL x. List.member N x --> f x = f' x)
+==> Compatibility.list_size f M = Compatibility.list_size f' N"
+  sorry
+
+lemma FOLDR_CONG: "l = l' & b = b' & (ALL x a. List.member l' x --> f x a = f' x a)
+==> foldr f l b = foldr f' l' b'"
+  sorry
+
+lemma FOLDL_CONG: "l = l' & b = b' & (ALL x a. List.member l' x --> f a x = f' a x)
+==> foldl f b l = foldl f' b' l'"
+  sorry
+
+lemma MAP_CONG: "l1 = l2 & (ALL x. List.member l2 x --> f x = f' x) ==> map f l1 = map f' l2"
+  sorry
+
+lemma EXISTS_CONG: "l1 = l2 & (ALL x. List.member l2 x --> P x = P' x)
+==> list_ex P l1 = list_ex P' l2"
+  sorry
+
+lemma EVERY_CONG: "l1 = l2 & (ALL x. List.member l2 x --> P x = P' x)
+==> list_all P l1 = list_all P' l2"
+  sorry
+
+lemma EVERY_MONOTONIC: "[| !!x. P x ==> Q x; list_all P l |] ==> list_all Q l"
+  sorry
+
+lemma LENGTH_ZIP: "length l1 = length l2
+==> length (zip l1 l2) = length l1 & length (zip l1 l2) = length l2"
+  sorry
+
+lemma LENGTH_UNZIP: "length (fst (unzip pl)) = length pl & length (snd (unzip pl)) = length pl"
+  sorry
+
+lemma ZIP_UNZIP: "ZIP (unzip l) = l"
+  sorry
+
+lemma UNZIP_ZIP: "length l1 = length l2 ==> unzip (zip l1 l2) = (l1, l2)"
+  sorry
+
+lemma ZIP_MAP: "length l1 = length l2
+==> zip (map f1 l1) l2 = map (%p. (f1 (fst p), snd p)) (zip l1 l2) &
+    zip l1 (map f2 l2) = map (%p. (fst p, f2 (snd p))) (zip l1 l2)"
+  sorry
+
+lemma MEM_ZIP: "length l1 = length l2
+==> List.member (zip l1 l2) p = (EX n<length l1. p = (EL n l1, EL n l2))"
+  sorry
+
+lemma EL_ZIP: "length l1 = length l2 & n < length l1
+==> EL n (zip l1 l2) = (EL n l1, EL n l2)"
+  sorry
+
+lemma MAP2_ZIP: "length l1 = length l2 ==> map2 f l1 l2 = map (%(x, y). f x y) (zip l1 l2)"
+  sorry
+
+lemma MEM_EL: "List.member l x = (EX n<length l. x = EL n l)"
+  sorry
+
+lemma LAST_CONS: "(ALL x::'a. last [x] = x) &
+(ALL (x::'a) (xa::'a) xb::'a list. last (x # xa # xb) = last (xa # xb))"
+  sorry
+
+lemma FRONT_CONS: "(ALL x::'a. butlast [x] = []) &
+(ALL (x::'a) (xa::'a) xb::'a list.
+    butlast (x # xa # xb) = x # butlast (xa # xb))"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" pred_set
+
+lemma EXTENSION: "(s = t) = (ALL x. IN x s = IN x t)"
+  sorry
+
+lemma NOT_EQUAL_SETS: "(x ~= xa) = (EX xb. IN xb xa = (~ IN xb x))"
+  sorry
+
+lemma NUM_SET_WOP: "(EX n::nat. IN n (s::nat => bool)) =
+(EX n::nat. IN n s & (ALL m::nat. IN m s --> n <= m))"
+  sorry
+
+consts
+  GSPEC :: "('b => 'a * bool) => 'a => bool" 
+
+specification (GSPEC) GSPECIFICATION: "ALL (f::'b => 'a * bool) v::'a. IN v (GSPEC f) = (EX x::'b. (v, True) = f x)"
+  sorry
+
+lemma SET_MINIMUM: "(EX x::'a. IN x (s::'a => bool)) =
+(EX x::'a. IN x s & (ALL y::'a. IN y s --> (M::'a => nat) x <= M y))"
+  sorry
+
+definition
+  EMPTY :: "'a => bool"  where
+  "EMPTY == %x. False"
+
+lemma EMPTY_DEF: "EMPTY = (%x. False)"
+  sorry
+
+lemma NOT_IN_EMPTY: "~ IN x EMPTY"
+  sorry
+
+lemma MEMBER_NOT_EMPTY: "(EX xa. IN xa x) = (x ~= EMPTY)"
+  sorry
+
+definition
+  UNIV :: "'a => bool"  where
+  "UNIV == %x. True"
+
+lemma UNIV_DEF: "pred_set.UNIV = (%x. True)"
+  sorry
+
+lemma IN_UNIV: "IN x pred_set.UNIV"
+  sorry
+
+lemma UNIV_NOT_EMPTY: "pred_set.UNIV ~= EMPTY"
+  sorry
+
+lemma EMPTY_NOT_UNIV: "EMPTY ~= pred_set.UNIV"
+  sorry
+
+lemma EQ_UNIV: "(ALL x. IN x s) = (s = pred_set.UNIV)"
+  sorry
+
+definition
+  SUBSET :: "('a => bool) => ('a => bool) => bool"  where
+  "SUBSET == %s t. ALL x. IN x s --> IN x t"
+
+lemma SUBSET_DEF: "SUBSET s t = (ALL x. IN x s --> IN x t)"
+  sorry
+
+lemma SUBSET_TRANS: "SUBSET x xa & SUBSET xa xb ==> SUBSET x xb"
+  sorry
+
+lemma SUBSET_REFL: "SUBSET x x"
+  sorry
+
+lemma SUBSET_ANTISYM: "SUBSET x xa & SUBSET xa x ==> x = xa"
+  sorry
+
+lemma EMPTY_SUBSET: "SUBSET EMPTY x"
+  sorry
+
+lemma SUBSET_EMPTY: "SUBSET x EMPTY = (x = EMPTY)"
+  sorry
+
+lemma SUBSET_UNIV: "SUBSET x pred_set.UNIV"
+  sorry
+
+lemma UNIV_SUBSET: "SUBSET pred_set.UNIV x = (x = pred_set.UNIV)"
+  sorry
+
+definition
+  PSUBSET :: "('a => bool) => ('a => bool) => bool"  where
+  "PSUBSET == %s t. SUBSET s t & s ~= t"
+
+lemma PSUBSET_DEF: "PSUBSET s t = (SUBSET s t & s ~= t)"
+  sorry
+
+lemma PSUBSET_TRANS: "PSUBSET x xa & PSUBSET xa xb ==> PSUBSET x xb"
+  sorry
+
+lemma PSUBSET_IRREFL: "~ PSUBSET x x"
+  sorry
+
+lemma NOT_PSUBSET_EMPTY: "~ PSUBSET x EMPTY"
+  sorry
+
+lemma NOT_UNIV_PSUBSET: "~ PSUBSET pred_set.UNIV x"
+  sorry
+
+lemma PSUBSET_UNIV: "PSUBSET x pred_set.UNIV = (EX xa. ~ IN xa x)"
+  sorry
+
+definition
+  UNION :: "('a => bool) => ('a => bool) => 'a => bool"  where
+  "UNION == %s t. GSPEC (%x. (x, IN x s | IN x t))"
+
+lemma UNION_DEF: "pred_set.UNION s t = GSPEC (%x. (x, IN x s | IN x t))"
+  sorry
+
+lemma IN_UNION: "IN xb (pred_set.UNION x xa) = (IN xb x | IN xb xa)"
+  sorry
+
+lemma UNION_ASSOC: "pred_set.UNION x (pred_set.UNION xa xb) =
+pred_set.UNION (pred_set.UNION x xa) xb"
+  sorry
+
+lemma UNION_IDEMPOT: "pred_set.UNION x x = x"
+  sorry
+
+lemma UNION_COMM: "pred_set.UNION x xa = pred_set.UNION xa x"
+  sorry
+
+lemma SUBSET_UNION: "(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION x xa)) &
+(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION xa x))"
+  sorry
+
+lemma UNION_SUBSET: "SUBSET (pred_set.UNION s t) u = (SUBSET s u & SUBSET t u)"
+  sorry
+
+lemma SUBSET_UNION_ABSORPTION: "SUBSET x xa = (pred_set.UNION x xa = xa)"
+  sorry
+
+lemma UNION_EMPTY: "(ALL x::'a => bool. pred_set.UNION EMPTY x = x) &
+(ALL x::'a => bool. pred_set.UNION x EMPTY = x)"
+  sorry
+
+lemma UNION_UNIV: "(ALL x::'a => bool. pred_set.UNION pred_set.UNIV x = pred_set.UNIV) &
+(ALL x::'a => bool. pred_set.UNION x pred_set.UNIV = pred_set.UNIV)"
+  sorry
+
+lemma EMPTY_UNION: "(pred_set.UNION x xa = EMPTY) = (x = EMPTY & xa = EMPTY)"
+  sorry
+
+definition
+  INTER :: "('a => bool) => ('a => bool) => 'a => bool"  where
+  "INTER == %s t. GSPEC (%x. (x, IN x s & IN x t))"
+
+lemma INTER_DEF: "pred_set.INTER s t = GSPEC (%x. (x, IN x s & IN x t))"
+  sorry
+
+lemma IN_INTER: "IN xb (pred_set.INTER x xa) = (IN xb x & IN xb xa)"
+  sorry
+
+lemma INTER_ASSOC: "pred_set.INTER x (pred_set.INTER xa xb) =
+pred_set.INTER (pred_set.INTER x xa) xb"
+  sorry
+
+lemma INTER_IDEMPOT: "pred_set.INTER x x = x"
+  sorry
+
+lemma INTER_COMM: "pred_set.INTER x xa = pred_set.INTER xa x"
+  sorry
+
+lemma INTER_SUBSET: "(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER x xa) x) &
+(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER xa x) x)"
+  sorry
+
+lemma SUBSET_INTER: "SUBSET s (pred_set.INTER t u) = (SUBSET s t & SUBSET s u)"
+  sorry
+
+lemma SUBSET_INTER_ABSORPTION: "SUBSET x xa = (pred_set.INTER x xa = x)"
+  sorry
+
+lemma INTER_EMPTY: "(ALL x::'a => bool. pred_set.INTER EMPTY x = EMPTY) &
+(ALL x::'a => bool. pred_set.INTER x EMPTY = EMPTY)"
+  sorry
+
+lemma INTER_UNIV: "(ALL x::'a => bool. pred_set.INTER pred_set.UNIV x = x) &
+(ALL x::'a => bool. pred_set.INTER x pred_set.UNIV = x)"
+  sorry
+
+lemma UNION_OVER_INTER: "pred_set.INTER x (pred_set.UNION xa xb) =
+pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER x xb)"
+  sorry
+
+lemma INTER_OVER_UNION: "pred_set.UNION x (pred_set.INTER xa xb) =
+pred_set.INTER (pred_set.UNION x xa) (pred_set.UNION x xb)"
+  sorry
+
+definition
+  DISJOINT :: "('a => bool) => ('a => bool) => bool"  where
+  "DISJOINT == %s t. pred_set.INTER s t = EMPTY"
+
+lemma DISJOINT_DEF: "DISJOINT s t = (pred_set.INTER s t = EMPTY)"
+  sorry
+
+lemma IN_DISJOINT: "DISJOINT x xa = (~ (EX xb. IN xb x & IN xb xa))"
+  sorry
+
+lemma DISJOINT_SYM: "DISJOINT x xa = DISJOINT xa x"
+  sorry
+
+lemma DISJOINT_EMPTY: "DISJOINT EMPTY x & DISJOINT x EMPTY"
+  sorry
+
+lemma DISJOINT_EMPTY_REFL: "(x = EMPTY) = DISJOINT x x"
+  sorry
+
+lemma DISJOINT_UNION: "DISJOINT (pred_set.UNION x xa) xb = (DISJOINT x xb & DISJOINT xa xb)"
+  sorry
+
+lemma DISJOINT_UNION_BOTH: "DISJOINT (pred_set.UNION s t) u = (DISJOINT s u & DISJOINT t u) &
+DISJOINT u (pred_set.UNION s t) = (DISJOINT s u & DISJOINT t u)"
+  sorry
+
+definition
+  DIFF :: "('a => bool) => ('a => bool) => 'a => bool"  where
+  "DIFF == %s t. GSPEC (%x. (x, IN x s & ~ IN x t))"
+
+lemma DIFF_DEF: "DIFF s t = GSPEC (%x. (x, IN x s & ~ IN x t))"
+  sorry
+
+lemma IN_DIFF: "IN x (DIFF s t) = (IN x s & ~ IN x t)"
+  sorry
+
+lemma DIFF_EMPTY: "DIFF s EMPTY = s"
+  sorry
+
+lemma EMPTY_DIFF: "DIFF EMPTY s = EMPTY"
+  sorry
+
+lemma DIFF_UNIV: "DIFF s pred_set.UNIV = EMPTY"
+  sorry
+
+lemma DIFF_DIFF: "DIFF (DIFF x xa) xa = DIFF x xa"
+  sorry
+
+lemma DIFF_EQ_EMPTY: "DIFF x x = EMPTY"
+  sorry
+
+definition
+  INSERT :: "'a => ('a => bool) => 'a => bool"  where
+  "INSERT == %x s. GSPEC (%y. (y, y = x | IN y s))"
+
+lemma INSERT_DEF: "INSERT x s = GSPEC (%y. (y, y = x | IN y s))"
+  sorry
+
+lemma IN_INSERT: "IN x (INSERT xa xb) = (x = xa | IN x xb)"
+  sorry
+
+lemma COMPONENT: "IN x (INSERT x xa)"
+  sorry
+
+lemma SET_CASES: "x = EMPTY | (EX xa xb. x = INSERT xa xb & ~ IN xa xb)"
+  sorry
+
+lemma DECOMPOSITION: "IN x s = (EX t. s = INSERT x t & ~ IN x t)"
+  sorry
+
+lemma ABSORPTION: "IN x xa = (INSERT x xa = xa)"
+  sorry
+
+lemma INSERT_INSERT: "INSERT x (INSERT x xa) = INSERT x xa"
+  sorry
+
+lemma INSERT_COMM: "INSERT x (INSERT xa xb) = INSERT xa (INSERT x xb)"
+  sorry
+
+lemma INSERT_UNIV: "INSERT x pred_set.UNIV = pred_set.UNIV"
+  sorry
+
+lemma NOT_INSERT_EMPTY: "INSERT x xa ~= EMPTY"
+  sorry
+
+lemma NOT_EMPTY_INSERT: "EMPTY ~= INSERT x xa"
+  sorry
+
+lemma INSERT_UNION: "pred_set.UNION (INSERT x s) t =
+(if IN x t then pred_set.UNION s t else INSERT x (pred_set.UNION s t))"
+  sorry
+
+lemma INSERT_UNION_EQ: "pred_set.UNION (INSERT x s) t = INSERT x (pred_set.UNION s t)"
+  sorry
+
+lemma INSERT_INTER: "pred_set.INTER (INSERT x s) t =
+(if IN x t then INSERT x (pred_set.INTER s t) else pred_set.INTER s t)"
+  sorry
+
+lemma DISJOINT_INSERT: "DISJOINT (INSERT x xa) xb = (DISJOINT xa xb & ~ IN x xb)"
+  sorry
+
+lemma INSERT_SUBSET: "SUBSET (INSERT x xa) xb = (IN x xb & SUBSET xa xb)"
+  sorry
+
+lemma SUBSET_INSERT: "~ IN x xa ==> SUBSET xa (INSERT x xb) = SUBSET xa xb"
+  sorry
+
+lemma INSERT_DIFF: "DIFF (INSERT x s) t = (if IN x t then DIFF s t else INSERT x (DIFF s t))"
+  sorry
+
+definition
+  DELETE :: "('a => bool) => 'a => 'a => bool"  where
+  "DELETE == %s x. DIFF s (INSERT x EMPTY)"
+
+lemma DELETE_DEF: "DELETE s x = DIFF s (INSERT x EMPTY)"
+  sorry
+
+lemma IN_DELETE: "IN xa (DELETE x xb) = (IN xa x & xa ~= xb)"
+  sorry
+
+lemma DELETE_NON_ELEMENT: "(~ IN x xa) = (DELETE xa x = xa)"
+  sorry
+
+lemma IN_DELETE_EQ: "(IN x s = IN x' s) = (IN x (DELETE s x') = IN x' (DELETE s x))"
+  sorry
+
+lemma EMPTY_DELETE: "DELETE EMPTY x = EMPTY"
+  sorry
+
+lemma DELETE_DELETE: "DELETE (DELETE xa x) x = DELETE xa x"
+  sorry
+
+lemma DELETE_COMM: "DELETE (DELETE xb x) xa = DELETE (DELETE xb xa) x"
+  sorry
+
+lemma DELETE_SUBSET: "SUBSET (DELETE xa x) xa"
+  sorry
+
+lemma SUBSET_DELETE: "SUBSET xa (DELETE xb x) = (~ IN x xa & SUBSET xa xb)"
+  sorry
+
+lemma SUBSET_INSERT_DELETE: "SUBSET s (INSERT x t) = SUBSET (DELETE s x) t"
+  sorry
+
+lemma DIFF_INSERT: "DIFF x (INSERT xb xa) = DIFF (DELETE x xb) xa"
+  sorry
+
+lemma PSUBSET_INSERT_SUBSET: "PSUBSET x xa = (EX xb. ~ IN xb x & SUBSET (INSERT xb x) xa)"
+  sorry
+
+lemma PSUBSET_MEMBER: "PSUBSET s t = (SUBSET s t & (EX y. IN y t & ~ IN y s))"
+  sorry
+
+lemma DELETE_INSERT: "DELETE (INSERT x xb) xa =
+(if x = xa then DELETE xb xa else INSERT x (DELETE xb xa))"
+  sorry
+
+lemma INSERT_DELETE: "IN x xa ==> INSERT x (DELETE xa x) = xa"
+  sorry
+
+lemma DELETE_INTER: "pred_set.INTER (DELETE x xb) xa = DELETE (pred_set.INTER x xa) xb"
+  sorry
+
+lemma DISJOINT_DELETE_SYM: "DISJOINT (DELETE x xb) xa = DISJOINT (DELETE xa xb) x"
+  sorry
+
+consts
+  CHOICE :: "('a => bool) => 'a" 
+
+specification (CHOICE) CHOICE_DEF: "ALL x. x ~= EMPTY --> IN (CHOICE x) x"
+  sorry
+
+definition
+  REST :: "('a => bool) => 'a => bool"  where
+  "REST == %s. DELETE s (CHOICE s)"
+
+lemma REST_DEF: "REST s = DELETE s (CHOICE s)"
+  sorry
+
+lemma CHOICE_NOT_IN_REST: "~ IN (CHOICE x) (REST x)"
+  sorry
+
+lemma CHOICE_INSERT_REST: "s ~= EMPTY ==> INSERT (CHOICE s) (REST s) = s"
+  sorry
+
+lemma REST_SUBSET: "SUBSET (REST x) x"
+  sorry
+
+lemma REST_PSUBSET: "x ~= EMPTY ==> PSUBSET (REST x) x"
+  sorry
+
+definition
+  SING :: "('a => bool) => bool"  where
+  "SING == %s. EX x. s = INSERT x EMPTY"
+
+lemma SING_DEF: "SING s = (EX x. s = INSERT x EMPTY)"
+  sorry
+
+lemma SING: "SING (INSERT x EMPTY)"
+  sorry
+
+lemma IN_SING: "IN x (INSERT xa EMPTY) = (x = xa)"
+  sorry
+
+lemma NOT_SING_EMPTY: "INSERT x EMPTY ~= EMPTY"
+  sorry
+
+lemma NOT_EMPTY_SING: "EMPTY ~= INSERT x EMPTY"
+  sorry
+
+lemma EQUAL_SING: "(INSERT x EMPTY = INSERT xa EMPTY) = (x = xa)"
+  sorry
+
+lemma DISJOINT_SING_EMPTY: "DISJOINT (INSERT x EMPTY) EMPTY"
+  sorry
+
+lemma INSERT_SING_UNION: "INSERT xa x = pred_set.UNION (INSERT xa EMPTY) x"
+  sorry
+
+lemma SING_DELETE: "DELETE (INSERT x EMPTY) x = EMPTY"
+  sorry
+
+lemma DELETE_EQ_SING: "IN xa x ==> (DELETE x xa = EMPTY) = (x = INSERT xa EMPTY)"
+  sorry
+
+lemma CHOICE_SING: "CHOICE (INSERT x EMPTY) = x"
+  sorry
+
+lemma REST_SING: "REST (INSERT x EMPTY) = EMPTY"
+  sorry
+
+lemma SING_IFF_EMPTY_REST: "SING x = (x ~= EMPTY & REST x = EMPTY)"
+  sorry
+
+definition
+  IMAGE :: "('a => 'b) => ('a => bool) => 'b => bool"  where
+  "IMAGE == %f s. GSPEC (%x. (f x, IN x s))"
+
+lemma IMAGE_DEF: "IMAGE (f::'a => 'b) (s::'a => bool) = GSPEC (%x::'a. (f x, IN x s))"
+  sorry
+
+lemma IN_IMAGE: "IN (x::'b) (IMAGE (xb::'a => 'b) (xa::'a => bool)) =
+(EX xc::'a. x = xb xc & IN xc xa)"
+  sorry
+
+lemma IMAGE_IN: "IN x xa ==> IN (xb x) (IMAGE xb xa)"
+  sorry
+
+lemma IMAGE_EMPTY: "IMAGE (x::'a => 'b) EMPTY = EMPTY"
+  sorry
+
+lemma IMAGE_ID: "IMAGE (%x. x) x = x"
+  sorry
+
+lemma IMAGE_COMPOSE: "IMAGE ((x::'b => 'c) o (xa::'a => 'b)) (xb::'a => bool) =
+IMAGE x (IMAGE xa xb)"
+  sorry
+
+lemma IMAGE_INSERT: "IMAGE (x::'a => 'b) (INSERT (xa::'a) (xb::'a => bool)) =
+INSERT (x xa) (IMAGE x xb)"
+  sorry
+
+lemma IMAGE_EQ_EMPTY: "(IMAGE (x::'a => 'b) (s::'a => bool) = EMPTY) = (s = EMPTY)"
+  sorry
+
+lemma IMAGE_DELETE: "~ IN x s ==> IMAGE f (DELETE s x) = IMAGE f s"
+  sorry
+
+lemma IMAGE_UNION: "IMAGE (x::'a => 'b) (pred_set.UNION (xa::'a => bool) (xb::'a => bool)) =
+pred_set.UNION (IMAGE x xa) (IMAGE x xb)"
+  sorry
+
+lemma IMAGE_SUBSET: "SUBSET x xa ==> SUBSET (IMAGE xb x) (IMAGE xb xa)"
+  sorry
+
+lemma IMAGE_INTER: "SUBSET
+ (IMAGE (f::'a => 'b) (pred_set.INTER (s::'a => bool) (t::'a => bool)))
+ (pred_set.INTER (IMAGE f s) (IMAGE f t))"
+  sorry
+
+definition
+  INJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"  where
+  "INJ ==
+%f s t.
+   (ALL x. IN x s --> IN (f x) t) &
+   (ALL x y. IN x s & IN y s --> f x = f y --> x = y)"
+
+lemma INJ_DEF: "INJ f s t =
+((ALL x. IN x s --> IN (f x) t) &
+ (ALL x y. IN x s & IN y s --> f x = f y --> x = y))"
+  sorry
+
+lemma INJ_ID: "INJ (%x. x) x x"
+  sorry
+
+lemma INJ_COMPOSE: "INJ x xb xc & INJ xa xc xd ==> INJ (xa o x) xb xd"
+  sorry
+
+lemma INJ_EMPTY: "All (INJ (x::'a => 'b) EMPTY) &
+(ALL xa::'a => bool. INJ x xa EMPTY = (xa = EMPTY))"
+  sorry
+
+definition
+  SURJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"  where
+  "SURJ ==
+%f s t.
+   (ALL x. IN x s --> IN (f x) t) &
+   (ALL x. IN x t --> (EX y. IN y s & f y = x))"
+
+lemma SURJ_DEF: "SURJ f s t =
+((ALL x. IN x s --> IN (f x) t) &
+ (ALL x. IN x t --> (EX y. IN y s & f y = x)))"
+  sorry
+
+lemma SURJ_ID: "SURJ (%x. x) x x"
+  sorry
+
+lemma SURJ_COMPOSE: "SURJ x xb xc & SURJ xa xc xd ==> SURJ (xa o x) xb xd"
+  sorry
+
+lemma SURJ_EMPTY: "(ALL xa::'b => bool. SURJ (x::'a => 'b) EMPTY xa = (xa = EMPTY)) &
+(ALL xa::'a => bool. SURJ x xa EMPTY = (xa = EMPTY))"
+  sorry
+
+lemma IMAGE_SURJ: "SURJ x xa xb = (IMAGE x xa = xb)"
+  sorry
+
+definition
+  BIJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"  where
+  "BIJ == %f s t. INJ f s t & SURJ f s t"
+
+lemma BIJ_DEF: "BIJ f s t = (INJ f s t & SURJ f s t)"
+  sorry
+
+lemma BIJ_ID: "BIJ (%x. x) x x"
+  sorry
+
+lemma BIJ_EMPTY: "(ALL xa::'b => bool. BIJ (x::'a => 'b) EMPTY xa = (xa = EMPTY)) &
+(ALL xa::'a => bool. BIJ x xa EMPTY = (xa = EMPTY))"
+  sorry
+
+lemma BIJ_COMPOSE: "BIJ x xb xc & BIJ xa xc xd ==> BIJ (xa o x) xb xd"
+  sorry
+
+consts
+  LINV :: "('a => 'b) => ('a => bool) => 'b => 'a" 
+
+specification (LINV) LINV_DEF: "ALL f s t. INJ f s t --> (ALL x. IN x s --> LINV f s (f x) = x)"
+  sorry
+
+consts
+  RINV :: "('a => 'b) => ('a => bool) => 'b => 'a" 
+
+specification (RINV) RINV_DEF: "ALL f s t. SURJ f s t --> (ALL x. IN x t --> f (RINV f s x) = x)"
+  sorry
+
+definition
+  FINITE :: "('a => bool) => bool"  where
+  "FINITE ==
+%s. ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s"
+
+lemma FINITE_DEF: "FINITE s =
+(ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s)"
+  sorry
+
+lemma FINITE_EMPTY: "FINITE EMPTY"
+  sorry
+
+lemma FINITE_INDUCT: "[| P EMPTY &
+   (ALL s. FINITE s & P s --> (ALL e. ~ IN e s --> P (INSERT e s)));
+   FINITE s |]
+==> P s"
+  sorry
+
+lemma FINITE_INSERT: "FINITE (INSERT x s) = FINITE s"
+  sorry
+
+lemma FINITE_DELETE: "FINITE (DELETE s x) = FINITE s"
+  sorry
+
+lemma FINITE_UNION: "FINITE (pred_set.UNION s t) = (FINITE s & FINITE t)"
+  sorry
+
+lemma INTER_FINITE: "FINITE s ==> FINITE (pred_set.INTER s t)"
+  sorry
+
+lemma SUBSET_FINITE: "[| FINITE s; SUBSET t s |] ==> FINITE t"
+  sorry
+
+lemma PSUBSET_FINITE: "[| FINITE x; PSUBSET xa x |] ==> FINITE xa"
+  sorry
+
+lemma FINITE_DIFF: "FINITE s ==> FINITE (DIFF s t)"
+  sorry
+
+lemma FINITE_SING: "FINITE (INSERT x EMPTY)"
+  sorry
+
+lemma SING_FINITE: "SING x ==> FINITE x"
+  sorry
+
+lemma IMAGE_FINITE: "FINITE s ==> FINITE (IMAGE f s)"
+  sorry
+
+consts
+  CARD :: "('a => bool) => nat" 
+
+specification (CARD) CARD_DEF: "(op &::bool => bool => bool)
+ ((op =::nat => nat => bool)
+   ((CARD::('a::type => bool) => nat) (EMPTY::'a::type => bool)) (0::nat))
+ ((All::(('a::type => bool) => bool) => bool)
+   (%s::'a::type => bool.
+       (op -->::bool => bool => bool)
+        ((FINITE::('a::type => bool) => bool) s)
+        ((All::('a::type => bool) => bool)
+          (%x::'a::type.
+              (op =::nat => nat => bool)
+               ((CARD::('a::type => bool) => nat)
+                 ((INSERT::'a::type
+                           => ('a::type => bool) => 'a::type => bool)
+                   x s))
+               ((If::bool => nat => nat => nat)
+                 ((IN::'a::type => ('a::type => bool) => bool) x s)
+                 ((CARD::('a::type => bool) => nat) s)
+                 ((Suc::nat => nat)
+                   ((CARD::('a::type => bool) => nat) s)))))))"
+  sorry
+
+lemma CARD_EMPTY: "CARD EMPTY = 0"
+  sorry
+
+lemma CARD_INSERT: "FINITE s ==> CARD (INSERT x s) = (if IN x s then CARD s else Suc (CARD s))"
+  sorry
+
+lemma CARD_EQ_0: "FINITE s ==> (CARD s = 0) = (s = EMPTY)"
+  sorry
+
+lemma CARD_DELETE: "FINITE s ==> CARD (DELETE s x) = (if IN x s then CARD s - 1 else CARD s)"
+  sorry
+
+lemma CARD_INTER_LESS_EQ: "FINITE s ==> CARD (pred_set.INTER s t) <= CARD s"
+  sorry
+
+lemma CARD_UNION: "[| FINITE s; FINITE t |]
+==> CARD (pred_set.UNION s t) + CARD (pred_set.INTER s t) = CARD s + CARD t"
+  sorry
+
+lemma CARD_SUBSET: "[| FINITE s; SUBSET t s |] ==> CARD t <= CARD s"
+  sorry
+
+lemma CARD_PSUBSET: "[| FINITE s; PSUBSET t s |] ==> CARD t < CARD s"
+  sorry
+
+lemma CARD_SING: "CARD (INSERT x EMPTY) = 1"
+  sorry
+
+lemma SING_IFF_CARD1: "SING x = (CARD x = 1 & FINITE x)"
+  sorry
+
+lemma CARD_DIFF: "[| FINITE t; FINITE s |]
+==> CARD (DIFF s t) = CARD s - CARD (pred_set.INTER s t)"
+  sorry
+
+lemma LESS_CARD_DIFF: "[| FINITE t; FINITE s; CARD t < CARD s |] ==> 0 < CARD (DIFF s t)"
+  sorry
+
+lemma FINITE_COMPLETE_INDUCTION: "[| !!x. [| !!y. PSUBSET y x ==> P y; FINITE x |] ==> P x; FINITE x |]
+==> P x"
+  sorry
+
+definition
+  INFINITE :: "('a => bool) => bool"  where
+  "INFINITE == %s. ~ FINITE s"
+
+lemma INFINITE_DEF: "INFINITE s = (~ FINITE s)"
+  sorry
+
+lemma NOT_IN_FINITE: "(op =::bool => bool => bool)
+ ((INFINITE::('a::type => bool) => bool) (pred_set.UNIV::'a::type => bool))
+ ((All::(('a::type => bool) => bool) => bool)
+   (%s::'a::type => bool.
+       (op -->::bool => bool => bool)
+        ((FINITE::('a::type => bool) => bool) s)
+        ((Ex::('a::type => bool) => bool)
+          (%x::'a::type.
+              (Not::bool => bool)
+               ((IN::'a::type => ('a::type => bool) => bool) x s)))))"
+  sorry
+
+lemma INFINITE_INHAB: "INFINITE x ==> EX xa. IN xa x"
+  sorry
+
+lemma IMAGE_11_INFINITE: "[| !!x y. f x = f y ==> x = y; INFINITE s |] ==> INFINITE (IMAGE f s)"
+  sorry
+
+lemma INFINITE_SUBSET: "[| INFINITE x; SUBSET x xa |] ==> INFINITE xa"
+  sorry
+
+lemma IN_INFINITE_NOT_FINITE: "INFINITE x & FINITE xa ==> EX xb. IN xb x & ~ IN xb xa"
+  sorry
+
+lemma INFINITE_UNIV: "(op =::bool => bool => bool)
+ ((INFINITE::('a::type => bool) => bool) (pred_set.UNIV::'a::type => bool))
+ ((Ex::(('a::type => 'a::type) => bool) => bool)
+   (%f::'a::type => 'a::type.
+       (op &::bool => bool => bool)
+        ((All::('a::type => bool) => bool)
+          (%x::'a::type.
+              (All::('a::type => bool) => bool)
+               (%y::'a::type.
+                   (op -->::bool => bool => bool)
+                    ((op =::'a::type => 'a::type => bool) (f x) (f y))
+                    ((op =::'a::type => 'a::type => bool) x y))))
+        ((Ex::('a::type => bool) => bool)
+          (%y::'a::type.
+              (All::('a::type => bool) => bool)
+               (%x::'a::type.
+                   (op ~=::'a::type => 'a::type => bool) (f x) y)))))"
+  sorry
+
+lemma FINITE_PSUBSET_INFINITE: "INFINITE x = (ALL xa. FINITE xa --> SUBSET xa x --> PSUBSET xa x)"
+  sorry
+
+lemma FINITE_PSUBSET_UNIV: "(op =::bool => bool => bool)
+ ((INFINITE::('a::type => bool) => bool) (pred_set.UNIV::'a::type => bool))
+ ((All::(('a::type => bool) => bool) => bool)
+   (%s::'a::type => bool.
+       (op -->::bool => bool => bool)
+        ((FINITE::('a::type => bool) => bool) s)
+        ((PSUBSET::('a::type => bool) => ('a::type => bool) => bool) s
+          (pred_set.UNIV::'a::type => bool))))"
+  sorry
+
+lemma INFINITE_DIFF_FINITE: "INFINITE s & FINITE t ==> DIFF s t ~= EMPTY"
+  sorry
+
+lemma FINITE_ISO_NUM: "FINITE s
+==> EX f. (ALL n m. n < CARD s & m < CARD s --> f n = f m --> n = m) &
+          s = GSPEC (%n. (f n, n < CARD s))"
+  sorry
+
+lemma FINITE_WEAK_ENUMERATE: "FINITE (x::'a => bool) =
+(EX (f::nat => 'a) b::nat. ALL e::'a. IN e x = (EX n<b. e = f n))"
+  sorry
+
+definition
+  BIGUNION :: "(('a => bool) => bool) => 'a => bool"  where
+  "BIGUNION == %P. GSPEC (%x. (x, EX p. IN p P & IN x p))"
+
+lemma BIGUNION: "BIGUNION P = GSPEC (%x. (x, EX p. IN p P & IN x p))"
+  sorry
+
+lemma IN_BIGUNION: "IN x (BIGUNION xa) = (EX s. IN x s & IN s xa)"
+  sorry
+
+lemma BIGUNION_EMPTY: "BIGUNION EMPTY = EMPTY"
+  sorry
+
+lemma BIGUNION_SING: "BIGUNION (INSERT x EMPTY) = x"
+  sorry
+
+lemma BIGUNION_UNION: "BIGUNION (pred_set.UNION x xa) = pred_set.UNION (BIGUNION x) (BIGUNION xa)"
+  sorry
+
+lemma DISJOINT_BIGUNION: "(ALL (s::('a => bool) => bool) t::'a => bool.
+    DISJOINT (BIGUNION s) t =
+    (ALL s'::'a => bool. IN s' s --> DISJOINT s' t)) &
+(ALL (x::('a => bool) => bool) xa::'a => bool.
+    DISJOINT xa (BIGUNION x) =
+    (ALL xb::'a => bool. IN xb x --> DISJOINT xa xb))"
+  sorry
+
+lemma BIGUNION_INSERT: "BIGUNION (INSERT x xa) = pred_set.UNION x (BIGUNION xa)"
+  sorry
+
+lemma BIGUNION_SUBSET: "SUBSET (BIGUNION P) X = (ALL Y. IN Y P --> SUBSET Y X)"
+  sorry
+
+lemma FINITE_BIGUNION: "FINITE x & (ALL s. IN s x --> FINITE s) ==> FINITE (BIGUNION x)"
+  sorry
+
+definition
+  BIGINTER :: "(('a => bool) => bool) => 'a => bool"  where
+  "BIGINTER == %B. GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
+
+lemma BIGINTER: "BIGINTER B = GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
+  sorry
+
+lemma IN_BIGINTER: "IN x (BIGINTER B) = (ALL P. IN P B --> IN x P)"
+  sorry
+
+lemma BIGINTER_INSERT: "BIGINTER (INSERT P B) = pred_set.INTER P (BIGINTER B)"
+  sorry
+
+lemma BIGINTER_EMPTY: "BIGINTER EMPTY = pred_set.UNIV"
+  sorry
+
+lemma BIGINTER_INTER: "BIGINTER (INSERT x (INSERT xa EMPTY)) = pred_set.INTER x xa"
+  sorry
+
+lemma BIGINTER_SING: "BIGINTER (INSERT x EMPTY) = x"
+  sorry
+
+lemma SUBSET_BIGINTER: "SUBSET X (BIGINTER P) = (ALL x. IN x P --> SUBSET X x)"
+  sorry
+
+lemma DISJOINT_BIGINTER: "IN xa xb & DISJOINT xa x
+==> DISJOINT x (BIGINTER xb) & DISJOINT (BIGINTER xb) x"
+  sorry
+
+definition
+  CROSS :: "('a => bool) => ('b => bool) => 'a * 'b => bool"  where
+  "CROSS == %P Q. GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
+
+lemma CROSS_DEF: "CROSS P Q = GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
+  sorry
+
+lemma IN_CROSS: "IN xb (CROSS x xa) = (IN (fst xb) x & IN (snd xb) xa)"
+  sorry
+
+lemma CROSS_EMPTY: "CROSS x EMPTY = EMPTY & CROSS EMPTY x = EMPTY"
+  sorry
+
+lemma CROSS_INSERT_LEFT: "CROSS (INSERT xb x) xa =
+pred_set.UNION (CROSS (INSERT xb EMPTY) xa) (CROSS x xa)"
+  sorry
+
+lemma CROSS_INSERT_RIGHT: "CROSS x (INSERT xb xa) =
+pred_set.UNION (CROSS x (INSERT xb EMPTY)) (CROSS x xa)"
+  sorry
+
+lemma FINITE_CROSS: "FINITE x & FINITE xa ==> FINITE (CROSS x xa)"
+  sorry
+
+lemma CROSS_SINGS: "CROSS (INSERT x EMPTY) (INSERT xa EMPTY) = INSERT (x, xa) EMPTY"
+  sorry
+
+lemma CARD_SING_CROSS: "FINITE (s::'b => bool) ==> CARD (CROSS (INSERT (x::'a) EMPTY) s) = CARD s"
+  sorry
+
+lemma CARD_CROSS: "FINITE x & FINITE xa ==> CARD (CROSS x xa) = CARD x * CARD xa"
+  sorry
+
+lemma CROSS_SUBSET: "SUBSET (CROSS xb xc) (CROSS x xa) =
+(xb = EMPTY | xc = EMPTY | SUBSET xb x & SUBSET xc xa)"
+  sorry
+
+lemma FINITE_CROSS_EQ: "FINITE (CROSS P Q) = (P = EMPTY | Q = EMPTY | FINITE P & FINITE Q)"
+  sorry
+
+definition
+  COMPL :: "('a => bool) => 'a => bool"  where
+  "COMPL == DIFF pred_set.UNIV"
+
+lemma COMPL_DEF: "COMPL P = DIFF pred_set.UNIV P"
+  sorry
+
+lemma IN_COMPL: "IN x (COMPL xa) = (~ IN x xa)"
+  sorry
+
+lemma COMPL_COMPL: "COMPL (COMPL x) = x"
+  sorry
+
+lemma COMPL_CLAUSES: "pred_set.INTER (COMPL x) x = EMPTY &
+pred_set.UNION (COMPL x) x = pred_set.UNIV"
+  sorry
+
+lemma COMPL_SPLITS: "pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER (COMPL x) xa) = xa"
+  sorry
+
+lemma INTER_UNION_COMPL: "pred_set.INTER x xa = COMPL (pred_set.UNION (COMPL x) (COMPL xa))"
+  sorry
+
+lemma COMPL_EMPTY: "COMPL EMPTY = pred_set.UNIV"
+  sorry
+
+consts
+  count :: "nat => nat => bool" 
+
+defs
+  count_primdef: "count == %n. GSPEC (%m. (m, m < n))"
+
+lemma count_def: "count n = GSPEC (%m. (m, m < n))"
+  sorry
+
+lemma IN_COUNT: "IN m (count n) = (m < n)"
+  sorry
+
+lemma COUNT_ZERO: "count 0 = EMPTY"
+  sorry
+
+lemma COUNT_SUC: "count (Suc n) = INSERT n (count n)"
+  sorry
+
+lemma FINITE_COUNT: "FINITE (count n)"
+  sorry
+
+lemma CARD_COUNT: "CARD (count n) = n"
+  sorry
+
+definition
+  ITSET_tupled :: "('a => 'b => 'b) => ('a => bool) * 'b => 'b"  where
+  "ITSET_tupled ==
+%f. WFREC
+     (SOME R.
+         WF R &
+         (ALL b s.
+             FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
+     (%ITSET_tupled (v, v1).
+         if FINITE v
+         then if v = EMPTY then v1
+              else ITSET_tupled (REST v, f (CHOICE v) v1)
+         else ARB)"
+
+lemma ITSET_tupled_primitive_def: "ITSET_tupled f =
+WFREC
+ (SOME R.
+     WF R &
+     (ALL b s. FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
+ (%ITSET_tupled (v, v1).
+     if FINITE v
+     then if v = EMPTY then v1 else ITSET_tupled (REST v, f (CHOICE v) v1)
+     else ARB)"
+  sorry
+
+definition
+  ITSET :: "('a => 'b => 'b) => ('a => bool) => 'b => 'b"  where
+  "ITSET == %f x x1. ITSET_tupled f (x, x1)"
+
+lemma ITSET_curried_def: "ITSET (f::'a => 'b => 'b) (x::'a => bool) (x1::'b) = ITSET_tupled f (x, x1)"
+  sorry
+
+lemma ITSET_IND: "(!!(s::'a => bool) b::'b.
+    (FINITE s & s ~= EMPTY
+     ==> (P::('a => bool) => 'b => bool) (REST s)
+          ((f::'a => 'b => 'b) (CHOICE s) b))
+    ==> P s b)
+==> P (v::'a => bool) (x::'b)"
+  sorry
+
+lemma ITSET_THM: "FINITE s
+==> ITSET f s b =
+    (if s = EMPTY then b else ITSET f (REST s) (f (CHOICE s) b))"
+  sorry
+
+lemma ITSET_EMPTY: "ITSET (x::'a => 'b => 'b) EMPTY (xa::'b) = xa"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" operator
+
+definition
+  ASSOC :: "('a => 'a => 'a) => bool"  where
+  "ASSOC == %f. ALL x y z. f x (f y z) = f (f x y) z"
+
+lemma ASSOC_DEF: "ASSOC f = (ALL x y z. f x (f y z) = f (f x y) z)"
+  sorry
+
+definition
+  COMM :: "('a => 'a => 'b) => bool"  where
+  "COMM == %f. ALL x y. f x y = f y x"
+
+lemma COMM_DEF: "COMM f = (ALL x y. f x y = f y x)"
+  sorry
+
+definition
+  FCOMM :: "('a => 'b => 'a) => ('c => 'a => 'a) => bool"  where
+  "FCOMM == %f g. ALL x y z. g x (f y z) = f (g x y) z"
+
+lemma FCOMM_DEF: "FCOMM f g = (ALL x y z. g x (f y z) = f (g x y) z)"
+  sorry
+
+definition
+  RIGHT_ID :: "('a => 'b => 'a) => 'b => bool"  where
+  "RIGHT_ID == %f e. ALL x. f x e = x"
+
+lemma RIGHT_ID_DEF: "RIGHT_ID f e = (ALL x. f x e = x)"
+  sorry
+
+definition
+  LEFT_ID :: "('a => 'b => 'b) => 'a => bool"  where
+  "LEFT_ID == %f e. ALL x. f e x = x"
+
+lemma LEFT_ID_DEF: "LEFT_ID f e = (ALL x. f e x = x)"
+  sorry
+
+definition
+  MONOID :: "('a => 'a => 'a) => 'a => bool"  where
+  "MONOID == %f e. ASSOC f & RIGHT_ID f e & LEFT_ID f e"
+
+lemma MONOID_DEF: "MONOID f e = (ASSOC f & RIGHT_ID f e & LEFT_ID f e)"
+  sorry
+
+lemma ASSOC_CONJ: "ASSOC op &"
+  sorry
+
+lemma ASSOC_DISJ: "ASSOC op |"
+  sorry
+
+lemma FCOMM_ASSOC: "FCOMM x x = ASSOC x"
+  sorry
+
+lemma MONOID_CONJ_T: "MONOID op & True"
+  sorry
+
+lemma MONOID_DISJ_F: "MONOID op | False"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" rich_list
+
+consts
+  SNOC :: "'a => 'a list => 'a list" 
+
+specification (SNOC) SNOC: "(ALL x::'a. SNOC x [] = [x]) &
+(ALL (x::'a) (x'::'a) l::'a list. SNOC x (x' # l) = x' # SNOC x l)"
+  sorry
+
+consts
+  SCANL :: "('b => 'a => 'b) => 'b => 'a list => 'b list" 
+
+specification (SCANL) SCANL: "(ALL (f::'b => 'a => 'b) e::'b. SCANL f e [] = [e]) &
+(ALL (f::'b => 'a => 'b) (e::'b) (x::'a) l::'a list.
+    SCANL f e (x # l) = e # SCANL f (f e x) l)"
+  sorry
+
+consts
+  SCANR :: "('a => 'b => 'b) => 'b => 'a list => 'b list" 
+
+specification (SCANR) SCANR: "(ALL (f::'a => 'b => 'b) e::'b. SCANR f e [] = [e]) &
+(ALL (f::'a => 'b => 'b) (e::'b) (x::'a) l::'a list.
+    SCANR f e (x # l) = f x (hd (SCANR f e l)) # SCANR f e l)"
+  sorry
+
+lemma IS_EL_DEF: "List.member l x = list_ex (op = x) l"
+  sorry
+
+definition
+  AND_EL :: "bool list => bool"  where
+  "AND_EL == list_all I"
+
+lemma AND_EL_DEF: "AND_EL = list_all I"
+  sorry
+
+definition
+  OR_EL :: "bool list => bool"  where
+  "OR_EL == list_ex I"
+
+lemma OR_EL_DEF: "OR_EL = list_ex I"
+  sorry
+
+consts
+  FIRSTN :: "nat => 'a list => 'a list" 
+
+specification (FIRSTN) FIRSTN: "(ALL l::'a list. FIRSTN (0::nat) l = []) &
+(ALL (n::nat) (x::'a) l::'a list. FIRSTN (Suc n) (x # l) = x # FIRSTN n l)"
+  sorry
+
+consts
+  BUTFIRSTN :: "nat => 'a list => 'a list" 
+
+specification (BUTFIRSTN) BUTFIRSTN: "(ALL l::'a list. BUTFIRSTN (0::nat) l = l) &
+(ALL (n::nat) (x::'a) l::'a list. BUTFIRSTN (Suc n) (x # l) = BUTFIRSTN n l)"
+  sorry
+
+consts
+  SEG :: "nat => nat => 'a list => 'a list" 
+
+specification (SEG) SEG: "(ALL (k::nat) l::'a list. SEG (0::nat) k l = []) &
+(ALL (m::nat) (x::'a) l::'a list.
+    SEG (Suc m) (0::nat) (x # l) = x # SEG m (0::nat) l) &
+(ALL (m::nat) (k::nat) (x::'a) l::'a list.
+    SEG (Suc m) (Suc k) (x # l) = SEG (Suc m) k l)"
+  sorry
+
+lemma LAST: "last (SNOC x l) = x"
+  sorry
+
+lemma BUTLAST: "butlast (SNOC x l) = l"
+  sorry
+
+consts
+  LASTN :: "nat => 'a list => 'a list" 
+
+specification (LASTN) LASTN: "(ALL l::'a list. LASTN (0::nat) l = []) &
+(ALL (n::nat) (x::'a) l::'a list.
+    LASTN (Suc n) (SNOC x l) = SNOC x (LASTN n l))"
+  sorry
+
+consts
+  BUTLASTN :: "nat => 'a list => 'a list" 
+
+specification (BUTLASTN) BUTLASTN: "(ALL l::'a list. BUTLASTN (0::nat) l = l) &
+(ALL (n::nat) (x::'a) l::'a list.
+    BUTLASTN (Suc n) (SNOC x l) = BUTLASTN n l)"
+  sorry
+
+lemma EL: "(ALL x::'a list. EL (0::nat) x = hd x) &
+(ALL (x::nat) xa::'a list. EL (Suc x) xa = EL x (tl xa))"
+  sorry
+
+consts
+  ELL :: "nat => 'a list => 'a" 
+
+specification (ELL) ELL: "(ALL l::'a list. ELL (0::nat) l = last l) &
+(ALL (n::nat) l::'a list. ELL (Suc n) l = ELL n (butlast l))"
+  sorry
+
+consts
+  IS_PREFIX :: "'a list => 'a list => bool" 
+
+specification (IS_PREFIX) IS_PREFIX: "(ALL l::'a list. IS_PREFIX l [] = True) &
+(ALL (x::'a) l::'a list. IS_PREFIX [] (x # l) = False) &
+(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
+    IS_PREFIX (x1 # l1) (x2 # l2) = (x1 = x2 & IS_PREFIX l1 l2))"
+  sorry
+
+lemma SNOC_APPEND: "SNOC x l = l @ [x]"
+  sorry
+
+lemma REVERSE: "rev [] = [] & (ALL (x::'a) xa::'a list. rev (x # xa) = SNOC x (rev xa))"
+  sorry
+
+lemma REVERSE_SNOC: "rev (SNOC x l) = x # rev l"
+  sorry
+
+lemma SNOC_Axiom: "EX x. x [] = e & (ALL xa l. x (SNOC xa l) = f xa l (x l))"
+  sorry
+
+consts
+  IS_SUFFIX :: "'a list => 'a list => bool" 
+
+specification (IS_SUFFIX) IS_SUFFIX: "(ALL l::'a list. IS_SUFFIX l [] = True) &
+(ALL (x::'a) l::'a list. IS_SUFFIX [] (SNOC x l) = False) &
+(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
+    IS_SUFFIX (SNOC x1 l1) (SNOC x2 l2) = (x1 = x2 & IS_SUFFIX l1 l2))"
+  sorry
+
+consts
+  IS_SUBLIST :: "'a list => 'a list => bool" 
+
+specification (IS_SUBLIST) IS_SUBLIST: "(ALL l::'a list. IS_SUBLIST l [] = True) &
+(ALL (x::'a) l::'a list. IS_SUBLIST [] (x # l) = False) &
+(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
+    IS_SUBLIST (x1 # l1) (x2 # l2) =
+    (x1 = x2 & IS_PREFIX l1 l2 | IS_SUBLIST l1 (x2 # l2)))"
+  sorry
+
+consts
+  SPLITP :: "('a => bool) => 'a list => 'a list * 'a list" 
+
+specification (SPLITP) SPLITP: "(ALL P::'a => bool. SPLITP P [] = ([], [])) &
+(ALL (P::'a => bool) (x::'a) l::'a list.
+    SPLITP P (x # l) =
+    (if P x then ([], x # l) else (x # fst (SPLITP P l), snd (SPLITP P l))))"
+  sorry
+
+definition
+  PREFIX :: "('a => bool) => 'a list => 'a list"  where
+  "PREFIX == %P l. fst (SPLITP (Not o P) l)"
+
+lemma PREFIX_DEF: "PREFIX P l = fst (SPLITP (Not o P) l)"
+  sorry
+
+definition
+  SUFFIX :: "('a => bool) => 'a list => 'a list"  where
+  "SUFFIX == %P. foldl (%l' x. if P x then SNOC x l' else []) []"
+
+lemma SUFFIX_DEF: "SUFFIX P l = foldl (%l' x. if P x then SNOC x l' else []) [] l"
+  sorry
+
+definition
+  UNZIP_FST :: "('a * 'b) list => 'a list"  where
+  "UNZIP_FST == %l. fst (unzip l)"
+
+lemma UNZIP_FST_DEF: "UNZIP_FST l = fst (unzip l)"
+  sorry
+
+definition
+  UNZIP_SND :: "('a * 'b) list => 'b list"  where
+  "UNZIP_SND == %l. snd (unzip l)"
+
+lemma UNZIP_SND_DEF: "UNZIP_SND (l::('a * 'b) list) = snd (unzip l)"
+  sorry
+
+consts
+  GENLIST :: "(nat => 'a) => nat => 'a list" 
+
+specification (GENLIST) GENLIST: "(ALL f::nat => 'a. GENLIST f (0::nat) = []) &
+(ALL (f::nat => 'a) n::nat. GENLIST f (Suc n) = SNOC (f n) (GENLIST f n))"
+  sorry
+
+consts
+  REPLICATE :: "nat => 'a => 'a list" 
+
+specification (REPLICATE) REPLICATE: "(ALL x::'a. REPLICATE (0::nat) x = []) &
+(ALL (n::nat) x::'a. REPLICATE (Suc n) x = x # REPLICATE n x)"
+  sorry
+
+lemma LENGTH_MAP2: "length l1 = length l2
+==> length (map2 f l1 l2) = length l1 & length (map2 f l1 l2) = length l2"
+  sorry
+
+lemma LENGTH_EQ: "x = y ==> length x = length y"
+  sorry
+
+lemma LENGTH_NOT_NULL: "(0 < length l) = (~ List.null l)"
+  sorry
+
+lemma SNOC_INDUCT: "P [] & (ALL l. P l --> (ALL x. P (SNOC x l))) ==> P x"
+  sorry
+
+lemma SNOC_CASES: "x' = [] | (EX x l. x' = SNOC x l)"
+  sorry
+
+lemma LENGTH_SNOC: "length (SNOC x l) = Suc (length l)"
+  sorry
+
+lemma NOT_NIL_SNOC: "[] ~= SNOC x xa"
+  sorry
+
+lemma NOT_SNOC_NIL: "SNOC x xa ~= []"
+  sorry
+
+lemma SNOC_11: "(SNOC x l = SNOC x' l') = (x = x' & l = l')"
+  sorry
+
+lemma SNOC_EQ_LENGTH_EQ: "SNOC x1 l1 = SNOC x2 l2 ==> length l1 = length l2"
+  sorry
+
+lemma SNOC_REVERSE_CONS: "SNOC x xa = rev (x # rev xa)"
+  sorry
+
+lemma MAP_SNOC: "map (x::'a => 'b) (SNOC (xa::'a) (xb::'a list)) = SNOC (x xa) (map x xb)"
+  sorry
+
+lemma FOLDR_SNOC: "foldr (f::'a => 'b => 'b) (SNOC (x::'a) (l::'a list)) (e::'b) =
+foldr f l (f x e)"
+  sorry
+
+lemma FOLDL_SNOC: "foldl (f::'b => 'a => 'b) (e::'b) (SNOC (x::'a) (l::'a list)) =
+f (foldl f e l) x"
+  sorry
+
+lemma FOLDR_FOLDL: "MONOID f e ==> foldr f l e = foldl f e l"
+  sorry
+
+lemma LENGTH_FOLDR: "length l = foldr (%x. Suc) l 0"
+  sorry
+
+lemma LENGTH_FOLDL: "length l = foldl (%l' x. Suc l') 0 l"
+  sorry
+
+lemma MAP_FOLDR: "map (f::'a => 'b) (l::'a list) = foldr (%x::'a. op # (f x)) l []"
+  sorry
+
+lemma MAP_FOLDL: "map (f::'a => 'b) (l::'a list) =
+foldl (%(l'::'b list) x::'a. SNOC (f x) l') [] l"
+  sorry
+
+lemma FILTER_FOLDR: "filter P l = foldr (%x l'. if P x then x # l' else l') l []"
+  sorry
+
+lemma FILTER_SNOC: "filter P (SNOC x l) = (if P x then SNOC x (filter P l) else filter P l)"
+  sorry
+
+lemma FILTER_FOLDL: "filter P l = foldl (%l' x. if P x then SNOC x l' else l') [] l"
+  sorry
+
+lemma FILTER_COMM: "filter f1 (filter f2 l) = filter f2 (filter f1 l)"
+  sorry
+
+lemma FILTER_IDEM: "filter f (filter f l) = filter f l"
+  sorry
+
+lemma LENGTH_SEG: "n + k <= length l ==> length (SEG n k l) = n"
+  sorry
+
+lemma APPEND_NIL: "(ALL l::'a list. l @ [] = l) & (ALL x::'a list. [] @ x = x)"
+  sorry
+
+lemma APPEND_SNOC: "l1 @ SNOC x l2 = SNOC x (l1 @ l2)"
+  sorry
+
+lemma APPEND_FOLDR: "l1 @ l2 = foldr op # l1 l2"
+  sorry
+
+lemma APPEND_FOLDL: "l1 @ l2 = foldl (%l' x. SNOC x l') l1 l2"
+  sorry
+
+lemma CONS_APPEND: "x # l = [x] @ l"
+  sorry
+
+lemma ASSOC_APPEND: "ASSOC op @"
+  sorry
+
+lemma MONOID_APPEND_NIL: "MONOID op @ []"
+  sorry
+
+lemma APPEND_LENGTH_EQ: "[| length l1 = length l1'; length l2 = length l2' |]
+==> (l1 @ l2 = l1' @ l2') = (l1 = l1' & l2 = l2')"
+  sorry
+
+lemma FLAT_SNOC: "concat (SNOC x l) = concat l @ x"
+  sorry
+
+lemma FLAT_FOLDR: "concat l = foldr op @ l []"
+  sorry
+
+lemma LENGTH_FLAT: "length (concat l) = Compatibility.sum (map length l)"
+  sorry
+
+lemma REVERSE_FOLDR: "rev l = foldr SNOC l []"
+  sorry
+
+lemma ALL_EL_SNOC: "list_all P (SNOC x l) = (list_all P l & P x)"
+  sorry
+
+lemma ALL_EL_MAP: "list_all (P::'b => bool) (map (f::'a => 'b) (l::'a list)) =
+list_all (P o f) l"
+  sorry
+
+lemma SOME_EL_SNOC: "list_ex P (SNOC x l) = (P x | list_ex P l)"
+  sorry
+
+lemma IS_EL_SNOC: "List.member (SNOC x l) y = (y = x | List.member l y)"
+  sorry
+
+lemma SUM_SNOC: "Compatibility.sum (SNOC x l) = Compatibility.sum l + x"
+  sorry
+
+lemma SUM_FOLDL: "Compatibility.sum l = foldl op + 0 l"
+  sorry
+
+lemma IS_PREFIX_APPEND: "IS_PREFIX l1 l2 = (EX l. l1 = l2 @ l)"
+  sorry
+
+lemma IS_SUFFIX_APPEND: "IS_SUFFIX l1 l2 = (EX l. l1 = l @ l2)"
+  sorry
+
+lemma IS_SUBLIST_APPEND: "IS_SUBLIST l1 l2 = (EX l l'. l1 = l @ l2 @ l')"
+  sorry
+
+lemma IS_PREFIX_IS_SUBLIST: "IS_PREFIX l1 l2 ==> IS_SUBLIST l1 l2"
+  sorry
+
+lemma IS_SUFFIX_IS_SUBLIST: "IS_SUFFIX l1 l2 ==> IS_SUBLIST l1 l2"
+  sorry
+
+lemma IS_PREFIX_REVERSE: "IS_PREFIX (rev l1) (rev l2) = IS_SUFFIX l1 l2"
+  sorry
+
+lemma IS_SUFFIX_REVERSE: "IS_SUFFIX (rev l1) (rev l2) = IS_PREFIX l1 l2"
+  sorry
+
+lemma IS_SUBLIST_REVERSE: "IS_SUBLIST (rev l1) (rev l2) = IS_SUBLIST l1 l2"
+  sorry
+
+lemma PREFIX_FOLDR: "PREFIX P x = foldr (%x l'. if P x then x # l' else []) x []"
+  sorry
+
+lemma PREFIX: "(ALL x::'a => bool. PREFIX x [] = []) &
+(ALL (x::'a => bool) (xa::'a) xb::'a list.
+    PREFIX x (xa # xb) = (if x xa then xa # PREFIX x xb else []))"
+  sorry
+
+lemma IS_PREFIX_PREFIX: "IS_PREFIX l (PREFIX P l)"
+  sorry
+
+lemma LENGTH_SCANL: "length (SCANL (f::'b => 'a => 'b) (e::'b) (l::'a list)) = Suc (length l)"
+  sorry
+
+lemma LENGTH_SCANR: "length (SCANR (f::'a => 'b => 'b) (e::'b) (l::'a list)) = Suc (length l)"
+  sorry
+
+lemma COMM_MONOID_FOLDL: "[| COMM x; MONOID x xa |] ==> foldl x e l = x e (foldl x xa l)"
+  sorry
+
+lemma COMM_MONOID_FOLDR: "[| COMM x; MONOID x xa |] ==> foldr x l e = x e (foldr x l xa)"
+  sorry
+
+lemma FCOMM_FOLDR_APPEND: "[| FCOMM x xa; LEFT_ID x xb |]
+==> foldr xa (l1 @ l2) xb = x (foldr xa l1 xb) (foldr xa l2 xb)"
+  sorry
+
+lemma FCOMM_FOLDL_APPEND: "[| FCOMM x xa; RIGHT_ID xa xb |]
+==> foldl x xb (l1 @ l2) = xa (foldl x xb l1) (foldl x xb l2)"
+  sorry
+
+lemma FOLDL_SINGLE: "foldl x xa [xb] = x xa xb"
+  sorry
+
+lemma FOLDR_SINGLE: "foldr (x::'a => 'b => 'b) [xb::'a] (xa::'b) = x xb xa"
+  sorry
+
+lemma FOLDR_CONS_NIL: "foldr op # l [] = l"
+  sorry
+
+lemma FOLDL_SNOC_NIL: "foldl (%xs x. SNOC x xs) [] l = l"
+  sorry
+
+lemma FOLDR_REVERSE: "foldr (x::'a => 'b => 'b) (rev (xb::'a list)) (xa::'b) =
+foldl (%(xa::'b) y::'a. x y xa) xa xb"
+  sorry
+
+lemma FOLDL_REVERSE: "foldl x xa (rev xb) = foldr (%xa y. x y xa) xb xa"
+  sorry
+
+lemma FOLDR_MAP: "foldr (f::'a => 'a => 'a) (map (g::'b => 'a) (l::'b list)) (e::'a) =
+foldr (%x::'b. f (g x)) l e"
+  sorry
+
+lemma ALL_EL_FOLDR: "list_all P l = foldr (%x. op & (P x)) l True"
+  sorry
+
+lemma ALL_EL_FOLDL: "list_all P l = foldl (%l' x. l' & P x) True l"
+  sorry
+
+lemma SOME_EL_FOLDR: "list_ex P l = foldr (%x. op | (P x)) l False"
+  sorry
+
+lemma SOME_EL_FOLDL: "list_ex P l = foldl (%l' x. l' | P x) False l"
+  sorry
+
+lemma ALL_EL_FOLDR_MAP: "list_all x xa = foldr op & (map x xa) True"
+  sorry
+
+lemma ALL_EL_FOLDL_MAP: "list_all x xa = foldl op & True (map x xa)"
+  sorry
+
+lemma SOME_EL_FOLDR_MAP: "list_ex x xa = foldr op | (map x xa) False"
+  sorry
+
+lemma SOME_EL_FOLDL_MAP: "list_ex x xa = foldl op | False (map x xa)"
+  sorry
+
+lemma FOLDR_FILTER: "foldr (f::'a => 'a => 'a) (filter (P::'a => bool) (l::'a list)) (e::'a) =
+foldr (%(x::'a) y::'a. if P x then f x y else y) l e"
+  sorry
+
+lemma FOLDL_FILTER: "foldl (f::'a => 'a => 'a) (e::'a) (filter (P::'a => bool) (l::'a list)) =
+foldl (%(x::'a) y::'a. if P y then f x y else x) e l"
+  sorry
+
+lemma ASSOC_FOLDR_FLAT: "[| ASSOC f; LEFT_ID f e |]
+==> foldr f (concat l) e = foldr f (map (FOLDR f e) l) e"
+  sorry
+
+lemma ASSOC_FOLDL_FLAT: "[| ASSOC f; RIGHT_ID f e |]
+==> foldl f e (concat l) = foldl f e (map (foldl f e) l)"
+  sorry
+
+lemma SOME_EL_MAP: "list_ex (P::'b => bool) (map (f::'a => 'b) (l::'a list)) = list_ex (P o f) l"
+  sorry
+
+lemma SOME_EL_DISJ: "list_ex (%x. P x | Q x) l = (list_ex P l | list_ex Q l)"
+  sorry
+
+lemma IS_EL_FOLDR: "List.member xa x = foldr (%xa. op | (x = xa)) xa False"
+  sorry
+
+lemma IS_EL_FOLDL: "List.member xa x = foldl (%l' xa. l' | x = xa) False xa"
+  sorry
+
+lemma NULL_FOLDR: "List.null l = foldr (%x l'. False) l True"
+  sorry
+
+lemma NULL_FOLDL: "List.null l = foldl (%x l'. False) True l"
+  sorry
+
+lemma SEG_LENGTH_ID: "SEG (length l) 0 l = l"
+  sorry
+
+lemma SEG_SUC_CONS: "SEG m (Suc n) (x # l) = SEG m n l"
+  sorry
+
+lemma SEG_0_SNOC: "m <= length l ==> SEG m 0 (SNOC x l) = SEG m 0 l"
+  sorry
+
+lemma BUTLASTN_SEG: "n <= length l ==> BUTLASTN n l = SEG (length l - n) 0 l"
+  sorry
+
+lemma LASTN_CONS: "n <= length l ==> LASTN n (x # l) = LASTN n l"
+  sorry
+
+lemma LENGTH_LASTN: "n <= length l ==> length (LASTN n l) = n"
+  sorry
+
+lemma LASTN_LENGTH_ID: "LASTN (length l) l = l"
+  sorry
+
+lemma LASTN_LASTN: "[| m <= length l; n <= m |] ==> LASTN n (LASTN m l) = LASTN n l"
+  sorry
+
+lemma FIRSTN_LENGTH_ID: "FIRSTN (length l) l = l"
+  sorry
+
+lemma FIRSTN_SNOC: "n <= length l ==> FIRSTN n (SNOC x l) = FIRSTN n l"
+  sorry
+
+lemma BUTLASTN_LENGTH_NIL: "BUTLASTN (length l) l = []"
+  sorry
+
+lemma BUTLASTN_SUC_BUTLAST: "n < length l ==> BUTLASTN (Suc n) l = BUTLASTN n (butlast l)"
+  sorry
+
+lemma BUTLASTN_BUTLAST: "n < length l ==> BUTLASTN n (butlast l) = butlast (BUTLASTN n l)"
+  sorry
+
+lemma LENGTH_BUTLASTN: "n <= length l ==> length (BUTLASTN n l) = length l - n"
+  sorry
+
+lemma BUTLASTN_BUTLASTN: "n + m <= length l ==> BUTLASTN n (BUTLASTN m l) = BUTLASTN (n + m) l"
+  sorry
+
+lemma APPEND_BUTLASTN_LASTN: "n <= length l ==> BUTLASTN n l @ LASTN n l = l"
+  sorry
+
+lemma APPEND_FIRSTN_LASTN: "m + n = length l ==> FIRSTN n l @ LASTN m l = l"
+  sorry
+
+lemma BUTLASTN_APPEND2: "n <= length l2 ==> BUTLASTN n (l1 @ l2) = l1 @ BUTLASTN n l2"
+  sorry
+
+lemma BUTLASTN_LENGTH_APPEND: "BUTLASTN (length l2) (l1 @ l2) = l1"
+  sorry
+
+lemma LASTN_LENGTH_APPEND: "LASTN (length l2) (l1 @ l2) = l2"
+  sorry
+
+lemma BUTLASTN_CONS: "n <= length l ==> BUTLASTN n (x # l) = x # BUTLASTN n l"
+  sorry
+
+lemma BUTLASTN_LENGTH_CONS: "BUTLASTN (length l) (x # l) = [x]"
+  sorry
+
+lemma LAST_LASTN_LAST: "[| n <= length l; 0 < n |] ==> last (LASTN n l) = last l"
+  sorry
+
+lemma BUTLASTN_LASTN_NIL: "n <= length l ==> BUTLASTN n (LASTN n l) = []"
+  sorry
+
+lemma LASTN_BUTLASTN: "n + m <= length l ==> LASTN n (BUTLASTN m l) = BUTLASTN m (LASTN (n + m) l)"
+  sorry
+
+lemma BUTLASTN_LASTN: "m <= n & n <= length l
+==> BUTLASTN m (LASTN n l) = LASTN (n - m) (BUTLASTN m l)"
+  sorry
+
+lemma LASTN_1: "l ~= [] ==> LASTN 1 l = [last l]"
+  sorry
+
+lemma BUTLASTN_1: "l ~= [] ==> BUTLASTN 1 l = butlast l"
+  sorry
+
+lemma BUTLASTN_APPEND1: "length l2 <= n ==> BUTLASTN n (l1 @ l2) = BUTLASTN (n - length l2) l1"
+  sorry
+
+lemma LASTN_APPEND2: "n <= length l2 ==> LASTN n (l1 @ l2) = LASTN n l2"
+  sorry
+
+lemma LASTN_APPEND1: "length l2 <= n ==> LASTN n (l1 @ l2) = LASTN (n - length l2) l1 @ l2"
+  sorry
+
+lemma LASTN_MAP: "n <= length l ==> LASTN n (map f l) = map f (LASTN n l)"
+  sorry
+
+lemma BUTLASTN_MAP: "n <= length l ==> BUTLASTN n (map f l) = map f (BUTLASTN n l)"
+  sorry
+
+lemma ALL_EL_LASTN: "[| list_all P l; m <= length l |] ==> list_all P (LASTN m l)"
+  sorry
+
+lemma ALL_EL_BUTLASTN: "[| list_all P l; m <= length l |] ==> list_all P (BUTLASTN m l)"
+  sorry
+
+lemma LENGTH_FIRSTN: "n <= length l ==> length (FIRSTN n l) = n"
+  sorry
+
+lemma FIRSTN_FIRSTN: "[| m <= length l; n <= m |] ==> FIRSTN n (FIRSTN m l) = FIRSTN n l"
+  sorry
+
+lemma LENGTH_BUTFIRSTN: "n <= length l ==> length (BUTFIRSTN n l) = length l - n"
+  sorry
+
+lemma BUTFIRSTN_LENGTH_NIL: "BUTFIRSTN (length l) l = []"
+  sorry
+
+lemma BUTFIRSTN_APPEND1: "n <= length l1 ==> BUTFIRSTN n (l1 @ l2) = BUTFIRSTN n l1 @ l2"
+  sorry
+
+lemma BUTFIRSTN_APPEND2: "length l1 <= n ==> BUTFIRSTN n (l1 @ l2) = BUTFIRSTN (n - length l1) l2"
+  sorry
+
+lemma BUTFIRSTN_BUTFIRSTN: "n + m <= length l ==> BUTFIRSTN n (BUTFIRSTN m l) = BUTFIRSTN (n + m) l"
+  sorry
+
+lemma APPEND_FIRSTN_BUTFIRSTN: "n <= length l ==> FIRSTN n l @ BUTFIRSTN n l = l"
+  sorry
+
+lemma LASTN_SEG: "n <= length l ==> LASTN n l = SEG n (length l - n) l"
+  sorry
+
+lemma FIRSTN_SEG: "n <= length l ==> FIRSTN n l = SEG n 0 l"
+  sorry
+
+lemma BUTFIRSTN_SEG: "n <= length l ==> BUTFIRSTN n l = SEG (length l - n) n l"
+  sorry
+
+lemma BUTFIRSTN_SNOC: "n <= length l ==> BUTFIRSTN n (SNOC x l) = SNOC x (BUTFIRSTN n l)"
+  sorry
+
+lemma APPEND_BUTLASTN_BUTFIRSTN: "m + n = length l ==> BUTLASTN m l @ BUTFIRSTN n l = l"
+  sorry
+
+lemma SEG_SEG: "n1 + m1 <= length l & n2 + m2 <= n1
+==> SEG n2 m2 (SEG n1 m1 l) = SEG n2 (m1 + m2) l"
+  sorry
+
+lemma SEG_APPEND1: "n + m <= length l1 ==> SEG n m (l1 @ l2) = SEG n m l1"
+  sorry
+
+lemma SEG_APPEND2: "length l1 <= m & n <= length l2
+==> SEG n m (l1 @ l2) = SEG n (m - length l1) l2"
+  sorry
+
+lemma SEG_FIRSTN_BUTFISTN: "n + m <= length l ==> SEG n m l = FIRSTN n (BUTFIRSTN m l)"
+  sorry
+
+lemma SEG_APPEND: "m < length l1 & length l1 <= n + m & n + m <= length l1 + length l2
+==> SEG n m (l1 @ l2) =
+    SEG (length l1 - m) m l1 @ SEG (n + m - length l1) 0 l2"
+  sorry
+
+lemma SEG_LENGTH_SNOC: "SEG 1 (length x) (SNOC xa x) = [xa]"
+  sorry
+
+lemma SEG_SNOC: "n + m <= length l ==> SEG n m (SNOC x l) = SEG n m l"
+  sorry
+
+lemma ELL_SEG: "n < length l ==> ELL n l = hd (SEG 1 (PRE (length l - n)) l)"
+  sorry
+
+lemma SNOC_FOLDR: "SNOC x l = foldr op # l [x]"
+  sorry
+
+lemma IS_EL_FOLDR_MAP: "List.member xa x = foldr op | (map (op = x) xa) False"
+  sorry
+
+lemma IS_EL_FOLDL_MAP: "List.member xa x = foldl op | False (map (op = x) xa)"
+  sorry
+
+lemma FILTER_FILTER: "filter P (filter Q l) = [x<-l. P x & Q x]"
+  sorry
+
+lemma FCOMM_FOLDR_FLAT: "[| FCOMM g f; LEFT_ID g e |]
+==> foldr f (concat l) e = foldr g (map (FOLDR f e) l) e"
+  sorry
+
+lemma FCOMM_FOLDL_FLAT: "[| FCOMM f g; RIGHT_ID g e |]
+==> foldl f e (concat l) = foldl g e (map (foldl f e) l)"
+  sorry
+
+lemma FOLDR_MAP_REVERSE: "(!!(a::'a) (b::'a) c::'a. (f::'a => 'a => 'a) a (f b c) = f b (f a c))
+==> foldr f (map (g::'b => 'a) (rev (l::'b list))) (e::'a) =
+    foldr f (map g l) e"
+  sorry
+
+lemma FOLDR_FILTER_REVERSE: "(!!(a::'a) (b::'a) c::'a. (f::'a => 'a => 'a) a (f b c) = f b (f a c))
+==> foldr f (filter (P::'a => bool) (rev (l::'a list))) (e::'a) =
+    foldr f (filter P l) e"
+  sorry
+
+lemma COMM_ASSOC_FOLDR_REVERSE: "[| COMM f; ASSOC f |] ==> foldr f (rev l) e = foldr f l e"
+  sorry
+
+lemma COMM_ASSOC_FOLDL_REVERSE: "[| COMM f; ASSOC f |] ==> foldl f e (rev l) = foldl f e l"
+  sorry
+
+lemma ELL_LAST: "~ List.null l ==> ELL 0 l = last l"
+  sorry
+
+lemma ELL_0_SNOC: "ELL 0 (SNOC x l) = x"
+  sorry
+
+lemma ELL_SNOC: "0 < n ==> ELL n (SNOC x l) = ELL (PRE n) l"
+  sorry
+
+lemma ELL_SUC_SNOC: "ELL (Suc n) (SNOC x xa) = ELL n xa"
+  sorry
+
+lemma ELL_CONS: "n < length l ==> ELL n (x # l) = ELL n l"
+  sorry
+
+lemma ELL_LENGTH_CONS: "ELL (length l) (x # l) = x"
+  sorry
+
+lemma ELL_LENGTH_SNOC: "ELL (length l) (SNOC x l) = (if List.null l then x else hd l)"
+  sorry
+
+lemma ELL_APPEND2: "n < length l2 ==> ELL n (l1 @ l2) = ELL n l2"
+  sorry
+
+lemma ELL_APPEND1: "length l2 <= n ==> ELL n (l1 @ l2) = ELL (n - length l2) l1"
+  sorry
+
+lemma ELL_PRE_LENGTH: "l ~= [] ==> ELL (PRE (length l)) l = hd l"
+  sorry
+
+lemma EL_LENGTH_SNOC: "EL (length l) (SNOC x l) = x"
+  sorry
+
+lemma EL_PRE_LENGTH: "l ~= [] ==> EL (PRE (length l)) l = last l"
+  sorry
+
+lemma EL_SNOC: "n < length l ==> EL n (SNOC x l) = EL n l"
+  sorry
+
+lemma EL_ELL: "n < length l ==> EL n l = ELL (PRE (length l - n)) l"
+  sorry
+
+lemma EL_LENGTH_APPEND: "~ List.null l2 ==> EL (length l1) (l1 @ l2) = hd l2"
+  sorry
+
+lemma ELL_EL: "n < length l ==> ELL n l = EL (PRE (length l - n)) l"
+  sorry
+
+lemma ELL_MAP: "n < length l ==> ELL n (map f l) = f (ELL n l)"
+  sorry
+
+lemma LENGTH_BUTLAST: "l ~= [] ==> length (butlast l) = PRE (length l)"
+  sorry
+
+lemma BUTFIRSTN_LENGTH_APPEND: "BUTFIRSTN (length l1) (l1 @ l2) = l2"
+  sorry
+
+lemma FIRSTN_APPEND1: "n <= length l1 ==> FIRSTN n (l1 @ l2) = FIRSTN n l1"
+  sorry
+
+lemma FIRSTN_APPEND2: "length l1 <= n ==> FIRSTN n (l1 @ l2) = l1 @ FIRSTN (n - length l1) l2"
+  sorry
+
+lemma FIRSTN_LENGTH_APPEND: "FIRSTN (length l1) (l1 @ l2) = l1"
+  sorry
+
+lemma REVERSE_FLAT: "rev (concat l) = concat (rev (map rev l))"
+  sorry
+
+lemma MAP_FILTER: "(!!x. P (f x) = P x) ==> map f (filter P l) = filter P (map f l)"
+  sorry
+
+lemma FLAT_REVERSE: "concat (rev l) = rev (concat (map rev l))"
+  sorry
+
+lemma FLAT_FLAT: "concat (concat l) = concat (map concat l)"
+  sorry
+
+lemma ALL_EL_SEG: "[| list_all P l; m + k <= length l |] ==> list_all P (SEG m k l)"
+  sorry
+
+lemma ALL_EL_FIRSTN: "[| list_all P l; m <= length l |] ==> list_all P (FIRSTN m l)"
+  sorry
+
+lemma ALL_EL_BUTFIRSTN: "[| list_all P l; m <= length l |] ==> list_all P (BUTFIRSTN m l)"
+  sorry
+
+lemma SOME_EL_SEG: "[| m + k <= length l; list_ex P (SEG m k l) |] ==> list_ex P l"
+  sorry
+
+lemma SOME_EL_FIRSTN: "[| m <= length l; list_ex P (FIRSTN m l) |] ==> list_ex P l"
+  sorry
+
+lemma SOME_EL_BUTFIRSTN: "[| m <= length l; list_ex P (BUTFIRSTN m l) |] ==> list_ex P l"
+  sorry
+
+lemma SOME_EL_LASTN: "[| m <= length l; list_ex P (LASTN m l) |] ==> list_ex P l"
+  sorry
+
+lemma SOME_EL_BUTLASTN: "[| m <= length l; list_ex P (BUTLASTN m l) |] ==> list_ex P l"
+  sorry
+
+lemma IS_EL_REVERSE: "List.member (rev l) x = List.member l x"
+  sorry
+
+lemma IS_EL_FILTER: "P x ==> List.member (filter P l) x = List.member l x"
+  sorry
+
+lemma IS_EL_SEG: "[| n + m <= length l; List.member (SEG n m l) x |] ==> List.member l x"
+  sorry
+
+lemma IS_EL_SOME_EL: "List.member l x = list_ex (op = x) l"
+  sorry
+
+lemma IS_EL_FIRSTN: "[| x <= length xa; List.member (FIRSTN x xa) xb |] ==> List.member xa xb"
+  sorry
+
+lemma IS_EL_BUTFIRSTN: "[| x <= length xa; List.member (BUTFIRSTN x xa) xb |] ==> List.member xa xb"
+  sorry
+
+lemma IS_EL_BUTLASTN: "[| x <= length xa; List.member (BUTLASTN x xa) xb |] ==> List.member xa xb"
+  sorry
+
+lemma IS_EL_LASTN: "[| x <= length xa; List.member (LASTN x xa) xb |] ==> List.member xa xb"
+  sorry
+
+lemma ZIP_SNOC: "length l1 = length l2
+==> zip (SNOC x1 l1) (SNOC x2 l2) = SNOC (x1, x2) (zip l1 l2)"
+  sorry
+
+lemma UNZIP_SNOC: "unzip (SNOC x l) =
+(SNOC (fst x) (fst (unzip l)), SNOC (snd x) (snd (unzip l)))"
+  sorry
+
+lemma LENGTH_UNZIP_FST: "length (UNZIP_FST x) = length x"
+  sorry
+
+lemma LENGTH_UNZIP_SND: "length (UNZIP_SND (x::('a * 'b) list)) = length x"
+  sorry
+
+lemma SUM_APPEND: "Compatibility.sum (l1 @ l2) = Compatibility.sum l1 + Compatibility.sum l2"
+  sorry
+
+lemma SUM_REVERSE: "Compatibility.sum (rev l) = Compatibility.sum l"
+  sorry
+
+lemma SUM_FLAT: "Compatibility.sum (concat l) = Compatibility.sum (map Compatibility.sum l)"
+  sorry
+
+lemma EL_APPEND1: "n < length l1 ==> EL n (l1 @ l2) = EL n l1"
+  sorry
+
+lemma EL_APPEND2: "length l1 <= n ==> EL n (l1 @ l2) = EL (n - length l1) l2"
+  sorry
+
+lemma EL_MAP: "n < length l ==> EL n (map f l) = f (EL n l)"
+  sorry
+
+lemma EL_CONS: "0 < n ==> EL n (x # l) = EL (PRE n) l"
+  sorry
+
+lemma EL_SEG: "n < length l ==> EL n l = hd (SEG 1 n l)"
+  sorry
+
+lemma EL_IS_EL: "n < length l ==> List.member l (EL n l)"
+  sorry
+
+lemma TL_SNOC: "tl (SNOC x l) = (if List.null l then [] else SNOC x (tl l))"
+  sorry
+
+lemma EL_REVERSE: "n < length l ==> EL n (rev l) = EL (PRE (length l - n)) l"
+  sorry
+
+lemma EL_REVERSE_ELL: "n < length l ==> EL n (rev l) = ELL n l"
+  sorry
+
+lemma ELL_LENGTH_APPEND: "~ List.null l1 ==> ELL (length l2) (l1 @ l2) = last l1"
+  sorry
+
+lemma ELL_IS_EL: "n < length l ==> List.member l (ELL n l)"
+  sorry
+
+lemma ELL_REVERSE: "n < length l ==> ELL n (rev l) = ELL (PRE (length l - n)) l"
+  sorry
+
+lemma ELL_REVERSE_EL: "n < length l ==> ELL n (rev l) = EL n l"
+  sorry
+
+lemma FIRSTN_BUTLASTN: "n <= length l ==> FIRSTN n l = BUTLASTN (length l - n) l"
+  sorry
+
+lemma BUTLASTN_FIRSTN: "n <= length l ==> BUTLASTN n l = FIRSTN (length l - n) l"
+  sorry
+
+lemma LASTN_BUTFIRSTN: "n <= length l ==> LASTN n l = BUTFIRSTN (length l - n) l"
+  sorry
+
+lemma BUTFIRSTN_LASTN: "n <= length l ==> BUTFIRSTN n l = LASTN (length l - n) l"
+  sorry
+
+lemma SEG_LASTN_BUTLASTN: "n + m <= length l ==> SEG n m l = LASTN n (BUTLASTN (length l - (n + m)) l)"
+  sorry
+
+lemma BUTFIRSTN_REVERSE: "n <= length l ==> BUTFIRSTN n (rev l) = rev (BUTLASTN n l)"
+  sorry
+
+lemma BUTLASTN_REVERSE: "n <= length l ==> BUTLASTN n (rev l) = rev (BUTFIRSTN n l)"
+  sorry
+
+lemma LASTN_REVERSE: "n <= length l ==> LASTN n (rev l) = rev (FIRSTN n l)"
+  sorry
+
+lemma FIRSTN_REVERSE: "n <= length l ==> FIRSTN n (rev l) = rev (LASTN n l)"
+  sorry
+
+lemma SEG_REVERSE: "n + m <= length l ==> SEG n m (rev l) = rev (SEG n (length l - (n + m)) l)"
+  sorry
+
+lemma LENGTH_GENLIST: "length (GENLIST f n) = n"
+  sorry
+
+lemma LENGTH_REPLICATE: "length (REPLICATE n x) = n"
+  sorry
+
+lemma IS_EL_REPLICATE: "0 < n ==> List.member (REPLICATE n x) x"
+  sorry
+
+lemma ALL_EL_REPLICATE: "list_all (op = x) (REPLICATE n x)"
+  sorry
+
+lemma AND_EL_FOLDL: "AND_EL l = foldl op & True l"
+  sorry
+
+lemma AND_EL_FOLDR: "AND_EL l = foldr op & l True"
+  sorry
+
+lemma OR_EL_FOLDL: "OR_EL l = foldl op | False l"
+  sorry
+
+lemma OR_EL_FOLDR: "OR_EL l = foldr op | l False"
+  sorry
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" state_transformer
+
+definition
+  UNIT :: "'b => 'a => 'b * 'a"  where
+  "(op ==::('b::type => 'a::type => 'b::type * 'a::type)
+        => ('b::type => 'a::type => 'b::type * 'a::type) => prop)
+ (UNIT::'b::type => 'a::type => 'b::type * 'a::type)
+ (Pair::'b::type => 'a::type => 'b::type * 'a::type)"
+
+lemma UNIT_DEF: "UNIT x = Pair x"
+  sorry
+
+definition
+  BIND :: "('a => 'b * 'a) => ('b => 'a => 'c * 'a) => 'a => 'c * 'a"  where
+  "BIND == %g f. (%(x, y). f x y) o g"
+
+lemma BIND_DEF: "BIND (g::'a => 'b * 'a) (f::'b => 'a => 'c * 'a) =
+(%(x::'b, y::'a). f x y) o g"
+  sorry
+
+definition
+  MMAP :: "('c => 'b) => ('a => 'c * 'a) => 'a => 'b * 'a"  where
+  "MMAP == %(f::'c => 'b) m::'a => 'c * 'a. BIND m (UNIT o f)"
+
+lemma MMAP_DEF: "MMAP f m = BIND m (UNIT o f)"
+  sorry
+
+definition
+  JOIN :: "('a => ('a => 'b * 'a) * 'a) => 'a => 'b * 'a"  where
+  "JOIN == %z. BIND z I"
+
+lemma JOIN_DEF: "JOIN z = BIND z I"
+  sorry
+
+lemma BIND_LEFT_UNIT: "BIND (UNIT (x::'a)) (k::'a => 'b => 'c * 'b) = k x"
+  sorry
+
+lemma UNIT_UNCURRY: "prod_case UNIT x = x"
+  sorry
+
+lemma BIND_RIGHT_UNIT: "BIND k UNIT = k"
+  sorry
+
+lemma BIND_ASSOC: "BIND (x::'a => 'b * 'a)
+ (%a::'b. BIND ((xa::'b => 'a => 'c * 'a) a) (xb::'c => 'a => 'd * 'a)) =
+BIND (BIND x xa) xb"
+  sorry
+
+lemma MMAP_ID: "MMAP I = I"
+  sorry
+
+lemma MMAP_COMP: "MMAP ((f::'c => 'd) o (g::'b => 'c)) = MMAP f o MMAP g"
+  sorry
+
+lemma MMAP_UNIT: "MMAP (f::'b => 'c) o UNIT = UNIT o f"
+  sorry
+
+lemma MMAP_JOIN: "MMAP f o JOIN = JOIN o MMAP (MMAP f)"
+  sorry
+
+lemma JOIN_UNIT: "JOIN o UNIT = I"
+  sorry
+
+lemma JOIN_MMAP_UNIT: "JOIN o MMAP UNIT = I"
+  sorry
+
+lemma JOIN_MAP_JOIN: "JOIN o MMAP JOIN = JOIN o JOIN"
+  sorry
+
+lemma JOIN_MAP: "BIND (x::'a => 'b * 'a) (xa::'b => 'a => 'c * 'a) = JOIN (MMAP xa x)"
+  sorry
+
+lemma FST_o_UNIT: "fst o UNIT (x::'a) = K x"
+  sorry
+
+lemma SND_o_UNIT: "snd o UNIT (x::'a) = I"
+  sorry
+
+lemma FST_o_MMAP: "fst o MMAP (x::'a => 'b) (xa::'c => 'a * 'c) = x o (fst o xa)"
+  sorry
+
+;end_setup
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/HOL4Prob.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,1594 @@
+(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
+
+theory HOL4Prob imports HOL4Real begin
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob_extra
+
+lemma BOOL_BOOL_CASES_THM: "f = (%b. False) | f = (%b. True) | f = (%b. b) | f = Not"
+  by (import prob_extra BOOL_BOOL_CASES_THM)
+
+lemma EVEN_ODD_BASIC: "EVEN 0 & ~ EVEN 1 & EVEN 2 & ~ ODD 0 & ODD 1 & ~ ODD 2"
+  by (import prob_extra EVEN_ODD_BASIC)
+
+lemma EVEN_ODD_EXISTS_EQ: "EVEN n = (EX m. n = 2 * m) & ODD n = (EX m. n = Suc (2 * m))"
+  by (import prob_extra EVEN_ODD_EXISTS_EQ)
+
+lemma DIV_THEN_MULT: "Suc q * (p div Suc q) <= p"
+  by (import prob_extra DIV_THEN_MULT)
+
+lemma DIV_TWO_UNIQUE: "(n::nat) = (2::nat) * (q::nat) + (r::nat) & (r = (0::nat) | r = (1::nat))
+==> q = n div (2::nat) & r = n mod (2::nat)"
+  by (import prob_extra DIV_TWO_UNIQUE)
+
+lemma DIVISION_TWO: "(n::nat) = (2::nat) * (n div (2::nat)) + n mod (2::nat) &
+(n mod (2::nat) = (0::nat) | n mod (2::nat) = (1::nat))"
+  by (import prob_extra DIVISION_TWO)
+
+lemma DIV_TWO: "(n::nat) = (2::nat) * (n div (2::nat)) + n mod (2::nat)"
+  by (import prob_extra DIV_TWO)
+
+lemma MOD_TWO: "n mod 2 = (if EVEN n then 0 else 1)"
+  by (import prob_extra MOD_TWO)
+
+lemma DIV_TWO_BASIC: "(0::nat) div (2::nat) = (0::nat) &
+(1::nat) div (2::nat) = (0::nat) & (2::nat) div (2::nat) = (1::nat)"
+  by (import prob_extra DIV_TWO_BASIC)
+
+lemma DIV_TWO_MONO: "(m::nat) div (2::nat) < (n::nat) div (2::nat) ==> m < n"
+  by (import prob_extra DIV_TWO_MONO)
+
+lemma DIV_TWO_MONO_EVEN: "EVEN n ==> (m div 2 < n div 2) = (m < n)"
+  by (import prob_extra DIV_TWO_MONO_EVEN)
+
+lemma DIV_TWO_CANCEL: "2 * n div 2 = n & Suc (2 * n) div 2 = n"
+  by (import prob_extra DIV_TWO_CANCEL)
+
+lemma EXP_DIV_TWO: "(2::nat) ^ Suc (n::nat) div (2::nat) = (2::nat) ^ n"
+  by (import prob_extra EXP_DIV_TWO)
+
+lemma EVEN_EXP_TWO: "EVEN (2 ^ n) = (n ~= 0)"
+  by (import prob_extra EVEN_EXP_TWO)
+
+lemma DIV_TWO_EXP: "((k::nat) div (2::nat) < (2::nat) ^ (n::nat)) = (k < (2::nat) ^ Suc n)"
+  by (import prob_extra DIV_TWO_EXP)
+
+consts
+  inf :: "(real => bool) => real" 
+
+defs
+  inf_primdef: "prob_extra.inf == %P. - real.sup (IMAGE uminus P)"
+
+lemma inf_def: "prob_extra.inf P = - real.sup (IMAGE uminus P)"
+  by (import prob_extra inf_def)
+
+lemma INF_DEF_ALT: "prob_extra.inf P = - real.sup (%r. P (- r))"
+  by (import prob_extra INF_DEF_ALT)
+
+lemma REAL_SUP_EXISTS_UNIQUE: "Ex (P::real => bool) & (EX z::real. ALL x::real. P x --> x <= z)
+==> EX! s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s)"
+  by (import prob_extra REAL_SUP_EXISTS_UNIQUE)
+
+lemma REAL_SUP_MAX: "P z & (ALL x. P x --> x <= z) ==> real.sup P = z"
+  by (import prob_extra REAL_SUP_MAX)
+
+lemma REAL_INF_MIN: "P z & (ALL x. P x --> z <= x) ==> prob_extra.inf P = z"
+  by (import prob_extra REAL_INF_MIN)
+
+lemma HALF_CANCEL: "(2::real) * ((1::real) / (2::real)) = (1::real)"
+  by (import prob_extra HALF_CANCEL)
+
+lemma POW_HALF_POS: "(0::real) < ((1::real) / (2::real)) ^ (n::nat)"
+  by (import prob_extra POW_HALF_POS)
+
+lemma POW_HALF_MONO: "(m::nat) <= (n::nat)
+==> ((1::real) / (2::real)) ^ n <= ((1::real) / (2::real)) ^ m"
+  by (import prob_extra POW_HALF_MONO)
+
+lemma POW_HALF_TWICE: "((1::real) / (2::real)) ^ (n::nat) =
+(2::real) * ((1::real) / (2::real)) ^ Suc n"
+  by (import prob_extra POW_HALF_TWICE)
+
+lemma X_HALF_HALF: "(1::real) / (2::real) * (x::real) + (1::real) / (2::real) * x = x"
+  by (import prob_extra X_HALF_HALF)
+
+lemma REAL_SUP_LE_X: "Ex P & (ALL r. P r --> r <= x) ==> real.sup P <= x"
+  by (import prob_extra REAL_SUP_LE_X)
+
+lemma REAL_X_LE_SUP: "Ex P & (EX z. ALL r. P r --> r <= z) & (EX r. P r & x <= r)
+==> x <= real.sup P"
+  by (import prob_extra REAL_X_LE_SUP)
+
+lemma ABS_BETWEEN_LE: "((0::real) <= (d::real) & (x::real) - d <= (y::real) & y <= x + d) =
+(abs (y - x) <= d)"
+  by (import prob_extra ABS_BETWEEN_LE)
+
+lemma ONE_MINUS_HALF: "(1::real) - (1::real) / (2::real) = (1::real) / (2::real)"
+  by (import prob_extra ONE_MINUS_HALF)
+
+lemma HALF_LT_1: "(1::real) / (2::real) < (1::real)"
+  by (import prob_extra HALF_LT_1)
+
+lemma POW_HALF_EXP: "((1::real) / (2::real)) ^ (n::nat) = inverse (real ((2::nat) ^ n))"
+  by (import prob_extra POW_HALF_EXP)
+
+lemma INV_SUC_POS: "0 < 1 / real (Suc n)"
+  by (import prob_extra INV_SUC_POS)
+
+lemma INV_SUC_MAX: "1 / real (Suc x) <= 1"
+  by (import prob_extra INV_SUC_MAX)
+
+lemma INV_SUC: "0 < 1 / real (Suc n) & 1 / real (Suc n) <= 1"
+  by (import prob_extra INV_SUC)
+
+lemma ABS_UNIT_INTERVAL: "(0::real) <= (x::real) &
+x <= (1::real) & (0::real) <= (y::real) & y <= (1::real)
+==> abs (x - y) <= (1::real)"
+  by (import prob_extra ABS_UNIT_INTERVAL)
+
+lemma MEM_NIL: "(ALL x. ~ List.member l x) = (l = [])"
+  by (import prob_extra MEM_NIL)
+
+lemma MAP_MEM: "List.member (map (f::'a => 'b) (l::'a list)) (x::'b) =
+(EX y::'a. List.member l y & x = f y)"
+  by (import prob_extra MAP_MEM)
+
+lemma MEM_NIL_MAP_CONS: "~ List.member (map (op # x) l) []"
+  by (import prob_extra MEM_NIL_MAP_CONS)
+
+lemma FILTER_TRUE: "[x<-l. True] = l"
+  by (import prob_extra FILTER_TRUE)
+
+lemma FILTER_FALSE: "[x<-l. False] = []"
+  by (import prob_extra FILTER_FALSE)
+
+lemma FILTER_MEM: "List.member (filter P l) x ==> P x"
+  by (import prob_extra FILTER_MEM)
+
+lemma MEM_FILTER: "List.member (filter P l) x ==> List.member l x"
+  by (import prob_extra MEM_FILTER)
+
+lemma FILTER_OUT_ELT: "List.member l x | [y<-l. y ~= x] = l"
+  by (import prob_extra FILTER_OUT_ELT)
+
+lemma IS_PREFIX_NIL: "IS_PREFIX x [] & IS_PREFIX [] x = (x = [])"
+  by (import prob_extra IS_PREFIX_NIL)
+
+lemma IS_PREFIX_REFL: "IS_PREFIX x x"
+  by (import prob_extra IS_PREFIX_REFL)
+
+lemma IS_PREFIX_ANTISYM: "IS_PREFIX y x & IS_PREFIX x y ==> x = y"
+  by (import prob_extra IS_PREFIX_ANTISYM)
+
+lemma IS_PREFIX_TRANS: "IS_PREFIX x y & IS_PREFIX y z ==> IS_PREFIX x z"
+  by (import prob_extra IS_PREFIX_TRANS)
+
+lemma IS_PREFIX_BUTLAST: "IS_PREFIX (x # y) (butlast (x # y))"
+  by (import prob_extra IS_PREFIX_BUTLAST)
+
+lemma IS_PREFIX_LENGTH: "IS_PREFIX y x ==> length x <= length y"
+  by (import prob_extra IS_PREFIX_LENGTH)
+
+lemma IS_PREFIX_LENGTH_ANTI: "IS_PREFIX y x & length x = length y ==> x = y"
+  by (import prob_extra IS_PREFIX_LENGTH_ANTI)
+
+lemma IS_PREFIX_SNOC: "IS_PREFIX (SNOC x y) z = (IS_PREFIX y z | z = SNOC x y)"
+  by (import prob_extra IS_PREFIX_SNOC)
+
+lemma FOLDR_MAP: "foldr (f::'b => 'c => 'c) (map (g::'a => 'b) (l::'a list)) (e::'c) =
+foldr (%x::'a. f (g x)) l e"
+  by (import prob_extra FOLDR_MAP)
+
+lemma LAST_MEM: "List.member (h # t) (last (h # t))"
+  by (import prob_extra LAST_MEM)
+
+lemma LAST_MAP_CONS: "EX x::bool list.
+   last (map (op # (b::bool)) ((h::bool list) # (t::bool list list))) =
+   b # x"
+  by (import prob_extra LAST_MAP_CONS)
+
+lemma EXISTS_LONGEST: "EX z. List.member (x # y) z &
+      (ALL w. List.member (x # y) w --> length w <= length z)"
+  by (import prob_extra EXISTS_LONGEST)
+
+lemma UNION_DEF_ALT: "pred_set.UNION s t = (%x. s x | t x)"
+  by (import prob_extra UNION_DEF_ALT)
+
+lemma INTER_UNION_RDISTRIB: "pred_set.INTER (pred_set.UNION p q) r =
+pred_set.UNION (pred_set.INTER p r) (pred_set.INTER q r)"
+  by (import prob_extra INTER_UNION_RDISTRIB)
+
+lemma SUBSET_EQ: "(x = xa) = (SUBSET x xa & SUBSET xa x)"
+  by (import prob_extra SUBSET_EQ)
+
+lemma INTER_IS_EMPTY: "(pred_set.INTER s t = EMPTY) = (ALL x. ~ s x | ~ t x)"
+  by (import prob_extra INTER_IS_EMPTY)
+
+lemma UNION_DISJOINT_SPLIT: "pred_set.UNION s t = pred_set.UNION s u &
+pred_set.INTER s t = EMPTY & pred_set.INTER s u = EMPTY
+==> t = u"
+  by (import prob_extra UNION_DISJOINT_SPLIT)
+
+lemma GSPEC_DEF_ALT: "GSPEC (f::'a => 'b * bool) = (%v::'b. EX x::'a. (v, True) = f x)"
+  by (import prob_extra GSPEC_DEF_ALT)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob_canon
+
+consts
+  alg_twin :: "bool list => bool list => bool" 
+
+defs
+  alg_twin_primdef: "alg_twin == %x y. EX l. x = SNOC True l & y = SNOC False l"
+
+lemma alg_twin_def: "alg_twin x y = (EX l. x = SNOC True l & y = SNOC False l)"
+  by (import prob_canon alg_twin_def)
+
+definition
+  alg_order_tupled :: "bool list * bool list => bool"  where
+  "alg_order_tupled ==
+WFREC (SOME R. WF R & (ALL h' h t' t. R (t, t') (h # t, h' # t')))
+ (%alg_order_tupled (v, v1).
+     case v of [] => case v1 of [] => True | _ => True
+     | v4 # v5 =>
+         case v1 of [] => False
+         | v10 # v11 =>
+             v4 = True & v10 = False |
+             v4 = v10 & alg_order_tupled (v5, v11))"
+
+lemma alg_order_tupled_primitive_def: "alg_order_tupled =
+WFREC (SOME R. WF R & (ALL h' h t' t. R (t, t') (h # t, h' # t')))
+ (%alg_order_tupled (v, v1).
+     case v of [] => case v1 of [] => True | _ => True
+     | v4 # v5 =>
+         case v1 of [] => False
+         | v10 # v11 =>
+             v4 = True & v10 = False |
+             v4 = v10 & alg_order_tupled (v5, v11))"
+  by (import prob_canon alg_order_tupled_primitive_def)
+
+consts
+  alg_order :: "bool list => bool list => bool" 
+
+defs
+  alg_order_primdef: "alg_order == %x x1. alg_order_tupled (x, x1)"
+
+lemma alg_order_curried_def: "alg_order x x1 = alg_order_tupled (x, x1)"
+  by (import prob_canon alg_order_curried_def)
+
+lemma alg_order_ind: "(ALL (x::bool) xa::bool list.
+    (P::bool list => bool list => bool) [] (x # xa)) &
+P [] [] &
+(ALL (x::bool) xa::bool list. P (x # xa) []) &
+(ALL (x::bool) (xa::bool list) (xb::bool) xc::bool list.
+    P xa xc --> P (x # xa) (xb # xc))
+==> P (x::bool list) (xa::bool list)"
+  by (import prob_canon alg_order_ind)
+
+lemma alg_order_def: "alg_order [] (v6 # v7) = True &
+alg_order [] [] = True &
+alg_order (v2 # v3) [] = False &
+alg_order (h # t) (h' # t') =
+(h = True & h' = False | h = h' & alg_order t t')"
+  by (import prob_canon alg_order_def)
+
+consts
+  alg_sorted :: "bool list list => bool" 
+
+defs
+  alg_sorted_primdef: "alg_sorted ==
+WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
+ (%alg_sorted.
+     list_case True
+      (%v2. list_case True
+             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
+
+lemma alg_sorted_primitive_def: "alg_sorted =
+WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
+ (%alg_sorted.
+     list_case True
+      (%v2. list_case True
+             (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
+  by (import prob_canon alg_sorted_primitive_def)
+
+lemma alg_sorted_ind: "(ALL (x::bool list) (y::bool list) z::bool list list.
+    (P::bool list list => bool) (y # z) --> P (x # y # z)) &
+(ALL v::bool list. P [v]) & P []
+==> P (x::bool list list)"
+  by (import prob_canon alg_sorted_ind)
+
+lemma alg_sorted_def: "alg_sorted (x # y # z) = (alg_order x y & alg_sorted (y # z)) &
+alg_sorted [v] = True & alg_sorted [] = True"
+  by (import prob_canon alg_sorted_def)
+
+consts
+  alg_prefixfree :: "bool list list => bool" 
+
+defs
+  alg_prefixfree_primdef: "alg_prefixfree ==
+WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
+ (%alg_prefixfree.
+     list_case True
+      (%v2. list_case True
+             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
+
+lemma alg_prefixfree_primitive_def: "alg_prefixfree =
+WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
+ (%alg_prefixfree.
+     list_case True
+      (%v2. list_case True
+             (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
+  by (import prob_canon alg_prefixfree_primitive_def)
+
+lemma alg_prefixfree_ind: "(ALL (x::bool list) (y::bool list) z::bool list list.
+    (P::bool list list => bool) (y # z) --> P (x # y # z)) &
+(ALL v::bool list. P [v]) & P []
+==> P (x::bool list list)"
+  by (import prob_canon alg_prefixfree_ind)
+
+lemma alg_prefixfree_def: "alg_prefixfree (x # y # z) = (~ IS_PREFIX y x & alg_prefixfree (y # z)) &
+alg_prefixfree [v] = True & alg_prefixfree [] = True"
+  by (import prob_canon alg_prefixfree_def)
+
+consts
+  alg_twinfree :: "bool list list => bool" 
+
+defs
+  alg_twinfree_primdef: "alg_twinfree ==
+WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
+ (%alg_twinfree.
+     list_case True
+      (%v2. list_case True
+             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
+
+lemma alg_twinfree_primitive_def: "alg_twinfree =
+WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
+ (%alg_twinfree.
+     list_case True
+      (%v2. list_case True
+             (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
+  by (import prob_canon alg_twinfree_primitive_def)
+
+lemma alg_twinfree_ind: "(ALL (x::bool list) (y::bool list) z::bool list list.
+    (P::bool list list => bool) (y # z) --> P (x # y # z)) &
+(ALL v::bool list. P [v]) & P []
+==> P (x::bool list list)"
+  by (import prob_canon alg_twinfree_ind)
+
+lemma alg_twinfree_def: "alg_twinfree (x # y # z) = (~ alg_twin x y & alg_twinfree (y # z)) &
+alg_twinfree [v] = True & alg_twinfree [] = True"
+  by (import prob_canon alg_twinfree_def)
+
+consts
+  alg_longest :: "bool list list => nat" 
+
+defs
+  alg_longest_primdef: "alg_longest == FOLDR (%h t. if t <= length h then length h else t) 0"
+
+lemma alg_longest_def: "alg_longest = FOLDR (%h t. if t <= length h then length h else t) 0"
+  by (import prob_canon alg_longest_def)
+
+consts
+  alg_canon_prefs :: "bool list => bool list list => bool list list" 
+
+specification (alg_canon_prefs_primdef: alg_canon_prefs) alg_canon_prefs_def: "(ALL l. alg_canon_prefs l [] = [l]) &
+(ALL l h t.
+    alg_canon_prefs l (h # t) =
+    (if IS_PREFIX h l then alg_canon_prefs l t else l # h # t))"
+  by (import prob_canon alg_canon_prefs_def)
+
+consts
+  alg_canon_find :: "bool list => bool list list => bool list list" 
+
+specification (alg_canon_find_primdef: alg_canon_find) alg_canon_find_def: "(ALL l. alg_canon_find l [] = [l]) &
+(ALL l h t.
+    alg_canon_find l (h # t) =
+    (if alg_order h l
+     then if IS_PREFIX l h then h # t else h # alg_canon_find l t
+     else alg_canon_prefs l (h # t)))"
+  by (import prob_canon alg_canon_find_def)
+
+consts
+  alg_canon1 :: "bool list list => bool list list" 
+
+defs
+  alg_canon1_primdef: "alg_canon1 == FOLDR alg_canon_find []"
+
+lemma alg_canon1_def: "alg_canon1 = FOLDR alg_canon_find []"
+  by (import prob_canon alg_canon1_def)
+
+consts
+  alg_canon_merge :: "bool list => bool list list => bool list list" 
+
+specification (alg_canon_merge_primdef: alg_canon_merge) alg_canon_merge_def: "(ALL l. alg_canon_merge l [] = [l]) &
+(ALL l h t.
+    alg_canon_merge l (h # t) =
+    (if alg_twin l h then alg_canon_merge (butlast h) t else l # h # t))"
+  by (import prob_canon alg_canon_merge_def)
+
+consts
+  alg_canon2 :: "bool list list => bool list list" 
+
+defs
+  alg_canon2_primdef: "alg_canon2 == FOLDR alg_canon_merge []"
+
+lemma alg_canon2_def: "alg_canon2 = FOLDR alg_canon_merge []"
+  by (import prob_canon alg_canon2_def)
+
+consts
+  alg_canon :: "bool list list => bool list list" 
+
+defs
+  alg_canon_primdef: "alg_canon == %l. alg_canon2 (alg_canon1 l)"
+
+lemma alg_canon_def: "alg_canon l = alg_canon2 (alg_canon1 l)"
+  by (import prob_canon alg_canon_def)
+
+consts
+  algebra_canon :: "bool list list => bool" 
+
+defs
+  algebra_canon_primdef: "algebra_canon == %l. alg_canon l = l"
+
+lemma algebra_canon_def: "algebra_canon l = (alg_canon l = l)"
+  by (import prob_canon algebra_canon_def)
+
+lemma ALG_TWIN_NIL: "~ alg_twin l [] & ~ alg_twin [] l"
+  by (import prob_canon ALG_TWIN_NIL)
+
+lemma ALG_TWIN_SING: "alg_twin [x] l = (x = True & l = [False]) &
+alg_twin l [x] = (l = [True] & x = False)"
+  by (import prob_canon ALG_TWIN_SING)
+
+lemma ALG_TWIN_CONS: "alg_twin (x # y # z) (h # t) = (x = h & alg_twin (y # z) t) &
+alg_twin (h # t) (x # y # z) = (x = h & alg_twin t (y # z))"
+  by (import prob_canon ALG_TWIN_CONS)
+
+lemma ALG_TWIN_REDUCE: "alg_twin (h # t) (h # t') = alg_twin t t'"
+  by (import prob_canon ALG_TWIN_REDUCE)
+
+lemma ALG_TWINS_PREFIX: "IS_PREFIX x l
+==> x = l | IS_PREFIX x (SNOC True l) | IS_PREFIX x (SNOC False l)"
+  by (import prob_canon ALG_TWINS_PREFIX)
+
+lemma ALG_ORDER_NIL: "alg_order [] x & alg_order x [] = (x = [])"
+  by (import prob_canon ALG_ORDER_NIL)
+
+lemma ALG_ORDER_REFL: "alg_order x x"
+  by (import prob_canon ALG_ORDER_REFL)
+
+lemma ALG_ORDER_ANTISYM: "alg_order x y & alg_order y x ==> x = y"
+  by (import prob_canon ALG_ORDER_ANTISYM)
+
+lemma ALG_ORDER_TRANS: "alg_order x y & alg_order y z ==> alg_order x z"
+  by (import prob_canon ALG_ORDER_TRANS)
+
+lemma ALG_ORDER_TOTAL: "alg_order x y | alg_order y x"
+  by (import prob_canon ALG_ORDER_TOTAL)
+
+lemma ALG_ORDER_PREFIX: "IS_PREFIX y x ==> alg_order x y"
+  by (import prob_canon ALG_ORDER_PREFIX)
+
+lemma ALG_ORDER_PREFIX_ANTI: "alg_order x y & IS_PREFIX x y ==> x = y"
+  by (import prob_canon ALG_ORDER_PREFIX_ANTI)
+
+lemma ALG_ORDER_PREFIX_MONO: "alg_order x y & alg_order y z & IS_PREFIX z x ==> IS_PREFIX y x"
+  by (import prob_canon ALG_ORDER_PREFIX_MONO)
+
+lemma ALG_ORDER_PREFIX_TRANS: "alg_order x y & IS_PREFIX y z ==> alg_order x z | IS_PREFIX x z"
+  by (import prob_canon ALG_ORDER_PREFIX_TRANS)
+
+lemma ALG_ORDER_SNOC: "~ alg_order (SNOC x l) l"
+  by (import prob_canon ALG_ORDER_SNOC)
+
+lemma ALG_SORTED_MIN: "[| alg_sorted (h # t); List.member t x |] ==> alg_order h x"
+  by (import prob_canon ALG_SORTED_MIN)
+
+lemma ALG_SORTED_DEF_ALT: "alg_sorted (h # t) =
+((ALL x. List.member t x --> alg_order h x) & alg_sorted t)"
+  by (import prob_canon ALG_SORTED_DEF_ALT)
+
+lemma ALG_SORTED_TL: "alg_sorted (h # t) ==> alg_sorted t"
+  by (import prob_canon ALG_SORTED_TL)
+
+lemma ALG_SORTED_MONO: "alg_sorted (x # y # z) ==> alg_sorted (x # z)"
+  by (import prob_canon ALG_SORTED_MONO)
+
+lemma ALG_SORTED_TLS: "alg_sorted (map (op # b) l) = alg_sorted l"
+  by (import prob_canon ALG_SORTED_TLS)
+
+lemma ALG_SORTED_STEP: "alg_sorted (map (op # True) l1 @ map (op # False) l2) =
+(alg_sorted l1 & alg_sorted l2)"
+  by (import prob_canon ALG_SORTED_STEP)
+
+lemma ALG_SORTED_APPEND: "alg_sorted ((h # t) @ h' # t') =
+(alg_sorted (h # t) & alg_sorted (h' # t') & alg_order (last (h # t)) h')"
+  by (import prob_canon ALG_SORTED_APPEND)
+
+lemma ALG_SORTED_FILTER: "alg_sorted b ==> alg_sorted (filter P b)"
+  by (import prob_canon ALG_SORTED_FILTER)
+
+lemma ALG_PREFIXFREE_TL: "alg_prefixfree (h # t) ==> alg_prefixfree t"
+  by (import prob_canon ALG_PREFIXFREE_TL)
+
+lemma ALG_PREFIXFREE_MONO: "alg_sorted (x # y # z) & alg_prefixfree (x # y # z)
+==> alg_prefixfree (x # z)"
+  by (import prob_canon ALG_PREFIXFREE_MONO)
+
+lemma ALG_PREFIXFREE_ELT: "[| alg_sorted (h # t) & alg_prefixfree (h # t); List.member t x |]
+==> ~ IS_PREFIX x h & ~ IS_PREFIX h x"
+  by (import prob_canon ALG_PREFIXFREE_ELT)
+
+lemma ALG_PREFIXFREE_TLS: "alg_prefixfree (map (op # b) l) = alg_prefixfree l"
+  by (import prob_canon ALG_PREFIXFREE_TLS)
+
+lemma ALG_PREFIXFREE_STEP: "alg_prefixfree (map (op # True) l1 @ map (op # False) l2) =
+(alg_prefixfree l1 & alg_prefixfree l2)"
+  by (import prob_canon ALG_PREFIXFREE_STEP)
+
+lemma ALG_PREFIXFREE_APPEND: "alg_prefixfree ((h # t) @ h' # t') =
+(alg_prefixfree (h # t) &
+ alg_prefixfree (h' # t') & ~ IS_PREFIX h' (last (h # t)))"
+  by (import prob_canon ALG_PREFIXFREE_APPEND)
+
+lemma ALG_PREFIXFREE_FILTER: "alg_sorted b & alg_prefixfree b ==> alg_prefixfree (filter P b)"
+  by (import prob_canon ALG_PREFIXFREE_FILTER)
+
+lemma ALG_TWINFREE_TL: "alg_twinfree (h # t) ==> alg_twinfree t"
+  by (import prob_canon ALG_TWINFREE_TL)
+
+lemma ALG_TWINFREE_TLS: "alg_twinfree (map (op # b) l) = alg_twinfree l"
+  by (import prob_canon ALG_TWINFREE_TLS)
+
+lemma ALG_TWINFREE_STEP1: "alg_twinfree (map (op # True) l1 @ map (op # False) l2)
+==> alg_twinfree l1 & alg_twinfree l2"
+  by (import prob_canon ALG_TWINFREE_STEP1)
+
+lemma ALG_TWINFREE_STEP2: "(~ List.member l1 [] | ~ List.member l2 []) &
+alg_twinfree l1 & alg_twinfree l2
+==> alg_twinfree (map (op # True) l1 @ map (op # False) l2)"
+  by (import prob_canon ALG_TWINFREE_STEP2)
+
+lemma ALG_TWINFREE_STEP: "~ List.member l1 [] | ~ List.member l2 []
+==> alg_twinfree (map (op # True) l1 @ map (op # False) l2) =
+    (alg_twinfree l1 & alg_twinfree l2)"
+  by (import prob_canon ALG_TWINFREE_STEP)
+
+lemma ALG_LONGEST_HD: "length h <= alg_longest (h # t)"
+  by (import prob_canon ALG_LONGEST_HD)
+
+lemma ALG_LONGEST_TL: "alg_longest t <= alg_longest (h # t)"
+  by (import prob_canon ALG_LONGEST_TL)
+
+lemma ALG_LONGEST_TLS: "alg_longest (map (op # b) (h # t)) = Suc (alg_longest (h # t))"
+  by (import prob_canon ALG_LONGEST_TLS)
+
+lemma ALG_LONGEST_APPEND: "alg_longest l1 <= alg_longest (l1 @ l2) &
+alg_longest l2 <= alg_longest (l1 @ l2)"
+  by (import prob_canon ALG_LONGEST_APPEND)
+
+lemma ALG_CANON_PREFS_HD: "hd (alg_canon_prefs l b) = l"
+  by (import prob_canon ALG_CANON_PREFS_HD)
+
+lemma ALG_CANON_PREFS_DELETES: "List.member (alg_canon_prefs l b) x ==> List.member (l # b) x"
+  by (import prob_canon ALG_CANON_PREFS_DELETES)
+
+lemma ALG_CANON_PREFS_SORTED: "alg_sorted (l # b) ==> alg_sorted (alg_canon_prefs l b)"
+  by (import prob_canon ALG_CANON_PREFS_SORTED)
+
+lemma ALG_CANON_PREFS_PREFIXFREE: "alg_sorted b & alg_prefixfree b ==> alg_prefixfree (alg_canon_prefs l b)"
+  by (import prob_canon ALG_CANON_PREFS_PREFIXFREE)
+
+lemma ALG_CANON_PREFS_CONSTANT: "alg_prefixfree (l # b) ==> alg_canon_prefs l b = l # b"
+  by (import prob_canon ALG_CANON_PREFS_CONSTANT)
+
+lemma ALG_CANON_FIND_HD: "hd (alg_canon_find l (h # t)) = l | hd (alg_canon_find l (h # t)) = h"
+  by (import prob_canon ALG_CANON_FIND_HD)
+
+lemma ALG_CANON_FIND_DELETES: "List.member (alg_canon_find l b) x ==> List.member (l # b) x"
+  by (import prob_canon ALG_CANON_FIND_DELETES)
+
+lemma ALG_CANON_FIND_SORTED: "alg_sorted b ==> alg_sorted (alg_canon_find l b)"
+  by (import prob_canon ALG_CANON_FIND_SORTED)
+
+lemma ALG_CANON_FIND_PREFIXFREE: "alg_sorted b & alg_prefixfree b ==> alg_prefixfree (alg_canon_find l b)"
+  by (import prob_canon ALG_CANON_FIND_PREFIXFREE)
+
+lemma ALG_CANON_FIND_CONSTANT: "alg_sorted (l # b) & alg_prefixfree (l # b) ==> alg_canon_find l b = l # b"
+  by (import prob_canon ALG_CANON_FIND_CONSTANT)
+
+lemma ALG_CANON1_SORTED: "alg_sorted (alg_canon1 x)"
+  by (import prob_canon ALG_CANON1_SORTED)
+
+lemma ALG_CANON1_PREFIXFREE: "alg_prefixfree (alg_canon1 l)"
+  by (import prob_canon ALG_CANON1_PREFIXFREE)
+
+lemma ALG_CANON1_CONSTANT: "alg_sorted l & alg_prefixfree l ==> alg_canon1 l = l"
+  by (import prob_canon ALG_CANON1_CONSTANT)
+
+lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "alg_sorted (l # b) & alg_prefixfree (l # b) & alg_twinfree b
+==> alg_sorted (alg_canon_merge l b) &
+    alg_prefixfree (alg_canon_merge l b) &
+    alg_twinfree (alg_canon_merge l b)"
+  by (import prob_canon ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE)
+
+lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "[| !!x. List.member (l # b) x ==> ~ IS_PREFIX h x & ~ IS_PREFIX x h;
+   List.member (alg_canon_merge l b) x |]
+==> ~ IS_PREFIX h x & ~ IS_PREFIX x h"
+  by (import prob_canon ALG_CANON_MERGE_PREFIXFREE_PRESERVE)
+
+lemma ALG_CANON_MERGE_SHORTENS: "List.member (alg_canon_merge l b) x
+==> EX y. List.member (l # b) y & IS_PREFIX y x"
+  by (import prob_canon ALG_CANON_MERGE_SHORTENS)
+
+lemma ALG_CANON_MERGE_CONSTANT: "alg_twinfree (l # b) ==> alg_canon_merge l b = l # b"
+  by (import prob_canon ALG_CANON_MERGE_CONSTANT)
+
+lemma ALG_CANON2_PREFIXFREE_PRESERVE: "[| !!xb. List.member x xb ==> ~ IS_PREFIX xa xb & ~ IS_PREFIX xb xa;
+   List.member (alg_canon2 x) xb |]
+==> ~ IS_PREFIX xa xb & ~ IS_PREFIX xb xa"
+  by (import prob_canon ALG_CANON2_PREFIXFREE_PRESERVE)
+
+lemma ALG_CANON2_SHORTENS: "List.member (alg_canon2 x) xa ==> EX y. List.member x y & IS_PREFIX y xa"
+  by (import prob_canon ALG_CANON2_SHORTENS)
+
+lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "alg_sorted x & alg_prefixfree x
+==> alg_sorted (alg_canon2 x) &
+    alg_prefixfree (alg_canon2 x) & alg_twinfree (alg_canon2 x)"
+  by (import prob_canon ALG_CANON2_SORTED_PREFIXFREE_TWINFREE)
+
+lemma ALG_CANON2_CONSTANT: "alg_twinfree l ==> alg_canon2 l = l"
+  by (import prob_canon ALG_CANON2_CONSTANT)
+
+lemma ALG_CANON_SORTED_PREFIXFREE_TWINFREE: "alg_sorted (alg_canon l) &
+alg_prefixfree (alg_canon l) & alg_twinfree (alg_canon l)"
+  by (import prob_canon ALG_CANON_SORTED_PREFIXFREE_TWINFREE)
+
+lemma ALG_CANON_CONSTANT: "alg_sorted l & alg_prefixfree l & alg_twinfree l ==> alg_canon l = l"
+  by (import prob_canon ALG_CANON_CONSTANT)
+
+lemma ALG_CANON_IDEMPOT: "alg_canon (alg_canon l) = alg_canon l"
+  by (import prob_canon ALG_CANON_IDEMPOT)
+
+lemma ALGEBRA_CANON_DEF_ALT: "algebra_canon l = (alg_sorted l & alg_prefixfree l & alg_twinfree l)"
+  by (import prob_canon ALGEBRA_CANON_DEF_ALT)
+
+lemma ALGEBRA_CANON_BASIC: "algebra_canon [] & algebra_canon [[]] & (ALL x. algebra_canon [x])"
+  by (import prob_canon ALGEBRA_CANON_BASIC)
+
+lemma ALG_CANON_BASIC: "alg_canon [] = [] & alg_canon [[]] = [[]] & (ALL x. alg_canon [x] = [x])"
+  by (import prob_canon ALG_CANON_BASIC)
+
+lemma ALGEBRA_CANON_TL: "algebra_canon (h # t) ==> algebra_canon t"
+  by (import prob_canon ALGEBRA_CANON_TL)
+
+lemma ALGEBRA_CANON_NIL_MEM: "(algebra_canon l & List.member l []) = (l = [[]])"
+  by (import prob_canon ALGEBRA_CANON_NIL_MEM)
+
+lemma ALGEBRA_CANON_TLS: "algebra_canon (map (op # b) l) = algebra_canon l"
+  by (import prob_canon ALGEBRA_CANON_TLS)
+
+lemma ALGEBRA_CANON_STEP1: "algebra_canon (map (op # True) l1 @ map (op # False) l2)
+==> algebra_canon l1 & algebra_canon l2"
+  by (import prob_canon ALGEBRA_CANON_STEP1)
+
+lemma ALGEBRA_CANON_STEP2: "(l1 ~= [[]] | l2 ~= [[]]) & algebra_canon l1 & algebra_canon l2
+==> algebra_canon (map (op # True) l1 @ map (op # False) l2)"
+  by (import prob_canon ALGEBRA_CANON_STEP2)
+
+lemma ALGEBRA_CANON_STEP: "l1 ~= [[]] | l2 ~= [[]]
+==> algebra_canon (map (op # True) l1 @ map (op # False) l2) =
+    (algebra_canon l1 & algebra_canon l2)"
+  by (import prob_canon ALGEBRA_CANON_STEP)
+
+lemma ALGEBRA_CANON_CASES_THM: "algebra_canon l
+==> l = [] |
+    l = [[]] |
+    (EX l1 l2.
+        algebra_canon l1 &
+        algebra_canon l2 & l = map (op # True) l1 @ map (op # False) l2)"
+  by (import prob_canon ALGEBRA_CANON_CASES_THM)
+
+lemma ALGEBRA_CANON_CASES: "[| P [] &
+   P [[]] &
+   (ALL l1 l2.
+       algebra_canon l1 &
+       algebra_canon l2 &
+       algebra_canon (map (op # True) l1 @ map (op # False) l2) -->
+       P (map (op # True) l1 @ map (op # False) l2));
+   algebra_canon l |]
+==> P l"
+  by (import prob_canon ALGEBRA_CANON_CASES)
+
+lemma ALGEBRA_CANON_INDUCTION: "[| P [] &
+   P [[]] &
+   (ALL l1 l2.
+       algebra_canon l1 &
+       algebra_canon l2 &
+       P l1 &
+       P l2 & algebra_canon (map (op # True) l1 @ map (op # False) l2) -->
+       P (map (op # True) l1 @ map (op # False) l2));
+   algebra_canon l |]
+==> P l"
+  by (import prob_canon ALGEBRA_CANON_INDUCTION)
+
+lemma MEM_NIL_STEP: "~ List.member (map (op # True) l1 @ map (op # False) l2) []"
+  by (import prob_canon MEM_NIL_STEP)
+
+lemma ALG_SORTED_PREFIXFREE_MEM_NIL: "(alg_sorted l & alg_prefixfree l & List.member l []) = (l = [[]])"
+  by (import prob_canon ALG_SORTED_PREFIXFREE_MEM_NIL)
+
+lemma ALG_SORTED_PREFIXFREE_EQUALITY: "(ALL x. List.member l x = List.member l' x) &
+alg_sorted l & alg_sorted l' & alg_prefixfree l & alg_prefixfree l'
+==> l = l'"
+  by (import prob_canon ALG_SORTED_PREFIXFREE_EQUALITY)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" boolean_sequence
+
+consts
+  SHD :: "(nat => bool) => bool" 
+
+defs
+  SHD_primdef: "SHD == %f. f 0"
+
+lemma SHD_def: "SHD f = f 0"
+  by (import boolean_sequence SHD_def)
+
+consts
+  STL :: "(nat => bool) => nat => bool" 
+
+defs
+  STL_primdef: "STL == %f n. f (Suc n)"
+
+lemma STL_def: "STL f n = f (Suc n)"
+  by (import boolean_sequence STL_def)
+
+consts
+  SCONS :: "bool => (nat => bool) => nat => bool" 
+
+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)"
+  by (import boolean_sequence SCONS_def)
+
+consts
+  SDEST :: "(nat => bool) => bool * (nat => bool)" 
+
+defs
+  SDEST_primdef: "SDEST == %s. (SHD s, STL s)"
+
+lemma SDEST_def: "SDEST = (%s. (SHD s, STL s))"
+  by (import boolean_sequence SDEST_def)
+
+consts
+  SCONST :: "bool => nat => bool" 
+
+defs
+  SCONST_primdef: "SCONST == K"
+
+lemma SCONST_def: "SCONST = K"
+  by (import boolean_sequence SCONST_def)
+
+consts
+  STAKE :: "nat => (nat => bool) => bool list" 
+
+specification (STAKE_primdef: STAKE) STAKE_def: "(ALL s. STAKE 0 s = []) &
+(ALL n s. STAKE (Suc n) s = SHD s # STAKE n (STL s))"
+  by (import boolean_sequence STAKE_def)
+
+consts
+  SDROP :: "nat => (nat => bool) => nat => bool" 
+
+specification (SDROP_primdef: SDROP) SDROP_def: "SDROP 0 = I & (ALL n. SDROP (Suc n) = SDROP n o STL)"
+  by (import boolean_sequence SDROP_def)
+
+lemma SCONS_SURJ: "EX xa t. x = SCONS xa t"
+  by (import boolean_sequence SCONS_SURJ)
+
+lemma SHD_STL_ISO: "EX x. SHD x = h & STL x = t"
+  by (import boolean_sequence SHD_STL_ISO)
+
+lemma SHD_SCONS: "SHD (SCONS h t) = h"
+  by (import boolean_sequence SHD_SCONS)
+
+lemma STL_SCONS: "STL (SCONS h t) = t"
+  by (import boolean_sequence STL_SCONS)
+
+lemma SHD_SCONST: "SHD (SCONST b) = b"
+  by (import boolean_sequence SHD_SCONST)
+
+lemma STL_SCONST: "STL (SCONST b) = SCONST b"
+  by (import boolean_sequence STL_SCONST)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob_algebra
+
+consts
+  alg_embed :: "bool list => (nat => bool) => bool" 
+
+specification (alg_embed_primdef: alg_embed) alg_embed_def: "(ALL s. alg_embed [] s = True) &
+(ALL h t s. alg_embed (h # t) s = (h = SHD s & alg_embed t (STL s)))"
+  by (import prob_algebra alg_embed_def)
+
+consts
+  algebra_embed :: "bool list list => (nat => bool) => bool" 
+
+specification (algebra_embed_primdef: algebra_embed) algebra_embed_def: "algebra_embed [] = EMPTY &
+(ALL h t.
+    algebra_embed (h # t) = pred_set.UNION (alg_embed h) (algebra_embed t))"
+  by (import prob_algebra algebra_embed_def)
+
+consts
+  measurable :: "((nat => bool) => bool) => bool" 
+
+defs
+  measurable_primdef: "measurable == %s. EX b. s = algebra_embed b"
+
+lemma measurable_def: "measurable s = (EX b. s = algebra_embed b)"
+  by (import prob_algebra measurable_def)
+
+lemma HALVES_INTER: "pred_set.INTER (%x. SHD x = True) (%x. SHD x = False) = EMPTY"
+  by (import prob_algebra HALVES_INTER)
+
+lemma INTER_STL: "pred_set.INTER p q o STL = pred_set.INTER (p o STL) (q o STL)"
+  by (import prob_algebra INTER_STL)
+
+lemma COMPL_SHD: "COMPL (%x. SHD x = b) = (%x. SHD x = (~ b))"
+  by (import prob_algebra COMPL_SHD)
+
+lemma ALG_EMBED_BASIC: "alg_embed [] = pred_set.UNIV &
+(ALL h t.
+    alg_embed (h # t) = pred_set.INTER (%x. SHD x = h) (alg_embed t o STL))"
+  by (import prob_algebra ALG_EMBED_BASIC)
+
+lemma ALG_EMBED_NIL: "All (alg_embed c) = (c = [])"
+  by (import prob_algebra ALG_EMBED_NIL)
+
+lemma ALG_EMBED_POPULATED: "Ex (alg_embed b)"
+  by (import prob_algebra ALG_EMBED_POPULATED)
+
+lemma ALG_EMBED_PREFIX: "alg_embed b s & alg_embed c s ==> IS_PREFIX b c | IS_PREFIX c b"
+  by (import prob_algebra ALG_EMBED_PREFIX)
+
+lemma ALG_EMBED_PREFIX_SUBSET: "SUBSET (alg_embed b) (alg_embed c) = IS_PREFIX b c"
+  by (import prob_algebra ALG_EMBED_PREFIX_SUBSET)
+
+lemma ALG_EMBED_TWINS: "pred_set.UNION (alg_embed (SNOC True l)) (alg_embed (SNOC False l)) =
+alg_embed l"
+  by (import prob_algebra ALG_EMBED_TWINS)
+
+lemma ALGEBRA_EMBED_BASIC: "algebra_embed [] = EMPTY &
+algebra_embed [[]] = pred_set.UNIV &
+(ALL b. algebra_embed [[b]] = (%s. SHD s = b))"
+  by (import prob_algebra ALGEBRA_EMBED_BASIC)
+
+lemma ALGEBRA_EMBED_MEM: "algebra_embed b x ==> EX l. List.member b l & alg_embed l x"
+  by (import prob_algebra ALGEBRA_EMBED_MEM)
+
+lemma ALGEBRA_EMBED_APPEND: "algebra_embed (l1 @ l2) =
+pred_set.UNION (algebra_embed l1) (algebra_embed l2)"
+  by (import prob_algebra ALGEBRA_EMBED_APPEND)
+
+lemma ALGEBRA_EMBED_TLS: "algebra_embed (map (op # b) l) (SCONS h t) = (h = b & algebra_embed l t)"
+  by (import prob_algebra ALGEBRA_EMBED_TLS)
+
+lemma ALG_CANON_PREFS_EMBED: "algebra_embed (alg_canon_prefs l b) = algebra_embed (l # b)"
+  by (import prob_algebra ALG_CANON_PREFS_EMBED)
+
+lemma ALG_CANON_FIND_EMBED: "algebra_embed (alg_canon_find l b) = algebra_embed (l # b)"
+  by (import prob_algebra ALG_CANON_FIND_EMBED)
+
+lemma ALG_CANON1_EMBED: "algebra_embed (alg_canon1 x) = algebra_embed x"
+  by (import prob_algebra ALG_CANON1_EMBED)
+
+lemma ALG_CANON_MERGE_EMBED: "algebra_embed (alg_canon_merge l b) = algebra_embed (l # b)"
+  by (import prob_algebra ALG_CANON_MERGE_EMBED)
+
+lemma ALG_CANON2_EMBED: "algebra_embed (alg_canon2 x) = algebra_embed x"
+  by (import prob_algebra ALG_CANON2_EMBED)
+
+lemma ALG_CANON_EMBED: "algebra_embed (alg_canon l) = algebra_embed l"
+  by (import prob_algebra ALG_CANON_EMBED)
+
+lemma ALGEBRA_CANON_UNIV: "[| algebra_canon l; algebra_embed l = pred_set.UNIV |] ==> l = [[]]"
+  by (import prob_algebra ALGEBRA_CANON_UNIV)
+
+lemma ALG_CANON_REP: "(alg_canon b = alg_canon c) = (algebra_embed b = algebra_embed c)"
+  by (import prob_algebra ALG_CANON_REP)
+
+lemma ALGEBRA_CANON_EMBED_EMPTY: "algebra_canon l ==> (ALL v. ~ algebra_embed l v) = (l = [])"
+  by (import prob_algebra ALGEBRA_CANON_EMBED_EMPTY)
+
+lemma ALGEBRA_CANON_EMBED_UNIV: "algebra_canon l ==> All (algebra_embed l) = (l = [[]])"
+  by (import prob_algebra ALGEBRA_CANON_EMBED_UNIV)
+
+lemma MEASURABLE_ALGEBRA: "measurable (algebra_embed b)"
+  by (import prob_algebra MEASURABLE_ALGEBRA)
+
+lemma MEASURABLE_BASIC: "measurable EMPTY &
+measurable pred_set.UNIV & (ALL b. measurable (%s. SHD s = b))"
+  by (import prob_algebra MEASURABLE_BASIC)
+
+lemma MEASURABLE_SHD: "measurable (%s. SHD s = b)"
+  by (import prob_algebra MEASURABLE_SHD)
+
+lemma ALGEBRA_EMBED_COMPL: "EX l'. COMPL (algebra_embed l) = algebra_embed l'"
+  by (import prob_algebra ALGEBRA_EMBED_COMPL)
+
+lemma MEASURABLE_COMPL: "measurable (COMPL s) = measurable s"
+  by (import prob_algebra MEASURABLE_COMPL)
+
+lemma MEASURABLE_UNION: "measurable s & measurable t ==> measurable (pred_set.UNION s t)"
+  by (import prob_algebra MEASURABLE_UNION)
+
+lemma MEASURABLE_INTER: "measurable s & measurable t ==> measurable (pred_set.INTER s t)"
+  by (import prob_algebra MEASURABLE_INTER)
+
+lemma MEASURABLE_STL: "measurable (p o STL) = measurable p"
+  by (import prob_algebra MEASURABLE_STL)
+
+lemma MEASURABLE_SDROP: "measurable (p o SDROP n) = measurable p"
+  by (import prob_algebra MEASURABLE_SDROP)
+
+lemma MEASURABLE_INTER_HALVES: "(measurable (pred_set.INTER (%x. SHD x = True) p) &
+ measurable (pred_set.INTER (%x. SHD x = False) p)) =
+measurable p"
+  by (import prob_algebra MEASURABLE_INTER_HALVES)
+
+lemma MEASURABLE_HALVES: "measurable
+ (pred_set.UNION (pred_set.INTER (%x. SHD x = True) p)
+   (pred_set.INTER (%x. SHD x = False) q)) =
+(measurable (pred_set.INTER (%x. SHD x = True) p) &
+ measurable (pred_set.INTER (%x. SHD x = False) q))"
+  by (import prob_algebra MEASURABLE_HALVES)
+
+lemma MEASURABLE_INTER_SHD: "measurable (pred_set.INTER (%x. SHD x = b) (p o STL)) = measurable p"
+  by (import prob_algebra MEASURABLE_INTER_SHD)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob
+
+consts
+  alg_measure :: "bool list list => real" 
+
+specification (alg_measure_primdef: alg_measure) alg_measure_def: "alg_measure [] = 0 &
+(ALL l rest. alg_measure (l # rest) = (1 / 2) ^ length l + alg_measure rest)"
+  by (import prob alg_measure_def)
+
+consts
+  algebra_measure :: "bool list list => real" 
+
+defs
+  algebra_measure_primdef: "algebra_measure ==
+%b. prob_extra.inf
+     (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
+
+lemma algebra_measure_def: "algebra_measure b =
+prob_extra.inf
+ (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
+  by (import prob algebra_measure_def)
+
+consts
+  prob :: "((nat => bool) => bool) => real" 
+
+defs
+  prob_primdef: "prob ==
+%s. real.sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
+
+lemma prob_def: "prob s =
+real.sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
+  by (import prob prob_def)
+
+lemma ALG_TWINS_MEASURE: "((1::real) / (2::real)) ^ length (SNOC True (l::bool list)) +
+((1::real) / (2::real)) ^ length (SNOC False l) =
+((1::real) / (2::real)) ^ length l"
+  by (import prob ALG_TWINS_MEASURE)
+
+lemma ALG_MEASURE_BASIC: "alg_measure [] = 0 &
+alg_measure [[]] = 1 & (ALL b. alg_measure [[b]] = 1 / 2)"
+  by (import prob ALG_MEASURE_BASIC)
+
+lemma ALG_MEASURE_POS: "0 <= alg_measure l"
+  by (import prob ALG_MEASURE_POS)
+
+lemma ALG_MEASURE_APPEND: "alg_measure (l1 @ l2) = alg_measure l1 + alg_measure l2"
+  by (import prob ALG_MEASURE_APPEND)
+
+lemma ALG_MEASURE_TLS: "2 * alg_measure (map (op # b) l) = alg_measure l"
+  by (import prob ALG_MEASURE_TLS)
+
+lemma ALG_CANON_PREFS_MONO: "alg_measure (alg_canon_prefs l b) <= alg_measure (l # b)"
+  by (import prob ALG_CANON_PREFS_MONO)
+
+lemma ALG_CANON_FIND_MONO: "alg_measure (alg_canon_find l b) <= alg_measure (l # b)"
+  by (import prob ALG_CANON_FIND_MONO)
+
+lemma ALG_CANON1_MONO: "alg_measure (alg_canon1 x) <= alg_measure x"
+  by (import prob ALG_CANON1_MONO)
+
+lemma ALG_CANON_MERGE_MONO: "alg_measure (alg_canon_merge l b) <= alg_measure (l # b)"
+  by (import prob ALG_CANON_MERGE_MONO)
+
+lemma ALG_CANON2_MONO: "alg_measure (alg_canon2 x) <= alg_measure x"
+  by (import prob ALG_CANON2_MONO)
+
+lemma ALG_CANON_MONO: "alg_measure (alg_canon l) <= alg_measure l"
+  by (import prob ALG_CANON_MONO)
+
+lemma ALGEBRA_MEASURE_DEF_ALT: "algebra_measure l = alg_measure (alg_canon l)"
+  by (import prob ALGEBRA_MEASURE_DEF_ALT)
+
+lemma ALGEBRA_MEASURE_BASIC: "algebra_measure [] = 0 &
+algebra_measure [[]] = 1 & (ALL b. algebra_measure [[b]] = 1 / 2)"
+  by (import prob ALGEBRA_MEASURE_BASIC)
+
+lemma ALGEBRA_CANON_MEASURE_MAX: "algebra_canon l ==> alg_measure l <= 1"
+  by (import prob ALGEBRA_CANON_MEASURE_MAX)
+
+lemma ALGEBRA_MEASURE_MAX: "algebra_measure l <= 1"
+  by (import prob ALGEBRA_MEASURE_MAX)
+
+lemma ALGEBRA_MEASURE_MONO_EMBED: "SUBSET (algebra_embed x) (algebra_embed xa)
+==> algebra_measure x <= algebra_measure xa"
+  by (import prob ALGEBRA_MEASURE_MONO_EMBED)
+
+lemma ALG_MEASURE_COMPL: "[| algebra_canon l; algebra_canon c;
+   COMPL (algebra_embed l) = algebra_embed c |]
+==> alg_measure l + alg_measure c = 1"
+  by (import prob ALG_MEASURE_COMPL)
+
+lemma ALG_MEASURE_ADDITIVE: "[| algebra_canon l; algebra_canon c; algebra_canon d;
+   pred_set.INTER (algebra_embed c) (algebra_embed d) = EMPTY &
+   algebra_embed l = pred_set.UNION (algebra_embed c) (algebra_embed d) |]
+==> alg_measure l = alg_measure c + alg_measure d"
+  by (import prob ALG_MEASURE_ADDITIVE)
+
+lemma PROB_ALGEBRA: "prob (algebra_embed l) = algebra_measure l"
+  by (import prob PROB_ALGEBRA)
+
+lemma PROB_BASIC: "prob EMPTY = 0 &
+prob pred_set.UNIV = 1 & (ALL b. prob (%s. SHD s = b) = 1 / 2)"
+  by (import prob PROB_BASIC)
+
+lemma PROB_ADDITIVE: "measurable s & measurable t & pred_set.INTER s t = EMPTY
+==> prob (pred_set.UNION s t) = prob s + prob t"
+  by (import prob PROB_ADDITIVE)
+
+lemma PROB_COMPL: "measurable s ==> prob (COMPL s) = 1 - prob s"
+  by (import prob PROB_COMPL)
+
+lemma PROB_SUP_EXISTS1: "EX x b. algebra_measure b = x & SUBSET (algebra_embed b) s"
+  by (import prob PROB_SUP_EXISTS1)
+
+lemma PROB_SUP_EXISTS2: "EX x. ALL r.
+         (EX b. algebra_measure b = r & SUBSET (algebra_embed b) s) -->
+         r <= x"
+  by (import prob PROB_SUP_EXISTS2)
+
+lemma PROB_LE_X: "(!!s'. measurable s' & SUBSET s' s ==> prob s' <= x) ==> prob s <= x"
+  by (import prob PROB_LE_X)
+
+lemma X_LE_PROB: "EX s'. measurable s' & SUBSET s' s & x <= prob s' ==> x <= prob s"
+  by (import prob X_LE_PROB)
+
+lemma PROB_SUBSET_MONO: "SUBSET s t ==> prob s <= prob t"
+  by (import prob PROB_SUBSET_MONO)
+
+lemma PROB_ALG: "prob (alg_embed x) = (1 / 2) ^ length x"
+  by (import prob PROB_ALG)
+
+lemma PROB_STL: "measurable p ==> prob (p o STL) = prob p"
+  by (import prob PROB_STL)
+
+lemma PROB_SDROP: "measurable p ==> prob (p o SDROP n) = prob p"
+  by (import prob PROB_SDROP)
+
+lemma PROB_INTER_HALVES: "measurable p
+==> prob (pred_set.INTER (%x. SHD x = True) p) +
+    prob (pred_set.INTER (%x. SHD x = False) p) =
+    prob p"
+  by (import prob PROB_INTER_HALVES)
+
+lemma PROB_INTER_SHD: "measurable p
+==> prob (pred_set.INTER (%x. SHD x = b) (p o STL)) = 1 / 2 * prob p"
+  by (import prob PROB_INTER_SHD)
+
+lemma ALGEBRA_MEASURE_POS: "0 <= algebra_measure l"
+  by (import prob ALGEBRA_MEASURE_POS)
+
+lemma ALGEBRA_MEASURE_RANGE: "0 <= algebra_measure l & algebra_measure l <= 1"
+  by (import prob ALGEBRA_MEASURE_RANGE)
+
+lemma PROB_POS: "0 <= prob p"
+  by (import prob PROB_POS)
+
+lemma PROB_MAX: "prob p <= 1"
+  by (import prob PROB_MAX)
+
+lemma PROB_RANGE: "0 <= prob p & prob p <= 1"
+  by (import prob PROB_RANGE)
+
+lemma ABS_PROB: "abs (prob p) = prob p"
+  by (import prob ABS_PROB)
+
+lemma PROB_SHD: "prob (%s. SHD s = b) = 1 / 2"
+  by (import prob PROB_SHD)
+
+lemma PROB_COMPL_LE1: "measurable p ==> (prob (COMPL p) <= r) = (1 - r <= prob p)"
+  by (import prob PROB_COMPL_LE1)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob_pseudo
+
+consts
+  pseudo_linear_hd :: "nat => bool" 
+
+defs
+  pseudo_linear_hd_primdef: "pseudo_linear_hd == EVEN"
+
+lemma pseudo_linear_hd_def: "pseudo_linear_hd = EVEN"
+  by (import prob_pseudo pseudo_linear_hd_def)
+
+consts
+  pseudo_linear_tl :: "nat => nat => nat => nat => nat" 
+
+defs
+  pseudo_linear_tl_primdef: "pseudo_linear_tl == %a b n x. (a * x + b) mod (2 * n + 1)"
+
+lemma pseudo_linear_tl_def: "pseudo_linear_tl a b n x = (a * x + b) mod (2 * n + 1)"
+  by (import prob_pseudo pseudo_linear_tl_def)
+
+lemma PSEUDO_LINEAR1_EXECUTE: "EX x. (ALL xa. SHD (x xa) = pseudo_linear_hd xa) &
+      (ALL xa.
+          STL (x xa) =
+          x (pseudo_linear_tl
+              (NUMERAL
+                (NUMERAL_BIT1
+                  (NUMERAL_BIT1
+                    (NUMERAL_BIT1
+                      (NUMERAL_BIT2
+                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
+              (NUMERAL
+                (NUMERAL_BIT1
+                  (NUMERAL_BIT1
+                    (NUMERAL_BIT1
+                      (NUMERAL_BIT1
+                        (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
+              (NUMERAL
+                (NUMERAL_BIT1
+                  (NUMERAL_BIT1
+                    (NUMERAL_BIT1
+                      (NUMERAL_BIT1
+                        (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
+              xa))"
+  by (import prob_pseudo PSEUDO_LINEAR1_EXECUTE)
+
+consts
+  pseudo_linear1 :: "nat => nat => bool" 
+
+specification (pseudo_linear1_primdef: pseudo_linear1) pseudo_linear1_def: "(ALL x. SHD (pseudo_linear1 x) = pseudo_linear_hd x) &
+(ALL x.
+    STL (pseudo_linear1 x) =
+    pseudo_linear1
+     (pseudo_linear_tl
+       (NUMERAL
+         (NUMERAL_BIT1
+           (NUMERAL_BIT1
+             (NUMERAL_BIT1
+               (NUMERAL_BIT2 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
+       (NUMERAL
+         (NUMERAL_BIT1
+           (NUMERAL_BIT1
+             (NUMERAL_BIT1
+               (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
+       (NUMERAL
+         (NUMERAL_BIT1
+           (NUMERAL_BIT1
+             (NUMERAL_BIT1
+               (NUMERAL_BIT1 (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
+       x))"
+  by (import prob_pseudo pseudo_linear1_def)
+
+consts
+  pseudo :: "nat => nat => bool" 
+
+defs
+  pseudo_primdef: "pseudo == pseudo_linear1"
+
+lemma pseudo_def: "pseudo = pseudo_linear1"
+  by (import prob_pseudo pseudo_def)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob_indep
+
+consts
+  indep_set :: "((nat => bool) => bool) => ((nat => bool) => bool) => bool" 
+
+defs
+  indep_set_primdef: "indep_set ==
+%p q. measurable p &
+      measurable q & prob (pred_set.INTER p q) = prob p * prob q"
+
+lemma indep_set_def: "indep_set p q =
+(measurable p & measurable q & prob (pred_set.INTER p q) = prob p * prob q)"
+  by (import prob_indep indep_set_def)
+
+consts
+  alg_cover_set :: "bool list list => bool" 
+
+defs
+  alg_cover_set_primdef: "alg_cover_set ==
+%l. alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV"
+
+lemma alg_cover_set_def: "alg_cover_set l =
+(alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV)"
+  by (import prob_indep alg_cover_set_def)
+
+consts
+  alg_cover :: "bool list list => (nat => bool) => bool list" 
+
+defs
+  alg_cover_primdef: "alg_cover == %l x. SOME b. List.member l b & alg_embed b x"
+
+lemma alg_cover_def: "alg_cover l x = (SOME b. List.member l b & alg_embed b x)"
+  by (import prob_indep alg_cover_def)
+
+consts
+  indep :: "((nat => bool) => 'a * (nat => bool)) => bool" 
+
+defs
+  indep_primdef: "indep ==
+%f. EX l r.
+       alg_cover_set l &
+       (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s)))"
+
+lemma indep_def: "indep f =
+(EX l r.
+    alg_cover_set l &
+    (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s))))"
+  by (import prob_indep indep_def)
+
+lemma INDEP_SET_BASIC: "measurable p ==> indep_set EMPTY p & indep_set pred_set.UNIV p"
+  by (import prob_indep INDEP_SET_BASIC)
+
+lemma INDEP_SET_SYM: "indep_set p q = indep_set p q"
+  by (import prob_indep INDEP_SET_SYM)
+
+lemma INDEP_SET_DISJOINT_DECOMP: "indep_set p r & indep_set q r & pred_set.INTER p q = EMPTY
+==> indep_set (pred_set.UNION p q) r"
+  by (import prob_indep INDEP_SET_DISJOINT_DECOMP)
+
+lemma ALG_COVER_SET_BASIC: "~ alg_cover_set [] & alg_cover_set [[]] & alg_cover_set [[True], [False]]"
+  by (import prob_indep ALG_COVER_SET_BASIC)
+
+lemma ALG_COVER_WELL_DEFINED: "alg_cover_set l
+==> List.member l (alg_cover l x) & alg_embed (alg_cover l x) x"
+  by (import prob_indep ALG_COVER_WELL_DEFINED)
+
+lemma ALG_COVER_UNIV: "alg_cover [[]] = K []"
+  by (import prob_indep ALG_COVER_UNIV)
+
+lemma MAP_CONS_TL_FILTER: "~ List.member (l::bool list list) []
+==> map (op # (b::bool)) (map tl [x::bool list<-l. hd x = b]) =
+    [x::bool list<-l. hd x = b]"
+  by (import prob_indep MAP_CONS_TL_FILTER)
+
+lemma ALG_COVER_SET_CASES_THM: "alg_cover_set l =
+(l = [[]] |
+ (EX x xa.
+     alg_cover_set x &
+     alg_cover_set xa & l = map (op # True) x @ map (op # False) xa))"
+  by (import prob_indep ALG_COVER_SET_CASES_THM)
+
+lemma ALG_COVER_SET_CASES: "[| P [[]] &
+   (ALL l1 l2.
+       alg_cover_set l1 &
+       alg_cover_set l2 &
+       alg_cover_set (map (op # True) l1 @ map (op # False) l2) -->
+       P (map (op # True) l1 @ map (op # False) l2));
+   alg_cover_set l |]
+==> P l"
+  by (import prob_indep ALG_COVER_SET_CASES)
+
+lemma ALG_COVER_SET_INDUCTION: "[| P [[]] &
+   (ALL l1 l2.
+       alg_cover_set l1 &
+       alg_cover_set l2 &
+       P l1 &
+       P l2 & alg_cover_set (map (op # True) l1 @ map (op # False) l2) -->
+       P (map (op # True) l1 @ map (op # False) l2));
+   alg_cover_set l |]
+==> P l"
+  by (import prob_indep ALG_COVER_SET_INDUCTION)
+
+lemma ALG_COVER_EXISTS_UNIQUE: "alg_cover_set l ==> EX! x. List.member l x & alg_embed x s"
+  by (import prob_indep ALG_COVER_EXISTS_UNIQUE)
+
+lemma ALG_COVER_UNIQUE: "alg_cover_set l & List.member l x & alg_embed x s ==> alg_cover l s = x"
+  by (import prob_indep ALG_COVER_UNIQUE)
+
+lemma ALG_COVER_STEP: "alg_cover_set l1 & alg_cover_set l2
+==> alg_cover (map (op # True) l1 @ map (op # False) l2) (SCONS h t) =
+    (if h then True # alg_cover l1 t else False # alg_cover l2 t)"
+  by (import prob_indep ALG_COVER_STEP)
+
+lemma ALG_COVER_HEAD: "alg_cover_set l ==> f o alg_cover l = algebra_embed (filter f l)"
+  by (import prob_indep ALG_COVER_HEAD)
+
+lemma ALG_COVER_TAIL_STEP: "alg_cover_set l1 & alg_cover_set l2
+==> q o
+    (%x. SDROP
+          (length (alg_cover (map (op # True) l1 @ map (op # False) l2) x))
+          x) =
+    pred_set.UNION
+     (pred_set.INTER (%x. SHD x = True)
+       (q o ((%x. SDROP (length (alg_cover l1 x)) x) o STL)))
+     (pred_set.INTER (%x. SHD x = False)
+       (q o ((%x. SDROP (length (alg_cover l2 x)) x) o STL)))"
+  by (import prob_indep ALG_COVER_TAIL_STEP)
+
+lemma ALG_COVER_TAIL_MEASURABLE: "alg_cover_set l
+==> measurable (q o (%x. SDROP (length (alg_cover l x)) x)) = measurable q"
+  by (import prob_indep ALG_COVER_TAIL_MEASURABLE)
+
+lemma ALG_COVER_TAIL_PROB: "[| alg_cover_set l; measurable q |]
+==> prob (q o (%x. SDROP (length (alg_cover l x)) x)) = prob q"
+  by (import prob_indep ALG_COVER_TAIL_PROB)
+
+lemma INDEP_INDEP_SET_LEMMA: "[| alg_cover_set l; measurable q; List.member l x |]
+==> prob
+     (pred_set.INTER (alg_embed x)
+       (q o (%x. SDROP (length (alg_cover l x)) x))) =
+    (1 / 2) ^ length x * prob q"
+  by (import prob_indep INDEP_INDEP_SET_LEMMA)
+
+lemma INDEP_SET_LIST: "alg_sorted l &
+alg_prefixfree l &
+measurable q & (ALL x. List.member l x --> indep_set (alg_embed x) q)
+==> indep_set (algebra_embed l) q"
+  by (import prob_indep INDEP_SET_LIST)
+
+lemma INDEP_INDEP_SET: "indep f & measurable q ==> indep_set (p o (fst o f)) (q o (snd o f))"
+  by (import prob_indep INDEP_INDEP_SET)
+
+lemma INDEP_UNIT: "indep (UNIT x)"
+  by (import prob_indep INDEP_UNIT)
+
+lemma INDEP_SDEST: "indep SDEST"
+  by (import prob_indep INDEP_SDEST)
+
+lemma BIND_STEP: "BIND SDEST (%k. f o SCONS k) = f"
+  by (import prob_indep BIND_STEP)
+
+lemma INDEP_BIND_SDEST: "(!!x. indep (f x)) ==> indep (BIND SDEST f)"
+  by (import prob_indep INDEP_BIND_SDEST)
+
+lemma INDEP_BIND: "indep f & (ALL x. indep (g x)) ==> indep (BIND f g)"
+  by (import prob_indep INDEP_BIND)
+
+lemma INDEP_PROB: "indep f & measurable q
+==> prob (pred_set.INTER (p o (fst o f)) (q o (snd o f))) =
+    prob (p o (fst o f)) * prob q"
+  by (import prob_indep INDEP_PROB)
+
+lemma INDEP_MEASURABLE1: "indep f ==> measurable (p o (fst o f))"
+  by (import prob_indep INDEP_MEASURABLE1)
+
+lemma INDEP_MEASURABLE2: "indep f & measurable q ==> measurable (q o (snd o f))"
+  by (import prob_indep INDEP_MEASURABLE2)
+
+lemma PROB_INDEP_BOUND: "indep f
+==> prob (%s. fst (f s) < Suc n) =
+    prob (%s. fst (f s) < n) + prob (%s. fst (f s) = n)"
+  by (import prob_indep PROB_INDEP_BOUND)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" prob_uniform
+
+consts
+  unif_bound :: "nat => nat" 
+
+defs
+  unif_bound_primdef: "unif_bound ==
+WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
+ (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
+
+lemma unif_bound_primitive_def: "unif_bound =
+WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
+ (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
+  by (import prob_uniform unif_bound_primitive_def)
+
+lemma unif_bound_def: "unif_bound 0 = 0 & unif_bound (Suc v) = Suc (unif_bound (Suc v div 2))"
+  by (import prob_uniform unif_bound_def)
+
+lemma unif_bound_ind: "P 0 & (ALL v. P (Suc v div 2) --> P (Suc v)) ==> P x"
+  by (import prob_uniform unif_bound_ind)
+
+definition
+  unif_tupled :: "nat * (nat => bool) => nat * (nat => bool)"  where
+  "unif_tupled ==
+WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
+ (%unif_tupled (v, v1).
+     case v of 0 => (0, v1)
+     | Suc v3 =>
+         let (m, s') = unif_tupled (Suc v3 div 2, v1)
+         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
+
+lemma unif_tupled_primitive_def: "unif_tupled =
+WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
+ (%unif_tupled (v, v1).
+     case v of 0 => (0, v1)
+     | Suc v3 =>
+         let (m, s') = unif_tupled (Suc v3 div 2, v1)
+         in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
+  by (import prob_uniform unif_tupled_primitive_def)
+
+consts
+  unif :: "nat => (nat => bool) => nat * (nat => bool)" 
+
+defs
+  unif_primdef: "unif == %x x1. unif_tupled (x, x1)"
+
+lemma unif_curried_def: "unif x x1 = unif_tupled (x, x1)"
+  by (import prob_uniform unif_curried_def)
+
+lemma unif_def: "unif 0 s = (0, s) &
+unif (Suc v2) s =
+(let (m, s') = unif (Suc v2 div 2) s
+ in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
+  by (import prob_uniform unif_def)
+
+lemma unif_ind: "All ((P::nat => (nat => bool) => bool) (0::nat)) &
+(ALL (v2::nat) s::nat => bool. P (Suc v2 div (2::nat)) s --> P (Suc v2) s)
+==> P (v::nat) (x::nat => bool)"
+  by (import prob_uniform unif_ind)
+
+definition
+  uniform_tupled :: "nat * nat * (nat => bool) => nat * (nat => bool)"  where
+  "uniform_tupled ==
+WFREC
+ (SOME R.
+     WF R &
+     (ALL t s n res s'.
+         (res, s') = unif n s & ~ res < Suc n -->
+         R (t, Suc n, s') (Suc t, Suc n, s)))
+ (%uniform_tupled (v, v1).
+     case v of 0 => case v1 of (0, v4) => ARB | (Suc v5, v4) => (0, v4)
+     | Suc v2 =>
+         case v1 of (0, v8) => ARB
+         | (Suc v9, v8) =>
+             let (res, s') = unif v9 v8
+             in if res < Suc v9 then (res, s')
+                else uniform_tupled (v2, Suc v9, s'))"
+
+lemma uniform_tupled_primitive_def: "uniform_tupled =
+WFREC
+ (SOME R.
+     WF R &
+     (ALL t s n res s'.
+         (res, s') = unif n s & ~ res < Suc n -->
+         R (t, Suc n, s') (Suc t, Suc n, s)))
+ (%uniform_tupled (v, v1).
+     case v of 0 => case v1 of (0, v4) => ARB | (Suc v5, v4) => (0, v4)
+     | Suc v2 =>
+         case v1 of (0, v8) => ARB
+         | (Suc v9, v8) =>
+             let (res, s') = unif v9 v8
+             in if res < Suc v9 then (res, s')
+                else uniform_tupled (v2, Suc v9, s'))"
+  by (import prob_uniform uniform_tupled_primitive_def)
+
+consts
+  uniform :: "nat => nat => (nat => bool) => nat * (nat => bool)" 
+
+defs
+  uniform_primdef: "uniform == %x x1 x2. uniform_tupled (x, x1, x2)"
+
+lemma uniform_curried_def: "uniform x x1 x2 = uniform_tupled (x, x1, x2)"
+  by (import prob_uniform uniform_curried_def)
+
+lemma uniform_ind: "(ALL x. All (P (Suc x) 0)) &
+All (P 0 0) &
+(ALL x. All (P 0 (Suc x))) &
+(ALL x xa xb.
+    (ALL xc xd.
+        (xc, xd) = unif xa xb & ~ xc < Suc xa --> P x (Suc xa) xd) -->
+    P (Suc x) (Suc xa) xb)
+==> P x xa xb"
+  by (import prob_uniform uniform_ind)
+
+lemma uniform_def: "uniform 0 (Suc n) s = (0, s) &
+uniform (Suc t) (Suc n) s =
+(let (xa, x) = unif n s
+ in if xa < Suc n then (xa, x) else uniform t (Suc n) x)"
+  by (import prob_uniform uniform_def)
+
+lemma SUC_DIV_TWO_ZERO: "(Suc n div 2 = 0) = (n = 0)"
+  by (import prob_uniform SUC_DIV_TWO_ZERO)
+
+lemma UNIF_BOUND_LOWER: "n < 2 ^ unif_bound n"
+  by (import prob_uniform UNIF_BOUND_LOWER)
+
+lemma UNIF_BOUND_LOWER_SUC: "Suc n <= 2 ^ unif_bound n"
+  by (import prob_uniform UNIF_BOUND_LOWER_SUC)
+
+lemma UNIF_BOUND_UPPER: "n ~= 0 ==> 2 ^ unif_bound n <= 2 * n"
+  by (import prob_uniform UNIF_BOUND_UPPER)
+
+lemma UNIF_BOUND_UPPER_SUC: "2 ^ unif_bound n <= Suc (2 * n)"
+  by (import prob_uniform UNIF_BOUND_UPPER_SUC)
+
+lemma UNIF_DEF_MONAD: "unif 0 = UNIT 0 &
+(ALL n.
+    unif (Suc n) =
+    BIND (unif (Suc n div 2))
+     (%m. BIND SDEST (%b. UNIT (if b then 2 * m + 1 else 2 * m))))"
+  by (import prob_uniform UNIF_DEF_MONAD)
+
+lemma UNIFORM_DEF_MONAD: "(ALL x. uniform 0 (Suc x) = UNIT 0) &
+(ALL x xa.
+    uniform (Suc x) (Suc xa) =
+    BIND (unif xa) (%m. if m < Suc xa then UNIT m else uniform x (Suc xa)))"
+  by (import prob_uniform UNIFORM_DEF_MONAD)
+
+lemma INDEP_UNIF: "indep (unif n)"
+  by (import prob_uniform INDEP_UNIF)
+
+lemma INDEP_UNIFORM: "indep (uniform t (Suc n))"
+  by (import prob_uniform INDEP_UNIFORM)
+
+lemma PROB_UNIF: "prob (%s. fst (unif n s) = k) =
+(if k < 2 ^ unif_bound n then (1 / 2) ^ unif_bound n else 0)"
+  by (import prob_uniform PROB_UNIF)
+
+lemma UNIF_RANGE: "fst (unif n s) < 2 ^ unif_bound n"
+  by (import prob_uniform UNIF_RANGE)
+
+lemma PROB_UNIF_PAIR: "(prob (%s. fst (unif n s) = k) = prob (%s. fst (unif n s) = k')) =
+((k < 2 ^ unif_bound n) = (k' < 2 ^ unif_bound n))"
+  by (import prob_uniform PROB_UNIF_PAIR)
+
+lemma PROB_UNIF_BOUND: "k <= 2 ^ unif_bound n
+==> prob (%s. fst (unif n s) < k) = real k * (1 / 2) ^ unif_bound n"
+  by (import prob_uniform PROB_UNIF_BOUND)
+
+lemma PROB_UNIF_GOOD: "1 / 2 <= prob (%s. fst (unif n s) < Suc n)"
+  by (import prob_uniform PROB_UNIF_GOOD)
+
+lemma UNIFORM_RANGE: "fst (uniform t (Suc n) s) < Suc n"
+  by (import prob_uniform UNIFORM_RANGE)
+
+lemma PROB_UNIFORM_LOWER_BOUND: "[| !!k. k < Suc n ==> prob (%s. fst (uniform t (Suc n) s) = k) < b;
+   m < Suc n |]
+==> prob (%s. fst (uniform t (Suc n) s) < Suc m) < real (Suc m) * b"
+  by (import prob_uniform PROB_UNIFORM_LOWER_BOUND)
+
+lemma PROB_UNIFORM_UPPER_BOUND: "[| !!k. k < Suc n ==> b < prob (%s. fst (uniform t (Suc n) s) = k);
+   m < Suc n |]
+==> real (Suc m) * b < prob (%s. fst (uniform t (Suc n) s) < Suc m)"
+  by (import prob_uniform PROB_UNIFORM_UPPER_BOUND)
+
+lemma PROB_UNIFORM_PAIR_SUC: "k < Suc n & k' < Suc n
+==> abs (prob (%s. fst (uniform t (Suc n) s) = k) -
+         prob (%s. fst (uniform t (Suc n) s) = k'))
+    <= (1 / 2) ^ t"
+  by (import prob_uniform PROB_UNIFORM_PAIR_SUC)
+
+lemma PROB_UNIFORM_SUC: "k < Suc n
+==> abs (prob (%s. fst (uniform t (Suc n) s) = k) - 1 / real (Suc n))
+    <= (1 / 2) ^ t"
+  by (import prob_uniform PROB_UNIFORM_SUC)
+
+lemma PROB_UNIFORM: "k < n
+==> abs (prob (%s. fst (uniform t n s) = k) - 1 / real n) <= (1 / 2) ^ t"
+  by (import prob_uniform PROB_UNIFORM)
+
+;end_setup
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/HOL4Real.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,2950 @@
+(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
+
+theory HOL4Real imports HOL4Base begin
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" realax
+
+lemma HREAL_RDISTRIB: "hreal_mul (hreal_add x y) z = hreal_add (hreal_mul x z) (hreal_mul y z)"
+  by (import realax HREAL_RDISTRIB)
+
+lemma HREAL_EQ_ADDL: "x ~= hreal_add x y"
+  by (import realax HREAL_EQ_ADDL)
+
+lemma HREAL_EQ_LADD: "(hreal_add x y = hreal_add x z) = (y = z)"
+  by (import realax HREAL_EQ_LADD)
+
+lemma HREAL_LT_REFL: "~ hreal_lt x x"
+  by (import realax HREAL_LT_REFL)
+
+lemma HREAL_LT_ADDL: "hreal_lt x (hreal_add x y)"
+  by (import realax HREAL_LT_ADDL)
+
+lemma HREAL_LT_NE: "hreal_lt x y ==> x ~= y"
+  by (import realax HREAL_LT_NE)
+
+lemma HREAL_LT_ADDR: "~ hreal_lt (hreal_add x y) x"
+  by (import realax HREAL_LT_ADDR)
+
+lemma HREAL_LT_GT: "hreal_lt x y ==> ~ hreal_lt y x"
+  by (import realax HREAL_LT_GT)
+
+lemma HREAL_LT_ADD2: "hreal_lt x1 y1 & hreal_lt x2 y2
+==> hreal_lt (hreal_add x1 x2) (hreal_add y1 y2)"
+  by (import realax HREAL_LT_ADD2)
+
+lemma HREAL_LT_LADD: "hreal_lt (hreal_add x y) (hreal_add x z) = hreal_lt y z"
+  by (import realax HREAL_LT_LADD)
+
+definition
+  treal_0 :: "hreal * hreal"  where
+  "treal_0 == (hreal_1, hreal_1)"
+
+lemma treal_0: "treal_0 = (hreal_1, hreal_1)"
+  by (import realax treal_0)
+
+definition
+  treal_1 :: "hreal * hreal"  where
+  "treal_1 == (hreal_add hreal_1 hreal_1, hreal_1)"
+
+lemma treal_1: "treal_1 = (hreal_add hreal_1 hreal_1, hreal_1)"
+  by (import realax treal_1)
+
+definition
+  treal_neg :: "hreal * hreal => hreal * hreal"  where
+  "treal_neg == %(x, y). (y, x)"
+
+lemma treal_neg: "treal_neg (x, y) = (y, x)"
+  by (import realax treal_neg)
+
+definition
+  treal_add :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
+  "treal_add == %(x1, y1) (x2, y2). (hreal_add x1 x2, hreal_add y1 y2)"
+
+lemma treal_add: "treal_add (x1, y1) (x2, y2) = (hreal_add x1 x2, hreal_add y1 y2)"
+  by (import realax treal_add)
+
+definition
+  treal_mul :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
+  "treal_mul ==
+%(x1, y1) (x2, y2).
+   (hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
+    hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
+
+lemma treal_mul: "treal_mul (x1, y1) (x2, y2) =
+(hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
+ hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
+  by (import realax treal_mul)
+
+definition
+  treal_lt :: "hreal * hreal => hreal * hreal => bool"  where
+  "treal_lt == %(x1, y1) (x2, y2). hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
+
+lemma treal_lt: "treal_lt (x1, y1) (x2, y2) = hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
+  by (import realax treal_lt)
+
+definition
+  treal_inv :: "hreal * hreal => hreal * hreal"  where
+  "treal_inv ==
+%(x, y).
+   if x = y then treal_0
+   else if hreal_lt y x
+        then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
+        else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1)"
+
+lemma treal_inv: "treal_inv (x, y) =
+(if x = y then treal_0
+ else if hreal_lt y x
+      then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
+      else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1))"
+  by (import realax treal_inv)
+
+definition
+  treal_eq :: "hreal * hreal => hreal * hreal => bool"  where
+  "treal_eq == %(x1, y1) (x2, y2). hreal_add x1 y2 = hreal_add x2 y1"
+
+lemma treal_eq: "treal_eq (x1, y1) (x2, y2) = (hreal_add x1 y2 = hreal_add x2 y1)"
+  by (import realax treal_eq)
+
+lemma TREAL_EQ_REFL: "treal_eq x x"
+  by (import realax TREAL_EQ_REFL)
+
+lemma TREAL_EQ_SYM: "treal_eq x y = treal_eq y x"
+  by (import realax TREAL_EQ_SYM)
+
+lemma TREAL_EQ_TRANS: "treal_eq x y & treal_eq y z ==> treal_eq x z"
+  by (import realax TREAL_EQ_TRANS)
+
+lemma TREAL_EQ_EQUIV: "treal_eq p q = (treal_eq p = treal_eq q)"
+  by (import realax TREAL_EQ_EQUIV)
+
+lemma TREAL_EQ_AP: "p = q ==> treal_eq p q"
+  by (import realax TREAL_EQ_AP)
+
+lemma TREAL_10: "~ treal_eq treal_1 treal_0"
+  by (import realax TREAL_10)
+
+lemma TREAL_ADD_SYM: "treal_add x y = treal_add y x"
+  by (import realax TREAL_ADD_SYM)
+
+lemma TREAL_MUL_SYM: "treal_mul x y = treal_mul y x"
+  by (import realax TREAL_MUL_SYM)
+
+lemma TREAL_ADD_ASSOC: "treal_add x (treal_add y z) = treal_add (treal_add x y) z"
+  by (import realax TREAL_ADD_ASSOC)
+
+lemma TREAL_MUL_ASSOC: "treal_mul x (treal_mul y z) = treal_mul (treal_mul x y) z"
+  by (import realax TREAL_MUL_ASSOC)
+
+lemma TREAL_LDISTRIB: "treal_mul x (treal_add y z) = treal_add (treal_mul x y) (treal_mul x z)"
+  by (import realax TREAL_LDISTRIB)
+
+lemma TREAL_ADD_LID: "treal_eq (treal_add treal_0 x) x"
+  by (import realax TREAL_ADD_LID)
+
+lemma TREAL_MUL_LID: "treal_eq (treal_mul treal_1 x) x"
+  by (import realax TREAL_MUL_LID)
+
+lemma TREAL_ADD_LINV: "treal_eq (treal_add (treal_neg x) x) treal_0"
+  by (import realax TREAL_ADD_LINV)
+
+lemma TREAL_INV_0: "treal_eq (treal_inv treal_0) treal_0"
+  by (import realax TREAL_INV_0)
+
+lemma TREAL_MUL_LINV: "~ treal_eq x treal_0 ==> treal_eq (treal_mul (treal_inv x) x) treal_1"
+  by (import realax TREAL_MUL_LINV)
+
+lemma TREAL_LT_TOTAL: "treal_eq x y | treal_lt x y | treal_lt y x"
+  by (import realax TREAL_LT_TOTAL)
+
+lemma TREAL_LT_REFL: "~ treal_lt x x"
+  by (import realax TREAL_LT_REFL)
+
+lemma TREAL_LT_TRANS: "treal_lt x y & treal_lt y z ==> treal_lt x z"
+  by (import realax TREAL_LT_TRANS)
+
+lemma TREAL_LT_ADD: "treal_lt y z ==> treal_lt (treal_add x y) (treal_add x z)"
+  by (import realax TREAL_LT_ADD)
+
+lemma TREAL_LT_MUL: "treal_lt treal_0 x & treal_lt treal_0 y ==> treal_lt treal_0 (treal_mul x y)"
+  by (import realax TREAL_LT_MUL)
+
+definition
+  treal_of_hreal :: "hreal => hreal * hreal"  where
+  "treal_of_hreal == %x. (hreal_add x hreal_1, hreal_1)"
+
+lemma treal_of_hreal: "treal_of_hreal x = (hreal_add x hreal_1, hreal_1)"
+  by (import realax treal_of_hreal)
+
+definition
+  hreal_of_treal :: "hreal * hreal => hreal"  where
+  "hreal_of_treal == %(x, y). SOME d. x = hreal_add y d"
+
+lemma hreal_of_treal: "hreal_of_treal (x, y) = (SOME d. x = hreal_add y d)"
+  by (import realax hreal_of_treal)
+
+lemma TREAL_BIJ: "(ALL h. hreal_of_treal (treal_of_hreal h) = h) &
+(ALL r. treal_lt treal_0 r = treal_eq (treal_of_hreal (hreal_of_treal r)) r)"
+  by (import realax TREAL_BIJ)
+
+lemma TREAL_ISO: "hreal_lt h i ==> treal_lt (treal_of_hreal h) (treal_of_hreal i)"
+  by (import realax TREAL_ISO)
+
+lemma TREAL_BIJ_WELLDEF: "treal_eq h i ==> hreal_of_treal h = hreal_of_treal i"
+  by (import realax TREAL_BIJ_WELLDEF)
+
+lemma TREAL_NEG_WELLDEF: "treal_eq x1 x2 ==> treal_eq (treal_neg x1) (treal_neg x2)"
+  by (import realax TREAL_NEG_WELLDEF)
+
+lemma TREAL_ADD_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_add x1 y) (treal_add x2 y)"
+  by (import realax TREAL_ADD_WELLDEFR)
+
+lemma TREAL_ADD_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
+==> treal_eq (treal_add x1 y1) (treal_add x2 y2)"
+  by (import realax TREAL_ADD_WELLDEF)
+
+lemma TREAL_MUL_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_mul x1 y) (treal_mul x2 y)"
+  by (import realax TREAL_MUL_WELLDEFR)
+
+lemma TREAL_MUL_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
+==> treal_eq (treal_mul x1 y1) (treal_mul x2 y2)"
+  by (import realax TREAL_MUL_WELLDEF)
+
+lemma TREAL_LT_WELLDEFR: "treal_eq x1 x2 ==> treal_lt x1 y = treal_lt x2 y"
+  by (import realax TREAL_LT_WELLDEFR)
+
+lemma TREAL_LT_WELLDEFL: "treal_eq y1 y2 ==> treal_lt x y1 = treal_lt x y2"
+  by (import realax TREAL_LT_WELLDEFL)
+
+lemma TREAL_LT_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2 ==> treal_lt x1 y1 = treal_lt x2 y2"
+  by (import realax TREAL_LT_WELLDEF)
+
+lemma TREAL_INV_WELLDEF: "treal_eq x1 x2 ==> treal_eq (treal_inv x1) (treal_inv x2)"
+  by (import realax TREAL_INV_WELLDEF)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" real
+
+lemma REAL_0: "(0::real) = (0::real)"
+  by (import real REAL_0)
+
+lemma REAL_1: "(1::real) = (1::real)"
+  by (import real REAL_1)
+
+lemma REAL_ADD_LID_UNIQ: "((x::real) + (y::real) = y) = (x = (0::real))"
+  by (import real REAL_ADD_LID_UNIQ)
+
+lemma REAL_ADD_RID_UNIQ: "((x::real) + (y::real) = x) = (y = (0::real))"
+  by (import real REAL_ADD_RID_UNIQ)
+
+lemma REAL_LT_ANTISYM: "~ ((x::real) < (y::real) & y < x)"
+  by (import real REAL_LT_ANTISYM)
+
+lemma REAL_LTE_TOTAL: "(x::real) < (y::real) | y <= x"
+  by (import real REAL_LTE_TOTAL)
+
+lemma REAL_LET_ANTISYM: "~ ((x::real) < (y::real) & y <= x)"
+  by (import real REAL_LET_ANTISYM)
+
+lemma REAL_LTE_ANTSYM: "~ ((x::real) <= (y::real) & y < x)"
+  by (import real REAL_LTE_ANTSYM)
+
+lemma REAL_LT_NEGTOTAL: "(x::real) = (0::real) | (0::real) < x | (0::real) < - x"
+  by (import real REAL_LT_NEGTOTAL)
+
+lemma REAL_LE_NEGTOTAL: "(0::real) <= (x::real) | (0::real) <= - x"
+  by (import real REAL_LE_NEGTOTAL)
+
+lemma REAL_LT_ADDNEG: "((y::real) < (x::real) + - (z::real)) = (y + z < x)"
+  by (import real REAL_LT_ADDNEG)
+
+lemma REAL_LT_ADDNEG2: "((x::real) + - (y::real) < (z::real)) = (x < z + y)"
+  by (import real REAL_LT_ADDNEG2)
+
+lemma REAL_LT_ADD1: "(x::real) <= (y::real) ==> x < y + (1::real)"
+  by (import real REAL_LT_ADD1)
+
+lemma REAL_SUB_ADD2: "(y::real) + ((x::real) - y) = x"
+  by (import real REAL_SUB_ADD2)
+
+lemma REAL_SUB_LT: "((0::real) < (x::real) - (y::real)) = (y < x)"
+  by (import real REAL_SUB_LT)
+
+lemma REAL_SUB_LE: "((0::real) <= (x::real) - (y::real)) = (y <= x)"
+  by (import real REAL_SUB_LE)
+
+lemma REAL_ADD_SUB: "(x::real) + (y::real) - x = y"
+  by (import real REAL_ADD_SUB)
+
+lemma REAL_NEG_EQ: "(- (x::real) = (y::real)) = (x = - y)"
+  by (import real REAL_NEG_EQ)
+
+lemma REAL_LT_LMUL_0: "(0::real) < (x::real) ==> ((0::real) < x * (y::real)) = ((0::real) < y)"
+  by (import real REAL_LT_LMUL_0)
+
+lemma REAL_LT_RMUL_0: "(0::real) < (y::real) ==> ((0::real) < (x::real) * y) = ((0::real) < x)"
+  by (import real REAL_LT_RMUL_0)
+
+lemma REAL_LINV_UNIQ: "(x::real) * (y::real) = (1::real) ==> x = inverse y"
+  by (import real REAL_LINV_UNIQ)
+
+lemma REAL_LE_INV: "(0::real) <= (x::real) ==> (0::real) <= inverse x"
+  by (import real REAL_LE_INV)
+
+lemma REAL_LE_ADDR: "((x::real) <= x + (y::real)) = ((0::real) <= y)"
+  by (import real REAL_LE_ADDR)
+
+lemma REAL_LE_ADDL: "((y::real) <= (x::real) + y) = ((0::real) <= x)"
+  by (import real REAL_LE_ADDL)
+
+lemma REAL_LT_ADDR: "((x::real) < x + (y::real)) = ((0::real) < y)"
+  by (import real REAL_LT_ADDR)
+
+lemma REAL_LT_ADDL: "((y::real) < (x::real) + y) = ((0::real) < x)"
+  by (import real REAL_LT_ADDL)
+
+lemma REAL_LT_NZ: "(real (n::nat) ~= (0::real)) = ((0::real) < real n)"
+  by (import real REAL_LT_NZ)
+
+lemma REAL_NZ_IMP_LT: "(n::nat) ~= (0::nat) ==> (0::real) < real n"
+  by (import real REAL_NZ_IMP_LT)
+
+lemma REAL_LT_RDIV_0: "(0::real) < (z::real) ==> ((0::real) < (y::real) / z) = ((0::real) < y)"
+  by (import real REAL_LT_RDIV_0)
+
+lemma REAL_LT_RDIV: "(0::real) < (z::real) ==> ((x::real) / z < (y::real) / z) = (x < y)"
+  by (import real REAL_LT_RDIV)
+
+lemma REAL_LT_FRACTION_0: "(n::nat) ~= (0::nat) ==> ((0::real) < (d::real) / real n) = ((0::real) < d)"
+  by (import real REAL_LT_FRACTION_0)
+
+lemma REAL_LT_MULTIPLE: "(1::nat) < (x::nat) ==> ((xa::real) < real x * xa) = ((0::real) < xa)"
+  by (import real REAL_LT_MULTIPLE)
+
+lemma REAL_LT_FRACTION: "(1::nat) < (n::nat) ==> ((d::real) / real n < d) = ((0::real) < d)"
+  by (import real REAL_LT_FRACTION)
+
+lemma REAL_LT_HALF2: "((d::real) / (2::real) < d) = ((0::real) < d)"
+  by (import real REAL_LT_HALF2)
+
+lemma REAL_DIV_LMUL: "(y::real) ~= (0::real) ==> y * ((x::real) / y) = x"
+  by (import real REAL_DIV_LMUL)
+
+lemma REAL_DIV_RMUL: "(y::real) ~= (0::real) ==> (x::real) / y * y = x"
+  by (import real REAL_DIV_RMUL)
+
+lemma REAL_DOWN: "(0::real) < (x::real) ==> EX xa>0::real. xa < x"
+  by (import real REAL_DOWN)
+
+lemma REAL_SUB_SUB: "(x::real) - (y::real) - x = - y"
+  by (import real REAL_SUB_SUB)
+
+lemma REAL_SUB_LNEG: "- (x::real) - (y::real) = - (x + y)"
+  by (import real REAL_SUB_LNEG)
+
+lemma REAL_SUB_NEG2: "- (x::real) - - (y::real) = y - x"
+  by (import real REAL_SUB_NEG2)
+
+lemma REAL_SUB_TRIANGLE: "(a::real) - (b::real) + (b - (c::real)) = a - c"
+  by (import real REAL_SUB_TRIANGLE)
+
+lemma REAL_INV_MUL: "(x::real) ~= (0::real) & (y::real) ~= (0::real)
+==> inverse (x * y) = inverse x * inverse y"
+  by (import real REAL_INV_MUL)
+
+lemma REAL_SUB_INV2: "(x::real) ~= (0::real) & (y::real) ~= (0::real)
+==> inverse x - inverse y = (y - x) / (x * y)"
+  by (import real REAL_SUB_INV2)
+
+lemma REAL_SUB_SUB2: "(x::real) - (x - (y::real)) = y"
+  by (import real REAL_SUB_SUB2)
+
+lemma REAL_ADD_SUB2: "(x::real) - (x + (y::real)) = - y"
+  by (import real REAL_ADD_SUB2)
+
+lemma REAL_LE_DIV: "(0::real) <= (x::real) & (0::real) <= (xa::real) ==> (0::real) <= x / xa"
+  by (import real REAL_LE_DIV)
+
+lemma REAL_LT_1: "(0::real) <= (x::real) & x < (y::real) ==> x / y < (1::real)"
+  by (import real REAL_LT_1)
+
+lemma REAL_POS_NZ: "(0::real) < (x::real) ==> x ~= (0::real)"
+  by (import real REAL_POS_NZ)
+
+lemma REAL_EQ_RMUL_IMP: "(z::real) ~= (0::real) & (x::real) * z = (y::real) * z ==> x = y"
+  by (import real REAL_EQ_RMUL_IMP)
+
+lemma REAL_EQ_LMUL_IMP: "(x::real) ~= (0::real) & x * (xa::real) = x * (xb::real) ==> xa = xb"
+  by (import real REAL_EQ_LMUL_IMP)
+
+lemma REAL_FACT_NZ: "real (FACT n) ~= 0"
+  by (import real REAL_FACT_NZ)
+
+lemma REAL_POASQ: "((0::real) < (x::real) * x) = (x ~= (0::real))"
+  by (import real REAL_POASQ)
+
+lemma REAL_DIV_MUL2: "(x::real) ~= (0::real) & (z::real) ~= (0::real)
+==> (y::real) / z = x * y / (x * z)"
+  by (import real REAL_DIV_MUL2)
+
+lemma REAL_MIDDLE1: "(a::real) <= (b::real) ==> a <= (a + b) / (2::real)"
+  by (import real REAL_MIDDLE1)
+
+lemma REAL_MIDDLE2: "(a::real) <= (b::real) ==> (a + b) / (2::real) <= b"
+  by (import real REAL_MIDDLE2)
+
+lemma ABS_LT_MUL2: "abs (w::real) < (y::real) & abs (x::real) < (z::real)
+==> abs (w * x) < y * z"
+  by (import real ABS_LT_MUL2)
+
+lemma ABS_REFL: "(abs (x::real) = x) = ((0::real) <= x)"
+  by (import real ABS_REFL)
+
+lemma ABS_BETWEEN: "((0::real) < (d::real) & (x::real) - d < (y::real) & y < x + d) =
+(abs (y - x) < d)"
+  by (import real ABS_BETWEEN)
+
+lemma ABS_BOUND: "abs ((x::real) - (y::real)) < (d::real) ==> y < x + d"
+  by (import real ABS_BOUND)
+
+lemma ABS_STILLNZ: "abs ((x::real) - (y::real)) < abs y ==> x ~= (0::real)"
+  by (import real ABS_STILLNZ)
+
+lemma ABS_CASES: "(x::real) = (0::real) | (0::real) < abs x"
+  by (import real ABS_CASES)
+
+lemma ABS_BETWEEN1: "(x::real) < (z::real) & abs ((y::real) - x) < z - x ==> y < z"
+  by (import real ABS_BETWEEN1)
+
+lemma ABS_SIGN: "abs ((x::real) - (y::real)) < y ==> (0::real) < x"
+  by (import real ABS_SIGN)
+
+lemma ABS_SIGN2: "abs ((x::real) - (y::real)) < - y ==> x < (0::real)"
+  by (import real ABS_SIGN2)
+
+lemma ABS_CIRCLE: "abs (h::real) < abs (y::real) - abs (x::real) ==> abs (x + h) < abs y"
+  by (import real ABS_CIRCLE)
+
+lemma ABS_BETWEEN2: "(x0::real) < (y0::real) &
+abs ((x::real) - x0) < (y0 - x0) / (2::real) &
+abs ((y::real) - y0) < (y0 - x0) / (2::real)
+==> x < y"
+  by (import real ABS_BETWEEN2)
+
+lemma POW_PLUS1: "0 < e ==> 1 + real n * e <= (1 + e) ^ n"
+  by (import real POW_PLUS1)
+
+lemma POW_M1: "abs ((- (1::real)) ^ (n::nat)) = (1::real)"
+  by (import real POW_M1)
+
+lemma REAL_LE1_POW2: "(1::real) <= (x::real) ==> (1::real) <= x ^ (2::nat)"
+  by (import real REAL_LE1_POW2)
+
+lemma REAL_LT1_POW2: "(1::real) < (x::real) ==> (1::real) < x ^ (2::nat)"
+  by (import real REAL_LT1_POW2)
+
+lemma POW_POS_LT: "(0::real) < (x::real) ==> (0::real) < x ^ Suc (n::nat)"
+  by (import real POW_POS_LT)
+
+lemma POW_LT: "(0::real) <= (x::real) & x < (y::real) ==> x ^ Suc (n::nat) < y ^ Suc n"
+  by (import real POW_LT)
+
+lemma POW_ZERO: "(x::real) ^ (n::nat) = (0::real) ==> x = (0::real)"
+  by (import real POW_ZERO)
+
+lemma POW_ZERO_EQ: "((x::real) ^ Suc (n::nat) = (0::real)) = (x = (0::real))"
+  by (import real POW_ZERO_EQ)
+
+lemma REAL_POW_LT2: "(n::nat) ~= (0::nat) & (0::real) <= (x::real) & x < (y::real)
+==> x ^ n < y ^ n"
+  by (import real REAL_POW_LT2)
+
+lemma REAL_POW_MONO_LT: "(1::real) < (x::real) & (m::nat) < (n::nat) ==> x ^ m < x ^ n"
+  by (import real REAL_POW_MONO_LT)
+
+lemma REAL_SUP_SOMEPOS: "(EX x::real. (P::real => bool) x & (0::real) < x) &
+(EX z::real. ALL x::real. P x --> x < z)
+==> EX s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s)"
+  by (import real REAL_SUP_SOMEPOS)
+
+lemma SUP_LEMMA1: "(!!y::real.
+    (EX x::real. (P::real => bool) (x + (d::real)) & y < x) =
+    (y < (s::real)))
+==> (EX x::real. P x & (y::real) < x) = (y < s + d)"
+  by (import real SUP_LEMMA1)
+
+lemma SUP_LEMMA2: "Ex (P::real => bool) ==> EX (d::real) x::real. P (x + d) & (0::real) < x"
+  by (import real SUP_LEMMA2)
+
+lemma SUP_LEMMA3: "EX z::real. ALL x::real. (P::real => bool) x --> x < z
+==> EX x::real. ALL xa::real. P (xa + (d::real)) --> xa < x"
+  by (import real SUP_LEMMA3)
+
+lemma REAL_SUP_EXISTS: "Ex (P::real => bool) & (EX z::real. ALL x::real. P x --> x < z)
+==> EX x::real. ALL y::real. (EX x::real. P x & y < x) = (y < x)"
+  by (import real REAL_SUP_EXISTS)
+
+consts
+  sup :: "(real => bool) => real" 
+
+defs
+  sup_def: "real.sup == %P. SOME s. ALL y. (EX x. P x & y < x) = (y < s)"
+
+lemma sup: "real.sup P = (SOME s. ALL y. (EX x. P x & y < x) = (y < s))"
+  by (import real sup)
+
+lemma REAL_SUP: "Ex P & (EX z. ALL x. P x --> x < z)
+==> (EX x. P x & y < x) = (y < real.sup P)"
+  by (import real REAL_SUP)
+
+lemma REAL_SUP_UBOUND: "[| Ex P & (EX z. ALL x. P x --> x < z); P y |] ==> y <= real.sup P"
+  by (import real REAL_SUP_UBOUND)
+
+lemma SETOK_LE_LT: "(Ex (P::real => bool) & (EX z::real. ALL x::real. P x --> x <= z)) =
+(Ex P & (EX z::real. ALL x::real. P x --> x < z))"
+  by (import real SETOK_LE_LT)
+
+lemma REAL_SUP_LE: "Ex P & (EX z. ALL x. P x --> x <= z)
+==> (EX x. P x & y < x) = (y < real.sup P)"
+  by (import real REAL_SUP_LE)
+
+lemma REAL_SUP_UBOUND_LE: "[| Ex P & (EX z. ALL x. P x --> x <= z); P y |] ==> y <= real.sup P"
+  by (import real REAL_SUP_UBOUND_LE)
+
+consts
+  sumc :: "nat => nat => (nat => real) => real" 
+
+specification (sumc) sumc: "(ALL n f. sumc n 0 f = 0) &
+(ALL n m f. sumc n (Suc m) f = sumc n m f + f (n + m))"
+  by (import real sumc)
+
+consts
+  sum :: "nat * nat => (nat => real) => real" 
+
+defs
+  sum_def: "real.sum == %(x, y). sumc x y"
+
+lemma SUM_DEF: "real.sum (m, n) f = sumc m n f"
+  by (import real SUM_DEF)
+
+lemma sum: "real.sum (xa, 0) x = 0 &
+real.sum (xa, Suc xb) x = real.sum (xa, xb) x + x (xa + xb)"
+  by (import real sum)
+
+lemma SUM_TWO: "real.sum (0, n) f + real.sum (n, p) f = real.sum (0, n + p) f"
+  by (import real SUM_TWO)
+
+lemma SUM_DIFF: "real.sum (m, n) f = real.sum (0, m + n) f - real.sum (0, m) f"
+  by (import real SUM_DIFF)
+
+lemma ABS_SUM: "abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
+  by (import real ABS_SUM)
+
+lemma SUM_LE: "(!!r. m <= r & r < n + m ==> f r <= g r)
+==> real.sum (m, n) f <= real.sum (m, n) g"
+  by (import real SUM_LE)
+
+lemma SUM_EQ: "(!!r. m <= r & r < n + m ==> f r = g r)
+==> real.sum (m, n) f = real.sum (m, n) g"
+  by (import real SUM_EQ)
+
+lemma SUM_POS: "(!!n. 0 <= f n) ==> 0 <= real.sum (m, n) f"
+  by (import real SUM_POS)
+
+lemma SUM_POS_GEN: "(!!n. m <= n ==> 0 <= f n) ==> 0 <= real.sum (m, n) f"
+  by (import real SUM_POS_GEN)
+
+lemma SUM_ABS: "abs (real.sum (m, x) (%m. abs (f m))) = real.sum (m, x) (%m. abs (f m))"
+  by (import real SUM_ABS)
+
+lemma SUM_ABS_LE: "abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
+  by (import real SUM_ABS_LE)
+
+lemma SUM_ZERO: "[| !!n. N <= n ==> f n = 0; N <= m |] ==> real.sum (m, n) f = 0"
+  by (import real SUM_ZERO)
+
+lemma SUM_ADD: "real.sum (m, n) (%n. f n + g n) = real.sum (m, n) f + real.sum (m, n) g"
+  by (import real SUM_ADD)
+
+lemma SUM_CMUL: "real.sum (m, n) (%n. c * f n) = c * real.sum (m, n) f"
+  by (import real SUM_CMUL)
+
+lemma SUM_NEG: "real.sum (n, d) (%n. - f n) = - real.sum (n, d) f"
+  by (import real SUM_NEG)
+
+lemma SUM_SUB: "real.sum (m, n) (%x. f x - g x) = real.sum (m, n) f - real.sum (m, n) g"
+  by (import real SUM_SUB)
+
+lemma SUM_SUBST: "(!!p. m <= p & p < m + n ==> f p = g p)
+==> real.sum (m, n) f = real.sum (m, n) g"
+  by (import real SUM_SUBST)
+
+lemma SUM_NSUB: "real.sum (0, n) f - real n * c = real.sum (0, n) (%p. f p - c)"
+  by (import real SUM_NSUB)
+
+lemma SUM_BOUND: "(!!p. m <= p & p < m + n ==> f p <= k) ==> real.sum (m, n) f <= real n * k"
+  by (import real SUM_BOUND)
+
+lemma SUM_GROUP: "real.sum (0, n) (%m. real.sum (m * k, k) f) = real.sum (0, n * k) f"
+  by (import real SUM_GROUP)
+
+lemma SUM_1: "real.sum (n, 1) f = f n"
+  by (import real SUM_1)
+
+lemma SUM_2: "real.sum (n, 2) f = f n + f (n + 1)"
+  by (import real SUM_2)
+
+lemma SUM_OFFSET: "real.sum (0, n) (%m. f (m + k)) = real.sum (0, n + k) f - real.sum (0, k) f"
+  by (import real SUM_OFFSET)
+
+lemma SUM_REINDEX: "real.sum (m + k, n) f = real.sum (m, n) (%r. f (r + k))"
+  by (import real SUM_REINDEX)
+
+lemma SUM_0: "real.sum (m, n) (%r. 0) = 0"
+  by (import real SUM_0)
+
+lemma SUM_PERMUTE_0: "(!!y. y < n ==> EX! x. x < n & p x = y)
+==> real.sum (0, n) (%n. f (p n)) = real.sum (0, n) f"
+  by (import real SUM_PERMUTE_0)
+
+lemma SUM_CANCEL: "real.sum (n, d) (%n. f (Suc n) - f n) = f (n + d) - f n"
+  by (import real SUM_CANCEL)
+
+lemma REAL_LE_RNEG: "((x::real) <= - (y::real)) = (x + y <= (0::real))"
+  by (import real REAL_LE_RNEG)
+
+lemma REAL_EQ_RDIV_EQ: "(0::real) < (xb::real) ==> ((x::real) = (xa::real) / xb) = (x * xb = xa)"
+  by (import real REAL_EQ_RDIV_EQ)
+
+lemma REAL_EQ_LDIV_EQ: "(0::real) < (xb::real) ==> ((x::real) / xb = (xa::real)) = (x = xa * xb)"
+  by (import real REAL_EQ_LDIV_EQ)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" topology
+
+definition
+  re_Union :: "(('a => bool) => bool) => 'a => bool"  where
+  "re_Union == %P x. EX s. P s & s x"
+
+lemma re_Union: "re_Union P = (%x. EX s. P s & s x)"
+  by (import topology re_Union)
+
+definition
+  re_union :: "('a => bool) => ('a => bool) => 'a => bool"  where
+  "re_union == %P Q x. P x | Q x"
+
+lemma re_union: "re_union P Q = (%x. P x | Q x)"
+  by (import topology re_union)
+
+definition
+  re_intersect :: "('a => bool) => ('a => bool) => 'a => bool"  where
+  "re_intersect == %P Q x. P x & Q x"
+
+lemma re_intersect: "re_intersect P Q = (%x. P x & Q x)"
+  by (import topology re_intersect)
+
+definition
+  re_null :: "'a => bool"  where
+  "re_null == %x. False"
+
+lemma re_null: "re_null = (%x. False)"
+  by (import topology re_null)
+
+definition
+  re_universe :: "'a => bool"  where
+  "re_universe == %x. True"
+
+lemma re_universe: "re_universe = (%x. True)"
+  by (import topology re_universe)
+
+definition
+  re_subset :: "('a => bool) => ('a => bool) => bool"  where
+  "re_subset == %P Q. ALL x. P x --> Q x"
+
+lemma re_subset: "re_subset P Q = (ALL x. P x --> Q x)"
+  by (import topology re_subset)
+
+definition
+  re_compl :: "('a => bool) => 'a => bool"  where
+  "re_compl == %P x. ~ P x"
+
+lemma re_compl: "re_compl P = (%x. ~ P x)"
+  by (import topology re_compl)
+
+lemma SUBSET_REFL: "re_subset P P"
+  by (import topology SUBSET_REFL)
+
+lemma COMPL_MEM: "P x = (~ re_compl P x)"
+  by (import topology COMPL_MEM)
+
+lemma SUBSET_ANTISYM: "(re_subset P Q & re_subset Q P) = (P = Q)"
+  by (import topology SUBSET_ANTISYM)
+
+lemma SUBSET_TRANS: "re_subset P Q & re_subset Q R ==> re_subset P R"
+  by (import topology SUBSET_TRANS)
+
+definition
+  istopology :: "(('a => bool) => bool) => bool"  where
+  "istopology ==
+%L. L re_null &
+    L re_universe &
+    (ALL a b. L a & L b --> L (re_intersect a b)) &
+    (ALL P. re_subset P L --> L (re_Union P))"
+
+lemma istopology: "istopology L =
+(L re_null &
+ L re_universe &
+ (ALL a b. L a & L b --> L (re_intersect a b)) &
+ (ALL P. re_subset P L --> L (re_Union P)))"
+  by (import topology istopology)
+
+typedef (open) ('a) topology = "Collect istopology::(('a::type => bool) => bool) set"
+  by (rule typedef_helper,import topology topology_TY_DEF)
+
+lemmas topology_TY_DEF = typedef_hol2hol4 [OF type_definition_topology]
+
+consts
+  topology :: "(('a => bool) => bool) => 'a topology" 
+  "open" :: "'a topology => ('a => bool) => bool" 
+
+specification ("open" topology) topology_tybij: "(ALL a::'a topology. topology (topology.open a) = a) &
+(ALL r::('a => bool) => bool.
+    istopology r = (topology.open (topology r) = r))"
+  by (import topology topology_tybij)
+
+lemma TOPOLOGY: "topology.open L re_null &
+topology.open L re_universe &
+(ALL a b.
+    topology.open L a & topology.open L b -->
+    topology.open L (re_intersect a b)) &
+(ALL P. re_subset P (topology.open L) --> topology.open L (re_Union P))"
+  by (import topology TOPOLOGY)
+
+lemma TOPOLOGY_UNION: "re_subset xa (topology.open x) ==> topology.open x (re_Union xa)"
+  by (import topology TOPOLOGY_UNION)
+
+definition
+  neigh :: "'a topology => ('a => bool) * 'a => bool"  where
+  "neigh == %tp (N, x). EX P. topology.open tp P & re_subset P N & P x"
+
+lemma neigh: "neigh (tp::'a::type topology) (N::'a::type => bool, x::'a::type) =
+(EX P::'a::type => bool. topology.open tp P & re_subset P N & P x)"
+  by (import topology neigh)
+
+lemma OPEN_OWN_NEIGH: "topology.open (tp::'a::type topology) (S'::'a::type => bool) &
+S' (x::'a::type)
+==> neigh tp (S', x)"
+  by (import topology OPEN_OWN_NEIGH)
+
+lemma OPEN_UNOPEN: "topology.open (tp::'a::type topology) (S'::'a::type => bool) =
+(re_Union (%P::'a::type => bool. topology.open tp P & re_subset P S') = S')"
+  by (import topology OPEN_UNOPEN)
+
+lemma OPEN_SUBOPEN: "topology.open (tp::'a::type topology) (S'::'a::type => bool) =
+(ALL x::'a::type.
+    S' x -->
+    (EX P::'a::type => bool. P x & topology.open tp P & re_subset P S'))"
+  by (import topology OPEN_SUBOPEN)
+
+lemma OPEN_NEIGH: "topology.open (tp::'a::type topology) (S'::'a::type => bool) =
+(ALL x::'a::type.
+    S' x --> (EX N::'a::type => bool. neigh tp (N, x) & re_subset N S'))"
+  by (import topology OPEN_NEIGH)
+
+consts
+  closed :: "'a topology => ('a => bool) => bool" 
+
+defs
+  closed_def: "topology.closed == %L S'. topology.open L (re_compl S')"
+
+lemma closed: "topology.closed L S' = topology.open L (re_compl S')"
+  by (import topology closed)
+
+definition
+  limpt :: "'a topology => 'a => ('a => bool) => bool"  where
+  "limpt == %tp x S'. ALL N. neigh tp (N, x) --> (EX y. x ~= y & S' y & N y)"
+
+lemma limpt: "limpt (tp::'a::type topology) (x::'a::type) (S'::'a::type => bool) =
+(ALL N::'a::type => bool.
+    neigh tp (N, x) --> (EX y::'a::type. x ~= y & S' y & N y))"
+  by (import topology limpt)
+
+lemma CLOSED_LIMPT: "topology.closed (tp::'a::type topology) (S'::'a::type => bool) =
+(ALL x::'a::type. limpt tp x S' --> S' x)"
+  by (import topology CLOSED_LIMPT)
+
+definition
+  ismet :: "('a * 'a => real) => bool"  where
+  "ismet ==
+%m. (ALL x y. (m (x, y) = 0) = (x = y)) &
+    (ALL x y z. m (y, z) <= m (x, y) + m (x, z))"
+
+lemma ismet: "ismet m =
+((ALL x y. (m (x, y) = 0) = (x = y)) &
+ (ALL x y z. m (y, z) <= m (x, y) + m (x, z)))"
+  by (import topology ismet)
+
+typedef (open) ('a) metric = "Collect ismet :: ('a::type * 'a::type => real) set"
+  by (rule typedef_helper,import topology metric_TY_DEF)
+
+lemmas metric_TY_DEF = typedef_hol2hol4 [OF type_definition_metric]
+
+consts
+  metric :: "('a * 'a => real) => 'a metric" 
+  dist :: "'a metric => 'a * 'a => real" 
+
+specification (dist metric) metric_tybij: "(ALL a::'a metric. metric (topology.dist a) = a) &
+(ALL r::'a * 'a => real. ismet r = (topology.dist (metric r) = r))"
+  by (import topology metric_tybij)
+
+lemma METRIC_ISMET: "ismet (topology.dist m)"
+  by (import topology METRIC_ISMET)
+
+lemma METRIC_ZERO: "(topology.dist m (x, y) = 0) = (x = y)"
+  by (import topology METRIC_ZERO)
+
+lemma METRIC_SAME: "topology.dist m (x, x) = 0"
+  by (import topology METRIC_SAME)
+
+lemma METRIC_POS: "0 <= topology.dist m (x, y)"
+  by (import topology METRIC_POS)
+
+lemma METRIC_SYM: "topology.dist m (x, y) = topology.dist m (y, x)"
+  by (import topology METRIC_SYM)
+
+lemma METRIC_TRIANGLE: "topology.dist m (x, z) <= topology.dist m (x, y) + topology.dist m (y, z)"
+  by (import topology METRIC_TRIANGLE)
+
+lemma METRIC_NZ: "x ~= y ==> 0 < topology.dist m (x, y)"
+  by (import topology METRIC_NZ)
+
+definition
+  mtop :: "'a metric => 'a topology"  where
+  "mtop ==
+%m. topology
+     (%S'. ALL x.
+              S' x --> (EX e>0. ALL y. topology.dist m (x, y) < e --> S' y))"
+
+lemma mtop: "mtop m =
+topology
+ (%S'. ALL x. S' x --> (EX e>0. ALL y. topology.dist m (x, y) < e --> S' y))"
+  by (import topology mtop)
+
+lemma mtop_istopology: "istopology
+ (%S'. ALL x. S' x --> (EX e>0. ALL y. topology.dist m (x, y) < e --> S' y))"
+  by (import topology mtop_istopology)
+
+lemma MTOP_OPEN: "topology.open (mtop x) S' =
+(ALL xa. S' xa --> (EX e>0. ALL y. topology.dist x (xa, y) < e --> S' y))"
+  by (import topology MTOP_OPEN)
+
+definition
+  B :: "'a metric => 'a * real => 'a => bool"  where
+  "B == %m (x, e) y. topology.dist m (x, y) < e"
+
+lemma ball: "B m (x, e) = (%y. topology.dist m (x, y) < e)"
+  by (import topology ball)
+
+lemma BALL_OPEN: "0 < e ==> topology.open (mtop m) (B m (x, e))"
+  by (import topology BALL_OPEN)
+
+lemma BALL_NEIGH: "0 < e ==> neigh (mtop m) (B m (x, e), x)"
+  by (import topology BALL_NEIGH)
+
+lemma MTOP_LIMPT: "limpt (mtop m) x S' =
+(ALL e>0. EX y. x ~= y & S' y & topology.dist m (x, y) < e)"
+  by (import topology MTOP_LIMPT)
+
+lemma ISMET_R1: "ismet (%(x, y). abs (y - x))"
+  by (import topology ISMET_R1)
+
+definition
+  mr1 :: "real metric"  where
+  "mr1 == metric (%(x, y). abs (y - x))"
+
+lemma mr1: "mr1 = metric (%(x, y). abs (y - x))"
+  by (import topology mr1)
+
+lemma MR1_DEF: "topology.dist mr1 (x, y) = abs (y - x)"
+  by (import topology MR1_DEF)
+
+lemma MR1_ADD: "topology.dist mr1 (x, x + d) = abs d"
+  by (import topology MR1_ADD)
+
+lemma MR1_SUB: "topology.dist mr1 (x, x - d) = abs d"
+  by (import topology MR1_SUB)
+
+lemma MR1_ADD_POS: "0 <= d ==> topology.dist mr1 (x, x + d) = d"
+  by (import topology MR1_ADD_POS)
+
+lemma MR1_SUB_LE: "0 <= d ==> topology.dist mr1 (x, x - d) = d"
+  by (import topology MR1_SUB_LE)
+
+lemma MR1_ADD_LT: "0 < d ==> topology.dist mr1 (x, x + d) = d"
+  by (import topology MR1_ADD_LT)
+
+lemma MR1_SUB_LT: "0 < d ==> topology.dist mr1 (x, x - d) = d"
+  by (import topology MR1_SUB_LT)
+
+lemma MR1_BETWEEN1: "x < z & topology.dist mr1 (x, y) < z - x ==> y < z"
+  by (import topology MR1_BETWEEN1)
+
+lemma MR1_LIMPT: "limpt (mtop mr1) x re_universe"
+  by (import topology MR1_LIMPT)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" nets
+
+definition
+  dorder :: "('a => 'a => bool) => bool"  where
+  "dorder ==
+%g. ALL x y.
+       g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y))"
+
+lemma dorder: "dorder g =
+(ALL x y.
+    g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y)))"
+  by (import nets dorder)
+
+definition
+  tends :: "('b => 'a) => 'a => 'a topology * ('b => 'b => bool) => bool"  where
+  "tends ==
+%(s::'b => 'a) (l::'a) (tp::'a topology, g::'b => 'b => bool).
+   ALL N::'a => bool.
+      neigh tp (N, l) -->
+      (EX n::'b. g n n & (ALL m::'b. g m n --> N (s m)))"
+
+lemma tends: "tends (s::'b::type => 'a::type) (l::'a::type)
+ (tp::'a::type topology, g::'b::type => 'b::type => bool) =
+(ALL N::'a::type => bool.
+    neigh tp (N, l) -->
+    (EX n::'b::type. g n n & (ALL m::'b::type. g m n --> N (s m))))"
+  by (import nets tends)
+
+definition
+  bounded :: "'a metric * ('b => 'b => bool) => ('b => 'a) => bool"  where
+  "bounded ==
+%(m, g) f. EX k x N. g N N & (ALL n. g n N --> topology.dist m (f n, x) < k)"
+
+lemma bounded: "bounded (m, g) f =
+(EX k x N. g N N & (ALL n. g n N --> topology.dist m (f n, x) < k))"
+  by (import nets bounded)
+
+consts
+  tendsto :: "'a metric * 'a => 'a => 'a => bool" 
+
+defs
+  tendsto_def: "nets.tendsto ==
+%(m, x) y z.
+   0 < topology.dist m (x, y) &
+   topology.dist m (x, y) <= topology.dist m (x, z)"
+
+lemma tendsto: "nets.tendsto (m, x) y z =
+(0 < topology.dist m (x, y) &
+ topology.dist m (x, y) <= topology.dist m (x, z))"
+  by (import nets tendsto)
+
+lemma DORDER_LEMMA: "[| dorder g;
+   (EX n. g n n & (ALL m. g m n --> P m)) &
+   (EX n. g n n & (ALL m. g m n --> Q m)) |]
+==> EX n. g n n & (ALL m. g m n --> P m & Q m)"
+  by (import nets DORDER_LEMMA)
+
+lemma DORDER_NGE: "dorder nat_ge"
+  by (import nets DORDER_NGE)
+
+lemma DORDER_TENDSTO: "dorder (nets.tendsto (m, x))"
+  by (import nets DORDER_TENDSTO)
+
+lemma MTOP_TENDS: "tends (x::'b => 'a) (x0::'a) (mtop (d::'a metric), g::'b => 'b => bool) =
+(ALL e>0::real.
+    EX n::'b. g n n & (ALL m::'b. g m n --> topology.dist d (x m, x0) < e))"
+  by (import nets MTOP_TENDS)
+
+lemma MTOP_TENDS_UNIQ: "[| dorder (g::'b => 'b => bool);
+   tends (x::'b => 'a) (x0::'a) (mtop (d::'a metric), g) &
+   tends x (x1::'a) (mtop d, g) |]
+==> x0 = x1"
+  by (import nets MTOP_TENDS_UNIQ)
+
+lemma SEQ_TENDS: "tends x x0 (mtop d, nat_ge) =
+(ALL xa>0. EX xb. ALL xc>=xb. topology.dist d (x xc, x0) < xa)"
+  by (import nets SEQ_TENDS)
+
+lemma LIM_TENDS: "limpt (mtop m1) x0 re_universe
+==> tends f y0 (mtop m2, nets.tendsto (m1, x0)) =
+    (ALL e>0.
+        EX d>0.
+           ALL x.
+              0 < topology.dist m1 (x, x0) &
+              topology.dist m1 (x, x0) <= d -->
+              topology.dist m2 (f x, y0) < e)"
+  by (import nets LIM_TENDS)
+
+lemma LIM_TENDS2: "limpt (mtop m1) x0 re_universe
+==> tends f y0 (mtop m2, nets.tendsto (m1, x0)) =
+    (ALL e>0.
+        EX d>0.
+           ALL x.
+              0 < topology.dist m1 (x, x0) &
+              topology.dist m1 (x, x0) < d -->
+              topology.dist m2 (f x, y0) < e)"
+  by (import nets LIM_TENDS2)
+
+lemma MR1_BOUNDED: "bounded (mr1, g) f = (EX k N. g N N & (ALL n. g n N --> abs (f n) < k))"
+  by (import nets MR1_BOUNDED)
+
+lemma NET_NULL: "tends x x0 (mtop mr1, g) = tends (%n. x n - x0) 0 (mtop mr1, g)"
+  by (import nets NET_NULL)
+
+lemma NET_CONV_BOUNDED: "tends x x0 (mtop mr1, g) ==> bounded (mr1, g) x"
+  by (import nets NET_CONV_BOUNDED)
+
+lemma NET_CONV_NZ: "tends x x0 (mtop mr1, g) & x0 ~= 0
+==> EX N. g N N & (ALL n. g n N --> x n ~= 0)"
+  by (import nets NET_CONV_NZ)
+
+lemma NET_CONV_IBOUNDED: "tends x x0 (mtop mr1, g) & x0 ~= 0 ==> bounded (mr1, g) (%n. inverse (x n))"
+  by (import nets NET_CONV_IBOUNDED)
+
+lemma NET_NULL_ADD: "[| dorder g; tends x 0 (mtop mr1, g) & tends y 0 (mtop mr1, g) |]
+==> tends (%n. x n + y n) 0 (mtop mr1, g)"
+  by (import nets NET_NULL_ADD)
+
+lemma NET_NULL_MUL: "[| dorder g; bounded (mr1, g) x & tends y 0 (mtop mr1, g) |]
+==> tends (%n. x n * y n) 0 (mtop mr1, g)"
+  by (import nets NET_NULL_MUL)
+
+lemma NET_NULL_CMUL: "tends x 0 (mtop mr1, g) ==> tends (%n. k * x n) 0 (mtop mr1, g)"
+  by (import nets NET_NULL_CMUL)
+
+lemma NET_ADD: "[| dorder g; tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) |]
+==> tends (%n. x n + y n) (x0 + y0) (mtop mr1, g)"
+  by (import nets NET_ADD)
+
+lemma NET_NEG: "dorder g
+==> tends x x0 (mtop mr1, g) = tends (%n. - x n) (- x0) (mtop mr1, g)"
+  by (import nets NET_NEG)
+
+lemma NET_SUB: "[| dorder g; tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) |]
+==> tends (%xa. x xa - y xa) (x0 - y0) (mtop mr1, g)"
+  by (import nets NET_SUB)
+
+lemma NET_MUL: "[| dorder g; tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) |]
+==> tends (%n. x n * y n) (x0 * y0) (mtop mr1, g)"
+  by (import nets NET_MUL)
+
+lemma NET_INV: "[| dorder g; tends x x0 (mtop mr1, g) & x0 ~= 0 |]
+==> tends (%n. inverse (x n)) (inverse x0) (mtop mr1, g)"
+  by (import nets NET_INV)
+
+lemma NET_DIV: "[| dorder g;
+   tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) & y0 ~= 0 |]
+==> tends (%xa. x xa / y xa) (x0 / y0) (mtop mr1, g)"
+  by (import nets NET_DIV)
+
+lemma NET_ABS: "tends x x0 (mtop mr1, g) ==> tends (%n. abs (x n)) (abs x0) (mtop mr1, g)"
+  by (import nets NET_ABS)
+
+lemma NET_LE: "[| dorder g;
+   tends x x0 (mtop mr1, g) &
+   tends y y0 (mtop mr1, g) &
+   (EX N. g N N & (ALL n. g n N --> x n <= y n)) |]
+==> x0 <= y0"
+  by (import nets NET_LE)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" seq
+
+consts
+  "hol4-->" :: "(nat => real) => real => bool" ("hol4-->")
+
+defs
+  "hol4-->_def": "hol4--> == %x x0. tends x x0 (mtop mr1, nat_ge)"
+
+lemma tends_num_real: "hol4--> x x0 = tends x x0 (mtop mr1, nat_ge)"
+  by (import seq tends_num_real)
+
+lemma SEQ: "hol4--> x x0 = (ALL e>0. EX N. ALL n>=N. abs (x n - x0) < e)"
+  by (import seq SEQ)
+
+lemma SEQ_CONST: "hol4--> (%x. k) k"
+  by (import seq SEQ_CONST)
+
+lemma SEQ_ADD: "hol4--> x x0 & hol4--> y y0 ==> hol4--> (%n. x n + y n) (x0 + y0)"
+  by (import seq SEQ_ADD)
+
+lemma SEQ_MUL: "hol4--> x x0 & hol4--> y y0 ==> hol4--> (%n. x n * y n) (x0 * y0)"
+  by (import seq SEQ_MUL)
+
+lemma SEQ_NEG: "hol4--> x x0 = hol4--> (%n. - x n) (- x0)"
+  by (import seq SEQ_NEG)
+
+lemma SEQ_INV: "hol4--> x x0 & x0 ~= 0 ==> hol4--> (%n. inverse (x n)) (inverse x0)"
+  by (import seq SEQ_INV)
+
+lemma SEQ_SUB: "hol4--> x x0 & hol4--> y y0 ==> hol4--> (%n. x n - y n) (x0 - y0)"
+  by (import seq SEQ_SUB)
+
+lemma SEQ_DIV: "hol4--> x x0 & hol4--> y y0 & y0 ~= 0 ==> hol4--> (%n. x n / y n) (x0 / y0)"
+  by (import seq SEQ_DIV)
+
+lemma SEQ_UNIQ: "hol4--> x x1 & hol4--> x x2 ==> x1 = x2"
+  by (import seq SEQ_UNIQ)
+
+consts
+  convergent :: "(nat => real) => bool" 
+
+defs
+  convergent_def: "seq.convergent == %f. Ex (hol4--> f)"
+
+lemma convergent: "seq.convergent f = Ex (hol4--> f)"
+  by (import seq convergent)
+
+definition
+  cauchy :: "(nat => real) => bool"  where
+  "cauchy ==
+%f. ALL e>0. EX N. ALL m n. N <= m & N <= n --> abs (f m - f n) < e"
+
+lemma cauchy: "cauchy f = (ALL e>0. EX N. ALL m n. N <= m & N <= n --> abs (f m - f n) < e)"
+  by (import seq cauchy)
+
+consts
+  lim :: "(nat => real) => real" 
+
+defs
+  lim_def: "seq.lim == %f. Eps (hol4--> f)"
+
+lemma lim: "seq.lim f = Eps (hol4--> f)"
+  by (import seq lim)
+
+lemma SEQ_LIM: "seq.convergent f = hol4--> f (seq.lim f)"
+  by (import seq SEQ_LIM)
+
+consts
+  subseq :: "(nat => nat) => bool" 
+
+defs
+  subseq_def: "seq.subseq == %f. ALL m n. m < n --> f m < f n"
+
+lemma subseq: "seq.subseq f = (ALL m n. m < n --> f m < f n)"
+  by (import seq subseq)
+
+lemma SUBSEQ_SUC: "seq.subseq f = (ALL n. f n < f (Suc n))"
+  by (import seq SUBSEQ_SUC)
+
+consts
+  mono :: "(nat => real) => bool" 
+
+defs
+  mono_def: "seq.mono ==
+%f. (ALL m n. m <= n --> f m <= f n) | (ALL m n. m <= n --> f n <= f m)"
+
+lemma mono: "seq.mono f =
+((ALL m n. m <= n --> f m <= f n) | (ALL m n. m <= n --> f n <= f m))"
+  by (import seq mono)
+
+lemma MONO_SUC: "seq.mono f = ((ALL x. f x <= f (Suc x)) | (ALL n. f (Suc n) <= f n))"
+  by (import seq MONO_SUC)
+
+lemma MAX_LEMMA: "EX k::real. ALL n<N::nat. abs ((s::nat => real) n) < k"
+  by (import seq MAX_LEMMA)
+
+lemma SEQ_BOUNDED: "bounded (mr1, nat_ge) s = (EX k. ALL n. abs (s n) < k)"
+  by (import seq SEQ_BOUNDED)
+
+lemma SEQ_BOUNDED_2: "(!!n. k <= f n & f n <= k') ==> bounded (mr1, nat_ge) f"
+  by (import seq SEQ_BOUNDED_2)
+
+lemma SEQ_CBOUNDED: "cauchy f ==> bounded (mr1, nat_ge) f"
+  by (import seq SEQ_CBOUNDED)
+
+lemma SEQ_ICONV: "bounded (mr1, nat_ge) f & (ALL m n. n <= m --> f n <= f m)
+==> seq.convergent f"
+  by (import seq SEQ_ICONV)
+
+lemma SEQ_NEG_CONV: "seq.convergent f = seq.convergent (%n. - f n)"
+  by (import seq SEQ_NEG_CONV)
+
+lemma SEQ_NEG_BOUNDED: "bounded (mr1, nat_ge) (%n. - f n) = bounded (mr1, nat_ge) f"
+  by (import seq SEQ_NEG_BOUNDED)
+
+lemma SEQ_BCONV: "bounded (mr1, nat_ge) f & seq.mono f ==> seq.convergent f"
+  by (import seq SEQ_BCONV)
+
+lemma SEQ_MONOSUB: "EX f. seq.subseq f & seq.mono (%n. s (f n))"
+  by (import seq SEQ_MONOSUB)
+
+lemma SEQ_SBOUNDED: "bounded (mr1, nat_ge) s ==> bounded (mr1, nat_ge) (%n. s (f n))"
+  by (import seq SEQ_SBOUNDED)
+
+lemma SEQ_SUBLE: "seq.subseq f ==> n <= f n"
+  by (import seq SEQ_SUBLE)
+
+lemma SEQ_DIRECT: "seq.subseq f ==> EX x>=N1. N2 <= f x"
+  by (import seq SEQ_DIRECT)
+
+lemma SEQ_CAUCHY: "cauchy f = seq.convergent f"
+  by (import seq SEQ_CAUCHY)
+
+lemma SEQ_LE: "hol4--> f l & hol4--> g m & (EX x. ALL xa>=x. f xa <= g xa) ==> l <= m"
+  by (import seq SEQ_LE)
+
+lemma SEQ_SUC: "hol4--> f l = hol4--> (%n. f (Suc n)) l"
+  by (import seq SEQ_SUC)
+
+lemma SEQ_ABS: "hol4--> (%n. abs (f n)) 0 = hol4--> f 0"
+  by (import seq SEQ_ABS)
+
+lemma SEQ_ABS_IMP: "hol4--> f l ==> hol4--> (%n. abs (f n)) (abs l)"
+  by (import seq SEQ_ABS_IMP)
+
+lemma SEQ_INV0: "(!!y. EX N. ALL n>=N. y < f n) ==> hol4--> (%n. inverse (f n)) 0"
+  by (import seq SEQ_INV0)
+
+lemma SEQ_POWER_ABS: "abs c < 1 ==> hol4--> (op ^ (abs c)) 0"
+  by (import seq SEQ_POWER_ABS)
+
+lemma SEQ_POWER: "abs c < 1 ==> hol4--> (op ^ c) 0"
+  by (import seq SEQ_POWER)
+
+lemma NEST_LEMMA: "(ALL n. f n <= f (Suc n)) & (ALL n. g (Suc n) <= g n) & (ALL n. f n <= g n)
+==> EX l m.
+       l <= m &
+       ((ALL n. f n <= l) & hol4--> f l) & (ALL n. m <= g n) & hol4--> g m"
+  by (import seq NEST_LEMMA)
+
+lemma NEST_LEMMA_UNIQ: "(ALL n. f n <= f (Suc n)) &
+(ALL n. g (Suc n) <= g n) & (ALL n. f n <= g n) & hol4--> (%n. f n - g n) 0
+==> EX x. ((ALL n. f n <= x) & hol4--> f x) &
+          (ALL n. x <= g n) & hol4--> g x"
+  by (import seq NEST_LEMMA_UNIQ)
+
+consts
+  sums :: "(nat => real) => real => bool" 
+
+defs
+  sums_def: "seq.sums == %f. hol4--> (%n. real.sum (0, n) f)"
+
+lemma sums: "seq.sums f s = hol4--> (%n. real.sum (0, n) f) s"
+  by (import seq sums)
+
+consts
+  summable :: "(nat => real) => bool" 
+
+defs
+  summable_def: "seq.summable == %f. Ex (seq.sums f)"
+
+lemma summable: "seq.summable f = Ex (seq.sums f)"
+  by (import seq summable)
+
+consts
+  suminf :: "(nat => real) => real" 
+
+defs
+  suminf_def: "seq.suminf == %f. Eps (seq.sums f)"
+
+lemma suminf: "seq.suminf f = Eps (seq.sums f)"
+  by (import seq suminf)
+
+lemma SUM_SUMMABLE: "seq.sums f l ==> seq.summable f"
+  by (import seq SUM_SUMMABLE)
+
+lemma SUMMABLE_SUM: "seq.summable f ==> seq.sums f (seq.suminf f)"
+  by (import seq SUMMABLE_SUM)
+
+lemma SUM_UNIQ: "seq.sums f x ==> x = seq.suminf f"
+  by (import seq SUM_UNIQ)
+
+lemma SER_0: "(!!m. n <= m ==> f m = 0) ==> seq.sums f (real.sum (0, n) f)"
+  by (import seq SER_0)
+
+lemma SER_POS_LE: "seq.summable f & (ALL m>=n. 0 <= f m) ==> real.sum (0, n) f <= seq.suminf f"
+  by (import seq SER_POS_LE)
+
+lemma SER_POS_LT: "seq.summable f & (ALL m>=n. 0 < f m) ==> real.sum (0, n) f < seq.suminf f"
+  by (import seq SER_POS_LT)
+
+lemma SER_GROUP: "seq.summable f & 0 < k
+==> seq.sums (%n. real.sum (n * k, k) f) (seq.suminf f)"
+  by (import seq SER_GROUP)
+
+lemma SER_PAIR: "seq.summable f ==> seq.sums (%n. real.sum (2 * n, 2) f) (seq.suminf f)"
+  by (import seq SER_PAIR)
+
+lemma SER_OFFSET: "seq.summable f
+==> seq.sums (%n. f (n + k)) (seq.suminf f - real.sum (0, k) f)"
+  by (import seq SER_OFFSET)
+
+lemma SER_POS_LT_PAIR: "seq.summable f & (ALL d. 0 < f (n + 2 * d) + f (n + (2 * d + 1)))
+==> real.sum (0, n) f < seq.suminf f"
+  by (import seq SER_POS_LT_PAIR)
+
+lemma SER_ADD: "seq.sums x x0 & seq.sums y y0 ==> seq.sums (%n. x n + y n) (x0 + y0)"
+  by (import seq SER_ADD)
+
+lemma SER_CMUL: "seq.sums x x0 ==> seq.sums (%n. c * x n) (c * x0)"
+  by (import seq SER_CMUL)
+
+lemma SER_NEG: "seq.sums x x0 ==> seq.sums (%xa. - x xa) (- x0)"
+  by (import seq SER_NEG)
+
+lemma SER_SUB: "seq.sums x x0 & seq.sums y y0 ==> seq.sums (%xa. x xa - y xa) (x0 - y0)"
+  by (import seq SER_SUB)
+
+lemma SER_CDIV: "seq.sums x x0 ==> seq.sums (%xa. x xa / c) (x0 / c)"
+  by (import seq SER_CDIV)
+
+lemma SER_CAUCHY: "seq.summable f =
+(ALL e>0. EX N. ALL m n. N <= m --> abs (real.sum (m, n) f) < e)"
+  by (import seq SER_CAUCHY)
+
+lemma SER_ZERO: "seq.summable f ==> hol4--> f 0"
+  by (import seq SER_ZERO)
+
+lemma SER_COMPAR: "(EX x. ALL xa>=x. abs (f xa) <= g xa) & seq.summable g ==> seq.summable f"
+  by (import seq SER_COMPAR)
+
+lemma SER_COMPARA: "(EX x. ALL xa>=x. abs (f xa) <= g xa) & seq.summable g
+==> seq.summable (%k. abs (f k))"
+  by (import seq SER_COMPARA)
+
+lemma SER_LE: "(ALL n. f n <= g n) & seq.summable f & seq.summable g
+==> seq.suminf f <= seq.suminf g"
+  by (import seq SER_LE)
+
+lemma SER_LE2: "(ALL n. abs (f n) <= g n) & seq.summable g
+==> seq.summable f & seq.suminf f <= seq.suminf g"
+  by (import seq SER_LE2)
+
+lemma SER_ACONV: "seq.summable (%n. abs (f n)) ==> seq.summable f"
+  by (import seq SER_ACONV)
+
+lemma SER_ABS: "seq.summable (%n. abs (f n))
+==> abs (seq.suminf f) <= seq.suminf (%n. abs (f n))"
+  by (import seq SER_ABS)
+
+lemma GP_FINITE: "x ~= 1 ==> real.sum (0, n) (op ^ x) = (x ^ n - 1) / (x - 1)"
+  by (import seq GP_FINITE)
+
+lemma GP: "abs x < 1 ==> seq.sums (op ^ x) (inverse (1 - x))"
+  by (import seq GP)
+
+lemma SER_RATIO: "c < 1 & (ALL n>=N. abs (f (Suc n)) <= c * abs (f n)) ==> seq.summable f"
+  by (import seq SER_RATIO)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" lim
+
+definition
+  tends_real_real :: "(real => real) => real => real => bool"  where
+  "tends_real_real == %f l x0. tends f l (mtop mr1, nets.tendsto (mr1, x0))"
+
+lemma tends_real_real: "tends_real_real f l x0 = tends f l (mtop mr1, nets.tendsto (mr1, x0))"
+  by (import lim tends_real_real)
+
+lemma LIM: "tends_real_real f y0 x0 =
+(ALL e>0.
+    EX d>0.
+       ALL x. 0 < abs (x - x0) & abs (x - x0) < d --> abs (f x - y0) < e)"
+  by (import lim LIM)
+
+lemma LIM_CONST: "tends_real_real (%x. k) k x"
+  by (import lim LIM_CONST)
+
+lemma LIM_ADD: "tends_real_real f l x & tends_real_real g m x
+==> tends_real_real (%x. f x + g x) (l + m) x"
+  by (import lim LIM_ADD)
+
+lemma LIM_MUL: "tends_real_real f l x & tends_real_real g m x
+==> tends_real_real (%x. f x * g x) (l * m) x"
+  by (import lim LIM_MUL)
+
+lemma LIM_NEG: "tends_real_real f l x = tends_real_real (%x. - f x) (- l) x"
+  by (import lim LIM_NEG)
+
+lemma LIM_INV: "tends_real_real f l x & l ~= 0
+==> tends_real_real (%x. inverse (f x)) (inverse l) x"
+  by (import lim LIM_INV)
+
+lemma LIM_SUB: "tends_real_real f l x & tends_real_real g m x
+==> tends_real_real (%x. f x - g x) (l - m) x"
+  by (import lim LIM_SUB)
+
+lemma LIM_DIV: "tends_real_real f l x & tends_real_real g m x & m ~= 0
+==> tends_real_real (%x. f x / g x) (l / m) x"
+  by (import lim LIM_DIV)
+
+lemma LIM_NULL: "tends_real_real f l x = tends_real_real (%x. f x - l) 0 x"
+  by (import lim LIM_NULL)
+
+lemma LIM_X: "tends_real_real (%x. x) x0 x0"
+  by (import lim LIM_X)
+
+lemma LIM_UNIQ: "tends_real_real f l x & tends_real_real f m x ==> l = m"
+  by (import lim LIM_UNIQ)
+
+lemma LIM_EQUAL: "(!!x. x ~= x0 ==> f x = g x)
+==> tends_real_real f l x0 = tends_real_real g l x0"
+  by (import lim LIM_EQUAL)
+
+lemma LIM_TRANSFORM: "tends_real_real (%x. f x - g x) 0 x0 & tends_real_real g l x0
+==> tends_real_real f l x0"
+  by (import lim LIM_TRANSFORM)
+
+definition
+  diffl :: "(real => real) => real => real => bool"  where
+  "diffl == %f l x. tends_real_real (%h. (f (x + h) - f x) / h) l 0"
+
+lemma diffl: "diffl f l x = tends_real_real (%h. (f (x + h) - f x) / h) l 0"
+  by (import lim diffl)
+
+definition
+  contl :: "(real => real) => real => bool"  where
+  "contl == %f x. tends_real_real (%h. f (x + h)) (f x) 0"
+
+lemma contl: "contl f x = tends_real_real (%h. f (x + h)) (f x) 0"
+  by (import lim contl)
+
+consts
+  differentiable :: "(real => real) => real => bool" 
+
+defs
+  differentiable_def: "lim.differentiable == %f x. EX l. diffl f l x"
+
+lemma differentiable: "lim.differentiable f x = (EX l. diffl f l x)"
+  by (import lim differentiable)
+
+lemma DIFF_UNIQ: "diffl f l x & diffl f m x ==> l = m"
+  by (import lim DIFF_UNIQ)
+
+lemma DIFF_CONT: "diffl f l x ==> contl f x"
+  by (import lim DIFF_CONT)
+
+lemma CONTL_LIM: "contl f x = tends_real_real f (f x) x"
+  by (import lim CONTL_LIM)
+
+lemma DIFF_CARAT: "diffl f l x =
+(EX g. (ALL z. f z - f x = g z * (z - x)) & contl g x & g x = l)"
+  by (import lim DIFF_CARAT)
+
+lemma CONT_CONST: "contl (%x. k) x"
+  by (import lim CONT_CONST)
+
+lemma CONT_ADD: "contl f x & contl g x ==> contl (%x. f x + g x) x"
+  by (import lim CONT_ADD)
+
+lemma CONT_MUL: "contl f x & contl g x ==> contl (%x. f x * g x) x"
+  by (import lim CONT_MUL)
+
+lemma CONT_NEG: "contl f x ==> contl (%x. - f x) x"
+  by (import lim CONT_NEG)
+
+lemma CONT_INV: "contl f x & f x ~= 0 ==> contl (%x. inverse (f x)) x"
+  by (import lim CONT_INV)
+
+lemma CONT_SUB: "contl f x & contl g x ==> contl (%x. f x - g x) x"
+  by (import lim CONT_SUB)
+
+lemma CONT_DIV: "contl f x & contl g x & g x ~= 0 ==> contl (%x. f x / g x) x"
+  by (import lim CONT_DIV)
+
+lemma CONT_COMPOSE: "contl f x & contl g (f x) ==> contl (%x. g (f x)) x"
+  by (import lim CONT_COMPOSE)
+
+lemma IVT: "a <= b & (f a <= y & y <= f b) & (ALL x. a <= x & x <= b --> contl f x)
+==> EX x>=a. x <= b & f x = y"
+  by (import lim IVT)
+
+lemma IVT2: "a <= b & (f b <= y & y <= f a) & (ALL x. a <= x & x <= b --> contl f x)
+==> EX x>=a. x <= b & f x = y"
+  by (import lim IVT2)
+
+lemma DIFF_CONST: "diffl (%x. k) 0 x"
+  by (import lim DIFF_CONST)
+
+lemma DIFF_ADD: "diffl f l x & diffl g m x ==> diffl (%x. f x + g x) (l + m) x"
+  by (import lim DIFF_ADD)
+
+lemma DIFF_MUL: "diffl f l x & diffl g m x ==> diffl (%x. f x * g x) (l * g x + m * f x) x"
+  by (import lim DIFF_MUL)
+
+lemma DIFF_CMUL: "diffl f l x ==> diffl (%x. c * f x) (c * l) x"
+  by (import lim DIFF_CMUL)
+
+lemma DIFF_NEG: "diffl f l x ==> diffl (%x. - f x) (- l) x"
+  by (import lim DIFF_NEG)
+
+lemma DIFF_SUB: "diffl f l x & diffl g m x ==> diffl (%x. f x - g x) (l - m) x"
+  by (import lim DIFF_SUB)
+
+lemma DIFF_CHAIN: "diffl f l (g x) & diffl g m x ==> diffl (%x. f (g x)) (l * m) x"
+  by (import lim DIFF_CHAIN)
+
+lemma DIFF_X: "diffl (%x. x) 1 x"
+  by (import lim DIFF_X)
+
+lemma DIFF_POW: "diffl (%x. x ^ n) (real n * x ^ (n - 1)) x"
+  by (import lim DIFF_POW)
+
+lemma DIFF_XM1: "x ~= 0 ==> diffl inverse (- (inverse x ^ 2)) x"
+  by (import lim DIFF_XM1)
+
+lemma DIFF_INV: "diffl f l x & f x ~= 0 ==> diffl (%x. inverse (f x)) (- (l / f x ^ 2)) x"
+  by (import lim DIFF_INV)
+
+lemma DIFF_DIV: "diffl f l x & diffl g m x & g x ~= 0
+==> diffl (%x. f x / g x) ((l * g x - m * f x) / g x ^ 2) x"
+  by (import lim DIFF_DIV)
+
+lemma DIFF_SUM: "(!!r. m <= r & r < m + n ==> diffl (f r) (f' r x) x)
+==> diffl (%x. real.sum (m, n) (%n. f n x)) (real.sum (m, n) (%r. f' r x)) x"
+  by (import lim DIFF_SUM)
+
+lemma CONT_BOUNDED: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
+==> EX M. ALL x. a <= x & x <= b --> f x <= M"
+  by (import lim CONT_BOUNDED)
+
+lemma CONT_HASSUP: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
+==> EX M. (ALL x. a <= x & x <= b --> f x <= M) &
+          (ALL N<M. EX x>=a. x <= b & N < f x)"
+  by (import lim CONT_HASSUP)
+
+lemma CONT_ATTAINS: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
+==> EX x. (ALL xa. a <= xa & xa <= b --> f xa <= x) &
+          (EX xa>=a. xa <= b & f xa = x)"
+  by (import lim CONT_ATTAINS)
+
+lemma CONT_ATTAINS2: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
+==> EX x. (ALL xa. a <= xa & xa <= b --> x <= f xa) &
+          (EX xa>=a. xa <= b & f xa = x)"
+  by (import lim CONT_ATTAINS2)
+
+lemma CONT_ATTAINS_ALL: "a <= b & (ALL x. a <= x & x <= b --> contl f x)
+==> EX x M.
+       x <= M &
+       (ALL y. x <= y & y <= M --> (EX x>=a. x <= b & f x = y)) &
+       (ALL xa. a <= xa & xa <= b --> x <= f xa & f xa <= M)"
+  by (import lim CONT_ATTAINS_ALL)
+
+lemma DIFF_LINC: "diffl f l x & 0 < l ==> EX d>0. ALL h. 0 < h & h < d --> f x < f (x + h)"
+  by (import lim DIFF_LINC)
+
+lemma DIFF_LDEC: "diffl f l x & l < 0 ==> EX d>0. ALL h. 0 < h & h < d --> f x < f (x - h)"
+  by (import lim DIFF_LDEC)
+
+lemma DIFF_LMAX: "diffl f l x & (EX d>0. ALL y. abs (x - y) < d --> f y <= f x) ==> l = 0"
+  by (import lim DIFF_LMAX)
+
+lemma DIFF_LMIN: "diffl f l x & (EX d>0. ALL y. abs (x - y) < d --> f x <= f y) ==> l = 0"
+  by (import lim DIFF_LMIN)
+
+lemma DIFF_LCONST: "diffl f l x & (EX d>0. ALL y. abs (x - y) < d --> f y = f x) ==> l = 0"
+  by (import lim DIFF_LCONST)
+
+lemma ROLLE: "a < b &
+f a = f b &
+(ALL x. a <= x & x <= b --> contl f x) &
+(ALL x. a < x & x < b --> lim.differentiable f x)
+==> EX z>a. z < b & diffl f 0 z"
+  by (import lim ROLLE)
+
+lemma MVT: "a < b &
+(ALL x. a <= x & x <= b --> contl f x) &
+(ALL x. a < x & x < b --> lim.differentiable f x)
+==> EX l z. a < z & z < b & diffl f l z & f b - f a = (b - a) * l"
+  by (import lim MVT)
+
+lemma DIFF_ISCONST_END: "a < b &
+(ALL x. a <= x & x <= b --> contl f x) &
+(ALL x. a < x & x < b --> diffl f 0 x)
+==> f b = f a"
+  by (import lim DIFF_ISCONST_END)
+
+lemma DIFF_ISCONST: "[| a < b &
+   (ALL x. a <= x & x <= b --> contl f x) &
+   (ALL x. a < x & x < b --> diffl f 0 x);
+   a <= x & x <= b |]
+==> f x = f a"
+  by (import lim DIFF_ISCONST)
+
+lemma DIFF_ISCONST_ALL: "(!!x. diffl f 0 x) ==> f x = f y"
+  by (import lim DIFF_ISCONST_ALL)
+
+lemma INTERVAL_ABS: "((x::real) - (d::real) <= (z::real) & z <= x + d) = (abs (z - x) <= d)"
+  by (import lim INTERVAL_ABS)
+
+lemma CONT_INJ_LEMMA: "0 < d &
+(ALL z. abs (z - x) <= d --> g (f z) = z) &
+(ALL z. abs (z - x) <= d --> contl f z)
+==> ~ (ALL z. abs (z - x) <= d --> f z <= f x)"
+  by (import lim CONT_INJ_LEMMA)
+
+lemma CONT_INJ_LEMMA2: "0 < d &
+(ALL z. abs (z - x) <= d --> g (f z) = z) &
+(ALL z. abs (z - x) <= d --> contl f z)
+==> ~ (ALL z. abs (z - x) <= d --> f x <= f z)"
+  by (import lim CONT_INJ_LEMMA2)
+
+lemma CONT_INJ_RANGE: "0 < d &
+(ALL z. abs (z - x) <= d --> g (f z) = z) &
+(ALL z. abs (z - x) <= d --> contl f z)
+==> EX e>0. ALL y. abs (y - f x) <= e --> (EX z. abs (z - x) <= d & f z = y)"
+  by (import lim CONT_INJ_RANGE)
+
+lemma CONT_INVERSE: "0 < d &
+(ALL z. abs (z - x) <= d --> g (f z) = z) &
+(ALL z. abs (z - x) <= d --> contl f z)
+==> contl g (f x)"
+  by (import lim CONT_INVERSE)
+
+lemma DIFF_INVERSE: "0 < d &
+(ALL z. abs (z - x) <= d --> g (f z) = z) &
+(ALL z. abs (z - x) <= d --> contl f z) & diffl f l x & l ~= 0
+==> diffl g (inverse l) (f x)"
+  by (import lim DIFF_INVERSE)
+
+lemma DIFF_INVERSE_LT: "0 < d &
+(ALL z. abs (z - x) < d --> g (f z) = z) &
+(ALL z. abs (z - x) < d --> contl f z) & diffl f l x & l ~= 0
+==> diffl g (inverse l) (f x)"
+  by (import lim DIFF_INVERSE_LT)
+
+lemma INTERVAL_CLEMMA: "(a::real) < (x::real) & x < (b::real)
+==> EX d>0::real. ALL y::real. abs (y - x) <= d --> a < y & y < b"
+  by (import lim INTERVAL_CLEMMA)
+
+lemma DIFF_INVERSE_OPEN: "a < x &
+x < b &
+(ALL z. a < z & z < b --> g (f z) = z & contl f z) & diffl f l x & l ~= 0
+==> diffl g (inverse l) (f x)"
+  by (import lim DIFF_INVERSE_OPEN)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" powser
+
+lemma POWDIFF_LEMMA: "real.sum (0, Suc n) (%p. x ^ p * y ^ (Suc n - p)) =
+y * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
+  by (import powser POWDIFF_LEMMA)
+
+lemma POWDIFF: "x ^ Suc n - y ^ Suc n =
+(x - y) * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
+  by (import powser POWDIFF)
+
+lemma POWREV: "real.sum (0, Suc n) (%xa. x ^ xa * y ^ (n - xa)) =
+real.sum (0, Suc n) (%xa. x ^ (n - xa) * y ^ xa)"
+  by (import powser POWREV)
+
+lemma POWSER_INSIDEA: "seq.summable (%n. f n * x ^ n) & abs z < abs x
+==> seq.summable (%n. abs (f n) * z ^ n)"
+  by (import powser POWSER_INSIDEA)
+
+lemma POWSER_INSIDE: "seq.summable (%n. f n * x ^ n) & abs z < abs x
+==> seq.summable (%n. f n * z ^ n)"
+  by (import powser POWSER_INSIDE)
+
+consts
+  diffs :: "(nat => real) => nat => real" 
+
+defs
+  diffs_def: "powser.diffs == %c n. real (Suc n) * c (Suc n)"
+
+lemma diffs: "powser.diffs c = (%n. real (Suc n) * c (Suc n))"
+  by (import powser diffs)
+
+lemma DIFFS_NEG: "powser.diffs (%n. - c n) = (%x. - powser.diffs c x)"
+  by (import powser DIFFS_NEG)
+
+lemma DIFFS_LEMMA: "real.sum (0, n) (%n. powser.diffs c n * x ^ n) =
+real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) +
+real n * (c n * x ^ (n - 1))"
+  by (import powser DIFFS_LEMMA)
+
+lemma DIFFS_LEMMA2: "real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) =
+real.sum (0, n) (%n. powser.diffs c n * x ^ n) -
+real n * (c n * x ^ (n - 1))"
+  by (import powser DIFFS_LEMMA2)
+
+lemma DIFFS_EQUIV: "seq.summable (%n. powser.diffs c n * x ^ n)
+==> seq.sums (%n. real n * (c n * x ^ (n - 1)))
+     (seq.suminf (%n. powser.diffs c n * x ^ n))"
+  by (import powser DIFFS_EQUIV)
+
+lemma TERMDIFF_LEMMA1: "real.sum (0, m) (%p. (z + h) ^ (m - p) * z ^ p - z ^ m) =
+real.sum (0, m) (%p. z ^ p * ((z + h) ^ (m - p) - z ^ (m - p)))"
+  by (import powser TERMDIFF_LEMMA1)
+
+lemma TERMDIFF_LEMMA2: "h ~= 0
+==> ((z + h) ^ n - z ^ n) / h - real n * z ^ (n - 1) =
+    h *
+    real.sum (0, n - 1)
+     (%p. z ^ p *
+          real.sum (0, n - 1 - p) (%q. (z + h) ^ q * z ^ (n - 2 - p - q)))"
+  by (import powser TERMDIFF_LEMMA2)
+
+lemma TERMDIFF_LEMMA3: "h ~= 0 & abs z <= k' & abs (z + h) <= k'
+==> abs (((z + h) ^ n - z ^ n) / h - real n * z ^ (n - 1))
+    <= real n * (real (n - 1) * (k' ^ (n - 2) * abs h))"
+  by (import powser TERMDIFF_LEMMA3)
+
+lemma TERMDIFF_LEMMA4: "0 < k & (ALL h. 0 < abs h & abs h < k --> abs (f h) <= k' * abs h)
+==> tends_real_real f 0 0"
+  by (import powser TERMDIFF_LEMMA4)
+
+lemma TERMDIFF_LEMMA5: "0 < k &
+seq.summable f &
+(ALL h. 0 < abs h & abs h < k --> (ALL n. abs (g h n) <= f n * abs h))
+==> tends_real_real (%h. seq.suminf (g h)) 0 0"
+  by (import powser TERMDIFF_LEMMA5)
+
+lemma TERMDIFF: "seq.summable (%n. c n * k' ^ n) &
+seq.summable (%n. powser.diffs c n * k' ^ n) &
+seq.summable (%n. powser.diffs (powser.diffs c) n * k' ^ n) & abs x < abs k'
+==> diffl (%x. seq.suminf (%n. c n * x ^ n))
+     (seq.suminf (%n. powser.diffs c n * x ^ n)) x"
+  by (import powser TERMDIFF)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" transc
+
+consts
+  exp :: "real => real" 
+
+defs
+  exp_def: "transc.exp == %x. seq.suminf (%n. inverse (real (FACT n)) * x ^ n)"
+
+lemma exp: "transc.exp x = seq.suminf (%n. inverse (real (FACT n)) * x ^ n)"
+  by (import transc exp)
+
+consts
+  cos :: "real => real" 
+
+defs
+  cos_def: "transc.cos ==
+%x. seq.suminf
+     (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
+
+lemma cos: "transc.cos x =
+seq.suminf
+ (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
+  by (import transc cos)
+
+consts
+  sin :: "real => real" 
+
+defs
+  sin_def: "transc.sin ==
+%x. seq.suminf
+     (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
+          x ^ n)"
+
+lemma sin: "transc.sin x =
+seq.suminf
+ (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
+      x ^ n)"
+  by (import transc sin)
+
+lemma EXP_CONVERGES: "seq.sums (%n. inverse (real (FACT n)) * x ^ n) (transc.exp x)"
+  by (import transc EXP_CONVERGES)
+
+lemma SIN_CONVERGES: "seq.sums
+ (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
+      x ^ n)
+ (transc.sin x)"
+  by (import transc SIN_CONVERGES)
+
+lemma COS_CONVERGES: "seq.sums
+ (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)
+ (transc.cos x)"
+  by (import transc COS_CONVERGES)
+
+lemma EXP_FDIFF: "powser.diffs (%n. inverse (real (FACT n))) = (%n. inverse (real (FACT n)))"
+  by (import transc EXP_FDIFF)
+
+lemma SIN_FDIFF: "powser.diffs
+ (%n. if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) =
+(%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0)"
+  by (import transc SIN_FDIFF)
+
+lemma COS_FDIFF: "powser.diffs (%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) =
+(%n. - (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)))"
+  by (import transc COS_FDIFF)
+
+lemma SIN_NEGLEMMA: "- transc.sin x =
+seq.suminf
+ (%n. - ((if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
+         x ^ n))"
+  by (import transc SIN_NEGLEMMA)
+
+lemma DIFF_EXP: "diffl transc.exp (transc.exp x) x"
+  by (import transc DIFF_EXP)
+
+lemma DIFF_SIN: "diffl transc.sin (transc.cos x) x"
+  by (import transc DIFF_SIN)
+
+lemma DIFF_COS: "diffl transc.cos (- transc.sin x) x"
+  by (import transc DIFF_COS)
+
+lemma DIFF_COMPOSITE: "(diffl f l x & f x ~= 0 --> diffl (%x. inverse (f x)) (- (l / f x ^ 2)) x) &
+(diffl f l x & diffl g m x & g x ~= 0 -->
+ diffl (%x. f x / g x) ((l * g x - m * f x) / g x ^ 2) x) &
+(diffl f l x & diffl g m x --> diffl (%x. f x + g x) (l + m) x) &
+(diffl f l x & diffl g m x -->
+ diffl (%x. f x * g x) (l * g x + m * f x) x) &
+(diffl f l x & diffl g m x --> diffl (%x. f x - g x) (l - m) x) &
+(diffl f l x --> diffl (%x. - f x) (- l) x) &
+(diffl g m x --> diffl (%x. g x ^ n) (real n * g x ^ (n - 1) * m) x) &
+(diffl g m x --> diffl (%x. transc.exp (g x)) (transc.exp (g x) * m) x) &
+(diffl g m x --> diffl (%x. transc.sin (g x)) (transc.cos (g x) * m) x) &
+(diffl g m x --> diffl (%x. transc.cos (g x)) (- transc.sin (g x) * m) x)"
+  by (import transc DIFF_COMPOSITE)
+
+lemma EXP_0: "transc.exp 0 = 1"
+  by (import transc EXP_0)
+
+lemma EXP_LE_X: "0 <= x ==> 1 + x <= transc.exp x"
+  by (import transc EXP_LE_X)
+
+lemma EXP_LT_1: "0 < x ==> 1 < transc.exp x"
+  by (import transc EXP_LT_1)
+
+lemma EXP_ADD_MUL: "transc.exp (x + y) * transc.exp (- x) = transc.exp y"
+  by (import transc EXP_ADD_MUL)
+
+lemma EXP_NEG_MUL: "transc.exp x * transc.exp (- x) = 1"
+  by (import transc EXP_NEG_MUL)
+
+lemma EXP_NEG_MUL2: "transc.exp (- x) * transc.exp x = 1"
+  by (import transc EXP_NEG_MUL2)
+
+lemma EXP_NEG: "transc.exp (- x) = inverse (transc.exp x)"
+  by (import transc EXP_NEG)
+
+lemma EXP_ADD: "transc.exp (x + y) = transc.exp x * transc.exp y"
+  by (import transc EXP_ADD)
+
+lemma EXP_POS_LE: "0 <= transc.exp x"
+  by (import transc EXP_POS_LE)
+
+lemma EXP_NZ: "transc.exp x ~= 0"
+  by (import transc EXP_NZ)
+
+lemma EXP_POS_LT: "0 < transc.exp x"
+  by (import transc EXP_POS_LT)
+
+lemma EXP_N: "transc.exp (real n * x) = transc.exp x ^ n"
+  by (import transc EXP_N)
+
+lemma EXP_SUB: "transc.exp (x - y) = transc.exp x / transc.exp y"
+  by (import transc EXP_SUB)
+
+lemma EXP_MONO_IMP: "x < y ==> transc.exp x < transc.exp y"
+  by (import transc EXP_MONO_IMP)
+
+lemma EXP_MONO_LT: "(transc.exp x < transc.exp y) = (x < y)"
+  by (import transc EXP_MONO_LT)
+
+lemma EXP_MONO_LE: "(transc.exp x <= transc.exp y) = (x <= y)"
+  by (import transc EXP_MONO_LE)
+
+lemma EXP_INJ: "(transc.exp x = transc.exp y) = (x = y)"
+  by (import transc EXP_INJ)
+
+lemma EXP_TOTAL_LEMMA: "1 <= y ==> EX x>=0. x <= y - 1 & transc.exp x = y"
+  by (import transc EXP_TOTAL_LEMMA)
+
+lemma EXP_TOTAL: "0 < y ==> EX x. transc.exp x = y"
+  by (import transc EXP_TOTAL)
+
+consts
+  ln :: "real => real" 
+
+defs
+  ln_def: "transc.ln == %x. SOME u. transc.exp u = x"
+
+lemma ln: "transc.ln x = (SOME u. transc.exp u = x)"
+  by (import transc ln)
+
+lemma LN_EXP: "transc.ln (transc.exp x) = x"
+  by (import transc LN_EXP)
+
+lemma EXP_LN: "(transc.exp (transc.ln x) = x) = (0 < x)"
+  by (import transc EXP_LN)
+
+lemma LN_MUL: "0 < x & 0 < y ==> transc.ln (x * y) = transc.ln x + transc.ln y"
+  by (import transc LN_MUL)
+
+lemma LN_INJ: "0 < x & 0 < y ==> (transc.ln x = transc.ln y) = (x = y)"
+  by (import transc LN_INJ)
+
+lemma LN_1: "transc.ln 1 = 0"
+  by (import transc LN_1)
+
+lemma LN_INV: "0 < x ==> transc.ln (inverse x) = - transc.ln x"
+  by (import transc LN_INV)
+
+lemma LN_DIV: "0 < x & 0 < y ==> transc.ln (x / y) = transc.ln x - transc.ln y"
+  by (import transc LN_DIV)
+
+lemma LN_MONO_LT: "0 < x & 0 < y ==> (transc.ln x < transc.ln y) = (x < y)"
+  by (import transc LN_MONO_LT)
+
+lemma LN_MONO_LE: "0 < x & 0 < y ==> (transc.ln x <= transc.ln y) = (x <= y)"
+  by (import transc LN_MONO_LE)
+
+lemma LN_POW: "0 < x ==> transc.ln (x ^ n) = real n * transc.ln x"
+  by (import transc LN_POW)
+
+lemma LN_LE: "0 <= x ==> transc.ln (1 + x) <= x"
+  by (import transc LN_LE)
+
+lemma LN_LT_X: "0 < x ==> transc.ln x < x"
+  by (import transc LN_LT_X)
+
+lemma LN_POS: "1 <= x ==> 0 <= transc.ln x"
+  by (import transc LN_POS)
+
+consts
+  root :: "nat => real => real" 
+
+defs
+  root_def: "transc.root == %n x. SOME u. (0 < x --> 0 < u) & u ^ n = x"
+
+lemma root: "transc.root n x = (SOME u. (0 < x --> 0 < u) & u ^ n = x)"
+  by (import transc root)
+
+consts
+  sqrt :: "real => real" 
+
+defs
+  sqrt_def: "transc.sqrt == transc.root 2"
+
+lemma sqrt: "transc.sqrt x = transc.root 2 x"
+  by (import transc sqrt)
+
+lemma ROOT_LT_LEMMA: "0 < x ==> transc.exp (transc.ln x / real (Suc n)) ^ Suc n = x"
+  by (import transc ROOT_LT_LEMMA)
+
+lemma ROOT_LN: "0 < x ==> transc.root (Suc n) x = transc.exp (transc.ln x / real (Suc n))"
+  by (import transc ROOT_LN)
+
+lemma ROOT_0: "transc.root (Suc n) 0 = 0"
+  by (import transc ROOT_0)
+
+lemma ROOT_1: "transc.root (Suc n) 1 = 1"
+  by (import transc ROOT_1)
+
+lemma ROOT_POS_LT: "0 < x ==> 0 < transc.root (Suc n) x"
+  by (import transc ROOT_POS_LT)
+
+lemma ROOT_POW_POS: "0 <= x ==> transc.root (Suc n) x ^ Suc n = x"
+  by (import transc ROOT_POW_POS)
+
+lemma POW_ROOT_POS: "0 <= x ==> transc.root (Suc n) (x ^ Suc n) = x"
+  by (import transc POW_ROOT_POS)
+
+lemma ROOT_POS: "0 <= x ==> 0 <= transc.root (Suc n) x"
+  by (import transc ROOT_POS)
+
+lemma ROOT_POS_UNIQ: "0 <= x & 0 <= y & y ^ Suc n = x ==> transc.root (Suc n) x = y"
+  by (import transc ROOT_POS_UNIQ)
+
+lemma ROOT_MUL: "0 <= x & 0 <= y
+==> transc.root (Suc n) (x * y) =
+    transc.root (Suc n) x * transc.root (Suc n) y"
+  by (import transc ROOT_MUL)
+
+lemma ROOT_INV: "0 <= x ==> transc.root (Suc n) (inverse x) = inverse (transc.root (Suc n) x)"
+  by (import transc ROOT_INV)
+
+lemma ROOT_DIV: "0 <= xa & 0 <= xb
+==> transc.root (Suc x) (xa / xb) =
+    transc.root (Suc x) xa / transc.root (Suc x) xb"
+  by (import transc ROOT_DIV)
+
+lemma ROOT_MONO_LE: "0 <= x & x <= y ==> transc.root (Suc n) x <= transc.root (Suc n) y"
+  by (import transc ROOT_MONO_LE)
+
+lemma SQRT_0: "transc.sqrt 0 = 0"
+  by (import transc SQRT_0)
+
+lemma SQRT_1: "transc.sqrt 1 = 1"
+  by (import transc SQRT_1)
+
+lemma SQRT_POS_LT: "0 < x ==> 0 < transc.sqrt x"
+  by (import transc SQRT_POS_LT)
+
+lemma SQRT_POS_LE: "0 <= x ==> 0 <= transc.sqrt x"
+  by (import transc SQRT_POS_LE)
+
+lemma SQRT_POW2: "(transc.sqrt x ^ 2 = x) = (0 <= x)"
+  by (import transc SQRT_POW2)
+
+lemma SQRT_POW_2: "0 <= x ==> transc.sqrt x ^ 2 = x"
+  by (import transc SQRT_POW_2)
+
+lemma POW_2_SQRT: "0 <= x ==> transc.sqrt (x ^ 2) = x"
+  by (import transc POW_2_SQRT)
+
+lemma SQRT_POS_UNIQ: "0 <= x & 0 <= xa & xa ^ 2 = x ==> transc.sqrt x = xa"
+  by (import transc SQRT_POS_UNIQ)
+
+lemma SQRT_MUL: "0 <= x & 0 <= xa ==> transc.sqrt (x * xa) = transc.sqrt x * transc.sqrt xa"
+  by (import transc SQRT_MUL)
+
+lemma SQRT_INV: "0 <= x ==> transc.sqrt (inverse x) = inverse (transc.sqrt x)"
+  by (import transc SQRT_INV)
+
+lemma SQRT_DIV: "0 <= x & 0 <= xa ==> transc.sqrt (x / xa) = transc.sqrt x / transc.sqrt xa"
+  by (import transc SQRT_DIV)
+
+lemma SQRT_MONO_LE: "0 <= x & x <= xa ==> transc.sqrt x <= transc.sqrt xa"
+  by (import transc SQRT_MONO_LE)
+
+lemma SQRT_EVEN_POW2: "EVEN n ==> transc.sqrt (2 ^ n) = 2 ^ (n div 2)"
+  by (import transc SQRT_EVEN_POW2)
+
+lemma REAL_DIV_SQRT: "0 <= x ==> x / transc.sqrt x = transc.sqrt x"
+  by (import transc REAL_DIV_SQRT)
+
+lemma SQRT_EQ: "x ^ 2 = y & 0 <= x ==> x = transc.sqrt y"
+  by (import transc SQRT_EQ)
+
+lemma SIN_0: "transc.sin 0 = 0"
+  by (import transc SIN_0)
+
+lemma COS_0: "transc.cos 0 = 1"
+  by (import transc COS_0)
+
+lemma SIN_CIRCLE: "transc.sin x ^ 2 + transc.cos x ^ 2 = 1"
+  by (import transc SIN_CIRCLE)
+
+lemma SIN_BOUND: "abs (transc.sin x) <= 1"
+  by (import transc SIN_BOUND)
+
+lemma SIN_BOUNDS: "- 1 <= transc.sin x & transc.sin x <= 1"
+  by (import transc SIN_BOUNDS)
+
+lemma COS_BOUND: "abs (transc.cos x) <= 1"
+  by (import transc COS_BOUND)
+
+lemma COS_BOUNDS: "- 1 <= transc.cos x & transc.cos x <= 1"
+  by (import transc COS_BOUNDS)
+
+lemma SIN_COS_ADD: "(transc.sin (x + y) -
+ (transc.sin x * transc.cos y + transc.cos x * transc.sin y)) ^
+2 +
+(transc.cos (x + y) -
+ (transc.cos x * transc.cos y - transc.sin x * transc.sin y)) ^
+2 =
+0"
+  by (import transc SIN_COS_ADD)
+
+lemma SIN_COS_NEG: "(transc.sin (- x) + transc.sin x) ^ 2 +
+(transc.cos (- x) - transc.cos x) ^ 2 =
+0"
+  by (import transc SIN_COS_NEG)
+
+lemma SIN_ADD: "transc.sin (x + y) =
+transc.sin x * transc.cos y + transc.cos x * transc.sin y"
+  by (import transc SIN_ADD)
+
+lemma COS_ADD: "transc.cos (x + y) =
+transc.cos x * transc.cos y - transc.sin x * transc.sin y"
+  by (import transc COS_ADD)
+
+lemma SIN_NEG: "transc.sin (- x) = - transc.sin x"
+  by (import transc SIN_NEG)
+
+lemma COS_NEG: "transc.cos (- x) = transc.cos x"
+  by (import transc COS_NEG)
+
+lemma SIN_DOUBLE: "transc.sin (2 * x) = 2 * (transc.sin x * transc.cos x)"
+  by (import transc SIN_DOUBLE)
+
+lemma COS_DOUBLE: "transc.cos (2 * x) = transc.cos x ^ 2 - transc.sin x ^ 2"
+  by (import transc COS_DOUBLE)
+
+lemma SIN_PAIRED: "seq.sums (%n. (- 1) ^ n / real (FACT (2 * n + 1)) * x ^ (2 * n + 1))
+ (transc.sin x)"
+  by (import transc SIN_PAIRED)
+
+lemma SIN_POS: "0 < x & x < 2 ==> 0 < transc.sin x"
+  by (import transc SIN_POS)
+
+lemma COS_PAIRED: "seq.sums (%n. (- 1) ^ n / real (FACT (2 * n)) * x ^ (2 * n)) (transc.cos x)"
+  by (import transc COS_PAIRED)
+
+lemma COS_2: "transc.cos 2 < 0"
+  by (import transc COS_2)
+
+lemma COS_ISZERO: "EX! x. 0 <= x & x <= 2 & transc.cos x = 0"
+  by (import transc COS_ISZERO)
+
+consts
+  pi :: "real" 
+
+defs
+  pi_def: "transc.pi == 2 * (SOME x. 0 <= x & x <= 2 & transc.cos x = 0)"
+
+lemma pi: "transc.pi = 2 * (SOME x. 0 <= x & x <= 2 & transc.cos x = 0)"
+  by (import transc pi)
+
+lemma PI2: "transc.pi / 2 = (SOME x. 0 <= x & x <= 2 & transc.cos x = 0)"
+  by (import transc PI2)
+
+lemma COS_PI2: "transc.cos (transc.pi / 2) = 0"
+  by (import transc COS_PI2)
+
+lemma PI2_BOUNDS: "0 < transc.pi / 2 & transc.pi / 2 < 2"
+  by (import transc PI2_BOUNDS)
+
+lemma PI_POS: "0 < transc.pi"
+  by (import transc PI_POS)
+
+lemma SIN_PI2: "transc.sin (transc.pi / 2) = 1"
+  by (import transc SIN_PI2)
+
+lemma COS_PI: "transc.cos transc.pi = - 1"
+  by (import transc COS_PI)
+
+lemma SIN_PI: "transc.sin transc.pi = 0"
+  by (import transc SIN_PI)
+
+lemma SIN_COS: "transc.sin x = transc.cos (transc.pi / 2 - x)"
+  by (import transc SIN_COS)
+
+lemma COS_SIN: "transc.cos x = transc.sin (transc.pi / 2 - x)"
+  by (import transc COS_SIN)
+
+lemma SIN_PERIODIC_PI: "transc.sin (x + transc.pi) = - transc.sin x"
+  by (import transc SIN_PERIODIC_PI)
+
+lemma COS_PERIODIC_PI: "transc.cos (x + transc.pi) = - transc.cos x"
+  by (import transc COS_PERIODIC_PI)
+
+lemma SIN_PERIODIC: "transc.sin (x + 2 * transc.pi) = transc.sin x"
+  by (import transc SIN_PERIODIC)
+
+lemma COS_PERIODIC: "transc.cos (x + 2 * transc.pi) = transc.cos x"
+  by (import transc COS_PERIODIC)
+
+lemma COS_NPI: "transc.cos (real n * transc.pi) = (- 1) ^ n"
+  by (import transc COS_NPI)
+
+lemma SIN_NPI: "transc.sin (real (n::nat) * transc.pi) = (0::real)"
+  by (import transc SIN_NPI)
+
+lemma SIN_POS_PI2: "0 < x & x < transc.pi / 2 ==> 0 < transc.sin x"
+  by (import transc SIN_POS_PI2)
+
+lemma COS_POS_PI2: "0 < x & x < transc.pi / 2 ==> 0 < transc.cos x"
+  by (import transc COS_POS_PI2)
+
+lemma COS_POS_PI: "- (transc.pi / 2) < x & x < transc.pi / 2 ==> 0 < transc.cos x"
+  by (import transc COS_POS_PI)
+
+lemma SIN_POS_PI: "0 < x & x < transc.pi ==> 0 < transc.sin x"
+  by (import transc SIN_POS_PI)
+
+lemma COS_POS_PI2_LE: "0 <= x & x <= transc.pi / 2 ==> 0 <= transc.cos x"
+  by (import transc COS_POS_PI2_LE)
+
+lemma COS_POS_PI_LE: "- (transc.pi / 2) <= x & x <= transc.pi / 2 ==> 0 <= transc.cos x"
+  by (import transc COS_POS_PI_LE)
+
+lemma SIN_POS_PI2_LE: "0 <= x & x <= transc.pi / 2 ==> 0 <= transc.sin x"
+  by (import transc SIN_POS_PI2_LE)
+
+lemma SIN_POS_PI_LE: "0 <= x & x <= transc.pi ==> 0 <= transc.sin x"
+  by (import transc SIN_POS_PI_LE)
+
+lemma COS_TOTAL: "- 1 <= y & y <= 1 ==> EX! x. 0 <= x & x <= transc.pi & transc.cos x = y"
+  by (import transc COS_TOTAL)
+
+lemma SIN_TOTAL: "- 1 <= y & y <= 1
+==> EX! x. - (transc.pi / 2) <= x & x <= transc.pi / 2 & transc.sin x = y"
+  by (import transc SIN_TOTAL)
+
+lemma COS_ZERO_LEMMA: "0 <= x & transc.cos x = 0 ==> EX n. ~ EVEN n & x = real n * (transc.pi / 2)"
+  by (import transc COS_ZERO_LEMMA)
+
+lemma SIN_ZERO_LEMMA: "0 <= x & transc.sin x = 0 ==> EX n. EVEN n & x = real n * (transc.pi / 2)"
+  by (import transc SIN_ZERO_LEMMA)
+
+lemma COS_ZERO: "(transc.cos x = 0) =
+((EX n. ~ EVEN n & x = real n * (transc.pi / 2)) |
+ (EX n. ~ EVEN n & x = - (real n * (transc.pi / 2))))"
+  by (import transc COS_ZERO)
+
+lemma SIN_ZERO: "(transc.sin x = 0) =
+((EX n. EVEN n & x = real n * (transc.pi / 2)) |
+ (EX n. EVEN n & x = - (real n * (transc.pi / 2))))"
+  by (import transc SIN_ZERO)
+
+consts
+  tan :: "real => real" 
+
+defs
+  tan_def: "transc.tan == %x. transc.sin x / transc.cos x"
+
+lemma tan: "transc.tan x = transc.sin x / transc.cos x"
+  by (import transc tan)
+
+lemma TAN_0: "transc.tan 0 = 0"
+  by (import transc TAN_0)
+
+lemma TAN_PI: "transc.tan transc.pi = 0"
+  by (import transc TAN_PI)
+
+lemma TAN_NPI: "transc.tan (real (n::nat) * transc.pi) = (0::real)"
+  by (import transc TAN_NPI)
+
+lemma TAN_NEG: "transc.tan (- x) = - transc.tan x"
+  by (import transc TAN_NEG)
+
+lemma TAN_PERIODIC: "transc.tan (x + 2 * transc.pi) = transc.tan x"
+  by (import transc TAN_PERIODIC)
+
+lemma TAN_ADD: "transc.cos x ~= 0 & transc.cos y ~= 0 & transc.cos (x + y) ~= 0
+==> transc.tan (x + y) =
+    (transc.tan x + transc.tan y) / (1 - transc.tan x * transc.tan y)"
+  by (import transc TAN_ADD)
+
+lemma TAN_DOUBLE: "transc.cos x ~= 0 & transc.cos (2 * x) ~= 0
+==> transc.tan (2 * x) = 2 * transc.tan x / (1 - transc.tan x ^ 2)"
+  by (import transc TAN_DOUBLE)
+
+lemma TAN_POS_PI2: "0 < x & x < transc.pi / 2 ==> 0 < transc.tan x"
+  by (import transc TAN_POS_PI2)
+
+lemma DIFF_TAN: "transc.cos x ~= 0 ==> diffl transc.tan (inverse (transc.cos x ^ 2)) x"
+  by (import transc DIFF_TAN)
+
+lemma TAN_TOTAL_LEMMA: "0 < y ==> EX x>0. x < transc.pi / 2 & y < transc.tan x"
+  by (import transc TAN_TOTAL_LEMMA)
+
+lemma TAN_TOTAL_POS: "0 <= y ==> EX x>=0. x < transc.pi / 2 & transc.tan x = y"
+  by (import transc TAN_TOTAL_POS)
+
+lemma TAN_TOTAL: "EX! x. - (transc.pi / 2) < x & x < transc.pi / 2 & transc.tan x = y"
+  by (import transc TAN_TOTAL)
+
+definition
+  asn :: "real => real"  where
+  "asn ==
+%y. SOME x. - (transc.pi / 2) <= x & x <= transc.pi / 2 & transc.sin x = y"
+
+lemma asn: "asn y =
+(SOME x. - (transc.pi / 2) <= x & x <= transc.pi / 2 & transc.sin x = y)"
+  by (import transc asn)
+
+definition
+  acs :: "real => real"  where
+  "acs == %y. SOME x. 0 <= x & x <= transc.pi & transc.cos x = y"
+
+lemma acs: "acs y = (SOME x. 0 <= x & x <= transc.pi & transc.cos x = y)"
+  by (import transc acs)
+
+definition
+  atn :: "real => real"  where
+  "atn ==
+%y. SOME x. - (transc.pi / 2) < x & x < transc.pi / 2 & transc.tan x = y"
+
+lemma atn: "atn y =
+(SOME x. - (transc.pi / 2) < x & x < transc.pi / 2 & transc.tan x = y)"
+  by (import transc atn)
+
+lemma ASN: "- 1 <= y & y <= 1
+==> - (transc.pi / 2) <= asn y &
+    asn y <= transc.pi / 2 & transc.sin (asn y) = y"
+  by (import transc ASN)
+
+lemma ASN_SIN: "- 1 <= y & y <= 1 ==> transc.sin (asn y) = y"
+  by (import transc ASN_SIN)
+
+lemma ASN_BOUNDS: "- 1 <= y & y <= 1 ==> - (transc.pi / 2) <= asn y & asn y <= transc.pi / 2"
+  by (import transc ASN_BOUNDS)
+
+lemma ASN_BOUNDS_LT: "- 1 < y & y < 1 ==> - (transc.pi / 2) < asn y & asn y < transc.pi / 2"
+  by (import transc ASN_BOUNDS_LT)
+
+lemma SIN_ASN: "- (transc.pi / 2) <= x & x <= transc.pi / 2 ==> asn (transc.sin x) = x"
+  by (import transc SIN_ASN)
+
+lemma ACS: "- 1 <= y & y <= 1
+==> 0 <= acs y & acs y <= transc.pi & transc.cos (acs y) = y"
+  by (import transc ACS)
+
+lemma ACS_COS: "- 1 <= y & y <= 1 ==> transc.cos (acs y) = y"
+  by (import transc ACS_COS)
+
+lemma ACS_BOUNDS: "- 1 <= y & y <= 1 ==> 0 <= acs y & acs y <= transc.pi"
+  by (import transc ACS_BOUNDS)
+
+lemma ACS_BOUNDS_LT: "- 1 < y & y < 1 ==> 0 < acs y & acs y < transc.pi"
+  by (import transc ACS_BOUNDS_LT)
+
+lemma COS_ACS: "0 <= x & x <= transc.pi ==> acs (transc.cos x) = x"
+  by (import transc COS_ACS)
+
+lemma ATN: "- (transc.pi / 2) < atn y & atn y < transc.pi / 2 & transc.tan (atn y) = y"
+  by (import transc ATN)
+
+lemma ATN_TAN: "transc.tan (atn x) = x"
+  by (import transc ATN_TAN)
+
+lemma ATN_BOUNDS: "- (transc.pi / 2) < atn x & atn x < transc.pi / 2"
+  by (import transc ATN_BOUNDS)
+
+lemma TAN_ATN: "- (transc.pi / 2) < x & x < transc.pi / 2 ==> atn (transc.tan x) = x"
+  by (import transc TAN_ATN)
+
+lemma TAN_SEC: "transc.cos x ~= 0 ==> 1 + transc.tan x ^ 2 = inverse (transc.cos x) ^ 2"
+  by (import transc TAN_SEC)
+
+lemma SIN_COS_SQ: "0 <= x & x <= transc.pi
+==> transc.sin x = transc.sqrt (1 - transc.cos x ^ 2)"
+  by (import transc SIN_COS_SQ)
+
+lemma COS_SIN_SQ: "- (transc.pi / 2) <= x & x <= transc.pi / 2
+==> transc.cos x = transc.sqrt (1 - transc.sin x ^ 2)"
+  by (import transc COS_SIN_SQ)
+
+lemma COS_ATN_NZ: "transc.cos (atn x) ~= 0"
+  by (import transc COS_ATN_NZ)
+
+lemma COS_ASN_NZ: "- 1 < x & x < 1 ==> transc.cos (asn x) ~= 0"
+  by (import transc COS_ASN_NZ)
+
+lemma SIN_ACS_NZ: "- 1 < x & x < 1 ==> transc.sin (acs x) ~= 0"
+  by (import transc SIN_ACS_NZ)
+
+lemma COS_SIN_SQRT: "0 <= transc.cos x ==> transc.cos x = transc.sqrt (1 - transc.sin x ^ 2)"
+  by (import transc COS_SIN_SQRT)
+
+lemma SIN_COS_SQRT: "0 <= transc.sin x ==> transc.sin x = transc.sqrt (1 - transc.cos x ^ 2)"
+  by (import transc SIN_COS_SQRT)
+
+lemma DIFF_LN: "0 < x ==> diffl transc.ln (inverse x) x"
+  by (import transc DIFF_LN)
+
+lemma DIFF_ASN_LEMMA: "- 1 < x & x < 1 ==> diffl asn (inverse (transc.cos (asn x))) x"
+  by (import transc DIFF_ASN_LEMMA)
+
+lemma DIFF_ASN: "- 1 < x & x < 1 ==> diffl asn (inverse (transc.sqrt (1 - x ^ 2))) x"
+  by (import transc DIFF_ASN)
+
+lemma DIFF_ACS_LEMMA: "- 1 < x & x < 1 ==> diffl acs (inverse (- transc.sin (acs x))) x"
+  by (import transc DIFF_ACS_LEMMA)
+
+lemma DIFF_ACS: "- 1 < x & x < 1 ==> diffl acs (- inverse (transc.sqrt (1 - x ^ 2))) x"
+  by (import transc DIFF_ACS)
+
+lemma DIFF_ATN: "diffl atn (inverse (1 + x ^ 2)) x"
+  by (import transc DIFF_ATN)
+
+definition
+  division :: "real * real => (nat => real) => bool"  where
+  "division ==
+%(a, b) D.
+   D 0 = a & (EX N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = b))"
+
+lemma division: "division (a, b) D =
+(D 0 = a & (EX N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = b)))"
+  by (import transc division)
+
+definition
+  dsize :: "(nat => real) => nat"  where
+  "dsize == %D. SOME N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = D N)"
+
+lemma dsize: "dsize D = (SOME N. (ALL n<N. D n < D (Suc n)) & (ALL n>=N. D n = D N))"
+  by (import transc dsize)
+
+definition
+  tdiv :: "real * real => (nat => real) * (nat => real) => bool"  where
+  "tdiv ==
+%(a, b) (D, p). division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n))"
+
+lemma tdiv: "tdiv (a, b) (D, p) =
+(division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n)))"
+  by (import transc tdiv)
+
+definition
+  gauge :: "(real => bool) => (real => real) => bool"  where
+  "gauge == %E g. ALL x. E x --> 0 < g x"
+
+lemma gauge: "gauge E g = (ALL x. E x --> 0 < g x)"
+  by (import transc gauge)
+
+definition
+  fine :: "(real => real) => (nat => real) * (nat => real) => bool"  where
+  "fine == %g (D, p). ALL n<dsize D. D (Suc n) - D n < g (p n)"
+
+lemma fine: "fine g (D, p) = (ALL n<dsize D. D (Suc n) - D n < g (p n))"
+  by (import transc fine)
+
+definition
+  rsum :: "(nat => real) * (nat => real) => (real => real) => real"  where
+  "rsum == %(D, p) f. real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
+
+lemma rsum: "rsum (D, p) f = real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
+  by (import transc rsum)
+
+definition
+  Dint :: "real * real => (real => real) => real => bool"  where
+  "Dint ==
+%(a, b) f k.
+   ALL e>0.
+      EX g. gauge (%x. a <= x & x <= b) g &
+            (ALL D p.
+                tdiv (a, b) (D, p) & fine g (D, p) -->
+                abs (rsum (D, p) f - k) < e)"
+
+lemma Dint: "Dint (a, b) f k =
+(ALL e>0.
+    EX g. gauge (%x. a <= x & x <= b) g &
+          (ALL D p.
+              tdiv (a, b) (D, p) & fine g (D, p) -->
+              abs (rsum (D, p) f - k) < e))"
+  by (import transc Dint)
+
+lemma DIVISION_0: "a = b ==> dsize (%n. if n = 0 then a else b) = 0"
+  by (import transc DIVISION_0)
+
+lemma DIVISION_1: "a < b ==> dsize (%n. if n = 0 then a else b) = 1"
+  by (import transc DIVISION_1)
+
+lemma DIVISION_SINGLE: "a <= b ==> division (a, b) (%n. if n = 0 then a else b)"
+  by (import transc DIVISION_SINGLE)
+
+lemma DIVISION_LHS: "division (a, b) D ==> D 0 = a"
+  by (import transc DIVISION_LHS)
+
+lemma DIVISION_THM: "division (a, b) D =
+(D 0 = a & (ALL n<dsize D. D n < D (Suc n)) & (ALL n>=dsize D. D n = b))"
+  by (import transc DIVISION_THM)
+
+lemma DIVISION_RHS: "division (a, b) D ==> D (dsize D) = b"
+  by (import transc DIVISION_RHS)
+
+lemma DIVISION_LT_GEN: "division (a, b) D & m < n & n <= dsize D ==> D m < D n"
+  by (import transc DIVISION_LT_GEN)
+
+lemma DIVISION_LT: "[| division (a, b) D; n < dsize D |] ==> D 0 < D (Suc n)"
+  by (import transc DIVISION_LT)
+
+lemma DIVISION_LE: "division (a, b) D ==> a <= b"
+  by (import transc DIVISION_LE)
+
+lemma DIVISION_GT: "[| division (a, b) D; n < dsize D |] ==> D n < D (dsize D)"
+  by (import transc DIVISION_GT)
+
+lemma DIVISION_EQ: "division (a, b) D ==> (a = b) = (dsize D = 0)"
+  by (import transc DIVISION_EQ)
+
+lemma DIVISION_LBOUND: "division (a, b) D ==> a <= D r"
+  by (import transc DIVISION_LBOUND)
+
+lemma DIVISION_LBOUND_LT: "division (a, b) D & dsize D ~= 0 ==> a < D (Suc n)"
+  by (import transc DIVISION_LBOUND_LT)
+
+lemma DIVISION_UBOUND: "division (a, b) D ==> D r <= b"
+  by (import transc DIVISION_UBOUND)
+
+lemma DIVISION_UBOUND_LT: "division (a, b) D & n < dsize D ==> D n < b"
+  by (import transc DIVISION_UBOUND_LT)
+
+lemma DIVISION_APPEND: "(EX D1 p1. tdiv (a, b) (D1, p1) & fine g (D1, p1)) &
+(EX D2 p2. tdiv (b, c) (D2, p2) & fine g (D2, p2))
+==> EX x p. tdiv (a, c) (x, p) & fine g (x, p)"
+  by (import transc DIVISION_APPEND)
+
+lemma DIVISION_EXISTS: "a <= b & gauge (%x. a <= x & x <= b) g
+==> EX D p. tdiv (a, b) (D, p) & fine g (D, p)"
+  by (import transc DIVISION_EXISTS)
+
+lemma GAUGE_MIN: "gauge E g1 & gauge E g2 ==> gauge E (%x. if g1 x < g2 x then g1 x else g2 x)"
+  by (import transc GAUGE_MIN)
+
+lemma FINE_MIN: "fine (%x. if g1 x < g2 x then g1 x else g2 x) (D, p)
+==> fine g1 (D, p) & fine g2 (D, p)"
+  by (import transc FINE_MIN)
+
+lemma DINT_UNIQ: "a <= b & Dint (a, b) f k1 & Dint (a, b) f k2 ==> k1 = k2"
+  by (import transc DINT_UNIQ)
+
+lemma INTEGRAL_NULL: "Dint (a, a) f 0"
+  by (import transc INTEGRAL_NULL)
+
+lemma FTC1: "a <= b & (ALL x. a <= x & x <= b --> diffl f (f' x) x)
+==> Dint (a, b) f' (f b - f a)"
+  by (import transc FTC1)
+
+lemma MCLAURIN: "0 < h &
+0 < n &
+diff 0 = f &
+(ALL m t. m < n & 0 <= t & t <= h --> diffl (diff m) (diff (Suc m) t) t)
+==> EX t>0.
+       t < h &
+       f h =
+       real.sum (0, n) (%m. diff m 0 / real (FACT m) * h ^ m) +
+       diff n t / real (FACT n) * h ^ n"
+  by (import transc MCLAURIN)
+
+lemma MCLAURIN_NEG: "h < 0 &
+0 < n &
+diff 0 = f &
+(ALL m t. m < n & h <= t & t <= 0 --> diffl (diff m) (diff (Suc m) t) t)
+==> EX t>h.
+       t < 0 &
+       f h =
+       real.sum (0, n) (%m. diff m 0 / real (FACT m) * h ^ m) +
+       diff n t / real (FACT n) * h ^ n"
+  by (import transc MCLAURIN_NEG)
+
+lemma MCLAURIN_ALL_LT: "[| diff 0 = f & (ALL m x. diffl (diff m) (diff (Suc m) x) x);
+   x ~= 0 & 0 < n |]
+==> EX t. 0 < abs t &
+          abs t < abs x &
+          f x =
+          real.sum (0, n) (%m. diff m 0 / real (FACT m) * x ^ m) +
+          diff n t / real (FACT n) * x ^ n"
+  by (import transc MCLAURIN_ALL_LT)
+
+lemma MCLAURIN_ZERO: "(x::real) = (0::real) & (0::nat) < (n::nat)
+==> real.sum (0::nat, n)
+     (%m::nat.
+         (diff::nat => real => real) m (0::real) / real (FACT m) * x ^ m) =
+    diff (0::nat) (0::real)"
+  by (import transc MCLAURIN_ZERO)
+
+lemma MCLAURIN_ALL_LE: "diff 0 = f & (ALL m x. diffl (diff m) (diff (Suc m) x) x)
+==> EX t. abs t <= abs x &
+          f x =
+          real.sum (0, n) (%m. diff m 0 / real (FACT m) * x ^ m) +
+          diff n t / real (FACT n) * x ^ n"
+  by (import transc MCLAURIN_ALL_LE)
+
+lemma MCLAURIN_EXP_LT: "x ~= 0 & 0 < n
+==> EX xa.
+       0 < abs xa &
+       abs xa < abs x &
+       transc.exp x =
+       real.sum (0, n) (%m. x ^ m / real (FACT m)) +
+       transc.exp xa / real (FACT n) * x ^ n"
+  by (import transc MCLAURIN_EXP_LT)
+
+lemma MCLAURIN_EXP_LE: "EX xa.
+   abs xa <= abs x &
+   transc.exp x =
+   real.sum (0, n) (%m. x ^ m / real (FACT m)) +
+   transc.exp xa / real (FACT n) * x ^ n"
+  by (import transc MCLAURIN_EXP_LE)
+
+lemma DIFF_LN_COMPOSITE: "diffl g m x & 0 < g x ==> diffl (%x. transc.ln (g x)) (inverse (g x) * m) x"
+  by (import transc DIFF_LN_COMPOSITE)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" poly
+
+consts
+  poly :: "real list => real => real" 
+
+specification (poly_primdef: poly) poly_def: "(ALL x. poly [] x = 0) & (ALL h t x. poly (h # t) x = h + x * poly t x)"
+  by (import poly poly_def)
+
+consts
+  poly_add :: "real list => real list => real list" 
+
+specification (poly_add_primdef: poly_add) poly_add_def: "(ALL l2. poly_add [] l2 = l2) &
+(ALL h t l2.
+    poly_add (h # t) l2 =
+    (if l2 = [] then h # t else (h + hd l2) # poly_add t (tl l2)))"
+  by (import poly poly_add_def)
+
+consts
+  "##" :: "real => real list => real list" ("##")
+
+specification ("##") poly_cmul_def: "(ALL c. ## c [] = []) & (ALL c h t. ## c (h # t) = c * h # ## c t)"
+  by (import poly poly_cmul_def)
+
+consts
+  poly_neg :: "real list => real list" 
+
+defs
+  poly_neg_primdef: "poly_neg == ## (- 1)"
+
+lemma poly_neg_def: "poly_neg = ## (- 1)"
+  by (import poly poly_neg_def)
+
+consts
+  poly_mul :: "real list => real list => real list" 
+
+specification (poly_mul_primdef: poly_mul) poly_mul_def: "(ALL l2. poly_mul [] l2 = []) &
+(ALL h t l2.
+    poly_mul (h # t) l2 =
+    (if t = [] then ## h l2 else poly_add (## h l2) (0 # poly_mul t l2)))"
+  by (import poly poly_mul_def)
+
+consts
+  poly_exp :: "real list => nat => real list" 
+
+specification (poly_exp_primdef: poly_exp) poly_exp_def: "(ALL p. poly_exp p 0 = [1]) &
+(ALL p n. poly_exp p (Suc n) = poly_mul p (poly_exp p n))"
+  by (import poly poly_exp_def)
+
+consts
+  poly_diff_aux :: "nat => real list => real list" 
+
+specification (poly_diff_aux_primdef: poly_diff_aux) poly_diff_aux_def: "(ALL n. poly_diff_aux n [] = []) &
+(ALL n h t. poly_diff_aux n (h # t) = real n * h # poly_diff_aux (Suc n) t)"
+  by (import poly poly_diff_aux_def)
+
+definition
+  diff :: "real list => real list"  where
+  "diff == %l. if l = [] then [] else poly_diff_aux 1 (tl l)"
+
+lemma poly_diff_def: "diff l = (if l = [] then [] else poly_diff_aux 1 (tl l))"
+  by (import poly poly_diff_def)
+
+lemma POLY_ADD_CLAUSES: "poly_add [] p2 = p2 &
+poly_add p1 [] = p1 &
+poly_add (h1 # t1) (h2 # t2) = (h1 + h2) # poly_add t1 t2"
+  by (import poly POLY_ADD_CLAUSES)
+
+lemma POLY_CMUL_CLAUSES: "## c [] = [] & ## c (h # t) = c * h # ## c t"
+  by (import poly POLY_CMUL_CLAUSES)
+
+lemma POLY_NEG_CLAUSES: "poly_neg [] = [] & poly_neg (h # t) = - h # poly_neg t"
+  by (import poly POLY_NEG_CLAUSES)
+
+lemma POLY_MUL_CLAUSES: "poly_mul [] p2 = [] &
+poly_mul [h1] p2 = ## h1 p2 &
+poly_mul (h1 # k1 # t1) p2 = poly_add (## h1 p2) (0 # poly_mul (k1 # t1) p2)"
+  by (import poly POLY_MUL_CLAUSES)
+
+lemma POLY_DIFF_CLAUSES: "diff [] = [] & diff [c] = [] & diff (h # t) = poly_diff_aux 1 t"
+  by (import poly POLY_DIFF_CLAUSES)
+
+lemma POLY_ADD: "poly (poly_add t p2) x = poly t x + poly p2 x"
+  by (import poly POLY_ADD)
+
+lemma POLY_CMUL: "poly (## c t) x = c * poly t x"
+  by (import poly POLY_CMUL)
+
+lemma POLY_NEG: "poly (poly_neg x) xa = - poly x xa"
+  by (import poly POLY_NEG)
+
+lemma POLY_MUL: "poly (poly_mul t p2) x = poly t x * poly p2 x"
+  by (import poly POLY_MUL)
+
+lemma POLY_EXP: "poly (poly_exp p n) x = poly p x ^ n"
+  by (import poly POLY_EXP)
+
+lemma POLY_DIFF_LEMMA: "diffl (%x. x ^ Suc n * poly t x) (x ^ n * poly (poly_diff_aux (Suc n) t) x)
+ x"
+  by (import poly POLY_DIFF_LEMMA)
+
+lemma POLY_DIFF: "diffl (poly t) (poly (diff t) x) x"
+  by (import poly POLY_DIFF)
+
+lemma POLY_DIFFERENTIABLE: "lim.differentiable (poly l) x"
+  by (import poly POLY_DIFFERENTIABLE)
+
+lemma POLY_CONT: "contl (poly l) x"
+  by (import poly POLY_CONT)
+
+lemma POLY_IVT_POS: "xa < xb & poly x xa < 0 & 0 < poly x xb
+==> EX xc>xa. xc < xb & poly x xc = 0"
+  by (import poly POLY_IVT_POS)
+
+lemma POLY_IVT_NEG: "a < b & 0 < poly p a & poly p b < 0 ==> EX x>a. x < b & poly p x = 0"
+  by (import poly POLY_IVT_NEG)
+
+lemma POLY_MVT: "a < b ==> EX x>a. x < b & poly p b - poly p a = (b - a) * poly (diff p) x"
+  by (import poly POLY_MVT)
+
+lemma POLY_ADD_RZERO: "poly (poly_add x []) = poly x"
+  by (import poly POLY_ADD_RZERO)
+
+lemma POLY_MUL_ASSOC: "poly (poly_mul x (poly_mul xa xb)) = poly (poly_mul (poly_mul x xa) xb)"
+  by (import poly POLY_MUL_ASSOC)
+
+lemma POLY_EXP_ADD: "poly (poly_exp xb (xa + x)) =
+poly (poly_mul (poly_exp xb xa) (poly_exp xb x))"
+  by (import poly POLY_EXP_ADD)
+
+lemma POLY_DIFF_AUX_ADD: "poly (poly_diff_aux n (poly_add t p2)) =
+poly (poly_add (poly_diff_aux n t) (poly_diff_aux n p2))"
+  by (import poly POLY_DIFF_AUX_ADD)
+
+lemma POLY_DIFF_AUX_CMUL: "poly (poly_diff_aux n (## c t)) = poly (## c (poly_diff_aux n t))"
+  by (import poly POLY_DIFF_AUX_CMUL)
+
+lemma POLY_DIFF_AUX_NEG: "poly (poly_diff_aux xa (poly_neg x)) = poly (poly_neg (poly_diff_aux xa x))"
+  by (import poly POLY_DIFF_AUX_NEG)
+
+lemma POLY_DIFF_AUX_MUL_LEMMA: "poly (poly_diff_aux (Suc n) t) = poly (poly_add (poly_diff_aux n t) t)"
+  by (import poly POLY_DIFF_AUX_MUL_LEMMA)
+
+lemma POLY_DIFF_ADD: "poly (diff (poly_add t p2)) = poly (poly_add (diff t) (diff p2))"
+  by (import poly POLY_DIFF_ADD)
+
+lemma POLY_DIFF_CMUL: "poly (diff (## c t)) = poly (## c (diff t))"
+  by (import poly POLY_DIFF_CMUL)
+
+lemma POLY_DIFF_NEG: "poly (diff (poly_neg x)) = poly (poly_neg (diff x))"
+  by (import poly POLY_DIFF_NEG)
+
+lemma POLY_DIFF_MUL_LEMMA: "poly (diff (xa # x)) = poly (poly_add (0 # diff x) x)"
+  by (import poly POLY_DIFF_MUL_LEMMA)
+
+lemma POLY_DIFF_MUL: "poly (diff (poly_mul t p2)) =
+poly (poly_add (poly_mul t (diff p2)) (poly_mul (diff t) p2))"
+  by (import poly POLY_DIFF_MUL)
+
+lemma POLY_DIFF_EXP: "poly (diff (poly_exp p (Suc n))) =
+poly (poly_mul (## (real (Suc n)) (poly_exp p n)) (diff p))"
+  by (import poly POLY_DIFF_EXP)
+
+lemma POLY_DIFF_EXP_PRIME: "poly (diff (poly_exp [- a, 1] (Suc n))) =
+poly (## (real (Suc n)) (poly_exp [- a, 1] n))"
+  by (import poly POLY_DIFF_EXP_PRIME)
+
+lemma POLY_LINEAR_REM: "EX q r. h # t = poly_add [r] (poly_mul [- a, 1] q)"
+  by (import poly POLY_LINEAR_REM)
+
+lemma POLY_LINEAR_DIVIDES: "(poly t a = 0) = (t = [] | (EX q. t = poly_mul [- a, 1] q))"
+  by (import poly POLY_LINEAR_DIVIDES)
+
+lemma POLY_LENGTH_MUL: "length (poly_mul [- a, 1] x) = Suc (length x)"
+  by (import poly POLY_LENGTH_MUL)
+
+lemma POLY_ROOTS_INDEX_LEMMA: "poly p ~= poly [] & length p = n
+==> EX i. ALL x. poly p x = 0 --> (EX m<=n. x = i m)"
+  by (import poly POLY_ROOTS_INDEX_LEMMA)
+
+lemma POLY_ROOTS_INDEX_LENGTH: "poly p ~= poly []
+==> EX i. ALL x. poly p x = 0 --> (EX n<=length p. x = i n)"
+  by (import poly POLY_ROOTS_INDEX_LENGTH)
+
+lemma POLY_ROOTS_FINITE_LEMMA: "poly (p::real list) ~= poly []
+==> EX (N::nat) i::nat => real.
+       ALL x::real. poly p x = (0::real) --> (EX n<N. x = i n)"
+  by (import poly POLY_ROOTS_FINITE_LEMMA)
+
+lemma FINITE_LEMMA: "(!!xb::real. (xa::real => bool) xb ==> EX n<x::nat. xb = (i::nat => real) n)
+==> EX a::real. ALL x::real. xa x --> x < a"
+  by (import poly FINITE_LEMMA)
+
+lemma POLY_ROOTS_FINITE: "(poly (p::real list) ~= poly []) =
+(EX (N::nat) i::nat => real.
+    ALL x::real. poly p x = (0::real) --> (EX n<N. x = i n))"
+  by (import poly POLY_ROOTS_FINITE)
+
+lemma POLY_ENTIRE_LEMMA: "poly p ~= poly [] & poly q ~= poly [] ==> poly (poly_mul p q) ~= poly []"
+  by (import poly POLY_ENTIRE_LEMMA)
+
+lemma POLY_ENTIRE: "(poly (poly_mul p q) = poly []) = (poly p = poly [] | poly q = poly [])"
+  by (import poly POLY_ENTIRE)
+
+lemma POLY_MUL_LCANCEL: "(poly (poly_mul x xa) = poly (poly_mul x xb)) =
+(poly x = poly [] | poly xa = poly xb)"
+  by (import poly POLY_MUL_LCANCEL)
+
+lemma POLY_EXP_EQ_0: "(poly (poly_exp p n) = poly []) = (poly p = poly [] & n ~= 0)"
+  by (import poly POLY_EXP_EQ_0)
+
+lemma POLY_PRIME_EQ_0: "poly [a, 1] ~= poly []"
+  by (import poly POLY_PRIME_EQ_0)
+
+lemma POLY_EXP_PRIME_EQ_0: "poly (poly_exp [a, 1] n) ~= poly []"
+  by (import poly POLY_EXP_PRIME_EQ_0)
+
+lemma POLY_ZERO_LEMMA: "poly (h # t) = poly [] ==> h = 0 & poly t = poly []"
+  by (import poly POLY_ZERO_LEMMA)
+
+lemma POLY_ZERO: "(poly t = poly []) = list_all (%c. c = 0) t"
+  by (import poly POLY_ZERO)
+
+lemma POLY_DIFF_AUX_ISZERO: "list_all (%c. c = 0) (poly_diff_aux (Suc n) t) = list_all (%c. c = 0) t"
+  by (import poly POLY_DIFF_AUX_ISZERO)
+
+lemma POLY_DIFF_ISZERO: "poly (diff x) = poly [] ==> EX h. poly x = poly [h]"
+  by (import poly POLY_DIFF_ISZERO)
+
+lemma POLY_DIFF_ZERO: "poly x = poly [] ==> poly (diff x) = poly []"
+  by (import poly POLY_DIFF_ZERO)
+
+lemma POLY_DIFF_WELLDEF: "poly p = poly q ==> poly (diff p) = poly (diff q)"
+  by (import poly POLY_DIFF_WELLDEF)
+
+definition
+  poly_divides :: "real list => real list => bool"  where
+  "poly_divides == %p1 p2. EX q. poly p2 = poly (poly_mul p1 q)"
+
+lemma poly_divides: "poly_divides p1 p2 = (EX q. poly p2 = poly (poly_mul p1 q))"
+  by (import poly poly_divides)
+
+lemma POLY_PRIMES: "poly_divides [a, 1] (poly_mul p q) =
+(poly_divides [a, 1] p | poly_divides [a, 1] q)"
+  by (import poly POLY_PRIMES)
+
+lemma POLY_DIVIDES_REFL: "poly_divides p p"
+  by (import poly POLY_DIVIDES_REFL)
+
+lemma POLY_DIVIDES_TRANS: "poly_divides p q & poly_divides q r ==> poly_divides p r"
+  by (import poly POLY_DIVIDES_TRANS)
+
+lemma POLY_DIVIDES_EXP: "m <= n ==> poly_divides (poly_exp p m) (poly_exp p n)"
+  by (import poly POLY_DIVIDES_EXP)
+
+lemma POLY_EXP_DIVIDES: "poly_divides (poly_exp p n) q & m <= n ==> poly_divides (poly_exp p m) q"
+  by (import poly POLY_EXP_DIVIDES)
+
+lemma POLY_DIVIDES_ADD: "poly_divides p q & poly_divides p r ==> poly_divides p (poly_add q r)"
+  by (import poly POLY_DIVIDES_ADD)
+
+lemma POLY_DIVIDES_SUB: "poly_divides p q & poly_divides p (poly_add q r) ==> poly_divides p r"
+  by (import poly POLY_DIVIDES_SUB)
+
+lemma POLY_DIVIDES_SUB2: "poly_divides p r & poly_divides p (poly_add q r) ==> poly_divides p q"
+  by (import poly POLY_DIVIDES_SUB2)
+
+lemma POLY_DIVIDES_ZERO: "poly p = poly [] ==> poly_divides q p"
+  by (import poly POLY_DIVIDES_ZERO)
+
+lemma POLY_ORDER_EXISTS: "length p = d & poly p ~= poly []
+==> EX x. poly_divides (poly_exp [- a, 1] x) p &
+          ~ poly_divides (poly_exp [- a, 1] (Suc x)) p"
+  by (import poly POLY_ORDER_EXISTS)
+
+lemma POLY_ORDER: "poly p ~= poly []
+==> EX! n.
+       poly_divides (poly_exp [- a, 1] n) p &
+       ~ poly_divides (poly_exp [- a, 1] (Suc n)) p"
+  by (import poly POLY_ORDER)
+
+definition
+  poly_order :: "real => real list => nat"  where
+  "poly_order ==
+%a p. SOME n.
+         poly_divides (poly_exp [- a, 1] n) p &
+         ~ poly_divides (poly_exp [- a, 1] (Suc n)) p"
+
+lemma poly_order: "poly_order a p =
+(SOME n.
+    poly_divides (poly_exp [- a, 1] n) p &
+    ~ poly_divides (poly_exp [- a, 1] (Suc n)) p)"
+  by (import poly poly_order)
+
+lemma ORDER: "(poly_divides (poly_exp [- a, 1] n) p &
+ ~ poly_divides (poly_exp [- a, 1] (Suc n)) p) =
+(n = poly_order a p & poly p ~= poly [])"
+  by (import poly ORDER)
+
+lemma ORDER_THM: "poly p ~= poly []
+==> poly_divides (poly_exp [- a, 1] (poly_order a p)) p &
+    ~ poly_divides (poly_exp [- a, 1] (Suc (poly_order a p))) p"
+  by (import poly ORDER_THM)
+
+lemma ORDER_UNIQUE: "poly p ~= poly [] &
+poly_divides (poly_exp [- a, 1] n) p &
+~ poly_divides (poly_exp [- a, 1] (Suc n)) p
+==> n = poly_order a p"
+  by (import poly ORDER_UNIQUE)
+
+lemma ORDER_POLY: "poly p = poly q ==> poly_order a p = poly_order a q"
+  by (import poly ORDER_POLY)
+
+lemma ORDER_ROOT: "(poly p a = 0) = (poly p = poly [] | poly_order a p ~= 0)"
+  by (import poly ORDER_ROOT)
+
+lemma ORDER_DIVIDES: "poly_divides (poly_exp [- a, 1] n) p =
+(poly p = poly [] | n <= poly_order a p)"
+  by (import poly ORDER_DIVIDES)
+
+lemma ORDER_DECOMP: "poly p ~= poly []
+==> EX x. poly p = poly (poly_mul (poly_exp [- a, 1] (poly_order a p)) x) &
+          ~ poly_divides [- a, 1] x"
+  by (import poly ORDER_DECOMP)
+
+lemma ORDER_MUL: "poly (poly_mul p q) ~= poly []
+==> poly_order a (poly_mul p q) = poly_order a p + poly_order a q"
+  by (import poly ORDER_MUL)
+
+lemma ORDER_DIFF: "poly (diff p) ~= poly [] & poly_order a p ~= 0
+==> poly_order a p = Suc (poly_order a (diff p))"
+  by (import poly ORDER_DIFF)
+
+lemma POLY_SQUAREFREE_DECOMP_ORDER: "poly (diff p) ~= poly [] &
+poly p = poly (poly_mul q d) &
+poly (diff p) = poly (poly_mul e d) &
+poly d = poly (poly_add (poly_mul r p) (poly_mul s (diff p)))
+==> poly_order a q = (if poly_order a p = 0 then 0 else 1)"
+  by (import poly POLY_SQUAREFREE_DECOMP_ORDER)
+
+definition
+  rsquarefree :: "real list => bool"  where
+  "rsquarefree ==
+%p. poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1)"
+
+lemma rsquarefree: "rsquarefree p =
+(poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1))"
+  by (import poly rsquarefree)
+
+lemma RSQUAREFREE_ROOTS: "rsquarefree p = (ALL a. ~ (poly p a = 0 & poly (diff p) a = 0))"
+  by (import poly RSQUAREFREE_ROOTS)
+
+lemma RSQUAREFREE_DECOMP: "rsquarefree p & poly p a = 0
+==> EX q. poly p = poly (poly_mul [- a, 1] q) & poly q a ~= 0"
+  by (import poly RSQUAREFREE_DECOMP)
+
+lemma POLY_SQUAREFREE_DECOMP: "poly (diff p) ~= poly [] &
+poly p = poly (poly_mul q d) &
+poly (diff p) = poly (poly_mul e d) &
+poly d = poly (poly_add (poly_mul r p) (poly_mul s (diff p)))
+==> rsquarefree q & (ALL x. (poly q x = 0) = (poly p x = 0))"
+  by (import poly POLY_SQUAREFREE_DECOMP)
+
+consts
+  normalize :: "real list => real list" 
+
+specification (normalize) normalize: "normalize [] = [] &
+(ALL h t.
+    normalize (h # t) =
+    (if normalize t = [] then if h = 0 then [] else [h]
+     else h # normalize t))"
+  by (import poly normalize)
+
+lemma POLY_NORMALIZE: "poly (normalize t) = poly t"
+  by (import poly POLY_NORMALIZE)
+
+definition
+  degree :: "real list => nat"  where
+  "degree == %p. PRE (length (normalize p))"
+
+lemma degree: "degree p = PRE (length (normalize p))"
+  by (import poly degree)
+
+lemma DEGREE_ZERO: "poly p = poly [] ==> degree p = 0"
+  by (import poly DEGREE_ZERO)
+
+lemma POLY_ROOTS_FINITE_SET: "poly p ~= poly [] ==> FINITE (GSPEC (%x. (x, poly p x = 0)))"
+  by (import poly POLY_ROOTS_FINITE_SET)
+
+lemma POLY_MONO: "abs x <= k ==> abs (poly xa x) <= poly (map abs xa) k"
+  by (import poly POLY_MONO)
+
+;end_setup
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/HOL4Vec.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,1105 @@
+(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
+
+theory HOL4Vec imports HOL4Base begin
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" res_quan
+
+lemma RES_FORALL_CONJ_DIST: "RES_FORALL P (%i. Q i & R i) = (RES_FORALL P Q & RES_FORALL P R)"
+  by (import res_quan RES_FORALL_CONJ_DIST)
+
+lemma RES_FORALL_DISJ_DIST: "RES_FORALL (%j. P j | Q j) R = (RES_FORALL P R & RES_FORALL Q R)"
+  by (import res_quan RES_FORALL_DISJ_DIST)
+
+lemma RES_FORALL_UNIQUE: "RES_FORALL (op = xa) x = x xa"
+  by (import res_quan RES_FORALL_UNIQUE)
+
+lemma RES_FORALL_FORALL: "(ALL x::'b.
+    RES_FORALL (P::'a => bool) (%i::'a. (R::'a => 'b => bool) i x)) =
+RES_FORALL P (%i::'a. All (R i))"
+  by (import res_quan RES_FORALL_FORALL)
+
+lemma RES_FORALL_REORDER: "RES_FORALL P (%i. RES_FORALL Q (R i)) =
+RES_FORALL Q (%j. RES_FORALL P (%i. R i j))"
+  by (import res_quan RES_FORALL_REORDER)
+
+lemma RES_FORALL_EMPTY: "RES_FORALL EMPTY x"
+  by (import res_quan RES_FORALL_EMPTY)
+
+lemma RES_FORALL_UNIV: "RES_FORALL pred_set.UNIV p = All p"
+  by (import res_quan RES_FORALL_UNIV)
+
+lemma RES_FORALL_NULL: "RES_FORALL p (%x. m) = (p = EMPTY | m)"
+  by (import res_quan RES_FORALL_NULL)
+
+lemma RES_EXISTS_DISJ_DIST: "RES_EXISTS P (%i. Q i | R i) = (RES_EXISTS P Q | RES_EXISTS P R)"
+  by (import res_quan RES_EXISTS_DISJ_DIST)
+
+lemma RES_DISJ_EXISTS_DIST: "RES_EXISTS (%i. P i | Q i) R = (RES_EXISTS P R | RES_EXISTS Q R)"
+  by (import res_quan RES_DISJ_EXISTS_DIST)
+
+lemma RES_EXISTS_EQUAL: "RES_EXISTS (op = xa) x = x xa"
+  by (import res_quan RES_EXISTS_EQUAL)
+
+lemma RES_EXISTS_REORDER: "RES_EXISTS P (%i. RES_EXISTS Q (R i)) =
+RES_EXISTS Q (%j. RES_EXISTS P (%i. R i j))"
+  by (import res_quan RES_EXISTS_REORDER)
+
+lemma RES_EXISTS_EMPTY: "~ RES_EXISTS EMPTY p"
+  by (import res_quan RES_EXISTS_EMPTY)
+
+lemma RES_EXISTS_UNIV: "RES_EXISTS pred_set.UNIV p = Ex p"
+  by (import res_quan RES_EXISTS_UNIV)
+
+lemma RES_EXISTS_NULL: "RES_EXISTS p (%x. m) = (p ~= EMPTY & m)"
+  by (import res_quan RES_EXISTS_NULL)
+
+lemma RES_EXISTS_ALT: "RES_EXISTS p m = (IN (RES_SELECT p m) p & m (RES_SELECT p m))"
+  by (import res_quan RES_EXISTS_ALT)
+
+lemma RES_EXISTS_UNIQUE_EMPTY: "~ RES_EXISTS_UNIQUE EMPTY p"
+  by (import res_quan RES_EXISTS_UNIQUE_EMPTY)
+
+lemma RES_EXISTS_UNIQUE_UNIV: "RES_EXISTS_UNIQUE pred_set.UNIV p = Ex1 p"
+  by (import res_quan RES_EXISTS_UNIQUE_UNIV)
+
+lemma RES_EXISTS_UNIQUE_NULL: "RES_EXISTS_UNIQUE p (%x. m) = ((EX x. p = INSERT x EMPTY) & m)"
+  by (import res_quan RES_EXISTS_UNIQUE_NULL)
+
+lemma RES_EXISTS_UNIQUE_ALT: "RES_EXISTS_UNIQUE p m =
+RES_EXISTS p (%x. m x & RES_FORALL p (%y. m y --> y = x))"
+  by (import res_quan RES_EXISTS_UNIQUE_ALT)
+
+lemma RES_SELECT_EMPTY: "RES_SELECT EMPTY p = (SOME x. False)"
+  by (import res_quan RES_SELECT_EMPTY)
+
+lemma RES_SELECT_UNIV: "RES_SELECT pred_set.UNIV p = Eps p"
+  by (import res_quan RES_SELECT_UNIV)
+
+lemma RES_ABSTRACT: "IN x p ==> RES_ABSTRACT p m x = m x"
+  by (import res_quan RES_ABSTRACT)
+
+lemma RES_ABSTRACT_EQUAL: "(!!x. IN x p ==> m1 x = m2 x) ==> RES_ABSTRACT p m1 = RES_ABSTRACT p m2"
+  by (import res_quan RES_ABSTRACT_EQUAL)
+
+lemma RES_ABSTRACT_IDEMPOT: "RES_ABSTRACT p (RES_ABSTRACT p m) = RES_ABSTRACT p m"
+  by (import res_quan RES_ABSTRACT_IDEMPOT)
+
+lemma RES_ABSTRACT_EQUAL_EQ: "(RES_ABSTRACT p m1 = RES_ABSTRACT p m2) = (ALL x. IN x p --> m1 x = m2 x)"
+  by (import res_quan RES_ABSTRACT_EQUAL_EQ)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" word_base
+
+typedef (open) ('a) word = "{x. ALL word.
+       (ALL a0. (EX a. a0 = CONSTR 0 a (%n. BOTTOM)) --> word a0) -->
+       word x} :: ('a::type list recspace set)"
+  by (rule typedef_helper,import word_base word_TY_DEF)
+
+lemmas word_TY_DEF = typedef_hol2hol4 [OF type_definition_word]
+
+consts
+  mk_word :: "'a list recspace => 'a word" 
+  dest_word :: "'a word => 'a list recspace" 
+
+specification (dest_word mk_word) word_repfns: "(ALL a::'a word. mk_word (dest_word a) = a) &
+(ALL r::'a list recspace.
+    (ALL word::'a list recspace => bool.
+        (ALL a0::'a list recspace.
+            (EX a::'a list. a0 = CONSTR (0::nat) a (%n::nat. BOTTOM)) -->
+            word a0) -->
+        word r) =
+    (dest_word (mk_word r) = r))"
+  by (import word_base word_repfns)
+
+consts
+  word_base0 :: "'a list => 'a word" 
+
+defs
+  word_base0_primdef: "word_base0 == %a. mk_word (CONSTR 0 a (%n. BOTTOM))"
+
+lemma word_base0_def: "word_base0 = (%a. mk_word (CONSTR 0 a (%n. BOTTOM)))"
+  by (import word_base word_base0_def)
+
+definition
+  WORD :: "'a list => 'a word"  where
+  "WORD == word_base0"
+
+lemma WORD: "WORD = word_base0"
+  by (import word_base WORD)
+
+consts
+  word_case :: "('a list => 'b) => 'a word => 'b" 
+
+specification (word_case_primdef: word_case) word_case_def: "ALL f a. word_base.word_case f (WORD a) = f a"
+  by (import word_base word_case_def)
+
+consts
+  word_size :: "('a => nat) => 'a word => nat" 
+
+specification (word_size_primdef: word_size) word_size_def: "ALL f a. word_base.word_size f (WORD a) = 1 + Compatibility.list_size f a"
+  by (import word_base word_size_def)
+
+lemma word_11: "(WORD a = WORD a') = (a = a')"
+  by (import word_base word_11)
+
+lemma word_case_cong: "M = M' & (ALL a. M' = WORD a --> f a = f' a)
+==> word_base.word_case f M = word_base.word_case f' M'"
+  by (import word_base word_case_cong)
+
+lemma word_nchotomy: "EX l. x = WORD l"
+  by (import word_base word_nchotomy)
+
+lemma word_Axiom: "EX fn. ALL a. fn (WORD a) = f a"
+  by (import word_base word_Axiom)
+
+lemma word_induction: "(!!a. P (WORD a)) ==> P x"
+  by (import word_base word_induction)
+
+lemma word_Ax: "EX fn. ALL a. fn (WORD a) = f a"
+  by (import word_base word_Ax)
+
+lemma WORD_11: "(WORD x = WORD xa) = (x = xa)"
+  by (import word_base WORD_11)
+
+lemma word_induct: "(!!l. x (WORD l)) ==> x xa"
+  by (import word_base word_induct)
+
+lemma word_cases: "EX l. x = WORD l"
+  by (import word_base word_cases)
+
+consts
+  WORDLEN :: "'a word => nat" 
+
+specification (WORDLEN) WORDLEN_DEF: "ALL l. WORDLEN (WORD l) = length l"
+  by (import word_base WORDLEN_DEF)
+
+consts
+  PWORDLEN :: "nat => 'a word => bool" 
+
+defs
+  PWORDLEN_primdef: "PWORDLEN == %n. GSPEC (%w. (w, WORDLEN w = n))"
+
+lemma PWORDLEN_def: "PWORDLEN n = GSPEC (%w. (w, WORDLEN w = n))"
+  by (import word_base PWORDLEN_def)
+
+lemma IN_PWORDLEN: "IN (WORD l) (PWORDLEN n) = (length l = n)"
+  by (import word_base IN_PWORDLEN)
+
+lemma PWORDLEN: "IN w (PWORDLEN n) = (WORDLEN w = n)"
+  by (import word_base PWORDLEN)
+
+lemma PWORDLEN0: "IN w (PWORDLEN 0) ==> w = WORD []"
+  by (import word_base PWORDLEN0)
+
+lemma PWORDLEN1: "IN (WORD [x]) (PWORDLEN 1)"
+  by (import word_base PWORDLEN1)
+
+consts
+  WSEG :: "nat => nat => 'a word => 'a word" 
+
+specification (WSEG) WSEG_DEF: "ALL m k l. WSEG m k (WORD l) = WORD (LASTN m (BUTLASTN k l))"
+  by (import word_base WSEG_DEF)
+
+lemma WSEG0: "WSEG 0 k w = WORD []"
+  by (import word_base WSEG0)
+
+lemma WSEG_PWORDLEN: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k. m + k <= n --> IN (WSEG m k w) (PWORDLEN m))"
+  by (import word_base WSEG_PWORDLEN)
+
+lemma WSEG_WORDLEN: "RES_FORALL (PWORDLEN x)
+ (%xa. ALL xb xc. xb + xc <= x --> WORDLEN (WSEG xb xc xa) = xb)"
+  by (import word_base WSEG_WORDLEN)
+
+lemma WSEG_WORD_LENGTH: "RES_FORALL (PWORDLEN n) (%w. WSEG n 0 w = w)"
+  by (import word_base WSEG_WORD_LENGTH)
+
+consts
+  bit :: "nat => 'a word => 'a" 
+
+specification (bit) BIT_DEF: "ALL k l. bit k (WORD l) = ELL k l"
+  by (import word_base BIT_DEF)
+
+lemma BIT0: "bit 0 (WORD [x]) = x"
+  by (import word_base BIT0)
+
+lemma WSEG_BIT: "RES_FORALL (PWORDLEN n) (%w. ALL k<n. WSEG 1 k w = WORD [bit k w])"
+  by (import word_base WSEG_BIT)
+
+lemma BIT_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k j.
+         m + k <= n --> j < m --> bit j (WSEG m k w) = bit (j + k) w)"
+  by (import word_base BIT_WSEG)
+
+consts
+  MSB :: "'a word => 'a" 
+
+specification (MSB) MSB_DEF: "ALL l. MSB (WORD l) = hd l"
+  by (import word_base MSB_DEF)
+
+lemma MSB: "RES_FORALL (PWORDLEN n) (%w. 0 < n --> MSB w = bit (PRE n) w)"
+  by (import word_base MSB)
+
+consts
+  LSB :: "'a word => 'a" 
+
+specification (LSB) LSB_DEF: "ALL l. LSB (WORD l) = last l"
+  by (import word_base LSB_DEF)
+
+lemma LSB: "RES_FORALL (PWORDLEN n) (%w. 0 < n --> LSB w = bit 0 w)"
+  by (import word_base LSB)
+
+consts
+  WSPLIT :: "nat => 'a word => 'a word * 'a word" 
+
+specification (WSPLIT) WSPLIT_DEF: "ALL m l. WSPLIT m (WORD l) = (WORD (BUTLASTN m l), WORD (LASTN m l))"
+  by (import word_base WSPLIT_DEF)
+
+consts
+  WCAT :: "'a word * 'a word => 'a word" 
+
+specification (WCAT) WCAT_DEF: "ALL l1 l2. WCAT (WORD l1, WORD l2) = WORD (l1 @ l2)"
+  by (import word_base WCAT_DEF)
+
+lemma WORD_PARTITION: "(ALL n::nat.
+    RES_FORALL (PWORDLEN n)
+     (%w::'a word. ALL m<=n. WCAT (WSPLIT m w) = w)) &
+(ALL (n::nat) m::nat.
+    RES_FORALL (PWORDLEN n)
+     (%w1::'a word.
+         RES_FORALL (PWORDLEN m)
+          (%w2::'a word. WSPLIT m (WCAT (w1, w2)) = (w1, w2))))"
+  by (import word_base WORD_PARTITION)
+
+lemma WCAT_ASSOC: "WCAT (w1, WCAT (w2, w3)) = WCAT (WCAT (w1, w2), w3)"
+  by (import word_base WCAT_ASSOC)
+
+lemma WCAT0: "WCAT (WORD [], w) = w & WCAT (w, WORD []) = w"
+  by (import word_base WCAT0)
+
+lemma WCAT_11: "RES_FORALL (PWORDLEN m)
+ (%wm1. RES_FORALL (PWORDLEN m)
+         (%wm2. RES_FORALL (PWORDLEN n)
+                 (%wn1. RES_FORALL (PWORDLEN n)
+                         (%wn2. (WCAT (wm1, wn1) = WCAT (wm2, wn2)) =
+                                (wm1 = wm2 & wn1 = wn2)))))"
+  by (import word_base WCAT_11)
+
+lemma WSPLIT_PWORDLEN: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m<=n.
+         IN (fst (WSPLIT m w)) (PWORDLEN (n - m)) &
+         IN (snd (WSPLIT m w)) (PWORDLEN m))"
+  by (import word_base WSPLIT_PWORDLEN)
+
+lemma WCAT_PWORDLEN: "RES_FORALL (PWORDLEN n1)
+ (%w1. ALL n2.
+          RES_FORALL (PWORDLEN n2)
+           (%w2. IN (WCAT (w1, w2)) (PWORDLEN (n1 + n2))))"
+  by (import word_base WCAT_PWORDLEN)
+
+lemma WORDLEN_SUC_WCAT: "IN w (PWORDLEN (Suc n))
+==> RES_EXISTS (PWORDLEN 1)
+     (%b. RES_EXISTS (PWORDLEN n) (%w'. w = WCAT (b, w')))"
+  by (import word_base WORDLEN_SUC_WCAT)
+
+lemma WSEG_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m1 k1 m2 k2.
+         m1 + k1 <= n & m2 + k2 <= m1 -->
+         WSEG m2 k2 (WSEG m1 k1 w) = WSEG m2 (k1 + k2) w)"
+  by (import word_base WSEG_WSEG)
+
+lemma WSPLIT_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL k<=n. WSPLIT k w = (WSEG (n - k) k w, WSEG k 0 w))"
+  by (import word_base WSPLIT_WSEG)
+
+lemma WSPLIT_WSEG1: "RES_FORALL (PWORDLEN n) (%w. ALL k<=n. fst (WSPLIT k w) = WSEG (n - k) k w)"
+  by (import word_base WSPLIT_WSEG1)
+
+lemma WSPLIT_WSEG2: "RES_FORALL (PWORDLEN n) (%w. ALL k<=n. snd (WSPLIT k w) = WSEG k 0 w)"
+  by (import word_base WSPLIT_WSEG2)
+
+lemma WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m1 m2 k.
+         m1 + (m2 + k) <= n -->
+         WCAT (WSEG m2 (m1 + k) w, WSEG m1 k w) = WSEG (m1 + m2) k w)"
+  by (import word_base WCAT_WSEG_WSEG)
+
+lemma WORD_SPLIT: "RES_FORALL (PWORDLEN (x + xa)) (%w. w = WCAT (WSEG x xa w, WSEG xa 0 w))"
+  by (import word_base WORD_SPLIT)
+
+lemma WORDLEN_SUC_WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG 1 n w, WSEG n 0 w))"
+  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG)
+
+lemma WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WSEG 1 0 w))"
+  by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT)
+
+lemma WORDLEN_SUC_WCAT_BIT_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WORD [bit n w], WSEG n 0 w))"
+  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG)
+
+lemma WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WORD [bit 0 w]))"
+  by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT)
+
+lemma WSEG_WCAT1: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n1 n2 (WCAT (w1, w2)) = w1))"
+  by (import word_base WSEG_WCAT1)
+
+lemma WSEG_WCAT2: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n2 0 (WCAT (w1, w2)) = w2))"
+  by (import word_base WSEG_WCAT2)
+
+lemma WSEG_SUC: "RES_FORALL (PWORDLEN n)
+ (%w. ALL k m1.
+         k + Suc m1 < n -->
+         WSEG (Suc m1) k w = WCAT (WSEG 1 (k + m1) w, WSEG m1 k w))"
+  by (import word_base WSEG_SUC)
+
+lemma WORD_CONS_WCAT: "WORD (x # l) = WCAT (WORD [x], WORD l)"
+  by (import word_base WORD_CONS_WCAT)
+
+lemma WORD_SNOC_WCAT: "WORD (SNOC x l) = WCAT (WORD l, WORD [x])"
+  by (import word_base WORD_SNOC_WCAT)
+
+lemma BIT_WCAT_FST: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2)
+        (%w2. ALL k.
+                 n2 <= k & k < n1 + n2 -->
+                 bit k (WCAT (w1, w2)) = bit (k - n2) w1))"
+  by (import word_base BIT_WCAT_FST)
+
+lemma BIT_WCAT_SND: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2)
+        (%w2. ALL k<n2. bit k (WCAT (w1, w2)) = bit k w2))"
+  by (import word_base BIT_WCAT_SND)
+
+lemma BIT_WCAT1: "RES_FORALL (PWORDLEN n) (%w. ALL b. bit n (WCAT (WORD [b], w)) = b)"
+  by (import word_base BIT_WCAT1)
+
+lemma WSEG_WCAT_WSEG1: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2)
+        (%w2. ALL m k.
+                 m <= n1 & n2 <= k -->
+                 WSEG m k (WCAT (w1, w2)) = WSEG m (k - n2) w1))"
+  by (import word_base WSEG_WCAT_WSEG1)
+
+lemma WSEG_WCAT_WSEG2: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2)
+        (%w2. ALL m k.
+                 m + k <= n2 --> WSEG m k (WCAT (w1, w2)) = WSEG m k w2))"
+  by (import word_base WSEG_WCAT_WSEG2)
+
+lemma WSEG_WCAT_WSEG: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2)
+        (%w2. ALL m k.
+                 m + k <= n1 + n2 & k < n2 & n2 <= m + k -->
+                 WSEG m k (WCAT (w1, w2)) =
+                 WCAT (WSEG (m + k - n2) 0 w1, WSEG (n2 - k) k w2)))"
+  by (import word_base WSEG_WCAT_WSEG)
+
+lemma BIT_EQ_IMP_WORD_EQ: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. (ALL k<n. bit k w1 = bit k w2) --> w1 = w2))"
+  by (import word_base BIT_EQ_IMP_WORD_EQ)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" word_num
+
+definition
+  LVAL :: "('a => nat) => nat => 'a list => nat"  where
+  "LVAL == %f b. foldl (%e x. b * e + f x) 0"
+
+lemma LVAL_DEF: "LVAL f b l = foldl (%e x. b * e + f x) 0 l"
+  by (import word_num LVAL_DEF)
+
+consts
+  NVAL :: "('a => nat) => nat => 'a word => nat" 
+
+specification (NVAL) NVAL_DEF: "ALL f b l. NVAL f b (WORD l) = LVAL f b l"
+  by (import word_num NVAL_DEF)
+
+lemma LVAL: "(ALL (x::'a => nat) xa::nat. LVAL x xa [] = (0::nat)) &
+(ALL (x::'a list) (xa::'a => nat) (xb::nat) xc::'a.
+    LVAL xa xb (xc # x) = xa xc * xb ^ length x + LVAL xa xb x)"
+  by (import word_num LVAL)
+
+lemma LVAL_SNOC: "LVAL f b (SNOC h l) = LVAL f b l * b + f h"
+  by (import word_num LVAL_SNOC)
+
+lemma LVAL_MAX: "(!!x. f x < b) ==> LVAL f b l < b ^ length l"
+  by (import word_num LVAL_MAX)
+
+lemma NVAL_MAX: "(!!x. f x < b) ==> RES_FORALL (PWORDLEN n) (%w. NVAL f b w < b ^ n)"
+  by (import word_num NVAL_MAX)
+
+lemma NVAL0: "NVAL x xa (WORD []) = 0"
+  by (import word_num NVAL0)
+
+lemma NVAL1: "NVAL x xa (WORD [xb]) = x xb"
+  by (import word_num NVAL1)
+
+lemma NVAL_WORDLEN_0: "RES_FORALL (PWORDLEN 0) (%w. ALL fv r. NVAL fv r w = 0)"
+  by (import word_num NVAL_WORDLEN_0)
+
+lemma NVAL_WCAT1: "NVAL f b (WCAT (w, WORD [x])) = NVAL f b w * b + f x"
+  by (import word_num NVAL_WCAT1)
+
+lemma NVAL_WCAT2: "RES_FORALL (PWORDLEN n)
+ (%w. ALL f b x. NVAL f b (WCAT (WORD [x], w)) = f x * b ^ n + NVAL f b w)"
+  by (import word_num NVAL_WCAT2)
+
+lemma NVAL_WCAT: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN m)
+        (%w2. ALL f b.
+                 NVAL f b (WCAT (w1, w2)) =
+                 NVAL f b w1 * b ^ m + NVAL f b w2))"
+  by (import word_num NVAL_WCAT)
+
+consts
+  NLIST :: "nat => (nat => 'a) => nat => nat => 'a list" 
+
+specification (NLIST) NLIST_DEF: "(ALL (frep::nat => 'a) (b::nat) m::nat. NLIST (0::nat) frep b m = []) &
+(ALL (n::nat) (frep::nat => 'a) (b::nat) m::nat.
+    NLIST (Suc n) frep b m =
+    SNOC (frep (m mod b)) (NLIST n frep b (m div b)))"
+  by (import word_num NLIST_DEF)
+
+definition
+  NWORD :: "nat => (nat => 'a) => nat => nat => 'a word"  where
+  "NWORD == %n frep b m. WORD (NLIST n frep b m)"
+
+lemma NWORD_DEF: "NWORD n frep b m = WORD (NLIST n frep b m)"
+  by (import word_num NWORD_DEF)
+
+lemma NWORD_LENGTH: "WORDLEN (NWORD x xa xb xc) = x"
+  by (import word_num NWORD_LENGTH)
+
+lemma NWORD_PWORDLEN: "IN (NWORD x xa xb xc) (PWORDLEN x)"
+  by (import word_num NWORD_PWORDLEN)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" word_bitop
+
+consts
+  PBITOP :: "('a word => 'b word) => bool" 
+
+defs
+  PBITOP_primdef: "PBITOP ==
+GSPEC
+ (%oper.
+     (oper,
+      ALL n.
+         RES_FORALL (PWORDLEN n)
+          (%w. IN (oper w) (PWORDLEN n) &
+               (ALL m k.
+                   m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
+
+lemma PBITOP_def: "PBITOP =
+GSPEC
+ (%oper.
+     (oper,
+      ALL n.
+         RES_FORALL (PWORDLEN n)
+          (%w. IN (oper w) (PWORDLEN n) &
+               (ALL m k.
+                   m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
+  by (import word_bitop PBITOP_def)
+
+lemma IN_PBITOP: "IN oper PBITOP =
+(ALL n.
+    RES_FORALL (PWORDLEN n)
+     (%w. IN (oper w) (PWORDLEN n) &
+          (ALL m k. m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w))))"
+  by (import word_bitop IN_PBITOP)
+
+lemma PBITOP_PWORDLEN: "RES_FORALL PBITOP
+ (%oper. ALL n. RES_FORALL (PWORDLEN n) (%w. IN (oper w) (PWORDLEN n)))"
+  by (import word_bitop PBITOP_PWORDLEN)
+
+lemma PBITOP_WSEG: "RES_FORALL PBITOP
+ (%oper.
+     ALL n.
+        RES_FORALL (PWORDLEN n)
+         (%w. ALL m k.
+                 m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))"
+  by (import word_bitop PBITOP_WSEG)
+
+lemma PBITOP_BIT: "RES_FORALL PBITOP
+ (%oper.
+     ALL n.
+        RES_FORALL (PWORDLEN n)
+         (%w. ALL k<n. oper (WORD [bit k w]) = WORD [bit k (oper w)]))"
+  by (import word_bitop PBITOP_BIT)
+
+consts
+  PBITBOP :: "('a word => 'b word => 'c word) => bool" 
+
+defs
+  PBITBOP_primdef: "PBITBOP ==
+GSPEC
+ (%oper.
+     (oper,
+      ALL n.
+         RES_FORALL (PWORDLEN n)
+          (%w1. RES_FORALL (PWORDLEN n)
+                 (%w2. IN (oper w1 w2) (PWORDLEN n) &
+                       (ALL m k.
+                           m + k <= n -->
+                           oper (WSEG m k w1) (WSEG m k w2) =
+                           WSEG m k (oper w1 w2))))))"
+
+lemma PBITBOP_def: "PBITBOP =
+GSPEC
+ (%oper.
+     (oper,
+      ALL n.
+         RES_FORALL (PWORDLEN n)
+          (%w1. RES_FORALL (PWORDLEN n)
+                 (%w2. IN (oper w1 w2) (PWORDLEN n) &
+                       (ALL m k.
+                           m + k <= n -->
+                           oper (WSEG m k w1) (WSEG m k w2) =
+                           WSEG m k (oper w1 w2))))))"
+  by (import word_bitop PBITBOP_def)
+
+lemma IN_PBITBOP: "IN oper PBITBOP =
+(ALL n.
+    RES_FORALL (PWORDLEN n)
+     (%w1. RES_FORALL (PWORDLEN n)
+            (%w2. IN (oper w1 w2) (PWORDLEN n) &
+                  (ALL m k.
+                      m + k <= n -->
+                      oper (WSEG m k w1) (WSEG m k w2) =
+                      WSEG m k (oper w1 w2)))))"
+  by (import word_bitop IN_PBITBOP)
+
+lemma PBITBOP_PWORDLEN: "RES_FORALL PBITBOP
+ (%oper.
+     ALL n.
+        RES_FORALL (PWORDLEN n)
+         (%w1. RES_FORALL (PWORDLEN n) (%w2. IN (oper w1 w2) (PWORDLEN n))))"
+  by (import word_bitop PBITBOP_PWORDLEN)
+
+lemma PBITBOP_WSEG: "RES_FORALL PBITBOP
+ (%oper.
+     ALL n.
+        RES_FORALL (PWORDLEN n)
+         (%w1. RES_FORALL (PWORDLEN n)
+                (%w2. ALL m k.
+                         m + k <= n -->
+                         oper (WSEG m k w1) (WSEG m k w2) =
+                         WSEG m k (oper w1 w2))))"
+  by (import word_bitop PBITBOP_WSEG)
+
+lemma PBITBOP_EXISTS: "EX x. ALL l1 l2. x (WORD l1) (WORD l2) = WORD (map2 f l1 l2)"
+  by (import word_bitop PBITBOP_EXISTS)
+
+consts
+  WMAP :: "('a => 'b) => 'a word => 'b word" 
+
+specification (WMAP) WMAP_DEF: "ALL f l. WMAP f (WORD l) = WORD (map f l)"
+  by (import word_bitop WMAP_DEF)
+
+lemma WMAP_PWORDLEN: "RES_FORALL (PWORDLEN n) (%w. ALL f. IN (WMAP f w) (PWORDLEN n))"
+  by (import word_bitop WMAP_PWORDLEN)
+
+lemma WMAP_0: "WMAP (x::'a => 'b) (WORD []) = WORD []"
+  by (import word_bitop WMAP_0)
+
+lemma WMAP_BIT: "RES_FORALL (PWORDLEN n) (%w. ALL k<n. ALL f. bit k (WMAP f w) = f (bit k w))"
+  by (import word_bitop WMAP_BIT)
+
+lemma WMAP_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k.
+         m + k <= n --> (ALL f. WMAP f (WSEG m k w) = WSEG m k (WMAP f w)))"
+  by (import word_bitop WMAP_WSEG)
+
+lemma WMAP_PBITOP: "IN (WMAP f) PBITOP"
+  by (import word_bitop WMAP_PBITOP)
+
+lemma WMAP_WCAT: "WMAP (f::'a => 'b) (WCAT (w1::'a word, w2::'a word)) =
+WCAT (WMAP f w1, WMAP f w2)"
+  by (import word_bitop WMAP_WCAT)
+
+lemma WMAP_o: "WMAP (g::'b => 'c) (WMAP (f::'a => 'b) (w::'a word)) = WMAP (g o f) w"
+  by (import word_bitop WMAP_o)
+
+consts
+  FORALLBITS :: "('a => bool) => 'a word => bool" 
+
+specification (FORALLBITS) FORALLBITS_DEF: "ALL P l. FORALLBITS P (WORD l) = list_all P l"
+  by (import word_bitop FORALLBITS_DEF)
+
+lemma FORALLBITS: "RES_FORALL (PWORDLEN n) (%w. ALL P. FORALLBITS P w = (ALL k<n. P (bit k w)))"
+  by (import word_bitop FORALLBITS)
+
+lemma FORALLBITS_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL P.
+         FORALLBITS P w -->
+         (ALL m k. m + k <= n --> FORALLBITS P (WSEG m k w)))"
+  by (import word_bitop FORALLBITS_WSEG)
+
+lemma FORALLBITS_WCAT: "FORALLBITS P (WCAT (w1, w2)) = (FORALLBITS P w1 & FORALLBITS P w2)"
+  by (import word_bitop FORALLBITS_WCAT)
+
+consts
+  EXISTSABIT :: "('a => bool) => 'a word => bool" 
+
+specification (EXISTSABIT) EXISTSABIT_DEF: "ALL P l. EXISTSABIT P (WORD l) = list_ex P l"
+  by (import word_bitop EXISTSABIT_DEF)
+
+lemma NOT_EXISTSABIT: "(~ EXISTSABIT P w) = FORALLBITS (Not o P) w"
+  by (import word_bitop NOT_EXISTSABIT)
+
+lemma NOT_FORALLBITS: "(~ FORALLBITS P w) = EXISTSABIT (Not o P) w"
+  by (import word_bitop NOT_FORALLBITS)
+
+lemma EXISTSABIT: "RES_FORALL (PWORDLEN n) (%w. ALL P. EXISTSABIT P w = (EX k<n. P (bit k w)))"
+  by (import word_bitop EXISTSABIT)
+
+lemma EXISTSABIT_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k.
+         m + k <= n -->
+         (ALL P. EXISTSABIT P (WSEG m k w) --> EXISTSABIT P w))"
+  by (import word_bitop EXISTSABIT_WSEG)
+
+lemma EXISTSABIT_WCAT: "EXISTSABIT P (WCAT (w1, w2)) = (EXISTSABIT P w1 | EXISTSABIT P w2)"
+  by (import word_bitop EXISTSABIT_WCAT)
+
+definition
+  SHR :: "bool => 'a => 'a word => 'a word * 'a"  where
+  "SHR ==
+%f b w.
+   (WCAT
+     (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
+      WSEG (PRE (WORDLEN w)) 1 w),
+    bit 0 w)"
+
+lemma SHR_DEF: "SHR f b w =
+(WCAT
+  (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
+   WSEG (PRE (WORDLEN w)) 1 w),
+ bit 0 w)"
+  by (import word_bitop SHR_DEF)
+
+definition
+  SHL :: "bool => 'a word => 'a => 'a * 'a word"  where
+  "SHL ==
+%f w b.
+   (bit (PRE (WORDLEN w)) w,
+    WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
+
+lemma SHL_DEF: "SHL f w b =
+(bit (PRE (WORDLEN w)) w,
+ WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
+  by (import word_bitop SHL_DEF)
+
+lemma SHR_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k.
+         m + k <= n -->
+         0 < m -->
+         (ALL f b.
+             SHR f b (WSEG m k w) =
+             (if f
+              then WCAT (WSEG 1 (k + (m - 1)) w, WSEG (m - 1) (k + 1) w)
+              else WCAT (WORD [b], WSEG (m - 1) (k + 1) w),
+              bit k w)))"
+  by (import word_bitop SHR_WSEG)
+
+lemma SHR_WSEG_1F: "RES_FORALL (PWORDLEN n)
+ (%w. ALL b m k.
+         m + k <= n -->
+         0 < m -->
+         SHR False b (WSEG m k w) =
+         (WCAT (WORD [b], WSEG (m - 1) (k + 1) w), bit k w))"
+  by (import word_bitop SHR_WSEG_1F)
+
+lemma SHR_WSEG_NF: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k.
+         m + k < n -->
+         0 < m -->
+         SHR False (bit (m + k) w) (WSEG m k w) =
+         (WSEG m (k + 1) w, bit k w))"
+  by (import word_bitop SHR_WSEG_NF)
+
+lemma SHL_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k.
+         m + k <= n -->
+         0 < m -->
+         (ALL f b.
+             SHL f (WSEG m k w) b =
+             (bit (k + (m - 1)) w,
+              if f then WCAT (WSEG (m - 1) k w, WSEG 1 k w)
+              else WCAT (WSEG (m - 1) k w, WORD [b]))))"
+  by (import word_bitop SHL_WSEG)
+
+lemma SHL_WSEG_1F: "RES_FORALL (PWORDLEN n)
+ (%w. ALL b m k.
+         m + k <= n -->
+         0 < m -->
+         SHL False (WSEG m k w) b =
+         (bit (k + (m - 1)) w, WCAT (WSEG (m - 1) k w, WORD [b])))"
+  by (import word_bitop SHL_WSEG_1F)
+
+lemma SHL_WSEG_NF: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m k.
+         m + k <= n -->
+         0 < m -->
+         0 < k -->
+         SHL False (WSEG m k w) (bit (k - 1) w) =
+         (bit (k + (m - 1)) w, WSEG m (k - 1) w))"
+  by (import word_bitop SHL_WSEG_NF)
+
+lemma WSEG_SHL: "RES_FORALL (PWORDLEN (Suc n))
+ (%w. ALL m k.
+         0 < k & m + k <= Suc n -->
+         (ALL b. WSEG m k (snd (SHL f w b)) = WSEG m (k - 1) w))"
+  by (import word_bitop WSEG_SHL)
+
+lemma WSEG_SHL_0: "RES_FORALL (PWORDLEN (Suc n))
+ (%w. ALL m b.
+         0 < m & m <= Suc n -->
+         WSEG m 0 (snd (SHL f w b)) =
+         WCAT (WSEG (m - 1) 0 w, if f then WSEG 1 0 w else WORD [b]))"
+  by (import word_bitop WSEG_SHL_0)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" bword_num
+
+definition
+  BV :: "bool => nat"  where
+  "BV == %b. if b then Suc 0 else 0"
+
+lemma BV_DEF: "BV b = (if b then Suc 0 else 0)"
+  by (import bword_num BV_DEF)
+
+consts
+  BNVAL :: "bool word => nat" 
+
+specification (BNVAL) BNVAL_DEF: "ALL l. BNVAL (WORD l) = LVAL BV 2 l"
+  by (import bword_num BNVAL_DEF)
+
+lemma BV_LESS_2: "BV x < 2"
+  by (import bword_num BV_LESS_2)
+
+lemma BNVAL_NVAL: "BNVAL w = NVAL BV 2 w"
+  by (import bword_num BNVAL_NVAL)
+
+lemma BNVAL0: "BNVAL (WORD []) = 0"
+  by (import bword_num BNVAL0)
+
+lemma BNVAL_11: "[| WORDLEN w1 = WORDLEN w2; BNVAL w1 = BNVAL w2 |] ==> w1 = w2"
+  by (import bword_num BNVAL_11)
+
+lemma BNVAL_ONTO: "Ex (op = (BNVAL w))"
+  by (import bword_num BNVAL_ONTO)
+
+lemma BNVAL_MAX: "RES_FORALL (PWORDLEN n) (%w. BNVAL w < 2 ^ n)"
+  by (import bword_num BNVAL_MAX)
+
+lemma BNVAL_WCAT1: "RES_FORALL (PWORDLEN n)
+ (%w. ALL x. BNVAL (WCAT (w, WORD [x])) = BNVAL w * 2 + BV x)"
+  by (import bword_num BNVAL_WCAT1)
+
+lemma BNVAL_WCAT2: "RES_FORALL (PWORDLEN n)
+ (%w. ALL x. BNVAL (WCAT (WORD [x], w)) = BV x * 2 ^ n + BNVAL w)"
+  by (import bword_num BNVAL_WCAT2)
+
+lemma BNVAL_WCAT: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN m)
+        (%w2. BNVAL (WCAT (w1, w2)) = BNVAL w1 * 2 ^ m + BNVAL w2))"
+  by (import bword_num BNVAL_WCAT)
+
+definition
+  VB :: "nat => bool"  where
+  "VB == %n. n mod 2 ~= 0"
+
+lemma VB_DEF: "VB n = (n mod 2 ~= 0)"
+  by (import bword_num VB_DEF)
+
+definition
+  NBWORD :: "nat => nat => bool word"  where
+  "NBWORD == %n m. WORD (NLIST n VB 2 m)"
+
+lemma NBWORD_DEF: "NBWORD n m = WORD (NLIST n VB 2 m)"
+  by (import bword_num NBWORD_DEF)
+
+lemma NBWORD0: "NBWORD 0 x = WORD []"
+  by (import bword_num NBWORD0)
+
+lemma WORDLEN_NBWORD: "WORDLEN (NBWORD x xa) = x"
+  by (import bword_num WORDLEN_NBWORD)
+
+lemma PWORDLEN_NBWORD: "IN (NBWORD x xa) (PWORDLEN x)"
+  by (import bword_num PWORDLEN_NBWORD)
+
+lemma NBWORD_SUC: "NBWORD (Suc n) m = WCAT (NBWORD n (m div 2), WORD [VB (m mod 2)])"
+  by (import bword_num NBWORD_SUC)
+
+lemma VB_BV: "VB (BV x) = x"
+  by (import bword_num VB_BV)
+
+lemma BV_VB: "x < 2 ==> BV (VB x) = x"
+  by (import bword_num BV_VB)
+
+lemma NBWORD_BNVAL: "RES_FORALL (PWORDLEN n) (%w. NBWORD n (BNVAL w) = w)"
+  by (import bword_num NBWORD_BNVAL)
+
+lemma BNVAL_NBWORD: "m < 2 ^ n ==> BNVAL (NBWORD n m) = m"
+  by (import bword_num BNVAL_NBWORD)
+
+lemma ZERO_WORD_VAL: "RES_FORALL (PWORDLEN n) (%w. (w = NBWORD n 0) = (BNVAL w = 0))"
+  by (import bword_num ZERO_WORD_VAL)
+
+lemma WCAT_NBWORD_0: "WCAT (NBWORD n1 0, NBWORD n2 0) = NBWORD (n1 + n2) 0"
+  by (import bword_num WCAT_NBWORD_0)
+
+lemma WSPLIT_NBWORD_0: "m <= n ==> WSPLIT m (NBWORD n 0) = (NBWORD (n - m) 0, NBWORD m 0)"
+  by (import bword_num WSPLIT_NBWORD_0)
+
+lemma EQ_NBWORD0_SPLIT: "RES_FORALL (PWORDLEN n)
+ (%w. ALL m<=n.
+         (w = NBWORD n 0) =
+         (WSEG (n - m) m w = NBWORD (n - m) 0 & WSEG m 0 w = NBWORD m 0))"
+  by (import bword_num EQ_NBWORD0_SPLIT)
+
+lemma NBWORD_MOD: "NBWORD n (m mod 2 ^ n) = NBWORD n m"
+  by (import bword_num NBWORD_MOD)
+
+lemma WSEG_NBWORD_SUC: "WSEG n 0 (NBWORD (Suc n) m) = NBWORD n m"
+  by (import bword_num WSEG_NBWORD_SUC)
+
+lemma NBWORD_SUC_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. NBWORD n (BNVAL w) = WSEG n 0 w)"
+  by (import bword_num NBWORD_SUC_WSEG)
+
+lemma DOUBL_EQ_SHL: "0 < x
+==> RES_FORALL (PWORDLEN x)
+     (%xa. ALL xb.
+              NBWORD x (BNVAL xa + BNVAL xa + BV xb) =
+              snd (SHL False xa xb))"
+  by (import bword_num DOUBL_EQ_SHL)
+
+lemma MSB_NBWORD: "bit n (NBWORD (Suc n) m) = VB (m div 2 ^ n mod 2)"
+  by (import bword_num MSB_NBWORD)
+
+lemma NBWORD_SPLIT: "NBWORD (n1 + n2) m = WCAT (NBWORD n1 (m div 2 ^ n2), NBWORD n2 m)"
+  by (import bword_num NBWORD_SPLIT)
+
+lemma WSEG_NBWORD: "m + k <= n ==> WSEG m k (NBWORD n l) = NBWORD m (l div 2 ^ k)"
+  by (import bword_num WSEG_NBWORD)
+
+lemma NBWORD_SUC_FST: "NBWORD (Suc n) x = WCAT (WORD [VB (x div 2 ^ n mod 2)], NBWORD n x)"
+  by (import bword_num NBWORD_SUC_FST)
+
+lemma BIT_NBWORD0: "k < n ==> bit k (NBWORD n 0) = False"
+  by (import bword_num BIT_NBWORD0)
+
+lemma ADD_BNVAL_LEFT: "RES_FORALL (PWORDLEN (Suc n))
+ (%w1. RES_FORALL (PWORDLEN (Suc n))
+        (%w2. BNVAL w1 + BNVAL w2 =
+              (BV (bit n w1) + BV (bit n w2)) * 2 ^ n +
+              (BNVAL (WSEG n 0 w1) + BNVAL (WSEG n 0 w2))))"
+  by (import bword_num ADD_BNVAL_LEFT)
+
+lemma ADD_BNVAL_RIGHT: "RES_FORALL (PWORDLEN (Suc n))
+ (%w1. RES_FORALL (PWORDLEN (Suc n))
+        (%w2. BNVAL w1 + BNVAL w2 =
+              (BNVAL (WSEG n 1 w1) + BNVAL (WSEG n 1 w2)) * 2 +
+              (BV (bit 0 w1) + BV (bit 0 w2))))"
+  by (import bword_num ADD_BNVAL_RIGHT)
+
+lemma ADD_BNVAL_SPLIT: "RES_FORALL (PWORDLEN (n1 + n2))
+ (%w1. RES_FORALL (PWORDLEN (n1 + n2))
+        (%w2. BNVAL w1 + BNVAL w2 =
+              (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2)) * 2 ^ n2 +
+              (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2))))"
+  by (import bword_num ADD_BNVAL_SPLIT)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" bword_arith
+
+consts
+  ACARRY :: "nat => bool word => bool word => bool => bool" 
+
+specification (ACARRY) ACARRY_DEF: "(ALL w1 w2 cin. ACARRY 0 w1 w2 cin = cin) &
+(ALL n w1 w2 cin.
+    ACARRY (Suc n) w1 w2 cin =
+    VB ((BV (bit n w1) + BV (bit n w2) + BV (ACARRY n w1 w2 cin)) div 2))"
+  by (import bword_arith ACARRY_DEF)
+
+consts
+  ICARRY :: "nat => bool word => bool word => bool => bool" 
+
+specification (ICARRY) ICARRY_DEF: "(ALL w1 w2 cin. ICARRY 0 w1 w2 cin = cin) &
+(ALL n w1 w2 cin.
+    ICARRY (Suc n) w1 w2 cin =
+    (bit n w1 & bit n w2 | (bit n w1 | bit n w2) & ICARRY n w1 w2 cin))"
+  by (import bword_arith ICARRY_DEF)
+
+lemma ACARRY_EQ_ICARRY: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL cin k.
+                 k <= n --> ACARRY k w1 w2 cin = ICARRY k w1 w2 cin))"
+  by (import bword_arith ACARRY_EQ_ICARRY)
+
+lemma BNVAL_LESS_EQ: "RES_FORALL (PWORDLEN n) (%w. BNVAL w <= 2 ^ n - 1)"
+  by (import bword_arith BNVAL_LESS_EQ)
+
+lemma ADD_BNVAL_LESS_EQ1: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n <= Suc 0))"
+  by (import bword_arith ADD_BNVAL_LESS_EQ1)
+
+lemma ADD_BV_BNVAL_DIV_LESS_EQ1: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. (BV x1 + BV x2 +
+               (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n) div
+              2
+              <= 1))"
+  by (import bword_arith ADD_BV_BNVAL_DIV_LESS_EQ1)
+
+lemma ADD_BV_BNVAL_LESS_EQ: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))
+              <= Suc (2 ^ Suc n)))"
+  by (import bword_arith ADD_BV_BNVAL_LESS_EQ)
+
+lemma ADD_BV_BNVAL_LESS_EQ1: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. (BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))) div
+              2 ^ Suc n
+              <= 1))"
+  by (import bword_arith ADD_BV_BNVAL_LESS_EQ1)
+
+lemma ACARRY_EQ_ADD_DIV: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL k<n.
+                 BV (ACARRY k w1 w2 cin) =
+                 (BNVAL (WSEG k 0 w1) + BNVAL (WSEG k 0 w2) + BV cin) div
+                 2 ^ k))"
+  by (import bword_arith ACARRY_EQ_ADD_DIV)
+
+lemma ADD_WORD_SPLIT: "RES_FORALL (PWORDLEN (n1 + n2))
+ (%w1. RES_FORALL (PWORDLEN (n1 + n2))
+        (%w2. ALL cin.
+                 NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
+                 WCAT
+                  (NBWORD n1
+                    (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
+                     BV (ACARRY n2 w1 w2 cin)),
+                   NBWORD n2
+                    (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) +
+                     BV cin))))"
+  by (import bword_arith ADD_WORD_SPLIT)
+
+lemma WSEG_NBWORD_ADD: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL m k cin.
+                 m + k <= n -->
+                 WSEG m k (NBWORD n (BNVAL w1 + BNVAL w2 + BV cin)) =
+                 NBWORD m
+                  (BNVAL (WSEG m k w1) + BNVAL (WSEG m k w2) +
+                   BV (ACARRY k w1 w2 cin))))"
+  by (import bword_arith WSEG_NBWORD_ADD)
+
+lemma ADD_NBWORD_EQ0_SPLIT: "RES_FORALL (PWORDLEN (n1 + n2))
+ (%w1. RES_FORALL (PWORDLEN (n1 + n2))
+        (%w2. ALL cin.
+                 (NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
+                  NBWORD (n1 + n2) 0) =
+                 (NBWORD n1
+                   (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
+                    BV (ACARRY n2 w1 w2 cin)) =
+                  NBWORD n1 0 &
+                  NBWORD n2
+                   (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) + BV cin) =
+                  NBWORD n2 0)))"
+  by (import bword_arith ADD_NBWORD_EQ0_SPLIT)
+
+lemma ACARRY_MSB: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL cin.
+                 ACARRY n w1 w2 cin =
+                 bit n (NBWORD (Suc n) (BNVAL w1 + BNVAL w2 + BV cin))))"
+  by (import bword_arith ACARRY_MSB)
+
+lemma ACARRY_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL cin k m.
+                 k < m & m <= n -->
+                 ACARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
+                 ACARRY k w1 w2 cin))"
+  by (import bword_arith ACARRY_WSEG)
+
+lemma ICARRY_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL cin k m.
+                 k < m & m <= n -->
+                 ICARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
+                 ICARRY k w1 w2 cin))"
+  by (import bword_arith ICARRY_WSEG)
+
+lemma ACARRY_ACARRY_WSEG: "RES_FORALL (PWORDLEN n)
+ (%w1. RES_FORALL (PWORDLEN n)
+        (%w2. ALL cin m k1 k2.
+                 k1 < m & k2 < n & m + k2 <= n -->
+                 ACARRY k1 (WSEG m k2 w1) (WSEG m k2 w2)
+                  (ACARRY k2 w1 w2 cin) =
+                 ACARRY (k1 + k2) w1 w2 cin))"
+  by (import bword_arith ACARRY_ACARRY_WSEG)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" bword_bitop
+
+consts
+  WNOT :: "bool word => bool word" 
+
+specification (WNOT) WNOT_DEF: "ALL l. WNOT (WORD l) = WORD (map Not l)"
+  by (import bword_bitop WNOT_DEF)
+
+lemma PBITOP_WNOT: "IN WNOT PBITOP"
+  by (import bword_bitop PBITOP_WNOT)
+
+lemma WNOT_WNOT: "WNOT (WNOT w) = w"
+  by (import bword_bitop WNOT_WNOT)
+
+lemma WCAT_WNOT: "RES_FORALL (PWORDLEN n1)
+ (%w1. RES_FORALL (PWORDLEN n2)
+        (%w2. WCAT (WNOT w1, WNOT w2) = WNOT (WCAT (w1, w2))))"
+  by (import bword_bitop WCAT_WNOT)
+
+consts
+  WAND :: "bool word => bool word => bool word" 
+
+specification (WAND) WAND_DEF: "ALL l1 l2. WAND (WORD l1) (WORD l2) = WORD (map2 op & l1 l2)"
+  by (import bword_bitop WAND_DEF)
+
+lemma PBITBOP_WAND: "IN WAND PBITBOP"
+  by (import bword_bitop PBITBOP_WAND)
+
+consts
+  WOR :: "bool word => bool word => bool word" 
+
+specification (WOR) WOR_DEF: "ALL l1 l2. WOR (WORD l1) (WORD l2) = WORD (map2 op | l1 l2)"
+  by (import bword_bitop WOR_DEF)
+
+lemma PBITBOP_WOR: "IN WOR PBITBOP"
+  by (import bword_bitop PBITBOP_WOR)
+
+consts
+  WXOR :: "bool word => bool word => bool word" 
+
+specification (WXOR) WXOR_DEF: "ALL l1 l2. WXOR (WORD l1) (WORD l2) = WORD (map2 op ~= l1 l2)"
+  by (import bword_bitop WXOR_DEF)
+
+lemma PBITBOP_WXOR: "IN WXOR PBITBOP"
+  by (import bword_bitop PBITBOP_WXOR)
+
+;end_setup
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/HOL4Word32.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,1382 @@
+(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
+
+theory HOL4Word32 imports HOL4Base begin
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" bits
+
+consts
+  DIV2 :: "nat => nat" 
+
+defs
+  DIV2_primdef: "DIV2 == %n. n div 2"
+
+lemma DIV2_def: "DIV2 n = n div 2"
+  by (import bits DIV2_def)
+
+consts
+  TIMES_2EXP :: "nat => nat => nat" 
+
+defs
+  TIMES_2EXP_primdef: "TIMES_2EXP == %x n. n * 2 ^ x"
+
+lemma TIMES_2EXP_def: "TIMES_2EXP x n = n * 2 ^ x"
+  by (import bits TIMES_2EXP_def)
+
+consts
+  DIV_2EXP :: "nat => nat => nat" 
+
+defs
+  DIV_2EXP_primdef: "DIV_2EXP == %x n. n div 2 ^ x"
+
+lemma DIV_2EXP_def: "DIV_2EXP x n = n div 2 ^ x"
+  by (import bits DIV_2EXP_def)
+
+consts
+  MOD_2EXP :: "nat => nat => nat" 
+
+defs
+  MOD_2EXP_primdef: "MOD_2EXP == %x n. n mod 2 ^ x"
+
+lemma MOD_2EXP_def: "MOD_2EXP x n = n mod 2 ^ x"
+  by (import bits MOD_2EXP_def)
+
+consts
+  DIVMOD_2EXP :: "nat => nat => nat * nat" 
+
+defs
+  DIVMOD_2EXP_primdef: "DIVMOD_2EXP == %x n. (n div 2 ^ x, n mod 2 ^ x)"
+
+lemma DIVMOD_2EXP_def: "DIVMOD_2EXP x n = (n div 2 ^ x, n mod 2 ^ x)"
+  by (import bits DIVMOD_2EXP_def)
+
+consts
+  SBIT :: "bool => nat => nat" 
+
+defs
+  SBIT_primdef: "SBIT == %b n. if b then 2 ^ n else 0"
+
+lemma SBIT_def: "SBIT b n = (if b then 2 ^ n else 0)"
+  by (import bits SBIT_def)
+
+consts
+  BITS :: "nat => nat => nat => nat" 
+
+defs
+  BITS_primdef: "BITS == %h l n. MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
+
+lemma BITS_def: "BITS h l n = MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
+  by (import bits BITS_def)
+
+definition
+  bit :: "nat => nat => bool"  where
+  "bit == %b n. BITS b b n = 1"
+
+lemma BIT_def: "bit b n = (BITS b b n = 1)"
+  by (import bits BIT_def)
+
+consts
+  SLICE :: "nat => nat => nat => nat" 
+
+defs
+  SLICE_primdef: "SLICE == %h l n. MOD_2EXP (Suc h) n - MOD_2EXP l n"
+
+lemma SLICE_def: "SLICE h l n = MOD_2EXP (Suc h) n - MOD_2EXP l n"
+  by (import bits SLICE_def)
+
+consts
+  LSBn :: "nat => bool" 
+
+defs
+  LSBn_primdef: "LSBn == bit 0"
+
+lemma LSBn_def: "LSBn = bit 0"
+  by (import bits LSBn_def)
+
+consts
+  BITWISE :: "nat => (bool => bool => bool) => nat => nat => nat" 
+
+specification (BITWISE_primdef: BITWISE) BITWISE_def: "(ALL oper x y. BITWISE 0 oper x y = 0) &
+(ALL n oper x y.
+    BITWISE (Suc n) oper x y =
+    BITWISE n oper x y + SBIT (oper (bit n x) (bit n y)) n)"
+  by (import bits BITWISE_def)
+
+lemma SUC_SUB: "Suc a - a = 1"
+  by (import bits SUC_SUB)
+
+lemma DIV_MULT_1: "(r::nat) < (n::nat) ==> (n + r) div n = (1::nat)"
+  by (import bits DIV_MULT_1)
+
+lemma ZERO_LT_TWOEXP: "(0::nat) < (2::nat) ^ (n::nat)"
+  by (import bits ZERO_LT_TWOEXP)
+
+lemma MOD_2EXP_LT: "(k::nat) mod (2::nat) ^ (n::nat) < (2::nat) ^ n"
+  by (import bits MOD_2EXP_LT)
+
+lemma TWOEXP_DIVISION: "(k::nat) = k div (2::nat) ^ (n::nat) * (2::nat) ^ n + k mod (2::nat) ^ n"
+  by (import bits TWOEXP_DIVISION)
+
+lemma TWOEXP_MONO: "(a::nat) < (b::nat) ==> (2::nat) ^ a < (2::nat) ^ b"
+  by (import bits TWOEXP_MONO)
+
+lemma TWOEXP_MONO2: "(a::nat) <= (b::nat) ==> (2::nat) ^ a <= (2::nat) ^ b"
+  by (import bits TWOEXP_MONO2)
+
+lemma EXP_SUB_LESS_EQ: "(2::nat) ^ ((a::nat) - (b::nat)) <= (2::nat) ^ a"
+  by (import bits EXP_SUB_LESS_EQ)
+
+lemma BITS_THM: "BITS x xa xb = xb div 2 ^ xa mod 2 ^ (Suc x - xa)"
+  by (import bits BITS_THM)
+
+lemma BITSLT_THM: "BITS h l n < 2 ^ (Suc h - l)"
+  by (import bits BITSLT_THM)
+
+lemma DIV_MULT_LEM: "(0::nat) < (n::nat) ==> (m::nat) div n * n <= m"
+  by (import bits DIV_MULT_LEM)
+
+lemma MOD_2EXP_LEM: "(n::nat) mod (2::nat) ^ (x::nat) = n - n div (2::nat) ^ x * (2::nat) ^ x"
+  by (import bits MOD_2EXP_LEM)
+
+lemma BITS2_THM: "BITS h l n = n mod 2 ^ Suc h div 2 ^ l"
+  by (import bits BITS2_THM)
+
+lemma BITS_COMP_THM: "h2 + l1 <= h1 ==> BITS h2 l2 (BITS h1 l1 n) = BITS (h2 + l1) (l2 + l1) n"
+  by (import bits BITS_COMP_THM)
+
+lemma BITS_DIV_THM: "BITS h l x div 2 ^ n = BITS h (l + n) x"
+  by (import bits BITS_DIV_THM)
+
+lemma BITS_LT_HIGH: "n < 2 ^ Suc h ==> BITS h l n = n div 2 ^ l"
+  by (import bits BITS_LT_HIGH)
+
+lemma BITS_ZERO: "h < l ==> BITS h l n = 0"
+  by (import bits BITS_ZERO)
+
+lemma BITS_ZERO2: "BITS h l 0 = 0"
+  by (import bits BITS_ZERO2)
+
+lemma BITS_ZERO3: "BITS h 0 x = x mod 2 ^ Suc h"
+  by (import bits BITS_ZERO3)
+
+lemma BITS_COMP_THM2: "BITS h2 l2 (BITS h1 l1 n) = BITS (min h1 (h2 + l1)) (l2 + l1) n"
+  by (import bits BITS_COMP_THM2)
+
+lemma NOT_MOD2_LEM: "((n::nat) mod (2::nat) ~= (0::nat)) = (n mod (2::nat) = (1::nat))"
+  by (import bits NOT_MOD2_LEM)
+
+lemma NOT_MOD2_LEM2: "((n::nat) mod (2::nat) ~= (1::nat)) = (n mod (2::nat) = (0::nat))"
+  by (import bits NOT_MOD2_LEM2)
+
+lemma EVEN_MOD2_LEM: "EVEN n = (n mod 2 = 0)"
+  by (import bits EVEN_MOD2_LEM)
+
+lemma ODD_MOD2_LEM: "ODD n = (n mod 2 = 1)"
+  by (import bits ODD_MOD2_LEM)
+
+lemma LSB_ODD: "LSBn = ODD"
+  by (import bits LSB_ODD)
+
+lemma DIV_MULT_THM: "(n::nat) div (2::nat) ^ (x::nat) * (2::nat) ^ x = n - n mod (2::nat) ^ x"
+  by (import bits DIV_MULT_THM)
+
+lemma DIV_MULT_THM2: "(2::nat) * ((x::nat) div (2::nat)) = x - x mod (2::nat)"
+  by (import bits DIV_MULT_THM2)
+
+lemma LESS_EQ_EXP_MULT: "(a::nat) <= (b::nat) ==> EX x::nat. (2::nat) ^ b = x * (2::nat) ^ a"
+  by (import bits LESS_EQ_EXP_MULT)
+
+lemma SLICE_LEM1: "(a::nat) div (2::nat) ^ ((x::nat) + (y::nat)) * (2::nat) ^ (x + y) =
+a div (2::nat) ^ x * (2::nat) ^ x -
+a div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
+  by (import bits SLICE_LEM1)
+
+lemma SLICE_LEM2: "(n::nat) mod (2::nat) ^ ((x::nat) + (y::nat)) =
+n mod (2::nat) ^ x + n div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
+  by (import bits SLICE_LEM2)
+
+lemma SLICE_LEM3: "(l::nat) < (h::nat) ==> (n::nat) mod (2::nat) ^ Suc l <= n mod (2::nat) ^ h"
+  by (import bits SLICE_LEM3)
+
+lemma SLICE_THM: "SLICE h l n = BITS h l n * 2 ^ l"
+  by (import bits SLICE_THM)
+
+lemma SLICELT_THM: "SLICE h l n < 2 ^ Suc h"
+  by (import bits SLICELT_THM)
+
+lemma BITS_SLICE_THM: "BITS h l (SLICE h l n) = BITS h l n"
+  by (import bits BITS_SLICE_THM)
+
+lemma BITS_SLICE_THM2: "h <= h2 ==> BITS h2 l (SLICE h l n) = BITS h l n"
+  by (import bits BITS_SLICE_THM2)
+
+lemma MOD_2EXP_MONO: "(l::nat) <= (h::nat) ==> (n::nat) mod (2::nat) ^ l <= n mod (2::nat) ^ Suc h"
+  by (import bits MOD_2EXP_MONO)
+
+lemma SLICE_COMP_THM: "Suc m <= h & l <= m ==> SLICE h (Suc m) n + SLICE m l n = SLICE h l n"
+  by (import bits SLICE_COMP_THM)
+
+lemma SLICE_ZERO: "h < l ==> SLICE h l n = 0"
+  by (import bits SLICE_ZERO)
+
+lemma BIT_COMP_THM3: "Suc m <= h & l <= m
+==> BITS h (Suc m) n * 2 ^ (Suc m - l) + BITS m l n = BITS h l n"
+  by (import bits BIT_COMP_THM3)
+
+lemma NOT_BIT: "(~ bit n a) = (BITS n n a = 0)"
+  by (import bits NOT_BIT)
+
+lemma NOT_BITS: "(BITS n n a ~= 0) = (BITS n n a = 1)"
+  by (import bits NOT_BITS)
+
+lemma NOT_BITS2: "(BITS n n a ~= 1) = (BITS n n a = 0)"
+  by (import bits NOT_BITS2)
+
+lemma BIT_SLICE: "(bit n a = bit n b) = (SLICE n n a = SLICE n n b)"
+  by (import bits BIT_SLICE)
+
+lemma BIT_SLICE_LEM: "SBIT (bit x n) (x + y) = SLICE x x n * 2 ^ y"
+  by (import bits BIT_SLICE_LEM)
+
+lemma BIT_SLICE_THM: "SBIT (bit x xa) x = SLICE x x xa"
+  by (import bits BIT_SLICE_THM)
+
+lemma SBIT_DIV: "n < m ==> SBIT b (m - n) = SBIT b m div 2 ^ n"
+  by (import bits SBIT_DIV)
+
+lemma BITS_SUC: "l <= Suc h
+==> SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n = BITS (Suc h) l n"
+  by (import bits BITS_SUC)
+
+lemma BITS_SUC_THM: "BITS (Suc h) l n =
+(if Suc h < l then 0 else SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n)"
+  by (import bits BITS_SUC_THM)
+
+lemma BIT_BITS_THM: "(ALL x. l <= x & x <= h --> bit x a = bit x b) = (BITS h l a = BITS h l b)"
+  by (import bits BIT_BITS_THM)
+
+lemma BITWISE_LT_2EXP: "BITWISE n oper a b < 2 ^ n"
+  by (import bits BITWISE_LT_2EXP)
+
+lemma LESS_EXP_MULT2: "(a::nat) < (b::nat)
+==> EX x::nat. (2::nat) ^ b = (2::nat) ^ (x + (1::nat)) * (2::nat) ^ a"
+  by (import bits LESS_EXP_MULT2)
+
+lemma BITWISE_THM: "x < n ==> bit x (BITWISE n oper a b) = oper (bit x a) (bit x b)"
+  by (import bits BITWISE_THM)
+
+lemma BITWISE_COR: "[| x < n; oper (bit x a) (bit x b) |]
+==> BITWISE n oper a b div 2 ^ x mod 2 = 1"
+  by (import bits BITWISE_COR)
+
+lemma BITWISE_NOT_COR: "[| x < n; ~ oper (bit x a) (bit x b) |]
+==> BITWISE n oper a b div 2 ^ x mod 2 = 0"
+  by (import bits BITWISE_NOT_COR)
+
+lemma MOD_PLUS_RIGHT: "(0::nat) < (n::nat) ==> ((j::nat) + (k::nat) mod n) mod n = (j + k) mod n"
+  by (import bits MOD_PLUS_RIGHT)
+
+lemma MOD_PLUS_1: "(0::nat) < (n::nat)
+==> (((x::nat) + (1::nat)) mod n = (0::nat)) = (x mod n + (1::nat) = n)"
+  by (import bits MOD_PLUS_1)
+
+lemma MOD_ADD_1: "[| (0::nat) < (n::nat); ((x::nat) + (1::nat)) mod n ~= (0::nat) |]
+==> (x + (1::nat)) mod n = x mod n + (1::nat)"
+  by (import bits MOD_ADD_1)
+
+;end_setup
+
+setup_theory "~~/src/HOL/Import/HOL4/Generated" word32
+
+consts
+  HB :: "nat" 
+
+defs
+  HB_primdef: "HB ==
+NUMERAL
+ (NUMERAL_BIT1
+   (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
+
+lemma HB_def: "HB =
+NUMERAL
+ (NUMERAL_BIT1
+   (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
+  by (import word32 HB_def)
+
+consts
+  WL :: "nat" 
+
+defs
+  WL_primdef: "WL == Suc HB"
+
+lemma WL_def: "WL = Suc HB"
+  by (import word32 WL_def)
+
+consts
+  MODw :: "nat => nat" 
+
+defs
+  MODw_primdef: "MODw == %n. n mod 2 ^ WL"
+
+lemma MODw_def: "MODw n = n mod 2 ^ WL"
+  by (import word32 MODw_def)
+
+consts
+  INw :: "nat => bool" 
+
+defs
+  INw_primdef: "INw == %n. n < 2 ^ WL"
+
+lemma INw_def: "INw n = (n < 2 ^ WL)"
+  by (import word32 INw_def)
+
+consts
+  EQUIV :: "nat => nat => bool" 
+
+defs
+  EQUIV_primdef: "EQUIV == %x y. MODw x = MODw y"
+
+lemma EQUIV_def: "EQUIV x y = (MODw x = MODw y)"
+  by (import word32 EQUIV_def)
+
+lemma EQUIV_QT: "EQUIV x y = (EQUIV x = EQUIV y)"
+  by (import word32 EQUIV_QT)
+
+lemma FUNPOW_THM2: "(f ^^ Suc n) x = f ((f ^^ n) x)"
+  by (import word32 FUNPOW_THM2)
+
+lemma FUNPOW_COMP: "(f ^^ m) ((f ^^ n) a) = (f ^^ (m + n)) a"
+  by (import word32 FUNPOW_COMP)
+
+lemma INw_MODw: "INw (MODw n)"
+  by (import word32 INw_MODw)
+
+lemma TOw_IDEM: "INw a ==> MODw a = a"
+  by (import word32 TOw_IDEM)
+
+lemma MODw_IDEM2: "MODw (MODw a) = MODw a"
+  by (import word32 MODw_IDEM2)
+
+lemma TOw_QT: "EQUIV (MODw a) a"
+  by (import word32 TOw_QT)
+
+lemma MODw_THM: "MODw = BITS HB 0"
+  by (import word32 MODw_THM)
+
+lemma MOD_ADD: "MODw (a + b) = MODw (MODw a + MODw b)"
+  by (import word32 MOD_ADD)
+
+lemma MODw_MULT: "MODw (a * b) = MODw (MODw a * MODw b)"
+  by (import word32 MODw_MULT)
+
+consts
+  AONE :: "nat" 
+
+defs
+  AONE_primdef: "AONE == 1"
+
+lemma AONE_def: "AONE = 1"
+  by (import word32 AONE_def)
+
+lemma ADD_QT: "(ALL n. EQUIV (0 + n) n) & (ALL m n. EQUIV (Suc m + n) (Suc (m + n)))"
+  by (import word32 ADD_QT)
+
+lemma ADD_0_QT: "EQUIV (a + 0) a"
+  by (import word32 ADD_0_QT)
+
+lemma ADD_COMM_QT: "EQUIV (a + b) (b + a)"
+  by (import word32 ADD_COMM_QT)
+
+lemma ADD_ASSOC_QT: "EQUIV (a + (b + c)) (a + b + c)"
+  by (import word32 ADD_ASSOC_QT)
+
+lemma MULT_QT: "(ALL n. EQUIV (0 * n) 0) & (ALL m n. EQUIV (Suc m * n) (m * n + n))"
+  by (import word32 MULT_QT)
+
+lemma ADD1_QT: "EQUIV (Suc m) (m + AONE)"
+  by (import word32 ADD1_QT)
+
+lemma ADD_CLAUSES_QT: "(ALL m. EQUIV (0 + m) m) &
+(ALL m. EQUIV (m + 0) m) &
+(ALL m n. EQUIV (Suc m + n) (Suc (m + n))) &
+(ALL m n. EQUIV (m + Suc n) (Suc (m + n)))"
+  by (import word32 ADD_CLAUSES_QT)
+
+lemma SUC_EQUIV_COMP: "EQUIV (Suc a) b ==> EQUIV a (b + (2 ^ WL - 1))"
+  by (import word32 SUC_EQUIV_COMP)
+
+lemma INV_SUC_EQ_QT: "EQUIV (Suc m) (Suc n) = EQUIV m n"
+  by (import word32 INV_SUC_EQ_QT)
+
+lemma ADD_INV_0_QT: "EQUIV (m + n) m ==> EQUIV n 0"
+  by (import word32 ADD_INV_0_QT)
+
+lemma ADD_INV_0_EQ_QT: "EQUIV (m + n) m = EQUIV n 0"
+  by (import word32 ADD_INV_0_EQ_QT)
+
+lemma EQ_ADD_LCANCEL_QT: "EQUIV (m + n) (m + p) = EQUIV n p"
+  by (import word32 EQ_ADD_LCANCEL_QT)
+
+lemma EQ_ADD_RCANCEL_QT: "EQUIV (x + xb) (xa + xb) = EQUIV x xa"
+  by (import word32 EQ_ADD_RCANCEL_QT)
+
+lemma LEFT_ADD_DISTRIB_QT: "EQUIV (p * (m + n)) (p * m + p * n)"
+  by (import word32 LEFT_ADD_DISTRIB_QT)
+
+lemma MULT_ASSOC_QT: "EQUIV (m * (n * p)) (m * n * p)"
+  by (import word32 MULT_ASSOC_QT)
+
+lemma MULT_COMM_QT: "EQUIV (m * n) (n * m)"
+  by (import word32 MULT_COMM_QT)
+
+lemma MULT_CLAUSES_QT: "EQUIV (0 * m) 0 &
+EQUIV (m * 0) 0 &
+EQUIV (AONE * m) m &
+EQUIV (m * AONE) m &
+EQUIV (Suc m * n) (m * n + n) & EQUIV (m * Suc n) (m + m * n)"
+  by (import word32 MULT_CLAUSES_QT)
+
+consts
+  MSBn :: "nat => bool" 
+
+defs
+  MSBn_primdef: "MSBn == bit HB"
+
+lemma MSBn_def: "MSBn = bit HB"
+  by (import word32 MSBn_def)
+
+consts
+  ONE_COMP :: "nat => nat" 
+
+defs
+  ONE_COMP_primdef: "ONE_COMP == %x. 2 ^ WL - 1 - MODw x"
+
+lemma ONE_COMP_def: "ONE_COMP x = 2 ^ WL - 1 - MODw x"
+  by (import word32 ONE_COMP_def)
+
+consts
+  TWO_COMP :: "nat => nat" 
+
+defs
+  TWO_COMP_primdef: "TWO_COMP == %x. 2 ^ WL - MODw x"
+
+lemma TWO_COMP_def: "TWO_COMP x = 2 ^ WL - MODw x"
+  by (import word32 TWO_COMP_def)
+
+lemma ADD_TWO_COMP_QT: "EQUIV (MODw a + TWO_COMP a) 0"
+  by (import word32 ADD_TWO_COMP_QT)
+
+lemma TWO_COMP_ONE_COMP_QT: "EQUIV (TWO_COMP a) (ONE_COMP a + AONE)"
+  by (import word32 TWO_COMP_ONE_COMP_QT)
+
+lemma BIT_EQUIV_THM: "(ALL xb<WL. bit xb x = bit xb xa) = EQUIV x xa"
+  by (import word32 BIT_EQUIV_THM)
+
+lemma BITS_SUC2: "BITS (Suc n) 0 a = SLICE (Suc n) (Suc n) a + BITS n 0 a"
+  by (import word32 BITS_SUC2)
+
+lemma BITWISE_ONE_COMP_THM: "BITWISE WL (%x y. ~ x) a b = ONE_COMP a"
+  by (import word32 BITWISE_ONE_COMP_THM)
+
+lemma ONE_COMP_THM: "xa < WL ==> bit xa (ONE_COMP x) = (~ bit xa x)"
+  by (import word32 ONE_COMP_THM)
+
+consts
+  OR :: "nat => nat => nat" 
+
+defs
+  OR_primdef: "OR == BITWISE WL op |"
+
+lemma OR_def: "OR = BITWISE WL op |"
+  by (import word32 OR_def)
+
+consts
+  AND :: "nat => nat => nat" 
+
+defs
+  AND_primdef: "AND == BITWISE WL op &"
+
+lemma AND_def: "AND = BITWISE WL op &"
+  by (import word32 AND_def)
+
+consts
+  EOR :: "nat => nat => nat" 
+
+defs
+  EOR_primdef: "EOR == BITWISE WL op ~="
+
+lemma EOR_def: "EOR = BITWISE WL op ~="
+  by (import word32 EOR_def)
+
+consts
+  COMP0 :: "nat" 
+
+defs
+  COMP0_primdef: "COMP0 == ONE_COMP 0"
+
+lemma COMP0_def: "COMP0 = ONE_COMP 0"
+  by (import word32 COMP0_def)
+
+lemma BITWISE_THM2: "(ALL x<WL. oper (bit x a) (bit x b) = bit x y) =
+EQUIV (BITWISE WL oper a b) y"
+  by (import word32 BITWISE_THM2)
+
+lemma OR_ASSOC_QT: "EQUIV (OR a (OR b c)) (OR (OR a b) c)"
+  by (import word32 OR_ASSOC_QT)
+
+lemma OR_COMM_QT: "EQUIV (OR a b) (OR b a)"
+  by (import word32 OR_COMM_QT)
+
+lemma OR_ABSORB_QT: "EQUIV (AND a (OR a b)) a"
+  by (import word32 OR_ABSORB_QT)
+
+lemma OR_IDEM_QT: "EQUIV (OR a a) a"
+  by (import word32 OR_IDEM_QT)
+
+lemma AND_ASSOC_QT: "EQUIV (AND a (AND b c)) (AND (AND a b) c)"
+  by (import word32 AND_ASSOC_QT)
+
+lemma AND_COMM_QT: "EQUIV (AND a b) (AND b a)"
+  by (import word32 AND_COMM_QT)
+
+lemma AND_ABSORB_QT: "EQUIV (OR a (AND a b)) a"
+  by (import word32 AND_ABSORB_QT)
+
+lemma AND_IDEM_QT: "EQUIV (AND a a) a"
+  by (import word32 AND_IDEM_QT)
+
+lemma OR_COMP_QT: "EQUIV (OR a (ONE_COMP a)) COMP0"
+  by (import word32 OR_COMP_QT)
+
+lemma AND_COMP_QT: "EQUIV (AND a (ONE_COMP a)) 0"
+  by (import word32 AND_COMP_QT)
+
+lemma ONE_COMP_QT: "EQUIV (ONE_COMP (ONE_COMP a)) a"
+  by (import word32 ONE_COMP_QT)
+
+lemma RIGHT_AND_OVER_OR_QT: "EQUIV (AND (OR a b) c) (OR (AND a c) (AND b c))"
+  by (import word32 RIGHT_AND_OVER_OR_QT)
+
+lemma RIGHT_OR_OVER_AND_QT: "EQUIV (OR (AND a b) c) (AND (OR a c) (OR b c))"
+  by (import word32 RIGHT_OR_OVER_AND_QT)
+
+lemma DE_MORGAN_THM_QT: "EQUIV (ONE_COMP (AND a b)) (OR (ONE_COMP a) (ONE_COMP b)) &
+EQUIV (ONE_COMP (OR a b)) (AND (ONE_COMP a) (ONE_COMP b))"
+  by (import word32 DE_MORGAN_THM_QT)
+
+lemma BIT_EQUIV: "[| n < WL; EQUIV a b |] ==> bit n a = bit n b"
+  by (import word32 BIT_EQUIV)
+
+lemma LSB_WELLDEF: "EQUIV a b ==> LSBn a = LSBn b"
+  by (import word32 LSB_WELLDEF)
+
+lemma MSB_WELLDEF: "EQUIV a b ==> MSBn a = MSBn b"
+  by (import word32 MSB_WELLDEF)
+
+lemma BITWISE_ISTEP: "0 < n
+==> BITWISE n oper (a div 2) (b div 2) =
+    BITWISE n oper a b div 2 + SBIT (oper (bit n a) (bit n b)) (n - 1)"
+  by (import word32 BITWISE_ISTEP)
+
+lemma BITWISE_EVAL: "BITWISE (Suc n) oper a b =
+2 * BITWISE n oper (a div 2) (b div 2) + SBIT (oper (LSBn a) (LSBn b)) 0"
+  by (import word32 BITWISE_EVAL)
+
+lemma BITWISE_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (BITWISE n oper a c) (BITWISE n oper b d)"
+  by (import word32 BITWISE_WELLDEF)
+
+lemma BITWISEw_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (BITWISE WL oper a c) (BITWISE WL oper b d)"
+  by (import word32 BITWISEw_WELLDEF)
+
+lemma SUC_WELLDEF: "EQUIV a b ==> EQUIV (Suc a) (Suc b)"
+  by (import word32 SUC_WELLDEF)
+
+lemma ADD_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (a + c) (b + d)"
+  by (import word32 ADD_WELLDEF)
+
+lemma MUL_WELLDEF: "EQUIV a b & EQUIV c d ==> EQUIV (a * c) (b * d)"
+  by (import word32 MUL_WELLDEF)
+
+lemma ONE_COMP_WELLDEF: "EQUIV a b ==> EQUIV (ONE_COMP a) (ONE_COMP b)"
+  by (import word32 ONE_COMP_WELLDEF)
+
+lemma TWO_COMP_WELLDEF: "EQUIV a b ==> EQUIV (TWO_COMP a) (TWO_COMP b)"
+  by (import word32 TWO_COMP_WELLDEF)
+
+lemma TOw_WELLDEF: "EQUIV a b ==> EQUIV (MODw a) (MODw b)"
+  by (import word32 TOw_WELLDEF)
+
+consts
+  LSR_ONE :: "nat => nat" 
+
+defs
+  LSR_ONE_primdef: "LSR_ONE == %a. MODw a div 2"
+
+lemma LSR_ONE_def: "LSR_ONE a = MODw a div 2"
+  by (import word32 LSR_ONE_def)
+
+consts
+  ASR_ONE :: "nat => nat" 
+
+defs
+  ASR_ONE_primdef: "ASR_ONE == %a. LSR_ONE a + SBIT (MSBn a) HB"
+
+lemma ASR_ONE_def: "ASR_ONE a = LSR_ONE a + SBIT (MSBn a) HB"
+  by (import word32 ASR_ONE_def)
+
+consts
+  ROR_ONE :: "nat => nat" 
+
+defs
+  ROR_ONE_primdef: "ROR_ONE == %a. LSR_ONE a + SBIT (LSBn a) HB"
+
+lemma ROR_ONE_def: "ROR_ONE a = LSR_ONE a + SBIT (LSBn a) HB"
+  by (import word32 ROR_ONE_def)
+
+consts
+  RRXn :: "bool => nat => nat" 
+
+defs
+  RRXn_primdef: "RRXn == %c a. LSR_ONE a + SBIT c HB"
+
+lemma RRXn_def: "RRXn c a = LSR_ONE a + SBIT c HB"
+  by (import word32 RRXn_def)
+
+lemma LSR_ONE_WELLDEF: "EQUIV a b ==> EQUIV (LSR_ONE a) (LSR_ONE b)"
+  by (import word32 LSR_ONE_WELLDEF)
+
+lemma ASR_ONE_WELLDEF: "EQUIV a b ==> EQUIV (ASR_ONE a) (ASR_ONE b)"
+  by (import word32 ASR_ONE_WELLDEF)
+
+lemma ROR_ONE_WELLDEF: "EQUIV a b ==> EQUIV (ROR_ONE a) (ROR_ONE b)"
+  by (import word32 ROR_ONE_WELLDEF)
+
+lemma RRX_WELLDEF: "EQUIV a b ==> EQUIV (RRXn c a) (RRXn c b)"
+  by (import word32 RRX_WELLDEF)
+
+lemma LSR_ONE: "LSR_ONE = BITS HB 1"
+  by (import word32 LSR_ONE)
+
+typedef (open) word32 = "{x::nat => bool. EX xa. x = EQUIV xa}" 
+  by (rule typedef_helper,import word32 word32_TY_DEF)
+
+lemmas word32_TY_DEF = typedef_hol2hol4 [OF type_definition_word32]
+
+consts
+  mk_word32 :: "(nat => bool) => word32" 
+  dest_word32 :: "word32 => nat => bool" 
+
+specification (dest_word32 mk_word32) word32_tybij: "(ALL a. mk_word32 (dest_word32 a) = a) &
+(ALL r. (EX x. r = EQUIV x) = (dest_word32 (mk_word32 r) = r))"
+  by (import word32 word32_tybij)
+
+consts
+  w_0 :: "word32" 
+
+defs
+  w_0_primdef: "w_0 == mk_word32 (EQUIV 0)"
+
+lemma w_0_def: "w_0 = mk_word32 (EQUIV 0)"
+  by (import word32 w_0_def)
+
+consts
+  w_1 :: "word32" 
+
+defs
+  w_1_primdef: "w_1 == mk_word32 (EQUIV AONE)"
+
+lemma w_1_def: "w_1 = mk_word32 (EQUIV AONE)"
+  by (import word32 w_1_def)
+
+consts
+  w_T :: "word32" 
+
+defs
+  w_T_primdef: "w_T == mk_word32 (EQUIV COMP0)"
+
+lemma w_T_def: "w_T = mk_word32 (EQUIV COMP0)"
+  by (import word32 w_T_def)
+
+definition
+  word_suc :: "word32 => word32"  where
+  "word_suc == %T1. mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
+
+lemma word_suc: "word_suc T1 = mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
+  by (import word32 word_suc)
+
+definition
+  word_add :: "word32 => word32 => word32"  where
+  "word_add ==
+%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
+
+lemma word_add: "word_add T1 T2 =
+mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
+  by (import word32 word_add)
+
+definition
+  word_mul :: "word32 => word32 => word32"  where
+  "word_mul ==
+%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
+
+lemma word_mul: "word_mul T1 T2 =
+mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
+  by (import word32 word_mul)
+
+definition
+  word_1comp :: "word32 => word32"  where
+  "word_1comp == %T1. mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
+
+lemma word_1comp: "word_1comp T1 = mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
+  by (import word32 word_1comp)
+
+definition
+  word_2comp :: "word32 => word32"  where
+  "word_2comp == %T1. mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
+
+lemma word_2comp: "word_2comp T1 = mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
+  by (import word32 word_2comp)
+
+definition
+  word_lsr1 :: "word32 => word32"  where
+  "word_lsr1 == %T1. mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
+
+lemma word_lsr1: "word_lsr1 T1 = mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
+  by (import word32 word_lsr1)
+
+definition
+  word_asr1 :: "word32 => word32"  where
+  "word_asr1 == %T1. mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
+
+lemma word_asr1: "word_asr1 T1 = mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
+  by (import word32 word_asr1)
+
+definition
+  word_ror1 :: "word32 => word32"  where
+  "word_ror1 == %T1. mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
+
+lemma word_ror1: "word_ror1 T1 = mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
+  by (import word32 word_ror1)
+
+consts
+  RRX :: "bool => word32 => word32" 
+
+defs
+  RRX_primdef: "RRX == %T1 T2. mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
+
+lemma RRX_def: "RRX T1 T2 = mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
+  by (import word32 RRX_def)
+
+consts
+  LSB :: "word32 => bool" 
+
+defs
+  LSB_primdef: "LSB == %T1. LSBn (Eps (dest_word32 T1))"
+
+lemma LSB_def: "LSB T1 = LSBn (Eps (dest_word32 T1))"
+  by (import word32 LSB_def)
+
+consts
+  MSB :: "word32 => bool" 
+
+defs
+  MSB_primdef: "MSB == %T1. MSBn (Eps (dest_word32 T1))"
+
+lemma MSB_def: "MSB T1 = MSBn (Eps (dest_word32 T1))"
+  by (import word32 MSB_def)
+
+definition
+  bitwise_or :: "word32 => word32 => word32"  where
+  "bitwise_or ==
+%T1 T2. mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
+
+lemma bitwise_or: "bitwise_or T1 T2 =
+mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
+  by (import word32 bitwise_or)
+
+definition
+  bitwise_eor :: "word32 => word32 => word32"  where
+  "bitwise_eor ==
+%T1 T2.
+   mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
+
+lemma bitwise_eor: "bitwise_eor T1 T2 =
+mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
+  by (import word32 bitwise_eor)
+
+definition
+  bitwise_and :: "word32 => word32 => word32"  where
+  "bitwise_and ==
+%T1 T2.
+   mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
+
+lemma bitwise_and: "bitwise_and T1 T2 =
+mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
+  by (import word32 bitwise_and)
+
+consts
+  TOw :: "word32 => word32" 
+
+defs
+  TOw_primdef: "TOw == %T1. mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
+
+lemma TOw_def: "TOw T1 = mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
+  by (import word32 TOw_def)
+
+consts
+  n2w :: "nat => word32" 
+
+defs
+  n2w_primdef: "n2w == %n. mk_word32 (EQUIV n)"
+
+lemma n2w_def: "n2w n = mk_word32 (EQUIV n)"
+  by (import word32 n2w_def)
+
+consts
+  w2n :: "word32 => nat" 
+
+defs
+  w2n_primdef: "w2n == %w. MODw (Eps (dest_word32 w))"
+
+lemma w2n_def: "w2n w = MODw (Eps (dest_word32 w))"
+  by (import word32 w2n_def)
+
+lemma ADDw: "(ALL x. word_add w_0 x = x) &
+(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa))"
+  by (import word32 ADDw)
+
+lemma ADD_0w: "word_add x w_0 = x"
+  by (import word32 ADD_0w)
+
+lemma ADD1w: "word_suc x = word_add x w_1"
+  by (import word32 ADD1w)
+
+lemma ADD_ASSOCw: "word_add x (word_add xa xb) = word_add (word_add x xa) xb"
+  by (import word32 ADD_ASSOCw)
+
+lemma ADD_CLAUSESw: "(ALL x. word_add w_0 x = x) &
+(ALL x. word_add x w_0 = x) &
+(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa)) &
+(ALL x xa. word_add x (word_suc xa) = word_suc (word_add x xa))"
+  by (import word32 ADD_CLAUSESw)
+
+lemma ADD_COMMw: "word_add x xa = word_add xa x"
+  by (import word32 ADD_COMMw)
+
+lemma ADD_INV_0_EQw: "(word_add x xa = x) = (xa = w_0)"
+  by (import word32 ADD_INV_0_EQw)
+
+lemma EQ_ADD_LCANCELw: "(word_add x xa = word_add x xb) = (xa = xb)"
+  by (import word32 EQ_ADD_LCANCELw)
+
+lemma EQ_ADD_RCANCELw: "(word_add x xb = word_add xa xb) = (x = xa)"
+  by (import word32 EQ_ADD_RCANCELw)
+
+lemma LEFT_ADD_DISTRIBw: "word_mul xb (word_add x xa) = word_add (word_mul xb x) (word_mul xb xa)"
+  by (import word32 LEFT_ADD_DISTRIBw)
+
+lemma MULT_ASSOCw: "word_mul x (word_mul xa xb) = word_mul (word_mul x xa) xb"
+  by (import word32 MULT_ASSOCw)
+
+lemma MULT_COMMw: "word_mul x xa = word_mul xa x"
+  by (import word32 MULT_COMMw)
+
+lemma MULT_CLAUSESw: "word_mul w_0 x = w_0 &
+word_mul x w_0 = w_0 &
+word_mul w_1 x = x &
+word_mul x w_1 = x &
+word_mul (word_suc x) xa = word_add (word_mul x xa) xa &
+word_mul x (word_suc xa) = word_add x (word_mul x xa)"
+  by (import word32 MULT_CLAUSESw)
+
+lemma TWO_COMP_ONE_COMP: "word_2comp x = word_add (word_1comp x) w_1"
+  by (import word32 TWO_COMP_ONE_COMP)
+
+lemma OR_ASSOCw: "bitwise_or x (bitwise_or xa xb) = bitwise_or (bitwise_or x xa) xb"
+  by (import word32 OR_ASSOCw)
+
+lemma OR_COMMw: "bitwise_or x xa = bitwise_or xa x"
+  by (import word32 OR_COMMw)
+
+lemma OR_IDEMw: "bitwise_or x x = x"
+  by (import word32 OR_IDEMw)
+
+lemma OR_ABSORBw: "bitwise_and x (bitwise_or x xa) = x"
+  by (import word32 OR_ABSORBw)
+
+lemma AND_ASSOCw: "bitwise_and x (bitwise_and xa xb) = bitwise_and (bitwise_and x xa) xb"
+  by (import word32 AND_ASSOCw)
+
+lemma AND_COMMw: "bitwise_and x xa = bitwise_and xa x"
+  by (import word32 AND_COMMw)
+
+lemma AND_IDEMw: "bitwise_and x x = x"
+  by (import word32 AND_IDEMw)
+
+lemma AND_ABSORBw: "bitwise_or x (bitwise_and x xa) = x"
+  by (import word32 AND_ABSORBw)
+
+lemma ONE_COMPw: "word_1comp (word_1comp x) = x"
+  by (import word32 ONE_COMPw)
+
+lemma RIGHT_AND_OVER_ORw: "bitwise_and (bitwise_or x xa) xb =
+bitwise_or (bitwise_and x xb) (bitwise_and xa xb)"
+  by (import word32 RIGHT_AND_OVER_ORw)
+
+lemma RIGHT_OR_OVER_ANDw: "bitwise_or (bitwise_and x xa) xb =
+bitwise_and (bitwise_or x xb) (bitwise_or xa xb)"
+  by (import word32 RIGHT_OR_OVER_ANDw)
+
+lemma DE_MORGAN_THMw: "word_1comp (bitwise_and x xa) = bitwise_or (word_1comp x) (word_1comp xa) &
+word_1comp (bitwise_or x xa) = bitwise_and (word_1comp x) (word_1comp xa)"
+  by (import word32 DE_MORGAN_THMw)
+
+lemma w_0: "w_0 = n2w 0"
+  by (import word32 w_0)
+
+lemma w_1: "w_1 = n2w 1"
+  by (import word32 w_1)
+
+lemma w_T: "w_T =
+n2w (NUMERAL
+      (NUMERAL_BIT1
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1
+              (NUMERAL_BIT1
+                (NUMERAL_BIT1
+                  (NUMERAL_BIT1
+                    (NUMERAL_BIT1
+                      (NUMERAL_BIT1
+                        (NUMERAL_BIT1
+                          (NUMERAL_BIT1
+                            (NUMERAL_BIT1
+                              (NUMERAL_BIT1
+                                (NUMERAL_BIT1
+                                  (NUMERAL_BIT1
+                                    (NUMERAL_BIT1
+(NUMERAL_BIT1
+  (NUMERAL_BIT1
+    (NUMERAL_BIT1
+      (NUMERAL_BIT1
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1
+              (NUMERAL_BIT1
+                (NUMERAL_BIT1
+                  (NUMERAL_BIT1
+                    (NUMERAL_BIT1
+                      (NUMERAL_BIT1
+                        (NUMERAL_BIT1
+                          (NUMERAL_BIT1
+                            (NUMERAL_BIT1
+                              (NUMERAL_BIT1
+                                ALT_ZERO)))))))))))))))))))))))))))))))))"
+  by (import word32 w_T)
+
+lemma ADD_TWO_COMP: "word_add x (word_2comp x) = w_0"
+  by (import word32 ADD_TWO_COMP)
+
+lemma ADD_TWO_COMP2: "word_add (word_2comp x) x = w_0"
+  by (import word32 ADD_TWO_COMP2)
+
+definition
+  word_sub :: "word32 => word32 => word32"  where
+  "word_sub == %a b. word_add a (word_2comp b)"
+
+lemma word_sub: "word_sub a b = word_add a (word_2comp b)"
+  by (import word32 word_sub)
+
+definition
+  word_lsl :: "word32 => nat => word32"  where
+  "word_lsl == %a n. word_mul a (n2w (2 ^ n))"
+
+lemma word_lsl: "word_lsl a n = word_mul a (n2w (2 ^ n))"
+  by (import word32 word_lsl)
+
+definition
+  word_lsr :: "word32 => nat => word32"  where
+  "word_lsr == %a n. (word_lsr1 ^^ n) a"
+
+lemma word_lsr: "word_lsr a n = (word_lsr1 ^^ n) a"
+  by (import word32 word_lsr)
+
+definition
+  word_asr :: "word32 => nat => word32"  where
+  "word_asr == %a n. (word_asr1 ^^ n) a"
+
+lemma word_asr: "word_asr a n = (word_asr1 ^^ n) a"
+  by (import word32 word_asr)
+
+definition
+  word_ror :: "word32 => nat => word32"  where
+  "word_ror == %a n. (word_ror1 ^^ n) a"
+
+lemma word_ror: "word_ror a n = (word_ror1 ^^ n) a"
+  by (import word32 word_ror)
+
+consts
+  BITw :: "nat => word32 => bool" 
+
+defs
+  BITw_primdef: "BITw == %b n. bit b (w2n n)"
+
+lemma BITw_def: "BITw b n = bit b (w2n n)"
+  by (import word32 BITw_def)
+
+consts
+  BITSw :: "nat => nat => word32 => nat" 
+
+defs
+  BITSw_primdef: "BITSw == %h l n. BITS h l (w2n n)"
+
+lemma BITSw_def: "BITSw h l n = BITS h l (w2n n)"
+  by (import word32 BITSw_def)
+
+consts
+  SLICEw :: "nat => nat => word32 => nat" 
+
+defs
+  SLICEw_primdef: "SLICEw == %h l n. SLICE h l (w2n n)"
+
+lemma SLICEw_def: "SLICEw h l n = SLICE h l (w2n n)"
+  by (import word32 SLICEw_def)
+
+lemma TWO_COMP_ADD: "word_2comp (word_add a b) = word_add (word_2comp a) (word_2comp b)"
+  by (import word32 TWO_COMP_ADD)
+
+lemma TWO_COMP_ELIM: "word_2comp (word_2comp a) = a"
+  by (import word32 TWO_COMP_ELIM)
+
+lemma ADD_SUB_ASSOC: "word_sub (word_add a b) c = word_add a (word_sub b c)"
+  by (import word32 ADD_SUB_ASSOC)
+
+lemma ADD_SUB_SYM: "word_sub (word_add a b) c = word_add (word_sub a c) b"
+  by (import word32 ADD_SUB_SYM)
+
+lemma SUB_EQUALw: "word_sub a a = w_0"
+  by (import word32 SUB_EQUALw)
+
+lemma ADD_SUBw: "word_sub (word_add a b) b = a"
+  by (import word32 ADD_SUBw)
+
+lemma SUB_SUBw: "word_sub a (word_sub b c) = word_sub (word_add a c) b"
+  by (import word32 SUB_SUBw)
+
+lemma ONE_COMP_TWO_COMP: "word_1comp a = word_sub (word_2comp a) w_1"
+  by (import word32 ONE_COMP_TWO_COMP)
+
+lemma SUBw: "word_sub (word_suc m) n = word_suc (word_sub m n)"
+  by (import word32 SUBw)
+
+lemma ADD_EQ_SUBw: "(word_add m n = p) = (m = word_sub p n)"
+  by (import word32 ADD_EQ_SUBw)
+
+lemma CANCEL_SUBw: "(word_sub n p = word_sub m p) = (n = m)"
+  by (import word32 CANCEL_SUBw)
+
+lemma SUB_PLUSw: "word_sub a (word_add b c) = word_sub (word_sub a b) c"
+  by (import word32 SUB_PLUSw)
+
+lemma word_nchotomy: "EX n. w = n2w n"
+  by (import word32 word_nchotomy)
+
+lemma dest_word_mk_word_eq3: "dest_word32 (mk_word32 (EQUIV a)) = EQUIV a"
+  by (import word32 dest_word_mk_word_eq3)
+
+lemma MODw_ELIM: "n2w (MODw n) = n2w n"
+  by (import word32 MODw_ELIM)
+
+lemma w2n_EVAL: "w2n (n2w n) = MODw n"
+  by (import word32 w2n_EVAL)
+
+lemma w2n_ELIM: "n2w (w2n a) = a"
+  by (import word32 w2n_ELIM)
+
+lemma n2w_11: "(n2w a = n2w b) = (MODw a = MODw b)"
+  by (import word32 n2w_11)
+
+lemma ADD_EVAL: "word_add (n2w a) (n2w b) = n2w (a + b)"
+  by (import word32 ADD_EVAL)
+
+lemma MUL_EVAL: "word_mul (n2w a) (n2w b) = n2w (a * b)"
+  by (import word32 MUL_EVAL)
+
+lemma ONE_COMP_EVAL: "word_1comp (n2w a) = n2w (ONE_COMP a)"
+  by (import word32 ONE_COMP_EVAL)
+
+lemma TWO_COMP_EVAL: "word_2comp (n2w a) = n2w (TWO_COMP a)"
+  by (import word32 TWO_COMP_EVAL)
+
+lemma LSR_ONE_EVAL: "word_lsr1 (n2w a) = n2w (LSR_ONE a)"
+  by (import word32 LSR_ONE_EVAL)
+
+lemma ASR_ONE_EVAL: "word_asr1 (n2w a) = n2w (ASR_ONE a)"
+  by (import word32 ASR_ONE_EVAL)
+
+lemma ROR_ONE_EVAL: "word_ror1 (n2w a) = n2w (ROR_ONE a)"
+  by (import word32 ROR_ONE_EVAL)
+
+lemma RRX_EVAL: "RRX c (n2w a) = n2w (RRXn c a)"
+  by (import word32 RRX_EVAL)
+
+lemma LSB_EVAL: "LSB (n2w a) = LSBn a"
+  by (import word32 LSB_EVAL)
+
+lemma MSB_EVAL: "MSB (n2w a) = MSBn a"
+  by (import word32 MSB_EVAL)
+
+lemma OR_EVAL: "bitwise_or (n2w a) (n2w b) = n2w (OR a b)"
+  by (import word32 OR_EVAL)
+
+lemma EOR_EVAL: "bitwise_eor (n2w a) (n2w b) = n2w (EOR a b)"
+  by (import word32 EOR_EVAL)
+
+lemma AND_EVAL: "bitwise_and (n2w a) (n2w b) = n2w (AND a b)"
+  by (import word32 AND_EVAL)
+
+lemma BITS_EVAL: "BITSw h l (n2w a) = BITS h l (MODw a)"
+  by (import word32 BITS_EVAL)
+
+lemma BIT_EVAL: "BITw b (n2w a) = bit b (MODw a)"
+  by (import word32 BIT_EVAL)
+
+lemma SLICE_EVAL: "SLICEw h l (n2w a) = SLICE h l (MODw a)"
+  by (import word32 SLICE_EVAL)
+
+lemma LSL_ADD: "word_lsl (word_lsl a m) n = word_lsl a (m + n)"
+  by (import word32 LSL_ADD)
+
+lemma LSR_ADD: "word_lsr (word_lsr x xa) xb = word_lsr x (xa + xb)"
+  by (import word32 LSR_ADD)
+
+lemma ASR_ADD: "word_asr (word_asr x xa) xb = word_asr x (xa + xb)"
+  by (import word32 ASR_ADD)
+
+lemma ROR_ADD: "word_ror (word_ror x xa) xb = word_ror x (xa + xb)"
+  by (import word32 ROR_ADD)
+
+lemma LSL_LIMIT: "HB < n ==> word_lsl w n = w_0"
+  by (import word32 LSL_LIMIT)
+
+lemma MOD_MOD_DIV: "INw (MODw a div 2 ^ b)"
+  by (import word32 MOD_MOD_DIV)
+
+lemma MOD_MOD_DIV_2EXP: "MODw (MODw a div 2 ^ n) div 2 = MODw a div 2 ^ Suc n"
+  by (import word32 MOD_MOD_DIV_2EXP)
+
+lemma LSR_EVAL: "word_lsr (n2w a) n = n2w (MODw a div 2 ^ n)"
+  by (import word32 LSR_EVAL)
+
+lemma LSR_THM: "word_lsr (n2w n) x = n2w (BITS HB (min WL x) n)"
+  by (import word32 LSR_THM)
+
+lemma LSR_LIMIT: "HB < x ==> word_lsr w x = w_0"
+  by (import word32 LSR_LIMIT)
+
+lemma LEFT_SHIFT_LESS: "(a::nat) < (2::nat) ^ (m::nat)
+==> (2::nat) ^ (n::nat) + a * (2::nat) ^ n <= (2::nat) ^ (m + n)"
+  by (import word32 LEFT_SHIFT_LESS)
+
+lemma ROR_THM: "word_ror (n2w n) x =
+(let x' = x mod WL
+ in n2w (BITS HB x' n + BITS (x' - 1) 0 n * 2 ^ (WL - x')))"
+  by (import word32 ROR_THM)
+
+lemma ROR_CYCLE: "word_ror w (x * WL) = w"
+  by (import word32 ROR_CYCLE)
+
+lemma ASR_THM: "word_asr (n2w n) x =
+(let x' = min HB x; s = BITS HB x' n
+ in n2w (if MSBn n then 2 ^ WL - 2 ^ (WL - x') + s else s))"
+  by (import word32 ASR_THM)
+
+lemma ASR_LIMIT: "HB <= x ==> word_asr w x = (if MSB w then w_T else w_0)"
+  by (import word32 ASR_LIMIT)
+
+lemma ZERO_SHIFT: "(ALL n. word_lsl w_0 n = w_0) &
+(ALL n. word_asr w_0 n = w_0) &
+(ALL n. word_lsr w_0 n = w_0) & (ALL n. word_ror w_0 n = w_0)"
+  by (import word32 ZERO_SHIFT)
+
+lemma ZERO_SHIFT2: "(ALL a. word_lsl a 0 = a) &
+(ALL a. word_asr a 0 = a) &
+(ALL a. word_lsr a 0 = a) & (ALL a. word_ror a 0 = a)"
+  by (import word32 ZERO_SHIFT2)
+
+lemma ASR_w_T: "word_asr w_T n = w_T"
+  by (import word32 ASR_w_T)
+
+lemma ROR_w_T: "word_ror w_T n = w_T"
+  by (import word32 ROR_w_T)
+
+lemma MODw_EVAL: "MODw x =
+x mod
+NUMERAL
+ (NUMERAL_BIT2
+   (NUMERAL_BIT1
+     (NUMERAL_BIT1
+       (NUMERAL_BIT1
+         (NUMERAL_BIT1
+           (NUMERAL_BIT1
+             (NUMERAL_BIT1
+               (NUMERAL_BIT1
+                 (NUMERAL_BIT1
+                   (NUMERAL_BIT1
+                     (NUMERAL_BIT1
+                       (NUMERAL_BIT1
+                         (NUMERAL_BIT1
+                           (NUMERAL_BIT1
+                             (NUMERAL_BIT1
+                               (NUMERAL_BIT1
+                                 (NUMERAL_BIT1
+                                   (NUMERAL_BIT1
+                                     (NUMERAL_BIT1
+ (NUMERAL_BIT1
+   (NUMERAL_BIT1
+     (NUMERAL_BIT1
+       (NUMERAL_BIT1
+         (NUMERAL_BIT1
+           (NUMERAL_BIT1
+             (NUMERAL_BIT1
+               (NUMERAL_BIT1
+                 (NUMERAL_BIT1
+                   (NUMERAL_BIT1
+                     (NUMERAL_BIT1
+                       (NUMERAL_BIT1
+                         (NUMERAL_BIT1
+                           ALT_ZERO))))))))))))))))))))))))))))))))"
+  by (import word32 MODw_EVAL)
+
+lemma ADD_EVAL2: "word_add (n2w a) (n2w b) = n2w (MODw (a + b))"
+  by (import word32 ADD_EVAL2)
+
+lemma MUL_EVAL2: "word_mul (n2w a) (n2w b) = n2w (MODw (a * b))"
+  by (import word32 MUL_EVAL2)
+
+lemma ONE_COMP_EVAL2: "word_1comp (n2w a) =
+n2w (2 ^
+     NUMERAL
+      (NUMERAL_BIT2
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
+     1 -
+     MODw a)"
+  by (import word32 ONE_COMP_EVAL2)
+
+lemma TWO_COMP_EVAL2: "word_2comp (n2w a) =
+n2w (MODw
+      (2 ^
+       NUMERAL
+        (NUMERAL_BIT2
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
+       MODw a))"
+  by (import word32 TWO_COMP_EVAL2)
+
+lemma LSR_ONE_EVAL2: "word_lsr1 (n2w a) = n2w (MODw a div 2)"
+  by (import word32 LSR_ONE_EVAL2)
+
+lemma ASR_ONE_EVAL2: "word_asr1 (n2w a) =
+n2w (MODw a div 2 +
+     SBIT (MSBn a)
+      (NUMERAL
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
+  by (import word32 ASR_ONE_EVAL2)
+
+lemma ROR_ONE_EVAL2: "word_ror1 (n2w a) =
+n2w (MODw a div 2 +
+     SBIT (LSBn a)
+      (NUMERAL
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
+  by (import word32 ROR_ONE_EVAL2)
+
+lemma RRX_EVAL2: "RRX c (n2w a) =
+n2w (MODw a div 2 +
+     SBIT c
+      (NUMERAL
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
+  by (import word32 RRX_EVAL2)
+
+lemma LSB_EVAL2: "LSB (n2w a) = ODD a"
+  by (import word32 LSB_EVAL2)
+
+lemma MSB_EVAL2: "MSB (n2w a) =
+bit (NUMERAL
+      (NUMERAL_BIT1
+        (NUMERAL_BIT1
+          (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
+ a"
+  by (import word32 MSB_EVAL2)
+
+lemma OR_EVAL2: "bitwise_or (n2w a) (n2w b) =
+n2w (BITWISE
+      (NUMERAL
+        (NUMERAL_BIT2
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
+      op | a b)"
+  by (import word32 OR_EVAL2)
+
+lemma AND_EVAL2: "bitwise_and (n2w a) (n2w b) =
+n2w (BITWISE
+      (NUMERAL
+        (NUMERAL_BIT2
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
+      op & a b)"
+  by (import word32 AND_EVAL2)
+
+lemma EOR_EVAL2: "bitwise_eor (n2w a) (n2w b) =
+n2w (BITWISE
+      (NUMERAL
+        (NUMERAL_BIT2
+          (NUMERAL_BIT1
+            (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
+      op ~= a b)"
+  by (import word32 EOR_EVAL2)
+
+lemma BITWISE_EVAL2: "BITWISE n oper x y =
+(if n = 0 then 0
+ else 2 * BITWISE (n - 1) oper (x div 2) (y div 2) +
+      (if oper (ODD x) (ODD y) then 1 else 0))"
+  by (import word32 BITWISE_EVAL2)
+
+lemma BITSwLT_THM: "BITSw h l n < 2 ^ (Suc h - l)"
+  by (import word32 BITSwLT_THM)
+
+lemma BITSw_COMP_THM: "h2 + l1 <= h1 ==> BITS h2 l2 (BITSw h1 l1 n) = BITSw (h2 + l1) (l2 + l1) n"
+  by (import word32 BITSw_COMP_THM)
+
+lemma BITSw_DIV_THM: "BITSw h l x div 2 ^ n = BITSw h (l + n) x"
+  by (import word32 BITSw_DIV_THM)
+
+lemma BITw_THM: "BITw b n = (BITSw b b n = 1)"
+  by (import word32 BITw_THM)
+
+lemma SLICEw_THM: "SLICEw h l n = BITSw h l n * 2 ^ l"
+  by (import word32 SLICEw_THM)
+
+lemma BITS_SLICEw_THM: "BITS h l (SLICEw h l n) = BITSw h l n"
+  by (import word32 BITS_SLICEw_THM)
+
+lemma SLICEw_ZERO_THM: "SLICEw h 0 n = BITSw h 0 n"
+  by (import word32 SLICEw_ZERO_THM)
+
+lemma SLICEw_COMP_THM: "Suc m <= h & l <= m ==> SLICEw h (Suc m) a + SLICEw m l a = SLICEw h l a"
+  by (import word32 SLICEw_COMP_THM)
+
+lemma BITSw_ZERO: "h < l ==> BITSw h l n = 0"
+  by (import word32 BITSw_ZERO)
+
+lemma SLICEw_ZERO: "h < l ==> SLICEw h l n = 0"
+  by (import word32 SLICEw_ZERO)
+
+;end_setup
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/arithmetic.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,271 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "nat_elim__magic" > "nat_elim__magic_def"
+  "ODD" > "ODD_def"
+  "FACT" > "FACT_def"
+  "EVEN" > "EVEN_def"
+
+const_maps
+  "num_case" > "Nat.nat.nat_case"
+  "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
+  "NUMERAL_BIT2" > "Compatibility.NUMERAL_BIT2"
+  "NUMERAL_BIT1" > "Compatibility.NUMERAL_BIT1"
+  "NUMERAL" > "Compatibility.NUMERAL"
+  "MOD" > "Divides.div_class.mod" :: "nat => nat => nat"
+  "MIN" > "Orderings.ord_class.min" :: "nat => nat => nat"
+  "MAX" > "Orderings.ord_class.max" :: "nat => nat => nat"
+  "FUNPOW" > "Compatibility.FUNPOW"
+  "EXP" > "Power.power_class.power" :: "nat => nat => nat"
+  "DIV" > "Divides.div_class.div" :: "nat => nat => nat"
+  "ALT_ZERO" > "Compatibility.ALT_ZERO"
+  ">=" > "Compatibility.nat_ge"
+  ">" > "Compatibility.nat_gt"
+  "<=" > "Orderings.ord_class.less_eq" :: "nat => nat => bool"
+  "-" > "Groups.minus_class.minus" :: "nat => nat => nat"
+  "+" > "Groups.plus_class.plus" :: "nat => nat => nat"
+  "*" > "Groups.times_class.times" :: "nat => nat => nat"
+
+thm_maps
+  "num_case_def" > "Compatibility.num_case_def"
+  "num_case_cong" > "HOL4Base.arithmetic.num_case_cong"
+  "num_case_compute" > "HOL4Base.arithmetic.num_case_compute"
+  "num_CASES" > "Nat.nat.nchotomy"
+  "nat_elim__magic_def" > "HOL4Base.arithmetic.nat_elim__magic_def"
+  "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
+  "ZERO_MOD" > "HOL4Base.arithmetic.ZERO_MOD"
+  "ZERO_LESS_EXP" > "HOL4Base.arithmetic.ZERO_LESS_EXP"
+  "ZERO_LESS_EQ" > "Nat.le0"
+  "ZERO_DIV" > "HOL4Base.arithmetic.ZERO_DIV"
+  "WOP" > "HOL4Base.arithmetic.WOP"
+  "TWO" > "HOL4Base.arithmetic.TWO"
+  "TIMES2" > "Int.semiring_mult_2"
+  "SUC_SUB1" > "Nat.diff_Suc_1"
+  "SUC_ONE_ADD" > "Nat_Numeral.Suc_eq_plus1_left"
+  "SUC_NOT" > "Nat.Zero_not_Suc"
+  "SUC_ELIM_THM" > "HOL4Base.arithmetic.SUC_ELIM_THM"
+  "SUC_ADD_SYM" > "HOL4Base.arithmetic.SUC_ADD_SYM"
+  "SUB_SUB" > "Nat.diff_diff_right"
+  "SUB_RIGHT_SUB" > "Nat.diff_diff_left"
+  "SUB_RIGHT_LESS_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_LESS_EQ"
+  "SUB_RIGHT_LESS" > "HOL4Base.arithmetic.SUB_RIGHT_LESS"
+  "SUB_RIGHT_GREATER_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER_EQ"
+  "SUB_RIGHT_GREATER" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER"
+  "SUB_RIGHT_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_EQ"
+  "SUB_RIGHT_ADD" > "HOL4Base.arithmetic.SUB_RIGHT_ADD"
+  "SUB_PLUS" > "Nat.diff_diff_left"
+  "SUB_MONO_EQ" > "Nat.diff_Suc_Suc"
+  "SUB_LESS_OR" > "HOL4Base.arithmetic.SUB_LESS_OR"
+  "SUB_LESS_EQ_ADD" > "HOL4Base.arithmetic.SUB_LESS_EQ_ADD"
+  "SUB_LESS_EQ" > "Nat.diff_le_self"
+  "SUB_LESS_0" > "Nat.zero_less_diff"
+  "SUB_LEFT_SUC" > "HOL4Base.arithmetic.SUB_LEFT_SUC"
+  "SUB_LEFT_SUB" > "HOL4Base.arithmetic.SUB_LEFT_SUB"
+  "SUB_LEFT_LESS_EQ" > "HOL4Base.arithmetic.SUB_LEFT_LESS_EQ"
+  "SUB_LEFT_LESS" > "Nat.less_diff_conv"
+  "SUB_LEFT_GREATER_EQ" > "Nat.le_diff_conv"
+  "SUB_LEFT_GREATER" > "HOL4Base.arithmetic.SUB_LEFT_GREATER"
+  "SUB_LEFT_EQ" > "HOL4Base.arithmetic.SUB_LEFT_EQ"
+  "SUB_LEFT_ADD" > "HOL4Base.arithmetic.SUB_LEFT_ADD"
+  "SUB_EQ_EQ_0" > "HOL4Base.arithmetic.SUB_EQ_EQ_0"
+  "SUB_EQ_0" > "Nat.diff_is_0_eq"
+  "SUB_EQUAL_0" > "Nat.diff_self_eq_0"
+  "SUB_ELIM_THM" > "HOL4Base.arithmetic.SUB_ELIM_THM"
+  "SUB_CANCEL" > "HOL4Base.arithmetic.SUB_CANCEL"
+  "SUB_ADD" > "Nat.le_add_diff_inverse2"
+  "SUB_0" > "HOL4Base.arithmetic.SUB_0"
+  "SUB" > "Compatibility.SUB"
+  "RIGHT_SUB_DISTRIB" > "Nat.diff_mult_distrib"
+  "RIGHT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_26"
+  "PRE_SUC_EQ" > "HOL4Base.arithmetic.PRE_SUC_EQ"
+  "PRE_SUB1" > "HOL4Base.arithmetic.PRE_SUB1"
+  "PRE_SUB" > "HOL4Base.arithmetic.PRE_SUB"
+  "PRE_ELIM_THM" > "HOL4Base.arithmetic.PRE_ELIM_THM"
+  "OR_LESS" > "Nat.Suc_le_lessD"
+  "ONE" > "Nat.One_nat_def"
+  "ODD_OR_EVEN" > "HOL4Base.arithmetic.ODD_OR_EVEN"
+  "ODD_MULT" > "HOL4Base.arithmetic.ODD_MULT"
+  "ODD_EXISTS" > "HOL4Base.arithmetic.ODD_EXISTS"
+  "ODD_EVEN" > "HOL4Base.arithmetic.ODD_EVEN"
+  "ODD_DOUBLE" > "HOL4Base.arithmetic.ODD_DOUBLE"
+  "ODD_ADD" > "HOL4Base.arithmetic.ODD_ADD"
+  "ODD" > "HOL4Base.arithmetic.ODD"
+  "NUMERAL_DEF" > "Compatibility.NUMERAL_def"
+  "NUMERAL_BIT2" > "Compatibility.NUMERAL_BIT2_def"
+  "NUMERAL_BIT1" > "Compatibility.NUMERAL_BIT1_def"
+  "NOT_ZERO_LT_ZERO" > "Nat.neq0_conv"
+  "NOT_SUC_LESS_EQ_0" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ_0"
+  "NOT_SUC_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ"
+  "NOT_SUC_ADD_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_ADD_LESS_EQ"
+  "NOT_ODD_EQ_EVEN" > "HOL4Base.arithmetic.NOT_ODD_EQ_EVEN"
+  "NOT_NUM_EQ" > "HOL4Base.arithmetic.NOT_NUM_EQ"
+  "NOT_LESS_EQUAL" > "Orderings.linorder_class.not_le"
+  "NOT_LESS" > "Orderings.linorder_class.not_less"
+  "NOT_LEQ" > "Nat.not_less_eq_eq"
+  "NOT_GREATER_EQ" > "Nat.not_less_eq_eq"
+  "NOT_GREATER" > "Orderings.linorder_class.not_less"
+  "NOT_EXP_0" > "HOL4Base.arithmetic.NOT_EXP_0"
+  "NORM_0" > "HOL4Base.arithmetic.NORM_0"
+  "MULT_SYM" > "Fields.linordered_field_class.sign_simps_40"
+  "MULT_SUC_EQ" > "HOL4Base.arithmetic.MULT_SUC_EQ"
+  "MULT_SUC" > "Nat.mult_Suc_right"
+  "MULT_RIGHT_1" > "Divides.arithmetic_simps_43"
+  "MULT_MONO_EQ" > "Nat.Suc_mult_cancel1"
+  "MULT_LESS_EQ_SUC" > "Nat.Suc_mult_le_cancel1"
+  "MULT_LEFT_1" > "Divides.arithmetic_simps_42"
+  "MULT_INCREASES" > "HOL4Base.arithmetic.MULT_INCREASES"
+  "MULT_EXP_MONO" > "HOL4Base.arithmetic.MULT_EXP_MONO"
+  "MULT_EQ_1" > "Nat.nat_mult_eq_1_iff"
+  "MULT_EQ_0" > "Nat.mult_is_0"
+  "MULT_DIV" > "Divides.div_mult_self_is_m"
+  "MULT_COMM" > "Fields.linordered_field_class.sign_simps_40"
+  "MULT_CLAUSES" > "HOL4Base.arithmetic.MULT_CLAUSES"
+  "MULT_ASSOC" > "Fields.linordered_field_class.sign_simps_41"
+  "MULT_0" > "Divides.arithmetic_simps_41"
+  "MULT" > "Compatibility.MULT"
+  "MOD_UNIQUE" > "HOL4Base.arithmetic.MOD_UNIQUE"
+  "MOD_TIMES2" > "HOL4Base.arithmetic.MOD_TIMES2"
+  "MOD_TIMES" > "HOL4Base.arithmetic.MOD_TIMES"
+  "MOD_PLUS" > "HOL4Base.arithmetic.MOD_PLUS"
+  "MOD_P" > "HOL4Base.arithmetic.MOD_P"
+  "MOD_ONE" > "Divides.mod_1"
+  "MOD_MULT_MOD" > "HOL4Base.arithmetic.MOD_MULT_MOD"
+  "MOD_MULT" > "HOL4Base.arithmetic.MOD_MULT"
+  "MOD_MOD" > "HOL4Base.arithmetic.MOD_MOD"
+  "MOD_EQ_0" > "HOL4Base.arithmetic.MOD_EQ_0"
+  "MOD_COMMON_FACTOR" > "HOL4Base.arithmetic.MOD_COMMON_FACTOR"
+  "MIN_MAX_PRED" > "HOL4Base.arithmetic.MIN_MAX_PRED"
+  "MIN_MAX_LT" > "HOL4Base.arithmetic.MIN_MAX_LT"
+  "MIN_MAX_EQ" > "HOL4Base.arithmetic.MIN_MAX_EQ"
+  "MIN_LT" > "HOL4Base.arithmetic.MIN_LT"
+  "MIN_LE" > "HOL4Base.arithmetic.MIN_LE"
+  "MIN_IDEM" > "Big_Operators.linorder_class.Min.idem"
+  "MIN_DEF" > "Compatibility.MIN_DEF"
+  "MIN_COMM" > "Lattices.linorder_class.min_max.inf.commute"
+  "MIN_ASSOC" > "Lattices.linorder_class.min_max.inf.assoc"
+  "MIN_0" > "HOL4Base.arithmetic.MIN_0"
+  "MAX_LT" > "HOL4Base.arithmetic.MAX_LT"
+  "MAX_LE" > "HOL4Base.arithmetic.MAX_LE"
+  "MAX_IDEM" > "Big_Operators.linorder_class.Max.idem"
+  "MAX_DEF" > "Compatibility.MAX_DEF"
+  "MAX_COMM" > "Lattices.linorder_class.min_max.inf_sup_aci_5"
+  "MAX_ASSOC" > "Lattices.linorder_class.min_max.inf_sup_aci_6"
+  "MAX_0" > "HOL4Base.arithmetic.MAX_0"
+  "LESS_TRANS" > "Orderings.order_less_trans"
+  "LESS_SUC_NOT" > "HOL4Base.arithmetic.LESS_SUC_NOT"
+  "LESS_SUC_EQ_COR" > "Nat.Suc_lessI"
+  "LESS_SUB_ADD_LESS" > "HOL4Base.arithmetic.LESS_SUB_ADD_LESS"
+  "LESS_OR_EQ_ADD" > "HOL4Base.arithmetic.LESS_OR_EQ_ADD"
+  "LESS_OR_EQ" > "Compatibility.LESS_OR_EQ"
+  "LESS_OR" > "Nat.Suc_leI"
+  "LESS_NOT_SUC" > "HOL4Base.arithmetic.LESS_NOT_SUC"
+  "LESS_MULT_MONO" > "Nat.Suc_mult_less_cancel1"
+  "LESS_MULT2" > "Rings.linordered_semiring_strict_class.mult_pos_pos"
+  "LESS_MONO_REV" > "Nat.Suc_less_SucD"
+  "LESS_MONO_MULT" > "Nat.mult_le_mono1"
+  "LESS_MONO_EQ" > "Nat.Suc_less_eq"
+  "LESS_MONO_ADD_INV" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_imp_less_right"
+  "LESS_MONO_ADD_EQ" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_right"
+  "LESS_MONO_ADD" > "Groups.ordered_cancel_ab_semigroup_add_class.add_strict_right_mono"
+  "LESS_MOD" > "Divides.mod_less"
+  "LESS_LESS_SUC" > "HOL4Base.arithmetic.LESS_LESS_SUC"
+  "LESS_LESS_EQ_TRANS" > "Orderings.order_less_le_trans"
+  "LESS_LESS_CASES" > "HOL4Base.arithmetic.LESS_LESS_CASES"
+  "LESS_IMP_LESS_OR_EQ" > "FunDef.termination_basic_simps_5"
+  "LESS_IMP_LESS_ADD" > "FunDef.termination_basic_simps_1"
+  "LESS_EXP_SUC_MONO" > "HOL4Base.arithmetic.LESS_EXP_SUC_MONO"
+  "LESS_EQ_TRANS" > "Nat.le_trans"
+  "LESS_EQ_SUC_REFL" > "HOL4Base.arithmetic.LESS_EQ_SUC_REFL"
+  "LESS_EQ_SUB_LESS" > "HOL4Base.arithmetic.LESS_EQ_SUB_LESS"
+  "LESS_EQ_REFL" > "Nat.le_refl"
+  "LESS_EQ_MONO_ADD_EQ" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_right"
+  "LESS_EQ_MONO" > "Nat.Suc_le_mono"
+  "LESS_EQ_LESS_TRANS" > "Orderings.order_le_less_trans"
+  "LESS_EQ_LESS_EQ_MONO" > "Groups.add_mono_thms_linordered_semiring_1"
+  "LESS_EQ_IMP_LESS_SUC" > "Nat.le_imp_less_Suc"
+  "LESS_EQ_EXISTS" > "Nat.le_iff_add"
+  "LESS_EQ_CASES" > "Nat.nat_le_linear"
+  "LESS_EQ_ANTISYM" > "HOL4Base.arithmetic.LESS_EQ_ANTISYM"
+  "LESS_EQ_ADD_SUB" > "Nat.add_diff_assoc"
+  "LESS_EQ_ADD" > "Nat.le_add1"
+  "LESS_EQ_0" > "Nat.le_0_eq"
+  "LESS_EQUAL_ANTISYM" > "Nat.le_antisym"
+  "LESS_EQUAL_ADD" > "Series.le_Suc_ex"
+  "LESS_EQ" > "Nat.Suc_le_eq"
+  "LESS_DIV_EQ_ZERO" > "Divides.div_less"
+  "LESS_CASES_IMP" > "HOL4Base.arithmetic.LESS_CASES_IMP"
+  "LESS_CASES" > "HOL4Base.arithmetic.LESS_CASES"
+  "LESS_ANTISYM" > "HOL4Base.arithmetic.LESS_ANTISYM"
+  "LESS_ADD_SUC" > "HOL4Base.arithmetic.LESS_ADD_SUC"
+  "LESS_ADD_NONZERO" > "HOL4Base.arithmetic.LESS_ADD_NONZERO"
+  "LESS_ADD_1" > "HOL4Base.arithmetic.LESS_ADD_1"
+  "LESS_ADD" > "HOL4Base.arithmetic.LESS_ADD"
+  "LESS_0_CASES" > "HOL4Base.arithmetic.LESS_0_CASES"
+  "LEFT_SUB_DISTRIB" > "Nat.diff_mult_distrib2"
+  "LEFT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_25"
+  "LE" > "HOL4Base.arithmetic.LE"
+  "INV_PRE_LESS_EQ" > "HOL4Base.arithmetic.INV_PRE_LESS_EQ"
+  "INV_PRE_LESS" > "HOL4Base.arithmetic.INV_PRE_LESS"
+  "INV_PRE_EQ" > "HOL4Base.arithmetic.INV_PRE_EQ"
+  "GREATER_OR_EQ" > "Compatibility.GREATER_OR_EQ"
+  "GREATER_EQ" > "Compatibility.real_ge"
+  "GREATER_DEF" > "Compatibility.GREATER_DEF"
+  "FUN_EQ_LEMMA" > "HOL4Base.arithmetic.FUN_EQ_LEMMA"
+  "FUNPOW" > "Compatibility.FUNPOW"
+  "FACT_LESS" > "HOL4Base.arithmetic.FACT_LESS"
+  "FACT" > "HOL4Base.arithmetic.FACT"
+  "EXP_INJECTIVE" > "Power.linordered_semidom_class.power_inject_exp"
+  "EXP_EQ_1" > "Primes.exp_eq_1"
+  "EXP_EQ_0" > "HOL4Base.arithmetic.EXP_EQ_0"
+  "EXP_ALWAYS_BIG_ENOUGH" > "HOL4Base.arithmetic.EXP_ALWAYS_BIG_ENOUGH"
+  "EXP_ADD" > "Power.monoid_mult_class.power_add"
+  "EXP_1" > "HOL4Base.arithmetic.EXP_1"
+  "EXP" > "Compatibility.EXP"
+  "EXISTS_GREATEST" > "HOL4Base.arithmetic.EXISTS_GREATEST"
+  "EVEN_OR_ODD" > "HOL4Base.arithmetic.EVEN_OR_ODD"
+  "EVEN_ODD_EXISTS" > "HOL4Base.arithmetic.EVEN_ODD_EXISTS"
+  "EVEN_ODD" > "HOL4Base.arithmetic.EVEN_ODD"
+  "EVEN_MULT" > "HOL4Base.arithmetic.EVEN_MULT"
+  "EVEN_EXISTS" > "HOL4Base.arithmetic.EVEN_EXISTS"
+  "EVEN_DOUBLE" > "HOL4Base.arithmetic.EVEN_DOUBLE"
+  "EVEN_AND_ODD" > "HOL4Base.arithmetic.EVEN_AND_ODD"
+  "EVEN_ADD" > "HOL4Base.arithmetic.EVEN_ADD"
+  "EVEN" > "HOL4Base.arithmetic.EVEN"
+  "EQ_MULT_LCANCEL" > "Numeral_Simprocs.nat_mult_eq_cancel_disj"
+  "EQ_MONO_ADD_EQ" > "Groups.cancel_semigroup_add_class.add_right_cancel"
+  "EQ_LESS_EQ" > "Orderings.order_class.eq_iff"
+  "EQ_ADD_RCANCEL" > "Groups.cancel_semigroup_add_class.add_right_cancel"
+  "EQ_ADD_LCANCEL" > "Groups.cancel_semigroup_add_class.add_left_cancel"
+  "DIV_UNIQUE" > "HOL4Base.arithmetic.DIV_UNIQUE"
+  "DIV_P" > "HOL4Base.arithmetic.DIV_P"
+  "DIV_ONE" > "Divides.div_1"
+  "DIV_MULT" > "HOL4Base.arithmetic.DIV_MULT"
+  "DIV_LESS_EQ" > "HOL4Base.arithmetic.DIV_LESS_EQ"
+  "DIV_LESS" > "Divides.div_less_dividend"
+  "DIV_DIV_DIV_MULT" > "HOL4Base.arithmetic.DIV_DIV_DIV_MULT"
+  "DIVMOD_ID" > "HOL4Base.arithmetic.DIVMOD_ID"
+  "DIVISION" > "Compatibility.DIVISION"
+  "DA" > "HOL4Base.arithmetic.DA"
+  "COMPLETE_INDUCTION" > "Nat.nat_less_induct"
+  "CANCEL_SUB" > "Nat.eq_diff_iff"
+  "ALT_ZERO" > "Compatibility.ALT_ZERO_def"
+  "ADD_SYM" > "Fields.linordered_field_class.sign_simps_43"
+  "ADD_SUC" > "Nat.add_Suc_right"
+  "ADD_SUB" > "Nat.diff_add_inverse2"
+  "ADD_MONO_LESS_EQ" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_left"
+  "ADD_INV_0_EQ" > "HOL4Base.arithmetic.ADD_INV_0_EQ"
+  "ADD_INV_0" > "Nat.add_eq_self_zero"
+  "ADD_EQ_SUB" > "HOL4Base.arithmetic.ADD_EQ_SUB"
+  "ADD_EQ_1" > "HOL4Base.arithmetic.ADD_EQ_1"
+  "ADD_EQ_0" > "Nat.add_is_0"
+  "ADD_DIV_ADD_DIV" > "HOL4Base.arithmetic.ADD_DIV_ADD_DIV"
+  "ADD_COMM" > "Fields.linordered_field_class.sign_simps_43"
+  "ADD_CLAUSES" > "HOL4Base.arithmetic.ADD_CLAUSES"
+  "ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_44"
+  "ADD_0" > "Divides.arithmetic_simps_39"
+  "ADD1" > "Nat_Numeral.Suc_eq_plus1"
+  "ADD" > "Compatibility.ADD"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/bits.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,115 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "bit" > "bit_def"
+  "TIMES_2EXP" > "TIMES_2EXP_primdef"
+  "SLICE" > "SLICE_primdef"
+  "SBIT" > "SBIT_primdef"
+  "MOD_2EXP" > "MOD_2EXP_primdef"
+  "LSBn" > "LSBn_primdef"
+  "DIV_2EXP" > "DIV_2EXP_primdef"
+  "DIVMOD_2EXP" > "DIVMOD_2EXP_primdef"
+  "DIV2" > "DIV2_primdef"
+  "BITWISE" > "BITWISE_primdef"
+  "BITS" > "BITS_primdef"
+
+const_maps
+  "bit" > "HOL4Word32.bits.bit"
+  "TIMES_2EXP" > "HOL4Word32.bits.TIMES_2EXP"
+  "SLICE" > "HOL4Word32.bits.SLICE"
+  "SBIT" > "HOL4Word32.bits.SBIT"
+  "MOD_2EXP" > "HOL4Word32.bits.MOD_2EXP"
+  "LSBn" > "HOL4Word32.bits.LSBn"
+  "DIV_2EXP" > "HOL4Word32.bits.DIV_2EXP"
+  "DIVMOD_2EXP" > "HOL4Word32.bits.DIVMOD_2EXP"
+  "DIV2" > "HOL4Word32.bits.DIV2"
+  "BITS" > "HOL4Word32.bits.BITS"
+
+const_renames
+  "BIT" > "bit"
+
+thm_maps
+  "bit_def" > "HOL4Word32.bits.bit_def"
+  "ZERO_LT_TWOEXP" > "HOL4Word32.bits.ZERO_LT_TWOEXP"
+  "TWOEXP_MONO2" > "HOL4Word32.bits.TWOEXP_MONO2"
+  "TWOEXP_MONO" > "HOL4Word32.bits.TWOEXP_MONO"
+  "TWOEXP_DIVISION" > "HOL4Word32.bits.TWOEXP_DIVISION"
+  "TIMES_2EXP_primdef" > "HOL4Word32.bits.TIMES_2EXP_primdef"
+  "TIMES_2EXP_def" > "HOL4Word32.bits.TIMES_2EXP_def"
+  "SUC_SUB" > "HOL4Word32.bits.SUC_SUB"
+  "SLICE_primdef" > "HOL4Word32.bits.SLICE_primdef"
+  "SLICE_def" > "HOL4Word32.bits.SLICE_def"
+  "SLICE_ZERO" > "HOL4Word32.bits.SLICE_ZERO"
+  "SLICE_THM" > "HOL4Word32.bits.SLICE_THM"
+  "SLICE_LEM3" > "HOL4Word32.bits.SLICE_LEM3"
+  "SLICE_LEM2" > "HOL4Word32.bits.SLICE_LEM2"
+  "SLICE_LEM1" > "HOL4Word32.bits.SLICE_LEM1"
+  "SLICE_COMP_THM" > "HOL4Word32.bits.SLICE_COMP_THM"
+  "SLICELT_THM" > "HOL4Word32.bits.SLICELT_THM"
+  "SBIT_primdef" > "HOL4Word32.bits.SBIT_primdef"
+  "SBIT_def" > "HOL4Word32.bits.SBIT_def"
+  "SBIT_DIV" > "HOL4Word32.bits.SBIT_DIV"
+  "ODD_MOD2_LEM" > "HOL4Word32.bits.ODD_MOD2_LEM"
+  "NOT_ZERO_ADD1" > "Nat.not0_implies_Suc"
+  "NOT_MOD2_LEM2" > "HOL4Word32.bits.NOT_MOD2_LEM2"
+  "NOT_MOD2_LEM" > "HOL4Word32.bits.NOT_MOD2_LEM"
+  "NOT_BITS2" > "HOL4Word32.bits.NOT_BITS2"
+  "NOT_BITS" > "HOL4Word32.bits.NOT_BITS"
+  "NOT_BIT" > "HOL4Word32.bits.NOT_BIT"
+  "MOD_PLUS_RIGHT" > "HOL4Word32.bits.MOD_PLUS_RIGHT"
+  "MOD_PLUS_1" > "HOL4Word32.bits.MOD_PLUS_1"
+  "MOD_ADD_1" > "HOL4Word32.bits.MOD_ADD_1"
+  "MOD_2EXP_primdef" > "HOL4Word32.bits.MOD_2EXP_primdef"
+  "MOD_2EXP_def" > "HOL4Word32.bits.MOD_2EXP_def"
+  "MOD_2EXP_MONO" > "HOL4Word32.bits.MOD_2EXP_MONO"
+  "MOD_2EXP_LT" > "HOL4Word32.bits.MOD_2EXP_LT"
+  "MOD_2EXP_LEM" > "HOL4Word32.bits.MOD_2EXP_LEM"
+  "LSBn_primdef" > "HOL4Word32.bits.LSBn_primdef"
+  "LSBn_def" > "HOL4Word32.bits.LSBn_def"
+  "LSB_ODD" > "HOL4Word32.bits.LSB_ODD"
+  "LESS_EXP_MULT2" > "HOL4Word32.bits.LESS_EXP_MULT2"
+  "LESS_EQ_EXP_MULT" > "HOL4Word32.bits.LESS_EQ_EXP_MULT"
+  "EXP_SUB_LESS_EQ" > "HOL4Word32.bits.EXP_SUB_LESS_EQ"
+  "EVEN_MOD2_LEM" > "HOL4Word32.bits.EVEN_MOD2_LEM"
+  "DIV_MULT_THM2" > "HOL4Word32.bits.DIV_MULT_THM2"
+  "DIV_MULT_THM" > "HOL4Word32.bits.DIV_MULT_THM"
+  "DIV_MULT_LEM" > "HOL4Word32.bits.DIV_MULT_LEM"
+  "DIV_MULT_1" > "HOL4Word32.bits.DIV_MULT_1"
+  "DIV_2EXP_primdef" > "HOL4Word32.bits.DIV_2EXP_primdef"
+  "DIV_2EXP_def" > "HOL4Word32.bits.DIV_2EXP_def"
+  "DIVMOD_2EXP_primdef" > "HOL4Word32.bits.DIVMOD_2EXP_primdef"
+  "DIVMOD_2EXP_def" > "HOL4Word32.bits.DIVMOD_2EXP_def"
+  "DIV2_primdef" > "HOL4Word32.bits.DIV2_primdef"
+  "DIV2_def" > "HOL4Word32.bits.DIV2_def"
+  "DIV1" > "Divides.semiring_div_class.div_by_1"
+  "BIT_def" > "HOL4Word32.bits.BIT_def"
+  "BIT_SLICE_THM" > "HOL4Word32.bits.BIT_SLICE_THM"
+  "BIT_SLICE_LEM" > "HOL4Word32.bits.BIT_SLICE_LEM"
+  "BIT_SLICE" > "HOL4Word32.bits.BIT_SLICE"
+  "BIT_COMP_THM3" > "HOL4Word32.bits.BIT_COMP_THM3"
+  "BIT_BITS_THM" > "HOL4Word32.bits.BIT_BITS_THM"
+  "BITWISE_def" > "HOL4Word32.bits.BITWISE_def"
+  "BITWISE_THM" > "HOL4Word32.bits.BITWISE_THM"
+  "BITWISE_NOT_COR" > "HOL4Word32.bits.BITWISE_NOT_COR"
+  "BITWISE_LT_2EXP" > "HOL4Word32.bits.BITWISE_LT_2EXP"
+  "BITWISE_COR" > "HOL4Word32.bits.BITWISE_COR"
+  "BITS_primdef" > "HOL4Word32.bits.BITS_primdef"
+  "BITS_def" > "HOL4Word32.bits.BITS_def"
+  "BITS_ZERO3" > "HOL4Word32.bits.BITS_ZERO3"
+  "BITS_ZERO2" > "HOL4Word32.bits.BITS_ZERO2"
+  "BITS_ZERO" > "HOL4Word32.bits.BITS_ZERO"
+  "BITS_THM" > "HOL4Word32.bits.BITS_THM"
+  "BITS_SUC_THM" > "HOL4Word32.bits.BITS_SUC_THM"
+  "BITS_SUC" > "HOL4Word32.bits.BITS_SUC"
+  "BITS_SLICE_THM2" > "HOL4Word32.bits.BITS_SLICE_THM2"
+  "BITS_SLICE_THM" > "HOL4Word32.bits.BITS_SLICE_THM"
+  "BITS_LT_HIGH" > "HOL4Word32.bits.BITS_LT_HIGH"
+  "BITS_DIV_THM" > "HOL4Word32.bits.BITS_DIV_THM"
+  "BITS_COMP_THM2" > "HOL4Word32.bits.BITS_COMP_THM2"
+  "BITS_COMP_THM" > "HOL4Word32.bits.BITS_COMP_THM"
+  "BITSLT_THM" > "HOL4Word32.bits.BITSLT_THM"
+  "BITS2_THM" > "HOL4Word32.bits.BITS2_THM"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/bool.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,198 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "RES_SELECT" > "RES_SELECT_def"
+  "RES_FORALL" > "RES_FORALL_def"
+  "RES_EXISTS_UNIQUE" > "RES_EXISTS_UNIQUE_def"
+  "RES_EXISTS" > "RES_EXISTS_def"
+  "RES_ABSTRACT" > "RES_ABSTRACT_def"
+  "IN" > "IN_def"
+  "ARB" > "ARB_def"
+
+type_maps
+  "bool" > "HOL.bool"
+
+const_maps
+  "~" > "HOL.Not"
+  "bool_case" > "Product_Type.bool.bool_case"
+  "\\/" > "HOL.disj"
+  "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
+  "T" > "HOL.True"
+  "RES_SELECT" > "HOL4Base.bool.RES_SELECT"
+  "RES_FORALL" > "HOL4Base.bool.RES_FORALL"
+  "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE"
+  "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS"
+  "ONTO" > "Fun.surj"
+  "ONE_ONE" > "HOL4Setup.ONE_ONE"
+  "LET" > "Compatibility.LET"
+  "IN" > "HOL4Base.bool.IN"
+  "F" > "HOL.False"
+  "COND" > "HOL.If"
+  "ARB" > "HOL4Base.bool.ARB"
+  "?!" > "HOL.Ex1"
+  "?" > "HOL.Ex"
+  "/\\" > "HOL.conj"
+  "!" > "HOL.All"
+
+thm_maps
+  "bool_case_thm" > "HOL4Base.bool.bool_case_thm"
+  "bool_case_ID" > "HOL4Base.bool.bool_case_ID"
+  "bool_case_DEF" > "Compatibility.bool_case_DEF"
+  "bool_INDUCT" > "Product_Type.bool.induct"
+  "boolAxiom" > "HOL4Base.bool.boolAxiom"
+  "UNWIND_THM2" > "HOL.simp_thms_39"
+  "UNWIND_THM1" > "HOL.simp_thms_40"
+  "UNWIND_FORALL_THM2" > "HOL.simp_thms_41"
+  "UNWIND_FORALL_THM1" > "HOL.simp_thms_42"
+  "UEXISTS_SIMP" > "HOL4Base.bool.UEXISTS_SIMP"
+  "UEXISTS_OR_THM" > "HOL4Base.bool.UEXISTS_OR_THM"
+  "T_DEF" > "HOL.True_def"
+  "TYPE_DEFINITION_THM" > "HOL4Setup.TYPE_DEFINITION"
+  "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
+  "TRUTH" > "HOL.TrueI"
+  "SWAP_FORALL_THM" > "HOL.all_comm"
+  "SWAP_EXISTS_THM" > "HOL.ex_comm"
+  "SKOLEM_THM" > "HOL4Base.bool.SKOLEM_THM"
+  "SELECT_UNIQUE" > "HOL4Base.bool.SELECT_UNIQUE"
+  "SELECT_THM" > "HOL4Setup.EXISTS_DEF"
+  "SELECT_REFL_2" > "Hilbert_Choice.some_sym_eq_trivial"
+  "SELECT_REFL" > "Hilbert_Choice.some_eq_trivial"
+  "SELECT_AX" > "Hilbert_Choice.someI"
+  "RIGHT_OR_OVER_AND" > "HOL.disj_conj_distribR"
+  "RIGHT_OR_EXISTS_THM" > "HOL.ex_simps_4"
+  "RIGHT_FORALL_OR_THM" > "HOL.all_simps_4"
+  "RIGHT_FORALL_IMP_THM" > "HOL.all_simps_6"
+  "RIGHT_EXISTS_IMP_THM" > "HOL.ex_simps_6"
+  "RIGHT_EXISTS_AND_THM" > "HOL.ex_simps_2"
+  "RIGHT_AND_OVER_OR" > "Groebner_Basis.dnf_2"
+  "RIGHT_AND_FORALL_THM" > "HOL.all_simps_2"
+  "RES_SELECT_def" > "HOL4Base.bool.RES_SELECT_def"
+  "RES_SELECT_DEF" > "HOL4Base.bool.RES_SELECT_DEF"
+  "RES_FORALL_def" > "HOL4Base.bool.RES_FORALL_def"
+  "RES_FORALL_DEF" > "HOL4Base.bool.RES_FORALL_DEF"
+  "RES_EXISTS_def" > "HOL4Base.bool.RES_EXISTS_def"
+  "RES_EXISTS_UNIQUE_def" > "HOL4Base.bool.RES_EXISTS_UNIQUE_def"
+  "RES_EXISTS_UNIQUE_DEF" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
+  "RES_EXISTS_DEF" > "HOL4Base.bool.RES_EXISTS_DEF"
+  "RES_ABSTRACT_DEF" > "HOL4Base.bool.RES_ABSTRACT_DEF"
+  "REFL_CLAUSE" > "Groebner_Basis.bool_simps_6"
+  "OR_INTRO_THM2" > "HOL.disjI2"
+  "OR_INTRO_THM1" > "HOL.disjI1"
+  "OR_IMP_THM" > "HOL4Base.bool.OR_IMP_THM"
+  "OR_ELIM_THM" > "HOL.disjE"
+  "OR_DEF" > "HOL.or_def"
+  "OR_CONG" > "HOL4Base.bool.OR_CONG"
+  "OR_CLAUSES" > "HOL4Base.bool.OR_CLAUSES"
+  "ONTO_THM" > "Fun.surj_def"
+  "ONTO_DEF" > "Fun.surj_def"
+  "ONE_ONE_THM" > "HOL4Base.bool.ONE_ONE_THM"
+  "ONE_ONE_DEF" > "HOL4Setup.ONE_ONE_DEF"
+  "NOT_IMP" > "HOL.not_imp"
+  "NOT_FORALL_THM" > "HOL.not_all"
+  "NOT_F" > "Groebner_Basis.PFalse_2"
+  "NOT_EXISTS_THM" > "HOL.not_ex"
+  "NOT_DEF" > "Groebner_Basis.bool_simps_19"
+  "NOT_CLAUSES" > "HOL4Base.bool.NOT_CLAUSES"
+  "NOT_AND" > "HOL4Base.bool.NOT_AND"
+  "MONO_OR" > "Inductive.basic_monos_3"
+  "MONO_NOT" > "HOL.contrapos_nn"
+  "MONO_IMP" > "Set.imp_mono"
+  "MONO_EXISTS" > "Inductive.basic_monos_5"
+  "MONO_COND" > "HOL4Base.bool.MONO_COND"
+  "MONO_AND" > "Inductive.basic_monos_4"
+  "MONO_ALL" > "Inductive.basic_monos_6"
+  "LET_THM" > "HOL.Let_def"
+  "LET_RATOR" > "HOL4Base.bool.LET_RATOR"
+  "LET_RAND" > "HOL4Base.bool.LET_RAND"
+  "LET_DEF" > "Compatibility.LET_def"
+  "LET_CONG" > "FunDef.let_cong"
+  "LEFT_OR_OVER_AND" > "HOL.disj_conj_distribL"
+  "LEFT_OR_EXISTS_THM" > "HOL.ex_simps_3"
+  "LEFT_FORALL_OR_THM" > "HOL.all_simps_3"
+  "LEFT_FORALL_IMP_THM" > "HOL.all_simps_5"
+  "LEFT_EXISTS_IMP_THM" > "HOL.ex_simps_5"
+  "LEFT_EXISTS_AND_THM" > "HOL.ex_simps_1"
+  "LEFT_AND_OVER_OR" > "Groebner_Basis.dnf_1"
+  "LEFT_AND_FORALL_THM" > "HOL.all_simps_1"
+  "IN_def" > "HOL4Base.bool.IN_def"
+  "IN_DEF" > "HOL4Base.bool.IN_DEF"
+  "INFINITY_AX" > "HOL4Setup.INFINITY_AX"
+  "IMP_F_EQ_F" > "HOL4Base.bool.IMP_F_EQ_F"
+  "IMP_F" > "HOL.notI"
+  "IMP_DISJ_THM" > "Groebner_Basis.nnf_simps_3"
+  "IMP_CONG" > "HOL.imp_cong"
+  "IMP_CLAUSES" > "HOL4Base.bool.IMP_CLAUSES"
+  "IMP_ANTISYM_AX" > "HOL.iff"
+  "F_IMP" > "HOL4Base.bool.F_IMP"
+  "F_DEF" > "HOL.False_def"
+  "FUN_EQ_THM" > "HOL.fun_eq_iff"
+  "FORALL_THM" > "HOL4Base.bool.FORALL_THM"
+  "FORALL_SIMP" > "HOL.simp_thms_35"
+  "FORALL_DEF" > "HOL.All_def"
+  "FORALL_AND_THM" > "HOL.all_conj_distrib"
+  "FALSITY" > "HOL.FalseE"
+  "EXISTS_UNIQUE_THM" > "Compatibility.EXISTS_UNIQUE_DEF"
+  "EXISTS_UNIQUE_REFL" > "HOL.ex1_eq_1"
+  "EXISTS_UNIQUE_DEF" > "Compatibility.EXISTS_UNIQUE_DEF"
+  "EXISTS_THM" > "HOL4Base.bool.EXISTS_THM"
+  "EXISTS_SIMP" > "HOL.simp_thms_36"
+  "EXISTS_REFL" > "HOL.simp_thms_37"
+  "EXISTS_OR_THM" > "HOL.ex_disj_distrib"
+  "EXISTS_DEF" > "HOL4Setup.EXISTS_DEF"
+  "EXCLUDED_MIDDLE" > "HOL4Base.bool.EXCLUDED_MIDDLE"
+  "ETA_THM" > "HOL.eta_contract_eq"
+  "ETA_AX" > "HOL.eta_contract_eq"
+  "EQ_TRANS" > "HOL.trans"
+  "EQ_SYM_EQ" > "HOL.eq_ac_1"
+  "EQ_SYM" > "HOL.eq_reflection"
+  "EQ_REFL" > "HOL.refl"
+  "EQ_IMP_THM" > "HOL.iff_conv_conj_imp"
+  "EQ_EXT" > "HOL.eq_reflection"
+  "EQ_EXPAND" > "Groebner_Basis.nnf_simps_4"
+  "EQ_CLAUSES" > "HOL4Base.bool.EQ_CLAUSES"
+  "DISJ_SYM" > "Groebner_Basis.dnf_4"
+  "DISJ_IMP_THM" > "HOL.imp_disjL"
+  "DISJ_COMM" > "Groebner_Basis.dnf_4"
+  "DISJ_ASSOC" > "HOL.disj_ac_3"
+  "DE_MORGAN_THM" > "HOL4Base.bool.DE_MORGAN_THM"
+  "CONJ_SYM" > "Groebner_Basis.dnf_3"
+  "CONJ_COMM" > "Groebner_Basis.dnf_3"
+  "CONJ_ASSOC" > "HOL.conj_ac_3"
+  "COND_RATOR" > "HOL4Base.bool.COND_RATOR"
+  "COND_RAND" > "HOL.if_distrib"
+  "COND_ID" > "HOL.if_cancel"
+  "COND_EXPAND" > "HOL4Base.bool.COND_EXPAND"
+  "COND_DEF" > "Compatibility.COND_DEF"
+  "COND_CONG" > "HOL4Base.bool.COND_CONG"
+  "COND_CLAUSES" > "HOL4Base.bool.COND_CLAUSES"
+  "COND_ABS" > "HOL4Base.bool.COND_ABS"
+  "BOTH_FORALL_OR_THM" > "HOL4Base.bool.BOTH_FORALL_OR_THM"
+  "BOTH_FORALL_IMP_THM" > "HOL4Base.bool.BOTH_FORALL_IMP_THM"
+  "BOTH_EXISTS_IMP_THM" > "HOL4Base.bool.BOTH_EXISTS_IMP_THM"
+  "BOTH_EXISTS_AND_THM" > "HOL4Base.bool.BOTH_EXISTS_AND_THM"
+  "BOOL_FUN_INDUCT" > "HOL4Base.bool.BOOL_FUN_INDUCT"
+  "BOOL_FUN_CASES_THM" > "HOL4Base.bool.BOOL_FUN_CASES_THM"
+  "BOOL_EQ_DISTINCT" > "HOL4Base.bool.BOOL_EQ_DISTINCT"
+  "BOOL_CASES_AX" > "HOL.True_or_False"
+  "BETA_THM" > "HOL.eta_contract_eq"
+  "ARB_def" > "HOL4Base.bool.ARB_def"
+  "ARB_DEF" > "HOL4Base.bool.ARB_DEF"
+  "AND_INTRO_THM" > "HOL.conjI"
+  "AND_IMP_INTRO" > "HOL.imp_conjL"
+  "AND_DEF" > "HOL.and_def"
+  "AND_CONG" > "HOL4Base.bool.AND_CONG"
+  "AND_CLAUSES" > "HOL4Base.bool.AND_CLAUSES"
+  "AND2_THM" > "HOL.conjunct2"
+  "AND1_THM" > "HOL.conjunct1"
+  "ABS_SIMP" > "HOL.refl"
+  "ABS_REP_THM" > "HOL4Base.bool.ABS_REP_THM"
+
+ignore_thms
+  "UNBOUNDED_THM"
+  "UNBOUNDED_DEF"
+  "BOUNDED_THM"
+  "BOUNDED_DEF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/boolean_sequence.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,39 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "STL" > "STL_primdef"
+  "STAKE" > "STAKE_primdef"
+  "SHD" > "SHD_primdef"
+  "SDROP" > "SDROP_primdef"
+  "SDEST" > "SDEST_primdef"
+  "SCONST" > "SCONST_primdef"
+  "SCONS" > "SCONS_primdef"
+
+const_maps
+  "STL" > "HOL4Prob.boolean_sequence.STL"
+  "SHD" > "HOL4Prob.boolean_sequence.SHD"
+  "SDEST" > "HOL4Prob.boolean_sequence.SDEST"
+  "SCONST" > "HOL4Prob.boolean_sequence.SCONST"
+
+thm_maps
+  "STL_primdef" > "HOL4Prob.boolean_sequence.STL_primdef"
+  "STL_def" > "HOL4Prob.boolean_sequence.STL_def"
+  "STL_SCONST" > "HOL4Prob.boolean_sequence.STL_SCONST"
+  "STL_SCONS" > "HOL4Prob.boolean_sequence.STL_SCONS"
+  "STAKE_def" > "HOL4Prob.boolean_sequence.STAKE_def"
+  "SHD_primdef" > "HOL4Prob.boolean_sequence.SHD_primdef"
+  "SHD_def" > "HOL4Prob.boolean_sequence.SHD_def"
+  "SHD_STL_ISO" > "HOL4Prob.boolean_sequence.SHD_STL_ISO"
+  "SHD_SCONST" > "HOL4Prob.boolean_sequence.SHD_SCONST"
+  "SHD_SCONS" > "HOL4Prob.boolean_sequence.SHD_SCONS"
+  "SDROP_def" > "HOL4Prob.boolean_sequence.SDROP_def"
+  "SDEST_primdef" > "HOL4Prob.boolean_sequence.SDEST_primdef"
+  "SDEST_def" > "HOL4Prob.boolean_sequence.SDEST_def"
+  "SCONS_def" > "HOL4Prob.boolean_sequence.SCONS_def"
+  "SCONS_SURJ" > "HOL4Prob.boolean_sequence.SCONS_SURJ"
+  "SCONST_primdef" > "HOL4Prob.boolean_sequence.SCONST_primdef"
+  "SCONST_def" > "HOL4Prob.boolean_sequence.SCONST_def"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/bword_arith.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,27 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "ICARRY" > "ICARRY_def"
+  "ACARRY" > "ACARRY_def"
+
+thm_maps
+  "WSEG_NBWORD_ADD" > "HOL4Vec.bword_arith.WSEG_NBWORD_ADD"
+  "ICARRY_WSEG" > "HOL4Vec.bword_arith.ICARRY_WSEG"
+  "ICARRY_DEF" > "HOL4Vec.bword_arith.ICARRY_DEF"
+  "BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.BNVAL_LESS_EQ"
+  "ADD_WORD_SPLIT" > "HOL4Vec.bword_arith.ADD_WORD_SPLIT"
+  "ADD_NBWORD_EQ0_SPLIT" > "HOL4Vec.bword_arith.ADD_NBWORD_EQ0_SPLIT"
+  "ADD_BV_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ1"
+  "ADD_BV_BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ"
+  "ADD_BV_BNVAL_DIV_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_DIV_LESS_EQ1"
+  "ADD_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BNVAL_LESS_EQ1"
+  "ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_WSEG"
+  "ACARRY_MSB" > "HOL4Vec.bword_arith.ACARRY_MSB"
+  "ACARRY_EQ_ICARRY" > "HOL4Vec.bword_arith.ACARRY_EQ_ICARRY"
+  "ACARRY_EQ_ADD_DIV" > "HOL4Vec.bword_arith.ACARRY_EQ_ADD_DIV"
+  "ACARRY_DEF" > "HOL4Vec.bword_arith.ACARRY_DEF"
+  "ACARRY_ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_ACARRY_WSEG"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/bword_bitop.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,23 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "WXOR" > "WXOR_def"
+  "WOR" > "WOR_def"
+  "WNOT" > "WNOT_def"
+  "WAND" > "WAND_def"
+
+thm_maps
+  "WXOR_DEF" > "HOL4Vec.bword_bitop.WXOR_DEF"
+  "WOR_DEF" > "HOL4Vec.bword_bitop.WOR_DEF"
+  "WNOT_WNOT" > "HOL4Vec.bword_bitop.WNOT_WNOT"
+  "WNOT_DEF" > "HOL4Vec.bword_bitop.WNOT_DEF"
+  "WCAT_WNOT" > "HOL4Vec.bword_bitop.WCAT_WNOT"
+  "WAND_DEF" > "HOL4Vec.bword_bitop.WAND_DEF"
+  "PBITOP_WNOT" > "HOL4Vec.bword_bitop.PBITOP_WNOT"
+  "PBITBOP_WXOR" > "HOL4Vec.bword_bitop.PBITBOP_WXOR"
+  "PBITBOP_WOR" > "HOL4Vec.bword_bitop.PBITBOP_WOR"
+  "PBITBOP_WAND" > "HOL4Vec.bword_bitop.PBITBOP_WAND"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/bword_num.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,58 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "VB" > "VB_def"
+  "NBWORD" > "NBWORD_def"
+  "BV" > "BV_def"
+  "BNVAL" > "BNVAL_def"
+
+const_maps
+  "VB" > "HOL4Vec.bword_num.VB"
+  "NBWORD" > "HOL4Vec.bword_num.NBWORD"
+  "BV" > "HOL4Vec.bword_num.BV"
+
+thm_maps
+  "ZERO_WORD_VAL" > "HOL4Vec.bword_num.ZERO_WORD_VAL"
+  "WSPLIT_NBWORD_0" > "HOL4Vec.bword_num.WSPLIT_NBWORD_0"
+  "WSEG_NBWORD_SUC" > "HOL4Vec.bword_num.WSEG_NBWORD_SUC"
+  "WSEG_NBWORD" > "HOL4Vec.bword_num.WSEG_NBWORD"
+  "WORDLEN_NBWORD" > "HOL4Vec.bword_num.WORDLEN_NBWORD"
+  "WCAT_NBWORD_0" > "HOL4Vec.bword_num.WCAT_NBWORD_0"
+  "VB_def" > "HOL4Vec.bword_num.VB_def"
+  "VB_DEF" > "HOL4Vec.bword_num.VB_DEF"
+  "VB_BV" > "HOL4Vec.bword_num.VB_BV"
+  "PWORDLEN_NBWORD" > "HOL4Vec.bword_num.PWORDLEN_NBWORD"
+  "NBWORD_def" > "HOL4Vec.bword_num.NBWORD_def"
+  "NBWORD_SUC_WSEG" > "HOL4Vec.bword_num.NBWORD_SUC_WSEG"
+  "NBWORD_SUC_FST" > "HOL4Vec.bword_num.NBWORD_SUC_FST"
+  "NBWORD_SUC" > "HOL4Vec.bword_num.NBWORD_SUC"
+  "NBWORD_SPLIT" > "HOL4Vec.bword_num.NBWORD_SPLIT"
+  "NBWORD_MOD" > "HOL4Vec.bword_num.NBWORD_MOD"
+  "NBWORD_DEF" > "HOL4Vec.bword_num.NBWORD_DEF"
+  "NBWORD_BNVAL" > "HOL4Vec.bword_num.NBWORD_BNVAL"
+  "NBWORD0" > "HOL4Vec.bword_num.NBWORD0"
+  "MSB_NBWORD" > "HOL4Vec.bword_num.MSB_NBWORD"
+  "EQ_NBWORD0_SPLIT" > "HOL4Vec.bword_num.EQ_NBWORD0_SPLIT"
+  "DOUBL_EQ_SHL" > "HOL4Vec.bword_num.DOUBL_EQ_SHL"
+  "BV_def" > "HOL4Vec.bword_num.BV_def"
+  "BV_VB" > "HOL4Vec.bword_num.BV_VB"
+  "BV_LESS_2" > "HOL4Vec.bword_num.BV_LESS_2"
+  "BV_DEF" > "HOL4Vec.bword_num.BV_DEF"
+  "BNVAL_WCAT2" > "HOL4Vec.bword_num.BNVAL_WCAT2"
+  "BNVAL_WCAT1" > "HOL4Vec.bword_num.BNVAL_WCAT1"
+  "BNVAL_WCAT" > "HOL4Vec.bword_num.BNVAL_WCAT"
+  "BNVAL_ONTO" > "HOL4Vec.bword_num.BNVAL_ONTO"
+  "BNVAL_NVAL" > "HOL4Vec.bword_num.BNVAL_NVAL"
+  "BNVAL_NBWORD" > "HOL4Vec.bword_num.BNVAL_NBWORD"
+  "BNVAL_MAX" > "HOL4Vec.bword_num.BNVAL_MAX"
+  "BNVAL_DEF" > "HOL4Vec.bword_num.BNVAL_DEF"
+  "BNVAL_11" > "HOL4Vec.bword_num.BNVAL_11"
+  "BNVAL0" > "HOL4Vec.bword_num.BNVAL0"
+  "BIT_NBWORD0" > "HOL4Vec.bword_num.BIT_NBWORD0"
+  "ADD_BNVAL_SPLIT" > "HOL4Vec.bword_num.ADD_BNVAL_SPLIT"
+  "ADD_BNVAL_RIGHT" > "HOL4Vec.bword_num.ADD_BNVAL_RIGHT"
+  "ADD_BNVAL_LEFT" > "HOL4Vec.bword_num.ADD_BNVAL_LEFT"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/combin.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,41 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "W" > "W_def"
+  "S" > "S_def"
+  "K" > "K_def"
+  "I" > "I_def"
+  "C" > "C_def"
+
+const_maps
+  "o" > "Fun.comp"
+  "W" > "HOL4Base.combin.W"
+  "S" > "HOL4Base.combin.S"
+  "K" > "HOL4Base.combin.K"
+  "I" > "HOL4Base.combin.I"
+  "C" > "HOL4Base.combin.C"
+
+thm_maps
+  "o_THM" > "Fun.comp_def"
+  "o_DEF" > "Fun.comp_def"
+  "o_ASSOC" > "Fun.o_assoc"
+  "W_def" > "HOL4Base.combin.W_def"
+  "W_THM" > "HOL4Base.combin.W_def"
+  "W_DEF" > "HOL4Base.combin.W_DEF"
+  "S_def" > "HOL4Base.combin.S_def"
+  "S_THM" > "HOL4Base.combin.S_def"
+  "S_DEF" > "HOL4Base.combin.S_DEF"
+  "K_def" > "HOL4Base.combin.K_def"
+  "K_THM" > "HOL4Base.combin.K_def"
+  "K_DEF" > "HOL4Base.combin.K_DEF"
+  "I_o_ID" > "HOL4Base.combin.I_o_ID"
+  "I_def" > "HOL4Base.combin.I_def"
+  "I_THM" > "HOL4Base.combin.I_THM"
+  "I_DEF" > "HOL4Base.combin.I_DEF"
+  "C_def" > "HOL4Base.combin.C_def"
+  "C_THM" > "HOL4Base.combin.C_def"
+  "C_DEF" > "HOL4Base.combin.C_DEF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/divides.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,24 @@
+import
+
+import_segment "hol4"
+
+const_maps
+  "divides" > "Rings.dvd_class.dvd" :: "nat => nat => bool"
+
+thm_maps
+  "divides_def" > "Compatibility.divides_def"
+  "ONE_DIVIDES_ALL" > "GCD.gcd_lcm_complete_lattice_nat.bot_least"
+  "NOT_LT_DIV" > "Nat.nat_dvd_not_less"
+  "DIVIDES_TRANS" > "Nat.dvd.order_trans"
+  "DIVIDES_SUB" > "Nat.dvd_diff_nat"
+  "DIVIDES_REFL" > "Nat.dvd.order_refl"
+  "DIVIDES_MULT_LEFT" > "HOL4Base.divides.DIVIDES_MULT_LEFT"
+  "DIVIDES_MULT" > "Rings.comm_semiring_1_class.dvd_mult2"
+  "DIVIDES_LE" > "Nat.dvd_imp_le"
+  "DIVIDES_FACT" > "HOL4Base.divides.DIVIDES_FACT"
+  "DIVIDES_ANTISYM" > "Nat.dvd.antisym"
+  "DIVIDES_ADD_2" > "Primes.divides_add_revr"
+  "DIVIDES_ADD_1" > "Rings.comm_semiring_1_class.dvd_add"
+  "ALL_DIVIDES_0" > "GCD.gcd_lcm_complete_lattice_nat.top_greatest"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/hrat.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,95 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "trat_sucint" > "trat_sucint_def"
+  "trat_mul" > "trat_mul_def"
+  "trat_inv" > "trat_inv_def"
+  "trat_eq" > "trat_eq_def"
+  "trat_add" > "trat_add_def"
+  "trat_1" > "trat_1_def"
+  "mk_hrat" > "mk_hrat_def"
+  "hrat_sucint" > "hrat_sucint_def"
+  "hrat_mul" > "hrat_mul_def"
+  "hrat_inv" > "hrat_inv_def"
+  "hrat_add" > "hrat_add_def"
+  "hrat_1" > "hrat_1_def"
+  "dest_hrat" > "dest_hrat_def"
+
+type_maps
+  "hrat" > "HOL4Base.hrat.hrat"
+
+const_maps
+  "trat_mul" > "HOL4Base.hrat.trat_mul"
+  "trat_inv" > "HOL4Base.hrat.trat_inv"
+  "trat_eq" > "HOL4Base.hrat.trat_eq"
+  "trat_add" > "HOL4Base.hrat.trat_add"
+  "trat_1" > "HOL4Base.hrat.trat_1"
+  "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
+  "hrat_mul" > "HOL4Base.hrat.hrat_mul"
+  "hrat_inv" > "HOL4Base.hrat.hrat_inv"
+  "hrat_add" > "HOL4Base.hrat.hrat_add"
+  "hrat_1" > "HOL4Base.hrat.hrat_1"
+
+thm_maps
+  "trat_sucint" > "HOL4Base.hrat.trat_sucint"
+  "trat_mul_def" > "HOL4Base.hrat.trat_mul_def"
+  "trat_mul" > "HOL4Base.hrat.trat_mul"
+  "trat_inv_def" > "HOL4Base.hrat.trat_inv_def"
+  "trat_inv" > "HOL4Base.hrat.trat_inv"
+  "trat_eq_def" > "HOL4Base.hrat.trat_eq_def"
+  "trat_eq" > "HOL4Base.hrat.trat_eq"
+  "trat_add_def" > "HOL4Base.hrat.trat_add_def"
+  "trat_add" > "HOL4Base.hrat.trat_add"
+  "trat_1_def" > "HOL4Base.hrat.trat_1_def"
+  "trat_1" > "HOL4Base.hrat.trat_1"
+  "hrat_tybij" > "HOL4Base.hrat.hrat_tybij"
+  "hrat_sucint_def" > "HOL4Base.hrat.hrat_sucint_def"
+  "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
+  "hrat_mul_def" > "HOL4Base.hrat.hrat_mul_def"
+  "hrat_mul" > "HOL4Base.hrat.hrat_mul"
+  "hrat_inv_def" > "HOL4Base.hrat.hrat_inv_def"
+  "hrat_inv" > "HOL4Base.hrat.hrat_inv"
+  "hrat_add_def" > "HOL4Base.hrat.hrat_add_def"
+  "hrat_add" > "HOL4Base.hrat.hrat_add"
+  "hrat_TY_DEF" > "HOL4Base.hrat.hrat_TY_DEF"
+  "hrat_1_def" > "HOL4Base.hrat.hrat_1_def"
+  "hrat_1" > "HOL4Base.hrat.hrat_1"
+  "TRAT_SUCINT_0" > "HOL4Base.hrat.TRAT_SUCINT_0"
+  "TRAT_SUCINT" > "HOL4Base.hrat.TRAT_SUCINT"
+  "TRAT_NOZERO" > "HOL4Base.hrat.TRAT_NOZERO"
+  "TRAT_MUL_WELLDEFINED2" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED2"
+  "TRAT_MUL_WELLDEFINED" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED"
+  "TRAT_MUL_SYM_EQ" > "HOL4Base.hrat.TRAT_MUL_SYM_EQ"
+  "TRAT_MUL_SYM" > "HOL4Base.hrat.TRAT_MUL_SYM"
+  "TRAT_MUL_LINV" > "HOL4Base.hrat.TRAT_MUL_LINV"
+  "TRAT_MUL_LID" > "HOL4Base.hrat.TRAT_MUL_LID"
+  "TRAT_MUL_ASSOC" > "HOL4Base.hrat.TRAT_MUL_ASSOC"
+  "TRAT_LDISTRIB" > "HOL4Base.hrat.TRAT_LDISTRIB"
+  "TRAT_INV_WELLDEFINED" > "HOL4Base.hrat.TRAT_INV_WELLDEFINED"
+  "TRAT_EQ_TRANS" > "HOL4Base.hrat.TRAT_EQ_TRANS"
+  "TRAT_EQ_SYM" > "HOL4Base.hrat.TRAT_EQ_SYM"
+  "TRAT_EQ_REFL" > "HOL4Base.hrat.TRAT_EQ_REFL"
+  "TRAT_EQ_EQUIV" > "HOL4Base.hrat.TRAT_EQ_EQUIV"
+  "TRAT_EQ_AP" > "HOL4Base.hrat.TRAT_EQ_AP"
+  "TRAT_ARCH" > "HOL4Base.hrat.TRAT_ARCH"
+  "TRAT_ADD_WELLDEFINED2" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED2"
+  "TRAT_ADD_WELLDEFINED" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED"
+  "TRAT_ADD_TOTAL" > "HOL4Base.hrat.TRAT_ADD_TOTAL"
+  "TRAT_ADD_SYM_EQ" > "HOL4Base.hrat.TRAT_ADD_SYM_EQ"
+  "TRAT_ADD_SYM" > "HOL4Base.hrat.TRAT_ADD_SYM"
+  "TRAT_ADD_ASSOC" > "HOL4Base.hrat.TRAT_ADD_ASSOC"
+  "HRAT_SUCINT" > "HOL4Base.hrat.HRAT_SUCINT"
+  "HRAT_NOZERO" > "HOL4Base.hrat.HRAT_NOZERO"
+  "HRAT_MUL_SYM" > "HOL4Base.hrat.HRAT_MUL_SYM"
+  "HRAT_MUL_LINV" > "HOL4Base.hrat.HRAT_MUL_LINV"
+  "HRAT_MUL_LID" > "HOL4Base.hrat.HRAT_MUL_LID"
+  "HRAT_MUL_ASSOC" > "HOL4Base.hrat.HRAT_MUL_ASSOC"
+  "HRAT_LDISTRIB" > "HOL4Base.hrat.HRAT_LDISTRIB"
+  "HRAT_ARCH" > "HOL4Base.hrat.HRAT_ARCH"
+  "HRAT_ADD_TOTAL" > "HOL4Base.hrat.HRAT_ADD_TOTAL"
+  "HRAT_ADD_SYM" > "HOL4Base.hrat.HRAT_ADD_SYM"
+  "HRAT_ADD_ASSOC" > "HOL4Base.hrat.HRAT_ADD_ASSOC"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/hreal.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,118 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "isacut" > "isacut_def"
+  "hreal_sup" > "hreal_sup_def"
+  "hreal_sub" > "hreal_sub_def"
+  "hreal_mul" > "hreal_mul_def"
+  "hreal_lt" > "hreal_lt_def"
+  "hreal_inv" > "hreal_inv_def"
+  "hreal_add" > "hreal_add_def"
+  "hreal_1" > "hreal_1_def"
+  "hreal" > "hreal_def"
+  "hrat_lt" > "hrat_lt_def"
+  "cut_of_hrat" > "cut_of_hrat_def"
+  "cut" > "cut_def"
+
+type_maps
+  "hreal" > "HOL4Base.hreal.hreal"
+
+const_maps
+  "isacut" > "HOL4Base.hreal.isacut"
+  "hreal_sup" > "HOL4Base.hreal.hreal_sup"
+  "hreal_sub" > "HOL4Base.hreal.hreal_sub"
+  "hreal_mul" > "HOL4Base.hreal.hreal_mul"
+  "hreal_lt" > "HOL4Base.hreal.hreal_lt"
+  "hreal_inv" > "HOL4Base.hreal.hreal_inv"
+  "hreal_add" > "HOL4Base.hreal.hreal_add"
+  "hreal_1" > "HOL4Base.hreal.hreal_1"
+  "hrat_lt" > "HOL4Base.hreal.hrat_lt"
+  "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
+
+thm_maps
+  "isacut_def" > "HOL4Base.hreal.isacut_def"
+  "isacut" > "HOL4Base.hreal.isacut"
+  "hreal_tybij" > "HOL4Base.hreal.hreal_tybij"
+  "hreal_sup_def" > "HOL4Base.hreal.hreal_sup_def"
+  "hreal_sup" > "HOL4Base.hreal.hreal_sup"
+  "hreal_sub_def" > "HOL4Base.hreal.hreal_sub_def"
+  "hreal_sub" > "HOL4Base.hreal.hreal_sub"
+  "hreal_mul_def" > "HOL4Base.hreal.hreal_mul_def"
+  "hreal_mul" > "HOL4Base.hreal.hreal_mul"
+  "hreal_lt_def" > "HOL4Base.hreal.hreal_lt_def"
+  "hreal_lt" > "HOL4Base.hreal.hreal_lt"
+  "hreal_inv_def" > "HOL4Base.hreal.hreal_inv_def"
+  "hreal_inv" > "HOL4Base.hreal.hreal_inv"
+  "hreal_add_def" > "HOL4Base.hreal.hreal_add_def"
+  "hreal_add" > "HOL4Base.hreal.hreal_add"
+  "hreal_TY_DEF" > "HOL4Base.hreal.hreal_TY_DEF"
+  "hreal_1_def" > "HOL4Base.hreal.hreal_1_def"
+  "hreal_1" > "HOL4Base.hreal.hreal_1"
+  "hrat_lt_def" > "HOL4Base.hreal.hrat_lt_def"
+  "hrat_lt" > "HOL4Base.hreal.hrat_lt"
+  "cut_of_hrat_def" > "HOL4Base.hreal.cut_of_hrat_def"
+  "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
+  "ISACUT_HRAT" > "HOL4Base.hreal.ISACUT_HRAT"
+  "HREAL_SUP_ISACUT" > "HOL4Base.hreal.HREAL_SUP_ISACUT"
+  "HREAL_SUP" > "HOL4Base.hreal.HREAL_SUP"
+  "HREAL_SUB_ISACUT" > "HOL4Base.hreal.HREAL_SUB_ISACUT"
+  "HREAL_SUB_ADD" > "HOL4Base.hreal.HREAL_SUB_ADD"
+  "HREAL_NOZERO" > "HOL4Base.hreal.HREAL_NOZERO"
+  "HREAL_MUL_SYM" > "HOL4Base.hreal.HREAL_MUL_SYM"
+  "HREAL_MUL_LINV" > "HOL4Base.hreal.HREAL_MUL_LINV"
+  "HREAL_MUL_LID" > "HOL4Base.hreal.HREAL_MUL_LID"
+  "HREAL_MUL_ISACUT" > "HOL4Base.hreal.HREAL_MUL_ISACUT"
+  "HREAL_MUL_ASSOC" > "HOL4Base.hreal.HREAL_MUL_ASSOC"
+  "HREAL_LT_TOTAL" > "HOL4Base.hreal.HREAL_LT_TOTAL"
+  "HREAL_LT_LEMMA" > "HOL4Base.hreal.HREAL_LT_LEMMA"
+  "HREAL_LT" > "HOL4Base.hreal.HREAL_LT"
+  "HREAL_LDISTRIB" > "HOL4Base.hreal.HREAL_LDISTRIB"
+  "HREAL_INV_ISACUT" > "HOL4Base.hreal.HREAL_INV_ISACUT"
+  "HREAL_ADD_TOTAL" > "HOL4Base.hreal.HREAL_ADD_TOTAL"
+  "HREAL_ADD_SYM" > "HOL4Base.hreal.HREAL_ADD_SYM"
+  "HREAL_ADD_ISACUT" > "HOL4Base.hreal.HREAL_ADD_ISACUT"
+  "HREAL_ADD_ASSOC" > "HOL4Base.hreal.HREAL_ADD_ASSOC"
+  "HRAT_UP" > "HOL4Base.hreal.HRAT_UP"
+  "HRAT_RDISTRIB" > "HOL4Base.hreal.HRAT_RDISTRIB"
+  "HRAT_MUL_RINV" > "HOL4Base.hreal.HRAT_MUL_RINV"
+  "HRAT_MUL_RID" > "HOL4Base.hreal.HRAT_MUL_RID"
+  "HRAT_MEAN" > "HOL4Base.hreal.HRAT_MEAN"
+  "HRAT_LT_TRANS" > "HOL4Base.hreal.HRAT_LT_TRANS"
+  "HRAT_LT_TOTAL" > "HOL4Base.hreal.HRAT_LT_TOTAL"
+  "HRAT_LT_RMUL1" > "HOL4Base.hreal.HRAT_LT_RMUL1"
+  "HRAT_LT_RMUL" > "HOL4Base.hreal.HRAT_LT_RMUL"
+  "HRAT_LT_REFL" > "HOL4Base.hreal.HRAT_LT_REFL"
+  "HRAT_LT_RADD" > "HOL4Base.hreal.HRAT_LT_RADD"
+  "HRAT_LT_R1" > "HOL4Base.hreal.HRAT_LT_R1"
+  "HRAT_LT_NE" > "HOL4Base.hreal.HRAT_LT_NE"
+  "HRAT_LT_MUL2" > "HOL4Base.hreal.HRAT_LT_MUL2"
+  "HRAT_LT_LMUL1" > "HOL4Base.hreal.HRAT_LT_LMUL1"
+  "HRAT_LT_LMUL" > "HOL4Base.hreal.HRAT_LT_LMUL"
+  "HRAT_LT_LADD" > "HOL4Base.hreal.HRAT_LT_LADD"
+  "HRAT_LT_L1" > "HOL4Base.hreal.HRAT_LT_L1"
+  "HRAT_LT_GT" > "HOL4Base.hreal.HRAT_LT_GT"
+  "HRAT_LT_ANTISYM" > "HOL4Base.hreal.HRAT_LT_ANTISYM"
+  "HRAT_LT_ADDR" > "HOL4Base.hreal.HRAT_LT_ADDR"
+  "HRAT_LT_ADDL" > "HOL4Base.hreal.HRAT_LT_ADDL"
+  "HRAT_LT_ADD2" > "HOL4Base.hreal.HRAT_LT_ADD2"
+  "HRAT_INV_MUL" > "HOL4Base.hreal.HRAT_INV_MUL"
+  "HRAT_GT_LMUL1" > "HOL4Base.hreal.HRAT_GT_LMUL1"
+  "HRAT_GT_L1" > "HOL4Base.hreal.HRAT_GT_L1"
+  "HRAT_EQ_LMUL" > "HOL4Base.hreal.HRAT_EQ_LMUL"
+  "HRAT_EQ_LADD" > "HOL4Base.hreal.HRAT_EQ_LADD"
+  "HRAT_DOWN2" > "HOL4Base.hreal.HRAT_DOWN2"
+  "HRAT_DOWN" > "HOL4Base.hreal.HRAT_DOWN"
+  "EQUAL_CUTS" > "HOL4Base.hreal.EQUAL_CUTS"
+  "CUT_UP" > "HOL4Base.hreal.CUT_UP"
+  "CUT_UBOUND" > "HOL4Base.hreal.CUT_UBOUND"
+  "CUT_STRADDLE" > "HOL4Base.hreal.CUT_STRADDLE"
+  "CUT_NONEMPTY" > "HOL4Base.hreal.CUT_NONEMPTY"
+  "CUT_NEARTOP_MUL" > "HOL4Base.hreal.CUT_NEARTOP_MUL"
+  "CUT_NEARTOP_ADD" > "HOL4Base.hreal.CUT_NEARTOP_ADD"
+  "CUT_ISACUT" > "HOL4Base.hreal.CUT_ISACUT"
+  "CUT_DOWN" > "HOL4Base.hreal.CUT_DOWN"
+  "CUT_BOUNDED" > "HOL4Base.hreal.CUT_BOUNDED"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/ind_type.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,99 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "mk_rec" > "mk_rec_def"
+  "dest_rec" > "dest_rec_def"
+  "ZRECSPACE" > "ZRECSPACE_def"
+  "ZCONSTR" > "ZCONSTR_def"
+  "ZBOT" > "ZBOT_def"
+  "NUMSUM" > "NUMSUM_def"
+  "NUMSND" > "NUMSND_def"
+  "NUMRIGHT" > "NUMRIGHT_def"
+  "NUMPAIR" > "NUMPAIR_def"
+  "NUMLEFT" > "NUMLEFT_def"
+  "NUMFST" > "NUMFST_def"
+  "ISO" > "ISO_def"
+  "INJP" > "INJP_def"
+  "INJN" > "INJN_def"
+  "INJF" > "INJF_def"
+  "INJA" > "INJA_def"
+  "FNIL" > "FNIL_def"
+  "FCONS" > "FCONS_def"
+  "CONSTR" > "CONSTR_def"
+  "BOTTOM" > "BOTTOM_def"
+
+type_maps
+  "recspace" > "HOL4Base.ind_type.recspace"
+
+const_maps
+  "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
+  "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
+  "ZBOT" > "HOL4Base.ind_type.ZBOT"
+  "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
+  "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
+  "ISO" > "HOL4Base.ind_type.ISO"
+  "INJP" > "HOL4Base.ind_type.INJP"
+  "INJN" > "HOL4Base.ind_type.INJN"
+  "INJF" > "HOL4Base.ind_type.INJF"
+  "INJA" > "HOL4Base.ind_type.INJA"
+  "FNIL" > "HOL4Base.ind_type.FNIL"
+  "CONSTR" > "HOL4Base.ind_type.CONSTR"
+  "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
+
+thm_maps
+  "recspace_repfns" > "HOL4Base.ind_type.recspace_repfns"
+  "recspace_TY_DEF" > "HOL4Base.ind_type.recspace_TY_DEF"
+  "ZRECSPACE_rules" > "HOL4Base.ind_type.ZRECSPACE_rules"
+  "ZRECSPACE_ind" > "HOL4Base.ind_type.ZRECSPACE_ind"
+  "ZRECSPACE_def" > "HOL4Base.ind_type.ZRECSPACE_def"
+  "ZRECSPACE_cases" > "HOL4Base.ind_type.ZRECSPACE_cases"
+  "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
+  "ZCONSTR_def" > "HOL4Base.ind_type.ZCONSTR_def"
+  "ZCONSTR_ZBOT" > "HOL4Base.ind_type.ZCONSTR_ZBOT"
+  "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
+  "ZBOT_def" > "HOL4Base.ind_type.ZBOT_def"
+  "ZBOT" > "HOL4Base.ind_type.ZBOT"
+  "NUMSUM_def" > "HOL4Base.ind_type.NUMSUM_def"
+  "NUMSUM_INJ" > "HOL4Base.ind_type.NUMSUM_INJ"
+  "NUMSUM_DEST" > "HOL4Base.ind_type.NUMSUM_DEST"
+  "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
+  "NUMPAIR_def" > "HOL4Base.ind_type.NUMPAIR_def"
+  "NUMPAIR_INJ_LEMMA" > "HOL4Base.ind_type.NUMPAIR_INJ_LEMMA"
+  "NUMPAIR_INJ" > "HOL4Base.ind_type.NUMPAIR_INJ"
+  "NUMPAIR_DEST" > "HOL4Base.ind_type.NUMPAIR_DEST"
+  "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
+  "MK_REC_INJ" > "HOL4Base.ind_type.MK_REC_INJ"
+  "ISO_def" > "HOL4Base.ind_type.ISO_def"
+  "ISO_USAGE" > "HOL4Base.ind_type.ISO_USAGE"
+  "ISO_REFL" > "HOL4Base.ind_type.ISO_REFL"
+  "ISO_FUN" > "HOL4Base.ind_type.ISO_FUN"
+  "ISO" > "HOL4Base.ind_type.ISO"
+  "INJ_INVERSE2" > "HOL4Base.ind_type.INJ_INVERSE2"
+  "INJP_def" > "HOL4Base.ind_type.INJP_def"
+  "INJP_INJ" > "HOL4Base.ind_type.INJP_INJ"
+  "INJP" > "HOL4Base.ind_type.INJP"
+  "INJN_def" > "HOL4Base.ind_type.INJN_def"
+  "INJN_INJ" > "HOL4Base.ind_type.INJN_INJ"
+  "INJN" > "HOL4Base.ind_type.INJN"
+  "INJF_def" > "HOL4Base.ind_type.INJF_def"
+  "INJF_INJ" > "HOL4Base.ind_type.INJF_INJ"
+  "INJF" > "HOL4Base.ind_type.INJF"
+  "INJA_def" > "HOL4Base.ind_type.INJA_def"
+  "INJA_INJ" > "HOL4Base.ind_type.INJA_INJ"
+  "INJA" > "HOL4Base.ind_type.INJA"
+  "FNIL_def" > "HOL4Base.ind_type.FNIL_def"
+  "FNIL" > "HOL4Base.ind_type.FNIL"
+  "FCONS" > "HOL4Base.ind_type.FCONS"
+  "DEST_REC_INJ" > "HOL4Base.ind_type.DEST_REC_INJ"
+  "CONSTR_def" > "HOL4Base.ind_type.CONSTR_def"
+  "CONSTR_REC" > "HOL4Base.ind_type.CONSTR_REC"
+  "CONSTR_INJ" > "HOL4Base.ind_type.CONSTR_INJ"
+  "CONSTR_IND" > "HOL4Base.ind_type.CONSTR_IND"
+  "CONSTR_BOT" > "HOL4Base.ind_type.CONSTR_BOT"
+  "CONSTR" > "HOL4Base.ind_type.CONSTR"
+  "BOTTOM_def" > "HOL4Base.ind_type.BOTTOM_def"
+  "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/lim.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,93 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "tends_real_real" > "tends_real_real_def"
+  "diffl" > "diffl_def"
+  "differentiable" > "differentiable_def"
+  "contl" > "contl_def"
+
+const_maps
+  "tends_real_real" > "HOL4Real.lim.tends_real_real"
+  "diffl" > "HOL4Real.lim.diffl"
+  "differentiable" > "HOL4Real.lim.differentiable"
+  "contl" > "HOL4Real.lim.contl"
+
+thm_maps
+  "tends_real_real_def" > "HOL4Real.lim.tends_real_real_def"
+  "tends_real_real" > "HOL4Real.lim.tends_real_real"
+  "diffl_def" > "HOL4Real.lim.diffl_def"
+  "diffl" > "HOL4Real.lim.diffl"
+  "differentiable_def" > "HOL4Real.lim.differentiable_def"
+  "differentiable" > "HOL4Real.lim.differentiable"
+  "contl_def" > "HOL4Real.lim.contl_def"
+  "contl" > "HOL4Real.lim.contl"
+  "ROLLE" > "HOL4Real.lim.ROLLE"
+  "MVT_LEMMA" > "Deriv.lemma_MVT"
+  "MVT" > "HOL4Real.lim.MVT"
+  "LIM_X" > "HOL4Real.lim.LIM_X"
+  "LIM_UNIQ" > "HOL4Real.lim.LIM_UNIQ"
+  "LIM_TRANSFORM" > "HOL4Real.lim.LIM_TRANSFORM"
+  "LIM_SUB" > "HOL4Real.lim.LIM_SUB"
+  "LIM_NULL" > "HOL4Real.lim.LIM_NULL"
+  "LIM_NEG" > "HOL4Real.lim.LIM_NEG"
+  "LIM_MUL" > "HOL4Real.lim.LIM_MUL"
+  "LIM_INV" > "HOL4Real.lim.LIM_INV"
+  "LIM_EQUAL" > "HOL4Real.lim.LIM_EQUAL"
+  "LIM_DIV" > "HOL4Real.lim.LIM_DIV"
+  "LIM_CONST" > "HOL4Real.lim.LIM_CONST"
+  "LIM_ADD" > "HOL4Real.lim.LIM_ADD"
+  "LIM" > "HOL4Real.lim.LIM"
+  "IVT2" > "HOL4Real.lim.IVT2"
+  "IVT" > "HOL4Real.lim.IVT"
+  "INTERVAL_LEMMA" > "Deriv.lemma_interval"
+  "INTERVAL_CLEMMA" > "HOL4Real.lim.INTERVAL_CLEMMA"
+  "INTERVAL_ABS" > "HOL4Real.lim.INTERVAL_ABS"
+  "DIFF_XM1" > "HOL4Real.lim.DIFF_XM1"
+  "DIFF_X" > "HOL4Real.lim.DIFF_X"
+  "DIFF_UNIQ" > "HOL4Real.lim.DIFF_UNIQ"
+  "DIFF_SUM" > "HOL4Real.lim.DIFF_SUM"
+  "DIFF_SUB" > "HOL4Real.lim.DIFF_SUB"
+  "DIFF_POW" > "HOL4Real.lim.DIFF_POW"
+  "DIFF_NEG" > "HOL4Real.lim.DIFF_NEG"
+  "DIFF_MUL" > "HOL4Real.lim.DIFF_MUL"
+  "DIFF_LMIN" > "HOL4Real.lim.DIFF_LMIN"
+  "DIFF_LMAX" > "HOL4Real.lim.DIFF_LMAX"
+  "DIFF_LINC" > "HOL4Real.lim.DIFF_LINC"
+  "DIFF_LDEC" > "HOL4Real.lim.DIFF_LDEC"
+  "DIFF_LCONST" > "HOL4Real.lim.DIFF_LCONST"
+  "DIFF_ISCONST_END" > "HOL4Real.lim.DIFF_ISCONST_END"
+  "DIFF_ISCONST_ALL" > "HOL4Real.lim.DIFF_ISCONST_ALL"
+  "DIFF_ISCONST" > "HOL4Real.lim.DIFF_ISCONST"
+  "DIFF_INVERSE_OPEN" > "HOL4Real.lim.DIFF_INVERSE_OPEN"
+  "DIFF_INVERSE_LT" > "HOL4Real.lim.DIFF_INVERSE_LT"
+  "DIFF_INVERSE" > "HOL4Real.lim.DIFF_INVERSE"
+  "DIFF_INV" > "HOL4Real.lim.DIFF_INV"
+  "DIFF_DIV" > "HOL4Real.lim.DIFF_DIV"
+  "DIFF_CONT" > "HOL4Real.lim.DIFF_CONT"
+  "DIFF_CONST" > "HOL4Real.lim.DIFF_CONST"
+  "DIFF_CMUL" > "HOL4Real.lim.DIFF_CMUL"
+  "DIFF_CHAIN" > "HOL4Real.lim.DIFF_CHAIN"
+  "DIFF_CARAT" > "HOL4Real.lim.DIFF_CARAT"
+  "DIFF_ADD" > "HOL4Real.lim.DIFF_ADD"
+  "CONT_SUB" > "HOL4Real.lim.CONT_SUB"
+  "CONT_NEG" > "HOL4Real.lim.CONT_NEG"
+  "CONT_MUL" > "HOL4Real.lim.CONT_MUL"
+  "CONT_INVERSE" > "HOL4Real.lim.CONT_INVERSE"
+  "CONT_INV" > "HOL4Real.lim.CONT_INV"
+  "CONT_INJ_RANGE" > "HOL4Real.lim.CONT_INJ_RANGE"
+  "CONT_INJ_LEMMA2" > "HOL4Real.lim.CONT_INJ_LEMMA2"
+  "CONT_INJ_LEMMA" > "HOL4Real.lim.CONT_INJ_LEMMA"
+  "CONT_HASSUP" > "HOL4Real.lim.CONT_HASSUP"
+  "CONT_DIV" > "HOL4Real.lim.CONT_DIV"
+  "CONT_CONST" > "HOL4Real.lim.CONT_CONST"
+  "CONT_COMPOSE" > "HOL4Real.lim.CONT_COMPOSE"
+  "CONT_BOUNDED" > "HOL4Real.lim.CONT_BOUNDED"
+  "CONT_ATTAINS_ALL" > "HOL4Real.lim.CONT_ATTAINS_ALL"
+  "CONT_ATTAINS2" > "HOL4Real.lim.CONT_ATTAINS2"
+  "CONT_ATTAINS" > "HOL4Real.lim.CONT_ATTAINS"
+  "CONT_ADD" > "HOL4Real.lim.CONT_ADD"
+  "CONTL_LIM" > "HOL4Real.lim.CONTL_LIM"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/list.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,135 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "EL" > "EL_def"
+
+type_maps
+  "list" > "List.list"
+
+const_maps
+  "list_size" > "Compatibility.list_size"
+  "list_case" > "List.list.list_case"
+  "ZIP" > "Compatibility.ZIP"
+  "UNZIP" > "Compatibility.unzip"
+  "TL" > "List.tl"
+  "SUM" > "Compatibility.sum"
+  "REVERSE" > "List.rev"
+  "REPLICATE" > "List.replicate"
+  "NULL" > "List.null"
+  "NIL" > "List.list.Nil"
+  "MEM" > "Compatibility.list_mem"
+  "MAP2" > "Compatibility.map2"
+  "MAP" > "List.map"
+  "LENGTH" > "Nat.size_class.size"
+  "LAST" > "List.last"
+  "HD" > "List.hd"
+  "FRONT" > "List.butlast"
+  "FOLDR" > "Compatibility.FOLDR"
+  "FOLDL" > "List.foldl"
+  "FLAT" > "List.concat"
+  "FILTER" > "List.filter"
+  "EXISTS" > "List.list_ex"
+  "EVERY" > "List.list_all"
+  "CONS" > "List.list.Cons"
+  "APPEND" > "List.append"
+
+thm_maps
+  "list_size_def" > "Compatibility.list_size_def'"
+  "list_size_cong" > "HOL4Base.list.list_size_cong"
+  "list_nchotomy" > "Compatibility.list_CASES"
+  "list_induction" > "Compatibility.list_INDUCT"
+  "list_distinct" > "List.list.distinct_1"
+  "list_case_def" > "Compatibility.list_case_def"
+  "list_case_cong" > "Compatibility.list_case_cong"
+  "list_case_compute" > "HOL4Base.list.list_case_compute"
+  "list_INDUCT" > "Compatibility.list_INDUCT"
+  "list_CASES" > "Compatibility.list_CASES"
+  "list_Axiom_old" > "Compatibility.list_Axiom_old"
+  "list_Axiom" > "Compatibility.list_Axiom"
+  "list_11" > "List.list.inject"
+  "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
+  "ZIP_MAP" > "HOL4Base.list.ZIP_MAP"
+  "ZIP" > "Compatibility.ZIP"
+  "WF_LIST_PRED" > "HOL4Base.list.WF_LIST_PRED"
+  "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
+  "UNZIP" > "Compatibility.UNZIP"
+  "TL" > "List.tl.simps_2"
+  "SUM" > "Compatibility.SUM"
+  "REVERSE_REVERSE" > "List.rev_rev_ident"
+  "REVERSE_DEF" > "Compatibility.REVERSE"
+  "REVERSE_APPEND" > "List.rev_append"
+  "NULL_DEF" > "Compatibility.NULL_DEF"
+  "NULL" > "HOL4Base.list.NULL"
+  "NOT_NIL_CONS" > "List.list.distinct_1"
+  "NOT_EXISTS" > "HOL4Base.list.NOT_EXISTS"
+  "NOT_EVERY" > "HOL4Base.list.NOT_EVERY"
+  "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
+  "NOT_CONS_NIL" > "List.list.distinct_2"
+  "MEM_ZIP" > "HOL4Base.list.MEM_ZIP"
+  "MEM_MAP" > "HOL4Base.list.MEM_MAP"
+  "MEM_EL" > "HOL4Base.list.MEM_EL"
+  "MEM_APPEND" > "HOL4Base.list.MEM_APPEND"
+  "MEM" > "Compatibility.MEM"
+  "MAP_EQ_NIL" > "HOL4Base.list.MAP_EQ_NIL"
+  "MAP_CONG" > "HOL4Base.list.MAP_CONG"
+  "MAP_APPEND" > "List.map_append"
+  "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
+  "MAP2" > "Compatibility.MAP2"
+  "MAP" > "Compatibility.MAP"
+  "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
+  "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
+  "LENGTH_UNZIP" > "HOL4Base.list.LENGTH_UNZIP"
+  "LENGTH_NIL" > "List.length_0_conv"
+  "LENGTH_MAP" > "List.length_map"
+  "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
+  "LENGTH_EQ_CONS" > "HOL4Base.list.LENGTH_EQ_CONS"
+  "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
+  "LENGTH_APPEND" > "List.length_append"
+  "LENGTH" > "Compatibility.LENGTH"
+  "LAST_DEF" > "List.last.simps"
+  "LAST_CONS" > "HOL4Base.list.LAST_CONS"
+  "HD" > "List.hd.simps"
+  "FRONT_DEF" > "List.butlast.simps_2"
+  "FRONT_CONS" > "HOL4Base.list.FRONT_CONS"
+  "FOLDR_CONG" > "HOL4Base.list.FOLDR_CONG"
+  "FOLDR" > "Compatibility.FOLDR"
+  "FOLDL_CONG" > "HOL4Base.list.FOLDL_CONG"
+  "FOLDL" > "Compatibility.FOLDL"
+  "FLAT" > "Compatibility.FLAT"
+  "FILTER" > "Compatibility.FILTER"
+  "EXISTS_MEM" > "HOL4Base.list.EXISTS_MEM"
+  "EXISTS_DEF" > "Compatibility.list_exists_DEF"
+  "EXISTS_CONG" > "HOL4Base.list.EXISTS_CONG"
+  "EXISTS_APPEND" > "List.list_ex_append"
+  "EVERY_MONOTONIC" > "HOL4Base.list.EVERY_MONOTONIC"
+  "EVERY_MEM" > "HOL4Base.list.EVERY_MEM"
+  "EVERY_EL" > "HOL4Base.list.EVERY_EL"
+  "EVERY_DEF" > "Compatibility.EVERY_DEF"
+  "EVERY_CONJ" > "HOL4Base.list.EVERY_CONJ"
+  "EVERY_CONG" > "HOL4Base.list.EVERY_CONG"
+  "EVERY_APPEND" > "List.list_all_append"
+  "EQ_LIST" > "HOL4Base.list.EQ_LIST"
+  "EL_compute" > "HOL4Base.list.EL_compute"
+  "EL_ZIP" > "HOL4Base.list.EL_ZIP"
+  "EL" > "HOL4Base.list.EL"
+  "CONS_ACYCLIC" > "HOL4Base.list.CONS_ACYCLIC"
+  "CONS_11" > "List.list.inject"
+  "CONS" > "HOL4Base.list.CONS"
+  "APPEND_eq_NIL" > "HOL4Base.list.APPEND_eq_NIL"
+  "APPEND_NIL" > "List.append_Nil2"
+  "APPEND_FRONT_LAST" > "List.append_butlast_last_id"
+  "APPEND_ASSOC" > "List.append_assoc"
+  "APPEND_11" > "HOL4Base.list.APPEND_11"
+  "APPEND" > "Compatibility.APPEND"
+
+ignore_thms
+  "list_repfns"
+  "list_TY_DEF"
+  "list1_def"
+  "list0_def"
+  "NIL"
+  "CONS_def"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/marker.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,19 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "stmarker" > "stmarker_primdef"
+
+const_maps
+  "stmarker" > "HOL4Base.marker.stmarker"
+
+thm_maps
+  "stmarker_primdef" > "HOL4Base.marker.stmarker_primdef"
+  "stmarker_def" > "HOL4Base.marker.stmarker_def"
+  "move_right_disj" > "HOL4Base.marker.move_right_disj"
+  "move_right_conj" > "HOL4Base.marker.move_right_conj"
+  "move_left_disj" > "HOL4Base.marker.move_left_disj"
+  "move_left_conj" > "HOL4Base.marker.move_left_conj"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/nets.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,51 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "tendsto" > "tendsto_def"
+  "tends" > "tends_def"
+  "dorder" > "dorder_def"
+  "bounded" > "bounded_def"
+
+const_maps
+  "tendsto" > "HOL4Real.nets.tendsto"
+  "tends" > "HOL4Real.nets.tends"
+  "dorder" > "HOL4Real.nets.dorder"
+  "bounded" > "HOL4Real.nets.bounded"
+
+thm_maps
+  "tendsto_def" > "HOL4Real.nets.tendsto_def"
+  "tendsto" > "HOL4Real.nets.tendsto"
+  "tends_def" > "HOL4Real.nets.tends_def"
+  "tends" > "HOL4Real.nets.tends"
+  "dorder_def" > "HOL4Real.nets.dorder_def"
+  "dorder" > "HOL4Real.nets.dorder"
+  "bounded_def" > "HOL4Real.nets.bounded_def"
+  "bounded" > "HOL4Real.nets.bounded"
+  "SEQ_TENDS" > "HOL4Real.nets.SEQ_TENDS"
+  "NET_SUB" > "HOL4Real.nets.NET_SUB"
+  "NET_NULL_MUL" > "HOL4Real.nets.NET_NULL_MUL"
+  "NET_NULL_CMUL" > "HOL4Real.nets.NET_NULL_CMUL"
+  "NET_NULL_ADD" > "HOL4Real.nets.NET_NULL_ADD"
+  "NET_NULL" > "HOL4Real.nets.NET_NULL"
+  "NET_NEG" > "HOL4Real.nets.NET_NEG"
+  "NET_MUL" > "HOL4Real.nets.NET_MUL"
+  "NET_LE" > "HOL4Real.nets.NET_LE"
+  "NET_INV" > "HOL4Real.nets.NET_INV"
+  "NET_DIV" > "HOL4Real.nets.NET_DIV"
+  "NET_CONV_NZ" > "HOL4Real.nets.NET_CONV_NZ"
+  "NET_CONV_IBOUNDED" > "HOL4Real.nets.NET_CONV_IBOUNDED"
+  "NET_CONV_BOUNDED" > "HOL4Real.nets.NET_CONV_BOUNDED"
+  "NET_ADD" > "HOL4Real.nets.NET_ADD"
+  "NET_ABS" > "HOL4Real.nets.NET_ABS"
+  "MTOP_TENDS_UNIQ" > "HOL4Real.nets.MTOP_TENDS_UNIQ"
+  "MTOP_TENDS" > "HOL4Real.nets.MTOP_TENDS"
+  "MR1_BOUNDED" > "HOL4Real.nets.MR1_BOUNDED"
+  "LIM_TENDS2" > "HOL4Real.nets.LIM_TENDS2"
+  "LIM_TENDS" > "HOL4Real.nets.LIM_TENDS"
+  "DORDER_TENDSTO" > "HOL4Real.nets.DORDER_TENDSTO"
+  "DORDER_NGE" > "HOL4Real.nets.DORDER_NGE"
+  "DORDER_LEMMA" > "HOL4Real.nets.DORDER_LEMMA"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/num.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,26 @@
+import
+
+import_segment "hol4"
+
+type_maps
+  "num" > "Nat.nat"
+
+const_maps
+  "SUC" > "Nat.Suc"
+  "0" > "Groups.zero_class.zero" :: "nat"
+
+thm_maps
+  "NOT_SUC" > "Nat.Suc_not_Zero"
+  "INV_SUC" > "Nat.Suc_inject"
+  "INDUCTION" > "Fact.fact_nat.induct"
+
+ignore_thms
+  "num_TY_DEF"
+  "num_ISO_DEF"
+  "ZERO_REP_DEF"
+  "ZERO_DEF"
+  "SUC_REP_DEF"
+  "SUC_DEF"
+  "IS_NUM_REP"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/numeral.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,49 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "iiSUC" > "iiSUC_def"
+  "iZ" > "iZ_def"
+  "iSUB" > "iSUB_def"
+  "iSQR" > "iSQR_def"
+  "iDUB" > "iDUB_def"
+  "iBIT_cases" > "iBIT_cases_def"
+
+const_maps
+  "iiSUC" > "HOL4Base.numeral.iiSUC"
+  "iZ" > "HOL4Base.numeral.iZ"
+  "iSQR" > "HOL4Base.numeral.iSQR"
+  "iDUB" > "HOL4Base.numeral.iDUB"
+
+thm_maps
+  "numeral_suc" > "HOL4Base.numeral.numeral_suc"
+  "numeral_sub" > "HOL4Base.numeral.numeral_sub"
+  "numeral_pre" > "HOL4Base.numeral.numeral_pre"
+  "numeral_mult" > "HOL4Base.numeral.numeral_mult"
+  "numeral_lte" > "HOL4Base.numeral.numeral_lte"
+  "numeral_lt" > "HOL4Base.numeral.numeral_lt"
+  "numeral_iisuc" > "HOL4Base.numeral.numeral_iisuc"
+  "numeral_funpow" > "HOL4Base.numeral.numeral_funpow"
+  "numeral_fact" > "HOL4Base.numeral.numeral_fact"
+  "numeral_exp" > "HOL4Base.numeral.numeral_exp"
+  "numeral_evenodd" > "HOL4Base.numeral.numeral_evenodd"
+  "numeral_eq" > "HOL4Base.numeral.numeral_eq"
+  "numeral_distrib" > "HOL4Base.numeral.numeral_distrib"
+  "numeral_add" > "HOL4Base.numeral.numeral_add"
+  "iiSUC_def" > "HOL4Base.numeral.iiSUC_def"
+  "iiSUC" > "HOL4Base.numeral.iiSUC"
+  "iZ_def" > "HOL4Base.numeral.iZ_def"
+  "iZ" > "HOL4Base.numeral.iZ"
+  "iSUB_THM" > "HOL4Base.numeral.iSUB_THM"
+  "iSUB_DEF" > "HOL4Base.numeral.iSUB_DEF"
+  "iSQR_def" > "HOL4Base.numeral.iSQR_def"
+  "iSQR" > "HOL4Base.numeral.iSQR"
+  "iDUB_removal" > "HOL4Base.numeral.iDUB_removal"
+  "iDUB_def" > "HOL4Base.numeral.iDUB_def"
+  "iDUB" > "HOL4Base.numeral.iDUB"
+  "iBIT_cases" > "HOL4Base.numeral.iBIT_cases"
+  "bit_initiality" > "HOL4Base.numeral.bit_initiality"
+  "bit_induction" > "HOL4Base.numeral.bit_induction"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/one.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,20 @@
+import
+
+import_segment "hol4"
+
+type_maps
+  "one" > "Product_Type.unit"
+
+const_maps
+  "one" > "Product_Type.Unity"
+
+thm_maps
+  "one" > "Compatibility.one"
+
+ignore_thms
+  "one_axiom"
+  "one_TY_DEF"
+  "one_DEF"
+  "one_Axiom"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/operator.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,40 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "RIGHT_ID" > "RIGHT_ID_def"
+  "MONOID" > "MONOID_def"
+  "LEFT_ID" > "LEFT_ID_def"
+  "FCOMM" > "FCOMM_def"
+  "COMM" > "COMM_def"
+  "ASSOC" > "ASSOC_def"
+
+const_maps
+  "RIGHT_ID" > "HOL4Base.operator.RIGHT_ID"
+  "MONOID" > "HOL4Base.operator.MONOID"
+  "LEFT_ID" > "HOL4Base.operator.LEFT_ID"
+  "FCOMM" > "HOL4Base.operator.FCOMM"
+  "COMM" > "HOL4Base.operator.COMM"
+  "ASSOC" > "HOL4Base.operator.ASSOC"
+
+thm_maps
+  "RIGHT_ID_def" > "HOL4Base.operator.RIGHT_ID_def"
+  "RIGHT_ID_DEF" > "HOL4Base.operator.RIGHT_ID_DEF"
+  "MONOID_def" > "HOL4Base.operator.MONOID_def"
+  "MONOID_DISJ_F" > "HOL4Base.operator.MONOID_DISJ_F"
+  "MONOID_DEF" > "HOL4Base.operator.MONOID_DEF"
+  "MONOID_CONJ_T" > "HOL4Base.operator.MONOID_CONJ_T"
+  "LEFT_ID_def" > "HOL4Base.operator.LEFT_ID_def"
+  "LEFT_ID_DEF" > "HOL4Base.operator.LEFT_ID_DEF"
+  "FCOMM_def" > "HOL4Base.operator.FCOMM_def"
+  "FCOMM_DEF" > "HOL4Base.operator.FCOMM_DEF"
+  "FCOMM_ASSOC" > "HOL4Base.operator.FCOMM_ASSOC"
+  "COMM_def" > "HOL4Base.operator.COMM_def"
+  "COMM_DEF" > "HOL4Base.operator.COMM_DEF"
+  "ASSOC_def" > "HOL4Base.operator.ASSOC_def"
+  "ASSOC_DISJ" > "HOL4Base.operator.ASSOC_DISJ"
+  "ASSOC_DEF" > "HOL4Base.operator.ASSOC_DEF"
+  "ASSOC_CONJ" > "HOL4Base.operator.ASSOC_CONJ"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/option.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,45 @@
+import
+
+import_segment "hol4"
+
+type_maps
+  "option" > "Option.option"
+
+const_maps
+  "option_case" > "Option.option.option_case"
+  "THE" > "Option.the"
+  "SOME" > "Option.option.Some"
+  "OPTION_MAP" > "Option.map"
+  "OPTION_JOIN" > "Compatibility.OPTION_JOIN"
+  "NONE" > "Option.option.None"
+  "IS_SOME" > "Compatibility.IS_SOME"
+  "IS_NONE" > "Compatibility.IS_NONE"
+
+thm_maps
+  "option_nchotomy" > "Option.option.nchotomy"
+  "option_induction" > "Option.option.induct"
+  "option_case_def" > "Compatibility.option_case_def"
+  "option_case_cong" > "HOL4Base.option.option_case_cong"
+  "option_case_compute" > "HOL4Base.option.option_case_compute"
+  "option_CLAUSES" > "HOL4Base.option.option_CLAUSES"
+  "THE_DEF" > "Option.the.simps"
+  "SOME_11" > "Option.option.inject"
+  "OPTION_MAP_EQ_SOME" > "HOL4Base.option.OPTION_MAP_EQ_SOME"
+  "OPTION_MAP_EQ_NONE" > "Option.option_map_is_None"
+  "OPTION_MAP_DEF" > "Compatibility.OPTION_MAP_DEF"
+  "OPTION_JOIN_EQ_SOME" > "HOL4Base.option.OPTION_JOIN_EQ_SOME"
+  "OPTION_JOIN_DEF" > "Compatibility.OPTION_JOIN_DEF"
+  "NOT_SOME_NONE" > "Option.option.distinct_2"
+  "NOT_NONE_SOME" > "Option.option.distinct_1"
+  "IS_SOME_DEF" > "Compatibility.IS_SOME_DEF"
+  "IS_NONE_DEF" > "Compatibility.IS_NONE_DEF"
+
+ignore_thms
+  "option_axiom"
+  "option_TY_DEF"
+  "option_REP_ABS_DEF"
+  "option_Axiom"
+  "SOME_DEF"
+  "NONE_DEF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/pair.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,70 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "RPROD" > "RPROD_def"
+  "LEX" > "LEX_def"
+
+type_maps
+  "prod" > "Product_Type.prod"
+
+const_maps
+  "pair_case" > "Product_Type.prod.prod_case"
+  "UNCURRY" > "Product_Type.prod.prod_case"
+  "SND" > "Product_Type.snd"
+  "RPROD" > "HOL4Base.pair.RPROD"
+  "LEX" > "HOL4Base.pair.LEX"
+  "FST" > "Product_Type.fst"
+  "CURRY" > "Product_Type.curry"
+  "," > "Product_Type.Pair"
+  "##" > "Product_Type.map_pair"
+
+thm_maps
+  "pair_induction" > "Product_Type.prod.induct"
+  "pair_case_thm" > "Product_Type.prod.cases"
+  "pair_case_def" > "Compatibility.pair_case_def"
+  "pair_case_cong" > "HOL4Base.pair.pair_case_cong"
+  "pair_Axiom" > "HOL4Base.pair.pair_Axiom"
+  "WF_RPROD" > "HOL4Base.pair.WF_RPROD"
+  "WF_LEX" > "HOL4Base.pair.WF_LEX"
+  "UNCURRY_VAR" > "Product_Type.prod_case_beta"
+  "UNCURRY_ONE_ONE_THM" > "HOL4Base.pair.UNCURRY_ONE_ONE_THM"
+  "UNCURRY_DEF" > "Product_Type.prod.cases"
+  "UNCURRY_CURRY_THM" > "Product_Type.split_curry"
+  "UNCURRY_CONG" > "HOL4Base.pair.UNCURRY_CONG"
+  "UNCURRY" > "Product_Type.prod_case_beta"
+  "SND" > "Product_Type.snd_conv"
+  "RPROD_def" > "HOL4Base.pair.RPROD_def"
+  "RPROD_DEF" > "HOL4Base.pair.RPROD_DEF"
+  "PFORALL_THM" > "HOL4Base.pair.PFORALL_THM"
+  "PEXISTS_THM" > "HOL4Base.pair.PEXISTS_THM"
+  "PAIR_MAP_THM" > "Product_Type.map_pair_simp"
+  "PAIR_MAP" > "Compatibility.PAIR_MAP"
+  "PAIR_EQ" > "Product_Type.Pair_eq"
+  "PAIR" > "Compatibility.PAIR"
+  "LEX_def" > "HOL4Base.pair.LEX_def"
+  "LEX_DEF" > "HOL4Base.pair.LEX_DEF"
+  "LET2_RATOR" > "HOL4Base.pair.LET2_RATOR"
+  "LET2_RAND" > "HOL4Base.pair.LET2_RAND"
+  "LAMBDA_PROD" > "Product_Type.split_eta"
+  "FST" > "Product_Type.fst_conv"
+  "FORALL_PROD" > "Product_Type.split_paired_All"
+  "EXISTS_PROD" > "Product_Type.split_paired_Ex"
+  "ELIM_UNCURRY" > "Product_Type.prod_case_beta"
+  "ELIM_PFORALL" > "HOL4Base.pair.ELIM_PFORALL"
+  "ELIM_PEXISTS" > "HOL4Base.pair.ELIM_PEXISTS"
+  "CURRY_UNCURRY_THM" > "Product_Type.curry_split"
+  "CURRY_ONE_ONE_THM" > "HOL4Base.pair.CURRY_ONE_ONE_THM"
+  "CURRY_DEF" > "Product_Type.curry_conv"
+  "CLOSED_PAIR_EQ" > "Product_Type.Pair_eq"
+  "ABS_PAIR_THM" > "Product_Type.prod.nchotomy"
+
+ignore_thms
+  "prod_TY_DEF"
+  "MK_PAIR_DEF"
+  "IS_PAIR_DEF"
+  "COMMA_DEF"
+  "ABS_REP_prod"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/poly.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,128 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "rsquarefree" > "rsquarefree_def"
+  "poly_order" > "poly_order_def"
+  "poly_neg" > "poly_neg_primdef"
+  "poly_mul" > "poly_mul_primdef"
+  "poly_exp" > "poly_exp_primdef"
+  "poly_divides" > "poly_divides_def"
+  "poly_diff_aux" > "poly_diff_aux_primdef"
+  "poly_add" > "poly_add_primdef"
+  "poly" > "poly_primdef"
+  "normalize" > "normalize_def"
+  "diff" > "diff_def"
+  "degree" > "degree_def"
+  "##" > "##_def"
+
+const_maps
+  "rsquarefree" > "HOL4Real.poly.rsquarefree"
+  "poly_order" > "HOL4Real.poly.poly_order"
+  "poly_neg" > "HOL4Real.poly.poly_neg"
+  "poly_divides" > "HOL4Real.poly.poly_divides"
+  "diff" > "HOL4Real.poly.diff"
+  "degree" > "HOL4Real.poly.degree"
+
+thm_maps
+  "rsquarefree_def" > "HOL4Real.poly.rsquarefree_def"
+  "rsquarefree" > "HOL4Real.poly.rsquarefree"
+  "poly_order_def" > "HOL4Real.poly.poly_order_def"
+  "poly_order" > "HOL4Real.poly.poly_order"
+  "poly_neg_primdef" > "HOL4Real.poly.poly_neg_primdef"
+  "poly_neg_def" > "HOL4Real.poly.poly_neg_def"
+  "poly_mul_def" > "HOL4Real.poly.poly_mul_def"
+  "poly_exp_def" > "HOL4Real.poly.poly_exp_def"
+  "poly_divides_def" > "HOL4Real.poly.poly_divides_def"
+  "poly_divides" > "HOL4Real.poly.poly_divides"
+  "poly_diff_def" > "HOL4Real.poly.poly_diff_def"
+  "poly_diff_aux_def" > "HOL4Real.poly.poly_diff_aux_def"
+  "poly_def" > "HOL4Real.poly.poly_def"
+  "poly_cmul_def" > "HOL4Real.poly.poly_cmul_def"
+  "poly_add_def" > "HOL4Real.poly.poly_add_def"
+  "normalize" > "HOL4Real.poly.normalize"
+  "diff_def" > "HOL4Real.poly.diff_def"
+  "degree_def" > "HOL4Real.poly.degree_def"
+  "degree" > "HOL4Real.poly.degree"
+  "RSQUAREFREE_ROOTS" > "HOL4Real.poly.RSQUAREFREE_ROOTS"
+  "RSQUAREFREE_DECOMP" > "HOL4Real.poly.RSQUAREFREE_DECOMP"
+  "POLY_ZERO_LEMMA" > "HOL4Real.poly.POLY_ZERO_LEMMA"
+  "POLY_ZERO" > "HOL4Real.poly.POLY_ZERO"
+  "POLY_SQUAREFREE_DECOMP_ORDER" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP_ORDER"
+  "POLY_SQUAREFREE_DECOMP" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP"
+  "POLY_ROOTS_INDEX_LENGTH" > "HOL4Real.poly.POLY_ROOTS_INDEX_LENGTH"
+  "POLY_ROOTS_INDEX_LEMMA" > "HOL4Real.poly.POLY_ROOTS_INDEX_LEMMA"
+  "POLY_ROOTS_FINITE_SET" > "HOL4Real.poly.POLY_ROOTS_FINITE_SET"
+  "POLY_ROOTS_FINITE_LEMMA" > "HOL4Real.poly.POLY_ROOTS_FINITE_LEMMA"
+  "POLY_ROOTS_FINITE" > "HOL4Real.poly.POLY_ROOTS_FINITE"
+  "POLY_PRIME_EQ_0" > "HOL4Real.poly.POLY_PRIME_EQ_0"
+  "POLY_PRIMES" > "HOL4Real.poly.POLY_PRIMES"
+  "POLY_ORDER_EXISTS" > "HOL4Real.poly.POLY_ORDER_EXISTS"
+  "POLY_ORDER" > "HOL4Real.poly.POLY_ORDER"
+  "POLY_NORMALIZE" > "HOL4Real.poly.POLY_NORMALIZE"
+  "POLY_NEG_CLAUSES" > "HOL4Real.poly.POLY_NEG_CLAUSES"
+  "POLY_NEG" > "HOL4Real.poly.POLY_NEG"
+  "POLY_MVT" > "HOL4Real.poly.POLY_MVT"
+  "POLY_MUL_LCANCEL" > "HOL4Real.poly.POLY_MUL_LCANCEL"
+  "POLY_MUL_CLAUSES" > "HOL4Real.poly.POLY_MUL_CLAUSES"
+  "POLY_MUL_ASSOC" > "HOL4Real.poly.POLY_MUL_ASSOC"
+  "POLY_MUL" > "HOL4Real.poly.POLY_MUL"
+  "POLY_MONO" > "HOL4Real.poly.POLY_MONO"
+  "POLY_LINEAR_REM" > "HOL4Real.poly.POLY_LINEAR_REM"
+  "POLY_LINEAR_DIVIDES" > "HOL4Real.poly.POLY_LINEAR_DIVIDES"
+  "POLY_LENGTH_MUL" > "HOL4Real.poly.POLY_LENGTH_MUL"
+  "POLY_IVT_POS" > "HOL4Real.poly.POLY_IVT_POS"
+  "POLY_IVT_NEG" > "HOL4Real.poly.POLY_IVT_NEG"
+  "POLY_EXP_PRIME_EQ_0" > "HOL4Real.poly.POLY_EXP_PRIME_EQ_0"
+  "POLY_EXP_EQ_0" > "HOL4Real.poly.POLY_EXP_EQ_0"
+  "POLY_EXP_DIVIDES" > "HOL4Real.poly.POLY_EXP_DIVIDES"
+  "POLY_EXP_ADD" > "HOL4Real.poly.POLY_EXP_ADD"
+  "POLY_EXP" > "HOL4Real.poly.POLY_EXP"
+  "POLY_ENTIRE_LEMMA" > "HOL4Real.poly.POLY_ENTIRE_LEMMA"
+  "POLY_ENTIRE" > "HOL4Real.poly.POLY_ENTIRE"
+  "POLY_DIVIDES_ZERO" > "HOL4Real.poly.POLY_DIVIDES_ZERO"
+  "POLY_DIVIDES_TRANS" > "HOL4Real.poly.POLY_DIVIDES_TRANS"
+  "POLY_DIVIDES_SUB2" > "HOL4Real.poly.POLY_DIVIDES_SUB2"
+  "POLY_DIVIDES_SUB" > "HOL4Real.poly.POLY_DIVIDES_SUB"
+  "POLY_DIVIDES_REFL" > "HOL4Real.poly.POLY_DIVIDES_REFL"
+  "POLY_DIVIDES_EXP" > "HOL4Real.poly.POLY_DIVIDES_EXP"
+  "POLY_DIVIDES_ADD" > "HOL4Real.poly.POLY_DIVIDES_ADD"
+  "POLY_DIFF_ZERO" > "HOL4Real.poly.POLY_DIFF_ZERO"
+  "POLY_DIFF_WELLDEF" > "HOL4Real.poly.POLY_DIFF_WELLDEF"
+  "POLY_DIFF_NEG" > "HOL4Real.poly.POLY_DIFF_NEG"
+  "POLY_DIFF_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_MUL_LEMMA"
+  "POLY_DIFF_MUL" > "HOL4Real.poly.POLY_DIFF_MUL"
+  "POLY_DIFF_LEMMA" > "HOL4Real.poly.POLY_DIFF_LEMMA"
+  "POLY_DIFF_ISZERO" > "HOL4Real.poly.POLY_DIFF_ISZERO"
+  "POLY_DIFF_EXP_PRIME" > "HOL4Real.poly.POLY_DIFF_EXP_PRIME"
+  "POLY_DIFF_EXP" > "HOL4Real.poly.POLY_DIFF_EXP"
+  "POLY_DIFF_CMUL" > "HOL4Real.poly.POLY_DIFF_CMUL"
+  "POLY_DIFF_CLAUSES" > "HOL4Real.poly.POLY_DIFF_CLAUSES"
+  "POLY_DIFF_AUX_NEG" > "HOL4Real.poly.POLY_DIFF_AUX_NEG"
+  "POLY_DIFF_AUX_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_AUX_MUL_LEMMA"
+  "POLY_DIFF_AUX_ISZERO" > "HOL4Real.poly.POLY_DIFF_AUX_ISZERO"
+  "POLY_DIFF_AUX_CMUL" > "HOL4Real.poly.POLY_DIFF_AUX_CMUL"
+  "POLY_DIFF_AUX_ADD" > "HOL4Real.poly.POLY_DIFF_AUX_ADD"
+  "POLY_DIFF_ADD" > "HOL4Real.poly.POLY_DIFF_ADD"
+  "POLY_DIFFERENTIABLE" > "HOL4Real.poly.POLY_DIFFERENTIABLE"
+  "POLY_DIFF" > "HOL4Real.poly.POLY_DIFF"
+  "POLY_CONT" > "HOL4Real.poly.POLY_CONT"
+  "POLY_CMUL_CLAUSES" > "HOL4Real.poly.POLY_CMUL_CLAUSES"
+  "POLY_CMUL" > "HOL4Real.poly.POLY_CMUL"
+  "POLY_ADD_RZERO" > "HOL4Real.poly.POLY_ADD_RZERO"
+  "POLY_ADD_CLAUSES" > "HOL4Real.poly.POLY_ADD_CLAUSES"
+  "POLY_ADD" > "HOL4Real.poly.POLY_ADD"
+  "ORDER_UNIQUE" > "HOL4Real.poly.ORDER_UNIQUE"
+  "ORDER_THM" > "HOL4Real.poly.ORDER_THM"
+  "ORDER_ROOT" > "HOL4Real.poly.ORDER_ROOT"
+  "ORDER_POLY" > "HOL4Real.poly.ORDER_POLY"
+  "ORDER_MUL" > "HOL4Real.poly.ORDER_MUL"
+  "ORDER_DIVIDES" > "HOL4Real.poly.ORDER_DIVIDES"
+  "ORDER_DIFF" > "HOL4Real.poly.ORDER_DIFF"
+  "ORDER_DECOMP" > "HOL4Real.poly.ORDER_DECOMP"
+  "ORDER" > "HOL4Real.poly.ORDER"
+  "FINITE_LEMMA" > "HOL4Real.poly.FINITE_LEMMA"
+  "DEGREE_ZERO" > "HOL4Real.poly.DEGREE_ZERO"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/powser.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,30 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "diffs" > "diffs_def"
+
+const_maps
+  "diffs" > "HOL4Real.powser.diffs"
+
+thm_maps
+  "diffs_def" > "HOL4Real.powser.diffs_def"
+  "diffs" > "HOL4Real.powser.diffs"
+  "TERMDIFF_LEMMA5" > "HOL4Real.powser.TERMDIFF_LEMMA5"
+  "TERMDIFF_LEMMA4" > "HOL4Real.powser.TERMDIFF_LEMMA4"
+  "TERMDIFF_LEMMA3" > "HOL4Real.powser.TERMDIFF_LEMMA3"
+  "TERMDIFF_LEMMA2" > "HOL4Real.powser.TERMDIFF_LEMMA2"
+  "TERMDIFF_LEMMA1" > "HOL4Real.powser.TERMDIFF_LEMMA1"
+  "TERMDIFF" > "HOL4Real.powser.TERMDIFF"
+  "POWSER_INSIDEA" > "HOL4Real.powser.POWSER_INSIDEA"
+  "POWSER_INSIDE" > "HOL4Real.powser.POWSER_INSIDE"
+  "POWREV" > "HOL4Real.powser.POWREV"
+  "POWDIFF_LEMMA" > "HOL4Real.powser.POWDIFF_LEMMA"
+  "POWDIFF" > "HOL4Real.powser.POWDIFF"
+  "DIFFS_NEG" > "HOL4Real.powser.DIFFS_NEG"
+  "DIFFS_LEMMA2" > "HOL4Real.powser.DIFFS_LEMMA2"
+  "DIFFS_LEMMA" > "HOL4Real.powser.DIFFS_LEMMA"
+  "DIFFS_EQUIV" > "HOL4Real.powser.DIFFS_EQUIV"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/pred_set.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,322 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "count" > "count_primdef"
+  "UNIV" > "UNIV_def"
+  "UNION" > "UNION_def"
+  "SURJ" > "SURJ_def"
+  "SUBSET" > "SUBSET_def"
+  "SING" > "SING_def"
+  "RINV" > "RINV_def"
+  "REST" > "REST_def"
+  "PSUBSET" > "PSUBSET_def"
+  "LINV" > "LINV_def"
+  "ITSET_tupled" > "ITSET_tupled_def"
+  "ITSET" > "ITSET_def"
+  "INTER" > "INTER_def"
+  "INSERT" > "INSERT_def"
+  "INJ" > "INJ_def"
+  "INFINITE" > "INFINITE_def"
+  "IMAGE" > "IMAGE_def"
+  "GSPEC" > "GSPEC_def"
+  "FINITE" > "FINITE_def"
+  "EMPTY" > "EMPTY_def"
+  "DISJOINT" > "DISJOINT_def"
+  "DIFF" > "DIFF_def"
+  "DELETE" > "DELETE_def"
+  "CROSS" > "CROSS_def"
+  "COMPL" > "COMPL_def"
+  "CHOICE" > "CHOICE_def"
+  "CARD" > "CARD_def"
+  "BIJ" > "BIJ_def"
+  "BIGUNION" > "BIGUNION_def"
+  "BIGINTER" > "BIGINTER_def"
+
+const_maps
+  "count" > "HOL4Base.pred_set.count"
+  "UNIV" > "HOL4Base.pred_set.UNIV"
+  "UNION" > "HOL4Base.pred_set.UNION"
+  "SURJ" > "HOL4Base.pred_set.SURJ"
+  "SUBSET" > "HOL4Base.pred_set.SUBSET"
+  "SING" > "HOL4Base.pred_set.SING"
+  "REST" > "HOL4Base.pred_set.REST"
+  "PSUBSET" > "HOL4Base.pred_set.PSUBSET"
+  "ITSET_tupled" > "HOL4Base.pred_set.ITSET_tupled"
+  "ITSET" > "HOL4Base.pred_set.ITSET"
+  "INTER" > "HOL4Base.pred_set.INTER"
+  "INSERT" > "HOL4Base.pred_set.INSERT"
+  "INJ" > "HOL4Base.pred_set.INJ"
+  "INFINITE" > "HOL4Base.pred_set.INFINITE"
+  "IMAGE" > "HOL4Base.pred_set.IMAGE"
+  "FINITE" > "HOL4Base.pred_set.FINITE"
+  "EMPTY" > "HOL4Base.pred_set.EMPTY"
+  "DISJOINT" > "HOL4Base.pred_set.DISJOINT"
+  "DIFF" > "HOL4Base.pred_set.DIFF"
+  "DELETE" > "HOL4Base.pred_set.DELETE"
+  "CROSS" > "HOL4Base.pred_set.CROSS"
+  "COMPL" > "HOL4Base.pred_set.COMPL"
+  "BIJ" > "HOL4Base.pred_set.BIJ"
+  "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
+  "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
+
+thm_maps
+  "count_primdef" > "HOL4Base.pred_set.count_primdef"
+  "count_def" > "HOL4Base.pred_set.count_def"
+  "UNIV_def" > "HOL4Base.pred_set.UNIV_def"
+  "UNIV_SUBSET" > "HOL4Base.pred_set.UNIV_SUBSET"
+  "UNIV_NOT_EMPTY" > "HOL4Base.pred_set.UNIV_NOT_EMPTY"
+  "UNIV_DEF" > "HOL4Base.pred_set.UNIV_DEF"
+  "UNION_def" > "HOL4Base.pred_set.UNION_def"
+  "UNION_UNIV" > "HOL4Base.pred_set.UNION_UNIV"
+  "UNION_SUBSET" > "HOL4Base.pred_set.UNION_SUBSET"
+  "UNION_OVER_INTER" > "HOL4Base.pred_set.UNION_OVER_INTER"
+  "UNION_IDEMPOT" > "HOL4Base.pred_set.UNION_IDEMPOT"
+  "UNION_EMPTY" > "HOL4Base.pred_set.UNION_EMPTY"
+  "UNION_DEF" > "HOL4Base.pred_set.UNION_DEF"
+  "UNION_COMM" > "HOL4Base.pred_set.UNION_COMM"
+  "UNION_ASSOC" > "HOL4Base.pred_set.UNION_ASSOC"
+  "SURJ_def" > "HOL4Base.pred_set.SURJ_def"
+  "SURJ_ID" > "HOL4Base.pred_set.SURJ_ID"
+  "SURJ_EMPTY" > "HOL4Base.pred_set.SURJ_EMPTY"
+  "SURJ_DEF" > "HOL4Base.pred_set.SURJ_DEF"
+  "SURJ_COMPOSE" > "HOL4Base.pred_set.SURJ_COMPOSE"
+  "SUBSET_def" > "HOL4Base.pred_set.SUBSET_def"
+  "SUBSET_UNIV" > "HOL4Base.pred_set.SUBSET_UNIV"
+  "SUBSET_UNION_ABSORPTION" > "HOL4Base.pred_set.SUBSET_UNION_ABSORPTION"
+  "SUBSET_UNION" > "HOL4Base.pred_set.SUBSET_UNION"
+  "SUBSET_TRANS" > "HOL4Base.pred_set.SUBSET_TRANS"
+  "SUBSET_REFL" > "HOL4Base.pred_set.SUBSET_REFL"
+  "SUBSET_INTER_ABSORPTION" > "HOL4Base.pred_set.SUBSET_INTER_ABSORPTION"
+  "SUBSET_INTER" > "HOL4Base.pred_set.SUBSET_INTER"
+  "SUBSET_INSERT_DELETE" > "HOL4Base.pred_set.SUBSET_INSERT_DELETE"
+  "SUBSET_INSERT" > "HOL4Base.pred_set.SUBSET_INSERT"
+  "SUBSET_FINITE" > "HOL4Base.pred_set.SUBSET_FINITE"
+  "SUBSET_EMPTY" > "HOL4Base.pred_set.SUBSET_EMPTY"
+  "SUBSET_DELETE" > "HOL4Base.pred_set.SUBSET_DELETE"
+  "SUBSET_DEF" > "HOL4Base.pred_set.SUBSET_DEF"
+  "SUBSET_BIGINTER" > "HOL4Base.pred_set.SUBSET_BIGINTER"
+  "SUBSET_ANTISYM" > "HOL4Base.pred_set.SUBSET_ANTISYM"
+  "SPECIFICATION" > "HOL4Base.bool.IN_DEF"
+  "SING_def" > "HOL4Base.pred_set.SING_def"
+  "SING_IFF_EMPTY_REST" > "HOL4Base.pred_set.SING_IFF_EMPTY_REST"
+  "SING_IFF_CARD1" > "HOL4Base.pred_set.SING_IFF_CARD1"
+  "SING_FINITE" > "HOL4Base.pred_set.SING_FINITE"
+  "SING_DELETE" > "HOL4Base.pred_set.SING_DELETE"
+  "SING_DEF" > "HOL4Base.pred_set.SING_DEF"
+  "SING" > "HOL4Base.pred_set.SING"
+  "SET_MINIMUM" > "HOL4Base.pred_set.SET_MINIMUM"
+  "SET_CASES" > "HOL4Base.pred_set.SET_CASES"
+  "RINV_DEF" > "HOL4Base.pred_set.RINV_DEF"
+  "REST_def" > "HOL4Base.pred_set.REST_def"
+  "REST_SUBSET" > "HOL4Base.pred_set.REST_SUBSET"
+  "REST_SING" > "HOL4Base.pred_set.REST_SING"
+  "REST_PSUBSET" > "HOL4Base.pred_set.REST_PSUBSET"
+  "REST_DEF" > "HOL4Base.pred_set.REST_DEF"
+  "PSUBSET_def" > "HOL4Base.pred_set.PSUBSET_def"
+  "PSUBSET_UNIV" > "HOL4Base.pred_set.PSUBSET_UNIV"
+  "PSUBSET_TRANS" > "HOL4Base.pred_set.PSUBSET_TRANS"
+  "PSUBSET_MEMBER" > "HOL4Base.pred_set.PSUBSET_MEMBER"
+  "PSUBSET_IRREFL" > "HOL4Base.pred_set.PSUBSET_IRREFL"
+  "PSUBSET_INSERT_SUBSET" > "HOL4Base.pred_set.PSUBSET_INSERT_SUBSET"
+  "PSUBSET_FINITE" > "HOL4Base.pred_set.PSUBSET_FINITE"
+  "PSUBSET_DEF" > "HOL4Base.pred_set.PSUBSET_DEF"
+  "NUM_SET_WOP" > "HOL4Base.pred_set.NUM_SET_WOP"
+  "NOT_UNIV_PSUBSET" > "HOL4Base.pred_set.NOT_UNIV_PSUBSET"
+  "NOT_SING_EMPTY" > "HOL4Base.pred_set.NOT_SING_EMPTY"
+  "NOT_PSUBSET_EMPTY" > "HOL4Base.pred_set.NOT_PSUBSET_EMPTY"
+  "NOT_IN_FINITE" > "HOL4Base.pred_set.NOT_IN_FINITE"
+  "NOT_IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
+  "NOT_INSERT_EMPTY" > "HOL4Base.pred_set.NOT_INSERT_EMPTY"
+  "NOT_EQUAL_SETS" > "HOL4Base.pred_set.NOT_EQUAL_SETS"
+  "NOT_EMPTY_SING" > "HOL4Base.pred_set.NOT_EMPTY_SING"
+  "NOT_EMPTY_INSERT" > "HOL4Base.pred_set.NOT_EMPTY_INSERT"
+  "MEMBER_NOT_EMPTY" > "HOL4Base.pred_set.MEMBER_NOT_EMPTY"
+  "LINV_DEF" > "HOL4Base.pred_set.LINV_DEF"
+  "LESS_CARD_DIFF" > "HOL4Base.pred_set.LESS_CARD_DIFF"
+  "ITSET_tupled_primitive_def" > "HOL4Base.pred_set.ITSET_tupled_primitive_def"
+  "ITSET_tupled_def" > "HOL4Base.pred_set.ITSET_tupled_def"
+  "ITSET_def" > "HOL4Base.pred_set.ITSET_def"
+  "ITSET_curried_def" > "HOL4Base.pred_set.ITSET_curried_def"
+  "ITSET_THM" > "HOL4Base.pred_set.ITSET_THM"
+  "ITSET_IND" > "HOL4Base.pred_set.ITSET_IND"
+  "ITSET_EMPTY" > "HOL4Base.pred_set.ITSET_EMPTY"
+  "IN_UNIV" > "HOL4Base.pred_set.IN_UNIV"
+  "IN_UNION" > "HOL4Base.pred_set.IN_UNION"
+  "IN_SING" > "HOL4Base.pred_set.IN_SING"
+  "IN_INTER" > "HOL4Base.pred_set.IN_INTER"
+  "IN_INSERT" > "HOL4Base.pred_set.IN_INSERT"
+  "IN_INFINITE_NOT_FINITE" > "HOL4Base.pred_set.IN_INFINITE_NOT_FINITE"
+  "IN_IMAGE" > "HOL4Base.pred_set.IN_IMAGE"
+  "IN_DISJOINT" > "HOL4Base.pred_set.IN_DISJOINT"
+  "IN_DIFF" > "HOL4Base.pred_set.IN_DIFF"
+  "IN_DELETE_EQ" > "HOL4Base.pred_set.IN_DELETE_EQ"
+  "IN_DELETE" > "HOL4Base.pred_set.IN_DELETE"
+  "IN_CROSS" > "HOL4Base.pred_set.IN_CROSS"
+  "IN_COUNT" > "HOL4Base.pred_set.IN_COUNT"
+  "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
+  "IN_BIGUNION" > "HOL4Base.pred_set.IN_BIGUNION"
+  "IN_BIGINTER" > "HOL4Base.pred_set.IN_BIGINTER"
+  "INTER_def" > "HOL4Base.pred_set.INTER_def"
+  "INTER_UNIV" > "HOL4Base.pred_set.INTER_UNIV"
+  "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
+  "INTER_SUBSET" > "HOL4Base.pred_set.INTER_SUBSET"
+  "INTER_OVER_UNION" > "HOL4Base.pred_set.INTER_OVER_UNION"
+  "INTER_IDEMPOT" > "HOL4Base.pred_set.INTER_IDEMPOT"
+  "INTER_FINITE" > "HOL4Base.pred_set.INTER_FINITE"
+  "INTER_EMPTY" > "HOL4Base.pred_set.INTER_EMPTY"
+  "INTER_DEF" > "HOL4Base.pred_set.INTER_DEF"
+  "INTER_COMM" > "HOL4Base.pred_set.INTER_COMM"
+  "INTER_ASSOC" > "HOL4Base.pred_set.INTER_ASSOC"
+  "INSERT_def" > "HOL4Base.pred_set.INSERT_def"
+  "INSERT_UNIV" > "HOL4Base.pred_set.INSERT_UNIV"
+  "INSERT_UNION_EQ" > "HOL4Base.pred_set.INSERT_UNION_EQ"
+  "INSERT_UNION" > "HOL4Base.pred_set.INSERT_UNION"
+  "INSERT_SUBSET" > "HOL4Base.pred_set.INSERT_SUBSET"
+  "INSERT_SING_UNION" > "HOL4Base.pred_set.INSERT_SING_UNION"
+  "INSERT_INTER" > "HOL4Base.pred_set.INSERT_INTER"
+  "INSERT_INSERT" > "HOL4Base.pred_set.INSERT_INSERT"
+  "INSERT_DIFF" > "HOL4Base.pred_set.INSERT_DIFF"
+  "INSERT_DELETE" > "HOL4Base.pred_set.INSERT_DELETE"
+  "INSERT_DEF" > "HOL4Base.pred_set.INSERT_DEF"
+  "INSERT_COMM" > "HOL4Base.pred_set.INSERT_COMM"
+  "INJ_def" > "HOL4Base.pred_set.INJ_def"
+  "INJ_ID" > "HOL4Base.pred_set.INJ_ID"
+  "INJ_EMPTY" > "HOL4Base.pred_set.INJ_EMPTY"
+  "INJ_DEF" > "HOL4Base.pred_set.INJ_DEF"
+  "INJ_COMPOSE" > "HOL4Base.pred_set.INJ_COMPOSE"
+  "INFINITE_def" > "HOL4Base.pred_set.INFINITE_def"
+  "INFINITE_UNIV" > "HOL4Base.pred_set.INFINITE_UNIV"
+  "INFINITE_SUBSET" > "HOL4Base.pred_set.INFINITE_SUBSET"
+  "INFINITE_INHAB" > "HOL4Base.pred_set.INFINITE_INHAB"
+  "INFINITE_DIFF_FINITE" > "HOL4Base.pred_set.INFINITE_DIFF_FINITE"
+  "INFINITE_DEF" > "HOL4Base.pred_set.INFINITE_DEF"
+  "IMAGE_def" > "HOL4Base.pred_set.IMAGE_def"
+  "IMAGE_UNION" > "HOL4Base.pred_set.IMAGE_UNION"
+  "IMAGE_SURJ" > "HOL4Base.pred_set.IMAGE_SURJ"
+  "IMAGE_SUBSET" > "HOL4Base.pred_set.IMAGE_SUBSET"
+  "IMAGE_INTER" > "HOL4Base.pred_set.IMAGE_INTER"
+  "IMAGE_INSERT" > "HOL4Base.pred_set.IMAGE_INSERT"
+  "IMAGE_IN" > "HOL4Base.pred_set.IMAGE_IN"
+  "IMAGE_ID" > "HOL4Base.pred_set.IMAGE_ID"
+  "IMAGE_FINITE" > "HOL4Base.pred_set.IMAGE_FINITE"
+  "IMAGE_EQ_EMPTY" > "HOL4Base.pred_set.IMAGE_EQ_EMPTY"
+  "IMAGE_EMPTY" > "HOL4Base.pred_set.IMAGE_EMPTY"
+  "IMAGE_DELETE" > "HOL4Base.pred_set.IMAGE_DELETE"
+  "IMAGE_DEF" > "HOL4Base.pred_set.IMAGE_DEF"
+  "IMAGE_COMPOSE" > "HOL4Base.pred_set.IMAGE_COMPOSE"
+  "IMAGE_11_INFINITE" > "HOL4Base.pred_set.IMAGE_11_INFINITE"
+  "GSPECIFICATION" > "HOL4Base.pred_set.GSPECIFICATION"
+  "FINITE_def" > "HOL4Base.pred_set.FINITE_def"
+  "FINITE_WEAK_ENUMERATE" > "HOL4Base.pred_set.FINITE_WEAK_ENUMERATE"
+  "FINITE_UNION" > "HOL4Base.pred_set.FINITE_UNION"
+  "FINITE_SING" > "HOL4Base.pred_set.FINITE_SING"
+  "FINITE_PSUBSET_UNIV" > "HOL4Base.pred_set.FINITE_PSUBSET_UNIV"
+  "FINITE_PSUBSET_INFINITE" > "HOL4Base.pred_set.FINITE_PSUBSET_INFINITE"
+  "FINITE_ISO_NUM" > "HOL4Base.pred_set.FINITE_ISO_NUM"
+  "FINITE_INSERT" > "HOL4Base.pred_set.FINITE_INSERT"
+  "FINITE_INDUCT" > "HOL4Base.pred_set.FINITE_INDUCT"
+  "FINITE_EMPTY" > "HOL4Base.pred_set.FINITE_EMPTY"
+  "FINITE_DIFF" > "HOL4Base.pred_set.FINITE_DIFF"
+  "FINITE_DELETE" > "HOL4Base.pred_set.FINITE_DELETE"
+  "FINITE_DEF" > "HOL4Base.pred_set.FINITE_DEF"
+  "FINITE_CROSS_EQ" > "HOL4Base.pred_set.FINITE_CROSS_EQ"
+  "FINITE_CROSS" > "HOL4Base.pred_set.FINITE_CROSS"
+  "FINITE_COUNT" > "HOL4Base.pred_set.FINITE_COUNT"
+  "FINITE_COMPLETE_INDUCTION" > "HOL4Base.pred_set.FINITE_COMPLETE_INDUCTION"
+  "FINITE_BIGUNION" > "HOL4Base.pred_set.FINITE_BIGUNION"
+  "EXTENSION" > "HOL4Base.pred_set.EXTENSION"
+  "EQ_UNIV" > "HOL4Base.pred_set.EQ_UNIV"
+  "EQUAL_SING" > "HOL4Base.pred_set.EQUAL_SING"
+  "EMPTY_def" > "HOL4Base.pred_set.EMPTY_def"
+  "EMPTY_UNION" > "HOL4Base.pred_set.EMPTY_UNION"
+  "EMPTY_SUBSET" > "HOL4Base.pred_set.EMPTY_SUBSET"
+  "EMPTY_NOT_UNIV" > "HOL4Base.pred_set.EMPTY_NOT_UNIV"
+  "EMPTY_DIFF" > "HOL4Base.pred_set.EMPTY_DIFF"
+  "EMPTY_DELETE" > "HOL4Base.pred_set.EMPTY_DELETE"
+  "EMPTY_DEF" > "HOL4Base.pred_set.EMPTY_DEF"
+  "DISJOINT_def" > "HOL4Base.pred_set.DISJOINT_def"
+  "DISJOINT_UNION_BOTH" > "HOL4Base.pred_set.DISJOINT_UNION_BOTH"
+  "DISJOINT_UNION" > "HOL4Base.pred_set.DISJOINT_UNION"
+  "DISJOINT_SYM" > "HOL4Base.pred_set.DISJOINT_SYM"
+  "DISJOINT_SING_EMPTY" > "HOL4Base.pred_set.DISJOINT_SING_EMPTY"
+  "DISJOINT_INSERT" > "HOL4Base.pred_set.DISJOINT_INSERT"
+  "DISJOINT_EMPTY_REFL" > "HOL4Base.pred_set.DISJOINT_EMPTY_REFL"
+  "DISJOINT_EMPTY" > "HOL4Base.pred_set.DISJOINT_EMPTY"
+  "DISJOINT_DELETE_SYM" > "HOL4Base.pred_set.DISJOINT_DELETE_SYM"
+  "DISJOINT_DEF" > "HOL4Base.pred_set.DISJOINT_DEF"
+  "DISJOINT_BIGUNION" > "HOL4Base.pred_set.DISJOINT_BIGUNION"
+  "DISJOINT_BIGINTER" > "HOL4Base.pred_set.DISJOINT_BIGINTER"
+  "DIFF_def" > "HOL4Base.pred_set.DIFF_def"
+  "DIFF_UNIV" > "HOL4Base.pred_set.DIFF_UNIV"
+  "DIFF_INSERT" > "HOL4Base.pred_set.DIFF_INSERT"
+  "DIFF_EQ_EMPTY" > "HOL4Base.pred_set.DIFF_EQ_EMPTY"
+  "DIFF_EMPTY" > "HOL4Base.pred_set.DIFF_EMPTY"
+  "DIFF_DIFF" > "HOL4Base.pred_set.DIFF_DIFF"
+  "DIFF_DEF" > "HOL4Base.pred_set.DIFF_DEF"
+  "DELETE_def" > "HOL4Base.pred_set.DELETE_def"
+  "DELETE_SUBSET" > "HOL4Base.pred_set.DELETE_SUBSET"
+  "DELETE_NON_ELEMENT" > "HOL4Base.pred_set.DELETE_NON_ELEMENT"
+  "DELETE_INTER" > "HOL4Base.pred_set.DELETE_INTER"
+  "DELETE_INSERT" > "HOL4Base.pred_set.DELETE_INSERT"
+  "DELETE_EQ_SING" > "HOL4Base.pred_set.DELETE_EQ_SING"
+  "DELETE_DELETE" > "HOL4Base.pred_set.DELETE_DELETE"
+  "DELETE_DEF" > "HOL4Base.pred_set.DELETE_DEF"
+  "DELETE_COMM" > "HOL4Base.pred_set.DELETE_COMM"
+  "DECOMPOSITION" > "HOL4Base.pred_set.DECOMPOSITION"
+  "CROSS_def" > "HOL4Base.pred_set.CROSS_def"
+  "CROSS_SUBSET" > "HOL4Base.pred_set.CROSS_SUBSET"
+  "CROSS_SINGS" > "HOL4Base.pred_set.CROSS_SINGS"
+  "CROSS_INSERT_RIGHT" > "HOL4Base.pred_set.CROSS_INSERT_RIGHT"
+  "CROSS_INSERT_LEFT" > "HOL4Base.pred_set.CROSS_INSERT_LEFT"
+  "CROSS_EMPTY" > "HOL4Base.pred_set.CROSS_EMPTY"
+  "CROSS_DEF" > "HOL4Base.pred_set.CROSS_DEF"
+  "COUNT_ZERO" > "HOL4Base.pred_set.COUNT_ZERO"
+  "COUNT_SUC" > "HOL4Base.pred_set.COUNT_SUC"
+  "COMPONENT" > "HOL4Base.pred_set.COMPONENT"
+  "COMPL_def" > "HOL4Base.pred_set.COMPL_def"
+  "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
+  "COMPL_EMPTY" > "HOL4Base.pred_set.COMPL_EMPTY"
+  "COMPL_DEF" > "HOL4Base.pred_set.COMPL_DEF"
+  "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
+  "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
+  "CHOICE_SING" > "HOL4Base.pred_set.CHOICE_SING"
+  "CHOICE_NOT_IN_REST" > "HOL4Base.pred_set.CHOICE_NOT_IN_REST"
+  "CHOICE_INSERT_REST" > "HOL4Base.pred_set.CHOICE_INSERT_REST"
+  "CHOICE_DEF" > "HOL4Base.pred_set.CHOICE_DEF"
+  "CARD_UNION" > "HOL4Base.pred_set.CARD_UNION"
+  "CARD_SUBSET" > "HOL4Base.pred_set.CARD_SUBSET"
+  "CARD_SING_CROSS" > "HOL4Base.pred_set.CARD_SING_CROSS"
+  "CARD_SING" > "HOL4Base.pred_set.CARD_SING"
+  "CARD_PSUBSET" > "HOL4Base.pred_set.CARD_PSUBSET"
+  "CARD_INTER_LESS_EQ" > "HOL4Base.pred_set.CARD_INTER_LESS_EQ"
+  "CARD_INSERT" > "HOL4Base.pred_set.CARD_INSERT"
+  "CARD_EQ_0" > "HOL4Base.pred_set.CARD_EQ_0"
+  "CARD_EMPTY" > "HOL4Base.pred_set.CARD_EMPTY"
+  "CARD_DIFF" > "HOL4Base.pred_set.CARD_DIFF"
+  "CARD_DELETE" > "HOL4Base.pred_set.CARD_DELETE"
+  "CARD_DEF" > "HOL4Base.pred_set.CARD_DEF"
+  "CARD_CROSS" > "HOL4Base.pred_set.CARD_CROSS"
+  "CARD_COUNT" > "HOL4Base.pred_set.CARD_COUNT"
+  "BIJ_def" > "HOL4Base.pred_set.BIJ_def"
+  "BIJ_ID" > "HOL4Base.pred_set.BIJ_ID"
+  "BIJ_EMPTY" > "HOL4Base.pred_set.BIJ_EMPTY"
+  "BIJ_DEF" > "HOL4Base.pred_set.BIJ_DEF"
+  "BIJ_COMPOSE" > "HOL4Base.pred_set.BIJ_COMPOSE"
+  "BIGUNION_def" > "HOL4Base.pred_set.BIGUNION_def"
+  "BIGUNION_UNION" > "HOL4Base.pred_set.BIGUNION_UNION"
+  "BIGUNION_SUBSET" > "HOL4Base.pred_set.BIGUNION_SUBSET"
+  "BIGUNION_SING" > "HOL4Base.pred_set.BIGUNION_SING"
+  "BIGUNION_INSERT" > "HOL4Base.pred_set.BIGUNION_INSERT"
+  "BIGUNION_EMPTY" > "HOL4Base.pred_set.BIGUNION_EMPTY"
+  "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
+  "BIGINTER_def" > "HOL4Base.pred_set.BIGINTER_def"
+  "BIGINTER_SING" > "HOL4Base.pred_set.BIGINTER_SING"
+  "BIGINTER_INTER" > "HOL4Base.pred_set.BIGINTER_INTER"
+  "BIGINTER_INSERT" > "HOL4Base.pred_set.BIGINTER_INSERT"
+  "BIGINTER_EMPTY" > "HOL4Base.pred_set.BIGINTER_EMPTY"
+  "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
+  "ABSORPTION" > "HOL4Base.pred_set.ABSORPTION"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prim_rec.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,72 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "wellfounded" > "wellfounded_primdef"
+  "measure" > "measure_primdef"
+  "SIMP_REC_REL" > "SIMP_REC_REL_def"
+  "SIMP_REC" > "SIMP_REC_def"
+  "PRIM_REC_FUN" > "PRIM_REC_FUN_def"
+  "PRIM_REC" > "PRIM_REC_def"
+  "PRE" > "PRE_def"
+
+const_maps
+  "wellfounded" > "HOL4Base.prim_rec.wellfounded"
+  "measure" > "HOL4Base.prim_rec.measure"
+  "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
+  "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
+  "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
+  "PRE" > "HOL4Base.prim_rec.PRE"
+  "<" > "Orderings.ord_class.less" :: "nat => nat => bool"
+
+thm_maps
+  "wellfounded_primdef" > "HOL4Base.prim_rec.wellfounded_primdef"
+  "wellfounded_def" > "HOL4Base.prim_rec.wellfounded_def"
+  "num_Axiom_old" > "HOL4Base.prim_rec.num_Axiom_old"
+  "num_Axiom" > "HOL4Base.prim_rec.num_Axiom"
+  "measure_thm" > "HOL4Base.prim_rec.measure_thm"
+  "measure_primdef" > "HOL4Base.prim_rec.measure_primdef"
+  "measure_def" > "HOL4Base.prim_rec.measure_def"
+  "WF_measure" > "HOL4Base.prim_rec.WF_measure"
+  "WF_PRED" > "HOL4Base.prim_rec.WF_PRED"
+  "WF_LESS" > "HOL4Base.prim_rec.WF_LESS"
+  "WF_IFF_WELLFOUNDED" > "HOL4Base.prim_rec.WF_IFF_WELLFOUNDED"
+  "SUC_LESS" > "Nat.Suc_lessD"
+  "SUC_ID" > "Nat.Suc_n_not_n"
+  "SIMP_REC_THM" > "HOL4Base.prim_rec.SIMP_REC_THM"
+  "SIMP_REC_REL_def" > "HOL4Base.prim_rec.SIMP_REC_REL_def"
+  "SIMP_REC_REL_UNIQUE_RESULT" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE_RESULT"
+  "SIMP_REC_REL_UNIQUE" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE"
+  "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
+  "SIMP_REC_EXISTS" > "HOL4Base.prim_rec.SIMP_REC_EXISTS"
+  "SIMP_REC" > "HOL4Base.prim_rec.SIMP_REC"
+  "PRIM_REC_def" > "HOL4Base.prim_rec.PRIM_REC_def"
+  "PRIM_REC_THM" > "HOL4Base.prim_rec.PRIM_REC_THM"
+  "PRIM_REC_FUN_def" > "HOL4Base.prim_rec.PRIM_REC_FUN_def"
+  "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
+  "PRIM_REC_EQN" > "HOL4Base.prim_rec.PRIM_REC_EQN"
+  "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
+  "PRE_def" > "HOL4Base.prim_rec.PRE_def"
+  "PRE_DEF" > "HOL4Base.prim_rec.PRE_DEF"
+  "PRE" > "HOL4Base.prim_rec.PRE"
+  "NOT_LESS_EQ" > "HOL4Base.prim_rec.NOT_LESS_EQ"
+  "NOT_LESS_0" > "Nat.not_less0"
+  "LESS_THM" > "HOL4Base.prim_rec.LESS_THM"
+  "LESS_SUC_SUC" > "HOL4Base.prim_rec.LESS_SUC_SUC"
+  "LESS_SUC_REFL" > "Nat.lessI"
+  "LESS_SUC_IMP" > "HOL4Base.prim_rec.LESS_SUC_IMP"
+  "LESS_SUC" > "Nat.less_SucI"
+  "LESS_REFL" > "Nat.less_not_refl"
+  "LESS_NOT_EQ" > "Nat.less_not_refl3"
+  "LESS_MONO" > "Nat.Suc_mono"
+  "LESS_LEMMA2" > "HOL4Base.prim_rec.LESS_LEMMA2"
+  "LESS_LEMMA1" > "HOL4Base.prim_rec.LESS_LEMMA1"
+  "LESS_DEF" > "Compatibility.LESS_DEF"
+  "LESS_0_0" > "HOL4Base.prim_rec.LESS_0_0"
+  "LESS_0" > "Nat.zero_less_Suc"
+  "INV_SUC_EQ" > "Nat.nat.inject"
+  "EQ_LESS" > "HOL4Base.prim_rec.EQ_LESS"
+  "DC" > "HOL4Base.prim_rec.DC"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prime.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,17 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "prime" > "prime_primdef"
+
+const_maps
+  "prime" > "HOL4Base.prime.prime"
+
+thm_maps
+  "prime_primdef" > "HOL4Base.prime.prime_primdef"
+  "prime_def" > "HOL4Base.prime.prime_def"
+  "NOT_PRIME_1" > "HOL4Base.prime.NOT_PRIME_1"
+  "NOT_PRIME_0" > "HOL4Base.prime.NOT_PRIME_0"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,61 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "prob" > "prob_primdef"
+  "algebra_measure" > "algebra_measure_primdef"
+  "alg_measure" > "alg_measure_primdef"
+
+const_maps
+  "prob" > "HOL4Prob.prob.prob"
+  "algebra_measure" > "HOL4Prob.prob.algebra_measure"
+
+thm_maps
+  "prob_primdef" > "HOL4Prob.prob.prob_primdef"
+  "prob_def" > "HOL4Prob.prob.prob_def"
+  "algebra_measure_primdef" > "HOL4Prob.prob.algebra_measure_primdef"
+  "algebra_measure_def" > "HOL4Prob.prob.algebra_measure_def"
+  "alg_measure_def" > "HOL4Prob.prob.alg_measure_def"
+  "X_LE_PROB" > "HOL4Prob.prob.X_LE_PROB"
+  "PROB_SUP_EXISTS2" > "HOL4Prob.prob.PROB_SUP_EXISTS2"
+  "PROB_SUP_EXISTS1" > "HOL4Prob.prob.PROB_SUP_EXISTS1"
+  "PROB_SUBSET_MONO" > "HOL4Prob.prob.PROB_SUBSET_MONO"
+  "PROB_STL" > "HOL4Prob.prob.PROB_STL"
+  "PROB_SHD" > "HOL4Prob.prob.PROB_SHD"
+  "PROB_SDROP" > "HOL4Prob.prob.PROB_SDROP"
+  "PROB_RANGE" > "HOL4Prob.prob.PROB_RANGE"
+  "PROB_POS" > "HOL4Prob.prob.PROB_POS"
+  "PROB_MAX" > "HOL4Prob.prob.PROB_MAX"
+  "PROB_LE_X" > "HOL4Prob.prob.PROB_LE_X"
+  "PROB_INTER_SHD" > "HOL4Prob.prob.PROB_INTER_SHD"
+  "PROB_INTER_HALVES" > "HOL4Prob.prob.PROB_INTER_HALVES"
+  "PROB_COMPL_LE1" > "HOL4Prob.prob.PROB_COMPL_LE1"
+  "PROB_COMPL" > "HOL4Prob.prob.PROB_COMPL"
+  "PROB_BASIC" > "HOL4Prob.prob.PROB_BASIC"
+  "PROB_ALGEBRA" > "HOL4Prob.prob.PROB_ALGEBRA"
+  "PROB_ALG" > "HOL4Prob.prob.PROB_ALG"
+  "PROB_ADDITIVE" > "HOL4Prob.prob.PROB_ADDITIVE"
+  "ALG_TWINS_MEASURE" > "HOL4Prob.prob.ALG_TWINS_MEASURE"
+  "ALG_MEASURE_TLS" > "HOL4Prob.prob.ALG_MEASURE_TLS"
+  "ALG_MEASURE_POS" > "HOL4Prob.prob.ALG_MEASURE_POS"
+  "ALG_MEASURE_COMPL" > "HOL4Prob.prob.ALG_MEASURE_COMPL"
+  "ALG_MEASURE_BASIC" > "HOL4Prob.prob.ALG_MEASURE_BASIC"
+  "ALG_MEASURE_APPEND" > "HOL4Prob.prob.ALG_MEASURE_APPEND"
+  "ALG_MEASURE_ADDITIVE" > "HOL4Prob.prob.ALG_MEASURE_ADDITIVE"
+  "ALG_CANON_PREFS_MONO" > "HOL4Prob.prob.ALG_CANON_PREFS_MONO"
+  "ALG_CANON_MONO" > "HOL4Prob.prob.ALG_CANON_MONO"
+  "ALG_CANON_MERGE_MONO" > "HOL4Prob.prob.ALG_CANON_MERGE_MONO"
+  "ALG_CANON_FIND_MONO" > "HOL4Prob.prob.ALG_CANON_FIND_MONO"
+  "ALG_CANON2_MONO" > "HOL4Prob.prob.ALG_CANON2_MONO"
+  "ALG_CANON1_MONO" > "HOL4Prob.prob.ALG_CANON1_MONO"
+  "ALGEBRA_MEASURE_RANGE" > "HOL4Prob.prob.ALGEBRA_MEASURE_RANGE"
+  "ALGEBRA_MEASURE_POS" > "HOL4Prob.prob.ALGEBRA_MEASURE_POS"
+  "ALGEBRA_MEASURE_MONO_EMBED" > "HOL4Prob.prob.ALGEBRA_MEASURE_MONO_EMBED"
+  "ALGEBRA_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_MEASURE_MAX"
+  "ALGEBRA_MEASURE_DEF_ALT" > "HOL4Prob.prob.ALGEBRA_MEASURE_DEF_ALT"
+  "ALGEBRA_MEASURE_BASIC" > "HOL4Prob.prob.ALGEBRA_MEASURE_BASIC"
+  "ALGEBRA_CANON_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_CANON_MEASURE_MAX"
+  "ABS_PROB" > "HOL4Prob.prob.ABS_PROB"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob_algebra.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,54 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "measurable" > "measurable_primdef"
+  "algebra_embed" > "algebra_embed_primdef"
+  "alg_embed" > "alg_embed_primdef"
+
+const_maps
+  "measurable" > "HOL4Prob.prob_algebra.measurable"
+
+thm_maps
+  "measurable_primdef" > "HOL4Prob.prob_algebra.measurable_primdef"
+  "measurable_def" > "HOL4Prob.prob_algebra.measurable_def"
+  "algebra_embed_def" > "HOL4Prob.prob_algebra.algebra_embed_def"
+  "alg_embed_def" > "HOL4Prob.prob_algebra.alg_embed_def"
+  "MEASURABLE_UNION" > "HOL4Prob.prob_algebra.MEASURABLE_UNION"
+  "MEASURABLE_STL" > "HOL4Prob.prob_algebra.MEASURABLE_STL"
+  "MEASURABLE_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_SHD"
+  "MEASURABLE_SDROP" > "HOL4Prob.prob_algebra.MEASURABLE_SDROP"
+  "MEASURABLE_INTER_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_SHD"
+  "MEASURABLE_INTER_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_HALVES"
+  "MEASURABLE_INTER" > "HOL4Prob.prob_algebra.MEASURABLE_INTER"
+  "MEASURABLE_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_HALVES"
+  "MEASURABLE_COMPL" > "HOL4Prob.prob_algebra.MEASURABLE_COMPL"
+  "MEASURABLE_BASIC" > "HOL4Prob.prob_algebra.MEASURABLE_BASIC"
+  "MEASURABLE_ALGEBRA" > "HOL4Prob.prob_algebra.MEASURABLE_ALGEBRA"
+  "INTER_STL" > "HOL4Prob.prob_algebra.INTER_STL"
+  "HALVES_INTER" > "HOL4Prob.prob_algebra.HALVES_INTER"
+  "COMPL_SHD" > "HOL4Prob.prob_algebra.COMPL_SHD"
+  "ALG_EMBED_TWINS" > "HOL4Prob.prob_algebra.ALG_EMBED_TWINS"
+  "ALG_EMBED_PREFIX_SUBSET" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX_SUBSET"
+  "ALG_EMBED_PREFIX" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX"
+  "ALG_EMBED_POPULATED" > "HOL4Prob.prob_algebra.ALG_EMBED_POPULATED"
+  "ALG_EMBED_NIL" > "HOL4Prob.prob_algebra.ALG_EMBED_NIL"
+  "ALG_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALG_EMBED_BASIC"
+  "ALG_CANON_REP" > "HOL4Prob.prob_algebra.ALG_CANON_REP"
+  "ALG_CANON_PREFS_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_PREFS_EMBED"
+  "ALG_CANON_MERGE_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_MERGE_EMBED"
+  "ALG_CANON_FIND_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_FIND_EMBED"
+  "ALG_CANON_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_EMBED"
+  "ALG_CANON2_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON2_EMBED"
+  "ALG_CANON1_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON1_EMBED"
+  "ALGEBRA_EMBED_TLS" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_TLS"
+  "ALGEBRA_EMBED_MEM" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_MEM"
+  "ALGEBRA_EMBED_COMPL" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_COMPL"
+  "ALGEBRA_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_BASIC"
+  "ALGEBRA_EMBED_APPEND" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_APPEND"
+  "ALGEBRA_CANON_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_UNIV"
+  "ALGEBRA_CANON_EMBED_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_UNIV"
+  "ALGEBRA_CANON_EMBED_EMPTY" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_EMPTY"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob_canon.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,147 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "algebra_canon" > "algebra_canon_primdef"
+  "alg_twinfree" > "alg_twinfree_primdef"
+  "alg_twin" > "alg_twin_primdef"
+  "alg_sorted" > "alg_sorted_primdef"
+  "alg_prefixfree" > "alg_prefixfree_primdef"
+  "alg_order_tupled" > "alg_order_tupled_def"
+  "alg_order" > "alg_order_primdef"
+  "alg_longest" > "alg_longest_primdef"
+  "alg_canon_prefs" > "alg_canon_prefs_primdef"
+  "alg_canon_merge" > "alg_canon_merge_primdef"
+  "alg_canon_find" > "alg_canon_find_primdef"
+  "alg_canon2" > "alg_canon2_primdef"
+  "alg_canon1" > "alg_canon1_primdef"
+  "alg_canon" > "alg_canon_primdef"
+
+const_maps
+  "algebra_canon" > "HOL4Prob.prob_canon.algebra_canon"
+  "alg_twinfree" > "HOL4Prob.prob_canon.alg_twinfree"
+  "alg_twin" > "HOL4Prob.prob_canon.alg_twin"
+  "alg_sorted" > "HOL4Prob.prob_canon.alg_sorted"
+  "alg_prefixfree" > "HOL4Prob.prob_canon.alg_prefixfree"
+  "alg_order_tupled" > "HOL4Prob.prob_canon.alg_order_tupled"
+  "alg_order" > "HOL4Prob.prob_canon.alg_order"
+  "alg_longest" > "HOL4Prob.prob_canon.alg_longest"
+  "alg_canon2" > "HOL4Prob.prob_canon.alg_canon2"
+  "alg_canon1" > "HOL4Prob.prob_canon.alg_canon1"
+  "alg_canon" > "HOL4Prob.prob_canon.alg_canon"
+
+thm_maps
+  "algebra_canon_primdef" > "HOL4Prob.prob_canon.algebra_canon_primdef"
+  "algebra_canon_def" > "HOL4Prob.prob_canon.algebra_canon_def"
+  "alg_twinfree_primitive_def" > "HOL4Prob.prob_canon.alg_twinfree_primitive_def"
+  "alg_twinfree_primdef" > "HOL4Prob.prob_canon.alg_twinfree_primdef"
+  "alg_twinfree_ind" > "HOL4Prob.prob_canon.alg_twinfree_ind"
+  "alg_twinfree_def" > "HOL4Prob.prob_canon.alg_twinfree_def"
+  "alg_twin_primdef" > "HOL4Prob.prob_canon.alg_twin_primdef"
+  "alg_twin_def" > "HOL4Prob.prob_canon.alg_twin_def"
+  "alg_sorted_primitive_def" > "HOL4Prob.prob_canon.alg_sorted_primitive_def"
+  "alg_sorted_primdef" > "HOL4Prob.prob_canon.alg_sorted_primdef"
+  "alg_sorted_ind" > "HOL4Prob.prob_canon.alg_sorted_ind"
+  "alg_sorted_def" > "HOL4Prob.prob_canon.alg_sorted_def"
+  "alg_prefixfree_primitive_def" > "HOL4Prob.prob_canon.alg_prefixfree_primitive_def"
+  "alg_prefixfree_primdef" > "HOL4Prob.prob_canon.alg_prefixfree_primdef"
+  "alg_prefixfree_ind" > "HOL4Prob.prob_canon.alg_prefixfree_ind"
+  "alg_prefixfree_def" > "HOL4Prob.prob_canon.alg_prefixfree_def"
+  "alg_order_tupled_primitive_def" > "HOL4Prob.prob_canon.alg_order_tupled_primitive_def"
+  "alg_order_tupled_def" > "HOL4Prob.prob_canon.alg_order_tupled_def"
+  "alg_order_primdef" > "HOL4Prob.prob_canon.alg_order_primdef"
+  "alg_order_ind" > "HOL4Prob.prob_canon.alg_order_ind"
+  "alg_order_def" > "HOL4Prob.prob_canon.alg_order_def"
+  "alg_order_curried_def" > "HOL4Prob.prob_canon.alg_order_curried_def"
+  "alg_longest_primdef" > "HOL4Prob.prob_canon.alg_longest_primdef"
+  "alg_longest_def" > "HOL4Prob.prob_canon.alg_longest_def"
+  "alg_canon_primdef" > "HOL4Prob.prob_canon.alg_canon_primdef"
+  "alg_canon_prefs_def" > "HOL4Prob.prob_canon.alg_canon_prefs_def"
+  "alg_canon_merge_def" > "HOL4Prob.prob_canon.alg_canon_merge_def"
+  "alg_canon_find_def" > "HOL4Prob.prob_canon.alg_canon_find_def"
+  "alg_canon_def" > "HOL4Prob.prob_canon.alg_canon_def"
+  "alg_canon2_primdef" > "HOL4Prob.prob_canon.alg_canon2_primdef"
+  "alg_canon2_def" > "HOL4Prob.prob_canon.alg_canon2_def"
+  "alg_canon1_primdef" > "HOL4Prob.prob_canon.alg_canon1_primdef"
+  "alg_canon1_def" > "HOL4Prob.prob_canon.alg_canon1_def"
+  "MEM_NIL_STEP" > "HOL4Prob.prob_canon.MEM_NIL_STEP"
+  "ALG_TWIN_SING" > "HOL4Prob.prob_canon.ALG_TWIN_SING"
+  "ALG_TWIN_REDUCE" > "HOL4Prob.prob_canon.ALG_TWIN_REDUCE"
+  "ALG_TWIN_NIL" > "HOL4Prob.prob_canon.ALG_TWIN_NIL"
+  "ALG_TWIN_CONS" > "HOL4Prob.prob_canon.ALG_TWIN_CONS"
+  "ALG_TWINS_PREFIX" > "HOL4Prob.prob_canon.ALG_TWINS_PREFIX"
+  "ALG_TWINFREE_TLS" > "HOL4Prob.prob_canon.ALG_TWINFREE_TLS"
+  "ALG_TWINFREE_TL" > "HOL4Prob.prob_canon.ALG_TWINFREE_TL"
+  "ALG_TWINFREE_STEP2" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP2"
+  "ALG_TWINFREE_STEP1" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP1"
+  "ALG_TWINFREE_STEP" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP"
+  "ALG_SORTED_TLS" > "HOL4Prob.prob_canon.ALG_SORTED_TLS"
+  "ALG_SORTED_TL" > "HOL4Prob.prob_canon.ALG_SORTED_TL"
+  "ALG_SORTED_STEP" > "HOL4Prob.prob_canon.ALG_SORTED_STEP"
+  "ALG_SORTED_PREFIXFREE_MEM_NIL" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_MEM_NIL"
+  "ALG_SORTED_PREFIXFREE_EQUALITY" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_EQUALITY"
+  "ALG_SORTED_MONO" > "HOL4Prob.prob_canon.ALG_SORTED_MONO"
+  "ALG_SORTED_MIN" > "HOL4Prob.prob_canon.ALG_SORTED_MIN"
+  "ALG_SORTED_FILTER" > "HOL4Prob.prob_canon.ALG_SORTED_FILTER"
+  "ALG_SORTED_DEF_ALT" > "HOL4Prob.prob_canon.ALG_SORTED_DEF_ALT"
+  "ALG_SORTED_APPEND" > "HOL4Prob.prob_canon.ALG_SORTED_APPEND"
+  "ALG_PREFIXFREE_TLS" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TLS"
+  "ALG_PREFIXFREE_TL" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TL"
+  "ALG_PREFIXFREE_STEP" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_STEP"
+  "ALG_PREFIXFREE_MONO" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_MONO"
+  "ALG_PREFIXFREE_FILTER" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_FILTER"
+  "ALG_PREFIXFREE_ELT" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_ELT"
+  "ALG_PREFIXFREE_APPEND" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_APPEND"
+  "ALG_ORDER_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_TRANS"
+  "ALG_ORDER_TOTAL" > "HOL4Prob.prob_canon.ALG_ORDER_TOTAL"
+  "ALG_ORDER_SNOC" > "HOL4Prob.prob_canon.ALG_ORDER_SNOC"
+  "ALG_ORDER_REFL" > "HOL4Prob.prob_canon.ALG_ORDER_REFL"
+  "ALG_ORDER_PREFIX_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_TRANS"
+  "ALG_ORDER_PREFIX_MONO" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_MONO"
+  "ALG_ORDER_PREFIX_ANTI" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_ANTI"
+  "ALG_ORDER_PREFIX" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX"
+  "ALG_ORDER_NIL" > "HOL4Prob.prob_canon.ALG_ORDER_NIL"
+  "ALG_ORDER_ANTISYM" > "HOL4Prob.prob_canon.ALG_ORDER_ANTISYM"
+  "ALG_LONGEST_TLS" > "HOL4Prob.prob_canon.ALG_LONGEST_TLS"
+  "ALG_LONGEST_TL" > "HOL4Prob.prob_canon.ALG_LONGEST_TL"
+  "ALG_LONGEST_HD" > "HOL4Prob.prob_canon.ALG_LONGEST_HD"
+  "ALG_LONGEST_APPEND" > "HOL4Prob.prob_canon.ALG_LONGEST_APPEND"
+  "ALG_CANON_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_SORTED_PREFIXFREE_TWINFREE"
+  "ALG_CANON_PREFS_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_SORTED"
+  "ALG_CANON_PREFS_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_PREFIXFREE"
+  "ALG_CANON_PREFS_HD" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_HD"
+  "ALG_CANON_PREFS_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_DELETES"
+  "ALG_CANON_PREFS_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_CONSTANT"
+  "ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE"
+  "ALG_CANON_MERGE_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SHORTENS"
+  "ALG_CANON_MERGE_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_PREFIXFREE_PRESERVE"
+  "ALG_CANON_MERGE_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_CONSTANT"
+  "ALG_CANON_IDEMPOT" > "HOL4Prob.prob_canon.ALG_CANON_IDEMPOT"
+  "ALG_CANON_FIND_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_FIND_SORTED"
+  "ALG_CANON_FIND_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_FIND_PREFIXFREE"
+  "ALG_CANON_FIND_HD" > "HOL4Prob.prob_canon.ALG_CANON_FIND_HD"
+  "ALG_CANON_FIND_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_FIND_DELETES"
+  "ALG_CANON_FIND_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_FIND_CONSTANT"
+  "ALG_CANON_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_CONSTANT"
+  "ALG_CANON_BASIC" > "HOL4Prob.prob_canon.ALG_CANON_BASIC"
+  "ALG_CANON2_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON2_SORTED_PREFIXFREE_TWINFREE"
+  "ALG_CANON2_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON2_SHORTENS"
+  "ALG_CANON2_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON2_PREFIXFREE_PRESERVE"
+  "ALG_CANON2_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON2_CONSTANT"
+  "ALG_CANON1_SORTED" > "HOL4Prob.prob_canon.ALG_CANON1_SORTED"
+  "ALG_CANON1_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON1_PREFIXFREE"
+  "ALG_CANON1_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON1_CONSTANT"
+  "ALGEBRA_CANON_TLS" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TLS"
+  "ALGEBRA_CANON_TL" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TL"
+  "ALGEBRA_CANON_STEP2" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP2"
+  "ALGEBRA_CANON_STEP1" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP1"
+  "ALGEBRA_CANON_STEP" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP"
+  "ALGEBRA_CANON_NIL_MEM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_NIL_MEM"
+  "ALGEBRA_CANON_INDUCTION" > "HOL4Prob.prob_canon.ALGEBRA_CANON_INDUCTION"
+  "ALGEBRA_CANON_DEF_ALT" > "HOL4Prob.prob_canon.ALGEBRA_CANON_DEF_ALT"
+  "ALGEBRA_CANON_CASES_THM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES_THM"
+  "ALGEBRA_CANON_CASES" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES"
+  "ALGEBRA_CANON_BASIC" > "HOL4Prob.prob_canon.ALGEBRA_CANON_BASIC"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob_extra.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,96 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "inf" > "inf_primdef"
+
+const_maps
+  "inf" > "HOL4Prob.prob_extra.inf"
+  "COMPL" > "HOL4Base.pred_set.COMPL"
+
+thm_maps
+  "inf_primdef" > "HOL4Prob.prob_extra.inf_primdef"
+  "inf_def" > "HOL4Prob.prob_extra.inf_def"
+  "X_HALF_HALF" > "HOL4Prob.prob_extra.X_HALF_HALF"
+  "UNION_DISJOINT_SPLIT" > "HOL4Prob.prob_extra.UNION_DISJOINT_SPLIT"
+  "UNION_DEF_ALT" > "HOL4Prob.prob_extra.UNION_DEF_ALT"
+  "SUBSET_EQ_DECOMP" > "HOL4Base.pred_set.SUBSET_ANTISYM"
+  "SUBSET_EQ" > "HOL4Prob.prob_extra.SUBSET_EQ"
+  "SET_EQ_EXT" > "HOL4Base.pred_set.EXTENSION"
+  "REAL_X_LE_SUP" > "HOL4Prob.prob_extra.REAL_X_LE_SUP"
+  "REAL_SUP_MAX" > "HOL4Prob.prob_extra.REAL_SUP_MAX"
+  "REAL_SUP_LE_X" > "HOL4Prob.prob_extra.REAL_SUP_LE_X"
+  "REAL_SUP_EXISTS_UNIQUE" > "HOL4Prob.prob_extra.REAL_SUP_EXISTS_UNIQUE"
+  "REAL_POW" > "RealDef.power_real_of_nat"
+  "REAL_LE_INV_LE" > "Fields.linordered_field_class.le_imp_inverse_le"
+  "REAL_LE_EQ" > "Orderings.order_antisym"
+  "REAL_INVINV_ALL" > "Fields.division_ring_inverse_zero_class.inverse_inverse_eq"
+  "REAL_INF_MIN" > "HOL4Prob.prob_extra.REAL_INF_MIN"
+  "RAND_THM" > "HOL.arg_cong"
+  "POW_HALF_TWICE" > "HOL4Prob.prob_extra.POW_HALF_TWICE"
+  "POW_HALF_POS" > "HOL4Prob.prob_extra.POW_HALF_POS"
+  "POW_HALF_MONO" > "HOL4Prob.prob_extra.POW_HALF_MONO"
+  "POW_HALF_EXP" > "HOL4Prob.prob_extra.POW_HALF_EXP"
+  "ONE_MINUS_HALF" > "HOL4Prob.prob_extra.ONE_MINUS_HALF"
+  "MOD_TWO" > "HOL4Prob.prob_extra.MOD_TWO"
+  "MEM_NIL_MAP_CONS" > "HOL4Prob.prob_extra.MEM_NIL_MAP_CONS"
+  "MEM_NIL" > "HOL4Prob.prob_extra.MEM_NIL"
+  "MEM_FILTER" > "HOL4Prob.prob_extra.MEM_FILTER"
+  "MAP_MEM" > "HOL4Prob.prob_extra.MAP_MEM"
+  "MAP_ID" > "List.map_ident"
+  "LENGTH_FILTER" > "List.length_filter_le"
+  "LAST_MEM" > "HOL4Prob.prob_extra.LAST_MEM"
+  "LAST_MAP_CONS" > "HOL4Prob.prob_extra.LAST_MAP_CONS"
+  "IS_PREFIX_TRANS" > "HOL4Prob.prob_extra.IS_PREFIX_TRANS"
+  "IS_PREFIX_SNOC" > "HOL4Prob.prob_extra.IS_PREFIX_SNOC"
+  "IS_PREFIX_REFL" > "HOL4Prob.prob_extra.IS_PREFIX_REFL"
+  "IS_PREFIX_NIL" > "HOL4Prob.prob_extra.IS_PREFIX_NIL"
+  "IS_PREFIX_LENGTH_ANTI" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH_ANTI"
+  "IS_PREFIX_LENGTH" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH"
+  "IS_PREFIX_BUTLAST" > "HOL4Prob.prob_extra.IS_PREFIX_BUTLAST"
+  "IS_PREFIX_ANTISYM" > "HOL4Prob.prob_extra.IS_PREFIX_ANTISYM"
+  "IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
+  "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
+  "INV_SUC_POS" > "HOL4Prob.prob_extra.INV_SUC_POS"
+  "INV_SUC_MAX" > "HOL4Prob.prob_extra.INV_SUC_MAX"
+  "INV_SUC" > "HOL4Prob.prob_extra.INV_SUC"
+  "INTER_UNION_RDISTRIB" > "HOL4Prob.prob_extra.INTER_UNION_RDISTRIB"
+  "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
+  "INTER_IS_EMPTY" > "HOL4Prob.prob_extra.INTER_IS_EMPTY"
+  "INF_DEF_ALT" > "HOL4Prob.prob_extra.INF_DEF_ALT"
+  "HALF_POS" > "Series.half"
+  "HALF_LT_1" > "HOL4Prob.prob_extra.HALF_LT_1"
+  "HALF_CANCEL" > "HOL4Prob.prob_extra.HALF_CANCEL"
+  "GSPEC_DEF_ALT" > "HOL4Prob.prob_extra.GSPEC_DEF_ALT"
+  "FOLDR_MAP" > "HOL4Prob.prob_extra.FOLDR_MAP"
+  "FILTER_TRUE" > "HOL4Prob.prob_extra.FILTER_TRUE"
+  "FILTER_OUT_ELT" > "HOL4Prob.prob_extra.FILTER_OUT_ELT"
+  "FILTER_MEM" > "HOL4Prob.prob_extra.FILTER_MEM"
+  "FILTER_FALSE" > "HOL4Prob.prob_extra.FILTER_FALSE"
+  "EXP_DIV_TWO" > "HOL4Prob.prob_extra.EXP_DIV_TWO"
+  "EXISTS_LONGEST" > "HOL4Prob.prob_extra.EXISTS_LONGEST"
+  "EVEN_ODD_EXISTS_EQ" > "HOL4Prob.prob_extra.EVEN_ODD_EXISTS_EQ"
+  "EVEN_ODD_BASIC" > "HOL4Prob.prob_extra.EVEN_ODD_BASIC"
+  "EVEN_EXP_TWO" > "HOL4Prob.prob_extra.EVEN_EXP_TWO"
+  "EQ_EXT_EQ" > "HOL.fun_eq_iff"
+  "DIV_TWO_UNIQUE" > "HOL4Prob.prob_extra.DIV_TWO_UNIQUE"
+  "DIV_TWO_MONO_EVEN" > "HOL4Prob.prob_extra.DIV_TWO_MONO_EVEN"
+  "DIV_TWO_MONO" > "HOL4Prob.prob_extra.DIV_TWO_MONO"
+  "DIV_TWO_EXP" > "HOL4Prob.prob_extra.DIV_TWO_EXP"
+  "DIV_TWO_CANCEL" > "HOL4Prob.prob_extra.DIV_TWO_CANCEL"
+  "DIV_TWO_BASIC" > "HOL4Prob.prob_extra.DIV_TWO_BASIC"
+  "DIV_TWO" > "HOL4Prob.prob_extra.DIV_TWO"
+  "DIV_THEN_MULT" > "HOL4Prob.prob_extra.DIV_THEN_MULT"
+  "DIVISION_TWO" > "HOL4Prob.prob_extra.DIVISION_TWO"
+  "COMPL_def" > "HOL4Base.pred_set.COMPL_DEF"
+  "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
+  "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
+  "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
+  "BOOL_BOOL_CASES_THM" > "HOL4Prob.prob_extra.BOOL_BOOL_CASES_THM"
+  "BOOL_BOOL_CASES" > "HOL4Base.bool.BOOL_FUN_INDUCT"
+  "APPEND_MEM" > "HOL4Base.list.MEM_APPEND"
+  "ABS_UNIT_INTERVAL" > "HOL4Prob.prob_extra.ABS_UNIT_INTERVAL"
+  "ABS_BETWEEN_LE" > "HOL4Prob.prob_extra.ABS_BETWEEN_LE"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob_indep.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,56 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "indep_set" > "indep_set_primdef"
+  "indep" > "indep_primdef"
+  "alg_cover_set" > "alg_cover_set_primdef"
+  "alg_cover" > "alg_cover_primdef"
+
+const_maps
+  "indep_set" > "HOL4Prob.prob_indep.indep_set"
+  "indep" > "HOL4Prob.prob_indep.indep"
+  "alg_cover_set" > "HOL4Prob.prob_indep.alg_cover_set"
+  "alg_cover" > "HOL4Prob.prob_indep.alg_cover"
+
+thm_maps
+  "indep_set_primdef" > "HOL4Prob.prob_indep.indep_set_primdef"
+  "indep_set_def" > "HOL4Prob.prob_indep.indep_set_def"
+  "indep_primdef" > "HOL4Prob.prob_indep.indep_primdef"
+  "indep_def" > "HOL4Prob.prob_indep.indep_def"
+  "alg_cover_set_primdef" > "HOL4Prob.prob_indep.alg_cover_set_primdef"
+  "alg_cover_set_def" > "HOL4Prob.prob_indep.alg_cover_set_def"
+  "alg_cover_primdef" > "HOL4Prob.prob_indep.alg_cover_primdef"
+  "alg_cover_def" > "HOL4Prob.prob_indep.alg_cover_def"
+  "PROB_INDEP_BOUND" > "HOL4Prob.prob_indep.PROB_INDEP_BOUND"
+  "MAP_CONS_TL_FILTER" > "HOL4Prob.prob_indep.MAP_CONS_TL_FILTER"
+  "INDEP_UNIT" > "HOL4Prob.prob_indep.INDEP_UNIT"
+  "INDEP_SET_SYM" > "HOL4Prob.prob_indep.INDEP_SET_SYM"
+  "INDEP_SET_LIST" > "HOL4Prob.prob_indep.INDEP_SET_LIST"
+  "INDEP_SET_DISJOINT_DECOMP" > "HOL4Prob.prob_indep.INDEP_SET_DISJOINT_DECOMP"
+  "INDEP_SET_BASIC" > "HOL4Prob.prob_indep.INDEP_SET_BASIC"
+  "INDEP_SDEST" > "HOL4Prob.prob_indep.INDEP_SDEST"
+  "INDEP_PROB" > "HOL4Prob.prob_indep.INDEP_PROB"
+  "INDEP_MEASURABLE2" > "HOL4Prob.prob_indep.INDEP_MEASURABLE2"
+  "INDEP_MEASURABLE1" > "HOL4Prob.prob_indep.INDEP_MEASURABLE1"
+  "INDEP_INDEP_SET_LEMMA" > "HOL4Prob.prob_indep.INDEP_INDEP_SET_LEMMA"
+  "INDEP_INDEP_SET" > "HOL4Prob.prob_indep.INDEP_INDEP_SET"
+  "INDEP_BIND_SDEST" > "HOL4Prob.prob_indep.INDEP_BIND_SDEST"
+  "INDEP_BIND" > "HOL4Prob.prob_indep.INDEP_BIND"
+  "BIND_STEP" > "HOL4Prob.prob_indep.BIND_STEP"
+  "ALG_COVER_WELL_DEFINED" > "HOL4Prob.prob_indep.ALG_COVER_WELL_DEFINED"
+  "ALG_COVER_UNIV" > "HOL4Prob.prob_indep.ALG_COVER_UNIV"
+  "ALG_COVER_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_UNIQUE"
+  "ALG_COVER_TAIL_STEP" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_STEP"
+  "ALG_COVER_TAIL_PROB" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_PROB"
+  "ALG_COVER_TAIL_MEASURABLE" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_MEASURABLE"
+  "ALG_COVER_STEP" > "HOL4Prob.prob_indep.ALG_COVER_STEP"
+  "ALG_COVER_SET_INDUCTION" > "HOL4Prob.prob_indep.ALG_COVER_SET_INDUCTION"
+  "ALG_COVER_SET_CASES_THM" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES_THM"
+  "ALG_COVER_SET_CASES" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES"
+  "ALG_COVER_SET_BASIC" > "HOL4Prob.prob_indep.ALG_COVER_SET_BASIC"
+  "ALG_COVER_HEAD" > "HOL4Prob.prob_indep.ALG_COVER_HEAD"
+  "ALG_COVER_EXISTS_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_EXISTS_UNIQUE"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob_pseudo.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,26 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "pseudo_linear_tl" > "pseudo_linear_tl_primdef"
+  "pseudo_linear_hd" > "pseudo_linear_hd_primdef"
+  "pseudo_linear1" > "pseudo_linear1_primdef"
+  "pseudo" > "pseudo_primdef"
+
+const_maps
+  "pseudo_linear_tl" > "HOL4Prob.prob_pseudo.pseudo_linear_tl"
+  "pseudo_linear_hd" > "HOL4Prob.prob_pseudo.pseudo_linear_hd"
+  "pseudo" > "HOL4Prob.prob_pseudo.pseudo"
+
+thm_maps
+  "pseudo_primdef" > "HOL4Prob.prob_pseudo.pseudo_primdef"
+  "pseudo_linear_tl_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_primdef"
+  "pseudo_linear_tl_def" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_def"
+  "pseudo_linear_hd_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_primdef"
+  "pseudo_linear_hd_def" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_def"
+  "pseudo_linear1_def" > "HOL4Prob.prob_pseudo.pseudo_linear1_def"
+  "pseudo_def" > "HOL4Prob.prob_pseudo.pseudo_def"
+  "PSEUDO_LINEAR1_EXECUTE" > "HOL4Prob.prob_pseudo.PSEUDO_LINEAR1_EXECUTE"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/prob_uniform.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,57 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "uniform_tupled" > "uniform_tupled_def"
+  "uniform" > "uniform_primdef"
+  "unif_tupled" > "unif_tupled_def"
+  "unif_bound" > "unif_bound_primdef"
+  "unif" > "unif_primdef"
+
+const_maps
+  "uniform_tupled" > "HOL4Prob.prob_uniform.uniform_tupled"
+  "uniform" > "HOL4Prob.prob_uniform.uniform"
+  "unif_tupled" > "HOL4Prob.prob_uniform.unif_tupled"
+  "unif_bound" > "HOL4Prob.prob_uniform.unif_bound"
+  "unif" > "HOL4Prob.prob_uniform.unif"
+
+thm_maps
+  "uniform_tupled_primitive_def" > "HOL4Prob.prob_uniform.uniform_tupled_primitive_def"
+  "uniform_tupled_def" > "HOL4Prob.prob_uniform.uniform_tupled_def"
+  "uniform_primdef" > "HOL4Prob.prob_uniform.uniform_primdef"
+  "uniform_ind" > "HOL4Prob.prob_uniform.uniform_ind"
+  "uniform_def" > "HOL4Prob.prob_uniform.uniform_def"
+  "uniform_curried_def" > "HOL4Prob.prob_uniform.uniform_curried_def"
+  "unif_tupled_primitive_def" > "HOL4Prob.prob_uniform.unif_tupled_primitive_def"
+  "unif_tupled_def" > "HOL4Prob.prob_uniform.unif_tupled_def"
+  "unif_primdef" > "HOL4Prob.prob_uniform.unif_primdef"
+  "unif_ind" > "HOL4Prob.prob_uniform.unif_ind"
+  "unif_def" > "HOL4Prob.prob_uniform.unif_def"
+  "unif_curried_def" > "HOL4Prob.prob_uniform.unif_curried_def"
+  "unif_bound_primitive_def" > "HOL4Prob.prob_uniform.unif_bound_primitive_def"
+  "unif_bound_primdef" > "HOL4Prob.prob_uniform.unif_bound_primdef"
+  "unif_bound_ind" > "HOL4Prob.prob_uniform.unif_bound_ind"
+  "unif_bound_def" > "HOL4Prob.prob_uniform.unif_bound_def"
+  "UNIF_RANGE" > "HOL4Prob.prob_uniform.UNIF_RANGE"
+  "UNIF_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIF_DEF_MONAD"
+  "UNIF_BOUND_UPPER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER_SUC"
+  "UNIF_BOUND_UPPER" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER"
+  "UNIF_BOUND_LOWER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER_SUC"
+  "UNIF_BOUND_LOWER" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER"
+  "UNIFORM_RANGE" > "HOL4Prob.prob_uniform.UNIFORM_RANGE"
+  "UNIFORM_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIFORM_DEF_MONAD"
+  "SUC_DIV_TWO_ZERO" > "HOL4Prob.prob_uniform.SUC_DIV_TWO_ZERO"
+  "PROB_UNIF_PAIR" > "HOL4Prob.prob_uniform.PROB_UNIF_PAIR"
+  "PROB_UNIF_GOOD" > "HOL4Prob.prob_uniform.PROB_UNIF_GOOD"
+  "PROB_UNIF_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIF_BOUND"
+  "PROB_UNIFORM_UPPER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_UPPER_BOUND"
+  "PROB_UNIFORM_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_SUC"
+  "PROB_UNIFORM_PAIR_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_PAIR_SUC"
+  "PROB_UNIFORM_LOWER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_LOWER_BOUND"
+  "PROB_UNIFORM" > "HOL4Prob.prob_uniform.PROB_UNIFORM"
+  "PROB_UNIF" > "HOL4Prob.prob_uniform.PROB_UNIF"
+  "INDEP_UNIFORM" > "HOL4Prob.prob_uniform.INDEP_UNIFORM"
+  "INDEP_UNIF" > "HOL4Prob.prob_uniform.INDEP_UNIF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/real.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,359 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "sup" > "sup_def"
+  "sumc" > "sumc_def"
+  "sum" > "sum_def"
+
+const_maps
+  "sup" > "HOL4Real.real.sup"
+  "sum" > "HOL4Real.real.sum"
+  "real_sub" > "Groups.minus_class.minus" :: "real => real => real"
+  "real_of_num" > "RealDef.real" :: "nat => real"
+  "real_lte" > "Orderings.ord_class.less_eq" :: "real => real => bool"
+  "real_gt" > "Compatibility.real_gt"
+  "real_ge" > "Compatibility.real_ge"
+  "pow" > "Power.power_class.power" :: "real => nat => real"
+  "abs" > "Groups.abs_class.abs" :: "real => real"
+  "/" > "Fields.inverse_class.divide" :: "real => real => real"
+
+thm_maps
+  "sup_def" > "HOL4Real.real.sup_def"
+  "sup" > "HOL4Real.real.sup"
+  "sumc" > "HOL4Real.real.sumc"
+  "sum_def" > "HOL4Real.real.sum_def"
+  "sum" > "HOL4Real.real.sum"
+  "real_sub" > "Fields.linordered_field_class.sign_simps_16"
+  "real_of_num" > "Compatibility.real_of_num"
+  "real_lte" > "Compatibility.real_lte"
+  "real_lt" > "Orderings.linorder_class.not_le"
+  "real_gt" > "Compatibility.GREATER_DEF"
+  "real_ge" > "Compatibility.real_ge"
+  "real_div" > "Fields.division_ring_class.divide_inverse"
+  "pow" > "Compatibility.pow"
+  "abs" > "Compatibility.abs"
+  "SUP_LEMMA3" > "HOL4Real.real.SUP_LEMMA3"
+  "SUP_LEMMA2" > "HOL4Real.real.SUP_LEMMA2"
+  "SUP_LEMMA1" > "HOL4Real.real.SUP_LEMMA1"
+  "SUM_ZERO" > "HOL4Real.real.SUM_ZERO"
+  "SUM_TWO" > "HOL4Real.real.SUM_TWO"
+  "SUM_SUBST" > "HOL4Real.real.SUM_SUBST"
+  "SUM_SUB" > "HOL4Real.real.SUM_SUB"
+  "SUM_REINDEX" > "HOL4Real.real.SUM_REINDEX"
+  "SUM_POS_GEN" > "HOL4Real.real.SUM_POS_GEN"
+  "SUM_POS" > "HOL4Real.real.SUM_POS"
+  "SUM_PERMUTE_0" > "HOL4Real.real.SUM_PERMUTE_0"
+  "SUM_OFFSET" > "HOL4Real.real.SUM_OFFSET"
+  "SUM_NSUB" > "HOL4Real.real.SUM_NSUB"
+  "SUM_NEG" > "HOL4Real.real.SUM_NEG"
+  "SUM_LE" > "HOL4Real.real.SUM_LE"
+  "SUM_GROUP" > "HOL4Real.real.SUM_GROUP"
+  "SUM_EQ" > "HOL4Real.real.SUM_EQ"
+  "SUM_DIFF" > "HOL4Real.real.SUM_DIFF"
+  "SUM_DEF" > "HOL4Real.real.SUM_DEF"
+  "SUM_CMUL" > "HOL4Real.real.SUM_CMUL"
+  "SUM_CANCEL" > "HOL4Real.real.SUM_CANCEL"
+  "SUM_BOUND" > "HOL4Real.real.SUM_BOUND"
+  "SUM_ADD" > "HOL4Real.real.SUM_ADD"
+  "SUM_ABS_LE" > "HOL4Real.real.SUM_ABS_LE"
+  "SUM_ABS" > "HOL4Real.real.SUM_ABS"
+  "SUM_2" > "HOL4Real.real.SUM_2"
+  "SUM_1" > "HOL4Real.real.SUM_1"
+  "SUM_0" > "HOL4Real.real.SUM_0"
+  "SETOK_LE_LT" > "HOL4Real.real.SETOK_LE_LT"
+  "REAL_SUP_UBOUND_LE" > "HOL4Real.real.REAL_SUP_UBOUND_LE"
+  "REAL_SUP_UBOUND" > "HOL4Real.real.REAL_SUP_UBOUND"
+  "REAL_SUP_SOMEPOS" > "HOL4Real.real.REAL_SUP_SOMEPOS"
+  "REAL_SUP_LE" > "HOL4Real.real.REAL_SUP_LE"
+  "REAL_SUP_EXISTS" > "HOL4Real.real.REAL_SUP_EXISTS"
+  "REAL_SUP_ALLPOS" > "Compatibility.REAL_SUP_ALLPOS"
+  "REAL_SUP" > "HOL4Real.real.REAL_SUP"
+  "REAL_SUMSQ" > "Nat_Numeral.linordered_ring_strict_class.sum_squares_eq_zero_iff"
+  "REAL_SUB_TRIANGLE" > "HOL4Real.real.REAL_SUB_TRIANGLE"
+  "REAL_SUB_SUB2" > "HOL4Real.real.REAL_SUB_SUB2"
+  "REAL_SUB_SUB" > "HOL4Real.real.REAL_SUB_SUB"
+  "REAL_SUB_RZERO" > "Groups.group_add_class.diff_0_right"
+  "REAL_SUB_RNEG" > "Groups.group_add_class.diff_minus_eq_add"
+  "REAL_SUB_REFL" > "Groups.group_add_class.diff_self"
+  "REAL_SUB_RDISTRIB" > "Fields.linordered_field_class.sign_simps_5"
+  "REAL_SUB_NEG2" > "HOL4Real.real.REAL_SUB_NEG2"
+  "REAL_SUB_LZERO" > "Groups.group_add_class.diff_0"
+  "REAL_SUB_LT" > "HOL4Real.real.REAL_SUB_LT"
+  "REAL_SUB_LNEG" > "HOL4Real.real.REAL_SUB_LNEG"
+  "REAL_SUB_LE" > "HOL4Real.real.REAL_SUB_LE"
+  "REAL_SUB_LDISTRIB" > "Fields.linordered_field_class.sign_simps_6"
+  "REAL_SUB_INV2" > "HOL4Real.real.REAL_SUB_INV2"
+  "REAL_SUB_ADD2" > "HOL4Real.real.REAL_SUB_ADD2"
+  "REAL_SUB_ADD" > "Groups.group_add_class.diff_add_cancel"
+  "REAL_SUB_ABS" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq2"
+  "REAL_SUB_0" > "Groups.ab_group_add_class.diff_eq_0_iff_eq"
+  "REAL_RNEG_UNIQ" > "Groups.group_add_class.add_eq_0_iff"
+  "REAL_RINV_UNIQ" > "Fields.division_ring_class.inverse_unique"
+  "REAL_RDISTRIB" > "Fields.linordered_field_class.sign_simps_8"
+  "REAL_POW_POW" > "Power.monoid_mult_class.power_mult"
+  "REAL_POW_MONO_LT" > "HOL4Real.real.REAL_POW_MONO_LT"
+  "REAL_POW_LT2" > "HOL4Real.real.REAL_POW_LT2"
+  "REAL_POW_LT" > "Power.linordered_semidom_class.zero_less_power"
+  "REAL_POW_INV" > "Power.power_inverse"
+  "REAL_POW_DIV" > "Power.power_divide"
+  "REAL_POW_ADD" > "Power.monoid_mult_class.power_add"
+  "REAL_POW2_ABS" > "Nat_Numeral.linordered_idom_class.power2_abs"
+  "REAL_POS_NZ" > "HOL4Real.real.REAL_POS_NZ"
+  "REAL_POS" > "RealDef.real_of_nat_ge_zero"
+  "REAL_POASQ" > "HOL4Real.real.REAL_POASQ"
+  "REAL_OVER1" > "Fields.division_ring_class.divide_1"
+  "REAL_OF_NUM_SUC" > "RealDef.real_of_nat_Suc"
+  "REAL_OF_NUM_POW" > "RealDef.power_real_of_nat"
+  "REAL_OF_NUM_MUL" > "RealDef.real_of_nat_mult"
+  "REAL_OF_NUM_LE" > "RealDef.real_of_nat_le_iff"
+  "REAL_OF_NUM_EQ" > "RealDef.real_of_nat_inject"
+  "REAL_OF_NUM_ADD" > "RealDef.real_of_nat_add"
+  "REAL_NZ_IMP_LT" > "HOL4Real.real.REAL_NZ_IMP_LT"
+  "REAL_NOT_LT" > "Compatibility.real_lte"
+  "REAL_NOT_LE" > "Orderings.linorder_class.not_le"
+  "REAL_NEG_SUB" > "Groups.group_add_class.minus_diff_eq"
+  "REAL_NEG_RMUL" > "Int.int_arith_rules_14"
+  "REAL_NEG_NEG" > "Groups.group_add_class.minus_minus"
+  "REAL_NEG_MUL2" > "Rings.ring_class.minus_mult_minus"
+  "REAL_NEG_MINUS1" > "Semiring_Normalization.comm_ring_1_class.normalizing_ring_rules_1"
+  "REAL_NEG_LT0" > "Groups.ordered_ab_group_add_class.neg_less_0_iff_less"
+  "REAL_NEG_LMUL" > "Int.int_arith_rules_13"
+  "REAL_NEG_LE0" > "Groups.ordered_ab_group_add_class.neg_le_0_iff_le"
+  "REAL_NEG_INV" > "Fields.division_ring_class.nonzero_inverse_minus_eq"
+  "REAL_NEG_GT0" > "Groups.ordered_ab_group_add_class.neg_0_less_iff_less"
+  "REAL_NEG_GE0" > "Groups.ordered_ab_group_add_class.neg_0_le_iff_le"
+  "REAL_NEG_EQ0" > "Groups.group_add_class.neg_equal_0_iff_equal"
+  "REAL_NEG_EQ" > "HOL4Real.real.REAL_NEG_EQ"
+  "REAL_NEG_ADD" > "Groups.ab_group_add_class.minus_add_distrib"
+  "REAL_NEG_0" > "Groups.group_add_class.minus_zero"
+  "REAL_NEGNEG" > "Groups.group_add_class.minus_minus"
+  "REAL_MUL_SYM" > "Fields.linordered_field_class.sign_simps_21"
+  "REAL_MUL_RZERO" > "Divides.arithmetic_simps_41"
+  "REAL_MUL_RNEG" > "Int.int_arith_rules_14"
+  "REAL_MUL_RINV" > "Fields.division_ring_class.right_inverse"
+  "REAL_MUL_RID" > "Divides.arithmetic_simps_43"
+  "REAL_MUL_LZERO" > "Divides.arithmetic_simps_40"
+  "REAL_MUL_LNEG" > "Int.int_arith_rules_13"
+  "REAL_MUL_LINV" > "Fields.division_ring_class.left_inverse"
+  "REAL_MUL_LID" > "Divides.arithmetic_simps_42"
+  "REAL_MUL_ASSOC" > "Fields.linordered_field_class.sign_simps_22"
+  "REAL_MUL" > "RealDef.real_of_nat_mult"
+  "REAL_MIDDLE2" > "HOL4Real.real.REAL_MIDDLE2"
+  "REAL_MIDDLE1" > "HOL4Real.real.REAL_MIDDLE1"
+  "REAL_MEAN" > "Orderings.dense_linorder_class.dense"
+  "REAL_LT_TRANS" > "Orderings.order_less_trans"
+  "REAL_LT_TOTAL" > "Compatibility.REAL_LT_TOTAL"
+  "REAL_LT_SUB_RADD" > "Fields.linordered_field_class.sign_simps_4"
+  "REAL_LT_SUB_LADD" > "Fields.linordered_field_class.sign_simps_3"
+  "REAL_LT_RMUL_IMP" > "Rings.linordered_semiring_strict_class.mult_strict_right_mono"
+  "REAL_LT_RMUL_0" > "HOL4Real.real.REAL_LT_RMUL_0"
+  "REAL_LT_RMUL" > "RealDef.real_mult_less_iff1"
+  "REAL_LT_REFL" > "Orderings.order_less_irrefl"
+  "REAL_LT_RDIV_EQ" > "Fields.linordered_field_class.pos_less_divide_eq"
+  "REAL_LT_RDIV_0" > "HOL4Real.real.REAL_LT_RDIV_0"
+  "REAL_LT_RDIV" > "HOL4Real.real.REAL_LT_RDIV"
+  "REAL_LT_RADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_right"
+  "REAL_LT_NZ" > "HOL4Real.real.REAL_LT_NZ"
+  "REAL_LT_NEGTOTAL" > "HOL4Real.real.REAL_LT_NEGTOTAL"
+  "REAL_LT_NEG" > "Groups.ordered_ab_group_add_class.neg_less_iff_less"
+  "REAL_LT_MULTIPLE" > "HOL4Real.real.REAL_LT_MULTIPLE"
+  "REAL_LT_MUL2" > "Rings.linordered_semiring_strict_class.mult_strict_mono'"
+  "REAL_LT_MUL" > "RealDef.real_mult_order"
+  "REAL_LT_LMUL_IMP" > "RealDef.real_mult_less_mono2"
+  "REAL_LT_LMUL_0" > "HOL4Real.real.REAL_LT_LMUL_0"
+  "REAL_LT_LMUL" > "Rings.linordered_ring_strict_class.mult_less_cancel_left_pos"
+  "REAL_LT_LE" > "Orderings.order_class.less_le"
+  "REAL_LT_LDIV_EQ" > "Fields.linordered_field_class.pos_divide_less_eq"
+  "REAL_LT_LADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_left"
+  "REAL_LT_INV_EQ" > "Fields.linordered_field_inverse_zero_class.inverse_positive_iff_positive"
+  "REAL_LT_INV" > "Fields.linordered_field_class.less_imp_inverse_less"
+  "REAL_LT_IMP_NE" > "Orderings.order_class.less_imp_neq"
+  "REAL_LT_IMP_LE" > "Orderings.order_less_imp_le"
+  "REAL_LT_IADD" > "Groups.ordered_cancel_ab_semigroup_add_class.add_strict_left_mono"
+  "REAL_LT_HALF2" > "HOL4Real.real.REAL_LT_HALF2"
+  "REAL_LT_HALF1" > "Int.half_gt_zero_iff"
+  "REAL_LT_GT" > "Orderings.order_less_not_sym"
+  "REAL_LT_FRACTION_0" > "HOL4Real.real.REAL_LT_FRACTION_0"
+  "REAL_LT_FRACTION" > "HOL4Real.real.REAL_LT_FRACTION"
+  "REAL_LT_DIV" > "Fields.linordered_field_class.divide_pos_pos"
+  "REAL_LT_ANTISYM" > "HOL4Real.real.REAL_LT_ANTISYM"
+  "REAL_LT_ADD_SUB" > "Fields.linordered_field_class.sign_simps_3"
+  "REAL_LT_ADDR" > "HOL4Real.real.REAL_LT_ADDR"
+  "REAL_LT_ADDNEG2" > "HOL4Real.real.REAL_LT_ADDNEG2"
+  "REAL_LT_ADDNEG" > "HOL4Real.real.REAL_LT_ADDNEG"
+  "REAL_LT_ADDL" > "HOL4Real.real.REAL_LT_ADDL"
+  "REAL_LT_ADD2" > "Groups.add_mono_thms_linordered_field_5"
+  "REAL_LT_ADD1" > "HOL4Real.real.REAL_LT_ADD1"
+  "REAL_LT_ADD" > "Groups.ordered_comm_monoid_add_class.add_pos_pos"
+  "REAL_LT_1" > "HOL4Real.real.REAL_LT_1"
+  "REAL_LT_01" > "Rings.linordered_semidom_class.zero_less_one"
+  "REAL_LTE_TRANS" > "Orderings.order_less_le_trans"
+  "REAL_LTE_TOTAL" > "HOL4Real.real.REAL_LTE_TOTAL"
+  "REAL_LTE_ANTSYM" > "HOL4Real.real.REAL_LTE_ANTSYM"
+  "REAL_LTE_ADD2" > "Groups.add_mono_thms_linordered_field_3"
+  "REAL_LTE_ADD" > "Groups.ordered_comm_monoid_add_class.add_pos_nonneg"
+  "REAL_LT1_POW2" > "HOL4Real.real.REAL_LT1_POW2"
+  "REAL_LT" > "RealDef.real_of_nat_less_iff"
+  "REAL_LNEG_UNIQ" > "Groups.group_add_class.eq_neg_iff_add_eq_0"
+  "REAL_LINV_UNIQ" > "HOL4Real.real.REAL_LINV_UNIQ"
+  "REAL_LE_TRANS" > "Orderings.order_trans_rules_23"
+  "REAL_LE_TOTAL" > "Orderings.linorder_class.linear"
+  "REAL_LE_SUB_RADD" > "Fields.linordered_field_class.sign_simps_2"
+  "REAL_LE_SUB_LADD" > "Fields.linordered_field_class.sign_simps_1"
+  "REAL_LE_SQUARE" > "Rings.linordered_ring_class.zero_le_square"
+  "REAL_LE_RNEG" > "HOL4Real.real.REAL_LE_RNEG"
+  "REAL_LE_RMUL_IMP" > "Rings.ordered_semiring_class.mult_right_mono"
+  "REAL_LE_RMUL" > "RealDef.real_mult_le_cancel_iff1"
+  "REAL_LE_REFL" > "Orderings.preorder_class.order_refl"
+  "REAL_LE_RDIV_EQ" > "Fields.linordered_field_class.pos_le_divide_eq"
+  "REAL_LE_RDIV" > "Fields.linordered_field_class.mult_imp_le_div_pos"
+  "REAL_LE_RADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_right"
+  "REAL_LE_POW2" > "Nat_Numeral.linordered_idom_class.zero_le_power2"
+  "REAL_LE_NEGTOTAL" > "HOL4Real.real.REAL_LE_NEGTOTAL"
+  "REAL_LE_NEGR" > "Groups.linordered_ab_group_add_class.le_minus_self_iff"
+  "REAL_LE_NEGL" > "Groups.linordered_ab_group_add_class.minus_le_self_iff"
+  "REAL_LE_NEG2" > "Groups.ordered_ab_group_add_class.neg_le_iff_le"
+  "REAL_LE_NEG" > "Groups.ordered_ab_group_add_class.neg_le_iff_le"
+  "REAL_LE_MUL2" > "Rings.ordered_semiring_class.mult_mono'"
+  "REAL_LE_MUL" > "Rings.mult_sign_intros_1"
+  "REAL_LE_LT" > "Orderings.order_class.le_less"
+  "REAL_LE_LNEG" > "RealDef.real_0_le_add_iff"
+  "REAL_LE_LMUL_IMP" > "Rings.ordered_comm_semiring_class.comm_mult_left_mono"
+  "REAL_LE_LMUL" > "RealDef.real_mult_le_cancel_iff2"
+  "REAL_LE_LDIV_EQ" > "Fields.linordered_field_class.pos_divide_le_eq"
+  "REAL_LE_LDIV" > "Fields.linordered_field_class.mult_imp_div_pos_le"
+  "REAL_LE_LADD_IMP" > "Groups.ordered_ab_semigroup_add_class.add_left_mono"
+  "REAL_LE_LADD" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_left"
+  "REAL_LE_INV_EQ" > "Fields.linordered_field_inverse_zero_class.inverse_nonnegative_iff_nonnegative"
+  "REAL_LE_INV" > "HOL4Real.real.REAL_LE_INV"
+  "REAL_LE_DOUBLE" > "Groups.linordered_ab_group_add_class.zero_le_double_add_iff_zero_le_single_add"
+  "REAL_LE_DIV" > "HOL4Real.real.REAL_LE_DIV"
+  "REAL_LE_ANTISYM" > "Orderings.order_class.eq_iff"
+  "REAL_LE_ADDR" > "HOL4Real.real.REAL_LE_ADDR"
+  "REAL_LE_ADDL" > "HOL4Real.real.REAL_LE_ADDL"
+  "REAL_LE_ADD2" > "Groups.add_mono_thms_linordered_semiring_1"
+  "REAL_LE_ADD" > "Groups.ordered_comm_monoid_add_class.add_nonneg_nonneg"
+  "REAL_LE_01" > "Rings.linordered_semidom_class.zero_le_one"
+  "REAL_LET_TRANS" > "Orderings.order_le_less_trans"
+  "REAL_LET_TOTAL" > "Orderings.linorder_class.le_less_linear"
+  "REAL_LET_ANTISYM" > "HOL4Real.real.REAL_LET_ANTISYM"
+  "REAL_LET_ADD2" > "Groups.add_mono_thms_linordered_field_4"
+  "REAL_LET_ADD" > "Groups.ordered_comm_monoid_add_class.add_nonneg_pos"
+  "REAL_LE1_POW2" > "HOL4Real.real.REAL_LE1_POW2"
+  "REAL_LE" > "RealDef.real_of_nat_le_iff"
+  "REAL_LDISTRIB" > "Fields.linordered_field_class.sign_simps_7"
+  "REAL_INV_POS" > "Fields.linordered_field_class.positive_imp_inverse_positive"
+  "REAL_INV_NZ" > "Fields.division_ring_class.nonzero_imp_inverse_nonzero"
+  "REAL_INV_MUL" > "HOL4Real.real.REAL_INV_MUL"
+  "REAL_INV_LT1" > "Fields.linordered_field_class.one_less_inverse"
+  "REAL_INV_INV" > "Fields.division_ring_inverse_zero_class.inverse_inverse_eq"
+  "REAL_INV_EQ_0" > "Fields.division_ring_inverse_zero_class.inverse_nonzero_iff_nonzero"
+  "REAL_INV_1OVER" > "Fields.division_ring_class.inverse_eq_divide"
+  "REAL_INV_0" > "Fields.division_ring_inverse_zero_class.inverse_zero"
+  "REAL_INVINV" > "Fields.division_ring_class.nonzero_inverse_inverse_eq"
+  "REAL_INV1" > "Fields.division_ring_class.inverse_1"
+  "REAL_INJ" > "RealDef.real_of_nat_inject"
+  "REAL_HALF_DOUBLE" > "RComplete.real_sum_of_halves"
+  "REAL_FACT_NZ" > "HOL4Real.real.REAL_FACT_NZ"
+  "REAL_EQ_SUB_RADD" > "Fields.linordered_field_class.sign_simps_12"
+  "REAL_EQ_SUB_LADD" > "Fields.linordered_field_class.sign_simps_11"
+  "REAL_EQ_RMUL_IMP" > "HOL4Real.real.REAL_EQ_RMUL_IMP"
+  "REAL_EQ_RMUL" > "Rings.mult_compare_simps_13"
+  "REAL_EQ_RDIV_EQ" > "HOL4Real.real.REAL_EQ_RDIV_EQ"
+  "REAL_EQ_RADD" > "Groups.cancel_semigroup_add_class.add_right_cancel"
+  "REAL_EQ_NEG" > "Groups.group_add_class.neg_equal_iff_equal"
+  "REAL_EQ_MUL_LCANCEL" > "Rings.mult_compare_simps_14"
+  "REAL_EQ_LMUL_IMP" > "HOL4Real.real.REAL_EQ_LMUL_IMP"
+  "REAL_EQ_LMUL2" > "RealDef.real_mult_left_cancel"
+  "REAL_EQ_LMUL" > "Rings.mult_compare_simps_14"
+  "REAL_EQ_LDIV_EQ" > "HOL4Real.real.REAL_EQ_LDIV_EQ"
+  "REAL_EQ_LADD" > "Groups.cancel_semigroup_add_class.add_left_cancel"
+  "REAL_EQ_IMP_LE" > "Orderings.order_eq_refl"
+  "REAL_ENTIRE" > "Rings.ring_no_zero_divisors_class.mult_eq_0_iff"
+  "REAL_DOWN2" > "RealDef.real_lbound_gt_zero"
+  "REAL_DOWN" > "HOL4Real.real.REAL_DOWN"
+  "REAL_DOUBLE" > "Int.mult_2"
+  "REAL_DIV_RMUL" > "HOL4Real.real.REAL_DIV_RMUL"
+  "REAL_DIV_REFL" > "Fields.division_ring_class.divide_self"
+  "REAL_DIV_MUL2" > "HOL4Real.real.REAL_DIV_MUL2"
+  "REAL_DIV_LZERO" > "Fields.division_ring_class.divide_zero_left"
+  "REAL_DIV_LMUL" > "HOL4Real.real.REAL_DIV_LMUL"
+  "REAL_DIFFSQ" > "Rings.comm_ring_class.square_diff_square_factored"
+  "REAL_ARCH_LEAST" > "Transcendental.reals_Archimedean4"
+  "REAL_ARCH" > "RComplete.reals_Archimedean3"
+  "REAL_ADD_SYM" > "Fields.linordered_field_class.sign_simps_18"
+  "REAL_ADD_SUB2" > "HOL4Real.real.REAL_ADD_SUB2"
+  "REAL_ADD_SUB" > "HOL4Real.real.REAL_ADD_SUB"
+  "REAL_ADD_RINV" > "Groups.group_add_class.right_minus"
+  "REAL_ADD_RID_UNIQ" > "HOL4Real.real.REAL_ADD_RID_UNIQ"
+  "REAL_ADD_RID" > "Divides.arithmetic_simps_39"
+  "REAL_ADD_RDISTRIB" > "Fields.linordered_field_class.sign_simps_8"
+  "REAL_ADD_LINV" > "Groups.ab_group_add_class.ab_left_minus"
+  "REAL_ADD_LID_UNIQ" > "HOL4Real.real.REAL_ADD_LID_UNIQ"
+  "REAL_ADD_LID" > "Divides.arithmetic_simps_38"
+  "REAL_ADD_LDISTRIB" > "Fields.linordered_field_class.sign_simps_7"
+  "REAL_ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_19"
+  "REAL_ADD2_SUB2" > "RealDef.add_diff_add"
+  "REAL_ADD" > "RealDef.real_of_nat_add"
+  "REAL_ABS_TRIANGLE" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq"
+  "REAL_ABS_POS" > "Groups.ordered_ab_group_add_abs_class.abs_ge_zero"
+  "REAL_ABS_MUL" > "Rings.linordered_idom_class.abs_mult"
+  "REAL_ABS_0" > "Divides.arithmetic_simps_27"
+  "REAL_10" > "Compatibility.REAL_10"
+  "REAL_1" > "HOL4Real.real.REAL_1"
+  "REAL_0" > "HOL4Real.real.REAL_0"
+  "REAL" > "RealDef.real_of_nat_Suc"
+  "POW_ZERO_EQ" > "HOL4Real.real.POW_ZERO_EQ"
+  "POW_ZERO" > "HOL4Real.real.POW_ZERO"
+  "POW_POS_LT" > "HOL4Real.real.POW_POS_LT"
+  "POW_POS" > "Power.linordered_semidom_class.zero_le_power"
+  "POW_PLUS1" > "HOL4Real.real.POW_PLUS1"
+  "POW_ONE" > "Power.monoid_mult_class.power_one"
+  "POW_NZ" > "Power.ring_1_no_zero_divisors_class.field_power_not_zero"
+  "POW_MUL" > "Power.comm_monoid_mult_class.power_mult_distrib"
+  "POW_MINUS1" > "Nat_Numeral.ring_1_class.power_minus1_even"
+  "POW_M1" > "HOL4Real.real.POW_M1"
+  "POW_LT" > "HOL4Real.real.POW_LT"
+  "POW_LE" > "Power.linordered_semidom_class.power_mono"
+  "POW_INV" > "Power.division_ring_class.nonzero_power_inverse"
+  "POW_EQ" > "Power.linordered_semidom_class.power_inject_base"
+  "POW_ADD" > "Power.monoid_mult_class.power_add"
+  "POW_ABS" > "Power.linordered_idom_class.power_abs"
+  "POW_2_LT" > "RealDef.two_realpow_gt"
+  "POW_2_LE1" > "RealDef.two_realpow_ge_one"
+  "POW_2" > "Nat_Numeral.monoid_mult_class.power2_eq_square"
+  "POW_1" > "Power.monoid_mult_class.power_one_right"
+  "POW_0" > "Power.power_0_Suc"
+  "ABS_ZERO" > "Groups.ordered_ab_group_add_abs_class.abs_eq_0"
+  "ABS_TRIANGLE" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq"
+  "ABS_SUM" > "HOL4Real.real.ABS_SUM"
+  "ABS_SUB_ABS" > "Groups.ordered_ab_group_add_abs_class.abs_triangle_ineq3"
+  "ABS_SUB" > "Groups.ordered_ab_group_add_abs_class.abs_minus_commute"
+  "ABS_STILLNZ" > "HOL4Real.real.ABS_STILLNZ"
+  "ABS_SIGN2" > "HOL4Real.real.ABS_SIGN2"
+  "ABS_SIGN" > "HOL4Real.real.ABS_SIGN"
+  "ABS_REFL" > "HOL4Real.real.ABS_REFL"
+  "ABS_POW2" > "Nat_Numeral.linordered_idom_class.abs_power2"
+  "ABS_POS" > "Groups.ordered_ab_group_add_abs_class.abs_ge_zero"
+  "ABS_NZ" > "Groups.ordered_ab_group_add_abs_class.zero_less_abs_iff"
+  "ABS_NEG" > "Groups.ordered_ab_group_add_abs_class.abs_minus_cancel"
+  "ABS_N" > "RealDef.abs_real_of_nat_cancel"
+  "ABS_MUL" > "Rings.linordered_idom_class.abs_mult"
+  "ABS_LT_MUL2" > "HOL4Real.real.ABS_LT_MUL2"
+  "ABS_LE" > "Groups.ordered_ab_group_add_abs_class.abs_ge_self"
+  "ABS_INV" > "Fields.linordered_field_class.nonzero_abs_inverse"
+  "ABS_DIV" > "Fields.linordered_field_class.nonzero_abs_divide"
+  "ABS_CIRCLE" > "HOL4Real.real.ABS_CIRCLE"
+  "ABS_CASES" > "HOL4Real.real.ABS_CASES"
+  "ABS_BOUNDS" > "RealDef.abs_le_interval_iff"
+  "ABS_BOUND" > "HOL4Real.real.ABS_BOUND"
+  "ABS_BETWEEN2" > "HOL4Real.real.ABS_BETWEEN2"
+  "ABS_BETWEEN1" > "HOL4Real.real.ABS_BETWEEN1"
+  "ABS_BETWEEN" > "HOL4Real.real.ABS_BETWEEN"
+  "ABS_ABS" > "Groups.ordered_ab_group_add_abs_class.abs_idempotent"
+  "ABS_1" > "Divides.arithmetic_simps_28"
+  "ABS_0" > "Divides.arithmetic_simps_27"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/realax.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,145 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "treal_of_hreal" > "treal_of_hreal_def"
+  "treal_neg" > "treal_neg_def"
+  "treal_mul" > "treal_mul_def"
+  "treal_lt" > "treal_lt_def"
+  "treal_inv" > "treal_inv_def"
+  "treal_eq" > "treal_eq_def"
+  "treal_add" > "treal_add_def"
+  "treal_1" > "treal_1_def"
+  "treal_0" > "treal_0_def"
+  "hreal_of_treal" > "hreal_of_treal_def"
+
+type_maps
+  "real" > "RealDef.real"
+
+const_maps
+  "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
+  "treal_neg" > "HOL4Real.realax.treal_neg"
+  "treal_mul" > "HOL4Real.realax.treal_mul"
+  "treal_lt" > "HOL4Real.realax.treal_lt"
+  "treal_inv" > "HOL4Real.realax.treal_inv"
+  "treal_eq" > "HOL4Real.realax.treal_eq"
+  "treal_add" > "HOL4Real.realax.treal_add"
+  "treal_1" > "HOL4Real.realax.treal_1"
+  "treal_0" > "HOL4Real.realax.treal_0"
+  "real_sub" > "Groups.minus_class.minus" :: "real => real => real"
+  "real_neg" > "Groups.uminus_class.uminus" :: "real => real"
+  "real_mul" > "Groups.times_class.times" :: "real => real => real"
+  "real_lt" > "Orderings.ord_class.less" :: "real => real => bool"
+  "real_div" > "Fields.inverse_class.divide" :: "real => real => real"
+  "real_add" > "Groups.plus_class.plus" :: "real => real => real"
+  "real_1" > "Groups.one_class.one" :: "real"
+  "real_0" > "Groups.zero_class.zero" :: "real"
+  "mk_real" > "HOL.undefined"
+  "inv" > "Fields.inverse_class.inverse" :: "real => real"
+  "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
+  "dest_real" > "HOL.undefined"
+
+thm_maps
+  "treal_of_hreal_def" > "HOL4Real.realax.treal_of_hreal_def"
+  "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
+  "treal_neg_def" > "HOL4Real.realax.treal_neg_def"
+  "treal_neg" > "HOL4Real.realax.treal_neg"
+  "treal_mul_def" > "HOL4Real.realax.treal_mul_def"
+  "treal_mul" > "HOL4Real.realax.treal_mul"
+  "treal_lt_def" > "HOL4Real.realax.treal_lt_def"
+  "treal_lt" > "HOL4Real.realax.treal_lt"
+  "treal_inv_def" > "HOL4Real.realax.treal_inv_def"
+  "treal_inv" > "HOL4Real.realax.treal_inv"
+  "treal_eq_def" > "HOL4Real.realax.treal_eq_def"
+  "treal_eq" > "HOL4Real.realax.treal_eq"
+  "treal_add_def" > "HOL4Real.realax.treal_add_def"
+  "treal_add" > "HOL4Real.realax.treal_add"
+  "treal_1_def" > "HOL4Real.realax.treal_1_def"
+  "treal_1" > "HOL4Real.realax.treal_1"
+  "treal_0_def" > "HOL4Real.realax.treal_0_def"
+  "treal_0" > "HOL4Real.realax.treal_0"
+  "hreal_of_treal_def" > "HOL4Real.realax.hreal_of_treal_def"
+  "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
+  "TREAL_NEG_WELLDEF" > "HOL4Real.realax.TREAL_NEG_WELLDEF"
+  "TREAL_MUL_WELLDEFR" > "HOL4Real.realax.TREAL_MUL_WELLDEFR"
+  "TREAL_MUL_WELLDEF" > "HOL4Real.realax.TREAL_MUL_WELLDEF"
+  "TREAL_MUL_SYM" > "HOL4Real.realax.TREAL_MUL_SYM"
+  "TREAL_MUL_LINV" > "HOL4Real.realax.TREAL_MUL_LINV"
+  "TREAL_MUL_LID" > "HOL4Real.realax.TREAL_MUL_LID"
+  "TREAL_MUL_ASSOC" > "HOL4Real.realax.TREAL_MUL_ASSOC"
+  "TREAL_LT_WELLDEFR" > "HOL4Real.realax.TREAL_LT_WELLDEFR"
+  "TREAL_LT_WELLDEFL" > "HOL4Real.realax.TREAL_LT_WELLDEFL"
+  "TREAL_LT_WELLDEF" > "HOL4Real.realax.TREAL_LT_WELLDEF"
+  "TREAL_LT_TRANS" > "HOL4Real.realax.TREAL_LT_TRANS"
+  "TREAL_LT_TOTAL" > "HOL4Real.realax.TREAL_LT_TOTAL"
+  "TREAL_LT_REFL" > "HOL4Real.realax.TREAL_LT_REFL"
+  "TREAL_LT_MUL" > "HOL4Real.realax.TREAL_LT_MUL"
+  "TREAL_LT_ADD" > "HOL4Real.realax.TREAL_LT_ADD"
+  "TREAL_LDISTRIB" > "HOL4Real.realax.TREAL_LDISTRIB"
+  "TREAL_ISO" > "HOL4Real.realax.TREAL_ISO"
+  "TREAL_INV_WELLDEF" > "HOL4Real.realax.TREAL_INV_WELLDEF"
+  "TREAL_INV_0" > "HOL4Real.realax.TREAL_INV_0"
+  "TREAL_EQ_TRANS" > "HOL4Real.realax.TREAL_EQ_TRANS"
+  "TREAL_EQ_SYM" > "HOL4Real.realax.TREAL_EQ_SYM"
+  "TREAL_EQ_REFL" > "HOL4Real.realax.TREAL_EQ_REFL"
+  "TREAL_EQ_EQUIV" > "HOL4Real.realax.TREAL_EQ_EQUIV"
+  "TREAL_EQ_AP" > "HOL4Real.realax.TREAL_EQ_AP"
+  "TREAL_BIJ_WELLDEF" > "HOL4Real.realax.TREAL_BIJ_WELLDEF"
+  "TREAL_BIJ" > "HOL4Real.realax.TREAL_BIJ"
+  "TREAL_ADD_WELLDEFR" > "HOL4Real.realax.TREAL_ADD_WELLDEFR"
+  "TREAL_ADD_WELLDEF" > "HOL4Real.realax.TREAL_ADD_WELLDEF"
+  "TREAL_ADD_SYM" > "HOL4Real.realax.TREAL_ADD_SYM"
+  "TREAL_ADD_LINV" > "HOL4Real.realax.TREAL_ADD_LINV"
+  "TREAL_ADD_LID" > "HOL4Real.realax.TREAL_ADD_LID"
+  "TREAL_ADD_ASSOC" > "HOL4Real.realax.TREAL_ADD_ASSOC"
+  "TREAL_10" > "HOL4Real.realax.TREAL_10"
+  "REAL_SUP_ALLPOS" > "Compatibility.REAL_SUP_ALLPOS"
+  "REAL_MUL_SYM" > "Fields.linordered_field_class.sign_simps_21"
+  "REAL_MUL_LINV" > "Fields.division_ring_class.left_inverse"
+  "REAL_MUL_LID" > "Divides.arithmetic_simps_42"
+  "REAL_MUL_ASSOC" > "Fields.linordered_field_class.sign_simps_22"
+  "REAL_LT_TRANS" > "Orderings.order_less_trans"
+  "REAL_LT_TOTAL" > "Compatibility.REAL_LT_TOTAL"
+  "REAL_LT_REFL" > "Orderings.order_less_irrefl"
+  "REAL_LT_MUL" > "RealDef.real_mult_order"
+  "REAL_LT_IADD" > "Groups.ordered_cancel_ab_semigroup_add_class.add_strict_left_mono"
+  "REAL_LDISTRIB" > "Fields.linordered_field_class.sign_simps_7"
+  "REAL_INV_0" > "Fields.division_ring_inverse_zero_class.inverse_zero"
+  "REAL_ADD_SYM" > "Fields.linordered_field_class.sign_simps_18"
+  "REAL_ADD_LINV" > "Groups.ab_group_add_class.ab_left_minus"
+  "REAL_ADD_LID" > "Divides.arithmetic_simps_38"
+  "REAL_ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_19"
+  "REAL_10" > "Compatibility.REAL_10"
+  "HREAL_RDISTRIB" > "HOL4Real.realax.HREAL_RDISTRIB"
+  "HREAL_LT_REFL" > "HOL4Real.realax.HREAL_LT_REFL"
+  "HREAL_LT_NE" > "HOL4Real.realax.HREAL_LT_NE"
+  "HREAL_LT_LADD" > "HOL4Real.realax.HREAL_LT_LADD"
+  "HREAL_LT_GT" > "HOL4Real.realax.HREAL_LT_GT"
+  "HREAL_LT_ADDR" > "HOL4Real.realax.HREAL_LT_ADDR"
+  "HREAL_LT_ADDL" > "HOL4Real.realax.HREAL_LT_ADDL"
+  "HREAL_LT_ADD2" > "HOL4Real.realax.HREAL_LT_ADD2"
+  "HREAL_EQ_LADD" > "HOL4Real.realax.HREAL_EQ_LADD"
+  "HREAL_EQ_ADDR" > "HOL4Base.hreal.HREAL_NOZERO"
+  "HREAL_EQ_ADDL" > "HOL4Real.realax.HREAL_EQ_ADDL"
+
+ignore_thms
+  "real_tybij"
+  "real_of_hreal"
+  "real_neg"
+  "real_mul"
+  "real_lt"
+  "real_inv"
+  "real_add"
+  "real_TY_DEF"
+  "real_1"
+  "real_0"
+  "hreal_of_real"
+  "SUP_ALLPOS_LEMMA4"
+  "SUP_ALLPOS_LEMMA3"
+  "SUP_ALLPOS_LEMMA2"
+  "SUP_ALLPOS_LEMMA1"
+  "REAL_POS"
+  "REAL_ISO_EQ"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/relation.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,102 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "transitive" > "transitive_primdef"
+  "the_fun" > "the_fun_primdef"
+  "pred_reflexive" > "pred_reflexive_def"
+  "inv_image" > "inv_image_primdef"
+  "approx" > "approx_primdef"
+  "WFREC" > "WFREC_def"
+  "WF" > "WF_def"
+  "TC" > "TC_def"
+  "RTC" > "RTC_def"
+  "RESTRICT" > "RESTRICT_def"
+  "RC" > "RC_primdef"
+  "EMPTY_REL" > "EMPTY_REL_def"
+
+const_maps
+  "transitive" > "HOL4Base.relation.transitive"
+  "the_fun" > "HOL4Base.relation.the_fun"
+  "pred_reflexive" > "HOL4Base.relation.pred_reflexive"
+  "inv_image" > "HOL4Base.relation.inv_image"
+  "approx" > "HOL4Base.relation.approx"
+  "WFREC" > "HOL4Base.relation.WFREC"
+  "WF" > "HOL4Base.relation.WF"
+  "TC" > "HOL4Base.relation.TC"
+  "RTC" > "HOL4Base.relation.RTC"
+  "RESTRICT" > "HOL4Base.relation.RESTRICT"
+  "RC" > "HOL4Base.relation.RC"
+  "EMPTY_REL" > "HOL4Base.relation.EMPTY_REL"
+
+const_renames
+  "reflexive" > "pred_reflexive"
+
+thm_maps
+  "transitive_primdef" > "HOL4Base.relation.transitive_primdef"
+  "transitive_def" > "HOL4Base.relation.transitive_def"
+  "the_fun_primdef" > "HOL4Base.relation.the_fun_primdef"
+  "the_fun_def" > "HOL4Base.relation.the_fun_def"
+  "reflexive_def" > "HOL4Base.relation.reflexive_def"
+  "pred_reflexive_def" > "HOL4Base.relation.pred_reflexive_def"
+  "inv_image_primdef" > "HOL4Base.relation.inv_image_primdef"
+  "inv_image_def" > "HOL4Base.relation.inv_image_def"
+  "approx_primdef" > "HOL4Base.relation.approx_primdef"
+  "approx_def" > "HOL4Base.relation.approx_def"
+  "WF_inv_image" > "HOL4Base.relation.WF_inv_image"
+  "WF_def" > "HOL4Base.relation.WF_def"
+  "WF_TC" > "HOL4Base.relation.WF_TC"
+  "WF_SUBSET" > "HOL4Base.relation.WF_SUBSET"
+  "WF_RECURSION_THM" > "HOL4Base.relation.WF_RECURSION_THM"
+  "WF_NOT_REFL" > "HOL4Base.relation.WF_NOT_REFL"
+  "WF_INDUCTION_THM" > "HOL4Base.relation.WF_INDUCTION_THM"
+  "WF_EMPTY_REL" > "HOL4Base.relation.WF_EMPTY_REL"
+  "WF_DEF" > "HOL4Base.relation.WF_DEF"
+  "WFREC_def" > "HOL4Base.relation.WFREC_def"
+  "WFREC_THM" > "HOL4Base.relation.WFREC_THM"
+  "WFREC_DEF" > "HOL4Base.relation.WFREC_DEF"
+  "WFREC_COROLLARY" > "HOL4Base.relation.WFREC_COROLLARY"
+  "TC_def" > "HOL4Base.relation.TC_def"
+  "TC_TRANSITIVE" > "HOL4Base.relation.TC_TRANSITIVE"
+  "TC_SUBSET" > "HOL4Base.relation.TC_SUBSET"
+  "TC_STRONG_INDUCT_LEFT1" > "HOL4Base.relation.TC_STRONG_INDUCT_LEFT1"
+  "TC_STRONG_INDUCT" > "HOL4Base.relation.TC_STRONG_INDUCT"
+  "TC_RULES" > "HOL4Base.relation.TC_RULES"
+  "TC_RTC" > "HOL4Base.relation.TC_RTC"
+  "TC_RC_EQNS" > "HOL4Base.relation.TC_RC_EQNS"
+  "TC_MONOTONE" > "HOL4Base.relation.TC_MONOTONE"
+  "TC_INDUCT_LEFT1" > "HOL4Base.relation.TC_INDUCT_LEFT1"
+  "TC_INDUCT" > "HOL4Base.relation.TC_INDUCT"
+  "TC_IDEM" > "HOL4Base.relation.TC_IDEM"
+  "TC_DEF" > "HOL4Base.relation.TC_DEF"
+  "TC_CASES2" > "HOL4Base.relation.TC_CASES2"
+  "TC_CASES1" > "HOL4Base.relation.TC_CASES1"
+  "RTC_def" > "HOL4Base.relation.RTC_def"
+  "RTC_TRANSITIVE" > "HOL4Base.relation.RTC_TRANSITIVE"
+  "RTC_TC_RC" > "HOL4Base.relation.RTC_TC_RC"
+  "RTC_SUBSET" > "HOL4Base.relation.RTC_SUBSET"
+  "RTC_STRONG_INDUCT" > "HOL4Base.relation.RTC_STRONG_INDUCT"
+  "RTC_RULES" > "HOL4Base.relation.RTC_RULES"
+  "RTC_RTC" > "HOL4Base.relation.RTC_RTC"
+  "RTC_REFLEXIVE" > "HOL4Base.relation.RTC_REFLEXIVE"
+  "RTC_MONOTONE" > "HOL4Base.relation.RTC_MONOTONE"
+  "RTC_INDUCT" > "HOL4Base.relation.RTC_INDUCT"
+  "RTC_IDEM" > "HOL4Base.relation.RTC_IDEM"
+  "RTC_DEF" > "HOL4Base.relation.RTC_DEF"
+  "RTC_CASES_RTC_TWICE" > "HOL4Base.relation.RTC_CASES_RTC_TWICE"
+  "RTC_CASES2" > "HOL4Base.relation.RTC_CASES2"
+  "RTC_CASES1" > "HOL4Base.relation.RTC_CASES1"
+  "RESTRICT_def" > "HOL4Base.relation.RESTRICT_def"
+  "RESTRICT_LEMMA" > "HOL4Base.relation.RESTRICT_LEMMA"
+  "RESTRICT_DEF" > "HOL4Base.relation.RESTRICT_DEF"
+  "RC_primdef" > "HOL4Base.relation.RC_primdef"
+  "RC_def" > "HOL4Base.relation.RC_def"
+  "RC_SUBSET" > "HOL4Base.relation.RC_SUBSET"
+  "RC_RTC" > "HOL4Base.relation.RC_RTC"
+  "RC_REFLEXIVE" > "HOL4Base.relation.RC_REFLEXIVE"
+  "RC_IDEM" > "HOL4Base.relation.RC_IDEM"
+  "EMPTY_REL_def" > "HOL4Base.relation.EMPTY_REL_def"
+  "EMPTY_REL_DEF" > "HOL4Base.relation.EMPTY_REL_DEF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/res_quan.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,37 @@
+import
+
+import_segment "hol4"
+
+thm_maps
+  "RES_SELECT_UNIV" > "HOL4Vec.res_quan.RES_SELECT_UNIV"
+  "RES_SELECT_EMPTY" > "HOL4Vec.res_quan.RES_SELECT_EMPTY"
+  "RES_SELECT" > "HOL4Base.bool.RES_SELECT_DEF"
+  "RES_FORALL_UNIV" > "HOL4Vec.res_quan.RES_FORALL_UNIV"
+  "RES_FORALL_UNIQUE" > "HOL4Vec.res_quan.RES_FORALL_UNIQUE"
+  "RES_FORALL_REORDER" > "HOL4Vec.res_quan.RES_FORALL_REORDER"
+  "RES_FORALL_NULL" > "HOL4Vec.res_quan.RES_FORALL_NULL"
+  "RES_FORALL_FORALL" > "HOL4Vec.res_quan.RES_FORALL_FORALL"
+  "RES_FORALL_EMPTY" > "HOL4Vec.res_quan.RES_FORALL_EMPTY"
+  "RES_FORALL_DISJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_DISJ_DIST"
+  "RES_FORALL_CONJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_CONJ_DIST"
+  "RES_FORALL" > "HOL4Base.bool.RES_FORALL_DEF"
+  "RES_EXISTS_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIV"
+  "RES_EXISTS_UNIQUE_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_UNIV"
+  "RES_EXISTS_UNIQUE_NULL" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_NULL"
+  "RES_EXISTS_UNIQUE_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_EMPTY"
+  "RES_EXISTS_UNIQUE_ALT" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_ALT"
+  "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
+  "RES_EXISTS_REORDER" > "HOL4Vec.res_quan.RES_EXISTS_REORDER"
+  "RES_EXISTS_NULL" > "HOL4Vec.res_quan.RES_EXISTS_NULL"
+  "RES_EXISTS_EQUAL" > "HOL4Vec.res_quan.RES_EXISTS_EQUAL"
+  "RES_EXISTS_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_EMPTY"
+  "RES_EXISTS_DISJ_DIST" > "HOL4Vec.res_quan.RES_EXISTS_DISJ_DIST"
+  "RES_EXISTS_ALT" > "HOL4Vec.res_quan.RES_EXISTS_ALT"
+  "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS_DEF"
+  "RES_DISJ_EXISTS_DIST" > "HOL4Vec.res_quan.RES_DISJ_EXISTS_DIST"
+  "RES_ABSTRACT_IDEMPOT" > "HOL4Vec.res_quan.RES_ABSTRACT_IDEMPOT"
+  "RES_ABSTRACT_EQUAL_EQ" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL_EQ"
+  "RES_ABSTRACT_EQUAL" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL"
+  "RES_ABSTRACT" > "HOL4Vec.res_quan.RES_ABSTRACT"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/rich_list.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,373 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "UNZIP_SND" > "UNZIP_SND_def"
+  "UNZIP_FST" > "UNZIP_FST_def"
+  "SUFFIX" > "SUFFIX_def"
+  "SPLITP" > "SPLITP_def"
+  "SNOC" > "SNOC_def"
+  "SEG" > "SEG_def"
+  "SCANR" > "SCANR_def"
+  "SCANL" > "SCANL_def"
+  "REPLICATE" > "REPLICATE_def"
+  "PREFIX" > "PREFIX_def"
+  "OR_EL" > "OR_EL_def"
+  "LASTN" > "LASTN_def"
+  "IS_SUFFIX" > "IS_SUFFIX_def"
+  "IS_SUBLIST" > "IS_SUBLIST_def"
+  "IS_PREFIX" > "IS_PREFIX_def"
+  "GENLIST" > "GENLIST_def"
+  "FIRSTN" > "FIRSTN_def"
+  "ELL" > "ELL_def"
+  "BUTLASTN" > "BUTLASTN_def"
+  "BUTFIRSTN" > "BUTFIRSTN_def"
+  "AND_EL" > "AND_EL_def"
+
+const_maps
+  "UNZIP_SND" > "HOL4Base.rich_list.UNZIP_SND"
+  "UNZIP_FST" > "HOL4Base.rich_list.UNZIP_FST"
+  "SUFFIX" > "HOL4Base.rich_list.SUFFIX"
+  "PREFIX" > "HOL4Base.rich_list.PREFIX"
+  "OR_EL" > "HOL4Base.rich_list.OR_EL"
+  "AND_EL" > "HOL4Base.rich_list.AND_EL"
+
+thm_maps
+  "list_INDUCT" > "Compatibility.list_INDUCT"
+  "list_CASES" > "Compatibility.list_CASES"
+  "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
+  "ZIP_SNOC" > "HOL4Base.rich_list.ZIP_SNOC"
+  "ZIP" > "Compatibility.ZIP"
+  "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
+  "UNZIP_SNOC" > "HOL4Base.rich_list.UNZIP_SNOC"
+  "UNZIP_SND_def" > "HOL4Base.rich_list.UNZIP_SND_def"
+  "UNZIP_SND_DEF" > "HOL4Base.rich_list.UNZIP_SND_DEF"
+  "UNZIP_FST_def" > "HOL4Base.rich_list.UNZIP_FST_def"
+  "UNZIP_FST_DEF" > "HOL4Base.rich_list.UNZIP_FST_DEF"
+  "UNZIP" > "Compatibility.UNZIP"
+  "TL_SNOC" > "HOL4Base.rich_list.TL_SNOC"
+  "TL" > "List.tl.simps_2"
+  "SUM_SNOC" > "HOL4Base.rich_list.SUM_SNOC"
+  "SUM_REVERSE" > "HOL4Base.rich_list.SUM_REVERSE"
+  "SUM_FOLDR" > "Compatibility.sum_def"
+  "SUM_FOLDL" > "HOL4Base.rich_list.SUM_FOLDL"
+  "SUM_FLAT" > "HOL4Base.rich_list.SUM_FLAT"
+  "SUM_APPEND" > "HOL4Base.rich_list.SUM_APPEND"
+  "SUM" > "Compatibility.SUM"
+  "SUFFIX_def" > "HOL4Base.rich_list.SUFFIX_def"
+  "SUFFIX_DEF" > "HOL4Base.rich_list.SUFFIX_DEF"
+  "SPLITP" > "HOL4Base.rich_list.SPLITP"
+  "SOME_EL_SNOC" > "HOL4Base.rich_list.SOME_EL_SNOC"
+  "SOME_EL_SEG" > "HOL4Base.rich_list.SOME_EL_SEG"
+  "SOME_EL_REVERSE" > "List.list_ex_rev"
+  "SOME_EL_MAP" > "HOL4Base.rich_list.SOME_EL_MAP"
+  "SOME_EL_LASTN" > "HOL4Base.rich_list.SOME_EL_LASTN"
+  "SOME_EL_FOLDR_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDR_MAP"
+  "SOME_EL_FOLDR" > "HOL4Base.rich_list.SOME_EL_FOLDR"
+  "SOME_EL_FOLDL_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDL_MAP"
+  "SOME_EL_FOLDL" > "HOL4Base.rich_list.SOME_EL_FOLDL"
+  "SOME_EL_FIRSTN" > "HOL4Base.rich_list.SOME_EL_FIRSTN"
+  "SOME_EL_DISJ" > "HOL4Base.rich_list.SOME_EL_DISJ"
+  "SOME_EL_BUTLASTN" > "HOL4Base.rich_list.SOME_EL_BUTLASTN"
+  "SOME_EL_BUTFIRSTN" > "HOL4Base.rich_list.SOME_EL_BUTFIRSTN"
+  "SOME_EL_APPEND" > "List.list_ex_append"
+  "SOME_EL" > "Compatibility.list_exists_DEF"
+  "SNOC_REVERSE_CONS" > "HOL4Base.rich_list.SNOC_REVERSE_CONS"
+  "SNOC_INDUCT" > "HOL4Base.rich_list.SNOC_INDUCT"
+  "SNOC_FOLDR" > "HOL4Base.rich_list.SNOC_FOLDR"
+  "SNOC_EQ_LENGTH_EQ" > "HOL4Base.rich_list.SNOC_EQ_LENGTH_EQ"
+  "SNOC_CASES" > "HOL4Base.rich_list.SNOC_CASES"
+  "SNOC_Axiom" > "HOL4Base.rich_list.SNOC_Axiom"
+  "SNOC_APPEND" > "HOL4Base.rich_list.SNOC_APPEND"
+  "SNOC_11" > "HOL4Base.rich_list.SNOC_11"
+  "SNOC" > "HOL4Base.rich_list.SNOC"
+  "SEG_SUC_CONS" > "HOL4Base.rich_list.SEG_SUC_CONS"
+  "SEG_SNOC" > "HOL4Base.rich_list.SEG_SNOC"
+  "SEG_SEG" > "HOL4Base.rich_list.SEG_SEG"
+  "SEG_REVERSE" > "HOL4Base.rich_list.SEG_REVERSE"
+  "SEG_LENGTH_SNOC" > "HOL4Base.rich_list.SEG_LENGTH_SNOC"
+  "SEG_LENGTH_ID" > "HOL4Base.rich_list.SEG_LENGTH_ID"
+  "SEG_LASTN_BUTLASTN" > "HOL4Base.rich_list.SEG_LASTN_BUTLASTN"
+  "SEG_FIRSTN_BUTFISTN" > "HOL4Base.rich_list.SEG_FIRSTN_BUTFISTN"
+  "SEG_APPEND2" > "HOL4Base.rich_list.SEG_APPEND2"
+  "SEG_APPEND1" > "HOL4Base.rich_list.SEG_APPEND1"
+  "SEG_APPEND" > "HOL4Base.rich_list.SEG_APPEND"
+  "SEG_0_SNOC" > "HOL4Base.rich_list.SEG_0_SNOC"
+  "SEG" > "HOL4Base.rich_list.SEG"
+  "SCANR" > "HOL4Base.rich_list.SCANR"
+  "SCANL" > "HOL4Base.rich_list.SCANL"
+  "REVERSE_SNOC" > "HOL4Base.rich_list.REVERSE_SNOC"
+  "REVERSE_REVERSE" > "List.rev_rev_ident"
+  "REVERSE_FOLDR" > "HOL4Base.rich_list.REVERSE_FOLDR"
+  "REVERSE_FLAT" > "HOL4Base.rich_list.REVERSE_FLAT"
+  "REVERSE_EQ_NIL" > "List.rev_is_Nil_conv"
+  "REVERSE_APPEND" > "List.rev_append"
+  "REVERSE" > "HOL4Base.rich_list.REVERSE"
+  "REPLICATE" > "HOL4Base.rich_list.REPLICATE"
+  "PREFIX_def" > "HOL4Base.rich_list.PREFIX_def"
+  "PREFIX_FOLDR" > "HOL4Base.rich_list.PREFIX_FOLDR"
+  "PREFIX_DEF" > "HOL4Base.rich_list.PREFIX_DEF"
+  "PREFIX" > "HOL4Base.rich_list.PREFIX"
+  "OR_EL_def" > "HOL4Base.rich_list.OR_EL_def"
+  "OR_EL_FOLDR" > "HOL4Base.rich_list.OR_EL_FOLDR"
+  "OR_EL_FOLDL" > "HOL4Base.rich_list.OR_EL_FOLDL"
+  "OR_EL_DEF" > "HOL4Base.rich_list.OR_EL_DEF"
+  "NULL_FOLDR" > "HOL4Base.rich_list.NULL_FOLDR"
+  "NULL_FOLDL" > "HOL4Base.rich_list.NULL_FOLDL"
+  "NULL_EQ_NIL" > "List.eq_Nil_null"
+  "NULL_DEF" > "Compatibility.NULL_DEF"
+  "NULL" > "HOL4Base.list.NULL"
+  "NOT_SOME_EL_ALL_EL" > "HOL4Base.list.NOT_EXISTS"
+  "NOT_SNOC_NIL" > "HOL4Base.rich_list.NOT_SNOC_NIL"
+  "NOT_NIL_SNOC" > "HOL4Base.rich_list.NOT_NIL_SNOC"
+  "NOT_NIL_CONS" > "List.list.distinct_1"
+  "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
+  "NOT_CONS_NIL" > "List.list.distinct_2"
+  "NOT_ALL_EL_SOME_EL" > "HOL4Base.list.NOT_EVERY"
+  "MONOID_APPEND_NIL" > "HOL4Base.rich_list.MONOID_APPEND_NIL"
+  "MAP_o" > "List.map.comp"
+  "MAP_SNOC" > "HOL4Base.rich_list.MAP_SNOC"
+  "MAP_REVERSE" > "List.rev_map"
+  "MAP_MAP_o" > "List.map.compositionality"
+  "MAP_FOLDR" > "HOL4Base.rich_list.MAP_FOLDR"
+  "MAP_FOLDL" > "HOL4Base.rich_list.MAP_FOLDL"
+  "MAP_FLAT" > "List.map_concat"
+  "MAP_FILTER" > "HOL4Base.rich_list.MAP_FILTER"
+  "MAP_APPEND" > "List.map_append"
+  "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
+  "MAP2" > "Compatibility.MAP2"
+  "MAP" > "Compatibility.MAP"
+  "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
+  "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
+  "LENGTH_UNZIP_SND" > "HOL4Base.rich_list.LENGTH_UNZIP_SND"
+  "LENGTH_UNZIP_FST" > "HOL4Base.rich_list.LENGTH_UNZIP_FST"
+  "LENGTH_SNOC" > "HOL4Base.rich_list.LENGTH_SNOC"
+  "LENGTH_SEG" > "HOL4Base.rich_list.LENGTH_SEG"
+  "LENGTH_SCANR" > "HOL4Base.rich_list.LENGTH_SCANR"
+  "LENGTH_SCANL" > "HOL4Base.rich_list.LENGTH_SCANL"
+  "LENGTH_REVERSE" > "List.length_rev"
+  "LENGTH_REPLICATE" > "HOL4Base.rich_list.LENGTH_REPLICATE"
+  "LENGTH_NOT_NULL" > "HOL4Base.rich_list.LENGTH_NOT_NULL"
+  "LENGTH_NIL" > "List.length_0_conv"
+  "LENGTH_MAP2" > "HOL4Base.rich_list.LENGTH_MAP2"
+  "LENGTH_MAP" > "List.length_map"
+  "LENGTH_LASTN" > "HOL4Base.rich_list.LENGTH_LASTN"
+  "LENGTH_GENLIST" > "HOL4Base.rich_list.LENGTH_GENLIST"
+  "LENGTH_FOLDR" > "HOL4Base.rich_list.LENGTH_FOLDR"
+  "LENGTH_FOLDL" > "HOL4Base.rich_list.LENGTH_FOLDL"
+  "LENGTH_FLAT" > "HOL4Base.rich_list.LENGTH_FLAT"
+  "LENGTH_FIRSTN" > "HOL4Base.rich_list.LENGTH_FIRSTN"
+  "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
+  "LENGTH_EQ" > "HOL4Base.rich_list.LENGTH_EQ"
+  "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
+  "LENGTH_BUTLASTN" > "HOL4Base.rich_list.LENGTH_BUTLASTN"
+  "LENGTH_BUTLAST" > "HOL4Base.rich_list.LENGTH_BUTLAST"
+  "LENGTH_BUTFIRSTN" > "HOL4Base.rich_list.LENGTH_BUTFIRSTN"
+  "LENGTH_APPEND" > "List.length_append"
+  "LENGTH" > "Compatibility.LENGTH"
+  "LAST_LASTN_LAST" > "HOL4Base.rich_list.LAST_LASTN_LAST"
+  "LAST_CONS" > "HOL4Base.list.LAST_CONS"
+  "LASTN_SEG" > "HOL4Base.rich_list.LASTN_SEG"
+  "LASTN_REVERSE" > "HOL4Base.rich_list.LASTN_REVERSE"
+  "LASTN_MAP" > "HOL4Base.rich_list.LASTN_MAP"
+  "LASTN_LENGTH_ID" > "HOL4Base.rich_list.LASTN_LENGTH_ID"
+  "LASTN_LENGTH_APPEND" > "HOL4Base.rich_list.LASTN_LENGTH_APPEND"
+  "LASTN_LASTN" > "HOL4Base.rich_list.LASTN_LASTN"
+  "LASTN_CONS" > "HOL4Base.rich_list.LASTN_CONS"
+  "LASTN_BUTLASTN" > "HOL4Base.rich_list.LASTN_BUTLASTN"
+  "LASTN_BUTFIRSTN" > "HOL4Base.rich_list.LASTN_BUTFIRSTN"
+  "LASTN_APPEND2" > "HOL4Base.rich_list.LASTN_APPEND2"
+  "LASTN_APPEND1" > "HOL4Base.rich_list.LASTN_APPEND1"
+  "LASTN_1" > "HOL4Base.rich_list.LASTN_1"
+  "LASTN" > "HOL4Base.rich_list.LASTN"
+  "LAST" > "HOL4Base.rich_list.LAST"
+  "IS_SUFFIX_REVERSE" > "HOL4Base.rich_list.IS_SUFFIX_REVERSE"
+  "IS_SUFFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_SUFFIX_IS_SUBLIST"
+  "IS_SUFFIX_APPEND" > "HOL4Base.rich_list.IS_SUFFIX_APPEND"
+  "IS_SUFFIX" > "HOL4Base.rich_list.IS_SUFFIX"
+  "IS_SUBLIST_REVERSE" > "HOL4Base.rich_list.IS_SUBLIST_REVERSE"
+  "IS_SUBLIST_APPEND" > "HOL4Base.rich_list.IS_SUBLIST_APPEND"
+  "IS_SUBLIST" > "HOL4Base.rich_list.IS_SUBLIST"
+  "IS_PREFIX_REVERSE" > "HOL4Base.rich_list.IS_PREFIX_REVERSE"
+  "IS_PREFIX_PREFIX" > "HOL4Base.rich_list.IS_PREFIX_PREFIX"
+  "IS_PREFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_PREFIX_IS_SUBLIST"
+  "IS_PREFIX_APPEND" > "HOL4Base.rich_list.IS_PREFIX_APPEND"
+  "IS_PREFIX" > "HOL4Base.rich_list.IS_PREFIX"
+  "IS_EL_SOME_EL" > "HOL4Base.rich_list.IS_EL_SOME_EL"
+  "IS_EL_SNOC" > "HOL4Base.rich_list.IS_EL_SNOC"
+  "IS_EL_SEG" > "HOL4Base.rich_list.IS_EL_SEG"
+  "IS_EL_REVERSE" > "HOL4Base.rich_list.IS_EL_REVERSE"
+  "IS_EL_REPLICATE" > "HOL4Base.rich_list.IS_EL_REPLICATE"
+  "IS_EL_LASTN" > "HOL4Base.rich_list.IS_EL_LASTN"
+  "IS_EL_FOLDR_MAP" > "HOL4Base.rich_list.IS_EL_FOLDR_MAP"
+  "IS_EL_FOLDR" > "HOL4Base.rich_list.IS_EL_FOLDR"
+  "IS_EL_FOLDL_MAP" > "HOL4Base.rich_list.IS_EL_FOLDL_MAP"
+  "IS_EL_FOLDL" > "HOL4Base.rich_list.IS_EL_FOLDL"
+  "IS_EL_FIRSTN" > "HOL4Base.rich_list.IS_EL_FIRSTN"
+  "IS_EL_FILTER" > "HOL4Base.rich_list.IS_EL_FILTER"
+  "IS_EL_DEF" > "HOL4Base.rich_list.IS_EL_DEF"
+  "IS_EL_BUTLASTN" > "HOL4Base.rich_list.IS_EL_BUTLASTN"
+  "IS_EL_BUTFIRSTN" > "HOL4Base.rich_list.IS_EL_BUTFIRSTN"
+  "IS_EL_APPEND" > "HOL4Base.list.MEM_APPEND"
+  "IS_EL" > "Compatibility.MEM"
+  "HD" > "List.hd.simps"
+  "GENLIST" > "HOL4Base.rich_list.GENLIST"
+  "FOLDR_SNOC" > "HOL4Base.rich_list.FOLDR_SNOC"
+  "FOLDR_SINGLE" > "HOL4Base.rich_list.FOLDR_SINGLE"
+  "FOLDR_REVERSE" > "HOL4Base.rich_list.FOLDR_REVERSE"
+  "FOLDR_MAP_REVERSE" > "HOL4Base.rich_list.FOLDR_MAP_REVERSE"
+  "FOLDR_MAP" > "HOL4Base.rich_list.FOLDR_MAP"
+  "FOLDR_FOLDL_REVERSE" > "List.foldr_foldl"
+  "FOLDR_FOLDL" > "HOL4Base.rich_list.FOLDR_FOLDL"
+  "FOLDR_FILTER_REVERSE" > "HOL4Base.rich_list.FOLDR_FILTER_REVERSE"
+  "FOLDR_FILTER" > "HOL4Base.rich_list.FOLDR_FILTER"
+  "FOLDR_CONS_NIL" > "HOL4Base.rich_list.FOLDR_CONS_NIL"
+  "FOLDR_APPEND" > "List.foldr_append"
+  "FOLDR" > "Compatibility.FOLDR"
+  "FOLDL_SNOC_NIL" > "HOL4Base.rich_list.FOLDL_SNOC_NIL"
+  "FOLDL_SNOC" > "HOL4Base.rich_list.FOLDL_SNOC"
+  "FOLDL_SINGLE" > "HOL4Base.rich_list.FOLDL_SINGLE"
+  "FOLDL_REVERSE" > "HOL4Base.rich_list.FOLDL_REVERSE"
+  "FOLDL_MAP" > "List.foldl_map"
+  "FOLDL_FOLDR_REVERSE" > "List.foldl_foldr"
+  "FOLDL_FILTER" > "HOL4Base.rich_list.FOLDL_FILTER"
+  "FOLDL_APPEND" > "List.foldl_append"
+  "FOLDL" > "Compatibility.FOLDL"
+  "FLAT_SNOC" > "HOL4Base.rich_list.FLAT_SNOC"
+  "FLAT_REVERSE" > "HOL4Base.rich_list.FLAT_REVERSE"
+  "FLAT_FOLDR" > "HOL4Base.rich_list.FLAT_FOLDR"
+  "FLAT_FLAT" > "HOL4Base.rich_list.FLAT_FLAT"
+  "FLAT_APPEND" > "List.concat_append"
+  "FLAT" > "Compatibility.FLAT"
+  "FIRSTN_SNOC" > "HOL4Base.rich_list.FIRSTN_SNOC"
+  "FIRSTN_SEG" > "HOL4Base.rich_list.FIRSTN_SEG"
+  "FIRSTN_REVERSE" > "HOL4Base.rich_list.FIRSTN_REVERSE"
+  "FIRSTN_LENGTH_ID" > "HOL4Base.rich_list.FIRSTN_LENGTH_ID"
+  "FIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.FIRSTN_LENGTH_APPEND"
+  "FIRSTN_FIRSTN" > "HOL4Base.rich_list.FIRSTN_FIRSTN"
+  "FIRSTN_BUTLASTN" > "HOL4Base.rich_list.FIRSTN_BUTLASTN"
+  "FIRSTN_APPEND2" > "HOL4Base.rich_list.FIRSTN_APPEND2"
+  "FIRSTN_APPEND1" > "HOL4Base.rich_list.FIRSTN_APPEND1"
+  "FIRSTN" > "HOL4Base.rich_list.FIRSTN"
+  "FILTER_SNOC" > "HOL4Base.rich_list.FILTER_SNOC"
+  "FILTER_REVERSE" > "List.rev_filter"
+  "FILTER_MAP" > "List.filter_map"
+  "FILTER_IDEM" > "HOL4Base.rich_list.FILTER_IDEM"
+  "FILTER_FOLDR" > "HOL4Base.rich_list.FILTER_FOLDR"
+  "FILTER_FOLDL" > "HOL4Base.rich_list.FILTER_FOLDL"
+  "FILTER_FLAT" > "List.filter_concat"
+  "FILTER_FILTER" > "HOL4Base.rich_list.FILTER_FILTER"
+  "FILTER_COMM" > "HOL4Base.rich_list.FILTER_COMM"
+  "FILTER_APPEND" > "List.filter_append"
+  "FILTER" > "Compatibility.FILTER"
+  "FCOMM_FOLDR_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDR_FLAT"
+  "FCOMM_FOLDR_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDR_APPEND"
+  "FCOMM_FOLDL_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDL_FLAT"
+  "FCOMM_FOLDL_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDL_APPEND"
+  "EQ_LIST" > "HOL4Base.list.EQ_LIST"
+  "EL_SNOC" > "HOL4Base.rich_list.EL_SNOC"
+  "EL_SEG" > "HOL4Base.rich_list.EL_SEG"
+  "EL_REVERSE_ELL" > "HOL4Base.rich_list.EL_REVERSE_ELL"
+  "EL_REVERSE" > "HOL4Base.rich_list.EL_REVERSE"
+  "EL_PRE_LENGTH" > "HOL4Base.rich_list.EL_PRE_LENGTH"
+  "EL_MAP" > "HOL4Base.rich_list.EL_MAP"
+  "EL_LENGTH_SNOC" > "HOL4Base.rich_list.EL_LENGTH_SNOC"
+  "EL_LENGTH_APPEND" > "HOL4Base.rich_list.EL_LENGTH_APPEND"
+  "EL_IS_EL" > "HOL4Base.rich_list.EL_IS_EL"
+  "EL_ELL" > "HOL4Base.rich_list.EL_ELL"
+  "EL_CONS" > "HOL4Base.rich_list.EL_CONS"
+  "EL_APPEND2" > "HOL4Base.rich_list.EL_APPEND2"
+  "EL_APPEND1" > "HOL4Base.rich_list.EL_APPEND1"
+  "ELL_SUC_SNOC" > "HOL4Base.rich_list.ELL_SUC_SNOC"
+  "ELL_SNOC" > "HOL4Base.rich_list.ELL_SNOC"
+  "ELL_SEG" > "HOL4Base.rich_list.ELL_SEG"
+  "ELL_REVERSE_EL" > "HOL4Base.rich_list.ELL_REVERSE_EL"
+  "ELL_REVERSE" > "HOL4Base.rich_list.ELL_REVERSE"
+  "ELL_PRE_LENGTH" > "HOL4Base.rich_list.ELL_PRE_LENGTH"
+  "ELL_MAP" > "HOL4Base.rich_list.ELL_MAP"
+  "ELL_LENGTH_SNOC" > "HOL4Base.rich_list.ELL_LENGTH_SNOC"
+  "ELL_LENGTH_CONS" > "HOL4Base.rich_list.ELL_LENGTH_CONS"
+  "ELL_LENGTH_APPEND" > "HOL4Base.rich_list.ELL_LENGTH_APPEND"
+  "ELL_LAST" > "HOL4Base.rich_list.ELL_LAST"
+  "ELL_IS_EL" > "HOL4Base.rich_list.ELL_IS_EL"
+  "ELL_EL" > "HOL4Base.rich_list.ELL_EL"
+  "ELL_CONS" > "HOL4Base.rich_list.ELL_CONS"
+  "ELL_APPEND2" > "HOL4Base.rich_list.ELL_APPEND2"
+  "ELL_APPEND1" > "HOL4Base.rich_list.ELL_APPEND1"
+  "ELL_0_SNOC" > "HOL4Base.rich_list.ELL_0_SNOC"
+  "ELL" > "HOL4Base.rich_list.ELL"
+  "EL" > "HOL4Base.rich_list.EL"
+  "CONS_APPEND" > "HOL4Base.rich_list.CONS_APPEND"
+  "CONS_11" > "List.list.inject"
+  "CONS" > "HOL4Base.list.CONS"
+  "COMM_MONOID_FOLDR" > "HOL4Base.rich_list.COMM_MONOID_FOLDR"
+  "COMM_MONOID_FOLDL" > "HOL4Base.rich_list.COMM_MONOID_FOLDL"
+  "COMM_ASSOC_FOLDR_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDR_REVERSE"
+  "COMM_ASSOC_FOLDL_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDL_REVERSE"
+  "BUTLAST_CONS" > "HOL4Base.list.FRONT_CONS"
+  "BUTLASTN_SUC_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_SUC_BUTLAST"
+  "BUTLASTN_SEG" > "HOL4Base.rich_list.BUTLASTN_SEG"
+  "BUTLASTN_REVERSE" > "HOL4Base.rich_list.BUTLASTN_REVERSE"
+  "BUTLASTN_MAP" > "HOL4Base.rich_list.BUTLASTN_MAP"
+  "BUTLASTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTLASTN_LENGTH_NIL"
+  "BUTLASTN_LENGTH_CONS" > "HOL4Base.rich_list.BUTLASTN_LENGTH_CONS"
+  "BUTLASTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTLASTN_LENGTH_APPEND"
+  "BUTLASTN_LASTN_NIL" > "HOL4Base.rich_list.BUTLASTN_LASTN_NIL"
+  "BUTLASTN_LASTN" > "HOL4Base.rich_list.BUTLASTN_LASTN"
+  "BUTLASTN_FIRSTN" > "HOL4Base.rich_list.BUTLASTN_FIRSTN"
+  "BUTLASTN_CONS" > "HOL4Base.rich_list.BUTLASTN_CONS"
+  "BUTLASTN_BUTLASTN" > "HOL4Base.rich_list.BUTLASTN_BUTLASTN"
+  "BUTLASTN_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_BUTLAST"
+  "BUTLASTN_APPEND2" > "HOL4Base.rich_list.BUTLASTN_APPEND2"
+  "BUTLASTN_APPEND1" > "HOL4Base.rich_list.BUTLASTN_APPEND1"
+  "BUTLASTN_1" > "HOL4Base.rich_list.BUTLASTN_1"
+  "BUTLASTN" > "HOL4Base.rich_list.BUTLASTN"
+  "BUTLAST" > "HOL4Base.rich_list.BUTLAST"
+  "BUTFIRSTN_SNOC" > "HOL4Base.rich_list.BUTFIRSTN_SNOC"
+  "BUTFIRSTN_SEG" > "HOL4Base.rich_list.BUTFIRSTN_SEG"
+  "BUTFIRSTN_REVERSE" > "HOL4Base.rich_list.BUTFIRSTN_REVERSE"
+  "BUTFIRSTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_NIL"
+  "BUTFIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_APPEND"
+  "BUTFIRSTN_LASTN" > "HOL4Base.rich_list.BUTFIRSTN_LASTN"
+  "BUTFIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN_BUTFIRSTN"
+  "BUTFIRSTN_APPEND2" > "HOL4Base.rich_list.BUTFIRSTN_APPEND2"
+  "BUTFIRSTN_APPEND1" > "HOL4Base.rich_list.BUTFIRSTN_APPEND1"
+  "BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN"
+  "ASSOC_FOLDR_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDR_FLAT"
+  "ASSOC_FOLDL_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDL_FLAT"
+  "ASSOC_APPEND" > "HOL4Base.rich_list.ASSOC_APPEND"
+  "APPEND_SNOC" > "HOL4Base.rich_list.APPEND_SNOC"
+  "APPEND_NIL" > "HOL4Base.rich_list.APPEND_NIL"
+  "APPEND_LENGTH_EQ" > "HOL4Base.rich_list.APPEND_LENGTH_EQ"
+  "APPEND_FOLDR" > "HOL4Base.rich_list.APPEND_FOLDR"
+  "APPEND_FOLDL" > "HOL4Base.rich_list.APPEND_FOLDL"
+  "APPEND_FIRSTN_LASTN" > "HOL4Base.rich_list.APPEND_FIRSTN_LASTN"
+  "APPEND_FIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_FIRSTN_BUTFIRSTN"
+  "APPEND_BUTLAST_LAST" > "List.append_butlast_last_id"
+  "APPEND_BUTLASTN_LASTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_LASTN"
+  "APPEND_BUTLASTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_BUTFIRSTN"
+  "APPEND_ASSOC" > "List.append_assoc"
+  "APPEND" > "Compatibility.APPEND"
+  "AND_EL_def" > "HOL4Base.rich_list.AND_EL_def"
+  "AND_EL_FOLDR" > "HOL4Base.rich_list.AND_EL_FOLDR"
+  "AND_EL_FOLDL" > "HOL4Base.rich_list.AND_EL_FOLDL"
+  "AND_EL_DEF" > "HOL4Base.rich_list.AND_EL_DEF"
+  "ALL_EL_SNOC" > "HOL4Base.rich_list.ALL_EL_SNOC"
+  "ALL_EL_SEG" > "HOL4Base.rich_list.ALL_EL_SEG"
+  "ALL_EL_REVERSE" > "List.list_all_rev"
+  "ALL_EL_REPLICATE" > "HOL4Base.rich_list.ALL_EL_REPLICATE"
+  "ALL_EL_MAP" > "HOL4Base.rich_list.ALL_EL_MAP"
+  "ALL_EL_LASTN" > "HOL4Base.rich_list.ALL_EL_LASTN"
+  "ALL_EL_FOLDR_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDR_MAP"
+  "ALL_EL_FOLDR" > "HOL4Base.rich_list.ALL_EL_FOLDR"
+  "ALL_EL_FOLDL_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDL_MAP"
+  "ALL_EL_FOLDL" > "HOL4Base.rich_list.ALL_EL_FOLDL"
+  "ALL_EL_FIRSTN" > "HOL4Base.rich_list.ALL_EL_FIRSTN"
+  "ALL_EL_CONJ" > "HOL4Base.list.EVERY_CONJ"
+  "ALL_EL_BUTLASTN" > "HOL4Base.rich_list.ALL_EL_BUTLASTN"
+  "ALL_EL_BUTFIRSTN" > "HOL4Base.rich_list.ALL_EL_BUTFIRSTN"
+  "ALL_EL_APPEND" > "List.list_all_append"
+  "ALL_EL" > "Compatibility.EVERY_DEF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/seq.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,112 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "sums" > "sums_def"
+  "summable" > "summable_def"
+  "suminf" > "suminf_def"
+  "subseq" > "subseq_def"
+  "mono" > "mono_def"
+  "lim" > "lim_def"
+  "hol4-->" > "hol4-->_def"
+  "convergent" > "convergent_def"
+  "cauchy" > "cauchy_def"
+
+const_maps
+  "sums" > "HOL4Real.seq.sums"
+  "summable" > "HOL4Real.seq.summable"
+  "suminf" > "HOL4Real.seq.suminf"
+  "subseq" > "HOL4Real.seq.subseq"
+  "mono" > "HOL4Real.seq.mono"
+  "lim" > "HOL4Real.seq.lim"
+  "hol4-->" > "HOL4Real.seq.hol4-->"
+  "convergent" > "HOL4Real.seq.convergent"
+  "cauchy" > "HOL4Real.seq.cauchy"
+
+const_renames
+  "-->" > "hol4-->"
+
+thm_maps
+  "tends_num_real" > "HOL4Real.seq.tends_num_real"
+  "sums_def" > "HOL4Real.seq.sums_def"
+  "sums" > "HOL4Real.seq.sums"
+  "summable_def" > "HOL4Real.seq.summable_def"
+  "summable" > "HOL4Real.seq.summable"
+  "suminf_def" > "HOL4Real.seq.suminf_def"
+  "suminf" > "HOL4Real.seq.suminf"
+  "subseq_def" > "HOL4Real.seq.subseq_def"
+  "subseq" > "HOL4Real.seq.subseq"
+  "mono_def" > "HOL4Real.seq.mono_def"
+  "mono" > "HOL4Real.seq.mono"
+  "lim_def" > "HOL4Real.seq.lim_def"
+  "lim" > "HOL4Real.seq.lim"
+  "hol4-->_def" > "HOL4Real.seq.hol4-->_def"
+  "convergent_def" > "HOL4Real.seq.convergent_def"
+  "convergent" > "HOL4Real.seq.convergent"
+  "cauchy_def" > "HOL4Real.seq.cauchy_def"
+  "cauchy" > "HOL4Real.seq.cauchy"
+  "SUM_UNIQ" > "HOL4Real.seq.SUM_UNIQ"
+  "SUM_SUMMABLE" > "HOL4Real.seq.SUM_SUMMABLE"
+  "SUMMABLE_SUM" > "HOL4Real.seq.SUMMABLE_SUM"
+  "SUBSEQ_SUC" > "HOL4Real.seq.SUBSEQ_SUC"
+  "SER_ZERO" > "HOL4Real.seq.SER_ZERO"
+  "SER_SUB" > "HOL4Real.seq.SER_SUB"
+  "SER_RATIO" > "HOL4Real.seq.SER_RATIO"
+  "SER_POS_LT_PAIR" > "HOL4Real.seq.SER_POS_LT_PAIR"
+  "SER_POS_LT" > "HOL4Real.seq.SER_POS_LT"
+  "SER_POS_LE" > "HOL4Real.seq.SER_POS_LE"
+  "SER_PAIR" > "HOL4Real.seq.SER_PAIR"
+  "SER_OFFSET" > "HOL4Real.seq.SER_OFFSET"
+  "SER_NEG" > "HOL4Real.seq.SER_NEG"
+  "SER_LE2" > "HOL4Real.seq.SER_LE2"
+  "SER_LE" > "HOL4Real.seq.SER_LE"
+  "SER_GROUP" > "HOL4Real.seq.SER_GROUP"
+  "SER_COMPARA" > "HOL4Real.seq.SER_COMPARA"
+  "SER_COMPAR" > "HOL4Real.seq.SER_COMPAR"
+  "SER_CMUL" > "HOL4Real.seq.SER_CMUL"
+  "SER_CDIV" > "HOL4Real.seq.SER_CDIV"
+  "SER_CAUCHY" > "HOL4Real.seq.SER_CAUCHY"
+  "SER_ADD" > "HOL4Real.seq.SER_ADD"
+  "SER_ACONV" > "HOL4Real.seq.SER_ACONV"
+  "SER_ABS" > "HOL4Real.seq.SER_ABS"
+  "SER_0" > "HOL4Real.seq.SER_0"
+  "SEQ_UNIQ" > "HOL4Real.seq.SEQ_UNIQ"
+  "SEQ_SUC" > "HOL4Real.seq.SEQ_SUC"
+  "SEQ_SUBLE" > "HOL4Real.seq.SEQ_SUBLE"
+  "SEQ_SUB" > "HOL4Real.seq.SEQ_SUB"
+  "SEQ_SBOUNDED" > "HOL4Real.seq.SEQ_SBOUNDED"
+  "SEQ_POWER_ABS" > "HOL4Real.seq.SEQ_POWER_ABS"
+  "SEQ_POWER" > "HOL4Real.seq.SEQ_POWER"
+  "SEQ_NEG_CONV" > "HOL4Real.seq.SEQ_NEG_CONV"
+  "SEQ_NEG_BOUNDED" > "HOL4Real.seq.SEQ_NEG_BOUNDED"
+  "SEQ_NEG" > "HOL4Real.seq.SEQ_NEG"
+  "SEQ_MUL" > "HOL4Real.seq.SEQ_MUL"
+  "SEQ_MONOSUB" > "HOL4Real.seq.SEQ_MONOSUB"
+  "SEQ_LIM" > "HOL4Real.seq.SEQ_LIM"
+  "SEQ_LE" > "HOL4Real.seq.SEQ_LE"
+  "SEQ_INV0" > "HOL4Real.seq.SEQ_INV0"
+  "SEQ_INV" > "HOL4Real.seq.SEQ_INV"
+  "SEQ_ICONV" > "HOL4Real.seq.SEQ_ICONV"
+  "SEQ_DIV" > "HOL4Real.seq.SEQ_DIV"
+  "SEQ_DIRECT" > "HOL4Real.seq.SEQ_DIRECT"
+  "SEQ_CONST" > "HOL4Real.seq.SEQ_CONST"
+  "SEQ_CBOUNDED" > "HOL4Real.seq.SEQ_CBOUNDED"
+  "SEQ_CAUCHY" > "HOL4Real.seq.SEQ_CAUCHY"
+  "SEQ_BOUNDED_2" > "HOL4Real.seq.SEQ_BOUNDED_2"
+  "SEQ_BOUNDED" > "HOL4Real.seq.SEQ_BOUNDED"
+  "SEQ_BCONV" > "HOL4Real.seq.SEQ_BCONV"
+  "SEQ_ADD" > "HOL4Real.seq.SEQ_ADD"
+  "SEQ_ABS_IMP" > "HOL4Real.seq.SEQ_ABS_IMP"
+  "SEQ_ABS" > "HOL4Real.seq.SEQ_ABS"
+  "SEQ" > "HOL4Real.seq.SEQ"
+  "NEST_LEMMA_UNIQ" > "HOL4Real.seq.NEST_LEMMA_UNIQ"
+  "NEST_LEMMA" > "HOL4Real.seq.NEST_LEMMA"
+  "MONO_SUC" > "HOL4Real.seq.MONO_SUC"
+  "MAX_LEMMA" > "HOL4Real.seq.MAX_LEMMA"
+  "GP_FINITE" > "HOL4Real.seq.GP_FINITE"
+  "GP" > "HOL4Real.seq.GP"
+  "BOLZANO_LEMMA" > "Deriv.lemma_BOLZANO"
+  "ABS_NEG_LEMMA" > "Series.rabs_ratiotest_lemma"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/state_transformer.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,42 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "UNIT" > "UNIT_def"
+  "MMAP" > "MMAP_def"
+  "JOIN" > "JOIN_def"
+  "BIND" > "BIND_def"
+
+const_maps
+  "UNIT" > "HOL4Base.state_transformer.UNIT"
+  "MMAP" > "HOL4Base.state_transformer.MMAP"
+  "JOIN" > "HOL4Base.state_transformer.JOIN"
+  "BIND" > "HOL4Base.state_transformer.BIND"
+
+thm_maps
+  "UNIT_def" > "HOL4Base.state_transformer.UNIT_def"
+  "UNIT_UNCURRY" > "HOL4Base.state_transformer.UNIT_UNCURRY"
+  "UNIT_DEF" > "HOL4Base.state_transformer.UNIT_DEF"
+  "SND_o_UNIT" > "HOL4Base.state_transformer.SND_o_UNIT"
+  "MMAP_def" > "HOL4Base.state_transformer.MMAP_def"
+  "MMAP_UNIT" > "HOL4Base.state_transformer.MMAP_UNIT"
+  "MMAP_JOIN" > "HOL4Base.state_transformer.MMAP_JOIN"
+  "MMAP_ID" > "HOL4Base.state_transformer.MMAP_ID"
+  "MMAP_DEF" > "HOL4Base.state_transformer.MMAP_DEF"
+  "MMAP_COMP" > "HOL4Base.state_transformer.MMAP_COMP"
+  "JOIN_def" > "HOL4Base.state_transformer.JOIN_def"
+  "JOIN_UNIT" > "HOL4Base.state_transformer.JOIN_UNIT"
+  "JOIN_MMAP_UNIT" > "HOL4Base.state_transformer.JOIN_MMAP_UNIT"
+  "JOIN_MAP_JOIN" > "HOL4Base.state_transformer.JOIN_MAP_JOIN"
+  "JOIN_MAP" > "HOL4Base.state_transformer.JOIN_MAP"
+  "JOIN_DEF" > "HOL4Base.state_transformer.JOIN_DEF"
+  "FST_o_UNIT" > "HOL4Base.state_transformer.FST_o_UNIT"
+  "FST_o_MMAP" > "HOL4Base.state_transformer.FST_o_MMAP"
+  "BIND_def" > "HOL4Base.state_transformer.BIND_def"
+  "BIND_RIGHT_UNIT" > "HOL4Base.state_transformer.BIND_RIGHT_UNIT"
+  "BIND_LEFT_UNIT" > "HOL4Base.state_transformer.BIND_LEFT_UNIT"
+  "BIND_DEF" > "HOL4Base.state_transformer.BIND_DEF"
+  "BIND_ASSOC" > "HOL4Base.state_transformer.BIND_ASSOC"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/sum.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,43 @@
+import
+
+import_segment "hol4"
+
+type_maps
+  "sum" > "Sum_Type.sum"
+
+const_maps
+  "sum_case" > "Sum_Type.sum.sum_case"
+  "OUTR" > "Compatibility.OUTR"
+  "OUTL" > "Compatibility.OUTL"
+  "ISR" > "Compatibility.ISR"
+  "ISL" > "Compatibility.ISL"
+  "INR" > "Sum_Type.Inr"
+  "INL" > "Sum_Type.Inl"
+
+thm_maps
+  "sum_distinct1" > "Sum_Type.Inr_not_Inl"
+  "sum_distinct" > "Sum_Type.Inl_not_Inr"
+  "sum_case_def" > "Compatibility.sum_case_def"
+  "sum_case_cong" > "HOL4Base.sum.sum_case_cong"
+  "sum_axiom" > "Compatibility.sum_axiom"
+  "sum_INDUCT" > "Sum_Type.sum.induct"
+  "sum_CASES" > "Sum_Type.sum.nchotomy"
+  "OUTR" > "Compatibility.OUTR"
+  "OUTL" > "Compatibility.OUTL"
+  "ISR" > "Compatibility.ISR"
+  "ISL_OR_ISR" > "HOL4Base.sum.ISL_OR_ISR"
+  "ISL" > "Compatibility.ISL"
+  "INR_neq_INL" > "Sum_Type.Inr_not_Inl"
+  "INR_INL_11" > "Compatibility.INR_INL_11"
+  "INR" > "HOL4Base.sum.INR"
+  "INL" > "HOL4Base.sum.INL"
+
+ignore_thms
+  "sum_TY_DEF"
+  "sum_ISO_DEF"
+  "sum_Axiom"
+  "IS_SUM_REP"
+  "INR_DEF"
+  "INL_DEF"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/topology.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,116 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "topology" > "topology_def"
+  "re_universe" > "re_universe_def"
+  "re_union" > "re_union_def"
+  "re_subset" > "re_subset_def"
+  "re_null" > "re_null_def"
+  "re_intersect" > "re_intersect_def"
+  "re_compl" > "re_compl_def"
+  "re_Union" > "re_Union_def"
+  "open" > "open_def"
+  "neigh" > "neigh_def"
+  "mtop" > "mtop_def"
+  "mr1" > "mr1_def"
+  "metric" > "metric_def"
+  "limpt" > "limpt_def"
+  "istopology" > "istopology_def"
+  "ismet" > "ismet_def"
+  "dist" > "dist_def"
+  "closed" > "closed_def"
+  "B" > "B_def"
+
+type_maps
+  "topology" > "HOL4Real.topology.topology"
+  "metric" > "HOL4Real.topology.metric"
+
+const_maps
+  "re_universe" > "HOL4Real.topology.re_universe"
+  "re_union" > "HOL4Real.topology.re_union"
+  "re_subset" > "HOL4Real.topology.re_subset"
+  "re_null" > "HOL4Real.topology.re_null"
+  "re_intersect" > "HOL4Real.topology.re_intersect"
+  "re_compl" > "HOL4Real.topology.re_compl"
+  "re_Union" > "HOL4Real.topology.re_Union"
+  "neigh" > "HOL4Real.topology.neigh"
+  "mtop" > "HOL4Real.topology.mtop"
+  "mr1" > "HOL4Real.topology.mr1"
+  "limpt" > "HOL4Real.topology.limpt"
+  "istopology" > "HOL4Real.topology.istopology"
+  "ismet" > "HOL4Real.topology.ismet"
+  "closed" > "HOL4Real.topology.closed"
+  "B" > "HOL4Real.topology.B"
+
+thm_maps
+  "topology_tybij" > "HOL4Real.topology.topology_tybij"
+  "topology_TY_DEF" > "HOL4Real.topology.topology_TY_DEF"
+  "re_universe_def" > "HOL4Real.topology.re_universe_def"
+  "re_universe" > "HOL4Real.topology.re_universe"
+  "re_union_def" > "HOL4Real.topology.re_union_def"
+  "re_union" > "HOL4Real.topology.re_union"
+  "re_subset_def" > "HOL4Real.topology.re_subset_def"
+  "re_subset" > "HOL4Real.topology.re_subset"
+  "re_null_def" > "HOL4Real.topology.re_null_def"
+  "re_null" > "HOL4Real.topology.re_null"
+  "re_intersect_def" > "HOL4Real.topology.re_intersect_def"
+  "re_intersect" > "HOL4Real.topology.re_intersect"
+  "re_compl_def" > "HOL4Real.topology.re_compl_def"
+  "re_compl" > "HOL4Real.topology.re_compl"
+  "re_Union_def" > "HOL4Real.topology.re_Union_def"
+  "re_Union" > "HOL4Real.topology.re_Union"
+  "neigh_def" > "HOL4Real.topology.neigh_def"
+  "neigh" > "HOL4Real.topology.neigh"
+  "mtop_istopology" > "HOL4Real.topology.mtop_istopology"
+  "mtop_def" > "HOL4Real.topology.mtop_def"
+  "mtop" > "HOL4Real.topology.mtop"
+  "mr1_def" > "HOL4Real.topology.mr1_def"
+  "mr1" > "HOL4Real.topology.mr1"
+  "metric_tybij" > "HOL4Real.topology.metric_tybij"
+  "metric_TY_DEF" > "HOL4Real.topology.metric_TY_DEF"
+  "limpt_def" > "HOL4Real.topology.limpt_def"
+  "limpt" > "HOL4Real.topology.limpt"
+  "istopology_def" > "HOL4Real.topology.istopology_def"
+  "istopology" > "HOL4Real.topology.istopology"
+  "ismet_def" > "HOL4Real.topology.ismet_def"
+  "ismet" > "HOL4Real.topology.ismet"
+  "closed_def" > "HOL4Real.topology.closed_def"
+  "closed" > "HOL4Real.topology.closed"
+  "ball" > "HOL4Real.topology.ball"
+  "TOPOLOGY_UNION" > "HOL4Real.topology.TOPOLOGY_UNION"
+  "TOPOLOGY" > "HOL4Real.topology.TOPOLOGY"
+  "SUBSET_TRANS" > "HOL4Real.topology.SUBSET_TRANS"
+  "SUBSET_REFL" > "HOL4Real.topology.SUBSET_REFL"
+  "SUBSET_ANTISYM" > "HOL4Real.topology.SUBSET_ANTISYM"
+  "OPEN_UNOPEN" > "HOL4Real.topology.OPEN_UNOPEN"
+  "OPEN_SUBOPEN" > "HOL4Real.topology.OPEN_SUBOPEN"
+  "OPEN_OWN_NEIGH" > "HOL4Real.topology.OPEN_OWN_NEIGH"
+  "OPEN_NEIGH" > "HOL4Real.topology.OPEN_NEIGH"
+  "MTOP_OPEN" > "HOL4Real.topology.MTOP_OPEN"
+  "MTOP_LIMPT" > "HOL4Real.topology.MTOP_LIMPT"
+  "MR1_SUB_LT" > "HOL4Real.topology.MR1_SUB_LT"
+  "MR1_SUB_LE" > "HOL4Real.topology.MR1_SUB_LE"
+  "MR1_SUB" > "HOL4Real.topology.MR1_SUB"
+  "MR1_LIMPT" > "HOL4Real.topology.MR1_LIMPT"
+  "MR1_DEF" > "HOL4Real.topology.MR1_DEF"
+  "MR1_BETWEEN1" > "HOL4Real.topology.MR1_BETWEEN1"
+  "MR1_ADD_POS" > "HOL4Real.topology.MR1_ADD_POS"
+  "MR1_ADD_LT" > "HOL4Real.topology.MR1_ADD_LT"
+  "MR1_ADD" > "HOL4Real.topology.MR1_ADD"
+  "METRIC_ZERO" > "HOL4Real.topology.METRIC_ZERO"
+  "METRIC_TRIANGLE" > "HOL4Real.topology.METRIC_TRIANGLE"
+  "METRIC_SYM" > "HOL4Real.topology.METRIC_SYM"
+  "METRIC_SAME" > "HOL4Real.topology.METRIC_SAME"
+  "METRIC_POS" > "HOL4Real.topology.METRIC_POS"
+  "METRIC_NZ" > "HOL4Real.topology.METRIC_NZ"
+  "METRIC_ISMET" > "HOL4Real.topology.METRIC_ISMET"
+  "ISMET_R1" > "HOL4Real.topology.ISMET_R1"
+  "COMPL_MEM" > "HOL4Real.topology.COMPL_MEM"
+  "CLOSED_LIMPT" > "HOL4Real.topology.CLOSED_LIMPT"
+  "B_def" > "HOL4Real.topology.B_def"
+  "BALL_OPEN" > "HOL4Real.topology.BALL_OPEN"
+  "BALL_NEIGH" > "HOL4Real.topology.BALL_NEIGH"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/transc.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,273 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "tdiv" > "tdiv_def"
+  "tan" > "tan_def"
+  "sqrt" > "sqrt_def"
+  "sin" > "sin_def"
+  "rsum" > "rsum_def"
+  "root" > "root_def"
+  "pi" > "pi_def"
+  "ln" > "ln_def"
+  "gauge" > "gauge_def"
+  "fine" > "fine_def"
+  "exp" > "exp_def"
+  "dsize" > "dsize_def"
+  "division" > "division_def"
+  "cos" > "cos_def"
+  "atn" > "atn_def"
+  "asn" > "asn_def"
+  "acs" > "acs_def"
+  "Dint" > "Dint_def"
+
+const_maps
+  "tdiv" > "HOL4Real.transc.tdiv"
+  "tan" > "HOL4Real.transc.tan"
+  "sqrt" > "HOL4Real.transc.sqrt"
+  "sin" > "HOL4Real.transc.sin"
+  "rsum" > "HOL4Real.transc.rsum"
+  "root" > "HOL4Real.transc.root"
+  "pi" > "HOL4Real.transc.pi"
+  "ln" > "HOL4Real.transc.ln"
+  "gauge" > "HOL4Real.transc.gauge"
+  "fine" > "HOL4Real.transc.fine"
+  "exp" > "HOL4Real.transc.exp"
+  "dsize" > "HOL4Real.transc.dsize"
+  "division" > "HOL4Real.transc.division"
+  "cos" > "HOL4Real.transc.cos"
+  "atn" > "HOL4Real.transc.atn"
+  "asn" > "HOL4Real.transc.asn"
+  "acs" > "HOL4Real.transc.acs"
+  "Dint" > "HOL4Real.transc.Dint"
+
+thm_maps
+  "tdiv_def" > "HOL4Real.transc.tdiv_def"
+  "tdiv" > "HOL4Real.transc.tdiv"
+  "tan_def" > "HOL4Real.transc.tan_def"
+  "tan" > "HOL4Real.transc.tan"
+  "sqrt_def" > "HOL4Real.transc.sqrt_def"
+  "sqrt" > "HOL4Real.transc.sqrt"
+  "sin_def" > "HOL4Real.transc.sin_def"
+  "sin" > "HOL4Real.transc.sin"
+  "rsum_def" > "HOL4Real.transc.rsum_def"
+  "rsum" > "HOL4Real.transc.rsum"
+  "root_def" > "HOL4Real.transc.root_def"
+  "root" > "HOL4Real.transc.root"
+  "pi_def" > "HOL4Real.transc.pi_def"
+  "pi" > "HOL4Real.transc.pi"
+  "ln_def" > "HOL4Real.transc.ln_def"
+  "ln" > "HOL4Real.transc.ln"
+  "gauge_def" > "HOL4Real.transc.gauge_def"
+  "gauge" > "HOL4Real.transc.gauge"
+  "fine_def" > "HOL4Real.transc.fine_def"
+  "fine" > "HOL4Real.transc.fine"
+  "exp_def" > "HOL4Real.transc.exp_def"
+  "exp" > "HOL4Real.transc.exp"
+  "dsize_def" > "HOL4Real.transc.dsize_def"
+  "dsize" > "HOL4Real.transc.dsize"
+  "division_def" > "HOL4Real.transc.division_def"
+  "division" > "HOL4Real.transc.division"
+  "cos_def" > "HOL4Real.transc.cos_def"
+  "cos" > "HOL4Real.transc.cos"
+  "atn_def" > "HOL4Real.transc.atn_def"
+  "atn" > "HOL4Real.transc.atn"
+  "asn_def" > "HOL4Real.transc.asn_def"
+  "asn" > "HOL4Real.transc.asn"
+  "acs_def" > "HOL4Real.transc.acs_def"
+  "acs" > "HOL4Real.transc.acs"
+  "TAN_TOTAL_POS" > "HOL4Real.transc.TAN_TOTAL_POS"
+  "TAN_TOTAL_LEMMA" > "HOL4Real.transc.TAN_TOTAL_LEMMA"
+  "TAN_TOTAL" > "HOL4Real.transc.TAN_TOTAL"
+  "TAN_SEC" > "HOL4Real.transc.TAN_SEC"
+  "TAN_POS_PI2" > "HOL4Real.transc.TAN_POS_PI2"
+  "TAN_PI" > "HOL4Real.transc.TAN_PI"
+  "TAN_PERIODIC" > "HOL4Real.transc.TAN_PERIODIC"
+  "TAN_NPI" > "HOL4Real.transc.TAN_NPI"
+  "TAN_NEG" > "HOL4Real.transc.TAN_NEG"
+  "TAN_DOUBLE" > "HOL4Real.transc.TAN_DOUBLE"
+  "TAN_ATN" > "HOL4Real.transc.TAN_ATN"
+  "TAN_ADD" > "HOL4Real.transc.TAN_ADD"
+  "TAN_0" > "HOL4Real.transc.TAN_0"
+  "SQRT_POW_2" > "HOL4Real.transc.SQRT_POW_2"
+  "SQRT_POW2" > "HOL4Real.transc.SQRT_POW2"
+  "SQRT_POS_UNIQ" > "HOL4Real.transc.SQRT_POS_UNIQ"
+  "SQRT_POS_LT" > "HOL4Real.transc.SQRT_POS_LT"
+  "SQRT_POS_LE" > "HOL4Real.transc.SQRT_POS_LE"
+  "SQRT_MUL" > "HOL4Real.transc.SQRT_MUL"
+  "SQRT_MONO_LE" > "HOL4Real.transc.SQRT_MONO_LE"
+  "SQRT_INV" > "HOL4Real.transc.SQRT_INV"
+  "SQRT_EVEN_POW2" > "HOL4Real.transc.SQRT_EVEN_POW2"
+  "SQRT_EQ" > "HOL4Real.transc.SQRT_EQ"
+  "SQRT_DIV" > "HOL4Real.transc.SQRT_DIV"
+  "SQRT_1" > "HOL4Real.transc.SQRT_1"
+  "SQRT_0" > "HOL4Real.transc.SQRT_0"
+  "SIN_ZERO_LEMMA" > "HOL4Real.transc.SIN_ZERO_LEMMA"
+  "SIN_ZERO" > "HOL4Real.transc.SIN_ZERO"
+  "SIN_TOTAL" > "HOL4Real.transc.SIN_TOTAL"
+  "SIN_POS_PI_LE" > "HOL4Real.transc.SIN_POS_PI_LE"
+  "SIN_POS_PI2_LE" > "HOL4Real.transc.SIN_POS_PI2_LE"
+  "SIN_POS_PI2" > "HOL4Real.transc.SIN_POS_PI2"
+  "SIN_POS_PI" > "HOL4Real.transc.SIN_POS_PI"
+  "SIN_POS" > "HOL4Real.transc.SIN_POS"
+  "SIN_PI2" > "HOL4Real.transc.SIN_PI2"
+  "SIN_PI" > "HOL4Real.transc.SIN_PI"
+  "SIN_PERIODIC_PI" > "HOL4Real.transc.SIN_PERIODIC_PI"
+  "SIN_PERIODIC" > "HOL4Real.transc.SIN_PERIODIC"
+  "SIN_PAIRED" > "HOL4Real.transc.SIN_PAIRED"
+  "SIN_NPI" > "HOL4Real.transc.SIN_NPI"
+  "SIN_NEGLEMMA" > "HOL4Real.transc.SIN_NEGLEMMA"
+  "SIN_NEG" > "HOL4Real.transc.SIN_NEG"
+  "SIN_FDIFF" > "HOL4Real.transc.SIN_FDIFF"
+  "SIN_DOUBLE" > "HOL4Real.transc.SIN_DOUBLE"
+  "SIN_COS_SQRT" > "HOL4Real.transc.SIN_COS_SQRT"
+  "SIN_COS_SQ" > "HOL4Real.transc.SIN_COS_SQ"
+  "SIN_COS_NEG" > "HOL4Real.transc.SIN_COS_NEG"
+  "SIN_COS_ADD" > "HOL4Real.transc.SIN_COS_ADD"
+  "SIN_COS" > "HOL4Real.transc.SIN_COS"
+  "SIN_CONVERGES" > "HOL4Real.transc.SIN_CONVERGES"
+  "SIN_CIRCLE" > "HOL4Real.transc.SIN_CIRCLE"
+  "SIN_BOUNDS" > "HOL4Real.transc.SIN_BOUNDS"
+  "SIN_BOUND" > "HOL4Real.transc.SIN_BOUND"
+  "SIN_ASN" > "HOL4Real.transc.SIN_ASN"
+  "SIN_ADD" > "HOL4Real.transc.SIN_ADD"
+  "SIN_ACS_NZ" > "HOL4Real.transc.SIN_ACS_NZ"
+  "SIN_0" > "HOL4Real.transc.SIN_0"
+  "ROOT_POW_POS" > "HOL4Real.transc.ROOT_POW_POS"
+  "ROOT_POS_UNIQ" > "HOL4Real.transc.ROOT_POS_UNIQ"
+  "ROOT_POS_LT" > "HOL4Real.transc.ROOT_POS_LT"
+  "ROOT_POS" > "HOL4Real.transc.ROOT_POS"
+  "ROOT_MUL" > "HOL4Real.transc.ROOT_MUL"
+  "ROOT_MONO_LE" > "HOL4Real.transc.ROOT_MONO_LE"
+  "ROOT_LT_LEMMA" > "HOL4Real.transc.ROOT_LT_LEMMA"
+  "ROOT_LN" > "HOL4Real.transc.ROOT_LN"
+  "ROOT_INV" > "HOL4Real.transc.ROOT_INV"
+  "ROOT_DIV" > "HOL4Real.transc.ROOT_DIV"
+  "ROOT_1" > "HOL4Real.transc.ROOT_1"
+  "ROOT_0" > "HOL4Real.transc.ROOT_0"
+  "REAL_DIV_SQRT" > "HOL4Real.transc.REAL_DIV_SQRT"
+  "POW_ROOT_POS" > "HOL4Real.transc.POW_ROOT_POS"
+  "POW_2_SQRT" > "HOL4Real.transc.POW_2_SQRT"
+  "PI_POS" > "HOL4Real.transc.PI_POS"
+  "PI2_BOUNDS" > "HOL4Real.transc.PI2_BOUNDS"
+  "PI2" > "HOL4Real.transc.PI2"
+  "MCLAURIN_ZERO" > "HOL4Real.transc.MCLAURIN_ZERO"
+  "MCLAURIN_NEG" > "HOL4Real.transc.MCLAURIN_NEG"
+  "MCLAURIN_EXP_LT" > "HOL4Real.transc.MCLAURIN_EXP_LT"
+  "MCLAURIN_EXP_LE" > "HOL4Real.transc.MCLAURIN_EXP_LE"
+  "MCLAURIN_ALL_LT" > "HOL4Real.transc.MCLAURIN_ALL_LT"
+  "MCLAURIN_ALL_LE" > "HOL4Real.transc.MCLAURIN_ALL_LE"
+  "MCLAURIN" > "HOL4Real.transc.MCLAURIN"
+  "LN_POW" > "HOL4Real.transc.LN_POW"
+  "LN_POS" > "HOL4Real.transc.LN_POS"
+  "LN_MUL" > "HOL4Real.transc.LN_MUL"
+  "LN_MONO_LT" > "HOL4Real.transc.LN_MONO_LT"
+  "LN_MONO_LE" > "HOL4Real.transc.LN_MONO_LE"
+  "LN_LT_X" > "HOL4Real.transc.LN_LT_X"
+  "LN_LE" > "HOL4Real.transc.LN_LE"
+  "LN_INV" > "HOL4Real.transc.LN_INV"
+  "LN_INJ" > "HOL4Real.transc.LN_INJ"
+  "LN_EXP" > "HOL4Real.transc.LN_EXP"
+  "LN_DIV" > "HOL4Real.transc.LN_DIV"
+  "LN_1" > "HOL4Real.transc.LN_1"
+  "INTEGRAL_NULL" > "HOL4Real.transc.INTEGRAL_NULL"
+  "GAUGE_MIN" > "HOL4Real.transc.GAUGE_MIN"
+  "FTC1" > "HOL4Real.transc.FTC1"
+  "FINE_MIN" > "HOL4Real.transc.FINE_MIN"
+  "EXP_TOTAL_LEMMA" > "HOL4Real.transc.EXP_TOTAL_LEMMA"
+  "EXP_TOTAL" > "HOL4Real.transc.EXP_TOTAL"
+  "EXP_SUB" > "HOL4Real.transc.EXP_SUB"
+  "EXP_POS_LT" > "HOL4Real.transc.EXP_POS_LT"
+  "EXP_POS_LE" > "HOL4Real.transc.EXP_POS_LE"
+  "EXP_NZ" > "HOL4Real.transc.EXP_NZ"
+  "EXP_NEG_MUL2" > "HOL4Real.transc.EXP_NEG_MUL2"
+  "EXP_NEG_MUL" > "HOL4Real.transc.EXP_NEG_MUL"
+  "EXP_NEG" > "HOL4Real.transc.EXP_NEG"
+  "EXP_N" > "HOL4Real.transc.EXP_N"
+  "EXP_MONO_LT" > "HOL4Real.transc.EXP_MONO_LT"
+  "EXP_MONO_LE" > "HOL4Real.transc.EXP_MONO_LE"
+  "EXP_MONO_IMP" > "HOL4Real.transc.EXP_MONO_IMP"
+  "EXP_LT_1" > "HOL4Real.transc.EXP_LT_1"
+  "EXP_LN" > "HOL4Real.transc.EXP_LN"
+  "EXP_LE_X" > "HOL4Real.transc.EXP_LE_X"
+  "EXP_INJ" > "HOL4Real.transc.EXP_INJ"
+  "EXP_FDIFF" > "HOL4Real.transc.EXP_FDIFF"
+  "EXP_CONVERGES" > "HOL4Real.transc.EXP_CONVERGES"
+  "EXP_ADD_MUL" > "HOL4Real.transc.EXP_ADD_MUL"
+  "EXP_ADD" > "HOL4Real.transc.EXP_ADD"
+  "EXP_0" > "HOL4Real.transc.EXP_0"
+  "Dint_def" > "HOL4Real.transc.Dint_def"
+  "Dint" > "HOL4Real.transc.Dint"
+  "DIVISION_UBOUND_LT" > "HOL4Real.transc.DIVISION_UBOUND_LT"
+  "DIVISION_UBOUND" > "HOL4Real.transc.DIVISION_UBOUND"
+  "DIVISION_THM" > "HOL4Real.transc.DIVISION_THM"
+  "DIVISION_SINGLE" > "HOL4Real.transc.DIVISION_SINGLE"
+  "DIVISION_RHS" > "HOL4Real.transc.DIVISION_RHS"
+  "DIVISION_LT_GEN" > "HOL4Real.transc.DIVISION_LT_GEN"
+  "DIVISION_LT" > "HOL4Real.transc.DIVISION_LT"
+  "DIVISION_LHS" > "HOL4Real.transc.DIVISION_LHS"
+  "DIVISION_LE" > "HOL4Real.transc.DIVISION_LE"
+  "DIVISION_LBOUND_LT" > "HOL4Real.transc.DIVISION_LBOUND_LT"
+  "DIVISION_LBOUND" > "HOL4Real.transc.DIVISION_LBOUND"
+  "DIVISION_GT" > "HOL4Real.transc.DIVISION_GT"
+  "DIVISION_EXISTS" > "HOL4Real.transc.DIVISION_EXISTS"
+  "DIVISION_EQ" > "HOL4Real.transc.DIVISION_EQ"
+  "DIVISION_APPEND" > "HOL4Real.transc.DIVISION_APPEND"
+  "DIVISION_1" > "HOL4Real.transc.DIVISION_1"
+  "DIVISION_0" > "HOL4Real.transc.DIVISION_0"
+  "DINT_UNIQ" > "HOL4Real.transc.DINT_UNIQ"
+  "DIFF_TAN" > "HOL4Real.transc.DIFF_TAN"
+  "DIFF_SIN" > "HOL4Real.transc.DIFF_SIN"
+  "DIFF_LN_COMPOSITE" > "HOL4Real.transc.DIFF_LN_COMPOSITE"
+  "DIFF_LN" > "HOL4Real.transc.DIFF_LN"
+  "DIFF_EXP" > "HOL4Real.transc.DIFF_EXP"
+  "DIFF_COS" > "HOL4Real.transc.DIFF_COS"
+  "DIFF_COMPOSITE" > "HOL4Real.transc.DIFF_COMPOSITE"
+  "DIFF_ATN" > "HOL4Real.transc.DIFF_ATN"
+  "DIFF_ASN_LEMMA" > "HOL4Real.transc.DIFF_ASN_LEMMA"
+  "DIFF_ASN" > "HOL4Real.transc.DIFF_ASN"
+  "DIFF_ACS_LEMMA" > "HOL4Real.transc.DIFF_ACS_LEMMA"
+  "DIFF_ACS" > "HOL4Real.transc.DIFF_ACS"
+  "COS_ZERO_LEMMA" > "HOL4Real.transc.COS_ZERO_LEMMA"
+  "COS_ZERO" > "HOL4Real.transc.COS_ZERO"
+  "COS_TOTAL" > "HOL4Real.transc.COS_TOTAL"
+  "COS_SIN_SQRT" > "HOL4Real.transc.COS_SIN_SQRT"
+  "COS_SIN_SQ" > "HOL4Real.transc.COS_SIN_SQ"
+  "COS_SIN" > "HOL4Real.transc.COS_SIN"
+  "COS_POS_PI_LE" > "HOL4Real.transc.COS_POS_PI_LE"
+  "COS_POS_PI2_LE" > "HOL4Real.transc.COS_POS_PI2_LE"
+  "COS_POS_PI2" > "HOL4Real.transc.COS_POS_PI2"
+  "COS_POS_PI" > "HOL4Real.transc.COS_POS_PI"
+  "COS_PI2" > "HOL4Real.transc.COS_PI2"
+  "COS_PI" > "HOL4Real.transc.COS_PI"
+  "COS_PERIODIC_PI" > "HOL4Real.transc.COS_PERIODIC_PI"
+  "COS_PERIODIC" > "HOL4Real.transc.COS_PERIODIC"
+  "COS_PAIRED" > "HOL4Real.transc.COS_PAIRED"
+  "COS_NPI" > "HOL4Real.transc.COS_NPI"
+  "COS_NEG" > "HOL4Real.transc.COS_NEG"
+  "COS_ISZERO" > "HOL4Real.transc.COS_ISZERO"
+  "COS_FDIFF" > "HOL4Real.transc.COS_FDIFF"
+  "COS_DOUBLE" > "HOL4Real.transc.COS_DOUBLE"
+  "COS_CONVERGES" > "HOL4Real.transc.COS_CONVERGES"
+  "COS_BOUNDS" > "HOL4Real.transc.COS_BOUNDS"
+  "COS_BOUND" > "HOL4Real.transc.COS_BOUND"
+  "COS_ATN_NZ" > "HOL4Real.transc.COS_ATN_NZ"
+  "COS_ASN_NZ" > "HOL4Real.transc.COS_ASN_NZ"
+  "COS_ADD" > "HOL4Real.transc.COS_ADD"
+  "COS_ACS" > "HOL4Real.transc.COS_ACS"
+  "COS_2" > "HOL4Real.transc.COS_2"
+  "COS_0" > "HOL4Real.transc.COS_0"
+  "ATN_TAN" > "HOL4Real.transc.ATN_TAN"
+  "ATN_BOUNDS" > "HOL4Real.transc.ATN_BOUNDS"
+  "ATN" > "HOL4Real.transc.ATN"
+  "ASN_SIN" > "HOL4Real.transc.ASN_SIN"
+  "ASN_BOUNDS_LT" > "HOL4Real.transc.ASN_BOUNDS_LT"
+  "ASN_BOUNDS" > "HOL4Real.transc.ASN_BOUNDS"
+  "ASN" > "HOL4Real.transc.ASN"
+  "ACS_COS" > "HOL4Real.transc.ACS_COS"
+  "ACS_BOUNDS_LT" > "HOL4Real.transc.ACS_BOUNDS_LT"
+  "ACS_BOUNDS" > "HOL4Real.transc.ACS_BOUNDS"
+  "ACS" > "HOL4Real.transc.ACS"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/word32.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,377 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "word_suc" > "word_suc_def"
+  "word_sub" > "word_sub_def"
+  "word_ror1" > "word_ror1_def"
+  "word_ror" > "word_ror_def"
+  "word_mul" > "word_mul_def"
+  "word_lsr1" > "word_lsr1_def"
+  "word_lsr" > "word_lsr_def"
+  "word_lsl" > "word_lsl_def"
+  "word_asr1" > "word_asr1_def"
+  "word_asr" > "word_asr_def"
+  "word_add" > "word_add_def"
+  "word_2comp" > "word_2comp_def"
+  "word_1comp" > "word_1comp_def"
+  "w_T" > "w_T_primdef"
+  "w_1" > "w_1_primdef"
+  "w_0" > "w_0_primdef"
+  "w2n" > "w2n_primdef"
+  "n2w" > "n2w_primdef"
+  "mk_word32" > "mk_word32_def"
+  "dest_word32" > "dest_word32_def"
+  "bitwise_or" > "bitwise_or_def"
+  "bitwise_eor" > "bitwise_eor_def"
+  "bitwise_and" > "bitwise_and_def"
+  "WL" > "WL_primdef"
+  "TWO_COMP" > "TWO_COMP_primdef"
+  "TOw" > "TOw_primdef"
+  "SLICEw" > "SLICEw_primdef"
+  "RRXn" > "RRXn_primdef"
+  "RRX" > "RRX_primdef"
+  "ROR_ONE" > "ROR_ONE_primdef"
+  "OR" > "OR_primdef"
+  "ONE_COMP" > "ONE_COMP_primdef"
+  "MSBn" > "MSBn_primdef"
+  "MSB" > "MSB_primdef"
+  "MODw" > "MODw_primdef"
+  "LSR_ONE" > "LSR_ONE_primdef"
+  "LSB" > "LSB_primdef"
+  "INw" > "INw_primdef"
+  "HB" > "HB_primdef"
+  "EQUIV" > "EQUIV_primdef"
+  "EOR" > "EOR_primdef"
+  "COMP0" > "COMP0_primdef"
+  "BITw" > "BITw_primdef"
+  "BITSw" > "BITSw_primdef"
+  "ASR_ONE" > "ASR_ONE_primdef"
+  "AONE" > "AONE_primdef"
+  "AND" > "AND_primdef"
+
+type_maps
+  "word32" > "HOL4Word32.word32.word32"
+
+const_maps
+  "word_suc" > "HOL4Word32.word32.word_suc"
+  "word_sub" > "HOL4Word32.word32.word_sub"
+  "word_ror1" > "HOL4Word32.word32.word_ror1"
+  "word_ror" > "HOL4Word32.word32.word_ror"
+  "word_mul" > "HOL4Word32.word32.word_mul"
+  "word_lsr1" > "HOL4Word32.word32.word_lsr1"
+  "word_lsr" > "HOL4Word32.word32.word_lsr"
+  "word_lsl" > "HOL4Word32.word32.word_lsl"
+  "word_asr1" > "HOL4Word32.word32.word_asr1"
+  "word_asr" > "HOL4Word32.word32.word_asr"
+  "word_add" > "HOL4Word32.word32.word_add"
+  "word_2comp" > "HOL4Word32.word32.word_2comp"
+  "word_1comp" > "HOL4Word32.word32.word_1comp"
+  "w_T" > "HOL4Word32.word32.w_T"
+  "w_1" > "HOL4Word32.word32.w_1"
+  "w_0" > "HOL4Word32.word32.w_0"
+  "w2n" > "HOL4Word32.word32.w2n"
+  "n2w" > "HOL4Word32.word32.n2w"
+  "bitwise_or" > "HOL4Word32.word32.bitwise_or"
+  "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
+  "bitwise_and" > "HOL4Word32.word32.bitwise_and"
+  "WL" > "HOL4Word32.word32.WL"
+  "TWO_COMP" > "HOL4Word32.word32.TWO_COMP"
+  "TOw" > "HOL4Word32.word32.TOw"
+  "SLICEw" > "HOL4Word32.word32.SLICEw"
+  "RRXn" > "HOL4Word32.word32.RRXn"
+  "RRX" > "HOL4Word32.word32.RRX"
+  "ROR_ONE" > "HOL4Word32.word32.ROR_ONE"
+  "OR" > "HOL4Word32.word32.OR"
+  "ONE_COMP" > "HOL4Word32.word32.ONE_COMP"
+  "MSBn" > "HOL4Word32.word32.MSBn"
+  "MSB" > "HOL4Word32.word32.MSB"
+  "MODw" > "HOL4Word32.word32.MODw"
+  "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
+  "LSB" > "HOL4Word32.word32.LSB"
+  "INw" > "HOL4Word32.word32.INw"
+  "HB" > "HOL4Word32.word32.HB"
+  "EQUIV" > "HOL4Word32.word32.EQUIV"
+  "EOR" > "HOL4Word32.word32.EOR"
+  "COMP0" > "HOL4Word32.word32.COMP0"
+  "BITw" > "HOL4Word32.word32.BITw"
+  "BITSw" > "HOL4Word32.word32.BITSw"
+  "ASR_ONE" > "HOL4Word32.word32.ASR_ONE"
+  "AONE" > "HOL4Word32.word32.AONE"
+  "AND" > "HOL4Word32.word32.AND"
+
+const_renames
+  "==" > "EQUIV"
+
+thm_maps
+  "word_suc_def" > "HOL4Word32.word32.word_suc_def"
+  "word_suc" > "HOL4Word32.word32.word_suc"
+  "word_sub_def" > "HOL4Word32.word32.word_sub_def"
+  "word_sub" > "HOL4Word32.word32.word_sub"
+  "word_ror_def" > "HOL4Word32.word32.word_ror_def"
+  "word_ror1_def" > "HOL4Word32.word32.word_ror1_def"
+  "word_ror1" > "HOL4Word32.word32.word_ror1"
+  "word_ror" > "HOL4Word32.word32.word_ror"
+  "word_nchotomy" > "HOL4Word32.word32.word_nchotomy"
+  "word_mul_def" > "HOL4Word32.word32.word_mul_def"
+  "word_mul" > "HOL4Word32.word32.word_mul"
+  "word_lsr_def" > "HOL4Word32.word32.word_lsr_def"
+  "word_lsr1_def" > "HOL4Word32.word32.word_lsr1_def"
+  "word_lsr1" > "HOL4Word32.word32.word_lsr1"
+  "word_lsr" > "HOL4Word32.word32.word_lsr"
+  "word_lsl_def" > "HOL4Word32.word32.word_lsl_def"
+  "word_lsl" > "HOL4Word32.word32.word_lsl"
+  "word_asr_def" > "HOL4Word32.word32.word_asr_def"
+  "word_asr1_def" > "HOL4Word32.word32.word_asr1_def"
+  "word_asr1" > "HOL4Word32.word32.word_asr1"
+  "word_asr" > "HOL4Word32.word32.word_asr"
+  "word_add_def" > "HOL4Word32.word32.word_add_def"
+  "word_add" > "HOL4Word32.word32.word_add"
+  "word_2comp_def" > "HOL4Word32.word32.word_2comp_def"
+  "word_2comp" > "HOL4Word32.word32.word_2comp"
+  "word_1comp_def" > "HOL4Word32.word32.word_1comp_def"
+  "word_1comp" > "HOL4Word32.word32.word_1comp"
+  "word32_tybij" > "HOL4Word32.word32.word32_tybij"
+  "word32_TY_DEF" > "HOL4Word32.word32.word32_TY_DEF"
+  "w_T_primdef" > "HOL4Word32.word32.w_T_primdef"
+  "w_T_def" > "HOL4Word32.word32.w_T_def"
+  "w_T" > "HOL4Word32.word32.w_T"
+  "w_1_primdef" > "HOL4Word32.word32.w_1_primdef"
+  "w_1_def" > "HOL4Word32.word32.w_1_def"
+  "w_1" > "HOL4Word32.word32.w_1"
+  "w_0_primdef" > "HOL4Word32.word32.w_0_primdef"
+  "w_0_def" > "HOL4Word32.word32.w_0_def"
+  "w_0" > "HOL4Word32.word32.w_0"
+  "w2n_primdef" > "HOL4Word32.word32.w2n_primdef"
+  "w2n_def" > "HOL4Word32.word32.w2n_def"
+  "w2n_EVAL" > "HOL4Word32.word32.w2n_EVAL"
+  "w2n_ELIM" > "HOL4Word32.word32.w2n_ELIM"
+  "n2w_primdef" > "HOL4Word32.word32.n2w_primdef"
+  "n2w_def" > "HOL4Word32.word32.n2w_def"
+  "n2w_11" > "HOL4Word32.word32.n2w_11"
+  "dest_word_mk_word_eq3" > "HOL4Word32.word32.dest_word_mk_word_eq3"
+  "bitwise_or_def" > "HOL4Word32.word32.bitwise_or_def"
+  "bitwise_or" > "HOL4Word32.word32.bitwise_or"
+  "bitwise_eor_def" > "HOL4Word32.word32.bitwise_eor_def"
+  "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
+  "bitwise_and_def" > "HOL4Word32.word32.bitwise_and_def"
+  "bitwise_and" > "HOL4Word32.word32.bitwise_and"
+  "ZERO_SHIFT2" > "HOL4Word32.word32.ZERO_SHIFT2"
+  "ZERO_SHIFT" > "HOL4Word32.word32.ZERO_SHIFT"
+  "WL_primdef" > "HOL4Word32.word32.WL_primdef"
+  "WL_def" > "HOL4Word32.word32.WL_def"
+  "TWO_COMP_primdef" > "HOL4Word32.word32.TWO_COMP_primdef"
+  "TWO_COMP_def" > "HOL4Word32.word32.TWO_COMP_def"
+  "TWO_COMP_WELLDEF" > "HOL4Word32.word32.TWO_COMP_WELLDEF"
+  "TWO_COMP_ONE_COMP_QT" > "HOL4Word32.word32.TWO_COMP_ONE_COMP_QT"
+  "TWO_COMP_ONE_COMP" > "HOL4Word32.word32.TWO_COMP_ONE_COMP"
+  "TWO_COMP_EVAL2" > "HOL4Word32.word32.TWO_COMP_EVAL2"
+  "TWO_COMP_EVAL" > "HOL4Word32.word32.TWO_COMP_EVAL"
+  "TWO_COMP_ELIM" > "HOL4Word32.word32.TWO_COMP_ELIM"
+  "TWO_COMP_ADD" > "HOL4Word32.word32.TWO_COMP_ADD"
+  "TOw_primdef" > "HOL4Word32.word32.TOw_primdef"
+  "TOw_def" > "HOL4Word32.word32.TOw_def"
+  "TOw_WELLDEF" > "HOL4Word32.word32.TOw_WELLDEF"
+  "TOw_QT" > "HOL4Word32.word32.TOw_QT"
+  "TOw_IDEM" > "HOL4Word32.word32.TOw_IDEM"
+  "SUC_WELLDEF" > "HOL4Word32.word32.SUC_WELLDEF"
+  "SUC_EQUIV_COMP" > "HOL4Word32.word32.SUC_EQUIV_COMP"
+  "SUBw" > "HOL4Word32.word32.SUBw"
+  "SUB_SUBw" > "HOL4Word32.word32.SUB_SUBw"
+  "SUB_PLUSw" > "HOL4Word32.word32.SUB_PLUSw"
+  "SUB_EQUALw" > "HOL4Word32.word32.SUB_EQUALw"
+  "SLICEw_primdef" > "HOL4Word32.word32.SLICEw_primdef"
+  "SLICEw_def" > "HOL4Word32.word32.SLICEw_def"
+  "SLICEw_ZERO_THM" > "HOL4Word32.word32.SLICEw_ZERO_THM"
+  "SLICEw_ZERO" > "HOL4Word32.word32.SLICEw_ZERO"
+  "SLICEw_THM" > "HOL4Word32.word32.SLICEw_THM"
+  "SLICEw_COMP_THM" > "HOL4Word32.word32.SLICEw_COMP_THM"
+  "SLICE_EVAL" > "HOL4Word32.word32.SLICE_EVAL"
+  "RRXn_primdef" > "HOL4Word32.word32.RRXn_primdef"
+  "RRXn_def" > "HOL4Word32.word32.RRXn_def"
+  "RRX_primdef" > "HOL4Word32.word32.RRX_primdef"
+  "RRX_def" > "HOL4Word32.word32.RRX_def"
+  "RRX_WELLDEF" > "HOL4Word32.word32.RRX_WELLDEF"
+  "RRX_EVAL2" > "HOL4Word32.word32.RRX_EVAL2"
+  "RRX_EVAL" > "HOL4Word32.word32.RRX_EVAL"
+  "ROR_w_T" > "HOL4Word32.word32.ROR_w_T"
+  "ROR_THM" > "HOL4Word32.word32.ROR_THM"
+  "ROR_ONE_primdef" > "HOL4Word32.word32.ROR_ONE_primdef"
+  "ROR_ONE_def" > "HOL4Word32.word32.ROR_ONE_def"
+  "ROR_ONE_WELLDEF" > "HOL4Word32.word32.ROR_ONE_WELLDEF"
+  "ROR_ONE_EVAL2" > "HOL4Word32.word32.ROR_ONE_EVAL2"
+  "ROR_ONE_EVAL" > "HOL4Word32.word32.ROR_ONE_EVAL"
+  "ROR_CYCLE" > "HOL4Word32.word32.ROR_CYCLE"
+  "ROR_ADD" > "HOL4Word32.word32.ROR_ADD"
+  "RIGHT_OR_OVER_ANDw" > "HOL4Word32.word32.RIGHT_OR_OVER_ANDw"
+  "RIGHT_OR_OVER_AND_QT" > "HOL4Word32.word32.RIGHT_OR_OVER_AND_QT"
+  "RIGHT_AND_OVER_ORw" > "HOL4Word32.word32.RIGHT_AND_OVER_ORw"
+  "RIGHT_AND_OVER_OR_QT" > "HOL4Word32.word32.RIGHT_AND_OVER_OR_QT"
+  "OR_primdef" > "HOL4Word32.word32.OR_primdef"
+  "OR_def" > "HOL4Word32.word32.OR_def"
+  "OR_IDEMw" > "HOL4Word32.word32.OR_IDEMw"
+  "OR_IDEM_QT" > "HOL4Word32.word32.OR_IDEM_QT"
+  "OR_EVAL2" > "HOL4Word32.word32.OR_EVAL2"
+  "OR_EVAL" > "HOL4Word32.word32.OR_EVAL"
+  "OR_COMP_QT" > "HOL4Word32.word32.OR_COMP_QT"
+  "OR_COMMw" > "HOL4Word32.word32.OR_COMMw"
+  "OR_COMM_QT" > "HOL4Word32.word32.OR_COMM_QT"
+  "OR_ASSOCw" > "HOL4Word32.word32.OR_ASSOCw"
+  "OR_ASSOC_QT" > "HOL4Word32.word32.OR_ASSOC_QT"
+  "OR_ABSORBw" > "HOL4Word32.word32.OR_ABSORBw"
+  "OR_ABSORB_QT" > "HOL4Word32.word32.OR_ABSORB_QT"
+  "ONE_COMPw" > "HOL4Word32.word32.ONE_COMPw"
+  "ONE_COMP_primdef" > "HOL4Word32.word32.ONE_COMP_primdef"
+  "ONE_COMP_def" > "HOL4Word32.word32.ONE_COMP_def"
+  "ONE_COMP_WELLDEF" > "HOL4Word32.word32.ONE_COMP_WELLDEF"
+  "ONE_COMP_TWO_COMP" > "HOL4Word32.word32.ONE_COMP_TWO_COMP"
+  "ONE_COMP_THM" > "HOL4Word32.word32.ONE_COMP_THM"
+  "ONE_COMP_QT" > "HOL4Word32.word32.ONE_COMP_QT"
+  "ONE_COMP_EVAL2" > "HOL4Word32.word32.ONE_COMP_EVAL2"
+  "ONE_COMP_EVAL" > "HOL4Word32.word32.ONE_COMP_EVAL"
+  "MUL_WELLDEF" > "HOL4Word32.word32.MUL_WELLDEF"
+  "MUL_EVAL2" > "HOL4Word32.word32.MUL_EVAL2"
+  "MUL_EVAL" > "HOL4Word32.word32.MUL_EVAL"
+  "MULT_QT" > "HOL4Word32.word32.MULT_QT"
+  "MULT_COMMw" > "HOL4Word32.word32.MULT_COMMw"
+  "MULT_COMM_QT" > "HOL4Word32.word32.MULT_COMM_QT"
+  "MULT_CLAUSESw" > "HOL4Word32.word32.MULT_CLAUSESw"
+  "MULT_CLAUSES_QT" > "HOL4Word32.word32.MULT_CLAUSES_QT"
+  "MULT_ASSOCw" > "HOL4Word32.word32.MULT_ASSOCw"
+  "MULT_ASSOC_QT" > "HOL4Word32.word32.MULT_ASSOC_QT"
+  "MSBn_primdef" > "HOL4Word32.word32.MSBn_primdef"
+  "MSBn_def" > "HOL4Word32.word32.MSBn_def"
+  "MSB_primdef" > "HOL4Word32.word32.MSB_primdef"
+  "MSB_def" > "HOL4Word32.word32.MSB_def"
+  "MSB_WELLDEF" > "HOL4Word32.word32.MSB_WELLDEF"
+  "MSB_EVAL2" > "HOL4Word32.word32.MSB_EVAL2"
+  "MSB_EVAL" > "HOL4Word32.word32.MSB_EVAL"
+  "MODw_primdef" > "HOL4Word32.word32.MODw_primdef"
+  "MODw_def" > "HOL4Word32.word32.MODw_def"
+  "MODw_THM" > "HOL4Word32.word32.MODw_THM"
+  "MODw_MULT" > "HOL4Word32.word32.MODw_MULT"
+  "MODw_IDEM2" > "HOL4Word32.word32.MODw_IDEM2"
+  "MODw_EVAL" > "HOL4Word32.word32.MODw_EVAL"
+  "MODw_ELIM" > "HOL4Word32.word32.MODw_ELIM"
+  "MOD_MOD_DIV_2EXP" > "HOL4Word32.word32.MOD_MOD_DIV_2EXP"
+  "MOD_MOD_DIV" > "HOL4Word32.word32.MOD_MOD_DIV"
+  "MOD_ADD" > "HOL4Word32.word32.MOD_ADD"
+  "LSR_THM" > "HOL4Word32.word32.LSR_THM"
+  "LSR_ONE_primdef" > "HOL4Word32.word32.LSR_ONE_primdef"
+  "LSR_ONE_def" > "HOL4Word32.word32.LSR_ONE_def"
+  "LSR_ONE_WELLDEF" > "HOL4Word32.word32.LSR_ONE_WELLDEF"
+  "LSR_ONE_EVAL2" > "HOL4Word32.word32.LSR_ONE_EVAL2"
+  "LSR_ONE_EVAL" > "HOL4Word32.word32.LSR_ONE_EVAL"
+  "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
+  "LSR_LIMIT" > "HOL4Word32.word32.LSR_LIMIT"
+  "LSR_EVAL" > "HOL4Word32.word32.LSR_EVAL"
+  "LSR_ADD" > "HOL4Word32.word32.LSR_ADD"
+  "LSL_LIMIT" > "HOL4Word32.word32.LSL_LIMIT"
+  "LSL_ADD" > "HOL4Word32.word32.LSL_ADD"
+  "LSB_primdef" > "HOL4Word32.word32.LSB_primdef"
+  "LSB_def" > "HOL4Word32.word32.LSB_def"
+  "LSB_WELLDEF" > "HOL4Word32.word32.LSB_WELLDEF"
+  "LSB_EVAL2" > "HOL4Word32.word32.LSB_EVAL2"
+  "LSB_EVAL" > "HOL4Word32.word32.LSB_EVAL"
+  "LEFT_SHIFT_LESS" > "HOL4Word32.word32.LEFT_SHIFT_LESS"
+  "LEFT_ADD_DISTRIBw" > "HOL4Word32.word32.LEFT_ADD_DISTRIBw"
+  "LEFT_ADD_DISTRIB_QT" > "HOL4Word32.word32.LEFT_ADD_DISTRIB_QT"
+  "INw_primdef" > "HOL4Word32.word32.INw_primdef"
+  "INw_def" > "HOL4Word32.word32.INw_def"
+  "INw_MODw" > "HOL4Word32.word32.INw_MODw"
+  "INV_SUC_EQ_QT" > "HOL4Word32.word32.INV_SUC_EQ_QT"
+  "HB_primdef" > "HOL4Word32.word32.HB_primdef"
+  "HB_def" > "HOL4Word32.word32.HB_def"
+  "FUNPOW_THM2" > "HOL4Word32.word32.FUNPOW_THM2"
+  "FUNPOW_THM" > "Nat.funpow_swap1"
+  "FUNPOW_COMP" > "HOL4Word32.word32.FUNPOW_COMP"
+  "EQ_ADD_RCANCELw" > "HOL4Word32.word32.EQ_ADD_RCANCELw"
+  "EQ_ADD_RCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_RCANCEL_QT"
+  "EQ_ADD_LCANCELw" > "HOL4Word32.word32.EQ_ADD_LCANCELw"
+  "EQ_ADD_LCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_LCANCEL_QT"
+  "EQUIV_primdef" > "HOL4Word32.word32.EQUIV_primdef"
+  "EQUIV_def" > "HOL4Word32.word32.EQUIV_def"
+  "EQUIV_QT" > "HOL4Word32.word32.EQUIV_QT"
+  "EOR_primdef" > "HOL4Word32.word32.EOR_primdef"
+  "EOR_def" > "HOL4Word32.word32.EOR_def"
+  "EOR_EVAL2" > "HOL4Word32.word32.EOR_EVAL2"
+  "EOR_EVAL" > "HOL4Word32.word32.EOR_EVAL"
+  "DE_MORGAN_THMw" > "HOL4Word32.word32.DE_MORGAN_THMw"
+  "DE_MORGAN_THM_QT" > "HOL4Word32.word32.DE_MORGAN_THM_QT"
+  "COMP0_primdef" > "HOL4Word32.word32.COMP0_primdef"
+  "COMP0_def" > "HOL4Word32.word32.COMP0_def"
+  "CANCEL_SUBw" > "HOL4Word32.word32.CANCEL_SUBw"
+  "BITw_primdef" > "HOL4Word32.word32.BITw_primdef"
+  "BITw_def" > "HOL4Word32.word32.BITw_def"
+  "BITw_THM" > "HOL4Word32.word32.BITw_THM"
+  "BIT_EVAL" > "HOL4Word32.word32.BIT_EVAL"
+  "BIT_EQUIV_THM" > "HOL4Word32.word32.BIT_EQUIV_THM"
+  "BIT_EQUIV" > "HOL4Word32.word32.BIT_EQUIV"
+  "BITWISEw_WELLDEF" > "HOL4Word32.word32.BITWISEw_WELLDEF"
+  "BITWISE_WELLDEF" > "HOL4Word32.word32.BITWISE_WELLDEF"
+  "BITWISE_THM2" > "HOL4Word32.word32.BITWISE_THM2"
+  "BITWISE_ONE_COMP_THM" > "HOL4Word32.word32.BITWISE_ONE_COMP_THM"
+  "BITWISE_ISTEP" > "HOL4Word32.word32.BITWISE_ISTEP"
+  "BITWISE_EVAL2" > "HOL4Word32.word32.BITWISE_EVAL2"
+  "BITWISE_EVAL" > "HOL4Word32.word32.BITWISE_EVAL"
+  "BITSw_primdef" > "HOL4Word32.word32.BITSw_primdef"
+  "BITSw_def" > "HOL4Word32.word32.BITSw_def"
+  "BITSw_ZERO" > "HOL4Word32.word32.BITSw_ZERO"
+  "BITSw_DIV_THM" > "HOL4Word32.word32.BITSw_DIV_THM"
+  "BITSw_COMP_THM" > "HOL4Word32.word32.BITSw_COMP_THM"
+  "BITSwLT_THM" > "HOL4Word32.word32.BITSwLT_THM"
+  "BITS_SUC2" > "HOL4Word32.word32.BITS_SUC2"
+  "BITS_SLICEw_THM" > "HOL4Word32.word32.BITS_SLICEw_THM"
+  "BITS_EVAL" > "HOL4Word32.word32.BITS_EVAL"
+  "ASR_w_T" > "HOL4Word32.word32.ASR_w_T"
+  "ASR_THM" > "HOL4Word32.word32.ASR_THM"
+  "ASR_ONE_primdef" > "HOL4Word32.word32.ASR_ONE_primdef"
+  "ASR_ONE_def" > "HOL4Word32.word32.ASR_ONE_def"
+  "ASR_ONE_WELLDEF" > "HOL4Word32.word32.ASR_ONE_WELLDEF"
+  "ASR_ONE_EVAL2" > "HOL4Word32.word32.ASR_ONE_EVAL2"
+  "ASR_ONE_EVAL" > "HOL4Word32.word32.ASR_ONE_EVAL"
+  "ASR_LIMIT" > "HOL4Word32.word32.ASR_LIMIT"
+  "ASR_ADD" > "HOL4Word32.word32.ASR_ADD"
+  "AONE_primdef" > "HOL4Word32.word32.AONE_primdef"
+  "AONE_def" > "HOL4Word32.word32.AONE_def"
+  "AND_primdef" > "HOL4Word32.word32.AND_primdef"
+  "AND_def" > "HOL4Word32.word32.AND_def"
+  "AND_IDEMw" > "HOL4Word32.word32.AND_IDEMw"
+  "AND_IDEM_QT" > "HOL4Word32.word32.AND_IDEM_QT"
+  "AND_EVAL2" > "HOL4Word32.word32.AND_EVAL2"
+  "AND_EVAL" > "HOL4Word32.word32.AND_EVAL"
+  "AND_COMP_QT" > "HOL4Word32.word32.AND_COMP_QT"
+  "AND_COMMw" > "HOL4Word32.word32.AND_COMMw"
+  "AND_COMM_QT" > "HOL4Word32.word32.AND_COMM_QT"
+  "AND_ASSOCw" > "HOL4Word32.word32.AND_ASSOCw"
+  "AND_ASSOC_QT" > "HOL4Word32.word32.AND_ASSOC_QT"
+  "AND_ABSORBw" > "HOL4Word32.word32.AND_ABSORBw"
+  "AND_ABSORB_QT" > "HOL4Word32.word32.AND_ABSORB_QT"
+  "ADDw" > "HOL4Word32.word32.ADDw"
+  "ADD_WELLDEF" > "HOL4Word32.word32.ADD_WELLDEF"
+  "ADD_TWO_COMP_QT" > "HOL4Word32.word32.ADD_TWO_COMP_QT"
+  "ADD_TWO_COMP2" > "HOL4Word32.word32.ADD_TWO_COMP2"
+  "ADD_TWO_COMP" > "HOL4Word32.word32.ADD_TWO_COMP"
+  "ADD_SUBw" > "HOL4Word32.word32.ADD_SUBw"
+  "ADD_SUB_SYM" > "HOL4Word32.word32.ADD_SUB_SYM"
+  "ADD_SUB_ASSOC" > "HOL4Word32.word32.ADD_SUB_ASSOC"
+  "ADD_QT" > "HOL4Word32.word32.ADD_QT"
+  "ADD_INV_0_QT" > "HOL4Word32.word32.ADD_INV_0_QT"
+  "ADD_INV_0_EQw" > "HOL4Word32.word32.ADD_INV_0_EQw"
+  "ADD_INV_0_EQ_QT" > "HOL4Word32.word32.ADD_INV_0_EQ_QT"
+  "ADD_EVAL2" > "HOL4Word32.word32.ADD_EVAL2"
+  "ADD_EVAL" > "HOL4Word32.word32.ADD_EVAL"
+  "ADD_EQ_SUBw" > "HOL4Word32.word32.ADD_EQ_SUBw"
+  "ADD_COMMw" > "HOL4Word32.word32.ADD_COMMw"
+  "ADD_COMM_QT" > "HOL4Word32.word32.ADD_COMM_QT"
+  "ADD_CLAUSESw" > "HOL4Word32.word32.ADD_CLAUSESw"
+  "ADD_CLAUSES_QT" > "HOL4Word32.word32.ADD_CLAUSES_QT"
+  "ADD_ASSOCw" > "HOL4Word32.word32.ADD_ASSOCw"
+  "ADD_ASSOC_QT" > "HOL4Word32.word32.ADD_ASSOC_QT"
+  "ADD_0w" > "HOL4Word32.word32.ADD_0w"
+  "ADD_0_QT" > "HOL4Word32.word32.ADD_0_QT"
+  "ADD1w" > "HOL4Word32.word32.ADD1w"
+  "ADD1_QT" > "HOL4Word32.word32.ADD1_QT"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/word_base.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,102 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "word_size" > "word_size_primdef"
+  "word_case" > "word_case_primdef"
+  "word_base0" > "word_base0_primdef"
+  "mk_word" > "mk_word_def"
+  "dest_word" > "dest_word_def"
+  "bit" > "bit_def"
+  "WSPLIT" > "WSPLIT_def"
+  "WSEG" > "WSEG_def"
+  "WORDLEN" > "WORDLEN_def"
+  "WORD" > "WORD_def"
+  "WCAT" > "WCAT_def"
+  "PWORDLEN" > "PWORDLEN_primdef"
+  "MSB" > "MSB_def"
+  "LSB" > "LSB_def"
+
+type_maps
+  "word" > "HOL4Vec.word_base.word"
+
+const_maps
+  "word_base0" > "HOL4Vec.word_base.word_base0"
+  "WORD" > "HOL4Vec.word_base.WORD"
+  "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
+
+const_renames
+  "BIT" > "bit"
+
+thm_maps
+  "word_size_def" > "HOL4Vec.word_base.word_size_def"
+  "word_repfns" > "HOL4Vec.word_base.word_repfns"
+  "word_nchotomy" > "HOL4Vec.word_base.word_nchotomy"
+  "word_induction" > "HOL4Vec.word_base.word_induction"
+  "word_induct" > "HOL4Vec.word_base.word_induct"
+  "word_cases" > "HOL4Vec.word_base.word_cases"
+  "word_case_def" > "HOL4Vec.word_base.word_case_def"
+  "word_case_cong" > "HOL4Vec.word_base.word_case_cong"
+  "word_base0_primdef" > "HOL4Vec.word_base.word_base0_primdef"
+  "word_base0_def" > "HOL4Vec.word_base.word_base0_def"
+  "word_TY_DEF" > "HOL4Vec.word_base.word_TY_DEF"
+  "word_Axiom" > "HOL4Vec.word_base.word_Axiom"
+  "word_Ax" > "HOL4Vec.word_base.word_Ax"
+  "word_11" > "HOL4Vec.word_base.word_11"
+  "WSPLIT_WSEG2" > "HOL4Vec.word_base.WSPLIT_WSEG2"
+  "WSPLIT_WSEG1" > "HOL4Vec.word_base.WSPLIT_WSEG1"
+  "WSPLIT_WSEG" > "HOL4Vec.word_base.WSPLIT_WSEG"
+  "WSPLIT_PWORDLEN" > "HOL4Vec.word_base.WSPLIT_PWORDLEN"
+  "WSPLIT_DEF" > "HOL4Vec.word_base.WSPLIT_DEF"
+  "WSEG_WSEG" > "HOL4Vec.word_base.WSEG_WSEG"
+  "WSEG_WORD_LENGTH" > "HOL4Vec.word_base.WSEG_WORD_LENGTH"
+  "WSEG_WORDLEN" > "HOL4Vec.word_base.WSEG_WORDLEN"
+  "WSEG_WCAT_WSEG2" > "HOL4Vec.word_base.WSEG_WCAT_WSEG2"
+  "WSEG_WCAT_WSEG1" > "HOL4Vec.word_base.WSEG_WCAT_WSEG1"
+  "WSEG_WCAT_WSEG" > "HOL4Vec.word_base.WSEG_WCAT_WSEG"
+  "WSEG_WCAT2" > "HOL4Vec.word_base.WSEG_WCAT2"
+  "WSEG_WCAT1" > "HOL4Vec.word_base.WSEG_WCAT1"
+  "WSEG_SUC" > "HOL4Vec.word_base.WSEG_SUC"
+  "WSEG_PWORDLEN" > "HOL4Vec.word_base.WSEG_PWORDLEN"
+  "WSEG_DEF" > "HOL4Vec.word_base.WSEG_DEF"
+  "WSEG_BIT" > "HOL4Vec.word_base.WSEG_BIT"
+  "WSEG0" > "HOL4Vec.word_base.WSEG0"
+  "WORD_def" > "HOL4Vec.word_base.WORD_def"
+  "WORD_SPLIT" > "HOL4Vec.word_base.WORD_SPLIT"
+  "WORD_SNOC_WCAT" > "HOL4Vec.word_base.WORD_SNOC_WCAT"
+  "WORD_PARTITION" > "HOL4Vec.word_base.WORD_PARTITION"
+  "WORD_CONS_WCAT" > "HOL4Vec.word_base.WORD_CONS_WCAT"
+  "WORD_11" > "HOL4Vec.word_base.WORD_11"
+  "WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT"
+  "WORDLEN_SUC_WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG"
+  "WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT"
+  "WORDLEN_SUC_WCAT_BIT_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG"
+  "WORDLEN_SUC_WCAT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT"
+  "WORDLEN_DEF" > "HOL4Vec.word_base.WORDLEN_DEF"
+  "WORD" > "HOL4Vec.word_base.WORD"
+  "WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WCAT_WSEG_WSEG"
+  "WCAT_PWORDLEN" > "HOL4Vec.word_base.WCAT_PWORDLEN"
+  "WCAT_DEF" > "HOL4Vec.word_base.WCAT_DEF"
+  "WCAT_ASSOC" > "HOL4Vec.word_base.WCAT_ASSOC"
+  "WCAT_11" > "HOL4Vec.word_base.WCAT_11"
+  "WCAT0" > "HOL4Vec.word_base.WCAT0"
+  "PWORDLEN_primdef" > "HOL4Vec.word_base.PWORDLEN_primdef"
+  "PWORDLEN_def" > "HOL4Vec.word_base.PWORDLEN_def"
+  "PWORDLEN1" > "HOL4Vec.word_base.PWORDLEN1"
+  "PWORDLEN0" > "HOL4Vec.word_base.PWORDLEN0"
+  "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
+  "MSB_DEF" > "HOL4Vec.word_base.MSB_DEF"
+  "MSB" > "HOL4Vec.word_base.MSB"
+  "LSB_DEF" > "HOL4Vec.word_base.LSB_DEF"
+  "LSB" > "HOL4Vec.word_base.LSB"
+  "IN_PWORDLEN" > "HOL4Vec.word_base.IN_PWORDLEN"
+  "BIT_WSEG" > "HOL4Vec.word_base.BIT_WSEG"
+  "BIT_WCAT_SND" > "HOL4Vec.word_base.BIT_WCAT_SND"
+  "BIT_WCAT_FST" > "HOL4Vec.word_base.BIT_WCAT_FST"
+  "BIT_WCAT1" > "HOL4Vec.word_base.BIT_WCAT1"
+  "BIT_EQ_IMP_WORD_EQ" > "HOL4Vec.word_base.BIT_EQ_IMP_WORD_EQ"
+  "BIT_DEF" > "HOL4Vec.word_base.BIT_DEF"
+  "BIT0" > "HOL4Vec.word_base.BIT0"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/word_bitop.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,64 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "WMAP" > "WMAP_def"
+  "SHR" > "SHR_def"
+  "SHL" > "SHL_def"
+  "PBITOP" > "PBITOP_primdef"
+  "PBITBOP" > "PBITBOP_primdef"
+  "FORALLBITS" > "FORALLBITS_def"
+  "EXISTSABIT" > "EXISTSABIT_def"
+
+const_maps
+  "SHR" > "HOL4Vec.word_bitop.SHR"
+  "SHL" > "HOL4Vec.word_bitop.SHL"
+  "PBITOP" > "HOL4Vec.word_bitop.PBITOP"
+  "PBITBOP" > "HOL4Vec.word_bitop.PBITBOP"
+
+thm_maps
+  "WSEG_SHL_0" > "HOL4Vec.word_bitop.WSEG_SHL_0"
+  "WSEG_SHL" > "HOL4Vec.word_bitop.WSEG_SHL"
+  "WMAP_o" > "HOL4Vec.word_bitop.WMAP_o"
+  "WMAP_WSEG" > "HOL4Vec.word_bitop.WMAP_WSEG"
+  "WMAP_WCAT" > "HOL4Vec.word_bitop.WMAP_WCAT"
+  "WMAP_PWORDLEN" > "HOL4Vec.word_bitop.WMAP_PWORDLEN"
+  "WMAP_PBITOP" > "HOL4Vec.word_bitop.WMAP_PBITOP"
+  "WMAP_DEF" > "HOL4Vec.word_bitop.WMAP_DEF"
+  "WMAP_BIT" > "HOL4Vec.word_bitop.WMAP_BIT"
+  "WMAP_0" > "HOL4Vec.word_bitop.WMAP_0"
+  "SHR_def" > "HOL4Vec.word_bitop.SHR_def"
+  "SHR_WSEG_NF" > "HOL4Vec.word_bitop.SHR_WSEG_NF"
+  "SHR_WSEG_1F" > "HOL4Vec.word_bitop.SHR_WSEG_1F"
+  "SHR_WSEG" > "HOL4Vec.word_bitop.SHR_WSEG"
+  "SHR_DEF" > "HOL4Vec.word_bitop.SHR_DEF"
+  "SHL_def" > "HOL4Vec.word_bitop.SHL_def"
+  "SHL_WSEG_NF" > "HOL4Vec.word_bitop.SHL_WSEG_NF"
+  "SHL_WSEG_1F" > "HOL4Vec.word_bitop.SHL_WSEG_1F"
+  "SHL_WSEG" > "HOL4Vec.word_bitop.SHL_WSEG"
+  "SHL_DEF" > "HOL4Vec.word_bitop.SHL_DEF"
+  "PBITOP_primdef" > "HOL4Vec.word_bitop.PBITOP_primdef"
+  "PBITOP_def" > "HOL4Vec.word_bitop.PBITOP_def"
+  "PBITOP_WSEG" > "HOL4Vec.word_bitop.PBITOP_WSEG"
+  "PBITOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITOP_PWORDLEN"
+  "PBITOP_BIT" > "HOL4Vec.word_bitop.PBITOP_BIT"
+  "PBITBOP_primdef" > "HOL4Vec.word_bitop.PBITBOP_primdef"
+  "PBITBOP_def" > "HOL4Vec.word_bitop.PBITBOP_def"
+  "PBITBOP_WSEG" > "HOL4Vec.word_bitop.PBITBOP_WSEG"
+  "PBITBOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITBOP_PWORDLEN"
+  "PBITBOP_EXISTS" > "HOL4Vec.word_bitop.PBITBOP_EXISTS"
+  "NOT_FORALLBITS" > "HOL4Vec.word_bitop.NOT_FORALLBITS"
+  "NOT_EXISTSABIT" > "HOL4Vec.word_bitop.NOT_EXISTSABIT"
+  "IN_PBITOP" > "HOL4Vec.word_bitop.IN_PBITOP"
+  "IN_PBITBOP" > "HOL4Vec.word_bitop.IN_PBITBOP"
+  "FORALLBITS_WSEG" > "HOL4Vec.word_bitop.FORALLBITS_WSEG"
+  "FORALLBITS_WCAT" > "HOL4Vec.word_bitop.FORALLBITS_WCAT"
+  "FORALLBITS_DEF" > "HOL4Vec.word_bitop.FORALLBITS_DEF"
+  "FORALLBITS" > "HOL4Vec.word_bitop.FORALLBITS"
+  "EXISTSABIT_WSEG" > "HOL4Vec.word_bitop.EXISTSABIT_WSEG"
+  "EXISTSABIT_WCAT" > "HOL4Vec.word_bitop.EXISTSABIT_WCAT"
+  "EXISTSABIT_DEF" > "HOL4Vec.word_bitop.EXISTSABIT_DEF"
+  "EXISTSABIT" > "HOL4Vec.word_bitop.EXISTSABIT"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Generated/word_num.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,35 @@
+import
+
+import_segment "hol4"
+
+def_maps
+  "NWORD" > "NWORD_def"
+  "NVAL" > "NVAL_def"
+  "NLIST" > "NLIST_def"
+  "LVAL" > "LVAL_def"
+
+const_maps
+  "NWORD" > "HOL4Vec.word_num.NWORD"
+  "LVAL" > "HOL4Vec.word_num.LVAL"
+
+thm_maps
+  "NWORD_def" > "HOL4Vec.word_num.NWORD_def"
+  "NWORD_PWORDLEN" > "HOL4Vec.word_num.NWORD_PWORDLEN"
+  "NWORD_LENGTH" > "HOL4Vec.word_num.NWORD_LENGTH"
+  "NWORD_DEF" > "HOL4Vec.word_num.NWORD_DEF"
+  "NVAL_WORDLEN_0" > "HOL4Vec.word_num.NVAL_WORDLEN_0"
+  "NVAL_WCAT2" > "HOL4Vec.word_num.NVAL_WCAT2"
+  "NVAL_WCAT1" > "HOL4Vec.word_num.NVAL_WCAT1"
+  "NVAL_WCAT" > "HOL4Vec.word_num.NVAL_WCAT"
+  "NVAL_MAX" > "HOL4Vec.word_num.NVAL_MAX"
+  "NVAL_DEF" > "HOL4Vec.word_num.NVAL_DEF"
+  "NVAL1" > "HOL4Vec.word_num.NVAL1"
+  "NVAL0" > "HOL4Vec.word_num.NVAL0"
+  "NLIST_DEF" > "HOL4Vec.word_num.NLIST_DEF"
+  "LVAL_def" > "HOL4Vec.word_num.LVAL_def"
+  "LVAL_SNOC" > "HOL4Vec.word_num.LVAL_SNOC"
+  "LVAL_MAX" > "HOL4Vec.word_num.LVAL_MAX"
+  "LVAL_DEF" > "HOL4Vec.word_num.LVAL_DEF"
+  "LVAL" > "HOL4Vec.word_num.LVAL"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Template/GenHOL4Base.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,284 @@
+(*  Title:      HOL/Import/Generate-HOL/GenHOL4Base.thy
+    Author:     Sebastian Skalberg, TU Muenchen
+*)
+
+theory GenHOL4Base
+imports "../../HOL4Syntax" "../Compatibility"
+begin
+
+import_segment "hol4"
+
+setup_dump "../Generated" "HOL4Base"
+
+append_dump {*theory HOL4Base
+imports "../../HOL4Syntax" "../Compatibility"
+begin
+*}
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" bool;
+
+type_maps
+  bool            > HOL.bool;
+
+const_maps
+  T               > HOL.True
+  F               > HOL.False
+  "!"             > HOL.All
+  "/\\"           > HOL.conj
+  "\\/"           > HOL.disj
+  "?"             > HOL.Ex
+  "?!"            > HOL.Ex1
+  "~"             > HOL.Not
+  COND            > HOL.If
+  bool_case       > Product_Type.bool.bool_case
+  ONE_ONE         > HOL4Setup.ONE_ONE
+  ONTO            > Fun.surj
+  TYPE_DEFINITION > HOL4Setup.TYPE_DEFINITION
+  LET             > Compatibility.LET;
+
+ignore_thms
+  BOUNDED_DEF
+  BOUNDED_THM
+  UNBOUNDED_DEF
+  UNBOUNDED_THM;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" combin;
+
+const_maps
+  o > Fun.comp;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" sum;
+
+type_maps
+  sum > Sum_Type.sum;
+
+const_maps
+  INL      > Sum_Type.Inl
+  INR      > Sum_Type.Inr
+  ISL      > Compatibility.ISL
+  ISR      > Compatibility.ISR
+  OUTL     > Compatibility.OUTL
+  OUTR     > Compatibility.OUTR
+  sum_case > Sum_Type.sum.sum_case;
+
+ignore_thms
+  sum_TY_DEF
+  sum_ISO_DEF
+  IS_SUM_REP
+  INL_DEF
+  INR_DEF
+  sum_Axiom;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" one;
+
+type_maps
+  one > Product_Type.unit;
+
+const_maps
+  one > Product_Type.Unity;
+
+ignore_thms
+    one_TY_DEF
+    one_axiom
+    one_Axiom
+    one_DEF;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" option;
+
+type_maps
+    option > Option.option;
+
+const_maps
+    NONE        > Option.option.None
+    SOME        > Option.option.Some
+    option_case > Option.option.option_case
+    OPTION_MAP  > Option.map
+    THE         > Option.the
+    IS_SOME     > Compatibility.IS_SOME
+    IS_NONE     > Compatibility.IS_NONE
+    OPTION_JOIN > Compatibility.OPTION_JOIN;
+
+ignore_thms
+    option_axiom
+    option_Axiom
+    option_TY_DEF
+    option_REP_ABS_DEF
+    SOME_DEF
+    NONE_DEF;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" marker;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" relation;
+
+const_renames
+  reflexive > pred_reflexive;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" pair;
+
+type_maps
+    prod > Product_Type.prod;
+
+const_maps
+    ","       > Product_Type.Pair
+    FST       > Product_Type.fst
+    SND       > Product_Type.snd
+    CURRY     > Product_Type.curry
+    UNCURRY   > Product_Type.prod.prod_case
+    "##"      > Product_Type.map_pair
+    pair_case > Product_Type.prod.prod_case;
+
+ignore_thms
+    prod_TY_DEF
+    MK_PAIR_DEF
+    IS_PAIR_DEF
+    ABS_REP_prod
+    COMMA_DEF;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" num;
+
+type_maps
+  num > Nat.nat;
+
+const_maps
+  SUC > Nat.Suc
+  0   > Groups.zero_class.zero :: nat;
+
+ignore_thms
+    num_TY_DEF
+    num_ISO_DEF
+    IS_NUM_REP
+    ZERO_REP_DEF
+    SUC_REP_DEF
+    ZERO_DEF
+    SUC_DEF;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prim_rec;
+
+const_maps
+    "<" > Orderings.ord_class.less :: "nat \<Rightarrow> nat \<Rightarrow> bool";
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" arithmetic;
+
+const_maps
+  ALT_ZERO     > Compatibility.ALT_ZERO
+  NUMERAL_BIT1 > Compatibility.NUMERAL_BIT1
+  NUMERAL_BIT2 > Compatibility.NUMERAL_BIT2
+  NUMERAL      > Compatibility.NUMERAL
+  num_case     > Nat.nat.nat_case
+  ">"          > Compatibility.nat_gt
+  ">="         > Compatibility.nat_ge
+  FUNPOW       > Compatibility.FUNPOW
+  "<="         > Orderings.ord_class.less_eq :: "nat \<Rightarrow> nat \<Rightarrow> bool"
+  "+"          > Groups.plus_class.plus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  "*"          > Groups.times_class.times :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  "-"          > Groups.minus_class.minus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  MIN          > Orderings.ord_class.min :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  MAX          > Orderings.ord_class.max :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  DIV          > Divides.div_class.div :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  MOD          > Divides.div_class.mod :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  EXP          > Power.power_class.power :: "nat \<Rightarrow> nat \<Rightarrow> nat";
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" hrat;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" hreal;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" numeral;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" ind_type;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" divides;
+
+const_maps
+  divides > Rings.dvd_class.dvd :: "nat \<Rightarrow> nat \<Rightarrow> bool";
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prime;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" list;
+
+type_maps
+    list > List.list;
+
+const_maps
+  CONS      > List.list.Cons
+  NIL       > List.list.Nil
+  list_case > List.list.list_case
+  NULL      > List.null
+  HD        > List.hd
+  TL        > List.tl
+  MAP       > List.map
+  MEM       > Compatibility.list_mem
+  FILTER    > List.filter
+  FOLDL     > List.foldl
+  EVERY     > List.list_all
+  REVERSE   > List.rev
+  LAST      > List.last
+  FRONT     > List.butlast
+  APPEND    > List.append
+  FLAT      > List.concat
+  LENGTH    > Nat.size_class.size
+  REPLICATE > List.replicate
+  list_size > Compatibility.list_size
+  SUM       > Compatibility.sum
+  FOLDR     > Compatibility.FOLDR
+  EXISTS    > List.list_ex
+  MAP2      > Compatibility.map2
+  ZIP       > Compatibility.ZIP
+  UNZIP     > Compatibility.unzip;
+
+ignore_thms
+  list_TY_DEF
+  list_repfns
+  list0_def
+  list1_def
+  NIL
+  CONS_def;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" pred_set;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" operator;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" rich_list;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" state_transformer;
+end_import;
+
+append_dump "end";
+
+flush_dump;
+
+import_segment "";
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Template/GenHOL4Prob.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,52 @@
+(*  Title:      HOL/Import/Generate-HOL/GenHOL4Prob.thy
+    Author:     Sebastian Skalberg, TU Muenchen
+*)
+
+theory GenHOL4Prob
+imports GenHOL4Real
+begin
+
+import_segment "hol4"
+
+setup_dump "../Generated" "HOL4Prob"
+
+append_dump {*theory HOL4Prob
+imports HOL4Real
+begin
+*}
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob_extra;
+
+const_moves
+  COMPL > GenHOL4Base.pred_set.COMPL;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob_canon;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" boolean_sequence;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob_algebra;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob_pseudo;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob_indep;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" prob_uniform;
+end_import;
+
+append_dump "end";
+
+flush_dump;
+
+import_segment "";
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Template/GenHOL4Real.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,101 @@
+(*  Title:      HOL/Import/Generate-HOL/GenHOL4Real.thy
+    Author:     Sebastian Skalberg (TU Muenchen)
+*)
+
+theory GenHOL4Real
+imports GenHOL4Base
+begin
+
+import_segment "hol4"
+
+setup_dump "../Generated" "HOL4Real"
+
+append_dump {*theory HOL4Real
+imports HOL4Base
+begin
+*}
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" realax;
+
+type_maps
+  real > RealDef.real;
+
+const_maps
+  real_0   > Groups.zero_class.zero :: real
+  real_1   > Groups.one_class.one   :: real
+  real_neg > Groups.uminus_class.uminus :: "real \<Rightarrow> real"
+  inv > Fields.inverse_class.inverse :: "real \<Rightarrow> real"
+  real_add > Groups.plus_class.plus :: "real \<Rightarrow> real \<Rightarrow> real"
+  real_sub > Groups.minus_class.minus :: "real \<Rightarrow> real \<Rightarrow> real"
+  real_mul > Groups.times_class.times :: "real \<Rightarrow> real \<Rightarrow> real"
+  real_div > Fields.inverse_class.divide :: "real \<Rightarrow> real \<Rightarrow> real"
+  real_lt > Orderings.ord_class.less :: "real \<Rightarrow> real \<Rightarrow> bool"
+  mk_real > HOL.undefined   (* Otherwise proof_import_concl fails *)
+  dest_real > HOL.undefined
+
+ignore_thms
+    real_TY_DEF
+    real_tybij
+    real_0
+    real_1
+    real_neg
+    real_inv
+    real_add
+    real_mul
+    real_lt
+    real_of_hreal
+    hreal_of_real
+    REAL_ISO_EQ
+    REAL_POS
+    SUP_ALLPOS_LEMMA1
+    SUP_ALLPOS_LEMMA2
+    SUP_ALLPOS_LEMMA3
+    SUP_ALLPOS_LEMMA4;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" real;
+
+const_maps
+  real_gt     > Compatibility.real_gt
+  real_ge     > Compatibility.real_ge
+  real_lte    > Orderings.ord_class.less_eq :: "real \<Rightarrow> real \<Rightarrow> bool"
+  real_sub    > Groups.minus_class.minus :: "real \<Rightarrow> real \<Rightarrow> real"
+  "/"         > Fields.inverse_class.divide :: "real \<Rightarrow> real \<Rightarrow> real"
+  pow         > Power.power_class.power :: "real \<Rightarrow> nat \<Rightarrow> real"
+  abs         > Groups.abs_class.abs :: "real => real"
+  real_of_num > RealDef.real :: "nat => real";
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" topology;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" nets;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" seq;
+const_renames
+"-->" > "hol4-->";
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" lim;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" powser;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" transc;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" poly;
+end_import;
+
+append_dump "end";
+
+flush_dump;
+
+import_segment "";
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Template/GenHOL4Vec.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,49 @@
+(*  Title:      HOL/Import/Generate-HOL/GenHOL4Vec.thy
+    Author:     Sebastian Skalberg, TU Muenchen
+*)
+
+theory GenHOL4Vec
+imports GenHOL4Base
+begin
+
+import_segment "hol4"
+
+setup_dump "../Generated" "HOL4Vev"
+
+append_dump {*theory HOL4Vec
+imports HOL4Base
+begin
+*}
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" res_quan;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" word_base;
+
+const_renames
+  BIT > bit;
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" word_num;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" word_bitop;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" bword_num;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" bword_arith;
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" bword_bitop;
+end_import;
+
+append_dump "end";
+
+flush_dump;
+
+import_segment "";
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL4/Template/GenHOL4Word32.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,38 @@
+(*  Title:      HOL/Import/Generate-HOL/GenHOL4Word32.thy
+    Author:     Sebastian Skalberg, TU Muenchen
+*)
+
+theory GenHOL4Word32
+imports GenHOL4Base
+begin
+
+import_segment "hol4"
+
+setup_dump "../Generated" "HOL4Word32"
+
+append_dump {*theory HOL4Word32
+imports HOL4Base
+begin
+*}
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" bits;
+
+const_renames
+  BIT > bit
+
+end_import;
+
+import_theory "~~/src/HOL/Import/HOL4/Generated" word32;
+
+const_renames
+  "==" > EQUIV;
+
+end_import;
+
+append_dump "end";
+
+flush_dump;
+
+import_segment "";
+
+end
--- a/src/HOL/Import/HOLLight/HOLLight.thy	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7470 +0,0 @@
-(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
-
-theory HOLLight imports "../HOLLightCompat" "../HOL4Syntax" begin 
-
-setup_theory "~~/src/HOL/Import/HOLLight" hollight
-
-consts
-  "_FALSITY_" :: "bool" ("'_FALSITY'_")
-
-defs
-  "_FALSITY__def": "_FALSITY_ == False"
-
-lemma DEF__FALSITY_: "_FALSITY_ = False"
-  by (import hollight DEF__FALSITY_)
-
-lemma CONJ_ACI: "(p & q) = (q & p) &
-((p & q) & r) = (p & q & r) &
-(p & q & r) = (q & p & r) & (p & p) = p & (p & p & q) = (p & q)"
-  by (import hollight CONJ_ACI)
-
-lemma DISJ_ACI: "(p | q) = (q | p) &
-((p | q) | r) = (p | q | r) &
-(p | q | r) = (q | p | r) & (p | p) = p & (p | p | q) = (p | q)"
-  by (import hollight DISJ_ACI)
-
-lemma IMP_CONJ_ALT: "(p & q --> r) = (q --> p --> r)"
-  by (import hollight IMP_CONJ_ALT)
-
-lemma EQ_CLAUSES: "(True = t) = t & (t = True) = t & (False = t) = (~ t) & (t = False) = (~ t)"
-  by (import hollight EQ_CLAUSES)
-
-lemma NOT_CLAUSES_WEAK: "(~ True) = False & (~ False) = True"
-  by (import hollight NOT_CLAUSES_WEAK)
-
-lemma AND_CLAUSES: "(True & t) = t &
-(t & True) = t & (False & t) = False & (t & False) = False & (t & t) = t"
-  by (import hollight AND_CLAUSES)
-
-lemma OR_CLAUSES: "(True | t) = True &
-(t | True) = True & (False | t) = t & (t | False) = t & (t | t) = t"
-  by (import hollight OR_CLAUSES)
-
-lemma IMP_CLAUSES: "(True --> t) = t &
-(t --> True) = True &
-(False --> t) = True & (t --> t) = True & (t --> False) = (~ t)"
-  by (import hollight IMP_CLAUSES)
-
-lemma IMP_EQ_CLAUSE: "((x::'q_851) = x --> (p::bool)) = p"
-  by (import hollight IMP_EQ_CLAUSE)
-
-lemma TRIV_EXISTS_AND_THM: "(EX x::'A. (P::bool) & (Q::bool)) = ((EX x::'A. P) & (EX x::'A. Q))"
-  by (import hollight TRIV_EXISTS_AND_THM)
-
-lemma TRIV_AND_EXISTS_THM: "((EX x::'A. (P::bool)) & (EX x::'A. (Q::bool))) = (EX x::'A. P & Q)"
-  by (import hollight TRIV_AND_EXISTS_THM)
-
-lemma TRIV_FORALL_OR_THM: "(ALL x::'A. (P::bool) | (Q::bool)) = ((ALL x::'A. P) | (ALL x::'A. Q))"
-  by (import hollight TRIV_FORALL_OR_THM)
-
-lemma TRIV_OR_FORALL_THM: "((ALL x::'A. (P::bool)) | (ALL x::'A. (Q::bool))) = (ALL x::'A. P | Q)"
-  by (import hollight TRIV_OR_FORALL_THM)
-
-lemma TRIV_FORALL_IMP_THM: "(ALL x::'A. (P::bool) --> (Q::bool)) = ((EX x::'A. P) --> (ALL x::'A. Q))"
-  by (import hollight TRIV_FORALL_IMP_THM)
-
-lemma TRIV_EXISTS_IMP_THM: "(EX x::'A. (P::bool) --> (Q::bool)) = ((ALL x::'A. P) --> (EX x::'A. Q))"
-  by (import hollight TRIV_EXISTS_IMP_THM)
-
-lemma EXISTS_UNIQUE_ALT: "Ex1 (P::'A => bool) = (EX x::'A. ALL y::'A. P y = (x = y))"
-  by (import hollight EXISTS_UNIQUE_ALT)
-
-lemma SELECT_UNIQUE: "(!!y::'A. (P::'A => bool) y = (y = (x::'A))) ==> Eps P = x"
-  by (import hollight SELECT_UNIQUE)
-
-lemma EXCLUDED_MIDDLE: "t | ~ t"
-  by (import hollight EXCLUDED_MIDDLE)
-
-lemma COND_CLAUSES: "(if True then x::'A else (xa::'A)) = x & (if False then x else xa) = xa"
-  by (import hollight COND_CLAUSES)
-
-lemma COND_EXPAND: "(if b then t1 else t2) = ((~ b | t1) & (b | t2))"
-  by (import hollight COND_EXPAND)
-
-lemma COND_RATOR: "(if b::bool then f::'A => 'B else (g::'A => 'B)) (x::'A) =
-(if b then f x else g x)"
-  by (import hollight COND_RATOR)
-
-lemma COND_ABS: "(%x::'A. if b::bool then (f::'A => 'B) x else (g::'A => 'B) x) =
-(if b then f else g)"
-  by (import hollight COND_ABS)
-
-lemma MONO_COND: "[| (A --> B) & (C --> D); if b then A else C |] ==> if b then B else D"
-  by (import hollight MONO_COND)
-
-lemma SKOLEM_THM: "(ALL x::'A. Ex ((P::'A => 'B => bool) x)) =
-(EX x::'A => 'B. ALL xa::'A. P xa (x xa))"
-  by (import hollight SKOLEM_THM)
-
-lemma UNIQUE_SKOLEM_ALT: "(ALL x::'A. Ex1 ((P::'A => 'B => bool) x)) =
-(EX f::'A => 'B. ALL (x::'A) y::'B. P x y = (f x = y))"
-  by (import hollight UNIQUE_SKOLEM_ALT)
-
-lemma COND_EQ_CLAUSE: "(if (x::'q_2963) = x then y::'q_2956 else (z::'q_2956)) = y"
-  by (import hollight COND_EQ_CLAUSE)
-
-lemma bool_RECURSION: "EX x::bool => 'A. x False = (a::'A) & x True = (b::'A)"
-  by (import hollight bool_RECURSION)
-
-lemma o_ASSOC: "(f::'C => 'D) o ((g::'B => 'C) o (h::'A => 'B)) = f o g o h"
-  by (import hollight o_ASSOC)
-
-lemma I_O_ID: "id o (f::'A => 'B) = f & f o id = f"
-  by (import hollight I_O_ID)
-
-lemma EXISTS_ONE_REP: "EX x. x"
-  by (import hollight EXISTS_ONE_REP)
-
-lemma one_axiom: "(f::'A => unit) = (x::'A => unit)"
-  by (import hollight one_axiom)
-
-lemma one_RECURSION: "EX x::unit => 'A. x () = (e::'A)"
-  by (import hollight one_RECURSION)
-
-lemma one_Axiom: "EX! fn::unit => 'A. fn () = (e::'A)"
-  by (import hollight one_Axiom)
-
-lemma th_cond: "(b = False --> x = x0) & (b = True --> x = x1) ==> x = (b & x1 | ~ b & x0)"
-  by (import hollight th_cond)
-
-definition
-  LET_END :: "'A => 'A"  where
-  "LET_END == %t::'A. t"
-
-lemma DEF_LET_END: "LET_END = (%t::'A. t)"
-  by (import hollight DEF_LET_END)
-
-consts
-  "_SEQPATTERN" :: "('q_4007 => 'q_4004 => bool)
-=> ('q_4007 => 'q_4004 => bool) => 'q_4007 => 'q_4004 => bool" ("'_SEQPATTERN")
-
-defs
-  "_SEQPATTERN_def": "_SEQPATTERN ==
-%(r::'q_4007 => 'q_4004 => bool) (s::'q_4007 => 'q_4004 => bool) x::'q_4007.
-   if Ex (r x) then r x else s x"
-
-lemma DEF__SEQPATTERN: "_SEQPATTERN =
-(%(r::'q_4007 => 'q_4004 => bool) (s::'q_4007 => 'q_4004 => bool)
-    x::'q_4007. if Ex (r x) then r x else s x)"
-  by (import hollight DEF__SEQPATTERN)
-
-consts
-  "_UNGUARDED_PATTERN" :: "bool => bool => bool" ("'_UNGUARDED'_PATTERN")
-
-defs
-  "_UNGUARDED_PATTERN_def": "_UNGUARDED_PATTERN == op &"
-
-lemma DEF__UNGUARDED_PATTERN: "_UNGUARDED_PATTERN = op &"
-  by (import hollight DEF__UNGUARDED_PATTERN)
-
-consts
-  "_GUARDED_PATTERN" :: "bool => bool => bool => bool" ("'_GUARDED'_PATTERN")
-
-defs
-  "_GUARDED_PATTERN_def": "_GUARDED_PATTERN == %p g r. p & g & r"
-
-lemma DEF__GUARDED_PATTERN: "_GUARDED_PATTERN = (%p g r. p & g & r)"
-  by (import hollight DEF__GUARDED_PATTERN)
-
-consts
-  "_MATCH" :: "'q_4049 => ('q_4049 => 'q_4053 => bool) => 'q_4053" ("'_MATCH")
-
-defs
-  "_MATCH_def": "_MATCH ==
-%(e::'q_4049) r::'q_4049 => 'q_4053 => bool.
-   if Ex1 (r e) then Eps (r e) else SOME z::'q_4053. False"
-
-lemma DEF__MATCH: "_MATCH =
-(%(e::'q_4049) r::'q_4049 => 'q_4053 => bool.
-    if Ex1 (r e) then Eps (r e) else SOME z::'q_4053. False)"
-  by (import hollight DEF__MATCH)
-
-consts
-  "_FUNCTION" :: "('q_4071 => 'q_4075 => bool) => 'q_4071 => 'q_4075" ("'_FUNCTION")
-
-defs
-  "_FUNCTION_def": "_FUNCTION ==
-%(r::'q_4071 => 'q_4075 => bool) x::'q_4071.
-   if Ex1 (r x) then Eps (r x) else SOME z::'q_4075. False"
-
-lemma DEF__FUNCTION: "_FUNCTION =
-(%(r::'q_4071 => 'q_4075 => bool) x::'q_4071.
-    if Ex1 (r x) then Eps (r x) else SOME z::'q_4075. False)"
-  by (import hollight DEF__FUNCTION)
-
-lemma PAIR_EXISTS_THM: "EX (x::'A => 'B => bool) (a::'A) b::'B. x = Pair_Rep a b"
-  by (import hollight PAIR_EXISTS_THM)
-
-lemma pair_RECURSION: "EX x::'A * 'B => 'C.
-   ALL (a0::'A) a1::'B. x (a0, a1) = (PAIR'::'A => 'B => 'C) a0 a1"
-  by (import hollight pair_RECURSION)
-
-definition
-  UNCURRY :: "('A => 'B => 'C) => 'A * 'B => 'C"  where
-  "UNCURRY == %(u::'A => 'B => 'C) ua::'A * 'B. u (fst ua) (snd ua)"
-
-lemma DEF_UNCURRY: "UNCURRY = (%(u::'A => 'B => 'C) ua::'A * 'B. u (fst ua) (snd ua))"
-  by (import hollight DEF_UNCURRY)
-
-definition
-  PASSOC :: "(('A * 'B) * 'C => 'D) => 'A * 'B * 'C => 'D"  where
-  "PASSOC ==
-%(u::('A * 'B) * 'C => 'D) ua::'A * 'B * 'C.
-   u ((fst ua, fst (snd ua)), snd (snd ua))"
-
-lemma DEF_PASSOC: "PASSOC =
-(%(u::('A * 'B) * 'C => 'D) ua::'A * 'B * 'C.
-    u ((fst ua, fst (snd ua)), snd (snd ua)))"
-  by (import hollight DEF_PASSOC)
-
-lemma LAMBDA_PAIR_THM: "(x::'q_4547 * 'q_4546 => 'q_4539) =
-(SOME f::'q_4547 * 'q_4546 => 'q_4539.
-    ALL (xa::'q_4547) y::'q_4546. f (xa, y) = x (xa, y))"
-  by (import hollight LAMBDA_PAIR_THM)
-
-lemma FORALL_PAIRED_THM: "All (SOME f::'q_4576 * 'q_4575 => bool.
-        ALL (x::'q_4576) y::'q_4575.
-           f (x, y) = (P::'q_4576 => 'q_4575 => bool) x y) =
-(ALL x::'q_4576. All (P x))"
-  by (import hollight FORALL_PAIRED_THM)
-
-lemma EXISTS_PAIRED_THM: "Ex (SOME f::'q_4612 * 'q_4611 => bool.
-       ALL (x::'q_4612) y::'q_4611.
-          f (x, y) = (P::'q_4612 => 'q_4611 => bool) x y) =
-(EX x::'q_4612. Ex (P x))"
-  by (import hollight EXISTS_PAIRED_THM)
-
-lemma FORALL_TRIPLED_THM: "All (SOME f::'q_4649 * 'q_4648 * 'q_4647 => bool.
-        ALL (x::'q_4649) (y::'q_4648) z::'q_4647.
-           f (x, y, z) = (P::'q_4649 => 'q_4648 => 'q_4647 => bool) x y z) =
-(ALL (x::'q_4649) y::'q_4648. All (P x y))"
-  by (import hollight FORALL_TRIPLED_THM)
-
-lemma EXISTS_TRIPLED_THM: "Ex (SOME f::'q_4695 * 'q_4694 * 'q_4693 => bool.
-       ALL (x::'q_4695) (y::'q_4694) z::'q_4693.
-          f (x, y, z) = (P::'q_4695 => 'q_4694 => 'q_4693 => bool) x y z) =
-(EX (x::'q_4695) y::'q_4694. Ex (P x y))"
-  by (import hollight EXISTS_TRIPLED_THM)
-
-lemma IND_SUC_0_EXISTS: "EX (x::ind => ind) z::ind.
-   (ALL (x1::ind) x2::ind. (x x1 = x x2) = (x1 = x2)) &
-   (ALL xa::ind. x xa ~= z)"
-  by (import hollight IND_SUC_0_EXISTS)
-
-definition
-  IND_SUC :: "ind => ind"  where
-  "IND_SUC ==
-SOME f. EX z. (ALL x1 x2. (f x1 = f x2) = (x1 = x2)) & (ALL x. f x ~= z)"
-
-lemma DEF_IND_SUC: "IND_SUC =
-(SOME f. EX z. (ALL x1 x2. (f x1 = f x2) = (x1 = x2)) & (ALL x. f x ~= z))"
-  by (import hollight DEF_IND_SUC)
-
-definition
-  IND_0 :: "ind"  where
-  "IND_0 ==
-SOME z.
-   (ALL x1 x2. (IND_SUC x1 = IND_SUC x2) = (x1 = x2)) &
-   (ALL x. IND_SUC x ~= z)"
-
-lemma DEF_IND_0: "IND_0 =
-(SOME z.
-    (ALL x1 x2. (IND_SUC x1 = IND_SUC x2) = (x1 = x2)) &
-    (ALL x. IND_SUC x ~= z))"
-  by (import hollight DEF_IND_0)
-
-definition
-  NUM_REP :: "ind => bool"  where
-  "NUM_REP ==
-%a. ALL NUM_REP'.
-       (ALL a.
-           a = IND_0 | (EX i. a = IND_SUC i & NUM_REP' i) -->
-           NUM_REP' a) -->
-       NUM_REP' a"
-
-lemma DEF_NUM_REP: "NUM_REP =
-(%a. ALL NUM_REP'.
-        (ALL a.
-            a = IND_0 | (EX i. a = IND_SUC i & NUM_REP' i) -->
-            NUM_REP' a) -->
-        NUM_REP' a)"
-  by (import hollight DEF_NUM_REP)
-
-lemma num_RECURSION_STD: "EX fn::nat => 'Z.
-   fn (0::nat) = (e::'Z) &
-   (ALL n::nat. fn (Suc n) = (f::nat => 'Z => 'Z) n (fn n))"
-  by (import hollight num_RECURSION_STD)
-
-lemma ADD_CLAUSES: "(ALL x::nat. (0::nat) + x = x) &
-(ALL x::nat. x + (0::nat) = x) &
-(ALL (x::nat) xa::nat. Suc x + xa = Suc (x + xa)) &
-(ALL (x::nat) xa::nat. x + Suc xa = Suc (x + xa))"
-  by (import hollight ADD_CLAUSES)
-
-lemma ADD_AC: "(m::nat) + (n::nat) = n + m &
-m + n + (p::nat) = m + (n + p) & m + (n + p) = n + (m + p)"
-  by (import hollight ADD_AC)
-
-lemma EQ_ADD_LCANCEL_0: "((m::nat) + (n::nat) = m) = (n = (0::nat))"
-  by (import hollight EQ_ADD_LCANCEL_0)
-
-lemma EQ_ADD_RCANCEL_0: "((x::nat) + (xa::nat) = xa) = (x = (0::nat))"
-  by (import hollight EQ_ADD_RCANCEL_0)
-
-lemma BIT1: "2 * x + 1 = Suc (x + x)"
-  by (import hollight BIT1)
-
-lemma BIT1_THM: "2 * x + 1 = Suc (x + x)"
-  by (import hollight BIT1_THM)
-
-lemma TWO: "2 = Suc 1"
-  by (import hollight TWO)
-
-lemma MULT_CLAUSES: "(ALL x::nat. (0::nat) * x = (0::nat)) &
-(ALL x::nat. x * (0::nat) = (0::nat)) &
-(ALL x::nat. (1::nat) * x = x) &
-(ALL x::nat. x * (1::nat) = x) &
-(ALL (x::nat) xa::nat. Suc x * xa = x * xa + xa) &
-(ALL (x::nat) xa::nat. x * Suc xa = x + x * xa)"
-  by (import hollight MULT_CLAUSES)
-
-lemma MULT_AC: "(m::nat) * (n::nat) = n * m &
-m * n * (p::nat) = m * (n * p) & m * (n * p) = n * (m * p)"
-  by (import hollight MULT_AC)
-
-lemma EXP_EQ_1: "((x::nat) ^ (n::nat) = (1::nat)) = (x = (1::nat) | n = (0::nat))"
-  by (import hollight EXP_EQ_1)
-
-lemma LT_ANTISYM: "~ ((m::nat) < (n::nat) & n < m)"
-  by (import hollight LT_ANTISYM)
-
-lemma LET_ANTISYM: "~ ((m::nat) <= (n::nat) & n < m)"
-  by (import hollight LET_ANTISYM)
-
-lemma LTE_ANTISYM: "~ ((x::nat) < (xa::nat) & xa <= x)"
-  by (import hollight LTE_ANTISYM)
-
-lemma LT_CASES: "(m::nat) < (n::nat) | n < m | m = n"
-  by (import hollight LT_CASES)
-
-lemma LTE_CASES: "(x::nat) < (xa::nat) | xa <= x"
-  by (import hollight LTE_CASES)
-
-lemma LE_1: "(ALL x::nat. x ~= (0::nat) --> (0::nat) < x) &
-(ALL x::nat. x ~= (0::nat) --> (1::nat) <= x) &
-(ALL x>0::nat. x ~= (0::nat)) &
-(ALL x>0::nat. (1::nat) <= x) &
-(ALL x>=1::nat. (0::nat) < x) & (ALL x>=1::nat. x ~= (0::nat))"
-  by (import hollight LE_1)
-
-lemma LT_EXISTS: "(m < n) = (EX d. n = m + Suc d)"
-  by (import hollight LT_EXISTS)
-
-lemma LT_ADD: "((m::nat) < m + (n::nat)) = ((0::nat) < n)"
-  by (import hollight LT_ADD)
-
-lemma LT_ADDR: "((xa::nat) < (x::nat) + xa) = ((0::nat) < x)"
-  by (import hollight LT_ADDR)
-
-lemma LT_LMULT: "(m::nat) ~= (0::nat) & (n::nat) < (p::nat) ==> m * n < m * p"
-  by (import hollight LT_LMULT)
-
-lemma LE_MULT_LCANCEL: "((m::nat) * (n::nat) <= m * (p::nat)) = (m = (0::nat) | n <= p)"
-  by (import hollight LE_MULT_LCANCEL)
-
-lemma LE_MULT_RCANCEL: "((x::nat) * (xb::nat) <= (xa::nat) * xb) = (x <= xa | xb = (0::nat))"
-  by (import hollight LE_MULT_RCANCEL)
-
-lemma LT_MULT_LCANCEL: "((m::nat) * (n::nat) < m * (p::nat)) = (m ~= (0::nat) & n < p)"
-  by (import hollight LT_MULT_LCANCEL)
-
-lemma LT_MULT_RCANCEL: "((x::nat) * (xb::nat) < (xa::nat) * xb) = (x < xa & xb ~= (0::nat))"
-  by (import hollight LT_MULT_RCANCEL)
-
-lemma LT_MULT2: "(m::nat) < (n::nat) & (p::nat) < (q::nat) ==> m * p < n * q"
-  by (import hollight LT_MULT2)
-
-lemma WLOG_LE: "(ALL (m::nat) n::nat. (P::nat => nat => bool) m n = P n m) &
-(ALL (m::nat) n::nat. m <= n --> P m n)
-==> P (m::nat) (x::nat)"
-  by (import hollight WLOG_LE)
-
-lemma WLOG_LT: "(ALL m::nat. (P::nat => nat => bool) m m) &
-(ALL (m::nat) n::nat. P m n = P n m) &
-(ALL (m::nat) n::nat. m < n --> P m n)
-==> P (m::nat) (x::nat)"
-  by (import hollight WLOG_LT)
-
-lemma num_WOP: "Ex (P::nat => bool) = (EX n::nat. P n & (ALL m<n. ~ P m))"
-  by (import hollight num_WOP)
-
-lemma num_MAX: "(Ex (P::nat => bool) & (EX M::nat. ALL x::nat. P x --> x <= M)) =
-(EX m::nat. P m & (ALL x::nat. P x --> x <= m))"
-  by (import hollight num_MAX)
-
-lemma NOT_EVEN: "odd (n::nat) = odd n"
-  by (import hollight NOT_EVEN)
-
-lemma NOT_ODD: "(~ odd (n::nat)) = even n"
-  by (import hollight NOT_ODD)
-
-lemma EVEN_OR_ODD: "even (n::nat) | odd n"
-  by (import hollight EVEN_OR_ODD)
-
-lemma EVEN_AND_ODD: "~ (even (x::nat) & odd x)"
-  by (import hollight EVEN_AND_ODD)
-
-lemma EVEN_EXP: "even ((m::nat) ^ (n::nat)) = (even m & n ~= (0::nat))"
-  by (import hollight EVEN_EXP)
-
-lemma ODD_MULT: "odd ((m::nat) * (n::nat)) = (odd m & odd n)"
-  by (import hollight ODD_MULT)
-
-lemma ODD_EXP: "odd ((m::nat) ^ (n::nat)) = (odd m | n = (0::nat))"
-  by (import hollight ODD_EXP)
-
-lemma EVEN_DOUBLE: "even ((2::nat) * (n::nat))"
-  by (import hollight EVEN_DOUBLE)
-
-lemma ODD_DOUBLE: "odd (Suc (2 * x))"
-  by (import hollight ODD_DOUBLE)
-
-lemma EVEN_EXISTS_LEMMA: "(even n --> (EX m. n = 2 * m)) & (odd n --> (EX m. n = Suc (2 * m)))"
-  by (import hollight EVEN_EXISTS_LEMMA)
-
-lemma EVEN_ODD_DECOMPOSITION: "(EX (k::nat) m::nat. odd m & (n::nat) = (2::nat) ^ k * m) = (n ~= (0::nat))"
-  by (import hollight EVEN_ODD_DECOMPOSITION)
-
-lemma SUB_0: "(0::nat) - (x::nat) = (0::nat) & x - (0::nat) = x"
-  by (import hollight SUB_0)
-
-lemma SUB_PRESUC: "Suc m - n - Suc 0 = m - n"
-  by (import hollight SUB_PRESUC)
-
-lemma ADD_SUBR: "(xa::nat) - ((x::nat) + xa) = (0::nat)"
-  by (import hollight ADD_SUBR)
-
-lemma EVEN_SUB: "even ((m::nat) - (n::nat)) = (m <= n | even m = even n)"
-  by (import hollight EVEN_SUB)
-
-lemma ODD_SUB: "odd ((x::nat) - (xa::nat)) = (xa < x & odd x ~= odd xa)"
-  by (import hollight ODD_SUB)
-
-lemma EXP_LT_0: "((0::nat) < (xa::nat) ^ (x::nat)) = (xa ~= (0::nat) | x = (0::nat))"
-  by (import hollight EXP_LT_0)
-
-lemma LT_EXP: "((x::nat) ^ (m::nat) < x ^ (n::nat)) =
-((2::nat) <= x & m < n | x = (0::nat) & m ~= (0::nat) & n = (0::nat))"
-  by (import hollight LT_EXP)
-
-lemma LE_EXP: "((x::nat) ^ (m::nat) <= x ^ (n::nat)) =
-(if x = (0::nat) then m = (0::nat) --> n = (0::nat)
- else x = (1::nat) | m <= n)"
-  by (import hollight LE_EXP)
-
-lemma EQ_EXP: "((x::nat) ^ (m::nat) = x ^ (n::nat)) =
-(if x = (0::nat) then (m = (0::nat)) = (n = (0::nat))
- else x = (1::nat) | m = n)"
-  by (import hollight EQ_EXP)
-
-lemma EXP_MONO_LE_IMP: "(x::nat) <= (xa::nat) ==> x ^ (xb::nat) <= xa ^ xb"
-  by (import hollight EXP_MONO_LE_IMP)
-
-lemma EXP_MONO_LT_IMP: "(x::nat) < (y::nat) & (n::nat) ~= (0::nat) ==> x ^ n < y ^ n"
-  by (import hollight EXP_MONO_LT_IMP)
-
-lemma EXP_MONO_LE: "((x::nat) ^ (n::nat) <= (y::nat) ^ n) = (x <= y | n = (0::nat))"
-  by (import hollight EXP_MONO_LE)
-
-lemma EXP_MONO_LT: "((x::nat) ^ (xb::nat) < (xa::nat) ^ xb) = (x < xa & xb ~= (0::nat))"
-  by (import hollight EXP_MONO_LT)
-
-lemma EXP_MONO_EQ: "((x::nat) ^ (xb::nat) = (xa::nat) ^ xb) = (x = xa | xb = (0::nat))"
-  by (import hollight EXP_MONO_EQ)
-
-lemma DIVMOD_EXIST: "(n::nat) ~= (0::nat) ==> EX (q::nat) r::nat. (m::nat) = q * n + r & r < n"
-  by (import hollight DIVMOD_EXIST)
-
-lemma DIVMOD_EXIST_0: "EX (x::nat) xa::nat.
-   if (n::nat) = (0::nat) then x = (0::nat) & xa = (m::nat)
-   else m = x * n + xa & xa < n"
-  by (import hollight DIVMOD_EXIST_0)
-
-lemma DIVISION: "(n::nat) ~= (0::nat) ==> (m::nat) = m div n * n + m mod n & m mod n < n"
-  by (import hollight DIVISION)
-
-lemma DIVMOD_UNIQ_LEMMA: "((m::nat) = (q1::nat) * (n::nat) + (r1::nat) & r1 < n) &
-m = (q2::nat) * n + (r2::nat) & r2 < n
-==> q1 = q2 & r1 = r2"
-  by (import hollight DIVMOD_UNIQ_LEMMA)
-
-lemma DIVMOD_UNIQ: "(m::nat) = (q::nat) * (n::nat) + (r::nat) & r < n
-==> m div n = q & m mod n = r"
-  by (import hollight DIVMOD_UNIQ)
-
-lemma MOD_UNIQ: "(m::nat) = (q::nat) * (n::nat) + (r::nat) & r < n ==> m mod n = r"
-  by (import hollight MOD_UNIQ)
-
-lemma DIV_UNIQ: "(m::nat) = (q::nat) * (n::nat) + (r::nat) & r < n ==> m div n = q"
-  by (import hollight DIV_UNIQ)
-
-lemma MOD_EQ: "(m::nat) = (n::nat) + (q::nat) * (p::nat) ==> m mod p = n mod p"
-  by (import hollight MOD_EQ)
-
-lemma DIV_LE: "(n::nat) ~= (0::nat) ==> (m::nat) div n <= m"
-  by (import hollight DIV_LE)
-
-lemma DIV_MUL_LE: "(n::nat) * ((m::nat) div n) <= m"
-  by (import hollight DIV_MUL_LE)
-
-lemma MOD_MOD: "(n::nat) * (p::nat) ~= (0::nat) ==> (m::nat) mod (n * p) mod n = m mod n"
-  by (import hollight MOD_MOD)
-
-lemma MOD_MOD_REFL: "(n::nat) ~= (0::nat) ==> (m::nat) mod n mod n = m mod n"
-  by (import hollight MOD_MOD_REFL)
-
-lemma DIV_MULT2: "(x::nat) * (xb::nat) ~= (0::nat) ==> x * (xa::nat) div (x * xb) = xa div xb"
-  by (import hollight DIV_MULT2)
-
-lemma MOD_MULT2: "(x::nat) * (xb::nat) ~= (0::nat)
-==> x * (xa::nat) mod (x * xb) = x * (xa mod xb)"
-  by (import hollight MOD_MULT2)
-
-lemma MOD_EXISTS: "(EX q::nat. (m::nat) = (n::nat) * q) =
-(if n = (0::nat) then m = (0::nat) else m mod n = (0::nat))"
-  by (import hollight MOD_EXISTS)
-
-lemma LE_RDIV_EQ: "(a::nat) ~= (0::nat) ==> ((n::nat) <= (b::nat) div a) = (a * n <= b)"
-  by (import hollight LE_RDIV_EQ)
-
-lemma LE_LDIV_EQ: "(a::nat) ~= (0::nat)
-==> ((b::nat) div a <= (n::nat)) = (b < a * (n + (1::nat)))"
-  by (import hollight LE_LDIV_EQ)
-
-lemma LE_LDIV: "(x::nat) ~= (0::nat) & (xa::nat) <= x * (xb::nat) ==> xa div x <= xb"
-  by (import hollight LE_LDIV)
-
-lemma DIV_MONO: "(p::nat) ~= (0::nat) & (m::nat) <= (n::nat) ==> m div p <= n div p"
-  by (import hollight DIV_MONO)
-
-lemma DIV_MONO_LT: "(p::nat) ~= (0::nat) & (m::nat) + p <= (n::nat) ==> m div p < n div p"
-  by (import hollight DIV_MONO_LT)
-
-lemma DIV_EQ_0: "(n::nat) ~= (0::nat) ==> ((m::nat) div n = (0::nat)) = (m < n)"
-  by (import hollight DIV_EQ_0)
-
-lemma MOD_EQ_0: "(n::nat) ~= (0::nat)
-==> ((m::nat) mod n = (0::nat)) = (EX q::nat. m = q * n)"
-  by (import hollight MOD_EQ_0)
-
-lemma EVEN_MOD: "even (n::nat) = (n mod (2::nat) = (0::nat))"
-  by (import hollight EVEN_MOD)
-
-lemma ODD_MOD: "odd (n::nat) = (n mod (2::nat) = (1::nat))"
-  by (import hollight ODD_MOD)
-
-lemma MOD_MULT_RMOD: "(n::nat) ~= (0::nat) ==> (m::nat) * ((p::nat) mod n) mod n = m * p mod n"
-  by (import hollight MOD_MULT_RMOD)
-
-lemma MOD_MULT_LMOD: "(xa::nat) ~= (0::nat) ==> (x::nat) mod xa * (xb::nat) mod xa = x * xb mod xa"
-  by (import hollight MOD_MULT_LMOD)
-
-lemma MOD_MULT_MOD2: "(xa::nat) ~= (0::nat)
-==> (x::nat) mod xa * ((xb::nat) mod xa) mod xa = x * xb mod xa"
-  by (import hollight MOD_MULT_MOD2)
-
-lemma MOD_EXP_MOD: "(n::nat) ~= (0::nat) ==> ((m::nat) mod n) ^ (p::nat) mod n = m ^ p mod n"
-  by (import hollight MOD_EXP_MOD)
-
-lemma MOD_ADD_MOD: "(n::nat) ~= (0::nat)
-==> ((a::nat) mod n + (b::nat) mod n) mod n = (a + b) mod n"
-  by (import hollight MOD_ADD_MOD)
-
-lemma DIV_ADD_MOD: "(n::nat) ~= (0::nat)
-==> (((a::nat) + (b::nat)) mod n = a mod n + b mod n) =
-    ((a + b) div n = a div n + b div n)"
-  by (import hollight DIV_ADD_MOD)
-
-lemma MOD_LE: "(n::nat) ~= (0::nat) ==> (m::nat) mod n <= m"
-  by (import hollight MOD_LE)
-
-lemma DIV_MONO2: "(p::nat) ~= (0::nat) & p <= (m::nat) ==> (n::nat) div m <= n div p"
-  by (import hollight DIV_MONO2)
-
-lemma DIV_LE_EXCLUSION: "(b::nat) ~= (0::nat) & b * (c::nat) < ((a::nat) + (1::nat)) * (d::nat)
-==> c div d <= a div b"
-  by (import hollight DIV_LE_EXCLUSION)
-
-lemma DIV_EQ_EXCLUSION: "(b::nat) * (c::nat) < ((a::nat) + (1::nat)) * (d::nat) &
-a * d < (c + (1::nat)) * b
-==> a div b = c div d"
-  by (import hollight DIV_EQ_EXCLUSION)
-
-lemma MULT_DIV_LE: "(p::nat) ~= (0::nat) ==> (m::nat) * ((n::nat) div p) <= m * n div p"
-  by (import hollight MULT_DIV_LE)
-
-lemma DIV_DIV: "(xa::nat) * (xb::nat) ~= (0::nat)
-==> (x::nat) div xa div xb = x div (xa * xb)"
-  by (import hollight DIV_DIV)
-
-lemma DIV_MOD: "(xa::nat) * (xb::nat) ~= (0::nat)
-==> (x::nat) div xa mod xb = x mod (xa * xb) div xa"
-  by (import hollight DIV_MOD)
-
-lemma PRE_ELIM_THM: "P (n - Suc 0) = (ALL m. n = Suc m | m = 0 & n = 0 --> P m)"
-  by (import hollight PRE_ELIM_THM)
-
-lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) =
-(ALL d::nat. a = b + d | a < b & d = (0::nat) --> P d)"
-  by (import hollight SUB_ELIM_THM)
-
-lemma DIVMOD_ELIM_THM: "(P::nat => nat => bool) ((m::nat) div (n::nat)) (m mod n) =
-(ALL (x::nat) xa::nat.
-    n = (0::nat) & x = (0::nat) & xa = m | m = x * n + xa & xa < n -->
-    P x xa)"
-  by (import hollight DIVMOD_ELIM_THM)
-
-definition
-  minimal :: "(nat => bool) => nat"  where
-  "minimal == %u. SOME n. u n & (ALL m<n. ~ u m)"
-
-lemma DEF_minimal: "minimal = (%u. SOME n. u n & (ALL m<n. ~ u m))"
-  by (import hollight DEF_minimal)
-
-lemma MINIMAL: "Ex P = (P (minimal P) & (ALL x<minimal P. ~ P x))"
-  by (import hollight MINIMAL)
-
-lemma TRANSITIVE_STEPWISE_LT_EQ: "(!!x y z. R x y & R y z ==> R x z)
-==> (ALL m n. m < n --> R m n) = (ALL n. R n (Suc n))"
-  by (import hollight TRANSITIVE_STEPWISE_LT_EQ)
-
-lemma TRANSITIVE_STEPWISE_LT: "[| (ALL x y z. R x y & R y z --> R x z) & (ALL n. R n (Suc n)); m < n |]
-==> R m n"
-  by (import hollight TRANSITIVE_STEPWISE_LT)
-
-lemma TRANSITIVE_STEPWISE_LE_EQ: "(ALL x. R x x) & (ALL x y z. R x y & R y z --> R x z)
-==> (ALL m n. m <= n --> R m n) = (ALL n. R n (Suc n))"
-  by (import hollight TRANSITIVE_STEPWISE_LE_EQ)
-
-lemma TRANSITIVE_STEPWISE_LE: "[| (ALL x. R x x) &
-   (ALL x y z. R x y & R y z --> R x z) & (ALL n. R n (Suc n));
-   m <= n |]
-==> R m n"
-  by (import hollight TRANSITIVE_STEPWISE_LE)
-
-lemma WF_EQ: "wfP (u_556::'A => 'A => bool) =
-(ALL P::'A => bool.
-    Ex P = (EX x::'A. P x & (ALL y::'A. u_556 y x --> ~ P y)))"
-  by (import hollight WF_EQ)
-
-lemma WF_IND: "wfP (u_556::'A => 'A => bool) =
-(ALL P::'A => bool.
-    (ALL x::'A. (ALL y::'A. u_556 y x --> P y) --> P x) --> All P)"
-  by (import hollight WF_IND)
-
-lemma WF_DCHAIN: "wfP (u_556::'A => 'A => bool) =
-(~ (EX s::nat => 'A. ALL n::nat. u_556 (s (Suc n)) (s n)))"
-  by (import hollight WF_DCHAIN)
-
-lemma WF_UREC: "[| wfP (u_556::'A => 'A => bool);
-   !!(f::'A => 'B) (g::'A => 'B) x::'A.
-      (!!z::'A. u_556 z x ==> f z = g z)
-      ==> (H::('A => 'B) => 'A => 'B) f x = H g x;
-   (ALL x::'A. (f::'A => 'B) x = H f x) &
-   (ALL x::'A. (g::'A => 'B) x = H g x) |]
-==> f = g"
-  by (import hollight WF_UREC)
-
-lemma WF_UREC_WF: "(!!(H::('A => bool) => 'A => bool) (f::'A => bool) g::'A => bool.
-    [| !!(f::'A => bool) (g::'A => bool) x::'A.
-          (!!z::'A. (u_556::'A => 'A => bool) z x ==> f z = g z)
-          ==> H f x = H g x;
-       (ALL x::'A. f x = H f x) & (ALL x::'A. g x = H g x) |]
-    ==> f = g)
-==> wfP u_556"
-  by (import hollight WF_UREC_WF)
-
-lemma WF_REC_INVARIANT: "[| wfP (u_556::'A => 'A => bool);
-   !!(f::'A => 'B) (g::'A => 'B) x::'A.
-      (!!z::'A. u_556 z x ==> f z = g z & (S::'A => 'B => bool) z (f z))
-      ==> (H::('A => 'B) => 'A => 'B) f x = H g x & S x (H f x) |]
-==> EX f::'A => 'B. ALL x::'A. f x = H f x"
-  by (import hollight WF_REC_INVARIANT)
-
-lemma WF_REC: "[| wfP (u_556::'A => 'A => bool);
-   !!(f::'A => 'B) (g::'A => 'B) x::'A.
-      (!!z::'A. u_556 z x ==> f z = g z)
-      ==> (H::('A => 'B) => 'A => 'B) f x = H g x |]
-==> EX f::'A => 'B. ALL x::'A. f x = H f x"
-  by (import hollight WF_REC)
-
-lemma WF_REC_WF: "(!!H::('A => nat) => 'A => nat.
-    (!!(f::'A => nat) (g::'A => nat) x::'A.
-        (!!z::'A. (u_556::'A => 'A => bool) z x ==> f z = g z)
-        ==> H f x = H g x)
-    ==> EX f::'A => nat. ALL x::'A. f x = H f x)
-==> wfP u_556"
-  by (import hollight WF_REC_WF)
-
-lemma WF_EREC: "[| wfP (u_556::'A => 'A => bool);
-   !!(f::'A => 'B) (g::'A => 'B) x::'A.
-      (!!z::'A. u_556 z x ==> f z = g z)
-      ==> (H::('A => 'B) => 'A => 'B) f x = H g x |]
-==> EX! f::'A => 'B. ALL x::'A. f x = H f x"
-  by (import hollight WF_EREC)
-
-lemma WF_SUBSET: "(ALL (x::'A) y::'A.
-    (u_556::'A => 'A => bool) x y --> (u_670::'A => 'A => bool) x y) &
-wfP u_670
-==> wfP u_556"
-  by (import hollight WF_SUBSET)
-
-lemma WF_MEASURE_GEN: "wfP (u_556::'B => 'B => bool)
-==> wfP (%(x::'A) x'::'A. u_556 ((m::'A => 'B) x) (m x'))"
-  by (import hollight WF_MEASURE_GEN)
-
-lemma WF_LEX_DEPENDENT: "wfP (R::'A => 'A => bool) & (ALL x::'A. wfP ((S::'A => 'B => 'B => bool) x))
-==> wfP (SOME f::'A * 'B => 'A * 'B => bool.
-            ALL (r1::'A) s1::'B.
-               f (r1, s1) =
-               (SOME f::'A * 'B => bool.
-                   ALL (r2::'A) s2::'B.
-                      f (r2, s2) = (R r1 r2 | r1 = r2 & S r1 s1 s2)))"
-  by (import hollight WF_LEX_DEPENDENT)
-
-lemma WF_LEX: "wfP (x::'A => 'A => bool) & wfP (xa::'B => 'B => bool)
-==> wfP (SOME f::'A * 'B => 'A * 'B => bool.
-            ALL (r1::'A) s1::'B.
-               f (r1, s1) =
-               (SOME f::'A * 'B => bool.
-                   ALL (r2::'A) s2::'B.
-                      f (r2, s2) = (x r1 r2 | r1 = r2 & xa s1 s2)))"
-  by (import hollight WF_LEX)
-
-lemma WF_POINTWISE: "wfP (u_556::'A => 'A => bool) & wfP (u_670::'B => 'B => bool)
-==> wfP (SOME f::'A * 'B => 'A * 'B => bool.
-            ALL (x1::'A) y1::'B.
-               f (x1, y1) =
-               (SOME f::'A * 'B => bool.
-                   ALL (x2::'A) y2::'B.
-                      f (x2, y2) = (u_556 x1 x2 & u_670 y1 y2)))"
-  by (import hollight WF_POINTWISE)
-
-lemma WF_num: "(wfP::(nat => nat => bool) => bool) (op <::nat => nat => bool)"
-  by (import hollight WF_num)
-
-lemma WF_REC_num: "(!!(f::nat => 'A) (g::nat => 'A) x::nat.
-    (!!z::nat. z < x ==> f z = g z)
-    ==> (H::(nat => 'A) => nat => 'A) f x = H g x)
-==> EX f::nat => 'A. ALL x::nat. f x = H f x"
-  by (import hollight WF_REC_num)
-
-lemma WF_MEASURE: "wfP (%(a::'A) b::'A. (a, b) : measure (m::'A => nat))"
-  by (import hollight WF_MEASURE)
-
-lemma MEASURE_LE: "(ALL x::'q_12099.
-    (x, a::'q_12099) : measure (m::'q_12099 => nat) -->
-    (x, b::'q_12099) : measure m) =
-(m a <= m b)"
-  by (import hollight MEASURE_LE)
-
-lemma WF_REFL: "wfP (u_556::'A => 'A => bool) ==> ~ u_556 (x::'A) x"
-  by (import hollight WF_REFL)
-
-lemma WF_REC_TAIL: "EX f::'A => 'B.
-   ALL x::'A.
-      f x =
-      (if (P::'A => bool) x then f ((g::'A => 'A) x) else (h::'A => 'B) x)"
-  by (import hollight WF_REC_TAIL)
-
-lemma WF_REC_TAIL_GENERAL: "wfP (u_556::'A => 'A => bool) &
-(ALL (f::'A => 'B) (g::'A => 'B) x::'A.
-    (ALL z::'A. u_556 z x --> f z = g z) -->
-    (P::('A => 'B) => 'A => bool) f x = P g x &
-    (G::('A => 'B) => 'A => 'A) f x = G g x &
-    (H::('A => 'B) => 'A => 'B) f x = H g x) &
-(ALL (f::'A => 'B) (g::'A => 'B) x::'A.
-    (ALL z::'A. u_556 z x --> f z = g z) --> H f x = H g x) &
-(ALL (f::'A => 'B) (x::'A) y::'A. P f x & u_556 y (G f x) --> u_556 y x)
-==> EX f::'A => 'B. ALL x::'A. f x = (if P f x then f (G f x) else H f x)"
-  by (import hollight WF_REC_TAIL_GENERAL)
-
-lemma ARITH_ZERO: "(0::nat) = (0::nat) & (0::nat) = (0::nat)"
-  by (import hollight ARITH_ZERO)
-
-lemma ARITH_SUC: "(ALL x. Suc x = Suc x) &
-Suc 0 = 1 &
-(ALL x. Suc (2 * x) = 2 * x + 1) & (ALL x. Suc (2 * x + 1) = 2 * Suc x)"
-  by (import hollight ARITH_SUC)
-
-lemma ARITH_PRE: "(ALL x. x - Suc 0 = x - Suc 0) &
-0 - Suc 0 = 0 &
-(ALL x. 2 * x - Suc 0 = (if x = 0 then 0 else 2 * (x - Suc 0) + 1)) &
-(ALL x. 2 * x + 1 - Suc 0 = 2 * x)"
-  by (import hollight ARITH_PRE)
-
-lemma ARITH_ADD: "(ALL (x::nat) xa::nat. x + xa = x + xa) &
-(0::nat) + (0::nat) = (0::nat) &
-(ALL x::nat. (0::nat) + (2::nat) * x = (2::nat) * x) &
-(ALL x::nat.
-    (0::nat) + ((2::nat) * x + (1::nat)) = (2::nat) * x + (1::nat)) &
-(ALL x::nat. (2::nat) * x + (0::nat) = (2::nat) * x) &
-(ALL x::nat. (2::nat) * x + (1::nat) + (0::nat) = (2::nat) * x + (1::nat)) &
-(ALL (x::nat) xa::nat. (2::nat) * x + (2::nat) * xa = (2::nat) * (x + xa)) &
-(ALL (x::nat) xa::nat.
-    (2::nat) * x + ((2::nat) * xa + (1::nat)) =
-    (2::nat) * (x + xa) + (1::nat)) &
-(ALL (x::nat) xa::nat.
-    (2::nat) * x + (1::nat) + (2::nat) * xa =
-    (2::nat) * (x + xa) + (1::nat)) &
-(ALL (x::nat) xa::nat.
-    (2::nat) * x + (1::nat) + ((2::nat) * xa + (1::nat)) =
-    (2::nat) * Suc (x + xa))"
-  by (import hollight ARITH_ADD)
-
-lemma ARITH_MULT: "(ALL (x::nat) xa::nat. x * xa = x * xa) &
-(0::nat) * (0::nat) = (0::nat) &
-(ALL x::nat. (0::nat) * ((2::nat) * x) = (0::nat)) &
-(ALL x::nat. (0::nat) * ((2::nat) * x + (1::nat)) = (0::nat)) &
-(ALL x::nat. (2::nat) * x * (0::nat) = (0::nat)) &
-(ALL x::nat. ((2::nat) * x + (1::nat)) * (0::nat) = (0::nat)) &
-(ALL (x::nat) xa::nat.
-    (2::nat) * x * ((2::nat) * xa) = (2::nat) * ((2::nat) * (x * xa))) &
-(ALL (x::nat) xa::nat.
-    (2::nat) * x * ((2::nat) * xa + (1::nat)) =
-    (2::nat) * x + (2::nat) * ((2::nat) * (x * xa))) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat)) * ((2::nat) * xa) =
-    (2::nat) * xa + (2::nat) * ((2::nat) * (x * xa))) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat)) * ((2::nat) * xa + (1::nat)) =
-    (2::nat) * x + (1::nat) +
-    ((2::nat) * xa + (2::nat) * ((2::nat) * (x * xa))))"
-  by (import hollight ARITH_MULT)
-
-lemma ARITH_EXP: "(ALL (x::nat) xa::nat. x ^ xa = x ^ xa) &
-(0::nat) ^ (0::nat) = (1::nat) &
-(ALL m::nat. ((2::nat) * m) ^ (0::nat) = (1::nat)) &
-(ALL m::nat. ((2::nat) * m + (1::nat)) ^ (0::nat) = (1::nat)) &
-(ALL n::nat. (0::nat) ^ ((2::nat) * n) = (0::nat) ^ n * (0::nat) ^ n) &
-(ALL (m::nat) n::nat.
-    ((2::nat) * m) ^ ((2::nat) * n) =
-    ((2::nat) * m) ^ n * ((2::nat) * m) ^ n) &
-(ALL (m::nat) n::nat.
-    ((2::nat) * m + (1::nat)) ^ ((2::nat) * n) =
-    ((2::nat) * m + (1::nat)) ^ n * ((2::nat) * m + (1::nat)) ^ n) &
-(ALL n::nat. (0::nat) ^ ((2::nat) * n + (1::nat)) = (0::nat)) &
-(ALL (m::nat) n::nat.
-    ((2::nat) * m) ^ ((2::nat) * n + (1::nat)) =
-    (2::nat) * m * (((2::nat) * m) ^ n * ((2::nat) * m) ^ n)) &
-(ALL (m::nat) n::nat.
-    ((2::nat) * m + (1::nat)) ^ ((2::nat) * n + (1::nat)) =
-    ((2::nat) * m + (1::nat)) *
-    (((2::nat) * m + (1::nat)) ^ n * ((2::nat) * m + (1::nat)) ^ n))"
-  by (import hollight ARITH_EXP)
-
-lemma ARITH_EVEN: "(ALL x::nat. even x = even x) &
-even (0::nat) = True &
-(ALL x::nat. even ((2::nat) * x) = True) &
-(ALL x::nat. even ((2::nat) * x + (1::nat)) = False)"
-  by (import hollight ARITH_EVEN)
-
-lemma ARITH_ODD: "(ALL x::nat. odd x = odd x) &
-odd (0::nat) = False &
-(ALL x::nat. odd ((2::nat) * x) = False) &
-(ALL x::nat. odd ((2::nat) * x + (1::nat)) = True)"
-  by (import hollight ARITH_ODD)
-
-lemma ARITH_LE: "(ALL (x::nat) xa::nat. (x <= xa) = (x <= xa)) &
-((0::nat) <= (0::nat)) = True &
-(ALL x::nat. ((2::nat) * x <= (0::nat)) = (x <= (0::nat))) &
-(ALL x::nat. ((2::nat) * x + (1::nat) <= (0::nat)) = False) &
-(ALL x::nat. ((0::nat) <= (2::nat) * x) = True) &
-(ALL x::nat. ((0::nat) <= (2::nat) * x + (1::nat)) = True) &
-(ALL (x::nat) xa::nat. ((2::nat) * x <= (2::nat) * xa) = (x <= xa)) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x <= (2::nat) * xa + (1::nat)) = (x <= xa)) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat) <= (2::nat) * xa) = (x < xa)) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat) <= (2::nat) * xa + (1::nat)) = (x <= xa))"
-  by (import hollight ARITH_LE)
-
-lemma ARITH_LT: "(ALL (x::nat) xa::nat. (x < xa) = (x < xa)) &
-((0::nat) < (0::nat)) = False &
-(ALL x::nat. ((2::nat) * x < (0::nat)) = False) &
-(ALL x::nat. ((2::nat) * x + (1::nat) < (0::nat)) = False) &
-(ALL x::nat. ((0::nat) < (2::nat) * x) = ((0::nat) < x)) &
-(ALL x::nat. ((0::nat) < (2::nat) * x + (1::nat)) = True) &
-(ALL (x::nat) xa::nat. ((2::nat) * x < (2::nat) * xa) = (x < xa)) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x < (2::nat) * xa + (1::nat)) = (x <= xa)) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat) < (2::nat) * xa) = (x < xa)) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat) < (2::nat) * xa + (1::nat)) = (x < xa))"
-  by (import hollight ARITH_LT)
-
-lemma ARITH_EQ: "(ALL (x::nat) xa::nat. (x = xa) = (x = xa)) &
-((0::nat) = (0::nat)) = True &
-(ALL x::nat. ((2::nat) * x = (0::nat)) = (x = (0::nat))) &
-(ALL x::nat. ((2::nat) * x + (1::nat) = (0::nat)) = False) &
-(ALL x::nat. ((0::nat) = (2::nat) * x) = ((0::nat) = x)) &
-(ALL x::nat. ((0::nat) = (2::nat) * x + (1::nat)) = False) &
-(ALL (x::nat) xa::nat. ((2::nat) * x = (2::nat) * xa) = (x = xa)) &
-(ALL (x::nat) xa::nat. ((2::nat) * x = (2::nat) * xa + (1::nat)) = False) &
-(ALL (x::nat) xa::nat. ((2::nat) * x + (1::nat) = (2::nat) * xa) = False) &
-(ALL (x::nat) xa::nat.
-    ((2::nat) * x + (1::nat) = (2::nat) * xa + (1::nat)) = (x = xa))"
-  by (import hollight ARITH_EQ)
-
-lemma ARITH_SUB: "(ALL (x::nat) xa::nat. x - xa = x - xa) &
-(0::nat) - (0::nat) = (0::nat) &
-(ALL x::nat. (0::nat) - (2::nat) * x = (0::nat)) &
-(ALL x::nat. (0::nat) - ((2::nat) * x + (1::nat)) = (0::nat)) &
-(ALL x::nat. (2::nat) * x - (0::nat) = (2::nat) * x) &
-(ALL x::nat. (2::nat) * x + (1::nat) - (0::nat) = (2::nat) * x + (1::nat)) &
-(ALL (m::nat) n::nat. (2::nat) * m - (2::nat) * n = (2::nat) * (m - n)) &
-(ALL (m::nat) n::nat.
-    (2::nat) * m - ((2::nat) * n + (1::nat)) =
-    (2::nat) * (m - n) - Suc (0::nat)) &
-(ALL (m::nat) n::nat.
-    (2::nat) * m + (1::nat) - (2::nat) * n =
-    (if n <= m then (2::nat) * (m - n) + (1::nat) else (0::nat))) &
-(ALL (m::nat) n::nat.
-    (2::nat) * m + (1::nat) - ((2::nat) * n + (1::nat)) =
-    (2::nat) * (m - n))"
-  by (import hollight ARITH_SUB)
-
-lemma right_th: "(s::nat) * ((2::nat) * (x::nat) + (1::nat)) = s + (2::nat) * (s * x)"
-  by (import hollight right_th)
-
-lemma SEMIRING_PTHS: "(ALL (x::'A) (y::'A) z::'A.
-    (add::'A => 'A => 'A) x (add y z) = add (add x y) z) &
-(ALL (x::'A) y::'A. add x y = add y x) &
-(ALL x::'A. add (r0::'A) x = x) &
-(ALL (x::'A) (y::'A) z::'A.
-    (mul::'A => 'A => 'A) x (mul y z) = mul (mul x y) z) &
-(ALL (x::'A) y::'A. mul x y = mul y x) &
-(ALL x::'A. mul (r1::'A) x = x) &
-(ALL x::'A. mul r0 x = r0) &
-(ALL (x::'A) (y::'A) z::'A. mul x (add y z) = add (mul x y) (mul x z)) &
-(ALL x::'A. (pwr::'A => nat => 'A) x (0::nat) = r1) &
-(ALL (x::'A) n::nat. pwr x (Suc n) = mul x (pwr x n))
-==> mul r1 (x::'A) = x &
-    add (mul (a::'A) (m::'A)) (mul (b::'A) m) = mul (add a b) m &
-    add (mul a m) m = mul (add a r1) m &
-    add m (mul a m) = mul (add a r1) m &
-    add m m = mul (add r1 r1) m &
-    mul r0 m = r0 &
-    add r0 a = a &
-    add a r0 = a &
-    mul a b = mul b a &
-    mul (add a b) (c::'A) = add (mul a c) (mul b c) &
-    mul r0 a = r0 &
-    mul a r0 = r0 &
-    mul r1 a = a &
-    mul a r1 = a &
-    mul (mul (lx::'A) (ly::'A)) (mul (rx::'A) (ry::'A)) =
-    mul (mul lx rx) (mul ly ry) &
-    mul (mul lx ly) (mul rx ry) = mul lx (mul ly (mul rx ry)) &
-    mul (mul lx ly) (mul rx ry) = mul rx (mul (mul lx ly) ry) &
-    mul (mul lx ly) rx = mul (mul lx rx) ly &
-    mul (mul lx ly) rx = mul lx (mul ly rx) &
-    mul lx rx = mul rx lx &
-    mul lx (mul rx ry) = mul (mul lx rx) ry &
-    mul lx (mul rx ry) = mul rx (mul lx ry) &
-    add (add a b) (add c (d::'A)) = add (add a c) (add b d) &
-    add (add a b) c = add a (add b c) &
-    add a (add c d) = add c (add a d) &
-    add (add a b) c = add (add a c) b &
-    add a c = add c a &
-    add a (add c d) = add (add a c) d &
-    mul (pwr x (p::nat)) (pwr x (q::nat)) = pwr x (p + q) &
-    mul x (pwr x q) = pwr x (Suc q) &
-    mul (pwr x q) x = pwr x (Suc q) &
-    mul x x = pwr x (2::nat) &
-    pwr (mul x (y::'A)) q = mul (pwr x q) (pwr y q) &
-    pwr (pwr x p) q = pwr x (p * q) &
-    pwr x (0::nat) = r1 &
-    pwr x (1::nat) = x &
-    mul x (add y (z::'A)) = add (mul x y) (mul x z) &
-    pwr x (Suc q) = mul x (pwr x q)"
-  by (import hollight SEMIRING_PTHS)
-
-lemma NUM_INTEGRAL_LEMMA: "(w::nat) = (x::nat) + (d::nat) & (y::nat) = (z::nat) + (e::nat)
-==> (w * y + x * z = w * z + x * y) = (w = x | y = z)"
-  by (import hollight NUM_INTEGRAL_LEMMA)
-
-lemma NUM_INTEGRAL: "(ALL x::nat. (0::nat) * x = (0::nat)) &
-(ALL (x::nat) (xa::nat) xb::nat. (x + xa = x + xb) = (xa = xb)) &
-(ALL (w::nat) (x::nat) (y::nat) z::nat.
-    (w * y + x * z = w * z + x * y) = (w = x | y = z))"
-  by (import hollight NUM_INTEGRAL)
-
-lemma INJ_INVERSE2: "(!!(x1::'A) (y1::'B) (x2::'A) y2::'B.
-    ((P::'A => 'B => 'C) x1 y1 = P x2 y2) = (x1 = x2 & y1 = y2))
-==> EX (x::'C => 'A) Y::'C => 'B.
-       ALL (xa::'A) y::'B. x (P xa y) = xa & Y (P xa y) = y"
-  by (import hollight INJ_INVERSE2)
-
-definition
-  NUMPAIR :: "nat => nat => nat"  where
-  "NUMPAIR == %u ua. 2 ^ u * (2 * ua + 1)"
-
-lemma DEF_NUMPAIR: "NUMPAIR = (%u ua. 2 ^ u * (2 * ua + 1))"
-  by (import hollight DEF_NUMPAIR)
-
-lemma NUMPAIR_INJ_LEMMA: "NUMPAIR x xa = NUMPAIR xb xc ==> x = xb"
-  by (import hollight NUMPAIR_INJ_LEMMA)
-
-lemma NUMPAIR_INJ: "(NUMPAIR x1 y1 = NUMPAIR x2 y2) = (x1 = x2 & y1 = y2)"
-  by (import hollight NUMPAIR_INJ)
-
-definition
-  NUMFST :: "nat => nat"  where
-  "NUMFST == SOME X. EX Y. ALL x y. X (NUMPAIR x y) = x & Y (NUMPAIR x y) = y"
-
-lemma DEF_NUMFST: "NUMFST = (SOME X. EX Y. ALL x y. X (NUMPAIR x y) = x & Y (NUMPAIR x y) = y)"
-  by (import hollight DEF_NUMFST)
-
-definition
-  NUMSND :: "nat => nat"  where
-  "NUMSND == SOME Y. ALL x y. NUMFST (NUMPAIR x y) = x & Y (NUMPAIR x y) = y"
-
-lemma DEF_NUMSND: "NUMSND = (SOME Y. ALL x y. NUMFST (NUMPAIR x y) = x & Y (NUMPAIR x y) = y)"
-  by (import hollight DEF_NUMSND)
-
-definition
-  NUMSUM :: "bool => nat => nat"  where
-  "NUMSUM == %u ua. if u then Suc (2 * ua) else 2 * ua"
-
-lemma DEF_NUMSUM: "NUMSUM = (%u ua. if u then Suc (2 * ua) else 2 * ua)"
-  by (import hollight DEF_NUMSUM)
-
-lemma NUMSUM_INJ: "(NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)"
-  by (import hollight NUMSUM_INJ)
-
-definition
-  NUMLEFT :: "nat => bool"  where
-  "NUMLEFT == SOME X. EX Y. ALL x y. X (NUMSUM x y) = x & Y (NUMSUM x y) = y"
-
-lemma DEF_NUMLEFT: "NUMLEFT = (SOME X. EX Y. ALL x y. X (NUMSUM x y) = x & Y (NUMSUM x y) = y)"
-  by (import hollight DEF_NUMLEFT)
-
-definition
-  NUMRIGHT :: "nat => nat"  where
-  "NUMRIGHT == SOME Y. ALL x y. NUMLEFT (NUMSUM x y) = x & Y (NUMSUM x y) = y"
-
-lemma DEF_NUMRIGHT: "NUMRIGHT = (SOME Y. ALL x y. NUMLEFT (NUMSUM x y) = x & Y (NUMSUM x y) = y)"
-  by (import hollight DEF_NUMRIGHT)
-
-definition
-  INJN :: "nat => nat => 'A => bool"  where
-  "INJN == %(u::nat) (n::nat) a::'A. n = u"
-
-lemma DEF_INJN: "INJN = (%(u::nat) (n::nat) a::'A. n = u)"
-  by (import hollight DEF_INJN)
-
-lemma INJN_INJ: "(op =::bool => bool => bool)
- ((op =::(nat => 'A::type => bool) => (nat => 'A::type => bool) => bool)
-   ((INJN::nat => nat => 'A::type => bool) (n1::nat))
-   ((INJN::nat => nat => 'A::type => bool) (n2::nat)))
- ((op =::nat => nat => bool) n1 n2)"
-  by (import hollight INJN_INJ)
-
-definition
-  INJA :: "'A => nat => 'A => bool"  where
-  "INJA == %(u::'A) (n::nat) b::'A. b = u"
-
-lemma DEF_INJA: "INJA = (%(u::'A) (n::nat) b::'A. b = u)"
-  by (import hollight DEF_INJA)
-
-lemma INJA_INJ: "(INJA (a1::'A) = INJA (a2::'A)) = (a1 = a2)"
-  by (import hollight INJA_INJ)
-
-definition
-  INJF :: "(nat => nat => 'A => bool) => nat => 'A => bool"  where
-  "INJF == %(u::nat => nat => 'A => bool) n::nat. u (NUMFST n) (NUMSND n)"
-
-lemma DEF_INJF: "INJF = (%(u::nat => nat => 'A => bool) n::nat. u (NUMFST n) (NUMSND n))"
-  by (import hollight DEF_INJF)
-
-lemma INJF_INJ: "(INJF (f1::nat => nat => 'A => bool) =
- INJF (f2::nat => nat => 'A => bool)) =
-(f1 = f2)"
-  by (import hollight INJF_INJ)
-
-definition
-  INJP :: "(nat => 'A => bool) => (nat => 'A => bool) => nat => 'A => bool"  where
-  "INJP ==
-%(u::nat => 'A => bool) (ua::nat => 'A => bool) (n::nat) a::'A.
-   if NUMLEFT n then u (NUMRIGHT n) a else ua (NUMRIGHT n) a"
-
-lemma DEF_INJP: "INJP =
-(%(u::nat => 'A => bool) (ua::nat => 'A => bool) (n::nat) a::'A.
-    if NUMLEFT n then u (NUMRIGHT n) a else ua (NUMRIGHT n) a)"
-  by (import hollight DEF_INJP)
-
-lemma INJP_INJ: "(INJP (f1::nat => 'A => bool) (f2::nat => 'A => bool) =
- INJP (f1'::nat => 'A => bool) (f2'::nat => 'A => bool)) =
-(f1 = f1' & f2 = f2')"
-  by (import hollight INJP_INJ)
-
-definition
-  ZCONSTR :: "nat => 'A => (nat => nat => 'A => bool) => nat => 'A => bool"  where
-  "ZCONSTR ==
-%(u::nat) (ua::'A) ub::nat => nat => 'A => bool.
-   INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub))"
-
-lemma DEF_ZCONSTR: "ZCONSTR =
-(%(u::nat) (ua::'A) ub::nat => nat => 'A => bool.
-    INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub)))"
-  by (import hollight DEF_ZCONSTR)
-
-definition
-  ZBOT :: "nat => 'A => bool"  where
-  "ZBOT == INJP (INJN (0::nat)) (SOME z::nat => 'A => bool. True)"
-
-lemma DEF_ZBOT: "ZBOT = INJP (INJN (0::nat)) (SOME z::nat => 'A => bool. True)"
-  by (import hollight DEF_ZBOT)
-
-lemma ZCONSTR_ZBOT: "ZCONSTR (x::nat) (xa::'A) (xb::nat => nat => 'A => bool) ~= ZBOT"
-  by (import hollight ZCONSTR_ZBOT)
-
-definition
-  ZRECSPACE :: "(nat => 'A => bool) => bool"  where
-  "ZRECSPACE ==
-%a::nat => 'A => bool.
-   ALL ZRECSPACE'::(nat => 'A => bool) => bool.
-      (ALL a::nat => 'A => bool.
-          a = ZBOT |
-          (EX (c::nat) (i::'A) r::nat => nat => 'A => bool.
-              a = ZCONSTR c i r & (ALL n::nat. ZRECSPACE' (r n))) -->
-          ZRECSPACE' a) -->
-      ZRECSPACE' a"
-
-lemma DEF_ZRECSPACE: "ZRECSPACE =
-(%a::nat => 'A => bool.
-    ALL ZRECSPACE'::(nat => 'A => bool) => bool.
-       (ALL a::nat => 'A => bool.
-           a = ZBOT |
-           (EX (c::nat) (i::'A) r::nat => nat => 'A => bool.
-               a = ZCONSTR c i r & (ALL n::nat. ZRECSPACE' (r n))) -->
-           ZRECSPACE' a) -->
-       ZRECSPACE' a)"
-  by (import hollight DEF_ZRECSPACE)
-
-typedef (open) 'a recspace = "Collect ZRECSPACE :: (nat \<Rightarrow> 'a \<Rightarrow> bool) set" 
-  morphisms "_dest_rec" "_mk_rec"
-  apply (rule light_ex_imp_nonempty [where t="ZBOT"])
-  by (import hollight TYDEF_recspace)
-
-syntax
-  "_dest_rec" :: _ ("'_dest'_rec")
-
-syntax
-  "_mk_rec" :: _ ("'_mk'_rec")
-
-lemmas "TYDEF_recspace_@intern" = typedef_hol2hollight 
-  [where a="a :: 'A recspace" and r=r ,
-   OF type_definition_recspace]
-
-definition
-  BOTTOM :: "'A recspace"  where
-  "BOTTOM == _mk_rec ZBOT"
-
-lemma DEF_BOTTOM: "BOTTOM = _mk_rec ZBOT"
-  by (import hollight DEF_BOTTOM)
-
-definition
-  CONSTR :: "nat => 'A => (nat => 'A recspace) => 'A recspace"  where
-  "CONSTR ==
-%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace.
-   _mk_rec (ZCONSTR u ua (%n::nat. _dest_rec (ub n)))"
-
-lemma DEF_CONSTR: "CONSTR =
-(%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace.
-    _mk_rec (ZCONSTR u ua (%n::nat. _dest_rec (ub n))))"
-  by (import hollight DEF_CONSTR)
-
-lemma MK_REC_INJ: "[| _mk_rec (x::nat => 'A::type => bool) =
-   _mk_rec (y::nat => 'A::type => bool);
-   ZRECSPACE x & ZRECSPACE y |]
-==> x = y"
-  by (import hollight MK_REC_INJ)
-
-lemma CONSTR_BOT: "CONSTR (c::nat) (i::'A) (r::nat => 'A recspace) ~= BOTTOM"
-  by (import hollight CONSTR_BOT)
-
-lemma CONSTR_INJ: "(CONSTR (c1::nat) (i1::'A) (r1::nat => 'A recspace) =
- CONSTR (c2::nat) (i2::'A) (r2::nat => 'A recspace)) =
-(c1 = c2 & i1 = i2 & r1 = r2)"
-  by (import hollight CONSTR_INJ)
-
-lemma CONSTR_IND: "(P::'A recspace => bool) BOTTOM &
-(ALL (c::nat) (i::'A) r::nat => 'A recspace.
-    (ALL n::nat. P (r n)) --> P (CONSTR c i r))
-==> P (x::'A recspace)"
-  by (import hollight CONSTR_IND)
-
-lemma CONSTR_REC: "EX f::'A recspace => 'B.
-   ALL (c::nat) (i::'A) r::nat => 'A recspace.
-      f (CONSTR c i r) =
-      (Fn::nat => 'A => (nat => 'A recspace) => (nat => 'B) => 'B) c i r
-       (%n::nat. f (r n))"
-  by (import hollight CONSTR_REC)
-
-definition
-  FCONS :: "'A => (nat => 'A) => nat => 'A"  where
-  "FCONS ==
-SOME FCONS::'A => (nat => 'A) => nat => 'A.
-   (ALL (a::'A) f::nat => 'A. FCONS a f (0::nat) = a) &
-   (ALL (a::'A) (f::nat => 'A) n::nat. FCONS a f (Suc n) = f n)"
-
-lemma DEF_FCONS: "FCONS =
-(SOME FCONS::'A => (nat => 'A) => nat => 'A.
-    (ALL (a::'A) f::nat => 'A. FCONS a f (0::nat) = a) &
-    (ALL (a::'A) (f::nat => 'A) n::nat. FCONS a f (Suc n) = f n))"
-  by (import hollight DEF_FCONS)
-
-lemma FCONS_UNDO: "(f::nat => 'A) = FCONS (f (0::nat)) (f o Suc)"
-  by (import hollight FCONS_UNDO)
-
-definition
-  FNIL :: "nat => 'A"  where
-  "FNIL == %u::nat. SOME x::'A. True"
-
-lemma DEF_FNIL: "FNIL = (%u::nat. SOME x::'A. True)"
-  by (import hollight DEF_FNIL)
-
-definition
-  ISO :: "('A => 'B) => ('B => 'A) => bool"  where
-  "ISO ==
-%(u::'A => 'B) ua::'B => 'A.
-   (ALL x::'B. u (ua x) = x) & (ALL y::'A. ua (u y) = y)"
-
-lemma DEF_ISO: "ISO =
-(%(u::'A => 'B) ua::'B => 'A.
-    (ALL x::'B. u (ua x) = x) & (ALL y::'A. ua (u y) = y))"
-  by (import hollight DEF_ISO)
-
-lemma ISO_REFL: "ISO (%x::'A. x) (%x::'A. x)"
-  by (import hollight ISO_REFL)
-
-lemma ISO_FUN: "ISO (f::'A => 'A') (f'::'A' => 'A) & ISO (g::'B => 'B') (g'::'B' => 'B)
-==> ISO (%(h::'A => 'B) a'::'A'. g (h (f' a')))
-     (%(h::'A' => 'B') a::'A. g' (h (f a)))"
-  by (import hollight ISO_FUN)
-
-lemma ISO_USAGE: "ISO (f::'q_17485 => 'q_17482) (g::'q_17482 => 'q_17485)
-==> (ALL P::'q_17485 => bool. All P = (ALL x::'q_17482. P (g x))) &
-    (ALL P::'q_17485 => bool. Ex P = (EX x::'q_17482. P (g x))) &
-    (ALL (a::'q_17485) b::'q_17482. (a = g b) = (f a = b))"
-  by (import hollight ISO_USAGE)
-
-typedef (open) char = "{a. ALL char'.
-       (ALL a.
-           (EX a0 a1 a2 a3 a4 a5 a6 a7.
-               a =
-               CONSTR (NUMERAL 0) (a0 :: bool, a1 :: bool, a2 :: bool, a3 :: bool, a4 :: bool, a5 :: bool, a6 :: bool, a7:: bool)
-                (%n. BOTTOM)) -->
-           char' a) -->
-       char' a}"
-  morphisms "_dest_char" "_mk_char"
-  apply (rule light_ex_imp_nonempty [where t="CONSTR (NUMERAL 0) (a0, a1, a2, a3, a4, a5, a6, a7) (%n. BOTTOM)"])
-  by (import hollight TYDEF_char)
-
-syntax
-  "_dest_char" :: _ ("'_dest'_char")
-
-syntax
-  "_mk_char" :: _ ("'_mk'_char")
-
-lemmas "TYDEF_char_@intern" = typedef_hol2hollight 
-  [where a="a :: hollight.char" and r=r ,
-   OF type_definition_char]
-
-consts
-  "_11937" :: "bool
-=> bool => bool => bool => bool => bool => bool => bool => hollight.char" ("'_11937")
-
-defs
-  "_11937_def": "_11937 ==
-%(a0::bool) (a1::bool) (a2::bool) (a3::bool) (a4::bool) (a5::bool)
-   (a6::bool) a7::bool.
-   _mk_char
-    (CONSTR (0::nat) (a0, a1, a2, a3, a4, a5, a6, a7) (%n::nat. BOTTOM))"
-
-lemma DEF__11937: "_11937 =
-(%(a0::bool) (a1::bool) (a2::bool) (a3::bool) (a4::bool) (a5::bool)
-    (a6::bool) a7::bool.
-    _mk_char
-     (CONSTR (0::nat) (a0, a1, a2, a3, a4, a5, a6, a7) (%n::nat. BOTTOM)))"
-  by (import hollight DEF__11937)
-
-definition
-  ASCII :: "bool
-=> bool => bool => bool => bool => bool => bool => bool => hollight.char"  where
-  "ASCII == _11937"
-
-lemma DEF_ASCII: "ASCII = _11937"
-  by (import hollight DEF_ASCII)
-
-consts
-  dist :: "nat * nat => nat" 
-
-defs
-  dist_def: "hollight.dist == %u. fst u - snd u + (snd u - fst u)"
-
-lemma DEF_dist: "hollight.dist = (%u. fst u - snd u + (snd u - fst u))"
-  by (import hollight DEF_dist)
-
-lemma DIST_REFL: "hollight.dist (x, x) = 0"
-  by (import hollight DIST_REFL)
-
-lemma DIST_LZERO: "hollight.dist (0, x) = x"
-  by (import hollight DIST_LZERO)
-
-lemma DIST_RZERO: "hollight.dist (x, 0) = x"
-  by (import hollight DIST_RZERO)
-
-lemma DIST_SYM: "hollight.dist (x, xa) = hollight.dist (xa, x)"
-  by (import hollight DIST_SYM)
-
-lemma DIST_LADD: "hollight.dist (x + xb, x + xa) = hollight.dist (xb, xa)"
-  by (import hollight DIST_LADD)
-
-lemma DIST_RADD: "hollight.dist (x + xa, xb + xa) = hollight.dist (x, xb)"
-  by (import hollight DIST_RADD)
-
-lemma DIST_LADD_0: "hollight.dist (x + xa, x) = xa"
-  by (import hollight DIST_LADD_0)
-
-lemma DIST_RADD_0: "hollight.dist (x, x + xa) = xa"
-  by (import hollight DIST_RADD_0)
-
-lemma DIST_LMUL: "x * hollight.dist (xa, xb) = hollight.dist (x * xa, x * xb)"
-  by (import hollight DIST_LMUL)
-
-lemma DIST_RMUL: "hollight.dist (x, xa) * xb = hollight.dist (x * xb, xa * xb)"
-  by (import hollight DIST_RMUL)
-
-lemma DIST_EQ_0: "(hollight.dist (x, xa) = 0) = (x = xa)"
-  by (import hollight DIST_EQ_0)
-
-lemma DIST_ELIM_THM: "P (hollight.dist (x, y)) =
-(ALL d. (x = y + d --> P d) & (y = x + d --> P d))"
-  by (import hollight DIST_ELIM_THM)
-
-lemma DIST_LE_CASES: "(hollight.dist (m, n) <= p) = (m <= n + p & n <= m + p)"
-  by (import hollight DIST_LE_CASES)
-
-lemma DIST_TRIANGLE_LE: "hollight.dist (m, n) + hollight.dist (n, p) <= q
-==> hollight.dist (m, p) <= q"
-  by (import hollight DIST_TRIANGLE_LE)
-
-lemma DIST_TRIANGLES_LE: "hollight.dist (m, n) <= r & hollight.dist (p, q) <= s
-==> hollight.dist (m, p) <= hollight.dist (n, q) + (r + s)"
-  by (import hollight DIST_TRIANGLES_LE)
-
-lemma BOUNDS_LINEAR: "(ALL n::nat. (A::nat) * n <= (B::nat) * n + (C::nat)) = (A <= B)"
-  by (import hollight BOUNDS_LINEAR)
-
-lemma BOUNDS_LINEAR_0: "(ALL n::nat. (A::nat) * n <= (B::nat)) = (A = (0::nat))"
-  by (import hollight BOUNDS_LINEAR_0)
-
-lemma BOUNDS_DIVIDED: "(EX B::nat. ALL n::nat. (P::nat => nat) n <= B) =
-(EX (x::nat) B::nat. ALL n::nat. n * P n <= x * n + B)"
-  by (import hollight BOUNDS_DIVIDED)
-
-lemma BOUNDS_NOTZERO: "(P::nat => nat => nat) (0::nat) (0::nat) = (0::nat) &
-(ALL (m::nat) n::nat. P m n <= (A::nat) * (m + n) + (B::nat))
-==> EX x::nat. ALL (m::nat) n::nat. P m n <= x * (m + n)"
-  by (import hollight BOUNDS_NOTZERO)
-
-lemma BOUNDS_IGNORE: "(EX B::nat. ALL i::nat. (P::nat => nat) i <= (Q::nat => nat) i + B) =
-(EX (x::nat) N::nat. ALL i>=N. P i <= Q i + x)"
-  by (import hollight BOUNDS_IGNORE)
-
-definition
-  is_nadd :: "(nat => nat) => bool"  where
-  "is_nadd ==
-%u. EX B. ALL m n. hollight.dist (m * u n, n * u m) <= B * (m + n)"
-
-lemma DEF_is_nadd: "is_nadd =
-(%u. EX B. ALL m n. hollight.dist (m * u n, n * u m) <= B * (m + n))"
-  by (import hollight DEF_is_nadd)
-
-lemma is_nadd_0: "is_nadd (%n. 0)"
-  by (import hollight is_nadd_0)
-
-typedef (open) nadd = "Collect is_nadd"  morphisms "dest_nadd" "mk_nadd"
-  apply (rule light_ex_imp_nonempty[where t="%n. NUMERAL 0"])
-  by (import hollight TYDEF_nadd)
-
-syntax
-  dest_nadd :: _ 
-
-syntax
-  mk_nadd :: _ 
-
-lemmas "TYDEF_nadd_@intern" = typedef_hol2hollight 
-  [where a="a :: nadd" and r=r ,
-   OF type_definition_nadd]
-
-lemma NADD_CAUCHY: "EX xa.
-   ALL xb xc.
-      hollight.dist (xb * dest_nadd x xc, xc * dest_nadd x xb)
-      <= xa * (xb + xc)"
-  by (import hollight NADD_CAUCHY)
-
-lemma NADD_BOUND: "EX xa B. ALL n. dest_nadd x n <= xa * n + B"
-  by (import hollight NADD_BOUND)
-
-lemma NADD_MULTIPLICATIVE: "EX xa.
-   ALL m n.
-      hollight.dist (dest_nadd x (m * n), m * dest_nadd x n) <= xa * m + xa"
-  by (import hollight NADD_MULTIPLICATIVE)
-
-lemma NADD_ADDITIVE: "EX xa.
-   ALL m n.
-      hollight.dist (dest_nadd x (m + n), dest_nadd x m + dest_nadd x n)
-      <= xa"
-  by (import hollight NADD_ADDITIVE)
-
-lemma NADD_SUC: "EX xa. ALL n. hollight.dist (dest_nadd x (Suc n), dest_nadd x n) <= xa"
-  by (import hollight NADD_SUC)
-
-lemma NADD_DIST_LEMMA: "EX xa. ALL m n. hollight.dist (dest_nadd x (m + n), dest_nadd x m) <= xa * n"
-  by (import hollight NADD_DIST_LEMMA)
-
-lemma NADD_DIST: "EX xa.
-   ALL m n.
-      hollight.dist (dest_nadd x m, dest_nadd x n)
-      <= xa * hollight.dist (m, n)"
-  by (import hollight NADD_DIST)
-
-lemma NADD_ALTMUL: "EX A B.
-   ALL n.
-      hollight.dist
-       (n * dest_nadd x (dest_nadd y n), dest_nadd x n * dest_nadd y n)
-      <= A * n + B"
-  by (import hollight NADD_ALTMUL)
-
-definition
-  nadd_eq :: "nadd => nadd => bool"  where
-  "nadd_eq ==
-%u ua. EX B. ALL n. hollight.dist (dest_nadd u n, dest_nadd ua n) <= B"
-
-lemma DEF_nadd_eq: "nadd_eq =
-(%u ua. EX B. ALL n. hollight.dist (dest_nadd u n, dest_nadd ua n) <= B)"
-  by (import hollight DEF_nadd_eq)
-
-lemma NADD_EQ_REFL: "nadd_eq x x"
-  by (import hollight NADD_EQ_REFL)
-
-lemma NADD_EQ_SYM: "nadd_eq x y = nadd_eq y x"
-  by (import hollight NADD_EQ_SYM)
-
-lemma NADD_EQ_TRANS: "nadd_eq x y & nadd_eq y z ==> nadd_eq x z"
-  by (import hollight NADD_EQ_TRANS)
-
-definition
-  nadd_of_num :: "nat => nadd"  where
-  "nadd_of_num == %u. mk_nadd (op * u)"
-
-lemma DEF_nadd_of_num: "nadd_of_num = (%u. mk_nadd (op * u))"
-  by (import hollight DEF_nadd_of_num)
-
-lemma NADD_OF_NUM: "dest_nadd (nadd_of_num x) = op * x"
-  by (import hollight NADD_OF_NUM)
-
-lemma NADD_OF_NUM_WELLDEF: "m = n ==> nadd_eq (nadd_of_num m) (nadd_of_num n)"
-  by (import hollight NADD_OF_NUM_WELLDEF)
-
-lemma NADD_OF_NUM_EQ: "nadd_eq (nadd_of_num m) (nadd_of_num n) = (m = n)"
-  by (import hollight NADD_OF_NUM_EQ)
-
-definition
-  nadd_le :: "nadd => nadd => bool"  where
-  "nadd_le == %u ua. EX B. ALL n. dest_nadd u n <= dest_nadd ua n + B"
-
-lemma DEF_nadd_le: "nadd_le = (%u ua. EX B. ALL n. dest_nadd u n <= dest_nadd ua n + B)"
-  by (import hollight DEF_nadd_le)
-
-lemma NADD_LE_WELLDEF_LEMMA: "nadd_eq x x' & nadd_eq y y' & nadd_le x y ==> nadd_le x' y'"
-  by (import hollight NADD_LE_WELLDEF_LEMMA)
-
-lemma NADD_LE_WELLDEF: "nadd_eq x x' & nadd_eq y y' ==> nadd_le x y = nadd_le x' y'"
-  by (import hollight NADD_LE_WELLDEF)
-
-lemma NADD_LE_REFL: "nadd_le x x"
-  by (import hollight NADD_LE_REFL)
-
-lemma NADD_LE_TRANS: "nadd_le x y & nadd_le y z ==> nadd_le x z"
-  by (import hollight NADD_LE_TRANS)
-
-lemma NADD_LE_ANTISYM: "(nadd_le x y & nadd_le y x) = nadd_eq x y"
-  by (import hollight NADD_LE_ANTISYM)
-
-lemma NADD_LE_TOTAL_LEMMA: "~ nadd_le x y ==> EX n. n ~= 0 & dest_nadd y n + B < dest_nadd x n"
-  by (import hollight NADD_LE_TOTAL_LEMMA)
-
-lemma NADD_LE_TOTAL: "nadd_le x y | nadd_le y x"
-  by (import hollight NADD_LE_TOTAL)
-
-lemma NADD_ARCH: "EX xa. nadd_le x (nadd_of_num xa)"
-  by (import hollight NADD_ARCH)
-
-lemma NADD_OF_NUM_LE: "nadd_le (nadd_of_num m) (nadd_of_num n) = (m <= n)"
-  by (import hollight NADD_OF_NUM_LE)
-
-definition
-  nadd_add :: "nadd => nadd => nadd"  where
-  "nadd_add == %u ua. mk_nadd (%n. dest_nadd u n + dest_nadd ua n)"
-
-lemma DEF_nadd_add: "nadd_add = (%u ua. mk_nadd (%n. dest_nadd u n + dest_nadd ua n))"
-  by (import hollight DEF_nadd_add)
-
-lemma NADD_ADD: "dest_nadd (nadd_add x y) = (%n. dest_nadd x n + dest_nadd y n)"
-  by (import hollight NADD_ADD)
-
-lemma NADD_ADD_WELLDEF: "nadd_eq x x' & nadd_eq y y' ==> nadd_eq (nadd_add x y) (nadd_add x' y')"
-  by (import hollight NADD_ADD_WELLDEF)
-
-lemma NADD_ADD_SYM: "nadd_eq (nadd_add x y) (nadd_add y x)"
-  by (import hollight NADD_ADD_SYM)
-
-lemma NADD_ADD_ASSOC: "nadd_eq (nadd_add x (nadd_add y z)) (nadd_add (nadd_add x y) z)"
-  by (import hollight NADD_ADD_ASSOC)
-
-lemma NADD_ADD_LID: "nadd_eq (nadd_add (nadd_of_num 0) x) x"
-  by (import hollight NADD_ADD_LID)
-
-lemma NADD_ADD_LCANCEL: "nadd_eq (nadd_add x y) (nadd_add x z) ==> nadd_eq y z"
-  by (import hollight NADD_ADD_LCANCEL)
-
-lemma NADD_LE_ADD: "nadd_le x (nadd_add x y)"
-  by (import hollight NADD_LE_ADD)
-
-lemma NADD_LE_EXISTS: "nadd_le x y ==> EX d. nadd_eq y (nadd_add x d)"
-  by (import hollight NADD_LE_EXISTS)
-
-lemma NADD_OF_NUM_ADD: "nadd_eq (nadd_add (nadd_of_num x) (nadd_of_num xa)) (nadd_of_num (x + xa))"
-  by (import hollight NADD_OF_NUM_ADD)
-
-definition
-  nadd_mul :: "nadd => nadd => nadd"  where
-  "nadd_mul == %u ua. mk_nadd (%n. dest_nadd u (dest_nadd ua n))"
-
-lemma DEF_nadd_mul: "nadd_mul = (%u ua. mk_nadd (%n. dest_nadd u (dest_nadd ua n)))"
-  by (import hollight DEF_nadd_mul)
-
-lemma NADD_MUL: "dest_nadd (nadd_mul x y) = (%n. dest_nadd x (dest_nadd y n))"
-  by (import hollight NADD_MUL)
-
-lemma NADD_MUL_SYM: "nadd_eq (nadd_mul x y) (nadd_mul y x)"
-  by (import hollight NADD_MUL_SYM)
-
-lemma NADD_MUL_ASSOC: "nadd_eq (nadd_mul x (nadd_mul y z)) (nadd_mul (nadd_mul x y) z)"
-  by (import hollight NADD_MUL_ASSOC)
-
-lemma NADD_MUL_LID: "nadd_eq (nadd_mul (nadd_of_num 1) x) x"
-  by (import hollight NADD_MUL_LID)
-
-lemma NADD_LDISTRIB: "nadd_eq (nadd_mul x (nadd_add y z)) (nadd_add (nadd_mul x y) (nadd_mul x z))"
-  by (import hollight NADD_LDISTRIB)
-
-lemma NADD_MUL_WELLDEF_LEMMA: "nadd_eq y y' ==> nadd_eq (nadd_mul x y) (nadd_mul x y')"
-  by (import hollight NADD_MUL_WELLDEF_LEMMA)
-
-lemma NADD_MUL_WELLDEF: "nadd_eq x x' & nadd_eq y y' ==> nadd_eq (nadd_mul x y) (nadd_mul x' y')"
-  by (import hollight NADD_MUL_WELLDEF)
-
-lemma NADD_OF_NUM_MUL: "nadd_eq (nadd_mul (nadd_of_num x) (nadd_of_num xa)) (nadd_of_num (x * xa))"
-  by (import hollight NADD_OF_NUM_MUL)
-
-lemma NADD_LE_0: "nadd_le (nadd_of_num 0) x"
-  by (import hollight NADD_LE_0)
-
-lemma NADD_EQ_IMP_LE: "nadd_eq x y ==> nadd_le x y"
-  by (import hollight NADD_EQ_IMP_LE)
-
-lemma NADD_LE_LMUL: "nadd_le y z ==> nadd_le (nadd_mul x y) (nadd_mul x z)"
-  by (import hollight NADD_LE_LMUL)
-
-lemma NADD_LE_RMUL: "nadd_le x y ==> nadd_le (nadd_mul x z) (nadd_mul y z)"
-  by (import hollight NADD_LE_RMUL)
-
-lemma NADD_LE_RADD: "nadd_le (nadd_add x z) (nadd_add y z) = nadd_le x y"
-  by (import hollight NADD_LE_RADD)
-
-lemma NADD_LE_LADD: "nadd_le (nadd_add x y) (nadd_add x z) = nadd_le y z"
-  by (import hollight NADD_LE_LADD)
-
-lemma NADD_RDISTRIB: "nadd_eq (nadd_mul (nadd_add x y) z) (nadd_add (nadd_mul x z) (nadd_mul y z))"
-  by (import hollight NADD_RDISTRIB)
-
-lemma NADD_ARCH_MULT: "~ nadd_eq x (nadd_of_num 0)
-==> EX xa. nadd_le (nadd_of_num k) (nadd_mul (nadd_of_num xa) x)"
-  by (import hollight NADD_ARCH_MULT)
-
-lemma NADD_ARCH_ZERO: "(!!n. nadd_le (nadd_mul (nadd_of_num n) x) k) ==> nadd_eq x (nadd_of_num 0)"
-  by (import hollight NADD_ARCH_ZERO)
-
-lemma NADD_ARCH_LEMMA: "(!!n. nadd_le (nadd_mul (nadd_of_num n) x)
-       (nadd_add (nadd_mul (nadd_of_num n) y) z))
-==> nadd_le x y"
-  by (import hollight NADD_ARCH_LEMMA)
-
-lemma NADD_COMPLETE: "Ex P & (EX M. ALL x. P x --> nadd_le x M)
-==> EX M. (ALL x. P x --> nadd_le x M) &
-          (ALL M'. (ALL x. P x --> nadd_le x M') --> nadd_le M M')"
-  by (import hollight NADD_COMPLETE)
-
-lemma NADD_UBOUND: "EX xa N. ALL n>=N. dest_nadd x n <= xa * n"
-  by (import hollight NADD_UBOUND)
-
-lemma NADD_NONZERO: "~ nadd_eq x (nadd_of_num 0) ==> EX N. ALL n>=N. dest_nadd x n ~= 0"
-  by (import hollight NADD_NONZERO)
-
-lemma NADD_LBOUND: "~ nadd_eq x (nadd_of_num 0) ==> EX A N. ALL n>=N. n <= A * dest_nadd x n"
-  by (import hollight NADD_LBOUND)
-
-definition
-  nadd_rinv :: "nadd => nat => nat"  where
-  "nadd_rinv == %u n. n * n div dest_nadd u n"
-
-lemma DEF_nadd_rinv: "nadd_rinv = (%u n. n * n div dest_nadd u n)"
-  by (import hollight DEF_nadd_rinv)
-
-lemma NADD_MUL_LINV_LEMMA0: "~ nadd_eq x (nadd_of_num 0) ==> EX xa B. ALL i. nadd_rinv x i <= xa * i + B"
-  by (import hollight NADD_MUL_LINV_LEMMA0)
-
-lemma NADD_MUL_LINV_LEMMA1: "dest_nadd x n ~= 0
-==> hollight.dist (dest_nadd x n * nadd_rinv x n, n * n) <= dest_nadd x n"
-  by (import hollight NADD_MUL_LINV_LEMMA1)
-
-lemma NADD_MUL_LINV_LEMMA2: "~ nadd_eq x (nadd_of_num 0)
-==> EX N. ALL n>=N.
-             hollight.dist (dest_nadd x n * nadd_rinv x n, n * n)
-             <= dest_nadd x n"
-  by (import hollight NADD_MUL_LINV_LEMMA2)
-
-lemma NADD_MUL_LINV_LEMMA3: "~ nadd_eq x (nadd_of_num 0)
-==> EX N. ALL m n.
-             N <= n -->
-             hollight.dist
-              (m * (dest_nadd x m * (dest_nadd x n * nadd_rinv x n)),
-               m * (dest_nadd x m * (n * n)))
-             <= m * (dest_nadd x m * dest_nadd x n)"
-  by (import hollight NADD_MUL_LINV_LEMMA3)
-
-lemma NADD_MUL_LINV_LEMMA4: "~ nadd_eq x (nadd_of_num 0)
-==> EX N. ALL m n.
-             N <= m & N <= n -->
-             dest_nadd x m * dest_nadd x n *
-             hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
-             <= m * n *
-                hollight.dist (m * dest_nadd x n, n * dest_nadd x m) +
-                dest_nadd x m * dest_nadd x n * (m + n)"
-  by (import hollight NADD_MUL_LINV_LEMMA4)
-
-lemma NADD_MUL_LINV_LEMMA5: "~ nadd_eq x (nadd_of_num 0)
-==> EX B N.
-       ALL m n.
-          N <= m & N <= n -->
-          dest_nadd x m * dest_nadd x n *
-          hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
-          <= B * (m * n * (m + n))"
-  by (import hollight NADD_MUL_LINV_LEMMA5)
-
-lemma NADD_MUL_LINV_LEMMA6: "~ nadd_eq x (nadd_of_num 0)
-==> EX B N.
-       ALL m n.
-          N <= m & N <= n -->
-          m * n * hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
-          <= B * (m * n * (m + n))"
-  by (import hollight NADD_MUL_LINV_LEMMA6)
-
-lemma NADD_MUL_LINV_LEMMA7: "~ nadd_eq x (nadd_of_num 0)
-==> EX B N.
-       ALL m n.
-          N <= m & N <= n -->
-          hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
-          <= B * (m + n)"
-  by (import hollight NADD_MUL_LINV_LEMMA7)
-
-lemma NADD_MUL_LINV_LEMMA7a: "~ nadd_eq x (nadd_of_num 0)
-==> EX A B.
-       ALL m n.
-          m <= N -->
-          hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m) <= A * n + B"
-  by (import hollight NADD_MUL_LINV_LEMMA7a)
-
-lemma NADD_MUL_LINV_LEMMA8: "~ nadd_eq x (nadd_of_num 0)
-==> EX B. ALL m n.
-             hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
-             <= B * (m + n)"
-  by (import hollight NADD_MUL_LINV_LEMMA8)
-
-definition
-  nadd_inv :: "nadd => nadd"  where
-  "nadd_inv ==
-%u. if nadd_eq u (nadd_of_num 0) then nadd_of_num 0
-    else mk_nadd (nadd_rinv u)"
-
-lemma DEF_nadd_inv: "nadd_inv =
-(%u. if nadd_eq u (nadd_of_num 0) then nadd_of_num 0
-     else mk_nadd (nadd_rinv u))"
-  by (import hollight DEF_nadd_inv)
-
-lemma NADD_INV: "dest_nadd (nadd_inv x) =
-(if nadd_eq x (nadd_of_num 0) then %n. 0 else nadd_rinv x)"
-  by (import hollight NADD_INV)
-
-lemma NADD_MUL_LINV: "~ nadd_eq x (nadd_of_num 0)
-==> nadd_eq (nadd_mul (nadd_inv x) x) (nadd_of_num 1)"
-  by (import hollight NADD_MUL_LINV)
-
-lemma NADD_INV_0: "nadd_eq (nadd_inv (nadd_of_num 0)) (nadd_of_num 0)"
-  by (import hollight NADD_INV_0)
-
-lemma NADD_INV_WELLDEF: "nadd_eq x y ==> nadd_eq (nadd_inv x) (nadd_inv y)"
-  by (import hollight NADD_INV_WELLDEF)
-
-typedef (open) hreal = "{s. EX x. s = nadd_eq x}"  morphisms "dest_hreal" "mk_hreal"
-  apply (rule light_ex_imp_nonempty[where t="nadd_eq x"])
-  by (import hollight TYDEF_hreal)
-
-syntax
-  dest_hreal :: _ 
-
-syntax
-  mk_hreal :: _ 
-
-lemmas "TYDEF_hreal_@intern" = typedef_hol2hollight 
-  [where a="a :: hreal" and r=r ,
-   OF type_definition_hreal]
-
-definition
-  hreal_of_num :: "nat => hreal"  where
-  "hreal_of_num == %m. mk_hreal (nadd_eq (nadd_of_num m))"
-
-lemma DEF_hreal_of_num: "hreal_of_num = (%m. mk_hreal (nadd_eq (nadd_of_num m)))"
-  by (import hollight DEF_hreal_of_num)
-
-definition
-  hreal_add :: "hreal => hreal => hreal"  where
-  "hreal_add ==
-%x y. mk_hreal
-       (%u. EX xa ya.
-               nadd_eq (nadd_add xa ya) u &
-               dest_hreal x xa & dest_hreal y ya)"
-
-lemma DEF_hreal_add: "hreal_add =
-(%x y. mk_hreal
-        (%u. EX xa ya.
-                nadd_eq (nadd_add xa ya) u &
-                dest_hreal x xa & dest_hreal y ya))"
-  by (import hollight DEF_hreal_add)
-
-definition
-  hreal_mul :: "hreal => hreal => hreal"  where
-  "hreal_mul ==
-%x y. mk_hreal
-       (%u. EX xa ya.
-               nadd_eq (nadd_mul xa ya) u &
-               dest_hreal x xa & dest_hreal y ya)"
-
-lemma DEF_hreal_mul: "hreal_mul =
-(%x y. mk_hreal
-        (%u. EX xa ya.
-                nadd_eq (nadd_mul xa ya) u &
-                dest_hreal x xa & dest_hreal y ya))"
-  by (import hollight DEF_hreal_mul)
-
-definition
-  hreal_le :: "hreal => hreal => bool"  where
-  "hreal_le ==
-%x y. SOME u.
-         EX xa ya. nadd_le xa ya = u & dest_hreal x xa & dest_hreal y ya"
-
-lemma DEF_hreal_le: "hreal_le =
-(%x y. SOME u.
-          EX xa ya. nadd_le xa ya = u & dest_hreal x xa & dest_hreal y ya)"
-  by (import hollight DEF_hreal_le)
-
-definition
-  hreal_inv :: "hreal => hreal"  where
-  "hreal_inv ==
-%x. mk_hreal (%u. EX xa. nadd_eq (nadd_inv xa) u & dest_hreal x xa)"
-
-lemma DEF_hreal_inv: "hreal_inv =
-(%x. mk_hreal (%u. EX xa. nadd_eq (nadd_inv xa) u & dest_hreal x xa))"
-  by (import hollight DEF_hreal_inv)
-
-lemma HREAL_LE_EXISTS_DEF: "hreal_le m n = (EX d. n = hreal_add m d)"
-  by (import hollight HREAL_LE_EXISTS_DEF)
-
-lemma HREAL_EQ_ADD_LCANCEL: "(hreal_add m n = hreal_add m p) = (n = p)"
-  by (import hollight HREAL_EQ_ADD_LCANCEL)
-
-lemma HREAL_EQ_ADD_RCANCEL: "(hreal_add x xb = hreal_add xa xb) = (x = xa)"
-  by (import hollight HREAL_EQ_ADD_RCANCEL)
-
-lemma HREAL_LE_ADD_LCANCEL: "hreal_le (hreal_add x xa) (hreal_add x xb) = hreal_le xa xb"
-  by (import hollight HREAL_LE_ADD_LCANCEL)
-
-lemma HREAL_LE_ADD_RCANCEL: "hreal_le (hreal_add x xb) (hreal_add xa xb) = hreal_le x xa"
-  by (import hollight HREAL_LE_ADD_RCANCEL)
-
-lemma HREAL_ADD_RID: "hreal_add x (hreal_of_num 0) = x"
-  by (import hollight HREAL_ADD_RID)
-
-lemma HREAL_ADD_RDISTRIB: "hreal_mul (hreal_add x xa) xb = hreal_add (hreal_mul x xb) (hreal_mul xa xb)"
-  by (import hollight HREAL_ADD_RDISTRIB)
-
-lemma HREAL_MUL_LZERO: "hreal_mul (hreal_of_num 0) m = hreal_of_num 0"
-  by (import hollight HREAL_MUL_LZERO)
-
-lemma HREAL_MUL_RZERO: "hreal_mul x (hreal_of_num 0) = hreal_of_num 0"
-  by (import hollight HREAL_MUL_RZERO)
-
-lemma HREAL_ADD_AC: "hreal_add m n = hreal_add n m &
-hreal_add (hreal_add m n) p = hreal_add m (hreal_add n p) &
-hreal_add m (hreal_add n p) = hreal_add n (hreal_add m p)"
-  by (import hollight HREAL_ADD_AC)
-
-lemma HREAL_LE_ADD2: "hreal_le a b & hreal_le c d ==> hreal_le (hreal_add a c) (hreal_add b d)"
-  by (import hollight HREAL_LE_ADD2)
-
-lemma HREAL_LE_MUL_RCANCEL_IMP: "hreal_le a b ==> hreal_le (hreal_mul a c) (hreal_mul b c)"
-  by (import hollight HREAL_LE_MUL_RCANCEL_IMP)
-
-definition
-  treal_of_num :: "nat => hreal * hreal"  where
-  "treal_of_num == %u. (hreal_of_num u, hreal_of_num 0)"
-
-lemma DEF_treal_of_num: "treal_of_num = (%u. (hreal_of_num u, hreal_of_num 0))"
-  by (import hollight DEF_treal_of_num)
-
-definition
-  treal_neg :: "hreal * hreal => hreal * hreal"  where
-  "treal_neg == %u. (snd u, fst u)"
-
-lemma DEF_treal_neg: "treal_neg = (%u. (snd u, fst u))"
-  by (import hollight DEF_treal_neg)
-
-definition
-  treal_add :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
-  "treal_add == %u ua. (hreal_add (fst u) (fst ua), hreal_add (snd u) (snd ua))"
-
-lemma DEF_treal_add: "treal_add =
-(%u ua. (hreal_add (fst u) (fst ua), hreal_add (snd u) (snd ua)))"
-  by (import hollight DEF_treal_add)
-
-definition
-  treal_mul :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
-  "treal_mul ==
-%u ua.
-   (hreal_add (hreal_mul (fst u) (fst ua)) (hreal_mul (snd u) (snd ua)),
-    hreal_add (hreal_mul (fst u) (snd ua)) (hreal_mul (snd u) (fst ua)))"
-
-lemma DEF_treal_mul: "treal_mul =
-(%u ua.
-    (hreal_add (hreal_mul (fst u) (fst ua)) (hreal_mul (snd u) (snd ua)),
-     hreal_add (hreal_mul (fst u) (snd ua)) (hreal_mul (snd u) (fst ua))))"
-  by (import hollight DEF_treal_mul)
-
-definition
-  treal_le :: "hreal * hreal => hreal * hreal => bool"  where
-  "treal_le ==
-%u ua. hreal_le (hreal_add (fst u) (snd ua)) (hreal_add (fst ua) (snd u))"
-
-lemma DEF_treal_le: "treal_le =
-(%u ua. hreal_le (hreal_add (fst u) (snd ua)) (hreal_add (fst ua) (snd u)))"
-  by (import hollight DEF_treal_le)
-
-definition
-  treal_inv :: "hreal * hreal => hreal * hreal"  where
-  "treal_inv ==
-%u. if fst u = snd u then (hreal_of_num 0, hreal_of_num 0)
-    else if hreal_le (snd u) (fst u)
-         then (hreal_inv (SOME d. fst u = hreal_add (snd u) d),
-               hreal_of_num 0)
-         else (hreal_of_num 0,
-               hreal_inv (SOME d. snd u = hreal_add (fst u) d))"
-
-lemma DEF_treal_inv: "treal_inv =
-(%u. if fst u = snd u then (hreal_of_num 0, hreal_of_num 0)
-     else if hreal_le (snd u) (fst u)
-          then (hreal_inv (SOME d. fst u = hreal_add (snd u) d),
-                hreal_of_num 0)
-          else (hreal_of_num 0,
-                hreal_inv (SOME d. snd u = hreal_add (fst u) d)))"
-  by (import hollight DEF_treal_inv)
-
-definition
-  treal_eq :: "hreal * hreal => hreal * hreal => bool"  where
-  "treal_eq == %u ua. hreal_add (fst u) (snd ua) = hreal_add (fst ua) (snd u)"
-
-lemma DEF_treal_eq: "treal_eq = (%u ua. hreal_add (fst u) (snd ua) = hreal_add (fst ua) (snd u))"
-  by (import hollight DEF_treal_eq)
-
-lemma TREAL_EQ_REFL: "treal_eq x x"
-  by (import hollight TREAL_EQ_REFL)
-
-lemma TREAL_EQ_SYM: "treal_eq x y = treal_eq y x"
-  by (import hollight TREAL_EQ_SYM)
-
-lemma TREAL_EQ_TRANS: "treal_eq x y & treal_eq y z ==> treal_eq x z"
-  by (import hollight TREAL_EQ_TRANS)
-
-lemma TREAL_EQ_AP: "x = xa ==> treal_eq x xa"
-  by (import hollight TREAL_EQ_AP)
-
-lemma TREAL_OF_NUM_EQ: "treal_eq (treal_of_num x) (treal_of_num xa) = (x = xa)"
-  by (import hollight TREAL_OF_NUM_EQ)
-
-lemma TREAL_OF_NUM_LE: "treal_le (treal_of_num x) (treal_of_num xa) = (x <= xa)"
-  by (import hollight TREAL_OF_NUM_LE)
-
-lemma TREAL_OF_NUM_ADD: "treal_eq (treal_add (treal_of_num x) (treal_of_num xa))
- (treal_of_num (x + xa))"
-  by (import hollight TREAL_OF_NUM_ADD)
-
-lemma TREAL_OF_NUM_MUL: "treal_eq (treal_mul (treal_of_num x) (treal_of_num xa))
- (treal_of_num (x * xa))"
-  by (import hollight TREAL_OF_NUM_MUL)
-
-lemma TREAL_ADD_SYM_EQ: "treal_add x y = treal_add y x"
-  by (import hollight TREAL_ADD_SYM_EQ)
-
-lemma TREAL_MUL_SYM_EQ: "treal_mul x y = treal_mul y x"
-  by (import hollight TREAL_MUL_SYM_EQ)
-
-lemma TREAL_ADD_SYM: "treal_eq (treal_add x y) (treal_add y x)"
-  by (import hollight TREAL_ADD_SYM)
-
-lemma TREAL_ADD_ASSOC: "treal_eq (treal_add x (treal_add y z)) (treal_add (treal_add x y) z)"
-  by (import hollight TREAL_ADD_ASSOC)
-
-lemma TREAL_ADD_LID: "treal_eq (treal_add (treal_of_num 0) x) x"
-  by (import hollight TREAL_ADD_LID)
-
-lemma TREAL_ADD_LINV: "treal_eq (treal_add (treal_neg x) x) (treal_of_num 0)"
-  by (import hollight TREAL_ADD_LINV)
-
-lemma TREAL_MUL_SYM: "treal_eq (treal_mul x xa) (treal_mul xa x)"
-  by (import hollight TREAL_MUL_SYM)
-
-lemma TREAL_MUL_ASSOC: "treal_eq (treal_mul x (treal_mul y z)) (treal_mul (treal_mul x y) z)"
-  by (import hollight TREAL_MUL_ASSOC)
-
-lemma TREAL_MUL_LID: "treal_eq (treal_mul (treal_of_num 1) x) x"
-  by (import hollight TREAL_MUL_LID)
-
-lemma TREAL_ADD_LDISTRIB: "treal_eq (treal_mul x (treal_add y z))
- (treal_add (treal_mul x y) (treal_mul x z))"
-  by (import hollight TREAL_ADD_LDISTRIB)
-
-lemma TREAL_LE_REFL: "treal_le x x"
-  by (import hollight TREAL_LE_REFL)
-
-lemma TREAL_LE_ANTISYM: "(treal_le x y & treal_le y x) = treal_eq x y"
-  by (import hollight TREAL_LE_ANTISYM)
-
-lemma TREAL_LE_TRANS: "treal_le x y & treal_le y z ==> treal_le x z"
-  by (import hollight TREAL_LE_TRANS)
-
-lemma TREAL_LE_TOTAL: "treal_le x y | treal_le y x"
-  by (import hollight TREAL_LE_TOTAL)
-
-lemma TREAL_LE_LADD_IMP: "treal_le y z ==> treal_le (treal_add x y) (treal_add x z)"
-  by (import hollight TREAL_LE_LADD_IMP)
-
-lemma TREAL_LE_MUL: "treal_le (treal_of_num 0) x & treal_le (treal_of_num 0) y
-==> treal_le (treal_of_num 0) (treal_mul x y)"
-  by (import hollight TREAL_LE_MUL)
-
-lemma TREAL_INV_0: "treal_eq (treal_inv (treal_of_num 0)) (treal_of_num 0)"
-  by (import hollight TREAL_INV_0)
-
-lemma TREAL_MUL_LINV: "~ treal_eq x (treal_of_num 0)
-==> treal_eq (treal_mul (treal_inv x) x) (treal_of_num 1)"
-  by (import hollight TREAL_MUL_LINV)
-
-lemma TREAL_OF_NUM_WELLDEF: "m = n ==> treal_eq (treal_of_num m) (treal_of_num n)"
-  by (import hollight TREAL_OF_NUM_WELLDEF)
-
-lemma TREAL_NEG_WELLDEF: "treal_eq x1 x2 ==> treal_eq (treal_neg x1) (treal_neg x2)"
-  by (import hollight TREAL_NEG_WELLDEF)
-
-lemma TREAL_ADD_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_add x1 y) (treal_add x2 y)"
-  by (import hollight TREAL_ADD_WELLDEFR)
-
-lemma TREAL_ADD_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
-==> treal_eq (treal_add x1 y1) (treal_add x2 y2)"
-  by (import hollight TREAL_ADD_WELLDEF)
-
-lemma TREAL_MUL_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_mul x1 y) (treal_mul x2 y)"
-  by (import hollight TREAL_MUL_WELLDEFR)
-
-lemma TREAL_MUL_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
-==> treal_eq (treal_mul x1 y1) (treal_mul x2 y2)"
-  by (import hollight TREAL_MUL_WELLDEF)
-
-lemma TREAL_EQ_IMP_LE: "treal_eq x y ==> treal_le x y"
-  by (import hollight TREAL_EQ_IMP_LE)
-
-lemma TREAL_LE_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2 ==> treal_le x1 y1 = treal_le x2 y2"
-  by (import hollight TREAL_LE_WELLDEF)
-
-lemma TREAL_INV_WELLDEF: "treal_eq x y ==> treal_eq (treal_inv x) (treal_inv y)"
-  by (import hollight TREAL_INV_WELLDEF)
-
-typedef (open) real = "{s. EX x. s = treal_eq x}"  morphisms "dest_real" "mk_real"
-  apply (rule light_ex_imp_nonempty[where t="treal_eq x"])
-  by (import hollight TYDEF_real)
-
-syntax
-  dest_real :: _ 
-
-syntax
-  mk_real :: _ 
-
-lemmas "TYDEF_real_@intern" = typedef_hol2hollight 
-  [where a="a :: hollight.real" and r=r ,
-   OF type_definition_real]
-
-definition
-  real_of_num :: "nat => hollight.real"  where
-  "real_of_num == %m. mk_real (treal_eq (treal_of_num m))"
-
-lemma DEF_real_of_num: "real_of_num = (%m. mk_real (treal_eq (treal_of_num m)))"
-  by (import hollight DEF_real_of_num)
-
-definition
-  real_neg :: "hollight.real => hollight.real"  where
-  "real_neg ==
-%x1. mk_real (%u. EX x1a. treal_eq (treal_neg x1a) u & dest_real x1 x1a)"
-
-lemma DEF_real_neg: "real_neg =
-(%x1. mk_real (%u. EX x1a. treal_eq (treal_neg x1a) u & dest_real x1 x1a))"
-  by (import hollight DEF_real_neg)
-
-definition
-  real_add :: "hollight.real => hollight.real => hollight.real"  where
-  "real_add ==
-%x1 y1.
-   mk_real
-    (%u. EX x1a y1a.
-            treal_eq (treal_add x1a y1a) u &
-            dest_real x1 x1a & dest_real y1 y1a)"
-
-lemma DEF_real_add: "real_add =
-(%x1 y1.
-    mk_real
-     (%u. EX x1a y1a.
-             treal_eq (treal_add x1a y1a) u &
-             dest_real x1 x1a & dest_real y1 y1a))"
-  by (import hollight DEF_real_add)
-
-definition
-  real_mul :: "hollight.real => hollight.real => hollight.real"  where
-  "real_mul ==
-%x1 y1.
-   mk_real
-    (%u. EX x1a y1a.
-            treal_eq (treal_mul x1a y1a) u &
-            dest_real x1 x1a & dest_real y1 y1a)"
-
-lemma DEF_real_mul: "real_mul =
-(%x1 y1.
-    mk_real
-     (%u. EX x1a y1a.
-             treal_eq (treal_mul x1a y1a) u &
-             dest_real x1 x1a & dest_real y1 y1a))"
-  by (import hollight DEF_real_mul)
-
-definition
-  real_le :: "hollight.real => hollight.real => bool"  where
-  "real_le ==
-%x1 y1.
-   SOME u.
-      EX x1a y1a. treal_le x1a y1a = u & dest_real x1 x1a & dest_real y1 y1a"
-
-lemma DEF_real_le: "real_le =
-(%x1 y1.
-    SOME u.
-       EX x1a y1a.
-          treal_le x1a y1a = u & dest_real x1 x1a & dest_real y1 y1a)"
-  by (import hollight DEF_real_le)
-
-definition
-  real_inv :: "hollight.real => hollight.real"  where
-  "real_inv ==
-%x. mk_real (%u. EX xa. treal_eq (treal_inv xa) u & dest_real x xa)"
-
-lemma DEF_real_inv: "real_inv =
-(%x. mk_real (%u. EX xa. treal_eq (treal_inv xa) u & dest_real x xa))"
-  by (import hollight DEF_real_inv)
-
-definition
-  real_sub :: "hollight.real => hollight.real => hollight.real"  where
-  "real_sub == %u ua. real_add u (real_neg ua)"
-
-lemma DEF_real_sub: "real_sub = (%u ua. real_add u (real_neg ua))"
-  by (import hollight DEF_real_sub)
-
-definition
-  real_lt :: "hollight.real => hollight.real => bool"  where
-  "real_lt == %u ua. ~ real_le ua u"
-
-lemma DEF_real_lt: "real_lt = (%u ua. ~ real_le ua u)"
-  by (import hollight DEF_real_lt)
-
-definition
-  real_ge :: "hollight.real => hollight.real => bool"  where
-  "real_ge == %u ua. real_le ua u"
-
-lemma DEF_real_ge: "real_ge = (%u ua. real_le ua u)"
-  by (import hollight DEF_real_ge)
-
-definition
-  real_gt :: "hollight.real => hollight.real => bool"  where
-  "real_gt == %u ua. real_lt ua u"
-
-lemma DEF_real_gt: "real_gt = (%u ua. real_lt ua u)"
-  by (import hollight DEF_real_gt)
-
-definition
-  real_abs :: "hollight.real => hollight.real"  where
-  "real_abs == %u. if real_le (real_of_num 0) u then u else real_neg u"
-
-lemma DEF_real_abs: "real_abs = (%u. if real_le (real_of_num 0) u then u else real_neg u)"
-  by (import hollight DEF_real_abs)
-
-definition
-  real_pow :: "hollight.real => nat => hollight.real"  where
-  "real_pow ==
-SOME real_pow.
-   (ALL x. real_pow x 0 = real_of_num 1) &
-   (ALL x n. real_pow x (Suc n) = real_mul x (real_pow x n))"
-
-lemma DEF_real_pow: "real_pow =
-(SOME real_pow.
-    (ALL x. real_pow x 0 = real_of_num 1) &
-    (ALL x n. real_pow x (Suc n) = real_mul x (real_pow x n)))"
-  by (import hollight DEF_real_pow)
-
-definition
-  real_div :: "hollight.real => hollight.real => hollight.real"  where
-  "real_div == %u ua. real_mul u (real_inv ua)"
-
-lemma DEF_real_div: "real_div = (%u ua. real_mul u (real_inv ua))"
-  by (import hollight DEF_real_div)
-
-definition
-  real_max :: "hollight.real => hollight.real => hollight.real"  where
-  "real_max == %u ua. if real_le u ua then ua else u"
-
-lemma DEF_real_max: "real_max = (%u ua. if real_le u ua then ua else u)"
-  by (import hollight DEF_real_max)
-
-definition
-  real_min :: "hollight.real => hollight.real => hollight.real"  where
-  "real_min == %u ua. if real_le u ua then u else ua"
-
-lemma DEF_real_min: "real_min = (%u ua. if real_le u ua then u else ua)"
-  by (import hollight DEF_real_min)
-
-lemma REAL_HREAL_LEMMA1: "EX x. (ALL xa. real_le (real_of_num 0) xa = (EX y. xa = x y)) &
-      (ALL y z. hreal_le y z = real_le (x y) (x z))"
-  by (import hollight REAL_HREAL_LEMMA1)
-
-lemma REAL_HREAL_LEMMA2: "EX x r.
-   (ALL xa. x (r xa) = xa) &
-   (ALL xa. real_le (real_of_num 0) xa --> r (x xa) = xa) &
-   (ALL x. real_le (real_of_num 0) (r x)) &
-   (ALL x y. hreal_le x y = real_le (r x) (r y))"
-  by (import hollight REAL_HREAL_LEMMA2)
-
-lemma REAL_COMPLETE_SOMEPOS: "(EX x. P x & real_le (real_of_num 0) x) & (EX M. ALL x. P x --> real_le x M)
-==> EX M. (ALL x. P x --> real_le x M) &
-          (ALL M'. (ALL x. P x --> real_le x M') --> real_le M M')"
-  by (import hollight REAL_COMPLETE_SOMEPOS)
-
-lemma REAL_COMPLETE: "Ex P & (EX M. ALL x. P x --> real_le x M)
-==> EX M. (ALL x. P x --> real_le x M) &
-          (ALL M'. (ALL x. P x --> real_le x M') --> real_le M M')"
-  by (import hollight REAL_COMPLETE)
-
-lemma REAL_ADD_AC: "real_add m n = real_add n m &
-real_add (real_add m n) p = real_add m (real_add n p) &
-real_add m (real_add n p) = real_add n (real_add m p)"
-  by (import hollight REAL_ADD_AC)
-
-lemma REAL_ADD_RINV: "real_add x (real_neg x) = real_of_num 0"
-  by (import hollight REAL_ADD_RINV)
-
-lemma REAL_EQ_ADD_LCANCEL: "(real_add x y = real_add x z) = (y = z)"
-  by (import hollight REAL_EQ_ADD_LCANCEL)
-
-lemma REAL_EQ_ADD_RCANCEL: "(real_add x z = real_add y z) = (x = y)"
-  by (import hollight REAL_EQ_ADD_RCANCEL)
-
-lemma REAL_MUL_RZERO: "real_mul x (real_of_num 0) = real_of_num 0"
-  by (import hollight REAL_MUL_RZERO)
-
-lemma REAL_MUL_LZERO: "real_mul (real_of_num 0) x = real_of_num 0"
-  by (import hollight REAL_MUL_LZERO)
-
-lemma REAL_NEG_NEG: "real_neg (real_neg x) = x"
-  by (import hollight REAL_NEG_NEG)
-
-lemma REAL_MUL_RNEG: "real_mul x (real_neg y) = real_neg (real_mul x y)"
-  by (import hollight REAL_MUL_RNEG)
-
-lemma REAL_MUL_LNEG: "real_mul (real_neg x) y = real_neg (real_mul x y)"
-  by (import hollight REAL_MUL_LNEG)
-
-lemma REAL_NEG_ADD: "real_neg (real_add x y) = real_add (real_neg x) (real_neg y)"
-  by (import hollight REAL_NEG_ADD)
-
-lemma REAL_ADD_RID: "real_add x (real_of_num 0) = x"
-  by (import hollight REAL_ADD_RID)
-
-lemma REAL_NEG_0: "real_neg (real_of_num 0) = real_of_num 0"
-  by (import hollight REAL_NEG_0)
-
-lemma REAL_LE_LNEG: "real_le (real_neg x) y = real_le (real_of_num 0) (real_add x y)"
-  by (import hollight REAL_LE_LNEG)
-
-lemma REAL_LE_NEG2: "real_le (real_neg x) (real_neg y) = real_le y x"
-  by (import hollight REAL_LE_NEG2)
-
-lemma REAL_LE_RNEG: "real_le x (real_neg y) = real_le (real_add x y) (real_of_num 0)"
-  by (import hollight REAL_LE_RNEG)
-
-lemma REAL_OF_NUM_POW: "real_pow (real_of_num x) n = real_of_num (x ^ n)"
-  by (import hollight REAL_OF_NUM_POW)
-
-lemma REAL_POW_NEG: "real_pow (real_neg x) n =
-(if even n then real_pow x n else real_neg (real_pow x n))"
-  by (import hollight REAL_POW_NEG)
-
-lemma REAL_ABS_NUM: "real_abs (real_of_num x) = real_of_num x"
-  by (import hollight REAL_ABS_NUM)
-
-lemma REAL_ABS_NEG: "real_abs (real_neg x) = real_abs x"
-  by (import hollight REAL_ABS_NEG)
-
-lemma REAL_LTE_TOTAL: "real_lt x xa | real_le xa x"
-  by (import hollight REAL_LTE_TOTAL)
-
-lemma REAL_LET_TOTAL: "real_le x xa | real_lt xa x"
-  by (import hollight REAL_LET_TOTAL)
-
-lemma REAL_LT_IMP_LE: "real_lt x y ==> real_le x y"
-  by (import hollight REAL_LT_IMP_LE)
-
-lemma REAL_LTE_TRANS: "real_lt x y & real_le y z ==> real_lt x z"
-  by (import hollight REAL_LTE_TRANS)
-
-lemma REAL_LET_TRANS: "real_le x y & real_lt y z ==> real_lt x z"
-  by (import hollight REAL_LET_TRANS)
-
-lemma REAL_LT_TRANS: "real_lt x y & real_lt y z ==> real_lt x z"
-  by (import hollight REAL_LT_TRANS)
-
-lemma REAL_LE_ADD: "real_le (real_of_num 0) x & real_le (real_of_num 0) y
-==> real_le (real_of_num 0) (real_add x y)"
-  by (import hollight REAL_LE_ADD)
-
-lemma REAL_LTE_ANTISYM: "~ (real_lt x y & real_le y x)"
-  by (import hollight REAL_LTE_ANTISYM)
-
-lemma REAL_SUB_LE: "real_le (real_of_num 0) (real_sub x xa) = real_le xa x"
-  by (import hollight REAL_SUB_LE)
-
-lemma REAL_NEG_SUB: "real_neg (real_sub x xa) = real_sub xa x"
-  by (import hollight REAL_NEG_SUB)
-
-lemma REAL_LE_LT: "real_le x xa = (real_lt x xa | x = xa)"
-  by (import hollight REAL_LE_LT)
-
-lemma REAL_SUB_LT: "real_lt (real_of_num 0) (real_sub x xa) = real_lt xa x"
-  by (import hollight REAL_SUB_LT)
-
-lemma REAL_NOT_LT: "(~ real_lt x xa) = real_le xa x"
-  by (import hollight REAL_NOT_LT)
-
-lemma REAL_SUB_0: "(real_sub x y = real_of_num 0) = (x = y)"
-  by (import hollight REAL_SUB_0)
-
-lemma REAL_LT_LE: "real_lt x y = (real_le x y & x ~= y)"
-  by (import hollight REAL_LT_LE)
-
-lemma REAL_LT_REFL: "~ real_lt x x"
-  by (import hollight REAL_LT_REFL)
-
-lemma REAL_LTE_ADD: "real_lt (real_of_num 0) x & real_le (real_of_num 0) y
-==> real_lt (real_of_num 0) (real_add x y)"
-  by (import hollight REAL_LTE_ADD)
-
-lemma REAL_LET_ADD: "real_le (real_of_num 0) x & real_lt (real_of_num 0) y
-==> real_lt (real_of_num 0) (real_add x y)"
-  by (import hollight REAL_LET_ADD)
-
-lemma REAL_LT_ADD: "real_lt (real_of_num 0) x & real_lt (real_of_num 0) y
-==> real_lt (real_of_num 0) (real_add x y)"
-  by (import hollight REAL_LT_ADD)
-
-lemma REAL_ENTIRE: "(real_mul x y = real_of_num 0) = (x = real_of_num 0 | y = real_of_num 0)"
-  by (import hollight REAL_ENTIRE)
-
-lemma REAL_LE_NEGTOTAL: "real_le (real_of_num 0) x | real_le (real_of_num 0) (real_neg x)"
-  by (import hollight REAL_LE_NEGTOTAL)
-
-lemma REAL_LE_SQUARE: "real_le (real_of_num 0) (real_mul x x)"
-  by (import hollight REAL_LE_SQUARE)
-
-lemma REAL_MUL_RID: "real_mul x (real_of_num 1) = x"
-  by (import hollight REAL_MUL_RID)
-
-lemma REAL_POW_2: "real_pow x 2 = real_mul x x"
-  by (import hollight REAL_POW_2)
-
-lemma REAL_POLY_CLAUSES: "(ALL x y z. real_add x (real_add y z) = real_add (real_add x y) z) &
-(ALL x y. real_add x y = real_add y x) &
-(ALL x. real_add (real_of_num 0) x = x) &
-(ALL x y z. real_mul x (real_mul y z) = real_mul (real_mul x y) z) &
-(ALL x y. real_mul x y = real_mul y x) &
-(ALL x. real_mul (real_of_num 1) x = x) &
-(ALL x. real_mul (real_of_num 0) x = real_of_num 0) &
-(ALL x xa xb.
-    real_mul x (real_add xa xb) =
-    real_add (real_mul x xa) (real_mul x xb)) &
-(ALL x. real_pow x 0 = real_of_num 1) &
-(ALL x xa. real_pow x (Suc xa) = real_mul x (real_pow x xa))"
-  by (import hollight REAL_POLY_CLAUSES)
-
-lemma REAL_POLY_NEG_CLAUSES: "(ALL x. real_neg x = real_mul (real_neg (real_of_num 1)) x) &
-(ALL x xa.
-    real_sub x xa = real_add x (real_mul (real_neg (real_of_num 1)) xa))"
-  by (import hollight REAL_POLY_NEG_CLAUSES)
-
-lemma REAL_POS: "real_le (real_of_num 0) (real_of_num x)"
-  by (import hollight REAL_POS)
-
-lemma REAL_OF_NUM_LT: "real_lt (real_of_num x) (real_of_num xa) = (x < xa)"
-  by (import hollight REAL_OF_NUM_LT)
-
-lemma REAL_OF_NUM_GE: "real_ge (real_of_num x) (real_of_num xa) = (xa <= x)"
-  by (import hollight REAL_OF_NUM_GE)
-
-lemma REAL_OF_NUM_GT: "real_gt (real_of_num x) (real_of_num xa) = (xa < x)"
-  by (import hollight REAL_OF_NUM_GT)
-
-lemma REAL_OF_NUM_MAX: "real_max (real_of_num x) (real_of_num xa) = real_of_num (max x xa)"
-  by (import hollight REAL_OF_NUM_MAX)
-
-lemma REAL_OF_NUM_MIN: "real_min (real_of_num x) (real_of_num xa) = real_of_num (min x xa)"
-  by (import hollight REAL_OF_NUM_MIN)
-
-lemma REAL_OF_NUM_SUC: "real_add (real_of_num x) (real_of_num 1) = real_of_num (Suc x)"
-  by (import hollight REAL_OF_NUM_SUC)
-
-lemma REAL_OF_NUM_SUB: "m <= n ==> real_sub (real_of_num n) (real_of_num m) = real_of_num (n - m)"
-  by (import hollight REAL_OF_NUM_SUB)
-
-lemma REAL_MUL_AC: "real_mul m n = real_mul n m &
-real_mul (real_mul m n) p = real_mul m (real_mul n p) &
-real_mul m (real_mul n p) = real_mul n (real_mul m p)"
-  by (import hollight REAL_MUL_AC)
-
-lemma REAL_ADD_RDISTRIB: "real_mul (real_add x y) z = real_add (real_mul x z) (real_mul y z)"
-  by (import hollight REAL_ADD_RDISTRIB)
-
-lemma REAL_LT_LADD_IMP: "real_lt y z ==> real_lt (real_add x y) (real_add x z)"
-  by (import hollight REAL_LT_LADD_IMP)
-
-lemma REAL_LT_MUL: "real_lt (real_of_num 0) x & real_lt (real_of_num 0) y
-==> real_lt (real_of_num 0) (real_mul x y)"
-  by (import hollight REAL_LT_MUL)
-
-lemma REAL_EQ_ADD_LCANCEL_0: "(real_add x y = x) = (y = real_of_num 0)"
-  by (import hollight REAL_EQ_ADD_LCANCEL_0)
-
-lemma REAL_EQ_ADD_RCANCEL_0: "(real_add x y = y) = (x = real_of_num 0)"
-  by (import hollight REAL_EQ_ADD_RCANCEL_0)
-
-lemma REAL_LNEG_UNIQ: "(real_add x y = real_of_num 0) = (x = real_neg y)"
-  by (import hollight REAL_LNEG_UNIQ)
-
-lemma REAL_RNEG_UNIQ: "(real_add x y = real_of_num 0) = (y = real_neg x)"
-  by (import hollight REAL_RNEG_UNIQ)
-
-lemma REAL_NEG_LMUL: "real_neg (real_mul x y) = real_mul (real_neg x) y"
-  by (import hollight REAL_NEG_LMUL)
-
-lemma REAL_NEG_RMUL: "real_neg (real_mul x y) = real_mul x (real_neg y)"
-  by (import hollight REAL_NEG_RMUL)
-
-lemma REAL_NEGNEG: "real_neg (real_neg x) = x"
-  by (import hollight REAL_NEGNEG)
-
-lemma REAL_NEG_MUL2: "real_mul (real_neg x) (real_neg y) = real_mul x y"
-  by (import hollight REAL_NEG_MUL2)
-
-lemma REAL_LT_LADD: "real_lt (real_add x y) (real_add x z) = real_lt y z"
-  by (import hollight REAL_LT_LADD)
-
-lemma REAL_LT_RADD: "real_lt (real_add x z) (real_add y z) = real_lt x y"
-  by (import hollight REAL_LT_RADD)
-
-lemma REAL_LT_ANTISYM: "~ (real_lt x y & real_lt y x)"
-  by (import hollight REAL_LT_ANTISYM)
-
-lemma REAL_LT_GT: "real_lt x y ==> ~ real_lt y x"
-  by (import hollight REAL_LT_GT)
-
-lemma REAL_NOT_EQ: "(x ~= y) = (real_lt x y | real_lt y x)"
-  by (import hollight REAL_NOT_EQ)
-
-lemma REAL_LET_ANTISYM: "~ (real_le x y & real_lt y x)"
-  by (import hollight REAL_LET_ANTISYM)
-
-lemma REAL_NEG_LT0: "real_lt (real_neg x) (real_of_num 0) = real_lt (real_of_num 0) x"
-  by (import hollight REAL_NEG_LT0)
-
-lemma REAL_NEG_GT0: "real_lt (real_of_num 0) (real_neg x) = real_lt x (real_of_num 0)"
-  by (import hollight REAL_NEG_GT0)
-
-lemma REAL_NEG_LE0: "real_le (real_neg x) (real_of_num 0) = real_le (real_of_num 0) x"
-  by (import hollight REAL_NEG_LE0)
-
-lemma REAL_NEG_GE0: "real_le (real_of_num 0) (real_neg x) = real_le x (real_of_num 0)"
-  by (import hollight REAL_NEG_GE0)
-
-lemma REAL_LT_TOTAL: "x = y | real_lt x y | real_lt y x"
-  by (import hollight REAL_LT_TOTAL)
-
-lemma REAL_LT_NEGTOTAL: "x = real_of_num 0 |
-real_lt (real_of_num 0) x | real_lt (real_of_num 0) (real_neg x)"
-  by (import hollight REAL_LT_NEGTOTAL)
-
-lemma REAL_LE_01: "real_le (real_of_num 0) (real_of_num 1)"
-  by (import hollight REAL_LE_01)
-
-lemma REAL_LT_01: "real_lt (real_of_num 0) (real_of_num 1)"
-  by (import hollight REAL_LT_01)
-
-lemma REAL_LE_LADD: "real_le (real_add x y) (real_add x z) = real_le y z"
-  by (import hollight REAL_LE_LADD)
-
-lemma REAL_LE_RADD: "real_le (real_add x z) (real_add y z) = real_le x y"
-  by (import hollight REAL_LE_RADD)
-
-lemma REAL_LT_ADD2: "real_lt w x & real_lt y z ==> real_lt (real_add w y) (real_add x z)"
-  by (import hollight REAL_LT_ADD2)
-
-lemma REAL_LE_ADD2: "real_le w x & real_le y z ==> real_le (real_add w y) (real_add x z)"
-  by (import hollight REAL_LE_ADD2)
-
-lemma REAL_LT_LNEG: "real_lt (real_neg x) xa = real_lt (real_of_num 0) (real_add x xa)"
-  by (import hollight REAL_LT_LNEG)
-
-lemma REAL_LT_RNEG: "real_lt x (real_neg xa) = real_lt (real_add x xa) (real_of_num 0)"
-  by (import hollight REAL_LT_RNEG)
-
-lemma REAL_LT_ADDNEG: "real_lt y (real_add x (real_neg z)) = real_lt (real_add y z) x"
-  by (import hollight REAL_LT_ADDNEG)
-
-lemma REAL_LT_ADDNEG2: "real_lt (real_add x (real_neg y)) z = real_lt x (real_add z y)"
-  by (import hollight REAL_LT_ADDNEG2)
-
-lemma REAL_LT_ADD1: "real_le x y ==> real_lt x (real_add y (real_of_num 1))"
-  by (import hollight REAL_LT_ADD1)
-
-lemma REAL_SUB_ADD: "real_add (real_sub x y) y = x"
-  by (import hollight REAL_SUB_ADD)
-
-lemma REAL_SUB_ADD2: "real_add y (real_sub x y) = x"
-  by (import hollight REAL_SUB_ADD2)
-
-lemma REAL_SUB_REFL: "real_sub x x = real_of_num 0"
-  by (import hollight REAL_SUB_REFL)
-
-lemma REAL_LE_DOUBLE: "real_le (real_of_num 0) (real_add x x) = real_le (real_of_num 0) x"
-  by (import hollight REAL_LE_DOUBLE)
-
-lemma REAL_LE_NEGL: "real_le (real_neg x) x = real_le (real_of_num 0) x"
-  by (import hollight REAL_LE_NEGL)
-
-lemma REAL_LE_NEGR: "real_le x (real_neg x) = real_le x (real_of_num 0)"
-  by (import hollight REAL_LE_NEGR)
-
-lemma REAL_NEG_EQ_0: "(real_neg x = real_of_num 0) = (x = real_of_num 0)"
-  by (import hollight REAL_NEG_EQ_0)
-
-lemma REAL_ADD_SUB: "real_sub (real_add x y) x = y"
-  by (import hollight REAL_ADD_SUB)
-
-lemma REAL_NEG_EQ: "(real_neg x = y) = (x = real_neg y)"
-  by (import hollight REAL_NEG_EQ)
-
-lemma REAL_NEG_MINUS1: "real_neg x = real_mul (real_neg (real_of_num 1)) x"
-  by (import hollight REAL_NEG_MINUS1)
-
-lemma REAL_LT_IMP_NE: "real_lt x y ==> x ~= y"
-  by (import hollight REAL_LT_IMP_NE)
-
-lemma REAL_LE_ADDR: "real_le x (real_add x y) = real_le (real_of_num 0) y"
-  by (import hollight REAL_LE_ADDR)
-
-lemma REAL_LE_ADDL: "real_le y (real_add x y) = real_le (real_of_num 0) x"
-  by (import hollight REAL_LE_ADDL)
-
-lemma REAL_LT_ADDR: "real_lt x (real_add x y) = real_lt (real_of_num 0) y"
-  by (import hollight REAL_LT_ADDR)
-
-lemma REAL_LT_ADDL: "real_lt y (real_add x y) = real_lt (real_of_num 0) x"
-  by (import hollight REAL_LT_ADDL)
-
-lemma REAL_SUB_SUB: "real_sub (real_sub x y) x = real_neg y"
-  by (import hollight REAL_SUB_SUB)
-
-lemma REAL_LT_ADD_SUB: "real_lt (real_add x y) z = real_lt x (real_sub z y)"
-  by (import hollight REAL_LT_ADD_SUB)
-
-lemma REAL_LT_SUB_RADD: "real_lt (real_sub x y) z = real_lt x (real_add z y)"
-  by (import hollight REAL_LT_SUB_RADD)
-
-lemma REAL_LT_SUB_LADD: "real_lt x (real_sub y z) = real_lt (real_add x z) y"
-  by (import hollight REAL_LT_SUB_LADD)
-
-lemma REAL_LE_SUB_LADD: "real_le x (real_sub y z) = real_le (real_add x z) y"
-  by (import hollight REAL_LE_SUB_LADD)
-
-lemma REAL_LE_SUB_RADD: "real_le (real_sub x y) z = real_le x (real_add z y)"
-  by (import hollight REAL_LE_SUB_RADD)
-
-lemma REAL_LT_NEG: "real_lt (real_neg x) (real_neg y) = real_lt y x"
-  by (import hollight REAL_LT_NEG)
-
-lemma REAL_LE_NEG: "real_le (real_neg x) (real_neg y) = real_le y x"
-  by (import hollight REAL_LE_NEG)
-
-lemma REAL_ADD2_SUB2: "real_sub (real_add a b) (real_add c d) =
-real_add (real_sub a c) (real_sub b d)"
-  by (import hollight REAL_ADD2_SUB2)
-
-lemma REAL_SUB_LZERO: "real_sub (real_of_num 0) x = real_neg x"
-  by (import hollight REAL_SUB_LZERO)
-
-lemma REAL_SUB_RZERO: "real_sub x (real_of_num 0) = x"
-  by (import hollight REAL_SUB_RZERO)
-
-lemma REAL_LET_ADD2: "real_le w x & real_lt y z ==> real_lt (real_add w y) (real_add x z)"
-  by (import hollight REAL_LET_ADD2)
-
-lemma REAL_LTE_ADD2: "real_lt w x & real_le y z ==> real_lt (real_add w y) (real_add x z)"
-  by (import hollight REAL_LTE_ADD2)
-
-lemma REAL_SUB_LNEG: "real_sub (real_neg x) y = real_neg (real_add x y)"
-  by (import hollight REAL_SUB_LNEG)
-
-lemma REAL_SUB_RNEG: "real_sub x (real_neg y) = real_add x y"
-  by (import hollight REAL_SUB_RNEG)
-
-lemma REAL_SUB_NEG2: "real_sub (real_neg x) (real_neg y) = real_sub y x"
-  by (import hollight REAL_SUB_NEG2)
-
-lemma REAL_SUB_TRIANGLE: "real_add (real_sub a b) (real_sub b c) = real_sub a c"
-  by (import hollight REAL_SUB_TRIANGLE)
-
-lemma REAL_EQ_SUB_LADD: "(x = real_sub y z) = (real_add x z = y)"
-  by (import hollight REAL_EQ_SUB_LADD)
-
-lemma REAL_EQ_SUB_RADD: "(real_sub x y = z) = (x = real_add z y)"
-  by (import hollight REAL_EQ_SUB_RADD)
-
-lemma REAL_SUB_SUB2: "real_sub x (real_sub x y) = y"
-  by (import hollight REAL_SUB_SUB2)
-
-lemma REAL_ADD_SUB2: "real_sub x (real_add x y) = real_neg y"
-  by (import hollight REAL_ADD_SUB2)
-
-lemma REAL_EQ_IMP_LE: "x = y ==> real_le x y"
-  by (import hollight REAL_EQ_IMP_LE)
-
-lemma REAL_POS_NZ: "real_lt (real_of_num 0) x ==> x ~= real_of_num 0"
-  by (import hollight REAL_POS_NZ)
-
-lemma REAL_DIFFSQ: "real_mul (real_add x y) (real_sub x y) =
-real_sub (real_mul x x) (real_mul y y)"
-  by (import hollight REAL_DIFFSQ)
-
-lemma REAL_EQ_NEG2: "(real_neg x = real_neg y) = (x = y)"
-  by (import hollight REAL_EQ_NEG2)
-
-lemma REAL_LT_NEG2: "real_lt (real_neg x) (real_neg y) = real_lt y x"
-  by (import hollight REAL_LT_NEG2)
-
-lemma REAL_SUB_LDISTRIB: "real_mul x (real_sub y z) = real_sub (real_mul x y) (real_mul x z)"
-  by (import hollight REAL_SUB_LDISTRIB)
-
-lemma REAL_SUB_RDISTRIB: "real_mul (real_sub x y) z = real_sub (real_mul x z) (real_mul y z)"
-  by (import hollight REAL_SUB_RDISTRIB)
-
-lemma REAL_ABS_ZERO: "(real_abs x = real_of_num 0) = (x = real_of_num 0)"
-  by (import hollight REAL_ABS_ZERO)
-
-lemma REAL_ABS_0: "real_abs (real_of_num 0) = real_of_num 0"
-  by (import hollight REAL_ABS_0)
-
-lemma REAL_ABS_1: "real_abs (real_of_num 1) = real_of_num 1"
-  by (import hollight REAL_ABS_1)
-
-lemma REAL_ABS_TRIANGLE: "real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))"
-  by (import hollight REAL_ABS_TRIANGLE)
-
-lemma REAL_ABS_TRIANGLE_LE: "real_le (real_add (real_abs x) (real_abs (real_sub y x))) z
-==> real_le (real_abs y) z"
-  by (import hollight REAL_ABS_TRIANGLE_LE)
-
-lemma REAL_ABS_TRIANGLE_LT: "real_lt (real_add (real_abs x) (real_abs (real_sub y x))) z
-==> real_lt (real_abs y) z"
-  by (import hollight REAL_ABS_TRIANGLE_LT)
-
-lemma REAL_ABS_POS: "real_le (real_of_num 0) (real_abs x)"
-  by (import hollight REAL_ABS_POS)
-
-lemma REAL_ABS_SUB: "real_abs (real_sub x y) = real_abs (real_sub y x)"
-  by (import hollight REAL_ABS_SUB)
-
-lemma REAL_ABS_NZ: "(x ~= real_of_num 0) = real_lt (real_of_num 0) (real_abs x)"
-  by (import hollight REAL_ABS_NZ)
-
-lemma REAL_ABS_ABS: "real_abs (real_abs x) = real_abs x"
-  by (import hollight REAL_ABS_ABS)
-
-lemma REAL_ABS_LE: "real_le x (real_abs x)"
-  by (import hollight REAL_ABS_LE)
-
-lemma REAL_ABS_REFL: "(real_abs x = x) = real_le (real_of_num 0) x"
-  by (import hollight REAL_ABS_REFL)
-
-lemma REAL_ABS_BETWEEN: "(real_lt (real_of_num 0) d &
- real_lt (real_sub x d) y & real_lt y (real_add x d)) =
-real_lt (real_abs (real_sub y x)) d"
-  by (import hollight REAL_ABS_BETWEEN)
-
-lemma REAL_ABS_BOUND: "real_lt (real_abs (real_sub x y)) d ==> real_lt y (real_add x d)"
-  by (import hollight REAL_ABS_BOUND)
-
-lemma REAL_ABS_STILLNZ: "real_lt (real_abs (real_sub x y)) (real_abs y) ==> x ~= real_of_num 0"
-  by (import hollight REAL_ABS_STILLNZ)
-
-lemma REAL_ABS_CASES: "x = real_of_num 0 | real_lt (real_of_num 0) (real_abs x)"
-  by (import hollight REAL_ABS_CASES)
-
-lemma REAL_ABS_BETWEEN1: "real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x)
-==> real_lt y z"
-  by (import hollight REAL_ABS_BETWEEN1)
-
-lemma REAL_ABS_SIGN: "real_lt (real_abs (real_sub x y)) y ==> real_lt (real_of_num 0) x"
-  by (import hollight REAL_ABS_SIGN)
-
-lemma REAL_ABS_SIGN2: "real_lt (real_abs (real_sub x y)) (real_neg y) ==> real_lt x (real_of_num 0)"
-  by (import hollight REAL_ABS_SIGN2)
-
-lemma REAL_ABS_CIRCLE: "real_lt (real_abs h) (real_sub (real_abs y) (real_abs x))
-==> real_lt (real_abs (real_add x h)) (real_abs y)"
-  by (import hollight REAL_ABS_CIRCLE)
-
-lemma REAL_SUB_ABS: "real_le (real_sub (real_abs x) (real_abs y)) (real_abs (real_sub x y))"
-  by (import hollight REAL_SUB_ABS)
-
-lemma REAL_ABS_SUB_ABS: "real_le (real_abs (real_sub (real_abs x) (real_abs y)))
- (real_abs (real_sub x y))"
-  by (import hollight REAL_ABS_SUB_ABS)
-
-lemma REAL_ABS_BETWEEN2: "real_lt x0 y0 &
-real_lt (real_mul (real_of_num 2) (real_abs (real_sub x x0)))
- (real_sub y0 x0) &
-real_lt (real_mul (real_of_num 2) (real_abs (real_sub y y0)))
- (real_sub y0 x0)
-==> real_lt x y"
-  by (import hollight REAL_ABS_BETWEEN2)
-
-lemma REAL_ABS_BOUNDS: "real_le (real_abs x) k = (real_le (real_neg k) x & real_le x k)"
-  by (import hollight REAL_ABS_BOUNDS)
-
-lemma REAL_BOUNDS_LE: "(real_le (real_neg k) x & real_le x k) = real_le (real_abs x) k"
-  by (import hollight REAL_BOUNDS_LE)
-
-lemma REAL_BOUNDS_LT: "(real_lt (real_neg k) x & real_lt x k) = real_lt (real_abs x) k"
-  by (import hollight REAL_BOUNDS_LT)
-
-lemma REAL_MIN_MAX: "real_min x y = real_neg (real_max (real_neg x) (real_neg y))"
-  by (import hollight REAL_MIN_MAX)
-
-lemma REAL_MAX_MIN: "real_max x y = real_neg (real_min (real_neg x) (real_neg y))"
-  by (import hollight REAL_MAX_MIN)
-
-lemma REAL_MAX_MAX: "real_le x (real_max x y) & real_le y (real_max x y)"
-  by (import hollight REAL_MAX_MAX)
-
-lemma REAL_MIN_MIN: "real_le (real_min x y) x & real_le (real_min x y) y"
-  by (import hollight REAL_MIN_MIN)
-
-lemma REAL_MAX_SYM: "real_max x y = real_max y x"
-  by (import hollight REAL_MAX_SYM)
-
-lemma REAL_MIN_SYM: "real_min x y = real_min y x"
-  by (import hollight REAL_MIN_SYM)
-
-lemma REAL_LE_MAX: "real_le z (real_max x y) = (real_le z x | real_le z y)"
-  by (import hollight REAL_LE_MAX)
-
-lemma REAL_LE_MIN: "real_le z (real_min x y) = (real_le z x & real_le z y)"
-  by (import hollight REAL_LE_MIN)
-
-lemma REAL_LT_MAX: "real_lt z (real_max x y) = (real_lt z x | real_lt z y)"
-  by (import hollight REAL_LT_MAX)
-
-lemma REAL_LT_MIN: "real_lt z (real_min x y) = (real_lt z x & real_lt z y)"
-  by (import hollight REAL_LT_MIN)
-
-lemma REAL_MAX_LE: "real_le (real_max x y) z = (real_le x z & real_le y z)"
-  by (import hollight REAL_MAX_LE)
-
-lemma REAL_MIN_LE: "real_le (real_min x y) z = (real_le x z | real_le y z)"
-  by (import hollight REAL_MIN_LE)
-
-lemma REAL_MAX_LT: "real_lt (real_max x y) z = (real_lt x z & real_lt y z)"
-  by (import hollight REAL_MAX_LT)
-
-lemma REAL_MIN_LT: "real_lt (real_min x y) z = (real_lt x z | real_lt y z)"
-  by (import hollight REAL_MIN_LT)
-
-lemma REAL_MAX_ASSOC: "real_max x (real_max y z) = real_max (real_max x y) z"
-  by (import hollight REAL_MAX_ASSOC)
-
-lemma REAL_MIN_ASSOC: "real_min x (real_min y z) = real_min (real_min x y) z"
-  by (import hollight REAL_MIN_ASSOC)
-
-lemma REAL_MAX_ACI: "real_max x y = real_max y x &
-real_max (real_max x y) z = real_max x (real_max y z) &
-real_max x (real_max y z) = real_max y (real_max x z) &
-real_max x x = x & real_max x (real_max x y) = real_max x y"
-  by (import hollight REAL_MAX_ACI)
-
-lemma REAL_MIN_ACI: "real_min x y = real_min y x &
-real_min (real_min x y) z = real_min x (real_min y z) &
-real_min x (real_min y z) = real_min y (real_min x z) &
-real_min x x = x & real_min x (real_min x y) = real_min x y"
-  by (import hollight REAL_MIN_ACI)
-
-lemma REAL_ABS_MUL: "real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)"
-  by (import hollight REAL_ABS_MUL)
-
-lemma REAL_POW_LE: "real_le (real_of_num 0) x ==> real_le (real_of_num 0) (real_pow x n)"
-  by (import hollight REAL_POW_LE)
-
-lemma REAL_POW_LT: "real_lt (real_of_num 0) x ==> real_lt (real_of_num 0) (real_pow x n)"
-  by (import hollight REAL_POW_LT)
-
-lemma REAL_ABS_POW: "real_abs (real_pow x n) = real_pow (real_abs x) n"
-  by (import hollight REAL_ABS_POW)
-
-lemma REAL_LE_LMUL: "real_le (real_of_num 0) x & real_le xa xb
-==> real_le (real_mul x xa) (real_mul x xb)"
-  by (import hollight REAL_LE_LMUL)
-
-lemma REAL_LE_RMUL: "real_le x y & real_le (real_of_num 0) z
-==> real_le (real_mul x z) (real_mul y z)"
-  by (import hollight REAL_LE_RMUL)
-
-lemma REAL_LT_LMUL: "real_lt (real_of_num 0) x & real_lt xa xb
-==> real_lt (real_mul x xa) (real_mul x xb)"
-  by (import hollight REAL_LT_LMUL)
-
-lemma REAL_LT_RMUL: "real_lt x y & real_lt (real_of_num 0) z
-==> real_lt (real_mul x z) (real_mul y z)"
-  by (import hollight REAL_LT_RMUL)
-
-lemma REAL_EQ_MUL_LCANCEL: "(real_mul x y = real_mul x z) = (x = real_of_num 0 | y = z)"
-  by (import hollight REAL_EQ_MUL_LCANCEL)
-
-lemma REAL_EQ_MUL_RCANCEL: "(real_mul x xb = real_mul xa xb) = (x = xa | xb = real_of_num 0)"
-  by (import hollight REAL_EQ_MUL_RCANCEL)
-
-lemma REAL_MUL_LINV_UNIQ: "real_mul x y = real_of_num 1 ==> real_inv y = x"
-  by (import hollight REAL_MUL_LINV_UNIQ)
-
-lemma REAL_MUL_RINV_UNIQ: "real_mul x xa = real_of_num 1 ==> real_inv x = xa"
-  by (import hollight REAL_MUL_RINV_UNIQ)
-
-lemma REAL_INV_INV: "real_inv (real_inv x) = x"
-  by (import hollight REAL_INV_INV)
-
-lemma REAL_EQ_INV2: "(real_inv x = real_inv y) = (x = y)"
-  by (import hollight REAL_EQ_INV2)
-
-lemma REAL_INV_EQ_0: "(real_inv x = real_of_num 0) = (x = real_of_num 0)"
-  by (import hollight REAL_INV_EQ_0)
-
-lemma REAL_LT_INV: "real_lt (real_of_num 0) x ==> real_lt (real_of_num 0) (real_inv x)"
-  by (import hollight REAL_LT_INV)
-
-lemma REAL_LT_INV_EQ: "real_lt (real_of_num 0) (real_inv x) = real_lt (real_of_num 0) x"
-  by (import hollight REAL_LT_INV_EQ)
-
-lemma REAL_INV_NEG: "real_inv (real_neg x) = real_neg (real_inv x)"
-  by (import hollight REAL_INV_NEG)
-
-lemma REAL_LE_INV_EQ: "real_le (real_of_num 0) (real_inv x) = real_le (real_of_num 0) x"
-  by (import hollight REAL_LE_INV_EQ)
-
-lemma REAL_LE_INV: "real_le (real_of_num 0) x ==> real_le (real_of_num 0) (real_inv x)"
-  by (import hollight REAL_LE_INV)
-
-lemma REAL_MUL_RINV: "x ~= real_of_num 0 ==> real_mul x (real_inv x) = real_of_num 1"
-  by (import hollight REAL_MUL_RINV)
-
-lemma REAL_INV_1: "real_inv (real_of_num 1) = real_of_num 1"
-  by (import hollight REAL_INV_1)
-
-lemma REAL_INV_EQ_1: "(real_inv x = real_of_num 1) = (x = real_of_num 1)"
-  by (import hollight REAL_INV_EQ_1)
-
-lemma REAL_DIV_1: "real_div x (real_of_num 1) = x"
-  by (import hollight REAL_DIV_1)
-
-lemma REAL_DIV_REFL: "x ~= real_of_num 0 ==> real_div x x = real_of_num 1"
-  by (import hollight REAL_DIV_REFL)
-
-lemma REAL_DIV_RMUL: "xa ~= real_of_num 0 ==> real_mul (real_div x xa) xa = x"
-  by (import hollight REAL_DIV_RMUL)
-
-lemma REAL_DIV_LMUL: "xa ~= real_of_num 0 ==> real_mul xa (real_div x xa) = x"
-  by (import hollight REAL_DIV_LMUL)
-
-lemma REAL_ABS_INV: "real_abs (real_inv x) = real_inv (real_abs x)"
-  by (import hollight REAL_ABS_INV)
-
-lemma REAL_ABS_DIV: "real_abs (real_div x xa) = real_div (real_abs x) (real_abs xa)"
-  by (import hollight REAL_ABS_DIV)
-
-lemma REAL_INV_MUL: "real_inv (real_mul x y) = real_mul (real_inv x) (real_inv y)"
-  by (import hollight REAL_INV_MUL)
-
-lemma REAL_INV_DIV: "real_inv (real_div x xa) = real_div xa x"
-  by (import hollight REAL_INV_DIV)
-
-lemma REAL_POW_MUL: "real_pow (real_mul x y) n = real_mul (real_pow x n) (real_pow y n)"
-  by (import hollight REAL_POW_MUL)
-
-lemma REAL_POW_INV: "real_pow (real_inv x) n = real_inv (real_pow x n)"
-  by (import hollight REAL_POW_INV)
-
-lemma REAL_INV_POW: "real_inv (real_pow x xa) = real_pow (real_inv x) xa"
-  by (import hollight REAL_INV_POW)
-
-lemma REAL_POW_DIV: "real_pow (real_div x xa) xb = real_div (real_pow x xb) (real_pow xa xb)"
-  by (import hollight REAL_POW_DIV)
-
-lemma REAL_POW_ADD: "real_pow x (m + n) = real_mul (real_pow x m) (real_pow x n)"
-  by (import hollight REAL_POW_ADD)
-
-lemma REAL_POW_NZ: "x ~= real_of_num 0 ==> real_pow x n ~= real_of_num 0"
-  by (import hollight REAL_POW_NZ)
-
-lemma REAL_POW_SUB: "x ~= real_of_num 0 & m <= n
-==> real_pow x (n - m) = real_div (real_pow x n) (real_pow x m)"
-  by (import hollight REAL_POW_SUB)
-
-lemma REAL_LT_IMP_NZ: "real_lt (real_of_num 0) x ==> x ~= real_of_num 0"
-  by (import hollight REAL_LT_IMP_NZ)
-
-lemma REAL_LT_LCANCEL_IMP: "real_lt (real_of_num 0) x & real_lt (real_mul x y) (real_mul x z)
-==> real_lt y z"
-  by (import hollight REAL_LT_LCANCEL_IMP)
-
-lemma REAL_LT_RCANCEL_IMP: "real_lt (real_of_num 0) xb & real_lt (real_mul x xb) (real_mul xa xb)
-==> real_lt x xa"
-  by (import hollight REAL_LT_RCANCEL_IMP)
-
-lemma REAL_LE_LCANCEL_IMP: "real_lt (real_of_num 0) x & real_le (real_mul x y) (real_mul x z)
-==> real_le y z"
-  by (import hollight REAL_LE_LCANCEL_IMP)
-
-lemma REAL_LE_RCANCEL_IMP: "real_lt (real_of_num 0) xb & real_le (real_mul x xb) (real_mul xa xb)
-==> real_le x xa"
-  by (import hollight REAL_LE_RCANCEL_IMP)
-
-lemma REAL_LE_RMUL_EQ: "real_lt (real_of_num 0) z
-==> real_le (real_mul x z) (real_mul y z) = real_le x y"
-  by (import hollight REAL_LE_RMUL_EQ)
-
-lemma REAL_LE_LMUL_EQ: "real_lt (real_of_num 0) z
-==> real_le (real_mul z x) (real_mul z y) = real_le x y"
-  by (import hollight REAL_LE_LMUL_EQ)
-
-lemma REAL_LT_RMUL_EQ: "real_lt (real_of_num 0) xb
-==> real_lt (real_mul x xb) (real_mul xa xb) = real_lt x xa"
-  by (import hollight REAL_LT_RMUL_EQ)
-
-lemma REAL_LT_LMUL_EQ: "real_lt (real_of_num 0) xb
-==> real_lt (real_mul xb x) (real_mul xb xa) = real_lt x xa"
-  by (import hollight REAL_LT_LMUL_EQ)
-
-lemma REAL_LE_MUL_EQ: "(ALL x y.
-    real_lt (real_of_num 0) x -->
-    real_le (real_of_num 0) (real_mul x y) = real_le (real_of_num 0) y) &
-(ALL x y.
-    real_lt (real_of_num 0) y -->
-    real_le (real_of_num 0) (real_mul x y) = real_le (real_of_num 0) x)"
-  by (import hollight REAL_LE_MUL_EQ)
-
-lemma REAL_LT_MUL_EQ: "(ALL x y.
-    real_lt (real_of_num 0) x -->
-    real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) y) &
-(ALL x y.
-    real_lt (real_of_num 0) y -->
-    real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) x)"
-  by (import hollight REAL_LT_MUL_EQ)
-
-lemma REAL_MUL_POS_LT: "real_lt (real_of_num 0) (real_mul x y) =
-(real_lt (real_of_num 0) x & real_lt (real_of_num 0) y |
- real_lt x (real_of_num 0) & real_lt y (real_of_num 0))"
-  by (import hollight REAL_MUL_POS_LT)
-
-lemma REAL_MUL_POS_LE: "real_le (real_of_num 0) (real_mul x xa) =
-(x = real_of_num 0 |
- xa = real_of_num 0 |
- real_lt (real_of_num 0) x & real_lt (real_of_num 0) xa |
- real_lt x (real_of_num 0) & real_lt xa (real_of_num 0))"
-  by (import hollight REAL_MUL_POS_LE)
-
-lemma REAL_LE_RDIV_EQ: "real_lt (real_of_num 0) z
-==> real_le x (real_div y z) = real_le (real_mul x z) y"
-  by (import hollight REAL_LE_RDIV_EQ)
-
-lemma REAL_LE_LDIV_EQ: "real_lt (real_of_num 0) z
-==> real_le (real_div x z) y = real_le x (real_mul y z)"
-  by (import hollight REAL_LE_LDIV_EQ)
-
-lemma REAL_LT_RDIV_EQ: "real_lt (real_of_num 0) xb
-==> real_lt x (real_div xa xb) = real_lt (real_mul x xb) xa"
-  by (import hollight REAL_LT_RDIV_EQ)
-
-lemma REAL_LT_LDIV_EQ: "real_lt (real_of_num 0) xb
-==> real_lt (real_div x xb) xa = real_lt x (real_mul xa xb)"
-  by (import hollight REAL_LT_LDIV_EQ)
-
-lemma REAL_EQ_RDIV_EQ: "real_lt (real_of_num 0) xb ==> (x = real_div xa xb) = (real_mul x xb = xa)"
-  by (import hollight REAL_EQ_RDIV_EQ)
-
-lemma REAL_EQ_LDIV_EQ: "real_lt (real_of_num 0) xb ==> (real_div x xb = xa) = (x = real_mul xa xb)"
-  by (import hollight REAL_EQ_LDIV_EQ)
-
-lemma REAL_LT_DIV2_EQ: "real_lt (real_of_num 0) xb
-==> real_lt (real_div x xb) (real_div xa xb) = real_lt x xa"
-  by (import hollight REAL_LT_DIV2_EQ)
-
-lemma REAL_LE_DIV2_EQ: "real_lt (real_of_num 0) xb
-==> real_le (real_div x xb) (real_div xa xb) = real_le x xa"
-  by (import hollight REAL_LE_DIV2_EQ)
-
-lemma REAL_MUL_2: "real_mul (real_of_num 2) x = real_add x x"
-  by (import hollight REAL_MUL_2)
-
-lemma REAL_POW_EQ_0: "(real_pow x n = real_of_num 0) = (x = real_of_num 0 & n ~= 0)"
-  by (import hollight REAL_POW_EQ_0)
-
-lemma REAL_LE_MUL2: "real_le (real_of_num 0) w &
-real_le w x & real_le (real_of_num 0) y & real_le y z
-==> real_le (real_mul w y) (real_mul x z)"
-  by (import hollight REAL_LE_MUL2)
-
-lemma REAL_LT_MUL2: "real_le (real_of_num 0) w &
-real_lt w x & real_le (real_of_num 0) y & real_lt y z
-==> real_lt (real_mul w y) (real_mul x z)"
-  by (import hollight REAL_LT_MUL2)
-
-lemma REAL_LT_SQUARE: "real_lt (real_of_num 0) (real_mul x x) = (x ~= real_of_num 0)"
-  by (import hollight REAL_LT_SQUARE)
-
-lemma REAL_POW_1: "real_pow x 1 = x"
-  by (import hollight REAL_POW_1)
-
-lemma REAL_POW_ONE: "real_pow (real_of_num 1) n = real_of_num 1"
-  by (import hollight REAL_POW_ONE)
-
-lemma REAL_LT_INV2: "real_lt (real_of_num 0) x & real_lt x y
-==> real_lt (real_inv y) (real_inv x)"
-  by (import hollight REAL_LT_INV2)
-
-lemma REAL_LE_INV2: "real_lt (real_of_num 0) x & real_le x y
-==> real_le (real_inv y) (real_inv x)"
-  by (import hollight REAL_LE_INV2)
-
-lemma REAL_LT_LINV: "real_lt (real_of_num 0) y & real_lt (real_inv y) x
-==> real_lt (real_inv x) y"
-  by (import hollight REAL_LT_LINV)
-
-lemma REAL_LT_RINV: "real_lt (real_of_num 0) x & real_lt x (real_inv y)
-==> real_lt y (real_inv x)"
-  by (import hollight REAL_LT_RINV)
-
-lemma REAL_LE_LINV: "real_lt (real_of_num 0) y & real_le (real_inv y) x
-==> real_le (real_inv x) y"
-  by (import hollight REAL_LE_LINV)
-
-lemma REAL_LE_RINV: "real_lt (real_of_num 0) x & real_le x (real_inv y)
-==> real_le y (real_inv x)"
-  by (import hollight REAL_LE_RINV)
-
-lemma REAL_INV_LE_1: "real_le (real_of_num 1) x ==> real_le (real_inv x) (real_of_num 1)"
-  by (import hollight REAL_INV_LE_1)
-
-lemma REAL_INV_1_LE: "real_lt (real_of_num 0) x & real_le x (real_of_num 1)
-==> real_le (real_of_num 1) (real_inv x)"
-  by (import hollight REAL_INV_1_LE)
-
-lemma REAL_INV_LT_1: "real_lt (real_of_num 1) x ==> real_lt (real_inv x) (real_of_num 1)"
-  by (import hollight REAL_INV_LT_1)
-
-lemma REAL_INV_1_LT: "real_lt (real_of_num 0) x & real_lt x (real_of_num 1)
-==> real_lt (real_of_num 1) (real_inv x)"
-  by (import hollight REAL_INV_1_LT)
-
-lemma REAL_SUB_INV: "x ~= real_of_num 0 & xa ~= real_of_num 0
-==> real_sub (real_inv x) (real_inv xa) =
-    real_div (real_sub xa x) (real_mul x xa)"
-  by (import hollight REAL_SUB_INV)
-
-lemma REAL_DOWN: "real_lt (real_of_num 0) d ==> EX x. real_lt (real_of_num 0) x & real_lt x d"
-  by (import hollight REAL_DOWN)
-
-lemma REAL_DOWN2: "real_lt (real_of_num 0) d1 & real_lt (real_of_num 0) d2
-==> EX e. real_lt (real_of_num 0) e & real_lt e d1 & real_lt e d2"
-  by (import hollight REAL_DOWN2)
-
-lemma REAL_POW_LE2: "real_le (real_of_num 0) x & real_le x y
-==> real_le (real_pow x n) (real_pow y n)"
-  by (import hollight REAL_POW_LE2)
-
-lemma REAL_POW_LE_1: "real_le (real_of_num 1) x ==> real_le (real_of_num 1) (real_pow x n)"
-  by (import hollight REAL_POW_LE_1)
-
-lemma REAL_POW_1_LE: "real_le (real_of_num 0) x & real_le x (real_of_num 1)
-==> real_le (real_pow x n) (real_of_num 1)"
-  by (import hollight REAL_POW_1_LE)
-
-lemma REAL_POW_MONO: "real_le (real_of_num 1) x & m <= n ==> real_le (real_pow x m) (real_pow x n)"
-  by (import hollight REAL_POW_MONO)
-
-lemma REAL_POW_LT2: "n ~= 0 & real_le (real_of_num 0) x & real_lt x y
-==> real_lt (real_pow x n) (real_pow y n)"
-  by (import hollight REAL_POW_LT2)
-
-lemma REAL_POW_LT_1: "n ~= 0 & real_lt (real_of_num 1) x
-==> real_lt (real_of_num 1) (real_pow x n)"
-  by (import hollight REAL_POW_LT_1)
-
-lemma REAL_POW_1_LT: "n ~= 0 & real_le (real_of_num 0) x & real_lt x (real_of_num 1)
-==> real_lt (real_pow x n) (real_of_num 1)"
-  by (import hollight REAL_POW_1_LT)
-
-lemma REAL_POW_MONO_LT: "real_lt (real_of_num 1) x & m < n ==> real_lt (real_pow x m) (real_pow x n)"
-  by (import hollight REAL_POW_MONO_LT)
-
-lemma REAL_POW_POW: "real_pow (real_pow x m) n = real_pow x (m * n)"
-  by (import hollight REAL_POW_POW)
-
-lemma REAL_EQ_RCANCEL_IMP: "z ~= real_of_num 0 & real_mul x z = real_mul y z ==> x = y"
-  by (import hollight REAL_EQ_RCANCEL_IMP)
-
-lemma REAL_EQ_LCANCEL_IMP: "xb ~= real_of_num 0 & real_mul xb x = real_mul xb xa ==> x = xa"
-  by (import hollight REAL_EQ_LCANCEL_IMP)
-
-lemma REAL_LT_DIV: "real_lt (real_of_num 0) x & real_lt (real_of_num 0) xa
-==> real_lt (real_of_num 0) (real_div x xa)"
-  by (import hollight REAL_LT_DIV)
-
-lemma REAL_LE_DIV: "real_le (real_of_num 0) x & real_le (real_of_num 0) xa
-==> real_le (real_of_num 0) (real_div x xa)"
-  by (import hollight REAL_LE_DIV)
-
-lemma REAL_DIV_POW2: "x ~= real_of_num 0
-==> real_div (real_pow x m) (real_pow x n) =
-    (if n <= m then real_pow x (m - n) else real_inv (real_pow x (n - m)))"
-  by (import hollight REAL_DIV_POW2)
-
-lemma REAL_DIV_POW2_ALT: "x ~= real_of_num 0
-==> real_div (real_pow x m) (real_pow x n) =
-    (if n < m then real_pow x (m - n) else real_inv (real_pow x (n - m)))"
-  by (import hollight REAL_DIV_POW2_ALT)
-
-lemma REAL_LT_POW2: "real_lt (real_of_num 0) (real_pow (real_of_num 2) x)"
-  by (import hollight REAL_LT_POW2)
-
-lemma REAL_LE_POW2: "real_le (real_of_num 1) (real_pow (real_of_num 2) n)"
-  by (import hollight REAL_LE_POW2)
-
-lemma REAL_POW2_ABS: "real_pow (real_abs x) 2 = real_pow x 2"
-  by (import hollight REAL_POW2_ABS)
-
-lemma REAL_LE_SQUARE_ABS: "real_le (real_abs x) (real_abs y) = real_le (real_pow x 2) (real_pow y 2)"
-  by (import hollight REAL_LE_SQUARE_ABS)
-
-lemma REAL_LT_SQUARE_ABS: "real_lt (real_abs x) (real_abs xa) = real_lt (real_pow x 2) (real_pow xa 2)"
-  by (import hollight REAL_LT_SQUARE_ABS)
-
-lemma REAL_EQ_SQUARE_ABS: "(real_abs x = real_abs xa) = (real_pow x 2 = real_pow xa 2)"
-  by (import hollight REAL_EQ_SQUARE_ABS)
-
-lemma REAL_LE_POW_2: "real_le (real_of_num 0) (real_pow x 2)"
-  by (import hollight REAL_LE_POW_2)
-
-lemma REAL_SOS_EQ_0: "(real_add (real_pow x 2) (real_pow y 2) = real_of_num 0) =
-(x = real_of_num 0 & y = real_of_num 0)"
-  by (import hollight REAL_SOS_EQ_0)
-
-lemma REAL_POW_ZERO: "real_pow (real_of_num 0) n =
-(if n = 0 then real_of_num 1 else real_of_num 0)"
-  by (import hollight REAL_POW_ZERO)
-
-lemma REAL_POW_MONO_INV: "real_le (real_of_num 0) x & real_le x (real_of_num 1) & n <= m
-==> real_le (real_pow x m) (real_pow x n)"
-  by (import hollight REAL_POW_MONO_INV)
-
-lemma REAL_POW_LE2_REV: "n ~= 0 & real_le (real_of_num 0) y & real_le (real_pow x n) (real_pow y n)
-==> real_le x y"
-  by (import hollight REAL_POW_LE2_REV)
-
-lemma REAL_POW_LT2_REV: "real_le (real_of_num 0) y & real_lt (real_pow x n) (real_pow y n)
-==> real_lt x y"
-  by (import hollight REAL_POW_LT2_REV)
-
-lemma REAL_POW_EQ: "x ~= 0 &
-real_le (real_of_num 0) xa &
-real_le (real_of_num 0) xb & real_pow xa x = real_pow xb x
-==> xa = xb"
-  by (import hollight REAL_POW_EQ)
-
-lemma REAL_POW_EQ_ABS: "n ~= 0 & real_pow x n = real_pow y n ==> real_abs x = real_abs y"
-  by (import hollight REAL_POW_EQ_ABS)
-
-lemma REAL_POW_EQ_1_IMP: "n ~= 0 & real_pow x n = real_of_num 1 ==> real_abs x = real_of_num 1"
-  by (import hollight REAL_POW_EQ_1_IMP)
-
-lemma REAL_POW_EQ_1: "(real_pow x n = real_of_num 1) =
-(real_abs x = real_of_num 1 & (real_lt x (real_of_num 0) --> even n) |
- n = 0)"
-  by (import hollight REAL_POW_EQ_1)
-
-lemma REAL_POW_LT2_ODD: "real_lt x y & odd n ==> real_lt (real_pow x n) (real_pow y n)"
-  by (import hollight REAL_POW_LT2_ODD)
-
-lemma REAL_POW_LE2_ODD: "real_le xa xb & odd x ==> real_le (real_pow xa x) (real_pow xb x)"
-  by (import hollight REAL_POW_LE2_ODD)
-
-lemma REAL_POW_LT2_ODD_EQ: "odd n ==> real_lt (real_pow x n) (real_pow y n) = real_lt x y"
-  by (import hollight REAL_POW_LT2_ODD_EQ)
-
-lemma REAL_POW_LE2_ODD_EQ: "odd n ==> real_le (real_pow x n) (real_pow y n) = real_le x y"
-  by (import hollight REAL_POW_LE2_ODD_EQ)
-
-lemma REAL_POW_EQ_ODD_EQ: "odd x ==> (real_pow xa x = real_pow xb x) = (xa = xb)"
-  by (import hollight REAL_POW_EQ_ODD_EQ)
-
-lemma REAL_POW_EQ_ODD: "odd n & real_pow x n = real_pow y n ==> x = y"
-  by (import hollight REAL_POW_EQ_ODD)
-
-lemma REAL_POW_EQ_EQ: "(real_pow x n = real_pow y n) =
-(if even n then n = 0 | real_abs x = real_abs y else x = y)"
-  by (import hollight REAL_POW_EQ_EQ)
-
-definition
-  real_sgn :: "hollight.real => hollight.real"  where
-  "real_sgn ==
-%u. if real_lt (real_of_num 0) u then real_of_num 1
-    else if real_lt u (real_of_num 0) then real_neg (real_of_num 1)
-         else real_of_num 0"
-
-lemma DEF_real_sgn: "real_sgn =
-(%u. if real_lt (real_of_num 0) u then real_of_num 1
-     else if real_lt u (real_of_num 0) then real_neg (real_of_num 1)
-          else real_of_num 0)"
-  by (import hollight DEF_real_sgn)
-
-lemma REAL_SGN_0: "real_sgn (real_of_num 0) = real_of_num 0"
-  by (import hollight REAL_SGN_0)
-
-lemma REAL_SGN_NEG: "real_sgn (real_neg x) = real_neg (real_sgn x)"
-  by (import hollight REAL_SGN_NEG)
-
-lemma REAL_SGN_ABS: "real_mul (real_sgn x) (real_abs x) = x"
-  by (import hollight REAL_SGN_ABS)
-
-lemma REAL_ABS_SGN: "real_abs (real_sgn x) = real_sgn (real_abs x)"
-  by (import hollight REAL_ABS_SGN)
-
-lemma REAL_SGN: "real_sgn x = real_div x (real_abs x)"
-  by (import hollight REAL_SGN)
-
-lemma REAL_SGN_MUL: "real_sgn (real_mul x xa) = real_mul (real_sgn x) (real_sgn xa)"
-  by (import hollight REAL_SGN_MUL)
-
-lemma REAL_SGN_INV: "real_sgn (real_inv x) = real_sgn x"
-  by (import hollight REAL_SGN_INV)
-
-lemma REAL_SGN_DIV: "real_sgn (real_div x xa) = real_div (real_sgn x) (real_sgn xa)"
-  by (import hollight REAL_SGN_DIV)
-
-lemma REAL_WLOG_LE: "(ALL x y. P x y = P y x) & (ALL x y. real_le x y --> P x y) ==> P x xa"
-  by (import hollight REAL_WLOG_LE)
-
-lemma REAL_WLOG_LT: "(ALL x. P x x) & (ALL x y. P x y = P y x) & (ALL x y. real_lt x y --> P x y)
-==> P x xa"
-  by (import hollight REAL_WLOG_LT)
-
-definition
-  DECIMAL :: "nat => nat => hollight.real"  where
-  "DECIMAL == %u ua. real_div (real_of_num u) (real_of_num ua)"
-
-lemma DEF_DECIMAL: "DECIMAL = (%u ua. real_div (real_of_num u) (real_of_num ua))"
-  by (import hollight DEF_DECIMAL)
-
-lemma RAT_LEMMA1: "y1 ~= real_of_num 0 & y2 ~= real_of_num 0
-==> real_add (real_div x1 y1) (real_div x2 y2) =
-    real_mul (real_add (real_mul x1 y2) (real_mul x2 y1))
-     (real_mul (real_inv y1) (real_inv y2))"
-  by (import hollight RAT_LEMMA1)
-
-lemma RAT_LEMMA2: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
-==> real_add (real_div x1 y1) (real_div x2 y2) =
-    real_mul (real_add (real_mul x1 y2) (real_mul x2 y1))
-     (real_mul (real_inv y1) (real_inv y2))"
-  by (import hollight RAT_LEMMA2)
-
-lemma RAT_LEMMA3: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
-==> real_sub (real_div x1 y1) (real_div x2 y2) =
-    real_mul (real_sub (real_mul x1 y2) (real_mul x2 y1))
-     (real_mul (real_inv y1) (real_inv y2))"
-  by (import hollight RAT_LEMMA3)
-
-lemma RAT_LEMMA4: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
-==> real_le (real_div x1 y1) (real_div x2 y2) =
-    real_le (real_mul x1 y2) (real_mul x2 y1)"
-  by (import hollight RAT_LEMMA4)
-
-lemma RAT_LEMMA5: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
-==> (real_div x1 y1 = real_div x2 y2) = (real_mul x1 y2 = real_mul x2 y1)"
-  by (import hollight RAT_LEMMA5)
-
-lemma REAL_INTEGRAL: "(ALL x. real_mul (real_of_num 0) x = real_of_num 0) &
-(ALL x y z. (real_add x y = real_add x z) = (y = z)) &
-(ALL w x y z.
-    (real_add (real_mul w y) (real_mul x z) =
-     real_add (real_mul w z) (real_mul x y)) =
-    (w = x | y = z))"
-  by (import hollight REAL_INTEGRAL)
-
-definition
-  integer :: "hollight.real => bool"  where
-  "integer == %u. EX n. real_abs u = real_of_num n"
-
-lemma DEF_integer: "integer = (%u. EX n. real_abs u = real_of_num n)"
-  by (import hollight DEF_integer)
-
-lemma is_int: "integer x = (EX n. x = real_of_num n | x = real_neg (real_of_num n))"
-  by (import hollight is_int)
-
-typedef (open) int = "Collect integer"  morphisms "real_of_int" "int_of_real"
-  apply (rule light_ex_imp_nonempty[where t="Eps integer"])
-  by (import hollight TYDEF_int)
-
-syntax
-  real_of_int :: _ 
-
-syntax
-  int_of_real :: _ 
-
-lemmas "TYDEF_int_@intern" = typedef_hol2hollight 
-  [where a="a :: hollight.int" and r=r ,
-   OF type_definition_int]
-
-lemma dest_int_rep: "EX n. hollight.real_of_int x = real_of_num n |
-      hollight.real_of_int x = real_neg (real_of_num n)"
-  by (import hollight dest_int_rep)
-
-definition
-  int_le :: "hollight.int => hollight.int => bool"  where
-  "int_le == %u ua. real_le (hollight.real_of_int u) (hollight.real_of_int ua)"
-
-lemma DEF_int_le: "int_le = (%u ua. real_le (hollight.real_of_int u) (hollight.real_of_int ua))"
-  by (import hollight DEF_int_le)
-
-definition
-  int_lt :: "hollight.int => hollight.int => bool"  where
-  "int_lt == %u ua. real_lt (hollight.real_of_int u) (hollight.real_of_int ua)"
-
-lemma DEF_int_lt: "int_lt = (%u ua. real_lt (hollight.real_of_int u) (hollight.real_of_int ua))"
-  by (import hollight DEF_int_lt)
-
-definition
-  int_ge :: "hollight.int => hollight.int => bool"  where
-  "int_ge == %u ua. real_ge (hollight.real_of_int u) (hollight.real_of_int ua)"
-
-lemma DEF_int_ge: "int_ge = (%u ua. real_ge (hollight.real_of_int u) (hollight.real_of_int ua))"
-  by (import hollight DEF_int_ge)
-
-definition
-  int_gt :: "hollight.int => hollight.int => bool"  where
-  "int_gt == %u ua. real_gt (hollight.real_of_int u) (hollight.real_of_int ua)"
-
-lemma DEF_int_gt: "int_gt = (%u ua. real_gt (hollight.real_of_int u) (hollight.real_of_int ua))"
-  by (import hollight DEF_int_gt)
-
-definition
-  int_of_num :: "nat => hollight.int"  where
-  "int_of_num == %u. int_of_real (real_of_num u)"
-
-lemma DEF_int_of_num: "int_of_num = (%u. int_of_real (real_of_num u))"
-  by (import hollight DEF_int_of_num)
-
-lemma int_of_num_th: "hollight.real_of_int (int_of_num x) = real_of_num x"
-  by (import hollight int_of_num_th)
-
-definition
-  int_neg :: "hollight.int => hollight.int"  where
-  "int_neg == %u. int_of_real (real_neg (hollight.real_of_int u))"
-
-lemma DEF_int_neg: "int_neg = (%u. int_of_real (real_neg (hollight.real_of_int u)))"
-  by (import hollight DEF_int_neg)
-
-lemma int_neg_th: "hollight.real_of_int (int_neg x) = real_neg (hollight.real_of_int x)"
-  by (import hollight int_neg_th)
-
-definition
-  int_add :: "hollight.int => hollight.int => hollight.int"  where
-  "int_add ==
-%u ua.
-   int_of_real (real_add (hollight.real_of_int u) (hollight.real_of_int ua))"
-
-lemma DEF_int_add: "int_add =
-(%u ua.
-    int_of_real
-     (real_add (hollight.real_of_int u) (hollight.real_of_int ua)))"
-  by (import hollight DEF_int_add)
-
-lemma int_add_th: "hollight.real_of_int (int_add x xa) =
-real_add (hollight.real_of_int x) (hollight.real_of_int xa)"
-  by (import hollight int_add_th)
-
-definition
-  int_sub :: "hollight.int => hollight.int => hollight.int"  where
-  "int_sub ==
-%u ua.
-   int_of_real (real_sub (hollight.real_of_int u) (hollight.real_of_int ua))"
-
-lemma DEF_int_sub: "int_sub =
-(%u ua.
-    int_of_real
-     (real_sub (hollight.real_of_int u) (hollight.real_of_int ua)))"
-  by (import hollight DEF_int_sub)
-
-lemma int_sub_th: "hollight.real_of_int (int_sub x xa) =
-real_sub (hollight.real_of_int x) (hollight.real_of_int xa)"
-  by (import hollight int_sub_th)
-
-definition
-  int_mul :: "hollight.int => hollight.int => hollight.int"  where
-  "int_mul ==
-%u ua.
-   int_of_real (real_mul (hollight.real_of_int u) (hollight.real_of_int ua))"
-
-lemma DEF_int_mul: "int_mul =
-(%u ua.
-    int_of_real
-     (real_mul (hollight.real_of_int u) (hollight.real_of_int ua)))"
-  by (import hollight DEF_int_mul)
-
-lemma int_mul_th: "hollight.real_of_int (int_mul x y) =
-real_mul (hollight.real_of_int x) (hollight.real_of_int y)"
-  by (import hollight int_mul_th)
-
-definition
-  int_abs :: "hollight.int => hollight.int"  where
-  "int_abs == %u. int_of_real (real_abs (hollight.real_of_int u))"
-
-lemma DEF_int_abs: "int_abs = (%u. int_of_real (real_abs (hollight.real_of_int u)))"
-  by (import hollight DEF_int_abs)
-
-lemma int_abs_th: "hollight.real_of_int (int_abs x) = real_abs (hollight.real_of_int x)"
-  by (import hollight int_abs_th)
-
-definition
-  int_sgn :: "hollight.int => hollight.int"  where
-  "int_sgn == %u. int_of_real (real_sgn (hollight.real_of_int u))"
-
-lemma DEF_int_sgn: "int_sgn = (%u. int_of_real (real_sgn (hollight.real_of_int u)))"
-  by (import hollight DEF_int_sgn)
-
-lemma int_sgn_th: "hollight.real_of_int (int_sgn x) = real_sgn (hollight.real_of_int x)"
-  by (import hollight int_sgn_th)
-
-definition
-  int_max :: "hollight.int => hollight.int => hollight.int"  where
-  "int_max ==
-%u ua.
-   int_of_real (real_max (hollight.real_of_int u) (hollight.real_of_int ua))"
-
-lemma DEF_int_max: "int_max =
-(%u ua.
-    int_of_real
-     (real_max (hollight.real_of_int u) (hollight.real_of_int ua)))"
-  by (import hollight DEF_int_max)
-
-lemma int_max_th: "hollight.real_of_int (int_max x y) =
-real_max (hollight.real_of_int x) (hollight.real_of_int y)"
-  by (import hollight int_max_th)
-
-definition
-  int_min :: "hollight.int => hollight.int => hollight.int"  where
-  "int_min ==
-%u ua.
-   int_of_real (real_min (hollight.real_of_int u) (hollight.real_of_int ua))"
-
-lemma DEF_int_min: "int_min =
-(%u ua.
-    int_of_real
-     (real_min (hollight.real_of_int u) (hollight.real_of_int ua)))"
-  by (import hollight DEF_int_min)
-
-lemma int_min_th: "hollight.real_of_int (int_min x y) =
-real_min (hollight.real_of_int x) (hollight.real_of_int y)"
-  by (import hollight int_min_th)
-
-definition
-  int_pow :: "hollight.int => nat => hollight.int"  where
-  "int_pow == %u ua. int_of_real (real_pow (hollight.real_of_int u) ua)"
-
-lemma DEF_int_pow: "int_pow = (%u ua. int_of_real (real_pow (hollight.real_of_int u) ua))"
-  by (import hollight DEF_int_pow)
-
-lemma int_pow_th: "hollight.real_of_int (int_pow x xa) = real_pow (hollight.real_of_int x) xa"
-  by (import hollight int_pow_th)
-
-lemma INT_IMAGE: "(EX n. x = int_of_num n) | (EX n. x = int_neg (int_of_num n))"
-  by (import hollight INT_IMAGE)
-
-lemma INT_LT_DISCRETE: "int_lt x y = int_le (int_add x (int_of_num 1)) y"
-  by (import hollight INT_LT_DISCRETE)
-
-lemma INT_GT_DISCRETE: "int_gt x xa = int_ge x (int_add xa (int_of_num 1))"
-  by (import hollight INT_GT_DISCRETE)
-
-lemma INT_FORALL_POS: "(ALL n. P (int_of_num n)) = (ALL i. int_le (int_of_num 0) i --> P i)"
-  by (import hollight INT_FORALL_POS)
-
-lemma INT_EXISTS_POS: "(EX n. P (int_of_num n)) = (EX i. int_le (int_of_num 0) i & P i)"
-  by (import hollight INT_EXISTS_POS)
-
-lemma INT_FORALL_ABS: "(ALL n. x (int_of_num n)) = (ALL xa. x (int_abs xa))"
-  by (import hollight INT_FORALL_ABS)
-
-lemma INT_EXISTS_ABS: "(EX n. P (int_of_num n)) = (EX x. P (int_abs x))"
-  by (import hollight INT_EXISTS_ABS)
-
-lemma INT_ABS_MUL_1: "(int_abs (int_mul x y) = int_of_num 1) =
-(int_abs x = int_of_num 1 & int_abs y = int_of_num 1)"
-  by (import hollight INT_ABS_MUL_1)
-
-lemma INT_WOP: "(EX x. int_le (int_of_num 0) x & P x) =
-(EX x. int_le (int_of_num 0) x &
-       P x & (ALL y. int_le (int_of_num 0) y & P y --> int_le x y))"
-  by (import hollight INT_WOP)
-
-lemma INT_POW: "int_pow x 0 = int_of_num 1 &
-(ALL xa. int_pow x (Suc xa) = int_mul x (int_pow x xa))"
-  by (import hollight INT_POW)
-
-lemma INT_ABS: "int_abs x = (if int_le (int_of_num 0) x then x else int_neg x)"
-  by (import hollight INT_ABS)
-
-lemma INT_GE: "int_ge x xa = int_le xa x"
-  by (import hollight INT_GE)
-
-lemma INT_GT: "int_gt x xa = int_lt xa x"
-  by (import hollight INT_GT)
-
-lemma INT_LT: "int_lt x xa = (~ int_le xa x)"
-  by (import hollight INT_LT)
-
-lemma INT_ARCH: "d ~= int_of_num 0 ==> EX c. int_lt x (int_mul c d)"
-  by (import hollight INT_ARCH)
-
-lemma INT_DIVMOD_EXIST_0: "EX x xa.
-   if n = int_of_num 0 then x = int_of_num 0 & xa = m
-   else int_le (int_of_num 0) xa &
-        int_lt xa (int_abs n) & m = int_add (int_mul x n) xa"
-  by (import hollight INT_DIVMOD_EXIST_0)
-
-consts
-  div :: "hollight.int => hollight.int => hollight.int" ("div")
-
-defs
-  div_def: "div ==
-SOME q.
-   EX r. ALL m n.
-            if n = int_of_num 0 then q m n = int_of_num 0 & r m n = m
-            else int_le (int_of_num 0) (r m n) &
-                 int_lt (r m n) (int_abs n) &
-                 m = int_add (int_mul (q m n) n) (r m n)"
-
-lemma DEF_div: "div =
-(SOME q.
-    EX r. ALL m n.
-             if n = int_of_num 0 then q m n = int_of_num 0 & r m n = m
-             else int_le (int_of_num 0) (r m n) &
-                  int_lt (r m n) (int_abs n) &
-                  m = int_add (int_mul (q m n) n) (r m n))"
-  by (import hollight DEF_div)
-
-definition
-  rem :: "hollight.int => hollight.int => hollight.int"  where
-  "rem ==
-SOME r.
-   ALL m n.
-      if n = int_of_num 0 then div m n = int_of_num 0 & r m n = m
-      else int_le (int_of_num 0) (r m n) &
-           int_lt (r m n) (int_abs n) &
-           m = int_add (int_mul (div m n) n) (r m n)"
-
-lemma DEF_rem: "rem =
-(SOME r.
-    ALL m n.
-       if n = int_of_num 0 then div m n = int_of_num 0 & r m n = m
-       else int_le (int_of_num 0) (r m n) &
-            int_lt (r m n) (int_abs n) &
-            m = int_add (int_mul (div m n) n) (r m n))"
-  by (import hollight DEF_rem)
-
-lemma INT_DIVISION: "n ~= int_of_num 0
-==> m = int_add (int_mul (div m n) n) (rem m n) &
-    int_le (int_of_num 0) (rem m n) & int_lt (rem m n) (int_abs n)"
-  by (import hollight INT_DIVISION)
-
-lemma sth: "(ALL x y z. int_add x (int_add y z) = int_add (int_add x y) z) &
-(ALL x y. int_add x y = int_add y x) &
-(ALL x. int_add (int_of_num 0) x = x) &
-(ALL x y z. int_mul x (int_mul y z) = int_mul (int_mul x y) z) &
-(ALL x y. int_mul x y = int_mul y x) &
-(ALL x. int_mul (int_of_num 1) x = x) &
-(ALL x. int_mul (int_of_num 0) x = int_of_num 0) &
-(ALL x y z. int_mul x (int_add y z) = int_add (int_mul x y) (int_mul x z)) &
-(ALL x. int_pow x 0 = int_of_num 1) &
-(ALL x xa. int_pow x (Suc xa) = int_mul x (int_pow x xa))"
-  by (import hollight sth)
-
-lemma INT_INTEGRAL: "(ALL x. int_mul (int_of_num 0) x = int_of_num 0) &
-(ALL x y z. (int_add x y = int_add x z) = (y = z)) &
-(ALL w x y z.
-    (int_add (int_mul w y) (int_mul x z) =
-     int_add (int_mul w z) (int_mul x y)) =
-    (w = x | y = z))"
-  by (import hollight INT_INTEGRAL)
-
-lemma INT_DIVMOD_UNIQ: "m = int_add (int_mul q n) r & int_le (int_of_num 0) r & int_lt r (int_abs n)
-==> div m n = q & rem m n = r"
-  by (import hollight INT_DIVMOD_UNIQ)
-
-consts
-  eqeq :: "'A => 'A => ('A => 'A => bool) => bool" 
-
-defs
-  eqeq_def: "hollight.eqeq == %(u::'A) (ua::'A) ub::'A => 'A => bool. ub u ua"
-
-lemma DEF__equal__equal_: "hollight.eqeq = (%(u::'A) (ua::'A) ub::'A => 'A => bool. ub u ua)"
-  by (import hollight DEF__equal__equal_)
-
-definition
-  real_mod :: "hollight.real => hollight.real => hollight.real => bool"  where
-  "real_mod == %u ua ub. EX q. integer q & real_sub ua ub = real_mul q u"
-
-lemma DEF_real_mod: "real_mod = (%u ua ub. EX q. integer q & real_sub ua ub = real_mul q u)"
-  by (import hollight DEF_real_mod)
-
-definition
-  int_divides :: "hollight.int => hollight.int => bool"  where
-  "int_divides == %u ua. EX x. ua = int_mul u x"
-
-lemma DEF_int_divides: "int_divides = (%u ua. EX x. ua = int_mul u x)"
-  by (import hollight DEF_int_divides)
-
-consts
-  int_mod :: "hollight.int => hollight.int => hollight.int => bool" 
-
-defs
-  int_mod_def: "hollight.int_mod == %u ua ub. int_divides u (int_sub ua ub)"
-
-lemma DEF_int_mod: "hollight.int_mod = (%u ua ub. int_divides u (int_sub ua ub))"
-  by (import hollight DEF_int_mod)
-
-lemma int_congruent: "hollight.eqeq x xa (hollight.int_mod xb) =
-(EX d. int_sub x xa = int_mul xb d)"
-  by (import hollight int_congruent)
-
-consts
-  int_coprime :: "hollight.int * hollight.int => bool" 
-
-defs
-  int_coprime_def: "hollight.int_coprime ==
-%u. EX x y. int_add (int_mul (fst u) x) (int_mul (snd u) y) = int_of_num 1"
-
-lemma DEF_int_coprime: "hollight.int_coprime =
-(%u. EX x y. int_add (int_mul (fst u) x) (int_mul (snd u) y) = int_of_num 1)"
-  by (import hollight DEF_int_coprime)
-
-lemma FORALL_UNCURRY: "All (P::('A => 'B => 'C) => bool) =
-(ALL f::'A * 'B => 'C. P (%(a::'A) b::'B. f (a, b)))"
-  by (import hollight FORALL_UNCURRY)
-
-lemma EXISTS_UNCURRY: "Ex (x::('A => 'B => 'C) => bool) =
-(EX f::'A * 'B => 'C. x (%(a::'A) b::'B. f (a, b)))"
-  by (import hollight EXISTS_UNCURRY)
-
-lemma WF_INT_MEASURE: "(ALL x::'A. int_le (int_of_num (0::nat)) ((m::'A => hollight.int) x)) &
-(ALL x::'A. (ALL y::'A. int_lt (m y) (m x) --> (P::'A => bool) y) --> P x)
-==> P (x::'A)"
-  by (import hollight WF_INT_MEASURE)
-
-lemma WF_INT_MEASURE_2: "(ALL (x::'A) y::'B.
-    int_le (int_of_num (0::nat)) ((m::'A => 'B => hollight.int) x y)) &
-(ALL (x::'A) y::'B.
-    (ALL (x'::'A) y'::'B.
-        int_lt (m x' y') (m x y) --> (P::'A => 'B => bool) x' y') -->
-    P x y)
-==> P (x::'A) (xa::'B)"
-  by (import hollight WF_INT_MEASURE_2)
-
-lemma INT_GCD_EXISTS: "EX d. int_divides d a &
-      int_divides d b & (EX x y. d = int_add (int_mul a x) (int_mul b y))"
-  by (import hollight INT_GCD_EXISTS)
-
-lemma INT_GCD_EXISTS_POS: "EX d. int_le (int_of_num 0) d &
-      int_divides d a &
-      int_divides d b & (EX x y. d = int_add (int_mul a x) (int_mul b y))"
-  by (import hollight INT_GCD_EXISTS_POS)
-
-consts
-  int_gcd :: "hollight.int * hollight.int => hollight.int" 
-
-defs
-  int_gcd_def: "hollight.int_gcd ==
-SOME d.
-   ALL a b.
-      int_le (int_of_num 0) (d (a, b)) &
-      int_divides (d (a, b)) a &
-      int_divides (d (a, b)) b &
-      (EX x y. d (a, b) = int_add (int_mul a x) (int_mul b y))"
-
-lemma DEF_int_gcd: "hollight.int_gcd =
-(SOME d.
-    ALL a b.
-       int_le (int_of_num 0) (d (a, b)) &
-       int_divides (d (a, b)) a &
-       int_divides (d (a, b)) b &
-       (EX x y. d (a, b) = int_add (int_mul a x) (int_mul b y)))"
-  by (import hollight DEF_int_gcd)
-
-definition
-  num_of_int :: "hollight.int => nat"  where
-  "num_of_int == %u. SOME n. int_of_num n = u"
-
-lemma DEF_num_of_int: "num_of_int = (%u. SOME n. int_of_num n = u)"
-  by (import hollight DEF_num_of_int)
-
-lemma NUM_OF_INT_OF_NUM: "num_of_int (int_of_num x) = x"
-  by (import hollight NUM_OF_INT_OF_NUM)
-
-lemma INT_OF_NUM_OF_INT: "int_le (int_of_num 0) x ==> int_of_num (num_of_int x) = x"
-  by (import hollight INT_OF_NUM_OF_INT)
-
-lemma NUM_OF_INT: "int_le (int_of_num 0) x = (int_of_num (num_of_int x) = x)"
-  by (import hollight NUM_OF_INT)
-
-definition
-  num_divides :: "nat => nat => bool"  where
-  "num_divides == %u ua. int_divides (int_of_num u) (int_of_num ua)"
-
-lemma DEF_num_divides: "num_divides = (%u ua. int_divides (int_of_num u) (int_of_num ua))"
-  by (import hollight DEF_num_divides)
-
-definition
-  num_mod :: "nat => nat => nat => bool"  where
-  "num_mod ==
-%u ua ub. hollight.int_mod (int_of_num u) (int_of_num ua) (int_of_num ub)"
-
-lemma DEF_num_mod: "num_mod =
-(%u ua ub. hollight.int_mod (int_of_num u) (int_of_num ua) (int_of_num ub))"
-  by (import hollight DEF_num_mod)
-
-lemma num_congruent: "hollight.eqeq x xa (num_mod xb) =
-hollight.eqeq (int_of_num x) (int_of_num xa)
- (hollight.int_mod (int_of_num xb))"
-  by (import hollight num_congruent)
-
-definition
-  num_coprime :: "nat * nat => bool"  where
-  "num_coprime ==
-%u. hollight.int_coprime (int_of_num (fst u), int_of_num (snd u))"
-
-lemma DEF_num_coprime: "num_coprime =
-(%u. hollight.int_coprime (int_of_num (fst u), int_of_num (snd u)))"
-  by (import hollight DEF_num_coprime)
-
-definition
-  num_gcd :: "nat * nat => nat"  where
-  "num_gcd ==
-%u. num_of_int (hollight.int_gcd (int_of_num (fst u), int_of_num (snd u)))"
-
-lemma DEF_num_gcd: "num_gcd =
-(%u. num_of_int (hollight.int_gcd (int_of_num (fst u), int_of_num (snd u))))"
-  by (import hollight DEF_num_gcd)
-
-lemma NUM_GCD: "int_of_num (num_gcd (x, xa)) =
-hollight.int_gcd (int_of_num x, int_of_num xa)"
-  by (import hollight NUM_GCD)
-
-lemma IN_ELIM_THM: "(ALL (P::(bool => 'q_43295 => bool) => bool) x::'q_43295.
-    (x : {v::'q_43295. P (SETSPEC v)}) =
-    P (%(p::bool) t::'q_43295. p & x = t)) &
-(ALL (p::'q_43326 => bool) x::'q_43326.
-    (x : {v::'q_43326. EX y::'q_43326. p y & v = y}) = p x) &
-(ALL (P::(bool => 'q_43354 => bool) => bool) x::'q_43354.
-    x \<in> {v::'q_43354. P (SETSPEC v)} =
-    P (%(p::bool) t::'q_43354. p & x = t)) &
-(ALL (p::'q_43383 => bool) x::'q_43383.
-    x \<in> {v::'q_43383. EX y::'q_43383. p y & v = y} = p x) &
-(ALL (p::'q_43400 => bool) x::'q_43400. p x \<longleftrightarrow> p x)"
-  by (import hollight IN_ELIM_THM)
-
-lemma INSERT: "insert (x::'A) (s::'A set) = {u::'A. EX y::'A. (y : s | y = x) & u = y}"
-  by (import hollight INSERT)
-
-definition
-  SING :: "('A set) => bool"  where
-  "SING == %u::'A set. EX x::'A. u = {x}"
-
-lemma DEF_SING: "SING = (%u::'A set. EX x::'A. u = {x})"
-  by (import hollight DEF_SING)
-
-definition
-  INJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool"  where
-  "INJ ==
-%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
-   (ALL x::'A. x : ua --> u x : ub) &
-   (ALL (x::'A) y::'A. x : ua & y : ua & u x = u y --> x = y)"
-
-lemma DEF_INJ: "INJ =
-(%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
-    (ALL x::'A. x : ua --> u x : ub) &
-    (ALL (x::'A) y::'A. x : ua & y : ua & u x = u y --> x = y))"
-  by (import hollight DEF_INJ)
-
-definition
-  SURJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool"  where
-  "SURJ ==
-%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
-   (ALL x::'A. x : ua --> u x : ub) &
-   (ALL x::'B. x : ub --> (EX y::'A. y : ua & u y = x))"
-
-lemma DEF_SURJ: "SURJ =
-(%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
-    (ALL x::'A. x : ua --> u x : ub) &
-    (ALL x::'B. x : ub --> (EX y::'A. y : ua & u y = x)))"
-  by (import hollight DEF_SURJ)
-
-definition
-  BIJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool"  where
-  "BIJ ==
-%(u::'A => 'B) (ua::'A => bool) ub::'B => bool. INJ u ua ub & SURJ u ua ub"
-
-lemma DEF_BIJ: "BIJ =
-(%(u::'A => 'B) (ua::'A => bool) ub::'B => bool. INJ u ua ub & SURJ u ua ub)"
-  by (import hollight DEF_BIJ)
-
-definition
-  REST :: "('A => bool) => 'A => bool"  where
-  "REST == %u::'A => bool. u - {Eps u}"
-
-lemma DEF_REST: "REST = (%u::'A => bool. u - {Eps u})"
-  by (import hollight DEF_REST)
-
-lemma NOT_IN_EMPTY: "(x::'A) ~: {}"
-  by (import hollight NOT_IN_EMPTY)
-
-lemma IN_UNIONS: "((xa::'A) : Union (x::('A => bool) => bool)) =
-(EX t::'A => bool. t : x & xa : t)"
-  by (import hollight IN_UNIONS)
-
-lemma IN_INTERS: "((xa::'A) : Inter (x::('A => bool) => bool)) =
-(ALL t::'A => bool. t : x --> xa : t)"
-  by (import hollight IN_INTERS)
-
-lemma IN_DELETE: "((xa::'A) : (x::'A => bool) - {xb::'A}) = (xa : x & xa ~= xb)"
-  by (import hollight IN_DELETE)
-
-lemma IN_IMAGE: "((x::'B) : (xb::'A => 'B) ` (xa::'A => bool)) =
-(EX xc::'A. x = xb xc & xc : xa)"
-  by (import hollight IN_IMAGE)
-
-lemma IN_REST: "((x::'A) : REST (xa::'A => bool)) = (x : xa & x ~= Eps xa)"
-  by (import hollight IN_REST)
-
-lemma FORALL_IN_INSERT: "(ALL xc::'q_44214.
-    xc : insert (xa::'q_44214) (xb::'q_44214 => bool) -->
-    (x::'q_44214 => bool) xc) =
-(x xa & (ALL xa::'q_44214. xa : xb --> x xa))"
-  by (import hollight FORALL_IN_INSERT)
-
-lemma EXISTS_IN_INSERT: "(EX xc::'q_44255.
-    xc : insert (xa::'q_44255) (xb::'q_44255 => bool) &
-    (x::'q_44255 => bool) xc) =
-(x xa | (EX xa::'q_44255. xa : xb & x xa))"
-  by (import hollight EXISTS_IN_INSERT)
-
-lemma CHOICE_DEF: "(x::'A => bool) ~= {} ==> Eps x : x"
-  by (import hollight CHOICE_DEF)
-
-lemma NOT_EQUAL_SETS: "((x::'A => bool) ~= (xa::'A => bool)) = (EX xb::'A. (xb : xa) = (xb ~: x))"
-  by (import hollight NOT_EQUAL_SETS)
-
-lemma EMPTY_NOT_UNIV: "(op ~=::('A::type => bool) => ('A::type => bool) => bool)
- ({}::'A::type => bool) (UNIV::'A::type => bool)"
-  by (import hollight EMPTY_NOT_UNIV)
-
-lemma EQ_UNIV: "(ALL x::'A. x : (s::'A => bool)) = (s = UNIV)"
-  by (import hollight EQ_UNIV)
-
-lemma SING_SUBSET: "({xa::'q_44493} <= (x::'q_44493 => bool)) = (xa : x)"
-  by (import hollight SING_SUBSET)
-
-lemma PSUBSET_UNIV: "((x::'A => bool) < UNIV) = (EX xa::'A. xa ~: x)"
-  by (import hollight PSUBSET_UNIV)
-
-lemma PSUBSET_ALT: "((x::'A => bool) < (xa::'A => bool)) =
-(x <= xa & (EX a::'A. a : xa & a ~: x))"
-  by (import hollight PSUBSET_ALT)
-
-lemma SUBSET_UNION: "(ALL (x::'A => bool) xa::'A => bool. x <= x Un xa) &
-(ALL (x::'A => bool) xa::'A => bool. x <= xa Un x)"
-  by (import hollight SUBSET_UNION)
-
-lemma UNION_EMPTY: "(ALL x::'A => bool. {} Un x = x) & (ALL x::'A => bool. x Un {} = x)"
-  by (import hollight UNION_EMPTY)
-
-lemma UNION_UNIV: "(ALL x::'A => bool. UNIV Un x = UNIV) &
-(ALL x::'A => bool. x Un UNIV = UNIV)"
-  by (import hollight UNION_UNIV)
-
-lemma INTER_SUBSET: "(ALL (x::'A => bool) xa::'A => bool. x Int xa <= x) &
-(ALL (x::'A => bool) xa::'A => bool. xa Int x <= x)"
-  by (import hollight INTER_SUBSET)
-
-lemma INTER_EMPTY: "(ALL x::'A => bool. {} Int x = {}) & (ALL x::'A => bool. x Int {} = {})"
-  by (import hollight INTER_EMPTY)
-
-lemma INTER_UNIV: "(ALL x::'A => bool. UNIV Int x = x) & (ALL x::'A => bool. x Int UNIV = x)"
-  by (import hollight INTER_UNIV)
-
-lemma IN_DISJOINT: "((x::'A => bool) Int (xa::'A => bool) = {}) =
-(~ (EX xb::'A. xb : x & xb : xa))"
-  by (import hollight IN_DISJOINT)
-
-lemma DISJOINT_SYM: "((x::'A => bool) Int (xa::'A => bool) = {}) = (xa Int x = {})"
-  by (import hollight DISJOINT_SYM)
-
-lemma DISJOINT_EMPTY: "{} Int (x::'A => bool) = {} & x Int {} = {}"
-  by (import hollight DISJOINT_EMPTY)
-
-lemma DISJOINT_EMPTY_REFL: "((x::'A => bool) = {}) = (x Int x = {})"
-  by (import hollight DISJOINT_EMPTY_REFL)
-
-lemma DISJOINT_UNION: "(((x::'A => bool) Un (xa::'A => bool)) Int (xb::'A => bool) = {}) =
-(x Int xb = {} & xa Int xb = {})"
-  by (import hollight DISJOINT_UNION)
-
-lemma DECOMPOSITION: "((x::'A) : (s::'A => bool)) = (EX t::'A => bool. s = insert x t & x ~: t)"
-  by (import hollight DECOMPOSITION)
-
-lemma SET_CASES: "(s::'A => bool) = {} | (EX (x::'A) t::'A => bool. s = insert x t & x ~: t)"
-  by (import hollight SET_CASES)
-
-lemma ABSORPTION: "((x::'A) : (xa::'A => bool)) = (insert x xa = xa)"
-  by (import hollight ABSORPTION)
-
-lemma INSERT_UNIV: "insert (x::'A) UNIV = UNIV"
-  by (import hollight INSERT_UNIV)
-
-lemma INSERT_UNION: "insert (x::'A) (s::'A => bool) Un (t::'A => bool) =
-(if x : t then s Un t else insert x (s Un t))"
-  by (import hollight INSERT_UNION)
-
-lemma DISJOINT_INSERT: "(insert (x::'A) (xa::'A => bool) Int (xb::'A => bool) = {}) =
-(xa Int xb = {} & x ~: xb)"
-  by (import hollight DISJOINT_INSERT)
-
-lemma INSERT_AC: "insert (x::'q_45764) (insert (y::'q_45764) (s::'q_45764 => bool)) =
-insert y (insert x s) &
-insert x (insert x s) = insert x s"
-  by (import hollight INSERT_AC)
-
-lemma INTER_ACI: "(p::'q_45831 => bool) Int (q::'q_45831 => bool) = q Int p &
-p Int q Int (r::'q_45831 => bool) = p Int (q Int r) &
-p Int (q Int r) = q Int (p Int r) & p Int p = p & p Int (p Int q) = p Int q"
-  by (import hollight INTER_ACI)
-
-lemma UNION_ACI: "(p::'q_45897 => bool) Un (q::'q_45897 => bool) = q Un p &
-p Un q Un (r::'q_45897 => bool) = p Un (q Un r) &
-p Un (q Un r) = q Un (p Un r) & p Un p = p & p Un (p Un q) = p Un q"
-  by (import hollight UNION_ACI)
-
-lemma DELETE_NON_ELEMENT: "((x::'A) ~: (xa::'A => bool)) = (xa - {x} = xa)"
-  by (import hollight DELETE_NON_ELEMENT)
-
-lemma IN_DELETE_EQ: "(((x::'A) : (s::'A => bool)) = ((x'::'A) : s)) =
-((x : s - {x'}) = (x' : s - {x}))"
-  by (import hollight IN_DELETE_EQ)
-
-lemma EMPTY_DELETE: "{} - {x::'A} = {}"
-  by (import hollight EMPTY_DELETE)
-
-lemma DELETE_DELETE: "(xa::'A => bool) - {x::'A} - {x} = xa - {x}"
-  by (import hollight DELETE_DELETE)
-
-lemma DELETE_COMM: "(xb::'A => bool) - {x::'A} - {xa::'A} = xb - {xa} - {x}"
-  by (import hollight DELETE_COMM)
-
-lemma DELETE_SUBSET: "(xa::'A => bool) - {x::'A} <= xa"
-  by (import hollight DELETE_SUBSET)
-
-lemma SUBSET_DELETE: "((xa::'A => bool) <= (xb::'A => bool) - {x::'A}) = (x ~: xa & xa <= xb)"
-  by (import hollight SUBSET_DELETE)
-
-lemma SUBSET_INSERT_DELETE: "((xa::'A => bool) <= insert (x::'A) (xb::'A => bool)) = (xa - {x} <= xb)"
-  by (import hollight SUBSET_INSERT_DELETE)
-
-lemma PSUBSET_INSERT_SUBSET: "((x::'A => bool) < (xa::'A => bool)) =
-(EX xb::'A. xb ~: x & insert xb x <= xa)"
-  by (import hollight PSUBSET_INSERT_SUBSET)
-
-lemma PSUBSET_MEMBER: "((x::'A => bool) < (xa::'A => bool)) =
-(x <= xa & (EX y::'A. y : xa & y ~: x))"
-  by (import hollight PSUBSET_MEMBER)
-
-lemma DELETE_INSERT: "insert (x::'A) (s::'A => bool) - {y::'A} =
-(if x = y then s - {y} else insert x (s - {y}))"
-  by (import hollight DELETE_INSERT)
-
-lemma DELETE_INTER: "((x::'A => bool) - {xb::'A}) Int (xa::'A => bool) = x Int xa - {xb}"
-  by (import hollight DELETE_INTER)
-
-lemma DISJOINT_DELETE_SYM: "(((x::'A => bool) - {xb::'A}) Int (xa::'A => bool) = {}) =
-((xa - {xb}) Int x = {})"
-  by (import hollight DISJOINT_DELETE_SYM)
-
-lemma FORALL_IN_UNIONS: "(ALL x::'q_46386.
-    x : Union (s::('q_46386 => bool) => bool) --> (P::'q_46386 => bool) x) =
-(ALL (t::'q_46386 => bool) x::'q_46386. t : s & x : t --> P x)"
-  by (import hollight FORALL_IN_UNIONS)
-
-lemma EXISTS_IN_UNIONS: "(EX x::'q_46428.
-    x : Union (s::('q_46428 => bool) => bool) & (P::'q_46428 => bool) x) =
-(EX (t::'q_46428 => bool) x::'q_46428. t : s & x : t & P x)"
-  by (import hollight EXISTS_IN_UNIONS)
-
-lemma EMPTY_UNIONS: "(Union (x::('q_46454 => bool) => bool) = {}) =
-(ALL xa::'q_46454 => bool. xa : x --> xa = {})"
-  by (import hollight EMPTY_UNIONS)
-
-lemma INTER_UNIONS: "(ALL (x::('q_46493 => bool) => bool) xa::'q_46493 => bool.
-    Union x Int xa =
-    Union
-     {u::'q_46493 => bool.
-      EX xb::'q_46493 => bool. xb : x & u = xb Int xa}) &
-(ALL (x::('q_46529 => bool) => bool) xa::'q_46529 => bool.
-    xa Int Union x =
-    Union
-     {u::'q_46529 => bool. EX xb::'q_46529 => bool. xb : x & u = xa Int xb})"
-  by (import hollight INTER_UNIONS)
-
-lemma UNIONS_SUBSET: "(Union (x::('q_46545 => bool) => bool) <= (xa::'q_46545 => bool)) =
-(ALL xb::'q_46545 => bool. xb : x --> xb <= xa)"
-  by (import hollight UNIONS_SUBSET)
-
-lemma IMAGE_CLAUSES: "(f::'q_46676 => 'q_46680) ` {} = {} &
-f ` insert (x::'q_46676) (s::'q_46676 => bool) = insert (f x) (f ` s)"
-  by (import hollight IMAGE_CLAUSES)
-
-lemma IMAGE_INTER_INJ: "(!!(xa::'q_46846) y::'q_46846.
-    (x::'q_46846 => 'q_46857) xa = x y ==> xa = y)
-==> x ` ((xa::'q_46846 => bool) Int (xb::'q_46846 => bool)) =
-    x ` xa Int x ` xb"
-  by (import hollight IMAGE_INTER_INJ)
-
-lemma IMAGE_DIFF_INJ: "(!!(xa::'q_46900) y::'q_46900.
-    (x::'q_46900 => 'q_46911) xa = x y ==> xa = y)
-==> x ` ((xa::'q_46900 => bool) - (xb::'q_46900 => bool)) = x ` xa - x ` xb"
-  by (import hollight IMAGE_DIFF_INJ)
-
-lemma IMAGE_DELETE_INJ: "(!!xa::'q_46958.
-    (x::'q_46958 => 'q_46957) xa = x (xb::'q_46958) ==> xa = xb)
-==> x ` ((xa::'q_46958 => bool) - {xb}) = x ` xa - {x xb}"
-  by (import hollight IMAGE_DELETE_INJ)
-
-lemma FORALL_IN_IMAGE: "(ALL xb::'q_47016.
-    xb : (x::'q_47017 => 'q_47016) ` (xa::'q_47017 => bool) -->
-    (P::'q_47016 => bool) xb) =
-(ALL xb::'q_47017. xb : xa --> P (x xb))"
-  by (import hollight FORALL_IN_IMAGE)
-
-lemma EXISTS_IN_IMAGE: "(EX xb::'q_47052.
-    xb : (x::'q_47053 => 'q_47052) ` (xa::'q_47053 => bool) &
-    (P::'q_47052 => bool) xb) =
-(EX xb::'q_47053. xb : xa & P (x xb))"
-  by (import hollight EXISTS_IN_IMAGE)
-
-lemma FORALL_SUBSET_IMAGE: "(ALL xc<=(xa::'q_47140 => 'q_47156) ` (xb::'q_47140 => bool).
-    (x::('q_47156 => bool) => bool) xc) =
-(ALL t<=xb. x (xa ` t))"
-  by (import hollight FORALL_SUBSET_IMAGE)
-
-lemma EXISTS_SUBSET_IMAGE: "(EX xc<=(xa::'q_47183 => 'q_47199) ` (xb::'q_47183 => bool).
-    (x::('q_47199 => bool) => bool) xc) =
-(EX t<=xb. x (xa ` t))"
-  by (import hollight EXISTS_SUBSET_IMAGE)
-
-lemma SIMPLE_IMAGE: "{u::'q_47262.
- EX xb::'q_47258.
-    xb : (xa::'q_47258 => bool) & u = (x::'q_47258 => 'q_47262) xb} =
-x ` xa"
-  by (import hollight SIMPLE_IMAGE)
-
-lemma SIMPLE_IMAGE_GEN: "{u::'q_47292.
- EX xa::'q_47305.
-    (P::'q_47305 => bool) xa & u = (x::'q_47305 => 'q_47292) xa} =
-x ` {u::'q_47305. EX x::'q_47305. P x & u = x}"
-  by (import hollight SIMPLE_IMAGE_GEN)
-
-lemma IMAGE_UNIONS: "(x::'q_47323 => 'q_47332) ` Union (xa::('q_47323 => bool) => bool) =
-Union (op ` x ` xa)"
-  by (import hollight IMAGE_UNIONS)
-
-lemma SURJECTIVE_IMAGE_EQ: "(ALL y::'q_47396.
-    y : (xa::'q_47396 => bool) -->
-    (EX x::'q_47400. (f::'q_47400 => 'q_47396) x = y)) &
-(ALL xb::'q_47400. (f xb : xa) = (xb : (x::'q_47400 => bool)))
-==> f ` x = xa"
-  by (import hollight SURJECTIVE_IMAGE_EQ)
-
-lemma EMPTY_GSPEC: "{u::'q_47425. Ex (SETSPEC u False)} = {}"
-  by (import hollight EMPTY_GSPEC)
-
-lemma SING_GSPEC: "(ALL x::'q_47454. {u::'q_47454. EX xa::'q_47454. xa = x & u = xa} = {x}) &
-(ALL x::'q_47480. {u::'q_47480. EX xa::'q_47480. x = xa & u = xa} = {x})"
-  by (import hollight SING_GSPEC)
-
-lemma IN_ELIM_PAIR_THM: "((xa::'q_47526, xb::'q_47525)
- : {xa::'q_47526 * 'q_47525.
-    EX (xb::'q_47526) y::'q_47525.
-       (x::'q_47526 => 'q_47525 => bool) xb y & xa = (xb, y)}) =
-x xa xb"
-  by (import hollight IN_ELIM_PAIR_THM)
-
-lemma SET_PAIR_THM: "{u::'q_47570 * 'q_47569.
- EX p::'q_47570 * 'q_47569. (x::'q_47570 * 'q_47569 => bool) p & u = p} =
-{u::'q_47570 * 'q_47569.
- EX (a::'q_47570) b::'q_47569. x (a, b) & u = (a, b)}"
-  by (import hollight SET_PAIR_THM)
-
-lemma FORALL_IN_GSPEC: "(ALL (P::'q_47618 => bool) f::'q_47618 => 'q_47739.
-    (ALL z::'q_47739.
-        z : {u::'q_47739. EX x::'q_47618. P x & u = f x} -->
-        (Q::'q_47739 => bool) z) =
-    (ALL x::'q_47618. P x --> Q (f x))) &
-(ALL (P::'q_47675 => 'q_47674 => bool) f::'q_47675 => 'q_47674 => 'q_47739.
-    (ALL z::'q_47739.
-        z : {u::'q_47739.
-             EX (x::'q_47675) y::'q_47674. P x y & u = f x y} -->
-        Q z) =
-    (ALL (x::'q_47675) y::'q_47674. P x y --> Q (f x y))) &
-(ALL (P::'q_47742 => 'q_47741 => 'q_47740 => bool)
-    f::'q_47742 => 'q_47741 => 'q_47740 => 'q_47739.
-    (ALL z::'q_47739.
-        z : {u::'q_47739.
-             EX (w::'q_47742) (x::'q_47741) y::'q_47740.
-                P w x y & u = f w x y} -->
-        Q z) =
-    (ALL (w::'q_47742) (x::'q_47741) y::'q_47740. P w x y --> Q (f w x y)))"
-  by (import hollight FORALL_IN_GSPEC)
-
-lemma EXISTS_IN_GSPEC: "(ALL (P::'q_47788 => bool) f::'q_47788 => 'q_47909.
-    (EX z::'q_47909.
-        z : {u::'q_47909. EX x::'q_47788. P x & u = f x} &
-        (Q::'q_47909 => bool) z) =
-    (EX x::'q_47788. P x & Q (f x))) &
-(ALL (P::'q_47845 => 'q_47844 => bool) f::'q_47845 => 'q_47844 => 'q_47909.
-    (EX z::'q_47909.
-        z : {u::'q_47909. EX (x::'q_47845) y::'q_47844. P x y & u = f x y} &
-        Q z) =
-    (EX (x::'q_47845) y::'q_47844. P x y & Q (f x y))) &
-(ALL (P::'q_47912 => 'q_47911 => 'q_47910 => bool)
-    f::'q_47912 => 'q_47911 => 'q_47910 => 'q_47909.
-    (EX z::'q_47909.
-        z : {u::'q_47909.
-             EX (w::'q_47912) (x::'q_47911) y::'q_47910.
-                P w x y & u = f w x y} &
-        Q z) =
-    (EX (w::'q_47912) (x::'q_47911) y::'q_47910. P w x y & Q (f w x y)))"
-  by (import hollight EXISTS_IN_GSPEC)
-
-lemma SET_PROVE_CASES: "(P::('A => bool) => bool) {} &
-(ALL (a::'A) s::'A => bool. a ~: s --> P (insert a s))
-==> P (x::'A => bool)"
-  by (import hollight SET_PROVE_CASES)
-
-lemma UNIONS_IMAGE: "Union ((f::'q_47989 => 'q_47973 => bool) ` (s::'q_47989 => bool)) =
-{u::'q_47973. EX y::'q_47973. (EX x::'q_47989. x : s & y : f x) & u = y}"
-  by (import hollight UNIONS_IMAGE)
-
-lemma INTERS_IMAGE: "Inter ((f::'q_48032 => 'q_48016 => bool) ` (s::'q_48032 => bool)) =
-{u::'q_48016. EX y::'q_48016. (ALL x::'q_48032. x : s --> y : f x) & u = y}"
-  by (import hollight INTERS_IMAGE)
-
-lemma UNIONS_GSPEC: "(ALL (P::'q_48085 => bool) f::'q_48085 => 'q_48071 => bool.
-    Union {u::'q_48071 => bool. EX x::'q_48085. P x & u = f x} =
-    {u::'q_48071.
-     EX a::'q_48071. (EX x::'q_48085. P x & a : f x) & u = a}) &
-(ALL (P::'q_48149 => 'q_48148 => bool)
-    f::'q_48149 => 'q_48148 => 'q_48129 => bool.
-    Union
-     {u::'q_48129 => bool.
-      EX (x::'q_48149) y::'q_48148. P x y & u = f x y} =
-    {u::'q_48129.
-     EX a::'q_48129.
-        (EX (x::'q_48149) y::'q_48148. P x y & a : f x y) & u = a}) &
-(ALL (P::'q_48223 => 'q_48222 => 'q_48221 => bool)
-    f::'q_48223 => 'q_48222 => 'q_48221 => 'q_48197 => bool.
-    Union
-     {u::'q_48197 => bool.
-      EX (x::'q_48223) (y::'q_48222) z::'q_48221. P x y z & u = f x y z} =
-    {u::'q_48197.
-     EX a::'q_48197.
-        (EX (x::'q_48223) (y::'q_48222) z::'q_48221.
-            P x y z & a : f x y z) &
-        u = a})"
-  by (import hollight UNIONS_GSPEC)
-
-lemma INTERS_GSPEC: "(ALL (P::'q_48276 => bool) f::'q_48276 => 'q_48262 => bool.
-    Inter {u::'q_48262 => bool. EX x::'q_48276. P x & u = f x} =
-    {u::'q_48262.
-     EX a::'q_48262. (ALL x::'q_48276. P x --> a : f x) & u = a}) &
-(ALL (P::'q_48340 => 'q_48339 => bool)
-    f::'q_48340 => 'q_48339 => 'q_48320 => bool.
-    Inter
-     {u::'q_48320 => bool.
-      EX (x::'q_48340) y::'q_48339. P x y & u = f x y} =
-    {u::'q_48320.
-     EX a::'q_48320.
-        (ALL (x::'q_48340) y::'q_48339. P x y --> a : f x y) & u = a}) &
-(ALL (P::'q_48414 => 'q_48413 => 'q_48412 => bool)
-    f::'q_48414 => 'q_48413 => 'q_48412 => 'q_48388 => bool.
-    Inter
-     {u::'q_48388 => bool.
-      EX (x::'q_48414) (y::'q_48413) z::'q_48412. P x y z & u = f x y z} =
-    {u::'q_48388.
-     EX a::'q_48388.
-        (ALL (x::'q_48414) (y::'q_48413) z::'q_48412.
-            P x y z --> a : f x y z) &
-        u = a})"
-  by (import hollight INTERS_GSPEC)
-
-lemma DIFF_INTERS: "(x::'q_48451 => bool) - Inter (xa::('q_48451 => bool) => bool) =
-Union {u::'q_48451 => bool. EX xb::'q_48451 => bool. xb : xa & u = x - xb}"
-  by (import hollight DIFF_INTERS)
-
-lemma INTERS_UNIONS: "Inter (x::('q_48486 => bool) => bool) =
-UNIV -
-Union {u::'q_48486 => bool. EX t::'q_48486 => bool. t : x & u = UNIV - t}"
-  by (import hollight INTERS_UNIONS)
-
-lemma UNIONS_INTERS: "Union (s::('q_48521 => bool) => bool) =
-UNIV -
-Inter {u::'q_48521 => bool. EX t::'q_48521 => bool. t : s & u = UNIV - t}"
-  by (import hollight UNIONS_INTERS)
-
-lemma FINITE_SING: "finite {x::'q_48799}"
-  by (import hollight FINITE_SING)
-
-lemma FINITE_DELETE_IMP: "finite (s::'A => bool) ==> finite (s - {x::'A})"
-  by (import hollight FINITE_DELETE_IMP)
-
-lemma FINITE_DELETE: "finite ((s::'A => bool) - {x::'A}) = finite s"
-  by (import hollight FINITE_DELETE)
-
-lemma FINITE_FINITE_UNIONS: "finite (s::('q_48871 => bool) => bool)
-==> finite (Union s) = (ALL t::'q_48871 => bool. t : s --> finite t)"
-  by (import hollight FINITE_FINITE_UNIONS)
-
-lemma FINITE_IMAGE_EXPAND: "finite (s::'A => bool)
-==> finite
-     {u::'B. EX y::'B. (EX x::'A. x : s & y = (f::'A => 'B) x) & u = y}"
-  by (import hollight FINITE_IMAGE_EXPAND)
-
-lemma FINITE_IMAGE_INJ_GENERAL: "(ALL (x::'A) y::'A.
-    x : (s::'A => bool) & y : s & (f::'A => 'B) x = f y --> x = y) &
-finite (x::'B => bool)
-==> finite {u::'A. EX xa::'A. (xa : s & f xa : x) & u = xa}"
-  by (import hollight FINITE_IMAGE_INJ_GENERAL)
-
-lemma FINITE_FINITE_PREIMAGE_GENERAL: "finite (t::'B => bool) &
-(ALL y::'B.
-    y : t -->
-    finite
-     {u::'A. EX x::'A. (x : (s::'A => bool) & (f::'A => 'B) x = y) & u = x})
-==> finite {u::'A. EX x::'A. (x : s & f x : t) & u = x}"
-  by (import hollight FINITE_FINITE_PREIMAGE_GENERAL)
-
-lemma FINITE_FINITE_PREIMAGE: "finite (t::'B => bool) &
-(ALL y::'B. y : t --> finite {u::'A. EX x::'A. (f::'A => 'B) x = y & u = x})
-==> finite {u::'A. EX x::'A. f x : t & u = x}"
-  by (import hollight FINITE_FINITE_PREIMAGE)
-
-lemma FINITE_IMAGE_INJ_EQ: "(!!(x::'A) y::'A.
-    x : (s::'A => bool) & y : s & (f::'A => 'B) x = f y ==> x = y)
-==> finite (f ` s) = finite s"
-  by (import hollight FINITE_IMAGE_INJ_EQ)
-
-lemma FINITE_IMAGE_INJ: "(ALL (x::'A) y::'A. (f::'A => 'B) x = f y --> x = y) &
-finite (A::'B => bool)
-==> finite {u::'A. EX x::'A. f x : A & u = x}"
-  by (import hollight FINITE_IMAGE_INJ)
-
-lemma INFINITE_IMAGE_INJ: "[| !!(x::'A) y::'A. (f::'A => 'B) x = f y ==> x = y;
-   infinite (s::'A => bool) |]
-==> infinite (f ` s)"
-  by (import hollight INFINITE_IMAGE_INJ)
-
-lemma FINITE_SUBSET_IMAGE: "(finite (t::'B => bool) & t <= (f::'A => 'B) ` (s::'A => bool)) =
-(EX x::'A => bool. finite x & x <= s & t = f ` x)"
-  by (import hollight FINITE_SUBSET_IMAGE)
-
-lemma EXISTS_FINITE_SUBSET_IMAGE: "(EX xc::'q_49755 => bool.
-    finite xc &
-    xc <= (xa::'q_49735 => 'q_49755) ` (xb::'q_49735 => bool) &
-    (x::('q_49755 => bool) => bool) xc) =
-(EX xc::'q_49735 => bool. finite xc & xc <= xb & x (xa ` xc))"
-  by (import hollight EXISTS_FINITE_SUBSET_IMAGE)
-
-lemma FINITE_SUBSET_IMAGE_IMP: "finite (t::'B => bool) & t <= (f::'A => 'B) ` (s::'A => bool)
-==> EX s'::'A => bool. finite s' & s' <= s & t <= f ` s'"
-  by (import hollight FINITE_SUBSET_IMAGE_IMP)
-
-definition
-  FINREC :: "('A => 'B => 'B) => 'B => ('A => bool) => 'B => nat => bool"  where
-  "FINREC ==
-SOME FINREC::('A => 'B => 'B) => 'B => ('A => bool) => 'B => nat => bool.
-   (ALL (f::'A => 'B => 'B) (s::'A => bool) (a::'B) b::'B.
-       FINREC f b s a (0::nat) = (s = {} & a = b)) &
-   (ALL (b::'B) (s::'A => bool) (n::nat) (a::'B) f::'A => 'B => 'B.
-       FINREC f b s a (Suc n) =
-       (EX (x::'A) c::'B. x : s & FINREC f b (s - {x}) c n & a = f x c))"
-
-lemma DEF_FINREC: "FINREC =
-(SOME FINREC::('A => 'B => 'B) => 'B => ('A => bool) => 'B => nat => bool.
-    (ALL (f::'A => 'B => 'B) (s::'A => bool) (a::'B) b::'B.
-        FINREC f b s a (0::nat) = (s = {} & a = b)) &
-    (ALL (b::'B) (s::'A => bool) (n::nat) (a::'B) f::'A => 'B => 'B.
-        FINREC f b s a (Suc n) =
-        (EX (x::'A) c::'B. x : s & FINREC f b (s - {x}) c n & a = f x c)))"
-  by (import hollight DEF_FINREC)
-
-lemma FINREC_1_LEMMA: "FINREC (x::'q_49919 => 'q_49918 => 'q_49918) (xa::'q_49918)
- (xb::'q_49919 => bool) (xc::'q_49918) (Suc (0::nat)) =
-(EX xd::'q_49919. xb = {xd} & xc = x xd xa)"
-  by (import hollight FINREC_1_LEMMA)
-
-lemma FINREC_SUC_LEMMA: "[| !!(x::'A) (y::'A) s::'B.
-      x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s);
-   FINREC f (b::'B) (s::'A => bool) (z::'B) (Suc (n::nat)); (x::'A) : s |]
-==> EX w::'B. FINREC f b (s - {x}) w n & z = f x w"
-  by (import hollight FINREC_SUC_LEMMA)
-
-lemma FINREC_UNIQUE_LEMMA: "[| !!(x::'A) (y::'A) s::'B.
-      x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s);
-   FINREC f (b::'B) (s::'A => bool) (a1::'B) (n1::nat) &
-   FINREC f b s (a2::'B) (n2::nat) |]
-==> a1 = a2 & n1 = n2"
-  by (import hollight FINREC_UNIQUE_LEMMA)
-
-lemma FINREC_EXISTS_LEMMA: "finite (s::'A => bool)
-==> EX a::'B. Ex (FINREC (f::'A => 'B => 'B) (b::'B) s a)"
-  by (import hollight FINREC_EXISTS_LEMMA)
-
-lemma FINREC_FUN_LEMMA: "(ALL s::'A.
-    (P::'A => bool) s -->
-    (EX a::'B. Ex ((R::'A => 'B => 'C => bool) s a))) &
-(ALL (n1::'C) (n2::'C) (s::'A) (a1::'B) a2::'B.
-    R s a1 n1 & R s a2 n2 --> a1 = a2 & n1 = n2)
-==> EX x::'A => 'B. ALL (s::'A) a::'B. P s --> Ex (R s a) = (x s = a)"
-  by (import hollight FINREC_FUN_LEMMA)
-
-lemma FINREC_FUN: "(!!(x::'A) (y::'A) s::'B.
-    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
-==> EX g::('A => bool) => 'B.
-       g {} = (b::'B) &
-       (ALL (s::'A => bool) x::'A.
-           finite s & x : s --> g s = f x (g (s - {x})))"
-  by (import hollight FINREC_FUN)
-
-lemma SET_RECURSION_LEMMA: "(!!(x::'A) (y::'A) s::'B.
-    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
-==> EX g::('A => bool) => 'B.
-       g {} = (b::'B) &
-       (ALL (x::'A) s::'A => bool.
-           finite s --> g (insert x s) = (if x : s then g s else f x (g s)))"
-  by (import hollight SET_RECURSION_LEMMA)
-
-definition
-  ITSET :: "('q_50575 => 'q_50574 => 'q_50574)
-=> ('q_50575 => bool) => 'q_50574 => 'q_50574"  where
-  "ITSET ==
-%(u::'q_50575 => 'q_50574 => 'q_50574) (ua::'q_50575 => bool) ub::'q_50574.
-   (SOME g::('q_50575 => bool) => 'q_50574.
-       g {} = ub &
-       (ALL (x::'q_50575) s::'q_50575 => bool.
-           finite s -->
-           g (insert x s) = (if x : s then g s else u x (g s))))
-    ua"
-
-lemma DEF_ITSET: "ITSET =
-(%(u::'q_50575 => 'q_50574 => 'q_50574) (ua::'q_50575 => bool) ub::'q_50574.
-    (SOME g::('q_50575 => bool) => 'q_50574.
-        g {} = ub &
-        (ALL (x::'q_50575) s::'q_50575 => bool.
-            finite s -->
-            g (insert x s) = (if x : s then g s else u x (g s))))
-     ua)"
-  by (import hollight DEF_ITSET)
-
-lemma FINITE_RECURSION: "(!!(x::'A) (y::'A) s::'B.
-    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
-==> ITSET f {} (b::'B) = b &
-    (ALL (x::'A) xa::'A => bool.
-        finite xa -->
-        ITSET f (insert x xa) b =
-        (if x : xa then ITSET f xa b else f x (ITSET f xa b)))"
-  by (import hollight FINITE_RECURSION)
-
-lemma FINITE_RECURSION_DELETE: "(!!(x::'A) (y::'A) s::'B.
-    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
-==> ITSET f {} (b::'B) = b &
-    (ALL (x::'A) s::'A => bool.
-        finite s -->
-        ITSET f s b =
-        (if x : s then f x (ITSET f (s - {x}) b) else ITSET f (s - {x}) b))"
-  by (import hollight FINITE_RECURSION_DELETE)
-
-lemma ITSET_EQ: "finite (x::'q_50880 => bool) &
-(ALL xc::'q_50880.
-    xc : x -->
-    (xa::'q_50880 => 'q_50881 => 'q_50881) xc =
-    (xb::'q_50880 => 'q_50881 => 'q_50881) xc) &
-(ALL (x::'q_50880) (y::'q_50880) s::'q_50881.
-    x ~= y --> xa x (xa y s) = xa y (xa x s)) &
-(ALL (x::'q_50880) (y::'q_50880) s::'q_50881.
-    x ~= y --> xb x (xb y s) = xb y (xb x s))
-==> ITSET xa x (xc::'q_50881) = ITSET xb x xc"
-  by (import hollight ITSET_EQ)
-
-lemma SUBSET_RESTRICT: "{u::'q_50914.
- EX xb::'q_50914.
-    (xb : (x::'q_50914 => bool) & (xa::'q_50914 => bool) xb) & u = xb}
-<= x"
-  by (import hollight SUBSET_RESTRICT)
-
-lemma FINITE_RESTRICT: "finite (s::'A => bool)
-==> finite {u::'A. EX x::'A. (x : s & (P::'A => bool) x) & u = x}"
-  by (import hollight FINITE_RESTRICT)
-
-definition
-  CARD :: "('q_50968 => bool) => nat"  where
-  "CARD == %u::'q_50968 => bool. ITSET (%x::'q_50968. Suc) u (0::nat)"
-
-lemma DEF_CARD: "CARD = (%u::'q_50968 => bool. ITSET (%x::'q_50968. Suc) u (0::nat))"
-  by (import hollight DEF_CARD)
-
-lemma CARD_CLAUSES: "CARD {} = (0::nat) &
-(ALL (x::'A::type) s::'A::type => bool.
-    finite s -->
-    CARD (insert x s) = (if x : s then CARD s else Suc (CARD s)))"
-  by (import hollight CARD_CLAUSES)
-
-lemma CARD_UNION: "finite (x::'A => bool) & finite (xa::'A => bool) & x Int xa = {}
-==> CARD (x Un xa) = CARD x + CARD xa"
-  by (import hollight CARD_UNION)
-
-lemma CARD_DELETE: "finite (s::'A => bool)
-==> CARD (s - {x::'A}) = (if x : s then CARD s - (1::nat) else CARD s)"
-  by (import hollight CARD_DELETE)
-
-lemma CARD_UNION_EQ: "finite (u::'q_51213 => bool) &
-(s::'q_51213 => bool) Int (t::'q_51213 => bool) = {} & s Un t = u
-==> CARD s + CARD t = CARD u"
-  by (import hollight CARD_UNION_EQ)
-
-lemma CARD_DIFF: "finite (s::'q_51270 => bool) & (t::'q_51270 => bool) <= s
-==> CARD (s - t) = CARD s - CARD t"
-  by (import hollight CARD_DIFF)
-
-lemma CARD_EQ_0: "finite (s::'q_51308 => bool) ==> (CARD s = (0::nat)) = (s = {})"
-  by (import hollight CARD_EQ_0)
-
-lemma FINITE_INDUCT_DELETE: "[| (P::('A => bool) => bool) {} &
-   (ALL s::'A => bool.
-       finite s & s ~= {} --> (EX x::'A. x : s & (P (s - {x}) --> P s)));
-   finite (s::'A => bool) |]
-==> P s"
-  by (import hollight FINITE_INDUCT_DELETE)
-
-definition
-  HAS_SIZE :: "('q_51427 => bool) => nat => bool"  where
-  "HAS_SIZE == %(u::'q_51427 => bool) ua::nat. finite u & CARD u = ua"
-
-lemma DEF_HAS_SIZE: "HAS_SIZE = (%(u::'q_51427 => bool) ua::nat. finite u & CARD u = ua)"
-  by (import hollight DEF_HAS_SIZE)
-
-lemma HAS_SIZE_CARD: "HAS_SIZE (x::'q_51446 => bool) (xa::nat) ==> CARD x = xa"
-  by (import hollight HAS_SIZE_CARD)
-
-lemma HAS_SIZE_0: "HAS_SIZE (s::'A => bool) (0::nat) = (s = {})"
-  by (import hollight HAS_SIZE_0)
-
-lemma HAS_SIZE_SUC: "HAS_SIZE (s::'A => bool) (Suc (n::nat)) =
-(s ~= {} & (ALL x::'A. x : s --> HAS_SIZE (s - {x}) n))"
-  by (import hollight HAS_SIZE_SUC)
-
-lemma HAS_SIZE_UNION: "HAS_SIZE (x::'q_51584 => bool) (xb::nat) &
-HAS_SIZE (xa::'q_51584 => bool) (xc::nat) & x Int xa = {}
-==> HAS_SIZE (x Un xa) (xb + xc)"
-  by (import hollight HAS_SIZE_UNION)
-
-lemma HAS_SIZE_DIFF: "HAS_SIZE (x::'q_51620 => bool) (xb::nat) &
-HAS_SIZE (xa::'q_51620 => bool) (xc::nat) & xa <= x
-==> HAS_SIZE (x - xa) (xb - xc)"
-  by (import hollight HAS_SIZE_DIFF)
-
-lemma HAS_SIZE_UNIONS: "HAS_SIZE (x::'A => bool) (xb::nat) &
-(ALL xb::'A. xb : x --> HAS_SIZE ((xa::'A => 'B => bool) xb) (xc::nat)) &
-(ALL (xb::'A) y::'A. xb : x & y : x & xb ~= y --> xa xb Int xa y = {})
-==> HAS_SIZE (Union {u::'B => bool. EX xb::'A. xb : x & u = xa xb})
-     (xb * xc)"
-  by (import hollight HAS_SIZE_UNIONS)
-
-lemma FINITE_HAS_SIZE: "finite (x::'q_51824 => bool) = HAS_SIZE x (CARD x)"
-  by (import hollight FINITE_HAS_SIZE)
-
-lemma HAS_SIZE_CLAUSES: "HAS_SIZE (s::'q_51886 => bool) (0::nat) = (s = {}) &
-HAS_SIZE s (Suc (n::nat)) =
-(EX (a::'q_51886) t::'q_51886 => bool.
-    HAS_SIZE t n & a ~: t & s = insert a t)"
-  by (import hollight HAS_SIZE_CLAUSES)
-
-lemma CARD_SUBSET_EQ: "finite (b::'A => bool) & (a::'A => bool) <= b & CARD a = CARD b ==> a = b"
-  by (import hollight CARD_SUBSET_EQ)
-
-lemma CARD_SUBSET: "(a::'A => bool) <= (b::'A => bool) & finite b ==> CARD a <= CARD b"
-  by (import hollight CARD_SUBSET)
-
-lemma CARD_SUBSET_LE: "finite (b::'A => bool) & (a::'A => bool) <= b & CARD b <= CARD a ==> a = b"
-  by (import hollight CARD_SUBSET_LE)
-
-lemma SUBSET_CARD_EQ: "finite (t::'q_52197 => bool) & (s::'q_52197 => bool) <= t
-==> (CARD s = CARD t) = (s = t)"
-  by (import hollight SUBSET_CARD_EQ)
-
-lemma CARD_PSUBSET: "(a::'A => bool) < (b::'A => bool) & finite b ==> CARD a < CARD b"
-  by (import hollight CARD_PSUBSET)
-
-lemma CARD_UNION_LE: "finite (s::'A => bool) & finite (t::'A => bool)
-==> CARD (s Un t) <= CARD s + CARD t"
-  by (import hollight CARD_UNION_LE)
-
-lemma CARD_UNIONS_LE: "HAS_SIZE (x::'A => bool) (xb::nat) &
-(ALL xb::'A.
-    xb : x -->
-    finite ((xa::'A => 'B => bool) xb) & CARD (xa xb) <= (xc::nat))
-==> CARD (Union {u::'B => bool. EX xb::'A. xb : x & u = xa xb}) <= xb * xc"
-  by (import hollight CARD_UNIONS_LE)
-
-lemma CARD_UNION_GEN: "finite (s::'q_52620 => bool) & finite (t::'q_52620 => bool)
-==> CARD (s Un t) = CARD s + CARD t - CARD (s Int t)"
-  by (import hollight CARD_UNION_GEN)
-
-lemma CARD_UNION_OVERLAP_EQ: "finite (s::'q_52701 => bool) & finite (t::'q_52701 => bool)
-==> (CARD (s Un t) = CARD s + CARD t) = (s Int t = {})"
-  by (import hollight CARD_UNION_OVERLAP_EQ)
-
-lemma CARD_UNION_OVERLAP: "finite (x::'q_52743 => bool) &
-finite (xa::'q_52743 => bool) & CARD (x Un xa) < CARD x + CARD xa
-==> x Int xa ~= {}"
-  by (import hollight CARD_UNION_OVERLAP)
-
-lemma CARD_IMAGE_INJ: "(ALL (xa::'A) y::'A.
-    xa : (x::'A => bool) & y : x & (f::'A => 'B) xa = f y --> xa = y) &
-finite x
-==> CARD (f ` x) = CARD x"
-  by (import hollight CARD_IMAGE_INJ)
-
-lemma HAS_SIZE_IMAGE_INJ: "(ALL (xb::'A) y::'A.
-    xb : (xa::'A => bool) & y : xa & (x::'A => 'B) xb = x y --> xb = y) &
-HAS_SIZE xa (xb::nat)
-==> HAS_SIZE (x ` xa) xb"
-  by (import hollight HAS_SIZE_IMAGE_INJ)
-
-lemma CARD_IMAGE_LE: "finite (s::'A => bool) ==> CARD ((f::'A => 'B) ` s) <= CARD s"
-  by (import hollight CARD_IMAGE_LE)
-
-lemma CARD_IMAGE_INJ_EQ: "finite (s::'A => bool) &
-(ALL x::'A. x : s --> (f::'A => 'B) x : (t::'B => bool)) &
-(ALL y::'B. y : t --> (EX! x::'A. x : s & f x = y))
-==> CARD t = CARD s"
-  by (import hollight CARD_IMAGE_INJ_EQ)
-
-lemma CARD_SUBSET_IMAGE: "finite (t::'q_52977 => bool) &
-(s::'q_52984 => bool) <= (f::'q_52977 => 'q_52984) ` t
-==> CARD s <= CARD t"
-  by (import hollight CARD_SUBSET_IMAGE)
-
-lemma HAS_SIZE_IMAGE_INJ_EQ: "(!!(x::'q_53049) y::'q_53049.
-    x : (s::'q_53049 => bool) & y : s & (f::'q_53049 => 'q_53044) x = f y
-    ==> x = y)
-==> HAS_SIZE (f ` s) (n::nat) = HAS_SIZE s n"
-  by (import hollight HAS_SIZE_IMAGE_INJ_EQ)
-
-lemma CHOOSE_SUBSET_STRONG: "(finite (s::'A => bool) ==> (n::nat) <= CARD s) ==> EX t<=s. HAS_SIZE t n"
-  by (import hollight CHOOSE_SUBSET_STRONG)
-
-lemma CHOOSE_SUBSET: "[| finite (s::'A => bool); (n::nat) <= CARD s |] ==> EX t<=s. HAS_SIZE t n"
-  by (import hollight CHOOSE_SUBSET)
-
-lemma HAS_SIZE_PRODUCT_DEPENDENT: "HAS_SIZE (x::'A => bool) (xa::nat) &
-(ALL xa::'A. xa : x --> HAS_SIZE ((xb::'A => 'B => bool) xa) (xc::nat))
-==> HAS_SIZE
-     {u::'A * 'B. EX (xa::'A) y::'B. (xa : x & y : xb xa) & u = (xa, y)}
-     (xa * xc)"
-  by (import hollight HAS_SIZE_PRODUCT_DEPENDENT)
-
-lemma FINITE_PRODUCT_DEPENDENT: "finite (s::'A => bool) &
-(ALL x::'A. x : s --> finite ((t::'A => 'B => bool) x))
-==> finite
-     {u::'C.
-      EX (x::'A) y::'B. (x : s & y : t x) & u = (f::'A => 'B => 'C) x y}"
-  by (import hollight FINITE_PRODUCT_DEPENDENT)
-
-lemma FINITE_PRODUCT: "finite (x::'A => bool) & finite (xa::'B => bool)
-==> finite {u::'A * 'B. EX (xb::'A) y::'B. (xb : x & y : xa) & u = (xb, y)}"
-  by (import hollight FINITE_PRODUCT)
-
-lemma CARD_PRODUCT: "finite (s::'A => bool) & finite (t::'B => bool)
-==> CARD {u::'A * 'B. EX (x::'A) y::'B. (x : s & y : t) & u = (x, y)} =
-    CARD s * CARD t"
-  by (import hollight CARD_PRODUCT)
-
-lemma HAS_SIZE_PRODUCT: "HAS_SIZE (x::'A => bool) (xa::nat) & HAS_SIZE (xb::'B => bool) (xc::nat)
-==> HAS_SIZE
-     {u::'A * 'B. EX (xa::'A) y::'B. (xa : x & y : xb) & u = (xa, y)}
-     (xa * xc)"
-  by (import hollight HAS_SIZE_PRODUCT)
-
-definition
-  CROSS :: "('q_53759 => bool) => ('q_53758 => bool) => 'q_53759 * 'q_53758 => bool"  where
-  "CROSS ==
-%(u::'q_53759 => bool) ua::'q_53758 => bool.
-   {ub::'q_53759 * 'q_53758.
-    EX (x::'q_53759) y::'q_53758. (x : u & y : ua) & ub = (x, y)}"
-
-lemma DEF_CROSS: "CROSS =
-(%(u::'q_53759 => bool) ua::'q_53758 => bool.
-    {ub::'q_53759 * 'q_53758.
-     EX (x::'q_53759) y::'q_53758. (x : u & y : ua) & ub = (x, y)})"
-  by (import hollight DEF_CROSS)
-
-lemma IN_CROSS: "((x::'q_53795, xa::'q_53798)
- : CROSS (xb::'q_53795 => bool) (xc::'q_53798 => bool)) =
-(x : xb & xa : xc)"
-  by (import hollight IN_CROSS)
-
-lemma HAS_SIZE_CROSS: "HAS_SIZE (x::'q_53823 => bool) (xb::nat) &
-HAS_SIZE (xa::'q_53826 => bool) (xc::nat)
-==> HAS_SIZE (CROSS x xa) (xb * xc)"
-  by (import hollight HAS_SIZE_CROSS)
-
-lemma FINITE_CROSS: "finite (x::'q_53851 => bool) & finite (xa::'q_53853 => bool)
-==> finite (CROSS x xa)"
-  by (import hollight FINITE_CROSS)
-
-lemma CARD_CROSS: "finite (x::'q_53874 => bool) & finite (xa::'q_53876 => bool)
-==> CARD (CROSS x xa) = CARD x * CARD xa"
-  by (import hollight CARD_CROSS)
-
-lemma CROSS_EQ_EMPTY: "(CROSS (x::'q_53917 => bool) (xa::'q_53921 => bool) = {}) =
-(x = {} | xa = {})"
-  by (import hollight CROSS_EQ_EMPTY)
-
-lemma HAS_SIZE_FUNSPACE: "HAS_SIZE (s::'A => bool) (m::nat) & HAS_SIZE (t::'B => bool) (n::nat)
-==> HAS_SIZE
-     {u::'A => 'B.
-      EX f::'A => 'B.
-         ((ALL x::'A. x : s --> f x : t) &
-          (ALL x::'A. x ~: s --> f x = (d::'B))) &
-         u = f}
-     (n ^ m)"
-  by (import hollight HAS_SIZE_FUNSPACE)
-
-lemma CARD_FUNSPACE: "finite (s::'q_54227 => bool) & finite (t::'q_54224 => bool)
-==> CARD
-     {u::'q_54227 => 'q_54224.
-      EX f::'q_54227 => 'q_54224.
-         ((ALL x::'q_54227. x : s --> f x : t) &
-          (ALL x::'q_54227. x ~: s --> f x = (d::'q_54224))) &
-         u = f} =
-    CARD t ^ CARD s"
-  by (import hollight CARD_FUNSPACE)
-
-lemma FINITE_FUNSPACE: "finite (s::'q_54293 => bool) & finite (t::'q_54290 => bool)
-==> finite
-     {u::'q_54293 => 'q_54290.
-      EX f::'q_54293 => 'q_54290.
-         ((ALL x::'q_54293. x : s --> f x : t) &
-          (ALL x::'q_54293. x ~: s --> f x = (d::'q_54290))) &
-         u = f}"
-  by (import hollight FINITE_FUNSPACE)
-
-lemma HAS_SIZE_POWERSET: "HAS_SIZE (s::'A => bool) (n::nat)
-==> HAS_SIZE {u::'A => bool. EX t<=s. u = t} ((2::nat) ^ n)"
-  by (import hollight HAS_SIZE_POWERSET)
-
-lemma CARD_POWERSET: "finite (s::'A => bool)
-==> CARD {u::'A => bool. EX t<=s. u = t} = (2::nat) ^ CARD s"
-  by (import hollight CARD_POWERSET)
-
-lemma FINITE_POWERSET: "finite (s::'A => bool) ==> finite {u::'A => bool. EX t<=s. u = t}"
-  by (import hollight FINITE_POWERSET)
-
-lemma FINITE_UNIONS: "finite (Union (s::('A => bool) => bool)) =
-(finite s & (ALL t::'A => bool. t : s --> finite t))"
-  by (import hollight FINITE_UNIONS)
-
-lemma POWERSET_CLAUSES: "{x::'q_54515 => bool. EX xa<={}. x = xa} = {{}} &
-(ALL (x::'A) xa::'A => bool.
-    {xb::'A => bool. EX xc<=insert x xa. xb = xc} =
-    {u::'A => bool. EX s<=xa. u = s} Un
-    insert x ` {u::'A => bool. EX s<=xa. u = s})"
-  by (import hollight POWERSET_CLAUSES)
-
-lemma HAS_SIZE_NUMSEG_LT: "HAS_SIZE {u. EX m<n. u = m} n"
-  by (import hollight HAS_SIZE_NUMSEG_LT)
-
-lemma CARD_NUMSEG_LT: "CARD {u. EX m<x. u = m} = x"
-  by (import hollight CARD_NUMSEG_LT)
-
-lemma FINITE_NUMSEG_LT: "finite {u::nat. EX m<x::nat. u = m}"
-  by (import hollight FINITE_NUMSEG_LT)
-
-lemma HAS_SIZE_NUMSEG_LE: "HAS_SIZE {xa. EX xb<=x. xa = xb} (x + 1)"
-  by (import hollight HAS_SIZE_NUMSEG_LE)
-
-lemma FINITE_NUMSEG_LE: "finite {u::nat. EX m<=x::nat. u = m}"
-  by (import hollight FINITE_NUMSEG_LE)
-
-lemma CARD_NUMSEG_LE: "CARD {u. EX m<=x. u = m} = x + 1"
-  by (import hollight CARD_NUMSEG_LE)
-
-lemma num_FINITE: "finite (s::nat => bool) = (EX a::nat. ALL x::nat. x : s --> x <= a)"
-  by (import hollight num_FINITE)
-
-lemma num_FINITE_AVOID: "finite (s::nat => bool) ==> EX a::nat. a ~: s"
-  by (import hollight num_FINITE_AVOID)
-
-lemma FINITE_REAL_INTERVAL: "(ALL a. infinite {u. EX x. real_lt a x & u = x}) &
-(ALL a. infinite {u. EX x. real_le a x & u = x}) &
-(ALL b. infinite {u. EX x. real_lt x b & u = x}) &
-(ALL b. infinite {u. EX x. real_le x b & u = x}) &
-(ALL x xa.
-    finite {u. EX xb. (real_lt x xb & real_lt xb xa) & u = xb} =
-    real_le xa x) &
-(ALL a b.
-    finite {u. EX x. (real_le a x & real_lt x b) & u = x} = real_le b a) &
-(ALL a b.
-    finite {u. EX x. (real_lt a x & real_le x b) & u = x} = real_le b a) &
-(ALL a b.
-    finite {u. EX x. (real_le a x & real_le x b) & u = x} = real_le b a)"
-  by (import hollight FINITE_REAL_INTERVAL)
-
-lemma real_INFINITE: "(infinite::(hollight.real => bool) => bool) (UNIV::hollight.real => bool)"
-  by (import hollight real_INFINITE)
-
-lemma HAS_SIZE_INDEX: "HAS_SIZE (x::'A => bool) (n::nat)
-==> EX f::nat => 'A.
-       (ALL m<n. f m : x) &
-       (ALL xa::'A. xa : x --> (EX! m::nat. m < n & f m = xa))"
-  by (import hollight HAS_SIZE_INDEX)
-
-definition
-  pairwise :: "('q_55938 => 'q_55938 => bool) => ('q_55938 => bool) => bool"  where
-  "pairwise ==
-%(u::'q_55938 => 'q_55938 => bool) ua::'q_55938 => bool.
-   ALL (x::'q_55938) y::'q_55938. x : ua & y : ua & x ~= y --> u x y"
-
-lemma DEF_pairwise: "pairwise =
-(%(u::'q_55938 => 'q_55938 => bool) ua::'q_55938 => bool.
-    ALL (x::'q_55938) y::'q_55938. x : ua & y : ua & x ~= y --> u x y)"
-  by (import hollight DEF_pairwise)
-
-definition
-  PAIRWISE :: "('A => 'A => bool) => 'A list => bool"  where
-  "PAIRWISE ==
-SOME PAIRWISE::('A => 'A => bool) => 'A list => bool.
-   (ALL r::'A => 'A => bool. PAIRWISE r [] = True) &
-   (ALL (h::'A) (r::'A => 'A => bool) t::'A list.
-       PAIRWISE r (h # t) = (list_all (r h) t & PAIRWISE r t))"
-
-lemma DEF_PAIRWISE: "PAIRWISE =
-(SOME PAIRWISE::('A => 'A => bool) => 'A list => bool.
-    (ALL r::'A => 'A => bool. PAIRWISE r [] = True) &
-    (ALL (h::'A) (r::'A => 'A => bool) t::'A list.
-        PAIRWISE r (h # t) = (list_all (r h) t & PAIRWISE r t)))"
-  by (import hollight DEF_PAIRWISE)
-
-lemma PAIRWISE_EMPTY: "pairwise (x::'q_55973 => 'q_55973 => bool) {} = True"
-  by (import hollight PAIRWISE_EMPTY)
-
-lemma PAIRWISE_SING: "pairwise (x::'q_55991 => 'q_55991 => bool) {xa::'q_55991} = True"
-  by (import hollight PAIRWISE_SING)
-
-lemma PAIRWISE_MONO: "pairwise (x::'q_56011 => 'q_56011 => bool) (xa::'q_56011 => bool) &
-(xb::'q_56011 => bool) <= xa
-==> pairwise x xb"
-  by (import hollight PAIRWISE_MONO)
-
-lemma SURJECTIVE_IFF_INJECTIVE_GEN: "finite (s::'A => bool) &
-finite (t::'B => bool) & CARD s = CARD t & (f::'A => 'B) ` s <= t
-==> (ALL y::'B. y : t --> (EX x::'A. x : s & f x = y)) =
-    (ALL (x::'A) y::'A. x : s & y : s & f x = f y --> x = y)"
-  by (import hollight SURJECTIVE_IFF_INJECTIVE_GEN)
-
-lemma SURJECTIVE_IFF_INJECTIVE: "finite (x::'A => bool) & (xa::'A => 'A) ` x <= x
-==> (ALL y::'A. y : x --> (EX xb::'A. xb : x & xa xb = y)) =
-    (ALL (xb::'A) y::'A. xb : x & y : x & xa xb = xa y --> xb = y)"
-  by (import hollight SURJECTIVE_IFF_INJECTIVE)
-
-lemma IMAGE_IMP_INJECTIVE_GEN: "[| finite (s::'A => bool) &
-   CARD s = CARD (t::'B => bool) & (f::'A => 'B) ` s = t;
-   (x::'A) : s & (y::'A) : s & f x = f y |]
-==> x = y"
-  by (import hollight IMAGE_IMP_INJECTIVE_GEN)
-
-lemma IMAGE_IMP_INJECTIVE: "[| finite (s::'q_56387 => bool) & (f::'q_56387 => 'q_56387) ` s = s;
-   (x::'q_56387) : s & (y::'q_56387) : s & f x = f y |]
-==> x = y"
-  by (import hollight IMAGE_IMP_INJECTIVE)
-
-lemma CARD_LE_INJ: "finite (x::'A => bool) & finite (xa::'B => bool) & CARD x <= CARD xa
-==> EX f::'A => 'B.
-       f ` x <= xa &
-       (ALL (xa::'A) y::'A. xa : x & y : x & f xa = f y --> xa = y)"
-  by (import hollight CARD_LE_INJ)
-
-lemma FORALL_IN_CLAUSES: "(ALL x::'q_56493 => bool. (ALL xa::'q_56493. xa : {} --> x xa) = True) &
-(ALL (x::'q_56533 => bool) (xa::'q_56533) xb::'q_56533 => bool.
-    (ALL xc::'q_56533. xc : insert xa xb --> x xc) =
-    (x xa & (ALL xa::'q_56533. xa : xb --> x xa)))"
-  by (import hollight FORALL_IN_CLAUSES)
-
-lemma EXISTS_IN_CLAUSES: "(ALL x::'q_56553 => bool. (EX xa::'q_56553. xa : {} & x xa) = False) &
-(ALL (x::'q_56593 => bool) (xa::'q_56593) xb::'q_56593 => bool.
-    (EX xc::'q_56593. xc : insert xa xb & x xc) =
-    (x xa | (EX xa::'q_56593. xa : xb & x xa)))"
-  by (import hollight EXISTS_IN_CLAUSES)
-
-lemma SURJECTIVE_ON_RIGHT_INVERSE: "(ALL xb::'q_56650.
-    xb : (xa::'q_56650 => bool) -->
-    (EX xa::'q_56649.
-        xa : (s::'q_56649 => bool) & (x::'q_56649 => 'q_56650) xa = xb)) =
-(EX g::'q_56650 => 'q_56649.
-    ALL y::'q_56650. y : xa --> g y : s & x (g y) = y)"
-  by (import hollight SURJECTIVE_ON_RIGHT_INVERSE)
-
-lemma INJECTIVE_ON_LEFT_INVERSE: "(ALL (xb::'q_56743) y::'q_56743.
-    xb : (xa::'q_56743 => bool) &
-    y : xa & (x::'q_56743 => 'q_56746) xb = x y -->
-    xb = y) =
-(EX xb::'q_56746 => 'q_56743. ALL xc::'q_56743. xc : xa --> xb (x xc) = xc)"
-  by (import hollight INJECTIVE_ON_LEFT_INVERSE)
-
-lemma BIJECTIVE_ON_LEFT_RIGHT_INVERSE: "(!!x::'q_56878.
-    x : (s::'q_56878 => bool)
-    ==> (f::'q_56878 => 'q_56877) x : (t::'q_56877 => bool))
-==> ((ALL (x::'q_56878) y::'q_56878. x : s & y : s & f x = f y --> x = y) &
-     (ALL x::'q_56877. x : t --> (EX xa::'q_56878. xa : s & f xa = x))) =
-    (EX g::'q_56877 => 'q_56878.
-        (ALL y::'q_56877. y : t --> g y : s) &
-        (ALL y::'q_56877. y : t --> f (g y) = y) &
-        (ALL x::'q_56878. x : s --> g (f x) = x))"
-  by (import hollight BIJECTIVE_ON_LEFT_RIGHT_INVERSE)
-
-lemma SURJECTIVE_RIGHT_INVERSE: "(ALL y::'q_56902. EX x::'q_56905. (f::'q_56905 => 'q_56902) x = y) =
-(EX g::'q_56902 => 'q_56905. ALL y::'q_56902. f (g y) = y)"
-  by (import hollight SURJECTIVE_RIGHT_INVERSE)
-
-lemma INJECTIVE_LEFT_INVERSE: "(ALL (x::'q_56939) xa::'q_56939.
-    (f::'q_56939 => 'q_56942) x = f xa --> x = xa) =
-(EX g::'q_56942 => 'q_56939. ALL x::'q_56939. g (f x) = x)"
-  by (import hollight INJECTIVE_LEFT_INVERSE)
-
-lemma BIJECTIVE_LEFT_RIGHT_INVERSE: "((ALL (x::'A) y::'A. (f::'A => 'B) x = f y --> x = y) &
- (ALL y::'B. EX x::'A. f x = y)) =
-(EX g::'B => 'A. (ALL y::'B. f (g y) = y) & (ALL x::'A. g (f x) = x))"
-  by (import hollight BIJECTIVE_LEFT_RIGHT_INVERSE)
-
-lemma FUNCTION_FACTORS_RIGHT: "(ALL xb::'q_57046.
-    EX y::'q_57034.
-       (xa::'q_57034 => 'q_57047) y = (x::'q_57046 => 'q_57047) xb) =
-(EX xb::'q_57046 => 'q_57034. x = xa o xb)"
-  by (import hollight FUNCTION_FACTORS_RIGHT)
-
-lemma FUNCTION_FACTORS_LEFT: "(ALL (xb::'q_57119) y::'q_57119.
-    (xa::'q_57119 => 'q_57099) xb = xa y -->
-    (x::'q_57119 => 'q_57120) xb = x y) =
-(EX xb::'q_57099 => 'q_57120. x = xb o xa)"
-  by (import hollight FUNCTION_FACTORS_LEFT)
-
-lemma SURJECTIVE_FORALL_THM: "(ALL y::'B. EX x::'A. (f::'A => 'B) x = y) =
-(ALL P::'B => bool. (ALL x::'A. P (f x)) = All P)"
-  by (import hollight SURJECTIVE_FORALL_THM)
-
-lemma SURJECTIVE_EXISTS_THM: "(ALL y::'B. EX x::'A. (f::'A => 'B) x = y) =
-(ALL P::'B => bool. (EX x::'A. P (f x)) = Ex P)"
-  by (import hollight SURJECTIVE_EXISTS_THM)
-
-lemma SURJECTIVE_IMAGE_THM: "(ALL y::'B. EX x::'A. (f::'A => 'B) x = y) =
-(ALL x::'B => bool.
-    f ` {u::'A. EX xa::'A. x (f xa) & u = xa} =
-    {u::'B. EX xa::'B. x xa & u = xa})"
-  by (import hollight SURJECTIVE_IMAGE_THM)
-
-lemma IMAGE_INJECTIVE_IMAGE_OF_SUBSET: "EX x<=s::'A => bool.
-   (f::'A => 'B) ` s = f ` x &
-   (ALL (xa::'A) y::'A. xa : x & y : x & f xa = f y --> xa = y)"
-  by (import hollight IMAGE_INJECTIVE_IMAGE_OF_SUBSET)
-
-lemma INJECTIVE_ON_IMAGE: "(ALL (s::'A => bool) t::'A => bool.
-    s <= (u::'A => bool) & t <= u & (f::'A => 'B) ` s = f ` t --> s = t) =
-(ALL (x::'A) y::'A. x : u & y : u & f x = f y --> x = y)"
-  by (import hollight INJECTIVE_ON_IMAGE)
-
-lemma INJECTIVE_IMAGE: "(ALL (s::'A => bool) t::'A => bool. (f::'A => 'B) ` s = f ` t --> s = t) =
-(ALL (x::'A) y::'A. f x = f y --> x = y)"
-  by (import hollight INJECTIVE_IMAGE)
-
-lemma SURJECTIVE_ON_IMAGE: "(ALL t<=v::'B => bool. EX s<=u::'A => bool. (f::'A => 'B) ` s = t) =
-(ALL y::'B. y : v --> (EX x::'A. x : u & f x = y))"
-  by (import hollight SURJECTIVE_ON_IMAGE)
-
-lemma SURJECTIVE_IMAGE: "(ALL t::'B => bool. EX s::'A => bool. (f::'A => 'B) ` s = t) =
-(ALL y::'B. EX x::'A. f x = y)"
-  by (import hollight SURJECTIVE_IMAGE)
-
-lemma CARD_EQ_BIJECTION: "finite (s::'A => bool) & finite (t::'B => bool) & CARD s = CARD t
-==> EX f::'A => 'B.
-       (ALL x::'A. x : s --> f x : t) &
-       (ALL y::'B. y : t --> (EX x::'A. x : s & f x = y)) &
-       (ALL (x::'A) y::'A. x : s & y : s & f x = f y --> x = y)"
-  by (import hollight CARD_EQ_BIJECTION)
-
-lemma CARD_EQ_BIJECTIONS: "finite (s::'A => bool) & finite (t::'B => bool) & CARD s = CARD t
-==> EX (f::'A => 'B) g::'B => 'A.
-       (ALL x::'A. x : s --> f x : t & g (f x) = x) &
-       (ALL y::'B. y : t --> g y : s & f (g y) = y)"
-  by (import hollight CARD_EQ_BIJECTIONS)
-
-lemma BIJECTIONS_HAS_SIZE: "(ALL x::'A.
-    x : (s::'A => bool) -->
-    (f::'A => 'B) x : (t::'B => bool) & (g::'B => 'A) (f x) = x) &
-(ALL y::'B. y : t --> g y : s & f (g y) = y) & HAS_SIZE s (n::nat)
-==> HAS_SIZE t n"
-  by (import hollight BIJECTIONS_HAS_SIZE)
-
-lemma BIJECTIONS_HAS_SIZE_EQ: "(ALL x::'A.
-    x : (s::'A => bool) -->
-    (f::'A => 'B) x : (t::'B => bool) & (g::'B => 'A) (f x) = x) &
-(ALL y::'B. y : t --> g y : s & f (g y) = y)
-==> HAS_SIZE s (n::nat) = HAS_SIZE t n"
-  by (import hollight BIJECTIONS_HAS_SIZE_EQ)
-
-lemma BIJECTIONS_CARD_EQ: "(finite (s::'A => bool) | finite (t::'B => bool)) &
-(ALL x::'A. x : s --> (f::'A => 'B) x : t & (g::'B => 'A) (f x) = x) &
-(ALL y::'B. y : t --> g y : s & f (g y) = y)
-==> CARD s = CARD t"
-  by (import hollight BIJECTIONS_CARD_EQ)
-
-lemma WF_FINITE: "(ALL x::'A. ~ (u_556::'A => 'A => bool) x x) &
-(ALL (x::'A) (y::'A) z::'A. u_556 x y & u_556 y z --> u_556 x z) &
-(ALL x::'A. finite {u::'A. EX y::'A. u_556 y x & u = y})
-==> wfP u_556"
-  by (import hollight WF_FINITE)
-
-consts
-  "<=_c" :: "('q_58200 => bool) => ('q_58195 => bool) => bool" ("<='_c")
-
-defs
-  "<=_c_def": "<=_c ==
-%(u::'q_58200 => bool) ua::'q_58195 => bool.
-   EX f::'q_58200 => 'q_58195.
-      (ALL x::'q_58200. x : u --> f x : ua) &
-      (ALL (x::'q_58200) y::'q_58200. x : u & y : u & f x = f y --> x = y)"
-
-lemma DEF__lessthan__equal__c: "<=_c =
-(%(u::'q_58200 => bool) ua::'q_58195 => bool.
-    EX f::'q_58200 => 'q_58195.
-       (ALL x::'q_58200. x : u --> f x : ua) &
-       (ALL (x::'q_58200) y::'q_58200. x : u & y : u & f x = f y --> x = y))"
-  by (import hollight DEF__lessthan__equal__c)
-
-consts
-  "<_c" :: "('q_58212 => bool) => ('q_58213 => bool) => bool" ("<'_c")
-
-defs
-  "<_c_def": "<_c == %(u::'q_58212 => bool) ua::'q_58213 => bool. <=_c u ua & ~ <=_c ua u"
-
-lemma DEF__lessthan__c: "<_c = (%(u::'q_58212 => bool) ua::'q_58213 => bool. <=_c u ua & ~ <=_c ua u)"
-  by (import hollight DEF__lessthan__c)
-
-consts
-  "=_c" :: "('q_58264 => bool) => ('q_58261 => bool) => bool" ("='_c")
-
-defs
-  "=_c_def": "=_c ==
-%(u::'q_58264 => bool) ua::'q_58261 => bool.
-   EX f::'q_58264 => 'q_58261.
-      (ALL x::'q_58264. x : u --> f x : ua) &
-      (ALL y::'q_58261. y : ua --> (EX! x::'q_58264. x : u & f x = y))"
-
-lemma DEF__equal__c: "=_c =
-(%(u::'q_58264 => bool) ua::'q_58261 => bool.
-    EX f::'q_58264 => 'q_58261.
-       (ALL x::'q_58264. x : u --> f x : ua) &
-       (ALL y::'q_58261. y : ua --> (EX! x::'q_58264. x : u & f x = y)))"
-  by (import hollight DEF__equal__c)
-
-consts
-  ">=_c" :: "('q_58273 => bool) => ('q_58272 => bool) => bool" (">='_c")
-
-defs
-  ">=_c_def": ">=_c == %(u::'q_58273 => bool) ua::'q_58272 => bool. <=_c ua u"
-
-lemma DEF__greaterthan__equal__c: ">=_c = (%(u::'q_58273 => bool) ua::'q_58272 => bool. <=_c ua u)"
-  by (import hollight DEF__greaterthan__equal__c)
-
-consts
-  ">_c" :: "('q_58282 => bool) => ('q_58281 => bool) => bool" (">'_c")
-
-defs
-  ">_c_def": ">_c == %(u::'q_58282 => bool) ua::'q_58281 => bool. <_c ua u"
-
-lemma DEF__greaterthan__c: ">_c = (%(u::'q_58282 => bool) ua::'q_58281 => bool. <_c ua u)"
-  by (import hollight DEF__greaterthan__c)
-
-lemma LE_C: "<=_c (x::'q_58320 => bool) (xa::'q_58323 => bool) =
-(EX xb::'q_58323 => 'q_58320.
-    ALL xc::'q_58320. xc : x --> (EX x::'q_58323. x : xa & xb x = xc))"
-  by (import hollight LE_C)
-
-lemma GE_C: ">=_c (x::'q_58364 => bool) (xa::'q_58361 => bool) =
-(EX f::'q_58364 => 'q_58361.
-    ALL y::'q_58361. y : xa --> (EX xa::'q_58364. xa : x & y = f xa))"
-  by (import hollight GE_C)
-
-definition
-  COUNTABLE :: "('q_58372 => bool) => bool"  where
-  "(op ==::(('q_58372::type => bool) => bool)
-        => (('q_58372::type => bool) => bool) => prop)
- (COUNTABLE::('q_58372::type => bool) => bool)
- ((>=_c::(nat => bool) => ('q_58372::type => bool) => bool)
-   (UNIV::nat => bool))"
-
-lemma DEF_COUNTABLE: "(op =::(('q_58372::type => bool) => bool)
-       => (('q_58372::type => bool) => bool) => bool)
- (COUNTABLE::('q_58372::type => bool) => bool)
- ((>=_c::(nat => bool) => ('q_58372::type => bool) => bool)
-   (UNIV::nat => bool))"
-  by (import hollight DEF_COUNTABLE)
-
-lemma NUMSEG_COMBINE_R: "(x::nat) <= (xa::nat) + (1::nat) & xa <= (xb::nat)
-==> {x..xa} Un {xa + (1::nat)..xb} = {x..xb}"
-  by (import hollight NUMSEG_COMBINE_R)
-
-lemma NUMSEG_COMBINE_L: "(x::nat) <= (xa::nat) & xa <= (xb::nat) + (1::nat)
-==> {x..xa - (1::nat)} Un {xa..xb} = {x..xb}"
-  by (import hollight NUMSEG_COMBINE_L)
-
-lemma NUMSEG_LREC: "(x::nat) <= (xa::nat) ==> insert x {x + (1::nat)..xa} = {x..xa}"
-  by (import hollight NUMSEG_LREC)
-
-lemma NUMSEG_RREC: "(x::nat) <= (xa::nat) ==> insert xa {x..xa - (1::nat)} = {x..xa}"
-  by (import hollight NUMSEG_RREC)
-
-lemma IN_NUMSEG_0: "((x::nat) : {0::nat..xa::nat}) = (x <= xa)"
-  by (import hollight IN_NUMSEG_0)
-
-lemma NUMSEG_EMPTY: "({x::nat..xa::nat} = {}) = (xa < x)"
-  by (import hollight NUMSEG_EMPTY)
-
-lemma CARD_NUMSEG_LEMMA: "CARD {m..m + d} = d + 1"
-  by (import hollight CARD_NUMSEG_LEMMA)
-
-lemma CARD_NUMSEG: "CARD {m..n} = n + 1 - m"
-  by (import hollight CARD_NUMSEG)
-
-lemma HAS_SIZE_NUMSEG: "HAS_SIZE {x..xa} (xa + 1 - x)"
-  by (import hollight HAS_SIZE_NUMSEG)
-
-lemma CARD_NUMSEG_1: "CARD {1..x} = x"
-  by (import hollight CARD_NUMSEG_1)
-
-lemma HAS_SIZE_NUMSEG_1: "HAS_SIZE {1..x} x"
-  by (import hollight HAS_SIZE_NUMSEG_1)
-
-lemma NUMSEG_CLAUSES: "(ALL m::nat. {m..0::nat} = (if m = (0::nat) then {0::nat} else {})) &
-(ALL (m::nat) n::nat.
-    {m..Suc n} = (if m <= Suc n then insert (Suc n) {m..n} else {m..n}))"
-  by (import hollight NUMSEG_CLAUSES)
-
-lemma FINITE_INDEX_NUMSEG: "finite (s::'A => bool) =
-(EX f::nat => 'A.
-    (ALL (i::nat) j::nat.
-        i : {1::nat..CARD s} & j : {1::nat..CARD s} & f i = f j --> i = j) &
-    s = f ` {1::nat..CARD s})"
-  by (import hollight FINITE_INDEX_NUMSEG)
-
-lemma FINITE_INDEX_NUMBERS: "finite (s::'A => bool) =
-(EX (k::nat => bool) f::nat => 'A.
-    (ALL (i::nat) j::nat. i : k & j : k & f i = f j --> i = j) &
-    finite k & s = f ` k)"
-  by (import hollight FINITE_INDEX_NUMBERS)
-
-lemma DISJOINT_NUMSEG: "({x::nat..xa::nat} Int {xb::nat..xc::nat} = {}) =
-(xa < xb | xc < x | xa < x | xc < xb)"
-  by (import hollight DISJOINT_NUMSEG)
-
-lemma NUMSEG_ADD_SPLIT: "(x::nat) <= (xa::nat) + (1::nat)
-==> {x..xa + (xb::nat)} = {x..xa} Un {xa + (1::nat)..xa + xb}"
-  by (import hollight NUMSEG_ADD_SPLIT)
-
-lemma SUBSET_NUMSEG: "({m::nat..n::nat} <= {p::nat..q::nat}) = (n < m | p <= m & n <= q)"
-  by (import hollight SUBSET_NUMSEG)
-
-lemma NUMSEG_LE: "{u::nat. EX xa<=x::nat. u = xa} = {0::nat..x}"
-  by (import hollight NUMSEG_LE)
-
-lemma NUMSEG_LT: "{u::nat. EX x<n::nat. u = x} =
-(if n = (0::nat) then {} else {0::nat..n - (1::nat)})"
-  by (import hollight NUMSEG_LT)
-
-lemma TOPOLOGICAL_SORT: "[| (ALL (x::'A) y::'A.
-       (u_556::'A => 'A => bool) x y & u_556 y x --> x = y) &
-   (ALL (x::'A) (y::'A) z::'A. u_556 x y & u_556 y z --> u_556 x z);
-   HAS_SIZE (s::'A => bool) (n::nat) |]
-==> EX f::nat => 'A.
-       s = f ` {1::nat..n} &
-       (ALL (j::nat) k::nat.
-           j : {1::nat..n} & k : {1::nat..n} & j < k -->
-           ~ u_556 (f k) (f j))"
-  by (import hollight TOPOLOGICAL_SORT)
-
-lemma FINITE_INTSEG: "(ALL l r. finite {u. EX x. (int_le l x & int_le x r) & u = x}) &
-(ALL l r. finite {u. EX x. (int_le l x & int_lt x r) & u = x}) &
-(ALL l r. finite {u. EX x. (int_lt l x & int_le x r) & u = x}) &
-(ALL l r. finite {u. EX x. (int_lt l x & int_lt x r) & u = x})"
-  by (import hollight FINITE_INTSEG)
-
-definition
-  neutral :: "('q_59899 => 'q_59899 => 'q_59899) => 'q_59899"  where
-  "neutral ==
-%u::'q_59899 => 'q_59899 => 'q_59899.
-   SOME x::'q_59899. ALL y::'q_59899. u x y = y & u y x = y"
-
-lemma DEF_neutral: "neutral =
-(%u::'q_59899 => 'q_59899 => 'q_59899.
-    SOME x::'q_59899. ALL y::'q_59899. u x y = y & u y x = y)"
-  by (import hollight DEF_neutral)
-
-definition
-  monoidal :: "('A => 'A => 'A) => bool"  where
-  "monoidal ==
-%u::'A => 'A => 'A.
-   (ALL (x::'A) y::'A. u x y = u y x) &
-   (ALL (x::'A) (y::'A) z::'A. u x (u y z) = u (u x y) z) &
-   (ALL x::'A. u (neutral u) x = x)"
-
-lemma DEF_monoidal: "monoidal =
-(%u::'A => 'A => 'A.
-    (ALL (x::'A) y::'A. u x y = u y x) &
-    (ALL (x::'A) (y::'A) z::'A. u x (u y z) = u (u x y) z) &
-    (ALL x::'A. u (neutral u) x = x))"
-  by (import hollight DEF_monoidal)
-
-lemma MONOIDAL_AC: "monoidal (x::'q_60055 => 'q_60055 => 'q_60055)
-==> (ALL a::'q_60055. x (neutral x) a = a) &
-    (ALL a::'q_60055. x a (neutral x) = a) &
-    (ALL (a::'q_60055) b::'q_60055. x a b = x b a) &
-    (ALL (a::'q_60055) (b::'q_60055) c::'q_60055.
-        x (x a b) c = x a (x b c)) &
-    (ALL (a::'q_60055) (b::'q_60055) c::'q_60055. x a (x b c) = x b (x a c))"
-  by (import hollight MONOIDAL_AC)
-
-definition
-  support :: "('B => 'B => 'B) => ('A => 'B) => ('A => bool) => 'A => bool"  where
-  "support ==
-%(u::'B => 'B => 'B) (ua::'A => 'B) ub::'A => bool.
-   {uc::'A. EX x::'A. (x : ub & ua x ~= neutral u) & uc = x}"
-
-lemma DEF_support: "support =
-(%(u::'B => 'B => 'B) (ua::'A => 'B) ub::'A => bool.
-    {uc::'A. EX x::'A. (x : ub & ua x ~= neutral u) & uc = x})"
-  by (import hollight DEF_support)
-
-definition
-  iterate :: "('q_60113 => 'q_60113 => 'q_60113)
-=> ('A => bool) => ('A => 'q_60113) => 'q_60113"  where
-  "iterate ==
-%(u::'q_60113 => 'q_60113 => 'q_60113) (ua::'A => bool) ub::'A => 'q_60113.
-   if finite (support u ub ua)
-   then ITSET (%x::'A. u (ub x)) (support u ub ua) (neutral u)
-   else neutral u"
-
-lemma DEF_iterate: "iterate =
-(%(u::'q_60113 => 'q_60113 => 'q_60113) (ua::'A => bool) ub::'A => 'q_60113.
-    if finite (support u ub ua)
-    then ITSET (%x::'A. u (ub x)) (support u ub ua) (neutral u)
-    else neutral u)"
-  by (import hollight DEF_iterate)
-
-lemma IN_SUPPORT: "((xb::'q_60163)
- : support (x::'q_60160 => 'q_60160 => 'q_60160) (xa::'q_60163 => 'q_60160)
-    (xc::'q_60163 => bool)) =
-(xb : xc & xa xb ~= neutral x)"
-  by (import hollight IN_SUPPORT)
-
-lemma SUPPORT_SUPPORT: "support (x::'q_60185 => 'q_60185 => 'q_60185) (xa::'q_60196 => 'q_60185)
- (support x xa (xb::'q_60196 => bool)) =
-support x xa xb"
-  by (import hollight SUPPORT_SUPPORT)
-
-lemma SUPPORT_EMPTY: "(ALL xc::'q_60235.
-    xc : (xb::'q_60235 => bool) -->
-    (xa::'q_60235 => 'q_60221) xc =
-    neutral (x::'q_60221 => 'q_60221 => 'q_60221)) =
-(support x xa xb = {})"
-  by (import hollight SUPPORT_EMPTY)
-
-lemma SUPPORT_SUBSET: "support (x::'q_60255 => 'q_60255 => 'q_60255) (xa::'q_60256 => 'q_60255)
- (xb::'q_60256 => bool)
-<= xb"
-  by (import hollight SUPPORT_SUBSET)
-
-lemma FINITE_SUPPORT: "finite (s::'q_60273 => bool)
-==> finite
-     (support (u::'q_60279 => 'q_60279 => 'q_60279)
-       (f::'q_60273 => 'q_60279) s)"
-  by (import hollight FINITE_SUPPORT)
-
-lemma SUPPORT_CLAUSES: "(ALL x::'q_60297 => 'q_60530.
-    support (u_4371::'q_60530 => 'q_60530 => 'q_60530) x {} = {}) &
-(ALL (x::'q_60345 => 'q_60530) (xa::'q_60345) xb::'q_60345 => bool.
-    support u_4371 x (insert xa xb) =
-    (if x xa = neutral u_4371 then support u_4371 x xb
-     else insert xa (support u_4371 x xb))) &
-(ALL (x::'q_60378 => 'q_60530) (xa::'q_60378) xb::'q_60378 => bool.
-    support u_4371 x (xb - {xa}) = support u_4371 x xb - {xa}) &
-(ALL (x::'q_60416 => 'q_60530) (xa::'q_60416 => bool) xb::'q_60416 => bool.
-    support u_4371 x (xa Un xb) =
-    support u_4371 x xa Un support u_4371 x xb) &
-(ALL (x::'q_60454 => 'q_60530) (xa::'q_60454 => bool) xb::'q_60454 => bool.
-    support u_4371 x (xa Int xb) =
-    support u_4371 x xa Int support u_4371 x xb) &
-(ALL (x::'q_60492 => 'q_60530) (xa::'q_60492 => bool) xb::'q_60492 => bool.
-    support u_4371 x (xa - xb) =
-    support u_4371 x xa - support u_4371 x xb) &
-(ALL (x::'q_60529 => 'q_60520) (xa::'q_60520 => 'q_60530)
-    xb::'q_60529 => bool.
-    support u_4371 xa (x ` xb) = x ` support u_4371 (xa o x) xb)"
-  by (import hollight SUPPORT_CLAUSES)
-
-lemma SUPPORT_DELTA: "support (x::'q_60556 => 'q_60556 => 'q_60556)
- (%xa::'q_60584.
-     if xa = (xc::'q_60584) then (xb::'q_60584 => 'q_60556) xa
-     else neutral x)
- (xa::'q_60584 => bool) =
-(if xc : xa then support x xb {xc} else {})"
-  by (import hollight SUPPORT_DELTA)
-
-lemma FINITE_SUPPORT_DELTA: "finite
- (support (x::'q_60605 => 'q_60605 => 'q_60605)
-   (%xc::'q_60614.
-       if xc = (xb::'q_60614) then (xa::'q_60614 => 'q_60605) xc
-       else neutral x)
-   (s::'q_60614 => bool))"
-  by (import hollight FINITE_SUPPORT_DELTA)
-
-lemma ITERATE_SUPPORT: "iterate (x::'q_60630 => 'q_60630 => 'q_60630)
- (support x (xa::'q_60642 => 'q_60630) (xb::'q_60642 => bool)) xa =
-iterate x xb xa"
-  by (import hollight ITERATE_SUPPORT)
-
-lemma ITERATE_EXPAND_CASES: "iterate (x::'q_60661 => 'q_60661 => 'q_60661) (xb::'q_60667 => bool)
- (xa::'q_60667 => 'q_60661) =
-(if finite (support x xa xb) then iterate x (support x xa xb) xa
- else neutral x)"
-  by (import hollight ITERATE_EXPAND_CASES)
-
-lemma ITERATE_CLAUSES_GEN: "monoidal (u_4371::'B => 'B => 'B)
-==> (ALL f::'A => 'B. iterate u_4371 {} f = neutral u_4371) &
-    (ALL (f::'A => 'B) (x::'A) s::'A => bool.
-        monoidal u_4371 & finite (support u_4371 f s) -->
-        iterate u_4371 (insert x s) f =
-        (if x : s then iterate u_4371 s f
-         else u_4371 (f x) (iterate u_4371 s f)))"
-  by (import hollight ITERATE_CLAUSES_GEN)
-
-lemma ITERATE_CLAUSES: "monoidal (x::'q_60857 => 'q_60857 => 'q_60857)
-==> (ALL f::'q_60815 => 'q_60857. iterate x {} f = neutral x) &
-    (ALL (f::'q_60859 => 'q_60857) (xa::'q_60859) s::'q_60859 => bool.
-        finite s -->
-        iterate x (insert xa s) f =
-        (if xa : s then iterate x s f else x (f xa) (iterate x s f)))"
-  by (import hollight ITERATE_CLAUSES)
-
-lemma ITERATE_UNION: "[| monoidal (u_4371::'q_60945 => 'q_60945 => 'q_60945);
-   finite (s::'q_60930 => bool) &
-   finite (x::'q_60930 => bool) & s Int x = {} |]
-==> iterate u_4371 (s Un x) (f::'q_60930 => 'q_60945) =
-    u_4371 (iterate u_4371 s f) (iterate u_4371 x f)"
-  by (import hollight ITERATE_UNION)
-
-lemma ITERATE_UNION_GEN: "[| monoidal (x::'B => 'B => 'B);
-   finite (support x (xa::'A => 'B) (xb::'A => bool)) &
-   finite (support x xa (xc::'A => bool)) &
-   support x xa xb Int support x xa xc = {} |]
-==> iterate x (xb Un xc) xa = x (iterate x xb xa) (iterate x xc xa)"
-  by (import hollight ITERATE_UNION_GEN)
-
-lemma ITERATE_DIFF: "[| monoidal (u::'q_61087 => 'q_61087 => 'q_61087);
-   finite (s::'q_61083 => bool) & (t::'q_61083 => bool) <= s |]
-==> u (iterate u (s - t) (f::'q_61083 => 'q_61087)) (iterate u t f) =
-    iterate u s f"
-  by (import hollight ITERATE_DIFF)
-
-lemma ITERATE_DIFF_GEN: "[| monoidal (x::'B => 'B => 'B);
-   finite (support x (xa::'A => 'B) (xb::'A => bool)) &
-   support x xa (xc::'A => bool) <= support x xa xb |]
-==> x (iterate x (xb - xc) xa) (iterate x xc xa) = iterate x xb xa"
-  by (import hollight ITERATE_DIFF_GEN)
-
-lemma ITERATE_INCL_EXCL: "[| monoidal (u_4371::'q_61316 => 'q_61316 => 'q_61316);
-   finite (s::'q_61298 => bool) & finite (t::'q_61298 => bool) |]
-==> u_4371 (iterate u_4371 s (f::'q_61298 => 'q_61316))
-     (iterate u_4371 t f) =
-    u_4371 (iterate u_4371 (s Un t) f) (iterate u_4371 (s Int t) f)"
-  by (import hollight ITERATE_INCL_EXCL)
-
-lemma ITERATE_CLOSED: "[| monoidal (u_4371::'B => 'B => 'B);
-   (P::'B => bool) (neutral u_4371) &
-   (ALL (x::'B) y::'B. P x & P y --> P (u_4371 x y));
-   !!x::'A.
-      x : (s::'A => bool) & (f::'A => 'B) x ~= neutral u_4371 ==> P (f x) |]
-==> P (iterate u_4371 s f)"
-  by (import hollight ITERATE_CLOSED)
-
-lemma ITERATE_RELATED: "[| monoidal (u_4371::'B => 'B => 'B);
-   (R::'B => 'B => bool) (neutral u_4371) (neutral u_4371) &
-   (ALL (x1::'B) (y1::'B) (x2::'B) y2::'B.
-       R x1 x2 & R y1 y2 --> R (u_4371 x1 y1) (u_4371 x2 y2));
-   finite (x::'A => bool) &
-   (ALL xa::'A. xa : x --> R ((f::'A => 'B) xa) ((g::'A => 'B) xa)) |]
-==> R (iterate u_4371 x f) (iterate u_4371 x g)"
-  by (import hollight ITERATE_RELATED)
-
-lemma ITERATE_EQ_NEUTRAL: "[| monoidal (u_4371::'B => 'B => 'B);
-   !!x::'A. x : (s::'A => bool) ==> (f::'A => 'B) x = neutral u_4371 |]
-==> iterate u_4371 s f = neutral u_4371"
-  by (import hollight ITERATE_EQ_NEUTRAL)
-
-lemma ITERATE_SING: "monoidal (x::'B => 'B => 'B) ==> iterate x {xa::'A} (f::'A => 'B) = f xa"
-  by (import hollight ITERATE_SING)
-
-lemma ITERATE_DELETE: "[| monoidal (u::'B => 'B => 'B); finite (s::'A => bool) & (a::'A) : s |]
-==> u ((f::'A => 'B) a) (iterate u (s - {a}) f) = iterate u s f"
-  by (import hollight ITERATE_DELETE)
-
-lemma ITERATE_DELTA: "monoidal (u_4371::'q_61672 => 'q_61672 => 'q_61672)
-==> iterate u_4371 (xb::'q_61691 => bool)
-     (%xb::'q_61691.
-         if xb = (xa::'q_61691) then (x::'q_61691 => 'q_61672) xb
-         else neutral u_4371) =
-    (if xa : xb then x xa else neutral u_4371)"
-  by (import hollight ITERATE_DELTA)
-
-lemma ITERATE_IMAGE: "[| monoidal (u_4371::'C => 'C => 'C);
-   !!(x::'A) y::'A.
-      x : (s::'A => bool) & y : s & (f::'A => 'B) x = f y ==> x = y |]
-==> iterate u_4371 (f ` s) (g::'B => 'C) = iterate u_4371 s (g o f)"
-  by (import hollight ITERATE_IMAGE)
-
-lemma ITERATE_BIJECTION: "[| monoidal (u_4371::'B => 'B => 'B);
-   (ALL x::'A. x : (s::'A => bool) --> (p::'A => 'A) x : s) &
-   (ALL y::'A. y : s --> (EX! x::'A. x : s & p x = y)) |]
-==> iterate u_4371 s (f::'A => 'B) = iterate u_4371 s (f o p)"
-  by (import hollight ITERATE_BIJECTION)
-
-lemma ITERATE_ITERATE_PRODUCT: "[| monoidal (u_4371::'C => 'C => 'C);
-   finite (x::'A => bool) &
-   (ALL i::'A. i : x --> finite ((xa::'A => 'B => bool) i)) |]
-==> iterate u_4371 x
-     (%i::'A. iterate u_4371 (xa i) ((xb::'A => 'B => 'C) i)) =
-    iterate u_4371
-     {u::'A * 'B. EX (i::'A) j::'B. (i : x & j : xa i) & u = (i, j)}
-     (SOME f::'A * 'B => 'C. ALL (i::'A) j::'B. f (i, j) = xb i j)"
-  by (import hollight ITERATE_ITERATE_PRODUCT)
-
-lemma ITERATE_EQ: "[| monoidal (u_4371::'B => 'B => 'B);
-   !!x::'A. x : (s::'A => bool) ==> (f::'A => 'B) x = (g::'A => 'B) x |]
-==> iterate u_4371 s f = iterate u_4371 s g"
-  by (import hollight ITERATE_EQ)
-
-lemma ITERATE_EQ_GENERAL: "[| monoidal (u_4371::'C => 'C => 'C);
-   (ALL y::'B.
-       y : (t::'B => bool) -->
-       (EX! x::'A. x : (s::'A => bool) & (h::'A => 'B) x = y)) &
-   (ALL x::'A. x : s --> h x : t & (g::'B => 'C) (h x) = (f::'A => 'C) x) |]
-==> iterate u_4371 s f = iterate u_4371 t g"
-  by (import hollight ITERATE_EQ_GENERAL)
-
-lemma ITERATE_EQ_GENERAL_INVERSES: "[| monoidal (u_4371::'C => 'C => 'C);
-   (ALL y::'B.
-       y : (t::'B => bool) -->
-       (k::'B => 'A) y : (s::'A => bool) & (h::'A => 'B) (k y) = y) &
-   (ALL x::'A.
-       x : s -->
-       h x : t & k (h x) = x & (g::'B => 'C) (h x) = (f::'A => 'C) x) |]
-==> iterate u_4371 s f = iterate u_4371 t g"
-  by (import hollight ITERATE_EQ_GENERAL_INVERSES)
-
-lemma ITERATE_INJECTION: "[| monoidal (u_4371::'B => 'B => 'B);
-   finite (s::'A => bool) &
-   (ALL x::'A. x : s --> (p::'A => 'A) x : s) &
-   (ALL (x::'A) y::'A. x : s & y : s & p x = p y --> x = y) |]
-==> iterate u_4371 s ((f::'A => 'B) o p) = iterate u_4371 s f"
-  by (import hollight ITERATE_INJECTION)
-
-lemma ITERATE_UNION_NONZERO: "[| monoidal (u_4371::'B => 'B => 'B);
-   finite (s::'A => bool) &
-   finite (t::'A => bool) &
-   (ALL x::'A. x : s Int t --> (f::'A => 'B) x = neutral u_4371) |]
-==> iterate u_4371 (s Un t) f =
-    u_4371 (iterate u_4371 s f) (iterate u_4371 t f)"
-  by (import hollight ITERATE_UNION_NONZERO)
-
-lemma ITERATE_OP: "[| monoidal (u_4371::'q_62649 => 'q_62649 => 'q_62649);
-   finite (s::'q_62648 => bool) |]
-==> iterate u_4371 s
-     (%x::'q_62648.
-         u_4371 ((f::'q_62648 => 'q_62649) x)
-          ((g::'q_62648 => 'q_62649) x)) =
-    u_4371 (iterate u_4371 s f) (iterate u_4371 s g)"
-  by (import hollight ITERATE_OP)
-
-lemma ITERATE_SUPERSET: "[| monoidal (u_4371::'B => 'B => 'B);
-   (u::'A => bool) <= (v::'A => bool) &
-   (ALL x::'A. x : v & x ~: u --> (f::'A => 'B) x = neutral u_4371) |]
-==> iterate u_4371 v f = iterate u_4371 u f"
-  by (import hollight ITERATE_SUPERSET)
-
-lemma ITERATE_IMAGE_NONZERO: "[| monoidal (u_4371::'C => 'C => 'C);
-   finite (x::'A => bool) &
-   (ALL (xa::'A) y::'A.
-       xa : x & y : x & xa ~= y & (f::'A => 'B) xa = f y -->
-       (g::'B => 'C) (f xa) = neutral u_4371) |]
-==> iterate u_4371 (f ` x) g = iterate u_4371 x (g o f)"
-  by (import hollight ITERATE_IMAGE_NONZERO)
-
-lemma ITERATE_CASES: "[| monoidal (u_4371::'B => 'B => 'B); finite (s::'A => bool) |]
-==> iterate u_4371 s
-     (%x::'A.
-         if (P::'A => bool) x then (f::'A => 'B) x else (g::'A => 'B) x) =
-    u_4371 (iterate u_4371 {u::'A. EX x::'A. (x : s & P x) & u = x} f)
-     (iterate u_4371 {u::'A. EX x::'A. (x : s & ~ P x) & u = x} g)"
-  by (import hollight ITERATE_CASES)
-
-lemma ITERATE_OP_GEN: "[| monoidal (u_4371::'B => 'B => 'B);
-   finite (support u_4371 (f::'A => 'B) (s::'A => bool)) &
-   finite (support u_4371 (g::'A => 'B) s) |]
-==> iterate u_4371 s (%x::'A. u_4371 (f x) (g x)) =
-    u_4371 (iterate u_4371 s f) (iterate u_4371 s g)"
-  by (import hollight ITERATE_OP_GEN)
-
-lemma ITERATE_CLAUSES_NUMSEG: "monoidal (x::'q_63246 => 'q_63246 => 'q_63246)
-==> (ALL xa::nat.
-        iterate x {xa..0::nat} (f::nat => 'q_63246) =
-        (if xa = (0::nat) then f (0::nat) else neutral x)) &
-    (ALL (xa::nat) xb::nat.
-        iterate x {xa..Suc xb} f =
-        (if xa <= Suc xb then x (iterate x {xa..xb} f) (f (Suc xb))
-         else iterate x {xa..xb} f))"
-  by (import hollight ITERATE_CLAUSES_NUMSEG)
-
-lemma ITERATE_PAIR: "monoidal (u_4371::'q_63421 => 'q_63421 => 'q_63421)
-==> iterate u_4371 {(2::nat) * (m::nat)..(2::nat) * (n::nat) + (1::nat)}
-     (f::nat => 'q_63421) =
-    iterate u_4371 {m..n}
-     (%i::nat. u_4371 (f ((2::nat) * i)) (f ((2::nat) * i + (1::nat))))"
-  by (import hollight ITERATE_PAIR)
-
-definition
-  nsum :: "('q_63439 => bool) => ('q_63439 => nat) => nat"  where
-  "(op ==::(('q_63439::type => bool) => ('q_63439::type => nat) => nat)
-        => (('q_63439::type => bool) => ('q_63439::type => nat) => nat)
-           => prop)
- (nsum::('q_63439::type => bool) => ('q_63439::type => nat) => nat)
- ((iterate::(nat => nat => nat)
-            => ('q_63439::type => bool) => ('q_63439::type => nat) => nat)
-   (op +::nat => nat => nat))"
-
-lemma DEF_nsum: "(op =::(('q_63439::type => bool) => ('q_63439::type => nat) => nat)
-       => (('q_63439::type => bool) => ('q_63439::type => nat) => nat)
-          => bool)
- (nsum::('q_63439::type => bool) => ('q_63439::type => nat) => nat)
- ((iterate::(nat => nat => nat)
-            => ('q_63439::type => bool) => ('q_63439::type => nat) => nat)
-   (op +::nat => nat => nat))"
-  by (import hollight DEF_nsum)
-
-lemma NEUTRAL_ADD: "neutral op + = (0::nat)"
-  by (import hollight NEUTRAL_ADD)
-
-lemma NEUTRAL_MUL: "neutral op * = (1::nat)"
-  by (import hollight NEUTRAL_MUL)
-
-lemma MONOIDAL_ADD: "(monoidal::(nat => nat => nat) => bool) (op +::nat => nat => nat)"
-  by (import hollight MONOIDAL_ADD)
-
-lemma MONOIDAL_MUL: "(monoidal::(nat => nat => nat) => bool) (op *::nat => nat => nat)"
-  by (import hollight MONOIDAL_MUL)
-
-lemma NSUM_CLAUSES: "(ALL x::'q_63477 => nat. nsum {} x = (0::nat)) &
-(ALL (x::'q_63516) (xa::'q_63516 => nat) xb::'q_63516 => bool.
-    finite xb -->
-    nsum (insert x xb) xa =
-    (if x : xb then nsum xb xa else xa x + nsum xb xa))"
-  by (import hollight NSUM_CLAUSES)
-
-lemma NSUM_UNION: "finite (xa::'q_63542 => bool) &
-finite (xb::'q_63542 => bool) & xa Int xb = {}
-==> nsum (xa Un xb) (x::'q_63542 => nat) = nsum xa x + nsum xb x"
-  by (import hollight NSUM_UNION)
-
-lemma NSUM_DIFF: "finite (s::'q_63597 => bool) & (t::'q_63597 => bool) <= s
-==> nsum (s - t) (f::'q_63597 => nat) = nsum s f - nsum t f"
-  by (import hollight NSUM_DIFF)
-
-lemma NSUM_INCL_EXCL: "finite (x::'A => bool) & finite (xa::'A => bool)
-==> nsum x (xb::'A => nat) + nsum xa xb =
-    nsum (x Un xa) xb + nsum (x Int xa) xb"
-  by (import hollight NSUM_INCL_EXCL)
-
-lemma NSUM_SUPPORT: "nsum (support op + (x::'q_63686 => nat) (xa::'q_63686 => bool)) x =
-nsum xa x"
-  by (import hollight NSUM_SUPPORT)
-
-lemma NSUM_ADD: "finite (xb::'q_63720 => bool)
-==> nsum xb
-     (%xb::'q_63720. (x::'q_63720 => nat) xb + (xa::'q_63720 => nat) xb) =
-    nsum xb x + nsum xb xa"
-  by (import hollight NSUM_ADD)
-
-lemma NSUM_ADD_GEN: "finite
- {xa::'q_63807.
-  EX xc::'q_63807.
-     (xc : (xb::'q_63807 => bool) & (x::'q_63807 => nat) xc ~= (0::nat)) &
-     xa = xc} &
-finite
- {x::'q_63807.
-  EX xc::'q_63807.
-     (xc : xb & (xa::'q_63807 => nat) xc ~= (0::nat)) & x = xc}
-==> nsum xb (%xb::'q_63807. x xb + xa xb) = nsum xb x + nsum xb xa"
-  by (import hollight NSUM_ADD_GEN)
-
-lemma NSUM_EQ_0: "(!!xb::'A. xb : (xa::'A => bool) ==> (x::'A => nat) xb = (0::nat))
-==> nsum xa x = (0::nat)"
-  by (import hollight NSUM_EQ_0)
-
-lemma NSUM_0: "nsum (x::'A => bool) (%n::'A. 0::nat) = (0::nat)"
-  by (import hollight NSUM_0)
-
-lemma NSUM_LMUL: "nsum (s::'A => bool) (%x::'A. (c::nat) * (f::'A => nat) x) = c * nsum s f"
-  by (import hollight NSUM_LMUL)
-
-lemma NSUM_RMUL: "nsum (xb::'A => bool) (%xb::'A. (x::'A => nat) xb * (xa::nat)) =
-nsum xb x * xa"
-  by (import hollight NSUM_RMUL)
-
-lemma NSUM_LE: "finite (xb::'q_63997 => bool) &
-(ALL xc::'q_63997.
-    xc : xb --> (x::'q_63997 => nat) xc <= (xa::'q_63997 => nat) xc)
-==> nsum xb x <= nsum xb xa"
-  by (import hollight NSUM_LE)
-
-lemma NSUM_LT: "finite (s::'A => bool) &
-(ALL x::'A. x : s --> (f::'A => nat) x <= (g::'A => nat) x) &
-(EX x::'A. x : s & f x < g x)
-==> nsum s f < nsum s g"
-  by (import hollight NSUM_LT)
-
-lemma NSUM_LT_ALL: "finite (s::'q_64119 => bool) &
-s ~= {} &
-(ALL x::'q_64119. x : s --> (f::'q_64119 => nat) x < (g::'q_64119 => nat) x)
-==> nsum s f < nsum s g"
-  by (import hollight NSUM_LT_ALL)
-
-lemma NSUM_EQ: "(!!xc::'q_64157.
-    xc : (xb::'q_64157 => bool)
-    ==> (x::'q_64157 => nat) xc = (xa::'q_64157 => nat) xc)
-==> nsum xb x = nsum xb xa"
-  by (import hollight NSUM_EQ)
-
-lemma NSUM_CONST: "finite (s::'q_64187 => bool) ==> nsum s (%n::'q_64187. c::nat) = CARD s * c"
-  by (import hollight NSUM_CONST)
-
-lemma NSUM_POS_BOUND: "[| finite (x::'A => bool) & nsum x (f::'A => nat) <= (b::nat);
-   (xa::'A) : x |]
-==> f xa <= b"
-  by (import hollight NSUM_POS_BOUND)
-
-lemma NSUM_EQ_0_IFF: "finite (s::'q_64296 => bool)
-==> (nsum s (f::'q_64296 => nat) = (0::nat)) =
-    (ALL x::'q_64296. x : s --> f x = (0::nat))"
-  by (import hollight NSUM_EQ_0_IFF)
-
-lemma NSUM_DELETE: "finite (xa::'q_64325 => bool) & (xb::'q_64325) : xa
-==> (x::'q_64325 => nat) xb + nsum (xa - {xb}) x = nsum xa x"
-  by (import hollight NSUM_DELETE)
-
-lemma NSUM_SING: "nsum {xa::'q_64354} (x::'q_64354 => nat) = x xa"
-  by (import hollight NSUM_SING)
-
-lemma NSUM_DELTA: "nsum (x::'A => bool) (%x::'A. if x = (xa::'A) then b::nat else (0::nat)) =
-(if xa : x then b else (0::nat))"
-  by (import hollight NSUM_DELTA)
-
-lemma NSUM_SWAP: "finite (x::'A => bool) & finite (xa::'B => bool)
-==> nsum x (%i::'A. nsum xa ((f::'A => 'B => nat) i)) =
-    nsum xa (%j::'B. nsum x (%i::'A. f i j))"
-  by (import hollight NSUM_SWAP)
-
-lemma NSUM_IMAGE: "(!!(xa::'q_64490) y::'q_64490.
-    xa : (xb::'q_64490 => bool) &
-    y : xb & (x::'q_64490 => 'q_64466) xa = x y
-    ==> xa = y)
-==> nsum (x ` xb) (xa::'q_64466 => nat) = nsum xb (xa o x)"
-  by (import hollight NSUM_IMAGE)
-
-lemma NSUM_SUPERSET: "(xa::'A => bool) <= (xb::'A => bool) &
-(ALL xc::'A. xc : xb & xc ~: xa --> (x::'A => nat) xc = (0::nat))
-==> nsum xb x = nsum xa x"
-  by (import hollight NSUM_SUPERSET)
-
-lemma NSUM_UNION_RZERO: "finite (u::'A => bool) &
-(ALL x::'A. x : (v::'A => bool) & x ~: u --> (f::'A => nat) x = (0::nat))
-==> nsum (u Un v) f = nsum u f"
-  by (import hollight NSUM_UNION_RZERO)
-
-lemma NSUM_UNION_LZERO: "finite (v::'A => bool) &
-(ALL x::'A. x : (u::'A => bool) & x ~: v --> (f::'A => nat) x = (0::nat))
-==> nsum (u Un v) f = nsum v f"
-  by (import hollight NSUM_UNION_LZERO)
-
-lemma NSUM_RESTRICT: "finite (s::'q_64681 => bool)
-==> nsum s
-     (%x::'q_64681. if x : s then (f::'q_64681 => nat) x else (0::nat)) =
-    nsum s f"
-  by (import hollight NSUM_RESTRICT)
-
-lemma NSUM_BOUND: "finite (x::'A => bool) &
-(ALL xc::'A. xc : x --> (xa::'A => nat) xc <= (xb::nat))
-==> nsum x xa <= CARD x * xb"
-  by (import hollight NSUM_BOUND)
-
-lemma NSUM_BOUND_GEN: "finite (x::'A => bool) &
-x ~= {} & (ALL xa::'A. xa : x --> (f::'A => nat) xa <= (b::nat) div CARD x)
-==> nsum x f <= b"
-  by (import hollight NSUM_BOUND_GEN)
-
-lemma NSUM_BOUND_LT: "finite (s::'A => bool) &
-(ALL x::'A. x : s --> (f::'A => nat) x <= (b::nat)) &
-(EX x::'A. x : s & f x < b)
-==> nsum s f < CARD s * b"
-  by (import hollight NSUM_BOUND_LT)
-
-lemma NSUM_BOUND_LT_ALL: "finite (s::'q_64899 => bool) &
-s ~= {} & (ALL x::'q_64899. x : s --> (f::'q_64899 => nat) x < (b::nat))
-==> nsum s f < CARD s * b"
-  by (import hollight NSUM_BOUND_LT_ALL)
-
-lemma NSUM_BOUND_LT_GEN: "finite (s::'A => bool) &
-s ~= {} & (ALL x::'A. x : s --> (f::'A => nat) x < (b::nat) div CARD s)
-==> nsum s f < b"
-  by (import hollight NSUM_BOUND_LT_GEN)
-
-lemma NSUM_UNION_EQ: "finite (u::'q_65000 => bool) &
-(s::'q_65000 => bool) Int (t::'q_65000 => bool) = {} & s Un t = u
-==> nsum s (f::'q_65000 => nat) + nsum t f = nsum u f"
-  by (import hollight NSUM_UNION_EQ)
-
-lemma NSUM_EQ_SUPERSET: "finite (t::'A => bool) &
-t <= (s::'A => bool) &
-(ALL x::'A. x : t --> (f::'A => nat) x = (g::'A => nat) x) &
-(ALL x::'A. x : s & x ~: t --> f x = (0::nat))
-==> nsum s f = nsum t g"
-  by (import hollight NSUM_EQ_SUPERSET)
-
-lemma NSUM_RESTRICT_SET: "nsum
- {u::'A. EX xb::'A. (xb : (xa::'A => bool) & (x::'A => bool) xb) & u = xb}
- (xb::'A => nat) =
-nsum xa (%xa::'A. if x xa then xb xa else (0::nat))"
-  by (import hollight NSUM_RESTRICT_SET)
-
-lemma NSUM_NSUM_RESTRICT: "finite (s::'q_65257 => bool) & finite (t::'q_65256 => bool)
-==> nsum s
-     (%x::'q_65257.
-         nsum
-          {u::'q_65256.
-           EX y::'q_65256.
-              (y : t & (R::'q_65257 => 'q_65256 => bool) x y) & u = y}
-          ((f::'q_65257 => 'q_65256 => nat) x)) =
-    nsum t
-     (%y::'q_65256.
-         nsum {u::'q_65257. EX x::'q_65257. (x : s & R x y) & u = x}
-          (%x::'q_65257. f x y))"
-  by (import hollight NSUM_NSUM_RESTRICT)
-
-lemma CARD_EQ_NSUM: "finite (x::'q_65276 => bool) ==> CARD x = nsum x (%x::'q_65276. 1::nat)"
-  by (import hollight CARD_EQ_NSUM)
-
-lemma NSUM_MULTICOUNT_GEN: "finite (s::'A => bool) &
-finite (t::'B => bool) &
-(ALL j::'B.
-    j : t -->
-    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
-    (k::'B => nat) j)
-==> nsum s (%i::'A. CARD {u::'B. EX j::'B. (j : t & R i j) & u = j}) =
-    nsum t k"
-  by (import hollight NSUM_MULTICOUNT_GEN)
-
-lemma NSUM_MULTICOUNT: "finite (s::'A => bool) &
-finite (t::'B => bool) &
-(ALL j::'B.
-    j : t -->
-    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
-    (k::nat))
-==> nsum s (%i::'A. CARD {u::'B. EX j::'B. (j : t & R i j) & u = j}) =
-    k * CARD t"
-  by (import hollight NSUM_MULTICOUNT)
-
-lemma NSUM_IMAGE_GEN: "finite (s::'A => bool)
-==> nsum s (g::'A => nat) =
-    nsum ((f::'A => 'B) ` s)
-     (%y::'B. nsum {u::'A. EX x::'A. (x : s & f x = y) & u = x} g)"
-  by (import hollight NSUM_IMAGE_GEN)
-
-lemma NSUM_GROUP: "finite (s::'A => bool) & (f::'A => 'B) ` s <= (t::'B => bool)
-==> nsum t
-     (%y::'B.
-         nsum {u::'A. EX x::'A. (x : s & f x = y) & u = x} (g::'A => nat)) =
-    nsum s g"
-  by (import hollight NSUM_GROUP)
-
-lemma NSUM_SUBSET: "finite (u::'A => bool) &
-finite (v::'A => bool) &
-(ALL x::'A. x : u - v --> (f::'A => nat) x = (0::nat))
-==> nsum u f <= nsum v f"
-  by (import hollight NSUM_SUBSET)
-
-lemma NSUM_SUBSET_SIMPLE: "finite (v::'q_65804 => bool) & (u::'q_65804 => bool) <= v
-==> nsum u (f::'q_65804 => nat) <= nsum v f"
-  by (import hollight NSUM_SUBSET_SIMPLE)
-
-lemma NSUM_IMAGE_NONZERO: "finite (xb::'A => bool) &
-(ALL (xc::'A) xd::'A.
-    xc : xb & xd : xb & xc ~= xd & (xa::'A => 'B) xc = xa xd -->
-    (x::'B => nat) (xa xc) = (0::nat))
-==> nsum (xa ` xb) x = nsum xb (x o xa)"
-  by (import hollight NSUM_IMAGE_NONZERO)
-
-lemma NSUM_BIJECTION: "(ALL x::'A. x : (xb::'A => bool) --> (xa::'A => 'A) x : xb) &
-(ALL y::'A. y : xb --> (EX! x::'A. x : xb & xa x = y))
-==> nsum xb (x::'A => nat) = nsum xb (x o xa)"
-  by (import hollight NSUM_BIJECTION)
-
-lemma NSUM_NSUM_PRODUCT: "finite (x::'A => bool) &
-(ALL i::'A. i : x --> finite ((xa::'A => 'B => bool) i))
-==> nsum x (%x::'A. nsum (xa x) ((xb::'A => 'B => nat) x)) =
-    nsum {u::'A * 'B. EX (i::'A) j::'B. (i : x & j : xa i) & u = (i, j)}
-     (SOME f::'A * 'B => nat. ALL (i::'A) j::'B. f (i, j) = xb i j)"
-  by (import hollight NSUM_NSUM_PRODUCT)
-
-lemma NSUM_EQ_GENERAL: "(ALL y::'B.
-    y : (xa::'B => bool) -->
-    (EX! xa::'A. xa : (x::'A => bool) & (xd::'A => 'B) xa = y)) &
-(ALL xe::'A.
-    xe : x --> xd xe : xa & (xc::'B => nat) (xd xe) = (xb::'A => nat) xe)
-==> nsum x xb = nsum xa xc"
-  by (import hollight NSUM_EQ_GENERAL)
-
-lemma NSUM_EQ_GENERAL_INVERSES: "(ALL y::'B.
-    y : (xa::'B => bool) -->
-    (xe::'B => 'A) y : (x::'A => bool) & (xd::'A => 'B) (xe y) = y) &
-(ALL xf::'A.
-    xf : x -->
-    xd xf : xa &
-    xe (xd xf) = xf & (xc::'B => nat) (xd xf) = (xb::'A => nat) xf)
-==> nsum x xb = nsum xa xc"
-  by (import hollight NSUM_EQ_GENERAL_INVERSES)
-
-lemma NSUM_INJECTION: "finite (xb::'q_66274 => bool) &
-(ALL x::'q_66274. x : xb --> (xa::'q_66274 => 'q_66274) x : xb) &
-(ALL (x::'q_66274) y::'q_66274. x : xb & y : xb & xa x = xa y --> x = y)
-==> nsum xb ((x::'q_66274 => nat) o xa) = nsum xb x"
-  by (import hollight NSUM_INJECTION)
-
-lemma NSUM_UNION_NONZERO: "finite (xa::'q_66317 => bool) &
-finite (xb::'q_66317 => bool) &
-(ALL xc::'q_66317. xc : xa Int xb --> (x::'q_66317 => nat) xc = (0::nat))
-==> nsum (xa Un xb) x = nsum xa x + nsum xb x"
-  by (import hollight NSUM_UNION_NONZERO)
-
-lemma NSUM_UNIONS_NONZERO: "finite (x::('A => bool) => bool) &
-(ALL t::'A => bool. t : x --> finite t) &
-(ALL (t1::'A => bool) (t2::'A => bool) xa::'A.
-    t1 : x & t2 : x & t1 ~= t2 & xa : t1 & xa : t2 -->
-    (f::'A => nat) xa = (0::nat))
-==> nsum (Union x) f = nsum x (%t::'A => bool. nsum t f)"
-  by (import hollight NSUM_UNIONS_NONZERO)
-
-lemma NSUM_CASES: "finite (x::'A => bool)
-==> nsum x
-     (%x::'A.
-         if (xa::'A => bool) x then (xb::'A => nat) x
-         else (xc::'A => nat) x) =
-    nsum {u::'A. EX xb::'A. (xb : x & xa xb) & u = xb} xb +
-    nsum {u::'A. EX xb::'A. (xb : x & ~ xa xb) & u = xb} xc"
-  by (import hollight NSUM_CASES)
-
-lemma NSUM_CLOSED: "(P::nat => bool) (0::nat) &
-(ALL (x::nat) y::nat. P x & P y --> P (x + y)) &
-(ALL a::'A. a : (s::'A => bool) --> P ((f::'A => nat) a))
-==> P (nsum s f)"
-  by (import hollight NSUM_CLOSED)
-
-lemma NSUM_ADD_NUMSEG: "nsum {xb::nat..xc::nat} (%i::nat. (x::nat => nat) i + (xa::nat => nat) i) =
-nsum {xb..xc} x + nsum {xb..xc} xa"
-  by (import hollight NSUM_ADD_NUMSEG)
-
-lemma NSUM_LE_NUMSEG: "(!!i::nat.
-    (xb::nat) <= i & i <= (xc::nat)
-    ==> (x::nat => nat) i <= (xa::nat => nat) i)
-==> nsum {xb..xc} x <= nsum {xb..xc} xa"
-  by (import hollight NSUM_LE_NUMSEG)
-
-lemma NSUM_EQ_NUMSEG: "(!!i::nat.
-    (m::nat) <= i & i <= (n::nat) ==> (f::nat => nat) i = (g::nat => nat) i)
-==> nsum {m..n} f = nsum {m..n} g"
-  by (import hollight NSUM_EQ_NUMSEG)
-
-lemma NSUM_CONST_NUMSEG: "nsum {xa..xb} (%n. x) = (xb + 1 - xa) * x"
-  by (import hollight NSUM_CONST_NUMSEG)
-
-lemma NSUM_EQ_0_NUMSEG: "(!!i::nat. (m::nat) <= i & i <= (n::nat) ==> (x::nat => nat) i = (0::nat))
-==> nsum {m..n} x = (0::nat)"
-  by (import hollight NSUM_EQ_0_NUMSEG)
-
-lemma NSUM_EQ_0_IFF_NUMSEG: "(nsum {xa::nat..xb::nat} (x::nat => nat) = (0::nat)) =
-(ALL i::nat. xa <= i & i <= xb --> x i = (0::nat))"
-  by (import hollight NSUM_EQ_0_IFF_NUMSEG)
-
-lemma NSUM_TRIV_NUMSEG: "(n::nat) < (m::nat) ==> nsum {m..n} (f::nat => nat) = (0::nat)"
-  by (import hollight NSUM_TRIV_NUMSEG)
-
-lemma NSUM_SING_NUMSEG: "nsum {xa::nat..xa} (x::nat => nat) = x xa"
-  by (import hollight NSUM_SING_NUMSEG)
-
-lemma NSUM_CLAUSES_NUMSEG: "(ALL m. nsum {m..0} f = (if m = 0 then f 0 else 0)) &
-(ALL m n.
-    nsum {m..Suc n} f =
-    (if m <= Suc n then nsum {m..n} f + f (Suc n) else nsum {m..n} f))"
-  by (import hollight NSUM_CLAUSES_NUMSEG)
-
-lemma NSUM_SWAP_NUMSEG: "nsum {a::nat..b::nat}
- (%i::nat. nsum {c::nat..d::nat} ((f::nat => nat => nat) i)) =
-nsum {c..d} (%j::nat. nsum {a..b} (%i::nat. f i j))"
-  by (import hollight NSUM_SWAP_NUMSEG)
-
-lemma NSUM_ADD_SPLIT: "(xa::nat) <= (xb::nat) + (1::nat)
-==> nsum {xa..xb + (xc::nat)} (x::nat => nat) =
-    nsum {xa..xb} x + nsum {xb + (1::nat)..xb + xc} x"
-  by (import hollight NSUM_ADD_SPLIT)
-
-lemma NSUM_OFFSET: "nsum {(xb::nat) + (x::nat)..(xc::nat) + x} (xa::nat => nat) =
-nsum {xb..xc} (%i::nat. xa (i + x))"
-  by (import hollight NSUM_OFFSET)
-
-lemma NSUM_OFFSET_0: "(xa::nat) <= (xb::nat)
-==> nsum {xa..xb} (x::nat => nat) =
-    nsum {0::nat..xb - xa} (%i::nat. x (i + xa))"
-  by (import hollight NSUM_OFFSET_0)
-
-lemma NSUM_CLAUSES_LEFT: "(xa::nat) <= (xb::nat)
-==> nsum {xa..xb} (x::nat => nat) = x xa + nsum {xa + (1::nat)..xb} x"
-  by (import hollight NSUM_CLAUSES_LEFT)
-
-lemma NSUM_CLAUSES_RIGHT: "(0::nat) < (n::nat) & (m::nat) <= n
-==> nsum {m..n} (f::nat => nat) = nsum {m..n - (1::nat)} f + f n"
-  by (import hollight NSUM_CLAUSES_RIGHT)
-
-lemma NSUM_PAIR: "nsum {(2::nat) * (m::nat)..(2::nat) * (n::nat) + (1::nat)} (f::nat => nat) =
-nsum {m..n} (%i::nat. f ((2::nat) * i) + f ((2::nat) * i + (1::nat)))"
-  by (import hollight NSUM_PAIR)
-
-lemma CARD_UNIONS: "finite (x::('A => bool) => bool) &
-(ALL t::'A => bool. t : x --> finite t) &
-(ALL (t::'A => bool) u::'A => bool. t : x & u : x & t ~= u --> t Int u = {})
-==> CARD (Union x) = nsum x CARD"
-  by (import hollight CARD_UNIONS)
-
-consts
-  sum :: "('q_67488 => bool) => ('q_67488 => hollight.real) => hollight.real" 
-
-defs
-  sum_def: "(op ==::(('q_67488::type => bool)
-         => ('q_67488::type => hollight.real) => hollight.real)
-        => (('q_67488::type => bool)
-            => ('q_67488::type => hollight.real) => hollight.real)
-           => prop)
- (hollight.sum::('q_67488::type => bool)
-                => ('q_67488::type => hollight.real) => hollight.real)
- ((iterate::(hollight.real => hollight.real => hollight.real)
-            => ('q_67488::type => bool)
-               => ('q_67488::type => hollight.real) => hollight.real)
-   (real_add::hollight.real => hollight.real => hollight.real))"
-
-lemma DEF_sum: "(op =::(('q_67488::type => bool)
-        => ('q_67488::type => hollight.real) => hollight.real)
-       => (('q_67488::type => bool)
-           => ('q_67488::type => hollight.real) => hollight.real)
-          => bool)
- (hollight.sum::('q_67488::type => bool)
-                => ('q_67488::type => hollight.real) => hollight.real)
- ((iterate::(hollight.real => hollight.real => hollight.real)
-            => ('q_67488::type => bool)
-               => ('q_67488::type => hollight.real) => hollight.real)
-   (real_add::hollight.real => hollight.real => hollight.real))"
-  by (import hollight DEF_sum)
-
-lemma NEUTRAL_REAL_ADD: "neutral real_add = real_of_num 0"
-  by (import hollight NEUTRAL_REAL_ADD)
-
-lemma NEUTRAL_REAL_MUL: "neutral real_mul = real_of_num 1"
-  by (import hollight NEUTRAL_REAL_MUL)
-
-lemma MONOIDAL_REAL_ADD: "monoidal real_add"
-  by (import hollight MONOIDAL_REAL_ADD)
-
-lemma MONOIDAL_REAL_MUL: "monoidal real_mul"
-  by (import hollight MONOIDAL_REAL_MUL)
-
-lemma SUM_CLAUSES: "(ALL x::'q_67530 => hollight.real.
-    hollight.sum {} x = real_of_num (0::nat)) &
-(ALL (x::'q_67571) (xa::'q_67571 => hollight.real) xb::'q_67571 => bool.
-    finite xb -->
-    hollight.sum (insert x xb) xa =
-    (if x : xb then hollight.sum xb xa
-     else real_add (xa x) (hollight.sum xb xa)))"
-  by (import hollight SUM_CLAUSES)
-
-lemma SUM_UNION: "finite (xa::'q_67597 => bool) &
-finite (xb::'q_67597 => bool) & xa Int xb = {}
-==> hollight.sum (xa Un xb) (x::'q_67597 => hollight.real) =
-    real_add (hollight.sum xa x) (hollight.sum xb x)"
-  by (import hollight SUM_UNION)
-
-lemma SUM_DIFF: "finite (xa::'q_67637 => bool) & (xb::'q_67637 => bool) <= xa
-==> hollight.sum (xa - xb) (x::'q_67637 => hollight.real) =
-    real_sub (hollight.sum xa x) (hollight.sum xb x)"
-  by (import hollight SUM_DIFF)
-
-lemma SUM_INCL_EXCL: "finite (x::'A => bool) & finite (xa::'A => bool)
-==> real_add (hollight.sum x (xb::'A => hollight.real))
-     (hollight.sum xa xb) =
-    real_add (hollight.sum (x Un xa) xb) (hollight.sum (x Int xa) xb)"
-  by (import hollight SUM_INCL_EXCL)
-
-lemma SUM_SUPPORT: "hollight.sum
- (support real_add (x::'q_67726 => hollight.real) (xa::'q_67726 => bool))
- x =
-hollight.sum xa x"
-  by (import hollight SUM_SUPPORT)
-
-lemma SUM_ADD: "finite (xb::'q_67760 => bool)
-==> hollight.sum xb
-     (%xb::'q_67760.
-         real_add ((x::'q_67760 => hollight.real) xb)
-          ((xa::'q_67760 => hollight.real) xb)) =
-    real_add (hollight.sum xb x) (hollight.sum xb xa)"
-  by (import hollight SUM_ADD)
-
-lemma SUM_ADD_GEN: "finite
- {xa::'q_67851.
-  EX xc::'q_67851.
-     (xc : (xb::'q_67851 => bool) &
-      (x::'q_67851 => hollight.real) xc ~= real_of_num (0::nat)) &
-     xa = xc} &
-finite
- {x::'q_67851.
-  EX xc::'q_67851.
-     (xc : xb &
-      (xa::'q_67851 => hollight.real) xc ~= real_of_num (0::nat)) &
-     x = xc}
-==> hollight.sum xb (%xb::'q_67851. real_add (x xb) (xa xb)) =
-    real_add (hollight.sum xb x) (hollight.sum xb xa)"
-  by (import hollight SUM_ADD_GEN)
-
-lemma SUM_EQ_0: "(!!xb::'A.
-    xb : (xa::'A => bool)
-    ==> (x::'A => hollight.real) xb = real_of_num (0::nat))
-==> hollight.sum xa x = real_of_num (0::nat)"
-  by (import hollight SUM_EQ_0)
-
-lemma SUM_0: "hollight.sum (x::'A => bool) (%n::'A. real_of_num (0::nat)) =
-real_of_num (0::nat)"
-  by (import hollight SUM_0)
-
-lemma SUM_LMUL: "hollight.sum (s::'A => bool)
- (%x::'A. real_mul (c::hollight.real) ((f::'A => hollight.real) x)) =
-real_mul c (hollight.sum s f)"
-  by (import hollight SUM_LMUL)
-
-lemma SUM_RMUL: "hollight.sum (xb::'A => bool)
- (%xb::'A. real_mul ((x::'A => hollight.real) xb) (xa::hollight.real)) =
-real_mul (hollight.sum xb x) xa"
-  by (import hollight SUM_RMUL)
-
-lemma SUM_NEG: "hollight.sum (xa::'q_68051 => bool)
- (%xa::'q_68051. real_neg ((x::'q_68051 => hollight.real) xa)) =
-real_neg (hollight.sum xa x)"
-  by (import hollight SUM_NEG)
-
-lemma SUM_SUB: "finite (xb::'q_68086 => bool)
-==> hollight.sum xb
-     (%xb::'q_68086.
-         real_sub ((x::'q_68086 => hollight.real) xb)
-          ((xa::'q_68086 => hollight.real) xb)) =
-    real_sub (hollight.sum xb x) (hollight.sum xb xa)"
-  by (import hollight SUM_SUB)
-
-lemma SUM_LE: "finite (xb::'q_68128 => bool) &
-(ALL xc::'q_68128.
-    xc : xb -->
-    real_le ((x::'q_68128 => hollight.real) xc)
-     ((xa::'q_68128 => hollight.real) xc))
-==> real_le (hollight.sum xb x) (hollight.sum xb xa)"
-  by (import hollight SUM_LE)
-
-lemma SUM_LT: "finite (s::'A => bool) &
-(ALL x::'A.
-    x : s -->
-    real_le ((f::'A => hollight.real) x) ((g::'A => hollight.real) x)) &
-(EX x::'A. x : s & real_lt (f x) (g x))
-==> real_lt (hollight.sum s f) (hollight.sum s g)"
-  by (import hollight SUM_LT)
-
-lemma SUM_LT_ALL: "finite (s::'q_68250 => bool) &
-s ~= {} &
-(ALL x::'q_68250.
-    x : s -->
-    real_lt ((f::'q_68250 => hollight.real) x)
-     ((g::'q_68250 => hollight.real) x))
-==> real_lt (hollight.sum s f) (hollight.sum s g)"
-  by (import hollight SUM_LT_ALL)
-
-lemma SUM_EQ: "(!!xc::'q_68288.
-    xc : (xb::'q_68288 => bool)
-    ==> (x::'q_68288 => hollight.real) xc =
-        (xa::'q_68288 => hollight.real) xc)
-==> hollight.sum xb x = hollight.sum xb xa"
-  by (import hollight SUM_EQ)
-
-lemma SUM_ABS: "finite (s::'q_68347 => bool)
-==> real_le (real_abs (hollight.sum s (f::'q_68347 => hollight.real)))
-     (hollight.sum s (%x::'q_68347. real_abs (f x)))"
-  by (import hollight SUM_ABS)
-
-lemma SUM_ABS_LE: "finite (s::'A => bool) &
-(ALL x::'A.
-    x : s -->
-    real_le (real_abs ((f::'A => hollight.real) x))
-     ((g::'A => hollight.real) x))
-==> real_le (real_abs (hollight.sum s f)) (hollight.sum s g)"
-  by (import hollight SUM_ABS_LE)
-
-lemma SUM_CONST: "finite (s::'q_68423 => bool)
-==> hollight.sum s (%n::'q_68423. c::hollight.real) =
-    real_mul (real_of_num (CARD s)) c"
-  by (import hollight SUM_CONST)
-
-lemma SUM_POS_LE: "finite (xa::'q_68465 => bool) &
-(ALL xb::'q_68465.
-    xb : xa -->
-    real_le (real_of_num (0::nat)) ((x::'q_68465 => hollight.real) xb))
-==> real_le (real_of_num (0::nat)) (hollight.sum xa x)"
-  by (import hollight SUM_POS_LE)
-
-lemma SUM_POS_BOUND: "[| finite (x::'A => bool) &
-   (ALL xa::'A.
-       xa : x -->
-       real_le (real_of_num (0::nat)) ((f::'A => hollight.real) xa)) &
-   real_le (hollight.sum x f) (b::hollight.real);
-   (xa::'A) : x |]
-==> real_le (f xa) b"
-  by (import hollight SUM_POS_BOUND)
-
-lemma SUM_POS_EQ_0: "[| finite (xa::'q_68612 => bool) &
-   (ALL xb::'q_68612.
-       xb : xa -->
-       real_le (real_of_num (0::nat)) ((x::'q_68612 => hollight.real) xb)) &
-   hollight.sum xa x = real_of_num (0::nat);
-   (xb::'q_68612) : xa |]
-==> x xb = real_of_num (0::nat)"
-  by (import hollight SUM_POS_EQ_0)
-
-lemma SUM_ZERO_EXISTS: "finite (s::'A => bool) &
-hollight.sum s (u::'A => hollight.real) = real_of_num (0::nat)
-==> (ALL i::'A. i : s --> u i = real_of_num (0::nat)) |
-    (EX (j::'A) k::'A.
-        j : s &
-        real_lt (u j) (real_of_num (0::nat)) &
-        k : s & real_gt (u k) (real_of_num (0::nat)))"
-  by (import hollight SUM_ZERO_EXISTS)
-
-lemma SUM_DELETE: "finite (xa::'q_68854 => bool) & (xb::'q_68854) : xa
-==> hollight.sum (xa - {xb}) (x::'q_68854 => hollight.real) =
-    real_sub (hollight.sum xa x) (x xb)"
-  by (import hollight SUM_DELETE)
-
-lemma SUM_DELETE_CASES: "finite (s::'q_68907 => bool)
-==> hollight.sum (s - {a::'q_68907}) (f::'q_68907 => hollight.real) =
-    (if a : s then real_sub (hollight.sum s f) (f a) else hollight.sum s f)"
-  by (import hollight SUM_DELETE_CASES)
-
-lemma SUM_SING: "hollight.sum {xa::'q_68930} (x::'q_68930 => hollight.real) = x xa"
-  by (import hollight SUM_SING)
-
-lemma SUM_DELTA: "hollight.sum (x::'A => bool)
- (%x::'A. if x = (xa::'A) then b::hollight.real else real_of_num (0::nat)) =
-(if xa : x then b else real_of_num (0::nat))"
-  by (import hollight SUM_DELTA)
-
-lemma SUM_SWAP: "finite (x::'A => bool) & finite (xa::'B => bool)
-==> hollight.sum x
-     (%i::'A. hollight.sum xa ((f::'A => 'B => hollight.real) i)) =
-    hollight.sum xa (%j::'B. hollight.sum x (%i::'A. f i j))"
-  by (import hollight SUM_SWAP)
-
-lemma SUM_IMAGE: "(!!(xa::'q_69070) y::'q_69070.
-    xa : (xb::'q_69070 => bool) &
-    y : xb & (x::'q_69070 => 'q_69046) xa = x y
-    ==> xa = y)
-==> hollight.sum (x ` xb) (xa::'q_69046 => hollight.real) =
-    hollight.sum xb (xa o x)"
-  by (import hollight SUM_IMAGE)
-
-lemma SUM_SUPERSET: "(xa::'A => bool) <= (xb::'A => bool) &
-(ALL xc::'A.
-    xc : xb & xc ~: xa -->
-    (x::'A => hollight.real) xc = real_of_num (0::nat))
-==> hollight.sum xb x = hollight.sum xa x"
-  by (import hollight SUM_SUPERSET)
-
-lemma SUM_UNION_RZERO: "finite (u::'A => bool) &
-(ALL x::'A.
-    x : (v::'A => bool) & x ~: u -->
-    (f::'A => hollight.real) x = real_of_num (0::nat))
-==> hollight.sum (u Un v) f = hollight.sum u f"
-  by (import hollight SUM_UNION_RZERO)
-
-lemma SUM_UNION_LZERO: "finite (v::'A => bool) &
-(ALL x::'A.
-    x : (u::'A => bool) & x ~: v -->
-    (f::'A => hollight.real) x = real_of_num (0::nat))
-==> hollight.sum (u Un v) f = hollight.sum v f"
-  by (import hollight SUM_UNION_LZERO)
-
-lemma SUM_RESTRICT: "finite (s::'q_69267 => bool)
-==> hollight.sum s
-     (%x::'q_69267.
-         if x : s then (f::'q_69267 => hollight.real) x
-         else real_of_num (0::nat)) =
-    hollight.sum s f"
-  by (import hollight SUM_RESTRICT)
-
-lemma SUM_BOUND: "finite (x::'A => bool) &
-(ALL xc::'A.
-    xc : x --> real_le ((xa::'A => hollight.real) xc) (xb::hollight.real))
-==> real_le (hollight.sum x xa) (real_mul (real_of_num (CARD x)) xb)"
-  by (import hollight SUM_BOUND)
-
-lemma SUM_BOUND_GEN: "finite (s::'A => bool) &
-s ~= {} &
-(ALL x::'A.
-    x : s -->
-    real_le ((f::'A => hollight.real) x)
-     (real_div (b::hollight.real) (real_of_num (CARD s))))
-==> real_le (hollight.sum s f) b"
-  by (import hollight SUM_BOUND_GEN)
-
-lemma SUM_ABS_BOUND: "finite (s::'A => bool) &
-(ALL x::'A.
-    x : s -->
-    real_le (real_abs ((f::'A => hollight.real) x)) (b::hollight.real))
-==> real_le (real_abs (hollight.sum s f))
-     (real_mul (real_of_num (CARD s)) b)"
-  by (import hollight SUM_ABS_BOUND)
-
-lemma SUM_BOUND_LT: "finite (s::'A => bool) &
-(ALL x::'A.
-    x : s --> real_le ((f::'A => hollight.real) x) (b::hollight.real)) &
-(EX x::'A. x : s & real_lt (f x) b)
-==> real_lt (hollight.sum s f) (real_mul (real_of_num (CARD s)) b)"
-  by (import hollight SUM_BOUND_LT)
-
-lemma SUM_BOUND_LT_ALL: "finite (s::'q_69531 => bool) &
-s ~= {} &
-(ALL x::'q_69531.
-    x : s --> real_lt ((f::'q_69531 => hollight.real) x) (b::hollight.real))
-==> real_lt (hollight.sum s f) (real_mul (real_of_num (CARD s)) b)"
-  by (import hollight SUM_BOUND_LT_ALL)
-
-lemma SUM_BOUND_LT_GEN: "finite (s::'A => bool) &
-s ~= {} &
-(ALL x::'A.
-    x : s -->
-    real_lt ((f::'A => hollight.real) x)
-     (real_div (b::hollight.real) (real_of_num (CARD s))))
-==> real_lt (hollight.sum s f) b"
-  by (import hollight SUM_BOUND_LT_GEN)
-
-lemma SUM_UNION_EQ: "finite (u::'q_69614 => bool) &
-(s::'q_69614 => bool) Int (t::'q_69614 => bool) = {} & s Un t = u
-==> real_add (hollight.sum s (f::'q_69614 => hollight.real))
-     (hollight.sum t f) =
-    hollight.sum u f"
-  by (import hollight SUM_UNION_EQ)
-
-lemma SUM_EQ_SUPERSET: "finite (t::'A => bool) &
-t <= (s::'A => bool) &
-(ALL x::'A.
-    x : t --> (f::'A => hollight.real) x = (g::'A => hollight.real) x) &
-(ALL x::'A. x : s & x ~: t --> f x = real_of_num (0::nat))
-==> hollight.sum s f = hollight.sum t g"
-  by (import hollight SUM_EQ_SUPERSET)
-
-lemma SUM_RESTRICT_SET: "hollight.sum
- {u::'q_69783.
-  EX xb::'q_69783.
-     (xb : (xa::'q_69783 => bool) & (x::'q_69783 => bool) xb) & u = xb}
- (xb::'q_69783 => hollight.real) =
-hollight.sum xa
- (%xa::'q_69783. if x xa then xb xa else real_of_num (0::nat))"
-  by (import hollight SUM_RESTRICT_SET)
-
-lemma SUM_SUM_RESTRICT: "finite (s::'q_69875 => bool) & finite (t::'q_69874 => bool)
-==> hollight.sum s
-     (%x::'q_69875.
-         hollight.sum
-          {u::'q_69874.
-           EX y::'q_69874.
-              (y : t & (R::'q_69875 => 'q_69874 => bool) x y) & u = y}
-          ((f::'q_69875 => 'q_69874 => hollight.real) x)) =
-    hollight.sum t
-     (%y::'q_69874.
-         hollight.sum {u::'q_69875. EX x::'q_69875. (x : s & R x y) & u = x}
-          (%x::'q_69875. f x y))"
-  by (import hollight SUM_SUM_RESTRICT)
-
-lemma CARD_EQ_SUM: "finite (x::'q_69896 => bool)
-==> real_of_num (CARD x) =
-    hollight.sum x (%x::'q_69896. real_of_num (1::nat))"
-  by (import hollight CARD_EQ_SUM)
-
-lemma SUM_MULTICOUNT_GEN: "finite (s::'A => bool) &
-finite (t::'B => bool) &
-(ALL j::'B.
-    j : t -->
-    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
-    (k::'B => nat) j)
-==> hollight.sum s
-     (%i::'A.
-         real_of_num (CARD {u::'B. EX j::'B. (j : t & R i j) & u = j})) =
-    hollight.sum t (%i::'B. real_of_num (k i))"
-  by (import hollight SUM_MULTICOUNT_GEN)
-
-lemma SUM_MULTICOUNT: "finite (s::'A => bool) &
-finite (t::'B => bool) &
-(ALL j::'B.
-    j : t -->
-    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
-    (k::nat))
-==> hollight.sum s
-     (%i::'A.
-         real_of_num (CARD {u::'B. EX j::'B. (j : t & R i j) & u = j})) =
-    real_of_num (k * CARD t)"
-  by (import hollight SUM_MULTICOUNT)
-
-lemma SUM_IMAGE_GEN: "finite (s::'A => bool)
-==> hollight.sum s (g::'A => hollight.real) =
-    hollight.sum ((f::'A => 'B) ` s)
-     (%y::'B. hollight.sum {u::'A. EX x::'A. (x : s & f x = y) & u = x} g)"
-  by (import hollight SUM_IMAGE_GEN)
-
-lemma SUM_GROUP: "finite (s::'A => bool) & (f::'A => 'B) ` s <= (t::'B => bool)
-==> hollight.sum t
-     (%y::'B.
-         hollight.sum {u::'A. EX x::'A. (x : s & f x = y) & u = x}
-          (g::'A => hollight.real)) =
-    hollight.sum s g"
-  by (import hollight SUM_GROUP)
-
-lemma REAL_OF_NUM_SUM: "finite (s::'q_70361 => bool)
-==> real_of_num (nsum s (f::'q_70361 => nat)) =
-    hollight.sum s (%x::'q_70361. real_of_num (f x))"
-  by (import hollight REAL_OF_NUM_SUM)
-
-lemma SUM_SUBSET: "finite (u::'A => bool) &
-finite (v::'A => bool) &
-(ALL x::'A.
-    x : u - v -->
-    real_le ((f::'A => hollight.real) x) (real_of_num (0::nat))) &
-(ALL x::'A. x : v - u --> real_le (real_of_num (0::nat)) (f x))
-==> real_le (hollight.sum u f) (hollight.sum v f)"
-  by (import hollight SUM_SUBSET)
-
-lemma SUM_SUBSET_SIMPLE: "finite (v::'A => bool) &
-(u::'A => bool) <= v &
-(ALL x::'A.
-    x : v - u -->
-    real_le (real_of_num (0::nat)) ((f::'A => hollight.real) x))
-==> real_le (hollight.sum u f) (hollight.sum v f)"
-  by (import hollight SUM_SUBSET_SIMPLE)
-
-lemma SUM_IMAGE_NONZERO: "finite (xb::'A => bool) &
-(ALL (xc::'A) xd::'A.
-    xc : xb & xd : xb & xc ~= xd & (xa::'A => 'B) xc = xa xd -->
-    (x::'B => hollight.real) (xa xc) = real_of_num (0::nat))
-==> hollight.sum (xa ` xb) x = hollight.sum xb (x o xa)"
-  by (import hollight SUM_IMAGE_NONZERO)
-
-lemma SUM_BIJECTION: "(ALL x::'A. x : (xb::'A => bool) --> (xa::'A => 'A) x : xb) &
-(ALL y::'A. y : xb --> (EX! x::'A. x : xb & xa x = y))
-==> hollight.sum xb (x::'A => hollight.real) = hollight.sum xb (x o xa)"
-  by (import hollight SUM_BIJECTION)
-
-lemma SUM_SUM_PRODUCT: "finite (x::'A => bool) &
-(ALL i::'A. i : x --> finite ((xa::'A => 'B => bool) i))
-==> hollight.sum x
-     (%x::'A. hollight.sum (xa x) ((xb::'A => 'B => hollight.real) x)) =
-    hollight.sum
-     {u::'A * 'B. EX (i::'A) j::'B. (i : x & j : xa i) & u = (i, j)}
-     (SOME f::'A * 'B => hollight.real.
-         ALL (i::'A) j::'B. f (i, j) = xb i j)"
-  by (import hollight SUM_SUM_PRODUCT)
-
-lemma SUM_EQ_GENERAL: "(ALL y::'B.
-    y : (xa::'B => bool) -->
-    (EX! xa::'A. xa : (x::'A => bool) & (xd::'A => 'B) xa = y)) &
-(ALL xe::'A.
-    xe : x -->
-    xd xe : xa &
-    (xc::'B => hollight.real) (xd xe) = (xb::'A => hollight.real) xe)
-==> hollight.sum x xb = hollight.sum xa xc"
-  by (import hollight SUM_EQ_GENERAL)
-
-lemma SUM_EQ_GENERAL_INVERSES: "(ALL y::'B.
-    y : (xa::'B => bool) -->
-    (xe::'B => 'A) y : (x::'A => bool) & (xd::'A => 'B) (xe y) = y) &
-(ALL xf::'A.
-    xf : x -->
-    xd xf : xa &
-    xe (xd xf) = xf &
-    (xc::'B => hollight.real) (xd xf) = (xb::'A => hollight.real) xf)
-==> hollight.sum x xb = hollight.sum xa xc"
-  by (import hollight SUM_EQ_GENERAL_INVERSES)
-
-lemma SUM_INJECTION: "finite (xb::'q_71007 => bool) &
-(ALL x::'q_71007. x : xb --> (xa::'q_71007 => 'q_71007) x : xb) &
-(ALL (x::'q_71007) y::'q_71007. x : xb & y : xb & xa x = xa y --> x = y)
-==> hollight.sum xb ((x::'q_71007 => hollight.real) o xa) =
-    hollight.sum xb x"
-  by (import hollight SUM_INJECTION)
-
-lemma SUM_UNION_NONZERO: "finite (xa::'q_71050 => bool) &
-finite (xb::'q_71050 => bool) &
-(ALL xc::'q_71050.
-    xc : xa Int xb -->
-    (x::'q_71050 => hollight.real) xc = real_of_num (0::nat))
-==> hollight.sum (xa Un xb) x =
-    real_add (hollight.sum xa x) (hollight.sum xb x)"
-  by (import hollight SUM_UNION_NONZERO)
-
-lemma SUM_UNIONS_NONZERO: "finite (x::('A => bool) => bool) &
-(ALL t::'A => bool. t : x --> finite t) &
-(ALL (t1::'A => bool) (t2::'A => bool) xa::'A.
-    t1 : x & t2 : x & t1 ~= t2 & xa : t1 & xa : t2 -->
-    (f::'A => hollight.real) xa = real_of_num (0::nat))
-==> hollight.sum (Union x) f =
-    hollight.sum x (%t::'A => bool. hollight.sum t f)"
-  by (import hollight SUM_UNIONS_NONZERO)
-
-lemma SUM_CASES: "finite (x::'A => bool)
-==> hollight.sum x
-     (%x::'A.
-         if (xa::'A => bool) x then (xb::'A => hollight.real) x
-         else (xc::'A => hollight.real) x) =
-    real_add (hollight.sum {u::'A. EX xb::'A. (xb : x & xa xb) & u = xb} xb)
-     (hollight.sum {u::'A. EX xb::'A. (xb : x & ~ xa xb) & u = xb} xc)"
-  by (import hollight SUM_CASES)
-
-lemma SUM_CASES_1: "finite (s::'q_71319 => bool) & (a::'q_71319) : s
-==> hollight.sum s
-     (%x::'q_71319.
-         if x = a then y::hollight.real
-         else (f::'q_71319 => hollight.real) x) =
-    real_add (hollight.sum s f) (real_sub y (f a))"
-  by (import hollight SUM_CASES_1)
-
-lemma SUM_LE_INCLUDED: "finite (s::'A => bool) &
-finite (t::'B => bool) &
-(ALL y::'B.
-    y : t --> real_le (real_of_num (0::nat)) ((g::'B => hollight.real) y)) &
-(ALL x::'A.
-    x : s -->
-    (EX y::'B.
-        y : t &
-        (i::'B => 'A) y = x & real_le ((f::'A => hollight.real) x) (g y)))
-==> real_le (hollight.sum s f) (hollight.sum t g)"
-  by (import hollight SUM_LE_INCLUDED)
-
-lemma SUM_IMAGE_LE: "finite (s::'A => bool) &
-(ALL x::'A.
-    x : s -->
-    real_le (real_of_num (0::nat))
-     ((g::'B => hollight.real) ((f::'A => 'B) x)))
-==> real_le (hollight.sum (f ` s) g) (hollight.sum s (g o f))"
-  by (import hollight SUM_IMAGE_LE)
-
-lemma SUM_CLOSED: "(P::hollight.real => bool) (real_of_num (0::nat)) &
-(ALL (x::hollight.real) y::hollight.real. P x & P y --> P (real_add x y)) &
-(ALL a::'A. a : (s::'A => bool) --> P ((f::'A => hollight.real) a))
-==> P (hollight.sum s f)"
-  by (import hollight SUM_CLOSED)
-
-lemma SUM_ADD_NUMSEG: "hollight.sum {xb::nat..xc::nat}
- (%i::nat.
-     real_add ((x::nat => hollight.real) i)
-      ((xa::nat => hollight.real) i)) =
-real_add (hollight.sum {xb..xc} x) (hollight.sum {xb..xc} xa)"
-  by (import hollight SUM_ADD_NUMSEG)
-
-lemma SUM_SUB_NUMSEG: "hollight.sum {xb::nat..xc::nat}
- (%i::nat.
-     real_sub ((x::nat => hollight.real) i)
-      ((xa::nat => hollight.real) i)) =
-real_sub (hollight.sum {xb..xc} x) (hollight.sum {xb..xc} xa)"
-  by (import hollight SUM_SUB_NUMSEG)
-
-lemma SUM_LE_NUMSEG: "(!!i::nat.
-    (xb::nat) <= i & i <= (xc::nat)
-    ==> real_le ((x::nat => hollight.real) i)
-         ((xa::nat => hollight.real) i))
-==> real_le (hollight.sum {xb..xc} x) (hollight.sum {xb..xc} xa)"
-  by (import hollight SUM_LE_NUMSEG)
-
-lemma SUM_EQ_NUMSEG: "(!!i::nat.
-    (m::nat) <= i & i <= (n::nat)
-    ==> (f::nat => hollight.real) i = (g::nat => hollight.real) i)
-==> hollight.sum {m..n} f = hollight.sum {m..n} g"
-  by (import hollight SUM_EQ_NUMSEG)
-
-lemma SUM_ABS_NUMSEG: "real_le
- (real_abs (hollight.sum {xa::nat..xb::nat} (x::nat => hollight.real)))
- (hollight.sum {xa..xb} (%i::nat. real_abs (x i)))"
-  by (import hollight SUM_ABS_NUMSEG)
-
-lemma SUM_CONST_NUMSEG: "hollight.sum {xa..xb} (%n. x) = real_mul (real_of_num (xb + 1 - xa)) x"
-  by (import hollight SUM_CONST_NUMSEG)
-
-lemma SUM_EQ_0_NUMSEG: "(!!i::nat.
-    (m::nat) <= i & i <= (n::nat)
-    ==> (x::nat => hollight.real) i = real_of_num (0::nat))
-==> hollight.sum {m..n} x = real_of_num (0::nat)"
-  by (import hollight SUM_EQ_0_NUMSEG)
-
-lemma SUM_TRIV_NUMSEG: "(n::nat) < (m::nat)
-==> hollight.sum {m..n} (f::nat => hollight.real) = real_of_num (0::nat)"
-  by (import hollight SUM_TRIV_NUMSEG)
-
-lemma SUM_POS_LE_NUMSEG: "(!!p::nat.
-    (x::nat) <= p & p <= (xa::nat)
-    ==> real_le (real_of_num (0::nat)) ((xb::nat => hollight.real) p))
-==> real_le (real_of_num (0::nat)) (hollight.sum {x..xa} xb)"
-  by (import hollight SUM_POS_LE_NUMSEG)
-
-lemma SUM_POS_EQ_0_NUMSEG: "[| (ALL p::nat.
-       (m::nat) <= p & p <= (n::nat) -->
-       real_le (real_of_num (0::nat)) ((f::nat => hollight.real) p)) &
-   hollight.sum {m..n} f = real_of_num (0::nat);
-   m <= (p::nat) & p <= n |]
-==> f p = real_of_num (0::nat)"
-  by (import hollight SUM_POS_EQ_0_NUMSEG)
-
-lemma SUM_SING_NUMSEG: "hollight.sum {xa::nat..xa} (x::nat => hollight.real) = x xa"
-  by (import hollight SUM_SING_NUMSEG)
-
-lemma SUM_CLAUSES_NUMSEG: "(ALL m. hollight.sum {m..0} f = (if m = 0 then f 0 else real_of_num 0)) &
-(ALL m n.
-    hollight.sum {m..Suc n} f =
-    (if m <= Suc n then real_add (hollight.sum {m..n} f) (f (Suc n))
-     else hollight.sum {m..n} f))"
-  by (import hollight SUM_CLAUSES_NUMSEG)
-
-lemma SUM_SWAP_NUMSEG: "hollight.sum {a::nat..b::nat}
- (%i::nat.
-     hollight.sum {c::nat..d::nat} ((f::nat => nat => hollight.real) i)) =
-hollight.sum {c..d} (%j::nat. hollight.sum {a..b} (%i::nat. f i j))"
-  by (import hollight SUM_SWAP_NUMSEG)
-
-lemma SUM_ADD_SPLIT: "(xa::nat) <= (xb::nat) + (1::nat)
-==> hollight.sum {xa..xb + (xc::nat)} (x::nat => hollight.real) =
-    real_add (hollight.sum {xa..xb} x)
-     (hollight.sum {xb + (1::nat)..xb + xc} x)"
-  by (import hollight SUM_ADD_SPLIT)
-
-lemma SUM_OFFSET: "hollight.sum {(xb::nat) + (x::nat)..(xc::nat) + x}
- (xa::nat => hollight.real) =
-hollight.sum {xb..xc} (%i::nat. xa (i + x))"
-  by (import hollight SUM_OFFSET)
-
-lemma SUM_OFFSET_0: "(xa::nat) <= (xb::nat)
-==> hollight.sum {xa..xb} (x::nat => hollight.real) =
-    hollight.sum {0::nat..xb - xa} (%i::nat. x (i + xa))"
-  by (import hollight SUM_OFFSET_0)
-
-lemma SUM_CLAUSES_LEFT: "(xa::nat) <= (xb::nat)
-==> hollight.sum {xa..xb} (x::nat => hollight.real) =
-    real_add (x xa) (hollight.sum {xa + (1::nat)..xb} x)"
-  by (import hollight SUM_CLAUSES_LEFT)
-
-lemma SUM_CLAUSES_RIGHT: "(0::nat) < (n::nat) & (m::nat) <= n
-==> hollight.sum {m..n} (f::nat => hollight.real) =
-    real_add (hollight.sum {m..n - (1::nat)} f) (f n)"
-  by (import hollight SUM_CLAUSES_RIGHT)
-
-lemma SUM_PAIR: "hollight.sum {(2::nat) * (m::nat)..(2::nat) * (n::nat) + (1::nat)}
- (f::nat => hollight.real) =
-hollight.sum {m..n}
- (%i::nat. real_add (f ((2::nat) * i)) (f ((2::nat) * i + (1::nat))))"
-  by (import hollight SUM_PAIR)
-
-lemma REAL_OF_NUM_SUM_NUMSEG: "real_of_num (nsum {xa::nat..xb::nat} (x::nat => nat)) =
-hollight.sum {xa..xb} (%i::nat. real_of_num (x i))"
-  by (import hollight REAL_OF_NUM_SUM_NUMSEG)
-
-lemma SUM_PARTIAL_SUC: "hollight.sum {m::nat..n::nat}
- (%k::nat.
-     real_mul ((f::nat => hollight.real) k)
-      (real_sub ((g::nat => hollight.real) (k + (1::nat))) (g k))) =
-(if m <= n
- then real_sub
-       (real_sub (real_mul (f (n + (1::nat))) (g (n + (1::nat))))
-         (real_mul (f m) (g m)))
-       (hollight.sum {m..n}
-         (%k::nat.
-             real_mul (g (k + (1::nat)))
-              (real_sub (f (k + (1::nat))) (f k))))
- else real_of_num (0::nat))"
-  by (import hollight SUM_PARTIAL_SUC)
-
-lemma SUM_PARTIAL_PRE: "hollight.sum {m::nat..n::nat}
- (%k::nat.
-     real_mul ((f::nat => hollight.real) k)
-      (real_sub ((g::nat => hollight.real) k) (g (k - (1::nat))))) =
-(if m <= n
- then real_sub
-       (real_sub (real_mul (f (n + (1::nat))) (g n))
-         (real_mul (f m) (g (m - (1::nat)))))
-       (hollight.sum {m..n}
-         (%k::nat. real_mul (g k) (real_sub (f (k + (1::nat))) (f k))))
- else real_of_num (0::nat))"
-  by (import hollight SUM_PARTIAL_PRE)
-
-lemma SUM_DIFFS: "hollight.sum {x::nat..xa::nat}
- (%x::nat. real_sub ((f::nat => hollight.real) x) (f (x + (1::nat)))) =
-(if x <= xa then real_sub (f x) (f (xa + (1::nat)))
- else real_of_num (0::nat))"
-  by (import hollight SUM_DIFFS)
-
-lemma SUM_DIFFS_ALT: "hollight.sum {m::nat..n::nat}
- (%x::nat. real_sub ((f::nat => hollight.real) (x + (1::nat))) (f x)) =
-(if m <= n then real_sub (f (n + (1::nat))) (f m) else real_of_num (0::nat))"
-  by (import hollight SUM_DIFFS_ALT)
-
-lemma SUM_COMBINE_R: "(m::nat) <= (n::nat) + (1::nat) & n <= (p::nat)
-==> real_add (hollight.sum {m..n} (f::nat => hollight.real))
-     (hollight.sum {n + (1::nat)..p} f) =
-    hollight.sum {m..p} f"
-  by (import hollight SUM_COMBINE_R)
-
-lemma SUM_COMBINE_L: "(0::nat) < (n::nat) & (m::nat) <= n & n <= (p::nat) + (1::nat)
-==> real_add (hollight.sum {m..n - (1::nat)} (f::nat => hollight.real))
-     (hollight.sum {n..p} f) =
-    hollight.sum {m..p} f"
-  by (import hollight SUM_COMBINE_L)
-
-lemma REAL_SUB_POW: "1 <= xb
-==> real_sub (real_pow x xb) (real_pow xa xb) =
-    real_mul (real_sub x xa)
-     (hollight.sum {0..xb - 1}
-       (%i. real_mul (real_pow x i) (real_pow xa (xb - 1 - i))))"
-  by (import hollight REAL_SUB_POW)
-
-lemma REAL_SUB_POW_R1: "1 <= n
-==> real_sub (real_pow x n) (real_of_num 1) =
-    real_mul (real_sub x (real_of_num 1))
-     (hollight.sum {0..n - 1} (real_pow x))"
-  by (import hollight REAL_SUB_POW_R1)
-
-lemma REAL_SUB_POW_L1: "1 <= xa
-==> real_sub (real_of_num 1) (real_pow x xa) =
-    real_mul (real_sub (real_of_num 1) x)
-     (hollight.sum {0..xa - 1} (real_pow x))"
-  by (import hollight REAL_SUB_POW_L1)
-
-definition
-  dimindex :: "('A => bool) => nat"  where
-  "(op ==::(('A::type => bool) => nat) => (('A::type => bool) => nat) => prop)
- (dimindex::('A::type => bool) => nat)
- (%u::'A::type => bool.
-     (If::bool => nat => nat => nat)
-      ((finite::('A::type => bool) => bool) (UNIV::'A::type => bool))
-      ((CARD::('A::type => bool) => nat) (UNIV::'A::type => bool)) (1::nat))"
-
-lemma DEF_dimindex: "(op =::(('A::type => bool) => nat) => (('A::type => bool) => nat) => bool)
- (dimindex::('A::type => bool) => nat)
- (%u::'A::type => bool.
-     (If::bool => nat => nat => nat)
-      ((finite::('A::type => bool) => bool) (UNIV::'A::type => bool))
-      ((CARD::('A::type => bool) => nat) (UNIV::'A::type => bool)) (1::nat))"
-  by (import hollight DEF_dimindex)
-
-lemma DIMINDEX_NONZERO: "dimindex (s::'A => bool) ~= (0::nat)"
-  by (import hollight DIMINDEX_NONZERO)
-
-lemma DIMINDEX_GE_1: "(1::nat) <= dimindex (x::'A => bool)"
-  by (import hollight DIMINDEX_GE_1)
-
-lemma DIMINDEX_UNIV: "(op =::nat => nat => bool)
- ((dimindex::('A::type => bool) => nat) (x::'A::type => bool))
- ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool))"
-  by (import hollight DIMINDEX_UNIV)
-
-lemma DIMINDEX_UNIQUE: "(op ==>::prop => prop => prop)
- ((Trueprop::bool => prop)
-   ((HAS_SIZE::('A::type => bool) => nat => bool) (UNIV::'A::type => bool)
-     (n::nat)))
- ((Trueprop::bool => prop)
-   ((op =::nat => nat => bool)
-     ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool)) n))"
-  by (import hollight DIMINDEX_UNIQUE)
-
-typedef (open) ('A) finite_image = "{x::nat. x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat))) (dimindex UNIV)}"  morphisms "dest_finite_image" "finite_index"
-  apply (rule light_ex_imp_nonempty[where t="SOME x::nat. x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat))) (dimindex UNIV)"])
-  by (import hollight TYDEF_finite_image)
-
-syntax
-  dest_finite_image :: _ 
-
-syntax
-  finite_index :: _ 
-
-lemmas "TYDEF_finite_image_@intern" = typedef_hol2hollight 
-  [where a="a :: 'A finite_image" and r=r ,
-   OF type_definition_finite_image]
-
-lemma FINITE_IMAGE_IMAGE: "(op =::('A::type finite_image => bool)
-       => ('A::type finite_image => bool) => bool)
- (UNIV::'A::type finite_image => bool)
- ((op `::(nat => 'A::type finite_image)
-         => (nat => bool) => 'A::type finite_image => bool)
-   (finite_index::nat => 'A::type finite_image)
-   ((atLeastAtMost::nat => nat => nat => bool) (1::nat)
-     ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool))))"
-  by (import hollight FINITE_IMAGE_IMAGE)
-
-lemma HAS_SIZE_FINITE_IMAGE: "(HAS_SIZE::('A::type finite_image => bool) => nat => bool)
- (UNIV::'A::type finite_image => bool)
- ((dimindex::('A::type => bool) => nat) (s::'A::type => bool))"
-  by (import hollight HAS_SIZE_FINITE_IMAGE)
-
-lemma CARD_FINITE_IMAGE: "(op =::nat => nat => bool)
- ((CARD::('A::type finite_image => bool) => nat)
-   (UNIV::'A::type finite_image => bool))
- ((dimindex::('A::type => bool) => nat) (s::'A::type => bool))"
-  by (import hollight CARD_FINITE_IMAGE)
-
-lemma FINITE_FINITE_IMAGE: "(finite::('A::type finite_image => bool) => bool)
- (UNIV::'A::type finite_image => bool)"
-  by (import hollight FINITE_FINITE_IMAGE)
-
-lemma DIMINDEX_FINITE_IMAGE: "dimindex (s::'A finite_image => bool) = dimindex (t::'A => bool)"
-  by (import hollight DIMINDEX_FINITE_IMAGE)
-
-lemma FINITE_INDEX_WORKS: "(Ex1::(nat => bool) => bool)
- (%xa::nat.
-     (op &::bool => bool => bool) ((op <=::nat => nat => bool) (1::nat) xa)
-      ((op &::bool => bool => bool)
-        ((op <=::nat => nat => bool) xa
-          ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool)))
-        ((op =::'A::type finite_image => 'A::type finite_image => bool)
-          ((finite_index::nat => 'A::type finite_image) xa)
-          (x::'A::type finite_image))))"
-  by (import hollight FINITE_INDEX_WORKS)
-
-lemma FINITE_INDEX_INJ: "(op ==>::prop => prop => prop)
- ((Trueprop::bool => prop)
-   ((op &::bool => bool => bool)
-     ((op <=::nat => nat => bool) (1::nat) (i::nat))
-     ((op &::bool => bool => bool)
-       ((op <=::nat => nat => bool) i
-         ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool)))
-       ((op &::bool => bool => bool)
-         ((op <=::nat => nat => bool) (1::nat) (j::nat))
-         ((op <=::nat => nat => bool) j
-           ((dimindex::('A::type => bool) => nat)
-             (UNIV::'A::type => bool)))))))
- ((Trueprop::bool => prop)
-   ((op =::bool => bool => bool)
-     ((op =::'A::type finite_image => 'A::type finite_image => bool)
-       ((finite_index::nat => 'A::type finite_image) i)
-       ((finite_index::nat => 'A::type finite_image) j))
-     ((op =::nat => nat => bool) i j)))"
-  by (import hollight FINITE_INDEX_INJ)
-
-lemma FORALL_FINITE_INDEX: "(op =::bool => bool => bool)
- ((All::('N::type finite_image => bool) => bool)
-   (P::'N::type finite_image => bool))
- ((All::(nat => bool) => bool)
-   (%i::nat.
-       (op -->::bool => bool => bool)
-        ((op &::bool => bool => bool)
-          ((op <=::nat => nat => bool) (1::nat) i)
-          ((op <=::nat => nat => bool) i
-            ((dimindex::('N::type => bool) => nat)
-              (UNIV::'N::type => bool))))
-        (P ((finite_index::nat => 'N::type finite_image) i))))"
-  by (import hollight FORALL_FINITE_INDEX)
-
-typedef (open) ('A, 'B) cart = "{f. True}"  morphisms "dest_cart" "mk_cart"
-  apply (rule light_ex_imp_nonempty[where t="SOME f. True"])
-  by (import hollight TYDEF_cart)
-
-syntax
-  dest_cart :: _ 
-
-syntax
-  mk_cart :: _ 
-
-lemmas "TYDEF_cart_@intern" = typedef_hol2hollight 
-  [where a="a :: ('A, 'B) cart" and r=r ,
-   OF type_definition_cart]
-
-consts
-  "$" :: "('q_73536, 'q_73546) cart => nat => 'q_73536" ("$")
-
-defs
-  "$_def": "$ == %(u::('q_73536, 'q_73546) cart) ua::nat. dest_cart u (finite_index ua)"
-
-lemma "DEF_$": "$ = (%(u::('q_73536, 'q_73546) cart) ua::nat. dest_cart u (finite_index ua))"
-  by (import hollight "DEF_$")
-
-lemma CART_EQ: "(op =::bool => bool => bool)
- ((op =::('A::type, 'B::type) cart => ('A::type, 'B::type) cart => bool)
-   (x::('A::type, 'B::type) cart) (y::('A::type, 'B::type) cart))
- ((All::(nat => bool) => bool)
-   (%xa::nat.
-       (op -->::bool => bool => bool)
-        ((op &::bool => bool => bool)
-          ((op <=::nat => nat => bool) (1::nat) xa)
-          ((op <=::nat => nat => bool) xa
-            ((dimindex::('B::type => bool) => nat)
-              (UNIV::'B::type => bool))))
-        ((op =::'A::type => 'A::type => bool)
-          (($::('A::type, 'B::type) cart => nat => 'A::type) x xa)
-          (($::('A::type, 'B::type) cart => nat => 'A::type) y xa))))"
-  by (import hollight CART_EQ)
-
-definition
-  lambda :: "(nat => 'A) => ('A, 'B) cart"  where
-  "(op ==::((nat => 'A::type) => ('A::type, 'B::type) cart)
-        => ((nat => 'A::type) => ('A::type, 'B::type) cart) => prop)
- (lambda::(nat => 'A::type) => ('A::type, 'B::type) cart)
- (%u::nat => 'A::type.
-     (Eps::(('A::type, 'B::type) cart => bool) => ('A::type, 'B::type) cart)
-      (%f::('A::type, 'B::type) cart.
-          (All::(nat => bool) => bool)
-           (%i::nat.
-               (op -->::bool => bool => bool)
-                ((op &::bool => bool => bool)
-                  ((op <=::nat => nat => bool) (1::nat) i)
-                  ((op <=::nat => nat => bool) i
-                    ((dimindex::('B::type => bool) => nat)
-                      (UNIV::'B::type => bool))))
-                ((op =::'A::type => 'A::type => bool)
-                  (($::('A::type, 'B::type) cart => nat => 'A::type) f i)
-                  (u i)))))"
-
-lemma DEF_lambda: "(op =::((nat => 'A::type) => ('A::type, 'B::type) cart)
-       => ((nat => 'A::type) => ('A::type, 'B::type) cart) => bool)
- (lambda::(nat => 'A::type) => ('A::type, 'B::type) cart)
- (%u::nat => 'A::type.
-     (Eps::(('A::type, 'B::type) cart => bool) => ('A::type, 'B::type) cart)
-      (%f::('A::type, 'B::type) cart.
-          (All::(nat => bool) => bool)
-           (%i::nat.
-               (op -->::bool => bool => bool)
-                ((op &::bool => bool => bool)
-                  ((op <=::nat => nat => bool) (1::nat) i)
-                  ((op <=::nat => nat => bool) i
-                    ((dimindex::('B::type => bool) => nat)
-                      (UNIV::'B::type => bool))))
-                ((op =::'A::type => 'A::type => bool)
-                  (($::('A::type, 'B::type) cart => nat => 'A::type) f i)
-                  (u i)))))"
-  by (import hollight DEF_lambda)
-
-lemma LAMBDA_BETA: "(op ==>::prop => prop => prop)
- ((Trueprop::bool => prop)
-   ((op &::bool => bool => bool)
-     ((op <=::nat => nat => bool) (1::nat) (x::nat))
-     ((op <=::nat => nat => bool) x
-       ((dimindex::('B::type => bool) => nat) (UNIV::'B::type => bool)))))
- ((Trueprop::bool => prop)
-   ((op =::'A::type => 'A::type => bool)
-     (($::('A::type, 'B::type) cart => nat => 'A::type)
-       ((lambda::(nat => 'A::type) => ('A::type, 'B::type) cart)
-         (g::nat => 'A::type))
-       x)
-     (g x)))"
-  by (import hollight LAMBDA_BETA)
-
-lemma LAMBDA_UNIQUE: "(op =::bool => bool => bool)
- ((All::(nat => bool) => bool)
-   (%i::nat.
-       (op -->::bool => bool => bool)
-        ((op &::bool => bool => bool)
-          ((op <=::nat => nat => bool) (1::nat) i)
-          ((op <=::nat => nat => bool) i
-            ((dimindex::('B::type => bool) => nat)
-              (UNIV::'B::type => bool))))
-        ((op =::'A::type => 'A::type => bool)
-          (($::('A::type, 'B::type) cart => nat => 'A::type)
-            (x::('A::type, 'B::type) cart) i)
-          ((xa::nat => 'A::type) i))))
- ((op =::('A::type, 'B::type) cart => ('A::type, 'B::type) cart => bool)
-   ((lambda::(nat => 'A::type) => ('A::type, 'B::type) cart) xa) x)"
-  by (import hollight LAMBDA_UNIQUE)
-
-lemma LAMBDA_ETA: "lambda ($ (x::('q_73734, 'q_73738) cart)) = x"
-  by (import hollight LAMBDA_ETA)
-
-lemma FINITE_INDEX_INRANGE: "(Ex::(nat => bool) => bool)
- (%xa::nat.
-     (op &::bool => bool => bool) ((op <=::nat => nat => bool) (1::nat) xa)
-      ((op &::bool => bool => bool)
-        ((op <=::nat => nat => bool) xa
-          ((dimindex::('N::type => bool) => nat) (UNIV::'N::type => bool)))
-        ((All::(('A::type, 'N::type) cart => bool) => bool)
-          (%xb::('A::type, 'N::type) cart.
-              (op =::'A::type => 'A::type => bool)
-               (($::('A::type, 'N::type) cart => nat => 'A::type) xb
-                 (x::nat))
-               (($::('A::type, 'N::type) cart => nat => 'A::type) xb xa)))))"
-  by (import hollight FINITE_INDEX_INRANGE)
-
-lemma CART_EQ_FULL: "((x::('A, 'N) cart) = (y::('A, 'N) cart)) = (ALL i::nat. $ x i = $ y i)"
-  by (import hollight CART_EQ_FULL)
-
-typedef (open) ('A, 'B) finite_sum = "{x::nat.
- x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat)))
-      (dimindex UNIV + dimindex UNIV)}"  morphisms "dest_finite_sum" "mk_finite_sum"
-  apply (rule light_ex_imp_nonempty[where t="SOME x::nat.
-   x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat)))
-        (dimindex UNIV + dimindex UNIV)"])
-  by (import hollight TYDEF_finite_sum)
-
-syntax
-  dest_finite_sum :: _ 
-
-syntax
-  mk_finite_sum :: _ 
-
-lemmas "TYDEF_finite_sum_@intern" = typedef_hol2hollight 
-  [where a="a :: ('A, 'B) finite_sum" and r=r ,
-   OF type_definition_finite_sum]
-
-definition
-  pastecart :: "('A, 'M) cart => ('A, 'N) cart => ('A, ('M, 'N) finite_sum) cart"  where
-  "(op ==::(('A::type, 'M::type) cart
-         => ('A::type, 'N::type) cart
-            => ('A::type, ('M::type, 'N::type) finite_sum) cart)
-        => (('A::type, 'M::type) cart
-            => ('A::type, 'N::type) cart
-               => ('A::type, ('M::type, 'N::type) finite_sum) cart)
-           => prop)
- (pastecart::('A::type, 'M::type) cart
-             => ('A::type, 'N::type) cart
-                => ('A::type, ('M::type, 'N::type) finite_sum) cart)
- (%(u::('A::type, 'M::type) cart) ua::('A::type, 'N::type) cart.
-     (lambda::(nat => 'A::type)
-              => ('A::type, ('M::type, 'N::type) finite_sum) cart)
-      (%i::nat.
-          (If::bool => 'A::type => 'A::type => 'A::type)
-           ((op <=::nat => nat => bool) i
-             ((dimindex::('M::type => bool) => nat)
-               (UNIV::'M::type => bool)))
-           (($::('A::type, 'M::type) cart => nat => 'A::type) u i)
-           (($::('A::type, 'N::type) cart => nat => 'A::type) ua
-             ((op -::nat => nat => nat) i
-               ((dimindex::('M::type => bool) => nat)
-                 (UNIV::'M::type => bool))))))"
-
-lemma DEF_pastecart: "(op =::(('A::type, 'M::type) cart
-        => ('A::type, 'N::type) cart
-           => ('A::type, ('M::type, 'N::type) finite_sum) cart)
-       => (('A::type, 'M::type) cart
-           => ('A::type, 'N::type) cart
-              => ('A::type, ('M::type, 'N::type) finite_sum) cart)
-          => bool)
- (pastecart::('A::type, 'M::type) cart
-             => ('A::type, 'N::type) cart
-                => ('A::type, ('M::type, 'N::type) finite_sum) cart)
- (%(u::('A::type, 'M::type) cart) ua::('A::type, 'N::type) cart.
-     (lambda::(nat => 'A::type)
-              => ('A::type, ('M::type, 'N::type) finite_sum) cart)
-      (%i::nat.
-          (If::bool => 'A::type => 'A::type => 'A::type)
-           ((op <=::nat => nat => bool) i
-             ((dimindex::('M::type => bool) => nat)
-               (UNIV::'M::type => bool)))
-           (($::('A::type, 'M::type) cart => nat => 'A::type) u i)
-           (($::('A::type, 'N::type) cart => nat => 'A::type) ua
-             ((op -::nat => nat => nat) i
-               ((dimindex::('M::type => bool) => nat)
-                 (UNIV::'M::type => bool))))))"
-  by (import hollight DEF_pastecart)
-
-definition
-  fstcart :: "('A, ('M, 'N) finite_sum) cart => ('A, 'M) cart"  where
-  "fstcart == %u::('A, ('M, 'N) finite_sum) cart. lambda ($ u)"
-
-lemma DEF_fstcart: "fstcart = (%u::('A, ('M, 'N) finite_sum) cart. lambda ($ u))"
-  by (import hollight DEF_fstcart)
-
-definition
-  sndcart :: "('A, ('M, 'N) finite_sum) cart => ('A, 'N) cart"  where
-  "(op ==::(('A::type, ('M::type, 'N::type) finite_sum) cart
-         => ('A::type, 'N::type) cart)
-        => (('A::type, ('M::type, 'N::type) finite_sum) cart
-            => ('A::type, 'N::type) cart)
-           => prop)
- (sndcart::('A::type, ('M::type, 'N::type) finite_sum) cart
-           => ('A::type, 'N::type) cart)
- (%u::('A::type, ('M::type, 'N::type) finite_sum) cart.
-     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
-      (%i::nat.
-          ($::('A::type, ('M::type, 'N::type) finite_sum) cart
-              => nat => 'A::type)
-           u ((op +::nat => nat => nat) i
-               ((dimindex::('M::type => bool) => nat)
-                 (UNIV::'M::type => bool)))))"
-
-lemma DEF_sndcart: "(op =::(('A::type, ('M::type, 'N::type) finite_sum) cart
-        => ('A::type, 'N::type) cart)
-       => (('A::type, ('M::type, 'N::type) finite_sum) cart
-           => ('A::type, 'N::type) cart)
-          => bool)
- (sndcart::('A::type, ('M::type, 'N::type) finite_sum) cart
-           => ('A::type, 'N::type) cart)
- (%u::('A::type, ('M::type, 'N::type) finite_sum) cart.
-     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
-      (%i::nat.
-          ($::('A::type, ('M::type, 'N::type) finite_sum) cart
-              => nat => 'A::type)
-           u ((op +::nat => nat => nat) i
-               ((dimindex::('M::type => bool) => nat)
-                 (UNIV::'M::type => bool)))))"
-  by (import hollight DEF_sndcart)
-
-lemma FINITE_SUM_IMAGE: "(op =::(('A::type, 'B::type) finite_sum => bool)
-       => (('A::type, 'B::type) finite_sum => bool) => bool)
- (UNIV::('A::type, 'B::type) finite_sum => bool)
- ((op `::(nat => ('A::type, 'B::type) finite_sum)
-         => (nat => bool) => ('A::type, 'B::type) finite_sum => bool)
-   (mk_finite_sum::nat => ('A::type, 'B::type) finite_sum)
-   ((atLeastAtMost::nat => nat => nat => bool) (1::nat)
-     ((op +::nat => nat => nat)
-       ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool))
-       ((dimindex::('B::type => bool) => nat) (UNIV::'B::type => bool)))))"
-  by (import hollight FINITE_SUM_IMAGE)
-
-lemma HAS_SIZE_1: "(HAS_SIZE::(unit => bool) => nat => bool) (UNIV::unit => bool) (1::nat)"
-  by (import hollight HAS_SIZE_1)
-
-typedef (open) N_2 = "{x. x : dotdot (NUMERAL (NUMERAL_BIT1 0))
-         (NUMERAL (NUMERAL_BIT0 (NUMERAL_BIT1 0)))}"  morphisms "dest_auto_define_finite_type_2" "mk_auto_define_finite_type_2"
-  apply (rule light_ex_imp_nonempty[where t="SOME x.
-   x : dotdot (NUMERAL (NUMERAL_BIT1 0))
-        (NUMERAL (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"])
-  by (import hollight TYDEF_2)
-
-syntax
-  dest_auto_define_finite_type_2 :: _ 
-
-syntax
-  mk_auto_define_finite_type_2 :: _ 
-
-lemmas "TYDEF_2_@intern" = typedef_hol2hollight 
-  [where a="a :: N_2" and r=r ,
-   OF type_definition_N_2]
-
-typedef (open) N_3 = "{x. x : dotdot (NUMERAL (NUMERAL_BIT1 0))
-         (NUMERAL (NUMERAL_BIT1 (NUMERAL_BIT1 0)))}"  morphisms "dest_auto_define_finite_type_3" "mk_auto_define_finite_type_3"
-  apply (rule light_ex_imp_nonempty[where t="SOME x.
-   x : dotdot (NUMERAL (NUMERAL_BIT1 0))
-        (NUMERAL (NUMERAL_BIT1 (NUMERAL_BIT1 0)))"])
-  by (import hollight TYDEF_3)
-
-syntax
-  dest_auto_define_finite_type_3 :: _ 
-
-syntax
-  mk_auto_define_finite_type_3 :: _ 
-
-lemmas "TYDEF_3_@intern" = typedef_hol2hollight 
-  [where a="a :: N_3" and r=r ,
-   OF type_definition_N_3]
-
-lemma FINITE_CART: "(op ==>::prop => prop => prop)
- ((all::(nat => prop) => prop)
-   (%i::nat.
-       (op ==>::prop => prop => prop)
-        ((Trueprop::bool => prop)
-          ((op &::bool => bool => bool)
-            ((op <=::nat => nat => bool) (1::nat) i)
-            ((op <=::nat => nat => bool) i
-              ((dimindex::('N::type => bool) => nat)
-                (UNIV::'N::type => bool)))))
-        ((Trueprop::bool => prop)
-          ((finite::('A::type => bool) => bool)
-            ((Collect::('A::type => bool) => 'A::type => bool)
-              (%u::'A::type.
-                  (Ex::('A::type => bool) => bool)
-                   (%x::'A::type.
-                       (op &::bool => bool => bool)
-                        ((P::nat => 'A::type => bool) i x)
-                        ((op =::'A::type => 'A::type => bool) u x))))))))
- ((Trueprop::bool => prop)
-   ((finite::(('A::type, 'N::type) cart => bool) => bool)
-     ((Collect::(('A::type, 'N::type) cart => bool)
-                => ('A::type, 'N::type) cart => bool)
-       (%u::('A::type, 'N::type) cart.
-           (Ex::(('A::type, 'N::type) cart => bool) => bool)
-            (%v::('A::type, 'N::type) cart.
-                (op &::bool => bool => bool)
-                 ((All::(nat => bool) => bool)
-                   (%i::nat.
-                       (op -->::bool => bool => bool)
-                        ((op &::bool => bool => bool)
-                          ((op <=::nat => nat => bool) (1::nat) i)
-                          ((op <=::nat => nat => bool) i
-                            ((dimindex::('N::type => bool) => nat)
-                              (UNIV::'N::type => bool))))
-                        (P i (($::('A::type, 'N::type) cart
-                                  => nat => 'A::type)
-                               v i))))
-                 ((op =::('A::type, 'N::type) cart
-                         => ('A::type, 'N::type) cart => bool)
-                   u v))))))"
-  by (import hollight FINITE_CART)
-
-definition
-  vector :: "'A list => ('A, 'N) cart"  where
-  "(op ==::('A::type list => ('A::type, 'N::type) cart)
-        => ('A::type list => ('A::type, 'N::type) cart) => prop)
- (vector::'A::type list => ('A::type, 'N::type) cart)
- (%u::'A::type list.
-     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
-      (%i::nat.
-          (op !::'A::type list => nat => 'A::type) u
-           ((op -::nat => nat => nat) i (1::nat))))"
-
-lemma DEF_vector: "(op =::('A::type list => ('A::type, 'N::type) cart)
-       => ('A::type list => ('A::type, 'N::type) cart) => bool)
- (vector::'A::type list => ('A::type, 'N::type) cart)
- (%u::'A::type list.
-     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
-      (%i::nat.
-          (op !::'A::type list => nat => 'A::type) u
-           ((op -::nat => nat => nat) i (1::nat))))"
-  by (import hollight DEF_vector)
-
-definition
-  CASEWISE :: "(('q_74835 => 'q_74839) * ('q_74840 => 'q_74835 => 'q_74799)) list
-=> 'q_74840 => 'q_74839 => 'q_74799"  where
-  "CASEWISE ==
-SOME CASEWISE::(('q_74835 => 'q_74839) *
-                ('q_74840 => 'q_74835 => 'q_74799)) list
-               => 'q_74840 => 'q_74839 => 'q_74799.
-   (ALL (f::'q_74840) x::'q_74839.
-       CASEWISE [] f x = (SOME y::'q_74799. True)) &
-   (ALL (h::('q_74835 => 'q_74839) * ('q_74840 => 'q_74835 => 'q_74799))
-       (t::(('q_74835 => 'q_74839) *
-            ('q_74840 => 'q_74835 => 'q_74799)) list)
-       (f::'q_74840) x::'q_74839.
-       CASEWISE (h # t) f x =
-       (if EX y::'q_74835. fst h y = x
-        then snd h f (SOME y::'q_74835. fst h y = x) else CASEWISE t f x))"
-
-lemma DEF_CASEWISE: "CASEWISE =
-(SOME CASEWISE::(('q_74835 => 'q_74839) *
-                 ('q_74840 => 'q_74835 => 'q_74799)) list
-                => 'q_74840 => 'q_74839 => 'q_74799.
-    (ALL (f::'q_74840) x::'q_74839.
-        CASEWISE [] f x = (SOME y::'q_74799. True)) &
-    (ALL (h::('q_74835 => 'q_74839) * ('q_74840 => 'q_74835 => 'q_74799))
-        (t::(('q_74835 => 'q_74839) *
-             ('q_74840 => 'q_74835 => 'q_74799)) list)
-        (f::'q_74840) x::'q_74839.
-        CASEWISE (h # t) f x =
-        (if EX y::'q_74835. fst h y = x
-         then snd h f (SOME y::'q_74835. fst h y = x) else CASEWISE t f x)))"
-  by (import hollight DEF_CASEWISE)
-
-definition
-  admissible :: "('q_75137 => 'q_75130 => bool)
-=> (('q_75137 => 'q_75133) => 'q_75143 => bool)
-   => ('q_75143 => 'q_75130)
-      => (('q_75137 => 'q_75133) => 'q_75143 => 'q_75138) => bool"  where
-  "admissible ==
-%(u::'q_75137 => 'q_75130 => bool)
-   (ua::('q_75137 => 'q_75133) => 'q_75143 => bool)
-   (ub::'q_75143 => 'q_75130)
-   uc::('q_75137 => 'q_75133) => 'q_75143 => 'q_75138.
-   ALL (f::'q_75137 => 'q_75133) (g::'q_75137 => 'q_75133) a::'q_75143.
-      ua f a & ua g a & (ALL z::'q_75137. u z (ub a) --> f z = g z) -->
-      uc f a = uc g a"
-
-lemma DEF_admissible: "admissible =
-(%(u::'q_75137 => 'q_75130 => bool)
-    (ua::('q_75137 => 'q_75133) => 'q_75143 => bool)
-    (ub::'q_75143 => 'q_75130)
-    uc::('q_75137 => 'q_75133) => 'q_75143 => 'q_75138.
-    ALL (f::'q_75137 => 'q_75133) (g::'q_75137 => 'q_75133) a::'q_75143.
-       ua f a & ua g a & (ALL z::'q_75137. u z (ub a) --> f z = g z) -->
-       uc f a = uc g a)"
-  by (import hollight DEF_admissible)
-
-definition
-  tailadmissible :: "('A => 'A => bool)
-=> (('A => 'B) => 'P => bool)
-   => ('P => 'A) => (('A => 'B) => 'P => 'B) => bool"  where
-  "tailadmissible ==
-%(u::'A => 'A => bool) (ua::('A => 'B) => 'P => bool) (ub::'P => 'A)
-   uc::('A => 'B) => 'P => 'B.
-   EX (P::('A => 'B) => 'P => bool) (G::('A => 'B) => 'P => 'A)
-      H::('A => 'B) => 'P => 'B.
-      (ALL (f::'A => 'B) (a::'P) y::'A.
-          P f a & u y (G f a) --> u y (ub a)) &
-      (ALL (f::'A => 'B) (g::'A => 'B) a::'P.
-          (ALL z::'A. u z (ub a) --> f z = g z) -->
-          P f a = P g a & G f a = G g a & H f a = H g a) &
-      (ALL (f::'A => 'B) a::'P.
-          ua f a --> uc f a = (if P f a then f (G f a) else H f a))"
-
-lemma DEF_tailadmissible: "tailadmissible =
-(%(u::'A => 'A => bool) (ua::('A => 'B) => 'P => bool) (ub::'P => 'A)
-    uc::('A => 'B) => 'P => 'B.
-    EX (P::('A => 'B) => 'P => bool) (G::('A => 'B) => 'P => 'A)
-       H::('A => 'B) => 'P => 'B.
-       (ALL (f::'A => 'B) (a::'P) y::'A.
-           P f a & u y (G f a) --> u y (ub a)) &
-       (ALL (f::'A => 'B) (g::'A => 'B) a::'P.
-           (ALL z::'A. u z (ub a) --> f z = g z) -->
-           P f a = P g a & G f a = G g a & H f a = H g a) &
-       (ALL (f::'A => 'B) a::'P.
-           ua f a --> uc f a = (if P f a then f (G f a) else H f a)))"
-  by (import hollight DEF_tailadmissible)
-
-definition
-  superadmissible :: "('q_75287 => 'q_75287 => bool)
-=> (('q_75287 => 'q_75289) => 'q_75295 => bool)
-   => ('q_75295 => 'q_75287)
-      => (('q_75287 => 'q_75289) => 'q_75295 => 'q_75289) => bool"  where
-  "superadmissible ==
-%(u::'q_75287 => 'q_75287 => bool)
-   (ua::('q_75287 => 'q_75289) => 'q_75295 => bool)
-   (ub::'q_75295 => 'q_75287)
-   uc::('q_75287 => 'q_75289) => 'q_75295 => 'q_75289.
-   admissible u (%(f::'q_75287 => 'q_75289) a::'q_75295. True) ub ua -->
-   tailadmissible u ua ub uc"
-
-lemma DEF_superadmissible: "superadmissible =
-(%(u::'q_75287 => 'q_75287 => bool)
-    (ua::('q_75287 => 'q_75289) => 'q_75295 => bool)
-    (ub::'q_75295 => 'q_75287)
-    uc::('q_75287 => 'q_75289) => 'q_75295 => 'q_75289.
-    admissible u (%(f::'q_75287 => 'q_75289) a::'q_75295. True) ub ua -->
-    tailadmissible u ua ub uc)"
-  by (import hollight DEF_superadmissible)
-
-lemma MATCH_SEQPATTERN: "_MATCH (x::'q_75330)
- (_SEQPATTERN (r::'q_75330 => 'q_75323 => bool)
-   (s::'q_75330 => 'q_75323 => bool)) =
-(if Ex (r x) then _MATCH x r else _MATCH x s)"
-  by (import hollight MATCH_SEQPATTERN)
-
-lemma ADMISSIBLE_CONST: "admissible (u_556::'q_75351 => 'q_75350 => bool)
- (x::('q_75351 => 'q_75352) => 'q_75353 => bool) (xa::'q_75353 => 'q_75350)
- (%f::'q_75351 => 'q_75352. xb::'q_75353 => 'q_75354)"
-  by (import hollight ADMISSIBLE_CONST)
-
-lemma ADMISSIBLE_BASE: "(!!(f::'A => 'B) a::'P.
-    (xa::('A => 'B) => 'P => bool) f a
-    ==> (x::'A => 'A => bool) ((xc::'P => 'A) a) ((xb::'P => 'A) a))
-==> admissible x xa xb (%(f::'A => 'B) x::'P. f (xc x))"
-  by (import hollight ADMISSIBLE_BASE)
-
-lemma ADMISSIBLE_COMB: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
- (xb::'P => 'A) (xc::('A => 'B) => 'P => 'C => 'D) &
-admissible x xa xb (xd::('A => 'B) => 'P => 'C)
-==> admissible x xa xb (%(f::'A => 'B) x::'P. xc f x (xd f x))"
-  by (import hollight ADMISSIBLE_COMB)
-
-lemma ADMISSIBLE_RAND: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
- (xb::'P => 'A) (xd::('A => 'B) => 'P => 'C)
-==> admissible x xa xb
-     (%(f::'A => 'B) x::'P. (xc::'P => 'C => 'D) x (xd f x))"
-  by (import hollight ADMISSIBLE_RAND)
-
-lemma ADMISSIBLE_LAMBDA: "admissible (x::'A => 'A => bool)
- (%f::'A => 'B.
-     SOME fa::'C * 'P => bool.
-        ALL (u::'C) x::'P. fa (u, x) = (xa::('A => 'B) => 'P => bool) f x)
- (SOME f::'C * 'P => 'A. ALL (u::'C) x::'P. f (u, x) = (xb::'P => 'A) x)
- (%f::'A => 'B.
-     SOME fa::'C * 'P => bool.
-        ALL (u::'C) x::'P.
-           fa (u, x) = (xc::('A => 'B) => 'C => 'P => bool) f u x)
-==> admissible x xa xb (%(f::'A => 'B) (x::'P) u::'C. xc f u x)"
-  by (import hollight ADMISSIBLE_LAMBDA)
-
-lemma ADMISSIBLE_NEST: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
- (xb::'P => 'A) (xc::('A => 'B) => 'P => 'A) &
-(ALL (f::'A => 'B) a::'P. xa f a --> x (xc f a) (xb a))
-==> admissible x xa xb (%(f::'A => 'B) x::'P. f (xc f x))"
-  by (import hollight ADMISSIBLE_NEST)
-
-lemma ADMISSIBLE_COND: "admissible (u_556::'q_75688 => 'q_75687 => bool)
- (p::('q_75688 => 'q_75719) => 'P => bool) (s::'P => 'q_75687)
- (P::('q_75688 => 'q_75719) => 'P => bool) &
-admissible u_556 (%(f::'q_75688 => 'q_75719) x::'P. p f x & P f x) s
- (h::('q_75688 => 'q_75719) => 'P => 'q_75744) &
-admissible u_556 (%(f::'q_75688 => 'q_75719) x::'P. p f x & ~ P f x) s
- (k::('q_75688 => 'q_75719) => 'P => 'q_75744)
-==> admissible u_556 p s
-     (%(f::'q_75688 => 'q_75719) x::'P. if P f x then h f x else k f x)"
-  by (import hollight ADMISSIBLE_COND)
-
-lemma ADMISSIBLE_MATCH: "admissible (x::'q_75790 => 'q_75789 => bool)
- (xa::('q_75790 => 'q_75791) => 'P => bool) (xb::'P => 'q_75789)
- (xc::('q_75790 => 'q_75791) => 'P => 'q_75826) &
-admissible x xa xb
- (%(f::'q_75790 => 'q_75791) x::'P.
-     (c::('q_75790 => 'q_75791) => 'P => 'q_75826 => 'q_75823 => bool) f x
-      (xc f x))
-==> admissible x xa xb
-     (%(f::'q_75790 => 'q_75791) x::'P. _MATCH (xc f x) (c f x))"
-  by (import hollight ADMISSIBLE_MATCH)
-
-lemma ADMISSIBLE_SEQPATTERN: "admissible (x::'q_75867 => 'q_75866 => bool)
- (xa::('q_75867 => 'q_75929) => 'P => bool) (xb::'P => 'q_75866)
- (%(f::'q_75867 => 'q_75929) x::'P.
-     Ex ((xc::('q_75867 => 'q_75929) => 'P => 'q_75955 => 'q_75945 => bool)
-          f x ((xe::('q_75867 => 'q_75929) => 'P => 'q_75955) f x))) &
-admissible x
- (%(f::'q_75867 => 'q_75929) x::'P. xa f x & Ex (xc f x (xe f x))) xb
- (%(f::'q_75867 => 'q_75929) x::'P. xc f x (xe f x)) &
-admissible x
- (%(f::'q_75867 => 'q_75929) x::'P. xa f x & ~ Ex (xc f x (xe f x))) xb
- (%(f::'q_75867 => 'q_75929) x::'P.
-     (xd::('q_75867 => 'q_75929) => 'P => 'q_75955 => 'q_75945 => bool) f x
-      (xe f x))
-==> admissible x xa xb
-     (%(f::'q_75867 => 'q_75929) x::'P.
-         _SEQPATTERN (xc f x) (xd f x) (xe f x))"
-  by (import hollight ADMISSIBLE_SEQPATTERN)
-
-lemma ADMISSIBLE_UNGUARDED_PATTERN: "admissible (u_556::'q_76041 => 'q_76040 => bool)
- (p::('q_76041 => 'q_76088) => 'P => bool) (s::'P => 'q_76040)
- (pat::('q_76041 => 'q_76088) => 'P => 'q_76121) &
-admissible u_556 p s (e::('q_76041 => 'q_76088) => 'P => 'q_76121) &
-admissible u_556 (%(f::'q_76041 => 'q_76088) x::'P. p f x & pat f x = e f x)
- s (t::('q_76041 => 'q_76088) => 'P => 'q_76128) &
-admissible u_556 (%(f::'q_76041 => 'q_76088) x::'P. p f x & pat f x = e f x)
- s (y::('q_76041 => 'q_76088) => 'P => 'q_76128)
-==> admissible u_556 p s
-     (%(f::'q_76041 => 'q_76088) x::'P.
-         _UNGUARDED_PATTERN (pat f x = e f x) (t f x = y f x))"
-  by (import hollight ADMISSIBLE_UNGUARDED_PATTERN)
-
-lemma ADMISSIBLE_GUARDED_PATTERN: "admissible (u_556::'q_76215 => 'q_76214 => bool)
- (p::('q_76215 => 'q_76292) => 'P => bool) (s::'P => 'q_76214)
- (pat::('q_76215 => 'q_76292) => 'P => 'q_76330) &
-admissible u_556 p s (e::('q_76215 => 'q_76292) => 'P => 'q_76330) &
-admissible u_556
- (%(f::'q_76215 => 'q_76292) x::'P.
-     p f x &
-     pat f x = e f x & (q::('q_76215 => 'q_76292) => 'P => bool) f x)
- s (t::('q_76215 => 'q_76292) => 'P => 'q_76339) &
-admissible u_556 (%(f::'q_76215 => 'q_76292) x::'P. p f x & pat f x = e f x)
- s q &
-admissible u_556
- (%(f::'q_76215 => 'q_76292) x::'P. p f x & pat f x = e f x & q f x) s
- (y::('q_76215 => 'q_76292) => 'P => 'q_76339)
-==> admissible u_556 p s
-     (%(f::'q_76215 => 'q_76292) x::'P.
-         _GUARDED_PATTERN (pat f x = e f x) (q f x) (t f x = y f x))"
-  by (import hollight ADMISSIBLE_GUARDED_PATTERN)
-
-lemma ADMISSIBLE_NSUM: "admissible (x::'B => 'A => bool)
- (%f::'B => 'C.
-     SOME fa::nat * 'P => bool.
-        ALL (k::nat) x::'P.
-           fa (k, x) =
-           ((xd::'P => nat) x <= k &
-            k <= (xe::'P => nat) x & (xa::('B => 'C) => 'P => bool) f x))
- (SOME f::nat * 'P => 'A. ALL (k::nat) x::'P. f (k, x) = (xb::'P => 'A) x)
- (%f::'B => 'C.
-     SOME fa::nat * 'P => nat.
-        ALL (k::nat) x::'P.
-           fa (k, x) = (xc::('B => 'C) => 'P => nat => nat) f x k)
-==> admissible x xa xb (%(f::'B => 'C) x::'P. nsum {xd x..xe x} (xc f x))"
-  by (import hollight ADMISSIBLE_NSUM)
-
-lemma ADMISSIBLE_SUM: "admissible (x::'B => 'A => bool)
- (%f::'B => 'C.
-     SOME fa::nat * 'P => bool.
-        ALL (k::nat) x::'P.
-           fa (k, x) =
-           ((xd::'P => nat) x <= k &
-            k <= (xe::'P => nat) x & (xa::('B => 'C) => 'P => bool) f x))
- (SOME f::nat * 'P => 'A. ALL (k::nat) x::'P. f (k, x) = (xb::'P => 'A) x)
- (%f::'B => 'C.
-     SOME fa::nat * 'P => hollight.real.
-        ALL (k::nat) x::'P.
-           fa (k, x) = (xc::('B => 'C) => 'P => nat => hollight.real) f x k)
-==> admissible x xa xb
-     (%(f::'B => 'C) x::'P. hollight.sum {xd x..xe x} (xc f x))"
-  by (import hollight ADMISSIBLE_SUM)
-
-lemma ADMISSIBLE_MAP: "admissible (x::'A => 'q_76632 => bool) (xa::('A => 'B) => 'P => bool)
- (xb::'P => 'q_76632) (xd::('A => 'B) => 'P => 'q_76647 list) &
-admissible x
- (%f::'A => 'B.
-     SOME fa::'q_76647 * 'P => bool.
-        ALL (y::'q_76647) x::'P. fa (y, x) = (xa f x & y : set (xd f x)))
- (SOME f::'q_76647 * 'P => 'q_76632.
-     ALL (y::'q_76647) x::'P. f (y, x) = xb x)
- (%f::'A => 'B.
-     SOME fa::'q_76647 * 'P => 'q_76641.
-        ALL (y::'q_76647) x::'P.
-           fa (y, x) = (xc::('A => 'B) => 'P => 'q_76647 => 'q_76641) f x y)
-==> admissible x xa xb (%(f::'A => 'B) x::'P. map (xc f x) (xd f x))"
-  by (import hollight ADMISSIBLE_MAP)
-
-lemma ADMISSIBLE_MATCH_SEQPATTERN: "admissible (x::'q_76705 => 'q_76704 => bool)
- (xa::('q_76705 => 'q_76770) => 'P => bool) (xb::'P => 'q_76704)
- (%(f::'q_76705 => 'q_76770) x::'P.
-     Ex ((xc::('q_76705 => 'q_76770) => 'P => 'q_76825 => 'q_76794 => bool)
-          f x ((xe::('q_76705 => 'q_76770) => 'P => 'q_76825) f x))) &
-admissible x
- (%(f::'q_76705 => 'q_76770) x::'P. xa f x & Ex (xc f x (xe f x))) xb
- (%(f::'q_76705 => 'q_76770) x::'P. _MATCH (xe f x) (xc f x)) &
-admissible x
- (%(f::'q_76705 => 'q_76770) x::'P. xa f x & ~ Ex (xc f x (xe f x))) xb
- (%(f::'q_76705 => 'q_76770) x::'P.
-     _MATCH (xe f x)
-      ((xd::('q_76705 => 'q_76770) => 'P => 'q_76825 => 'q_76794 => bool) f
-        x))
-==> admissible x xa xb
-     (%(x::'q_76705 => 'q_76770) xa::'P.
-         _MATCH (xe x xa) (_SEQPATTERN (xc x xa) (xd x xa)))"
-  by (import hollight ADMISSIBLE_MATCH_SEQPATTERN)
-
-lemma ADMISSIBLE_IMP_SUPERADMISSIBLE: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
- (xb::'P => 'A) (xc::('A => 'B) => 'P => 'B)
-==> superadmissible x xa xb xc"
-  by (import hollight ADMISSIBLE_IMP_SUPERADMISSIBLE)
-
-lemma SUPERADMISSIBLE_CONST: "superadmissible (u_556::'q_76904 => 'q_76904 => bool)
- (p::('q_76904 => 'q_76906) => 'q_76905 => bool) (s::'q_76905 => 'q_76904)
- (%f::'q_76904 => 'q_76906. c::'q_76905 => 'q_76906)"
-  by (import hollight SUPERADMISSIBLE_CONST)
-
-lemma SUPERADMISSIBLE_TAIL: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
- (xb::'P => 'A) (xc::('A => 'B) => 'P => 'A) &
-(ALL (f::'A => 'B) a::'P.
-    xa f a --> (ALL y::'A. x y (xc f a) --> x y (xb a)))
-==> superadmissible x xa xb (%(f::'A => 'B) x::'P. f (xc f x))"
-  by (import hollight SUPERADMISSIBLE_TAIL)
-
-lemma SUPERADMISSIBLE_COND: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
- (xc::'P => 'A) (xb::('A => 'B) => 'P => bool) &
-superadmissible x (%(f::'A => 'B) x::'P. xa f x & xb f x) xc
- (xd::('A => 'B) => 'P => 'B) &
-superadmissible x (%(f::'A => 'B) x::'P. xa f x & ~ xb f x) xc
- (xe::('A => 'B) => 'P => 'B)
-==> superadmissible x xa xc
-     (%(f::'A => 'B) x::'P. if xb f x then xd f x else xe f x)"
-  by (import hollight SUPERADMISSIBLE_COND)
-
-lemma SUPERADMISSIBLE_MATCH_SEQPATTERN: "admissible (x::'q_77225 => 'q_77225 => bool)
- (xa::('q_77225 => 'q_77341) => 'P => bool) (xb::'P => 'q_77225)
- (%(f::'q_77225 => 'q_77341) x::'P.
-     Ex ((xc::('q_77225 => 'q_77341) => 'P => 'q_77340 => 'q_77341 => bool)
-          f x ((xe::('q_77225 => 'q_77341) => 'P => 'q_77340) f x))) &
-superadmissible x
- (%(f::'q_77225 => 'q_77341) x::'P. xa f x & Ex (xc f x (xe f x))) xb
- (%(f::'q_77225 => 'q_77341) x::'P. _MATCH (xe f x) (xc f x)) &
-superadmissible x
- (%(f::'q_77225 => 'q_77341) x::'P. xa f x & ~ Ex (xc f x (xe f x))) xb
- (%(f::'q_77225 => 'q_77341) x::'P.
-     _MATCH (xe f x)
-      ((xd::('q_77225 => 'q_77341) => 'P => 'q_77340 => 'q_77341 => bool) f
-        x))
-==> superadmissible x xa xb
-     (%(x::'q_77225 => 'q_77341) xa::'P.
-         _MATCH (xe x xa) (_SEQPATTERN (xc x xa) (xd x xa)))"
-  by (import hollight SUPERADMISSIBLE_MATCH_SEQPATTERN)
-
-lemma SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN: "(ALL (f::'A => 'B) (a::'P) (t::'Q) u::'Q.
-    (p::('A => 'B) => 'P => bool) f a &
-    (pat::'Q => 'D) t = (e::'P => 'D) a & pat u = e a -->
-    (arg::'P => 'Q => 'A) a t = arg a u) &
-(ALL (f::'A => 'B) (a::'P) t::'Q.
-    p f a & pat t = e a -->
-    (ALL y::'A.
-        (u_556::'A => 'A => bool) y (arg a t) -->
-        u_556 y ((s::'P => 'A) a)))
-==> superadmissible u_556 p s
-     (%(f::'A => 'B) x::'P.
-         _MATCH (e x)
-          (%(u::'D) v::'B.
-              EX t::'Q. _UNGUARDED_PATTERN (pat t = u) (f (arg x t) = v)))"
-  by (import hollight SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN)
-
-lemma SUPERADMISSIBLE_MATCH_GUARDED_PATTERN: "(ALL (f::'A => 'B) (a::'P) (t::'Q) u::'Q.
-    (p::('A => 'B) => 'P => bool) f a &
-    (pat::'Q => 'D) t = (e::'P => 'D) a &
-    (q::'P => 'Q => bool) a t & pat u = e a & q a u -->
-    (arg::'P => 'Q => 'A) a t = arg a u) &
-(ALL (f::'A => 'B) (a::'P) t::'Q.
-    p f a & q a t & pat t = e a -->
-    (ALL y::'A.
-        (u_556::'A => 'A => bool) y (arg a t) -->
-        u_556 y ((s::'P => 'A) a)))
-==> superadmissible u_556 p s
-     (%(f::'A => 'B) x::'P.
-         _MATCH (e x)
-          (%(u::'D) v::'B.
-              EX t::'Q.
-                 _GUARDED_PATTERN (pat t = u) (q x t) (f (arg x t) = v)))"
-  by (import hollight SUPERADMISSIBLE_MATCH_GUARDED_PATTERN)
-
-lemma cth: "[| !!(c::'q_78547) (x::'A) y::'A.
-      (p1::'A => 'q_78536) x = (p1'::'A => 'q_78536) y
-      ==> (p2::'q_78547 => 'A => 'q_78541) c x =
-          (p2'::'q_78547 => 'A => 'q_78541) c y;
-   p1' (x::'A) = p1 (y::'A) |]
-==> p2' (c::'q_78547) x = p2 c y"
-  by (import hollight cth)
-
-lemma SUPERADMISSIBLE_T: "superadmissible (u_556::'q_78694 => 'q_78694 => bool)
- (%(f::'q_78694 => 'q_78696) x::'q_78700. True) (s::'q_78700 => 'q_78694)
- (t::('q_78694 => 'q_78696) => 'q_78700 => 'q_78696) =
-tailadmissible u_556 (%(f::'q_78694 => 'q_78696) x::'q_78700. True) s t"
-  by (import hollight SUPERADMISSIBLE_T)
-
-lemma elemma0: "(ALL z::'q_78985 * 'q_78984.
-    (f::'q_78985 * 'q_78984 => 'q_78975) z =
-    (g::'q_78985 * 'q_78984 => 'q_78975) z) =
-(ALL (x::'q_78985) y::'q_78984. f (x, y) = g (x, y)) &
-(P::'q_79002 * 'q_79001 => 'q_78994) =
-(SOME f::'q_79002 * 'q_79001 => 'q_78994.
-    ALL (x::'q_79002) y::'q_79001. f (x, y) = P (x, y))"
-  by (import hollight elemma0)
-
-;end_setup
-
-end
-
--- a/src/HOL/Import/HOLLight/ROOT.ML	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-use_thy "HOLLight";
--- a/src/HOL/Import/HOLLight/hollight.imp	Sat Mar 03 21:51:38 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2335 +0,0 @@
-import
-
-import_segment "hollight"
-
-def_maps
-  "vector" > "vector_def"
-  "treal_of_num" > "treal_of_num_def"
-  "treal_neg" > "treal_neg_def"
-  "treal_mul" > "treal_mul_def"
-  "treal_le" > "treal_le_def"
-  "treal_inv" > "treal_inv_def"
-  "treal_eq" > "treal_eq_def"
-  "treal_add" > "treal_add_def"
-  "tailadmissible" > "tailadmissible_def"
-  "support" > "support_def"
-  "superadmissible" > "superadmissible_def"
-  "sum" > "sum_def"
-  "sndcart" > "sndcart_def"
-  "rem" > "rem_def"
-  "real_sub" > "real_sub_def"
-  "real_sgn" > "real_sgn_def"
-  "real_pow" > "real_pow_def"
-  "real_of_num" > "real_of_num_def"
-  "real_neg" > "real_neg_def"
-  "real_mul" > "real_mul_def"
-  "real_mod" > "real_mod_def"
-  "real_min" > "real_min_def"
-  "real_max" > "real_max_def"
-  "real_lt" > "real_lt_def"
-  "real_le" > "real_le_def"
-  "real_inv" > "real_inv_def"
-  "real_gt" > "real_gt_def"
-  "real_ge" > "real_ge_def"
-  "real_div" > "real_div_def"
-  "real_add" > "real_add_def"
-  "real_abs" > "real_abs_def"
-  "pastecart" > "pastecart_def"
-  "pairwise" > "pairwise_def"
-  "num_of_int" > "num_of_int_def"
-  "num_mod" > "num_mod_def"
-  "num_gcd" > "num_gcd_def"
-  "num_divides" > "num_divides_def"
-  "num_coprime" > "num_coprime_def"
-  "nsum" > "nsum_def"
-  "neutral" > "neutral_def"
-  "nadd_rinv" > "nadd_rinv_def"
-  "nadd_of_num" > "nadd_of_num_def"
-  "nadd_mul" > "nadd_mul_def"
-  "nadd_le" > "nadd_le_def"
-  "nadd_inv" > "nadd_inv_def"
-  "nadd_eq" > "nadd_eq_def"
-  "nadd_add" > "nadd_add_def"
-  "monoidal" > "monoidal_def"
-  "minimal" > "minimal_def"
-  "lambda" > "lambda_def"
-  "iterate" > "iterate_def"
-  "is_nadd" > "is_nadd_def"
-  "integer" > "integer_def"
-  "int_sub" > "int_sub_def"
-  "int_sgn" > "int_sgn_def"
-  "int_pow" > "int_pow_def"
-  "int_of_num" > "int_of_num_def"
-  "int_neg" > "int_neg_def"
-  "int_mul" > "int_mul_def"
-  "int_mod" > "int_mod_def"
-  "int_min" > "int_min_def"
-  "int_max" > "int_max_def"
-  "int_lt" > "int_lt_def"
-  "int_le" > "int_le_def"
-  "int_gt" > "int_gt_def"
-  "int_ge" > "int_ge_def"
-  "int_gcd" > "int_gcd_def"
-  "int_divides" > "int_divides_def"
-  "int_coprime" > "int_coprime_def"
-  "int_add" > "int_add_def"
-  "int_abs" > "int_abs_def"
-  "hreal_of_num" > "hreal_of_num_def"
-  "hreal_mul" > "hreal_mul_def"
-  "hreal_le" > "hreal_le_def"
-  "hreal_inv" > "hreal_inv_def"
-  "hreal_add" > "hreal_add_def"
-  "fstcart" > "fstcart_def"
-  "eqeq" > "eqeq_def"
-  "div" > "div_def"
-  "dist" > "dist_def"
-  "dimindex" > "dimindex_def"
-  "admissible" > "admissible_def"
-  "_UNGUARDED_PATTERN" > "_UNGUARDED_PATTERN_def"
-  "_SEQPATTERN" > "_SEQPATTERN_def"
-  "_MATCH" > "_MATCH_def"
-  "_GUARDED_PATTERN" > "_GUARDED_PATTERN_def"
-  "_FUNCTION" > "_FUNCTION_def"
-  "_FALSITY_" > "_FALSITY__def"
-  "_11937" > "_11937_def"
-  "ZRECSPACE" > "ZRECSPACE_def"
-  "ZCONSTR" > "ZCONSTR_def"
-  "ZBOT" > "ZBOT_def"
-  "UNCURRY" > "UNCURRY_def"
-  "SURJ" > "SURJ_def"
-  "SING" > "SING_def"
-  "REST" > "REST_def"
-  "PASSOC" > "PASSOC_def"
-  "PAIRWISE" > "PAIRWISE_def"
-  "NUM_REP" > "NUM_REP_def"
-  "NUMSUM" > "NUMSUM_def"
-  "NUMSND" > "NUMSND_def"
-  "NUMRIGHT" > "NUMRIGHT_def"
-  "NUMPAIR" > "NUMPAIR_def"
-  "NUMLEFT" > "NUMLEFT_def"
-  "NUMFST" > "NUMFST_def"
-  "LET_END" > "LET_END_def"
-  "ITSET" > "ITSET_def"
-  "ISO" > "ISO_def"
-  "INJP" > "INJP_def"
-  "INJN" > "INJN_def"
-  "INJF" > "INJF_def"
-  "INJA" > "INJA_def"
-  "INJ" > "INJ_def"
-  "IND_SUC" > "IND_SUC_def"
-  "IND_0" > "IND_0_def"
-  "HAS_SIZE" > "HAS_SIZE_def"
-  "FNIL" > "FNIL_def"
-  "FINREC" > "FINREC_def"
-  "FCONS" > "FCONS_def"
-  "DECIMAL" > "DECIMAL_def"
-  "CROSS" > "CROSS_def"
-  "COUNTABLE" > "COUNTABLE_def"
-  "CONSTR" > "CONSTR_def"
-  "CASEWISE" > "CASEWISE_def"
-  "CARD" > "CARD_def"
-  "BOTTOM" > "BOTTOM_def"
-  "BIJ" > "BIJ_def"
-  "ASCII" > "ASCII_def"
-  ">_c" > ">_c_def"
-  ">=_c" > ">=_c_def"
-  "=_c" > "=_c_def"
-  "<_c" > "<_c_def"
-  "<=_c" > "<=_c_def"
-  "$" > "$_def"
-
-type_maps
-  "sum" > "Sum_Type.sum"
-  "recspace" > "HOLLight.hollight.recspace"
-  "real" > "HOLLight.hollight.real"
-  "prod" > "Product_Type.prod"
-  "option" > "Datatype.option"
-  "num" > "Nat.nat"
-  "nadd" > "HOLLight.hollight.nadd"
-  "list" > "List.list"
-  "int" > "HOLLight.hollight.int"
-  "ind" > "Nat.ind"
-  "hreal" > "HOLLight.hollight.hreal"
-  "fun" > "fun"
-  "finite_sum" > "HOLLight.hollight.finite_sum"
-  "finite_image" > "HOLLight.hollight.finite_image"
-  "char" > "HOLLight.hollight.char"
-  "cart" > "HOLLight.hollight.cart"
-  "bool" > "HOL.bool"
-  "N_3" > "HOLLight.hollight.N_3"
-  "N_2" > "HOLLight.hollight.N_2"
-  "N_1" > "Product_Type.unit"
-
-const_maps
-  "~" > "HOL.Not"
-  "vector" > "HOLLight.hollight.vector"
-  "treal_of_num" > "HOLLight.hollight.treal_of_num"
-  "treal_neg" > "HOLLight.hollight.treal_neg"
-  "treal_mul" > "HOLLight.hollight.treal_mul"
-  "treal_le" > "HOLLight.hollight.treal_le"
-  "treal_inv" > "HOLLight.hollight.treal_inv"
-  "treal_eq" > "HOLLight.hollight.treal_eq"
-  "treal_add" > "HOLLight.hollight.treal_add"
-  "tailadmissible" > "HOLLight.hollight.tailadmissible"
-  "support" > "HOLLight.hollight.support"
-  "superadmissible" > "HOLLight.hollight.superadmissible"
-  "sum" > "HOLLight.hollight.sum"
-  "sndcart" > "HOLLight.hollight.sndcart"
-  "set_of_list" > "List.set"
-  "rem" > "HOLLight.hollight.rem"
-  "real_sub" > "HOLLight.hollight.real_sub"
-  "real_sgn" > "HOLLight.hollight.real_sgn"
-  "real_pow" > "HOLLight.hollight.real_pow"
-  "real_of_num" > "HOLLight.hollight.real_of_num"
-  "real_neg" > "HOLLight.hollight.real_neg"
-  "real_mul" > "HOLLight.hollight.real_mul"
-  "real_mod" > "HOLLight.hollight.real_mod"
-  "real_min" > "HOLLight.hollight.real_min"
-  "real_max" > "HOLLight.hollight.real_max"
-  "real_lt" > "HOLLight.hollight.real_lt"
-  "real_le" > "HOLLight.hollight.real_le"
-  "real_inv" > "HOLLight.hollight.real_inv"
-  "real_gt" > "HOLLight.hollight.real_gt"
-  "real_ge" > "HOLLight.hollight.real_ge"
-  "real_div" > "HOLLight.hollight.real_div"
-  "real_add" > "HOLLight.hollight.real_add"
-  "real_abs" > "HOLLight.hollight.real_abs"
-  "pastecart" > "HOLLight.hollight.pastecart"
-  "pairwise" > "HOLLight.hollight.pairwise"
-  "one" > "Product_Type.Unity"
-  "o" > "Fun.comp"
-  "num_of_int" > "HOLLight.hollight.num_of_int"
-  "num_mod" > "HOLLight.hollight.num_mod"
-  "num_gcd" > "HOLLight.hollight.num_gcd"
-  "num_divides" > "HOLLight.hollight.num_divides"
-  "num_coprime" > "HOLLight.hollight.num_coprime"
-  "nsum" > "HOLLight.hollight.nsum"
-  "neutral" > "HOLLight.hollight.neutral"
-  "nadd_rinv" > "HOLLight.hollight.nadd_rinv"
-  "nadd_of_num" > "HOLLight.hollight.nadd_of_num"
-  "nadd_mul" > "HOLLight.hollight.nadd_mul"
-  "nadd_le" > "HOLLight.hollight.nadd_le"
-  "nadd_inv" > "HOLLight.hollight.nadd_inv"
-  "nadd_eq" > "HOLLight.hollight.nadd_eq"
-  "nadd_add" > "HOLLight.hollight.nadd_add"
-  "monoidal" > "HOLLight.hollight.monoidal"
-  "mk_pair" > "Product_Type.Pair_Rep"
-  "mk_num" > "Fun.id"
-  "minimal" > "HOLLight.hollight.minimal"
-  "list_EX" > "List.list_ex"
-  "list_ALL" > "List.list_all"
-  "lambda" > "HOLLight.hollight.lambda"
-  "iterate" > "HOLLight.hollight.iterate"
-  "is_nadd" > "HOLLight.hollight.is_nadd"
-  "integer" > "HOLLight.hollight.integer"
-  "int_sub" > "HOLLight.hollight.int_sub"
-  "int_sgn" > "HOLLight.hollight.int_sgn"
-  "int_pow" > "HOLLight.hollight.int_pow"
-  "int_of_num" > "HOLLight.hollight.int_of_num"
-  "int_neg" > "HOLLight.hollight.int_neg"
-  "int_mul" > "HOLLight.hollight.int_mul"
-  "int_mod" > "HOLLight.hollight.int_mod"
-  "int_min" > "HOLLight.hollight.int_min"
-  "int_max" > "HOLLight.hollight.int_max"
-  "int_lt" > "HOLLight.hollight.int_lt"
-  "int_le" > "HOLLight.hollight.int_le"
-  "int_gt" > "HOLLight.hollight.int_gt"
-  "int_ge" > "HOLLight.hollight.int_ge"
-  "int_gcd" > "HOLLight.hollight.int_gcd"
-  "int_divides" > "HOLLight.hollight.int_divides"
-  "int_coprime" > "HOLLight.hollight.int_coprime"
-  "int_add" > "HOLLight.hollight.int_add"
-  "int_abs" > "HOLLight.hollight.int_abs"
-  "hreal_of_num" > "HOLLight.hollight.hreal_of_num"
-  "hreal_mul" > "HOLLight.hollight.hreal_mul"
-  "hreal_le" > "HOLLight.hollight.hreal_le"
-  "hreal_inv" > "HOLLight.hollight.hreal_inv"
-  "hreal_add" > "HOLLight.hollight.hreal_add"
-  "fstcart" > "HOLLight.hollight.fstcart"
-  "eqeq" > "HOLLight.hollight.eqeq"
-  "div" > "HOLLight.hollight.div"
-  "dist" > "HOLLight.hollight.dist"
-  "dimindex" > "HOLLight.hollight.dimindex"
-  "admissible" > "HOLLight.hollight.admissible"
-  "_UNGUARDED_PATTERN" > "HOLLight.hollight._UNGUARDED_PATTERN"
-  "_SEQPATTERN" > "HOLLight.hollight._SEQPATTERN"
-  "_MATCH" > "HOLLight.hollight._MATCH"
-  "_GUARDED_PATTERN" > "HOLLight.hollight._GUARDED_PATTERN"
-  "_FUNCTION" > "HOLLight.hollight._FUNCTION"
-  "_FALSITY_" > "HOLLight.hollight._FALSITY_"
-  "_11937" > "HOLLight.hollight._11937"
-  "_0" > "Groups.zero_class.zero" :: "nat"
-  "\\/" > "HOL.disj"
-  "ZRECSPACE" > "HOLLight.hollight.ZRECSPACE"
-  "ZIP" > "List.zip"
-  "ZCONSTR" > "HOLLight.hollight.ZCONSTR"
-  "ZBOT" > "HOLLight.hollight.ZBOT"
-  "WF" > "Wellfounded.wfP"
-  "UNIV" > "Orderings.top_class.top" :: "'a => bool"
-  "UNIONS" > "Complete_Lattices.Sup_class.Sup" :: "(('a => bool) => bool) => 'a => bool"
-  "UNION" > "Lattices.sup_class.sup" :: "('a => bool) => ('a => bool) => 'a => bool"
-  "UNCURRY" > "HOLLight.hollight.UNCURRY"
-  "TL" > "List.tl"
-  "T" > "HOL.True"
-  "SURJ" > "HOLLight.hollight.SURJ"
-  "SUC" > "Nat.Suc"
-  "SUBSET" > "Orderings.ord_class.less_eq" :: "('a => bool) => ('a => bool) => bool"
-  "SOME" > "Datatype.Some"
-  "SND" > "Product_Type.snd"
-  "SING" > "HOLLight.hollight.SING"
-  "SETSPEC" > "HOLLightCompat.SETSPEC"
-  "REVERSE" > "List.rev"
-  "REST" > "HOLLight.hollight.REST"
-  "REPLICATE" > "List.replicate"
-  "PSUBSET" > "Orderings.ord_class.less" :: "('a => bool) => ('a => bool) => bool"
-  "PRE" > "HOLLightCompat.Pred"
-  "PASSOC" > "HOLLight.hollight.PASSOC"
-  "PAIRWISE" > "HOLLight.hollight.PAIRWISE"
-  "OUTR" > "HOLLightCompat.OUTR"
-  "OUTL" > "HOLLightCompat.OUTL"
-  "ONTO" > "Fun.surj"
-  "ONE_ONE" > "Fun.inj"
-  "ODD" > "HOLLightCompat.ODD"
-  "NUM_REP" > "HOLLight.hollight.NUM_REP"
-  "NUMSUM" > "HOLLight.hollight.NUMSUM"
-  "NUMSND" > "HOLLight.hollight.NUMSND"
-  "NUMRIGHT" > "HOLLight.hollight.NUMRIGHT"
-  "NUMPAIR" > "HOLLight.hollight.NUMPAIR"
-  "NUMLEFT" > "HOLLight.hollight.NUMLEFT"
-  "NUMFST" > "HOLLight.hollight.NUMFST"
-  "NUMERAL" > "HOLLightCompat.NUMERAL"
-  "NULL" > "List.null"
-  "NONE" > "Datatype.None"
-  "NIL" > "List.list.Nil"
-  "MOD" > "Divides.div_class.mod" :: "nat => nat => nat"
-  "MIN" > "Orderings.ord_class.min" :: "nat => nat => nat"
-  "MEM" > "HOLLightList.list_mem"
-  "MEASURE" > "HOLLightCompat.MEASURE"
-  "MAX" > "Orderings.ord_class.max" :: "nat => nat => nat"
-  "MAP2" > "HOLLightList.map2"
-  "MAP" > "List.map"
-  "LET_END" > "HOLLight.hollight.LET_END"
-  "LET" > "HOLLightCompat.LET"
-  "LENGTH" > "List.length"
-  "LAST" > "List.last"
-  "ITSET" > "HOLLight.hollight.ITSET"
-  "ITLIST2" > "HOLLightList.fold2"
-  "ITLIST" > "List.foldr"
-  "ISO" > "HOLLight.hollight.ISO"
-  "INTERS" > "Complete_Lattices.Inf_class.Inf" :: "(('a => bool) => bool) => 'a => bool"
-  "INTER" > "Lattices.inf_class.inf" :: "('a => bool) => ('a => bool) => 'a => bool"
-  "INSERT" > "Set.insert"
-  "INR" > "Sum_Type.Inr"
-  "INL" > "Sum_Type.Inl"
-  "INJP" > "HOLLight.hollight.INJP"
-  "INJN" > "HOLLight.hollight.INJN"
-  "INJF" > "HOLLight.hollight.INJF"
-  "INJA" > "HOLLight.hollight.INJA"
-  "INJ" > "HOLLight.hollight.INJ"
-  "INFINITE" > "HOLLightCompat.INFINITE"
-  "IND_SUC" > "HOLLight.hollight.IND_SUC"
-  "IND_0" > "HOLLight.hollight.IND_0"
-  "IN" > "Set.member"
-  "IMAGE" > "Set.image"
-  "I" > "Fun.id"
-  "HD" > "List.hd"
-  "HAS_SIZE" > "HOLLight.hollight.HAS_SIZE"
-  "GSPEC" > "Set.Collect"
-  "GEQ" > "HOL.eq"
-  "GABS" > "Hilbert_Choice.Eps"
-  "FST" > "Product_Type.fst"
-  "FNIL" > "HOLLight.hollight.FNIL"
-  "FINREC" > "HOLLight.hollight.FINREC"
-  "FINITE" > "Finite_Set.finite"
-  "FILTER" > "List.filter"
-  "FCONS" > "HOLLight.hollight.FCONS"
-  "FACT" > "Fact.fact_class.fact" :: "nat => nat"
-  "F" > "HOL.False"
-  "EXP" > "Power.power_class.power" :: "nat => nat => nat"
-  "EVEN" > "Parity.even_odd_class.even" :: "nat => bool"
-  "EMPTY" > "Orderings.bot_class.bot" :: "'a => bool"
-  "EL" > "HOLLightList.list_el"
-  "DIV" > "Divides.div_class.div" :: "nat => nat => nat"
-  "DISJOINT" > "HOLLightCompat.DISJOINT"
-  "DIFF" > "Groups.minus_class.minus" :: "('a => bool) => ('a => bool) => 'a => bool"
-  "DELETE" > "HOLLightCompat.DELETE"
-  "DECIMAL" > "HOLLight.hollight.DECIMAL"
-  "CURRY" > "Product_Type.curry"
-  "CROSS" > "HOLLight.hollight.CROSS"
-  "COUNTABLE" > "HOLLight.hollight.COUNTABLE"
-  "CONSTR" > "HOLLight.hollight.CONSTR"
-  "CONS" > "List.list.Cons"
-  "COND" > "HOL.If"
-  "CHOICE" > "Hilbert_Choice.Eps"
-  "CASEWISE" > "HOLLight.hollight.CASEWISE"
-  "CARD" > "HOLLight.hollight.CARD"
-  "BUTLAST" > "List.butlast"
-  "BOTTOM" > "HOLLight.hollight.BOTTOM"
-  "BIT1" > "HOLLightCompat.NUMERAL_BIT1"
-  "BIT0" > "HOLLightCompat.NUMERAL_BIT0"
-  "BIJ" > "HOLLight.hollight.BIJ"
-  "ASCII" > "HOLLight.hollight.ASCII"
-  "APPEND" > "List.append"
-  "ALL2" > "List.list_all2"
-  "@" > "Hilbert_Choice.Eps"
-  "?!" > "HOL.Ex1"
-  "?" > "HOL.Ex"
-  ">_c" > "HOLLight.hollight.>_c"
-  ">=_c" > "HOLLight.hollight.>=_c"
-  ">=" > "Orderings.ord_class.greater_eq" :: "nat => nat => bool"
-  ">" > "Orderings.ord_class.greater" :: "nat => nat => bool"
-  "=_c" > "HOLLight.hollight.=_c"
-  "==>" > "HOL.implies"
-  "=" > "HOL.eq"
-  "<_c" > "HOLLight.hollight.<_c"
-  "<=_c" > "HOLLight.hollight.<=_c"
-  "<=" > "Orderings.ord_class.less_eq" :: "nat => nat => bool"
-  "<" > "Orderings.ord_class.less" :: "nat => nat => bool"
-  "/\\" > "HOL.conj"
-  ".." > "HOLLightCompat.dotdot"
-  "-" > "Groups.minus_class.minus" :: "nat => nat => nat"
-  "," > "Product_Type.Pair"
-  "+" > "Groups.plus_class.plus" :: "nat => nat => nat"
-  "*" > "Groups.times_class.times" :: "nat => nat => nat"
-  "$" > "HOLLight.hollight.$"
-  "!" > "HOL.All"
-
-const_renames
-  "EX" > "list_EX"
-  "ALL" > "list_ALL"
-  "==" > "eqeq"
-
-thm_maps
-  "vector_def" > "HOLLight.hollight.vector_def"
-  "treal_of_num_def" > "HOLLight.hollight.treal_of_num_def"
-  "treal_neg_def" > "HOLLight.hollight.treal_neg_def"
-  "treal_mul_def" > "HOLLight.hollight.treal_mul_def"
-  "treal_le_def" > "HOLLight.hollight.treal_le_def"
-  "treal_inv_def" > "HOLLight.hollight.treal_inv_def"
-  "treal_eq_def" > "HOLLight.hollight.treal_eq_def"
-  "treal_add_def" > "HOLLight.hollight.treal_add_def"
-  "th_cond" > "HOLLight.hollight.th_cond"
-  "th" > "HOL.eta_contract_eq"
-  "tailadmissible_def" > "HOLLight.hollight.tailadmissible_def"
-  "support_def" > "HOLLight.hollight.support_def"
-  "superadmissible_def" > "HOLLight.hollight.superadmissible_def"
-  "sum_def" > "HOLLight.hollight.sum_def"
-  "string_INFINITE" > "List.infinite_UNIV_listI"
-  "sth" > "HOLLight.hollight.sth"
-  "sndcart_def" > "HOLLight.hollight.sndcart_def"
-  "right_th" > "HOLLight.hollight.right_th"
-  "rem_def" > "HOLLight.hollight.rem_def"
-  "real_sub_def" > "HOLLight.hollight.real_sub_def"
-  "real_sgn_def" > "HOLLight.hollight.real_sgn_def"
-  "real_pow_def" > "HOLLight.hollight.real_pow_def"
-  "real_of_num_def" > "HOLLight.hollight.real_of_num_def"
-  "real_neg_def" > "HOLLight.hollight.real_neg_def"
-  "real_mul_def" > "HOLLight.hollight.real_mul_def"
-  "real_mod_def" > "HOLLight.hollight.real_mod_def"
-  "real_min_def" > "HOLLight.hollight.real_min_def"
-  "real_max_def" > "HOLLight.hollight.real_max_def"
-  "real_lt_def" > "HOLLight.hollight.real_lt_def"
-  "real_le_def" > "HOLLight.hollight.real_le_def"
-  "real_inv_def" > "HOLLight.hollight.real_inv_def"
-  "real_gt_def" > "HOLLight.hollight.real_gt_def"
-  "real_ge_def" > "HOLLight.hollight.real_ge_def"
-  "real_div_def" > "HOLLight.hollight.real_div_def"
-  "real_add_def" > "HOLLight.hollight.real_add_def"
-  "real_abs_def" > "HOLLight.hollight.real_abs_def"
-  "real_INFINITE" > "HOLLight.hollight.real_INFINITE"
-  "pastecart_def" > "HOLLight.hollight.pastecart_def"
-  "pairwise_def" > "HOLLight.hollight.pairwise_def"
-  "pair_RECURSION" > "HOLLight.hollight.pair_RECURSION"
-  "pair_INDUCT" > "Product_Type.prod.induct"
-  "one_axiom" > "HOLLight.hollight.one_axiom"
-  "one_RECURSION" > "HOLLight.hollight.one_RECURSION"
-  "one_INDUCT" > "Product_Type.unit.induct"
-  "one_Axiom" > "HOLLight.hollight.one_Axiom"
-  "one" > "HOLLightCompat.one"
-  "o_THM" > "Fun.comp_def"
-  "o_ASSOC" > "HOLLight.hollight.o_ASSOC"
-  "num_of_int_def" > "HOLLight.hollight.num_of_int_def"
-  "num_mod_def" > "HOLLight.hollight.num_mod_def"
-  "num_gcd_def" > "HOLLight.hollight.num_gcd_def"
-  "num_divides_def" > "HOLLight.hollight.num_divides_def"
-  "num_coprime_def" > "HOLLight.hollight.num_coprime_def"
-  "num_congruent" > "HOLLight.hollight.num_congruent"
-  "num_WOP" > "HOLLight.hollight.num_WOP"
-  "num_WF" > "Nat.nat_less_induct"
-  "num_RECURSION_STD" > "HOLLight.hollight.num_RECURSION_STD"
-  "num_MAX" > "HOLLight.hollight.num_MAX"
-  "num_INFINITE" > "Finite_Set.infinite_UNIV_char_0"
-  "num_INDUCTION" > "Fact.fact_nat.induct"
-  "num_FINITE_AVOID" > "HOLLight.hollight.num_FINITE_AVOID"
-  "num_FINITE" > "HOLLight.hollight.num_FINITE"
-  "num_CASES" > "Nat.nat.nchotomy"
-  "num_Axiom" > "HOLLightCompat.num_Axiom"
-  "nsum_def" > "HOLLight.hollight.nsum_def"
-  "neutral_def" > "HOLLight.hollight.neutral_def"
-  "nadd_rinv_def" > "HOLLight.hollight.nadd_rinv_def"
-  "nadd_of_num_def" > "HOLLight.hollight.nadd_of_num_def"
-  "nadd_mul_def" > "HOLLight.hollight.nadd_mul_def"
-  "nadd_le_def" > "HOLLight.hollight.nadd_le_def"
-  "nadd_inv_def" > "HOLLight.hollight.nadd_inv_def"
-  "nadd_eq_def" > "HOLLight.hollight.nadd_eq_def"
-  "nadd_add_def" > "HOLLight.hollight.nadd_add_def"
-  "monoidal_def" > "HOLLight.hollight.monoidal_def"
-  "minimal_def" > "HOLLight.hollight.minimal_def"
-  "list_INDUCT" > "List.list.induct"
-  "list_CASES" > "List.list.nchotomy"
-  "lambda_def" > "HOLLight.hollight.lambda_def"
-  "iterate_def" > "HOLLight.hollight.iterate_def"
-  "is_nadd_def" > "HOLLight.hollight.is_nadd_def"
-  "is_nadd_0" > "HOLLight.hollight.is_nadd_0"
-  "is_int" > "HOLLight.hollight.is_int"
-  "integer_def" > "HOLLight.hollight.integer_def"
-  "int_sub_th" > "HOLLight.hollight.int_sub_th"
-  "int_sub_def" > "HOLLight.hollight.int_sub_def"
-  "int_sgn_th" > "HOLLight.hollight.int_sgn_th"
-  "int_sgn_def" > "HOLLight.hollight.int_sgn_def"
-  "int_pow_th" > "HOLLight.hollight.int_pow_th"
-  "int_pow_def" > "HOLLight.hollight.int_pow_def"
-  "int_of_num_th" > "HOLLight.hollight.int_of_num_th"
-  "int_of_num_def" > "HOLLight.hollight.int_of_num_def"
-  "int_neg_th" > "HOLLight.hollight.int_neg_th"
-  "int_neg_def" > "HOLLight.hollight.int_neg_def"
-  "int_mul_th" > "HOLLight.hollight.int_mul_th"
-  "int_mul_def" > "HOLLight.hollight.int_mul_def"
-  "int_mod_def" > "HOLLight.hollight.int_mod_def"
-  "int_min_th" > "HOLLight.hollight.int_min_th"
-  "int_min_def" > "HOLLight.hollight.int_min_def"
-  "int_max_th" > "HOLLight.hollight.int_max_th"
-  "int_max_def" > "HOLLight.hollight.int_max_def"
-  "int_lt_def" > "HOLLight.hollight.int_lt_def"
-  "int_le_def" > "HOLLight.hollight.int_le_def"
-  "int_gt_def" > "HOLLight.hollight.int_gt_def"
-  "int_ge_def" > "HOLLight.hollight.int_ge_def"
-  "int_gcd_def" > "HOLLight.hollight.int_gcd_def"
-  "int_eq" > "HOLLight.hollight.int.real_of_int_inject"
-  "int_divides_def" > "HOLLight.hollight.int_divides_def"
-  "int_coprime_def" > "HOLLight.hollight.int_coprime_def"
-  "int_congruent" > "HOLLight.hollight.int_congruent"
-  "int_add_th" > "HOLLight.hollight.int_add_th"
-  "int_add_def" > "HOLLight.hollight.int_add_def"
-  "int_abs_th" > "HOLLight.hollight.int_abs_th"
-  "int_abs_def" > "HOLLight.hollight.int_abs_def"
-  "hreal_of_num_def" > "HOLLight.hollight.hreal_of_num_def"
-  "hreal_mul_def" > "HOLLight.hollight.hreal_mul_def"
-  "hreal_le_def" > "HOLLight.hollight.hreal_le_def"
-  "hreal_inv_def" > "HOLLight.hollight.hreal_inv_def"
-  "hreal_add_def" > "HOLLight.hollight.hreal_add_def"
-  "fstcart_def" > "HOLLight.hollight.fstcart_def"
-  "eqeq_def" > "HOLLight.hollight.eqeq_def"
-  "elemma0" > "HOLLight.hollight.elemma0"
-  "div_def" > "HOLLight.hollight.div_def"
-  "dist_def" > "HOLLight.hollight.dist_def"
-  "dimindex_def" > "HOLLight.hollight.dimindex_def"
-  "dest_int_rep" > "HOLLight.hollight.dest_int_rep"
-  "cth" > "HOLLight.hollight.cth"
-  "bool_RECURSION" > "HOLLight.hollight.bool_RECURSION"
-  "bool_INDUCT" > "Product_Type.bool.induct"
-  "ax__3" > "HOL4Setup.INFINITY_AX"
-  "ax__2" > "Hilbert_Choice.someI"
-  "ax__1" > "HOL.eta_contract_eq"
-  "admissible_def" > "HOLLight.hollight.admissible_def"
-  "_UNGUARDED_PATTERN_def" > "HOLLight.hollight._UNGUARDED_PATTERN_def"
-  "_SEQPATTERN_def" > "HOLLight.hollight._SEQPATTERN_def"
-  "_MATCH_def" > "HOLLight.hollight._MATCH_def"
-  "_GUARDED_PATTERN_def" > "HOLLight.hollight._GUARDED_PATTERN_def"
-  "_FUNCTION_def" > "HOLLight.hollight._FUNCTION_def"
-  "_FALSITY__def" > "HOLLight.hollight._FALSITY__def"
-  "_11937_def" > "HOLLight.hollight._11937_def"
-  "ZRECSPACE_def" > "HOLLight.hollight.ZRECSPACE_def"
-  "ZIP" > "HOLLightList.ZIP"
-  "ZCONSTR_def" > "HOLLight.hollight.ZCONSTR_def"
-  "ZCONSTR_ZBOT" > "HOLLight.hollight.ZCONSTR_ZBOT"
-  "ZBOT_def" > "HOLLight.hollight.ZBOT_def"
-  "WLOG_LT" > "HOLLight.hollight.WLOG_LT"
-  "WLOG_LE" > "HOLLight.hollight.WLOG_LE"
-  "WF_num" > "HOLLight.hollight.WF_num"
-  "WF_UREC_WF" > "HOLLight.hollight.WF_UREC_WF"
-  "WF_UREC" > "HOLLight.hollight.WF_UREC"
-  "WF_SUBSET" > "HOLLight.hollight.WF_SUBSET"
-  "WF_REFL" > "HOLLight.hollight.WF_REFL"
-  "WF_REC_num" > "HOLLight.hollight.WF_REC_num"
-  "WF_REC_WF" > "HOLLight.hollight.WF_REC_WF"
-  "WF_REC_TAIL_GENERAL" > "HOLLight.hollight.WF_REC_TAIL_GENERAL"
-  "WF_REC_TAIL" > "HOLLight.hollight.WF_REC_TAIL"
-  "WF_REC_INVARIANT" > "HOLLight.hollight.WF_REC_INVARIANT"
-  "WF_REC" > "HOLLight.hollight.WF_REC"
-  "WF_POINTWISE" > "HOLLight.hollight.WF_POINTWISE"
-  "WF_MEASURE_GEN" > "HOLLight.hollight.WF_MEASURE_GEN"
-  "WF_MEASURE" > "HOLLight.hollight.WF_MEASURE"
-  "WF_LEX_DEPENDENT" > "HOLLight.hollight.WF_LEX_DEPENDENT"
-  "WF_LEX" > "HOLLight.hollight.WF_LEX"
-  "WF_INT_MEASURE_2" > "HOLLight.hollight.WF_INT_MEASURE_2"
-  "WF_INT_MEASURE" > "HOLLight.hollight.WF_INT_MEASURE"
-  "WF_IND" > "HOLLight.hollight.WF_IND"
-  "WF_FINITE" > "HOLLight.hollight.WF_FINITE"
-  "WF_FALSE" > "Wellfounded.wfP_empty"
-  "WF_EREC" > "HOLLight.hollight.WF_EREC"
-  "WF_EQ" > "HOLLight.hollight.WF_EQ"
-  "WF_DCHAIN" > "HOLLight.hollight.WF_DCHAIN"
-  "UNWIND_THM2" > "HOL.simp_thms_39"
-  "UNWIND_THM1" > "HOL.simp_thms_40"
-  "UNIV_SUBSET" > "Orderings.top_class.top_unique"
-  "UNIV_NOT_EMPTY" > "Set.UNIV_not_empty"
-  "UNIQUE_SKOLEM_THM" > "HOL.choice_eq"
-  "UNIQUE_SKOLEM_ALT" > "HOLLight.hollight.UNIQUE_SKOLEM_ALT"
-  "UNION_UNIV" > "HOLLight.hollight.UNION_UNIV"
-  "UNION_SUBSET" > "Lattices.semilattice_sup_class.le_sup_iff"
-  "UNION_OVER_INTER" > "Lattices.distrib_lattice_class.distrib_3"
-  "UNION_IDEMPOT" > "Big_Operators.lattice_class.Sup_fin.idem"
-  "UNION_EMPTY" > "HOLLight.hollight.UNION_EMPTY"
-  "UNION_COMM" > "Lattices.lattice_class.inf_sup_aci_5"
-  "UNION_ASSOC" > "Lattices.lattice_class.inf_sup_aci_6"
-  "UNION_ACI" > "HOLLight.hollight.UNION_ACI"
-  "UNIONS_UNION" > "Complete_Lattices.Union_Un_distrib"
-  "UNIONS_SUBSET" > "HOLLight.hollight.UNIONS_SUBSET"
-  "UNIONS_INTERS" > "HOLLight.hollight.UNIONS_INTERS"
-  "UNIONS_INSERT" > "Complete_Lattices.Union_insert"
-  "UNIONS_IMAGE" > "HOLLight.hollight.UNIONS_IMAGE"
-  "UNIONS_GSPEC" > "HOLLight.hollight.UNIONS_GSPEC"
-  "UNIONS_2" > "Complete_Lattices.Un_eq_Union"
-  "UNIONS_1" > "Complete_Lattices.complete_lattice_class.Sup_singleton"
-  "UNIONS_0" > "Complete_Lattices.Union_empty"
-  "UNCURRY_def" > "HOLLight.hollight.UNCURRY_def"
-  "TYDEF_recspace" > "HOLLight.hollight.TYDEF_recspace"
-  "TYDEF_real" > "HOLLight.hollight.TYDEF_real"
-  "TYDEF_nadd" > "HOLLight.hollight.TYDEF_nadd"
-  "TYDEF_int" > "HOLLight.hollight.TYDEF_int"
-  "TYDEF_hreal" > "HOLLight.hollight.TYDEF_hreal"
-  "TYDEF_finite_sum" > "HOLLight.hollight.TYDEF_finite_sum"
-  "TYDEF_finite_image" > "HOLLight.hollight.TYDEF_finite_image"
-  "TYDEF_char" > "HOLLight.hollight.TYDEF_char"
-  "TYDEF_cart" > "HOLLight.hollight.TYDEF_cart"
-  "TYDEF_3" > "HOLLight.hollight.TYDEF_3"
-  "TYDEF_2" > "HOLLight.hollight.TYDEF_2"
-  "TWO" > "HOLLight.hollight.TWO"
-  "TRIV_OR_FORALL_THM" > "HOLLight.hollight.TRIV_OR_FORALL_THM"
-  "TRIV_FORALL_OR_THM" > "HOLLight.hollight.TRIV_FORALL_OR_THM"
-  "TRIV_FORALL_IMP_THM" > "HOLLight.hollight.TRIV_FORALL_IMP_THM"
-  "TRIV_EXISTS_IMP_THM" > "HOLLight.hollight.TRIV_EXISTS_IMP_THM"
-  "TRIV_EXISTS_AND_THM" > "HOLLight.hollight.TRIV_EXISTS_AND_THM"
-  "TRIV_AND_EXISTS_THM" > "HOLLight.hollight.TRIV_AND_EXISTS_THM"
-  "TREAL_OF_NUM_WELLDEF" > "HOLLight.hollight.TREAL_OF_NUM_WELLDEF"
-  "TREAL_OF_NUM_MUL" > "HOLLight.hollight.TREAL_OF_NUM_MUL"
-  "TREAL_OF_NUM_LE" > "HOLLight.hollight.TREAL_OF_NUM_LE"
-  "TREAL_OF_NUM_EQ" > "HOLLight.hollight.TREAL_OF_NUM_EQ"
-  "TREAL_OF_NUM_ADD" > "HOLLight.hollight.TREAL_OF_NUM_ADD"
-  "TREAL_NEG_WELLDEF" > "HOLLight.hollight.TREAL_NEG_WELLDEF"
-  "TREAL_MUL_WELLDEFR" > "HOLLight.hollight.TREAL_MUL_WELLDEFR"
-  "TREAL_MUL_WELLDEF" > "HOLLight.hollight.TREAL_MUL_WELLDEF"
-  "TREAL_MUL_SYM_EQ" > "HOLLight.hollight.TREAL_MUL_SYM_EQ"
-  "TREAL_MUL_SYM" > "HOLLight.hollight.TREAL_MUL_SYM"
-  "TREAL_MUL_LINV" > "HOLLight.hollight.TREAL_MUL_LINV"
-  "TREAL_MUL_LID" > "HOLLight.hollight.TREAL_MUL_LID"
-  "TREAL_MUL_ASSOC" > "HOLLight.hollight.TREAL_MUL_ASSOC"
-  "TREAL_LE_WELLDEF" > "HOLLight.hollight.TREAL_LE_WELLDEF"
-  "TREAL_LE_TRANS" > "HOLLight.hollight.TREAL_LE_TRANS"
-  "TREAL_LE_TOTAL" > "HOLLight.hollight.TREAL_LE_TOTAL"
-  "TREAL_LE_REFL" > "HOLLight.hollight.TREAL_LE_REFL"
-  "TREAL_LE_MUL" > "HOLLight.hollight.TREAL_LE_MUL"
-  "TREAL_LE_LADD_IMP" > "HOLLight.hollight.TREAL_LE_LADD_IMP"
-  "TREAL_LE_ANTISYM" > "HOLLight.hollight.TREAL_LE_ANTISYM"
-  "TREAL_INV_WELLDEF" > "HOLLight.hollight.TREAL_INV_WELLDEF"
-  "TREAL_INV_0" > "HOLLight.hollight.TREAL_INV_0"
-  "TREAL_EQ_TRANS" > "HOLLight.hollight.TREAL_EQ_TRANS"
-  "TREAL_EQ_SYM" > "HOLLight.hollight.TREAL_EQ_SYM"
-  "TREAL_EQ_REFL" > "HOLLight.hollight.TREAL_EQ_REFL"
-  "TREAL_EQ_IMP_LE" > "HOLLight.hollight.TREAL_EQ_IMP_LE"
-  "TREAL_EQ_AP" > "HOLLight.hollight.TREAL_EQ_AP"
-  "TREAL_ADD_WELLDEFR" > "HOLLight.hollight.TREAL_ADD_WELLDEFR"
-  "TREAL_ADD_WELLDEF" > "HOLLight.hollight.TREAL_ADD_WELLDEF"
-  "TREAL_ADD_SYM_EQ" > "HOLLight.hollight.TREAL_ADD_SYM_EQ"
-  "TREAL_ADD_SYM" > "HOLLight.hollight.TREAL_ADD_SYM"
-  "TREAL_ADD_LINV" > "HOLLight.hollight.TREAL_ADD_LINV"
-  "TREAL_ADD_LID" > "HOLLight.hollight.TREAL_ADD_LID"
-  "TREAL_ADD_LDISTRIB" > "HOLLight.hollight.TREAL_ADD_LDISTRIB"
-  "TREAL_ADD_ASSOC" > "HOLLight.hollight.TREAL_ADD_ASSOC"
-  "TRANSITIVE_STEPWISE_LT_EQ" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LT_EQ"
-  "TRANSITIVE_STEPWISE_LT" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LT"
-  "TRANSITIVE_STEPWISE_LE_EQ" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LE_EQ"
-  "TRANSITIVE_STEPWISE_LE" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LE"
-  "TOPOLOGICAL_SORT" > "HOLLight.hollight.TOPOLOGICAL_SORT"
-  "SWAP_FORALL_THM" > "HOL.all_comm"
-  "SWAP_EXISTS_THM" > "HOL.ex_comm"
-  "SURJ_def" > "HOLLight.hollight.SURJ_def"
-  "SURJECTIVE_RIGHT_INVERSE" > "HOLLight.hollight.SURJECTIVE_RIGHT_INVERSE"
-  "SURJECTIVE_ON_RIGHT_INVERSE" > "HOLLight.hollight.SURJECTIVE_ON_RIGHT_INVERSE"
-  "SURJECTIVE_ON_IMAGE" > "HOLLight.hollight.SURJECTIVE_ON_IMAGE"
-  "SURJECTIVE_MAP" > "HOLLightList.SURJECTIVE_MAP"
-  "SURJECTIVE_IMAGE_THM" > "HOLLight.hollight.SURJECTIVE_IMAGE_THM"
-  "SURJECTIVE_IMAGE_EQ" > "HOLLight.hollight.SURJECTIVE_IMAGE_EQ"
-  "SURJECTIVE_IMAGE" > "HOLLight.hollight.SURJECTIVE_IMAGE"
-  "SURJECTIVE_IFF_INJECTIVE_GEN" > "HOLLight.hollight.SURJECTIVE_IFF_INJECTIVE_GEN"
-  "SURJECTIVE_IFF_INJECTIVE" > "HOLLight.hollight.SURJECTIVE_IFF_INJECTIVE"
-  "SURJECTIVE_FORALL_THM" > "HOLLight.hollight.SURJECTIVE_FORALL_THM"
-  "SURJECTIVE_EXISTS_THM" > "HOLLight.hollight.SURJECTIVE_EXISTS_THM"
-  "SUPPORT_SUPPORT" > "HOLLight.hollight.SUPPORT_SUPPORT"
-  "SUPPORT_SUBSET" > "HOLLight.hollight.SUPPORT_SUBSET"
-  "SUPPORT_EMPTY" > "HOLLight.hollight.SUPPORT_EMPTY"
-  "SUPPORT_DELTA" > "HOLLight.hollight.SUPPORT_DELTA"
-  "SUPPORT_CLAUSES" > "HOLLight.hollight.SUPPORT_CLAUSES"
-  "SUPERADMISSIBLE_TAIL" > "HOLLight.hollight.SUPERADMISSIBLE_TAIL"
-  "SUPERADMISSIBLE_T" > "HOLLight.hollight.SUPERADMISSIBLE_T"
-  "SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN" > "HOLLight.hollight.SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN"
-  "SUPERADMISSIBLE_MATCH_SEQPATTERN" > "HOLLight.hollight.SUPERADMISSIBLE_MATCH_SEQPATTERN"
-  "SUPERADMISSIBLE_MATCH_GUARDED_PATTERN" > "HOLLight.hollight.SUPERADMISSIBLE_MATCH_GUARDED_PATTERN"
-  "SUPERADMISSIBLE_CONST" > "HOLLight.hollight.SUPERADMISSIBLE_CONST"
-  "SUPERADMISSIBLE_COND" > "HOLLight.hollight.SUPERADMISSIBLE_COND"
-  "SUM_ZERO_EXISTS" > "HOLLight.hollight.SUM_ZERO_EXISTS"
-  "SUM_UNION_RZERO" > "HOLLight.hollight.SUM_UNION_RZERO"
-  "SUM_UNION_NONZERO" > "HOLLight.hollight.SUM_UNION_NONZERO"
-  "SUM_UNION_LZERO" > "HOLLight.hollight.SUM_UNION_LZERO"
-  "SUM_UNION_EQ" > "HOLLight.hollight.SUM_UNION_EQ"
-  "SUM_UNIONS_NONZERO" > "HOLLight.hollight.SUM_UNIONS_NONZERO"
-  "SUM_UNION" > "HOLLight.hollight.SUM_UNION"
-  "SUM_TRIV_NUMSEG" > "HOLLight.hollight.SUM_TRIV_NUMSEG"
-  "SUM_SWAP_NUMSEG" > "HOLLight.hollight.SUM_SWAP_NUMSEG"
-  "SUM_SWAP" > "HOLLight.hollight.SUM_SWAP"
-  "SUM_SUPPORT" > "HOLLight.hollight.SUM_SUPPORT"
-  "SUM_SUPERSET" > "HOLLight.hollight.SUM_SUPERSET"
-  "SUM_SUM_RESTRICT" > "HOLLight.hollight.SUM_SUM_RESTRICT"
-  "SUM_SUM_PRODUCT" > "HOLLight.hollight.SUM_SUM_PRODUCT"
-  "SUM_SUB_NUMSEG" > "HOLLight.hollight.SUM_SUB_NUMSEG"
-  "SUM_SUBSET_SIMPLE" > "HOLLight.hollight.SUM_SUBSET_SIMPLE"
-  "SUM_SUBSET" > "HOLLight.hollight.SUM_SUBSET"
-  "SUM_SUB" > "HOLLight.hollight.SUM_SUB"
-  "SUM_SING_NUMSEG" > "HOLLight.hollight.SUM_SING_NUMSEG"
-  "SUM_SING" > "HOLLight.hollight.SUM_SING"
-  "SUM_RMUL" > "HOLLight.hollight.SUM_RMUL"
-  "SUM_RESTRICT_SET" > "HOLLight.hollight.SUM_RESTRICT_SET"
-  "SUM_RESTRICT" > "HOLLight.hollight.SUM_RESTRICT"
-  "SUM_POS_LE_NUMSEG" > "HOLLight.hollight.SUM_POS_LE_NUMSEG"
-  "SUM_POS_LE" > "HOLLight.hollight.SUM_POS_LE"
-  "SUM_POS_EQ_0_NUMSEG" > "HOLLight.hollight.SUM_POS_EQ_0_NUMSEG"
-  "SUM_POS_EQ_0" > "HOLLight.hollight.SUM_POS_EQ_0"
-  "SUM_POS_BOUND" > "HOLLight.hollight.SUM_POS_BOUND"
-  "SUM_PARTIAL_SUC" > "HOLLight.hollight.SUM_PARTIAL_SUC"
-  "SUM_PARTIAL_PRE" > "HOLLight.hollight.SUM_PARTIAL_PRE"
-  "SUM_PAIR" > "HOLLight.hollight.SUM_PAIR"
-  "SUM_OFFSET_0" > "HOLLight.hollight.SUM_OFFSET_0"
-  "SUM_OFFSET" > "HOLLight.hollight.SUM_OFFSET"
-  "SUM_NEG" > "HOLLight.hollight.SUM_NEG"
-  "SUM_MULTICOUNT_GEN" > "HOLLight.hollight.SUM_MULTICOUNT_GEN"
-  "SUM_MULTICOUNT" > "HOLLight.hollight.SUM_MULTICOUNT"
-  "SUM_LT_ALL" > "HOLLight.hollight.SUM_LT_ALL"
-  "SUM_LT" > "HOLLight.hollight.SUM_LT"
-  "SUM_LMUL" > "HOLLight.hollight.SUM_LMUL"
-  "SUM_LE_NUMSEG" > "HOLLight.hollight.SUM_LE_NUMSEG"
-  "SUM_LE_INCLUDED" > "HOLLight.hollight.SUM_LE_INCLUDED"
-  "SUM_LE" > "HOLLight.hollight.SUM_LE"
-  "SUM_INJECTION" > "HOLLight.hollight.SUM_INJECTION"
-  "SUM_INCL_EXCL" > "HOLLight.hollight.SUM_INCL_EXCL"
-  "SUM_IMAGE_NONZERO" > "HOLLight.hollight.SUM_IMAGE_NONZERO"
-  "SUM_IMAGE_LE" > "HOLLight.hollight.SUM_IMAGE_LE"
-  "SUM_IMAGE_GEN" > "HOLLight.hollight.SUM_IMAGE_GEN"
-  "SUM_IMAGE" > "HOLLight.hollight.SUM_IMAGE"
-  "SUM_GROUP" > "HOLLight.hollight.SUM_GROUP"
-  "SUM_EQ_SUPERSET" > "HOLLight.hollight.SUM_EQ_SUPERSET"
-  "SUM_EQ_NUMSEG" > "HOLLight.hollight.SUM_EQ_NUMSEG"
-  "SUM_EQ_GENERAL_INVERSES" > "HOLLight.hollight.SUM_EQ_GENERAL_INVERSES"
-  "SUM_EQ_GENERAL" > "HOLLight.hollight.SUM_EQ_GENERAL"
-  "SUM_EQ_0_NUMSEG" > "HOLLight.hollight.SUM_EQ_0_NUMSEG"
-  "SUM_EQ_0" > "HOLLight.hollight.SUM_EQ_0"
-  "SUM_EQ" > "HOLLight.hollight.SUM_EQ"
-  "SUM_DIFFS_ALT" > "HOLLight.hollight.SUM_DIFFS_ALT"
-  "SUM_DIFFS" > "HOLLight.hollight.SUM_DIFFS"
-  "SUM_DIFF" > "HOLLight.hollight.SUM_DIFF"
-  "SUM_DELTA" > "HOLLight.hollight.SUM_DELTA"
-  "SUM_DELETE_CASES" > "HOLLight.hollight.SUM_DELETE_CASES"
-  "SUM_DELETE" > "HOLLight.hollight.SUM_DELETE"
-  "SUM_CONST_NUMSEG" > "HOLLight.hollight.SUM_CONST_NUMSEG"
-  "SUM_CONST" > "HOLLight.hollight.SUM_CONST"
-  "SUM_COMBINE_R" > "HOLLight.hollight.SUM_COMBINE_R"
-  "SUM_COMBINE_L" > "HOLLight.hollight.SUM_COMBINE_L"
-  "SUM_CLOSED" > "HOLLight.hollight.SUM_CLOSED"
-  "SUM_CLAUSES_RIGHT" > "HOLLight.hollight.SUM_CLAUSES_RIGHT"
-  "SUM_CLAUSES_NUMSEG" > "HOLLight.hollight.SUM_CLAUSES_NUMSEG"
-  "SUM_CLAUSES_LEFT" > "HOLLight.hollight.SUM_CLAUSES_LEFT"
-  "SUM_CLAUSES" > "HOLLight.hollight.SUM_CLAUSES"
-  "SUM_CASES_1" > "HOLLight.hollight.SUM_CASES_1"
-  "SUM_CASES" > "HOLLight.hollight.SUM_CASES"
-  "SUM_BOUND_LT_GEN" > "HOLLight.hollight.SUM_BOUND_LT_GEN"
-  "SUM_BOUND_LT_ALL" > "HOLLight.hollight.SUM_BOUND_LT_ALL"
-  "SUM_BOUND_LT" > "HOLLight.hollight.SUM_BOUND_LT"
-  "SUM_BOUND_GEN" > "HOLLight.hollight.SUM_BOUND_GEN"
-  "SUM_BOUND" > "HOLLight.hollight.SUM_BOUND"
-  "SUM_BIJECTION" > "HOLLight.hollight.SUM_BIJECTION"
-  "SUM_ADD_SPLIT" > "HOLLight.hollight.SUM_ADD_SPLIT"
-  "SUM_ADD_NUMSEG" > "HOLLight.hollight.SUM_ADD_NUMSEG"
-  "SUM_ADD_GEN" > "HOLLight.hollight.SUM_ADD_GEN"
-  "SUM_ADD" > "HOLLight.hollight.SUM_ADD"
-  "SUM_ABS_NUMSEG" > "HOLLight.hollight.SUM_ABS_NUMSEG"
-  "SUM_ABS_LE" > "HOLLight.hollight.SUM_ABS_LE"
-  "SUM_ABS_BOUND" > "HOLLight.hollight.SUM_ABS_BOUND"
-  "SUM_ABS" > "HOLLight.hollight.SUM_ABS"
-  "SUM_0" > "HOLLight.hollight.SUM_0"
-  "SUC_SUB1" > "Nat.diff_Suc_1"
-  "SUC_INJ" > "HOLLightCompat.SUC_INJ"
-  "SUB_SUC" > "Nat.diff_Suc_Suc"
-  "SUB_REFL" > "Nat.diff_self_eq_0"
-  "SUB_PRESUC" > "HOLLight.hollight.SUB_PRESUC"
-  "SUB_EQ_0" > "Nat.diff_is_0_eq"
-  "SUB_ELIM_THM" > "HOLLight.hollight.SUB_ELIM_THM"
-  "SUB_ADD_RCANCEL" > "Nat.diff_cancel2"
-  "SUB_ADD_LCANCEL" > "Nat.diff_cancel"
-  "SUB_ADD" > "Nat.le_add_diff_inverse2"
-  "SUB_0" > "HOLLight.hollight.SUB_0"
-  "SUBSET_UNIV" > "Orderings.top_class.top_greatest"
-  "SUBSET_UNION_ABSORPTION" > "Lattices.semilattice_sup_class.le_iff_sup"
-  "SUBSET_UNIONS" > "Complete_Lattices.Union_mono"
-  "SUBSET_UNION" > "HOLLight.hollight.SUBSET_UNION"
-  "SUBSET_TRANS" > "Orderings.order_trans_rules_23"
-  "SUBSET_RESTRICT" > "HOLLight.hollight.SUBSET_RESTRICT"
-  "SUBSET_REFL" > "Inductive.basic_monos_1"
-  "SUBSET_PSUBSET_TRANS" > "Orderings.order_le_less_trans"
-  "SUBSET_NUMSEG" > "HOLLight.hollight.SUBSET_NUMSEG"
-  "SUBSET_INTER_ABSORPTION" > "Lattices.semilattice_inf_class.le_iff_inf"
-  "SUBSET_INTER" > "Lattices.semilattice_inf_class.le_inf_iff"
-  "SUBSET_INSERT_DELETE" > "HOLLight.hollight.SUBSET_INSERT_DELETE"
-  "SUBSET_INSERT" > "Set.subset_insert"
-  "SUBSET_IMAGE" > "Set.subset_image_iff"
-  "SUBSET_EMPTY" > "Orderings.bot_class.bot_unique"
-  "SUBSET_DIFF" > "Set.Diff_subset"
-  "SUBSET_DELETE" > "HOLLight.hollight.SUBSET_DELETE"
-  "SUBSET_CARD_EQ" > "HOLLight.hollight.SUBSET_CARD_EQ"
-  "SUBSET_ANTISYM_EQ" > "Orderings.order_class.eq_iff"
-  "SUBSET_ANTISYM" > "Orderings.order_antisym"
-  "SND" > "Product_Type.snd_conv"
-  "SKOLEM_THM" > "HOLLight.hollight.SKOLEM_THM"
-  "SING_def" > "HOLLight.hollight.SING_def"
-  "SING_SUBSET" > "HOLLight.hollight.SING_SUBSET"
-  "SING_GSPEC" > "HOLLight.hollight.SING_GSPEC"
-  "SIMPLE_IMAGE_GEN" > "HOLLight.hollight.SIMPLE_IMAGE_GEN"
-  "SIMPLE_IMAGE" > "HOLLight.hollight.SIMPLE_IMAGE"
-  "SET_RECURSION_LEMMA" > "HOLLight.hollight.SET_RECURSION_LEMMA"
-  "SET_PROVE_CASES" > "HOLLight.hollight.SET_PROVE_CASES"
-  "SET_PAIR_THM" > "HOLLight.hollight.SET_PAIR_THM"
-  "SET_OF_LIST_MAP" > "List.set_map"
-  "SET_OF_LIST_EQ_EMPTY" > "List.set_empty"
-  "SET_OF_LIST_APPEND" > "List.set_append"
-  "SET_CASES" > "HOLLight.hollight.SET_CASES"
-  "SEMIRING_PTHS" > "HOLLight.hollight.SEMIRING_PTHS"
-  "SELECT_UNIQUE" > "HOLLight.hollight.SELECT_UNIQUE"
-  "SELECT_REFL" > "Hilbert_Choice.some_eq_trivial"
-  "SELECT_LEMMA" > "Hilbert_Choice.some_sym_eq_trivial"
-  "RIGHT_SUB_DISTRIB" > "Nat.diff_mult_distrib"
-  "RIGHT_OR_FORALL_THM" > "HOL.all_simps_4"
-  "RIGHT_OR_EXISTS_THM" > "HOL.ex_simps_4"
-  "RIGHT_OR_DISTRIB" > "Groebner_Basis.dnf_2"
-  "RIGHT_IMP_FORALL_THM" > "HOL.all_simps_6"
-  "RIGHT_IMP_EXISTS_THM" > "HOL.ex_simps_6"
-  "RIGHT_FORALL_OR_THM" > "HOL.all_simps_4"
-  "RIGHT_FORALL_IMP_THM" > "HOL.all_simps_6"
-  "RIGHT_EXISTS_IMP_THM" > "HOL.ex_simps_6"
-  "RIGHT_EXISTS_AND_THM" > "HOL.ex_simps_2"
-  "RIGHT_AND_FORALL_THM" > "HOL.all_simps_2"
-  "RIGHT_AND_EXISTS_THM" > "HOL.ex_simps_2"
-  "RIGHT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_26"
-  "REVERSE_REVERSE" > "List.rev_rev_ident"
-  "REVERSE_APPEND" > "List.rev_append"
-  "REST_def" > "HOLLight.hollight.REST_def"
-  "REFL_CLAUSE" > "Groebner_Basis.bool_simps_6"
-  "REAL_WLOG_LT" > "HOLLight.hollight.REAL_WLOG_LT"
-  "REAL_WLOG_LE" > "HOLLight.hollight.REAL_WLOG_LE"
-  "REAL_SUB_TRIANGLE" > "HOLLight.hollight.REAL_SUB_TRIANGLE"
-  "REAL_SUB_SUB2" > "HOLLight.hollight.REAL_SUB_SUB2"
-  "REAL_SUB_SUB" > "HOLLight.hollight.REAL_SUB_SUB"
-  "REAL_SUB_RZERO" > "HOLLight.hollight.REAL_SUB_RZERO"
-  "REAL_SUB_RNEG" > "HOLLight.hollight.REAL_SUB_RNEG"
-  "REAL_SUB_REFL" > "HOLLight.hollight.REAL_SUB_REFL"
-  "REAL_SUB_RDISTRIB" > "HOLLight.hollight.REAL_SUB_RDISTRIB"
-  "REAL_SUB_POW_R1" > "HOLLight.hollight.REAL_SUB_POW_R1"
-  "REAL_SUB_POW_L1" > "HOLLight.hollight.REAL_SUB_POW_L1"
-  "REAL_SUB_POW" > "HOLLight.hollight.REAL_SUB_POW"
-  "REAL_SUB_NEG2" > "HOLLight.hollight.REAL_SUB_NEG2"
-  "REAL_SUB_LZERO" > "HOLLight.hollight.REAL_SUB_LZERO"
-  "REAL_SUB_LT" > "HOLLight.hollight.REAL_SUB_LT"
-  "REAL_SUB_LNEG" > "HOLLight.hollight.REAL_SUB_LNEG"
-  "REAL_SUB_LE" > "HOLLight.hollight.REAL_SUB_LE"
-  "REAL_SUB_LDISTRIB" > "HOLLight.hollight.REAL_SUB_LDISTRIB"
-  "REAL_SUB_INV" > "HOLLight.hollight.REAL_SUB_INV"
-  "REAL_SUB_ADD2" > "HOLLight.hollight.REAL_SUB_ADD2"
-  "REAL_SUB_ADD" > "HOLLight.hollight.REAL_SUB_ADD"
-  "REAL_SUB_ABS" > "HOLLight.hollight.REAL_SUB_ABS"
-  "REAL_SUB_0" > "HOLLight.hollight.REAL_SUB_0"
-  "REAL_SOS_EQ_0" > "HOLLight.hollight.REAL_SOS_EQ_0"
-  "REAL_SGN_NEG" > "HOLLight.hollight.REAL_SGN_NEG"
-  "REAL_SGN_MUL" > "HOLLight.hollight.REAL_SGN_MUL"
-  "REAL_SGN_INV" > "HOLLight.hollight.REAL_SGN_INV"
-  "REAL_SGN_DIV" > "HOLLight.hollight.REAL_SGN_DIV"
-  "REAL_SGN_ABS" > "HOLLight.hollight.REAL_SGN_ABS"
-  "REAL_SGN_0" > "HOLLight.hollight.REAL_SGN_0"
-  "REAL_SGN" > "HOLLight.hollight.REAL_SGN"
-  "REAL_RNEG_UNIQ" > "HOLLight.hollight.REAL_RNEG_UNIQ"
-  "REAL_POW_ZERO" > "HOLLight.hollight.REAL_POW_ZERO"
-  "REAL_POW_SUB" > "HOLLight.hollight.REAL_POW_SUB"
-  "REAL_POW_POW" > "HOLLight.hollight.REAL_POW_POW"
-  "REAL_POW_ONE" > "HOLLight.hollight.REAL_POW_ONE"
-  "REAL_POW_NZ" > "HOLLight.hollight.REAL_POW_NZ"
-  "REAL_POW_NEG" > "HOLLight.hollight.REAL_POW_NEG"
-  "REAL_POW_MUL" > "HOLLight.hollight.REAL_POW_MUL"
-  "REAL_POW_MONO_LT" > "HOLLight.hollight.REAL_POW_MONO_LT"
-  "REAL_POW_MONO_INV" > "HOLLight.hollight.REAL_POW_MONO_INV"
-  "REAL_POW_MONO" > "HOLLight.hollight.REAL_POW_MONO"
-  "REAL_POW_LT_1" > "HOLLight.hollight.REAL_POW_LT_1"
-  "REAL_POW_LT2_REV" > "HOLLight.hollight.REAL_POW_LT2_REV"
-  "REAL_POW_LT2_ODD_EQ" > "HOLLight.hollight.REAL_POW_LT2_ODD_EQ"
-  "REAL_POW_LT2_ODD" > "HOLLight.hollight.REAL_POW_LT2_ODD"
-  "REAL_POW_LT2" > "HOLLight.hollight.REAL_POW_LT2"
-  "REAL_POW_LT" > "HOLLight.hollight.REAL_POW_LT"
-  "REAL_POW_LE_1" > "HOLLight.hollight.REAL_POW_LE_1"
-  "REAL_POW_LE2_REV" > "HOLLight.hollight.REAL_POW_LE2_REV"
-  "REAL_POW_LE2_ODD_EQ" > "HOLLight.hollight.REAL_POW_LE2_ODD_EQ"
-  "REAL_POW_LE2_ODD" > "HOLLight.hollight.REAL_POW_LE2_ODD"
-  "REAL_POW_LE2" > "HOLLight.hollight.REAL_POW_LE2"
-  "REAL_POW_LE" > "HOLLight.hollight.REAL_POW_LE"
-  "REAL_POW_INV" > "HOLLight.hollight.REAL_POW_INV"
-  "REAL_POW_EQ_ODD_EQ" > "HOLLight.hollight.REAL_POW_EQ_ODD_EQ"
-  "REAL_POW_EQ_ODD" > "HOLLight.hollight.REAL_POW_EQ_ODD"
-  "REAL_POW_EQ_EQ" > "HOLLight.hollight.REAL_POW_EQ_EQ"
-  "REAL_POW_EQ_ABS" > "HOLLight.hollight.REAL_POW_EQ_ABS"
-  "REAL_POW_EQ_1_IMP" > "HOLLight.hollight.REAL_POW_EQ_1_IMP"
-  "REAL_POW_EQ_1" > "HOLLight.hollight.REAL_POW_EQ_1"
-  "REAL_POW_EQ_0" > "HOLLight.hollight.REAL_POW_EQ_0"
-  "REAL_POW_EQ" > "HOLLight.hollight.REAL_POW_EQ"
-  "REAL_POW_DIV" > "HOLLight.hollight.REAL_POW_DIV"
-  "REAL_POW_ADD" > "HOLLight.hollight.REAL_POW_ADD"
-  "REAL_POW_2" > "HOLLight.hollight.REAL_POW_2"
-  "REAL_POW_1_LT" > "HOLLight.hollight.REAL_POW_1_LT"
-  "REAL_POW_1_LE" > "HOLLight.hollight.REAL_POW_1_LE"
-  "REAL_POW_1" > "HOLLight.hollight.REAL_POW_1"
-  "REAL_POW2_ABS" > "HOLLight.hollight.REAL_POW2_ABS"
-  "REAL_POS_NZ" > "HOLLight.hollight.REAL_POS_NZ"
-  "REAL_POS" > "HOLLight.hollight.REAL_POS"
-  "REAL_POLY_NEG_CLAUSES" > "HOLLight.hollight.REAL_POLY_NEG_CLAUSES"
-  "REAL_POLY_CLAUSES" > "HOLLight.hollight.REAL_POLY_CLAUSES"
-  "REAL_OF_NUM_SUM_NUMSEG" > "HOLLight.hollight.REAL_OF_NUM_SUM_NUMSEG"
-  "REAL_OF_NUM_SUM" > "HOLLight.hollight.REAL_OF_NUM_SUM"
-  "REAL_OF_NUM_SUC" > "HOLLight.hollight.REAL_OF_NUM_SUC"
-  "REAL_OF_NUM_SUB" > "HOLLight.hollight.REAL_OF_NUM_SUB"
-  "REAL_OF_NUM_POW" > "HOLLight.hollight.REAL_OF_NUM_POW"
-  "REAL_OF_NUM_MIN" > "HOLLight.hollight.REAL_OF_NUM_MIN"
-  "REAL_OF_NUM_MAX" > "HOLLight.hollight.REAL_OF_NUM_MAX"
-  "REAL_OF_NUM_LT" > "HOLLight.hollight.REAL_OF_NUM_LT"
-  "REAL_OF_NUM_GT" > "HOLLight.hollight.REAL_OF_NUM_GT"
-  "REAL_OF_NUM_GE" > "HOLLight.hollight.REAL_OF_NUM_GE"
-  "REAL_NOT_LT" > "HOLLight.hollight.REAL_NOT_LT"
-  "REAL_NOT_LE" > "HOLLight.hollight.real_lt_def"
-  "REAL_NOT_EQ" > "HOLLight.hollight.REAL_NOT_EQ"
-  "REAL_NEG_SUB" > "HOLLight.hollight.REAL_NEG_SUB"
-  "REAL_NEG_RMUL" > "HOLLight.hollight.REAL_NEG_RMUL"
-  "REAL_NEG_NEG" > "HOLLight.hollight.REAL_NEG_NEG"
-  "REAL_NEG_MUL2" > "HOLLight.hollight.REAL_NEG_MUL2"
-  "REAL_NEG_MINUS1" > "HOLLight.hollight.REAL_NEG_MINUS1"
-  "REAL_NEG_LT0" > "HOLLight.hollight.REAL_NEG_LT0"
-  "REAL_NEG_LMUL" > "HOLLight.hollight.REAL_NEG_LMUL"
-  "REAL_NEG_LE0" > "HOLLight.hollight.REAL_NEG_LE0"
-  "REAL_NEG_GT0" > "HOLLight.hollight.REAL_NEG_GT0"
-  "REAL_NEG_GE0" > "HOLLight.hollight.REAL_NEG_GE0"
-  "REAL_NEG_EQ_0" > "HOLLight.hollight.REAL_NEG_EQ_0"
-  "REAL_NEG_EQ" > "HOLLight.hollight.REAL_NEG_EQ"
-  "REAL_NEG_ADD" > "HOLLight.hollight.REAL_NEG_ADD"
-  "REAL_NEG_0" > "HOLLight.hollight.REAL_NEG_0"
-  "REAL_NEGNEG" > "HOLLight.hollight.REAL_NEGNEG"
-  "REAL_MUL_RZERO" > "HOLLight.hollight.REAL_MUL_RZERO"
-  "REAL_MUL_RNEG" > "HOLLight.hollight.REAL_MUL_RNEG"
-  "REAL_MUL_RINV_UNIQ" > "HOLLight.hollight.REAL_MUL_RINV_UNIQ"
-  "REAL_MUL_RINV" > "HOLLight.hollight.REAL_MUL_RINV"
-  "REAL_MUL_RID" > "HOLLight.hollight.REAL_MUL_RID"
-  "REAL_MUL_POS_LT" > "HOLLight.hollight.REAL_MUL_POS_LT"
-  "REAL_MUL_POS_LE" > "HOLLight.hollight.REAL_MUL_POS_LE"
-  "REAL_MUL_LZERO" > "HOLLight.hollight.REAL_MUL_LZERO"
-  "REAL_MUL_LNEG" > "HOLLight.hollight.REAL_MUL_LNEG"
-  "REAL_MUL_LINV_UNIQ" > "HOLLight.hollight.REAL_MUL_LINV_UNIQ"
-  "REAL_MUL_AC" > "HOLLight.hollight.REAL_MUL_AC"
-  "REAL_MUL_2" > "HOLLight.hollight.REAL_MUL_2"
-  "REAL_MIN_SYM" > "HOLLight.hollight.REAL_MIN_SYM"
-  "REAL_MIN_MIN" > "HOLLight.hollight.REAL_MIN_MIN"
-  "REAL_MIN_MAX" > "HOLLight.hollight.REAL_MIN_MAX"
-  "REAL_MIN_LT" > "HOLLight.hollight.REAL_MIN_LT"
-  "REAL_MIN_LE" > "HOLLight.hollight.REAL_MIN_LE"
-  "REAL_MIN_ASSOC" > "HOLLight.hollight.REAL_MIN_ASSOC"
-  "REAL_MIN_ACI" > "HOLLight.hollight.REAL_MIN_ACI"
-  "REAL_MAX_SYM" > "HOLLight.hollight.REAL_MAX_SYM"
-  "REAL_MAX_MIN" > "HOLLight.hollight.REAL_MAX_MIN"
-  "REAL_MAX_MAX" > "HOLLight.hollight.REAL_MAX_MAX"
-  "REAL_MAX_LT" > "HOLLight.hollight.REAL_MAX_LT"
-  "REAL_MAX_LE" > "HOLLight.hollight.REAL_MAX_LE"
-  "REAL_MAX_ASSOC" > "HOLLight.hollight.REAL_MAX_ASSOC"
-  "REAL_MAX_ACI" > "HOLLight.hollight.REAL_MAX_ACI"
-  "REAL_LT_TRANS" > "HOLLight.hollight.REAL_LT_TRANS"
-  "REAL_LT_TOTAL" > "HOLLight.hollight.REAL_LT_TOTAL"
-  "REAL_LT_SUB_RADD" > "HOLLight.hollight.REAL_LT_SUB_RADD"
-  "REAL_LT_SUB_LADD" > "HOLLight.hollight.REAL_LT_SUB_LADD"
-  "REAL_LT_SQUARE_ABS" > "HOLLight.hollight.REAL_LT_SQUARE_ABS"
-  "REAL_LT_SQUARE" > "HOLLight.hollight.REAL_LT_SQUARE"
-  "REAL_LT_RNEG" > "HOLLight.hollight.REAL_LT_RNEG"
-  "REAL_LT_RMUL_EQ" > "HOLLight.hollight.REAL_LT_RMUL_EQ"
-  "REAL_LT_RMUL" > "HOLLight.hollight.REAL_LT_RMUL"
-  "REAL_LT_RINV" > "HOLLight.hollight.REAL_LT_RINV"
-  "REAL_LT_REFL" > "HOLLight.hollight.REAL_LT_REFL"
-  "REAL_LT_RDIV_EQ" > "HOLLight.hollight.REAL_LT_RDIV_EQ"
-  "REAL_LT_RCANCEL_IMP" > "HOLLight.hollight.REAL_LT_RCANCEL_IMP"
-  "REAL_LT_RADD" > "HOLLight.hollight.REAL_LT_RADD"
-  "REAL_LT_POW2" > "HOLLight.hollight.REAL_LT_POW2"
-  "REAL_LT_NEGTOTAL" > "HOLLight.hollight.REAL_LT_NEGTOTAL"
-  "REAL_LT_NEG2" > "HOLLight.hollight.REAL_LT_NEG2"
-  "REAL_LT_NEG" > "HOLLight.hollight.REAL_LT_NEG"
-  "REAL_LT_MUL_EQ" > "HOLLight.hollight.REAL_LT_MUL_EQ"
-  "REAL_LT_MUL2" > "HOLLight.hollight.REAL_LT_MUL2"
-  "REAL_LT_MUL" > "HOLLight.hollight.REAL_LT_MUL"
-  "REAL_LT_MIN" > "HOLLight.hollight.REAL_LT_MIN"
-  "REAL_LT_MAX" > "HOLLight.hollight.REAL_LT_MAX"
-  "REAL_LT_LNEG" > "HOLLight.hollight.REAL_LT_LNEG"
-  "REAL_LT_LMUL_EQ" > "HOLLight.hollight.REAL_LT_LMUL_EQ"
-  "REAL_LT_LMUL" > "HOLLight.hollight.REAL_LT_LMUL"
-  "REAL_LT_LINV" > "HOLLight.hollight.REAL_LT_LINV"
-  "REAL_LT_LE" > "HOLLight.hollight.REAL_LT_LE"
-  "REAL_LT_LDIV_EQ" > "HOLLight.hollight.REAL_LT_LDIV_EQ"
-  "REAL_LT_LCANCEL_IMP" > "HOLLight.hollight.REAL_LT_LCANCEL_IMP"
-  "REAL_LT_LADD_IMP" > "HOLLight.hollight.REAL_LT_LADD_IMP"
-  "REAL_LT_LADD" > "HOLLight.hollight.REAL_LT_LADD"
-  "REAL_LT_INV_EQ" > "HOLLight.hollight.REAL_LT_INV_EQ"
-  "REAL_LT_INV2" > "HOLLight.hollight.REAL_LT_INV2"
-  "REAL_LT_INV" > "HOLLight.hollight.REAL_LT_INV"
-  "REAL_LT_IMP_NZ" > "HOLLight.hollight.REAL_LT_IMP_NZ"
-  "REAL_LT_IMP_NE" > "HOLLight.hollight.REAL_LT_IMP_NE"
-  "REAL_LT_IMP_LE" > "HOLLight.hollight.REAL_LT_IMP_LE"
-  "REAL_LT_GT" > "HOLLight.hollight.REAL_LT_GT"
-  "REAL_LT_DIV2_EQ" > "HOLLight.hollight.REAL_LT_DIV2_EQ"
-  "REAL_LT_DIV" > "HOLLight.hollight.REAL_LT_DIV"
-  "REAL_LT_ANTISYM" > "HOLLight.hollight.REAL_LT_ANTISYM"
-  "REAL_LT_ADD_SUB" > "HOLLight.hollight.REAL_LT_ADD_SUB"
-  "REAL_LT_ADDR" > "HOLLight.hollight.REAL_LT_ADDR"
-  "REAL_LT_ADDNEG2" > "HOLLight.hollight.REAL_LT_ADDNEG2"
-  "REAL_LT_ADDNEG" > "HOLLight.hollight.REAL_LT_ADDNEG"
-  "REAL_LT_ADDL" > "HOLLight.hollight.REAL_LT_ADDL"
-  "REAL_LT_ADD2" > "HOLLight.hollight.REAL_LT_ADD2"
-  "REAL_LT_ADD1" > "HOLLight.hollight.REAL_LT_ADD1"
-  "REAL_LT_ADD" > "HOLLight.hollight.REAL_LT_ADD"
-  "REAL_LT_01" > "HOLLight.hollight.REAL_LT_01"
-  "REAL_LTE_TRANS" > "HOLLight.hollight.REAL_LTE_TRANS"
-  "REAL_LTE_TOTAL" > "HOLLight.hollight.REAL_LTE_TOTAL"
-  "REAL_LTE_ANTISYM" > "HOLLight.hollight.REAL_LTE_ANTISYM"
-  "REAL_LTE_ADD2" > "HOLLight.hollight.REAL_LTE_ADD2"
-  "REAL_LTE_ADD" > "HOLLight.hollight.REAL_LTE_ADD"
-  "REAL_LNEG_UNIQ" > "HOLLight.hollight.REAL_LNEG_UNIQ"
-  "REAL_LE_SUB_RADD" > "HOLLight.hollight.REAL_LE_SUB_RADD"
-  "REAL_LE_SUB_LADD" > "HOLLight.hollight.REAL_LE_SUB_LADD"
-  "REAL_LE_SQUARE_ABS" > "HOLLight.hollight.REAL_LE_SQUARE_ABS"
-  "REAL_LE_SQUARE" > "HOLLight.hollight.REAL_LE_SQUARE"
-  "REAL_LE_RNEG" > "HOLLight.hollight.REAL_LE_RNEG"
-  "REAL_LE_RMUL_EQ" > "HOLLight.hollight.REAL_LE_RMUL_EQ"
-  "REAL_LE_RMUL" > "HOLLight.hollight.REAL_LE_RMUL"
-  "REAL_LE_RINV" > "HOLLight.hollight.REAL_LE_RINV"
-  "REAL_LE_RDIV_EQ" > "HOLLight.hollight.REAL_LE_RDIV_EQ"
-  "REAL_LE_RCANCEL_IMP" > "HOLLight.hollight.REAL_LE_RCANCEL_IMP"
-  "REAL_LE_RADD" > "HOLLight.hollight.REAL_LE_RADD"
-  "REAL_LE_POW_2" > "HOLLight.hollight.REAL_LE_POW_2"
-  "REAL_LE_POW2" > "HOLLight.hollight.REAL_LE_POW2"
-  "REAL_LE_NEGTOTAL" > "HOLLight.hollight.REAL_LE_NEGTOTAL"
-  "REAL_LE_NEGR" > "HOLLight.hollight.REAL_LE_NEGR"
-  "REAL_LE_NEGL" > "HOLLight.hollight.REAL_LE_NEGL"
-  "REAL_LE_NEG2" > "HOLLight.hollight.REAL_LE_NEG2"
-  "REAL_LE_NEG" > "HOLLight.hollight.REAL_LE_NEG"
-  "REAL_LE_MUL_EQ" > "HOLLight.hollight.REAL_LE_MUL_EQ"
-  "REAL_LE_MUL2" > "HOLLight.hollight.REAL_LE_MUL2"
-  "REAL_LE_MIN" > "HOLLight.hollight.REAL_LE_MIN"
-  "REAL_LE_MAX" > "HOLLight.hollight.REAL_LE_MAX"
-  "REAL_LE_LT" > "HOLLight.hollight.REAL_LE_LT"
-  "REAL_LE_LNEG" > "HOLLight.hollight.REAL_LE_LNEG"
-  "REAL_LE_LMUL_EQ" > "HOLLight.hollight.REAL_LE_LMUL_EQ"
-  "REAL_LE_LMUL" > "HOLLight.hollight.REAL_LE_LMUL"
-  "REAL_LE_LINV" > "HOLLight.hollight.REAL_LE_LINV"
-  "REAL_LE_LDIV_EQ" > "HOLLight.hollight.REAL_LE_LDIV_EQ"
-  "REAL_LE_LCANCEL_IMP" > "HOLLight.hollight.REAL_LE_LCANCEL_IMP"
-  "REAL_LE_LADD" > "HOLLight.hollight.REAL_LE_LADD"
-  "REAL_LE_INV_EQ" > "HOLLight.hollight.REAL_LE_INV_EQ"
-  "REAL_LE_INV2" > "HOLLight.hollight.REAL_LE_INV2"
-  "REAL_LE_INV" > "HOLLight.hollight.REAL_LE_INV"
-  "REAL_LE_DOUBLE" > "HOLLight.hollight.REAL_LE_DOUBLE"
-  "REAL_LE_DIV2_EQ" > "HOLLight.hollight.REAL_LE_DIV2_EQ"
-  "REAL_LE_DIV" > "HOLLight.hollight.REAL_LE_DIV"
-  "REAL_LE_ADDR" > "HOLLight.hollight.REAL_LE_ADDR"
-  "REAL_LE_ADDL" > "HOLLight.hollight.REAL_LE_ADDL"
-  "REAL_LE_ADD2" > "HOLLight.hollight.REAL_LE_ADD2"
-  "REAL_LE_ADD" > "HOLLight.hollight.REAL_LE_ADD"
-  "REAL_LE_01" > "HOLLight.hollight.REAL_LE_01"
-  "REAL_LET_TRANS" > "HOLLight.hollight.REAL_LET_TRANS"
-  "REAL_LET_TOTAL" > "HOLLight.hollight.REAL_LET_TOTAL"
-  "REAL_LET_ANTISYM" > "HOLLight.hollight.REAL_LET_ANTISYM"
-  "REAL_LET_ADD2" > "HOLLight.hollight.REAL_LET_ADD2"
-  "REAL_LET_ADD" > "HOLLight.hollight.REAL_LET_ADD"
-  "REAL_INV_POW" > "HOLLight.hollight.REAL_INV_POW"
-  "REAL_INV_NEG" > "HOLLight.hollight.REAL_INV_NEG"
-  "REAL_INV_MUL" > "HOLLight.hollight.REAL_INV_MUL"
-  "REAL_INV_LT_1" > "HOLLight.hollight.REAL_INV_LT_1"
-  "REAL_INV_LE_1" > "HOLLight.hollight.REAL_INV_LE_1"
-  "REAL_INV_INV" > "HOLLight.hollight.REAL_INV_INV"
-  "REAL_INV_EQ_1" > "HOLLight.hollight.REAL_INV_EQ_1"
-  "REAL_INV_EQ_0" > "HOLLight.hollight.REAL_INV_EQ_0"
-  "REAL_INV_DIV" > "HOLLight.hollight.REAL_INV_DIV"
-  "REAL_INV_1_LT" > "HOLLight.hollight.REAL_INV_1_LT"
-  "REAL_INV_1_LE" > "HOLLight.hollight.REAL_INV_1_LE"
-  "REAL_INV_1" > "HOLLight.hollight.REAL_INV_1"
-  "REAL_INTEGRAL" > "HOLLight.hollight.REAL_INTEGRAL"
-  "REAL_HREAL_LEMMA2" > "HOLLight.hollight.REAL_HREAL_LEMMA2"
-  "REAL_HREAL_LEMMA1" > "HOLLight.hollight.REAL_HREAL_LEMMA1"
-  "REAL_EQ_SUB_RADD" > "HOLLight.hollight.REAL_EQ_SUB_RADD"
-  "REAL_EQ_SUB_LADD" > "HOLLight.hollight.REAL_EQ_SUB_LADD"
-  "REAL_EQ_SQUARE_ABS" > "HOLLight.hollight.REAL_EQ_SQUARE_ABS"
-  "REAL_EQ_RDIV_EQ" > "HOLLight.hollight.REAL_EQ_RDIV_EQ"
-  "REAL_EQ_RCANCEL_IMP" > "HOLLight.hollight.REAL_EQ_RCANCEL_IMP"
-  "REAL_EQ_NEG2" > "HOLLight.hollight.REAL_EQ_NEG2"
-  "REAL_EQ_MUL_RCANCEL" > "HOLLight.hollight.REAL_EQ_MUL_RCANCEL"
-  "REAL_EQ_MUL_LCANCEL" > "HOLLight.hollight.REAL_EQ_MUL_LCANCEL"
-  "REAL_EQ_LDIV_EQ" > "HOLLight.hollight.REAL_EQ_LDIV_EQ"
-  "REAL_EQ_LCANCEL_IMP" > "HOLLight.hollight.REAL_EQ_LCANCEL_IMP"
-  "REAL_EQ_INV2" > "HOLLight.hollight.REAL_EQ_INV2"
-  "REAL_EQ_IMP_LE" > "HOLLight.hollight.REAL_EQ_IMP_LE"
-  "REAL_EQ_ADD_RCANCEL_0" > "HOLLight.hollight.REAL_EQ_ADD_RCANCEL_0"
-  "REAL_EQ_ADD_RCANCEL" > "HOLLight.hollight.REAL_EQ_ADD_RCANCEL"
-  "REAL_EQ_ADD_LCANCEL_0" > "HOLLight.hollight.REAL_EQ_ADD_LCANCEL_0"
-  "REAL_EQ_ADD_LCANCEL" > "HOLLight.hollight.REAL_EQ_ADD_LCANCEL"
-  "REAL_ENTIRE" > "HOLLight.hollight.REAL_ENTIRE"
-  "REAL_DOWN2" > "HOLLight.hollight.REAL_DOWN2"
-  "REAL_DOWN" > "HOLLight.hollight.REAL_DOWN"
-  "REAL_DIV_RMUL" > "HOLLight.hollight.REAL_DIV_RMUL"
-  "REAL_DIV_REFL" > "HOLLight.hollight.REAL_DIV_REFL"
-  "REAL_DIV_POW2_ALT" > "HOLLight.hollight.REAL_DIV_POW2_ALT"
-  "REAL_DIV_POW2" > "HOLLight.hollight.REAL_DIV_POW2"
-  "REAL_DIV_LMUL" > "HOLLight.hollight.REAL_DIV_LMUL"
-  "REAL_DIV_1" > "HOLLight.hollight.REAL_DIV_1"
-  "REAL_DIFFSQ" > "HOLLight.hollight.REAL_DIFFSQ"
-  "REAL_COMPLETE_SOMEPOS" > "HOLLight.hollight.REAL_COMPLETE_SOMEPOS"
-  "REAL_COMPLETE" > "HOLLight.hollight.REAL_COMPLETE"
-  "REAL_BOUNDS_LT" > "HOLLight.hollight.REAL_BOUNDS_LT"
-  "REAL_BOUNDS_LE" > "HOLLight.hollight.REAL_BOUNDS_LE"
-  "REAL_ADD_SUB2" > "HOLLight.hollight.REAL_ADD_SUB2"
-  "REAL_ADD_SUB" > "HOLLight.hollight.REAL_ADD_SUB"
-  "REAL_ADD_RINV" > "HOLLight.hollight.REAL_ADD_RINV"
-  "REAL_ADD_RID" > "HOLLight.hollight.REAL_ADD_RID"
-  "REAL_ADD_RDISTRIB" > "HOLLight.hollight.REAL_ADD_RDISTRIB"
-  "REAL_ADD_AC" > "HOLLight.hollight.REAL_ADD_AC"
-  "REAL_ADD2_SUB2" > "HOLLight.hollight.REAL_ADD2_SUB2"
-  "REAL_ABS_ZERO" > "HOLLight.hollight.REAL_ABS_ZERO"
-  "REAL_ABS_TRIANGLE_LT" > "HOLLight.hollight.REAL_ABS_TRIANGLE_LT"
-  "REAL_ABS_TRIANGLE_LE" > "HOLLight.hollight.REAL_ABS_TRIANGLE_LE"
-  "REAL_ABS_TRIANGLE" > "HOLLight.hollight.REAL_ABS_TRIANGLE"
-  "REAL_ABS_SUB_ABS" > "HOLLight.hollight.REAL_ABS_SUB_ABS"
-  "REAL_ABS_SUB" > "HOLLight.hollight.REAL_ABS_SUB"
-  "REAL_ABS_STILLNZ" > "HOLLight.hollight.REAL_ABS_STILLNZ"
-  "REAL_ABS_SIGN2" > "HOLLight.hollight.REAL_ABS_SIGN2"
-  "REAL_ABS_SIGN" > "HOLLight.hollight.REAL_ABS_SIGN"
-  "REAL_ABS_SGN" > "HOLLight.hollight.REAL_ABS_SGN"
-  "REAL_ABS_REFL" > "HOLLight.hollight.REAL_ABS_REFL"
-  "REAL_ABS_POW" > "HOLLight.hollight.REAL_ABS_POW"
-  "REAL_ABS_POS" > "HOLLight.hollight.REAL_ABS_POS"
-  "REAL_ABS_NZ" > "HOLLight.hollight.REAL_ABS_NZ"
-  "REAL_ABS_NUM" > "HOLLight.hollight.REAL_ABS_NUM"
-  "REAL_ABS_NEG" > "HOLLight.hollight.REAL_ABS_NEG"
-  "REAL_ABS_MUL" > "HOLLight.hollight.REAL_ABS_MUL"
-  "REAL_ABS_LE" > "HOLLight.hollight.REAL_ABS_LE"
-  "REAL_ABS_INV" > "HOLLight.hollight.REAL_ABS_INV"
-  "REAL_ABS_DIV" > "HOLLight.hollight.REAL_ABS_DIV"
-  "REAL_ABS_CIRCLE" > "HOLLight.hollight.REAL_ABS_CIRCLE"
-  "REAL_ABS_CASES" > "HOLLight.hollight.REAL_ABS_CASES"
-  "REAL_ABS_BOUNDS" > "HOLLight.hollight.REAL_ABS_BOUNDS"
-  "REAL_ABS_BOUND" > "HOLLight.hollight.REAL_ABS_BOUND"
-  "REAL_ABS_BETWEEN2" > "HOLLight.hollight.REAL_ABS_BETWEEN2"
-  "REAL_ABS_BETWEEN1" > "HOLLight.hollight.REAL_ABS_BETWEEN1"
-  "REAL_ABS_BETWEEN" > "HOLLight.hollight.REAL_ABS_BETWEEN"
-  "REAL_ABS_ABS" > "HOLLight.hollight.REAL_ABS_ABS"
-  "REAL_ABS_1" > "HOLLight.hollight.REAL_ABS_1"
-  "REAL_ABS_0" > "HOLLight.hollight.REAL_ABS_0"
-  "RAT_LEMMA5" > "HOLLight.hollight.RAT_LEMMA5"
-  "RAT_LEMMA4" > "HOLLight.hollight.RAT_LEMMA4"
-  "RAT_LEMMA3" > "HOLLight.hollight.RAT_LEMMA3"
-  "RAT_LEMMA2" > "HOLLight.hollight.RAT_LEMMA2"
-  "RAT_LEMMA1" > "HOLLight.hollight.RAT_LEMMA1"
-  "PSUBSET_UNIV" > "HOLLight.hollight.PSUBSET_UNIV"
-  "PSUBSET_TRANS" > "Orderings.order_less_trans"
-  "PSUBSET_SUBSET_TRANS" > "Orderings.order_less_le_trans"
-  "PSUBSET_MEMBER" > "HOLLight.hollight.PSUBSET_MEMBER"
-  "PSUBSET_IRREFL" > "Orderings.order_less_irrefl"
-  "PSUBSET_INSERT_SUBSET" > "HOLLight.hollight.PSUBSET_INSERT_SUBSET"
-  "PSUBSET_ALT" > "HOLLight.hollight.PSUBSET_ALT"
-  "PRE_ELIM_THM" > "HOLLight.hollight.PRE_ELIM_THM"
-  "POWERSET_CLAUSES" > "HOLLight.hollight.POWERSET_CLAUSES"
-  "PASSOC_def" > "HOLLight.hollight.PASSOC_def"
-  "PAIR_SURJECTIVE" > "Product_Type.prod.nchotomy"
-  "PAIR_EXISTS_THM" > "HOLLight.hollight.PAIR_EXISTS_THM"
-  "PAIR_EQ" > "Product_Type.Pair_eq"
-  "PAIRWISE_def" > "HOLLight.hollight.PAIRWISE_def"
-  "PAIRWISE_SING" > "HOLLight.hollight.PAIRWISE_SING"
-  "PAIRWISE_MONO" > "HOLLight.hollight.PAIRWISE_MONO"
-  "PAIRWISE_EMPTY" > "HOLLight.hollight.PAIRWISE_EMPTY"
-  "PAIR" > "HOLLightCompat.PAIR"
-  "OR_EXISTS_THM" > "HOL.ex_disj_distrib"
-  "OR_CLAUSES" > "HOLLight.hollight.OR_CLAUSES"
-  "ONE" > "Nat.One_nat_def"
-  "ODD_SUB" > "HOLLight.hollight.ODD_SUB"
-  "ODD_MULT" > "HOLLight.hollight.ODD_MULT"
-  "ODD_MOD" > "HOLLight.hollight.ODD_MOD"
-  "ODD_EXP" > "HOLLight.hollight.ODD_EXP"
-  "ODD_EXISTS" > "Parity.odd_Suc_mult_two_ex"
-  "ODD_DOUBLE" > "HOLLight.hollight.ODD_DOUBLE"
-  "ODD_ADD" > "Parity.odd_add"
-  "NUM_REP_def" > "HOLLight.hollight.NUM_REP_def"
-  "NUM_OF_INT_OF_NUM" > "HOLLight.hollight.NUM_OF_INT_OF_NUM"
-  "NUM_OF_INT" > "HOLLight.hollight.NUM_OF_INT"
-  "NUM_INTEGRAL_LEMMA" > "HOLLight.hollight.NUM_INTEGRAL_LEMMA"
-  "NUM_INTEGRAL" > "HOLLight.hollight.NUM_INTEGRAL"
-  "NUM_GCD" > "HOLLight.hollight.NUM_GCD"
-  "NUMSUM_def" > "HOLLight.hollight.NUMSUM_def"
-  "NUMSUM_INJ" > "HOLLight.hollight.NUMSUM_INJ"
-  "NUMSND_def" > "HOLLight.hollight.NUMSND_def"
-  "NUMSEG_SING" > "SetInterval.order_class.atLeastAtMost_singleton"
-  "NUMSEG_RREC" > "HOLLight.hollight.NUMSEG_RREC"
-  "NUMSEG_REC" > "SetInterval.atLeastAtMostSuc_conv"
-  "NUMSEG_OFFSET_IMAGE" > "SetInterval.image_add_atLeastAtMost"
-  "NUMSEG_LT" > "HOLLight.hollight.NUMSEG_LT"
-  "NUMSEG_LREC" > "HOLLight.hollight.NUMSEG_LREC"
-  "NUMSEG_LE" > "HOLLight.hollight.NUMSEG_LE"
-  "NUMSEG_EMPTY" > "HOLLight.hollight.NUMSEG_EMPTY"
-  "NUMSEG_COMBINE_R" > "HOLLight.hollight.NUMSEG_COMBINE_R"
-  "NUMSEG_COMBINE_L" > "HOLLight.hollight.NUMSEG_COMBINE_L"
-  "NUMSEG_CLAUSES" > "HOLLight.hollight.NUMSEG_CLAUSES"
-  "NUMSEG_ADD_SPLIT" > "HOLLight.hollight.NUMSEG_ADD_SPLIT"
-  "NUMRIGHT_def" > "HOLLight.hollight.NUMRIGHT_def"
-  "NUMPAIR_def" > "HOLLight.hollight.NUMPAIR_def"
-  "NUMPAIR_INJ_LEMMA" > "HOLLight.hollight.NUMPAIR_INJ_LEMMA"
-  "NUMPAIR_INJ" > "HOLLight.hollight.NUMPAIR_INJ"
-  "NUMLEFT_def" > "HOLLight.hollight.NUMLEFT_def"
-  "NUMFST_def" > "HOLLight.hollight.NUMFST_def"
-  "NSUM_UNION_RZERO" > "HOLLight.hollight.NSUM_UNION_RZERO"
-  "NSUM_UNION_NONZERO" > "HOLLight.hollight.NSUM_UNION_NONZERO"
-  "NSUM_UNION_LZERO" > "HOLLight.hollight.NSUM_UNION_LZERO"
-  "NSUM_UNION_EQ" > "HOLLight.hollight.NSUM_UNION_EQ"
-  "NSUM_UNIONS_NONZERO" > "HOLLight.hollight.NSUM_UNIONS_NONZERO"
-  "NSUM_UNION" > "HOLLight.hollight.NSUM_UNION"
-  "NSUM_TRIV_NUMSEG" > "HOLLight.hollight.NSUM_TRIV_NUMSEG"
-  "NSUM_SWAP_NUMSEG" > "HOLLight.hollight.NSUM_SWAP_NUMSEG"
-  "NSUM_SWAP" > "HOLLight.hollight.NSUM_SWAP"
-  "NSUM_SUPPORT" > "HOLLight.hollight.NSUM_SUPPORT"
-  "NSUM_SUPERSET" > "HOLLight.hollight.NSUM_SUPERSET"
-  "NSUM_SUBSET_SIMPLE" > "HOLLight.hollight.NSUM_SUBSET_SIMPLE"
-  "NSUM_SUBSET" > "HOLLight.hollight.NSUM_SUBSET"
-  "NSUM_SING_NUMSEG" > "HOLLight.hollight.NSUM_SING_NUMSEG"
-  "NSUM_SING" > "HOLLight.hollight.NSUM_SING"
-  "NSUM_RMUL" > "HOLLight.hollight.NSUM_RMUL"
-  "NSUM_RESTRICT_SET" > "HOLLight.hollight.NSUM_RESTRICT_SET"
-  "NSUM_RESTRICT" > "HOLLight.hollight.NSUM_RESTRICT"
-  "NSUM_POS_BOUND" > "HOLLight.hollight.NSUM_POS_BOUND"
-  "NSUM_PAIR" > "HOLLight.hollight.NSUM_PAIR"
-  "NSUM_OFFSET_0" > "HOLLight.hollight.NSUM_OFFSET_0"
-  "NSUM_OFFSET" > "HOLLight.hollight.NSUM_OFFSET"
-  "NSUM_NSUM_RESTRICT" > "HOLLight.hollight.NSUM_NSUM_RESTRICT"
-  "NSUM_NSUM_PRODUCT" > "HOLLight.hollight.NSUM_NSUM_PRODUCT"
-  "NSUM_MULTICOUNT_GEN" > "HOLLight.hollight.NSUM_MULTICOUNT_GEN"
-  "NSUM_MULTICOUNT" > "HOLLight.hollight.NSUM_MULTICOUNT"
-  "NSUM_LT_ALL" > "HOLLight.hollight.NSUM_LT_ALL"
-  "NSUM_LT" > "HOLLight.hollight.NSUM_LT"
-  "NSUM_LMUL" > "HOLLight.hollight.NSUM_LMUL"
-  "NSUM_LE_NUMSEG" > "HOLLight.hollight.NSUM_LE_NUMSEG"
-  "NSUM_LE" > "HOLLight.hollight.NSUM_LE"
-  "NSUM_INJECTION" > "HOLLight.hollight.NSUM_INJECTION"
-  "NSUM_INCL_EXCL" > "HOLLight.hollight.NSUM_INCL_EXCL"
-  "NSUM_IMAGE_NONZERO" > "HOLLight.hollight.NSUM_IMAGE_NONZERO"
-  "NSUM_IMAGE_GEN" > "HOLLight.hollight.NSUM_IMAGE_GEN"
-  "NSUM_IMAGE" > "HOLLight.hollight.NSUM_IMAGE"
-  "NSUM_GROUP" > "HOLLight.hollight.NSUM_GROUP"
-  "NSUM_EQ_SUPERSET" > "HOLLight.hollight.NSUM_EQ_SUPERSET"
-  "NSUM_EQ_NUMSEG" > "HOLLight.hollight.NSUM_EQ_NUMSEG"
-  "NSUM_EQ_GENERAL_INVERSES" > "HOLLight.hollight.NSUM_EQ_GENERAL_INVERSES"
-  "NSUM_EQ_GENERAL" > "HOLLight.hollight.NSUM_EQ_GENERAL"
-  "NSUM_EQ_0_NUMSEG" > "HOLLight.hollight.NSUM_EQ_0_NUMSEG"
-  "NSUM_EQ_0_IFF_NUMSEG" > "HOLLight.hollight.NSUM_EQ_0_IFF_NUMSEG"
-  "NSUM_EQ_0_IFF" > "HOLLight.hollight.NSUM_EQ_0_IFF"
-  "NSUM_EQ_0" > "HOLLight.hollight.NSUM_EQ_0"
-  "NSUM_EQ" > "HOLLight.hollight.NSUM_EQ"
-  "NSUM_DIFF" > "HOLLight.hollight.NSUM_DIFF"
-  "NSUM_DELTA" > "HOLLight.hollight.NSUM_DELTA"
-  "NSUM_DELETE" > "HOLLight.hollight.NSUM_DELETE"
-  "NSUM_CONST_NUMSEG" > "HOLLight.hollight.NSUM_CONST_NUMSEG"
-  "NSUM_CONST" > "HOLLight.hollight.NSUM_CONST"
-  "NSUM_CLOSED" > "HOLLight.hollight.NSUM_CLOSED"
-  "NSUM_CLAUSES_RIGHT" > "HOLLight.hollight.NSUM_CLAUSES_RIGHT"
-  "NSUM_CLAUSES_NUMSEG" > "HOLLight.hollight.NSUM_CLAUSES_NUMSEG"
-  "NSUM_CLAUSES_LEFT" > "HOLLight.hollight.NSUM_CLAUSES_LEFT"
-  "NSUM_CLAUSES" > "HOLLight.hollight.NSUM_CLAUSES"
-  "NSUM_CASES" > "HOLLight.hollight.NSUM_CASES"
-  "NSUM_BOUND_LT_GEN" > "HOLLight.hollight.NSUM_BOUND_LT_GEN"
-  "NSUM_BOUND_LT_ALL" > "HOLLight.hollight.NSUM_BOUND_LT_ALL"
-  "NSUM_BOUND_LT" > "HOLLight.hollight.NSUM_BOUND_LT"
-  "NSUM_BOUND_GEN" > "HOLLight.hollight.NSUM_BOUND_GEN"
-  "NSUM_BOUND" > "HOLLight.hollight.NSUM_BOUND"
-  "NSUM_BIJECTION" > "HOLLight.hollight.NSUM_BIJECTION"
-  "NSUM_ADD_SPLIT" > "HOLLight.hollight.NSUM_ADD_SPLIT"
-  "NSUM_ADD_NUMSEG" > "HOLLight.hollight.NSUM_ADD_NUMSEG"
-  "NSUM_ADD_GEN" > "HOLLight.hollight.NSUM_ADD_GEN"
-  "NSUM_ADD" > "HOLLight.hollight.NSUM_ADD"
-  "NSUM_0" > "HOLLight.hollight.NSUM_0"
-  "NOT_UNIV_PSUBSET" > "Orderings.top_class.not_top_less"
-  "NOT_SUC" > "Nat.Suc_not_Zero"
-  "NOT_PSUBSET_EMPTY" > "Orderings.bot_class.not_less_bot"
-  "NOT_ODD" > "HOLLight.hollight.NOT_ODD"
-  "NOT_LT" > "Orderings.linorder_class.not_less"
-  "NOT_LE" > "Orderings.linorder_class.not_le"
-  "NOT_IN_EMPTY" > "HOLLight.hollight.NOT_IN_EMPTY"
-  "NOT_INSERT_EMPTY" > "Set.insert_not_empty"
-  "NOT_FORALL_THM" > "HOL.not_all"
-  "NOT_EXISTS_THM" > "HOL.not_ex"
-  "NOT_EX" > "HOLLightList.NOT_EX"
-  "NOT_EVEN" > "HOLLight.hollight.NOT_EVEN"
-  "NOT_EQUAL_SETS" > "HOLLight.hollight.NOT_EQUAL_SETS"
-  "NOT_EMPTY_INSERT" > "Set.empty_not_insert"
-  "NOT_CONS_NIL" > "List.list.distinct_2"
-  "NOT_CLAUSES_WEAK" > "HOLLight.hollight.NOT_CLAUSES_WEAK"
-  "NOT_ALL" > "HOLLightList.NOT_ALL"
-  "NEUTRAL_REAL_MUL" > "HOLLight.hollight.NEUTRAL_REAL_MUL"
-  "NEUTRAL_REAL_ADD" > "HOLLight.hollight.NEUTRAL_REAL_ADD"
-  "NEUTRAL_MUL" > "HOLLight.hollight.NEUTRAL_MUL"
-  "NEUTRAL_ADD" > "HOLLight.hollight.NEUTRAL_ADD"
-  "NADD_UBOUND" > "HOLLight.hollight.NADD_UBOUND"
-  "NADD_SUC" > "HOLLight.hollight.NADD_SUC"
-  "NADD_RDISTRIB" > "HOLLight.hollight.NADD_RDISTRIB"
-  "NADD_OF_NUM_WELLDEF" > "HOLLight.hollight.NADD_OF_NUM_WELLDEF"
-  "NADD_OF_NUM_MUL" > "HOLLight.hollight.NADD_OF_NUM_MUL"
-  "NADD_OF_NUM_LE" > "HOLLight.hollight.NADD_OF_NUM_LE"
-  "NADD_OF_NUM_EQ" > "HOLLight.hollight.NADD_OF_NUM_EQ"
-  "NADD_OF_NUM_ADD" > "HOLLight.hollight.NADD_OF_NUM_ADD"
-  "NADD_OF_NUM" > "HOLLight.hollight.NADD_OF_NUM"
-  "NADD_NONZERO" > "HOLLight.hollight.NADD_NONZERO"
-  "NADD_MUL_WELLDEF_LEMMA" > "HOLLight.hollight.NADD_MUL_WELLDEF_LEMMA"
-  "NADD_MUL_WELLDEF" > "HOLLight.hollight.NADD_MUL_WELLDEF"
-  "NADD_MUL_SYM" > "HOLLight.hollight.NADD_MUL_SYM"
-  "NADD_MUL_LINV_LEMMA8" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA8"
-  "NADD_MUL_LINV_LEMMA7a" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA7a"
-  "NADD_MUL_LINV_LEMMA7" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA7"
-  "NADD_MUL_LINV_LEMMA6" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA6"
-  "NADD_MUL_LINV_LEMMA5" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA5"
-  "NADD_MUL_LINV_LEMMA4" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA4"
-  "NADD_MUL_LINV_LEMMA3" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA3"
-  "NADD_MUL_LINV_LEMMA2" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA2"
-  "NADD_MUL_LINV_LEMMA1" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA1"
-  "NADD_MUL_LINV_LEMMA0" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA0"
-  "NADD_MUL_LINV" > "HOLLight.hollight.NADD_MUL_LINV"
-  "NADD_MUL_LID" > "HOLLight.hollight.NADD_MUL_LID"
-  "NADD_MUL_ASSOC" > "HOLLight.hollight.NADD_MUL_ASSOC"
-  "NADD_MULTIPLICATIVE" > "HOLLight.hollight.NADD_MULTIPLICATIVE"
-  "NADD_MUL" > "HOLLight.hollight.NADD_MUL"
-  "NADD_LE_WELLDEF_LEMMA" > "HOLLight.hollight.NADD_LE_WELLDEF_LEMMA"
-  "NADD_LE_WELLDEF" > "HOLLight.hollight.NADD_LE_WELLDEF"
-  "NADD_LE_TRANS" > "HOLLight.hollight.NADD_LE_TRANS"
-  "NADD_LE_TOTAL_LEMMA" > "HOLLight.hollight.NADD_LE_TOTAL_LEMMA"
-  "NADD_LE_TOTAL" > "HOLLight.hollight.NADD_LE_TOTAL"
-  "NADD_LE_RMUL" > "HOLLight.hollight.NADD_LE_RMUL"
-  "NADD_LE_REFL" > "HOLLight.hollight.NADD_LE_REFL"
-  "NADD_LE_RADD" > "HOLLight.hollight.NADD_LE_RADD"
-  "NADD_LE_LMUL" > "HOLLight.hollight.NADD_LE_LMUL"
-  "NADD_LE_LADD" > "HOLLight.hollight.NADD_LE_LADD"
-  "NADD_LE_EXISTS" > "HOLLight.hollight.NADD_LE_EXISTS"
-  "NADD_LE_ANTISYM" > "HOLLight.hollight.NADD_LE_ANTISYM"
-  "NADD_LE_ADD" > "HOLLight.hollight.NADD_LE_ADD"
-  "NADD_LE_0" > "HOLLight.hollight.NADD_LE_0"
-  "NADD_LDISTRIB" > "HOLLight.hollight.NADD_LDISTRIB"
-  "NADD_LBOUND" > "HOLLight.hollight.NADD_LBOUND"
-  "NADD_INV_WELLDEF" > "HOLLight.hollight.NADD_INV_WELLDEF"
-  "NADD_INV_0" > "HOLLight.hollight.NADD_INV_0"
-  "NADD_INV" > "HOLLight.hollight.NADD_INV"
-  "NADD_EQ_TRANS" > "HOLLight.hollight.NADD_EQ_TRANS"
-  "NADD_EQ_SYM" > "HOLLight.hollight.NADD_EQ_SYM"
-  "NADD_EQ_REFL" > "HOLLight.hollight.NADD_EQ_REFL"
-  "NADD_EQ_IMP_LE" > "HOLLight.hollight.NADD_EQ_IMP_LE"
-  "NADD_DIST_LEMMA" > "HOLLight.hollight.NADD_DIST_LEMMA"
-  "NADD_DIST" > "HOLLight.hollight.NADD_DIST"
-  "NADD_COMPLETE" > "HOLLight.hollight.NADD_COMPLETE"
-  "NADD_CAUCHY" > "HOLLight.hollight.NADD_CAUCHY"
-  "NADD_BOUND" > "HOLLight.hollight.NADD_BOUND"
-  "NADD_ARCH_ZERO" > "HOLLight.hollight.NADD_ARCH_ZERO"
-  "NADD_ARCH_MULT" > "HOLLight.hollight.NADD_ARCH_MULT"
-  "NADD_ARCH_LEMMA" > "HOLLight.hollight.NADD_ARCH_LEMMA"
-  "NADD_ARCH" > "HOLLight.hollight.NADD_ARCH"
-  "NADD_ALTMUL" > "HOLLight.hollight.NADD_ALTMUL"
-  "NADD_ADD_WELLDEF" > "HOLLight.hollight.NADD_ADD_WELLDEF"
-  "NADD_ADD_SYM" > "HOLLight.hollight.NADD_ADD_SYM"
-  "NADD_ADD_LID" > "HOLLight.hollight.NADD_ADD_LID"
-  "NADD_ADD_LCANCEL" > "HOLLight.hollight.NADD_ADD_LCANCEL"
-  "NADD_ADD_ASSOC" > "HOLLight.hollight.NADD_ADD_ASSOC"
-  "NADD_ADDITIVE" > "HOLLight.hollight.NADD_ADDITIVE"
-  "NADD_ADD" > "HOLLight.hollight.NADD_ADD"
-  "MULT_SYM" > "Fields.linordered_field_class.sign_simps_40"
-  "MULT_SUC" > "Nat.mult_Suc_right"
-  "MULT_EXP" > "Power.comm_monoid_mult_class.power_mult_distrib"
-  "MULT_EQ_1" > "Nat.nat_mult_eq_1_iff"
-  "MULT_EQ_0" > "Nat.mult_is_0"
-  "MULT_DIV_LE" > "HOLLight.hollight.MULT_DIV_LE"
-  "MULT_CLAUSES" > "HOLLight.hollight.MULT_CLAUSES"
-  "MULT_ASSOC" > "Fields.linordered_field_class.sign_simps_41"
-  "MULT_AC" > "HOLLight.hollight.MULT_AC"
-  "MULT_2" > "Int.semiring_mult_2"
-  "MULT_0" > "Divides.arithmetic_simps_41"
-  "MONO_FORALL" > "Inductive.basic_monos_6"
-  "MONO_EXISTS" > "Inductive.basic_monos_5"
-  "MONO_COND" > "HOLLight.hollight.MONO_COND"
-  "MONO_ALL2" > "List.list_all2_mono"
-  "MONO_ALL" > "HOLLightList.MONO_ALL"
-  "MONOIDAL_REAL_MUL" > "HOLLight.hollight.MONOIDAL_REAL_MUL"
-  "MONOIDAL_REAL_ADD" > "HOLLight.hollight.MONOIDAL_REAL_ADD"
-  "MONOIDAL_MUL" > "HOLLight.hollight.MONOIDAL_MUL"
-  "MONOIDAL_ADD" > "HOLLight.hollight.MONOIDAL_ADD"
-  "MONOIDAL_AC" > "HOLLight.hollight.MONOIDAL_AC"
-  "MOD_UNIQ" > "HOLLight.hollight.MOD_UNIQ"
-  "MOD_MULT_RMOD" > "HOLLight.hollight.MOD_MULT_RMOD"
-  "MOD_MULT_MOD2" > "HOLLight.hollight.MOD_MULT_MOD2"
-  "MOD_MULT_LMOD" > "HOLLight.hollight.MOD_MULT_LMOD"
-  "MOD_MULT_ADD" > "Divides.mod_mult_self3"
-  "MOD_MULT2" > "HOLLight.hollight.MOD_MULT2"
-  "MOD_MOD_REFL" > "HOLLight.hollight.MOD_MOD_REFL"
-  "MOD_MOD" > "HOLLight.hollight.MOD_MOD"
-  "MOD_LT" > "Divides.mod_less"
-  "MOD_LE" > "HOLLight.hollight.MOD_LE"
-  "MOD_EXP_MOD" > "HOLLight.hollight.MOD_EXP_MOD"
-  "MOD_EXISTS" > "HOLLight.hollight.MOD_EXISTS"
-  "MOD_EQ_0" > "HOLLight.hollight.MOD_EQ_0"
-  "MOD_EQ" > "HOLLight.hollight.MOD_EQ"
-  "MOD_ADD_MOD" > "HOLLight.hollight.MOD_ADD_MOD"
-  "MK_REC_INJ" > "HOLLight.hollight.MK_REC_INJ"
-  "MINIMAL" > "HOLLight.hollight.MINIMAL"
-  "MEM_MAP" > "HOLLightList.MEM_MAP"
-  "MEM_FILTER" > "HOLLightList.MEM_FILTER"
-  "MEM_EXISTS_EL" > "HOLLightList.MEM_EXISTS_EL"
-  "MEM_EL" > "List.nth_mem"
-  "MEM_APPEND" > "HOLLightList.MEM_APPEND"
-  "MEMBER_NOT_EMPTY" > "Set.ex_in_conv"
-  "MEASURE_LE" > "HOLLight.hollight.MEASURE_LE"
-  "MATCH_SEQPATTERN" > "HOLLight.hollight.MATCH_SEQPATTERN"
-  "MAP_o" > "List.map.compositionality"
-  "MAP_SND_ZIP" > "List.map_snd_zip"
-  "MAP_ID" > "List.map_ident"
-  "MAP_I" > "List.map.id"
-  "MAP_FST_ZIP" > "List.map_fst_zip"
-  "MAP_EQ_NIL" > "List.map_is_Nil_conv"
-  "MAP_EQ_DEGEN" > "HOLLightList.MAP_EQ_DEGEN"
-  "MAP_EQ_ALL2" > "HOLLightList.MAP_EQ_ALL2"
-  "MAP_EQ" > "HOLLightList.MAP_EQ"
-  "MAP_APPEND" > "List.map_append"
-  "MAP2" > "HOLLightList.MAP2"
-  "LT_TRANS" > "Orderings.order_less_trans"
-  "LT_SUC_LE" > "Nat.le_simps_2"
-  "LT_SUC" > "Nat.Suc_less_eq"
-  "LT_REFL" > "Nat.less_not_refl"
-  "LT_NZ" > "Nat.neq0_conv"
-  "LT_MULT_RCANCEL" > "HOLLight.hollight.LT_MULT_RCANCEL"
-  "LT_MULT_LCANCEL" > "HOLLight.hollight.LT_MULT_LCANCEL"
-  "LT_MULT2" > "HOLLight.hollight.LT_MULT2"
-  "LT_MULT" > "Nat.nat_0_less_mult_iff"
-  "LT_LMULT" > "HOLLight.hollight.LT_LMULT"
-  "LT_LE" > "Nat.nat_less_le"
-  "LT_IMP_LE" > "FunDef.termination_basic_simps_5"
-  "LT_EXP" > "HOLLight.hollight.LT_EXP"
-  "LT_EXISTS" > "HOLLight.hollight.LT_EXISTS"
-  "LT_CASES" > "HOLLight.hollight.LT_CASES"
-  "LT_ANTISYM" > "HOLLight.hollight.LT_ANTISYM"
-  "LT_ADD_RCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_right"
-  "LT_ADD_LCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_left"
-  "LT_ADDR" > "HOLLight.hollight.LT_ADDR"
-  "LT_ADD2" > "Groups.add_mono_thms_linordered_field_5"
-  "LT_ADD" > "HOLLight.hollight.LT_ADD"
-  "LT_0" > "Nat.zero_less_Suc"
-  "LTE_TRANS" > "Orderings.order_less_le_trans"
-  "LTE_CASES" > "HOLLight.hollight.LTE_CASES"
-  "LTE_ANTISYM" > "HOLLight.hollight.LTE_ANTISYM"
-  "LTE_ADD2" > "Groups.add_mono_thms_linordered_field_3"
-  "LE_TRANS" > "Nat.le_trans"
-  "LE_SUC_LT" > "Nat.Suc_le_eq"
-  "LE_SUC" > "Nat.Suc_le_mono"
-  "LE_SQUARE_REFL" > "Nat.le_square"
-  "LE_REFL" > "Nat.le_refl"
-  "LE_RDIV_EQ" > "HOLLight.hollight.LE_RDIV_EQ"
-  "LE_MULT_RCANCEL" > "HOLLight.hollight.LE_MULT_RCANCEL"
-  "LE_MULT_LCANCEL" > "HOLLight.hollight.LE_MULT_LCANCEL"
-  "LE_MULT2" > "Nat.mult_le_mono"
-  "LE_LT" > "Nat.le_eq_less_or_eq"
-  "LE_LDIV_EQ" > "HOLLight.hollight.LE_LDIV_EQ"
-  "LE_LDIV" > "HOLLight.hollight.LE_LDIV"
-  "LE_EXP" > "HOLLight.hollight.LE_EXP"
-  "LE_EXISTS" > "Nat.le_iff_add"
-  "LE_CASES" > "Nat.nat_le_linear"
-  "LE_C" > "HOLLight.hollight.LE_C"
-  "LE_ANTISYM" > "Orderings.order_class.eq_iff"
-  "LE_ADD_RCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_right"
-  "LE_ADD_LCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_left"
-  "LE_ADDR" > "Nat.le_add2"
-  "LE_ADD2" > "Groups.add_mono_thms_linordered_semiring_1"
-  "LE_ADD" > "Nat.le_add1"
-  "LE_1" > "HOLLight.hollight.LE_1"
-  "LE_0" > "Nat.le0"
-  "LET_TRANS" > "Orderings.order_le_less_trans"
-  "LET_END_def" > "HOLLight.hollight.LET_END_def"
-  "LET_CASES" > "Orderings.linorder_class.le_less_linear"
-  "LET_ANTISYM" > "HOLLight.hollight.LET_ANTISYM"
-  "LET_ADD2" > "Groups.add_mono_thms_linordered_field_4"
-  "LENGTH_TL" > "HOLLightList.LENGTH_TL"
-  "LENGTH_REPLICATE" > "List.length_replicate"
-  "LENGTH_MAP2" > "HOLLightList.LENGTH_MAP2"
-  "LENGTH_MAP" > "List.length_map"
-  "LENGTH_EQ_NIL" > "List.length_0_conv"
-  "LENGTH_EQ_CONS" > "List.length_Suc_conv"
-  "LENGTH_APPEND" > "List.length_append"
-  "LEFT_SUB_DISTRIB" > "Nat.diff_mult_distrib2"
-  "LEFT_OR_FORALL_THM" > "HOL.all_simps_3"
-  "LEFT_OR_EXISTS_THM" > "HOL.ex_simps_3"
-  "LEFT_OR_DISTRIB" > "Groebner_Basis.dnf_1"
-  "LEFT_IMP_FORALL_THM" > "HOL.ex_simps_5"
-  "LEFT_IMP_EXISTS_THM" > "HOL.all_simps_5"
-  "LEFT_FORALL_OR_THM" > "HOL.all_simps_3"
-  "LEFT_FORALL_IMP_THM" > "HOL.all_simps_5"
-  "LEFT_EXISTS_IMP_THM" > "HOL.ex_simps_5"
-  "LEFT_EXISTS_AND_THM" > "HOL.ex_simps_1"
-  "LEFT_AND_FORALL_THM" > "HOL.all_simps_1"
-  "LEFT_AND_EXISTS_THM" > "HOL.ex_simps_1"
-  "LEFT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_25"
-  "LAST_EL" > "List.last_conv_nth"
-  "LAST_CLAUSES" > "HOLLightList.LAST_CLAUSES"
-  "LAST_APPEND" > "List.last_append"
-  "LAMBDA_UNIQUE" > "HOLLight.hollight.LAMBDA_UNIQUE"
-  "LAMBDA_PAIR_THM" > "HOLLight.hollight.LAMBDA_PAIR_THM"
-  "LAMBDA_ETA" > "HOLLight.hollight.LAMBDA_ETA"
-  "LAMBDA_BETA" > "HOLLight.hollight.LAMBDA_BETA"
-  "I_THM" > "HOL.refl"
-  "I_O_ID" > "HOLLight.hollight.I_O_ID"
-  "ITSET_def" > "HOLLight.hollight.ITSET_def"
-  "ITSET_EQ" > "HOLLight.hollight.ITSET_EQ"
-  "ITLIST_EXTRA" > "HOLLightList.ITLIST_EXTRA"
-  "ITLIST_APPEND" > "List.foldr_append"
-  "ITLIST2" > "HOLLightList.ITLIST2"
-  "ITERATE_UNION_NONZERO" > "HOLLight.hollight.ITERATE_UNION_NONZERO"
-  "ITERATE_UNION_GEN" > "HOLLight.hollight.ITERATE_UNION_GEN"
-  "ITERATE_UNION" > "HOLLight.hollight.ITERATE_UNION"
-  "ITERATE_SUPPORT" > "HOLLight.hollight.ITERATE_SUPPORT"
-  "ITERATE_SUPERSET" > "HOLLight.hollight.ITERATE_SUPERSET"
-  "ITERATE_SING" > "HOLLight.hollight.ITERATE_SING"
-  "ITERATE_RELATED" > "HOLLight.hollight.ITERATE_RELATED"
-  "ITERATE_PAIR" > "HOLLight.hollight.ITERATE_PAIR"
-  "ITERATE_OP_GEN" > "HOLLight.hollight.ITERATE_OP_GEN"
-  "ITERATE_OP" > "HOLLight.hollight.ITERATE_OP"
-  "ITERATE_ITERATE_PRODUCT" > "HOLLight.hollight.ITERATE_ITERATE_PRODUCT"
-  "ITERATE_INJECTION" > "HOLLight.hollight.ITERATE_INJECTION"
-  "ITERATE_INCL_EXCL" > "HOLLight.hollight.ITERATE_INCL_EXCL"
-  "ITERATE_IMAGE_NONZERO" > "HOLLight.hollight.ITERATE_IMAGE_NONZERO"
-  "ITERATE_IMAGE" > "HOLLight.hollight.ITERATE_IMAGE"
-  "ITERATE_EXPAND_CASES" > "HOLLight.hollight.ITERATE_EXPAND_CASES"
-  "ITERATE_EQ_NEUTRAL" > "HOLLight.hollight.ITERATE_EQ_NEUTRAL"
-  "ITERATE_EQ_GENERAL_INVERSES" > "HOLLight.hollight.ITERATE_EQ_GENERAL_INVERSES"
-  "ITERATE_EQ_GENERAL" > "HOLLight.hollight.ITERATE_EQ_GENERAL"
-  "ITERATE_EQ" > "HOLLight.hollight.ITERATE_EQ"
-  "ITERATE_DIFF_GEN" > "HOLLight.hollight.ITERATE_DIFF_GEN"
-  "ITERATE_DIFF" > "HOLLight.hollight.ITERATE_DIFF"
-  "ITERATE_DELTA" > "HOLLight.hollight.ITERATE_DELTA"
-  "ITERATE_DELETE" > "HOLLight.hollight.ITERATE_DELETE"
-  "ITERATE_CLOSED" > "HOLLight.hollight.ITERATE_CLOSED"
-  "ITERATE_CLAUSES_NUMSEG" > "HOLLight.hollight.ITERATE_CLAUSES_NUMSEG"
-  "ITERATE_CLAUSES_GEN" > "HOLLight.hollight.ITERATE_CLAUSES_GEN"
-  "ITERATE_CLAUSES" > "HOLLight.hollight.ITERATE_CLAUSES"
-  "ITERATE_CASES" > "HOLLight.hollight.ITERATE_CASES"
-  "ITERATE_BIJECTION" > "HOLLight.hollight.ITERATE_BIJECTION"
-  "ISO_def" > "HOLLight.hollight.ISO_def"
-  "ISO_USAGE" > "HOLLight.hollight.ISO_USAGE"
-  "ISO_REFL" > "HOLLight.hollight.ISO_REFL"
-  "ISO_FUN" > "HOLLight.hollight.ISO_FUN"
-  "IN_UNIV" > "Set.UNIV_I"
-  "IN_UNIONS" > "HOLLight.hollight.IN_UNIONS"
-  "IN_UNION" > "Complete_Lattices.mem_simps_3"
-  "IN_SUPPORT" > "HOLLight.hollight.IN_SUPPORT"
-  "IN_SING" > "Set.singleton_iff"
-  "IN_SET_OF_LIST" > "HOLLightList.IN_SET_OF_LIST"
-  "IN_REST" > "HOLLight.hollight.IN_REST"
-  "IN_NUMSEG_0" > "HOLLight.hollight.IN_NUMSEG_0"
-  "IN_NUMSEG" > "SetInterval.ord_class.atLeastAtMost_iff"
-  "IN_INTERS" > "HOLLight.hollight.IN_INTERS"
-  "IN_INTER" > "Complete_Lattices.mem_simps_4"
-  "IN_INSERT" > "Complete_Lattices.mem_simps_1"
-  "IN_IMAGE" > "HOLLight.hollight.IN_IMAGE"
-  "IN_ELIM_THM" > "HOLLight.hollight.IN_ELIM_THM"
-  "IN_ELIM_PAIR_THM" > "HOLLight.hollight.IN_ELIM_PAIR_THM"
-  "IN_DISJOINT" > "HOLLight.hollight.IN_DISJOINT"
-  "IN_DIFF" > "Complete_Lattices.mem_simps_6"
-  "IN_DELETE_EQ" > "HOLLight.hollight.IN_DELETE_EQ"
-  "IN_DELETE" > "HOLLight.hollight.IN_DELETE"
-  "IN_CROSS" > "HOLLight.hollight.IN_CROSS"
-  "INT_WOP" > "HOLLight.hollight.INT_WOP"
-  "INT_POW" > "HOLLight.hollight.INT_POW"
-  "INT_OF_NUM_OF_INT" > "HOLLight.hollight.INT_OF_NUM_OF_INT"
-  "INT_LT_DISCRETE" > "HOLLight.hollight.INT_LT_DISCRETE"
-  "INT_LT" > "HOLLight.hollight.INT_LT"
-  "INT_INTEGRAL" > "HOLLight.hollight.INT_INTEGRAL"
-  "INT_IMAGE" > "HOLLight.hollight.INT_IMAGE"
-  "INT_GT_DISCRETE" > "HOLLight.hollight.INT_GT_DISCRETE"
-  "INT_GT" > "HOLLight.hollight.INT_GT"
-  "INT_GE" > "HOLLight.hollight.INT_GE"
-  "INT_GCD_EXISTS_POS" > "HOLLight.hollight.INT_GCD_EXISTS_POS"
-  "INT_GCD_EXISTS" > "HOLLight.hollight.INT_GCD_EXISTS"
-  "INT_FORALL_POS" > "HOLLight.hollight.INT_FORALL_POS"
-  "INT_FORALL_ABS" > "HOLLight.hollight.INT_FORALL_ABS"
-  "INT_EXISTS_POS" > "HOLLight.hollight.INT_EXISTS_POS"
-  "INT_EXISTS_ABS" > "HOLLight.hollight.INT_EXISTS_ABS"
-  "INT_DIVMOD_UNIQ" > "HOLLight.hollight.INT_DIVMOD_UNIQ"
-  "INT_DIVMOD_EXIST_0" > "HOLLight.hollight.INT_DIVMOD_EXIST_0"
-  "INT_DIVISION" > "HOLLight.hollight.INT_DIVISION"
-  "INT_ARCH" > "HOLLight.hollight.INT_ARCH"
-  "INT_ABS_MUL_1" > "HOLLight.hollight.INT_ABS_MUL_1"
-  "INT_ABS" > "HOLLight.hollight.INT_ABS"
-  "INTER_UNIV" > "HOLLight.hollight.INTER_UNIV"
-  "INTER_UNIONS" > "HOLLight.hollight.INTER_UNIONS"
-  "INTER_SUBSET" > "HOLLight.hollight.INTER_SUBSET"
-  "INTER_OVER_UNION" > "Lattices.distrib_lattice_class.distrib_1"
-  "INTER_IDEMPOT" > "Big_Operators.lattice_class.Inf_fin.idem"
-  "INTER_EMPTY" > "HOLLight.hollight.INTER_EMPTY"
-  "INTER_COMM" > "Lattices.lattice_class.inf_sup_aci_1"
-  "INTER_ASSOC" > "Lattices.lattice_class.inf_sup_aci_2"
-  "INTER_ACI" > "HOLLight.hollight.INTER_ACI"
-  "INTERS_UNIONS" > "HOLLight.hollight.INTERS_UNIONS"
-  "INTERS_INSERT" > "Complete_Lattices.Inter_insert"
-  "INTERS_IMAGE" > "HOLLight.hollight.INTERS_IMAGE"
-  "INTERS_GSPEC" > "HOLLight.hollight.INTERS_GSPEC"
-  "INTERS_2" > "Complete_Lattices.Int_eq_Inter"
-  "INTERS_1" > "Complete_Lattices.complete_lattice_class.Inf_singleton"
-  "INTERS_0" > "Complete_Lattices.Inter_empty"
-  "INSERT_UNIV" > "HOLLight.hollight.INSERT_UNIV"
-  "INSERT_UNION_EQ" > "Set.Un_insert_left"
-  "INSERT_UNION" > "HOLLight.hollight.INSERT_UNION"
-  "INSERT_SUBSET" > "Set.insert_subset"
-  "INSERT_INTER" > "Set.Int_insert_left"
-  "INSERT_INSERT" > "Set.insert_absorb2"
-  "INSERT_DIFF" > "Set.insert_Diff_if"
-  "INSERT_DELETE" > "Set.insert_Diff"
-  "INSERT_COMM" > "Set.insert_commute"
-  "INSERT_AC" > "HOLLight.hollight.INSERT_AC"
-  "INSERT" > "HOLLight.hollight.INSERT"
-  "INJ_def" > "HOLLight.hollight.INJ_def"
-  "INJ_INVERSE2" > "HOLLight.hollight.INJ_INVERSE2"
-  "INJP_def" > "HOLLight.hollight.INJP_def"
-  "INJP_INJ" > "HOLLight.hollight.INJP_INJ"
-  "INJN_def" > "HOLLight.hollight.INJN_def"
-  "INJN_INJ" > "HOLLight.hollight.INJN_INJ"
-  "INJF_def" > "HOLLight.hollight.INJF_def"
-  "INJF_INJ" > "HOLLight.hollight.INJF_INJ"
-  "INJECTIVE_ON_LEFT_INVERSE" > "HOLLight.hollight.INJECTIVE_ON_LEFT_INVERSE"
-  "INJECTIVE_ON_IMAGE" > "HOLLight.hollight.INJECTIVE_ON_IMAGE"
-  "INJECTIVE_MAP" > "HOLLightList.INJECTIVE_MAP"
-  "INJECTIVE_LEFT_INVERSE" > "HOLLight.hollight.INJECTIVE_LEFT_INVERSE"
-  "INJECTIVE_IMAGE" > "HOLLight.hollight.INJECTIVE_IMAGE"
-  "INJA_def" > "HOLLight.hollight.INJA_def"
-  "INJA_INJ" > "HOLLight.hollight.INJA_INJ"
-  "INFINITE_NONEMPTY" > "Infinite_Set.infinite_imp_nonempty"
-  "INFINITE_IMAGE_INJ" > "HOLLight.hollight.INFINITE_IMAGE_INJ"
-  "INFINITE_DIFF_FINITE" > "Infinite_Set.Diff_infinite_finite"
-  "IND_SUC_def" > "HOLLight.hollight.IND_SUC_def"
-  "IND_SUC_0_EXISTS" > "HOLLight.hollight.IND_SUC_0_EXISTS"
-  "IND_0_def" > "HOLLight.hollight.IND_0_def"
-  "IMP_EQ_CLAUSE" > "HOLLight.hollight.IMP_EQ_CLAUSE"
-  "IMP_CONJ_ALT" > "HOLLight.hollight.IMP_CONJ_ALT"
-  "IMP_CONJ" > "HOL.imp_conjL"
-  "IMP_CLAUSES" > "HOLLight.hollight.IMP_CLAUSES"
-  "IMAGE_o" > "Fun.image_compose"
-  "IMAGE_UNIONS" > "HOLLight.hollight.IMAGE_UNIONS"
-  "IMAGE_UNION" > "Set.image_Un"
-  "IMAGE_SUBSET" > "Set.image_mono"
-  "IMAGE_INTER_INJ" > "HOLLight.hollight.IMAGE_INTER_INJ"
-  "IMAGE_INJECTIVE_IMAGE_OF_SUBSET" > "HOLLight.hollight.IMAGE_INJECTIVE_IMAGE_OF_SUBSET"
-  "IMAGE_IMP_INJECTIVE_GEN" > "HOLLight.hollight.IMAGE_IMP_INJECTIVE_GEN"
-  "IMAGE_IMP_INJECTIVE" > "HOLLight.hollight.IMAGE_IMP_INJECTIVE"
-  "IMAGE_ID" > "Set.image_ident"
-  "IMAGE_I" > "Fun.image_id"
-  "IMAGE_EQ_EMPTY" > "Set.image_is_empty"
-  "IMAGE_DIFF_INJ" > "HOLLight.hollight.IMAGE_DIFF_INJ"
-  "IMAGE_DELETE_INJ" > "HOLLight.hollight.IMAGE_DELETE_INJ"
-  "IMAGE_CONST" > "Set.image_constant_conv"
-  "IMAGE_CLAUSES" > "HOLLight.hollight.IMAGE_CLAUSES"
-  "HREAL_MUL_RZERO" > "HOLLight.hollight.HREAL_MUL_RZERO"
-  "HREAL_MUL_LZERO" > "HOLLight.hollight.HREAL_MUL_LZERO"
-  "HREAL_LE_MUL_RCANCEL_IMP" > "HOLLight.hollight.HREAL_LE_MUL_RCANCEL_IMP"
-  "HREAL_LE_EXISTS_DEF" > "HOLLight.hollight.HREAL_LE_EXISTS_DEF"
-  "HREAL_LE_ADD_RCANCEL" > "HOLLight.hollight.HREAL_LE_ADD_RCANCEL"
-  "HREAL_LE_ADD_LCANCEL" > "HOLLight.hollight.HREAL_LE_ADD_LCANCEL"
-  "HREAL_LE_ADD2" > "HOLLight.hollight.HREAL_LE_ADD2"
-  "HREAL_EQ_ADD_RCANCEL" > "HOLLight.hollight.HREAL_EQ_ADD_RCANCEL"
-  "HREAL_EQ_ADD_LCANCEL" > "HOLLight.hollight.HREAL_EQ_ADD_LCANCEL"
-  "HREAL_ADD_RID" > "HOLLight.hollight.HREAL_ADD_RID"
-  "HREAL_ADD_RDISTRIB" > "HOLLight.hollight.HREAL_ADD_RDISTRIB"
-  "HREAL_ADD_AC" > "HOLLight.hollight.HREAL_ADD_AC"
-  "HD_APPEND" > "List.hd_append"
-  "HAS_SIZE_def" > "HOLLight.hollight.HAS_SIZE_def"
-  "HAS_SIZE_UNIONS" > "HOLLight.hollight.HAS_SIZE_UNIONS"
-  "HAS_SIZE_UNION" > "HOLLight.hollight.HAS_SIZE_UNION"
-  "HAS_SIZE_SUC" > "HOLLight.hollight.HAS_SIZE_SUC"
-  "HAS_SIZE_PRODUCT_DEPENDENT" > "HOLLight.hollight.HAS_SIZE_PRODUCT_DEPENDENT"
-  "HAS_SIZE_PRODUCT" > "HOLLight.hollight.HAS_SIZE_PRODUCT"
-  "HAS_SIZE_POWERSET" > "HOLLight.hollight.HAS_SIZE_POWERSET"
-  "HAS_SIZE_NUMSEG_LT" > "HOLLight.hollight.HAS_SIZE_NUMSEG_LT"
-  "HAS_SIZE_NUMSEG_LE" > "HOLLight.hollight.HAS_SIZE_NUMSEG_LE"
-  "HAS_SIZE_NUMSEG_1" > "HOLLight.hollight.HAS_SIZE_NUMSEG_1"
-  "HAS_SIZE_NUMSEG" > "HOLLight.hollight.HAS_SIZE_NUMSEG"
-  "HAS_SIZE_INDEX" > "HOLLight.hollight.HAS_SIZE_INDEX"
-  "HAS_SIZE_IMAGE_INJ_EQ" > "HOLLight.hollight.HAS_SIZE_IMAGE_INJ_EQ"
-  "HAS_SIZE_IMAGE_INJ" > "HOLLight.hollight.HAS_SIZE_IMAGE_INJ"
-  "HAS_SIZE_FUNSPACE" > "HOLLight.hollight.HAS_SIZE_FUNSPACE"
-  "HAS_SIZE_FINITE_IMAGE" > "HOLLight.hollight.HAS_SIZE_FINITE_IMAGE"
-  "HAS_SIZE_DIFF" > "HOLLight.hollight.HAS_SIZE_DIFF"
-  "HAS_SIZE_CROSS" > "HOLLight.hollight.HAS_SIZE_CROSS"
-  "HAS_SIZE_CLAUSES" > "HOLLight.hollight.HAS_SIZE_CLAUSES"
-  "HAS_SIZE_CARD" > "HOLLight.hollight.HAS_SIZE_CARD"
-  "HAS_SIZE_1" > "HOLLight.hollight.HAS_SIZE_1"
-  "HAS_SIZE_0" > "HOLLight.hollight.HAS_SIZE_0"
-  "GE_C" > "HOLLight.hollight.GE_C"
-  "FUN_IN_IMAGE" > "Set.imageI"
-  "FUN_EQ_THM" > "HOL.fun_eq_iff"
-  "FUNCTION_FACTORS_RIGHT" > "HOLLight.hollight.FUNCTION_FACTORS_RIGHT"
-  "FUNCTION_FACTORS_LEFT" > "HOLLight.hollight.FUNCTION_FACTORS_LEFT"
-  "FST" > "Product_Type.fst_conv"
-  "FORALL_UNWIND_THM2" > "HOL.simp_thms_41"
-  "FORALL_UNWIND_THM1" > "HOL.simp_thms_42"
-  "FORALL_UNCURRY" > "HOLLight.hollight.FORALL_UNCURRY"
-  "FORALL_TRIPLED_THM" > "HOLLight.hollight.FORALL_TRIPLED_THM"
-  "FORALL_SUBSET_IMAGE" > "HOLLight.hollight.FORALL_SUBSET_IMAGE"
-  "FORALL_SIMP" > "HOL.simp_thms_35"
-  "FORALL_PAIR_THM" > "Product_Type.split_paired_All"
-  "FORALL_PAIRED_THM" > "HOLLight.hollight.FORALL_PAIRED_THM"
-  "FORALL_NOT_THM" > "HOL.not_ex"
-  "FORALL_IN_UNIONS" > "HOLLight.hollight.FORALL_IN_UNIONS"
-  "FORALL_IN_INSERT" > "HOLLight.hollight.FORALL_IN_INSERT"
-  "FORALL_IN_IMAGE" > "HOLLight.hollight.FORALL_IN_IMAGE"
-  "FORALL_IN_GSPEC" > "HOLLight.hollight.FORALL_IN_GSPEC"
-  "FORALL_IN_CLAUSES" > "HOLLight.hollight.FORALL_IN_CLAUSES"
-  "FORALL_FINITE_INDEX" > "HOLLight.hollight.FORALL_FINITE_INDEX"
-  "FORALL_BOOL_THM" > "Set.all_bool_eq"
-  "FORALL_AND_THM" > "HOL.all_conj_distrib"
-  "FORALL_ALL" > "HOLLightList.FORALL_ALL"
-  "FNIL_def" > "HOLLight.hollight.FNIL_def"
-  "FINREC_def" > "HOLLight.hollight.FINREC_def"
-  "FINREC_UNIQUE_LEMMA" > "HOLLight.hollight.FINREC_UNIQUE_LEMMA"
-  "FINREC_SUC_LEMMA" > "HOLLight.hollight.FINREC_SUC_LEMMA"
-  "FINREC_FUN_LEMMA" > "HOLLight.hollight.FINREC_FUN_LEMMA"
-  "FINREC_FUN" > "HOLLight.hollight.FINREC_FUN"
-  "FINREC_EXISTS_LEMMA" > "HOLLight.hollight.FINREC_EXISTS_LEMMA"
-  "FINREC_1_LEMMA" > "HOLLight.hollight.FINREC_1_LEMMA"
-  "FINITE_UNION_IMP" > "Finite_Set.finite_UnI"
-  "FINITE_UNIONS" > "HOLLight.hollight.FINITE_UNIONS"
-  "FINITE_UNION" > "Finite_Set.finite_Un"
-  "FINITE_SUPPORT_DELTA" > "HOLLight.hollight.FINITE_SUPPORT_DELTA"
-  "FINITE_SUPPORT" > "HOLLight.hollight.FINITE_SUPPORT"
-  "FINITE_SUM_IMAGE" > "HOLLight.hollight.FINITE_SUM_IMAGE"
-  "FINITE_SUBSET_IMAGE_IMP" > "HOLLight.hollight.FINITE_SUBSET_IMAGE_IMP"
-  "FINITE_SUBSET_IMAGE" > "HOLLight.hollight.FINITE_SUBSET_IMAGE"
-  "FINITE_SUBSET" > "Finite_Set.finite_subset"
-  "FINITE_SING" > "HOLLight.hollight.FINITE_SING"
-  "FINITE_RESTRICT" > "HOLLight.hollight.FINITE_RESTRICT"
-  "FINITE_RECURSION_DELETE" > "HOLLight.hollight.FINITE_RECURSION_DELETE"
-  "FINITE_RECURSION" > "HOLLight.hollight.FINITE_RECURSION"
-  "FINITE_REAL_INTERVAL" > "HOLLight.hollight.FINITE_REAL_INTERVAL"
-  "FINITE_PRODUCT_DEPENDENT" > "HOLLight.hollight.FINITE_PRODUCT_DEPENDENT"
-  "FINITE_PRODUCT" > "HOLLight.hollight.FINITE_PRODUCT"
-  "FINITE_POWERSET" > "HOLLight.hollight.FINITE_POWERSET"
-  "FINITE_NUMSEG_LT" > "HOLLight.hollight.FINITE_NUMSEG_LT"
-  "FINITE_NUMSEG_LE" > "HOLLight.hollight.FINITE_NUMSEG_LE"
-  "FINITE_NUMSEG" > "SetInterval.finite_atLeastAtMost"
-  "FINITE_INTSEG" > "HOLLight.hollight.FINITE_INTSEG"
-  "FINITE_INTER" > "Finite_Set.finite_Int"
-  "FINITE_INSERT" > "Finite_Set.finite_insert"
-  "FINITE_INDUCT_STRONG" > "Finite_Set.finite_induct"
-  "FINITE_INDUCT_DELETE" > "HOLLight.hollight.FINITE_INDUCT_DELETE"
-  "FINITE_INDEX_WORKS" > "HOLLight.hollight.FINITE_INDEX_WORKS"
-  "FINITE_INDEX_NUMSEG" > "HOLLight.hollight.FINITE_INDEX_NUMSEG"
-  "FINITE_INDEX_NUMBERS" > "HOLLight.hollight.FINITE_INDEX_NUMBERS"
-  "FINITE_INDEX_INRANGE" > "HOLLight.hollight.FINITE_INDEX_INRANGE"
-  "FINITE_INDEX_INJ" > "HOLLight.hollight.FINITE_INDEX_INJ"
-  "FINITE_IMAGE_INJ_GENERAL" > "HOLLight.hollight.FINITE_IMAGE_INJ_GENERAL"
-  "FINITE_IMAGE_INJ_EQ" > "HOLLight.hollight.FINITE_IMAGE_INJ_EQ"
-  "FINITE_IMAGE_INJ" > "HOLLight.hollight.FINITE_IMAGE_INJ"
-  "FINITE_IMAGE_IMAGE" > "HOLLight.hollight.FINITE_IMAGE_IMAGE"
-  "FINITE_IMAGE_EXPAND" > "HOLLight.hollight.FINITE_IMAGE_EXPAND"
-  "FINITE_IMAGE" > "Finite_Set.finite_imageI"
-  "FINITE_HAS_SIZE" > "HOLLight.hollight.FINITE_HAS_SIZE"
-  "FINITE_FUNSPACE" > "HOLLight.hollight.FINITE_FUNSPACE"
-  "FINITE_FINITE_UNIONS" > "HOLLight.hollight.FINITE_FINITE_UNIONS"
-  "FINITE_FINITE_PREIMAGE_GENERAL" > "HOLLight.hollight.FINITE_FINITE_PREIMAGE_GENERAL"
-  "FINITE_FINITE_PREIMAGE" > "HOLLight.hollight.FINITE_FINITE_PREIMAGE"
-  "FINITE_FINITE_IMAGE" > "HOLLight.hollight.FINITE_FINITE_IMAGE"
-  "FINITE_EMPTY" > "Finite_Set.finite.emptyI"
-  "FINITE_DIFF" > "Finite_Set.finite_Diff"
-  "FINITE_DELETE_IMP" > "HOLLight.hollight.FINITE_DELETE_IMP"
-  "FINITE_DELETE" > "HOLLight.hollight.FINITE_DELETE"
-  "FINITE_CROSS" > "HOLLight.hollight.FINITE_CROSS"
-  "FINITE_CART" > "HOLLight.hollight.FINITE_CART"
-  "FILTER_MAP" > "List.filter_map"
-  "FILTER_APPEND" > "List.filter_append"
-  "FCONS_def" > "HOLLight.hollight.FCONS_def"
-  "FCONS_UNDO" > "HOLLight.hollight.FCONS_UNDO"
-  "FACT_NZ" > "Fact.fact_nonzero_nat"
-  "FACT_MONO" > "Fact.fact_mono_nat"
-  "FACT_LT" > "Fact.fact_gt_zero_nat"
-  "FACT_LE" > "Fact.fact_ge_one_nat"
-  "EX_MEM" > "HOLLightList.EX_MEM"
-  "EX_IMP" > "HOLLightList.EX_IMP"
-  "EXTENSION" > "Set.set_eq_iff"
-  "EXP_ZERO" > "Power.power_0_left"
-  "EXP_ONE" > "Power.monoid_mult_class.power_one"
-  "EXP_MULT" > "Power.monoid_mult_class.power_mult"
-  "EXP_MONO_LT_IMP" > "HOLLight.hollight.EXP_MONO_LT_IMP"
-  "EXP_MONO_LT" > "HOLLight.hollight.EXP_MONO_LT"
-  "EXP_MONO_LE_IMP" > "HOLLight.hollight.EXP_MONO_LE_IMP"
-  "EXP_MONO_LE" > "HOLLight.hollight.EXP_MONO_LE"
-  "EXP_MONO_EQ" > "HOLLight.hollight.EXP_MONO_EQ"
-  "EXP_LT_0" > "HOLLight.hollight.EXP_LT_0"
-  "EXP_EQ_1" > "HOLLight.hollight.EXP_EQ_1"
-  "EXP_EQ_0" > "Power.power_eq_0_iff"
-  "EXP_ADD" > "Power.monoid_mult_class.power_add"
-  "EXP_2" > "Nat_Numeral.monoid_mult_class.power2_eq_square"
-  "EXP_1" > "Power.monoid_mult_class.power_one_right"
-  "EXISTS_UNIQUE_THM" > "HOLLightCompat.EXISTS_UNIQUE_THM"
-  "EXISTS_UNIQUE_REFL" > "HOL.ex1_eq_1"
-  "EXISTS_UNIQUE_ALT" > "HOLLight.hollight.EXISTS_UNIQUE_ALT"
-  "EXISTS_UNIQUE" > "HOL.Ex1_def"
-  "EXISTS_UNCURRY" > "HOLLight.hollight.EXISTS_UNCURRY"
-  "EXISTS_TRIPLED_THM" > "HOLLight.hollight.EXISTS_TRIPLED_THM"
-  "EXISTS_THM" > "HOL4Setup.EXISTS_DEF"
-  "EXISTS_SUBSET_IMAGE" > "HOLLight.hollight.EXISTS_SUBSET_IMAGE"
-  "EXISTS_SIMP" > "HOL.simp_thms_36"
-  "EXISTS_REFL" > "HOL.simp_thms_37"
-  "EXISTS_PAIR_THM" > "Product_Type.split_paired_Ex"
-  "EXISTS_PAIRED_THM" > "HOLLight.hollight.EXISTS_PAIRED_THM"
-  "EXISTS_OR_THM" > "HOL.ex_disj_distrib"
-  "EXISTS_ONE_REP" > "HOLLight.hollight.EXISTS_ONE_REP"
-  "EXISTS_NOT_THM" > "HOL.not_all"
-  "EXISTS_IN_UNIONS" > "HOLLight.hollight.EXISTS_IN_UNIONS"
-  "EXISTS_IN_INSERT" > "HOLLight.hollight.EXISTS_IN_INSERT"
-  "EXISTS_IN_IMAGE" > "HOLLight.hollight.EXISTS_IN_IMAGE"
-  "EXISTS_IN_GSPEC" > "HOLLight.hollight.EXISTS_IN_GSPEC"
-  "EXISTS_IN_CLAUSES" > "HOLLight.hollight.EXISTS_IN_CLAUSES"
-  "EXISTS_FINITE_SUBSET_IMAGE" > "HOLLight.hollight.EXISTS_FINITE_SUBSET_IMAGE"
-  "EXISTS_EX" > "HOLLightList.EXISTS_EX"
-  "EXISTS_BOOL_THM" > "Set.ex_bool_eq"
-  "EXCLUDED_MIDDLE" > "HOLLight.hollight.EXCLUDED_MIDDLE"
-  "EVEN_SUB" > "HOLLight.hollight.EVEN_SUB"
-  "EVEN_OR_ODD" > "HOLLight.hollight.EVEN_OR_ODD"
-  "EVEN_ODD_DECOMPOSITION" > "HOLLight.hollight.EVEN_ODD_DECOMPOSITION"
-  "EVEN_MULT" > "Parity.even_product_nat"
-  "EVEN_MOD" > "HOLLight.hollight.EVEN_MOD"
-  "EVEN_EXP" > "HOLLight.hollight.EVEN_EXP"
-  "EVEN_EXISTS_LEMMA" > "HOLLight.hollight.EVEN_EXISTS_LEMMA"
-  "EVEN_EXISTS" > "Parity.even_mult_two_ex"
-  "EVEN_DOUBLE" > "HOLLight.hollight.EVEN_DOUBLE"
-  "EVEN_AND_ODD" > "HOLLight.hollight.EVEN_AND_ODD"
-  "EVEN_ADD" > "Parity.even_add"
-  "EQ_UNIV" > "HOLLight.hollight.EQ_UNIV"
-  "EQ_TRANS" > "HOL.trans"
-  "EQ_SYM_EQ" > "HOL.eq_ac_1"
-  "EQ_SYM" > "HOL.eq_reflection"
-  "EQ_REFL" > "HOL.refl"
-  "EQ_MULT_RCANCEL" > "Nat.mult_cancel2"
-  "EQ_MULT_LCANCEL" > "Numeral_Simprocs.nat_mult_eq_cancel_disj"
-  "EQ_IMP_LE" > "Nat.eq_imp_le"
-  "EQ_EXT" > "HOL.eq_reflection"
-  "EQ_EXP" > "HOLLight.hollight.EQ_EXP"
-  "EQ_CLAUSES" > "HOLLight.hollight.EQ_CLAUSES"
-  "EQ_ADD_RCANCEL_0" > "HOLLight.hollight.EQ_ADD_RCANCEL_0"
-  "EQ_ADD_RCANCEL" > "Groups.cancel_semigroup_add_class.add_right_cancel"
-  "EQ_ADD_LCANCEL_0" > "HOLLight.hollight.EQ_ADD_LCANCEL_0"
-  "EQ_ADD_LCANCEL" > "Groups.cancel_semigroup_add_class.add_left_cancel"
-  "EMPTY_UNIONS" > "HOLLight.hollight.EMPTY_UNIONS"
-  "EMPTY_UNION" > "Lattices.bounded_lattice_bot_class.sup_eq_bot_iff"
-  "EMPTY_SUBSET" > "Orderings.bot_class.bot_least"
-  "EMPTY_NOT_UNIV" > "HOLLight.hollight.EMPTY_NOT_UNIV"
-  "EMPTY_GSPEC" > "HOLLight.hollight.EMPTY_GSPEC"
-  "EMPTY_DIFF" > "Set.empty_Diff"
-  "EMPTY_DELETE" > "HOLLight.hollight.EMPTY_DELETE"
-  "EL_CONS" > "List.nth_Cons'"
-  "EL_APPEND" > "List.nth_append"
-  "DIV_UNIQ" > "HOLLight.hollight.DIV_UNIQ"
-  "DIV_REFL" > "Divides.semiring_div_class.div_self"
-  "DIV_MUL_LE" > "HOLLight.hollight.DIV_MUL_LE"
-  "DIV_MULT2" > "HOLLight.hollight.DIV_MULT2"
-  "DIV_MONO_LT" > "HOLLight.hollight.DIV_MONO_LT"
-  "DIV_MONO2" > "HOLLight.hollight.DIV_MONO2"
-  "DIV_MONO" > "HOLLight.hollight.DIV_MONO"
-  "DIV_MOD" > "HOLLight.hollight.DIV_MOD"
-  "DIV_LT" > "Divides.div_less"
-  "DIV_LE_EXCLUSION" > "HOLLight.hollight.DIV_LE_EXCLUSION"
-  "DIV_LE" > "HOLLight.hollight.DIV_LE"
-  "DIV_EQ_EXCLUSION" > "HOLLight.hollight.DIV_EQ_EXCLUSION"
-  "DIV_EQ_0" > "HOLLight.hollight.DIV_EQ_0"
-  "DIV_DIV" > "HOLLight.hollight.DIV_DIV"
-  "DIV_ADD_MOD" > "HOLLight.hollight.DIV_ADD_MOD"
-  "DIVMOD_UNIQ_LEMMA" > "HOLLight.hollight.DIVMOD_UNIQ_LEMMA"
-  "DIVMOD_UNIQ" > "HOLLight.hollight.DIVMOD_UNIQ"
-  "DIVMOD_EXIST_0" > "HOLLight.hollight.DIVMOD_EXIST_0"
-  "DIVMOD_EXIST" > "HOLLight.hollight.DIVMOD_EXIST"
-  "DIVMOD_ELIM_THM" > "HOLLight.hollight.DIVMOD_ELIM_THM"
-  "DIVISION" > "HOLLight.hollight.DIVISION"
-  "DIST_TRIANGLE_LE" > "HOLLight.hollight.DIST_TRIANGLE_LE"
-  "DIST_TRIANGLES_LE" > "HOLLight.hollight.DIST_TRIANGLES_LE"
-  "DIST_SYM" > "HOLLight.hollight.DIST_SYM"
-  "DIST_RZERO" > "HOLLight.hollight.DIST_RZERO"
-  "DIST_RMUL" > "HOLLight.hollight.DIST_RMUL"
-  "DIST_REFL" > "HOLLight.hollight.DIST_REFL"
-  "DIST_RADD_0" > "HOLLight.hollight.DIST_RADD_0"
-  "DIST_RADD" > "HOLLight.hollight.DIST_RADD"
-  "DIST_LZERO" > "HOLLight.hollight.DIST_LZERO"
-  "DIST_LMUL" > "HOLLight.hollight.DIST_LMUL"
-  "DIST_LE_CASES" > "HOLLight.hollight.DIST_LE_CASES"
-  "DIST_LADD_0" > "HOLLight.hollight.DIST_LADD_0"
-  "DIST_LADD" > "HOLLight.hollight.DIST_LADD"
-  "DIST_EQ_0" > "HOLLight.hollight.DIST_EQ_0"
-  "DIST_ELIM_THM" > "HOLLight.hollight.DIST_ELIM_THM"
-  "DISJ_SYM" > "Groebner_Basis.dnf_4"
-  "DISJ_ASSOC" > "HOL.disj_ac_3"
-  "DISJ_ACI" > "HOLLight.hollight.DISJ_ACI"
-  "DISJOINT_UNION" > "HOLLight.hollight.DISJOINT_UNION"
-  "DISJOINT_SYM" > "HOLLight.hollight.DISJOINT_SYM"
-  "DISJOINT_NUMSEG" > "HOLLight.hollight.DISJOINT_NUMSEG"
-  "DISJOINT_INSERT" > "HOLLight.hollight.DISJOINT_INSERT"
-  "DISJOINT_EMPTY_REFL" > "HOLLight.hollight.DISJOINT_EMPTY_REFL"
-  "DISJOINT_EMPTY" > "HOLLight.hollight.DISJOINT_EMPTY"
-  "DISJOINT_DELETE_SYM" > "HOLLight.hollight.DISJOINT_DELETE_SYM"
-  "DIMINDEX_UNIV" > "HOLLight.hollight.DIMINDEX_UNIV"
-  "DIMINDEX_UNIQUE" > "HOLLight.hollight.DIMINDEX_UNIQUE"
-  "DIMINDEX_NONZERO" > "HOLLight.hollight.DIMINDEX_NONZERO"
-  "DIMINDEX_GE_1" > "HOLLight.hollight.DIMINDEX_GE_1"
-  "DIMINDEX_FINITE_IMAGE" > "HOLLight.hollight.DIMINDEX_FINITE_IMAGE"
-  "DIFF_UNIV" > "Set.Diff_UNIV"
-  "DIFF_INTERS" > "HOLLight.hollight.DIFF_INTERS"
-  "DIFF_INSERT" > "Set.Diff_insert2"
-  "DIFF_EQ_EMPTY" > "Set.Diff_cancel"
-  "DIFF_EMPTY" > "Set.Diff_empty"
-  "DIFF_DIFF" > "Set.Diff_idemp"
-  "DEST_REC_INJ" > "HOLLight.hollight.recspace._dest_rec_inject"
-  "DELETE_SUBSET" > "HOLLight.hollight.DELETE_SUBSET"
-  "DELETE_NON_ELEMENT" > "HOLLight.hollight.DELETE_NON_ELEMENT"
-  "DELETE_INTER" > "HOLLight.hollight.DELETE_INTER"
-  "DELETE_INSERT" > "HOLLight.hollight.DELETE_INSERT"
-  "DELETE_DELETE" > "HOLLight.hollight.DELETE_DELETE"
-  "DELETE_COMM" > "HOLLight.hollight.DELETE_COMM"
-  "DEF_~" > "Groebner_Basis.bool_simps_19"
-  "DEF_vector" > "HOLLight.hollight.DEF_vector"
-  "DEF_treal_of_num" > "HOLLight.hollight.DEF_treal_of_num"
-  "DEF_treal_neg" > "HOLLight.hollight.DEF_treal_neg"
-  "DEF_treal_mul" > "HOLLight.hollight.DEF_treal_mul"
-  "DEF_treal_le" > "HOLLight.hollight.DEF_treal_le"
-  "DEF_treal_inv" > "HOLLight.hollight.DEF_treal_inv"
-  "DEF_treal_eq" > "HOLLight.hollight.DEF_treal_eq"
-  "DEF_treal_add" > "HOLLight.hollight.DEF_treal_add"
-  "DEF_tailadmissible" > "HOLLight.hollight.DEF_tailadmissible"
-  "DEF_support" > "HOLLight.hollight.DEF_support"
-  "DEF_superadmissible" > "HOLLight.hollight.DEF_superadmissible"
-  "DEF_sum" > "HOLLight.hollight.DEF_sum"
-  "DEF_sndcart" > "HOLLight.hollight.DEF_sndcart"
-  "DEF_set_of_list" > "HOLLightList.DEF_set_of_list"
-  "DEF_rem" > "HOLLight.hollight.DEF_rem"
-  "DEF_real_sub" > "HOLLight.hollight.DEF_real_sub"
-  "DEF_real_sgn" > "HOLLight.hollight.DEF_real_sgn"
-  "DEF_real_pow" > "HOLLight.hollight.DEF_real_pow"
-  "DEF_real_of_num" > "HOLLight.hollight.DEF_real_of_num"
-  "DEF_real_neg" > "HOLLight.hollight.DEF_real_neg"
-  "DEF_real_mul" > "HOLLight.hollight.DEF_real_mul"
-  "DEF_real_mod" > "HOLLight.hollight.DEF_real_mod"
-  "DEF_real_min" > "HOLLight.hollight.DEF_real_min"
-  "DEF_real_max" > "HOLLight.hollight.DEF_real_max"
-  "DEF_real_lt" > "HOLLight.hollight.DEF_real_lt"
-  "DEF_real_le" > "HOLLight.hollight.DEF_real_le"
-  "DEF_real_inv" > "HOLLight.hollight.DEF_real_inv"
-  "DEF_real_gt" > "HOLLight.hollight.DEF_real_gt"
-  "DEF_real_ge" > "HOLLight.hollight.DEF_real_ge"
-  "DEF_real_div" > "HOLLight.hollight.DEF_real_div"
-  "DEF_real_add" > "HOLLight.hollight.DEF_real_add"
-  "DEF_real_abs" > "HOLLight.hollight.DEF_real_abs"
-  "DEF_pastecart" > "HOLLight.hollight.DEF_pastecart"
-  "DEF_pairwise" > "HOLLight.hollight.DEF_pairwise"
-  "DEF_o" > "Fun.comp_def"
-  "DEF_num_of_int" > "HOLLight.hollight.DEF_num_of_int"
-  "DEF_num_mod" > "HOLLight.hollight.DEF_num_mod"
-  "DEF_num_gcd" > "HOLLight.hollight.DEF_num_gcd"
-  "DEF_num_divides" > "HOLLight.hollight.DEF_num_divides"
-  "DEF_num_coprime" > "HOLLight.hollight.DEF_num_coprime"
-  "DEF_nsum" > "HOLLight.hollight.DEF_nsum"
-  "DEF_neutral" > "HOLLight.hollight.DEF_neutral"
-  "DEF_nadd_rinv" > "HOLLight.hollight.DEF_nadd_rinv"
-  "DEF_nadd_of_num" > "HOLLight.hollight.DEF_nadd_of_num"
-  "DEF_nadd_mul" > "HOLLight.hollight.DEF_nadd_mul"
-  "DEF_nadd_le" > "HOLLight.hollight.DEF_nadd_le"
-  "DEF_nadd_inv" > "HOLLight.hollight.DEF_nadd_inv"
-  "DEF_nadd_eq" > "HOLLight.hollight.DEF_nadd_eq"
-  "DEF_nadd_add" > "HOLLight.hollight.DEF_nadd_add"
-  "DEF_monoidal" > "HOLLight.hollight.DEF_monoidal"
-  "DEF_minimal" > "HOLLight.hollight.DEF_minimal"
-  "DEF_lambda" > "HOLLight.hollight.DEF_lambda"
-  "DEF_iterate" > "HOLLight.hollight.DEF_iterate"
-  "DEF_is_nadd" > "HOLLight.hollight.DEF_is_nadd"
-  "DEF_integer" > "HOLLight.hollight.DEF_integer"
-  "DEF_int_sub" > "HOLLight.hollight.DEF_int_sub"
-  "DEF_int_sgn" > "HOLLight.hollight.DEF_int_sgn"
-  "DEF_int_pow" > "HOLLight.hollight.DEF_int_pow"
-  "DEF_int_of_num" > "HOLLight.hollight.DEF_int_of_num"
-  "DEF_int_neg" > "HOLLight.hollight.DEF_int_neg"
-  "DEF_int_mul" > "HOLLight.hollight.DEF_int_mul"
-  "DEF_int_mod" > "HOLLight.hollight.DEF_int_mod"
-  "DEF_int_min" > "HOLLight.hollight.DEF_int_min"
-  "DEF_int_max" > "HOLLight.hollight.DEF_int_max"
-  "DEF_int_lt" > "HOLLight.hollight.DEF_int_lt"
-  "DEF_int_le" > "HOLLight.hollight.DEF_int_le"
-  "DEF_int_gt" > "HOLLight.hollight.DEF_int_gt"
-  "DEF_int_ge" > "HOLLight.hollight.DEF_int_ge"
-  "DEF_int_gcd" > "HOLLight.hollight.DEF_int_gcd"
-  "DEF_int_divides" > "HOLLight.hollight.DEF_int_divides"
-  "DEF_int_coprime" > "HOLLight.hollight.DEF_int_coprime"
-  "DEF_int_add" > "HOLLight.hollight.DEF_int_add"
-  "DEF_int_abs" > "HOLLight.hollight.DEF_int_abs"
-  "DEF_hreal_of_num" > "HOLLight.hollight.DEF_hreal_of_num"
-  "DEF_hreal_mul" > "HOLLight.hollight.DEF_hreal_mul"
-  "DEF_hreal_le" > "HOLLight.hollight.DEF_hreal_le"
-  "DEF_hreal_inv" > "HOLLight.hollight.DEF_hreal_inv"
-  "DEF_hreal_add" > "HOLLight.hollight.DEF_hreal_add"
-  "DEF_fstcart" > "HOLLight.hollight.DEF_fstcart"
-  "DEF_div" > "HOLLight.hollight.DEF_div"
-  "DEF_dist" > "HOLLight.hollight.DEF_dist"
-  "DEF_dimindex" > "HOLLight.hollight.DEF_dimindex"
-  "DEF_admissible" > "HOLLight.hollight.DEF_admissible"
-  "DEF__star_" > "HOLLightCompat.DEF__star_"
-  "DEF__slash__backslash_" > "HOLLightCompat.DEF__slash__backslash_"
-  "DEF__questionmark__exclamationmark_" > "HOLLightCompat.EXISTS_UNIQUE_THM"
-  "DEF__questionmark_" > "HOL.Ex_def"
-  "DEF__lessthan__equal__c" > "HOLLight.hollight.DEF__lessthan__equal__c"
-  "DEF__lessthan__equal_" > "HOLLightCompat.DEF__lessthan__equal_"
-  "DEF__lessthan__c" > "HOLLight.hollight.DEF__lessthan__c"
-  "DEF__lessthan_" > "HOLLightCompat.DEF__lessthan_"
-  "DEF__greaterthan__equal__c" > "HOLLight.hollight.DEF__greaterthan__equal__c"
-  "DEF__greaterthan__equal_" > "HOLLightCompat.DEF__greaterthan__equal_"
-  "DEF__greaterthan__c" > "HOLLight.hollight.DEF__greaterthan__c"
-  "DEF__greaterthan_" > "HOLLightCompat.DEF__greaterthan_"
-  "DEF__exclamationmark_" > "HOL.All_def"
-  "DEF__equal__equal__greaterthan_" > "HOLLightCompat.DEF__equal__equal__greaterthan_"
-  "DEF__equal__equal_" > "HOLLight.hollight.DEF__equal__equal_"
-  "DEF__equal__c" > "HOLLight.hollight.DEF__equal__c"
-  "DEF__dot__dot_" > "HOLLightCompat.dotdot_def"
-  "DEF__backslash__slash_" > "HOL.or_def"
-  "DEF__UNGUARDED_PATTERN" > "HOLLight.hollight.DEF__UNGUARDED_PATTERN"
-  "DEF__SEQPATTERN" > "HOLLight.hollight.DEF__SEQPATTERN"
-  "DEF__MATCH" > "HOLLight.hollight.DEF__MATCH"
-  "DEF__GUARDED_PATTERN" > "HOLLight.hollight.DEF__GUARDED_PATTERN"
-  "DEF__FUNCTION" > "HOLLight.hollight.DEF__FUNCTION"
-  "DEF__FALSITY_" > "HOLLight.hollight.DEF__FALSITY_"
-  "DEF__11937" > "HOLLight.hollight.DEF__11937"
-  "DEF_ZRECSPACE" > "HOLLight.hollight.DEF_ZRECSPACE"
-  "DEF_ZCONSTR" > "HOLLight.hollight.DEF_ZCONSTR"
-  "DEF_ZBOT" > "HOLLight.hollight.DEF_ZBOT"
-  "DEF_WF" > "HOLLightCompat.DEF_WF"
-  "DEF_UNIV" > "HOLLightCompat.DEF_UNIV"
-  "DEF_UNIONS" > "HOLLightCompat.DEF_UNIONS"
-  "DEF_UNION" > "HOLLightCompat.DEF_UNION"
-  "DEF_UNCURRY" > "HOLLight.hollight.DEF_UNCURRY"
-  "DEF_T" > "HOL.True_def"
-  "DEF_SURJ" > "HOLLight.hollight.DEF_SURJ"
-  "DEF_SUBSET" > "HOLLightCompat.DEF_SUBSET"
-  "DEF_SND" > "HOLLightCompat.DEF_SND"
-  "DEF_SING" > "HOLLight.hollight.DEF_SING"
-  "DEF_SETSPEC" > "HOLLightCompat.SETSPEC_def"
-  "DEF_REVERSE" > "HOLLightList.DEF_REVERSE"
-  "DEF_REST" > "HOLLight.hollight.DEF_REST"
-  "DEF_REPLICATE" > "HOLLightList.DEF_REPLICATE"
-  "DEF_PSUBSET" > "HOLLightCompat.DEF_PSUBSET"
-  "DEF_PRE" > "HOLLightCompat.DEF_PRE"
-  "DEF_PASSOC" > "HOLLight.hollight.DEF_PASSOC"
-  "DEF_PAIRWISE" > "HOLLight.hollight.DEF_PAIRWISE"
-  "DEF_ONTO" > "Fun.surj_def"
-  "DEF_ONE_ONE" > "HOLLightCompat.DEF_ONE_ONE"
-  "DEF_ODD" > "HOLLightCompat.DEF_ODD"
-  "DEF_NUM_REP" > "HOLLight.hollight.DEF_NUM_REP"
-  "DEF_NUMSUM" > "HOLLight.hollight.DEF_NUMSUM"
-  "DEF_NUMSND" > "HOLLight.hollight.DEF_NUMSND"
-  "DEF_NUMRIGHT" > "HOLLight.hollight.DEF_NUMRIGHT"
-  "DEF_NUMPAIR" > "HOLLight.hollight.DEF_NUMPAIR"
-  "DEF_NUMLEFT" > "HOLLight.hollight.DEF_NUMLEFT"
-  "DEF_NUMFST" > "HOLLight.hollight.DEF_NUMFST"
-  "DEF_NUMERAL" > "HOLLightCompat.NUMERAL_def"
-  "DEF_NULL" > "HOLLightList.DEF_NULL"
-  "DEF_MOD" > "HOLLightCompat.DEF_MOD"
-  "DEF_MIN" > "Orderings.ord_class.min_def"
-  "DEF_MEM" > "HOLLightList.DEF_MEM"
-  "DEF_MEASURE" > "HOLLightCompat.MEASURE_def"
-  "DEF_MAX" > "Orderings.ord_class.max_def"
-  "DEF_MAP" > "HOLLightList.DEF_MAP"
-  "DEF_LET_END" > "HOLLight.hollight.DEF_LET_END"
-  "DEF_LET" > "HOLLightCompat.LET_def"
-  "DEF_LENGTH" > "HOLLightList.DEF_LENGTH"
-  "DEF_LAST" > "HOLLightList.DEF_LAST"
-  "DEF_ITSET" > "HOLLight.hollight.DEF_ITSET"
-  "DEF_ITLIST" > "HOLLightList.DEF_ITLIST"
-  "DEF_ISO" > "HOLLight.hollight.DEF_ISO"
-  "DEF_INTERS" > "HOLLightCompat.DEF_INTERS"
-  "DEF_INTER" > "HOLLightCompat.DEF_INTER"
-  "DEF_INSERT" > "HOLLightCompat.DEF_INSERT"
-  "DEF_INJP" > "HOLLight.hollight.DEF_INJP"
-  "DEF_INJN" > "HOLLight.hollight.DEF_INJN"
-  "DEF_INJF" > "HOLLight.hollight.DEF_INJF"
-  "DEF_INJA" > "HOLLight.hollight.DEF_INJA"
-  "DEF_INJ" > "HOLLight.hollight.DEF_INJ"
-  "DEF_INFINITE" > "HOLLightCompat.DEF_INFINITE"
-  "DEF_IND_SUC" > "HOLLight.hollight.DEF_IND_SUC"
-  "DEF_IND_0" > "HOLLight.hollight.DEF_IND_0"
-  "DEF_IN" > "Set.mem_def"
-  "DEF_IMAGE" > "HOLLightCompat.DEF_IMAGE"
-  "DEF_I" > "Fun.id_apply"
-  "DEF_HAS_SIZE" > "HOLLight.hollight.DEF_HAS_SIZE"
-  "DEF_GSPEC" > "Set.Collect_def"
-  "DEF_GEQ" > "HOLLightCompat.DEF_GEQ"
-  "DEF_GABS" > "HOLLightCompat.DEF_GABS"
-  "DEF_FST" > "HOLLightCompat.DEF_FST"
-  "DEF_FNIL" > "HOLLight.hollight.DEF_FNIL"
-  "DEF_FINREC" > "HOLLight.hollight.DEF_FINREC"
-  "DEF_FINITE" > "HOLLightCompat.DEF_FINITE"
-  "DEF_FILTER" > "HOLLightList.DEF_FILTER"
-  "DEF_FCONS" > "HOLLight.hollight.DEF_FCONS"
-  "DEF_FACT" > "HOLLightCompat.DEF_FACT"
-  "DEF_F" > "HOL.False_def"
-  "DEF_EXP" > "HOLLightCompat.DEF_EXP"
-  "DEF_EX" > "HOLLightList.DEF_EX"
-  "DEF_EVEN" > "HOLLightCompat.DEF_EVEN"
-  "DEF_EMPTY" > "HOLLightCompat.DEF_EMPTY"
-  "DEF_EL" > "HOLLightList.DEF_EL"
-  "DEF_DIV" > "HOLLightCompat.DEF_DIV"
-  "DEF_DISJOINT" > "HOLLightCompat.DEF_DISJOINT"
-  "DEF_DIFF" > "HOLLightCompat.DEF_DIFF"
-  "DEF_DELETE" > "HOLLightCompat.DEF_DELETE"
-  "DEF_DECIMAL" > "HOLLight.hollight.DEF_DECIMAL"
-  "DEF_CURRY" > "Product_Type.curry_conv"
-  "DEF_CROSS" > "HOLLight.hollight.DEF_CROSS"
-  "DEF_COUNTABLE" > "HOLLight.hollight.DEF_COUNTABLE"
-  "DEF_CONSTR" > "HOLLight.hollight.DEF_CONSTR"
-  "DEF_COND" > "HOLLightCompat.COND_DEF"
-  "DEF_CHOICE" > "HOLLightCompat.DEF_CHOICE"
-  "DEF_CASEWISE" > "HOLLight.hollight.DEF_CASEWISE"
-  "DEF_CARD" > "HOLLight.hollight.DEF_CARD"
-  "DEF_BUTLAST" > "HOLLightList.DEF_BUTLAST"
-  "DEF_BOTTOM" > "HOLLight.hollight.DEF_BOTTOM"
-  "DEF_BIT1" > "HOLLightCompat.BIT1_DEF"
-  "DEF_BIT0" > "HOLLightCompat.BIT0_DEF"
-  "DEF_BIJ" > "HOLLight.hollight.DEF_BIJ"
-  "DEF_ASCII" > "HOLLight.hollight.DEF_ASCII"
-  "DEF_APPEND" > "HOLLightList.DEF_APPEND"
-  "DEF_ALL2" > "HOLLightList.DEF_ALL2"
-  "DEF_ALL" > "HOLLightList.DEF_ALL"
-  "DEF_-" > "HOLLightCompat.DEF_MINUS"
-  "DEF_+" > "HOLLightCompat.DEF_PLUS"
-  "DEF_$" > "HOLLight.hollight.DEF_$"
-  "DECOMPOSITION" > "HOLLight.hollight.DECOMPOSITION"
-  "DECIMAL_def" > "HOLLight.hollight.DECIMAL_def"
-  "CROSS_def" > "HOLLight.hollight.CROSS_def"
-  "CROSS_EQ_EMPTY" > "HOLLight.hollight.CROSS_EQ_EMPTY"
-  "COUNTABLE_def" > "HOLLight.hollight.COUNTABLE_def"
-  "CONS_HD_TL" > "List.hd_Cons_tl"
-  "CONS_11" > "List.list.inject"
-  "CONSTR_def" > "HOLLight.hollight.CONSTR_def"
-  "CONSTR_REC" > "HOLLight.hollight.CONSTR_REC"
-  "CONSTR_INJ" > "HOLLight.hollight.CONSTR_INJ"
-  "CONSTR_IND" > "HOLLight.hollight.CONSTR_IND"
-  "CONSTR_BOT" > "HOLLight.hollight.CONSTR_BOT"
-  "CONJ_SYM" > "Groebner_Basis.dnf_3"
-  "CONJ_ASSOC" > "HOL.conj_ac_3"
-  "CONJ_ACI" > "HOLLight.hollight.CONJ_ACI"
-  "COND_RATOR" > "HOLLight.hollight.COND_RATOR"
-  "COND_RAND" > "HOL.if_distrib"
-  "COND_ID" > "HOL.if_cancel"
-  "COND_EXPAND" > "HOLLight.hollight.COND_EXPAND"
-  "COND_EQ_CLAUSE" > "HOLLight.hollight.COND_EQ_CLAUSE"
-  "COND_ELIM_THM" > "HOL.if_splits_1"
-  "COND_CLAUSES" > "HOLLight.hollight.COND_CLAUSES"
-  "COND_ABS" > "HOLLight.hollight.COND_ABS"
-  "COMPONENT" > "Set.insertI1"
-  "CHOOSE_SUBSET_STRONG" > "HOLLight.hollight.CHOOSE_SUBSET_STRONG"
-  "CHOOSE_SUBSET" > "HOLLight.hollight.CHOOSE_SUBSET"
-  "CHOICE_DEF" > "HOLLight.hollight.CHOICE_DEF"
-  "CASEWISE_def" > "HOLLight.hollight.CASEWISE_def"
-  "CART_EQ_FULL" > "HOLLight.hollight.CART_EQ_FULL"
-  "CART_EQ" > "HOLLight.hollight.CART_EQ"
-  "CARD_def" > "HOLLight.hollight.CARD_def"
-  "CARD_UNION_OVERLAP_EQ" > "HOLLight.hollight.CARD_UNION_OVERLAP_EQ"
-  "CARD_UNION_OVERLAP" > "HOLLight.hollight.CARD_UNION_OVERLAP"
-  "CARD_UNION_LE" > "HOLLight.hollight.CARD_UNION_LE"
-  "CARD_UNION_GEN" > "HOLLight.hollight.CARD_UNION_GEN"
-  "CARD_UNION_EQ" > "HOLLight.hollight.CARD_UNION_EQ"
-  "CARD_UNIONS_LE" > "HOLLight.hollight.CARD_UNIONS_LE"
-  "CARD_UNIONS" > "HOLLight.hollight.CARD_UNIONS"
-  "CARD_UNION" > "HOLLight.hollight.CARD_UNION"
-  "CARD_SUBSET_LE" > "HOLLight.hollight.CARD_SUBSET_LE"
-  "CARD_SUBSET_IMAGE" > "HOLLight.hollight.CARD_SUBSET_IMAGE"
-  "CARD_SUBSET_EQ" > "HOLLight.hollight.CARD_SUBSET_EQ"
-  "CARD_SUBSET" > "HOLLight.hollight.CARD_SUBSET"
-  "CARD_PSUBSET" > "HOLLight.hollight.CARD_PSUBSET"
-  "CARD_PRODUCT" > "HOLLight.hollight.CARD_PRODUCT"
-  "CARD_POWERSET" > "HOLLight.hollight.CARD_POWERSET"
-  "CARD_NUMSEG_LT" > "HOLLight.hollight.CARD_NUMSEG_LT"
-  "CARD_NUMSEG_LEMMA" > "HOLLight.hollight.CARD_NUMSEG_LEMMA"
-  "CARD_NUMSEG_LE" > "HOLLight.hollight.CARD_NUMSEG_LE"
-  "CARD_NUMSEG_1" > "HOLLight.hollight.CARD_NUMSEG_1"
-  "CARD_NUMSEG" > "HOLLight.hollight.CARD_NUMSEG"
-  "CARD_LE_INJ" > "HOLLight.hollight.CARD_LE_INJ"
-  "CARD_IMAGE_LE" > "HOLLight.hollight.CARD_IMAGE_LE"
-  "CARD_IMAGE_INJ_EQ" > "HOLLight.hollight.CARD_IMAGE_INJ_EQ"
-  "CARD_IMAGE_INJ" > "HOLLight.hollight.CARD_IMAGE_INJ"
-  "CARD_FUNSPACE" > "HOLLight.hollight.CARD_FUNSPACE"
-  "CARD_FINITE_IMAGE" > "HOLLight.hollight.CARD_FINITE_IMAGE"
-  "CARD_EQ_SUM" > "HOLLight.hollight.CARD_EQ_SUM"
-  "CARD_EQ_NSUM" > "HOLLight.hollight.CARD_EQ_NSUM"
-  "CARD_EQ_BIJECTIONS" > "HOLLight.hollight.CARD_EQ_BIJECTIONS"
-  "CARD_EQ_BIJECTION" > "HOLLight.hollight.CARD_EQ_BIJECTION"
-  "CARD_EQ_0" > "HOLLight.hollight.CARD_EQ_0"
-  "CARD_DIFF" > "HOLLight.hollight.CARD_DIFF"
-  "CARD_DELETE" > "HOLLight.hollight.CARD_DELETE"
-  "CARD_CROSS" > "HOLLight.hollight.CARD_CROSS"
-  "CARD_CLAUSES" > "HOLLight.hollight.CARD_CLAUSES"
-  "BOUNDS_NOTZERO" > "HOLLight.hollight.BOUNDS_NOTZERO"
-  "BOUNDS_LINEAR_0" > "HOLLight.hollight.BOUNDS_LINEAR_0"
-  "BOUNDS_LINEAR" > "HOLLight.hollight.BOUNDS_LINEAR"
-  "BOUNDS_IGNORE" > "HOLLight.hollight.BOUNDS_IGNORE"
-  "BOUNDS_DIVIDED" > "HOLLight.hollight.BOUNDS_DIVIDED"
-  "BOTTOM_def" > "HOLLight.hollight.BOTTOM_def"
-  "BOOL_CASES_AX" > "HOL.True_or_False"
-  "BIT1_THM" > "HOLLight.hollight.BIT1_THM"
-  "BIT1" > "HOLLight.hollight.BIT1"
-  "BIT0_THM" > "Int.semiring_mult_2"
-  "BIT0" > "Int.semiring_mult_2"
-  "BIJ_def" > "HOLLight.hollight.BIJ_def"
-  "BIJECTIVE_ON_LEFT_RIGHT_INVERSE" > "HOLLight.hollight.BIJECTIVE_ON_LEFT_RIGHT_INVERSE"
-  "BIJECTIVE_LEFT_RIGHT_INVERSE" > "HOLLight.hollight.BIJECTIVE_LEFT_RIGHT_INVERSE"
-  "BIJECTIONS_HAS_SIZE_EQ" > "HOLLight.hollight.BIJECTIONS_HAS_SIZE_EQ"
-  "BIJECTIONS_HAS_SIZE" > "HOLLight.hollight.BIJECTIONS_HAS_SIZE"
-  "BIJECTIONS_CARD_EQ" > "HOLLight.hollight.BIJECTIONS_CARD_EQ"
-  "BETA_THM" > "HOL.eta_contract_eq"
-  "ASCII_def" > "HOLLight.hollight.ASCII_def"
-  "ARITH_ZERO" > "HOLLight.hollight.ARITH_ZERO"
-  "ARITH_SUC" > "HOLLight.hollight.ARITH_SUC"
-  "ARITH_SUB" > "HOLLight.hollight.ARITH_SUB"
-  "ARITH_PRE" > "HOLLight.hollight.ARITH_PRE"
-  "ARITH_ODD" > "HOLLight.hollight.ARITH_ODD"
-  "ARITH_MULT" > "HOLLight.hollight.ARITH_MULT"
-  "ARITH_LT" > "HOLLight.hollight.ARITH_LT"
-  "ARITH_LE" > "HOLLight.hollight.ARITH_LE"
-  "ARITH_EXP" > "HOLLight.hollight.ARITH_EXP"
-  "ARITH_EVEN" > "HOLLight.hollight.ARITH_EVEN"
-  "ARITH_EQ" > "HOLLight.hollight.ARITH_EQ"
-  "ARITH_ADD" > "HOLLight.hollight.ARITH_ADD"
-  "APPEND_NIL" > "List.append_Nil2"
-  "APPEND_EQ_NIL" > "List.append_is_Nil_conv"
-  "APPEND_BUTLAST_LAST" > "List.append_butlast_last_id"
-  "APPEND_ASSOC" > "List.append_assoc"
-  "AND_FORALL_THM" > "HOL.all_conj_distrib"
-  "AND_CLAUSES" > "HOLLight.hollight.AND_CLAUSES"
-  "AND_ALL2" > "HOLLightList.AND_ALL2"
-  "AND_ALL" > "HOLLightList.AND_ALL"
-  "ALL_T" > "HOLLightList.ALL_T"
-  "ALL_MP" > "HOLLightList.ALL_MP"
-  "ALL_MEM" > "HOLLightList.ALL_MEM"
-  "ALL_IMP" > "HOLLightList.ALL_IMP"
-  "ALL_EL" > "List.list_all_length"
-  "ALL_APPEND" > "List.list_all_append"
-  "ALL2_MAP2" > "HOLLightList.ALL2_MAP2"
-  "ALL2_MAP" > "HOLLightList.ALL2_MAP"
-  "ALL2_AND_RIGHT" > "HOLLightList.ALL2_AND_RIGHT"
-  "ALL2_ALL" > "HOLLightList.ALL2_ALL"
-  "ALL2" > "HOLLightList.ALL2"
-  "ADMISSIBLE_UNGUARDED_PATTERN" > "HOLLight.hollight.ADMISSIBLE_UNGUARDED_PATTERN"
-  "ADMISSIBLE_SUM" > "HOLLight.hollight.ADMISSIBLE_SUM"
-  "ADMISSIBLE_SEQPATTERN" > "HOLLight.hollight.ADMISSIBLE_SEQPATTERN"
-  "ADMISSIBLE_RAND" > "HOLLight.hollight.ADMISSIBLE_RAND"
-  "ADMISSIBLE_NSUM" > "HOLLight.hollight.ADMISSIBLE_NSUM"
-  "ADMISSIBLE_NEST" > "HOLLight.hollight.ADMISSIBLE_NEST"
-  "ADMISSIBLE_MATCH_SEQPATTERN" > "HOLLight.hollight.ADMISSIBLE_MATCH_SEQPATTERN"
-  "ADMISSIBLE_MATCH" > "HOLLight.hollight.ADMISSIBLE_MATCH"
-  "ADMISSIBLE_MAP" > "HOLLight.hollight.ADMISSIBLE_MAP"
-  "ADMISSIBLE_LAMBDA" > "HOLLight.hollight.ADMISSIBLE_LAMBDA"
-  "ADMISSIBLE_IMP_SUPERADMISSIBLE" > "HOLLight.hollight.ADMISSIBLE_IMP_SUPERADMISSIBLE"
-  "ADMISSIBLE_GUARDED_PATTERN" > "HOLLight.hollight.ADMISSIBLE_GUARDED_PATTERN"
-  "ADMISSIBLE_CONST" > "HOLLight.hollight.ADMISSIBLE_CONST"
-  "ADMISSIBLE_COND" > "HOLLight.hollight.ADMISSIBLE_COND"
-  "ADMISSIBLE_COMB" > "HOLLight.hollight.ADMISSIBLE_COMB"
-  "ADMISSIBLE_BASE" > "HOLLight.hollight.ADMISSIBLE_BASE"
-  "ADD_SYM" > "Fields.linordered_field_class.sign_simps_43"
-  "ADD_SUC" > "Nat.add_Suc_right"
-  "ADD_SUBR2" > "Nat.diff_add_0"
-  "ADD_SUBR" > "HOLLight.hollight.ADD_SUBR"
-  "ADD_SUB2" > "Nat.diff_add_inverse"
-  "ADD_SUB" > "Nat.diff_add_inverse2"
-  "ADD_EQ_0" > "Nat.add_is_0"
-  "ADD_CLAUSES" > "HOLLight.hollight.ADD_CLAUSES"
-  "ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_44"
-  "ADD_AC" > "HOLLight.hollight.ADD_AC"
-  "ADD_0" > "Divides.arithmetic_simps_39"
-  "ADD1" > "Nat_Numeral.Suc_eq_plus1"
-  "ABS_SIMP" > "HOL.refl"
-  "ABSORPTION" > "HOLLight.hollight.ABSORPTION"
-  ">_c_def" > "HOLLight.hollight.>_c_def"
-  ">=_c_def" > "HOLLight.hollight.>=_c_def"
-  "=_c_def" > "HOLLight.hollight.=_c_def"
-  "<_c_def" > "HOLLight.hollight.<_c_def"
-  "<=_c_def" > "HOLLight.hollight.<=_c_def"
-  "$_def" > "HOLLight.hollight.$_def"
-
-ignore_thms
-  "WF_REC_CASES"
-  "TYDEF_sum"
-  "TYDEF_prod"
-  "TYDEF_option"
-  "TYDEF_num"
-  "TYDEF_list"
-  "TYDEF_1"
-  "SNDCART_PASTECART"
-  "SET_OF_LIST_OF_SET"
-  "REP_ABS_PAIR"
-  "RECURSION_CASEWISE_PAIRWISE"
-  "RECURSION_CASEWISE"
-  "PASTECART_FST_SND"
-  "PASTECART_EQ"
-  "MEM_LIST_OF_SET"
-  "MEM_ASSOC"
-  "LIST_OF_SET_PROPERTIES"
-  "LENGTH_LIST_OF_SET"
-  "HAS_SIZE_SET_OF_LIST"
-  "FSTCART_PASTECART"
-  "FORALL_PASTECART"
-  "FINITE_SET_OF_LIST"
-  "EX_MAP"
-  "EXISTS_PASTECART"
-  "EL_TL"
-  "DIMINDEX_HAS_SIZE_FINITE_SUM"
-  "DIMINDEX_FINITE_SUM"
-  "DEF_one"
-  "DEF_mk_pair"
-  "DEF_list_of_set"
-  "DEF__0"
-  "DEF_ZIP"
-  "DEF_TL"
-  "DEF_SUC"
-  "DEF_SOME"
-  "DEF_OUTR"
-  "DEF_OUTL"
-  "DEF_NONE"
-  "DEF_NIL"
-  "DEF_MAP2"
-  "DEF_ITLIST2"
-  "DEF_INR"
-  "DEF_INL"
-  "DEF_HD"
-  "DEF_CONS"
-  "DEF_ASSOC"
-  "DEF_,"
-  "CASEWISE_WORKS"
-  "CASEWISE_CASES"
-  "CASEWISE"
-  "CARD_SET_OF_LIST_LE"
-  "ALL_MAP"
-
-end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL_Light/Generated/HOLLight.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,7472 @@
+(* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
+
+theory HOLLight
+imports "../../HOL4Syntax" "../Compatibility"
+begin 
+
+setup_theory "~~/src/HOL/Import/HOL_Light/Generated" hollight
+
+consts
+  "_FALSITY_" :: "bool" ("'_FALSITY'_")
+
+defs
+  "_FALSITY__def": "_FALSITY_ == False"
+
+lemma DEF__FALSITY_: "_FALSITY_ = False"
+  by (import hollight DEF__FALSITY_)
+
+lemma CONJ_ACI: "(p & q) = (q & p) &
+((p & q) & r) = (p & q & r) &
+(p & q & r) = (q & p & r) & (p & p) = p & (p & p & q) = (p & q)"
+  by (import hollight CONJ_ACI)
+
+lemma DISJ_ACI: "(p | q) = (q | p) &
+((p | q) | r) = (p | q | r) &
+(p | q | r) = (q | p | r) & (p | p) = p & (p | p | q) = (p | q)"
+  by (import hollight DISJ_ACI)
+
+lemma IMP_CONJ_ALT: "(p & q --> r) = (q --> p --> r)"
+  by (import hollight IMP_CONJ_ALT)
+
+lemma EQ_CLAUSES: "(True = t) = t & (t = True) = t & (False = t) = (~ t) & (t = False) = (~ t)"
+  by (import hollight EQ_CLAUSES)
+
+lemma NOT_CLAUSES_WEAK: "(~ True) = False & (~ False) = True"
+  by (import hollight NOT_CLAUSES_WEAK)
+
+lemma AND_CLAUSES: "(True & t) = t &
+(t & True) = t & (False & t) = False & (t & False) = False & (t & t) = t"
+  by (import hollight AND_CLAUSES)
+
+lemma OR_CLAUSES: "(True | t) = True &
+(t | True) = True & (False | t) = t & (t | False) = t & (t | t) = t"
+  by (import hollight OR_CLAUSES)
+
+lemma IMP_CLAUSES: "(True --> t) = t &
+(t --> True) = True &
+(False --> t) = True & (t --> t) = True & (t --> False) = (~ t)"
+  by (import hollight IMP_CLAUSES)
+
+lemma IMP_EQ_CLAUSE: "((x::'q_851) = x --> (p::bool)) = p"
+  by (import hollight IMP_EQ_CLAUSE)
+
+lemma TRIV_EXISTS_AND_THM: "(EX x::'A. (P::bool) & (Q::bool)) = ((EX x::'A. P) & (EX x::'A. Q))"
+  by (import hollight TRIV_EXISTS_AND_THM)
+
+lemma TRIV_AND_EXISTS_THM: "((EX x::'A. (P::bool)) & (EX x::'A. (Q::bool))) = (EX x::'A. P & Q)"
+  by (import hollight TRIV_AND_EXISTS_THM)
+
+lemma TRIV_FORALL_OR_THM: "(ALL x::'A. (P::bool) | (Q::bool)) = ((ALL x::'A. P) | (ALL x::'A. Q))"
+  by (import hollight TRIV_FORALL_OR_THM)
+
+lemma TRIV_OR_FORALL_THM: "((ALL x::'A. (P::bool)) | (ALL x::'A. (Q::bool))) = (ALL x::'A. P | Q)"
+  by (import hollight TRIV_OR_FORALL_THM)
+
+lemma TRIV_FORALL_IMP_THM: "(ALL x::'A. (P::bool) --> (Q::bool)) = ((EX x::'A. P) --> (ALL x::'A. Q))"
+  by (import hollight TRIV_FORALL_IMP_THM)
+
+lemma TRIV_EXISTS_IMP_THM: "(EX x::'A. (P::bool) --> (Q::bool)) = ((ALL x::'A. P) --> (EX x::'A. Q))"
+  by (import hollight TRIV_EXISTS_IMP_THM)
+
+lemma EXISTS_UNIQUE_ALT: "Ex1 (P::'A => bool) = (EX x::'A. ALL y::'A. P y = (x = y))"
+  by (import hollight EXISTS_UNIQUE_ALT)
+
+lemma SELECT_UNIQUE: "(!!y::'A. (P::'A => bool) y = (y = (x::'A))) ==> Eps P = x"
+  by (import hollight SELECT_UNIQUE)
+
+lemma EXCLUDED_MIDDLE: "t | ~ t"
+  by (import hollight EXCLUDED_MIDDLE)
+
+lemma COND_CLAUSES: "(if True then x::'A else (xa::'A)) = x & (if False then x else xa) = xa"
+  by (import hollight COND_CLAUSES)
+
+lemma COND_EXPAND: "(if b then t1 else t2) = ((~ b | t1) & (b | t2))"
+  by (import hollight COND_EXPAND)
+
+lemma COND_RATOR: "(if b::bool then f::'A => 'B else (g::'A => 'B)) (x::'A) =
+(if b then f x else g x)"
+  by (import hollight COND_RATOR)
+
+lemma COND_ABS: "(%x::'A. if b::bool then (f::'A => 'B) x else (g::'A => 'B) x) =
+(if b then f else g)"
+  by (import hollight COND_ABS)
+
+lemma MONO_COND: "[| (A --> B) & (C --> D); if b then A else C |] ==> if b then B else D"
+  by (import hollight MONO_COND)
+
+lemma SKOLEM_THM: "(ALL x::'A. Ex ((P::'A => 'B => bool) x)) =
+(EX x::'A => 'B. ALL xa::'A. P xa (x xa))"
+  by (import hollight SKOLEM_THM)
+
+lemma UNIQUE_SKOLEM_ALT: "(ALL x::'A. Ex1 ((P::'A => 'B => bool) x)) =
+(EX f::'A => 'B. ALL (x::'A) y::'B. P x y = (f x = y))"
+  by (import hollight UNIQUE_SKOLEM_ALT)
+
+lemma COND_EQ_CLAUSE: "(if (x::'q_2963) = x then y::'q_2956 else (z::'q_2956)) = y"
+  by (import hollight COND_EQ_CLAUSE)
+
+lemma bool_RECURSION: "EX x::bool => 'A. x False = (a::'A) & x True = (b::'A)"
+  by (import hollight bool_RECURSION)
+
+lemma o_ASSOC: "(f::'C => 'D) o ((g::'B => 'C) o (h::'A => 'B)) = f o g o h"
+  by (import hollight o_ASSOC)
+
+lemma I_O_ID: "id o (f::'A => 'B) = f & f o id = f"
+  by (import hollight I_O_ID)
+
+lemma EXISTS_ONE_REP: "EX x. x"
+  by (import hollight EXISTS_ONE_REP)
+
+lemma one_axiom: "(f::'A => unit) = (x::'A => unit)"
+  by (import hollight one_axiom)
+
+lemma one_RECURSION: "EX x::unit => 'A. x () = (e::'A)"
+  by (import hollight one_RECURSION)
+
+lemma one_Axiom: "EX! fn::unit => 'A. fn () = (e::'A)"
+  by (import hollight one_Axiom)
+
+lemma th_cond: "(b = False --> x = x0) & (b = True --> x = x1) ==> x = (b & x1 | ~ b & x0)"
+  by (import hollight th_cond)
+
+definition
+  LET_END :: "'A => 'A"  where
+  "LET_END == %t::'A. t"
+
+lemma DEF_LET_END: "LET_END = (%t::'A. t)"
+  by (import hollight DEF_LET_END)
+
+consts
+  "_SEQPATTERN" :: "('q_4007 => 'q_4004 => bool)
+=> ('q_4007 => 'q_4004 => bool) => 'q_4007 => 'q_4004 => bool" ("'_SEQPATTERN")
+
+defs
+  "_SEQPATTERN_def": "_SEQPATTERN ==
+%(r::'q_4007 => 'q_4004 => bool) (s::'q_4007 => 'q_4004 => bool) x::'q_4007.
+   if Ex (r x) then r x else s x"
+
+lemma DEF__SEQPATTERN: "_SEQPATTERN =
+(%(r::'q_4007 => 'q_4004 => bool) (s::'q_4007 => 'q_4004 => bool)
+    x::'q_4007. if Ex (r x) then r x else s x)"
+  by (import hollight DEF__SEQPATTERN)
+
+consts
+  "_UNGUARDED_PATTERN" :: "bool => bool => bool" ("'_UNGUARDED'_PATTERN")
+
+defs
+  "_UNGUARDED_PATTERN_def": "_UNGUARDED_PATTERN == op &"
+
+lemma DEF__UNGUARDED_PATTERN: "_UNGUARDED_PATTERN = op &"
+  by (import hollight DEF__UNGUARDED_PATTERN)
+
+consts
+  "_GUARDED_PATTERN" :: "bool => bool => bool => bool" ("'_GUARDED'_PATTERN")
+
+defs
+  "_GUARDED_PATTERN_def": "_GUARDED_PATTERN == %p g r. p & g & r"
+
+lemma DEF__GUARDED_PATTERN: "_GUARDED_PATTERN = (%p g r. p & g & r)"
+  by (import hollight DEF__GUARDED_PATTERN)
+
+consts
+  "_MATCH" :: "'q_4049 => ('q_4049 => 'q_4053 => bool) => 'q_4053" ("'_MATCH")
+
+defs
+  "_MATCH_def": "_MATCH ==
+%(e::'q_4049) r::'q_4049 => 'q_4053 => bool.
+   if Ex1 (r e) then Eps (r e) else SOME z::'q_4053. False"
+
+lemma DEF__MATCH: "_MATCH =
+(%(e::'q_4049) r::'q_4049 => 'q_4053 => bool.
+    if Ex1 (r e) then Eps (r e) else SOME z::'q_4053. False)"
+  by (import hollight DEF__MATCH)
+
+consts
+  "_FUNCTION" :: "('q_4071 => 'q_4075 => bool) => 'q_4071 => 'q_4075" ("'_FUNCTION")
+
+defs
+  "_FUNCTION_def": "_FUNCTION ==
+%(r::'q_4071 => 'q_4075 => bool) x::'q_4071.
+   if Ex1 (r x) then Eps (r x) else SOME z::'q_4075. False"
+
+lemma DEF__FUNCTION: "_FUNCTION =
+(%(r::'q_4071 => 'q_4075 => bool) x::'q_4071.
+    if Ex1 (r x) then Eps (r x) else SOME z::'q_4075. False)"
+  by (import hollight DEF__FUNCTION)
+
+lemma PAIR_EXISTS_THM: "EX (x::'A => 'B => bool) (a::'A) b::'B. x = Pair_Rep a b"
+  by (import hollight PAIR_EXISTS_THM)
+
+lemma pair_RECURSION: "EX x::'A * 'B => 'C.
+   ALL (a0::'A) a1::'B. x (a0, a1) = (PAIR'::'A => 'B => 'C) a0 a1"
+  by (import hollight pair_RECURSION)
+
+definition
+  UNCURRY :: "('A => 'B => 'C) => 'A * 'B => 'C"  where
+  "UNCURRY == %(u::'A => 'B => 'C) ua::'A * 'B. u (fst ua) (snd ua)"
+
+lemma DEF_UNCURRY: "UNCURRY = (%(u::'A => 'B => 'C) ua::'A * 'B. u (fst ua) (snd ua))"
+  by (import hollight DEF_UNCURRY)
+
+definition
+  PASSOC :: "(('A * 'B) * 'C => 'D) => 'A * 'B * 'C => 'D"  where
+  "PASSOC ==
+%(u::('A * 'B) * 'C => 'D) ua::'A * 'B * 'C.
+   u ((fst ua, fst (snd ua)), snd (snd ua))"
+
+lemma DEF_PASSOC: "PASSOC =
+(%(u::('A * 'B) * 'C => 'D) ua::'A * 'B * 'C.
+    u ((fst ua, fst (snd ua)), snd (snd ua)))"
+  by (import hollight DEF_PASSOC)
+
+lemma LAMBDA_PAIR_THM: "(x::'q_4547 * 'q_4546 => 'q_4539) =
+(SOME f::'q_4547 * 'q_4546 => 'q_4539.
+    ALL (xa::'q_4547) y::'q_4546. f (xa, y) = x (xa, y))"
+  by (import hollight LAMBDA_PAIR_THM)
+
+lemma FORALL_PAIRED_THM: "All (SOME f::'q_4576 * 'q_4575 => bool.
+        ALL (x::'q_4576) y::'q_4575.
+           f (x, y) = (P::'q_4576 => 'q_4575 => bool) x y) =
+(ALL x::'q_4576. All (P x))"
+  by (import hollight FORALL_PAIRED_THM)
+
+lemma EXISTS_PAIRED_THM: "Ex (SOME f::'q_4612 * 'q_4611 => bool.
+       ALL (x::'q_4612) y::'q_4611.
+          f (x, y) = (P::'q_4612 => 'q_4611 => bool) x y) =
+(EX x::'q_4612. Ex (P x))"
+  by (import hollight EXISTS_PAIRED_THM)
+
+lemma FORALL_TRIPLED_THM: "All (SOME f::'q_4649 * 'q_4648 * 'q_4647 => bool.
+        ALL (x::'q_4649) (y::'q_4648) z::'q_4647.
+           f (x, y, z) = (P::'q_4649 => 'q_4648 => 'q_4647 => bool) x y z) =
+(ALL (x::'q_4649) y::'q_4648. All (P x y))"
+  by (import hollight FORALL_TRIPLED_THM)
+
+lemma EXISTS_TRIPLED_THM: "Ex (SOME f::'q_4695 * 'q_4694 * 'q_4693 => bool.
+       ALL (x::'q_4695) (y::'q_4694) z::'q_4693.
+          f (x, y, z) = (P::'q_4695 => 'q_4694 => 'q_4693 => bool) x y z) =
+(EX (x::'q_4695) y::'q_4694. Ex (P x y))"
+  by (import hollight EXISTS_TRIPLED_THM)
+
+lemma IND_SUC_0_EXISTS: "EX (x::ind => ind) z::ind.
+   (ALL (x1::ind) x2::ind. (x x1 = x x2) = (x1 = x2)) &
+   (ALL xa::ind. x xa ~= z)"
+  by (import hollight IND_SUC_0_EXISTS)
+
+definition
+  IND_SUC :: "ind => ind"  where
+  "IND_SUC ==
+SOME f. EX z. (ALL x1 x2. (f x1 = f x2) = (x1 = x2)) & (ALL x. f x ~= z)"
+
+lemma DEF_IND_SUC: "IND_SUC =
+(SOME f. EX z. (ALL x1 x2. (f x1 = f x2) = (x1 = x2)) & (ALL x. f x ~= z))"
+  by (import hollight DEF_IND_SUC)
+
+definition
+  IND_0 :: "ind"  where
+  "IND_0 ==
+SOME z.
+   (ALL x1 x2. (IND_SUC x1 = IND_SUC x2) = (x1 = x2)) &
+   (ALL x. IND_SUC x ~= z)"
+
+lemma DEF_IND_0: "IND_0 =
+(SOME z.
+    (ALL x1 x2. (IND_SUC x1 = IND_SUC x2) = (x1 = x2)) &
+    (ALL x. IND_SUC x ~= z))"
+  by (import hollight DEF_IND_0)
+
+definition
+  NUM_REP :: "ind => bool"  where
+  "NUM_REP ==
+%a. ALL NUM_REP'.
+       (ALL a.
+           a = IND_0 | (EX i. a = IND_SUC i & NUM_REP' i) -->
+           NUM_REP' a) -->
+       NUM_REP' a"
+
+lemma DEF_NUM_REP: "NUM_REP =
+(%a. ALL NUM_REP'.
+        (ALL a.
+            a = IND_0 | (EX i. a = IND_SUC i & NUM_REP' i) -->
+            NUM_REP' a) -->
+        NUM_REP' a)"
+  by (import hollight DEF_NUM_REP)
+
+lemma num_RECURSION_STD: "EX fn::nat => 'Z.
+   fn (0::nat) = (e::'Z) &
+   (ALL n::nat. fn (Suc n) = (f::nat => 'Z => 'Z) n (fn n))"
+  by (import hollight num_RECURSION_STD)
+
+lemma ADD_CLAUSES: "(ALL x::nat. (0::nat) + x = x) &
+(ALL x::nat. x + (0::nat) = x) &
+(ALL (x::nat) xa::nat. Suc x + xa = Suc (x + xa)) &
+(ALL (x::nat) xa::nat. x + Suc xa = Suc (x + xa))"
+  by (import hollight ADD_CLAUSES)
+
+lemma ADD_AC: "(m::nat) + (n::nat) = n + m &
+m + n + (p::nat) = m + (n + p) & m + (n + p) = n + (m + p)"
+  by (import hollight ADD_AC)
+
+lemma EQ_ADD_LCANCEL_0: "((m::nat) + (n::nat) = m) = (n = (0::nat))"
+  by (import hollight EQ_ADD_LCANCEL_0)
+
+lemma EQ_ADD_RCANCEL_0: "((x::nat) + (xa::nat) = xa) = (x = (0::nat))"
+  by (import hollight EQ_ADD_RCANCEL_0)
+
+lemma BIT1: "2 * x + 1 = Suc (x + x)"
+  by (import hollight BIT1)
+
+lemma BIT1_THM: "2 * x + 1 = Suc (x + x)"
+  by (import hollight BIT1_THM)
+
+lemma TWO: "2 = Suc 1"
+  by (import hollight TWO)
+
+lemma MULT_CLAUSES: "(ALL x::nat. (0::nat) * x = (0::nat)) &
+(ALL x::nat. x * (0::nat) = (0::nat)) &
+(ALL x::nat. (1::nat) * x = x) &
+(ALL x::nat. x * (1::nat) = x) &
+(ALL (x::nat) xa::nat. Suc x * xa = x * xa + xa) &
+(ALL (x::nat) xa::nat. x * Suc xa = x + x * xa)"
+  by (import hollight MULT_CLAUSES)
+
+lemma MULT_AC: "(m::nat) * (n::nat) = n * m &
+m * n * (p::nat) = m * (n * p) & m * (n * p) = n * (m * p)"
+  by (import hollight MULT_AC)
+
+lemma EXP_EQ_1: "((x::nat) ^ (n::nat) = (1::nat)) = (x = (1::nat) | n = (0::nat))"
+  by (import hollight EXP_EQ_1)
+
+lemma LT_ANTISYM: "~ ((m::nat) < (n::nat) & n < m)"
+  by (import hollight LT_ANTISYM)
+
+lemma LET_ANTISYM: "~ ((m::nat) <= (n::nat) & n < m)"
+  by (import hollight LET_ANTISYM)
+
+lemma LTE_ANTISYM: "~ ((x::nat) < (xa::nat) & xa <= x)"
+  by (import hollight LTE_ANTISYM)
+
+lemma LT_CASES: "(m::nat) < (n::nat) | n < m | m = n"
+  by (import hollight LT_CASES)
+
+lemma LTE_CASES: "(x::nat) < (xa::nat) | xa <= x"
+  by (import hollight LTE_CASES)
+
+lemma LE_1: "(ALL x::nat. x ~= (0::nat) --> (0::nat) < x) &
+(ALL x::nat. x ~= (0::nat) --> (1::nat) <= x) &
+(ALL x>0::nat. x ~= (0::nat)) &
+(ALL x>0::nat. (1::nat) <= x) &
+(ALL x>=1::nat. (0::nat) < x) & (ALL x>=1::nat. x ~= (0::nat))"
+  by (import hollight LE_1)
+
+lemma LT_EXISTS: "(m < n) = (EX d. n = m + Suc d)"
+  by (import hollight LT_EXISTS)
+
+lemma LT_ADD: "((m::nat) < m + (n::nat)) = ((0::nat) < n)"
+  by (import hollight LT_ADD)
+
+lemma LT_ADDR: "((xa::nat) < (x::nat) + xa) = ((0::nat) < x)"
+  by (import hollight LT_ADDR)
+
+lemma LT_LMULT: "(m::nat) ~= (0::nat) & (n::nat) < (p::nat) ==> m * n < m * p"
+  by (import hollight LT_LMULT)
+
+lemma LE_MULT_LCANCEL: "((m::nat) * (n::nat) <= m * (p::nat)) = (m = (0::nat) | n <= p)"
+  by (import hollight LE_MULT_LCANCEL)
+
+lemma LE_MULT_RCANCEL: "((x::nat) * (xb::nat) <= (xa::nat) * xb) = (x <= xa | xb = (0::nat))"
+  by (import hollight LE_MULT_RCANCEL)
+
+lemma LT_MULT_LCANCEL: "((m::nat) * (n::nat) < m * (p::nat)) = (m ~= (0::nat) & n < p)"
+  by (import hollight LT_MULT_LCANCEL)
+
+lemma LT_MULT_RCANCEL: "((x::nat) * (xb::nat) < (xa::nat) * xb) = (x < xa & xb ~= (0::nat))"
+  by (import hollight LT_MULT_RCANCEL)
+
+lemma LT_MULT2: "(m::nat) < (n::nat) & (p::nat) < (q::nat) ==> m * p < n * q"
+  by (import hollight LT_MULT2)
+
+lemma WLOG_LE: "(ALL (m::nat) n::nat. (P::nat => nat => bool) m n = P n m) &
+(ALL (m::nat) n::nat. m <= n --> P m n)
+==> P (m::nat) (x::nat)"
+  by (import hollight WLOG_LE)
+
+lemma WLOG_LT: "(ALL m::nat. (P::nat => nat => bool) m m) &
+(ALL (m::nat) n::nat. P m n = P n m) &
+(ALL (m::nat) n::nat. m < n --> P m n)
+==> P (m::nat) (x::nat)"
+  by (import hollight WLOG_LT)
+
+lemma num_WOP: "Ex (P::nat => bool) = (EX n::nat. P n & (ALL m<n. ~ P m))"
+  by (import hollight num_WOP)
+
+lemma num_MAX: "(Ex (P::nat => bool) & (EX M::nat. ALL x::nat. P x --> x <= M)) =
+(EX m::nat. P m & (ALL x::nat. P x --> x <= m))"
+  by (import hollight num_MAX)
+
+lemma NOT_EVEN: "odd (n::nat) = odd n"
+  by (import hollight NOT_EVEN)
+
+lemma NOT_ODD: "(~ odd (n::nat)) = even n"
+  by (import hollight NOT_ODD)
+
+lemma EVEN_OR_ODD: "even (n::nat) | odd n"
+  by (import hollight EVEN_OR_ODD)
+
+lemma EVEN_AND_ODD: "~ (even (x::nat) & odd x)"
+  by (import hollight EVEN_AND_ODD)
+
+lemma EVEN_EXP: "even ((m::nat) ^ (n::nat)) = (even m & n ~= (0::nat))"
+  by (import hollight EVEN_EXP)
+
+lemma ODD_MULT: "odd ((m::nat) * (n::nat)) = (odd m & odd n)"
+  by (import hollight ODD_MULT)
+
+lemma ODD_EXP: "odd ((m::nat) ^ (n::nat)) = (odd m | n = (0::nat))"
+  by (import hollight ODD_EXP)
+
+lemma EVEN_DOUBLE: "even ((2::nat) * (n::nat))"
+  by (import hollight EVEN_DOUBLE)
+
+lemma ODD_DOUBLE: "odd (Suc (2 * x))"
+  by (import hollight ODD_DOUBLE)
+
+lemma EVEN_EXISTS_LEMMA: "(even n --> (EX m. n = 2 * m)) & (odd n --> (EX m. n = Suc (2 * m)))"
+  by (import hollight EVEN_EXISTS_LEMMA)
+
+lemma EVEN_ODD_DECOMPOSITION: "(EX (k::nat) m::nat. odd m & (n::nat) = (2::nat) ^ k * m) = (n ~= (0::nat))"
+  by (import hollight EVEN_ODD_DECOMPOSITION)
+
+lemma SUB_0: "(0::nat) - (x::nat) = (0::nat) & x - (0::nat) = x"
+  by (import hollight SUB_0)
+
+lemma SUB_PRESUC: "Suc m - n - Suc 0 = m - n"
+  by (import hollight SUB_PRESUC)
+
+lemma ADD_SUBR: "(xa::nat) - ((x::nat) + xa) = (0::nat)"
+  by (import hollight ADD_SUBR)
+
+lemma EVEN_SUB: "even ((m::nat) - (n::nat)) = (m <= n | even m = even n)"
+  by (import hollight EVEN_SUB)
+
+lemma ODD_SUB: "odd ((x::nat) - (xa::nat)) = (xa < x & odd x ~= odd xa)"
+  by (import hollight ODD_SUB)
+
+lemma EXP_LT_0: "((0::nat) < (xa::nat) ^ (x::nat)) = (xa ~= (0::nat) | x = (0::nat))"
+  by (import hollight EXP_LT_0)
+
+lemma LT_EXP: "((x::nat) ^ (m::nat) < x ^ (n::nat)) =
+((2::nat) <= x & m < n | x = (0::nat) & m ~= (0::nat) & n = (0::nat))"
+  by (import hollight LT_EXP)
+
+lemma LE_EXP: "((x::nat) ^ (m::nat) <= x ^ (n::nat)) =
+(if x = (0::nat) then m = (0::nat) --> n = (0::nat)
+ else x = (1::nat) | m <= n)"
+  by (import hollight LE_EXP)
+
+lemma EQ_EXP: "((x::nat) ^ (m::nat) = x ^ (n::nat)) =
+(if x = (0::nat) then (m = (0::nat)) = (n = (0::nat))
+ else x = (1::nat) | m = n)"
+  by (import hollight EQ_EXP)
+
+lemma EXP_MONO_LE_IMP: "(x::nat) <= (xa::nat) ==> x ^ (xb::nat) <= xa ^ xb"
+  by (import hollight EXP_MONO_LE_IMP)
+
+lemma EXP_MONO_LT_IMP: "(x::nat) < (y::nat) & (n::nat) ~= (0::nat) ==> x ^ n < y ^ n"
+  by (import hollight EXP_MONO_LT_IMP)
+
+lemma EXP_MONO_LE: "((x::nat) ^ (n::nat) <= (y::nat) ^ n) = (x <= y | n = (0::nat))"
+  by (import hollight EXP_MONO_LE)
+
+lemma EXP_MONO_LT: "((x::nat) ^ (xb::nat) < (xa::nat) ^ xb) = (x < xa & xb ~= (0::nat))"
+  by (import hollight EXP_MONO_LT)
+
+lemma EXP_MONO_EQ: "((x::nat) ^ (xb::nat) = (xa::nat) ^ xb) = (x = xa | xb = (0::nat))"
+  by (import hollight EXP_MONO_EQ)
+
+lemma DIVMOD_EXIST: "(n::nat) ~= (0::nat) ==> EX (q::nat) r::nat. (m::nat) = q * n + r & r < n"
+  by (import hollight DIVMOD_EXIST)
+
+lemma DIVMOD_EXIST_0: "EX (x::nat) xa::nat.
+   if (n::nat) = (0::nat) then x = (0::nat) & xa = (m::nat)
+   else m = x * n + xa & xa < n"
+  by (import hollight DIVMOD_EXIST_0)
+
+lemma DIVISION: "(n::nat) ~= (0::nat) ==> (m::nat) = m div n * n + m mod n & m mod n < n"
+  by (import hollight DIVISION)
+
+lemma DIVMOD_UNIQ_LEMMA: "((m::nat) = (q1::nat) * (n::nat) + (r1::nat) & r1 < n) &
+m = (q2::nat) * n + (r2::nat) & r2 < n
+==> q1 = q2 & r1 = r2"
+  by (import hollight DIVMOD_UNIQ_LEMMA)
+
+lemma DIVMOD_UNIQ: "(m::nat) = (q::nat) * (n::nat) + (r::nat) & r < n
+==> m div n = q & m mod n = r"
+  by (import hollight DIVMOD_UNIQ)
+
+lemma MOD_UNIQ: "(m::nat) = (q::nat) * (n::nat) + (r::nat) & r < n ==> m mod n = r"
+  by (import hollight MOD_UNIQ)
+
+lemma DIV_UNIQ: "(m::nat) = (q::nat) * (n::nat) + (r::nat) & r < n ==> m div n = q"
+  by (import hollight DIV_UNIQ)
+
+lemma MOD_EQ: "(m::nat) = (n::nat) + (q::nat) * (p::nat) ==> m mod p = n mod p"
+  by (import hollight MOD_EQ)
+
+lemma DIV_LE: "(n::nat) ~= (0::nat) ==> (m::nat) div n <= m"
+  by (import hollight DIV_LE)
+
+lemma DIV_MUL_LE: "(n::nat) * ((m::nat) div n) <= m"
+  by (import hollight DIV_MUL_LE)
+
+lemma MOD_MOD: "(n::nat) * (p::nat) ~= (0::nat) ==> (m::nat) mod (n * p) mod n = m mod n"
+  by (import hollight MOD_MOD)
+
+lemma MOD_MOD_REFL: "(n::nat) ~= (0::nat) ==> (m::nat) mod n mod n = m mod n"
+  by (import hollight MOD_MOD_REFL)
+
+lemma DIV_MULT2: "(x::nat) * (xb::nat) ~= (0::nat) ==> x * (xa::nat) div (x * xb) = xa div xb"
+  by (import hollight DIV_MULT2)
+
+lemma MOD_MULT2: "(x::nat) * (xb::nat) ~= (0::nat)
+==> x * (xa::nat) mod (x * xb) = x * (xa mod xb)"
+  by (import hollight MOD_MULT2)
+
+lemma MOD_EXISTS: "(EX q::nat. (m::nat) = (n::nat) * q) =
+(if n = (0::nat) then m = (0::nat) else m mod n = (0::nat))"
+  by (import hollight MOD_EXISTS)
+
+lemma LE_RDIV_EQ: "(a::nat) ~= (0::nat) ==> ((n::nat) <= (b::nat) div a) = (a * n <= b)"
+  by (import hollight LE_RDIV_EQ)
+
+lemma LE_LDIV_EQ: "(a::nat) ~= (0::nat)
+==> ((b::nat) div a <= (n::nat)) = (b < a * (n + (1::nat)))"
+  by (import hollight LE_LDIV_EQ)
+
+lemma LE_LDIV: "(x::nat) ~= (0::nat) & (xa::nat) <= x * (xb::nat) ==> xa div x <= xb"
+  by (import hollight LE_LDIV)
+
+lemma DIV_MONO: "(p::nat) ~= (0::nat) & (m::nat) <= (n::nat) ==> m div p <= n div p"
+  by (import hollight DIV_MONO)
+
+lemma DIV_MONO_LT: "(p::nat) ~= (0::nat) & (m::nat) + p <= (n::nat) ==> m div p < n div p"
+  by (import hollight DIV_MONO_LT)
+
+lemma DIV_EQ_0: "(n::nat) ~= (0::nat) ==> ((m::nat) div n = (0::nat)) = (m < n)"
+  by (import hollight DIV_EQ_0)
+
+lemma MOD_EQ_0: "(n::nat) ~= (0::nat)
+==> ((m::nat) mod n = (0::nat)) = (EX q::nat. m = q * n)"
+  by (import hollight MOD_EQ_0)
+
+lemma EVEN_MOD: "even (n::nat) = (n mod (2::nat) = (0::nat))"
+  by (import hollight EVEN_MOD)
+
+lemma ODD_MOD: "odd (n::nat) = (n mod (2::nat) = (1::nat))"
+  by (import hollight ODD_MOD)
+
+lemma MOD_MULT_RMOD: "(n::nat) ~= (0::nat) ==> (m::nat) * ((p::nat) mod n) mod n = m * p mod n"
+  by (import hollight MOD_MULT_RMOD)
+
+lemma MOD_MULT_LMOD: "(xa::nat) ~= (0::nat) ==> (x::nat) mod xa * (xb::nat) mod xa = x * xb mod xa"
+  by (import hollight MOD_MULT_LMOD)
+
+lemma MOD_MULT_MOD2: "(xa::nat) ~= (0::nat)
+==> (x::nat) mod xa * ((xb::nat) mod xa) mod xa = x * xb mod xa"
+  by (import hollight MOD_MULT_MOD2)
+
+lemma MOD_EXP_MOD: "(n::nat) ~= (0::nat) ==> ((m::nat) mod n) ^ (p::nat) mod n = m ^ p mod n"
+  by (import hollight MOD_EXP_MOD)
+
+lemma MOD_ADD_MOD: "(n::nat) ~= (0::nat)
+==> ((a::nat) mod n + (b::nat) mod n) mod n = (a + b) mod n"
+  by (import hollight MOD_ADD_MOD)
+
+lemma DIV_ADD_MOD: "(n::nat) ~= (0::nat)
+==> (((a::nat) + (b::nat)) mod n = a mod n + b mod n) =
+    ((a + b) div n = a div n + b div n)"
+  by (import hollight DIV_ADD_MOD)
+
+lemma MOD_LE: "(n::nat) ~= (0::nat) ==> (m::nat) mod n <= m"
+  by (import hollight MOD_LE)
+
+lemma DIV_MONO2: "(p::nat) ~= (0::nat) & p <= (m::nat) ==> (n::nat) div m <= n div p"
+  by (import hollight DIV_MONO2)
+
+lemma DIV_LE_EXCLUSION: "(b::nat) ~= (0::nat) & b * (c::nat) < ((a::nat) + (1::nat)) * (d::nat)
+==> c div d <= a div b"
+  by (import hollight DIV_LE_EXCLUSION)
+
+lemma DIV_EQ_EXCLUSION: "(b::nat) * (c::nat) < ((a::nat) + (1::nat)) * (d::nat) &
+a * d < (c + (1::nat)) * b
+==> a div b = c div d"
+  by (import hollight DIV_EQ_EXCLUSION)
+
+lemma MULT_DIV_LE: "(p::nat) ~= (0::nat) ==> (m::nat) * ((n::nat) div p) <= m * n div p"
+  by (import hollight MULT_DIV_LE)
+
+lemma DIV_DIV: "(xa::nat) * (xb::nat) ~= (0::nat)
+==> (x::nat) div xa div xb = x div (xa * xb)"
+  by (import hollight DIV_DIV)
+
+lemma DIV_MOD: "(xa::nat) * (xb::nat) ~= (0::nat)
+==> (x::nat) div xa mod xb = x mod (xa * xb) div xa"
+  by (import hollight DIV_MOD)
+
+lemma PRE_ELIM_THM: "P (n - Suc 0) = (ALL m. n = Suc m | m = 0 & n = 0 --> P m)"
+  by (import hollight PRE_ELIM_THM)
+
+lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) =
+(ALL d::nat. a = b + d | a < b & d = (0::nat) --> P d)"
+  by (import hollight SUB_ELIM_THM)
+
+lemma DIVMOD_ELIM_THM: "(P::nat => nat => bool) ((m::nat) div (n::nat)) (m mod n) =
+(ALL (x::nat) xa::nat.
+    n = (0::nat) & x = (0::nat) & xa = m | m = x * n + xa & xa < n -->
+    P x xa)"
+  by (import hollight DIVMOD_ELIM_THM)
+
+definition
+  minimal :: "(nat => bool) => nat"  where
+  "minimal == %u. SOME n. u n & (ALL m<n. ~ u m)"
+
+lemma DEF_minimal: "minimal = (%u. SOME n. u n & (ALL m<n. ~ u m))"
+  by (import hollight DEF_minimal)
+
+lemma MINIMAL: "Ex P = (P (minimal P) & (ALL x<minimal P. ~ P x))"
+  by (import hollight MINIMAL)
+
+lemma TRANSITIVE_STEPWISE_LT_EQ: "(!!x y z. R x y & R y z ==> R x z)
+==> (ALL m n. m < n --> R m n) = (ALL n. R n (Suc n))"
+  by (import hollight TRANSITIVE_STEPWISE_LT_EQ)
+
+lemma TRANSITIVE_STEPWISE_LT: "[| (ALL x y z. R x y & R y z --> R x z) & (ALL n. R n (Suc n)); m < n |]
+==> R m n"
+  by (import hollight TRANSITIVE_STEPWISE_LT)
+
+lemma TRANSITIVE_STEPWISE_LE_EQ: "(ALL x. R x x) & (ALL x y z. R x y & R y z --> R x z)
+==> (ALL m n. m <= n --> R m n) = (ALL n. R n (Suc n))"
+  by (import hollight TRANSITIVE_STEPWISE_LE_EQ)
+
+lemma TRANSITIVE_STEPWISE_LE: "[| (ALL x. R x x) &
+   (ALL x y z. R x y & R y z --> R x z) & (ALL n. R n (Suc n));
+   m <= n |]
+==> R m n"
+  by (import hollight TRANSITIVE_STEPWISE_LE)
+
+lemma WF_EQ: "wfP (u_556::'A => 'A => bool) =
+(ALL P::'A => bool.
+    Ex P = (EX x::'A. P x & (ALL y::'A. u_556 y x --> ~ P y)))"
+  by (import hollight WF_EQ)
+
+lemma WF_IND: "wfP (u_556::'A => 'A => bool) =
+(ALL P::'A => bool.
+    (ALL x::'A. (ALL y::'A. u_556 y x --> P y) --> P x) --> All P)"
+  by (import hollight WF_IND)
+
+lemma WF_DCHAIN: "wfP (u_556::'A => 'A => bool) =
+(~ (EX s::nat => 'A. ALL n::nat. u_556 (s (Suc n)) (s n)))"
+  by (import hollight WF_DCHAIN)
+
+lemma WF_UREC: "[| wfP (u_556::'A => 'A => bool);
+   !!(f::'A => 'B) (g::'A => 'B) x::'A.
+      (!!z::'A. u_556 z x ==> f z = g z)
+      ==> (H::('A => 'B) => 'A => 'B) f x = H g x;
+   (ALL x::'A. (f::'A => 'B) x = H f x) &
+   (ALL x::'A. (g::'A => 'B) x = H g x) |]
+==> f = g"
+  by (import hollight WF_UREC)
+
+lemma WF_UREC_WF: "(!!(H::('A => bool) => 'A => bool) (f::'A => bool) g::'A => bool.
+    [| !!(f::'A => bool) (g::'A => bool) x::'A.
+          (!!z::'A. (u_556::'A => 'A => bool) z x ==> f z = g z)
+          ==> H f x = H g x;
+       (ALL x::'A. f x = H f x) & (ALL x::'A. g x = H g x) |]
+    ==> f = g)
+==> wfP u_556"
+  by (import hollight WF_UREC_WF)
+
+lemma WF_REC_INVARIANT: "[| wfP (u_556::'A => 'A => bool);
+   !!(f::'A => 'B) (g::'A => 'B) x::'A.
+      (!!z::'A. u_556 z x ==> f z = g z & (S::'A => 'B => bool) z (f z))
+      ==> (H::('A => 'B) => 'A => 'B) f x = H g x & S x (H f x) |]
+==> EX f::'A => 'B. ALL x::'A. f x = H f x"
+  by (import hollight WF_REC_INVARIANT)
+
+lemma WF_REC: "[| wfP (u_556::'A => 'A => bool);
+   !!(f::'A => 'B) (g::'A => 'B) x::'A.
+      (!!z::'A. u_556 z x ==> f z = g z)
+      ==> (H::('A => 'B) => 'A => 'B) f x = H g x |]
+==> EX f::'A => 'B. ALL x::'A. f x = H f x"
+  by (import hollight WF_REC)
+
+lemma WF_REC_WF: "(!!H::('A => nat) => 'A => nat.
+    (!!(f::'A => nat) (g::'A => nat) x::'A.
+        (!!z::'A. (u_556::'A => 'A => bool) z x ==> f z = g z)
+        ==> H f x = H g x)
+    ==> EX f::'A => nat. ALL x::'A. f x = H f x)
+==> wfP u_556"
+  by (import hollight WF_REC_WF)
+
+lemma WF_EREC: "[| wfP (u_556::'A => 'A => bool);
+   !!(f::'A => 'B) (g::'A => 'B) x::'A.
+      (!!z::'A. u_556 z x ==> f z = g z)
+      ==> (H::('A => 'B) => 'A => 'B) f x = H g x |]
+==> EX! f::'A => 'B. ALL x::'A. f x = H f x"
+  by (import hollight WF_EREC)
+
+lemma WF_SUBSET: "(ALL (x::'A) y::'A.
+    (u_556::'A => 'A => bool) x y --> (u_670::'A => 'A => bool) x y) &
+wfP u_670
+==> wfP u_556"
+  by (import hollight WF_SUBSET)
+
+lemma WF_MEASURE_GEN: "wfP (u_556::'B => 'B => bool)
+==> wfP (%(x::'A) x'::'A. u_556 ((m::'A => 'B) x) (m x'))"
+  by (import hollight WF_MEASURE_GEN)
+
+lemma WF_LEX_DEPENDENT: "wfP (R::'A => 'A => bool) & (ALL x::'A. wfP ((S::'A => 'B => 'B => bool) x))
+==> wfP (SOME f::'A * 'B => 'A * 'B => bool.
+            ALL (r1::'A) s1::'B.
+               f (r1, s1) =
+               (SOME f::'A * 'B => bool.
+                   ALL (r2::'A) s2::'B.
+                      f (r2, s2) = (R r1 r2 | r1 = r2 & S r1 s1 s2)))"
+  by (import hollight WF_LEX_DEPENDENT)
+
+lemma WF_LEX: "wfP (x::'A => 'A => bool) & wfP (xa::'B => 'B => bool)
+==> wfP (SOME f::'A * 'B => 'A * 'B => bool.
+            ALL (r1::'A) s1::'B.
+               f (r1, s1) =
+               (SOME f::'A * 'B => bool.
+                   ALL (r2::'A) s2::'B.
+                      f (r2, s2) = (x r1 r2 | r1 = r2 & xa s1 s2)))"
+  by (import hollight WF_LEX)
+
+lemma WF_POINTWISE: "wfP (u_556::'A => 'A => bool) & wfP (u_670::'B => 'B => bool)
+==> wfP (SOME f::'A * 'B => 'A * 'B => bool.
+            ALL (x1::'A) y1::'B.
+               f (x1, y1) =
+               (SOME f::'A * 'B => bool.
+                   ALL (x2::'A) y2::'B.
+                      f (x2, y2) = (u_556 x1 x2 & u_670 y1 y2)))"
+  by (import hollight WF_POINTWISE)
+
+lemma WF_num: "(wfP::(nat => nat => bool) => bool) (op <::nat => nat => bool)"
+  by (import hollight WF_num)
+
+lemma WF_REC_num: "(!!(f::nat => 'A) (g::nat => 'A) x::nat.
+    (!!z::nat. z < x ==> f z = g z)
+    ==> (H::(nat => 'A) => nat => 'A) f x = H g x)
+==> EX f::nat => 'A. ALL x::nat. f x = H f x"
+  by (import hollight WF_REC_num)
+
+lemma WF_MEASURE: "wfP (%(a::'A) b::'A. (a, b) : measure (m::'A => nat))"
+  by (import hollight WF_MEASURE)
+
+lemma MEASURE_LE: "(ALL x::'q_12099.
+    (x, a::'q_12099) : measure (m::'q_12099 => nat) -->
+    (x, b::'q_12099) : measure m) =
+(m a <= m b)"
+  by (import hollight MEASURE_LE)
+
+lemma WF_REFL: "wfP (u_556::'A => 'A => bool) ==> ~ u_556 (x::'A) x"
+  by (import hollight WF_REFL)
+
+lemma WF_REC_TAIL: "EX f::'A => 'B.
+   ALL x::'A.
+      f x =
+      (if (P::'A => bool) x then f ((g::'A => 'A) x) else (h::'A => 'B) x)"
+  by (import hollight WF_REC_TAIL)
+
+lemma WF_REC_TAIL_GENERAL: "wfP (u_556::'A => 'A => bool) &
+(ALL (f::'A => 'B) (g::'A => 'B) x::'A.
+    (ALL z::'A. u_556 z x --> f z = g z) -->
+    (P::('A => 'B) => 'A => bool) f x = P g x &
+    (G::('A => 'B) => 'A => 'A) f x = G g x &
+    (H::('A => 'B) => 'A => 'B) f x = H g x) &
+(ALL (f::'A => 'B) (g::'A => 'B) x::'A.
+    (ALL z::'A. u_556 z x --> f z = g z) --> H f x = H g x) &
+(ALL (f::'A => 'B) (x::'A) y::'A. P f x & u_556 y (G f x) --> u_556 y x)
+==> EX f::'A => 'B. ALL x::'A. f x = (if P f x then f (G f x) else H f x)"
+  by (import hollight WF_REC_TAIL_GENERAL)
+
+lemma ARITH_ZERO: "(0::nat) = (0::nat) & (0::nat) = (0::nat)"
+  by (import hollight ARITH_ZERO)
+
+lemma ARITH_SUC: "(ALL x. Suc x = Suc x) &
+Suc 0 = 1 &
+(ALL x. Suc (2 * x) = 2 * x + 1) & (ALL x. Suc (2 * x + 1) = 2 * Suc x)"
+  by (import hollight ARITH_SUC)
+
+lemma ARITH_PRE: "(ALL x. x - Suc 0 = x - Suc 0) &
+0 - Suc 0 = 0 &
+(ALL x. 2 * x - Suc 0 = (if x = 0 then 0 else 2 * (x - Suc 0) + 1)) &
+(ALL x. 2 * x + 1 - Suc 0 = 2 * x)"
+  by (import hollight ARITH_PRE)
+
+lemma ARITH_ADD: "(ALL (x::nat) xa::nat. x + xa = x + xa) &
+(0::nat) + (0::nat) = (0::nat) &
+(ALL x::nat. (0::nat) + (2::nat) * x = (2::nat) * x) &
+(ALL x::nat.
+    (0::nat) + ((2::nat) * x + (1::nat)) = (2::nat) * x + (1::nat)) &
+(ALL x::nat. (2::nat) * x + (0::nat) = (2::nat) * x) &
+(ALL x::nat. (2::nat) * x + (1::nat) + (0::nat) = (2::nat) * x + (1::nat)) &
+(ALL (x::nat) xa::nat. (2::nat) * x + (2::nat) * xa = (2::nat) * (x + xa)) &
+(ALL (x::nat) xa::nat.
+    (2::nat) * x + ((2::nat) * xa + (1::nat)) =
+    (2::nat) * (x + xa) + (1::nat)) &
+(ALL (x::nat) xa::nat.
+    (2::nat) * x + (1::nat) + (2::nat) * xa =
+    (2::nat) * (x + xa) + (1::nat)) &
+(ALL (x::nat) xa::nat.
+    (2::nat) * x + (1::nat) + ((2::nat) * xa + (1::nat)) =
+    (2::nat) * Suc (x + xa))"
+  by (import hollight ARITH_ADD)
+
+lemma ARITH_MULT: "(ALL (x::nat) xa::nat. x * xa = x * xa) &
+(0::nat) * (0::nat) = (0::nat) &
+(ALL x::nat. (0::nat) * ((2::nat) * x) = (0::nat)) &
+(ALL x::nat. (0::nat) * ((2::nat) * x + (1::nat)) = (0::nat)) &
+(ALL x::nat. (2::nat) * x * (0::nat) = (0::nat)) &
+(ALL x::nat. ((2::nat) * x + (1::nat)) * (0::nat) = (0::nat)) &
+(ALL (x::nat) xa::nat.
+    (2::nat) * x * ((2::nat) * xa) = (2::nat) * ((2::nat) * (x * xa))) &
+(ALL (x::nat) xa::nat.
+    (2::nat) * x * ((2::nat) * xa + (1::nat)) =
+    (2::nat) * x + (2::nat) * ((2::nat) * (x * xa))) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat)) * ((2::nat) * xa) =
+    (2::nat) * xa + (2::nat) * ((2::nat) * (x * xa))) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat)) * ((2::nat) * xa + (1::nat)) =
+    (2::nat) * x + (1::nat) +
+    ((2::nat) * xa + (2::nat) * ((2::nat) * (x * xa))))"
+  by (import hollight ARITH_MULT)
+
+lemma ARITH_EXP: "(ALL (x::nat) xa::nat. x ^ xa = x ^ xa) &
+(0::nat) ^ (0::nat) = (1::nat) &
+(ALL m::nat. ((2::nat) * m) ^ (0::nat) = (1::nat)) &
+(ALL m::nat. ((2::nat) * m + (1::nat)) ^ (0::nat) = (1::nat)) &
+(ALL n::nat. (0::nat) ^ ((2::nat) * n) = (0::nat) ^ n * (0::nat) ^ n) &
+(ALL (m::nat) n::nat.
+    ((2::nat) * m) ^ ((2::nat) * n) =
+    ((2::nat) * m) ^ n * ((2::nat) * m) ^ n) &
+(ALL (m::nat) n::nat.
+    ((2::nat) * m + (1::nat)) ^ ((2::nat) * n) =
+    ((2::nat) * m + (1::nat)) ^ n * ((2::nat) * m + (1::nat)) ^ n) &
+(ALL n::nat. (0::nat) ^ ((2::nat) * n + (1::nat)) = (0::nat)) &
+(ALL (m::nat) n::nat.
+    ((2::nat) * m) ^ ((2::nat) * n + (1::nat)) =
+    (2::nat) * m * (((2::nat) * m) ^ n * ((2::nat) * m) ^ n)) &
+(ALL (m::nat) n::nat.
+    ((2::nat) * m + (1::nat)) ^ ((2::nat) * n + (1::nat)) =
+    ((2::nat) * m + (1::nat)) *
+    (((2::nat) * m + (1::nat)) ^ n * ((2::nat) * m + (1::nat)) ^ n))"
+  by (import hollight ARITH_EXP)
+
+lemma ARITH_EVEN: "(ALL x::nat. even x = even x) &
+even (0::nat) = True &
+(ALL x::nat. even ((2::nat) * x) = True) &
+(ALL x::nat. even ((2::nat) * x + (1::nat)) = False)"
+  by (import hollight ARITH_EVEN)
+
+lemma ARITH_ODD: "(ALL x::nat. odd x = odd x) &
+odd (0::nat) = False &
+(ALL x::nat. odd ((2::nat) * x) = False) &
+(ALL x::nat. odd ((2::nat) * x + (1::nat)) = True)"
+  by (import hollight ARITH_ODD)
+
+lemma ARITH_LE: "(ALL (x::nat) xa::nat. (x <= xa) = (x <= xa)) &
+((0::nat) <= (0::nat)) = True &
+(ALL x::nat. ((2::nat) * x <= (0::nat)) = (x <= (0::nat))) &
+(ALL x::nat. ((2::nat) * x + (1::nat) <= (0::nat)) = False) &
+(ALL x::nat. ((0::nat) <= (2::nat) * x) = True) &
+(ALL x::nat. ((0::nat) <= (2::nat) * x + (1::nat)) = True) &
+(ALL (x::nat) xa::nat. ((2::nat) * x <= (2::nat) * xa) = (x <= xa)) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x <= (2::nat) * xa + (1::nat)) = (x <= xa)) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat) <= (2::nat) * xa) = (x < xa)) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat) <= (2::nat) * xa + (1::nat)) = (x <= xa))"
+  by (import hollight ARITH_LE)
+
+lemma ARITH_LT: "(ALL (x::nat) xa::nat. (x < xa) = (x < xa)) &
+((0::nat) < (0::nat)) = False &
+(ALL x::nat. ((2::nat) * x < (0::nat)) = False) &
+(ALL x::nat. ((2::nat) * x + (1::nat) < (0::nat)) = False) &
+(ALL x::nat. ((0::nat) < (2::nat) * x) = ((0::nat) < x)) &
+(ALL x::nat. ((0::nat) < (2::nat) * x + (1::nat)) = True) &
+(ALL (x::nat) xa::nat. ((2::nat) * x < (2::nat) * xa) = (x < xa)) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x < (2::nat) * xa + (1::nat)) = (x <= xa)) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat) < (2::nat) * xa) = (x < xa)) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat) < (2::nat) * xa + (1::nat)) = (x < xa))"
+  by (import hollight ARITH_LT)
+
+lemma ARITH_EQ: "(ALL (x::nat) xa::nat. (x = xa) = (x = xa)) &
+((0::nat) = (0::nat)) = True &
+(ALL x::nat. ((2::nat) * x = (0::nat)) = (x = (0::nat))) &
+(ALL x::nat. ((2::nat) * x + (1::nat) = (0::nat)) = False) &
+(ALL x::nat. ((0::nat) = (2::nat) * x) = ((0::nat) = x)) &
+(ALL x::nat. ((0::nat) = (2::nat) * x + (1::nat)) = False) &
+(ALL (x::nat) xa::nat. ((2::nat) * x = (2::nat) * xa) = (x = xa)) &
+(ALL (x::nat) xa::nat. ((2::nat) * x = (2::nat) * xa + (1::nat)) = False) &
+(ALL (x::nat) xa::nat. ((2::nat) * x + (1::nat) = (2::nat) * xa) = False) &
+(ALL (x::nat) xa::nat.
+    ((2::nat) * x + (1::nat) = (2::nat) * xa + (1::nat)) = (x = xa))"
+  by (import hollight ARITH_EQ)
+
+lemma ARITH_SUB: "(ALL (x::nat) xa::nat. x - xa = x - xa) &
+(0::nat) - (0::nat) = (0::nat) &
+(ALL x::nat. (0::nat) - (2::nat) * x = (0::nat)) &
+(ALL x::nat. (0::nat) - ((2::nat) * x + (1::nat)) = (0::nat)) &
+(ALL x::nat. (2::nat) * x - (0::nat) = (2::nat) * x) &
+(ALL x::nat. (2::nat) * x + (1::nat) - (0::nat) = (2::nat) * x + (1::nat)) &
+(ALL (m::nat) n::nat. (2::nat) * m - (2::nat) * n = (2::nat) * (m - n)) &
+(ALL (m::nat) n::nat.
+    (2::nat) * m - ((2::nat) * n + (1::nat)) =
+    (2::nat) * (m - n) - Suc (0::nat)) &
+(ALL (m::nat) n::nat.
+    (2::nat) * m + (1::nat) - (2::nat) * n =
+    (if n <= m then (2::nat) * (m - n) + (1::nat) else (0::nat))) &
+(ALL (m::nat) n::nat.
+    (2::nat) * m + (1::nat) - ((2::nat) * n + (1::nat)) =
+    (2::nat) * (m - n))"
+  by (import hollight ARITH_SUB)
+
+lemma right_th: "(s::nat) * ((2::nat) * (x::nat) + (1::nat)) = s + (2::nat) * (s * x)"
+  by (import hollight right_th)
+
+lemma SEMIRING_PTHS: "(ALL (x::'A) (y::'A) z::'A.
+    (add::'A => 'A => 'A) x (add y z) = add (add x y) z) &
+(ALL (x::'A) y::'A. add x y = add y x) &
+(ALL x::'A. add (r0::'A) x = x) &
+(ALL (x::'A) (y::'A) z::'A.
+    (mul::'A => 'A => 'A) x (mul y z) = mul (mul x y) z) &
+(ALL (x::'A) y::'A. mul x y = mul y x) &
+(ALL x::'A. mul (r1::'A) x = x) &
+(ALL x::'A. mul r0 x = r0) &
+(ALL (x::'A) (y::'A) z::'A. mul x (add y z) = add (mul x y) (mul x z)) &
+(ALL x::'A. (pwr::'A => nat => 'A) x (0::nat) = r1) &
+(ALL (x::'A) n::nat. pwr x (Suc n) = mul x (pwr x n))
+==> mul r1 (x::'A) = x &
+    add (mul (a::'A) (m::'A)) (mul (b::'A) m) = mul (add a b) m &
+    add (mul a m) m = mul (add a r1) m &
+    add m (mul a m) = mul (add a r1) m &
+    add m m = mul (add r1 r1) m &
+    mul r0 m = r0 &
+    add r0 a = a &
+    add a r0 = a &
+    mul a b = mul b a &
+    mul (add a b) (c::'A) = add (mul a c) (mul b c) &
+    mul r0 a = r0 &
+    mul a r0 = r0 &
+    mul r1 a = a &
+    mul a r1 = a &
+    mul (mul (lx::'A) (ly::'A)) (mul (rx::'A) (ry::'A)) =
+    mul (mul lx rx) (mul ly ry) &
+    mul (mul lx ly) (mul rx ry) = mul lx (mul ly (mul rx ry)) &
+    mul (mul lx ly) (mul rx ry) = mul rx (mul (mul lx ly) ry) &
+    mul (mul lx ly) rx = mul (mul lx rx) ly &
+    mul (mul lx ly) rx = mul lx (mul ly rx) &
+    mul lx rx = mul rx lx &
+    mul lx (mul rx ry) = mul (mul lx rx) ry &
+    mul lx (mul rx ry) = mul rx (mul lx ry) &
+    add (add a b) (add c (d::'A)) = add (add a c) (add b d) &
+    add (add a b) c = add a (add b c) &
+    add a (add c d) = add c (add a d) &
+    add (add a b) c = add (add a c) b &
+    add a c = add c a &
+    add a (add c d) = add (add a c) d &
+    mul (pwr x (p::nat)) (pwr x (q::nat)) = pwr x (p + q) &
+    mul x (pwr x q) = pwr x (Suc q) &
+    mul (pwr x q) x = pwr x (Suc q) &
+    mul x x = pwr x (2::nat) &
+    pwr (mul x (y::'A)) q = mul (pwr x q) (pwr y q) &
+    pwr (pwr x p) q = pwr x (p * q) &
+    pwr x (0::nat) = r1 &
+    pwr x (1::nat) = x &
+    mul x (add y (z::'A)) = add (mul x y) (mul x z) &
+    pwr x (Suc q) = mul x (pwr x q)"
+  by (import hollight SEMIRING_PTHS)
+
+lemma NUM_INTEGRAL_LEMMA: "(w::nat) = (x::nat) + (d::nat) & (y::nat) = (z::nat) + (e::nat)
+==> (w * y + x * z = w * z + x * y) = (w = x | y = z)"
+  by (import hollight NUM_INTEGRAL_LEMMA)
+
+lemma NUM_INTEGRAL: "(ALL x::nat. (0::nat) * x = (0::nat)) &
+(ALL (x::nat) (xa::nat) xb::nat. (x + xa = x + xb) = (xa = xb)) &
+(ALL (w::nat) (x::nat) (y::nat) z::nat.
+    (w * y + x * z = w * z + x * y) = (w = x | y = z))"
+  by (import hollight NUM_INTEGRAL)
+
+lemma INJ_INVERSE2: "(!!(x1::'A) (y1::'B) (x2::'A) y2::'B.
+    ((P::'A => 'B => 'C) x1 y1 = P x2 y2) = (x1 = x2 & y1 = y2))
+==> EX (x::'C => 'A) Y::'C => 'B.
+       ALL (xa::'A) y::'B. x (P xa y) = xa & Y (P xa y) = y"
+  by (import hollight INJ_INVERSE2)
+
+definition
+  NUMPAIR :: "nat => nat => nat"  where
+  "NUMPAIR == %u ua. 2 ^ u * (2 * ua + 1)"
+
+lemma DEF_NUMPAIR: "NUMPAIR = (%u ua. 2 ^ u * (2 * ua + 1))"
+  by (import hollight DEF_NUMPAIR)
+
+lemma NUMPAIR_INJ_LEMMA: "NUMPAIR x xa = NUMPAIR xb xc ==> x = xb"
+  by (import hollight NUMPAIR_INJ_LEMMA)
+
+lemma NUMPAIR_INJ: "(NUMPAIR x1 y1 = NUMPAIR x2 y2) = (x1 = x2 & y1 = y2)"
+  by (import hollight NUMPAIR_INJ)
+
+definition
+  NUMFST :: "nat => nat"  where
+  "NUMFST == SOME X. EX Y. ALL x y. X (NUMPAIR x y) = x & Y (NUMPAIR x y) = y"
+
+lemma DEF_NUMFST: "NUMFST = (SOME X. EX Y. ALL x y. X (NUMPAIR x y) = x & Y (NUMPAIR x y) = y)"
+  by (import hollight DEF_NUMFST)
+
+definition
+  NUMSND :: "nat => nat"  where
+  "NUMSND == SOME Y. ALL x y. NUMFST (NUMPAIR x y) = x & Y (NUMPAIR x y) = y"
+
+lemma DEF_NUMSND: "NUMSND = (SOME Y. ALL x y. NUMFST (NUMPAIR x y) = x & Y (NUMPAIR x y) = y)"
+  by (import hollight DEF_NUMSND)
+
+definition
+  NUMSUM :: "bool => nat => nat"  where
+  "NUMSUM == %u ua. if u then Suc (2 * ua) else 2 * ua"
+
+lemma DEF_NUMSUM: "NUMSUM = (%u ua. if u then Suc (2 * ua) else 2 * ua)"
+  by (import hollight DEF_NUMSUM)
+
+lemma NUMSUM_INJ: "(NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)"
+  by (import hollight NUMSUM_INJ)
+
+definition
+  NUMLEFT :: "nat => bool"  where
+  "NUMLEFT == SOME X. EX Y. ALL x y. X (NUMSUM x y) = x & Y (NUMSUM x y) = y"
+
+lemma DEF_NUMLEFT: "NUMLEFT = (SOME X. EX Y. ALL x y. X (NUMSUM x y) = x & Y (NUMSUM x y) = y)"
+  by (import hollight DEF_NUMLEFT)
+
+definition
+  NUMRIGHT :: "nat => nat"  where
+  "NUMRIGHT == SOME Y. ALL x y. NUMLEFT (NUMSUM x y) = x & Y (NUMSUM x y) = y"
+
+lemma DEF_NUMRIGHT: "NUMRIGHT = (SOME Y. ALL x y. NUMLEFT (NUMSUM x y) = x & Y (NUMSUM x y) = y)"
+  by (import hollight DEF_NUMRIGHT)
+
+definition
+  INJN :: "nat => nat => 'A => bool"  where
+  "INJN == %(u::nat) (n::nat) a::'A. n = u"
+
+lemma DEF_INJN: "INJN = (%(u::nat) (n::nat) a::'A. n = u)"
+  by (import hollight DEF_INJN)
+
+lemma INJN_INJ: "(op =::bool => bool => bool)
+ ((op =::(nat => 'A::type => bool) => (nat => 'A::type => bool) => bool)
+   ((INJN::nat => nat => 'A::type => bool) (n1::nat))
+   ((INJN::nat => nat => 'A::type => bool) (n2::nat)))
+ ((op =::nat => nat => bool) n1 n2)"
+  by (import hollight INJN_INJ)
+
+definition
+  INJA :: "'A => nat => 'A => bool"  where
+  "INJA == %(u::'A) (n::nat) b::'A. b = u"
+
+lemma DEF_INJA: "INJA = (%(u::'A) (n::nat) b::'A. b = u)"
+  by (import hollight DEF_INJA)
+
+lemma INJA_INJ: "(INJA (a1::'A) = INJA (a2::'A)) = (a1 = a2)"
+  by (import hollight INJA_INJ)
+
+definition
+  INJF :: "(nat => nat => 'A => bool) => nat => 'A => bool"  where
+  "INJF == %(u::nat => nat => 'A => bool) n::nat. u (NUMFST n) (NUMSND n)"
+
+lemma DEF_INJF: "INJF = (%(u::nat => nat => 'A => bool) n::nat. u (NUMFST n) (NUMSND n))"
+  by (import hollight DEF_INJF)
+
+lemma INJF_INJ: "(INJF (f1::nat => nat => 'A => bool) =
+ INJF (f2::nat => nat => 'A => bool)) =
+(f1 = f2)"
+  by (import hollight INJF_INJ)
+
+definition
+  INJP :: "(nat => 'A => bool) => (nat => 'A => bool) => nat => 'A => bool"  where
+  "INJP ==
+%(u::nat => 'A => bool) (ua::nat => 'A => bool) (n::nat) a::'A.
+   if NUMLEFT n then u (NUMRIGHT n) a else ua (NUMRIGHT n) a"
+
+lemma DEF_INJP: "INJP =
+(%(u::nat => 'A => bool) (ua::nat => 'A => bool) (n::nat) a::'A.
+    if NUMLEFT n then u (NUMRIGHT n) a else ua (NUMRIGHT n) a)"
+  by (import hollight DEF_INJP)
+
+lemma INJP_INJ: "(INJP (f1::nat => 'A => bool) (f2::nat => 'A => bool) =
+ INJP (f1'::nat => 'A => bool) (f2'::nat => 'A => bool)) =
+(f1 = f1' & f2 = f2')"
+  by (import hollight INJP_INJ)
+
+definition
+  ZCONSTR :: "nat => 'A => (nat => nat => 'A => bool) => nat => 'A => bool"  where
+  "ZCONSTR ==
+%(u::nat) (ua::'A) ub::nat => nat => 'A => bool.
+   INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub))"
+
+lemma DEF_ZCONSTR: "ZCONSTR =
+(%(u::nat) (ua::'A) ub::nat => nat => 'A => bool.
+    INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub)))"
+  by (import hollight DEF_ZCONSTR)
+
+definition
+  ZBOT :: "nat => 'A => bool"  where
+  "ZBOT == INJP (INJN (0::nat)) (SOME z::nat => 'A => bool. True)"
+
+lemma DEF_ZBOT: "ZBOT = INJP (INJN (0::nat)) (SOME z::nat => 'A => bool. True)"
+  by (import hollight DEF_ZBOT)
+
+lemma ZCONSTR_ZBOT: "ZCONSTR (x::nat) (xa::'A) (xb::nat => nat => 'A => bool) ~= ZBOT"
+  by (import hollight ZCONSTR_ZBOT)
+
+definition
+  ZRECSPACE :: "(nat => 'A => bool) => bool"  where
+  "ZRECSPACE ==
+%a::nat => 'A => bool.
+   ALL ZRECSPACE'::(nat => 'A => bool) => bool.
+      (ALL a::nat => 'A => bool.
+          a = ZBOT |
+          (EX (c::nat) (i::'A) r::nat => nat => 'A => bool.
+              a = ZCONSTR c i r & (ALL n::nat. ZRECSPACE' (r n))) -->
+          ZRECSPACE' a) -->
+      ZRECSPACE' a"
+
+lemma DEF_ZRECSPACE: "ZRECSPACE =
+(%a::nat => 'A => bool.
+    ALL ZRECSPACE'::(nat => 'A => bool) => bool.
+       (ALL a::nat => 'A => bool.
+           a = ZBOT |
+           (EX (c::nat) (i::'A) r::nat => nat => 'A => bool.
+               a = ZCONSTR c i r & (ALL n::nat. ZRECSPACE' (r n))) -->
+           ZRECSPACE' a) -->
+       ZRECSPACE' a)"
+  by (import hollight DEF_ZRECSPACE)
+
+typedef (open) 'a recspace = "Collect ZRECSPACE :: (nat \<Rightarrow> 'a \<Rightarrow> bool) set" 
+  morphisms "_dest_rec" "_mk_rec"
+  apply (rule light_ex_imp_nonempty [where t="ZBOT"])
+  by (import hollight TYDEF_recspace)
+
+syntax
+  "_dest_rec" :: _ ("'_dest'_rec")
+
+syntax
+  "_mk_rec" :: _ ("'_mk'_rec")
+
+lemmas "TYDEF_recspace_@intern" = typedef_hol2hollight 
+  [where a="a :: 'A recspace" and r=r ,
+   OF type_definition_recspace]
+
+definition
+  BOTTOM :: "'A recspace"  where
+  "BOTTOM == _mk_rec ZBOT"
+
+lemma DEF_BOTTOM: "BOTTOM = _mk_rec ZBOT"
+  by (import hollight DEF_BOTTOM)
+
+definition
+  CONSTR :: "nat => 'A => (nat => 'A recspace) => 'A recspace"  where
+  "CONSTR ==
+%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace.
+   _mk_rec (ZCONSTR u ua (%n::nat. _dest_rec (ub n)))"
+
+lemma DEF_CONSTR: "CONSTR =
+(%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace.
+    _mk_rec (ZCONSTR u ua (%n::nat. _dest_rec (ub n))))"
+  by (import hollight DEF_CONSTR)
+
+lemma MK_REC_INJ: "[| _mk_rec (x::nat => 'A::type => bool) =
+   _mk_rec (y::nat => 'A::type => bool);
+   ZRECSPACE x & ZRECSPACE y |]
+==> x = y"
+  by (import hollight MK_REC_INJ)
+
+lemma CONSTR_BOT: "CONSTR (c::nat) (i::'A) (r::nat => 'A recspace) ~= BOTTOM"
+  by (import hollight CONSTR_BOT)
+
+lemma CONSTR_INJ: "(CONSTR (c1::nat) (i1::'A) (r1::nat => 'A recspace) =
+ CONSTR (c2::nat) (i2::'A) (r2::nat => 'A recspace)) =
+(c1 = c2 & i1 = i2 & r1 = r2)"
+  by (import hollight CONSTR_INJ)
+
+lemma CONSTR_IND: "(P::'A recspace => bool) BOTTOM &
+(ALL (c::nat) (i::'A) r::nat => 'A recspace.
+    (ALL n::nat. P (r n)) --> P (CONSTR c i r))
+==> P (x::'A recspace)"
+  by (import hollight CONSTR_IND)
+
+lemma CONSTR_REC: "EX f::'A recspace => 'B.
+   ALL (c::nat) (i::'A) r::nat => 'A recspace.
+      f (CONSTR c i r) =
+      (Fn::nat => 'A => (nat => 'A recspace) => (nat => 'B) => 'B) c i r
+       (%n::nat. f (r n))"
+  by (import hollight CONSTR_REC)
+
+definition
+  FCONS :: "'A => (nat => 'A) => nat => 'A"  where
+  "FCONS ==
+SOME FCONS::'A => (nat => 'A) => nat => 'A.
+   (ALL (a::'A) f::nat => 'A. FCONS a f (0::nat) = a) &
+   (ALL (a::'A) (f::nat => 'A) n::nat. FCONS a f (Suc n) = f n)"
+
+lemma DEF_FCONS: "FCONS =
+(SOME FCONS::'A => (nat => 'A) => nat => 'A.
+    (ALL (a::'A) f::nat => 'A. FCONS a f (0::nat) = a) &
+    (ALL (a::'A) (f::nat => 'A) n::nat. FCONS a f (Suc n) = f n))"
+  by (import hollight DEF_FCONS)
+
+lemma FCONS_UNDO: "(f::nat => 'A) = FCONS (f (0::nat)) (f o Suc)"
+  by (import hollight FCONS_UNDO)
+
+definition
+  FNIL :: "nat => 'A"  where
+  "FNIL == %u::nat. SOME x::'A. True"
+
+lemma DEF_FNIL: "FNIL = (%u::nat. SOME x::'A. True)"
+  by (import hollight DEF_FNIL)
+
+definition
+  ISO :: "('A => 'B) => ('B => 'A) => bool"  where
+  "ISO ==
+%(u::'A => 'B) ua::'B => 'A.
+   (ALL x::'B. u (ua x) = x) & (ALL y::'A. ua (u y) = y)"
+
+lemma DEF_ISO: "ISO =
+(%(u::'A => 'B) ua::'B => 'A.
+    (ALL x::'B. u (ua x) = x) & (ALL y::'A. ua (u y) = y))"
+  by (import hollight DEF_ISO)
+
+lemma ISO_REFL: "ISO (%x::'A. x) (%x::'A. x)"
+  by (import hollight ISO_REFL)
+
+lemma ISO_FUN: "ISO (f::'A => 'A') (f'::'A' => 'A) & ISO (g::'B => 'B') (g'::'B' => 'B)
+==> ISO (%(h::'A => 'B) a'::'A'. g (h (f' a')))
+     (%(h::'A' => 'B') a::'A. g' (h (f a)))"
+  by (import hollight ISO_FUN)
+
+lemma ISO_USAGE: "ISO (f::'q_17485 => 'q_17482) (g::'q_17482 => 'q_17485)
+==> (ALL P::'q_17485 => bool. All P = (ALL x::'q_17482. P (g x))) &
+    (ALL P::'q_17485 => bool. Ex P = (EX x::'q_17482. P (g x))) &
+    (ALL (a::'q_17485) b::'q_17482. (a = g b) = (f a = b))"
+  by (import hollight ISO_USAGE)
+
+typedef (open) char = "{a. ALL char'.
+       (ALL a.
+           (EX a0 a1 a2 a3 a4 a5 a6 a7.
+               a =
+               CONSTR (NUMERAL 0) (a0 :: bool, a1 :: bool, a2 :: bool, a3 :: bool, a4 :: bool, a5 :: bool, a6 :: bool, a7:: bool)
+                (%n. BOTTOM)) -->
+           char' a) -->
+       char' a}"
+  morphisms "_dest_char" "_mk_char"
+  apply (rule light_ex_imp_nonempty [where t="CONSTR (NUMERAL 0) (a0, a1, a2, a3, a4, a5, a6, a7) (%n. BOTTOM)"])
+  by (import hollight TYDEF_char)
+
+syntax
+  "_dest_char" :: _ ("'_dest'_char")
+
+syntax
+  "_mk_char" :: _ ("'_mk'_char")
+
+lemmas "TYDEF_char_@intern" = typedef_hol2hollight 
+  [where a="a :: hollight.char" and r=r ,
+   OF type_definition_char]
+
+consts
+  "_11937" :: "bool
+=> bool => bool => bool => bool => bool => bool => bool => hollight.char" ("'_11937")
+
+defs
+  "_11937_def": "_11937 ==
+%(a0::bool) (a1::bool) (a2::bool) (a3::bool) (a4::bool) (a5::bool)
+   (a6::bool) a7::bool.
+   _mk_char
+    (CONSTR (0::nat) (a0, a1, a2, a3, a4, a5, a6, a7) (%n::nat. BOTTOM))"
+
+lemma DEF__11937: "_11937 =
+(%(a0::bool) (a1::bool) (a2::bool) (a3::bool) (a4::bool) (a5::bool)
+    (a6::bool) a7::bool.
+    _mk_char
+     (CONSTR (0::nat) (a0, a1, a2, a3, a4, a5, a6, a7) (%n::nat. BOTTOM)))"
+  by (import hollight DEF__11937)
+
+definition
+  ASCII :: "bool
+=> bool => bool => bool => bool => bool => bool => bool => hollight.char"  where
+  "ASCII == _11937"
+
+lemma DEF_ASCII: "ASCII = _11937"
+  by (import hollight DEF_ASCII)
+
+consts
+  dist :: "nat * nat => nat" 
+
+defs
+  dist_def: "hollight.dist == %u. fst u - snd u + (snd u - fst u)"
+
+lemma DEF_dist: "hollight.dist = (%u. fst u - snd u + (snd u - fst u))"
+  by (import hollight DEF_dist)
+
+lemma DIST_REFL: "hollight.dist (x, x) = 0"
+  by (import hollight DIST_REFL)
+
+lemma DIST_LZERO: "hollight.dist (0, x) = x"
+  by (import hollight DIST_LZERO)
+
+lemma DIST_RZERO: "hollight.dist (x, 0) = x"
+  by (import hollight DIST_RZERO)
+
+lemma DIST_SYM: "hollight.dist (x, xa) = hollight.dist (xa, x)"
+  by (import hollight DIST_SYM)
+
+lemma DIST_LADD: "hollight.dist (x + xb, x + xa) = hollight.dist (xb, xa)"
+  by (import hollight DIST_LADD)
+
+lemma DIST_RADD: "hollight.dist (x + xa, xb + xa) = hollight.dist (x, xb)"
+  by (import hollight DIST_RADD)
+
+lemma DIST_LADD_0: "hollight.dist (x + xa, x) = xa"
+  by (import hollight DIST_LADD_0)
+
+lemma DIST_RADD_0: "hollight.dist (x, x + xa) = xa"
+  by (import hollight DIST_RADD_0)
+
+lemma DIST_LMUL: "x * hollight.dist (xa, xb) = hollight.dist (x * xa, x * xb)"
+  by (import hollight DIST_LMUL)
+
+lemma DIST_RMUL: "hollight.dist (x, xa) * xb = hollight.dist (x * xb, xa * xb)"
+  by (import hollight DIST_RMUL)
+
+lemma DIST_EQ_0: "(hollight.dist (x, xa) = 0) = (x = xa)"
+  by (import hollight DIST_EQ_0)
+
+lemma DIST_ELIM_THM: "P (hollight.dist (x, y)) =
+(ALL d. (x = y + d --> P d) & (y = x + d --> P d))"
+  by (import hollight DIST_ELIM_THM)
+
+lemma DIST_LE_CASES: "(hollight.dist (m, n) <= p) = (m <= n + p & n <= m + p)"
+  by (import hollight DIST_LE_CASES)
+
+lemma DIST_TRIANGLE_LE: "hollight.dist (m, n) + hollight.dist (n, p) <= q
+==> hollight.dist (m, p) <= q"
+  by (import hollight DIST_TRIANGLE_LE)
+
+lemma DIST_TRIANGLES_LE: "hollight.dist (m, n) <= r & hollight.dist (p, q) <= s
+==> hollight.dist (m, p) <= hollight.dist (n, q) + (r + s)"
+  by (import hollight DIST_TRIANGLES_LE)
+
+lemma BOUNDS_LINEAR: "(ALL n::nat. (A::nat) * n <= (B::nat) * n + (C::nat)) = (A <= B)"
+  by (import hollight BOUNDS_LINEAR)
+
+lemma BOUNDS_LINEAR_0: "(ALL n::nat. (A::nat) * n <= (B::nat)) = (A = (0::nat))"
+  by (import hollight BOUNDS_LINEAR_0)
+
+lemma BOUNDS_DIVIDED: "(EX B::nat. ALL n::nat. (P::nat => nat) n <= B) =
+(EX (x::nat) B::nat. ALL n::nat. n * P n <= x * n + B)"
+  by (import hollight BOUNDS_DIVIDED)
+
+lemma BOUNDS_NOTZERO: "(P::nat => nat => nat) (0::nat) (0::nat) = (0::nat) &
+(ALL (m::nat) n::nat. P m n <= (A::nat) * (m + n) + (B::nat))
+==> EX x::nat. ALL (m::nat) n::nat. P m n <= x * (m + n)"
+  by (import hollight BOUNDS_NOTZERO)
+
+lemma BOUNDS_IGNORE: "(EX B::nat. ALL i::nat. (P::nat => nat) i <= (Q::nat => nat) i + B) =
+(EX (x::nat) N::nat. ALL i>=N. P i <= Q i + x)"
+  by (import hollight BOUNDS_IGNORE)
+
+definition
+  is_nadd :: "(nat => nat) => bool"  where
+  "is_nadd ==
+%u. EX B. ALL m n. hollight.dist (m * u n, n * u m) <= B * (m + n)"
+
+lemma DEF_is_nadd: "is_nadd =
+(%u. EX B. ALL m n. hollight.dist (m * u n, n * u m) <= B * (m + n))"
+  by (import hollight DEF_is_nadd)
+
+lemma is_nadd_0: "is_nadd (%n. 0)"
+  by (import hollight is_nadd_0)
+
+typedef (open) nadd = "Collect is_nadd"  morphisms "dest_nadd" "mk_nadd"
+  apply (rule light_ex_imp_nonempty[where t="%n. NUMERAL 0"])
+  by (import hollight TYDEF_nadd)
+
+syntax
+  dest_nadd :: _ 
+
+syntax
+  mk_nadd :: _ 
+
+lemmas "TYDEF_nadd_@intern" = typedef_hol2hollight 
+  [where a="a :: nadd" and r=r ,
+   OF type_definition_nadd]
+
+lemma NADD_CAUCHY: "EX xa.
+   ALL xb xc.
+      hollight.dist (xb * dest_nadd x xc, xc * dest_nadd x xb)
+      <= xa * (xb + xc)"
+  by (import hollight NADD_CAUCHY)
+
+lemma NADD_BOUND: "EX xa B. ALL n. dest_nadd x n <= xa * n + B"
+  by (import hollight NADD_BOUND)
+
+lemma NADD_MULTIPLICATIVE: "EX xa.
+   ALL m n.
+      hollight.dist (dest_nadd x (m * n), m * dest_nadd x n) <= xa * m + xa"
+  by (import hollight NADD_MULTIPLICATIVE)
+
+lemma NADD_ADDITIVE: "EX xa.
+   ALL m n.
+      hollight.dist (dest_nadd x (m + n), dest_nadd x m + dest_nadd x n)
+      <= xa"
+  by (import hollight NADD_ADDITIVE)
+
+lemma NADD_SUC: "EX xa. ALL n. hollight.dist (dest_nadd x (Suc n), dest_nadd x n) <= xa"
+  by (import hollight NADD_SUC)
+
+lemma NADD_DIST_LEMMA: "EX xa. ALL m n. hollight.dist (dest_nadd x (m + n), dest_nadd x m) <= xa * n"
+  by (import hollight NADD_DIST_LEMMA)
+
+lemma NADD_DIST: "EX xa.
+   ALL m n.
+      hollight.dist (dest_nadd x m, dest_nadd x n)
+      <= xa * hollight.dist (m, n)"
+  by (import hollight NADD_DIST)
+
+lemma NADD_ALTMUL: "EX A B.
+   ALL n.
+      hollight.dist
+       (n * dest_nadd x (dest_nadd y n), dest_nadd x n * dest_nadd y n)
+      <= A * n + B"
+  by (import hollight NADD_ALTMUL)
+
+definition
+  nadd_eq :: "nadd => nadd => bool"  where
+  "nadd_eq ==
+%u ua. EX B. ALL n. hollight.dist (dest_nadd u n, dest_nadd ua n) <= B"
+
+lemma DEF_nadd_eq: "nadd_eq =
+(%u ua. EX B. ALL n. hollight.dist (dest_nadd u n, dest_nadd ua n) <= B)"
+  by (import hollight DEF_nadd_eq)
+
+lemma NADD_EQ_REFL: "nadd_eq x x"
+  by (import hollight NADD_EQ_REFL)
+
+lemma NADD_EQ_SYM: "nadd_eq x y = nadd_eq y x"
+  by (import hollight NADD_EQ_SYM)
+
+lemma NADD_EQ_TRANS: "nadd_eq x y & nadd_eq y z ==> nadd_eq x z"
+  by (import hollight NADD_EQ_TRANS)
+
+definition
+  nadd_of_num :: "nat => nadd"  where
+  "nadd_of_num == %u. mk_nadd (op * u)"
+
+lemma DEF_nadd_of_num: "nadd_of_num = (%u. mk_nadd (op * u))"
+  by (import hollight DEF_nadd_of_num)
+
+lemma NADD_OF_NUM: "dest_nadd (nadd_of_num x) = op * x"
+  by (import hollight NADD_OF_NUM)
+
+lemma NADD_OF_NUM_WELLDEF: "m = n ==> nadd_eq (nadd_of_num m) (nadd_of_num n)"
+  by (import hollight NADD_OF_NUM_WELLDEF)
+
+lemma NADD_OF_NUM_EQ: "nadd_eq (nadd_of_num m) (nadd_of_num n) = (m = n)"
+  by (import hollight NADD_OF_NUM_EQ)
+
+definition
+  nadd_le :: "nadd => nadd => bool"  where
+  "nadd_le == %u ua. EX B. ALL n. dest_nadd u n <= dest_nadd ua n + B"
+
+lemma DEF_nadd_le: "nadd_le = (%u ua. EX B. ALL n. dest_nadd u n <= dest_nadd ua n + B)"
+  by (import hollight DEF_nadd_le)
+
+lemma NADD_LE_WELLDEF_LEMMA: "nadd_eq x x' & nadd_eq y y' & nadd_le x y ==> nadd_le x' y'"
+  by (import hollight NADD_LE_WELLDEF_LEMMA)
+
+lemma NADD_LE_WELLDEF: "nadd_eq x x' & nadd_eq y y' ==> nadd_le x y = nadd_le x' y'"
+  by (import hollight NADD_LE_WELLDEF)
+
+lemma NADD_LE_REFL: "nadd_le x x"
+  by (import hollight NADD_LE_REFL)
+
+lemma NADD_LE_TRANS: "nadd_le x y & nadd_le y z ==> nadd_le x z"
+  by (import hollight NADD_LE_TRANS)
+
+lemma NADD_LE_ANTISYM: "(nadd_le x y & nadd_le y x) = nadd_eq x y"
+  by (import hollight NADD_LE_ANTISYM)
+
+lemma NADD_LE_TOTAL_LEMMA: "~ nadd_le x y ==> EX n. n ~= 0 & dest_nadd y n + B < dest_nadd x n"
+  by (import hollight NADD_LE_TOTAL_LEMMA)
+
+lemma NADD_LE_TOTAL: "nadd_le x y | nadd_le y x"
+  by (import hollight NADD_LE_TOTAL)
+
+lemma NADD_ARCH: "EX xa. nadd_le x (nadd_of_num xa)"
+  by (import hollight NADD_ARCH)
+
+lemma NADD_OF_NUM_LE: "nadd_le (nadd_of_num m) (nadd_of_num n) = (m <= n)"
+  by (import hollight NADD_OF_NUM_LE)
+
+definition
+  nadd_add :: "nadd => nadd => nadd"  where
+  "nadd_add == %u ua. mk_nadd (%n. dest_nadd u n + dest_nadd ua n)"
+
+lemma DEF_nadd_add: "nadd_add = (%u ua. mk_nadd (%n. dest_nadd u n + dest_nadd ua n))"
+  by (import hollight DEF_nadd_add)
+
+lemma NADD_ADD: "dest_nadd (nadd_add x y) = (%n. dest_nadd x n + dest_nadd y n)"
+  by (import hollight NADD_ADD)
+
+lemma NADD_ADD_WELLDEF: "nadd_eq x x' & nadd_eq y y' ==> nadd_eq (nadd_add x y) (nadd_add x' y')"
+  by (import hollight NADD_ADD_WELLDEF)
+
+lemma NADD_ADD_SYM: "nadd_eq (nadd_add x y) (nadd_add y x)"
+  by (import hollight NADD_ADD_SYM)
+
+lemma NADD_ADD_ASSOC: "nadd_eq (nadd_add x (nadd_add y z)) (nadd_add (nadd_add x y) z)"
+  by (import hollight NADD_ADD_ASSOC)
+
+lemma NADD_ADD_LID: "nadd_eq (nadd_add (nadd_of_num 0) x) x"
+  by (import hollight NADD_ADD_LID)
+
+lemma NADD_ADD_LCANCEL: "nadd_eq (nadd_add x y) (nadd_add x z) ==> nadd_eq y z"
+  by (import hollight NADD_ADD_LCANCEL)
+
+lemma NADD_LE_ADD: "nadd_le x (nadd_add x y)"
+  by (import hollight NADD_LE_ADD)
+
+lemma NADD_LE_EXISTS: "nadd_le x y ==> EX d. nadd_eq y (nadd_add x d)"
+  by (import hollight NADD_LE_EXISTS)
+
+lemma NADD_OF_NUM_ADD: "nadd_eq (nadd_add (nadd_of_num x) (nadd_of_num xa)) (nadd_of_num (x + xa))"
+  by (import hollight NADD_OF_NUM_ADD)
+
+definition
+  nadd_mul :: "nadd => nadd => nadd"  where
+  "nadd_mul == %u ua. mk_nadd (%n. dest_nadd u (dest_nadd ua n))"
+
+lemma DEF_nadd_mul: "nadd_mul = (%u ua. mk_nadd (%n. dest_nadd u (dest_nadd ua n)))"
+  by (import hollight DEF_nadd_mul)
+
+lemma NADD_MUL: "dest_nadd (nadd_mul x y) = (%n. dest_nadd x (dest_nadd y n))"
+  by (import hollight NADD_MUL)
+
+lemma NADD_MUL_SYM: "nadd_eq (nadd_mul x y) (nadd_mul y x)"
+  by (import hollight NADD_MUL_SYM)
+
+lemma NADD_MUL_ASSOC: "nadd_eq (nadd_mul x (nadd_mul y z)) (nadd_mul (nadd_mul x y) z)"
+  by (import hollight NADD_MUL_ASSOC)
+
+lemma NADD_MUL_LID: "nadd_eq (nadd_mul (nadd_of_num 1) x) x"
+  by (import hollight NADD_MUL_LID)
+
+lemma NADD_LDISTRIB: "nadd_eq (nadd_mul x (nadd_add y z)) (nadd_add (nadd_mul x y) (nadd_mul x z))"
+  by (import hollight NADD_LDISTRIB)
+
+lemma NADD_MUL_WELLDEF_LEMMA: "nadd_eq y y' ==> nadd_eq (nadd_mul x y) (nadd_mul x y')"
+  by (import hollight NADD_MUL_WELLDEF_LEMMA)
+
+lemma NADD_MUL_WELLDEF: "nadd_eq x x' & nadd_eq y y' ==> nadd_eq (nadd_mul x y) (nadd_mul x' y')"
+  by (import hollight NADD_MUL_WELLDEF)
+
+lemma NADD_OF_NUM_MUL: "nadd_eq (nadd_mul (nadd_of_num x) (nadd_of_num xa)) (nadd_of_num (x * xa))"
+  by (import hollight NADD_OF_NUM_MUL)
+
+lemma NADD_LE_0: "nadd_le (nadd_of_num 0) x"
+  by (import hollight NADD_LE_0)
+
+lemma NADD_EQ_IMP_LE: "nadd_eq x y ==> nadd_le x y"
+  by (import hollight NADD_EQ_IMP_LE)
+
+lemma NADD_LE_LMUL: "nadd_le y z ==> nadd_le (nadd_mul x y) (nadd_mul x z)"
+  by (import hollight NADD_LE_LMUL)
+
+lemma NADD_LE_RMUL: "nadd_le x y ==> nadd_le (nadd_mul x z) (nadd_mul y z)"
+  by (import hollight NADD_LE_RMUL)
+
+lemma NADD_LE_RADD: "nadd_le (nadd_add x z) (nadd_add y z) = nadd_le x y"
+  by (import hollight NADD_LE_RADD)
+
+lemma NADD_LE_LADD: "nadd_le (nadd_add x y) (nadd_add x z) = nadd_le y z"
+  by (import hollight NADD_LE_LADD)
+
+lemma NADD_RDISTRIB: "nadd_eq (nadd_mul (nadd_add x y) z) (nadd_add (nadd_mul x z) (nadd_mul y z))"
+  by (import hollight NADD_RDISTRIB)
+
+lemma NADD_ARCH_MULT: "~ nadd_eq x (nadd_of_num 0)
+==> EX xa. nadd_le (nadd_of_num k) (nadd_mul (nadd_of_num xa) x)"
+  by (import hollight NADD_ARCH_MULT)
+
+lemma NADD_ARCH_ZERO: "(!!n. nadd_le (nadd_mul (nadd_of_num n) x) k) ==> nadd_eq x (nadd_of_num 0)"
+  by (import hollight NADD_ARCH_ZERO)
+
+lemma NADD_ARCH_LEMMA: "(!!n. nadd_le (nadd_mul (nadd_of_num n) x)
+       (nadd_add (nadd_mul (nadd_of_num n) y) z))
+==> nadd_le x y"
+  by (import hollight NADD_ARCH_LEMMA)
+
+lemma NADD_COMPLETE: "Ex P & (EX M. ALL x. P x --> nadd_le x M)
+==> EX M. (ALL x. P x --> nadd_le x M) &
+          (ALL M'. (ALL x. P x --> nadd_le x M') --> nadd_le M M')"
+  by (import hollight NADD_COMPLETE)
+
+lemma NADD_UBOUND: "EX xa N. ALL n>=N. dest_nadd x n <= xa * n"
+  by (import hollight NADD_UBOUND)
+
+lemma NADD_NONZERO: "~ nadd_eq x (nadd_of_num 0) ==> EX N. ALL n>=N. dest_nadd x n ~= 0"
+  by (import hollight NADD_NONZERO)
+
+lemma NADD_LBOUND: "~ nadd_eq x (nadd_of_num 0) ==> EX A N. ALL n>=N. n <= A * dest_nadd x n"
+  by (import hollight NADD_LBOUND)
+
+definition
+  nadd_rinv :: "nadd => nat => nat"  where
+  "nadd_rinv == %u n. n * n div dest_nadd u n"
+
+lemma DEF_nadd_rinv: "nadd_rinv = (%u n. n * n div dest_nadd u n)"
+  by (import hollight DEF_nadd_rinv)
+
+lemma NADD_MUL_LINV_LEMMA0: "~ nadd_eq x (nadd_of_num 0) ==> EX xa B. ALL i. nadd_rinv x i <= xa * i + B"
+  by (import hollight NADD_MUL_LINV_LEMMA0)
+
+lemma NADD_MUL_LINV_LEMMA1: "dest_nadd x n ~= 0
+==> hollight.dist (dest_nadd x n * nadd_rinv x n, n * n) <= dest_nadd x n"
+  by (import hollight NADD_MUL_LINV_LEMMA1)
+
+lemma NADD_MUL_LINV_LEMMA2: "~ nadd_eq x (nadd_of_num 0)
+==> EX N. ALL n>=N.
+             hollight.dist (dest_nadd x n * nadd_rinv x n, n * n)
+             <= dest_nadd x n"
+  by (import hollight NADD_MUL_LINV_LEMMA2)
+
+lemma NADD_MUL_LINV_LEMMA3: "~ nadd_eq x (nadd_of_num 0)
+==> EX N. ALL m n.
+             N <= n -->
+             hollight.dist
+              (m * (dest_nadd x m * (dest_nadd x n * nadd_rinv x n)),
+               m * (dest_nadd x m * (n * n)))
+             <= m * (dest_nadd x m * dest_nadd x n)"
+  by (import hollight NADD_MUL_LINV_LEMMA3)
+
+lemma NADD_MUL_LINV_LEMMA4: "~ nadd_eq x (nadd_of_num 0)
+==> EX N. ALL m n.
+             N <= m & N <= n -->
+             dest_nadd x m * dest_nadd x n *
+             hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
+             <= m * n *
+                hollight.dist (m * dest_nadd x n, n * dest_nadd x m) +
+                dest_nadd x m * dest_nadd x n * (m + n)"
+  by (import hollight NADD_MUL_LINV_LEMMA4)
+
+lemma NADD_MUL_LINV_LEMMA5: "~ nadd_eq x (nadd_of_num 0)
+==> EX B N.
+       ALL m n.
+          N <= m & N <= n -->
+          dest_nadd x m * dest_nadd x n *
+          hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
+          <= B * (m * n * (m + n))"
+  by (import hollight NADD_MUL_LINV_LEMMA5)
+
+lemma NADD_MUL_LINV_LEMMA6: "~ nadd_eq x (nadd_of_num 0)
+==> EX B N.
+       ALL m n.
+          N <= m & N <= n -->
+          m * n * hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
+          <= B * (m * n * (m + n))"
+  by (import hollight NADD_MUL_LINV_LEMMA6)
+
+lemma NADD_MUL_LINV_LEMMA7: "~ nadd_eq x (nadd_of_num 0)
+==> EX B N.
+       ALL m n.
+          N <= m & N <= n -->
+          hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
+          <= B * (m + n)"
+  by (import hollight NADD_MUL_LINV_LEMMA7)
+
+lemma NADD_MUL_LINV_LEMMA7a: "~ nadd_eq x (nadd_of_num 0)
+==> EX A B.
+       ALL m n.
+          m <= N -->
+          hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m) <= A * n + B"
+  by (import hollight NADD_MUL_LINV_LEMMA7a)
+
+lemma NADD_MUL_LINV_LEMMA8: "~ nadd_eq x (nadd_of_num 0)
+==> EX B. ALL m n.
+             hollight.dist (m * nadd_rinv x n, n * nadd_rinv x m)
+             <= B * (m + n)"
+  by (import hollight NADD_MUL_LINV_LEMMA8)
+
+definition
+  nadd_inv :: "nadd => nadd"  where
+  "nadd_inv ==
+%u. if nadd_eq u (nadd_of_num 0) then nadd_of_num 0
+    else mk_nadd (nadd_rinv u)"
+
+lemma DEF_nadd_inv: "nadd_inv =
+(%u. if nadd_eq u (nadd_of_num 0) then nadd_of_num 0
+     else mk_nadd (nadd_rinv u))"
+  by (import hollight DEF_nadd_inv)
+
+lemma NADD_INV: "dest_nadd (nadd_inv x) =
+(if nadd_eq x (nadd_of_num 0) then %n. 0 else nadd_rinv x)"
+  by (import hollight NADD_INV)
+
+lemma NADD_MUL_LINV: "~ nadd_eq x (nadd_of_num 0)
+==> nadd_eq (nadd_mul (nadd_inv x) x) (nadd_of_num 1)"
+  by (import hollight NADD_MUL_LINV)
+
+lemma NADD_INV_0: "nadd_eq (nadd_inv (nadd_of_num 0)) (nadd_of_num 0)"
+  by (import hollight NADD_INV_0)
+
+lemma NADD_INV_WELLDEF: "nadd_eq x y ==> nadd_eq (nadd_inv x) (nadd_inv y)"
+  by (import hollight NADD_INV_WELLDEF)
+
+typedef (open) hreal = "{s. EX x. s = nadd_eq x}"  morphisms "dest_hreal" "mk_hreal"
+  apply (rule light_ex_imp_nonempty[where t="nadd_eq x"])
+  by (import hollight TYDEF_hreal)
+
+syntax
+  dest_hreal :: _ 
+
+syntax
+  mk_hreal :: _ 
+
+lemmas "TYDEF_hreal_@intern" = typedef_hol2hollight 
+  [where a="a :: hreal" and r=r ,
+   OF type_definition_hreal]
+
+definition
+  hreal_of_num :: "nat => hreal"  where
+  "hreal_of_num == %m. mk_hreal (nadd_eq (nadd_of_num m))"
+
+lemma DEF_hreal_of_num: "hreal_of_num = (%m. mk_hreal (nadd_eq (nadd_of_num m)))"
+  by (import hollight DEF_hreal_of_num)
+
+definition
+  hreal_add :: "hreal => hreal => hreal"  where
+  "hreal_add ==
+%x y. mk_hreal
+       (%u. EX xa ya.
+               nadd_eq (nadd_add xa ya) u &
+               dest_hreal x xa & dest_hreal y ya)"
+
+lemma DEF_hreal_add: "hreal_add =
+(%x y. mk_hreal
+        (%u. EX xa ya.
+                nadd_eq (nadd_add xa ya) u &
+                dest_hreal x xa & dest_hreal y ya))"
+  by (import hollight DEF_hreal_add)
+
+definition
+  hreal_mul :: "hreal => hreal => hreal"  where
+  "hreal_mul ==
+%x y. mk_hreal
+       (%u. EX xa ya.
+               nadd_eq (nadd_mul xa ya) u &
+               dest_hreal x xa & dest_hreal y ya)"
+
+lemma DEF_hreal_mul: "hreal_mul =
+(%x y. mk_hreal
+        (%u. EX xa ya.
+                nadd_eq (nadd_mul xa ya) u &
+                dest_hreal x xa & dest_hreal y ya))"
+  by (import hollight DEF_hreal_mul)
+
+definition
+  hreal_le :: "hreal => hreal => bool"  where
+  "hreal_le ==
+%x y. SOME u.
+         EX xa ya. nadd_le xa ya = u & dest_hreal x xa & dest_hreal y ya"
+
+lemma DEF_hreal_le: "hreal_le =
+(%x y. SOME u.
+          EX xa ya. nadd_le xa ya = u & dest_hreal x xa & dest_hreal y ya)"
+  by (import hollight DEF_hreal_le)
+
+definition
+  hreal_inv :: "hreal => hreal"  where
+  "hreal_inv ==
+%x. mk_hreal (%u. EX xa. nadd_eq (nadd_inv xa) u & dest_hreal x xa)"
+
+lemma DEF_hreal_inv: "hreal_inv =
+(%x. mk_hreal (%u. EX xa. nadd_eq (nadd_inv xa) u & dest_hreal x xa))"
+  by (import hollight DEF_hreal_inv)
+
+lemma HREAL_LE_EXISTS_DEF: "hreal_le m n = (EX d. n = hreal_add m d)"
+  by (import hollight HREAL_LE_EXISTS_DEF)
+
+lemma HREAL_EQ_ADD_LCANCEL: "(hreal_add m n = hreal_add m p) = (n = p)"
+  by (import hollight HREAL_EQ_ADD_LCANCEL)
+
+lemma HREAL_EQ_ADD_RCANCEL: "(hreal_add x xb = hreal_add xa xb) = (x = xa)"
+  by (import hollight HREAL_EQ_ADD_RCANCEL)
+
+lemma HREAL_LE_ADD_LCANCEL: "hreal_le (hreal_add x xa) (hreal_add x xb) = hreal_le xa xb"
+  by (import hollight HREAL_LE_ADD_LCANCEL)
+
+lemma HREAL_LE_ADD_RCANCEL: "hreal_le (hreal_add x xb) (hreal_add xa xb) = hreal_le x xa"
+  by (import hollight HREAL_LE_ADD_RCANCEL)
+
+lemma HREAL_ADD_RID: "hreal_add x (hreal_of_num 0) = x"
+  by (import hollight HREAL_ADD_RID)
+
+lemma HREAL_ADD_RDISTRIB: "hreal_mul (hreal_add x xa) xb = hreal_add (hreal_mul x xb) (hreal_mul xa xb)"
+  by (import hollight HREAL_ADD_RDISTRIB)
+
+lemma HREAL_MUL_LZERO: "hreal_mul (hreal_of_num 0) m = hreal_of_num 0"
+  by (import hollight HREAL_MUL_LZERO)
+
+lemma HREAL_MUL_RZERO: "hreal_mul x (hreal_of_num 0) = hreal_of_num 0"
+  by (import hollight HREAL_MUL_RZERO)
+
+lemma HREAL_ADD_AC: "hreal_add m n = hreal_add n m &
+hreal_add (hreal_add m n) p = hreal_add m (hreal_add n p) &
+hreal_add m (hreal_add n p) = hreal_add n (hreal_add m p)"
+  by (import hollight HREAL_ADD_AC)
+
+lemma HREAL_LE_ADD2: "hreal_le a b & hreal_le c d ==> hreal_le (hreal_add a c) (hreal_add b d)"
+  by (import hollight HREAL_LE_ADD2)
+
+lemma HREAL_LE_MUL_RCANCEL_IMP: "hreal_le a b ==> hreal_le (hreal_mul a c) (hreal_mul b c)"
+  by (import hollight HREAL_LE_MUL_RCANCEL_IMP)
+
+definition
+  treal_of_num :: "nat => hreal * hreal"  where
+  "treal_of_num == %u. (hreal_of_num u, hreal_of_num 0)"
+
+lemma DEF_treal_of_num: "treal_of_num = (%u. (hreal_of_num u, hreal_of_num 0))"
+  by (import hollight DEF_treal_of_num)
+
+definition
+  treal_neg :: "hreal * hreal => hreal * hreal"  where
+  "treal_neg == %u. (snd u, fst u)"
+
+lemma DEF_treal_neg: "treal_neg = (%u. (snd u, fst u))"
+  by (import hollight DEF_treal_neg)
+
+definition
+  treal_add :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
+  "treal_add == %u ua. (hreal_add (fst u) (fst ua), hreal_add (snd u) (snd ua))"
+
+lemma DEF_treal_add: "treal_add =
+(%u ua. (hreal_add (fst u) (fst ua), hreal_add (snd u) (snd ua)))"
+  by (import hollight DEF_treal_add)
+
+definition
+  treal_mul :: "hreal * hreal => hreal * hreal => hreal * hreal"  where
+  "treal_mul ==
+%u ua.
+   (hreal_add (hreal_mul (fst u) (fst ua)) (hreal_mul (snd u) (snd ua)),
+    hreal_add (hreal_mul (fst u) (snd ua)) (hreal_mul (snd u) (fst ua)))"
+
+lemma DEF_treal_mul: "treal_mul =
+(%u ua.
+    (hreal_add (hreal_mul (fst u) (fst ua)) (hreal_mul (snd u) (snd ua)),
+     hreal_add (hreal_mul (fst u) (snd ua)) (hreal_mul (snd u) (fst ua))))"
+  by (import hollight DEF_treal_mul)
+
+definition
+  treal_le :: "hreal * hreal => hreal * hreal => bool"  where
+  "treal_le ==
+%u ua. hreal_le (hreal_add (fst u) (snd ua)) (hreal_add (fst ua) (snd u))"
+
+lemma DEF_treal_le: "treal_le =
+(%u ua. hreal_le (hreal_add (fst u) (snd ua)) (hreal_add (fst ua) (snd u)))"
+  by (import hollight DEF_treal_le)
+
+definition
+  treal_inv :: "hreal * hreal => hreal * hreal"  where
+  "treal_inv ==
+%u. if fst u = snd u then (hreal_of_num 0, hreal_of_num 0)
+    else if hreal_le (snd u) (fst u)
+         then (hreal_inv (SOME d. fst u = hreal_add (snd u) d),
+               hreal_of_num 0)
+         else (hreal_of_num 0,
+               hreal_inv (SOME d. snd u = hreal_add (fst u) d))"
+
+lemma DEF_treal_inv: "treal_inv =
+(%u. if fst u = snd u then (hreal_of_num 0, hreal_of_num 0)
+     else if hreal_le (snd u) (fst u)
+          then (hreal_inv (SOME d. fst u = hreal_add (snd u) d),
+                hreal_of_num 0)
+          else (hreal_of_num 0,
+                hreal_inv (SOME d. snd u = hreal_add (fst u) d)))"
+  by (import hollight DEF_treal_inv)
+
+definition
+  treal_eq :: "hreal * hreal => hreal * hreal => bool"  where
+  "treal_eq == %u ua. hreal_add (fst u) (snd ua) = hreal_add (fst ua) (snd u)"
+
+lemma DEF_treal_eq: "treal_eq = (%u ua. hreal_add (fst u) (snd ua) = hreal_add (fst ua) (snd u))"
+  by (import hollight DEF_treal_eq)
+
+lemma TREAL_EQ_REFL: "treal_eq x x"
+  by (import hollight TREAL_EQ_REFL)
+
+lemma TREAL_EQ_SYM: "treal_eq x y = treal_eq y x"
+  by (import hollight TREAL_EQ_SYM)
+
+lemma TREAL_EQ_TRANS: "treal_eq x y & treal_eq y z ==> treal_eq x z"
+  by (import hollight TREAL_EQ_TRANS)
+
+lemma TREAL_EQ_AP: "x = xa ==> treal_eq x xa"
+  by (import hollight TREAL_EQ_AP)
+
+lemma TREAL_OF_NUM_EQ: "treal_eq (treal_of_num x) (treal_of_num xa) = (x = xa)"
+  by (import hollight TREAL_OF_NUM_EQ)
+
+lemma TREAL_OF_NUM_LE: "treal_le (treal_of_num x) (treal_of_num xa) = (x <= xa)"
+  by (import hollight TREAL_OF_NUM_LE)
+
+lemma TREAL_OF_NUM_ADD: "treal_eq (treal_add (treal_of_num x) (treal_of_num xa))
+ (treal_of_num (x + xa))"
+  by (import hollight TREAL_OF_NUM_ADD)
+
+lemma TREAL_OF_NUM_MUL: "treal_eq (treal_mul (treal_of_num x) (treal_of_num xa))
+ (treal_of_num (x * xa))"
+  by (import hollight TREAL_OF_NUM_MUL)
+
+lemma TREAL_ADD_SYM_EQ: "treal_add x y = treal_add y x"
+  by (import hollight TREAL_ADD_SYM_EQ)
+
+lemma TREAL_MUL_SYM_EQ: "treal_mul x y = treal_mul y x"
+  by (import hollight TREAL_MUL_SYM_EQ)
+
+lemma TREAL_ADD_SYM: "treal_eq (treal_add x y) (treal_add y x)"
+  by (import hollight TREAL_ADD_SYM)
+
+lemma TREAL_ADD_ASSOC: "treal_eq (treal_add x (treal_add y z)) (treal_add (treal_add x y) z)"
+  by (import hollight TREAL_ADD_ASSOC)
+
+lemma TREAL_ADD_LID: "treal_eq (treal_add (treal_of_num 0) x) x"
+  by (import hollight TREAL_ADD_LID)
+
+lemma TREAL_ADD_LINV: "treal_eq (treal_add (treal_neg x) x) (treal_of_num 0)"
+  by (import hollight TREAL_ADD_LINV)
+
+lemma TREAL_MUL_SYM: "treal_eq (treal_mul x xa) (treal_mul xa x)"
+  by (import hollight TREAL_MUL_SYM)
+
+lemma TREAL_MUL_ASSOC: "treal_eq (treal_mul x (treal_mul y z)) (treal_mul (treal_mul x y) z)"
+  by (import hollight TREAL_MUL_ASSOC)
+
+lemma TREAL_MUL_LID: "treal_eq (treal_mul (treal_of_num 1) x) x"
+  by (import hollight TREAL_MUL_LID)
+
+lemma TREAL_ADD_LDISTRIB: "treal_eq (treal_mul x (treal_add y z))
+ (treal_add (treal_mul x y) (treal_mul x z))"
+  by (import hollight TREAL_ADD_LDISTRIB)
+
+lemma TREAL_LE_REFL: "treal_le x x"
+  by (import hollight TREAL_LE_REFL)
+
+lemma TREAL_LE_ANTISYM: "(treal_le x y & treal_le y x) = treal_eq x y"
+  by (import hollight TREAL_LE_ANTISYM)
+
+lemma TREAL_LE_TRANS: "treal_le x y & treal_le y z ==> treal_le x z"
+  by (import hollight TREAL_LE_TRANS)
+
+lemma TREAL_LE_TOTAL: "treal_le x y | treal_le y x"
+  by (import hollight TREAL_LE_TOTAL)
+
+lemma TREAL_LE_LADD_IMP: "treal_le y z ==> treal_le (treal_add x y) (treal_add x z)"
+  by (import hollight TREAL_LE_LADD_IMP)
+
+lemma TREAL_LE_MUL: "treal_le (treal_of_num 0) x & treal_le (treal_of_num 0) y
+==> treal_le (treal_of_num 0) (treal_mul x y)"
+  by (import hollight TREAL_LE_MUL)
+
+lemma TREAL_INV_0: "treal_eq (treal_inv (treal_of_num 0)) (treal_of_num 0)"
+  by (import hollight TREAL_INV_0)
+
+lemma TREAL_MUL_LINV: "~ treal_eq x (treal_of_num 0)
+==> treal_eq (treal_mul (treal_inv x) x) (treal_of_num 1)"
+  by (import hollight TREAL_MUL_LINV)
+
+lemma TREAL_OF_NUM_WELLDEF: "m = n ==> treal_eq (treal_of_num m) (treal_of_num n)"
+  by (import hollight TREAL_OF_NUM_WELLDEF)
+
+lemma TREAL_NEG_WELLDEF: "treal_eq x1 x2 ==> treal_eq (treal_neg x1) (treal_neg x2)"
+  by (import hollight TREAL_NEG_WELLDEF)
+
+lemma TREAL_ADD_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_add x1 y) (treal_add x2 y)"
+  by (import hollight TREAL_ADD_WELLDEFR)
+
+lemma TREAL_ADD_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
+==> treal_eq (treal_add x1 y1) (treal_add x2 y2)"
+  by (import hollight TREAL_ADD_WELLDEF)
+
+lemma TREAL_MUL_WELLDEFR: "treal_eq x1 x2 ==> treal_eq (treal_mul x1 y) (treal_mul x2 y)"
+  by (import hollight TREAL_MUL_WELLDEFR)
+
+lemma TREAL_MUL_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2
+==> treal_eq (treal_mul x1 y1) (treal_mul x2 y2)"
+  by (import hollight TREAL_MUL_WELLDEF)
+
+lemma TREAL_EQ_IMP_LE: "treal_eq x y ==> treal_le x y"
+  by (import hollight TREAL_EQ_IMP_LE)
+
+lemma TREAL_LE_WELLDEF: "treal_eq x1 x2 & treal_eq y1 y2 ==> treal_le x1 y1 = treal_le x2 y2"
+  by (import hollight TREAL_LE_WELLDEF)
+
+lemma TREAL_INV_WELLDEF: "treal_eq x y ==> treal_eq (treal_inv x) (treal_inv y)"
+  by (import hollight TREAL_INV_WELLDEF)
+
+typedef (open) real = "{s. EX x. s = treal_eq x}"  morphisms "dest_real" "mk_real"
+  apply (rule light_ex_imp_nonempty[where t="treal_eq x"])
+  by (import hollight TYDEF_real)
+
+syntax
+  dest_real :: _ 
+
+syntax
+  mk_real :: _ 
+
+lemmas "TYDEF_real_@intern" = typedef_hol2hollight 
+  [where a="a :: hollight.real" and r=r ,
+   OF type_definition_real]
+
+definition
+  real_of_num :: "nat => hollight.real"  where
+  "real_of_num == %m. mk_real (treal_eq (treal_of_num m))"
+
+lemma DEF_real_of_num: "real_of_num = (%m. mk_real (treal_eq (treal_of_num m)))"
+  by (import hollight DEF_real_of_num)
+
+definition
+  real_neg :: "hollight.real => hollight.real"  where
+  "real_neg ==
+%x1. mk_real (%u. EX x1a. treal_eq (treal_neg x1a) u & dest_real x1 x1a)"
+
+lemma DEF_real_neg: "real_neg =
+(%x1. mk_real (%u. EX x1a. treal_eq (treal_neg x1a) u & dest_real x1 x1a))"
+  by (import hollight DEF_real_neg)
+
+definition
+  real_add :: "hollight.real => hollight.real => hollight.real"  where
+  "real_add ==
+%x1 y1.
+   mk_real
+    (%u. EX x1a y1a.
+            treal_eq (treal_add x1a y1a) u &
+            dest_real x1 x1a & dest_real y1 y1a)"
+
+lemma DEF_real_add: "real_add =
+(%x1 y1.
+    mk_real
+     (%u. EX x1a y1a.
+             treal_eq (treal_add x1a y1a) u &
+             dest_real x1 x1a & dest_real y1 y1a))"
+  by (import hollight DEF_real_add)
+
+definition
+  real_mul :: "hollight.real => hollight.real => hollight.real"  where
+  "real_mul ==
+%x1 y1.
+   mk_real
+    (%u. EX x1a y1a.
+            treal_eq (treal_mul x1a y1a) u &
+            dest_real x1 x1a & dest_real y1 y1a)"
+
+lemma DEF_real_mul: "real_mul =
+(%x1 y1.
+    mk_real
+     (%u. EX x1a y1a.
+             treal_eq (treal_mul x1a y1a) u &
+             dest_real x1 x1a & dest_real y1 y1a))"
+  by (import hollight DEF_real_mul)
+
+definition
+  real_le :: "hollight.real => hollight.real => bool"  where
+  "real_le ==
+%x1 y1.
+   SOME u.
+      EX x1a y1a. treal_le x1a y1a = u & dest_real x1 x1a & dest_real y1 y1a"
+
+lemma DEF_real_le: "real_le =
+(%x1 y1.
+    SOME u.
+       EX x1a y1a.
+          treal_le x1a y1a = u & dest_real x1 x1a & dest_real y1 y1a)"
+  by (import hollight DEF_real_le)
+
+definition
+  real_inv :: "hollight.real => hollight.real"  where
+  "real_inv ==
+%x. mk_real (%u. EX xa. treal_eq (treal_inv xa) u & dest_real x xa)"
+
+lemma DEF_real_inv: "real_inv =
+(%x. mk_real (%u. EX xa. treal_eq (treal_inv xa) u & dest_real x xa))"
+  by (import hollight DEF_real_inv)
+
+definition
+  real_sub :: "hollight.real => hollight.real => hollight.real"  where
+  "real_sub == %u ua. real_add u (real_neg ua)"
+
+lemma DEF_real_sub: "real_sub = (%u ua. real_add u (real_neg ua))"
+  by (import hollight DEF_real_sub)
+
+definition
+  real_lt :: "hollight.real => hollight.real => bool"  where
+  "real_lt == %u ua. ~ real_le ua u"
+
+lemma DEF_real_lt: "real_lt = (%u ua. ~ real_le ua u)"
+  by (import hollight DEF_real_lt)
+
+definition
+  real_ge :: "hollight.real => hollight.real => bool"  where
+  "real_ge == %u ua. real_le ua u"
+
+lemma DEF_real_ge: "real_ge = (%u ua. real_le ua u)"
+  by (import hollight DEF_real_ge)
+
+definition
+  real_gt :: "hollight.real => hollight.real => bool"  where
+  "real_gt == %u ua. real_lt ua u"
+
+lemma DEF_real_gt: "real_gt = (%u ua. real_lt ua u)"
+  by (import hollight DEF_real_gt)
+
+definition
+  real_abs :: "hollight.real => hollight.real"  where
+  "real_abs == %u. if real_le (real_of_num 0) u then u else real_neg u"
+
+lemma DEF_real_abs: "real_abs = (%u. if real_le (real_of_num 0) u then u else real_neg u)"
+  by (import hollight DEF_real_abs)
+
+definition
+  real_pow :: "hollight.real => nat => hollight.real"  where
+  "real_pow ==
+SOME real_pow.
+   (ALL x. real_pow x 0 = real_of_num 1) &
+   (ALL x n. real_pow x (Suc n) = real_mul x (real_pow x n))"
+
+lemma DEF_real_pow: "real_pow =
+(SOME real_pow.
+    (ALL x. real_pow x 0 = real_of_num 1) &
+    (ALL x n. real_pow x (Suc n) = real_mul x (real_pow x n)))"
+  by (import hollight DEF_real_pow)
+
+definition
+  real_div :: "hollight.real => hollight.real => hollight.real"  where
+  "real_div == %u ua. real_mul u (real_inv ua)"
+
+lemma DEF_real_div: "real_div = (%u ua. real_mul u (real_inv ua))"
+  by (import hollight DEF_real_div)
+
+definition
+  real_max :: "hollight.real => hollight.real => hollight.real"  where
+  "real_max == %u ua. if real_le u ua then ua else u"
+
+lemma DEF_real_max: "real_max = (%u ua. if real_le u ua then ua else u)"
+  by (import hollight DEF_real_max)
+
+definition
+  real_min :: "hollight.real => hollight.real => hollight.real"  where
+  "real_min == %u ua. if real_le u ua then u else ua"
+
+lemma DEF_real_min: "real_min = (%u ua. if real_le u ua then u else ua)"
+  by (import hollight DEF_real_min)
+
+lemma REAL_HREAL_LEMMA1: "EX x. (ALL xa. real_le (real_of_num 0) xa = (EX y. xa = x y)) &
+      (ALL y z. hreal_le y z = real_le (x y) (x z))"
+  by (import hollight REAL_HREAL_LEMMA1)
+
+lemma REAL_HREAL_LEMMA2: "EX x r.
+   (ALL xa. x (r xa) = xa) &
+   (ALL xa. real_le (real_of_num 0) xa --> r (x xa) = xa) &
+   (ALL x. real_le (real_of_num 0) (r x)) &
+   (ALL x y. hreal_le x y = real_le (r x) (r y))"
+  by (import hollight REAL_HREAL_LEMMA2)
+
+lemma REAL_COMPLETE_SOMEPOS: "(EX x. P x & real_le (real_of_num 0) x) & (EX M. ALL x. P x --> real_le x M)
+==> EX M. (ALL x. P x --> real_le x M) &
+          (ALL M'. (ALL x. P x --> real_le x M') --> real_le M M')"
+  by (import hollight REAL_COMPLETE_SOMEPOS)
+
+lemma REAL_COMPLETE: "Ex P & (EX M. ALL x. P x --> real_le x M)
+==> EX M. (ALL x. P x --> real_le x M) &
+          (ALL M'. (ALL x. P x --> real_le x M') --> real_le M M')"
+  by (import hollight REAL_COMPLETE)
+
+lemma REAL_ADD_AC: "real_add m n = real_add n m &
+real_add (real_add m n) p = real_add m (real_add n p) &
+real_add m (real_add n p) = real_add n (real_add m p)"
+  by (import hollight REAL_ADD_AC)
+
+lemma REAL_ADD_RINV: "real_add x (real_neg x) = real_of_num 0"
+  by (import hollight REAL_ADD_RINV)
+
+lemma REAL_EQ_ADD_LCANCEL: "(real_add x y = real_add x z) = (y = z)"
+  by (import hollight REAL_EQ_ADD_LCANCEL)
+
+lemma REAL_EQ_ADD_RCANCEL: "(real_add x z = real_add y z) = (x = y)"
+  by (import hollight REAL_EQ_ADD_RCANCEL)
+
+lemma REAL_MUL_RZERO: "real_mul x (real_of_num 0) = real_of_num 0"
+  by (import hollight REAL_MUL_RZERO)
+
+lemma REAL_MUL_LZERO: "real_mul (real_of_num 0) x = real_of_num 0"
+  by (import hollight REAL_MUL_LZERO)
+
+lemma REAL_NEG_NEG: "real_neg (real_neg x) = x"
+  by (import hollight REAL_NEG_NEG)
+
+lemma REAL_MUL_RNEG: "real_mul x (real_neg y) = real_neg (real_mul x y)"
+  by (import hollight REAL_MUL_RNEG)
+
+lemma REAL_MUL_LNEG: "real_mul (real_neg x) y = real_neg (real_mul x y)"
+  by (import hollight REAL_MUL_LNEG)
+
+lemma REAL_NEG_ADD: "real_neg (real_add x y) = real_add (real_neg x) (real_neg y)"
+  by (import hollight REAL_NEG_ADD)
+
+lemma REAL_ADD_RID: "real_add x (real_of_num 0) = x"
+  by (import hollight REAL_ADD_RID)
+
+lemma REAL_NEG_0: "real_neg (real_of_num 0) = real_of_num 0"
+  by (import hollight REAL_NEG_0)
+
+lemma REAL_LE_LNEG: "real_le (real_neg x) y = real_le (real_of_num 0) (real_add x y)"
+  by (import hollight REAL_LE_LNEG)
+
+lemma REAL_LE_NEG2: "real_le (real_neg x) (real_neg y) = real_le y x"
+  by (import hollight REAL_LE_NEG2)
+
+lemma REAL_LE_RNEG: "real_le x (real_neg y) = real_le (real_add x y) (real_of_num 0)"
+  by (import hollight REAL_LE_RNEG)
+
+lemma REAL_OF_NUM_POW: "real_pow (real_of_num x) n = real_of_num (x ^ n)"
+  by (import hollight REAL_OF_NUM_POW)
+
+lemma REAL_POW_NEG: "real_pow (real_neg x) n =
+(if even n then real_pow x n else real_neg (real_pow x n))"
+  by (import hollight REAL_POW_NEG)
+
+lemma REAL_ABS_NUM: "real_abs (real_of_num x) = real_of_num x"
+  by (import hollight REAL_ABS_NUM)
+
+lemma REAL_ABS_NEG: "real_abs (real_neg x) = real_abs x"
+  by (import hollight REAL_ABS_NEG)
+
+lemma REAL_LTE_TOTAL: "real_lt x xa | real_le xa x"
+  by (import hollight REAL_LTE_TOTAL)
+
+lemma REAL_LET_TOTAL: "real_le x xa | real_lt xa x"
+  by (import hollight REAL_LET_TOTAL)
+
+lemma REAL_LT_IMP_LE: "real_lt x y ==> real_le x y"
+  by (import hollight REAL_LT_IMP_LE)
+
+lemma REAL_LTE_TRANS: "real_lt x y & real_le y z ==> real_lt x z"
+  by (import hollight REAL_LTE_TRANS)
+
+lemma REAL_LET_TRANS: "real_le x y & real_lt y z ==> real_lt x z"
+  by (import hollight REAL_LET_TRANS)
+
+lemma REAL_LT_TRANS: "real_lt x y & real_lt y z ==> real_lt x z"
+  by (import hollight REAL_LT_TRANS)
+
+lemma REAL_LE_ADD: "real_le (real_of_num 0) x & real_le (real_of_num 0) y
+==> real_le (real_of_num 0) (real_add x y)"
+  by (import hollight REAL_LE_ADD)
+
+lemma REAL_LTE_ANTISYM: "~ (real_lt x y & real_le y x)"
+  by (import hollight REAL_LTE_ANTISYM)
+
+lemma REAL_SUB_LE: "real_le (real_of_num 0) (real_sub x xa) = real_le xa x"
+  by (import hollight REAL_SUB_LE)
+
+lemma REAL_NEG_SUB: "real_neg (real_sub x xa) = real_sub xa x"
+  by (import hollight REAL_NEG_SUB)
+
+lemma REAL_LE_LT: "real_le x xa = (real_lt x xa | x = xa)"
+  by (import hollight REAL_LE_LT)
+
+lemma REAL_SUB_LT: "real_lt (real_of_num 0) (real_sub x xa) = real_lt xa x"
+  by (import hollight REAL_SUB_LT)
+
+lemma REAL_NOT_LT: "(~ real_lt x xa) = real_le xa x"
+  by (import hollight REAL_NOT_LT)
+
+lemma REAL_SUB_0: "(real_sub x y = real_of_num 0) = (x = y)"
+  by (import hollight REAL_SUB_0)
+
+lemma REAL_LT_LE: "real_lt x y = (real_le x y & x ~= y)"
+  by (import hollight REAL_LT_LE)
+
+lemma REAL_LT_REFL: "~ real_lt x x"
+  by (import hollight REAL_LT_REFL)
+
+lemma REAL_LTE_ADD: "real_lt (real_of_num 0) x & real_le (real_of_num 0) y
+==> real_lt (real_of_num 0) (real_add x y)"
+  by (import hollight REAL_LTE_ADD)
+
+lemma REAL_LET_ADD: "real_le (real_of_num 0) x & real_lt (real_of_num 0) y
+==> real_lt (real_of_num 0) (real_add x y)"
+  by (import hollight REAL_LET_ADD)
+
+lemma REAL_LT_ADD: "real_lt (real_of_num 0) x & real_lt (real_of_num 0) y
+==> real_lt (real_of_num 0) (real_add x y)"
+  by (import hollight REAL_LT_ADD)
+
+lemma REAL_ENTIRE: "(real_mul x y = real_of_num 0) = (x = real_of_num 0 | y = real_of_num 0)"
+  by (import hollight REAL_ENTIRE)
+
+lemma REAL_LE_NEGTOTAL: "real_le (real_of_num 0) x | real_le (real_of_num 0) (real_neg x)"
+  by (import hollight REAL_LE_NEGTOTAL)
+
+lemma REAL_LE_SQUARE: "real_le (real_of_num 0) (real_mul x x)"
+  by (import hollight REAL_LE_SQUARE)
+
+lemma REAL_MUL_RID: "real_mul x (real_of_num 1) = x"
+  by (import hollight REAL_MUL_RID)
+
+lemma REAL_POW_2: "real_pow x 2 = real_mul x x"
+  by (import hollight REAL_POW_2)
+
+lemma REAL_POLY_CLAUSES: "(ALL x y z. real_add x (real_add y z) = real_add (real_add x y) z) &
+(ALL x y. real_add x y = real_add y x) &
+(ALL x. real_add (real_of_num 0) x = x) &
+(ALL x y z. real_mul x (real_mul y z) = real_mul (real_mul x y) z) &
+(ALL x y. real_mul x y = real_mul y x) &
+(ALL x. real_mul (real_of_num 1) x = x) &
+(ALL x. real_mul (real_of_num 0) x = real_of_num 0) &
+(ALL x xa xb.
+    real_mul x (real_add xa xb) =
+    real_add (real_mul x xa) (real_mul x xb)) &
+(ALL x. real_pow x 0 = real_of_num 1) &
+(ALL x xa. real_pow x (Suc xa) = real_mul x (real_pow x xa))"
+  by (import hollight REAL_POLY_CLAUSES)
+
+lemma REAL_POLY_NEG_CLAUSES: "(ALL x. real_neg x = real_mul (real_neg (real_of_num 1)) x) &
+(ALL x xa.
+    real_sub x xa = real_add x (real_mul (real_neg (real_of_num 1)) xa))"
+  by (import hollight REAL_POLY_NEG_CLAUSES)
+
+lemma REAL_POS: "real_le (real_of_num 0) (real_of_num x)"
+  by (import hollight REAL_POS)
+
+lemma REAL_OF_NUM_LT: "real_lt (real_of_num x) (real_of_num xa) = (x < xa)"
+  by (import hollight REAL_OF_NUM_LT)
+
+lemma REAL_OF_NUM_GE: "real_ge (real_of_num x) (real_of_num xa) = (xa <= x)"
+  by (import hollight REAL_OF_NUM_GE)
+
+lemma REAL_OF_NUM_GT: "real_gt (real_of_num x) (real_of_num xa) = (xa < x)"
+  by (import hollight REAL_OF_NUM_GT)
+
+lemma REAL_OF_NUM_MAX: "real_max (real_of_num x) (real_of_num xa) = real_of_num (max x xa)"
+  by (import hollight REAL_OF_NUM_MAX)
+
+lemma REAL_OF_NUM_MIN: "real_min (real_of_num x) (real_of_num xa) = real_of_num (min x xa)"
+  by (import hollight REAL_OF_NUM_MIN)
+
+lemma REAL_OF_NUM_SUC: "real_add (real_of_num x) (real_of_num 1) = real_of_num (Suc x)"
+  by (import hollight REAL_OF_NUM_SUC)
+
+lemma REAL_OF_NUM_SUB: "m <= n ==> real_sub (real_of_num n) (real_of_num m) = real_of_num (n - m)"
+  by (import hollight REAL_OF_NUM_SUB)
+
+lemma REAL_MUL_AC: "real_mul m n = real_mul n m &
+real_mul (real_mul m n) p = real_mul m (real_mul n p) &
+real_mul m (real_mul n p) = real_mul n (real_mul m p)"
+  by (import hollight REAL_MUL_AC)
+
+lemma REAL_ADD_RDISTRIB: "real_mul (real_add x y) z = real_add (real_mul x z) (real_mul y z)"
+  by (import hollight REAL_ADD_RDISTRIB)
+
+lemma REAL_LT_LADD_IMP: "real_lt y z ==> real_lt (real_add x y) (real_add x z)"
+  by (import hollight REAL_LT_LADD_IMP)
+
+lemma REAL_LT_MUL: "real_lt (real_of_num 0) x & real_lt (real_of_num 0) y
+==> real_lt (real_of_num 0) (real_mul x y)"
+  by (import hollight REAL_LT_MUL)
+
+lemma REAL_EQ_ADD_LCANCEL_0: "(real_add x y = x) = (y = real_of_num 0)"
+  by (import hollight REAL_EQ_ADD_LCANCEL_0)
+
+lemma REAL_EQ_ADD_RCANCEL_0: "(real_add x y = y) = (x = real_of_num 0)"
+  by (import hollight REAL_EQ_ADD_RCANCEL_0)
+
+lemma REAL_LNEG_UNIQ: "(real_add x y = real_of_num 0) = (x = real_neg y)"
+  by (import hollight REAL_LNEG_UNIQ)
+
+lemma REAL_RNEG_UNIQ: "(real_add x y = real_of_num 0) = (y = real_neg x)"
+  by (import hollight REAL_RNEG_UNIQ)
+
+lemma REAL_NEG_LMUL: "real_neg (real_mul x y) = real_mul (real_neg x) y"
+  by (import hollight REAL_NEG_LMUL)
+
+lemma REAL_NEG_RMUL: "real_neg (real_mul x y) = real_mul x (real_neg y)"
+  by (import hollight REAL_NEG_RMUL)
+
+lemma REAL_NEGNEG: "real_neg (real_neg x) = x"
+  by (import hollight REAL_NEGNEG)
+
+lemma REAL_NEG_MUL2: "real_mul (real_neg x) (real_neg y) = real_mul x y"
+  by (import hollight REAL_NEG_MUL2)
+
+lemma REAL_LT_LADD: "real_lt (real_add x y) (real_add x z) = real_lt y z"
+  by (import hollight REAL_LT_LADD)
+
+lemma REAL_LT_RADD: "real_lt (real_add x z) (real_add y z) = real_lt x y"
+  by (import hollight REAL_LT_RADD)
+
+lemma REAL_LT_ANTISYM: "~ (real_lt x y & real_lt y x)"
+  by (import hollight REAL_LT_ANTISYM)
+
+lemma REAL_LT_GT: "real_lt x y ==> ~ real_lt y x"
+  by (import hollight REAL_LT_GT)
+
+lemma REAL_NOT_EQ: "(x ~= y) = (real_lt x y | real_lt y x)"
+  by (import hollight REAL_NOT_EQ)
+
+lemma REAL_LET_ANTISYM: "~ (real_le x y & real_lt y x)"
+  by (import hollight REAL_LET_ANTISYM)
+
+lemma REAL_NEG_LT0: "real_lt (real_neg x) (real_of_num 0) = real_lt (real_of_num 0) x"
+  by (import hollight REAL_NEG_LT0)
+
+lemma REAL_NEG_GT0: "real_lt (real_of_num 0) (real_neg x) = real_lt x (real_of_num 0)"
+  by (import hollight REAL_NEG_GT0)
+
+lemma REAL_NEG_LE0: "real_le (real_neg x) (real_of_num 0) = real_le (real_of_num 0) x"
+  by (import hollight REAL_NEG_LE0)
+
+lemma REAL_NEG_GE0: "real_le (real_of_num 0) (real_neg x) = real_le x (real_of_num 0)"
+  by (import hollight REAL_NEG_GE0)
+
+lemma REAL_LT_TOTAL: "x = y | real_lt x y | real_lt y x"
+  by (import hollight REAL_LT_TOTAL)
+
+lemma REAL_LT_NEGTOTAL: "x = real_of_num 0 |
+real_lt (real_of_num 0) x | real_lt (real_of_num 0) (real_neg x)"
+  by (import hollight REAL_LT_NEGTOTAL)
+
+lemma REAL_LE_01: "real_le (real_of_num 0) (real_of_num 1)"
+  by (import hollight REAL_LE_01)
+
+lemma REAL_LT_01: "real_lt (real_of_num 0) (real_of_num 1)"
+  by (import hollight REAL_LT_01)
+
+lemma REAL_LE_LADD: "real_le (real_add x y) (real_add x z) = real_le y z"
+  by (import hollight REAL_LE_LADD)
+
+lemma REAL_LE_RADD: "real_le (real_add x z) (real_add y z) = real_le x y"
+  by (import hollight REAL_LE_RADD)
+
+lemma REAL_LT_ADD2: "real_lt w x & real_lt y z ==> real_lt (real_add w y) (real_add x z)"
+  by (import hollight REAL_LT_ADD2)
+
+lemma REAL_LE_ADD2: "real_le w x & real_le y z ==> real_le (real_add w y) (real_add x z)"
+  by (import hollight REAL_LE_ADD2)
+
+lemma REAL_LT_LNEG: "real_lt (real_neg x) xa = real_lt (real_of_num 0) (real_add x xa)"
+  by (import hollight REAL_LT_LNEG)
+
+lemma REAL_LT_RNEG: "real_lt x (real_neg xa) = real_lt (real_add x xa) (real_of_num 0)"
+  by (import hollight REAL_LT_RNEG)
+
+lemma REAL_LT_ADDNEG: "real_lt y (real_add x (real_neg z)) = real_lt (real_add y z) x"
+  by (import hollight REAL_LT_ADDNEG)
+
+lemma REAL_LT_ADDNEG2: "real_lt (real_add x (real_neg y)) z = real_lt x (real_add z y)"
+  by (import hollight REAL_LT_ADDNEG2)
+
+lemma REAL_LT_ADD1: "real_le x y ==> real_lt x (real_add y (real_of_num 1))"
+  by (import hollight REAL_LT_ADD1)
+
+lemma REAL_SUB_ADD: "real_add (real_sub x y) y = x"
+  by (import hollight REAL_SUB_ADD)
+
+lemma REAL_SUB_ADD2: "real_add y (real_sub x y) = x"
+  by (import hollight REAL_SUB_ADD2)
+
+lemma REAL_SUB_REFL: "real_sub x x = real_of_num 0"
+  by (import hollight REAL_SUB_REFL)
+
+lemma REAL_LE_DOUBLE: "real_le (real_of_num 0) (real_add x x) = real_le (real_of_num 0) x"
+  by (import hollight REAL_LE_DOUBLE)
+
+lemma REAL_LE_NEGL: "real_le (real_neg x) x = real_le (real_of_num 0) x"
+  by (import hollight REAL_LE_NEGL)
+
+lemma REAL_LE_NEGR: "real_le x (real_neg x) = real_le x (real_of_num 0)"
+  by (import hollight REAL_LE_NEGR)
+
+lemma REAL_NEG_EQ_0: "(real_neg x = real_of_num 0) = (x = real_of_num 0)"
+  by (import hollight REAL_NEG_EQ_0)
+
+lemma REAL_ADD_SUB: "real_sub (real_add x y) x = y"
+  by (import hollight REAL_ADD_SUB)
+
+lemma REAL_NEG_EQ: "(real_neg x = y) = (x = real_neg y)"
+  by (import hollight REAL_NEG_EQ)
+
+lemma REAL_NEG_MINUS1: "real_neg x = real_mul (real_neg (real_of_num 1)) x"
+  by (import hollight REAL_NEG_MINUS1)
+
+lemma REAL_LT_IMP_NE: "real_lt x y ==> x ~= y"
+  by (import hollight REAL_LT_IMP_NE)
+
+lemma REAL_LE_ADDR: "real_le x (real_add x y) = real_le (real_of_num 0) y"
+  by (import hollight REAL_LE_ADDR)
+
+lemma REAL_LE_ADDL: "real_le y (real_add x y) = real_le (real_of_num 0) x"
+  by (import hollight REAL_LE_ADDL)
+
+lemma REAL_LT_ADDR: "real_lt x (real_add x y) = real_lt (real_of_num 0) y"
+  by (import hollight REAL_LT_ADDR)
+
+lemma REAL_LT_ADDL: "real_lt y (real_add x y) = real_lt (real_of_num 0) x"
+  by (import hollight REAL_LT_ADDL)
+
+lemma REAL_SUB_SUB: "real_sub (real_sub x y) x = real_neg y"
+  by (import hollight REAL_SUB_SUB)
+
+lemma REAL_LT_ADD_SUB: "real_lt (real_add x y) z = real_lt x (real_sub z y)"
+  by (import hollight REAL_LT_ADD_SUB)
+
+lemma REAL_LT_SUB_RADD: "real_lt (real_sub x y) z = real_lt x (real_add z y)"
+  by (import hollight REAL_LT_SUB_RADD)
+
+lemma REAL_LT_SUB_LADD: "real_lt x (real_sub y z) = real_lt (real_add x z) y"
+  by (import hollight REAL_LT_SUB_LADD)
+
+lemma REAL_LE_SUB_LADD: "real_le x (real_sub y z) = real_le (real_add x z) y"
+  by (import hollight REAL_LE_SUB_LADD)
+
+lemma REAL_LE_SUB_RADD: "real_le (real_sub x y) z = real_le x (real_add z y)"
+  by (import hollight REAL_LE_SUB_RADD)
+
+lemma REAL_LT_NEG: "real_lt (real_neg x) (real_neg y) = real_lt y x"
+  by (import hollight REAL_LT_NEG)
+
+lemma REAL_LE_NEG: "real_le (real_neg x) (real_neg y) = real_le y x"
+  by (import hollight REAL_LE_NEG)
+
+lemma REAL_ADD2_SUB2: "real_sub (real_add a b) (real_add c d) =
+real_add (real_sub a c) (real_sub b d)"
+  by (import hollight REAL_ADD2_SUB2)
+
+lemma REAL_SUB_LZERO: "real_sub (real_of_num 0) x = real_neg x"
+  by (import hollight REAL_SUB_LZERO)
+
+lemma REAL_SUB_RZERO: "real_sub x (real_of_num 0) = x"
+  by (import hollight REAL_SUB_RZERO)
+
+lemma REAL_LET_ADD2: "real_le w x & real_lt y z ==> real_lt (real_add w y) (real_add x z)"
+  by (import hollight REAL_LET_ADD2)
+
+lemma REAL_LTE_ADD2: "real_lt w x & real_le y z ==> real_lt (real_add w y) (real_add x z)"
+  by (import hollight REAL_LTE_ADD2)
+
+lemma REAL_SUB_LNEG: "real_sub (real_neg x) y = real_neg (real_add x y)"
+  by (import hollight REAL_SUB_LNEG)
+
+lemma REAL_SUB_RNEG: "real_sub x (real_neg y) = real_add x y"
+  by (import hollight REAL_SUB_RNEG)
+
+lemma REAL_SUB_NEG2: "real_sub (real_neg x) (real_neg y) = real_sub y x"
+  by (import hollight REAL_SUB_NEG2)
+
+lemma REAL_SUB_TRIANGLE: "real_add (real_sub a b) (real_sub b c) = real_sub a c"
+  by (import hollight REAL_SUB_TRIANGLE)
+
+lemma REAL_EQ_SUB_LADD: "(x = real_sub y z) = (real_add x z = y)"
+  by (import hollight REAL_EQ_SUB_LADD)
+
+lemma REAL_EQ_SUB_RADD: "(real_sub x y = z) = (x = real_add z y)"
+  by (import hollight REAL_EQ_SUB_RADD)
+
+lemma REAL_SUB_SUB2: "real_sub x (real_sub x y) = y"
+  by (import hollight REAL_SUB_SUB2)
+
+lemma REAL_ADD_SUB2: "real_sub x (real_add x y) = real_neg y"
+  by (import hollight REAL_ADD_SUB2)
+
+lemma REAL_EQ_IMP_LE: "x = y ==> real_le x y"
+  by (import hollight REAL_EQ_IMP_LE)
+
+lemma REAL_POS_NZ: "real_lt (real_of_num 0) x ==> x ~= real_of_num 0"
+  by (import hollight REAL_POS_NZ)
+
+lemma REAL_DIFFSQ: "real_mul (real_add x y) (real_sub x y) =
+real_sub (real_mul x x) (real_mul y y)"
+  by (import hollight REAL_DIFFSQ)
+
+lemma REAL_EQ_NEG2: "(real_neg x = real_neg y) = (x = y)"
+  by (import hollight REAL_EQ_NEG2)
+
+lemma REAL_LT_NEG2: "real_lt (real_neg x) (real_neg y) = real_lt y x"
+  by (import hollight REAL_LT_NEG2)
+
+lemma REAL_SUB_LDISTRIB: "real_mul x (real_sub y z) = real_sub (real_mul x y) (real_mul x z)"
+  by (import hollight REAL_SUB_LDISTRIB)
+
+lemma REAL_SUB_RDISTRIB: "real_mul (real_sub x y) z = real_sub (real_mul x z) (real_mul y z)"
+  by (import hollight REAL_SUB_RDISTRIB)
+
+lemma REAL_ABS_ZERO: "(real_abs x = real_of_num 0) = (x = real_of_num 0)"
+  by (import hollight REAL_ABS_ZERO)
+
+lemma REAL_ABS_0: "real_abs (real_of_num 0) = real_of_num 0"
+  by (import hollight REAL_ABS_0)
+
+lemma REAL_ABS_1: "real_abs (real_of_num 1) = real_of_num 1"
+  by (import hollight REAL_ABS_1)
+
+lemma REAL_ABS_TRIANGLE: "real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))"
+  by (import hollight REAL_ABS_TRIANGLE)
+
+lemma REAL_ABS_TRIANGLE_LE: "real_le (real_add (real_abs x) (real_abs (real_sub y x))) z
+==> real_le (real_abs y) z"
+  by (import hollight REAL_ABS_TRIANGLE_LE)
+
+lemma REAL_ABS_TRIANGLE_LT: "real_lt (real_add (real_abs x) (real_abs (real_sub y x))) z
+==> real_lt (real_abs y) z"
+  by (import hollight REAL_ABS_TRIANGLE_LT)
+
+lemma REAL_ABS_POS: "real_le (real_of_num 0) (real_abs x)"
+  by (import hollight REAL_ABS_POS)
+
+lemma REAL_ABS_SUB: "real_abs (real_sub x y) = real_abs (real_sub y x)"
+  by (import hollight REAL_ABS_SUB)
+
+lemma REAL_ABS_NZ: "(x ~= real_of_num 0) = real_lt (real_of_num 0) (real_abs x)"
+  by (import hollight REAL_ABS_NZ)
+
+lemma REAL_ABS_ABS: "real_abs (real_abs x) = real_abs x"
+  by (import hollight REAL_ABS_ABS)
+
+lemma REAL_ABS_LE: "real_le x (real_abs x)"
+  by (import hollight REAL_ABS_LE)
+
+lemma REAL_ABS_REFL: "(real_abs x = x) = real_le (real_of_num 0) x"
+  by (import hollight REAL_ABS_REFL)
+
+lemma REAL_ABS_BETWEEN: "(real_lt (real_of_num 0) d &
+ real_lt (real_sub x d) y & real_lt y (real_add x d)) =
+real_lt (real_abs (real_sub y x)) d"
+  by (import hollight REAL_ABS_BETWEEN)
+
+lemma REAL_ABS_BOUND: "real_lt (real_abs (real_sub x y)) d ==> real_lt y (real_add x d)"
+  by (import hollight REAL_ABS_BOUND)
+
+lemma REAL_ABS_STILLNZ: "real_lt (real_abs (real_sub x y)) (real_abs y) ==> x ~= real_of_num 0"
+  by (import hollight REAL_ABS_STILLNZ)
+
+lemma REAL_ABS_CASES: "x = real_of_num 0 | real_lt (real_of_num 0) (real_abs x)"
+  by (import hollight REAL_ABS_CASES)
+
+lemma REAL_ABS_BETWEEN1: "real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x)
+==> real_lt y z"
+  by (import hollight REAL_ABS_BETWEEN1)
+
+lemma REAL_ABS_SIGN: "real_lt (real_abs (real_sub x y)) y ==> real_lt (real_of_num 0) x"
+  by (import hollight REAL_ABS_SIGN)
+
+lemma REAL_ABS_SIGN2: "real_lt (real_abs (real_sub x y)) (real_neg y) ==> real_lt x (real_of_num 0)"
+  by (import hollight REAL_ABS_SIGN2)
+
+lemma REAL_ABS_CIRCLE: "real_lt (real_abs h) (real_sub (real_abs y) (real_abs x))
+==> real_lt (real_abs (real_add x h)) (real_abs y)"
+  by (import hollight REAL_ABS_CIRCLE)
+
+lemma REAL_SUB_ABS: "real_le (real_sub (real_abs x) (real_abs y)) (real_abs (real_sub x y))"
+  by (import hollight REAL_SUB_ABS)
+
+lemma REAL_ABS_SUB_ABS: "real_le (real_abs (real_sub (real_abs x) (real_abs y)))
+ (real_abs (real_sub x y))"
+  by (import hollight REAL_ABS_SUB_ABS)
+
+lemma REAL_ABS_BETWEEN2: "real_lt x0 y0 &
+real_lt (real_mul (real_of_num 2) (real_abs (real_sub x x0)))
+ (real_sub y0 x0) &
+real_lt (real_mul (real_of_num 2) (real_abs (real_sub y y0)))
+ (real_sub y0 x0)
+==> real_lt x y"
+  by (import hollight REAL_ABS_BETWEEN2)
+
+lemma REAL_ABS_BOUNDS: "real_le (real_abs x) k = (real_le (real_neg k) x & real_le x k)"
+  by (import hollight REAL_ABS_BOUNDS)
+
+lemma REAL_BOUNDS_LE: "(real_le (real_neg k) x & real_le x k) = real_le (real_abs x) k"
+  by (import hollight REAL_BOUNDS_LE)
+
+lemma REAL_BOUNDS_LT: "(real_lt (real_neg k) x & real_lt x k) = real_lt (real_abs x) k"
+  by (import hollight REAL_BOUNDS_LT)
+
+lemma REAL_MIN_MAX: "real_min x y = real_neg (real_max (real_neg x) (real_neg y))"
+  by (import hollight REAL_MIN_MAX)
+
+lemma REAL_MAX_MIN: "real_max x y = real_neg (real_min (real_neg x) (real_neg y))"
+  by (import hollight REAL_MAX_MIN)
+
+lemma REAL_MAX_MAX: "real_le x (real_max x y) & real_le y (real_max x y)"
+  by (import hollight REAL_MAX_MAX)
+
+lemma REAL_MIN_MIN: "real_le (real_min x y) x & real_le (real_min x y) y"
+  by (import hollight REAL_MIN_MIN)
+
+lemma REAL_MAX_SYM: "real_max x y = real_max y x"
+  by (import hollight REAL_MAX_SYM)
+
+lemma REAL_MIN_SYM: "real_min x y = real_min y x"
+  by (import hollight REAL_MIN_SYM)
+
+lemma REAL_LE_MAX: "real_le z (real_max x y) = (real_le z x | real_le z y)"
+  by (import hollight REAL_LE_MAX)
+
+lemma REAL_LE_MIN: "real_le z (real_min x y) = (real_le z x & real_le z y)"
+  by (import hollight REAL_LE_MIN)
+
+lemma REAL_LT_MAX: "real_lt z (real_max x y) = (real_lt z x | real_lt z y)"
+  by (import hollight REAL_LT_MAX)
+
+lemma REAL_LT_MIN: "real_lt z (real_min x y) = (real_lt z x & real_lt z y)"
+  by (import hollight REAL_LT_MIN)
+
+lemma REAL_MAX_LE: "real_le (real_max x y) z = (real_le x z & real_le y z)"
+  by (import hollight REAL_MAX_LE)
+
+lemma REAL_MIN_LE: "real_le (real_min x y) z = (real_le x z | real_le y z)"
+  by (import hollight REAL_MIN_LE)
+
+lemma REAL_MAX_LT: "real_lt (real_max x y) z = (real_lt x z & real_lt y z)"
+  by (import hollight REAL_MAX_LT)
+
+lemma REAL_MIN_LT: "real_lt (real_min x y) z = (real_lt x z | real_lt y z)"
+  by (import hollight REAL_MIN_LT)
+
+lemma REAL_MAX_ASSOC: "real_max x (real_max y z) = real_max (real_max x y) z"
+  by (import hollight REAL_MAX_ASSOC)
+
+lemma REAL_MIN_ASSOC: "real_min x (real_min y z) = real_min (real_min x y) z"
+  by (import hollight REAL_MIN_ASSOC)
+
+lemma REAL_MAX_ACI: "real_max x y = real_max y x &
+real_max (real_max x y) z = real_max x (real_max y z) &
+real_max x (real_max y z) = real_max y (real_max x z) &
+real_max x x = x & real_max x (real_max x y) = real_max x y"
+  by (import hollight REAL_MAX_ACI)
+
+lemma REAL_MIN_ACI: "real_min x y = real_min y x &
+real_min (real_min x y) z = real_min x (real_min y z) &
+real_min x (real_min y z) = real_min y (real_min x z) &
+real_min x x = x & real_min x (real_min x y) = real_min x y"
+  by (import hollight REAL_MIN_ACI)
+
+lemma REAL_ABS_MUL: "real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)"
+  by (import hollight REAL_ABS_MUL)
+
+lemma REAL_POW_LE: "real_le (real_of_num 0) x ==> real_le (real_of_num 0) (real_pow x n)"
+  by (import hollight REAL_POW_LE)
+
+lemma REAL_POW_LT: "real_lt (real_of_num 0) x ==> real_lt (real_of_num 0) (real_pow x n)"
+  by (import hollight REAL_POW_LT)
+
+lemma REAL_ABS_POW: "real_abs (real_pow x n) = real_pow (real_abs x) n"
+  by (import hollight REAL_ABS_POW)
+
+lemma REAL_LE_LMUL: "real_le (real_of_num 0) x & real_le xa xb
+==> real_le (real_mul x xa) (real_mul x xb)"
+  by (import hollight REAL_LE_LMUL)
+
+lemma REAL_LE_RMUL: "real_le x y & real_le (real_of_num 0) z
+==> real_le (real_mul x z) (real_mul y z)"
+  by (import hollight REAL_LE_RMUL)
+
+lemma REAL_LT_LMUL: "real_lt (real_of_num 0) x & real_lt xa xb
+==> real_lt (real_mul x xa) (real_mul x xb)"
+  by (import hollight REAL_LT_LMUL)
+
+lemma REAL_LT_RMUL: "real_lt x y & real_lt (real_of_num 0) z
+==> real_lt (real_mul x z) (real_mul y z)"
+  by (import hollight REAL_LT_RMUL)
+
+lemma REAL_EQ_MUL_LCANCEL: "(real_mul x y = real_mul x z) = (x = real_of_num 0 | y = z)"
+  by (import hollight REAL_EQ_MUL_LCANCEL)
+
+lemma REAL_EQ_MUL_RCANCEL: "(real_mul x xb = real_mul xa xb) = (x = xa | xb = real_of_num 0)"
+  by (import hollight REAL_EQ_MUL_RCANCEL)
+
+lemma REAL_MUL_LINV_UNIQ: "real_mul x y = real_of_num 1 ==> real_inv y = x"
+  by (import hollight REAL_MUL_LINV_UNIQ)
+
+lemma REAL_MUL_RINV_UNIQ: "real_mul x xa = real_of_num 1 ==> real_inv x = xa"
+  by (import hollight REAL_MUL_RINV_UNIQ)
+
+lemma REAL_INV_INV: "real_inv (real_inv x) = x"
+  by (import hollight REAL_INV_INV)
+
+lemma REAL_EQ_INV2: "(real_inv x = real_inv y) = (x = y)"
+  by (import hollight REAL_EQ_INV2)
+
+lemma REAL_INV_EQ_0: "(real_inv x = real_of_num 0) = (x = real_of_num 0)"
+  by (import hollight REAL_INV_EQ_0)
+
+lemma REAL_LT_INV: "real_lt (real_of_num 0) x ==> real_lt (real_of_num 0) (real_inv x)"
+  by (import hollight REAL_LT_INV)
+
+lemma REAL_LT_INV_EQ: "real_lt (real_of_num 0) (real_inv x) = real_lt (real_of_num 0) x"
+  by (import hollight REAL_LT_INV_EQ)
+
+lemma REAL_INV_NEG: "real_inv (real_neg x) = real_neg (real_inv x)"
+  by (import hollight REAL_INV_NEG)
+
+lemma REAL_LE_INV_EQ: "real_le (real_of_num 0) (real_inv x) = real_le (real_of_num 0) x"
+  by (import hollight REAL_LE_INV_EQ)
+
+lemma REAL_LE_INV: "real_le (real_of_num 0) x ==> real_le (real_of_num 0) (real_inv x)"
+  by (import hollight REAL_LE_INV)
+
+lemma REAL_MUL_RINV: "x ~= real_of_num 0 ==> real_mul x (real_inv x) = real_of_num 1"
+  by (import hollight REAL_MUL_RINV)
+
+lemma REAL_INV_1: "real_inv (real_of_num 1) = real_of_num 1"
+  by (import hollight REAL_INV_1)
+
+lemma REAL_INV_EQ_1: "(real_inv x = real_of_num 1) = (x = real_of_num 1)"
+  by (import hollight REAL_INV_EQ_1)
+
+lemma REAL_DIV_1: "real_div x (real_of_num 1) = x"
+  by (import hollight REAL_DIV_1)
+
+lemma REAL_DIV_REFL: "x ~= real_of_num 0 ==> real_div x x = real_of_num 1"
+  by (import hollight REAL_DIV_REFL)
+
+lemma REAL_DIV_RMUL: "xa ~= real_of_num 0 ==> real_mul (real_div x xa) xa = x"
+  by (import hollight REAL_DIV_RMUL)
+
+lemma REAL_DIV_LMUL: "xa ~= real_of_num 0 ==> real_mul xa (real_div x xa) = x"
+  by (import hollight REAL_DIV_LMUL)
+
+lemma REAL_ABS_INV: "real_abs (real_inv x) = real_inv (real_abs x)"
+  by (import hollight REAL_ABS_INV)
+
+lemma REAL_ABS_DIV: "real_abs (real_div x xa) = real_div (real_abs x) (real_abs xa)"
+  by (import hollight REAL_ABS_DIV)
+
+lemma REAL_INV_MUL: "real_inv (real_mul x y) = real_mul (real_inv x) (real_inv y)"
+  by (import hollight REAL_INV_MUL)
+
+lemma REAL_INV_DIV: "real_inv (real_div x xa) = real_div xa x"
+  by (import hollight REAL_INV_DIV)
+
+lemma REAL_POW_MUL: "real_pow (real_mul x y) n = real_mul (real_pow x n) (real_pow y n)"
+  by (import hollight REAL_POW_MUL)
+
+lemma REAL_POW_INV: "real_pow (real_inv x) n = real_inv (real_pow x n)"
+  by (import hollight REAL_POW_INV)
+
+lemma REAL_INV_POW: "real_inv (real_pow x xa) = real_pow (real_inv x) xa"
+  by (import hollight REAL_INV_POW)
+
+lemma REAL_POW_DIV: "real_pow (real_div x xa) xb = real_div (real_pow x xb) (real_pow xa xb)"
+  by (import hollight REAL_POW_DIV)
+
+lemma REAL_POW_ADD: "real_pow x (m + n) = real_mul (real_pow x m) (real_pow x n)"
+  by (import hollight REAL_POW_ADD)
+
+lemma REAL_POW_NZ: "x ~= real_of_num 0 ==> real_pow x n ~= real_of_num 0"
+  by (import hollight REAL_POW_NZ)
+
+lemma REAL_POW_SUB: "x ~= real_of_num 0 & m <= n
+==> real_pow x (n - m) = real_div (real_pow x n) (real_pow x m)"
+  by (import hollight REAL_POW_SUB)
+
+lemma REAL_LT_IMP_NZ: "real_lt (real_of_num 0) x ==> x ~= real_of_num 0"
+  by (import hollight REAL_LT_IMP_NZ)
+
+lemma REAL_LT_LCANCEL_IMP: "real_lt (real_of_num 0) x & real_lt (real_mul x y) (real_mul x z)
+==> real_lt y z"
+  by (import hollight REAL_LT_LCANCEL_IMP)
+
+lemma REAL_LT_RCANCEL_IMP: "real_lt (real_of_num 0) xb & real_lt (real_mul x xb) (real_mul xa xb)
+==> real_lt x xa"
+  by (import hollight REAL_LT_RCANCEL_IMP)
+
+lemma REAL_LE_LCANCEL_IMP: "real_lt (real_of_num 0) x & real_le (real_mul x y) (real_mul x z)
+==> real_le y z"
+  by (import hollight REAL_LE_LCANCEL_IMP)
+
+lemma REAL_LE_RCANCEL_IMP: "real_lt (real_of_num 0) xb & real_le (real_mul x xb) (real_mul xa xb)
+==> real_le x xa"
+  by (import hollight REAL_LE_RCANCEL_IMP)
+
+lemma REAL_LE_RMUL_EQ: "real_lt (real_of_num 0) z
+==> real_le (real_mul x z) (real_mul y z) = real_le x y"
+  by (import hollight REAL_LE_RMUL_EQ)
+
+lemma REAL_LE_LMUL_EQ: "real_lt (real_of_num 0) z
+==> real_le (real_mul z x) (real_mul z y) = real_le x y"
+  by (import hollight REAL_LE_LMUL_EQ)
+
+lemma REAL_LT_RMUL_EQ: "real_lt (real_of_num 0) xb
+==> real_lt (real_mul x xb) (real_mul xa xb) = real_lt x xa"
+  by (import hollight REAL_LT_RMUL_EQ)
+
+lemma REAL_LT_LMUL_EQ: "real_lt (real_of_num 0) xb
+==> real_lt (real_mul xb x) (real_mul xb xa) = real_lt x xa"
+  by (import hollight REAL_LT_LMUL_EQ)
+
+lemma REAL_LE_MUL_EQ: "(ALL x y.
+    real_lt (real_of_num 0) x -->
+    real_le (real_of_num 0) (real_mul x y) = real_le (real_of_num 0) y) &
+(ALL x y.
+    real_lt (real_of_num 0) y -->
+    real_le (real_of_num 0) (real_mul x y) = real_le (real_of_num 0) x)"
+  by (import hollight REAL_LE_MUL_EQ)
+
+lemma REAL_LT_MUL_EQ: "(ALL x y.
+    real_lt (real_of_num 0) x -->
+    real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) y) &
+(ALL x y.
+    real_lt (real_of_num 0) y -->
+    real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) x)"
+  by (import hollight REAL_LT_MUL_EQ)
+
+lemma REAL_MUL_POS_LT: "real_lt (real_of_num 0) (real_mul x y) =
+(real_lt (real_of_num 0) x & real_lt (real_of_num 0) y |
+ real_lt x (real_of_num 0) & real_lt y (real_of_num 0))"
+  by (import hollight REAL_MUL_POS_LT)
+
+lemma REAL_MUL_POS_LE: "real_le (real_of_num 0) (real_mul x xa) =
+(x = real_of_num 0 |
+ xa = real_of_num 0 |
+ real_lt (real_of_num 0) x & real_lt (real_of_num 0) xa |
+ real_lt x (real_of_num 0) & real_lt xa (real_of_num 0))"
+  by (import hollight REAL_MUL_POS_LE)
+
+lemma REAL_LE_RDIV_EQ: "real_lt (real_of_num 0) z
+==> real_le x (real_div y z) = real_le (real_mul x z) y"
+  by (import hollight REAL_LE_RDIV_EQ)
+
+lemma REAL_LE_LDIV_EQ: "real_lt (real_of_num 0) z
+==> real_le (real_div x z) y = real_le x (real_mul y z)"
+  by (import hollight REAL_LE_LDIV_EQ)
+
+lemma REAL_LT_RDIV_EQ: "real_lt (real_of_num 0) xb
+==> real_lt x (real_div xa xb) = real_lt (real_mul x xb) xa"
+  by (import hollight REAL_LT_RDIV_EQ)
+
+lemma REAL_LT_LDIV_EQ: "real_lt (real_of_num 0) xb
+==> real_lt (real_div x xb) xa = real_lt x (real_mul xa xb)"
+  by (import hollight REAL_LT_LDIV_EQ)
+
+lemma REAL_EQ_RDIV_EQ: "real_lt (real_of_num 0) xb ==> (x = real_div xa xb) = (real_mul x xb = xa)"
+  by (import hollight REAL_EQ_RDIV_EQ)
+
+lemma REAL_EQ_LDIV_EQ: "real_lt (real_of_num 0) xb ==> (real_div x xb = xa) = (x = real_mul xa xb)"
+  by (import hollight REAL_EQ_LDIV_EQ)
+
+lemma REAL_LT_DIV2_EQ: "real_lt (real_of_num 0) xb
+==> real_lt (real_div x xb) (real_div xa xb) = real_lt x xa"
+  by (import hollight REAL_LT_DIV2_EQ)
+
+lemma REAL_LE_DIV2_EQ: "real_lt (real_of_num 0) xb
+==> real_le (real_div x xb) (real_div xa xb) = real_le x xa"
+  by (import hollight REAL_LE_DIV2_EQ)
+
+lemma REAL_MUL_2: "real_mul (real_of_num 2) x = real_add x x"
+  by (import hollight REAL_MUL_2)
+
+lemma REAL_POW_EQ_0: "(real_pow x n = real_of_num 0) = (x = real_of_num 0 & n ~= 0)"
+  by (import hollight REAL_POW_EQ_0)
+
+lemma REAL_LE_MUL2: "real_le (real_of_num 0) w &
+real_le w x & real_le (real_of_num 0) y & real_le y z
+==> real_le (real_mul w y) (real_mul x z)"
+  by (import hollight REAL_LE_MUL2)
+
+lemma REAL_LT_MUL2: "real_le (real_of_num 0) w &
+real_lt w x & real_le (real_of_num 0) y & real_lt y z
+==> real_lt (real_mul w y) (real_mul x z)"
+  by (import hollight REAL_LT_MUL2)
+
+lemma REAL_LT_SQUARE: "real_lt (real_of_num 0) (real_mul x x) = (x ~= real_of_num 0)"
+  by (import hollight REAL_LT_SQUARE)
+
+lemma REAL_POW_1: "real_pow x 1 = x"
+  by (import hollight REAL_POW_1)
+
+lemma REAL_POW_ONE: "real_pow (real_of_num 1) n = real_of_num 1"
+  by (import hollight REAL_POW_ONE)
+
+lemma REAL_LT_INV2: "real_lt (real_of_num 0) x & real_lt x y
+==> real_lt (real_inv y) (real_inv x)"
+  by (import hollight REAL_LT_INV2)
+
+lemma REAL_LE_INV2: "real_lt (real_of_num 0) x & real_le x y
+==> real_le (real_inv y) (real_inv x)"
+  by (import hollight REAL_LE_INV2)
+
+lemma REAL_LT_LINV: "real_lt (real_of_num 0) y & real_lt (real_inv y) x
+==> real_lt (real_inv x) y"
+  by (import hollight REAL_LT_LINV)
+
+lemma REAL_LT_RINV: "real_lt (real_of_num 0) x & real_lt x (real_inv y)
+==> real_lt y (real_inv x)"
+  by (import hollight REAL_LT_RINV)
+
+lemma REAL_LE_LINV: "real_lt (real_of_num 0) y & real_le (real_inv y) x
+==> real_le (real_inv x) y"
+  by (import hollight REAL_LE_LINV)
+
+lemma REAL_LE_RINV: "real_lt (real_of_num 0) x & real_le x (real_inv y)
+==> real_le y (real_inv x)"
+  by (import hollight REAL_LE_RINV)
+
+lemma REAL_INV_LE_1: "real_le (real_of_num 1) x ==> real_le (real_inv x) (real_of_num 1)"
+  by (import hollight REAL_INV_LE_1)
+
+lemma REAL_INV_1_LE: "real_lt (real_of_num 0) x & real_le x (real_of_num 1)
+==> real_le (real_of_num 1) (real_inv x)"
+  by (import hollight REAL_INV_1_LE)
+
+lemma REAL_INV_LT_1: "real_lt (real_of_num 1) x ==> real_lt (real_inv x) (real_of_num 1)"
+  by (import hollight REAL_INV_LT_1)
+
+lemma REAL_INV_1_LT: "real_lt (real_of_num 0) x & real_lt x (real_of_num 1)
+==> real_lt (real_of_num 1) (real_inv x)"
+  by (import hollight REAL_INV_1_LT)
+
+lemma REAL_SUB_INV: "x ~= real_of_num 0 & xa ~= real_of_num 0
+==> real_sub (real_inv x) (real_inv xa) =
+    real_div (real_sub xa x) (real_mul x xa)"
+  by (import hollight REAL_SUB_INV)
+
+lemma REAL_DOWN: "real_lt (real_of_num 0) d ==> EX x. real_lt (real_of_num 0) x & real_lt x d"
+  by (import hollight REAL_DOWN)
+
+lemma REAL_DOWN2: "real_lt (real_of_num 0) d1 & real_lt (real_of_num 0) d2
+==> EX e. real_lt (real_of_num 0) e & real_lt e d1 & real_lt e d2"
+  by (import hollight REAL_DOWN2)
+
+lemma REAL_POW_LE2: "real_le (real_of_num 0) x & real_le x y
+==> real_le (real_pow x n) (real_pow y n)"
+  by (import hollight REAL_POW_LE2)
+
+lemma REAL_POW_LE_1: "real_le (real_of_num 1) x ==> real_le (real_of_num 1) (real_pow x n)"
+  by (import hollight REAL_POW_LE_1)
+
+lemma REAL_POW_1_LE: "real_le (real_of_num 0) x & real_le x (real_of_num 1)
+==> real_le (real_pow x n) (real_of_num 1)"
+  by (import hollight REAL_POW_1_LE)
+
+lemma REAL_POW_MONO: "real_le (real_of_num 1) x & m <= n ==> real_le (real_pow x m) (real_pow x n)"
+  by (import hollight REAL_POW_MONO)
+
+lemma REAL_POW_LT2: "n ~= 0 & real_le (real_of_num 0) x & real_lt x y
+==> real_lt (real_pow x n) (real_pow y n)"
+  by (import hollight REAL_POW_LT2)
+
+lemma REAL_POW_LT_1: "n ~= 0 & real_lt (real_of_num 1) x
+==> real_lt (real_of_num 1) (real_pow x n)"
+  by (import hollight REAL_POW_LT_1)
+
+lemma REAL_POW_1_LT: "n ~= 0 & real_le (real_of_num 0) x & real_lt x (real_of_num 1)
+==> real_lt (real_pow x n) (real_of_num 1)"
+  by (import hollight REAL_POW_1_LT)
+
+lemma REAL_POW_MONO_LT: "real_lt (real_of_num 1) x & m < n ==> real_lt (real_pow x m) (real_pow x n)"
+  by (import hollight REAL_POW_MONO_LT)
+
+lemma REAL_POW_POW: "real_pow (real_pow x m) n = real_pow x (m * n)"
+  by (import hollight REAL_POW_POW)
+
+lemma REAL_EQ_RCANCEL_IMP: "z ~= real_of_num 0 & real_mul x z = real_mul y z ==> x = y"
+  by (import hollight REAL_EQ_RCANCEL_IMP)
+
+lemma REAL_EQ_LCANCEL_IMP: "xb ~= real_of_num 0 & real_mul xb x = real_mul xb xa ==> x = xa"
+  by (import hollight REAL_EQ_LCANCEL_IMP)
+
+lemma REAL_LT_DIV: "real_lt (real_of_num 0) x & real_lt (real_of_num 0) xa
+==> real_lt (real_of_num 0) (real_div x xa)"
+  by (import hollight REAL_LT_DIV)
+
+lemma REAL_LE_DIV: "real_le (real_of_num 0) x & real_le (real_of_num 0) xa
+==> real_le (real_of_num 0) (real_div x xa)"
+  by (import hollight REAL_LE_DIV)
+
+lemma REAL_DIV_POW2: "x ~= real_of_num 0
+==> real_div (real_pow x m) (real_pow x n) =
+    (if n <= m then real_pow x (m - n) else real_inv (real_pow x (n - m)))"
+  by (import hollight REAL_DIV_POW2)
+
+lemma REAL_DIV_POW2_ALT: "x ~= real_of_num 0
+==> real_div (real_pow x m) (real_pow x n) =
+    (if n < m then real_pow x (m - n) else real_inv (real_pow x (n - m)))"
+  by (import hollight REAL_DIV_POW2_ALT)
+
+lemma REAL_LT_POW2: "real_lt (real_of_num 0) (real_pow (real_of_num 2) x)"
+  by (import hollight REAL_LT_POW2)
+
+lemma REAL_LE_POW2: "real_le (real_of_num 1) (real_pow (real_of_num 2) n)"
+  by (import hollight REAL_LE_POW2)
+
+lemma REAL_POW2_ABS: "real_pow (real_abs x) 2 = real_pow x 2"
+  by (import hollight REAL_POW2_ABS)
+
+lemma REAL_LE_SQUARE_ABS: "real_le (real_abs x) (real_abs y) = real_le (real_pow x 2) (real_pow y 2)"
+  by (import hollight REAL_LE_SQUARE_ABS)
+
+lemma REAL_LT_SQUARE_ABS: "real_lt (real_abs x) (real_abs xa) = real_lt (real_pow x 2) (real_pow xa 2)"
+  by (import hollight REAL_LT_SQUARE_ABS)
+
+lemma REAL_EQ_SQUARE_ABS: "(real_abs x = real_abs xa) = (real_pow x 2 = real_pow xa 2)"
+  by (import hollight REAL_EQ_SQUARE_ABS)
+
+lemma REAL_LE_POW_2: "real_le (real_of_num 0) (real_pow x 2)"
+  by (import hollight REAL_LE_POW_2)
+
+lemma REAL_SOS_EQ_0: "(real_add (real_pow x 2) (real_pow y 2) = real_of_num 0) =
+(x = real_of_num 0 & y = real_of_num 0)"
+  by (import hollight REAL_SOS_EQ_0)
+
+lemma REAL_POW_ZERO: "real_pow (real_of_num 0) n =
+(if n = 0 then real_of_num 1 else real_of_num 0)"
+  by (import hollight REAL_POW_ZERO)
+
+lemma REAL_POW_MONO_INV: "real_le (real_of_num 0) x & real_le x (real_of_num 1) & n <= m
+==> real_le (real_pow x m) (real_pow x n)"
+  by (import hollight REAL_POW_MONO_INV)
+
+lemma REAL_POW_LE2_REV: "n ~= 0 & real_le (real_of_num 0) y & real_le (real_pow x n) (real_pow y n)
+==> real_le x y"
+  by (import hollight REAL_POW_LE2_REV)
+
+lemma REAL_POW_LT2_REV: "real_le (real_of_num 0) y & real_lt (real_pow x n) (real_pow y n)
+==> real_lt x y"
+  by (import hollight REAL_POW_LT2_REV)
+
+lemma REAL_POW_EQ: "x ~= 0 &
+real_le (real_of_num 0) xa &
+real_le (real_of_num 0) xb & real_pow xa x = real_pow xb x
+==> xa = xb"
+  by (import hollight REAL_POW_EQ)
+
+lemma REAL_POW_EQ_ABS: "n ~= 0 & real_pow x n = real_pow y n ==> real_abs x = real_abs y"
+  by (import hollight REAL_POW_EQ_ABS)
+
+lemma REAL_POW_EQ_1_IMP: "n ~= 0 & real_pow x n = real_of_num 1 ==> real_abs x = real_of_num 1"
+  by (import hollight REAL_POW_EQ_1_IMP)
+
+lemma REAL_POW_EQ_1: "(real_pow x n = real_of_num 1) =
+(real_abs x = real_of_num 1 & (real_lt x (real_of_num 0) --> even n) |
+ n = 0)"
+  by (import hollight REAL_POW_EQ_1)
+
+lemma REAL_POW_LT2_ODD: "real_lt x y & odd n ==> real_lt (real_pow x n) (real_pow y n)"
+  by (import hollight REAL_POW_LT2_ODD)
+
+lemma REAL_POW_LE2_ODD: "real_le xa xb & odd x ==> real_le (real_pow xa x) (real_pow xb x)"
+  by (import hollight REAL_POW_LE2_ODD)
+
+lemma REAL_POW_LT2_ODD_EQ: "odd n ==> real_lt (real_pow x n) (real_pow y n) = real_lt x y"
+  by (import hollight REAL_POW_LT2_ODD_EQ)
+
+lemma REAL_POW_LE2_ODD_EQ: "odd n ==> real_le (real_pow x n) (real_pow y n) = real_le x y"
+  by (import hollight REAL_POW_LE2_ODD_EQ)
+
+lemma REAL_POW_EQ_ODD_EQ: "odd x ==> (real_pow xa x = real_pow xb x) = (xa = xb)"
+  by (import hollight REAL_POW_EQ_ODD_EQ)
+
+lemma REAL_POW_EQ_ODD: "odd n & real_pow x n = real_pow y n ==> x = y"
+  by (import hollight REAL_POW_EQ_ODD)
+
+lemma REAL_POW_EQ_EQ: "(real_pow x n = real_pow y n) =
+(if even n then n = 0 | real_abs x = real_abs y else x = y)"
+  by (import hollight REAL_POW_EQ_EQ)
+
+definition
+  real_sgn :: "hollight.real => hollight.real"  where
+  "real_sgn ==
+%u. if real_lt (real_of_num 0) u then real_of_num 1
+    else if real_lt u (real_of_num 0) then real_neg (real_of_num 1)
+         else real_of_num 0"
+
+lemma DEF_real_sgn: "real_sgn =
+(%u. if real_lt (real_of_num 0) u then real_of_num 1
+     else if real_lt u (real_of_num 0) then real_neg (real_of_num 1)
+          else real_of_num 0)"
+  by (import hollight DEF_real_sgn)
+
+lemma REAL_SGN_0: "real_sgn (real_of_num 0) = real_of_num 0"
+  by (import hollight REAL_SGN_0)
+
+lemma REAL_SGN_NEG: "real_sgn (real_neg x) = real_neg (real_sgn x)"
+  by (import hollight REAL_SGN_NEG)
+
+lemma REAL_SGN_ABS: "real_mul (real_sgn x) (real_abs x) = x"
+  by (import hollight REAL_SGN_ABS)
+
+lemma REAL_ABS_SGN: "real_abs (real_sgn x) = real_sgn (real_abs x)"
+  by (import hollight REAL_ABS_SGN)
+
+lemma REAL_SGN: "real_sgn x = real_div x (real_abs x)"
+  by (import hollight REAL_SGN)
+
+lemma REAL_SGN_MUL: "real_sgn (real_mul x xa) = real_mul (real_sgn x) (real_sgn xa)"
+  by (import hollight REAL_SGN_MUL)
+
+lemma REAL_SGN_INV: "real_sgn (real_inv x) = real_sgn x"
+  by (import hollight REAL_SGN_INV)
+
+lemma REAL_SGN_DIV: "real_sgn (real_div x xa) = real_div (real_sgn x) (real_sgn xa)"
+  by (import hollight REAL_SGN_DIV)
+
+lemma REAL_WLOG_LE: "(ALL x y. P x y = P y x) & (ALL x y. real_le x y --> P x y) ==> P x xa"
+  by (import hollight REAL_WLOG_LE)
+
+lemma REAL_WLOG_LT: "(ALL x. P x x) & (ALL x y. P x y = P y x) & (ALL x y. real_lt x y --> P x y)
+==> P x xa"
+  by (import hollight REAL_WLOG_LT)
+
+definition
+  DECIMAL :: "nat => nat => hollight.real"  where
+  "DECIMAL == %u ua. real_div (real_of_num u) (real_of_num ua)"
+
+lemma DEF_DECIMAL: "DECIMAL = (%u ua. real_div (real_of_num u) (real_of_num ua))"
+  by (import hollight DEF_DECIMAL)
+
+lemma RAT_LEMMA1: "y1 ~= real_of_num 0 & y2 ~= real_of_num 0
+==> real_add (real_div x1 y1) (real_div x2 y2) =
+    real_mul (real_add (real_mul x1 y2) (real_mul x2 y1))
+     (real_mul (real_inv y1) (real_inv y2))"
+  by (import hollight RAT_LEMMA1)
+
+lemma RAT_LEMMA2: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
+==> real_add (real_div x1 y1) (real_div x2 y2) =
+    real_mul (real_add (real_mul x1 y2) (real_mul x2 y1))
+     (real_mul (real_inv y1) (real_inv y2))"
+  by (import hollight RAT_LEMMA2)
+
+lemma RAT_LEMMA3: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
+==> real_sub (real_div x1 y1) (real_div x2 y2) =
+    real_mul (real_sub (real_mul x1 y2) (real_mul x2 y1))
+     (real_mul (real_inv y1) (real_inv y2))"
+  by (import hollight RAT_LEMMA3)
+
+lemma RAT_LEMMA4: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
+==> real_le (real_div x1 y1) (real_div x2 y2) =
+    real_le (real_mul x1 y2) (real_mul x2 y1)"
+  by (import hollight RAT_LEMMA4)
+
+lemma RAT_LEMMA5: "real_lt (real_of_num 0) y1 & real_lt (real_of_num 0) y2
+==> (real_div x1 y1 = real_div x2 y2) = (real_mul x1 y2 = real_mul x2 y1)"
+  by (import hollight RAT_LEMMA5)
+
+lemma REAL_INTEGRAL: "(ALL x. real_mul (real_of_num 0) x = real_of_num 0) &
+(ALL x y z. (real_add x y = real_add x z) = (y = z)) &
+(ALL w x y z.
+    (real_add (real_mul w y) (real_mul x z) =
+     real_add (real_mul w z) (real_mul x y)) =
+    (w = x | y = z))"
+  by (import hollight REAL_INTEGRAL)
+
+definition
+  integer :: "hollight.real => bool"  where
+  "integer == %u. EX n. real_abs u = real_of_num n"
+
+lemma DEF_integer: "integer = (%u. EX n. real_abs u = real_of_num n)"
+  by (import hollight DEF_integer)
+
+lemma is_int: "integer x = (EX n. x = real_of_num n | x = real_neg (real_of_num n))"
+  by (import hollight is_int)
+
+typedef (open) int = "Collect integer"  morphisms "real_of_int" "int_of_real"
+  apply (rule light_ex_imp_nonempty[where t="Eps integer"])
+  by (import hollight TYDEF_int)
+
+syntax
+  real_of_int :: _ 
+
+syntax
+  int_of_real :: _ 
+
+lemmas "TYDEF_int_@intern" = typedef_hol2hollight 
+  [where a="a :: hollight.int" and r=r ,
+   OF type_definition_int]
+
+lemma dest_int_rep: "EX n. hollight.real_of_int x = real_of_num n |
+      hollight.real_of_int x = real_neg (real_of_num n)"
+  by (import hollight dest_int_rep)
+
+definition
+  int_le :: "hollight.int => hollight.int => bool"  where
+  "int_le == %u ua. real_le (hollight.real_of_int u) (hollight.real_of_int ua)"
+
+lemma DEF_int_le: "int_le = (%u ua. real_le (hollight.real_of_int u) (hollight.real_of_int ua))"
+  by (import hollight DEF_int_le)
+
+definition
+  int_lt :: "hollight.int => hollight.int => bool"  where
+  "int_lt == %u ua. real_lt (hollight.real_of_int u) (hollight.real_of_int ua)"
+
+lemma DEF_int_lt: "int_lt = (%u ua. real_lt (hollight.real_of_int u) (hollight.real_of_int ua))"
+  by (import hollight DEF_int_lt)
+
+definition
+  int_ge :: "hollight.int => hollight.int => bool"  where
+  "int_ge == %u ua. real_ge (hollight.real_of_int u) (hollight.real_of_int ua)"
+
+lemma DEF_int_ge: "int_ge = (%u ua. real_ge (hollight.real_of_int u) (hollight.real_of_int ua))"
+  by (import hollight DEF_int_ge)
+
+definition
+  int_gt :: "hollight.int => hollight.int => bool"  where
+  "int_gt == %u ua. real_gt (hollight.real_of_int u) (hollight.real_of_int ua)"
+
+lemma DEF_int_gt: "int_gt = (%u ua. real_gt (hollight.real_of_int u) (hollight.real_of_int ua))"
+  by (import hollight DEF_int_gt)
+
+definition
+  int_of_num :: "nat => hollight.int"  where
+  "int_of_num == %u. int_of_real (real_of_num u)"
+
+lemma DEF_int_of_num: "int_of_num = (%u. int_of_real (real_of_num u))"
+  by (import hollight DEF_int_of_num)
+
+lemma int_of_num_th: "hollight.real_of_int (int_of_num x) = real_of_num x"
+  by (import hollight int_of_num_th)
+
+definition
+  int_neg :: "hollight.int => hollight.int"  where
+  "int_neg == %u. int_of_real (real_neg (hollight.real_of_int u))"
+
+lemma DEF_int_neg: "int_neg = (%u. int_of_real (real_neg (hollight.real_of_int u)))"
+  by (import hollight DEF_int_neg)
+
+lemma int_neg_th: "hollight.real_of_int (int_neg x) = real_neg (hollight.real_of_int x)"
+  by (import hollight int_neg_th)
+
+definition
+  int_add :: "hollight.int => hollight.int => hollight.int"  where
+  "int_add ==
+%u ua.
+   int_of_real (real_add (hollight.real_of_int u) (hollight.real_of_int ua))"
+
+lemma DEF_int_add: "int_add =
+(%u ua.
+    int_of_real
+     (real_add (hollight.real_of_int u) (hollight.real_of_int ua)))"
+  by (import hollight DEF_int_add)
+
+lemma int_add_th: "hollight.real_of_int (int_add x xa) =
+real_add (hollight.real_of_int x) (hollight.real_of_int xa)"
+  by (import hollight int_add_th)
+
+definition
+  int_sub :: "hollight.int => hollight.int => hollight.int"  where
+  "int_sub ==
+%u ua.
+   int_of_real (real_sub (hollight.real_of_int u) (hollight.real_of_int ua))"
+
+lemma DEF_int_sub: "int_sub =
+(%u ua.
+    int_of_real
+     (real_sub (hollight.real_of_int u) (hollight.real_of_int ua)))"
+  by (import hollight DEF_int_sub)
+
+lemma int_sub_th: "hollight.real_of_int (int_sub x xa) =
+real_sub (hollight.real_of_int x) (hollight.real_of_int xa)"
+  by (import hollight int_sub_th)
+
+definition
+  int_mul :: "hollight.int => hollight.int => hollight.int"  where
+  "int_mul ==
+%u ua.
+   int_of_real (real_mul (hollight.real_of_int u) (hollight.real_of_int ua))"
+
+lemma DEF_int_mul: "int_mul =
+(%u ua.
+    int_of_real
+     (real_mul (hollight.real_of_int u) (hollight.real_of_int ua)))"
+  by (import hollight DEF_int_mul)
+
+lemma int_mul_th: "hollight.real_of_int (int_mul x y) =
+real_mul (hollight.real_of_int x) (hollight.real_of_int y)"
+  by (import hollight int_mul_th)
+
+definition
+  int_abs :: "hollight.int => hollight.int"  where
+  "int_abs == %u. int_of_real (real_abs (hollight.real_of_int u))"
+
+lemma DEF_int_abs: "int_abs = (%u. int_of_real (real_abs (hollight.real_of_int u)))"
+  by (import hollight DEF_int_abs)
+
+lemma int_abs_th: "hollight.real_of_int (int_abs x) = real_abs (hollight.real_of_int x)"
+  by (import hollight int_abs_th)
+
+definition
+  int_sgn :: "hollight.int => hollight.int"  where
+  "int_sgn == %u. int_of_real (real_sgn (hollight.real_of_int u))"
+
+lemma DEF_int_sgn: "int_sgn = (%u. int_of_real (real_sgn (hollight.real_of_int u)))"
+  by (import hollight DEF_int_sgn)
+
+lemma int_sgn_th: "hollight.real_of_int (int_sgn x) = real_sgn (hollight.real_of_int x)"
+  by (import hollight int_sgn_th)
+
+definition
+  int_max :: "hollight.int => hollight.int => hollight.int"  where
+  "int_max ==
+%u ua.
+   int_of_real (real_max (hollight.real_of_int u) (hollight.real_of_int ua))"
+
+lemma DEF_int_max: "int_max =
+(%u ua.
+    int_of_real
+     (real_max (hollight.real_of_int u) (hollight.real_of_int ua)))"
+  by (import hollight DEF_int_max)
+
+lemma int_max_th: "hollight.real_of_int (int_max x y) =
+real_max (hollight.real_of_int x) (hollight.real_of_int y)"
+  by (import hollight int_max_th)
+
+definition
+  int_min :: "hollight.int => hollight.int => hollight.int"  where
+  "int_min ==
+%u ua.
+   int_of_real (real_min (hollight.real_of_int u) (hollight.real_of_int ua))"
+
+lemma DEF_int_min: "int_min =
+(%u ua.
+    int_of_real
+     (real_min (hollight.real_of_int u) (hollight.real_of_int ua)))"
+  by (import hollight DEF_int_min)
+
+lemma int_min_th: "hollight.real_of_int (int_min x y) =
+real_min (hollight.real_of_int x) (hollight.real_of_int y)"
+  by (import hollight int_min_th)
+
+definition
+  int_pow :: "hollight.int => nat => hollight.int"  where
+  "int_pow == %u ua. int_of_real (real_pow (hollight.real_of_int u) ua)"
+
+lemma DEF_int_pow: "int_pow = (%u ua. int_of_real (real_pow (hollight.real_of_int u) ua))"
+  by (import hollight DEF_int_pow)
+
+lemma int_pow_th: "hollight.real_of_int (int_pow x xa) = real_pow (hollight.real_of_int x) xa"
+  by (import hollight int_pow_th)
+
+lemma INT_IMAGE: "(EX n. x = int_of_num n) | (EX n. x = int_neg (int_of_num n))"
+  by (import hollight INT_IMAGE)
+
+lemma INT_LT_DISCRETE: "int_lt x y = int_le (int_add x (int_of_num 1)) y"
+  by (import hollight INT_LT_DISCRETE)
+
+lemma INT_GT_DISCRETE: "int_gt x xa = int_ge x (int_add xa (int_of_num 1))"
+  by (import hollight INT_GT_DISCRETE)
+
+lemma INT_FORALL_POS: "(ALL n. P (int_of_num n)) = (ALL i. int_le (int_of_num 0) i --> P i)"
+  by (import hollight INT_FORALL_POS)
+
+lemma INT_EXISTS_POS: "(EX n. P (int_of_num n)) = (EX i. int_le (int_of_num 0) i & P i)"
+  by (import hollight INT_EXISTS_POS)
+
+lemma INT_FORALL_ABS: "(ALL n. x (int_of_num n)) = (ALL xa. x (int_abs xa))"
+  by (import hollight INT_FORALL_ABS)
+
+lemma INT_EXISTS_ABS: "(EX n. P (int_of_num n)) = (EX x. P (int_abs x))"
+  by (import hollight INT_EXISTS_ABS)
+
+lemma INT_ABS_MUL_1: "(int_abs (int_mul x y) = int_of_num 1) =
+(int_abs x = int_of_num 1 & int_abs y = int_of_num 1)"
+  by (import hollight INT_ABS_MUL_1)
+
+lemma INT_WOP: "(EX x. int_le (int_of_num 0) x & P x) =
+(EX x. int_le (int_of_num 0) x &
+       P x & (ALL y. int_le (int_of_num 0) y & P y --> int_le x y))"
+  by (import hollight INT_WOP)
+
+lemma INT_POW: "int_pow x 0 = int_of_num 1 &
+(ALL xa. int_pow x (Suc xa) = int_mul x (int_pow x xa))"
+  by (import hollight INT_POW)
+
+lemma INT_ABS: "int_abs x = (if int_le (int_of_num 0) x then x else int_neg x)"
+  by (import hollight INT_ABS)
+
+lemma INT_GE: "int_ge x xa = int_le xa x"
+  by (import hollight INT_GE)
+
+lemma INT_GT: "int_gt x xa = int_lt xa x"
+  by (import hollight INT_GT)
+
+lemma INT_LT: "int_lt x xa = (~ int_le xa x)"
+  by (import hollight INT_LT)
+
+lemma INT_ARCH: "d ~= int_of_num 0 ==> EX c. int_lt x (int_mul c d)"
+  by (import hollight INT_ARCH)
+
+lemma INT_DIVMOD_EXIST_0: "EX x xa.
+   if n = int_of_num 0 then x = int_of_num 0 & xa = m
+   else int_le (int_of_num 0) xa &
+        int_lt xa (int_abs n) & m = int_add (int_mul x n) xa"
+  by (import hollight INT_DIVMOD_EXIST_0)
+
+consts
+  div :: "hollight.int => hollight.int => hollight.int" ("div")
+
+defs
+  div_def: "div ==
+SOME q.
+   EX r. ALL m n.
+            if n = int_of_num 0 then q m n = int_of_num 0 & r m n = m
+            else int_le (int_of_num 0) (r m n) &
+                 int_lt (r m n) (int_abs n) &
+                 m = int_add (int_mul (q m n) n) (r m n)"
+
+lemma DEF_div: "div =
+(SOME q.
+    EX r. ALL m n.
+             if n = int_of_num 0 then q m n = int_of_num 0 & r m n = m
+             else int_le (int_of_num 0) (r m n) &
+                  int_lt (r m n) (int_abs n) &
+                  m = int_add (int_mul (q m n) n) (r m n))"
+  by (import hollight DEF_div)
+
+definition
+  rem :: "hollight.int => hollight.int => hollight.int"  where
+  "rem ==
+SOME r.
+   ALL m n.
+      if n = int_of_num 0 then div m n = int_of_num 0 & r m n = m
+      else int_le (int_of_num 0) (r m n) &
+           int_lt (r m n) (int_abs n) &
+           m = int_add (int_mul (div m n) n) (r m n)"
+
+lemma DEF_rem: "rem =
+(SOME r.
+    ALL m n.
+       if n = int_of_num 0 then div m n = int_of_num 0 & r m n = m
+       else int_le (int_of_num 0) (r m n) &
+            int_lt (r m n) (int_abs n) &
+            m = int_add (int_mul (div m n) n) (r m n))"
+  by (import hollight DEF_rem)
+
+lemma INT_DIVISION: "n ~= int_of_num 0
+==> m = int_add (int_mul (div m n) n) (rem m n) &
+    int_le (int_of_num 0) (rem m n) & int_lt (rem m n) (int_abs n)"
+  by (import hollight INT_DIVISION)
+
+lemma sth: "(ALL x y z. int_add x (int_add y z) = int_add (int_add x y) z) &
+(ALL x y. int_add x y = int_add y x) &
+(ALL x. int_add (int_of_num 0) x = x) &
+(ALL x y z. int_mul x (int_mul y z) = int_mul (int_mul x y) z) &
+(ALL x y. int_mul x y = int_mul y x) &
+(ALL x. int_mul (int_of_num 1) x = x) &
+(ALL x. int_mul (int_of_num 0) x = int_of_num 0) &
+(ALL x y z. int_mul x (int_add y z) = int_add (int_mul x y) (int_mul x z)) &
+(ALL x. int_pow x 0 = int_of_num 1) &
+(ALL x xa. int_pow x (Suc xa) = int_mul x (int_pow x xa))"
+  by (import hollight sth)
+
+lemma INT_INTEGRAL: "(ALL x. int_mul (int_of_num 0) x = int_of_num 0) &
+(ALL x y z. (int_add x y = int_add x z) = (y = z)) &
+(ALL w x y z.
+    (int_add (int_mul w y) (int_mul x z) =
+     int_add (int_mul w z) (int_mul x y)) =
+    (w = x | y = z))"
+  by (import hollight INT_INTEGRAL)
+
+lemma INT_DIVMOD_UNIQ: "m = int_add (int_mul q n) r & int_le (int_of_num 0) r & int_lt r (int_abs n)
+==> div m n = q & rem m n = r"
+  by (import hollight INT_DIVMOD_UNIQ)
+
+consts
+  eqeq :: "'A => 'A => ('A => 'A => bool) => bool" 
+
+defs
+  eqeq_def: "hollight.eqeq == %(u::'A) (ua::'A) ub::'A => 'A => bool. ub u ua"
+
+lemma DEF__equal__equal_: "hollight.eqeq = (%(u::'A) (ua::'A) ub::'A => 'A => bool. ub u ua)"
+  by (import hollight DEF__equal__equal_)
+
+definition
+  real_mod :: "hollight.real => hollight.real => hollight.real => bool"  where
+  "real_mod == %u ua ub. EX q. integer q & real_sub ua ub = real_mul q u"
+
+lemma DEF_real_mod: "real_mod = (%u ua ub. EX q. integer q & real_sub ua ub = real_mul q u)"
+  by (import hollight DEF_real_mod)
+
+definition
+  int_divides :: "hollight.int => hollight.int => bool"  where
+  "int_divides == %u ua. EX x. ua = int_mul u x"
+
+lemma DEF_int_divides: "int_divides = (%u ua. EX x. ua = int_mul u x)"
+  by (import hollight DEF_int_divides)
+
+consts
+  int_mod :: "hollight.int => hollight.int => hollight.int => bool" 
+
+defs
+  int_mod_def: "hollight.int_mod == %u ua ub. int_divides u (int_sub ua ub)"
+
+lemma DEF_int_mod: "hollight.int_mod = (%u ua ub. int_divides u (int_sub ua ub))"
+  by (import hollight DEF_int_mod)
+
+lemma int_congruent: "hollight.eqeq x xa (hollight.int_mod xb) =
+(EX d. int_sub x xa = int_mul xb d)"
+  by (import hollight int_congruent)
+
+consts
+  int_coprime :: "hollight.int * hollight.int => bool" 
+
+defs
+  int_coprime_def: "hollight.int_coprime ==
+%u. EX x y. int_add (int_mul (fst u) x) (int_mul (snd u) y) = int_of_num 1"
+
+lemma DEF_int_coprime: "hollight.int_coprime =
+(%u. EX x y. int_add (int_mul (fst u) x) (int_mul (snd u) y) = int_of_num 1)"
+  by (import hollight DEF_int_coprime)
+
+lemma FORALL_UNCURRY: "All (P::('A => 'B => 'C) => bool) =
+(ALL f::'A * 'B => 'C. P (%(a::'A) b::'B. f (a, b)))"
+  by (import hollight FORALL_UNCURRY)
+
+lemma EXISTS_UNCURRY: "Ex (x::('A => 'B => 'C) => bool) =
+(EX f::'A * 'B => 'C. x (%(a::'A) b::'B. f (a, b)))"
+  by (import hollight EXISTS_UNCURRY)
+
+lemma WF_INT_MEASURE: "(ALL x::'A. int_le (int_of_num (0::nat)) ((m::'A => hollight.int) x)) &
+(ALL x::'A. (ALL y::'A. int_lt (m y) (m x) --> (P::'A => bool) y) --> P x)
+==> P (x::'A)"
+  by (import hollight WF_INT_MEASURE)
+
+lemma WF_INT_MEASURE_2: "(ALL (x::'A) y::'B.
+    int_le (int_of_num (0::nat)) ((m::'A => 'B => hollight.int) x y)) &
+(ALL (x::'A) y::'B.
+    (ALL (x'::'A) y'::'B.
+        int_lt (m x' y') (m x y) --> (P::'A => 'B => bool) x' y') -->
+    P x y)
+==> P (x::'A) (xa::'B)"
+  by (import hollight WF_INT_MEASURE_2)
+
+lemma INT_GCD_EXISTS: "EX d. int_divides d a &
+      int_divides d b & (EX x y. d = int_add (int_mul a x) (int_mul b y))"
+  by (import hollight INT_GCD_EXISTS)
+
+lemma INT_GCD_EXISTS_POS: "EX d. int_le (int_of_num 0) d &
+      int_divides d a &
+      int_divides d b & (EX x y. d = int_add (int_mul a x) (int_mul b y))"
+  by (import hollight INT_GCD_EXISTS_POS)
+
+consts
+  int_gcd :: "hollight.int * hollight.int => hollight.int" 
+
+defs
+  int_gcd_def: "hollight.int_gcd ==
+SOME d.
+   ALL a b.
+      int_le (int_of_num 0) (d (a, b)) &
+      int_divides (d (a, b)) a &
+      int_divides (d (a, b)) b &
+      (EX x y. d (a, b) = int_add (int_mul a x) (int_mul b y))"
+
+lemma DEF_int_gcd: "hollight.int_gcd =
+(SOME d.
+    ALL a b.
+       int_le (int_of_num 0) (d (a, b)) &
+       int_divides (d (a, b)) a &
+       int_divides (d (a, b)) b &
+       (EX x y. d (a, b) = int_add (int_mul a x) (int_mul b y)))"
+  by (import hollight DEF_int_gcd)
+
+definition
+  num_of_int :: "hollight.int => nat"  where
+  "num_of_int == %u. SOME n. int_of_num n = u"
+
+lemma DEF_num_of_int: "num_of_int = (%u. SOME n. int_of_num n = u)"
+  by (import hollight DEF_num_of_int)
+
+lemma NUM_OF_INT_OF_NUM: "num_of_int (int_of_num x) = x"
+  by (import hollight NUM_OF_INT_OF_NUM)
+
+lemma INT_OF_NUM_OF_INT: "int_le (int_of_num 0) x ==> int_of_num (num_of_int x) = x"
+  by (import hollight INT_OF_NUM_OF_INT)
+
+lemma NUM_OF_INT: "int_le (int_of_num 0) x = (int_of_num (num_of_int x) = x)"
+  by (import hollight NUM_OF_INT)
+
+definition
+  num_divides :: "nat => nat => bool"  where
+  "num_divides == %u ua. int_divides (int_of_num u) (int_of_num ua)"
+
+lemma DEF_num_divides: "num_divides = (%u ua. int_divides (int_of_num u) (int_of_num ua))"
+  by (import hollight DEF_num_divides)
+
+definition
+  num_mod :: "nat => nat => nat => bool"  where
+  "num_mod ==
+%u ua ub. hollight.int_mod (int_of_num u) (int_of_num ua) (int_of_num ub)"
+
+lemma DEF_num_mod: "num_mod =
+(%u ua ub. hollight.int_mod (int_of_num u) (int_of_num ua) (int_of_num ub))"
+  by (import hollight DEF_num_mod)
+
+lemma num_congruent: "hollight.eqeq x xa (num_mod xb) =
+hollight.eqeq (int_of_num x) (int_of_num xa)
+ (hollight.int_mod (int_of_num xb))"
+  by (import hollight num_congruent)
+
+definition
+  num_coprime :: "nat * nat => bool"  where
+  "num_coprime ==
+%u. hollight.int_coprime (int_of_num (fst u), int_of_num (snd u))"
+
+lemma DEF_num_coprime: "num_coprime =
+(%u. hollight.int_coprime (int_of_num (fst u), int_of_num (snd u)))"
+  by (import hollight DEF_num_coprime)
+
+definition
+  num_gcd :: "nat * nat => nat"  where
+  "num_gcd ==
+%u. num_of_int (hollight.int_gcd (int_of_num (fst u), int_of_num (snd u)))"
+
+lemma DEF_num_gcd: "num_gcd =
+(%u. num_of_int (hollight.int_gcd (int_of_num (fst u), int_of_num (snd u))))"
+  by (import hollight DEF_num_gcd)
+
+lemma NUM_GCD: "int_of_num (num_gcd (x, xa)) =
+hollight.int_gcd (int_of_num x, int_of_num xa)"
+  by (import hollight NUM_GCD)
+
+lemma IN_ELIM_THM: "(ALL (P::(bool => 'q_43295 => bool) => bool) x::'q_43295.
+    (x : {v::'q_43295. P (SETSPEC v)}) =
+    P (%(p::bool) t::'q_43295. p & x = t)) &
+(ALL (p::'q_43326 => bool) x::'q_43326.
+    (x : {v::'q_43326. EX y::'q_43326. p y & v = y}) = p x) &
+(ALL (P::(bool => 'q_43354 => bool) => bool) x::'q_43354.
+    x \<in> {v::'q_43354. P (SETSPEC v)} =
+    P (%(p::bool) t::'q_43354. p & x = t)) &
+(ALL (p::'q_43383 => bool) x::'q_43383.
+    x \<in> {v::'q_43383. EX y::'q_43383. p y & v = y} = p x) &
+(ALL (p::'q_43400 => bool) x::'q_43400. p x \<longleftrightarrow> p x)"
+  by (import hollight IN_ELIM_THM)
+
+lemma INSERT: "insert (x::'A) (s::'A set) = {u::'A. EX y::'A. (y : s | y = x) & u = y}"
+  by (import hollight INSERT)
+
+definition
+  SING :: "('A set) => bool"  where
+  "SING == %u::'A set. EX x::'A. u = {x}"
+
+lemma DEF_SING: "SING = (%u::'A set. EX x::'A. u = {x})"
+  by (import hollight DEF_SING)
+
+definition
+  INJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool"  where
+  "INJ ==
+%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
+   (ALL x::'A. x : ua --> u x : ub) &
+   (ALL (x::'A) y::'A. x : ua & y : ua & u x = u y --> x = y)"
+
+lemma DEF_INJ: "INJ =
+(%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
+    (ALL x::'A. x : ua --> u x : ub) &
+    (ALL (x::'A) y::'A. x : ua & y : ua & u x = u y --> x = y))"
+  by (import hollight DEF_INJ)
+
+definition
+  SURJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool"  where
+  "SURJ ==
+%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
+   (ALL x::'A. x : ua --> u x : ub) &
+   (ALL x::'B. x : ub --> (EX y::'A. y : ua & u y = x))"
+
+lemma DEF_SURJ: "SURJ =
+(%(u::'A => 'B) (ua::'A => bool) ub::'B => bool.
+    (ALL x::'A. x : ua --> u x : ub) &
+    (ALL x::'B. x : ub --> (EX y::'A. y : ua & u y = x)))"
+  by (import hollight DEF_SURJ)
+
+definition
+  BIJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool"  where
+  "BIJ ==
+%(u::'A => 'B) (ua::'A => bool) ub::'B => bool. INJ u ua ub & SURJ u ua ub"
+
+lemma DEF_BIJ: "BIJ =
+(%(u::'A => 'B) (ua::'A => bool) ub::'B => bool. INJ u ua ub & SURJ u ua ub)"
+  by (import hollight DEF_BIJ)
+
+definition
+  REST :: "('A => bool) => 'A => bool"  where
+  "REST == %u::'A => bool. u - {Eps u}"
+
+lemma DEF_REST: "REST = (%u::'A => bool. u - {Eps u})"
+  by (import hollight DEF_REST)
+
+lemma NOT_IN_EMPTY: "(x::'A) ~: {}"
+  by (import hollight NOT_IN_EMPTY)
+
+lemma IN_UNIONS: "((xa::'A) : Union (x::('A => bool) => bool)) =
+(EX t::'A => bool. t : x & xa : t)"
+  by (import hollight IN_UNIONS)
+
+lemma IN_INTERS: "((xa::'A) : Inter (x::('A => bool) => bool)) =
+(ALL t::'A => bool. t : x --> xa : t)"
+  by (import hollight IN_INTERS)
+
+lemma IN_DELETE: "((xa::'A) : (x::'A => bool) - {xb::'A}) = (xa : x & xa ~= xb)"
+  by (import hollight IN_DELETE)
+
+lemma IN_IMAGE: "((x::'B) : (xb::'A => 'B) ` (xa::'A => bool)) =
+(EX xc::'A. x = xb xc & xc : xa)"
+  by (import hollight IN_IMAGE)
+
+lemma IN_REST: "((x::'A) : REST (xa::'A => bool)) = (x : xa & x ~= Eps xa)"
+  by (import hollight IN_REST)
+
+lemma FORALL_IN_INSERT: "(ALL xc::'q_44214.
+    xc : insert (xa::'q_44214) (xb::'q_44214 => bool) -->
+    (x::'q_44214 => bool) xc) =
+(x xa & (ALL xa::'q_44214. xa : xb --> x xa))"
+  by (import hollight FORALL_IN_INSERT)
+
+lemma EXISTS_IN_INSERT: "(EX xc::'q_44255.
+    xc : insert (xa::'q_44255) (xb::'q_44255 => bool) &
+    (x::'q_44255 => bool) xc) =
+(x xa | (EX xa::'q_44255. xa : xb & x xa))"
+  by (import hollight EXISTS_IN_INSERT)
+
+lemma CHOICE_DEF: "(x::'A => bool) ~= {} ==> Eps x : x"
+  by (import hollight CHOICE_DEF)
+
+lemma NOT_EQUAL_SETS: "((x::'A => bool) ~= (xa::'A => bool)) = (EX xb::'A. (xb : xa) = (xb ~: x))"
+  by (import hollight NOT_EQUAL_SETS)
+
+lemma EMPTY_NOT_UNIV: "(op ~=::('A::type => bool) => ('A::type => bool) => bool)
+ ({}::'A::type => bool) (UNIV::'A::type => bool)"
+  by (import hollight EMPTY_NOT_UNIV)
+
+lemma EQ_UNIV: "(ALL x::'A. x : (s::'A => bool)) = (s = UNIV)"
+  by (import hollight EQ_UNIV)
+
+lemma SING_SUBSET: "({xa::'q_44493} <= (x::'q_44493 => bool)) = (xa : x)"
+  by (import hollight SING_SUBSET)
+
+lemma PSUBSET_UNIV: "((x::'A => bool) < UNIV) = (EX xa::'A. xa ~: x)"
+  by (import hollight PSUBSET_UNIV)
+
+lemma PSUBSET_ALT: "((x::'A => bool) < (xa::'A => bool)) =
+(x <= xa & (EX a::'A. a : xa & a ~: x))"
+  by (import hollight PSUBSET_ALT)
+
+lemma SUBSET_UNION: "(ALL (x::'A => bool) xa::'A => bool. x <= x Un xa) &
+(ALL (x::'A => bool) xa::'A => bool. x <= xa Un x)"
+  by (import hollight SUBSET_UNION)
+
+lemma UNION_EMPTY: "(ALL x::'A => bool. {} Un x = x) & (ALL x::'A => bool. x Un {} = x)"
+  by (import hollight UNION_EMPTY)
+
+lemma UNION_UNIV: "(ALL x::'A => bool. UNIV Un x = UNIV) &
+(ALL x::'A => bool. x Un UNIV = UNIV)"
+  by (import hollight UNION_UNIV)
+
+lemma INTER_SUBSET: "(ALL (x::'A => bool) xa::'A => bool. x Int xa <= x) &
+(ALL (x::'A => bool) xa::'A => bool. xa Int x <= x)"
+  by (import hollight INTER_SUBSET)
+
+lemma INTER_EMPTY: "(ALL x::'A => bool. {} Int x = {}) & (ALL x::'A => bool. x Int {} = {})"
+  by (import hollight INTER_EMPTY)
+
+lemma INTER_UNIV: "(ALL x::'A => bool. UNIV Int x = x) & (ALL x::'A => bool. x Int UNIV = x)"
+  by (import hollight INTER_UNIV)
+
+lemma IN_DISJOINT: "((x::'A => bool) Int (xa::'A => bool) = {}) =
+(~ (EX xb::'A. xb : x & xb : xa))"
+  by (import hollight IN_DISJOINT)
+
+lemma DISJOINT_SYM: "((x::'A => bool) Int (xa::'A => bool) = {}) = (xa Int x = {})"
+  by (import hollight DISJOINT_SYM)
+
+lemma DISJOINT_EMPTY: "{} Int (x::'A => bool) = {} & x Int {} = {}"
+  by (import hollight DISJOINT_EMPTY)
+
+lemma DISJOINT_EMPTY_REFL: "((x::'A => bool) = {}) = (x Int x = {})"
+  by (import hollight DISJOINT_EMPTY_REFL)
+
+lemma DISJOINT_UNION: "(((x::'A => bool) Un (xa::'A => bool)) Int (xb::'A => bool) = {}) =
+(x Int xb = {} & xa Int xb = {})"
+  by (import hollight DISJOINT_UNION)
+
+lemma DECOMPOSITION: "((x::'A) : (s::'A => bool)) = (EX t::'A => bool. s = insert x t & x ~: t)"
+  by (import hollight DECOMPOSITION)
+
+lemma SET_CASES: "(s::'A => bool) = {} | (EX (x::'A) t::'A => bool. s = insert x t & x ~: t)"
+  by (import hollight SET_CASES)
+
+lemma ABSORPTION: "((x::'A) : (xa::'A => bool)) = (insert x xa = xa)"
+  by (import hollight ABSORPTION)
+
+lemma INSERT_UNIV: "insert (x::'A) UNIV = UNIV"
+  by (import hollight INSERT_UNIV)
+
+lemma INSERT_UNION: "insert (x::'A) (s::'A => bool) Un (t::'A => bool) =
+(if x : t then s Un t else insert x (s Un t))"
+  by (import hollight INSERT_UNION)
+
+lemma DISJOINT_INSERT: "(insert (x::'A) (xa::'A => bool) Int (xb::'A => bool) = {}) =
+(xa Int xb = {} & x ~: xb)"
+  by (import hollight DISJOINT_INSERT)
+
+lemma INSERT_AC: "insert (x::'q_45764) (insert (y::'q_45764) (s::'q_45764 => bool)) =
+insert y (insert x s) &
+insert x (insert x s) = insert x s"
+  by (import hollight INSERT_AC)
+
+lemma INTER_ACI: "(p::'q_45831 => bool) Int (q::'q_45831 => bool) = q Int p &
+p Int q Int (r::'q_45831 => bool) = p Int (q Int r) &
+p Int (q Int r) = q Int (p Int r) & p Int p = p & p Int (p Int q) = p Int q"
+  by (import hollight INTER_ACI)
+
+lemma UNION_ACI: "(p::'q_45897 => bool) Un (q::'q_45897 => bool) = q Un p &
+p Un q Un (r::'q_45897 => bool) = p Un (q Un r) &
+p Un (q Un r) = q Un (p Un r) & p Un p = p & p Un (p Un q) = p Un q"
+  by (import hollight UNION_ACI)
+
+lemma DELETE_NON_ELEMENT: "((x::'A) ~: (xa::'A => bool)) = (xa - {x} = xa)"
+  by (import hollight DELETE_NON_ELEMENT)
+
+lemma IN_DELETE_EQ: "(((x::'A) : (s::'A => bool)) = ((x'::'A) : s)) =
+((x : s - {x'}) = (x' : s - {x}))"
+  by (import hollight IN_DELETE_EQ)
+
+lemma EMPTY_DELETE: "{} - {x::'A} = {}"
+  by (import hollight EMPTY_DELETE)
+
+lemma DELETE_DELETE: "(xa::'A => bool) - {x::'A} - {x} = xa - {x}"
+  by (import hollight DELETE_DELETE)
+
+lemma DELETE_COMM: "(xb::'A => bool) - {x::'A} - {xa::'A} = xb - {xa} - {x}"
+  by (import hollight DELETE_COMM)
+
+lemma DELETE_SUBSET: "(xa::'A => bool) - {x::'A} <= xa"
+  by (import hollight DELETE_SUBSET)
+
+lemma SUBSET_DELETE: "((xa::'A => bool) <= (xb::'A => bool) - {x::'A}) = (x ~: xa & xa <= xb)"
+  by (import hollight SUBSET_DELETE)
+
+lemma SUBSET_INSERT_DELETE: "((xa::'A => bool) <= insert (x::'A) (xb::'A => bool)) = (xa - {x} <= xb)"
+  by (import hollight SUBSET_INSERT_DELETE)
+
+lemma PSUBSET_INSERT_SUBSET: "((x::'A => bool) < (xa::'A => bool)) =
+(EX xb::'A. xb ~: x & insert xb x <= xa)"
+  by (import hollight PSUBSET_INSERT_SUBSET)
+
+lemma PSUBSET_MEMBER: "((x::'A => bool) < (xa::'A => bool)) =
+(x <= xa & (EX y::'A. y : xa & y ~: x))"
+  by (import hollight PSUBSET_MEMBER)
+
+lemma DELETE_INSERT: "insert (x::'A) (s::'A => bool) - {y::'A} =
+(if x = y then s - {y} else insert x (s - {y}))"
+  by (import hollight DELETE_INSERT)
+
+lemma DELETE_INTER: "((x::'A => bool) - {xb::'A}) Int (xa::'A => bool) = x Int xa - {xb}"
+  by (import hollight DELETE_INTER)
+
+lemma DISJOINT_DELETE_SYM: "(((x::'A => bool) - {xb::'A}) Int (xa::'A => bool) = {}) =
+((xa - {xb}) Int x = {})"
+  by (import hollight DISJOINT_DELETE_SYM)
+
+lemma FORALL_IN_UNIONS: "(ALL x::'q_46386.
+    x : Union (s::('q_46386 => bool) => bool) --> (P::'q_46386 => bool) x) =
+(ALL (t::'q_46386 => bool) x::'q_46386. t : s & x : t --> P x)"
+  by (import hollight FORALL_IN_UNIONS)
+
+lemma EXISTS_IN_UNIONS: "(EX x::'q_46428.
+    x : Union (s::('q_46428 => bool) => bool) & (P::'q_46428 => bool) x) =
+(EX (t::'q_46428 => bool) x::'q_46428. t : s & x : t & P x)"
+  by (import hollight EXISTS_IN_UNIONS)
+
+lemma EMPTY_UNIONS: "(Union (x::('q_46454 => bool) => bool) = {}) =
+(ALL xa::'q_46454 => bool. xa : x --> xa = {})"
+  by (import hollight EMPTY_UNIONS)
+
+lemma INTER_UNIONS: "(ALL (x::('q_46493 => bool) => bool) xa::'q_46493 => bool.
+    Union x Int xa =
+    Union
+     {u::'q_46493 => bool.
+      EX xb::'q_46493 => bool. xb : x & u = xb Int xa}) &
+(ALL (x::('q_46529 => bool) => bool) xa::'q_46529 => bool.
+    xa Int Union x =
+    Union
+     {u::'q_46529 => bool. EX xb::'q_46529 => bool. xb : x & u = xa Int xb})"
+  by (import hollight INTER_UNIONS)
+
+lemma UNIONS_SUBSET: "(Union (x::('q_46545 => bool) => bool) <= (xa::'q_46545 => bool)) =
+(ALL xb::'q_46545 => bool. xb : x --> xb <= xa)"
+  by (import hollight UNIONS_SUBSET)
+
+lemma IMAGE_CLAUSES: "(f::'q_46676 => 'q_46680) ` {} = {} &
+f ` insert (x::'q_46676) (s::'q_46676 => bool) = insert (f x) (f ` s)"
+  by (import hollight IMAGE_CLAUSES)
+
+lemma IMAGE_INTER_INJ: "(!!(xa::'q_46846) y::'q_46846.
+    (x::'q_46846 => 'q_46857) xa = x y ==> xa = y)
+==> x ` ((xa::'q_46846 => bool) Int (xb::'q_46846 => bool)) =
+    x ` xa Int x ` xb"
+  by (import hollight IMAGE_INTER_INJ)
+
+lemma IMAGE_DIFF_INJ: "(!!(xa::'q_46900) y::'q_46900.
+    (x::'q_46900 => 'q_46911) xa = x y ==> xa = y)
+==> x ` ((xa::'q_46900 => bool) - (xb::'q_46900 => bool)) = x ` xa - x ` xb"
+  by (import hollight IMAGE_DIFF_INJ)
+
+lemma IMAGE_DELETE_INJ: "(!!xa::'q_46958.
+    (x::'q_46958 => 'q_46957) xa = x (xb::'q_46958) ==> xa = xb)
+==> x ` ((xa::'q_46958 => bool) - {xb}) = x ` xa - {x xb}"
+  by (import hollight IMAGE_DELETE_INJ)
+
+lemma FORALL_IN_IMAGE: "(ALL xb::'q_47016.
+    xb : (x::'q_47017 => 'q_47016) ` (xa::'q_47017 => bool) -->
+    (P::'q_47016 => bool) xb) =
+(ALL xb::'q_47017. xb : xa --> P (x xb))"
+  by (import hollight FORALL_IN_IMAGE)
+
+lemma EXISTS_IN_IMAGE: "(EX xb::'q_47052.
+    xb : (x::'q_47053 => 'q_47052) ` (xa::'q_47053 => bool) &
+    (P::'q_47052 => bool) xb) =
+(EX xb::'q_47053. xb : xa & P (x xb))"
+  by (import hollight EXISTS_IN_IMAGE)
+
+lemma FORALL_SUBSET_IMAGE: "(ALL xc<=(xa::'q_47140 => 'q_47156) ` (xb::'q_47140 => bool).
+    (x::('q_47156 => bool) => bool) xc) =
+(ALL t<=xb. x (xa ` t))"
+  by (import hollight FORALL_SUBSET_IMAGE)
+
+lemma EXISTS_SUBSET_IMAGE: "(EX xc<=(xa::'q_47183 => 'q_47199) ` (xb::'q_47183 => bool).
+    (x::('q_47199 => bool) => bool) xc) =
+(EX t<=xb. x (xa ` t))"
+  by (import hollight EXISTS_SUBSET_IMAGE)
+
+lemma SIMPLE_IMAGE: "{u::'q_47262.
+ EX xb::'q_47258.
+    xb : (xa::'q_47258 => bool) & u = (x::'q_47258 => 'q_47262) xb} =
+x ` xa"
+  by (import hollight SIMPLE_IMAGE)
+
+lemma SIMPLE_IMAGE_GEN: "{u::'q_47292.
+ EX xa::'q_47305.
+    (P::'q_47305 => bool) xa & u = (x::'q_47305 => 'q_47292) xa} =
+x ` {u::'q_47305. EX x::'q_47305. P x & u = x}"
+  by (import hollight SIMPLE_IMAGE_GEN)
+
+lemma IMAGE_UNIONS: "(x::'q_47323 => 'q_47332) ` Union (xa::('q_47323 => bool) => bool) =
+Union (op ` x ` xa)"
+  by (import hollight IMAGE_UNIONS)
+
+lemma SURJECTIVE_IMAGE_EQ: "(ALL y::'q_47396.
+    y : (xa::'q_47396 => bool) -->
+    (EX x::'q_47400. (f::'q_47400 => 'q_47396) x = y)) &
+(ALL xb::'q_47400. (f xb : xa) = (xb : (x::'q_47400 => bool)))
+==> f ` x = xa"
+  by (import hollight SURJECTIVE_IMAGE_EQ)
+
+lemma EMPTY_GSPEC: "{u::'q_47425. Ex (SETSPEC u False)} = {}"
+  by (import hollight EMPTY_GSPEC)
+
+lemma SING_GSPEC: "(ALL x::'q_47454. {u::'q_47454. EX xa::'q_47454. xa = x & u = xa} = {x}) &
+(ALL x::'q_47480. {u::'q_47480. EX xa::'q_47480. x = xa & u = xa} = {x})"
+  by (import hollight SING_GSPEC)
+
+lemma IN_ELIM_PAIR_THM: "((xa::'q_47526, xb::'q_47525)
+ : {xa::'q_47526 * 'q_47525.
+    EX (xb::'q_47526) y::'q_47525.
+       (x::'q_47526 => 'q_47525 => bool) xb y & xa = (xb, y)}) =
+x xa xb"
+  by (import hollight IN_ELIM_PAIR_THM)
+
+lemma SET_PAIR_THM: "{u::'q_47570 * 'q_47569.
+ EX p::'q_47570 * 'q_47569. (x::'q_47570 * 'q_47569 => bool) p & u = p} =
+{u::'q_47570 * 'q_47569.
+ EX (a::'q_47570) b::'q_47569. x (a, b) & u = (a, b)}"
+  by (import hollight SET_PAIR_THM)
+
+lemma FORALL_IN_GSPEC: "(ALL (P::'q_47618 => bool) f::'q_47618 => 'q_47739.
+    (ALL z::'q_47739.
+        z : {u::'q_47739. EX x::'q_47618. P x & u = f x} -->
+        (Q::'q_47739 => bool) z) =
+    (ALL x::'q_47618. P x --> Q (f x))) &
+(ALL (P::'q_47675 => 'q_47674 => bool) f::'q_47675 => 'q_47674 => 'q_47739.
+    (ALL z::'q_47739.
+        z : {u::'q_47739.
+             EX (x::'q_47675) y::'q_47674. P x y & u = f x y} -->
+        Q z) =
+    (ALL (x::'q_47675) y::'q_47674. P x y --> Q (f x y))) &
+(ALL (P::'q_47742 => 'q_47741 => 'q_47740 => bool)
+    f::'q_47742 => 'q_47741 => 'q_47740 => 'q_47739.
+    (ALL z::'q_47739.
+        z : {u::'q_47739.
+             EX (w::'q_47742) (x::'q_47741) y::'q_47740.
+                P w x y & u = f w x y} -->
+        Q z) =
+    (ALL (w::'q_47742) (x::'q_47741) y::'q_47740. P w x y --> Q (f w x y)))"
+  by (import hollight FORALL_IN_GSPEC)
+
+lemma EXISTS_IN_GSPEC: "(ALL (P::'q_47788 => bool) f::'q_47788 => 'q_47909.
+    (EX z::'q_47909.
+        z : {u::'q_47909. EX x::'q_47788. P x & u = f x} &
+        (Q::'q_47909 => bool) z) =
+    (EX x::'q_47788. P x & Q (f x))) &
+(ALL (P::'q_47845 => 'q_47844 => bool) f::'q_47845 => 'q_47844 => 'q_47909.
+    (EX z::'q_47909.
+        z : {u::'q_47909. EX (x::'q_47845) y::'q_47844. P x y & u = f x y} &
+        Q z) =
+    (EX (x::'q_47845) y::'q_47844. P x y & Q (f x y))) &
+(ALL (P::'q_47912 => 'q_47911 => 'q_47910 => bool)
+    f::'q_47912 => 'q_47911 => 'q_47910 => 'q_47909.
+    (EX z::'q_47909.
+        z : {u::'q_47909.
+             EX (w::'q_47912) (x::'q_47911) y::'q_47910.
+                P w x y & u = f w x y} &
+        Q z) =
+    (EX (w::'q_47912) (x::'q_47911) y::'q_47910. P w x y & Q (f w x y)))"
+  by (import hollight EXISTS_IN_GSPEC)
+
+lemma SET_PROVE_CASES: "(P::('A => bool) => bool) {} &
+(ALL (a::'A) s::'A => bool. a ~: s --> P (insert a s))
+==> P (x::'A => bool)"
+  by (import hollight SET_PROVE_CASES)
+
+lemma UNIONS_IMAGE: "Union ((f::'q_47989 => 'q_47973 => bool) ` (s::'q_47989 => bool)) =
+{u::'q_47973. EX y::'q_47973. (EX x::'q_47989. x : s & y : f x) & u = y}"
+  by (import hollight UNIONS_IMAGE)
+
+lemma INTERS_IMAGE: "Inter ((f::'q_48032 => 'q_48016 => bool) ` (s::'q_48032 => bool)) =
+{u::'q_48016. EX y::'q_48016. (ALL x::'q_48032. x : s --> y : f x) & u = y}"
+  by (import hollight INTERS_IMAGE)
+
+lemma UNIONS_GSPEC: "(ALL (P::'q_48085 => bool) f::'q_48085 => 'q_48071 => bool.
+    Union {u::'q_48071 => bool. EX x::'q_48085. P x & u = f x} =
+    {u::'q_48071.
+     EX a::'q_48071. (EX x::'q_48085. P x & a : f x) & u = a}) &
+(ALL (P::'q_48149 => 'q_48148 => bool)
+    f::'q_48149 => 'q_48148 => 'q_48129 => bool.
+    Union
+     {u::'q_48129 => bool.
+      EX (x::'q_48149) y::'q_48148. P x y & u = f x y} =
+    {u::'q_48129.
+     EX a::'q_48129.
+        (EX (x::'q_48149) y::'q_48148. P x y & a : f x y) & u = a}) &
+(ALL (P::'q_48223 => 'q_48222 => 'q_48221 => bool)
+    f::'q_48223 => 'q_48222 => 'q_48221 => 'q_48197 => bool.
+    Union
+     {u::'q_48197 => bool.
+      EX (x::'q_48223) (y::'q_48222) z::'q_48221. P x y z & u = f x y z} =
+    {u::'q_48197.
+     EX a::'q_48197.
+        (EX (x::'q_48223) (y::'q_48222) z::'q_48221.
+            P x y z & a : f x y z) &
+        u = a})"
+  by (import hollight UNIONS_GSPEC)
+
+lemma INTERS_GSPEC: "(ALL (P::'q_48276 => bool) f::'q_48276 => 'q_48262 => bool.
+    Inter {u::'q_48262 => bool. EX x::'q_48276. P x & u = f x} =
+    {u::'q_48262.
+     EX a::'q_48262. (ALL x::'q_48276. P x --> a : f x) & u = a}) &
+(ALL (P::'q_48340 => 'q_48339 => bool)
+    f::'q_48340 => 'q_48339 => 'q_48320 => bool.
+    Inter
+     {u::'q_48320 => bool.
+      EX (x::'q_48340) y::'q_48339. P x y & u = f x y} =
+    {u::'q_48320.
+     EX a::'q_48320.
+        (ALL (x::'q_48340) y::'q_48339. P x y --> a : f x y) & u = a}) &
+(ALL (P::'q_48414 => 'q_48413 => 'q_48412 => bool)
+    f::'q_48414 => 'q_48413 => 'q_48412 => 'q_48388 => bool.
+    Inter
+     {u::'q_48388 => bool.
+      EX (x::'q_48414) (y::'q_48413) z::'q_48412. P x y z & u = f x y z} =
+    {u::'q_48388.
+     EX a::'q_48388.
+        (ALL (x::'q_48414) (y::'q_48413) z::'q_48412.
+            P x y z --> a : f x y z) &
+        u = a})"
+  by (import hollight INTERS_GSPEC)
+
+lemma DIFF_INTERS: "(x::'q_48451 => bool) - Inter (xa::('q_48451 => bool) => bool) =
+Union {u::'q_48451 => bool. EX xb::'q_48451 => bool. xb : xa & u = x - xb}"
+  by (import hollight DIFF_INTERS)
+
+lemma INTERS_UNIONS: "Inter (x::('q_48486 => bool) => bool) =
+UNIV -
+Union {u::'q_48486 => bool. EX t::'q_48486 => bool. t : x & u = UNIV - t}"
+  by (import hollight INTERS_UNIONS)
+
+lemma UNIONS_INTERS: "Union (s::('q_48521 => bool) => bool) =
+UNIV -
+Inter {u::'q_48521 => bool. EX t::'q_48521 => bool. t : s & u = UNIV - t}"
+  by (import hollight UNIONS_INTERS)
+
+lemma FINITE_SING: "finite {x::'q_48799}"
+  by (import hollight FINITE_SING)
+
+lemma FINITE_DELETE_IMP: "finite (s::'A => bool) ==> finite (s - {x::'A})"
+  by (import hollight FINITE_DELETE_IMP)
+
+lemma FINITE_DELETE: "finite ((s::'A => bool) - {x::'A}) = finite s"
+  by (import hollight FINITE_DELETE)
+
+lemma FINITE_FINITE_UNIONS: "finite (s::('q_48871 => bool) => bool)
+==> finite (Union s) = (ALL t::'q_48871 => bool. t : s --> finite t)"
+  by (import hollight FINITE_FINITE_UNIONS)
+
+lemma FINITE_IMAGE_EXPAND: "finite (s::'A => bool)
+==> finite
+     {u::'B. EX y::'B. (EX x::'A. x : s & y = (f::'A => 'B) x) & u = y}"
+  by (import hollight FINITE_IMAGE_EXPAND)
+
+lemma FINITE_IMAGE_INJ_GENERAL: "(ALL (x::'A) y::'A.
+    x : (s::'A => bool) & y : s & (f::'A => 'B) x = f y --> x = y) &
+finite (x::'B => bool)
+==> finite {u::'A. EX xa::'A. (xa : s & f xa : x) & u = xa}"
+  by (import hollight FINITE_IMAGE_INJ_GENERAL)
+
+lemma FINITE_FINITE_PREIMAGE_GENERAL: "finite (t::'B => bool) &
+(ALL y::'B.
+    y : t -->
+    finite
+     {u::'A. EX x::'A. (x : (s::'A => bool) & (f::'A => 'B) x = y) & u = x})
+==> finite {u::'A. EX x::'A. (x : s & f x : t) & u = x}"
+  by (import hollight FINITE_FINITE_PREIMAGE_GENERAL)
+
+lemma FINITE_FINITE_PREIMAGE: "finite (t::'B => bool) &
+(ALL y::'B. y : t --> finite {u::'A. EX x::'A. (f::'A => 'B) x = y & u = x})
+==> finite {u::'A. EX x::'A. f x : t & u = x}"
+  by (import hollight FINITE_FINITE_PREIMAGE)
+
+lemma FINITE_IMAGE_INJ_EQ: "(!!(x::'A) y::'A.
+    x : (s::'A => bool) & y : s & (f::'A => 'B) x = f y ==> x = y)
+==> finite (f ` s) = finite s"
+  by (import hollight FINITE_IMAGE_INJ_EQ)
+
+lemma FINITE_IMAGE_INJ: "(ALL (x::'A) y::'A. (f::'A => 'B) x = f y --> x = y) &
+finite (A::'B => bool)
+==> finite {u::'A. EX x::'A. f x : A & u = x}"
+  by (import hollight FINITE_IMAGE_INJ)
+
+lemma INFINITE_IMAGE_INJ: "[| !!(x::'A) y::'A. (f::'A => 'B) x = f y ==> x = y;
+   infinite (s::'A => bool) |]
+==> infinite (f ` s)"
+  by (import hollight INFINITE_IMAGE_INJ)
+
+lemma FINITE_SUBSET_IMAGE: "(finite (t::'B => bool) & t <= (f::'A => 'B) ` (s::'A => bool)) =
+(EX x::'A => bool. finite x & x <= s & t = f ` x)"
+  by (import hollight FINITE_SUBSET_IMAGE)
+
+lemma EXISTS_FINITE_SUBSET_IMAGE: "(EX xc::'q_49755 => bool.
+    finite xc &
+    xc <= (xa::'q_49735 => 'q_49755) ` (xb::'q_49735 => bool) &
+    (x::('q_49755 => bool) => bool) xc) =
+(EX xc::'q_49735 => bool. finite xc & xc <= xb & x (xa ` xc))"
+  by (import hollight EXISTS_FINITE_SUBSET_IMAGE)
+
+lemma FINITE_SUBSET_IMAGE_IMP: "finite (t::'B => bool) & t <= (f::'A => 'B) ` (s::'A => bool)
+==> EX s'::'A => bool. finite s' & s' <= s & t <= f ` s'"
+  by (import hollight FINITE_SUBSET_IMAGE_IMP)
+
+definition
+  FINREC :: "('A => 'B => 'B) => 'B => ('A => bool) => 'B => nat => bool"  where
+  "FINREC ==
+SOME FINREC::('A => 'B => 'B) => 'B => ('A => bool) => 'B => nat => bool.
+   (ALL (f::'A => 'B => 'B) (s::'A => bool) (a::'B) b::'B.
+       FINREC f b s a (0::nat) = (s = {} & a = b)) &
+   (ALL (b::'B) (s::'A => bool) (n::nat) (a::'B) f::'A => 'B => 'B.
+       FINREC f b s a (Suc n) =
+       (EX (x::'A) c::'B. x : s & FINREC f b (s - {x}) c n & a = f x c))"
+
+lemma DEF_FINREC: "FINREC =
+(SOME FINREC::('A => 'B => 'B) => 'B => ('A => bool) => 'B => nat => bool.
+    (ALL (f::'A => 'B => 'B) (s::'A => bool) (a::'B) b::'B.
+        FINREC f b s a (0::nat) = (s = {} & a = b)) &
+    (ALL (b::'B) (s::'A => bool) (n::nat) (a::'B) f::'A => 'B => 'B.
+        FINREC f b s a (Suc n) =
+        (EX (x::'A) c::'B. x : s & FINREC f b (s - {x}) c n & a = f x c)))"
+  by (import hollight DEF_FINREC)
+
+lemma FINREC_1_LEMMA: "FINREC (x::'q_49919 => 'q_49918 => 'q_49918) (xa::'q_49918)
+ (xb::'q_49919 => bool) (xc::'q_49918) (Suc (0::nat)) =
+(EX xd::'q_49919. xb = {xd} & xc = x xd xa)"
+  by (import hollight FINREC_1_LEMMA)
+
+lemma FINREC_SUC_LEMMA: "[| !!(x::'A) (y::'A) s::'B.
+      x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s);
+   FINREC f (b::'B) (s::'A => bool) (z::'B) (Suc (n::nat)); (x::'A) : s |]
+==> EX w::'B. FINREC f b (s - {x}) w n & z = f x w"
+  by (import hollight FINREC_SUC_LEMMA)
+
+lemma FINREC_UNIQUE_LEMMA: "[| !!(x::'A) (y::'A) s::'B.
+      x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s);
+   FINREC f (b::'B) (s::'A => bool) (a1::'B) (n1::nat) &
+   FINREC f b s (a2::'B) (n2::nat) |]
+==> a1 = a2 & n1 = n2"
+  by (import hollight FINREC_UNIQUE_LEMMA)
+
+lemma FINREC_EXISTS_LEMMA: "finite (s::'A => bool)
+==> EX a::'B. Ex (FINREC (f::'A => 'B => 'B) (b::'B) s a)"
+  by (import hollight FINREC_EXISTS_LEMMA)
+
+lemma FINREC_FUN_LEMMA: "(ALL s::'A.
+    (P::'A => bool) s -->
+    (EX a::'B. Ex ((R::'A => 'B => 'C => bool) s a))) &
+(ALL (n1::'C) (n2::'C) (s::'A) (a1::'B) a2::'B.
+    R s a1 n1 & R s a2 n2 --> a1 = a2 & n1 = n2)
+==> EX x::'A => 'B. ALL (s::'A) a::'B. P s --> Ex (R s a) = (x s = a)"
+  by (import hollight FINREC_FUN_LEMMA)
+
+lemma FINREC_FUN: "(!!(x::'A) (y::'A) s::'B.
+    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
+==> EX g::('A => bool) => 'B.
+       g {} = (b::'B) &
+       (ALL (s::'A => bool) x::'A.
+           finite s & x : s --> g s = f x (g (s - {x})))"
+  by (import hollight FINREC_FUN)
+
+lemma SET_RECURSION_LEMMA: "(!!(x::'A) (y::'A) s::'B.
+    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
+==> EX g::('A => bool) => 'B.
+       g {} = (b::'B) &
+       (ALL (x::'A) s::'A => bool.
+           finite s --> g (insert x s) = (if x : s then g s else f x (g s)))"
+  by (import hollight SET_RECURSION_LEMMA)
+
+definition
+  ITSET :: "('q_50575 => 'q_50574 => 'q_50574)
+=> ('q_50575 => bool) => 'q_50574 => 'q_50574"  where
+  "ITSET ==
+%(u::'q_50575 => 'q_50574 => 'q_50574) (ua::'q_50575 => bool) ub::'q_50574.
+   (SOME g::('q_50575 => bool) => 'q_50574.
+       g {} = ub &
+       (ALL (x::'q_50575) s::'q_50575 => bool.
+           finite s -->
+           g (insert x s) = (if x : s then g s else u x (g s))))
+    ua"
+
+lemma DEF_ITSET: "ITSET =
+(%(u::'q_50575 => 'q_50574 => 'q_50574) (ua::'q_50575 => bool) ub::'q_50574.
+    (SOME g::('q_50575 => bool) => 'q_50574.
+        g {} = ub &
+        (ALL (x::'q_50575) s::'q_50575 => bool.
+            finite s -->
+            g (insert x s) = (if x : s then g s else u x (g s))))
+     ua)"
+  by (import hollight DEF_ITSET)
+
+lemma FINITE_RECURSION: "(!!(x::'A) (y::'A) s::'B.
+    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
+==> ITSET f {} (b::'B) = b &
+    (ALL (x::'A) xa::'A => bool.
+        finite xa -->
+        ITSET f (insert x xa) b =
+        (if x : xa then ITSET f xa b else f x (ITSET f xa b)))"
+  by (import hollight FINITE_RECURSION)
+
+lemma FINITE_RECURSION_DELETE: "(!!(x::'A) (y::'A) s::'B.
+    x ~= y ==> (f::'A => 'B => 'B) x (f y s) = f y (f x s))
+==> ITSET f {} (b::'B) = b &
+    (ALL (x::'A) s::'A => bool.
+        finite s -->
+        ITSET f s b =
+        (if x : s then f x (ITSET f (s - {x}) b) else ITSET f (s - {x}) b))"
+  by (import hollight FINITE_RECURSION_DELETE)
+
+lemma ITSET_EQ: "finite (x::'q_50880 => bool) &
+(ALL xc::'q_50880.
+    xc : x -->
+    (xa::'q_50880 => 'q_50881 => 'q_50881) xc =
+    (xb::'q_50880 => 'q_50881 => 'q_50881) xc) &
+(ALL (x::'q_50880) (y::'q_50880) s::'q_50881.
+    x ~= y --> xa x (xa y s) = xa y (xa x s)) &
+(ALL (x::'q_50880) (y::'q_50880) s::'q_50881.
+    x ~= y --> xb x (xb y s) = xb y (xb x s))
+==> ITSET xa x (xc::'q_50881) = ITSET xb x xc"
+  by (import hollight ITSET_EQ)
+
+lemma SUBSET_RESTRICT: "{u::'q_50914.
+ EX xb::'q_50914.
+    (xb : (x::'q_50914 => bool) & (xa::'q_50914 => bool) xb) & u = xb}
+<= x"
+  by (import hollight SUBSET_RESTRICT)
+
+lemma FINITE_RESTRICT: "finite (s::'A => bool)
+==> finite {u::'A. EX x::'A. (x : s & (P::'A => bool) x) & u = x}"
+  by (import hollight FINITE_RESTRICT)
+
+definition
+  CARD :: "('q_50968 => bool) => nat"  where
+  "CARD == %u::'q_50968 => bool. ITSET (%x::'q_50968. Suc) u (0::nat)"
+
+lemma DEF_CARD: "CARD = (%u::'q_50968 => bool. ITSET (%x::'q_50968. Suc) u (0::nat))"
+  by (import hollight DEF_CARD)
+
+lemma CARD_CLAUSES: "CARD {} = (0::nat) &
+(ALL (x::'A::type) s::'A::type => bool.
+    finite s -->
+    CARD (insert x s) = (if x : s then CARD s else Suc (CARD s)))"
+  by (import hollight CARD_CLAUSES)
+
+lemma CARD_UNION: "finite (x::'A => bool) & finite (xa::'A => bool) & x Int xa = {}
+==> CARD (x Un xa) = CARD x + CARD xa"
+  by (import hollight CARD_UNION)
+
+lemma CARD_DELETE: "finite (s::'A => bool)
+==> CARD (s - {x::'A}) = (if x : s then CARD s - (1::nat) else CARD s)"
+  by (import hollight CARD_DELETE)
+
+lemma CARD_UNION_EQ: "finite (u::'q_51213 => bool) &
+(s::'q_51213 => bool) Int (t::'q_51213 => bool) = {} & s Un t = u
+==> CARD s + CARD t = CARD u"
+  by (import hollight CARD_UNION_EQ)
+
+lemma CARD_DIFF: "finite (s::'q_51270 => bool) & (t::'q_51270 => bool) <= s
+==> CARD (s - t) = CARD s - CARD t"
+  by (import hollight CARD_DIFF)
+
+lemma CARD_EQ_0: "finite (s::'q_51308 => bool) ==> (CARD s = (0::nat)) = (s = {})"
+  by (import hollight CARD_EQ_0)
+
+lemma FINITE_INDUCT_DELETE: "[| (P::('A => bool) => bool) {} &
+   (ALL s::'A => bool.
+       finite s & s ~= {} --> (EX x::'A. x : s & (P (s - {x}) --> P s)));
+   finite (s::'A => bool) |]
+==> P s"
+  by (import hollight FINITE_INDUCT_DELETE)
+
+definition
+  HAS_SIZE :: "('q_51427 => bool) => nat => bool"  where
+  "HAS_SIZE == %(u::'q_51427 => bool) ua::nat. finite u & CARD u = ua"
+
+lemma DEF_HAS_SIZE: "HAS_SIZE = (%(u::'q_51427 => bool) ua::nat. finite u & CARD u = ua)"
+  by (import hollight DEF_HAS_SIZE)
+
+lemma HAS_SIZE_CARD: "HAS_SIZE (x::'q_51446 => bool) (xa::nat) ==> CARD x = xa"
+  by (import hollight HAS_SIZE_CARD)
+
+lemma HAS_SIZE_0: "HAS_SIZE (s::'A => bool) (0::nat) = (s = {})"
+  by (import hollight HAS_SIZE_0)
+
+lemma HAS_SIZE_SUC: "HAS_SIZE (s::'A => bool) (Suc (n::nat)) =
+(s ~= {} & (ALL x::'A. x : s --> HAS_SIZE (s - {x}) n))"
+  by (import hollight HAS_SIZE_SUC)
+
+lemma HAS_SIZE_UNION: "HAS_SIZE (x::'q_51584 => bool) (xb::nat) &
+HAS_SIZE (xa::'q_51584 => bool) (xc::nat) & x Int xa = {}
+==> HAS_SIZE (x Un xa) (xb + xc)"
+  by (import hollight HAS_SIZE_UNION)
+
+lemma HAS_SIZE_DIFF: "HAS_SIZE (x::'q_51620 => bool) (xb::nat) &
+HAS_SIZE (xa::'q_51620 => bool) (xc::nat) & xa <= x
+==> HAS_SIZE (x - xa) (xb - xc)"
+  by (import hollight HAS_SIZE_DIFF)
+
+lemma HAS_SIZE_UNIONS: "HAS_SIZE (x::'A => bool) (xb::nat) &
+(ALL xb::'A. xb : x --> HAS_SIZE ((xa::'A => 'B => bool) xb) (xc::nat)) &
+(ALL (xb::'A) y::'A. xb : x & y : x & xb ~= y --> xa xb Int xa y = {})
+==> HAS_SIZE (Union {u::'B => bool. EX xb::'A. xb : x & u = xa xb})
+     (xb * xc)"
+  by (import hollight HAS_SIZE_UNIONS)
+
+lemma FINITE_HAS_SIZE: "finite (x::'q_51824 => bool) = HAS_SIZE x (CARD x)"
+  by (import hollight FINITE_HAS_SIZE)
+
+lemma HAS_SIZE_CLAUSES: "HAS_SIZE (s::'q_51886 => bool) (0::nat) = (s = {}) &
+HAS_SIZE s (Suc (n::nat)) =
+(EX (a::'q_51886) t::'q_51886 => bool.
+    HAS_SIZE t n & a ~: t & s = insert a t)"
+  by (import hollight HAS_SIZE_CLAUSES)
+
+lemma CARD_SUBSET_EQ: "finite (b::'A => bool) & (a::'A => bool) <= b & CARD a = CARD b ==> a = b"
+  by (import hollight CARD_SUBSET_EQ)
+
+lemma CARD_SUBSET: "(a::'A => bool) <= (b::'A => bool) & finite b ==> CARD a <= CARD b"
+  by (import hollight CARD_SUBSET)
+
+lemma CARD_SUBSET_LE: "finite (b::'A => bool) & (a::'A => bool) <= b & CARD b <= CARD a ==> a = b"
+  by (import hollight CARD_SUBSET_LE)
+
+lemma SUBSET_CARD_EQ: "finite (t::'q_52197 => bool) & (s::'q_52197 => bool) <= t
+==> (CARD s = CARD t) = (s = t)"
+  by (import hollight SUBSET_CARD_EQ)
+
+lemma CARD_PSUBSET: "(a::'A => bool) < (b::'A => bool) & finite b ==> CARD a < CARD b"
+  by (import hollight CARD_PSUBSET)
+
+lemma CARD_UNION_LE: "finite (s::'A => bool) & finite (t::'A => bool)
+==> CARD (s Un t) <= CARD s + CARD t"
+  by (import hollight CARD_UNION_LE)
+
+lemma CARD_UNIONS_LE: "HAS_SIZE (x::'A => bool) (xb::nat) &
+(ALL xb::'A.
+    xb : x -->
+    finite ((xa::'A => 'B => bool) xb) & CARD (xa xb) <= (xc::nat))
+==> CARD (Union {u::'B => bool. EX xb::'A. xb : x & u = xa xb}) <= xb * xc"
+  by (import hollight CARD_UNIONS_LE)
+
+lemma CARD_UNION_GEN: "finite (s::'q_52620 => bool) & finite (t::'q_52620 => bool)
+==> CARD (s Un t) = CARD s + CARD t - CARD (s Int t)"
+  by (import hollight CARD_UNION_GEN)
+
+lemma CARD_UNION_OVERLAP_EQ: "finite (s::'q_52701 => bool) & finite (t::'q_52701 => bool)
+==> (CARD (s Un t) = CARD s + CARD t) = (s Int t = {})"
+  by (import hollight CARD_UNION_OVERLAP_EQ)
+
+lemma CARD_UNION_OVERLAP: "finite (x::'q_52743 => bool) &
+finite (xa::'q_52743 => bool) & CARD (x Un xa) < CARD x + CARD xa
+==> x Int xa ~= {}"
+  by (import hollight CARD_UNION_OVERLAP)
+
+lemma CARD_IMAGE_INJ: "(ALL (xa::'A) y::'A.
+    xa : (x::'A => bool) & y : x & (f::'A => 'B) xa = f y --> xa = y) &
+finite x
+==> CARD (f ` x) = CARD x"
+  by (import hollight CARD_IMAGE_INJ)
+
+lemma HAS_SIZE_IMAGE_INJ: "(ALL (xb::'A) y::'A.
+    xb : (xa::'A => bool) & y : xa & (x::'A => 'B) xb = x y --> xb = y) &
+HAS_SIZE xa (xb::nat)
+==> HAS_SIZE (x ` xa) xb"
+  by (import hollight HAS_SIZE_IMAGE_INJ)
+
+lemma CARD_IMAGE_LE: "finite (s::'A => bool) ==> CARD ((f::'A => 'B) ` s) <= CARD s"
+  by (import hollight CARD_IMAGE_LE)
+
+lemma CARD_IMAGE_INJ_EQ: "finite (s::'A => bool) &
+(ALL x::'A. x : s --> (f::'A => 'B) x : (t::'B => bool)) &
+(ALL y::'B. y : t --> (EX! x::'A. x : s & f x = y))
+==> CARD t = CARD s"
+  by (import hollight CARD_IMAGE_INJ_EQ)
+
+lemma CARD_SUBSET_IMAGE: "finite (t::'q_52977 => bool) &
+(s::'q_52984 => bool) <= (f::'q_52977 => 'q_52984) ` t
+==> CARD s <= CARD t"
+  by (import hollight CARD_SUBSET_IMAGE)
+
+lemma HAS_SIZE_IMAGE_INJ_EQ: "(!!(x::'q_53049) y::'q_53049.
+    x : (s::'q_53049 => bool) & y : s & (f::'q_53049 => 'q_53044) x = f y
+    ==> x = y)
+==> HAS_SIZE (f ` s) (n::nat) = HAS_SIZE s n"
+  by (import hollight HAS_SIZE_IMAGE_INJ_EQ)
+
+lemma CHOOSE_SUBSET_STRONG: "(finite (s::'A => bool) ==> (n::nat) <= CARD s) ==> EX t<=s. HAS_SIZE t n"
+  by (import hollight CHOOSE_SUBSET_STRONG)
+
+lemma CHOOSE_SUBSET: "[| finite (s::'A => bool); (n::nat) <= CARD s |] ==> EX t<=s. HAS_SIZE t n"
+  by (import hollight CHOOSE_SUBSET)
+
+lemma HAS_SIZE_PRODUCT_DEPENDENT: "HAS_SIZE (x::'A => bool) (xa::nat) &
+(ALL xa::'A. xa : x --> HAS_SIZE ((xb::'A => 'B => bool) xa) (xc::nat))
+==> HAS_SIZE
+     {u::'A * 'B. EX (xa::'A) y::'B. (xa : x & y : xb xa) & u = (xa, y)}
+     (xa * xc)"
+  by (import hollight HAS_SIZE_PRODUCT_DEPENDENT)
+
+lemma FINITE_PRODUCT_DEPENDENT: "finite (s::'A => bool) &
+(ALL x::'A. x : s --> finite ((t::'A => 'B => bool) x))
+==> finite
+     {u::'C.
+      EX (x::'A) y::'B. (x : s & y : t x) & u = (f::'A => 'B => 'C) x y}"
+  by (import hollight FINITE_PRODUCT_DEPENDENT)
+
+lemma FINITE_PRODUCT: "finite (x::'A => bool) & finite (xa::'B => bool)
+==> finite {u::'A * 'B. EX (xb::'A) y::'B. (xb : x & y : xa) & u = (xb, y)}"
+  by (import hollight FINITE_PRODUCT)
+
+lemma CARD_PRODUCT: "finite (s::'A => bool) & finite (t::'B => bool)
+==> CARD {u::'A * 'B. EX (x::'A) y::'B. (x : s & y : t) & u = (x, y)} =
+    CARD s * CARD t"
+  by (import hollight CARD_PRODUCT)
+
+lemma HAS_SIZE_PRODUCT: "HAS_SIZE (x::'A => bool) (xa::nat) & HAS_SIZE (xb::'B => bool) (xc::nat)
+==> HAS_SIZE
+     {u::'A * 'B. EX (xa::'A) y::'B. (xa : x & y : xb) & u = (xa, y)}
+     (xa * xc)"
+  by (import hollight HAS_SIZE_PRODUCT)
+
+definition
+  CROSS :: "('q_53759 => bool) => ('q_53758 => bool) => 'q_53759 * 'q_53758 => bool"  where
+  "CROSS ==
+%(u::'q_53759 => bool) ua::'q_53758 => bool.
+   {ub::'q_53759 * 'q_53758.
+    EX (x::'q_53759) y::'q_53758. (x : u & y : ua) & ub = (x, y)}"
+
+lemma DEF_CROSS: "CROSS =
+(%(u::'q_53759 => bool) ua::'q_53758 => bool.
+    {ub::'q_53759 * 'q_53758.
+     EX (x::'q_53759) y::'q_53758. (x : u & y : ua) & ub = (x, y)})"
+  by (import hollight DEF_CROSS)
+
+lemma IN_CROSS: "((x::'q_53795, xa::'q_53798)
+ : CROSS (xb::'q_53795 => bool) (xc::'q_53798 => bool)) =
+(x : xb & xa : xc)"
+  by (import hollight IN_CROSS)
+
+lemma HAS_SIZE_CROSS: "HAS_SIZE (x::'q_53823 => bool) (xb::nat) &
+HAS_SIZE (xa::'q_53826 => bool) (xc::nat)
+==> HAS_SIZE (CROSS x xa) (xb * xc)"
+  by (import hollight HAS_SIZE_CROSS)
+
+lemma FINITE_CROSS: "finite (x::'q_53851 => bool) & finite (xa::'q_53853 => bool)
+==> finite (CROSS x xa)"
+  by (import hollight FINITE_CROSS)
+
+lemma CARD_CROSS: "finite (x::'q_53874 => bool) & finite (xa::'q_53876 => bool)
+==> CARD (CROSS x xa) = CARD x * CARD xa"
+  by (import hollight CARD_CROSS)
+
+lemma CROSS_EQ_EMPTY: "(CROSS (x::'q_53917 => bool) (xa::'q_53921 => bool) = {}) =
+(x = {} | xa = {})"
+  by (import hollight CROSS_EQ_EMPTY)
+
+lemma HAS_SIZE_FUNSPACE: "HAS_SIZE (s::'A => bool) (m::nat) & HAS_SIZE (t::'B => bool) (n::nat)
+==> HAS_SIZE
+     {u::'A => 'B.
+      EX f::'A => 'B.
+         ((ALL x::'A. x : s --> f x : t) &
+          (ALL x::'A. x ~: s --> f x = (d::'B))) &
+         u = f}
+     (n ^ m)"
+  by (import hollight HAS_SIZE_FUNSPACE)
+
+lemma CARD_FUNSPACE: "finite (s::'q_54227 => bool) & finite (t::'q_54224 => bool)
+==> CARD
+     {u::'q_54227 => 'q_54224.
+      EX f::'q_54227 => 'q_54224.
+         ((ALL x::'q_54227. x : s --> f x : t) &
+          (ALL x::'q_54227. x ~: s --> f x = (d::'q_54224))) &
+         u = f} =
+    CARD t ^ CARD s"
+  by (import hollight CARD_FUNSPACE)
+
+lemma FINITE_FUNSPACE: "finite (s::'q_54293 => bool) & finite (t::'q_54290 => bool)
+==> finite
+     {u::'q_54293 => 'q_54290.
+      EX f::'q_54293 => 'q_54290.
+         ((ALL x::'q_54293. x : s --> f x : t) &
+          (ALL x::'q_54293. x ~: s --> f x = (d::'q_54290))) &
+         u = f}"
+  by (import hollight FINITE_FUNSPACE)
+
+lemma HAS_SIZE_POWERSET: "HAS_SIZE (s::'A => bool) (n::nat)
+==> HAS_SIZE {u::'A => bool. EX t<=s. u = t} ((2::nat) ^ n)"
+  by (import hollight HAS_SIZE_POWERSET)
+
+lemma CARD_POWERSET: "finite (s::'A => bool)
+==> CARD {u::'A => bool. EX t<=s. u = t} = (2::nat) ^ CARD s"
+  by (import hollight CARD_POWERSET)
+
+lemma FINITE_POWERSET: "finite (s::'A => bool) ==> finite {u::'A => bool. EX t<=s. u = t}"
+  by (import hollight FINITE_POWERSET)
+
+lemma FINITE_UNIONS: "finite (Union (s::('A => bool) => bool)) =
+(finite s & (ALL t::'A => bool. t : s --> finite t))"
+  by (import hollight FINITE_UNIONS)
+
+lemma POWERSET_CLAUSES: "{x::'q_54515 => bool. EX xa<={}. x = xa} = {{}} &
+(ALL (x::'A) xa::'A => bool.
+    {xb::'A => bool. EX xc<=insert x xa. xb = xc} =
+    {u::'A => bool. EX s<=xa. u = s} Un
+    insert x ` {u::'A => bool. EX s<=xa. u = s})"
+  by (import hollight POWERSET_CLAUSES)
+
+lemma HAS_SIZE_NUMSEG_LT: "HAS_SIZE {u. EX m<n. u = m} n"
+  by (import hollight HAS_SIZE_NUMSEG_LT)
+
+lemma CARD_NUMSEG_LT: "CARD {u. EX m<x. u = m} = x"
+  by (import hollight CARD_NUMSEG_LT)
+
+lemma FINITE_NUMSEG_LT: "finite {u::nat. EX m<x::nat. u = m}"
+  by (import hollight FINITE_NUMSEG_LT)
+
+lemma HAS_SIZE_NUMSEG_LE: "HAS_SIZE {xa. EX xb<=x. xa = xb} (x + 1)"
+  by (import hollight HAS_SIZE_NUMSEG_LE)
+
+lemma FINITE_NUMSEG_LE: "finite {u::nat. EX m<=x::nat. u = m}"
+  by (import hollight FINITE_NUMSEG_LE)
+
+lemma CARD_NUMSEG_LE: "CARD {u. EX m<=x. u = m} = x + 1"
+  by (import hollight CARD_NUMSEG_LE)
+
+lemma num_FINITE: "finite (s::nat => bool) = (EX a::nat. ALL x::nat. x : s --> x <= a)"
+  by (import hollight num_FINITE)
+
+lemma num_FINITE_AVOID: "finite (s::nat => bool) ==> EX a::nat. a ~: s"
+  by (import hollight num_FINITE_AVOID)
+
+lemma FINITE_REAL_INTERVAL: "(ALL a. infinite {u. EX x. real_lt a x & u = x}) &
+(ALL a. infinite {u. EX x. real_le a x & u = x}) &
+(ALL b. infinite {u. EX x. real_lt x b & u = x}) &
+(ALL b. infinite {u. EX x. real_le x b & u = x}) &
+(ALL x xa.
+    finite {u. EX xb. (real_lt x xb & real_lt xb xa) & u = xb} =
+    real_le xa x) &
+(ALL a b.
+    finite {u. EX x. (real_le a x & real_lt x b) & u = x} = real_le b a) &
+(ALL a b.
+    finite {u. EX x. (real_lt a x & real_le x b) & u = x} = real_le b a) &
+(ALL a b.
+    finite {u. EX x. (real_le a x & real_le x b) & u = x} = real_le b a)"
+  by (import hollight FINITE_REAL_INTERVAL)
+
+lemma real_INFINITE: "(infinite::(hollight.real => bool) => bool) (UNIV::hollight.real => bool)"
+  by (import hollight real_INFINITE)
+
+lemma HAS_SIZE_INDEX: "HAS_SIZE (x::'A => bool) (n::nat)
+==> EX f::nat => 'A.
+       (ALL m<n. f m : x) &
+       (ALL xa::'A. xa : x --> (EX! m::nat. m < n & f m = xa))"
+  by (import hollight HAS_SIZE_INDEX)
+
+definition
+  pairwise :: "('q_55938 => 'q_55938 => bool) => ('q_55938 => bool) => bool"  where
+  "pairwise ==
+%(u::'q_55938 => 'q_55938 => bool) ua::'q_55938 => bool.
+   ALL (x::'q_55938) y::'q_55938. x : ua & y : ua & x ~= y --> u x y"
+
+lemma DEF_pairwise: "pairwise =
+(%(u::'q_55938 => 'q_55938 => bool) ua::'q_55938 => bool.
+    ALL (x::'q_55938) y::'q_55938. x : ua & y : ua & x ~= y --> u x y)"
+  by (import hollight DEF_pairwise)
+
+definition
+  PAIRWISE :: "('A => 'A => bool) => 'A list => bool"  where
+  "PAIRWISE ==
+SOME PAIRWISE::('A => 'A => bool) => 'A list => bool.
+   (ALL r::'A => 'A => bool. PAIRWISE r [] = True) &
+   (ALL (h::'A) (r::'A => 'A => bool) t::'A list.
+       PAIRWISE r (h # t) = (list_all (r h) t & PAIRWISE r t))"
+
+lemma DEF_PAIRWISE: "PAIRWISE =
+(SOME PAIRWISE::('A => 'A => bool) => 'A list => bool.
+    (ALL r::'A => 'A => bool. PAIRWISE r [] = True) &
+    (ALL (h::'A) (r::'A => 'A => bool) t::'A list.
+        PAIRWISE r (h # t) = (list_all (r h) t & PAIRWISE r t)))"
+  by (import hollight DEF_PAIRWISE)
+
+lemma PAIRWISE_EMPTY: "pairwise (x::'q_55973 => 'q_55973 => bool) {} = True"
+  by (import hollight PAIRWISE_EMPTY)
+
+lemma PAIRWISE_SING: "pairwise (x::'q_55991 => 'q_55991 => bool) {xa::'q_55991} = True"
+  by (import hollight PAIRWISE_SING)
+
+lemma PAIRWISE_MONO: "pairwise (x::'q_56011 => 'q_56011 => bool) (xa::'q_56011 => bool) &
+(xb::'q_56011 => bool) <= xa
+==> pairwise x xb"
+  by (import hollight PAIRWISE_MONO)
+
+lemma SURJECTIVE_IFF_INJECTIVE_GEN: "finite (s::'A => bool) &
+finite (t::'B => bool) & CARD s = CARD t & (f::'A => 'B) ` s <= t
+==> (ALL y::'B. y : t --> (EX x::'A. x : s & f x = y)) =
+    (ALL (x::'A) y::'A. x : s & y : s & f x = f y --> x = y)"
+  by (import hollight SURJECTIVE_IFF_INJECTIVE_GEN)
+
+lemma SURJECTIVE_IFF_INJECTIVE: "finite (x::'A => bool) & (xa::'A => 'A) ` x <= x
+==> (ALL y::'A. y : x --> (EX xb::'A. xb : x & xa xb = y)) =
+    (ALL (xb::'A) y::'A. xb : x & y : x & xa xb = xa y --> xb = y)"
+  by (import hollight SURJECTIVE_IFF_INJECTIVE)
+
+lemma IMAGE_IMP_INJECTIVE_GEN: "[| finite (s::'A => bool) &
+   CARD s = CARD (t::'B => bool) & (f::'A => 'B) ` s = t;
+   (x::'A) : s & (y::'A) : s & f x = f y |]
+==> x = y"
+  by (import hollight IMAGE_IMP_INJECTIVE_GEN)
+
+lemma IMAGE_IMP_INJECTIVE: "[| finite (s::'q_56387 => bool) & (f::'q_56387 => 'q_56387) ` s = s;
+   (x::'q_56387) : s & (y::'q_56387) : s & f x = f y |]
+==> x = y"
+  by (import hollight IMAGE_IMP_INJECTIVE)
+
+lemma CARD_LE_INJ: "finite (x::'A => bool) & finite (xa::'B => bool) & CARD x <= CARD xa
+==> EX f::'A => 'B.
+       f ` x <= xa &
+       (ALL (xa::'A) y::'A. xa : x & y : x & f xa = f y --> xa = y)"
+  by (import hollight CARD_LE_INJ)
+
+lemma FORALL_IN_CLAUSES: "(ALL x::'q_56493 => bool. (ALL xa::'q_56493. xa : {} --> x xa) = True) &
+(ALL (x::'q_56533 => bool) (xa::'q_56533) xb::'q_56533 => bool.
+    (ALL xc::'q_56533. xc : insert xa xb --> x xc) =
+    (x xa & (ALL xa::'q_56533. xa : xb --> x xa)))"
+  by (import hollight FORALL_IN_CLAUSES)
+
+lemma EXISTS_IN_CLAUSES: "(ALL x::'q_56553 => bool. (EX xa::'q_56553. xa : {} & x xa) = False) &
+(ALL (x::'q_56593 => bool) (xa::'q_56593) xb::'q_56593 => bool.
+    (EX xc::'q_56593. xc : insert xa xb & x xc) =
+    (x xa | (EX xa::'q_56593. xa : xb & x xa)))"
+  by (import hollight EXISTS_IN_CLAUSES)
+
+lemma SURJECTIVE_ON_RIGHT_INVERSE: "(ALL xb::'q_56650.
+    xb : (xa::'q_56650 => bool) -->
+    (EX xa::'q_56649.
+        xa : (s::'q_56649 => bool) & (x::'q_56649 => 'q_56650) xa = xb)) =
+(EX g::'q_56650 => 'q_56649.
+    ALL y::'q_56650. y : xa --> g y : s & x (g y) = y)"
+  by (import hollight SURJECTIVE_ON_RIGHT_INVERSE)
+
+lemma INJECTIVE_ON_LEFT_INVERSE: "(ALL (xb::'q_56743) y::'q_56743.
+    xb : (xa::'q_56743 => bool) &
+    y : xa & (x::'q_56743 => 'q_56746) xb = x y -->
+    xb = y) =
+(EX xb::'q_56746 => 'q_56743. ALL xc::'q_56743. xc : xa --> xb (x xc) = xc)"
+  by (import hollight INJECTIVE_ON_LEFT_INVERSE)
+
+lemma BIJECTIVE_ON_LEFT_RIGHT_INVERSE: "(!!x::'q_56878.
+    x : (s::'q_56878 => bool)
+    ==> (f::'q_56878 => 'q_56877) x : (t::'q_56877 => bool))
+==> ((ALL (x::'q_56878) y::'q_56878. x : s & y : s & f x = f y --> x = y) &
+     (ALL x::'q_56877. x : t --> (EX xa::'q_56878. xa : s & f xa = x))) =
+    (EX g::'q_56877 => 'q_56878.
+        (ALL y::'q_56877. y : t --> g y : s) &
+        (ALL y::'q_56877. y : t --> f (g y) = y) &
+        (ALL x::'q_56878. x : s --> g (f x) = x))"
+  by (import hollight BIJECTIVE_ON_LEFT_RIGHT_INVERSE)
+
+lemma SURJECTIVE_RIGHT_INVERSE: "(ALL y::'q_56902. EX x::'q_56905. (f::'q_56905 => 'q_56902) x = y) =
+(EX g::'q_56902 => 'q_56905. ALL y::'q_56902. f (g y) = y)"
+  by (import hollight SURJECTIVE_RIGHT_INVERSE)
+
+lemma INJECTIVE_LEFT_INVERSE: "(ALL (x::'q_56939) xa::'q_56939.
+    (f::'q_56939 => 'q_56942) x = f xa --> x = xa) =
+(EX g::'q_56942 => 'q_56939. ALL x::'q_56939. g (f x) = x)"
+  by (import hollight INJECTIVE_LEFT_INVERSE)
+
+lemma BIJECTIVE_LEFT_RIGHT_INVERSE: "((ALL (x::'A) y::'A. (f::'A => 'B) x = f y --> x = y) &
+ (ALL y::'B. EX x::'A. f x = y)) =
+(EX g::'B => 'A. (ALL y::'B. f (g y) = y) & (ALL x::'A. g (f x) = x))"
+  by (import hollight BIJECTIVE_LEFT_RIGHT_INVERSE)
+
+lemma FUNCTION_FACTORS_RIGHT: "(ALL xb::'q_57046.
+    EX y::'q_57034.
+       (xa::'q_57034 => 'q_57047) y = (x::'q_57046 => 'q_57047) xb) =
+(EX xb::'q_57046 => 'q_57034. x = xa o xb)"
+  by (import hollight FUNCTION_FACTORS_RIGHT)
+
+lemma FUNCTION_FACTORS_LEFT: "(ALL (xb::'q_57119) y::'q_57119.
+    (xa::'q_57119 => 'q_57099) xb = xa y -->
+    (x::'q_57119 => 'q_57120) xb = x y) =
+(EX xb::'q_57099 => 'q_57120. x = xb o xa)"
+  by (import hollight FUNCTION_FACTORS_LEFT)
+
+lemma SURJECTIVE_FORALL_THM: "(ALL y::'B. EX x::'A. (f::'A => 'B) x = y) =
+(ALL P::'B => bool. (ALL x::'A. P (f x)) = All P)"
+  by (import hollight SURJECTIVE_FORALL_THM)
+
+lemma SURJECTIVE_EXISTS_THM: "(ALL y::'B. EX x::'A. (f::'A => 'B) x = y) =
+(ALL P::'B => bool. (EX x::'A. P (f x)) = Ex P)"
+  by (import hollight SURJECTIVE_EXISTS_THM)
+
+lemma SURJECTIVE_IMAGE_THM: "(ALL y::'B. EX x::'A. (f::'A => 'B) x = y) =
+(ALL x::'B => bool.
+    f ` {u::'A. EX xa::'A. x (f xa) & u = xa} =
+    {u::'B. EX xa::'B. x xa & u = xa})"
+  by (import hollight SURJECTIVE_IMAGE_THM)
+
+lemma IMAGE_INJECTIVE_IMAGE_OF_SUBSET: "EX x<=s::'A => bool.
+   (f::'A => 'B) ` s = f ` x &
+   (ALL (xa::'A) y::'A. xa : x & y : x & f xa = f y --> xa = y)"
+  by (import hollight IMAGE_INJECTIVE_IMAGE_OF_SUBSET)
+
+lemma INJECTIVE_ON_IMAGE: "(ALL (s::'A => bool) t::'A => bool.
+    s <= (u::'A => bool) & t <= u & (f::'A => 'B) ` s = f ` t --> s = t) =
+(ALL (x::'A) y::'A. x : u & y : u & f x = f y --> x = y)"
+  by (import hollight INJECTIVE_ON_IMAGE)
+
+lemma INJECTIVE_IMAGE: "(ALL (s::'A => bool) t::'A => bool. (f::'A => 'B) ` s = f ` t --> s = t) =
+(ALL (x::'A) y::'A. f x = f y --> x = y)"
+  by (import hollight INJECTIVE_IMAGE)
+
+lemma SURJECTIVE_ON_IMAGE: "(ALL t<=v::'B => bool. EX s<=u::'A => bool. (f::'A => 'B) ` s = t) =
+(ALL y::'B. y : v --> (EX x::'A. x : u & f x = y))"
+  by (import hollight SURJECTIVE_ON_IMAGE)
+
+lemma SURJECTIVE_IMAGE: "(ALL t::'B => bool. EX s::'A => bool. (f::'A => 'B) ` s = t) =
+(ALL y::'B. EX x::'A. f x = y)"
+  by (import hollight SURJECTIVE_IMAGE)
+
+lemma CARD_EQ_BIJECTION: "finite (s::'A => bool) & finite (t::'B => bool) & CARD s = CARD t
+==> EX f::'A => 'B.
+       (ALL x::'A. x : s --> f x : t) &
+       (ALL y::'B. y : t --> (EX x::'A. x : s & f x = y)) &
+       (ALL (x::'A) y::'A. x : s & y : s & f x = f y --> x = y)"
+  by (import hollight CARD_EQ_BIJECTION)
+
+lemma CARD_EQ_BIJECTIONS: "finite (s::'A => bool) & finite (t::'B => bool) & CARD s = CARD t
+==> EX (f::'A => 'B) g::'B => 'A.
+       (ALL x::'A. x : s --> f x : t & g (f x) = x) &
+       (ALL y::'B. y : t --> g y : s & f (g y) = y)"
+  by (import hollight CARD_EQ_BIJECTIONS)
+
+lemma BIJECTIONS_HAS_SIZE: "(ALL x::'A.
+    x : (s::'A => bool) -->
+    (f::'A => 'B) x : (t::'B => bool) & (g::'B => 'A) (f x) = x) &
+(ALL y::'B. y : t --> g y : s & f (g y) = y) & HAS_SIZE s (n::nat)
+==> HAS_SIZE t n"
+  by (import hollight BIJECTIONS_HAS_SIZE)
+
+lemma BIJECTIONS_HAS_SIZE_EQ: "(ALL x::'A.
+    x : (s::'A => bool) -->
+    (f::'A => 'B) x : (t::'B => bool) & (g::'B => 'A) (f x) = x) &
+(ALL y::'B. y : t --> g y : s & f (g y) = y)
+==> HAS_SIZE s (n::nat) = HAS_SIZE t n"
+  by (import hollight BIJECTIONS_HAS_SIZE_EQ)
+
+lemma BIJECTIONS_CARD_EQ: "(finite (s::'A => bool) | finite (t::'B => bool)) &
+(ALL x::'A. x : s --> (f::'A => 'B) x : t & (g::'B => 'A) (f x) = x) &
+(ALL y::'B. y : t --> g y : s & f (g y) = y)
+==> CARD s = CARD t"
+  by (import hollight BIJECTIONS_CARD_EQ)
+
+lemma WF_FINITE: "(ALL x::'A. ~ (u_556::'A => 'A => bool) x x) &
+(ALL (x::'A) (y::'A) z::'A. u_556 x y & u_556 y z --> u_556 x z) &
+(ALL x::'A. finite {u::'A. EX y::'A. u_556 y x & u = y})
+==> wfP u_556"
+  by (import hollight WF_FINITE)
+
+consts
+  "<=_c" :: "('q_58200 => bool) => ('q_58195 => bool) => bool" ("<='_c")
+
+defs
+  "<=_c_def": "<=_c ==
+%(u::'q_58200 => bool) ua::'q_58195 => bool.
+   EX f::'q_58200 => 'q_58195.
+      (ALL x::'q_58200. x : u --> f x : ua) &
+      (ALL (x::'q_58200) y::'q_58200. x : u & y : u & f x = f y --> x = y)"
+
+lemma DEF__lessthan__equal__c: "<=_c =
+(%(u::'q_58200 => bool) ua::'q_58195 => bool.
+    EX f::'q_58200 => 'q_58195.
+       (ALL x::'q_58200. x : u --> f x : ua) &
+       (ALL (x::'q_58200) y::'q_58200. x : u & y : u & f x = f y --> x = y))"
+  by (import hollight DEF__lessthan__equal__c)
+
+consts
+  "<_c" :: "('q_58212 => bool) => ('q_58213 => bool) => bool" ("<'_c")
+
+defs
+  "<_c_def": "<_c == %(u::'q_58212 => bool) ua::'q_58213 => bool. <=_c u ua & ~ <=_c ua u"
+
+lemma DEF__lessthan__c: "<_c = (%(u::'q_58212 => bool) ua::'q_58213 => bool. <=_c u ua & ~ <=_c ua u)"
+  by (import hollight DEF__lessthan__c)
+
+consts
+  "=_c" :: "('q_58264 => bool) => ('q_58261 => bool) => bool" ("='_c")
+
+defs
+  "=_c_def": "=_c ==
+%(u::'q_58264 => bool) ua::'q_58261 => bool.
+   EX f::'q_58264 => 'q_58261.
+      (ALL x::'q_58264. x : u --> f x : ua) &
+      (ALL y::'q_58261. y : ua --> (EX! x::'q_58264. x : u & f x = y))"
+
+lemma DEF__equal__c: "=_c =
+(%(u::'q_58264 => bool) ua::'q_58261 => bool.
+    EX f::'q_58264 => 'q_58261.
+       (ALL x::'q_58264. x : u --> f x : ua) &
+       (ALL y::'q_58261. y : ua --> (EX! x::'q_58264. x : u & f x = y)))"
+  by (import hollight DEF__equal__c)
+
+consts
+  ">=_c" :: "('q_58273 => bool) => ('q_58272 => bool) => bool" (">='_c")
+
+defs
+  ">=_c_def": ">=_c == %(u::'q_58273 => bool) ua::'q_58272 => bool. <=_c ua u"
+
+lemma DEF__greaterthan__equal__c: ">=_c = (%(u::'q_58273 => bool) ua::'q_58272 => bool. <=_c ua u)"
+  by (import hollight DEF__greaterthan__equal__c)
+
+consts
+  ">_c" :: "('q_58282 => bool) => ('q_58281 => bool) => bool" (">'_c")
+
+defs
+  ">_c_def": ">_c == %(u::'q_58282 => bool) ua::'q_58281 => bool. <_c ua u"
+
+lemma DEF__greaterthan__c: ">_c = (%(u::'q_58282 => bool) ua::'q_58281 => bool. <_c ua u)"
+  by (import hollight DEF__greaterthan__c)
+
+lemma LE_C: "<=_c (x::'q_58320 => bool) (xa::'q_58323 => bool) =
+(EX xb::'q_58323 => 'q_58320.
+    ALL xc::'q_58320. xc : x --> (EX x::'q_58323. x : xa & xb x = xc))"
+  by (import hollight LE_C)
+
+lemma GE_C: ">=_c (x::'q_58364 => bool) (xa::'q_58361 => bool) =
+(EX f::'q_58364 => 'q_58361.
+    ALL y::'q_58361. y : xa --> (EX xa::'q_58364. xa : x & y = f xa))"
+  by (import hollight GE_C)
+
+definition
+  COUNTABLE :: "('q_58372 => bool) => bool"  where
+  "(op ==::(('q_58372::type => bool) => bool)
+        => (('q_58372::type => bool) => bool) => prop)
+ (COUNTABLE::('q_58372::type => bool) => bool)
+ ((>=_c::(nat => bool) => ('q_58372::type => bool) => bool)
+   (UNIV::nat => bool))"
+
+lemma DEF_COUNTABLE: "(op =::(('q_58372::type => bool) => bool)
+       => (('q_58372::type => bool) => bool) => bool)
+ (COUNTABLE::('q_58372::type => bool) => bool)
+ ((>=_c::(nat => bool) => ('q_58372::type => bool) => bool)
+   (UNIV::nat => bool))"
+  by (import hollight DEF_COUNTABLE)
+
+lemma NUMSEG_COMBINE_R: "(x::nat) <= (xa::nat) + (1::nat) & xa <= (xb::nat)
+==> {x..xa} Un {xa + (1::nat)..xb} = {x..xb}"
+  by (import hollight NUMSEG_COMBINE_R)
+
+lemma NUMSEG_COMBINE_L: "(x::nat) <= (xa::nat) & xa <= (xb::nat) + (1::nat)
+==> {x..xa - (1::nat)} Un {xa..xb} = {x..xb}"
+  by (import hollight NUMSEG_COMBINE_L)
+
+lemma NUMSEG_LREC: "(x::nat) <= (xa::nat) ==> insert x {x + (1::nat)..xa} = {x..xa}"
+  by (import hollight NUMSEG_LREC)
+
+lemma NUMSEG_RREC: "(x::nat) <= (xa::nat) ==> insert xa {x..xa - (1::nat)} = {x..xa}"
+  by (import hollight NUMSEG_RREC)
+
+lemma IN_NUMSEG_0: "((x::nat) : {0::nat..xa::nat}) = (x <= xa)"
+  by (import hollight IN_NUMSEG_0)
+
+lemma NUMSEG_EMPTY: "({x::nat..xa::nat} = {}) = (xa < x)"
+  by (import hollight NUMSEG_EMPTY)
+
+lemma CARD_NUMSEG_LEMMA: "CARD {m..m + d} = d + 1"
+  by (import hollight CARD_NUMSEG_LEMMA)
+
+lemma CARD_NUMSEG: "CARD {m..n} = n + 1 - m"
+  by (import hollight CARD_NUMSEG)
+
+lemma HAS_SIZE_NUMSEG: "HAS_SIZE {x..xa} (xa + 1 - x)"
+  by (import hollight HAS_SIZE_NUMSEG)
+
+lemma CARD_NUMSEG_1: "CARD {1..x} = x"
+  by (import hollight CARD_NUMSEG_1)
+
+lemma HAS_SIZE_NUMSEG_1: "HAS_SIZE {1..x} x"
+  by (import hollight HAS_SIZE_NUMSEG_1)
+
+lemma NUMSEG_CLAUSES: "(ALL m::nat. {m..0::nat} = (if m = (0::nat) then {0::nat} else {})) &
+(ALL (m::nat) n::nat.
+    {m..Suc n} = (if m <= Suc n then insert (Suc n) {m..n} else {m..n}))"
+  by (import hollight NUMSEG_CLAUSES)
+
+lemma FINITE_INDEX_NUMSEG: "finite (s::'A => bool) =
+(EX f::nat => 'A.
+    (ALL (i::nat) j::nat.
+        i : {1::nat..CARD s} & j : {1::nat..CARD s} & f i = f j --> i = j) &
+    s = f ` {1::nat..CARD s})"
+  by (import hollight FINITE_INDEX_NUMSEG)
+
+lemma FINITE_INDEX_NUMBERS: "finite (s::'A => bool) =
+(EX (k::nat => bool) f::nat => 'A.
+    (ALL (i::nat) j::nat. i : k & j : k & f i = f j --> i = j) &
+    finite k & s = f ` k)"
+  by (import hollight FINITE_INDEX_NUMBERS)
+
+lemma DISJOINT_NUMSEG: "({x::nat..xa::nat} Int {xb::nat..xc::nat} = {}) =
+(xa < xb | xc < x | xa < x | xc < xb)"
+  by (import hollight DISJOINT_NUMSEG)
+
+lemma NUMSEG_ADD_SPLIT: "(x::nat) <= (xa::nat) + (1::nat)
+==> {x..xa + (xb::nat)} = {x..xa} Un {xa + (1::nat)..xa + xb}"
+  by (import hollight NUMSEG_ADD_SPLIT)
+
+lemma SUBSET_NUMSEG: "({m::nat..n::nat} <= {p::nat..q::nat}) = (n < m | p <= m & n <= q)"
+  by (import hollight SUBSET_NUMSEG)
+
+lemma NUMSEG_LE: "{u::nat. EX xa<=x::nat. u = xa} = {0::nat..x}"
+  by (import hollight NUMSEG_LE)
+
+lemma NUMSEG_LT: "{u::nat. EX x<n::nat. u = x} =
+(if n = (0::nat) then {} else {0::nat..n - (1::nat)})"
+  by (import hollight NUMSEG_LT)
+
+lemma TOPOLOGICAL_SORT: "[| (ALL (x::'A) y::'A.
+       (u_556::'A => 'A => bool) x y & u_556 y x --> x = y) &
+   (ALL (x::'A) (y::'A) z::'A. u_556 x y & u_556 y z --> u_556 x z);
+   HAS_SIZE (s::'A => bool) (n::nat) |]
+==> EX f::nat => 'A.
+       s = f ` {1::nat..n} &
+       (ALL (j::nat) k::nat.
+           j : {1::nat..n} & k : {1::nat..n} & j < k -->
+           ~ u_556 (f k) (f j))"
+  by (import hollight TOPOLOGICAL_SORT)
+
+lemma FINITE_INTSEG: "(ALL l r. finite {u. EX x. (int_le l x & int_le x r) & u = x}) &
+(ALL l r. finite {u. EX x. (int_le l x & int_lt x r) & u = x}) &
+(ALL l r. finite {u. EX x. (int_lt l x & int_le x r) & u = x}) &
+(ALL l r. finite {u. EX x. (int_lt l x & int_lt x r) & u = x})"
+  by (import hollight FINITE_INTSEG)
+
+definition
+  neutral :: "('q_59899 => 'q_59899 => 'q_59899) => 'q_59899"  where
+  "neutral ==
+%u::'q_59899 => 'q_59899 => 'q_59899.
+   SOME x::'q_59899. ALL y::'q_59899. u x y = y & u y x = y"
+
+lemma DEF_neutral: "neutral =
+(%u::'q_59899 => 'q_59899 => 'q_59899.
+    SOME x::'q_59899. ALL y::'q_59899. u x y = y & u y x = y)"
+  by (import hollight DEF_neutral)
+
+definition
+  monoidal :: "('A => 'A => 'A) => bool"  where
+  "monoidal ==
+%u::'A => 'A => 'A.
+   (ALL (x::'A) y::'A. u x y = u y x) &
+   (ALL (x::'A) (y::'A) z::'A. u x (u y z) = u (u x y) z) &
+   (ALL x::'A. u (neutral u) x = x)"
+
+lemma DEF_monoidal: "monoidal =
+(%u::'A => 'A => 'A.
+    (ALL (x::'A) y::'A. u x y = u y x) &
+    (ALL (x::'A) (y::'A) z::'A. u x (u y z) = u (u x y) z) &
+    (ALL x::'A. u (neutral u) x = x))"
+  by (import hollight DEF_monoidal)
+
+lemma MONOIDAL_AC: "monoidal (x::'q_60055 => 'q_60055 => 'q_60055)
+==> (ALL a::'q_60055. x (neutral x) a = a) &
+    (ALL a::'q_60055. x a (neutral x) = a) &
+    (ALL (a::'q_60055) b::'q_60055. x a b = x b a) &
+    (ALL (a::'q_60055) (b::'q_60055) c::'q_60055.
+        x (x a b) c = x a (x b c)) &
+    (ALL (a::'q_60055) (b::'q_60055) c::'q_60055. x a (x b c) = x b (x a c))"
+  by (import hollight MONOIDAL_AC)
+
+definition
+  support :: "('B => 'B => 'B) => ('A => 'B) => ('A => bool) => 'A => bool"  where
+  "support ==
+%(u::'B => 'B => 'B) (ua::'A => 'B) ub::'A => bool.
+   {uc::'A. EX x::'A. (x : ub & ua x ~= neutral u) & uc = x}"
+
+lemma DEF_support: "support =
+(%(u::'B => 'B => 'B) (ua::'A => 'B) ub::'A => bool.
+    {uc::'A. EX x::'A. (x : ub & ua x ~= neutral u) & uc = x})"
+  by (import hollight DEF_support)
+
+definition
+  iterate :: "('q_60113 => 'q_60113 => 'q_60113)
+=> ('A => bool) => ('A => 'q_60113) => 'q_60113"  where
+  "iterate ==
+%(u::'q_60113 => 'q_60113 => 'q_60113) (ua::'A => bool) ub::'A => 'q_60113.
+   if finite (support u ub ua)
+   then ITSET (%x::'A. u (ub x)) (support u ub ua) (neutral u)
+   else neutral u"
+
+lemma DEF_iterate: "iterate =
+(%(u::'q_60113 => 'q_60113 => 'q_60113) (ua::'A => bool) ub::'A => 'q_60113.
+    if finite (support u ub ua)
+    then ITSET (%x::'A. u (ub x)) (support u ub ua) (neutral u)
+    else neutral u)"
+  by (import hollight DEF_iterate)
+
+lemma IN_SUPPORT: "((xb::'q_60163)
+ : support (x::'q_60160 => 'q_60160 => 'q_60160) (xa::'q_60163 => 'q_60160)
+    (xc::'q_60163 => bool)) =
+(xb : xc & xa xb ~= neutral x)"
+  by (import hollight IN_SUPPORT)
+
+lemma SUPPORT_SUPPORT: "support (x::'q_60185 => 'q_60185 => 'q_60185) (xa::'q_60196 => 'q_60185)
+ (support x xa (xb::'q_60196 => bool)) =
+support x xa xb"
+  by (import hollight SUPPORT_SUPPORT)
+
+lemma SUPPORT_EMPTY: "(ALL xc::'q_60235.
+    xc : (xb::'q_60235 => bool) -->
+    (xa::'q_60235 => 'q_60221) xc =
+    neutral (x::'q_60221 => 'q_60221 => 'q_60221)) =
+(support x xa xb = {})"
+  by (import hollight SUPPORT_EMPTY)
+
+lemma SUPPORT_SUBSET: "support (x::'q_60255 => 'q_60255 => 'q_60255) (xa::'q_60256 => 'q_60255)
+ (xb::'q_60256 => bool)
+<= xb"
+  by (import hollight SUPPORT_SUBSET)
+
+lemma FINITE_SUPPORT: "finite (s::'q_60273 => bool)
+==> finite
+     (support (u::'q_60279 => 'q_60279 => 'q_60279)
+       (f::'q_60273 => 'q_60279) s)"
+  by (import hollight FINITE_SUPPORT)
+
+lemma SUPPORT_CLAUSES: "(ALL x::'q_60297 => 'q_60530.
+    support (u_4371::'q_60530 => 'q_60530 => 'q_60530) x {} = {}) &
+(ALL (x::'q_60345 => 'q_60530) (xa::'q_60345) xb::'q_60345 => bool.
+    support u_4371 x (insert xa xb) =
+    (if x xa = neutral u_4371 then support u_4371 x xb
+     else insert xa (support u_4371 x xb))) &
+(ALL (x::'q_60378 => 'q_60530) (xa::'q_60378) xb::'q_60378 => bool.
+    support u_4371 x (xb - {xa}) = support u_4371 x xb - {xa}) &
+(ALL (x::'q_60416 => 'q_60530) (xa::'q_60416 => bool) xb::'q_60416 => bool.
+    support u_4371 x (xa Un xb) =
+    support u_4371 x xa Un support u_4371 x xb) &
+(ALL (x::'q_60454 => 'q_60530) (xa::'q_60454 => bool) xb::'q_60454 => bool.
+    support u_4371 x (xa Int xb) =
+    support u_4371 x xa Int support u_4371 x xb) &
+(ALL (x::'q_60492 => 'q_60530) (xa::'q_60492 => bool) xb::'q_60492 => bool.
+    support u_4371 x (xa - xb) =
+    support u_4371 x xa - support u_4371 x xb) &
+(ALL (x::'q_60529 => 'q_60520) (xa::'q_60520 => 'q_60530)
+    xb::'q_60529 => bool.
+    support u_4371 xa (x ` xb) = x ` support u_4371 (xa o x) xb)"
+  by (import hollight SUPPORT_CLAUSES)
+
+lemma SUPPORT_DELTA: "support (x::'q_60556 => 'q_60556 => 'q_60556)
+ (%xa::'q_60584.
+     if xa = (xc::'q_60584) then (xb::'q_60584 => 'q_60556) xa
+     else neutral x)
+ (xa::'q_60584 => bool) =
+(if xc : xa then support x xb {xc} else {})"
+  by (import hollight SUPPORT_DELTA)
+
+lemma FINITE_SUPPORT_DELTA: "finite
+ (support (x::'q_60605 => 'q_60605 => 'q_60605)
+   (%xc::'q_60614.
+       if xc = (xb::'q_60614) then (xa::'q_60614 => 'q_60605) xc
+       else neutral x)
+   (s::'q_60614 => bool))"
+  by (import hollight FINITE_SUPPORT_DELTA)
+
+lemma ITERATE_SUPPORT: "iterate (x::'q_60630 => 'q_60630 => 'q_60630)
+ (support x (xa::'q_60642 => 'q_60630) (xb::'q_60642 => bool)) xa =
+iterate x xb xa"
+  by (import hollight ITERATE_SUPPORT)
+
+lemma ITERATE_EXPAND_CASES: "iterate (x::'q_60661 => 'q_60661 => 'q_60661) (xb::'q_60667 => bool)
+ (xa::'q_60667 => 'q_60661) =
+(if finite (support x xa xb) then iterate x (support x xa xb) xa
+ else neutral x)"
+  by (import hollight ITERATE_EXPAND_CASES)
+
+lemma ITERATE_CLAUSES_GEN: "monoidal (u_4371::'B => 'B => 'B)
+==> (ALL f::'A => 'B. iterate u_4371 {} f = neutral u_4371) &
+    (ALL (f::'A => 'B) (x::'A) s::'A => bool.
+        monoidal u_4371 & finite (support u_4371 f s) -->
+        iterate u_4371 (insert x s) f =
+        (if x : s then iterate u_4371 s f
+         else u_4371 (f x) (iterate u_4371 s f)))"
+  by (import hollight ITERATE_CLAUSES_GEN)
+
+lemma ITERATE_CLAUSES: "monoidal (x::'q_60857 => 'q_60857 => 'q_60857)
+==> (ALL f::'q_60815 => 'q_60857. iterate x {} f = neutral x) &
+    (ALL (f::'q_60859 => 'q_60857) (xa::'q_60859) s::'q_60859 => bool.
+        finite s -->
+        iterate x (insert xa s) f =
+        (if xa : s then iterate x s f else x (f xa) (iterate x s f)))"
+  by (import hollight ITERATE_CLAUSES)
+
+lemma ITERATE_UNION: "[| monoidal (u_4371::'q_60945 => 'q_60945 => 'q_60945);
+   finite (s::'q_60930 => bool) &
+   finite (x::'q_60930 => bool) & s Int x = {} |]
+==> iterate u_4371 (s Un x) (f::'q_60930 => 'q_60945) =
+    u_4371 (iterate u_4371 s f) (iterate u_4371 x f)"
+  by (import hollight ITERATE_UNION)
+
+lemma ITERATE_UNION_GEN: "[| monoidal (x::'B => 'B => 'B);
+   finite (support x (xa::'A => 'B) (xb::'A => bool)) &
+   finite (support x xa (xc::'A => bool)) &
+   support x xa xb Int support x xa xc = {} |]
+==> iterate x (xb Un xc) xa = x (iterate x xb xa) (iterate x xc xa)"
+  by (import hollight ITERATE_UNION_GEN)
+
+lemma ITERATE_DIFF: "[| monoidal (u::'q_61087 => 'q_61087 => 'q_61087);
+   finite (s::'q_61083 => bool) & (t::'q_61083 => bool) <= s |]
+==> u (iterate u (s - t) (f::'q_61083 => 'q_61087)) (iterate u t f) =
+    iterate u s f"
+  by (import hollight ITERATE_DIFF)
+
+lemma ITERATE_DIFF_GEN: "[| monoidal (x::'B => 'B => 'B);
+   finite (support x (xa::'A => 'B) (xb::'A => bool)) &
+   support x xa (xc::'A => bool) <= support x xa xb |]
+==> x (iterate x (xb - xc) xa) (iterate x xc xa) = iterate x xb xa"
+  by (import hollight ITERATE_DIFF_GEN)
+
+lemma ITERATE_INCL_EXCL: "[| monoidal (u_4371::'q_61316 => 'q_61316 => 'q_61316);
+   finite (s::'q_61298 => bool) & finite (t::'q_61298 => bool) |]
+==> u_4371 (iterate u_4371 s (f::'q_61298 => 'q_61316))
+     (iterate u_4371 t f) =
+    u_4371 (iterate u_4371 (s Un t) f) (iterate u_4371 (s Int t) f)"
+  by (import hollight ITERATE_INCL_EXCL)
+
+lemma ITERATE_CLOSED: "[| monoidal (u_4371::'B => 'B => 'B);
+   (P::'B => bool) (neutral u_4371) &
+   (ALL (x::'B) y::'B. P x & P y --> P (u_4371 x y));
+   !!x::'A.
+      x : (s::'A => bool) & (f::'A => 'B) x ~= neutral u_4371 ==> P (f x) |]
+==> P (iterate u_4371 s f)"
+  by (import hollight ITERATE_CLOSED)
+
+lemma ITERATE_RELATED: "[| monoidal (u_4371::'B => 'B => 'B);
+   (R::'B => 'B => bool) (neutral u_4371) (neutral u_4371) &
+   (ALL (x1::'B) (y1::'B) (x2::'B) y2::'B.
+       R x1 x2 & R y1 y2 --> R (u_4371 x1 y1) (u_4371 x2 y2));
+   finite (x::'A => bool) &
+   (ALL xa::'A. xa : x --> R ((f::'A => 'B) xa) ((g::'A => 'B) xa)) |]
+==> R (iterate u_4371 x f) (iterate u_4371 x g)"
+  by (import hollight ITERATE_RELATED)
+
+lemma ITERATE_EQ_NEUTRAL: "[| monoidal (u_4371::'B => 'B => 'B);
+   !!x::'A. x : (s::'A => bool) ==> (f::'A => 'B) x = neutral u_4371 |]
+==> iterate u_4371 s f = neutral u_4371"
+  by (import hollight ITERATE_EQ_NEUTRAL)
+
+lemma ITERATE_SING: "monoidal (x::'B => 'B => 'B) ==> iterate x {xa::'A} (f::'A => 'B) = f xa"
+  by (import hollight ITERATE_SING)
+
+lemma ITERATE_DELETE: "[| monoidal (u::'B => 'B => 'B); finite (s::'A => bool) & (a::'A) : s |]
+==> u ((f::'A => 'B) a) (iterate u (s - {a}) f) = iterate u s f"
+  by (import hollight ITERATE_DELETE)
+
+lemma ITERATE_DELTA: "monoidal (u_4371::'q_61672 => 'q_61672 => 'q_61672)
+==> iterate u_4371 (xb::'q_61691 => bool)
+     (%xb::'q_61691.
+         if xb = (xa::'q_61691) then (x::'q_61691 => 'q_61672) xb
+         else neutral u_4371) =
+    (if xa : xb then x xa else neutral u_4371)"
+  by (import hollight ITERATE_DELTA)
+
+lemma ITERATE_IMAGE: "[| monoidal (u_4371::'C => 'C => 'C);
+   !!(x::'A) y::'A.
+      x : (s::'A => bool) & y : s & (f::'A => 'B) x = f y ==> x = y |]
+==> iterate u_4371 (f ` s) (g::'B => 'C) = iterate u_4371 s (g o f)"
+  by (import hollight ITERATE_IMAGE)
+
+lemma ITERATE_BIJECTION: "[| monoidal (u_4371::'B => 'B => 'B);
+   (ALL x::'A. x : (s::'A => bool) --> (p::'A => 'A) x : s) &
+   (ALL y::'A. y : s --> (EX! x::'A. x : s & p x = y)) |]
+==> iterate u_4371 s (f::'A => 'B) = iterate u_4371 s (f o p)"
+  by (import hollight ITERATE_BIJECTION)
+
+lemma ITERATE_ITERATE_PRODUCT: "[| monoidal (u_4371::'C => 'C => 'C);
+   finite (x::'A => bool) &
+   (ALL i::'A. i : x --> finite ((xa::'A => 'B => bool) i)) |]
+==> iterate u_4371 x
+     (%i::'A. iterate u_4371 (xa i) ((xb::'A => 'B => 'C) i)) =
+    iterate u_4371
+     {u::'A * 'B. EX (i::'A) j::'B. (i : x & j : xa i) & u = (i, j)}
+     (SOME f::'A * 'B => 'C. ALL (i::'A) j::'B. f (i, j) = xb i j)"
+  by (import hollight ITERATE_ITERATE_PRODUCT)
+
+lemma ITERATE_EQ: "[| monoidal (u_4371::'B => 'B => 'B);
+   !!x::'A. x : (s::'A => bool) ==> (f::'A => 'B) x = (g::'A => 'B) x |]
+==> iterate u_4371 s f = iterate u_4371 s g"
+  by (import hollight ITERATE_EQ)
+
+lemma ITERATE_EQ_GENERAL: "[| monoidal (u_4371::'C => 'C => 'C);
+   (ALL y::'B.
+       y : (t::'B => bool) -->
+       (EX! x::'A. x : (s::'A => bool) & (h::'A => 'B) x = y)) &
+   (ALL x::'A. x : s --> h x : t & (g::'B => 'C) (h x) = (f::'A => 'C) x) |]
+==> iterate u_4371 s f = iterate u_4371 t g"
+  by (import hollight ITERATE_EQ_GENERAL)
+
+lemma ITERATE_EQ_GENERAL_INVERSES: "[| monoidal (u_4371::'C => 'C => 'C);
+   (ALL y::'B.
+       y : (t::'B => bool) -->
+       (k::'B => 'A) y : (s::'A => bool) & (h::'A => 'B) (k y) = y) &
+   (ALL x::'A.
+       x : s -->
+       h x : t & k (h x) = x & (g::'B => 'C) (h x) = (f::'A => 'C) x) |]
+==> iterate u_4371 s f = iterate u_4371 t g"
+  by (import hollight ITERATE_EQ_GENERAL_INVERSES)
+
+lemma ITERATE_INJECTION: "[| monoidal (u_4371::'B => 'B => 'B);
+   finite (s::'A => bool) &
+   (ALL x::'A. x : s --> (p::'A => 'A) x : s) &
+   (ALL (x::'A) y::'A. x : s & y : s & p x = p y --> x = y) |]
+==> iterate u_4371 s ((f::'A => 'B) o p) = iterate u_4371 s f"
+  by (import hollight ITERATE_INJECTION)
+
+lemma ITERATE_UNION_NONZERO: "[| monoidal (u_4371::'B => 'B => 'B);
+   finite (s::'A => bool) &
+   finite (t::'A => bool) &
+   (ALL x::'A. x : s Int t --> (f::'A => 'B) x = neutral u_4371) |]
+==> iterate u_4371 (s Un t) f =
+    u_4371 (iterate u_4371 s f) (iterate u_4371 t f)"
+  by (import hollight ITERATE_UNION_NONZERO)
+
+lemma ITERATE_OP: "[| monoidal (u_4371::'q_62649 => 'q_62649 => 'q_62649);
+   finite (s::'q_62648 => bool) |]
+==> iterate u_4371 s
+     (%x::'q_62648.
+         u_4371 ((f::'q_62648 => 'q_62649) x)
+          ((g::'q_62648 => 'q_62649) x)) =
+    u_4371 (iterate u_4371 s f) (iterate u_4371 s g)"
+  by (import hollight ITERATE_OP)
+
+lemma ITERATE_SUPERSET: "[| monoidal (u_4371::'B => 'B => 'B);
+   (u::'A => bool) <= (v::'A => bool) &
+   (ALL x::'A. x : v & x ~: u --> (f::'A => 'B) x = neutral u_4371) |]
+==> iterate u_4371 v f = iterate u_4371 u f"
+  by (import hollight ITERATE_SUPERSET)
+
+lemma ITERATE_IMAGE_NONZERO: "[| monoidal (u_4371::'C => 'C => 'C);
+   finite (x::'A => bool) &
+   (ALL (xa::'A) y::'A.
+       xa : x & y : x & xa ~= y & (f::'A => 'B) xa = f y -->
+       (g::'B => 'C) (f xa) = neutral u_4371) |]
+==> iterate u_4371 (f ` x) g = iterate u_4371 x (g o f)"
+  by (import hollight ITERATE_IMAGE_NONZERO)
+
+lemma ITERATE_CASES: "[| monoidal (u_4371::'B => 'B => 'B); finite (s::'A => bool) |]
+==> iterate u_4371 s
+     (%x::'A.
+         if (P::'A => bool) x then (f::'A => 'B) x else (g::'A => 'B) x) =
+    u_4371 (iterate u_4371 {u::'A. EX x::'A. (x : s & P x) & u = x} f)
+     (iterate u_4371 {u::'A. EX x::'A. (x : s & ~ P x) & u = x} g)"
+  by (import hollight ITERATE_CASES)
+
+lemma ITERATE_OP_GEN: "[| monoidal (u_4371::'B => 'B => 'B);
+   finite (support u_4371 (f::'A => 'B) (s::'A => bool)) &
+   finite (support u_4371 (g::'A => 'B) s) |]
+==> iterate u_4371 s (%x::'A. u_4371 (f x) (g x)) =
+    u_4371 (iterate u_4371 s f) (iterate u_4371 s g)"
+  by (import hollight ITERATE_OP_GEN)
+
+lemma ITERATE_CLAUSES_NUMSEG: "monoidal (x::'q_63246 => 'q_63246 => 'q_63246)
+==> (ALL xa::nat.
+        iterate x {xa..0::nat} (f::nat => 'q_63246) =
+        (if xa = (0::nat) then f (0::nat) else neutral x)) &
+    (ALL (xa::nat) xb::nat.
+        iterate x {xa..Suc xb} f =
+        (if xa <= Suc xb then x (iterate x {xa..xb} f) (f (Suc xb))
+         else iterate x {xa..xb} f))"
+  by (import hollight ITERATE_CLAUSES_NUMSEG)
+
+lemma ITERATE_PAIR: "monoidal (u_4371::'q_63421 => 'q_63421 => 'q_63421)
+==> iterate u_4371 {(2::nat) * (m::nat)..(2::nat) * (n::nat) + (1::nat)}
+     (f::nat => 'q_63421) =
+    iterate u_4371 {m..n}
+     (%i::nat. u_4371 (f ((2::nat) * i)) (f ((2::nat) * i + (1::nat))))"
+  by (import hollight ITERATE_PAIR)
+
+definition
+  nsum :: "('q_63439 => bool) => ('q_63439 => nat) => nat"  where
+  "(op ==::(('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+        => (('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+           => prop)
+ (nsum::('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+ ((iterate::(nat => nat => nat)
+            => ('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+   (op +::nat => nat => nat))"
+
+lemma DEF_nsum: "(op =::(('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+       => (('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+          => bool)
+ (nsum::('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+ ((iterate::(nat => nat => nat)
+            => ('q_63439::type => bool) => ('q_63439::type => nat) => nat)
+   (op +::nat => nat => nat))"
+  by (import hollight DEF_nsum)
+
+lemma NEUTRAL_ADD: "neutral op + = (0::nat)"
+  by (import hollight NEUTRAL_ADD)
+
+lemma NEUTRAL_MUL: "neutral op * = (1::nat)"
+  by (import hollight NEUTRAL_MUL)
+
+lemma MONOIDAL_ADD: "(monoidal::(nat => nat => nat) => bool) (op +::nat => nat => nat)"
+  by (import hollight MONOIDAL_ADD)
+
+lemma MONOIDAL_MUL: "(monoidal::(nat => nat => nat) => bool) (op *::nat => nat => nat)"
+  by (import hollight MONOIDAL_MUL)
+
+lemma NSUM_CLAUSES: "(ALL x::'q_63477 => nat. nsum {} x = (0::nat)) &
+(ALL (x::'q_63516) (xa::'q_63516 => nat) xb::'q_63516 => bool.
+    finite xb -->
+    nsum (insert x xb) xa =
+    (if x : xb then nsum xb xa else xa x + nsum xb xa))"
+  by (import hollight NSUM_CLAUSES)
+
+lemma NSUM_UNION: "finite (xa::'q_63542 => bool) &
+finite (xb::'q_63542 => bool) & xa Int xb = {}
+==> nsum (xa Un xb) (x::'q_63542 => nat) = nsum xa x + nsum xb x"
+  by (import hollight NSUM_UNION)
+
+lemma NSUM_DIFF: "finite (s::'q_63597 => bool) & (t::'q_63597 => bool) <= s
+==> nsum (s - t) (f::'q_63597 => nat) = nsum s f - nsum t f"
+  by (import hollight NSUM_DIFF)
+
+lemma NSUM_INCL_EXCL: "finite (x::'A => bool) & finite (xa::'A => bool)
+==> nsum x (xb::'A => nat) + nsum xa xb =
+    nsum (x Un xa) xb + nsum (x Int xa) xb"
+  by (import hollight NSUM_INCL_EXCL)
+
+lemma NSUM_SUPPORT: "nsum (support op + (x::'q_63686 => nat) (xa::'q_63686 => bool)) x =
+nsum xa x"
+  by (import hollight NSUM_SUPPORT)
+
+lemma NSUM_ADD: "finite (xb::'q_63720 => bool)
+==> nsum xb
+     (%xb::'q_63720. (x::'q_63720 => nat) xb + (xa::'q_63720 => nat) xb) =
+    nsum xb x + nsum xb xa"
+  by (import hollight NSUM_ADD)
+
+lemma NSUM_ADD_GEN: "finite
+ {xa::'q_63807.
+  EX xc::'q_63807.
+     (xc : (xb::'q_63807 => bool) & (x::'q_63807 => nat) xc ~= (0::nat)) &
+     xa = xc} &
+finite
+ {x::'q_63807.
+  EX xc::'q_63807.
+     (xc : xb & (xa::'q_63807 => nat) xc ~= (0::nat)) & x = xc}
+==> nsum xb (%xb::'q_63807. x xb + xa xb) = nsum xb x + nsum xb xa"
+  by (import hollight NSUM_ADD_GEN)
+
+lemma NSUM_EQ_0: "(!!xb::'A. xb : (xa::'A => bool) ==> (x::'A => nat) xb = (0::nat))
+==> nsum xa x = (0::nat)"
+  by (import hollight NSUM_EQ_0)
+
+lemma NSUM_0: "nsum (x::'A => bool) (%n::'A. 0::nat) = (0::nat)"
+  by (import hollight NSUM_0)
+
+lemma NSUM_LMUL: "nsum (s::'A => bool) (%x::'A. (c::nat) * (f::'A => nat) x) = c * nsum s f"
+  by (import hollight NSUM_LMUL)
+
+lemma NSUM_RMUL: "nsum (xb::'A => bool) (%xb::'A. (x::'A => nat) xb * (xa::nat)) =
+nsum xb x * xa"
+  by (import hollight NSUM_RMUL)
+
+lemma NSUM_LE: "finite (xb::'q_63997 => bool) &
+(ALL xc::'q_63997.
+    xc : xb --> (x::'q_63997 => nat) xc <= (xa::'q_63997 => nat) xc)
+==> nsum xb x <= nsum xb xa"
+  by (import hollight NSUM_LE)
+
+lemma NSUM_LT: "finite (s::'A => bool) &
+(ALL x::'A. x : s --> (f::'A => nat) x <= (g::'A => nat) x) &
+(EX x::'A. x : s & f x < g x)
+==> nsum s f < nsum s g"
+  by (import hollight NSUM_LT)
+
+lemma NSUM_LT_ALL: "finite (s::'q_64119 => bool) &
+s ~= {} &
+(ALL x::'q_64119. x : s --> (f::'q_64119 => nat) x < (g::'q_64119 => nat) x)
+==> nsum s f < nsum s g"
+  by (import hollight NSUM_LT_ALL)
+
+lemma NSUM_EQ: "(!!xc::'q_64157.
+    xc : (xb::'q_64157 => bool)
+    ==> (x::'q_64157 => nat) xc = (xa::'q_64157 => nat) xc)
+==> nsum xb x = nsum xb xa"
+  by (import hollight NSUM_EQ)
+
+lemma NSUM_CONST: "finite (s::'q_64187 => bool) ==> nsum s (%n::'q_64187. c::nat) = CARD s * c"
+  by (import hollight NSUM_CONST)
+
+lemma NSUM_POS_BOUND: "[| finite (x::'A => bool) & nsum x (f::'A => nat) <= (b::nat);
+   (xa::'A) : x |]
+==> f xa <= b"
+  by (import hollight NSUM_POS_BOUND)
+
+lemma NSUM_EQ_0_IFF: "finite (s::'q_64296 => bool)
+==> (nsum s (f::'q_64296 => nat) = (0::nat)) =
+    (ALL x::'q_64296. x : s --> f x = (0::nat))"
+  by (import hollight NSUM_EQ_0_IFF)
+
+lemma NSUM_DELETE: "finite (xa::'q_64325 => bool) & (xb::'q_64325) : xa
+==> (x::'q_64325 => nat) xb + nsum (xa - {xb}) x = nsum xa x"
+  by (import hollight NSUM_DELETE)
+
+lemma NSUM_SING: "nsum {xa::'q_64354} (x::'q_64354 => nat) = x xa"
+  by (import hollight NSUM_SING)
+
+lemma NSUM_DELTA: "nsum (x::'A => bool) (%x::'A. if x = (xa::'A) then b::nat else (0::nat)) =
+(if xa : x then b else (0::nat))"
+  by (import hollight NSUM_DELTA)
+
+lemma NSUM_SWAP: "finite (x::'A => bool) & finite (xa::'B => bool)
+==> nsum x (%i::'A. nsum xa ((f::'A => 'B => nat) i)) =
+    nsum xa (%j::'B. nsum x (%i::'A. f i j))"
+  by (import hollight NSUM_SWAP)
+
+lemma NSUM_IMAGE: "(!!(xa::'q_64490) y::'q_64490.
+    xa : (xb::'q_64490 => bool) &
+    y : xb & (x::'q_64490 => 'q_64466) xa = x y
+    ==> xa = y)
+==> nsum (x ` xb) (xa::'q_64466 => nat) = nsum xb (xa o x)"
+  by (import hollight NSUM_IMAGE)
+
+lemma NSUM_SUPERSET: "(xa::'A => bool) <= (xb::'A => bool) &
+(ALL xc::'A. xc : xb & xc ~: xa --> (x::'A => nat) xc = (0::nat))
+==> nsum xb x = nsum xa x"
+  by (import hollight NSUM_SUPERSET)
+
+lemma NSUM_UNION_RZERO: "finite (u::'A => bool) &
+(ALL x::'A. x : (v::'A => bool) & x ~: u --> (f::'A => nat) x = (0::nat))
+==> nsum (u Un v) f = nsum u f"
+  by (import hollight NSUM_UNION_RZERO)
+
+lemma NSUM_UNION_LZERO: "finite (v::'A => bool) &
+(ALL x::'A. x : (u::'A => bool) & x ~: v --> (f::'A => nat) x = (0::nat))
+==> nsum (u Un v) f = nsum v f"
+  by (import hollight NSUM_UNION_LZERO)
+
+lemma NSUM_RESTRICT: "finite (s::'q_64681 => bool)
+==> nsum s
+     (%x::'q_64681. if x : s then (f::'q_64681 => nat) x else (0::nat)) =
+    nsum s f"
+  by (import hollight NSUM_RESTRICT)
+
+lemma NSUM_BOUND: "finite (x::'A => bool) &
+(ALL xc::'A. xc : x --> (xa::'A => nat) xc <= (xb::nat))
+==> nsum x xa <= CARD x * xb"
+  by (import hollight NSUM_BOUND)
+
+lemma NSUM_BOUND_GEN: "finite (x::'A => bool) &
+x ~= {} & (ALL xa::'A. xa : x --> (f::'A => nat) xa <= (b::nat) div CARD x)
+==> nsum x f <= b"
+  by (import hollight NSUM_BOUND_GEN)
+
+lemma NSUM_BOUND_LT: "finite (s::'A => bool) &
+(ALL x::'A. x : s --> (f::'A => nat) x <= (b::nat)) &
+(EX x::'A. x : s & f x < b)
+==> nsum s f < CARD s * b"
+  by (import hollight NSUM_BOUND_LT)
+
+lemma NSUM_BOUND_LT_ALL: "finite (s::'q_64899 => bool) &
+s ~= {} & (ALL x::'q_64899. x : s --> (f::'q_64899 => nat) x < (b::nat))
+==> nsum s f < CARD s * b"
+  by (import hollight NSUM_BOUND_LT_ALL)
+
+lemma NSUM_BOUND_LT_GEN: "finite (s::'A => bool) &
+s ~= {} & (ALL x::'A. x : s --> (f::'A => nat) x < (b::nat) div CARD s)
+==> nsum s f < b"
+  by (import hollight NSUM_BOUND_LT_GEN)
+
+lemma NSUM_UNION_EQ: "finite (u::'q_65000 => bool) &
+(s::'q_65000 => bool) Int (t::'q_65000 => bool) = {} & s Un t = u
+==> nsum s (f::'q_65000 => nat) + nsum t f = nsum u f"
+  by (import hollight NSUM_UNION_EQ)
+
+lemma NSUM_EQ_SUPERSET: "finite (t::'A => bool) &
+t <= (s::'A => bool) &
+(ALL x::'A. x : t --> (f::'A => nat) x = (g::'A => nat) x) &
+(ALL x::'A. x : s & x ~: t --> f x = (0::nat))
+==> nsum s f = nsum t g"
+  by (import hollight NSUM_EQ_SUPERSET)
+
+lemma NSUM_RESTRICT_SET: "nsum
+ {u::'A. EX xb::'A. (xb : (xa::'A => bool) & (x::'A => bool) xb) & u = xb}
+ (xb::'A => nat) =
+nsum xa (%xa::'A. if x xa then xb xa else (0::nat))"
+  by (import hollight NSUM_RESTRICT_SET)
+
+lemma NSUM_NSUM_RESTRICT: "finite (s::'q_65257 => bool) & finite (t::'q_65256 => bool)
+==> nsum s
+     (%x::'q_65257.
+         nsum
+          {u::'q_65256.
+           EX y::'q_65256.
+              (y : t & (R::'q_65257 => 'q_65256 => bool) x y) & u = y}
+          ((f::'q_65257 => 'q_65256 => nat) x)) =
+    nsum t
+     (%y::'q_65256.
+         nsum {u::'q_65257. EX x::'q_65257. (x : s & R x y) & u = x}
+          (%x::'q_65257. f x y))"
+  by (import hollight NSUM_NSUM_RESTRICT)
+
+lemma CARD_EQ_NSUM: "finite (x::'q_65276 => bool) ==> CARD x = nsum x (%x::'q_65276. 1::nat)"
+  by (import hollight CARD_EQ_NSUM)
+
+lemma NSUM_MULTICOUNT_GEN: "finite (s::'A => bool) &
+finite (t::'B => bool) &
+(ALL j::'B.
+    j : t -->
+    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
+    (k::'B => nat) j)
+==> nsum s (%i::'A. CARD {u::'B. EX j::'B. (j : t & R i j) & u = j}) =
+    nsum t k"
+  by (import hollight NSUM_MULTICOUNT_GEN)
+
+lemma NSUM_MULTICOUNT: "finite (s::'A => bool) &
+finite (t::'B => bool) &
+(ALL j::'B.
+    j : t -->
+    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
+    (k::nat))
+==> nsum s (%i::'A. CARD {u::'B. EX j::'B. (j : t & R i j) & u = j}) =
+    k * CARD t"
+  by (import hollight NSUM_MULTICOUNT)
+
+lemma NSUM_IMAGE_GEN: "finite (s::'A => bool)
+==> nsum s (g::'A => nat) =
+    nsum ((f::'A => 'B) ` s)
+     (%y::'B. nsum {u::'A. EX x::'A. (x : s & f x = y) & u = x} g)"
+  by (import hollight NSUM_IMAGE_GEN)
+
+lemma NSUM_GROUP: "finite (s::'A => bool) & (f::'A => 'B) ` s <= (t::'B => bool)
+==> nsum t
+     (%y::'B.
+         nsum {u::'A. EX x::'A. (x : s & f x = y) & u = x} (g::'A => nat)) =
+    nsum s g"
+  by (import hollight NSUM_GROUP)
+
+lemma NSUM_SUBSET: "finite (u::'A => bool) &
+finite (v::'A => bool) &
+(ALL x::'A. x : u - v --> (f::'A => nat) x = (0::nat))
+==> nsum u f <= nsum v f"
+  by (import hollight NSUM_SUBSET)
+
+lemma NSUM_SUBSET_SIMPLE: "finite (v::'q_65804 => bool) & (u::'q_65804 => bool) <= v
+==> nsum u (f::'q_65804 => nat) <= nsum v f"
+  by (import hollight NSUM_SUBSET_SIMPLE)
+
+lemma NSUM_IMAGE_NONZERO: "finite (xb::'A => bool) &
+(ALL (xc::'A) xd::'A.
+    xc : xb & xd : xb & xc ~= xd & (xa::'A => 'B) xc = xa xd -->
+    (x::'B => nat) (xa xc) = (0::nat))
+==> nsum (xa ` xb) x = nsum xb (x o xa)"
+  by (import hollight NSUM_IMAGE_NONZERO)
+
+lemma NSUM_BIJECTION: "(ALL x::'A. x : (xb::'A => bool) --> (xa::'A => 'A) x : xb) &
+(ALL y::'A. y : xb --> (EX! x::'A. x : xb & xa x = y))
+==> nsum xb (x::'A => nat) = nsum xb (x o xa)"
+  by (import hollight NSUM_BIJECTION)
+
+lemma NSUM_NSUM_PRODUCT: "finite (x::'A => bool) &
+(ALL i::'A. i : x --> finite ((xa::'A => 'B => bool) i))
+==> nsum x (%x::'A. nsum (xa x) ((xb::'A => 'B => nat) x)) =
+    nsum {u::'A * 'B. EX (i::'A) j::'B. (i : x & j : xa i) & u = (i, j)}
+     (SOME f::'A * 'B => nat. ALL (i::'A) j::'B. f (i, j) = xb i j)"
+  by (import hollight NSUM_NSUM_PRODUCT)
+
+lemma NSUM_EQ_GENERAL: "(ALL y::'B.
+    y : (xa::'B => bool) -->
+    (EX! xa::'A. xa : (x::'A => bool) & (xd::'A => 'B) xa = y)) &
+(ALL xe::'A.
+    xe : x --> xd xe : xa & (xc::'B => nat) (xd xe) = (xb::'A => nat) xe)
+==> nsum x xb = nsum xa xc"
+  by (import hollight NSUM_EQ_GENERAL)
+
+lemma NSUM_EQ_GENERAL_INVERSES: "(ALL y::'B.
+    y : (xa::'B => bool) -->
+    (xe::'B => 'A) y : (x::'A => bool) & (xd::'A => 'B) (xe y) = y) &
+(ALL xf::'A.
+    xf : x -->
+    xd xf : xa &
+    xe (xd xf) = xf & (xc::'B => nat) (xd xf) = (xb::'A => nat) xf)
+==> nsum x xb = nsum xa xc"
+  by (import hollight NSUM_EQ_GENERAL_INVERSES)
+
+lemma NSUM_INJECTION: "finite (xb::'q_66274 => bool) &
+(ALL x::'q_66274. x : xb --> (xa::'q_66274 => 'q_66274) x : xb) &
+(ALL (x::'q_66274) y::'q_66274. x : xb & y : xb & xa x = xa y --> x = y)
+==> nsum xb ((x::'q_66274 => nat) o xa) = nsum xb x"
+  by (import hollight NSUM_INJECTION)
+
+lemma NSUM_UNION_NONZERO: "finite (xa::'q_66317 => bool) &
+finite (xb::'q_66317 => bool) &
+(ALL xc::'q_66317. xc : xa Int xb --> (x::'q_66317 => nat) xc = (0::nat))
+==> nsum (xa Un xb) x = nsum xa x + nsum xb x"
+  by (import hollight NSUM_UNION_NONZERO)
+
+lemma NSUM_UNIONS_NONZERO: "finite (x::('A => bool) => bool) &
+(ALL t::'A => bool. t : x --> finite t) &
+(ALL (t1::'A => bool) (t2::'A => bool) xa::'A.
+    t1 : x & t2 : x & t1 ~= t2 & xa : t1 & xa : t2 -->
+    (f::'A => nat) xa = (0::nat))
+==> nsum (Union x) f = nsum x (%t::'A => bool. nsum t f)"
+  by (import hollight NSUM_UNIONS_NONZERO)
+
+lemma NSUM_CASES: "finite (x::'A => bool)
+==> nsum x
+     (%x::'A.
+         if (xa::'A => bool) x then (xb::'A => nat) x
+         else (xc::'A => nat) x) =
+    nsum {u::'A. EX xb::'A. (xb : x & xa xb) & u = xb} xb +
+    nsum {u::'A. EX xb::'A. (xb : x & ~ xa xb) & u = xb} xc"
+  by (import hollight NSUM_CASES)
+
+lemma NSUM_CLOSED: "(P::nat => bool) (0::nat) &
+(ALL (x::nat) y::nat. P x & P y --> P (x + y)) &
+(ALL a::'A. a : (s::'A => bool) --> P ((f::'A => nat) a))
+==> P (nsum s f)"
+  by (import hollight NSUM_CLOSED)
+
+lemma NSUM_ADD_NUMSEG: "nsum {xb::nat..xc::nat} (%i::nat. (x::nat => nat) i + (xa::nat => nat) i) =
+nsum {xb..xc} x + nsum {xb..xc} xa"
+  by (import hollight NSUM_ADD_NUMSEG)
+
+lemma NSUM_LE_NUMSEG: "(!!i::nat.
+    (xb::nat) <= i & i <= (xc::nat)
+    ==> (x::nat => nat) i <= (xa::nat => nat) i)
+==> nsum {xb..xc} x <= nsum {xb..xc} xa"
+  by (import hollight NSUM_LE_NUMSEG)
+
+lemma NSUM_EQ_NUMSEG: "(!!i::nat.
+    (m::nat) <= i & i <= (n::nat) ==> (f::nat => nat) i = (g::nat => nat) i)
+==> nsum {m..n} f = nsum {m..n} g"
+  by (import hollight NSUM_EQ_NUMSEG)
+
+lemma NSUM_CONST_NUMSEG: "nsum {xa..xb} (%n. x) = (xb + 1 - xa) * x"
+  by (import hollight NSUM_CONST_NUMSEG)
+
+lemma NSUM_EQ_0_NUMSEG: "(!!i::nat. (m::nat) <= i & i <= (n::nat) ==> (x::nat => nat) i = (0::nat))
+==> nsum {m..n} x = (0::nat)"
+  by (import hollight NSUM_EQ_0_NUMSEG)
+
+lemma NSUM_EQ_0_IFF_NUMSEG: "(nsum {xa::nat..xb::nat} (x::nat => nat) = (0::nat)) =
+(ALL i::nat. xa <= i & i <= xb --> x i = (0::nat))"
+  by (import hollight NSUM_EQ_0_IFF_NUMSEG)
+
+lemma NSUM_TRIV_NUMSEG: "(n::nat) < (m::nat) ==> nsum {m..n} (f::nat => nat) = (0::nat)"
+  by (import hollight NSUM_TRIV_NUMSEG)
+
+lemma NSUM_SING_NUMSEG: "nsum {xa::nat..xa} (x::nat => nat) = x xa"
+  by (import hollight NSUM_SING_NUMSEG)
+
+lemma NSUM_CLAUSES_NUMSEG: "(ALL m. nsum {m..0} f = (if m = 0 then f 0 else 0)) &
+(ALL m n.
+    nsum {m..Suc n} f =
+    (if m <= Suc n then nsum {m..n} f + f (Suc n) else nsum {m..n} f))"
+  by (import hollight NSUM_CLAUSES_NUMSEG)
+
+lemma NSUM_SWAP_NUMSEG: "nsum {a::nat..b::nat}
+ (%i::nat. nsum {c::nat..d::nat} ((f::nat => nat => nat) i)) =
+nsum {c..d} (%j::nat. nsum {a..b} (%i::nat. f i j))"
+  by (import hollight NSUM_SWAP_NUMSEG)
+
+lemma NSUM_ADD_SPLIT: "(xa::nat) <= (xb::nat) + (1::nat)
+==> nsum {xa..xb + (xc::nat)} (x::nat => nat) =
+    nsum {xa..xb} x + nsum {xb + (1::nat)..xb + xc} x"
+  by (import hollight NSUM_ADD_SPLIT)
+
+lemma NSUM_OFFSET: "nsum {(xb::nat) + (x::nat)..(xc::nat) + x} (xa::nat => nat) =
+nsum {xb..xc} (%i::nat. xa (i + x))"
+  by (import hollight NSUM_OFFSET)
+
+lemma NSUM_OFFSET_0: "(xa::nat) <= (xb::nat)
+==> nsum {xa..xb} (x::nat => nat) =
+    nsum {0::nat..xb - xa} (%i::nat. x (i + xa))"
+  by (import hollight NSUM_OFFSET_0)
+
+lemma NSUM_CLAUSES_LEFT: "(xa::nat) <= (xb::nat)
+==> nsum {xa..xb} (x::nat => nat) = x xa + nsum {xa + (1::nat)..xb} x"
+  by (import hollight NSUM_CLAUSES_LEFT)
+
+lemma NSUM_CLAUSES_RIGHT: "(0::nat) < (n::nat) & (m::nat) <= n
+==> nsum {m..n} (f::nat => nat) = nsum {m..n - (1::nat)} f + f n"
+  by (import hollight NSUM_CLAUSES_RIGHT)
+
+lemma NSUM_PAIR: "nsum {(2::nat) * (m::nat)..(2::nat) * (n::nat) + (1::nat)} (f::nat => nat) =
+nsum {m..n} (%i::nat. f ((2::nat) * i) + f ((2::nat) * i + (1::nat)))"
+  by (import hollight NSUM_PAIR)
+
+lemma CARD_UNIONS: "finite (x::('A => bool) => bool) &
+(ALL t::'A => bool. t : x --> finite t) &
+(ALL (t::'A => bool) u::'A => bool. t : x & u : x & t ~= u --> t Int u = {})
+==> CARD (Union x) = nsum x CARD"
+  by (import hollight CARD_UNIONS)
+
+consts
+  sum :: "('q_67488 => bool) => ('q_67488 => hollight.real) => hollight.real" 
+
+defs
+  sum_def: "(op ==::(('q_67488::type => bool)
+         => ('q_67488::type => hollight.real) => hollight.real)
+        => (('q_67488::type => bool)
+            => ('q_67488::type => hollight.real) => hollight.real)
+           => prop)
+ (hollight.sum::('q_67488::type => bool)
+                => ('q_67488::type => hollight.real) => hollight.real)
+ ((iterate::(hollight.real => hollight.real => hollight.real)
+            => ('q_67488::type => bool)
+               => ('q_67488::type => hollight.real) => hollight.real)
+   (real_add::hollight.real => hollight.real => hollight.real))"
+
+lemma DEF_sum: "(op =::(('q_67488::type => bool)
+        => ('q_67488::type => hollight.real) => hollight.real)
+       => (('q_67488::type => bool)
+           => ('q_67488::type => hollight.real) => hollight.real)
+          => bool)
+ (hollight.sum::('q_67488::type => bool)
+                => ('q_67488::type => hollight.real) => hollight.real)
+ ((iterate::(hollight.real => hollight.real => hollight.real)
+            => ('q_67488::type => bool)
+               => ('q_67488::type => hollight.real) => hollight.real)
+   (real_add::hollight.real => hollight.real => hollight.real))"
+  by (import hollight DEF_sum)
+
+lemma NEUTRAL_REAL_ADD: "neutral real_add = real_of_num 0"
+  by (import hollight NEUTRAL_REAL_ADD)
+
+lemma NEUTRAL_REAL_MUL: "neutral real_mul = real_of_num 1"
+  by (import hollight NEUTRAL_REAL_MUL)
+
+lemma MONOIDAL_REAL_ADD: "monoidal real_add"
+  by (import hollight MONOIDAL_REAL_ADD)
+
+lemma MONOIDAL_REAL_MUL: "monoidal real_mul"
+  by (import hollight MONOIDAL_REAL_MUL)
+
+lemma SUM_CLAUSES: "(ALL x::'q_67530 => hollight.real.
+    hollight.sum {} x = real_of_num (0::nat)) &
+(ALL (x::'q_67571) (xa::'q_67571 => hollight.real) xb::'q_67571 => bool.
+    finite xb -->
+    hollight.sum (insert x xb) xa =
+    (if x : xb then hollight.sum xb xa
+     else real_add (xa x) (hollight.sum xb xa)))"
+  by (import hollight SUM_CLAUSES)
+
+lemma SUM_UNION: "finite (xa::'q_67597 => bool) &
+finite (xb::'q_67597 => bool) & xa Int xb = {}
+==> hollight.sum (xa Un xb) (x::'q_67597 => hollight.real) =
+    real_add (hollight.sum xa x) (hollight.sum xb x)"
+  by (import hollight SUM_UNION)
+
+lemma SUM_DIFF: "finite (xa::'q_67637 => bool) & (xb::'q_67637 => bool) <= xa
+==> hollight.sum (xa - xb) (x::'q_67637 => hollight.real) =
+    real_sub (hollight.sum xa x) (hollight.sum xb x)"
+  by (import hollight SUM_DIFF)
+
+lemma SUM_INCL_EXCL: "finite (x::'A => bool) & finite (xa::'A => bool)
+==> real_add (hollight.sum x (xb::'A => hollight.real))
+     (hollight.sum xa xb) =
+    real_add (hollight.sum (x Un xa) xb) (hollight.sum (x Int xa) xb)"
+  by (import hollight SUM_INCL_EXCL)
+
+lemma SUM_SUPPORT: "hollight.sum
+ (support real_add (x::'q_67726 => hollight.real) (xa::'q_67726 => bool))
+ x =
+hollight.sum xa x"
+  by (import hollight SUM_SUPPORT)
+
+lemma SUM_ADD: "finite (xb::'q_67760 => bool)
+==> hollight.sum xb
+     (%xb::'q_67760.
+         real_add ((x::'q_67760 => hollight.real) xb)
+          ((xa::'q_67760 => hollight.real) xb)) =
+    real_add (hollight.sum xb x) (hollight.sum xb xa)"
+  by (import hollight SUM_ADD)
+
+lemma SUM_ADD_GEN: "finite
+ {xa::'q_67851.
+  EX xc::'q_67851.
+     (xc : (xb::'q_67851 => bool) &
+      (x::'q_67851 => hollight.real) xc ~= real_of_num (0::nat)) &
+     xa = xc} &
+finite
+ {x::'q_67851.
+  EX xc::'q_67851.
+     (xc : xb &
+      (xa::'q_67851 => hollight.real) xc ~= real_of_num (0::nat)) &
+     x = xc}
+==> hollight.sum xb (%xb::'q_67851. real_add (x xb) (xa xb)) =
+    real_add (hollight.sum xb x) (hollight.sum xb xa)"
+  by (import hollight SUM_ADD_GEN)
+
+lemma SUM_EQ_0: "(!!xb::'A.
+    xb : (xa::'A => bool)
+    ==> (x::'A => hollight.real) xb = real_of_num (0::nat))
+==> hollight.sum xa x = real_of_num (0::nat)"
+  by (import hollight SUM_EQ_0)
+
+lemma SUM_0: "hollight.sum (x::'A => bool) (%n::'A. real_of_num (0::nat)) =
+real_of_num (0::nat)"
+  by (import hollight SUM_0)
+
+lemma SUM_LMUL: "hollight.sum (s::'A => bool)
+ (%x::'A. real_mul (c::hollight.real) ((f::'A => hollight.real) x)) =
+real_mul c (hollight.sum s f)"
+  by (import hollight SUM_LMUL)
+
+lemma SUM_RMUL: "hollight.sum (xb::'A => bool)
+ (%xb::'A. real_mul ((x::'A => hollight.real) xb) (xa::hollight.real)) =
+real_mul (hollight.sum xb x) xa"
+  by (import hollight SUM_RMUL)
+
+lemma SUM_NEG: "hollight.sum (xa::'q_68051 => bool)
+ (%xa::'q_68051. real_neg ((x::'q_68051 => hollight.real) xa)) =
+real_neg (hollight.sum xa x)"
+  by (import hollight SUM_NEG)
+
+lemma SUM_SUB: "finite (xb::'q_68086 => bool)
+==> hollight.sum xb
+     (%xb::'q_68086.
+         real_sub ((x::'q_68086 => hollight.real) xb)
+          ((xa::'q_68086 => hollight.real) xb)) =
+    real_sub (hollight.sum xb x) (hollight.sum xb xa)"
+  by (import hollight SUM_SUB)
+
+lemma SUM_LE: "finite (xb::'q_68128 => bool) &
+(ALL xc::'q_68128.
+    xc : xb -->
+    real_le ((x::'q_68128 => hollight.real) xc)
+     ((xa::'q_68128 => hollight.real) xc))
+==> real_le (hollight.sum xb x) (hollight.sum xb xa)"
+  by (import hollight SUM_LE)
+
+lemma SUM_LT: "finite (s::'A => bool) &
+(ALL x::'A.
+    x : s -->
+    real_le ((f::'A => hollight.real) x) ((g::'A => hollight.real) x)) &
+(EX x::'A. x : s & real_lt (f x) (g x))
+==> real_lt (hollight.sum s f) (hollight.sum s g)"
+  by (import hollight SUM_LT)
+
+lemma SUM_LT_ALL: "finite (s::'q_68250 => bool) &
+s ~= {} &
+(ALL x::'q_68250.
+    x : s -->
+    real_lt ((f::'q_68250 => hollight.real) x)
+     ((g::'q_68250 => hollight.real) x))
+==> real_lt (hollight.sum s f) (hollight.sum s g)"
+  by (import hollight SUM_LT_ALL)
+
+lemma SUM_EQ: "(!!xc::'q_68288.
+    xc : (xb::'q_68288 => bool)
+    ==> (x::'q_68288 => hollight.real) xc =
+        (xa::'q_68288 => hollight.real) xc)
+==> hollight.sum xb x = hollight.sum xb xa"
+  by (import hollight SUM_EQ)
+
+lemma SUM_ABS: "finite (s::'q_68347 => bool)
+==> real_le (real_abs (hollight.sum s (f::'q_68347 => hollight.real)))
+     (hollight.sum s (%x::'q_68347. real_abs (f x)))"
+  by (import hollight SUM_ABS)
+
+lemma SUM_ABS_LE: "finite (s::'A => bool) &
+(ALL x::'A.
+    x : s -->
+    real_le (real_abs ((f::'A => hollight.real) x))
+     ((g::'A => hollight.real) x))
+==> real_le (real_abs (hollight.sum s f)) (hollight.sum s g)"
+  by (import hollight SUM_ABS_LE)
+
+lemma SUM_CONST: "finite (s::'q_68423 => bool)
+==> hollight.sum s (%n::'q_68423. c::hollight.real) =
+    real_mul (real_of_num (CARD s)) c"
+  by (import hollight SUM_CONST)
+
+lemma SUM_POS_LE: "finite (xa::'q_68465 => bool) &
+(ALL xb::'q_68465.
+    xb : xa -->
+    real_le (real_of_num (0::nat)) ((x::'q_68465 => hollight.real) xb))
+==> real_le (real_of_num (0::nat)) (hollight.sum xa x)"
+  by (import hollight SUM_POS_LE)
+
+lemma SUM_POS_BOUND: "[| finite (x::'A => bool) &
+   (ALL xa::'A.
+       xa : x -->
+       real_le (real_of_num (0::nat)) ((f::'A => hollight.real) xa)) &
+   real_le (hollight.sum x f) (b::hollight.real);
+   (xa::'A) : x |]
+==> real_le (f xa) b"
+  by (import hollight SUM_POS_BOUND)
+
+lemma SUM_POS_EQ_0: "[| finite (xa::'q_68612 => bool) &
+   (ALL xb::'q_68612.
+       xb : xa -->
+       real_le (real_of_num (0::nat)) ((x::'q_68612 => hollight.real) xb)) &
+   hollight.sum xa x = real_of_num (0::nat);
+   (xb::'q_68612) : xa |]
+==> x xb = real_of_num (0::nat)"
+  by (import hollight SUM_POS_EQ_0)
+
+lemma SUM_ZERO_EXISTS: "finite (s::'A => bool) &
+hollight.sum s (u::'A => hollight.real) = real_of_num (0::nat)
+==> (ALL i::'A. i : s --> u i = real_of_num (0::nat)) |
+    (EX (j::'A) k::'A.
+        j : s &
+        real_lt (u j) (real_of_num (0::nat)) &
+        k : s & real_gt (u k) (real_of_num (0::nat)))"
+  by (import hollight SUM_ZERO_EXISTS)
+
+lemma SUM_DELETE: "finite (xa::'q_68854 => bool) & (xb::'q_68854) : xa
+==> hollight.sum (xa - {xb}) (x::'q_68854 => hollight.real) =
+    real_sub (hollight.sum xa x) (x xb)"
+  by (import hollight SUM_DELETE)
+
+lemma SUM_DELETE_CASES: "finite (s::'q_68907 => bool)
+==> hollight.sum (s - {a::'q_68907}) (f::'q_68907 => hollight.real) =
+    (if a : s then real_sub (hollight.sum s f) (f a) else hollight.sum s f)"
+  by (import hollight SUM_DELETE_CASES)
+
+lemma SUM_SING: "hollight.sum {xa::'q_68930} (x::'q_68930 => hollight.real) = x xa"
+  by (import hollight SUM_SING)
+
+lemma SUM_DELTA: "hollight.sum (x::'A => bool)
+ (%x::'A. if x = (xa::'A) then b::hollight.real else real_of_num (0::nat)) =
+(if xa : x then b else real_of_num (0::nat))"
+  by (import hollight SUM_DELTA)
+
+lemma SUM_SWAP: "finite (x::'A => bool) & finite (xa::'B => bool)
+==> hollight.sum x
+     (%i::'A. hollight.sum xa ((f::'A => 'B => hollight.real) i)) =
+    hollight.sum xa (%j::'B. hollight.sum x (%i::'A. f i j))"
+  by (import hollight SUM_SWAP)
+
+lemma SUM_IMAGE: "(!!(xa::'q_69070) y::'q_69070.
+    xa : (xb::'q_69070 => bool) &
+    y : xb & (x::'q_69070 => 'q_69046) xa = x y
+    ==> xa = y)
+==> hollight.sum (x ` xb) (xa::'q_69046 => hollight.real) =
+    hollight.sum xb (xa o x)"
+  by (import hollight SUM_IMAGE)
+
+lemma SUM_SUPERSET: "(xa::'A => bool) <= (xb::'A => bool) &
+(ALL xc::'A.
+    xc : xb & xc ~: xa -->
+    (x::'A => hollight.real) xc = real_of_num (0::nat))
+==> hollight.sum xb x = hollight.sum xa x"
+  by (import hollight SUM_SUPERSET)
+
+lemma SUM_UNION_RZERO: "finite (u::'A => bool) &
+(ALL x::'A.
+    x : (v::'A => bool) & x ~: u -->
+    (f::'A => hollight.real) x = real_of_num (0::nat))
+==> hollight.sum (u Un v) f = hollight.sum u f"
+  by (import hollight SUM_UNION_RZERO)
+
+lemma SUM_UNION_LZERO: "finite (v::'A => bool) &
+(ALL x::'A.
+    x : (u::'A => bool) & x ~: v -->
+    (f::'A => hollight.real) x = real_of_num (0::nat))
+==> hollight.sum (u Un v) f = hollight.sum v f"
+  by (import hollight SUM_UNION_LZERO)
+
+lemma SUM_RESTRICT: "finite (s::'q_69267 => bool)
+==> hollight.sum s
+     (%x::'q_69267.
+         if x : s then (f::'q_69267 => hollight.real) x
+         else real_of_num (0::nat)) =
+    hollight.sum s f"
+  by (import hollight SUM_RESTRICT)
+
+lemma SUM_BOUND: "finite (x::'A => bool) &
+(ALL xc::'A.
+    xc : x --> real_le ((xa::'A => hollight.real) xc) (xb::hollight.real))
+==> real_le (hollight.sum x xa) (real_mul (real_of_num (CARD x)) xb)"
+  by (import hollight SUM_BOUND)
+
+lemma SUM_BOUND_GEN: "finite (s::'A => bool) &
+s ~= {} &
+(ALL x::'A.
+    x : s -->
+    real_le ((f::'A => hollight.real) x)
+     (real_div (b::hollight.real) (real_of_num (CARD s))))
+==> real_le (hollight.sum s f) b"
+  by (import hollight SUM_BOUND_GEN)
+
+lemma SUM_ABS_BOUND: "finite (s::'A => bool) &
+(ALL x::'A.
+    x : s -->
+    real_le (real_abs ((f::'A => hollight.real) x)) (b::hollight.real))
+==> real_le (real_abs (hollight.sum s f))
+     (real_mul (real_of_num (CARD s)) b)"
+  by (import hollight SUM_ABS_BOUND)
+
+lemma SUM_BOUND_LT: "finite (s::'A => bool) &
+(ALL x::'A.
+    x : s --> real_le ((f::'A => hollight.real) x) (b::hollight.real)) &
+(EX x::'A. x : s & real_lt (f x) b)
+==> real_lt (hollight.sum s f) (real_mul (real_of_num (CARD s)) b)"
+  by (import hollight SUM_BOUND_LT)
+
+lemma SUM_BOUND_LT_ALL: "finite (s::'q_69531 => bool) &
+s ~= {} &
+(ALL x::'q_69531.
+    x : s --> real_lt ((f::'q_69531 => hollight.real) x) (b::hollight.real))
+==> real_lt (hollight.sum s f) (real_mul (real_of_num (CARD s)) b)"
+  by (import hollight SUM_BOUND_LT_ALL)
+
+lemma SUM_BOUND_LT_GEN: "finite (s::'A => bool) &
+s ~= {} &
+(ALL x::'A.
+    x : s -->
+    real_lt ((f::'A => hollight.real) x)
+     (real_div (b::hollight.real) (real_of_num (CARD s))))
+==> real_lt (hollight.sum s f) b"
+  by (import hollight SUM_BOUND_LT_GEN)
+
+lemma SUM_UNION_EQ: "finite (u::'q_69614 => bool) &
+(s::'q_69614 => bool) Int (t::'q_69614 => bool) = {} & s Un t = u
+==> real_add (hollight.sum s (f::'q_69614 => hollight.real))
+     (hollight.sum t f) =
+    hollight.sum u f"
+  by (import hollight SUM_UNION_EQ)
+
+lemma SUM_EQ_SUPERSET: "finite (t::'A => bool) &
+t <= (s::'A => bool) &
+(ALL x::'A.
+    x : t --> (f::'A => hollight.real) x = (g::'A => hollight.real) x) &
+(ALL x::'A. x : s & x ~: t --> f x = real_of_num (0::nat))
+==> hollight.sum s f = hollight.sum t g"
+  by (import hollight SUM_EQ_SUPERSET)
+
+lemma SUM_RESTRICT_SET: "hollight.sum
+ {u::'q_69783.
+  EX xb::'q_69783.
+     (xb : (xa::'q_69783 => bool) & (x::'q_69783 => bool) xb) & u = xb}
+ (xb::'q_69783 => hollight.real) =
+hollight.sum xa
+ (%xa::'q_69783. if x xa then xb xa else real_of_num (0::nat))"
+  by (import hollight SUM_RESTRICT_SET)
+
+lemma SUM_SUM_RESTRICT: "finite (s::'q_69875 => bool) & finite (t::'q_69874 => bool)
+==> hollight.sum s
+     (%x::'q_69875.
+         hollight.sum
+          {u::'q_69874.
+           EX y::'q_69874.
+              (y : t & (R::'q_69875 => 'q_69874 => bool) x y) & u = y}
+          ((f::'q_69875 => 'q_69874 => hollight.real) x)) =
+    hollight.sum t
+     (%y::'q_69874.
+         hollight.sum {u::'q_69875. EX x::'q_69875. (x : s & R x y) & u = x}
+          (%x::'q_69875. f x y))"
+  by (import hollight SUM_SUM_RESTRICT)
+
+lemma CARD_EQ_SUM: "finite (x::'q_69896 => bool)
+==> real_of_num (CARD x) =
+    hollight.sum x (%x::'q_69896. real_of_num (1::nat))"
+  by (import hollight CARD_EQ_SUM)
+
+lemma SUM_MULTICOUNT_GEN: "finite (s::'A => bool) &
+finite (t::'B => bool) &
+(ALL j::'B.
+    j : t -->
+    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
+    (k::'B => nat) j)
+==> hollight.sum s
+     (%i::'A.
+         real_of_num (CARD {u::'B. EX j::'B. (j : t & R i j) & u = j})) =
+    hollight.sum t (%i::'B. real_of_num (k i))"
+  by (import hollight SUM_MULTICOUNT_GEN)
+
+lemma SUM_MULTICOUNT: "finite (s::'A => bool) &
+finite (t::'B => bool) &
+(ALL j::'B.
+    j : t -->
+    CARD {u::'A. EX i::'A. (i : s & (R::'A => 'B => bool) i j) & u = i} =
+    (k::nat))
+==> hollight.sum s
+     (%i::'A.
+         real_of_num (CARD {u::'B. EX j::'B. (j : t & R i j) & u = j})) =
+    real_of_num (k * CARD t)"
+  by (import hollight SUM_MULTICOUNT)
+
+lemma SUM_IMAGE_GEN: "finite (s::'A => bool)
+==> hollight.sum s (g::'A => hollight.real) =
+    hollight.sum ((f::'A => 'B) ` s)
+     (%y::'B. hollight.sum {u::'A. EX x::'A. (x : s & f x = y) & u = x} g)"
+  by (import hollight SUM_IMAGE_GEN)
+
+lemma SUM_GROUP: "finite (s::'A => bool) & (f::'A => 'B) ` s <= (t::'B => bool)
+==> hollight.sum t
+     (%y::'B.
+         hollight.sum {u::'A. EX x::'A. (x : s & f x = y) & u = x}
+          (g::'A => hollight.real)) =
+    hollight.sum s g"
+  by (import hollight SUM_GROUP)
+
+lemma REAL_OF_NUM_SUM: "finite (s::'q_70361 => bool)
+==> real_of_num (nsum s (f::'q_70361 => nat)) =
+    hollight.sum s (%x::'q_70361. real_of_num (f x))"
+  by (import hollight REAL_OF_NUM_SUM)
+
+lemma SUM_SUBSET: "finite (u::'A => bool) &
+finite (v::'A => bool) &
+(ALL x::'A.
+    x : u - v -->
+    real_le ((f::'A => hollight.real) x) (real_of_num (0::nat))) &
+(ALL x::'A. x : v - u --> real_le (real_of_num (0::nat)) (f x))
+==> real_le (hollight.sum u f) (hollight.sum v f)"
+  by (import hollight SUM_SUBSET)
+
+lemma SUM_SUBSET_SIMPLE: "finite (v::'A => bool) &
+(u::'A => bool) <= v &
+(ALL x::'A.
+    x : v - u -->
+    real_le (real_of_num (0::nat)) ((f::'A => hollight.real) x))
+==> real_le (hollight.sum u f) (hollight.sum v f)"
+  by (import hollight SUM_SUBSET_SIMPLE)
+
+lemma SUM_IMAGE_NONZERO: "finite (xb::'A => bool) &
+(ALL (xc::'A) xd::'A.
+    xc : xb & xd : xb & xc ~= xd & (xa::'A => 'B) xc = xa xd -->
+    (x::'B => hollight.real) (xa xc) = real_of_num (0::nat))
+==> hollight.sum (xa ` xb) x = hollight.sum xb (x o xa)"
+  by (import hollight SUM_IMAGE_NONZERO)
+
+lemma SUM_BIJECTION: "(ALL x::'A. x : (xb::'A => bool) --> (xa::'A => 'A) x : xb) &
+(ALL y::'A. y : xb --> (EX! x::'A. x : xb & xa x = y))
+==> hollight.sum xb (x::'A => hollight.real) = hollight.sum xb (x o xa)"
+  by (import hollight SUM_BIJECTION)
+
+lemma SUM_SUM_PRODUCT: "finite (x::'A => bool) &
+(ALL i::'A. i : x --> finite ((xa::'A => 'B => bool) i))
+==> hollight.sum x
+     (%x::'A. hollight.sum (xa x) ((xb::'A => 'B => hollight.real) x)) =
+    hollight.sum
+     {u::'A * 'B. EX (i::'A) j::'B. (i : x & j : xa i) & u = (i, j)}
+     (SOME f::'A * 'B => hollight.real.
+         ALL (i::'A) j::'B. f (i, j) = xb i j)"
+  by (import hollight SUM_SUM_PRODUCT)
+
+lemma SUM_EQ_GENERAL: "(ALL y::'B.
+    y : (xa::'B => bool) -->
+    (EX! xa::'A. xa : (x::'A => bool) & (xd::'A => 'B) xa = y)) &
+(ALL xe::'A.
+    xe : x -->
+    xd xe : xa &
+    (xc::'B => hollight.real) (xd xe) = (xb::'A => hollight.real) xe)
+==> hollight.sum x xb = hollight.sum xa xc"
+  by (import hollight SUM_EQ_GENERAL)
+
+lemma SUM_EQ_GENERAL_INVERSES: "(ALL y::'B.
+    y : (xa::'B => bool) -->
+    (xe::'B => 'A) y : (x::'A => bool) & (xd::'A => 'B) (xe y) = y) &
+(ALL xf::'A.
+    xf : x -->
+    xd xf : xa &
+    xe (xd xf) = xf &
+    (xc::'B => hollight.real) (xd xf) = (xb::'A => hollight.real) xf)
+==> hollight.sum x xb = hollight.sum xa xc"
+  by (import hollight SUM_EQ_GENERAL_INVERSES)
+
+lemma SUM_INJECTION: "finite (xb::'q_71007 => bool) &
+(ALL x::'q_71007. x : xb --> (xa::'q_71007 => 'q_71007) x : xb) &
+(ALL (x::'q_71007) y::'q_71007. x : xb & y : xb & xa x = xa y --> x = y)
+==> hollight.sum xb ((x::'q_71007 => hollight.real) o xa) =
+    hollight.sum xb x"
+  by (import hollight SUM_INJECTION)
+
+lemma SUM_UNION_NONZERO: "finite (xa::'q_71050 => bool) &
+finite (xb::'q_71050 => bool) &
+(ALL xc::'q_71050.
+    xc : xa Int xb -->
+    (x::'q_71050 => hollight.real) xc = real_of_num (0::nat))
+==> hollight.sum (xa Un xb) x =
+    real_add (hollight.sum xa x) (hollight.sum xb x)"
+  by (import hollight SUM_UNION_NONZERO)
+
+lemma SUM_UNIONS_NONZERO: "finite (x::('A => bool) => bool) &
+(ALL t::'A => bool. t : x --> finite t) &
+(ALL (t1::'A => bool) (t2::'A => bool) xa::'A.
+    t1 : x & t2 : x & t1 ~= t2 & xa : t1 & xa : t2 -->
+    (f::'A => hollight.real) xa = real_of_num (0::nat))
+==> hollight.sum (Union x) f =
+    hollight.sum x (%t::'A => bool. hollight.sum t f)"
+  by (import hollight SUM_UNIONS_NONZERO)
+
+lemma SUM_CASES: "finite (x::'A => bool)
+==> hollight.sum x
+     (%x::'A.
+         if (xa::'A => bool) x then (xb::'A => hollight.real) x
+         else (xc::'A => hollight.real) x) =
+    real_add (hollight.sum {u::'A. EX xb::'A. (xb : x & xa xb) & u = xb} xb)
+     (hollight.sum {u::'A. EX xb::'A. (xb : x & ~ xa xb) & u = xb} xc)"
+  by (import hollight SUM_CASES)
+
+lemma SUM_CASES_1: "finite (s::'q_71319 => bool) & (a::'q_71319) : s
+==> hollight.sum s
+     (%x::'q_71319.
+         if x = a then y::hollight.real
+         else (f::'q_71319 => hollight.real) x) =
+    real_add (hollight.sum s f) (real_sub y (f a))"
+  by (import hollight SUM_CASES_1)
+
+lemma SUM_LE_INCLUDED: "finite (s::'A => bool) &
+finite (t::'B => bool) &
+(ALL y::'B.
+    y : t --> real_le (real_of_num (0::nat)) ((g::'B => hollight.real) y)) &
+(ALL x::'A.
+    x : s -->
+    (EX y::'B.
+        y : t &
+        (i::'B => 'A) y = x & real_le ((f::'A => hollight.real) x) (g y)))
+==> real_le (hollight.sum s f) (hollight.sum t g)"
+  by (import hollight SUM_LE_INCLUDED)
+
+lemma SUM_IMAGE_LE: "finite (s::'A => bool) &
+(ALL x::'A.
+    x : s -->
+    real_le (real_of_num (0::nat))
+     ((g::'B => hollight.real) ((f::'A => 'B) x)))
+==> real_le (hollight.sum (f ` s) g) (hollight.sum s (g o f))"
+  by (import hollight SUM_IMAGE_LE)
+
+lemma SUM_CLOSED: "(P::hollight.real => bool) (real_of_num (0::nat)) &
+(ALL (x::hollight.real) y::hollight.real. P x & P y --> P (real_add x y)) &
+(ALL a::'A. a : (s::'A => bool) --> P ((f::'A => hollight.real) a))
+==> P (hollight.sum s f)"
+  by (import hollight SUM_CLOSED)
+
+lemma SUM_ADD_NUMSEG: "hollight.sum {xb::nat..xc::nat}
+ (%i::nat.
+     real_add ((x::nat => hollight.real) i)
+      ((xa::nat => hollight.real) i)) =
+real_add (hollight.sum {xb..xc} x) (hollight.sum {xb..xc} xa)"
+  by (import hollight SUM_ADD_NUMSEG)
+
+lemma SUM_SUB_NUMSEG: "hollight.sum {xb::nat..xc::nat}
+ (%i::nat.
+     real_sub ((x::nat => hollight.real) i)
+      ((xa::nat => hollight.real) i)) =
+real_sub (hollight.sum {xb..xc} x) (hollight.sum {xb..xc} xa)"
+  by (import hollight SUM_SUB_NUMSEG)
+
+lemma SUM_LE_NUMSEG: "(!!i::nat.
+    (xb::nat) <= i & i <= (xc::nat)
+    ==> real_le ((x::nat => hollight.real) i)
+         ((xa::nat => hollight.real) i))
+==> real_le (hollight.sum {xb..xc} x) (hollight.sum {xb..xc} xa)"
+  by (import hollight SUM_LE_NUMSEG)
+
+lemma SUM_EQ_NUMSEG: "(!!i::nat.
+    (m::nat) <= i & i <= (n::nat)
+    ==> (f::nat => hollight.real) i = (g::nat => hollight.real) i)
+==> hollight.sum {m..n} f = hollight.sum {m..n} g"
+  by (import hollight SUM_EQ_NUMSEG)
+
+lemma SUM_ABS_NUMSEG: "real_le
+ (real_abs (hollight.sum {xa::nat..xb::nat} (x::nat => hollight.real)))
+ (hollight.sum {xa..xb} (%i::nat. real_abs (x i)))"
+  by (import hollight SUM_ABS_NUMSEG)
+
+lemma SUM_CONST_NUMSEG: "hollight.sum {xa..xb} (%n. x) = real_mul (real_of_num (xb + 1 - xa)) x"
+  by (import hollight SUM_CONST_NUMSEG)
+
+lemma SUM_EQ_0_NUMSEG: "(!!i::nat.
+    (m::nat) <= i & i <= (n::nat)
+    ==> (x::nat => hollight.real) i = real_of_num (0::nat))
+==> hollight.sum {m..n} x = real_of_num (0::nat)"
+  by (import hollight SUM_EQ_0_NUMSEG)
+
+lemma SUM_TRIV_NUMSEG: "(n::nat) < (m::nat)
+==> hollight.sum {m..n} (f::nat => hollight.real) = real_of_num (0::nat)"
+  by (import hollight SUM_TRIV_NUMSEG)
+
+lemma SUM_POS_LE_NUMSEG: "(!!p::nat.
+    (x::nat) <= p & p <= (xa::nat)
+    ==> real_le (real_of_num (0::nat)) ((xb::nat => hollight.real) p))
+==> real_le (real_of_num (0::nat)) (hollight.sum {x..xa} xb)"
+  by (import hollight SUM_POS_LE_NUMSEG)
+
+lemma SUM_POS_EQ_0_NUMSEG: "[| (ALL p::nat.
+       (m::nat) <= p & p <= (n::nat) -->
+       real_le (real_of_num (0::nat)) ((f::nat => hollight.real) p)) &
+   hollight.sum {m..n} f = real_of_num (0::nat);
+   m <= (p::nat) & p <= n |]
+==> f p = real_of_num (0::nat)"
+  by (import hollight SUM_POS_EQ_0_NUMSEG)
+
+lemma SUM_SING_NUMSEG: "hollight.sum {xa::nat..xa} (x::nat => hollight.real) = x xa"
+  by (import hollight SUM_SING_NUMSEG)
+
+lemma SUM_CLAUSES_NUMSEG: "(ALL m. hollight.sum {m..0} f = (if m = 0 then f 0 else real_of_num 0)) &
+(ALL m n.
+    hollight.sum {m..Suc n} f =
+    (if m <= Suc n then real_add (hollight.sum {m..n} f) (f (Suc n))
+     else hollight.sum {m..n} f))"
+  by (import hollight SUM_CLAUSES_NUMSEG)
+
+lemma SUM_SWAP_NUMSEG: "hollight.sum {a::nat..b::nat}
+ (%i::nat.
+     hollight.sum {c::nat..d::nat} ((f::nat => nat => hollight.real) i)) =
+hollight.sum {c..d} (%j::nat. hollight.sum {a..b} (%i::nat. f i j))"
+  by (import hollight SUM_SWAP_NUMSEG)
+
+lemma SUM_ADD_SPLIT: "(xa::nat) <= (xb::nat) + (1::nat)
+==> hollight.sum {xa..xb + (xc::nat)} (x::nat => hollight.real) =
+    real_add (hollight.sum {xa..xb} x)
+     (hollight.sum {xb + (1::nat)..xb + xc} x)"
+  by (import hollight SUM_ADD_SPLIT)
+
+lemma SUM_OFFSET: "hollight.sum {(xb::nat) + (x::nat)..(xc::nat) + x}
+ (xa::nat => hollight.real) =
+hollight.sum {xb..xc} (%i::nat. xa (i + x))"
+  by (import hollight SUM_OFFSET)
+
+lemma SUM_OFFSET_0: "(xa::nat) <= (xb::nat)
+==> hollight.sum {xa..xb} (x::nat => hollight.real) =
+    hollight.sum {0::nat..xb - xa} (%i::nat. x (i + xa))"
+  by (import hollight SUM_OFFSET_0)
+
+lemma SUM_CLAUSES_LEFT: "(xa::nat) <= (xb::nat)
+==> hollight.sum {xa..xb} (x::nat => hollight.real) =
+    real_add (x xa) (hollight.sum {xa + (1::nat)..xb} x)"
+  by (import hollight SUM_CLAUSES_LEFT)
+
+lemma SUM_CLAUSES_RIGHT: "(0::nat) < (n::nat) & (m::nat) <= n
+==> hollight.sum {m..n} (f::nat => hollight.real) =
+    real_add (hollight.sum {m..n - (1::nat)} f) (f n)"
+  by (import hollight SUM_CLAUSES_RIGHT)
+
+lemma SUM_PAIR: "hollight.sum {(2::nat) * (m::nat)..(2::nat) * (n::nat) + (1::nat)}
+ (f::nat => hollight.real) =
+hollight.sum {m..n}
+ (%i::nat. real_add (f ((2::nat) * i)) (f ((2::nat) * i + (1::nat))))"
+  by (import hollight SUM_PAIR)
+
+lemma REAL_OF_NUM_SUM_NUMSEG: "real_of_num (nsum {xa::nat..xb::nat} (x::nat => nat)) =
+hollight.sum {xa..xb} (%i::nat. real_of_num (x i))"
+  by (import hollight REAL_OF_NUM_SUM_NUMSEG)
+
+lemma SUM_PARTIAL_SUC: "hollight.sum {m::nat..n::nat}
+ (%k::nat.
+     real_mul ((f::nat => hollight.real) k)
+      (real_sub ((g::nat => hollight.real) (k + (1::nat))) (g k))) =
+(if m <= n
+ then real_sub
+       (real_sub (real_mul (f (n + (1::nat))) (g (n + (1::nat))))
+         (real_mul (f m) (g m)))
+       (hollight.sum {m..n}
+         (%k::nat.
+             real_mul (g (k + (1::nat)))
+              (real_sub (f (k + (1::nat))) (f k))))
+ else real_of_num (0::nat))"
+  by (import hollight SUM_PARTIAL_SUC)
+
+lemma SUM_PARTIAL_PRE: "hollight.sum {m::nat..n::nat}
+ (%k::nat.
+     real_mul ((f::nat => hollight.real) k)
+      (real_sub ((g::nat => hollight.real) k) (g (k - (1::nat))))) =
+(if m <= n
+ then real_sub
+       (real_sub (real_mul (f (n + (1::nat))) (g n))
+         (real_mul (f m) (g (m - (1::nat)))))
+       (hollight.sum {m..n}
+         (%k::nat. real_mul (g k) (real_sub (f (k + (1::nat))) (f k))))
+ else real_of_num (0::nat))"
+  by (import hollight SUM_PARTIAL_PRE)
+
+lemma SUM_DIFFS: "hollight.sum {x::nat..xa::nat}
+ (%x::nat. real_sub ((f::nat => hollight.real) x) (f (x + (1::nat)))) =
+(if x <= xa then real_sub (f x) (f (xa + (1::nat)))
+ else real_of_num (0::nat))"
+  by (import hollight SUM_DIFFS)
+
+lemma SUM_DIFFS_ALT: "hollight.sum {m::nat..n::nat}
+ (%x::nat. real_sub ((f::nat => hollight.real) (x + (1::nat))) (f x)) =
+(if m <= n then real_sub (f (n + (1::nat))) (f m) else real_of_num (0::nat))"
+  by (import hollight SUM_DIFFS_ALT)
+
+lemma SUM_COMBINE_R: "(m::nat) <= (n::nat) + (1::nat) & n <= (p::nat)
+==> real_add (hollight.sum {m..n} (f::nat => hollight.real))
+     (hollight.sum {n + (1::nat)..p} f) =
+    hollight.sum {m..p} f"
+  by (import hollight SUM_COMBINE_R)
+
+lemma SUM_COMBINE_L: "(0::nat) < (n::nat) & (m::nat) <= n & n <= (p::nat) + (1::nat)
+==> real_add (hollight.sum {m..n - (1::nat)} (f::nat => hollight.real))
+     (hollight.sum {n..p} f) =
+    hollight.sum {m..p} f"
+  by (import hollight SUM_COMBINE_L)
+
+lemma REAL_SUB_POW: "1 <= xb
+==> real_sub (real_pow x xb) (real_pow xa xb) =
+    real_mul (real_sub x xa)
+     (hollight.sum {0..xb - 1}
+       (%i. real_mul (real_pow x i) (real_pow xa (xb - 1 - i))))"
+  by (import hollight REAL_SUB_POW)
+
+lemma REAL_SUB_POW_R1: "1 <= n
+==> real_sub (real_pow x n) (real_of_num 1) =
+    real_mul (real_sub x (real_of_num 1))
+     (hollight.sum {0..n - 1} (real_pow x))"
+  by (import hollight REAL_SUB_POW_R1)
+
+lemma REAL_SUB_POW_L1: "1 <= xa
+==> real_sub (real_of_num 1) (real_pow x xa) =
+    real_mul (real_sub (real_of_num 1) x)
+     (hollight.sum {0..xa - 1} (real_pow x))"
+  by (import hollight REAL_SUB_POW_L1)
+
+definition
+  dimindex :: "('A => bool) => nat"  where
+  "(op ==::(('A::type => bool) => nat) => (('A::type => bool) => nat) => prop)
+ (dimindex::('A::type => bool) => nat)
+ (%u::'A::type => bool.
+     (If::bool => nat => nat => nat)
+      ((finite::('A::type => bool) => bool) (UNIV::'A::type => bool))
+      ((CARD::('A::type => bool) => nat) (UNIV::'A::type => bool)) (1::nat))"
+
+lemma DEF_dimindex: "(op =::(('A::type => bool) => nat) => (('A::type => bool) => nat) => bool)
+ (dimindex::('A::type => bool) => nat)
+ (%u::'A::type => bool.
+     (If::bool => nat => nat => nat)
+      ((finite::('A::type => bool) => bool) (UNIV::'A::type => bool))
+      ((CARD::('A::type => bool) => nat) (UNIV::'A::type => bool)) (1::nat))"
+  by (import hollight DEF_dimindex)
+
+lemma DIMINDEX_NONZERO: "dimindex (s::'A => bool) ~= (0::nat)"
+  by (import hollight DIMINDEX_NONZERO)
+
+lemma DIMINDEX_GE_1: "(1::nat) <= dimindex (x::'A => bool)"
+  by (import hollight DIMINDEX_GE_1)
+
+lemma DIMINDEX_UNIV: "(op =::nat => nat => bool)
+ ((dimindex::('A::type => bool) => nat) (x::'A::type => bool))
+ ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool))"
+  by (import hollight DIMINDEX_UNIV)
+
+lemma DIMINDEX_UNIQUE: "(op ==>::prop => prop => prop)
+ ((Trueprop::bool => prop)
+   ((HAS_SIZE::('A::type => bool) => nat => bool) (UNIV::'A::type => bool)
+     (n::nat)))
+ ((Trueprop::bool => prop)
+   ((op =::nat => nat => bool)
+     ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool)) n))"
+  by (import hollight DIMINDEX_UNIQUE)
+
+typedef (open) ('A) finite_image = "{x::nat. x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat))) (dimindex UNIV)}"  morphisms "dest_finite_image" "finite_index"
+  apply (rule light_ex_imp_nonempty[where t="SOME x::nat. x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat))) (dimindex UNIV)"])
+  by (import hollight TYDEF_finite_image)
+
+syntax
+  dest_finite_image :: _ 
+
+syntax
+  finite_index :: _ 
+
+lemmas "TYDEF_finite_image_@intern" = typedef_hol2hollight 
+  [where a="a :: 'A finite_image" and r=r ,
+   OF type_definition_finite_image]
+
+lemma FINITE_IMAGE_IMAGE: "(op =::('A::type finite_image => bool)
+       => ('A::type finite_image => bool) => bool)
+ (UNIV::'A::type finite_image => bool)
+ ((op `::(nat => 'A::type finite_image)
+         => (nat => bool) => 'A::type finite_image => bool)
+   (finite_index::nat => 'A::type finite_image)
+   ((atLeastAtMost::nat => nat => nat => bool) (1::nat)
+     ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool))))"
+  by (import hollight FINITE_IMAGE_IMAGE)
+
+lemma HAS_SIZE_FINITE_IMAGE: "(HAS_SIZE::('A::type finite_image => bool) => nat => bool)
+ (UNIV::'A::type finite_image => bool)
+ ((dimindex::('A::type => bool) => nat) (s::'A::type => bool))"
+  by (import hollight HAS_SIZE_FINITE_IMAGE)
+
+lemma CARD_FINITE_IMAGE: "(op =::nat => nat => bool)
+ ((CARD::('A::type finite_image => bool) => nat)
+   (UNIV::'A::type finite_image => bool))
+ ((dimindex::('A::type => bool) => nat) (s::'A::type => bool))"
+  by (import hollight CARD_FINITE_IMAGE)
+
+lemma FINITE_FINITE_IMAGE: "(finite::('A::type finite_image => bool) => bool)
+ (UNIV::'A::type finite_image => bool)"
+  by (import hollight FINITE_FINITE_IMAGE)
+
+lemma DIMINDEX_FINITE_IMAGE: "dimindex (s::'A finite_image => bool) = dimindex (t::'A => bool)"
+  by (import hollight DIMINDEX_FINITE_IMAGE)
+
+lemma FINITE_INDEX_WORKS: "(Ex1::(nat => bool) => bool)
+ (%xa::nat.
+     (op &::bool => bool => bool) ((op <=::nat => nat => bool) (1::nat) xa)
+      ((op &::bool => bool => bool)
+        ((op <=::nat => nat => bool) xa
+          ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool)))
+        ((op =::'A::type finite_image => 'A::type finite_image => bool)
+          ((finite_index::nat => 'A::type finite_image) xa)
+          (x::'A::type finite_image))))"
+  by (import hollight FINITE_INDEX_WORKS)
+
+lemma FINITE_INDEX_INJ: "(op ==>::prop => prop => prop)
+ ((Trueprop::bool => prop)
+   ((op &::bool => bool => bool)
+     ((op <=::nat => nat => bool) (1::nat) (i::nat))
+     ((op &::bool => bool => bool)
+       ((op <=::nat => nat => bool) i
+         ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool)))
+       ((op &::bool => bool => bool)
+         ((op <=::nat => nat => bool) (1::nat) (j::nat))
+         ((op <=::nat => nat => bool) j
+           ((dimindex::('A::type => bool) => nat)
+             (UNIV::'A::type => bool)))))))
+ ((Trueprop::bool => prop)
+   ((op =::bool => bool => bool)
+     ((op =::'A::type finite_image => 'A::type finite_image => bool)
+       ((finite_index::nat => 'A::type finite_image) i)
+       ((finite_index::nat => 'A::type finite_image) j))
+     ((op =::nat => nat => bool) i j)))"
+  by (import hollight FINITE_INDEX_INJ)
+
+lemma FORALL_FINITE_INDEX: "(op =::bool => bool => bool)
+ ((All::('N::type finite_image => bool) => bool)
+   (P::'N::type finite_image => bool))
+ ((All::(nat => bool) => bool)
+   (%i::nat.
+       (op -->::bool => bool => bool)
+        ((op &::bool => bool => bool)
+          ((op <=::nat => nat => bool) (1::nat) i)
+          ((op <=::nat => nat => bool) i
+            ((dimindex::('N::type => bool) => nat)
+              (UNIV::'N::type => bool))))
+        (P ((finite_index::nat => 'N::type finite_image) i))))"
+  by (import hollight FORALL_FINITE_INDEX)
+
+typedef (open) ('A, 'B) cart = "{f. True}"  morphisms "dest_cart" "mk_cart"
+  apply (rule light_ex_imp_nonempty[where t="SOME f. True"])
+  by (import hollight TYDEF_cart)
+
+syntax
+  dest_cart :: _ 
+
+syntax
+  mk_cart :: _ 
+
+lemmas "TYDEF_cart_@intern" = typedef_hol2hollight 
+  [where a="a :: ('A, 'B) cart" and r=r ,
+   OF type_definition_cart]
+
+consts
+  "$" :: "('q_73536, 'q_73546) cart => nat => 'q_73536" ("$")
+
+defs
+  "$_def": "$ == %(u::('q_73536, 'q_73546) cart) ua::nat. dest_cart u (finite_index ua)"
+
+lemma "DEF_$": "$ = (%(u::('q_73536, 'q_73546) cart) ua::nat. dest_cart u (finite_index ua))"
+  by (import hollight "DEF_$")
+
+lemma CART_EQ: "(op =::bool => bool => bool)
+ ((op =::('A::type, 'B::type) cart => ('A::type, 'B::type) cart => bool)
+   (x::('A::type, 'B::type) cart) (y::('A::type, 'B::type) cart))
+ ((All::(nat => bool) => bool)
+   (%xa::nat.
+       (op -->::bool => bool => bool)
+        ((op &::bool => bool => bool)
+          ((op <=::nat => nat => bool) (1::nat) xa)
+          ((op <=::nat => nat => bool) xa
+            ((dimindex::('B::type => bool) => nat)
+              (UNIV::'B::type => bool))))
+        ((op =::'A::type => 'A::type => bool)
+          (($::('A::type, 'B::type) cart => nat => 'A::type) x xa)
+          (($::('A::type, 'B::type) cart => nat => 'A::type) y xa))))"
+  by (import hollight CART_EQ)
+
+definition
+  lambda :: "(nat => 'A) => ('A, 'B) cart"  where
+  "(op ==::((nat => 'A::type) => ('A::type, 'B::type) cart)
+        => ((nat => 'A::type) => ('A::type, 'B::type) cart) => prop)
+ (lambda::(nat => 'A::type) => ('A::type, 'B::type) cart)
+ (%u::nat => 'A::type.
+     (Eps::(('A::type, 'B::type) cart => bool) => ('A::type, 'B::type) cart)
+      (%f::('A::type, 'B::type) cart.
+          (All::(nat => bool) => bool)
+           (%i::nat.
+               (op -->::bool => bool => bool)
+                ((op &::bool => bool => bool)
+                  ((op <=::nat => nat => bool) (1::nat) i)
+                  ((op <=::nat => nat => bool) i
+                    ((dimindex::('B::type => bool) => nat)
+                      (UNIV::'B::type => bool))))
+                ((op =::'A::type => 'A::type => bool)
+                  (($::('A::type, 'B::type) cart => nat => 'A::type) f i)
+                  (u i)))))"
+
+lemma DEF_lambda: "(op =::((nat => 'A::type) => ('A::type, 'B::type) cart)
+       => ((nat => 'A::type) => ('A::type, 'B::type) cart) => bool)
+ (lambda::(nat => 'A::type) => ('A::type, 'B::type) cart)
+ (%u::nat => 'A::type.
+     (Eps::(('A::type, 'B::type) cart => bool) => ('A::type, 'B::type) cart)
+      (%f::('A::type, 'B::type) cart.
+          (All::(nat => bool) => bool)
+           (%i::nat.
+               (op -->::bool => bool => bool)
+                ((op &::bool => bool => bool)
+                  ((op <=::nat => nat => bool) (1::nat) i)
+                  ((op <=::nat => nat => bool) i
+                    ((dimindex::('B::type => bool) => nat)
+                      (UNIV::'B::type => bool))))
+                ((op =::'A::type => 'A::type => bool)
+                  (($::('A::type, 'B::type) cart => nat => 'A::type) f i)
+                  (u i)))))"
+  by (import hollight DEF_lambda)
+
+lemma LAMBDA_BETA: "(op ==>::prop => prop => prop)
+ ((Trueprop::bool => prop)
+   ((op &::bool => bool => bool)
+     ((op <=::nat => nat => bool) (1::nat) (x::nat))
+     ((op <=::nat => nat => bool) x
+       ((dimindex::('B::type => bool) => nat) (UNIV::'B::type => bool)))))
+ ((Trueprop::bool => prop)
+   ((op =::'A::type => 'A::type => bool)
+     (($::('A::type, 'B::type) cart => nat => 'A::type)
+       ((lambda::(nat => 'A::type) => ('A::type, 'B::type) cart)
+         (g::nat => 'A::type))
+       x)
+     (g x)))"
+  by (import hollight LAMBDA_BETA)
+
+lemma LAMBDA_UNIQUE: "(op =::bool => bool => bool)
+ ((All::(nat => bool) => bool)
+   (%i::nat.
+       (op -->::bool => bool => bool)
+        ((op &::bool => bool => bool)
+          ((op <=::nat => nat => bool) (1::nat) i)
+          ((op <=::nat => nat => bool) i
+            ((dimindex::('B::type => bool) => nat)
+              (UNIV::'B::type => bool))))
+        ((op =::'A::type => 'A::type => bool)
+          (($::('A::type, 'B::type) cart => nat => 'A::type)
+            (x::('A::type, 'B::type) cart) i)
+          ((xa::nat => 'A::type) i))))
+ ((op =::('A::type, 'B::type) cart => ('A::type, 'B::type) cart => bool)
+   ((lambda::(nat => 'A::type) => ('A::type, 'B::type) cart) xa) x)"
+  by (import hollight LAMBDA_UNIQUE)
+
+lemma LAMBDA_ETA: "lambda ($ (x::('q_73734, 'q_73738) cart)) = x"
+  by (import hollight LAMBDA_ETA)
+
+lemma FINITE_INDEX_INRANGE: "(Ex::(nat => bool) => bool)
+ (%xa::nat.
+     (op &::bool => bool => bool) ((op <=::nat => nat => bool) (1::nat) xa)
+      ((op &::bool => bool => bool)
+        ((op <=::nat => nat => bool) xa
+          ((dimindex::('N::type => bool) => nat) (UNIV::'N::type => bool)))
+        ((All::(('A::type, 'N::type) cart => bool) => bool)
+          (%xb::('A::type, 'N::type) cart.
+              (op =::'A::type => 'A::type => bool)
+               (($::('A::type, 'N::type) cart => nat => 'A::type) xb
+                 (x::nat))
+               (($::('A::type, 'N::type) cart => nat => 'A::type) xb xa)))))"
+  by (import hollight FINITE_INDEX_INRANGE)
+
+lemma CART_EQ_FULL: "((x::('A, 'N) cart) = (y::('A, 'N) cart)) = (ALL i::nat. $ x i = $ y i)"
+  by (import hollight CART_EQ_FULL)
+
+typedef (open) ('A, 'B) finite_sum = "{x::nat.
+ x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat)))
+      (dimindex UNIV + dimindex UNIV)}"  morphisms "dest_finite_sum" "mk_finite_sum"
+  apply (rule light_ex_imp_nonempty[where t="SOME x::nat.
+   x : dotdot (NUMERAL (NUMERAL_BIT1 (0::nat)))
+        (dimindex UNIV + dimindex UNIV)"])
+  by (import hollight TYDEF_finite_sum)
+
+syntax
+  dest_finite_sum :: _ 
+
+syntax
+  mk_finite_sum :: _ 
+
+lemmas "TYDEF_finite_sum_@intern" = typedef_hol2hollight 
+  [where a="a :: ('A, 'B) finite_sum" and r=r ,
+   OF type_definition_finite_sum]
+
+definition
+  pastecart :: "('A, 'M) cart => ('A, 'N) cart => ('A, ('M, 'N) finite_sum) cart"  where
+  "(op ==::(('A::type, 'M::type) cart
+         => ('A::type, 'N::type) cart
+            => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+        => (('A::type, 'M::type) cart
+            => ('A::type, 'N::type) cart
+               => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+           => prop)
+ (pastecart::('A::type, 'M::type) cart
+             => ('A::type, 'N::type) cart
+                => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+ (%(u::('A::type, 'M::type) cart) ua::('A::type, 'N::type) cart.
+     (lambda::(nat => 'A::type)
+              => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+      (%i::nat.
+          (If::bool => 'A::type => 'A::type => 'A::type)
+           ((op <=::nat => nat => bool) i
+             ((dimindex::('M::type => bool) => nat)
+               (UNIV::'M::type => bool)))
+           (($::('A::type, 'M::type) cart => nat => 'A::type) u i)
+           (($::('A::type, 'N::type) cart => nat => 'A::type) ua
+             ((op -::nat => nat => nat) i
+               ((dimindex::('M::type => bool) => nat)
+                 (UNIV::'M::type => bool))))))"
+
+lemma DEF_pastecart: "(op =::(('A::type, 'M::type) cart
+        => ('A::type, 'N::type) cart
+           => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+       => (('A::type, 'M::type) cart
+           => ('A::type, 'N::type) cart
+              => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+          => bool)
+ (pastecart::('A::type, 'M::type) cart
+             => ('A::type, 'N::type) cart
+                => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+ (%(u::('A::type, 'M::type) cart) ua::('A::type, 'N::type) cart.
+     (lambda::(nat => 'A::type)
+              => ('A::type, ('M::type, 'N::type) finite_sum) cart)
+      (%i::nat.
+          (If::bool => 'A::type => 'A::type => 'A::type)
+           ((op <=::nat => nat => bool) i
+             ((dimindex::('M::type => bool) => nat)
+               (UNIV::'M::type => bool)))
+           (($::('A::type, 'M::type) cart => nat => 'A::type) u i)
+           (($::('A::type, 'N::type) cart => nat => 'A::type) ua
+             ((op -::nat => nat => nat) i
+               ((dimindex::('M::type => bool) => nat)
+                 (UNIV::'M::type => bool))))))"
+  by (import hollight DEF_pastecart)
+
+definition
+  fstcart :: "('A, ('M, 'N) finite_sum) cart => ('A, 'M) cart"  where
+  "fstcart == %u::('A, ('M, 'N) finite_sum) cart. lambda ($ u)"
+
+lemma DEF_fstcart: "fstcart = (%u::('A, ('M, 'N) finite_sum) cart. lambda ($ u))"
+  by (import hollight DEF_fstcart)
+
+definition
+  sndcart :: "('A, ('M, 'N) finite_sum) cart => ('A, 'N) cart"  where
+  "(op ==::(('A::type, ('M::type, 'N::type) finite_sum) cart
+         => ('A::type, 'N::type) cart)
+        => (('A::type, ('M::type, 'N::type) finite_sum) cart
+            => ('A::type, 'N::type) cart)
+           => prop)
+ (sndcart::('A::type, ('M::type, 'N::type) finite_sum) cart
+           => ('A::type, 'N::type) cart)
+ (%u::('A::type, ('M::type, 'N::type) finite_sum) cart.
+     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
+      (%i::nat.
+          ($::('A::type, ('M::type, 'N::type) finite_sum) cart
+              => nat => 'A::type)
+           u ((op +::nat => nat => nat) i
+               ((dimindex::('M::type => bool) => nat)
+                 (UNIV::'M::type => bool)))))"
+
+lemma DEF_sndcart: "(op =::(('A::type, ('M::type, 'N::type) finite_sum) cart
+        => ('A::type, 'N::type) cart)
+       => (('A::type, ('M::type, 'N::type) finite_sum) cart
+           => ('A::type, 'N::type) cart)
+          => bool)
+ (sndcart::('A::type, ('M::type, 'N::type) finite_sum) cart
+           => ('A::type, 'N::type) cart)
+ (%u::('A::type, ('M::type, 'N::type) finite_sum) cart.
+     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
+      (%i::nat.
+          ($::('A::type, ('M::type, 'N::type) finite_sum) cart
+              => nat => 'A::type)
+           u ((op +::nat => nat => nat) i
+               ((dimindex::('M::type => bool) => nat)
+                 (UNIV::'M::type => bool)))))"
+  by (import hollight DEF_sndcart)
+
+lemma FINITE_SUM_IMAGE: "(op =::(('A::type, 'B::type) finite_sum => bool)
+       => (('A::type, 'B::type) finite_sum => bool) => bool)
+ (UNIV::('A::type, 'B::type) finite_sum => bool)
+ ((op `::(nat => ('A::type, 'B::type) finite_sum)
+         => (nat => bool) => ('A::type, 'B::type) finite_sum => bool)
+   (mk_finite_sum::nat => ('A::type, 'B::type) finite_sum)
+   ((atLeastAtMost::nat => nat => nat => bool) (1::nat)
+     ((op +::nat => nat => nat)
+       ((dimindex::('A::type => bool) => nat) (UNIV::'A::type => bool))
+       ((dimindex::('B::type => bool) => nat) (UNIV::'B::type => bool)))))"
+  by (import hollight FINITE_SUM_IMAGE)
+
+lemma HAS_SIZE_1: "(HAS_SIZE::(unit => bool) => nat => bool) (UNIV::unit => bool) (1::nat)"
+  by (import hollight HAS_SIZE_1)
+
+typedef (open) N_2 = "{x. x : dotdot (NUMERAL (NUMERAL_BIT1 0))
+         (NUMERAL (NUMERAL_BIT0 (NUMERAL_BIT1 0)))}"  morphisms "dest_auto_define_finite_type_2" "mk_auto_define_finite_type_2"
+  apply (rule light_ex_imp_nonempty[where t="SOME x.
+   x : dotdot (NUMERAL (NUMERAL_BIT1 0))
+        (NUMERAL (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"])
+  by (import hollight TYDEF_2)
+
+syntax
+  dest_auto_define_finite_type_2 :: _ 
+
+syntax
+  mk_auto_define_finite_type_2 :: _ 
+
+lemmas "TYDEF_2_@intern" = typedef_hol2hollight 
+  [where a="a :: N_2" and r=r ,
+   OF type_definition_N_2]
+
+typedef (open) N_3 = "{x. x : dotdot (NUMERAL (NUMERAL_BIT1 0))
+         (NUMERAL (NUMERAL_BIT1 (NUMERAL_BIT1 0)))}"  morphisms "dest_auto_define_finite_type_3" "mk_auto_define_finite_type_3"
+  apply (rule light_ex_imp_nonempty[where t="SOME x.
+   x : dotdot (NUMERAL (NUMERAL_BIT1 0))
+        (NUMERAL (NUMERAL_BIT1 (NUMERAL_BIT1 0)))"])
+  by (import hollight TYDEF_3)
+
+syntax
+  dest_auto_define_finite_type_3 :: _ 
+
+syntax
+  mk_auto_define_finite_type_3 :: _ 
+
+lemmas "TYDEF_3_@intern" = typedef_hol2hollight 
+  [where a="a :: N_3" and r=r ,
+   OF type_definition_N_3]
+
+lemma FINITE_CART: "(op ==>::prop => prop => prop)
+ ((all::(nat => prop) => prop)
+   (%i::nat.
+       (op ==>::prop => prop => prop)
+        ((Trueprop::bool => prop)
+          ((op &::bool => bool => bool)
+            ((op <=::nat => nat => bool) (1::nat) i)
+            ((op <=::nat => nat => bool) i
+              ((dimindex::('N::type => bool) => nat)
+                (UNIV::'N::type => bool)))))
+        ((Trueprop::bool => prop)
+          ((finite::('A::type => bool) => bool)
+            ((Collect::('A::type => bool) => 'A::type => bool)
+              (%u::'A::type.
+                  (Ex::('A::type => bool) => bool)
+                   (%x::'A::type.
+                       (op &::bool => bool => bool)
+                        ((P::nat => 'A::type => bool) i x)
+                        ((op =::'A::type => 'A::type => bool) u x))))))))
+ ((Trueprop::bool => prop)
+   ((finite::(('A::type, 'N::type) cart => bool) => bool)
+     ((Collect::(('A::type, 'N::type) cart => bool)
+                => ('A::type, 'N::type) cart => bool)
+       (%u::('A::type, 'N::type) cart.
+           (Ex::(('A::type, 'N::type) cart => bool) => bool)
+            (%v::('A::type, 'N::type) cart.
+                (op &::bool => bool => bool)
+                 ((All::(nat => bool) => bool)
+                   (%i::nat.
+                       (op -->::bool => bool => bool)
+                        ((op &::bool => bool => bool)
+                          ((op <=::nat => nat => bool) (1::nat) i)
+                          ((op <=::nat => nat => bool) i
+                            ((dimindex::('N::type => bool) => nat)
+                              (UNIV::'N::type => bool))))
+                        (P i (($::('A::type, 'N::type) cart
+                                  => nat => 'A::type)
+                               v i))))
+                 ((op =::('A::type, 'N::type) cart
+                         => ('A::type, 'N::type) cart => bool)
+                   u v))))))"
+  by (import hollight FINITE_CART)
+
+definition
+  vector :: "'A list => ('A, 'N) cart"  where
+  "(op ==::('A::type list => ('A::type, 'N::type) cart)
+        => ('A::type list => ('A::type, 'N::type) cart) => prop)
+ (vector::'A::type list => ('A::type, 'N::type) cart)
+ (%u::'A::type list.
+     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
+      (%i::nat.
+          (op !::'A::type list => nat => 'A::type) u
+           ((op -::nat => nat => nat) i (1::nat))))"
+
+lemma DEF_vector: "(op =::('A::type list => ('A::type, 'N::type) cart)
+       => ('A::type list => ('A::type, 'N::type) cart) => bool)
+ (vector::'A::type list => ('A::type, 'N::type) cart)
+ (%u::'A::type list.
+     (lambda::(nat => 'A::type) => ('A::type, 'N::type) cart)
+      (%i::nat.
+          (op !::'A::type list => nat => 'A::type) u
+           ((op -::nat => nat => nat) i (1::nat))))"
+  by (import hollight DEF_vector)
+
+definition
+  CASEWISE :: "(('q_74835 => 'q_74839) * ('q_74840 => 'q_74835 => 'q_74799)) list
+=> 'q_74840 => 'q_74839 => 'q_74799"  where
+  "CASEWISE ==
+SOME CASEWISE::(('q_74835 => 'q_74839) *
+                ('q_74840 => 'q_74835 => 'q_74799)) list
+               => 'q_74840 => 'q_74839 => 'q_74799.
+   (ALL (f::'q_74840) x::'q_74839.
+       CASEWISE [] f x = (SOME y::'q_74799. True)) &
+   (ALL (h::('q_74835 => 'q_74839) * ('q_74840 => 'q_74835 => 'q_74799))
+       (t::(('q_74835 => 'q_74839) *
+            ('q_74840 => 'q_74835 => 'q_74799)) list)
+       (f::'q_74840) x::'q_74839.
+       CASEWISE (h # t) f x =
+       (if EX y::'q_74835. fst h y = x
+        then snd h f (SOME y::'q_74835. fst h y = x) else CASEWISE t f x))"
+
+lemma DEF_CASEWISE: "CASEWISE =
+(SOME CASEWISE::(('q_74835 => 'q_74839) *
+                 ('q_74840 => 'q_74835 => 'q_74799)) list
+                => 'q_74840 => 'q_74839 => 'q_74799.
+    (ALL (f::'q_74840) x::'q_74839.
+        CASEWISE [] f x = (SOME y::'q_74799. True)) &
+    (ALL (h::('q_74835 => 'q_74839) * ('q_74840 => 'q_74835 => 'q_74799))
+        (t::(('q_74835 => 'q_74839) *
+             ('q_74840 => 'q_74835 => 'q_74799)) list)
+        (f::'q_74840) x::'q_74839.
+        CASEWISE (h # t) f x =
+        (if EX y::'q_74835. fst h y = x
+         then snd h f (SOME y::'q_74835. fst h y = x) else CASEWISE t f x)))"
+  by (import hollight DEF_CASEWISE)
+
+definition
+  admissible :: "('q_75137 => 'q_75130 => bool)
+=> (('q_75137 => 'q_75133) => 'q_75143 => bool)
+   => ('q_75143 => 'q_75130)
+      => (('q_75137 => 'q_75133) => 'q_75143 => 'q_75138) => bool"  where
+  "admissible ==
+%(u::'q_75137 => 'q_75130 => bool)
+   (ua::('q_75137 => 'q_75133) => 'q_75143 => bool)
+   (ub::'q_75143 => 'q_75130)
+   uc::('q_75137 => 'q_75133) => 'q_75143 => 'q_75138.
+   ALL (f::'q_75137 => 'q_75133) (g::'q_75137 => 'q_75133) a::'q_75143.
+      ua f a & ua g a & (ALL z::'q_75137. u z (ub a) --> f z = g z) -->
+      uc f a = uc g a"
+
+lemma DEF_admissible: "admissible =
+(%(u::'q_75137 => 'q_75130 => bool)
+    (ua::('q_75137 => 'q_75133) => 'q_75143 => bool)
+    (ub::'q_75143 => 'q_75130)
+    uc::('q_75137 => 'q_75133) => 'q_75143 => 'q_75138.
+    ALL (f::'q_75137 => 'q_75133) (g::'q_75137 => 'q_75133) a::'q_75143.
+       ua f a & ua g a & (ALL z::'q_75137. u z (ub a) --> f z = g z) -->
+       uc f a = uc g a)"
+  by (import hollight DEF_admissible)
+
+definition
+  tailadmissible :: "('A => 'A => bool)
+=> (('A => 'B) => 'P => bool)
+   => ('P => 'A) => (('A => 'B) => 'P => 'B) => bool"  where
+  "tailadmissible ==
+%(u::'A => 'A => bool) (ua::('A => 'B) => 'P => bool) (ub::'P => 'A)
+   uc::('A => 'B) => 'P => 'B.
+   EX (P::('A => 'B) => 'P => bool) (G::('A => 'B) => 'P => 'A)
+      H::('A => 'B) => 'P => 'B.
+      (ALL (f::'A => 'B) (a::'P) y::'A.
+          P f a & u y (G f a) --> u y (ub a)) &
+      (ALL (f::'A => 'B) (g::'A => 'B) a::'P.
+          (ALL z::'A. u z (ub a) --> f z = g z) -->
+          P f a = P g a & G f a = G g a & H f a = H g a) &
+      (ALL (f::'A => 'B) a::'P.
+          ua f a --> uc f a = (if P f a then f (G f a) else H f a))"
+
+lemma DEF_tailadmissible: "tailadmissible =
+(%(u::'A => 'A => bool) (ua::('A => 'B) => 'P => bool) (ub::'P => 'A)
+    uc::('A => 'B) => 'P => 'B.
+    EX (P::('A => 'B) => 'P => bool) (G::('A => 'B) => 'P => 'A)
+       H::('A => 'B) => 'P => 'B.
+       (ALL (f::'A => 'B) (a::'P) y::'A.
+           P f a & u y (G f a) --> u y (ub a)) &
+       (ALL (f::'A => 'B) (g::'A => 'B) a::'P.
+           (ALL z::'A. u z (ub a) --> f z = g z) -->
+           P f a = P g a & G f a = G g a & H f a = H g a) &
+       (ALL (f::'A => 'B) a::'P.
+           ua f a --> uc f a = (if P f a then f (G f a) else H f a)))"
+  by (import hollight DEF_tailadmissible)
+
+definition
+  superadmissible :: "('q_75287 => 'q_75287 => bool)
+=> (('q_75287 => 'q_75289) => 'q_75295 => bool)
+   => ('q_75295 => 'q_75287)
+      => (('q_75287 => 'q_75289) => 'q_75295 => 'q_75289) => bool"  where
+  "superadmissible ==
+%(u::'q_75287 => 'q_75287 => bool)
+   (ua::('q_75287 => 'q_75289) => 'q_75295 => bool)
+   (ub::'q_75295 => 'q_75287)
+   uc::('q_75287 => 'q_75289) => 'q_75295 => 'q_75289.
+   admissible u (%(f::'q_75287 => 'q_75289) a::'q_75295. True) ub ua -->
+   tailadmissible u ua ub uc"
+
+lemma DEF_superadmissible: "superadmissible =
+(%(u::'q_75287 => 'q_75287 => bool)
+    (ua::('q_75287 => 'q_75289) => 'q_75295 => bool)
+    (ub::'q_75295 => 'q_75287)
+    uc::('q_75287 => 'q_75289) => 'q_75295 => 'q_75289.
+    admissible u (%(f::'q_75287 => 'q_75289) a::'q_75295. True) ub ua -->
+    tailadmissible u ua ub uc)"
+  by (import hollight DEF_superadmissible)
+
+lemma MATCH_SEQPATTERN: "_MATCH (x::'q_75330)
+ (_SEQPATTERN (r::'q_75330 => 'q_75323 => bool)
+   (s::'q_75330 => 'q_75323 => bool)) =
+(if Ex (r x) then _MATCH x r else _MATCH x s)"
+  by (import hollight MATCH_SEQPATTERN)
+
+lemma ADMISSIBLE_CONST: "admissible (u_556::'q_75351 => 'q_75350 => bool)
+ (x::('q_75351 => 'q_75352) => 'q_75353 => bool) (xa::'q_75353 => 'q_75350)
+ (%f::'q_75351 => 'q_75352. xb::'q_75353 => 'q_75354)"
+  by (import hollight ADMISSIBLE_CONST)
+
+lemma ADMISSIBLE_BASE: "(!!(f::'A => 'B) a::'P.
+    (xa::('A => 'B) => 'P => bool) f a
+    ==> (x::'A => 'A => bool) ((xc::'P => 'A) a) ((xb::'P => 'A) a))
+==> admissible x xa xb (%(f::'A => 'B) x::'P. f (xc x))"
+  by (import hollight ADMISSIBLE_BASE)
+
+lemma ADMISSIBLE_COMB: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
+ (xb::'P => 'A) (xc::('A => 'B) => 'P => 'C => 'D) &
+admissible x xa xb (xd::('A => 'B) => 'P => 'C)
+==> admissible x xa xb (%(f::'A => 'B) x::'P. xc f x (xd f x))"
+  by (import hollight ADMISSIBLE_COMB)
+
+lemma ADMISSIBLE_RAND: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
+ (xb::'P => 'A) (xd::('A => 'B) => 'P => 'C)
+==> admissible x xa xb
+     (%(f::'A => 'B) x::'P. (xc::'P => 'C => 'D) x (xd f x))"
+  by (import hollight ADMISSIBLE_RAND)
+
+lemma ADMISSIBLE_LAMBDA: "admissible (x::'A => 'A => bool)
+ (%f::'A => 'B.
+     SOME fa::'C * 'P => bool.
+        ALL (u::'C) x::'P. fa (u, x) = (xa::('A => 'B) => 'P => bool) f x)
+ (SOME f::'C * 'P => 'A. ALL (u::'C) x::'P. f (u, x) = (xb::'P => 'A) x)
+ (%f::'A => 'B.
+     SOME fa::'C * 'P => bool.
+        ALL (u::'C) x::'P.
+           fa (u, x) = (xc::('A => 'B) => 'C => 'P => bool) f u x)
+==> admissible x xa xb (%(f::'A => 'B) (x::'P) u::'C. xc f u x)"
+  by (import hollight ADMISSIBLE_LAMBDA)
+
+lemma ADMISSIBLE_NEST: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
+ (xb::'P => 'A) (xc::('A => 'B) => 'P => 'A) &
+(ALL (f::'A => 'B) a::'P. xa f a --> x (xc f a) (xb a))
+==> admissible x xa xb (%(f::'A => 'B) x::'P. f (xc f x))"
+  by (import hollight ADMISSIBLE_NEST)
+
+lemma ADMISSIBLE_COND: "admissible (u_556::'q_75688 => 'q_75687 => bool)
+ (p::('q_75688 => 'q_75719) => 'P => bool) (s::'P => 'q_75687)
+ (P::('q_75688 => 'q_75719) => 'P => bool) &
+admissible u_556 (%(f::'q_75688 => 'q_75719) x::'P. p f x & P f x) s
+ (h::('q_75688 => 'q_75719) => 'P => 'q_75744) &
+admissible u_556 (%(f::'q_75688 => 'q_75719) x::'P. p f x & ~ P f x) s
+ (k::('q_75688 => 'q_75719) => 'P => 'q_75744)
+==> admissible u_556 p s
+     (%(f::'q_75688 => 'q_75719) x::'P. if P f x then h f x else k f x)"
+  by (import hollight ADMISSIBLE_COND)
+
+lemma ADMISSIBLE_MATCH: "admissible (x::'q_75790 => 'q_75789 => bool)
+ (xa::('q_75790 => 'q_75791) => 'P => bool) (xb::'P => 'q_75789)
+ (xc::('q_75790 => 'q_75791) => 'P => 'q_75826) &
+admissible x xa xb
+ (%(f::'q_75790 => 'q_75791) x::'P.
+     (c::('q_75790 => 'q_75791) => 'P => 'q_75826 => 'q_75823 => bool) f x
+      (xc f x))
+==> admissible x xa xb
+     (%(f::'q_75790 => 'q_75791) x::'P. _MATCH (xc f x) (c f x))"
+  by (import hollight ADMISSIBLE_MATCH)
+
+lemma ADMISSIBLE_SEQPATTERN: "admissible (x::'q_75867 => 'q_75866 => bool)
+ (xa::('q_75867 => 'q_75929) => 'P => bool) (xb::'P => 'q_75866)
+ (%(f::'q_75867 => 'q_75929) x::'P.
+     Ex ((xc::('q_75867 => 'q_75929) => 'P => 'q_75955 => 'q_75945 => bool)
+          f x ((xe::('q_75867 => 'q_75929) => 'P => 'q_75955) f x))) &
+admissible x
+ (%(f::'q_75867 => 'q_75929) x::'P. xa f x & Ex (xc f x (xe f x))) xb
+ (%(f::'q_75867 => 'q_75929) x::'P. xc f x (xe f x)) &
+admissible x
+ (%(f::'q_75867 => 'q_75929) x::'P. xa f x & ~ Ex (xc f x (xe f x))) xb
+ (%(f::'q_75867 => 'q_75929) x::'P.
+     (xd::('q_75867 => 'q_75929) => 'P => 'q_75955 => 'q_75945 => bool) f x
+      (xe f x))
+==> admissible x xa xb
+     (%(f::'q_75867 => 'q_75929) x::'P.
+         _SEQPATTERN (xc f x) (xd f x) (xe f x))"
+  by (import hollight ADMISSIBLE_SEQPATTERN)
+
+lemma ADMISSIBLE_UNGUARDED_PATTERN: "admissible (u_556::'q_76041 => 'q_76040 => bool)
+ (p::('q_76041 => 'q_76088) => 'P => bool) (s::'P => 'q_76040)
+ (pat::('q_76041 => 'q_76088) => 'P => 'q_76121) &
+admissible u_556 p s (e::('q_76041 => 'q_76088) => 'P => 'q_76121) &
+admissible u_556 (%(f::'q_76041 => 'q_76088) x::'P. p f x & pat f x = e f x)
+ s (t::('q_76041 => 'q_76088) => 'P => 'q_76128) &
+admissible u_556 (%(f::'q_76041 => 'q_76088) x::'P. p f x & pat f x = e f x)
+ s (y::('q_76041 => 'q_76088) => 'P => 'q_76128)
+==> admissible u_556 p s
+     (%(f::'q_76041 => 'q_76088) x::'P.
+         _UNGUARDED_PATTERN (pat f x = e f x) (t f x = y f x))"
+  by (import hollight ADMISSIBLE_UNGUARDED_PATTERN)
+
+lemma ADMISSIBLE_GUARDED_PATTERN: "admissible (u_556::'q_76215 => 'q_76214 => bool)
+ (p::('q_76215 => 'q_76292) => 'P => bool) (s::'P => 'q_76214)
+ (pat::('q_76215 => 'q_76292) => 'P => 'q_76330) &
+admissible u_556 p s (e::('q_76215 => 'q_76292) => 'P => 'q_76330) &
+admissible u_556
+ (%(f::'q_76215 => 'q_76292) x::'P.
+     p f x &
+     pat f x = e f x & (q::('q_76215 => 'q_76292) => 'P => bool) f x)
+ s (t::('q_76215 => 'q_76292) => 'P => 'q_76339) &
+admissible u_556 (%(f::'q_76215 => 'q_76292) x::'P. p f x & pat f x = e f x)
+ s q &
+admissible u_556
+ (%(f::'q_76215 => 'q_76292) x::'P. p f x & pat f x = e f x & q f x) s
+ (y::('q_76215 => 'q_76292) => 'P => 'q_76339)
+==> admissible u_556 p s
+     (%(f::'q_76215 => 'q_76292) x::'P.
+         _GUARDED_PATTERN (pat f x = e f x) (q f x) (t f x = y f x))"
+  by (import hollight ADMISSIBLE_GUARDED_PATTERN)
+
+lemma ADMISSIBLE_NSUM: "admissible (x::'B => 'A => bool)
+ (%f::'B => 'C.
+     SOME fa::nat * 'P => bool.
+        ALL (k::nat) x::'P.
+           fa (k, x) =
+           ((xd::'P => nat) x <= k &
+            k <= (xe::'P => nat) x & (xa::('B => 'C) => 'P => bool) f x))
+ (SOME f::nat * 'P => 'A. ALL (k::nat) x::'P. f (k, x) = (xb::'P => 'A) x)
+ (%f::'B => 'C.
+     SOME fa::nat * 'P => nat.
+        ALL (k::nat) x::'P.
+           fa (k, x) = (xc::('B => 'C) => 'P => nat => nat) f x k)
+==> admissible x xa xb (%(f::'B => 'C) x::'P. nsum {xd x..xe x} (xc f x))"
+  by (import hollight ADMISSIBLE_NSUM)
+
+lemma ADMISSIBLE_SUM: "admissible (x::'B => 'A => bool)
+ (%f::'B => 'C.
+     SOME fa::nat * 'P => bool.
+        ALL (k::nat) x::'P.
+           fa (k, x) =
+           ((xd::'P => nat) x <= k &
+            k <= (xe::'P => nat) x & (xa::('B => 'C) => 'P => bool) f x))
+ (SOME f::nat * 'P => 'A. ALL (k::nat) x::'P. f (k, x) = (xb::'P => 'A) x)
+ (%f::'B => 'C.
+     SOME fa::nat * 'P => hollight.real.
+        ALL (k::nat) x::'P.
+           fa (k, x) = (xc::('B => 'C) => 'P => nat => hollight.real) f x k)
+==> admissible x xa xb
+     (%(f::'B => 'C) x::'P. hollight.sum {xd x..xe x} (xc f x))"
+  by (import hollight ADMISSIBLE_SUM)
+
+lemma ADMISSIBLE_MAP: "admissible (x::'A => 'q_76632 => bool) (xa::('A => 'B) => 'P => bool)
+ (xb::'P => 'q_76632) (xd::('A => 'B) => 'P => 'q_76647 list) &
+admissible x
+ (%f::'A => 'B.
+     SOME fa::'q_76647 * 'P => bool.
+        ALL (y::'q_76647) x::'P. fa (y, x) = (xa f x & y : set (xd f x)))
+ (SOME f::'q_76647 * 'P => 'q_76632.
+     ALL (y::'q_76647) x::'P. f (y, x) = xb x)
+ (%f::'A => 'B.
+     SOME fa::'q_76647 * 'P => 'q_76641.
+        ALL (y::'q_76647) x::'P.
+           fa (y, x) = (xc::('A => 'B) => 'P => 'q_76647 => 'q_76641) f x y)
+==> admissible x xa xb (%(f::'A => 'B) x::'P. map (xc f x) (xd f x))"
+  by (import hollight ADMISSIBLE_MAP)
+
+lemma ADMISSIBLE_MATCH_SEQPATTERN: "admissible (x::'q_76705 => 'q_76704 => bool)
+ (xa::('q_76705 => 'q_76770) => 'P => bool) (xb::'P => 'q_76704)
+ (%(f::'q_76705 => 'q_76770) x::'P.
+     Ex ((xc::('q_76705 => 'q_76770) => 'P => 'q_76825 => 'q_76794 => bool)
+          f x ((xe::('q_76705 => 'q_76770) => 'P => 'q_76825) f x))) &
+admissible x
+ (%(f::'q_76705 => 'q_76770) x::'P. xa f x & Ex (xc f x (xe f x))) xb
+ (%(f::'q_76705 => 'q_76770) x::'P. _MATCH (xe f x) (xc f x)) &
+admissible x
+ (%(f::'q_76705 => 'q_76770) x::'P. xa f x & ~ Ex (xc f x (xe f x))) xb
+ (%(f::'q_76705 => 'q_76770) x::'P.
+     _MATCH (xe f x)
+      ((xd::('q_76705 => 'q_76770) => 'P => 'q_76825 => 'q_76794 => bool) f
+        x))
+==> admissible x xa xb
+     (%(x::'q_76705 => 'q_76770) xa::'P.
+         _MATCH (xe x xa) (_SEQPATTERN (xc x xa) (xd x xa)))"
+  by (import hollight ADMISSIBLE_MATCH_SEQPATTERN)
+
+lemma ADMISSIBLE_IMP_SUPERADMISSIBLE: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
+ (xb::'P => 'A) (xc::('A => 'B) => 'P => 'B)
+==> superadmissible x xa xb xc"
+  by (import hollight ADMISSIBLE_IMP_SUPERADMISSIBLE)
+
+lemma SUPERADMISSIBLE_CONST: "superadmissible (u_556::'q_76904 => 'q_76904 => bool)
+ (p::('q_76904 => 'q_76906) => 'q_76905 => bool) (s::'q_76905 => 'q_76904)
+ (%f::'q_76904 => 'q_76906. c::'q_76905 => 'q_76906)"
+  by (import hollight SUPERADMISSIBLE_CONST)
+
+lemma SUPERADMISSIBLE_TAIL: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
+ (xb::'P => 'A) (xc::('A => 'B) => 'P => 'A) &
+(ALL (f::'A => 'B) a::'P.
+    xa f a --> (ALL y::'A. x y (xc f a) --> x y (xb a)))
+==> superadmissible x xa xb (%(f::'A => 'B) x::'P. f (xc f x))"
+  by (import hollight SUPERADMISSIBLE_TAIL)
+
+lemma SUPERADMISSIBLE_COND: "admissible (x::'A => 'A => bool) (xa::('A => 'B) => 'P => bool)
+ (xc::'P => 'A) (xb::('A => 'B) => 'P => bool) &
+superadmissible x (%(f::'A => 'B) x::'P. xa f x & xb f x) xc
+ (xd::('A => 'B) => 'P => 'B) &
+superadmissible x (%(f::'A => 'B) x::'P. xa f x & ~ xb f x) xc
+ (xe::('A => 'B) => 'P => 'B)
+==> superadmissible x xa xc
+     (%(f::'A => 'B) x::'P. if xb f x then xd f x else xe f x)"
+  by (import hollight SUPERADMISSIBLE_COND)
+
+lemma SUPERADMISSIBLE_MATCH_SEQPATTERN: "admissible (x::'q_77225 => 'q_77225 => bool)
+ (xa::('q_77225 => 'q_77341) => 'P => bool) (xb::'P => 'q_77225)
+ (%(f::'q_77225 => 'q_77341) x::'P.
+     Ex ((xc::('q_77225 => 'q_77341) => 'P => 'q_77340 => 'q_77341 => bool)
+          f x ((xe::('q_77225 => 'q_77341) => 'P => 'q_77340) f x))) &
+superadmissible x
+ (%(f::'q_77225 => 'q_77341) x::'P. xa f x & Ex (xc f x (xe f x))) xb
+ (%(f::'q_77225 => 'q_77341) x::'P. _MATCH (xe f x) (xc f x)) &
+superadmissible x
+ (%(f::'q_77225 => 'q_77341) x::'P. xa f x & ~ Ex (xc f x (xe f x))) xb
+ (%(f::'q_77225 => 'q_77341) x::'P.
+     _MATCH (xe f x)
+      ((xd::('q_77225 => 'q_77341) => 'P => 'q_77340 => 'q_77341 => bool) f
+        x))
+==> superadmissible x xa xb
+     (%(x::'q_77225 => 'q_77341) xa::'P.
+         _MATCH (xe x xa) (_SEQPATTERN (xc x xa) (xd x xa)))"
+  by (import hollight SUPERADMISSIBLE_MATCH_SEQPATTERN)
+
+lemma SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN: "(ALL (f::'A => 'B) (a::'P) (t::'Q) u::'Q.
+    (p::('A => 'B) => 'P => bool) f a &
+    (pat::'Q => 'D) t = (e::'P => 'D) a & pat u = e a -->
+    (arg::'P => 'Q => 'A) a t = arg a u) &
+(ALL (f::'A => 'B) (a::'P) t::'Q.
+    p f a & pat t = e a -->
+    (ALL y::'A.
+        (u_556::'A => 'A => bool) y (arg a t) -->
+        u_556 y ((s::'P => 'A) a)))
+==> superadmissible u_556 p s
+     (%(f::'A => 'B) x::'P.
+         _MATCH (e x)
+          (%(u::'D) v::'B.
+              EX t::'Q. _UNGUARDED_PATTERN (pat t = u) (f (arg x t) = v)))"
+  by (import hollight SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN)
+
+lemma SUPERADMISSIBLE_MATCH_GUARDED_PATTERN: "(ALL (f::'A => 'B) (a::'P) (t::'Q) u::'Q.
+    (p::('A => 'B) => 'P => bool) f a &
+    (pat::'Q => 'D) t = (e::'P => 'D) a &
+    (q::'P => 'Q => bool) a t & pat u = e a & q a u -->
+    (arg::'P => 'Q => 'A) a t = arg a u) &
+(ALL (f::'A => 'B) (a::'P) t::'Q.
+    p f a & q a t & pat t = e a -->
+    (ALL y::'A.
+        (u_556::'A => 'A => bool) y (arg a t) -->
+        u_556 y ((s::'P => 'A) a)))
+==> superadmissible u_556 p s
+     (%(f::'A => 'B) x::'P.
+         _MATCH (e x)
+          (%(u::'D) v::'B.
+              EX t::'Q.
+                 _GUARDED_PATTERN (pat t = u) (q x t) (f (arg x t) = v)))"
+  by (import hollight SUPERADMISSIBLE_MATCH_GUARDED_PATTERN)
+
+lemma cth: "[| !!(c::'q_78547) (x::'A) y::'A.
+      (p1::'A => 'q_78536) x = (p1'::'A => 'q_78536) y
+      ==> (p2::'q_78547 => 'A => 'q_78541) c x =
+          (p2'::'q_78547 => 'A => 'q_78541) c y;
+   p1' (x::'A) = p1 (y::'A) |]
+==> p2' (c::'q_78547) x = p2 c y"
+  by (import hollight cth)
+
+lemma SUPERADMISSIBLE_T: "superadmissible (u_556::'q_78694 => 'q_78694 => bool)
+ (%(f::'q_78694 => 'q_78696) x::'q_78700. True) (s::'q_78700 => 'q_78694)
+ (t::('q_78694 => 'q_78696) => 'q_78700 => 'q_78696) =
+tailadmissible u_556 (%(f::'q_78694 => 'q_78696) x::'q_78700. True) s t"
+  by (import hollight SUPERADMISSIBLE_T)
+
+lemma elemma0: "(ALL z::'q_78985 * 'q_78984.
+    (f::'q_78985 * 'q_78984 => 'q_78975) z =
+    (g::'q_78985 * 'q_78984 => 'q_78975) z) =
+(ALL (x::'q_78985) y::'q_78984. f (x, y) = g (x, y)) &
+(P::'q_79002 * 'q_79001 => 'q_78994) =
+(SOME f::'q_79002 * 'q_79001 => 'q_78994.
+    ALL (x::'q_79002) y::'q_79001. f (x, y) = P (x, y))"
+  by (import hollight elemma0)
+
+;end_setup
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL_Light/Generated/hollight.imp	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,2335 @@
+import
+
+import_segment "hollight"
+
+def_maps
+  "vector" > "vector_def"
+  "treal_of_num" > "treal_of_num_def"
+  "treal_neg" > "treal_neg_def"
+  "treal_mul" > "treal_mul_def"
+  "treal_le" > "treal_le_def"
+  "treal_inv" > "treal_inv_def"
+  "treal_eq" > "treal_eq_def"
+  "treal_add" > "treal_add_def"
+  "tailadmissible" > "tailadmissible_def"
+  "support" > "support_def"
+  "superadmissible" > "superadmissible_def"
+  "sum" > "sum_def"
+  "sndcart" > "sndcart_def"
+  "rem" > "rem_def"
+  "real_sub" > "real_sub_def"
+  "real_sgn" > "real_sgn_def"
+  "real_pow" > "real_pow_def"
+  "real_of_num" > "real_of_num_def"
+  "real_neg" > "real_neg_def"
+  "real_mul" > "real_mul_def"
+  "real_mod" > "real_mod_def"
+  "real_min" > "real_min_def"
+  "real_max" > "real_max_def"
+  "real_lt" > "real_lt_def"
+  "real_le" > "real_le_def"
+  "real_inv" > "real_inv_def"
+  "real_gt" > "real_gt_def"
+  "real_ge" > "real_ge_def"
+  "real_div" > "real_div_def"
+  "real_add" > "real_add_def"
+  "real_abs" > "real_abs_def"
+  "pastecart" > "pastecart_def"
+  "pairwise" > "pairwise_def"
+  "num_of_int" > "num_of_int_def"
+  "num_mod" > "num_mod_def"
+  "num_gcd" > "num_gcd_def"
+  "num_divides" > "num_divides_def"
+  "num_coprime" > "num_coprime_def"
+  "nsum" > "nsum_def"
+  "neutral" > "neutral_def"
+  "nadd_rinv" > "nadd_rinv_def"
+  "nadd_of_num" > "nadd_of_num_def"
+  "nadd_mul" > "nadd_mul_def"
+  "nadd_le" > "nadd_le_def"
+  "nadd_inv" > "nadd_inv_def"
+  "nadd_eq" > "nadd_eq_def"
+  "nadd_add" > "nadd_add_def"
+  "monoidal" > "monoidal_def"
+  "minimal" > "minimal_def"
+  "lambda" > "lambda_def"
+  "iterate" > "iterate_def"
+  "is_nadd" > "is_nadd_def"
+  "integer" > "integer_def"
+  "int_sub" > "int_sub_def"
+  "int_sgn" > "int_sgn_def"
+  "int_pow" > "int_pow_def"
+  "int_of_num" > "int_of_num_def"
+  "int_neg" > "int_neg_def"
+  "int_mul" > "int_mul_def"
+  "int_mod" > "int_mod_def"
+  "int_min" > "int_min_def"
+  "int_max" > "int_max_def"
+  "int_lt" > "int_lt_def"
+  "int_le" > "int_le_def"
+  "int_gt" > "int_gt_def"
+  "int_ge" > "int_ge_def"
+  "int_gcd" > "int_gcd_def"
+  "int_divides" > "int_divides_def"
+  "int_coprime" > "int_coprime_def"
+  "int_add" > "int_add_def"
+  "int_abs" > "int_abs_def"
+  "hreal_of_num" > "hreal_of_num_def"
+  "hreal_mul" > "hreal_mul_def"
+  "hreal_le" > "hreal_le_def"
+  "hreal_inv" > "hreal_inv_def"
+  "hreal_add" > "hreal_add_def"
+  "fstcart" > "fstcart_def"
+  "eqeq" > "eqeq_def"
+  "div" > "div_def"
+  "dist" > "dist_def"
+  "dimindex" > "dimindex_def"
+  "admissible" > "admissible_def"
+  "_UNGUARDED_PATTERN" > "_UNGUARDED_PATTERN_def"
+  "_SEQPATTERN" > "_SEQPATTERN_def"
+  "_MATCH" > "_MATCH_def"
+  "_GUARDED_PATTERN" > "_GUARDED_PATTERN_def"
+  "_FUNCTION" > "_FUNCTION_def"
+  "_FALSITY_" > "_FALSITY__def"
+  "_11937" > "_11937_def"
+  "ZRECSPACE" > "ZRECSPACE_def"
+  "ZCONSTR" > "ZCONSTR_def"
+  "ZBOT" > "ZBOT_def"
+  "UNCURRY" > "UNCURRY_def"
+  "SURJ" > "SURJ_def"
+  "SING" > "SING_def"
+  "REST" > "REST_def"
+  "PASSOC" > "PASSOC_def"
+  "PAIRWISE" > "PAIRWISE_def"
+  "NUM_REP" > "NUM_REP_def"
+  "NUMSUM" > "NUMSUM_def"
+  "NUMSND" > "NUMSND_def"
+  "NUMRIGHT" > "NUMRIGHT_def"
+  "NUMPAIR" > "NUMPAIR_def"
+  "NUMLEFT" > "NUMLEFT_def"
+  "NUMFST" > "NUMFST_def"
+  "LET_END" > "LET_END_def"
+  "ITSET" > "ITSET_def"
+  "ISO" > "ISO_def"
+  "INJP" > "INJP_def"
+  "INJN" > "INJN_def"
+  "INJF" > "INJF_def"
+  "INJA" > "INJA_def"
+  "INJ" > "INJ_def"
+  "IND_SUC" > "IND_SUC_def"
+  "IND_0" > "IND_0_def"
+  "HAS_SIZE" > "HAS_SIZE_def"
+  "FNIL" > "FNIL_def"
+  "FINREC" > "FINREC_def"
+  "FCONS" > "FCONS_def"
+  "DECIMAL" > "DECIMAL_def"
+  "CROSS" > "CROSS_def"
+  "COUNTABLE" > "COUNTABLE_def"
+  "CONSTR" > "CONSTR_def"
+  "CASEWISE" > "CASEWISE_def"
+  "CARD" > "CARD_def"
+  "BOTTOM" > "BOTTOM_def"
+  "BIJ" > "BIJ_def"
+  "ASCII" > "ASCII_def"
+  ">_c" > ">_c_def"
+  ">=_c" > ">=_c_def"
+  "=_c" > "=_c_def"
+  "<_c" > "<_c_def"
+  "<=_c" > "<=_c_def"
+  "$" > "$_def"
+
+type_maps
+  "sum" > "Sum_Type.sum"
+  "recspace" > "HOLLight.hollight.recspace"
+  "real" > "HOLLight.hollight.real"
+  "prod" > "Product_Type.prod"
+  "option" > "Datatype.option"
+  "num" > "Nat.nat"
+  "nadd" > "HOLLight.hollight.nadd"
+  "list" > "List.list"
+  "int" > "HOLLight.hollight.int"
+  "ind" > "Nat.ind"
+  "hreal" > "HOLLight.hollight.hreal"
+  "fun" > "fun"
+  "finite_sum" > "HOLLight.hollight.finite_sum"
+  "finite_image" > "HOLLight.hollight.finite_image"
+  "char" > "HOLLight.hollight.char"
+  "cart" > "HOLLight.hollight.cart"
+  "bool" > "HOL.bool"
+  "N_3" > "HOLLight.hollight.N_3"
+  "N_2" > "HOLLight.hollight.N_2"
+  "N_1" > "Product_Type.unit"
+
+const_maps
+  "~" > "HOL.Not"
+  "vector" > "HOLLight.hollight.vector"
+  "treal_of_num" > "HOLLight.hollight.treal_of_num"
+  "treal_neg" > "HOLLight.hollight.treal_neg"
+  "treal_mul" > "HOLLight.hollight.treal_mul"
+  "treal_le" > "HOLLight.hollight.treal_le"
+  "treal_inv" > "HOLLight.hollight.treal_inv"
+  "treal_eq" > "HOLLight.hollight.treal_eq"
+  "treal_add" > "HOLLight.hollight.treal_add"
+  "tailadmissible" > "HOLLight.hollight.tailadmissible"
+  "support" > "HOLLight.hollight.support"
+  "superadmissible" > "HOLLight.hollight.superadmissible"
+  "sum" > "HOLLight.hollight.sum"
+  "sndcart" > "HOLLight.hollight.sndcart"
+  "set_of_list" > "List.set"
+  "rem" > "HOLLight.hollight.rem"
+  "real_sub" > "HOLLight.hollight.real_sub"
+  "real_sgn" > "HOLLight.hollight.real_sgn"
+  "real_pow" > "HOLLight.hollight.real_pow"
+  "real_of_num" > "HOLLight.hollight.real_of_num"
+  "real_neg" > "HOLLight.hollight.real_neg"
+  "real_mul" > "HOLLight.hollight.real_mul"
+  "real_mod" > "HOLLight.hollight.real_mod"
+  "real_min" > "HOLLight.hollight.real_min"
+  "real_max" > "HOLLight.hollight.real_max"
+  "real_lt" > "HOLLight.hollight.real_lt"
+  "real_le" > "HOLLight.hollight.real_le"
+  "real_inv" > "HOLLight.hollight.real_inv"
+  "real_gt" > "HOLLight.hollight.real_gt"
+  "real_ge" > "HOLLight.hollight.real_ge"
+  "real_div" > "HOLLight.hollight.real_div"
+  "real_add" > "HOLLight.hollight.real_add"
+  "real_abs" > "HOLLight.hollight.real_abs"
+  "pastecart" > "HOLLight.hollight.pastecart"
+  "pairwise" > "HOLLight.hollight.pairwise"
+  "one" > "Product_Type.Unity"
+  "o" > "Fun.comp"
+  "num_of_int" > "HOLLight.hollight.num_of_int"
+  "num_mod" > "HOLLight.hollight.num_mod"
+  "num_gcd" > "HOLLight.hollight.num_gcd"
+  "num_divides" > "HOLLight.hollight.num_divides"
+  "num_coprime" > "HOLLight.hollight.num_coprime"
+  "nsum" > "HOLLight.hollight.nsum"
+  "neutral" > "HOLLight.hollight.neutral"
+  "nadd_rinv" > "HOLLight.hollight.nadd_rinv"
+  "nadd_of_num" > "HOLLight.hollight.nadd_of_num"
+  "nadd_mul" > "HOLLight.hollight.nadd_mul"
+  "nadd_le" > "HOLLight.hollight.nadd_le"
+  "nadd_inv" > "HOLLight.hollight.nadd_inv"
+  "nadd_eq" > "HOLLight.hollight.nadd_eq"
+  "nadd_add" > "HOLLight.hollight.nadd_add"
+  "monoidal" > "HOLLight.hollight.monoidal"
+  "mk_pair" > "Product_Type.Pair_Rep"
+  "mk_num" > "Fun.id"
+  "minimal" > "HOLLight.hollight.minimal"
+  "list_EX" > "List.list_ex"
+  "list_ALL" > "List.list_all"
+  "lambda" > "HOLLight.hollight.lambda"
+  "iterate" > "HOLLight.hollight.iterate"
+  "is_nadd" > "HOLLight.hollight.is_nadd"
+  "integer" > "HOLLight.hollight.integer"
+  "int_sub" > "HOLLight.hollight.int_sub"
+  "int_sgn" > "HOLLight.hollight.int_sgn"
+  "int_pow" > "HOLLight.hollight.int_pow"
+  "int_of_num" > "HOLLight.hollight.int_of_num"
+  "int_neg" > "HOLLight.hollight.int_neg"
+  "int_mul" > "HOLLight.hollight.int_mul"
+  "int_mod" > "HOLLight.hollight.int_mod"
+  "int_min" > "HOLLight.hollight.int_min"
+  "int_max" > "HOLLight.hollight.int_max"
+  "int_lt" > "HOLLight.hollight.int_lt"
+  "int_le" > "HOLLight.hollight.int_le"
+  "int_gt" > "HOLLight.hollight.int_gt"
+  "int_ge" > "HOLLight.hollight.int_ge"
+  "int_gcd" > "HOLLight.hollight.int_gcd"
+  "int_divides" > "HOLLight.hollight.int_divides"
+  "int_coprime" > "HOLLight.hollight.int_coprime"
+  "int_add" > "HOLLight.hollight.int_add"
+  "int_abs" > "HOLLight.hollight.int_abs"
+  "hreal_of_num" > "HOLLight.hollight.hreal_of_num"
+  "hreal_mul" > "HOLLight.hollight.hreal_mul"
+  "hreal_le" > "HOLLight.hollight.hreal_le"
+  "hreal_inv" > "HOLLight.hollight.hreal_inv"
+  "hreal_add" > "HOLLight.hollight.hreal_add"
+  "fstcart" > "HOLLight.hollight.fstcart"
+  "eqeq" > "HOLLight.hollight.eqeq"
+  "div" > "HOLLight.hollight.div"
+  "dist" > "HOLLight.hollight.dist"
+  "dimindex" > "HOLLight.hollight.dimindex"
+  "admissible" > "HOLLight.hollight.admissible"
+  "_UNGUARDED_PATTERN" > "HOLLight.hollight._UNGUARDED_PATTERN"
+  "_SEQPATTERN" > "HOLLight.hollight._SEQPATTERN"
+  "_MATCH" > "HOLLight.hollight._MATCH"
+  "_GUARDED_PATTERN" > "HOLLight.hollight._GUARDED_PATTERN"
+  "_FUNCTION" > "HOLLight.hollight._FUNCTION"
+  "_FALSITY_" > "HOLLight.hollight._FALSITY_"
+  "_11937" > "HOLLight.hollight._11937"
+  "_0" > "Groups.zero_class.zero" :: "nat"
+  "\\/" > "HOL.disj"
+  "ZRECSPACE" > "HOLLight.hollight.ZRECSPACE"
+  "ZIP" > "List.zip"
+  "ZCONSTR" > "HOLLight.hollight.ZCONSTR"
+  "ZBOT" > "HOLLight.hollight.ZBOT"
+  "WF" > "Wellfounded.wfP"
+  "UNIV" > "Orderings.top_class.top" :: "'a => bool"
+  "UNIONS" > "Complete_Lattices.Sup_class.Sup" :: "(('a => bool) => bool) => 'a => bool"
+  "UNION" > "Lattices.sup_class.sup" :: "('a => bool) => ('a => bool) => 'a => bool"
+  "UNCURRY" > "HOLLight.hollight.UNCURRY"
+  "TL" > "List.tl"
+  "T" > "HOL.True"
+  "SURJ" > "HOLLight.hollight.SURJ"
+  "SUC" > "Nat.Suc"
+  "SUBSET" > "Orderings.ord_class.less_eq" :: "('a => bool) => ('a => bool) => bool"
+  "SOME" > "Datatype.Some"
+  "SND" > "Product_Type.snd"
+  "SING" > "HOLLight.hollight.SING"
+  "SETSPEC" > "HOLLightCompat.SETSPEC"
+  "REVERSE" > "List.rev"
+  "REST" > "HOLLight.hollight.REST"
+  "REPLICATE" > "List.replicate"
+  "PSUBSET" > "Orderings.ord_class.less" :: "('a => bool) => ('a => bool) => bool"
+  "PRE" > "HOLLightCompat.Pred"
+  "PASSOC" > "HOLLight.hollight.PASSOC"
+  "PAIRWISE" > "HOLLight.hollight.PAIRWISE"
+  "OUTR" > "HOLLightCompat.OUTR"
+  "OUTL" > "HOLLightCompat.OUTL"
+  "ONTO" > "Fun.surj"
+  "ONE_ONE" > "Fun.inj"
+  "ODD" > "HOLLightCompat.ODD"
+  "NUM_REP" > "HOLLight.hollight.NUM_REP"
+  "NUMSUM" > "HOLLight.hollight.NUMSUM"
+  "NUMSND" > "HOLLight.hollight.NUMSND"
+  "NUMRIGHT" > "HOLLight.hollight.NUMRIGHT"
+  "NUMPAIR" > "HOLLight.hollight.NUMPAIR"
+  "NUMLEFT" > "HOLLight.hollight.NUMLEFT"
+  "NUMFST" > "HOLLight.hollight.NUMFST"
+  "NUMERAL" > "HOLLightCompat.NUMERAL"
+  "NULL" > "List.null"
+  "NONE" > "Datatype.None"
+  "NIL" > "List.list.Nil"
+  "MOD" > "Divides.div_class.mod" :: "nat => nat => nat"
+  "MIN" > "Orderings.ord_class.min" :: "nat => nat => nat"
+  "MEM" > "HOLLightList.list_mem"
+  "MEASURE" > "HOLLightCompat.MEASURE"
+  "MAX" > "Orderings.ord_class.max" :: "nat => nat => nat"
+  "MAP2" > "HOLLightList.map2"
+  "MAP" > "List.map"
+  "LET_END" > "HOLLight.hollight.LET_END"
+  "LET" > "HOLLightCompat.LET"
+  "LENGTH" > "List.length"
+  "LAST" > "List.last"
+  "ITSET" > "HOLLight.hollight.ITSET"
+  "ITLIST2" > "HOLLightList.fold2"
+  "ITLIST" > "List.foldr"
+  "ISO" > "HOLLight.hollight.ISO"
+  "INTERS" > "Complete_Lattices.Inf_class.Inf" :: "(('a => bool) => bool) => 'a => bool"
+  "INTER" > "Lattices.inf_class.inf" :: "('a => bool) => ('a => bool) => 'a => bool"
+  "INSERT" > "Set.insert"
+  "INR" > "Sum_Type.Inr"
+  "INL" > "Sum_Type.Inl"
+  "INJP" > "HOLLight.hollight.INJP"
+  "INJN" > "HOLLight.hollight.INJN"
+  "INJF" > "HOLLight.hollight.INJF"
+  "INJA" > "HOLLight.hollight.INJA"
+  "INJ" > "HOLLight.hollight.INJ"
+  "INFINITE" > "HOLLightCompat.INFINITE"
+  "IND_SUC" > "HOLLight.hollight.IND_SUC"
+  "IND_0" > "HOLLight.hollight.IND_0"
+  "IN" > "Set.member"
+  "IMAGE" > "Set.image"
+  "I" > "Fun.id"
+  "HD" > "List.hd"
+  "HAS_SIZE" > "HOLLight.hollight.HAS_SIZE"
+  "GSPEC" > "Set.Collect"
+  "GEQ" > "HOL.eq"
+  "GABS" > "Hilbert_Choice.Eps"
+  "FST" > "Product_Type.fst"
+  "FNIL" > "HOLLight.hollight.FNIL"
+  "FINREC" > "HOLLight.hollight.FINREC"
+  "FINITE" > "Finite_Set.finite"
+  "FILTER" > "List.filter"
+  "FCONS" > "HOLLight.hollight.FCONS"
+  "FACT" > "Fact.fact_class.fact" :: "nat => nat"
+  "F" > "HOL.False"
+  "EXP" > "Power.power_class.power" :: "nat => nat => nat"
+  "EVEN" > "Parity.even_odd_class.even" :: "nat => bool"
+  "EMPTY" > "Orderings.bot_class.bot" :: "'a => bool"
+  "EL" > "HOLLightList.list_el"
+  "DIV" > "Divides.div_class.div" :: "nat => nat => nat"
+  "DISJOINT" > "HOLLightCompat.DISJOINT"
+  "DIFF" > "Groups.minus_class.minus" :: "('a => bool) => ('a => bool) => 'a => bool"
+  "DELETE" > "HOLLightCompat.DELETE"
+  "DECIMAL" > "HOLLight.hollight.DECIMAL"
+  "CURRY" > "Product_Type.curry"
+  "CROSS" > "HOLLight.hollight.CROSS"
+  "COUNTABLE" > "HOLLight.hollight.COUNTABLE"
+  "CONSTR" > "HOLLight.hollight.CONSTR"
+  "CONS" > "List.list.Cons"
+  "COND" > "HOL.If"
+  "CHOICE" > "Hilbert_Choice.Eps"
+  "CASEWISE" > "HOLLight.hollight.CASEWISE"
+  "CARD" > "HOLLight.hollight.CARD"
+  "BUTLAST" > "List.butlast"
+  "BOTTOM" > "HOLLight.hollight.BOTTOM"
+  "BIT1" > "HOLLightCompat.NUMERAL_BIT1"
+  "BIT0" > "HOLLightCompat.NUMERAL_BIT0"
+  "BIJ" > "HOLLight.hollight.BIJ"
+  "ASCII" > "HOLLight.hollight.ASCII"
+  "APPEND" > "List.append"
+  "ALL2" > "List.list_all2"
+  "@" > "Hilbert_Choice.Eps"
+  "?!" > "HOL.Ex1"
+  "?" > "HOL.Ex"
+  ">_c" > "HOLLight.hollight.>_c"
+  ">=_c" > "HOLLight.hollight.>=_c"
+  ">=" > "Orderings.ord_class.greater_eq" :: "nat => nat => bool"
+  ">" > "Orderings.ord_class.greater" :: "nat => nat => bool"
+  "=_c" > "HOLLight.hollight.=_c"
+  "==>" > "HOL.implies"
+  "=" > "HOL.eq"
+  "<_c" > "HOLLight.hollight.<_c"
+  "<=_c" > "HOLLight.hollight.<=_c"
+  "<=" > "Orderings.ord_class.less_eq" :: "nat => nat => bool"
+  "<" > "Orderings.ord_class.less" :: "nat => nat => bool"
+  "/\\" > "HOL.conj"
+  ".." > "HOLLightCompat.dotdot"
+  "-" > "Groups.minus_class.minus" :: "nat => nat => nat"
+  "," > "Product_Type.Pair"
+  "+" > "Groups.plus_class.plus" :: "nat => nat => nat"
+  "*" > "Groups.times_class.times" :: "nat => nat => nat"
+  "$" > "HOLLight.hollight.$"
+  "!" > "HOL.All"
+
+const_renames
+  "EX" > "list_EX"
+  "ALL" > "list_ALL"
+  "==" > "eqeq"
+
+thm_maps
+  "vector_def" > "HOLLight.hollight.vector_def"
+  "treal_of_num_def" > "HOLLight.hollight.treal_of_num_def"
+  "treal_neg_def" > "HOLLight.hollight.treal_neg_def"
+  "treal_mul_def" > "HOLLight.hollight.treal_mul_def"
+  "treal_le_def" > "HOLLight.hollight.treal_le_def"
+  "treal_inv_def" > "HOLLight.hollight.treal_inv_def"
+  "treal_eq_def" > "HOLLight.hollight.treal_eq_def"
+  "treal_add_def" > "HOLLight.hollight.treal_add_def"
+  "th_cond" > "HOLLight.hollight.th_cond"
+  "th" > "HOL.eta_contract_eq"
+  "tailadmissible_def" > "HOLLight.hollight.tailadmissible_def"
+  "support_def" > "HOLLight.hollight.support_def"
+  "superadmissible_def" > "HOLLight.hollight.superadmissible_def"
+  "sum_def" > "HOLLight.hollight.sum_def"
+  "string_INFINITE" > "List.infinite_UNIV_listI"
+  "sth" > "HOLLight.hollight.sth"
+  "sndcart_def" > "HOLLight.hollight.sndcart_def"
+  "right_th" > "HOLLight.hollight.right_th"
+  "rem_def" > "HOLLight.hollight.rem_def"
+  "real_sub_def" > "HOLLight.hollight.real_sub_def"
+  "real_sgn_def" > "HOLLight.hollight.real_sgn_def"
+  "real_pow_def" > "HOLLight.hollight.real_pow_def"
+  "real_of_num_def" > "HOLLight.hollight.real_of_num_def"
+  "real_neg_def" > "HOLLight.hollight.real_neg_def"
+  "real_mul_def" > "HOLLight.hollight.real_mul_def"
+  "real_mod_def" > "HOLLight.hollight.real_mod_def"
+  "real_min_def" > "HOLLight.hollight.real_min_def"
+  "real_max_def" > "HOLLight.hollight.real_max_def"
+  "real_lt_def" > "HOLLight.hollight.real_lt_def"
+  "real_le_def" > "HOLLight.hollight.real_le_def"
+  "real_inv_def" > "HOLLight.hollight.real_inv_def"
+  "real_gt_def" > "HOLLight.hollight.real_gt_def"
+  "real_ge_def" > "HOLLight.hollight.real_ge_def"
+  "real_div_def" > "HOLLight.hollight.real_div_def"
+  "real_add_def" > "HOLLight.hollight.real_add_def"
+  "real_abs_def" > "HOLLight.hollight.real_abs_def"
+  "real_INFINITE" > "HOLLight.hollight.real_INFINITE"
+  "pastecart_def" > "HOLLight.hollight.pastecart_def"
+  "pairwise_def" > "HOLLight.hollight.pairwise_def"
+  "pair_RECURSION" > "HOLLight.hollight.pair_RECURSION"
+  "pair_INDUCT" > "Product_Type.prod.induct"
+  "one_axiom" > "HOLLight.hollight.one_axiom"
+  "one_RECURSION" > "HOLLight.hollight.one_RECURSION"
+  "one_INDUCT" > "Product_Type.unit.induct"
+  "one_Axiom" > "HOLLight.hollight.one_Axiom"
+  "one" > "HOLLightCompat.one"
+  "o_THM" > "Fun.comp_def"
+  "o_ASSOC" > "HOLLight.hollight.o_ASSOC"
+  "num_of_int_def" > "HOLLight.hollight.num_of_int_def"
+  "num_mod_def" > "HOLLight.hollight.num_mod_def"
+  "num_gcd_def" > "HOLLight.hollight.num_gcd_def"
+  "num_divides_def" > "HOLLight.hollight.num_divides_def"
+  "num_coprime_def" > "HOLLight.hollight.num_coprime_def"
+  "num_congruent" > "HOLLight.hollight.num_congruent"
+  "num_WOP" > "HOLLight.hollight.num_WOP"
+  "num_WF" > "Nat.nat_less_induct"
+  "num_RECURSION_STD" > "HOLLight.hollight.num_RECURSION_STD"
+  "num_MAX" > "HOLLight.hollight.num_MAX"
+  "num_INFINITE" > "Finite_Set.infinite_UNIV_char_0"
+  "num_INDUCTION" > "Fact.fact_nat.induct"
+  "num_FINITE_AVOID" > "HOLLight.hollight.num_FINITE_AVOID"
+  "num_FINITE" > "HOLLight.hollight.num_FINITE"
+  "num_CASES" > "Nat.nat.nchotomy"
+  "num_Axiom" > "HOLLightCompat.num_Axiom"
+  "nsum_def" > "HOLLight.hollight.nsum_def"
+  "neutral_def" > "HOLLight.hollight.neutral_def"
+  "nadd_rinv_def" > "HOLLight.hollight.nadd_rinv_def"
+  "nadd_of_num_def" > "HOLLight.hollight.nadd_of_num_def"
+  "nadd_mul_def" > "HOLLight.hollight.nadd_mul_def"
+  "nadd_le_def" > "HOLLight.hollight.nadd_le_def"
+  "nadd_inv_def" > "HOLLight.hollight.nadd_inv_def"
+  "nadd_eq_def" > "HOLLight.hollight.nadd_eq_def"
+  "nadd_add_def" > "HOLLight.hollight.nadd_add_def"
+  "monoidal_def" > "HOLLight.hollight.monoidal_def"
+  "minimal_def" > "HOLLight.hollight.minimal_def"
+  "list_INDUCT" > "List.list.induct"
+  "list_CASES" > "List.list.nchotomy"
+  "lambda_def" > "HOLLight.hollight.lambda_def"
+  "iterate_def" > "HOLLight.hollight.iterate_def"
+  "is_nadd_def" > "HOLLight.hollight.is_nadd_def"
+  "is_nadd_0" > "HOLLight.hollight.is_nadd_0"
+  "is_int" > "HOLLight.hollight.is_int"
+  "integer_def" > "HOLLight.hollight.integer_def"
+  "int_sub_th" > "HOLLight.hollight.int_sub_th"
+  "int_sub_def" > "HOLLight.hollight.int_sub_def"
+  "int_sgn_th" > "HOLLight.hollight.int_sgn_th"
+  "int_sgn_def" > "HOLLight.hollight.int_sgn_def"
+  "int_pow_th" > "HOLLight.hollight.int_pow_th"
+  "int_pow_def" > "HOLLight.hollight.int_pow_def"
+  "int_of_num_th" > "HOLLight.hollight.int_of_num_th"
+  "int_of_num_def" > "HOLLight.hollight.int_of_num_def"
+  "int_neg_th" > "HOLLight.hollight.int_neg_th"
+  "int_neg_def" > "HOLLight.hollight.int_neg_def"
+  "int_mul_th" > "HOLLight.hollight.int_mul_th"
+  "int_mul_def" > "HOLLight.hollight.int_mul_def"
+  "int_mod_def" > "HOLLight.hollight.int_mod_def"
+  "int_min_th" > "HOLLight.hollight.int_min_th"
+  "int_min_def" > "HOLLight.hollight.int_min_def"
+  "int_max_th" > "HOLLight.hollight.int_max_th"
+  "int_max_def" > "HOLLight.hollight.int_max_def"
+  "int_lt_def" > "HOLLight.hollight.int_lt_def"
+  "int_le_def" > "HOLLight.hollight.int_le_def"
+  "int_gt_def" > "HOLLight.hollight.int_gt_def"
+  "int_ge_def" > "HOLLight.hollight.int_ge_def"
+  "int_gcd_def" > "HOLLight.hollight.int_gcd_def"
+  "int_eq" > "HOLLight.hollight.int.real_of_int_inject"
+  "int_divides_def" > "HOLLight.hollight.int_divides_def"
+  "int_coprime_def" > "HOLLight.hollight.int_coprime_def"
+  "int_congruent" > "HOLLight.hollight.int_congruent"
+  "int_add_th" > "HOLLight.hollight.int_add_th"
+  "int_add_def" > "HOLLight.hollight.int_add_def"
+  "int_abs_th" > "HOLLight.hollight.int_abs_th"
+  "int_abs_def" > "HOLLight.hollight.int_abs_def"
+  "hreal_of_num_def" > "HOLLight.hollight.hreal_of_num_def"
+  "hreal_mul_def" > "HOLLight.hollight.hreal_mul_def"
+  "hreal_le_def" > "HOLLight.hollight.hreal_le_def"
+  "hreal_inv_def" > "HOLLight.hollight.hreal_inv_def"
+  "hreal_add_def" > "HOLLight.hollight.hreal_add_def"
+  "fstcart_def" > "HOLLight.hollight.fstcart_def"
+  "eqeq_def" > "HOLLight.hollight.eqeq_def"
+  "elemma0" > "HOLLight.hollight.elemma0"
+  "div_def" > "HOLLight.hollight.div_def"
+  "dist_def" > "HOLLight.hollight.dist_def"
+  "dimindex_def" > "HOLLight.hollight.dimindex_def"
+  "dest_int_rep" > "HOLLight.hollight.dest_int_rep"
+  "cth" > "HOLLight.hollight.cth"
+  "bool_RECURSION" > "HOLLight.hollight.bool_RECURSION"
+  "bool_INDUCT" > "Product_Type.bool.induct"
+  "ax__3" > "HOL4Setup.INFINITY_AX"
+  "ax__2" > "Hilbert_Choice.someI"
+  "ax__1" > "HOL.eta_contract_eq"
+  "admissible_def" > "HOLLight.hollight.admissible_def"
+  "_UNGUARDED_PATTERN_def" > "HOLLight.hollight._UNGUARDED_PATTERN_def"
+  "_SEQPATTERN_def" > "HOLLight.hollight._SEQPATTERN_def"
+  "_MATCH_def" > "HOLLight.hollight._MATCH_def"
+  "_GUARDED_PATTERN_def" > "HOLLight.hollight._GUARDED_PATTERN_def"
+  "_FUNCTION_def" > "HOLLight.hollight._FUNCTION_def"
+  "_FALSITY__def" > "HOLLight.hollight._FALSITY__def"
+  "_11937_def" > "HOLLight.hollight._11937_def"
+  "ZRECSPACE_def" > "HOLLight.hollight.ZRECSPACE_def"
+  "ZIP" > "HOLLightList.ZIP"
+  "ZCONSTR_def" > "HOLLight.hollight.ZCONSTR_def"
+  "ZCONSTR_ZBOT" > "HOLLight.hollight.ZCONSTR_ZBOT"
+  "ZBOT_def" > "HOLLight.hollight.ZBOT_def"
+  "WLOG_LT" > "HOLLight.hollight.WLOG_LT"
+  "WLOG_LE" > "HOLLight.hollight.WLOG_LE"
+  "WF_num" > "HOLLight.hollight.WF_num"
+  "WF_UREC_WF" > "HOLLight.hollight.WF_UREC_WF"
+  "WF_UREC" > "HOLLight.hollight.WF_UREC"
+  "WF_SUBSET" > "HOLLight.hollight.WF_SUBSET"
+  "WF_REFL" > "HOLLight.hollight.WF_REFL"
+  "WF_REC_num" > "HOLLight.hollight.WF_REC_num"
+  "WF_REC_WF" > "HOLLight.hollight.WF_REC_WF"
+  "WF_REC_TAIL_GENERAL" > "HOLLight.hollight.WF_REC_TAIL_GENERAL"
+  "WF_REC_TAIL" > "HOLLight.hollight.WF_REC_TAIL"
+  "WF_REC_INVARIANT" > "HOLLight.hollight.WF_REC_INVARIANT"
+  "WF_REC" > "HOLLight.hollight.WF_REC"
+  "WF_POINTWISE" > "HOLLight.hollight.WF_POINTWISE"
+  "WF_MEASURE_GEN" > "HOLLight.hollight.WF_MEASURE_GEN"
+  "WF_MEASURE" > "HOLLight.hollight.WF_MEASURE"
+  "WF_LEX_DEPENDENT" > "HOLLight.hollight.WF_LEX_DEPENDENT"
+  "WF_LEX" > "HOLLight.hollight.WF_LEX"
+  "WF_INT_MEASURE_2" > "HOLLight.hollight.WF_INT_MEASURE_2"
+  "WF_INT_MEASURE" > "HOLLight.hollight.WF_INT_MEASURE"
+  "WF_IND" > "HOLLight.hollight.WF_IND"
+  "WF_FINITE" > "HOLLight.hollight.WF_FINITE"
+  "WF_FALSE" > "Wellfounded.wfP_empty"
+  "WF_EREC" > "HOLLight.hollight.WF_EREC"
+  "WF_EQ" > "HOLLight.hollight.WF_EQ"
+  "WF_DCHAIN" > "HOLLight.hollight.WF_DCHAIN"
+  "UNWIND_THM2" > "HOL.simp_thms_39"
+  "UNWIND_THM1" > "HOL.simp_thms_40"
+  "UNIV_SUBSET" > "Orderings.top_class.top_unique"
+  "UNIV_NOT_EMPTY" > "Set.UNIV_not_empty"
+  "UNIQUE_SKOLEM_THM" > "HOL.choice_eq"
+  "UNIQUE_SKOLEM_ALT" > "HOLLight.hollight.UNIQUE_SKOLEM_ALT"
+  "UNION_UNIV" > "HOLLight.hollight.UNION_UNIV"
+  "UNION_SUBSET" > "Lattices.semilattice_sup_class.le_sup_iff"
+  "UNION_OVER_INTER" > "Lattices.distrib_lattice_class.distrib_3"
+  "UNION_IDEMPOT" > "Big_Operators.lattice_class.Sup_fin.idem"
+  "UNION_EMPTY" > "HOLLight.hollight.UNION_EMPTY"
+  "UNION_COMM" > "Lattices.lattice_class.inf_sup_aci_5"
+  "UNION_ASSOC" > "Lattices.lattice_class.inf_sup_aci_6"
+  "UNION_ACI" > "HOLLight.hollight.UNION_ACI"
+  "UNIONS_UNION" > "Complete_Lattices.Union_Un_distrib"
+  "UNIONS_SUBSET" > "HOLLight.hollight.UNIONS_SUBSET"
+  "UNIONS_INTERS" > "HOLLight.hollight.UNIONS_INTERS"
+  "UNIONS_INSERT" > "Complete_Lattices.Union_insert"
+  "UNIONS_IMAGE" > "HOLLight.hollight.UNIONS_IMAGE"
+  "UNIONS_GSPEC" > "HOLLight.hollight.UNIONS_GSPEC"
+  "UNIONS_2" > "Complete_Lattices.Un_eq_Union"
+  "UNIONS_1" > "Complete_Lattices.complete_lattice_class.Sup_singleton"
+  "UNIONS_0" > "Complete_Lattices.Union_empty"
+  "UNCURRY_def" > "HOLLight.hollight.UNCURRY_def"
+  "TYDEF_recspace" > "HOLLight.hollight.TYDEF_recspace"
+  "TYDEF_real" > "HOLLight.hollight.TYDEF_real"
+  "TYDEF_nadd" > "HOLLight.hollight.TYDEF_nadd"
+  "TYDEF_int" > "HOLLight.hollight.TYDEF_int"
+  "TYDEF_hreal" > "HOLLight.hollight.TYDEF_hreal"
+  "TYDEF_finite_sum" > "HOLLight.hollight.TYDEF_finite_sum"
+  "TYDEF_finite_image" > "HOLLight.hollight.TYDEF_finite_image"
+  "TYDEF_char" > "HOLLight.hollight.TYDEF_char"
+  "TYDEF_cart" > "HOLLight.hollight.TYDEF_cart"
+  "TYDEF_3" > "HOLLight.hollight.TYDEF_3"
+  "TYDEF_2" > "HOLLight.hollight.TYDEF_2"
+  "TWO" > "HOLLight.hollight.TWO"
+  "TRIV_OR_FORALL_THM" > "HOLLight.hollight.TRIV_OR_FORALL_THM"
+  "TRIV_FORALL_OR_THM" > "HOLLight.hollight.TRIV_FORALL_OR_THM"
+  "TRIV_FORALL_IMP_THM" > "HOLLight.hollight.TRIV_FORALL_IMP_THM"
+  "TRIV_EXISTS_IMP_THM" > "HOLLight.hollight.TRIV_EXISTS_IMP_THM"
+  "TRIV_EXISTS_AND_THM" > "HOLLight.hollight.TRIV_EXISTS_AND_THM"
+  "TRIV_AND_EXISTS_THM" > "HOLLight.hollight.TRIV_AND_EXISTS_THM"
+  "TREAL_OF_NUM_WELLDEF" > "HOLLight.hollight.TREAL_OF_NUM_WELLDEF"
+  "TREAL_OF_NUM_MUL" > "HOLLight.hollight.TREAL_OF_NUM_MUL"
+  "TREAL_OF_NUM_LE" > "HOLLight.hollight.TREAL_OF_NUM_LE"
+  "TREAL_OF_NUM_EQ" > "HOLLight.hollight.TREAL_OF_NUM_EQ"
+  "TREAL_OF_NUM_ADD" > "HOLLight.hollight.TREAL_OF_NUM_ADD"
+  "TREAL_NEG_WELLDEF" > "HOLLight.hollight.TREAL_NEG_WELLDEF"
+  "TREAL_MUL_WELLDEFR" > "HOLLight.hollight.TREAL_MUL_WELLDEFR"
+  "TREAL_MUL_WELLDEF" > "HOLLight.hollight.TREAL_MUL_WELLDEF"
+  "TREAL_MUL_SYM_EQ" > "HOLLight.hollight.TREAL_MUL_SYM_EQ"
+  "TREAL_MUL_SYM" > "HOLLight.hollight.TREAL_MUL_SYM"
+  "TREAL_MUL_LINV" > "HOLLight.hollight.TREAL_MUL_LINV"
+  "TREAL_MUL_LID" > "HOLLight.hollight.TREAL_MUL_LID"
+  "TREAL_MUL_ASSOC" > "HOLLight.hollight.TREAL_MUL_ASSOC"
+  "TREAL_LE_WELLDEF" > "HOLLight.hollight.TREAL_LE_WELLDEF"
+  "TREAL_LE_TRANS" > "HOLLight.hollight.TREAL_LE_TRANS"
+  "TREAL_LE_TOTAL" > "HOLLight.hollight.TREAL_LE_TOTAL"
+  "TREAL_LE_REFL" > "HOLLight.hollight.TREAL_LE_REFL"
+  "TREAL_LE_MUL" > "HOLLight.hollight.TREAL_LE_MUL"
+  "TREAL_LE_LADD_IMP" > "HOLLight.hollight.TREAL_LE_LADD_IMP"
+  "TREAL_LE_ANTISYM" > "HOLLight.hollight.TREAL_LE_ANTISYM"
+  "TREAL_INV_WELLDEF" > "HOLLight.hollight.TREAL_INV_WELLDEF"
+  "TREAL_INV_0" > "HOLLight.hollight.TREAL_INV_0"
+  "TREAL_EQ_TRANS" > "HOLLight.hollight.TREAL_EQ_TRANS"
+  "TREAL_EQ_SYM" > "HOLLight.hollight.TREAL_EQ_SYM"
+  "TREAL_EQ_REFL" > "HOLLight.hollight.TREAL_EQ_REFL"
+  "TREAL_EQ_IMP_LE" > "HOLLight.hollight.TREAL_EQ_IMP_LE"
+  "TREAL_EQ_AP" > "HOLLight.hollight.TREAL_EQ_AP"
+  "TREAL_ADD_WELLDEFR" > "HOLLight.hollight.TREAL_ADD_WELLDEFR"
+  "TREAL_ADD_WELLDEF" > "HOLLight.hollight.TREAL_ADD_WELLDEF"
+  "TREAL_ADD_SYM_EQ" > "HOLLight.hollight.TREAL_ADD_SYM_EQ"
+  "TREAL_ADD_SYM" > "HOLLight.hollight.TREAL_ADD_SYM"
+  "TREAL_ADD_LINV" > "HOLLight.hollight.TREAL_ADD_LINV"
+  "TREAL_ADD_LID" > "HOLLight.hollight.TREAL_ADD_LID"
+  "TREAL_ADD_LDISTRIB" > "HOLLight.hollight.TREAL_ADD_LDISTRIB"
+  "TREAL_ADD_ASSOC" > "HOLLight.hollight.TREAL_ADD_ASSOC"
+  "TRANSITIVE_STEPWISE_LT_EQ" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LT_EQ"
+  "TRANSITIVE_STEPWISE_LT" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LT"
+  "TRANSITIVE_STEPWISE_LE_EQ" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LE_EQ"
+  "TRANSITIVE_STEPWISE_LE" > "HOLLight.hollight.TRANSITIVE_STEPWISE_LE"
+  "TOPOLOGICAL_SORT" > "HOLLight.hollight.TOPOLOGICAL_SORT"
+  "SWAP_FORALL_THM" > "HOL.all_comm"
+  "SWAP_EXISTS_THM" > "HOL.ex_comm"
+  "SURJ_def" > "HOLLight.hollight.SURJ_def"
+  "SURJECTIVE_RIGHT_INVERSE" > "HOLLight.hollight.SURJECTIVE_RIGHT_INVERSE"
+  "SURJECTIVE_ON_RIGHT_INVERSE" > "HOLLight.hollight.SURJECTIVE_ON_RIGHT_INVERSE"
+  "SURJECTIVE_ON_IMAGE" > "HOLLight.hollight.SURJECTIVE_ON_IMAGE"
+  "SURJECTIVE_MAP" > "HOLLightList.SURJECTIVE_MAP"
+  "SURJECTIVE_IMAGE_THM" > "HOLLight.hollight.SURJECTIVE_IMAGE_THM"
+  "SURJECTIVE_IMAGE_EQ" > "HOLLight.hollight.SURJECTIVE_IMAGE_EQ"
+  "SURJECTIVE_IMAGE" > "HOLLight.hollight.SURJECTIVE_IMAGE"
+  "SURJECTIVE_IFF_INJECTIVE_GEN" > "HOLLight.hollight.SURJECTIVE_IFF_INJECTIVE_GEN"
+  "SURJECTIVE_IFF_INJECTIVE" > "HOLLight.hollight.SURJECTIVE_IFF_INJECTIVE"
+  "SURJECTIVE_FORALL_THM" > "HOLLight.hollight.SURJECTIVE_FORALL_THM"
+  "SURJECTIVE_EXISTS_THM" > "HOLLight.hollight.SURJECTIVE_EXISTS_THM"
+  "SUPPORT_SUPPORT" > "HOLLight.hollight.SUPPORT_SUPPORT"
+  "SUPPORT_SUBSET" > "HOLLight.hollight.SUPPORT_SUBSET"
+  "SUPPORT_EMPTY" > "HOLLight.hollight.SUPPORT_EMPTY"
+  "SUPPORT_DELTA" > "HOLLight.hollight.SUPPORT_DELTA"
+  "SUPPORT_CLAUSES" > "HOLLight.hollight.SUPPORT_CLAUSES"
+  "SUPERADMISSIBLE_TAIL" > "HOLLight.hollight.SUPERADMISSIBLE_TAIL"
+  "SUPERADMISSIBLE_T" > "HOLLight.hollight.SUPERADMISSIBLE_T"
+  "SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN" > "HOLLight.hollight.SUPERADMISSIBLE_MATCH_UNGUARDED_PATTERN"
+  "SUPERADMISSIBLE_MATCH_SEQPATTERN" > "HOLLight.hollight.SUPERADMISSIBLE_MATCH_SEQPATTERN"
+  "SUPERADMISSIBLE_MATCH_GUARDED_PATTERN" > "HOLLight.hollight.SUPERADMISSIBLE_MATCH_GUARDED_PATTERN"
+  "SUPERADMISSIBLE_CONST" > "HOLLight.hollight.SUPERADMISSIBLE_CONST"
+  "SUPERADMISSIBLE_COND" > "HOLLight.hollight.SUPERADMISSIBLE_COND"
+  "SUM_ZERO_EXISTS" > "HOLLight.hollight.SUM_ZERO_EXISTS"
+  "SUM_UNION_RZERO" > "HOLLight.hollight.SUM_UNION_RZERO"
+  "SUM_UNION_NONZERO" > "HOLLight.hollight.SUM_UNION_NONZERO"
+  "SUM_UNION_LZERO" > "HOLLight.hollight.SUM_UNION_LZERO"
+  "SUM_UNION_EQ" > "HOLLight.hollight.SUM_UNION_EQ"
+  "SUM_UNIONS_NONZERO" > "HOLLight.hollight.SUM_UNIONS_NONZERO"
+  "SUM_UNION" > "HOLLight.hollight.SUM_UNION"
+  "SUM_TRIV_NUMSEG" > "HOLLight.hollight.SUM_TRIV_NUMSEG"
+  "SUM_SWAP_NUMSEG" > "HOLLight.hollight.SUM_SWAP_NUMSEG"
+  "SUM_SWAP" > "HOLLight.hollight.SUM_SWAP"
+  "SUM_SUPPORT" > "HOLLight.hollight.SUM_SUPPORT"
+  "SUM_SUPERSET" > "HOLLight.hollight.SUM_SUPERSET"
+  "SUM_SUM_RESTRICT" > "HOLLight.hollight.SUM_SUM_RESTRICT"
+  "SUM_SUM_PRODUCT" > "HOLLight.hollight.SUM_SUM_PRODUCT"
+  "SUM_SUB_NUMSEG" > "HOLLight.hollight.SUM_SUB_NUMSEG"
+  "SUM_SUBSET_SIMPLE" > "HOLLight.hollight.SUM_SUBSET_SIMPLE"
+  "SUM_SUBSET" > "HOLLight.hollight.SUM_SUBSET"
+  "SUM_SUB" > "HOLLight.hollight.SUM_SUB"
+  "SUM_SING_NUMSEG" > "HOLLight.hollight.SUM_SING_NUMSEG"
+  "SUM_SING" > "HOLLight.hollight.SUM_SING"
+  "SUM_RMUL" > "HOLLight.hollight.SUM_RMUL"
+  "SUM_RESTRICT_SET" > "HOLLight.hollight.SUM_RESTRICT_SET"
+  "SUM_RESTRICT" > "HOLLight.hollight.SUM_RESTRICT"
+  "SUM_POS_LE_NUMSEG" > "HOLLight.hollight.SUM_POS_LE_NUMSEG"
+  "SUM_POS_LE" > "HOLLight.hollight.SUM_POS_LE"
+  "SUM_POS_EQ_0_NUMSEG" > "HOLLight.hollight.SUM_POS_EQ_0_NUMSEG"
+  "SUM_POS_EQ_0" > "HOLLight.hollight.SUM_POS_EQ_0"
+  "SUM_POS_BOUND" > "HOLLight.hollight.SUM_POS_BOUND"
+  "SUM_PARTIAL_SUC" > "HOLLight.hollight.SUM_PARTIAL_SUC"
+  "SUM_PARTIAL_PRE" > "HOLLight.hollight.SUM_PARTIAL_PRE"
+  "SUM_PAIR" > "HOLLight.hollight.SUM_PAIR"
+  "SUM_OFFSET_0" > "HOLLight.hollight.SUM_OFFSET_0"
+  "SUM_OFFSET" > "HOLLight.hollight.SUM_OFFSET"
+  "SUM_NEG" > "HOLLight.hollight.SUM_NEG"
+  "SUM_MULTICOUNT_GEN" > "HOLLight.hollight.SUM_MULTICOUNT_GEN"
+  "SUM_MULTICOUNT" > "HOLLight.hollight.SUM_MULTICOUNT"
+  "SUM_LT_ALL" > "HOLLight.hollight.SUM_LT_ALL"
+  "SUM_LT" > "HOLLight.hollight.SUM_LT"
+  "SUM_LMUL" > "HOLLight.hollight.SUM_LMUL"
+  "SUM_LE_NUMSEG" > "HOLLight.hollight.SUM_LE_NUMSEG"
+  "SUM_LE_INCLUDED" > "HOLLight.hollight.SUM_LE_INCLUDED"
+  "SUM_LE" > "HOLLight.hollight.SUM_LE"
+  "SUM_INJECTION" > "HOLLight.hollight.SUM_INJECTION"
+  "SUM_INCL_EXCL" > "HOLLight.hollight.SUM_INCL_EXCL"
+  "SUM_IMAGE_NONZERO" > "HOLLight.hollight.SUM_IMAGE_NONZERO"
+  "SUM_IMAGE_LE" > "HOLLight.hollight.SUM_IMAGE_LE"
+  "SUM_IMAGE_GEN" > "HOLLight.hollight.SUM_IMAGE_GEN"
+  "SUM_IMAGE" > "HOLLight.hollight.SUM_IMAGE"
+  "SUM_GROUP" > "HOLLight.hollight.SUM_GROUP"
+  "SUM_EQ_SUPERSET" > "HOLLight.hollight.SUM_EQ_SUPERSET"
+  "SUM_EQ_NUMSEG" > "HOLLight.hollight.SUM_EQ_NUMSEG"
+  "SUM_EQ_GENERAL_INVERSES" > "HOLLight.hollight.SUM_EQ_GENERAL_INVERSES"
+  "SUM_EQ_GENERAL" > "HOLLight.hollight.SUM_EQ_GENERAL"
+  "SUM_EQ_0_NUMSEG" > "HOLLight.hollight.SUM_EQ_0_NUMSEG"
+  "SUM_EQ_0" > "HOLLight.hollight.SUM_EQ_0"
+  "SUM_EQ" > "HOLLight.hollight.SUM_EQ"
+  "SUM_DIFFS_ALT" > "HOLLight.hollight.SUM_DIFFS_ALT"
+  "SUM_DIFFS" > "HOLLight.hollight.SUM_DIFFS"
+  "SUM_DIFF" > "HOLLight.hollight.SUM_DIFF"
+  "SUM_DELTA" > "HOLLight.hollight.SUM_DELTA"
+  "SUM_DELETE_CASES" > "HOLLight.hollight.SUM_DELETE_CASES"
+  "SUM_DELETE" > "HOLLight.hollight.SUM_DELETE"
+  "SUM_CONST_NUMSEG" > "HOLLight.hollight.SUM_CONST_NUMSEG"
+  "SUM_CONST" > "HOLLight.hollight.SUM_CONST"
+  "SUM_COMBINE_R" > "HOLLight.hollight.SUM_COMBINE_R"
+  "SUM_COMBINE_L" > "HOLLight.hollight.SUM_COMBINE_L"
+  "SUM_CLOSED" > "HOLLight.hollight.SUM_CLOSED"
+  "SUM_CLAUSES_RIGHT" > "HOLLight.hollight.SUM_CLAUSES_RIGHT"
+  "SUM_CLAUSES_NUMSEG" > "HOLLight.hollight.SUM_CLAUSES_NUMSEG"
+  "SUM_CLAUSES_LEFT" > "HOLLight.hollight.SUM_CLAUSES_LEFT"
+  "SUM_CLAUSES" > "HOLLight.hollight.SUM_CLAUSES"
+  "SUM_CASES_1" > "HOLLight.hollight.SUM_CASES_1"
+  "SUM_CASES" > "HOLLight.hollight.SUM_CASES"
+  "SUM_BOUND_LT_GEN" > "HOLLight.hollight.SUM_BOUND_LT_GEN"
+  "SUM_BOUND_LT_ALL" > "HOLLight.hollight.SUM_BOUND_LT_ALL"
+  "SUM_BOUND_LT" > "HOLLight.hollight.SUM_BOUND_LT"
+  "SUM_BOUND_GEN" > "HOLLight.hollight.SUM_BOUND_GEN"
+  "SUM_BOUND" > "HOLLight.hollight.SUM_BOUND"
+  "SUM_BIJECTION" > "HOLLight.hollight.SUM_BIJECTION"
+  "SUM_ADD_SPLIT" > "HOLLight.hollight.SUM_ADD_SPLIT"
+  "SUM_ADD_NUMSEG" > "HOLLight.hollight.SUM_ADD_NUMSEG"
+  "SUM_ADD_GEN" > "HOLLight.hollight.SUM_ADD_GEN"
+  "SUM_ADD" > "HOLLight.hollight.SUM_ADD"
+  "SUM_ABS_NUMSEG" > "HOLLight.hollight.SUM_ABS_NUMSEG"
+  "SUM_ABS_LE" > "HOLLight.hollight.SUM_ABS_LE"
+  "SUM_ABS_BOUND" > "HOLLight.hollight.SUM_ABS_BOUND"
+  "SUM_ABS" > "HOLLight.hollight.SUM_ABS"
+  "SUM_0" > "HOLLight.hollight.SUM_0"
+  "SUC_SUB1" > "Nat.diff_Suc_1"
+  "SUC_INJ" > "HOLLightCompat.SUC_INJ"
+  "SUB_SUC" > "Nat.diff_Suc_Suc"
+  "SUB_REFL" > "Nat.diff_self_eq_0"
+  "SUB_PRESUC" > "HOLLight.hollight.SUB_PRESUC"
+  "SUB_EQ_0" > "Nat.diff_is_0_eq"
+  "SUB_ELIM_THM" > "HOLLight.hollight.SUB_ELIM_THM"
+  "SUB_ADD_RCANCEL" > "Nat.diff_cancel2"
+  "SUB_ADD_LCANCEL" > "Nat.diff_cancel"
+  "SUB_ADD" > "Nat.le_add_diff_inverse2"
+  "SUB_0" > "HOLLight.hollight.SUB_0"
+  "SUBSET_UNIV" > "Orderings.top_class.top_greatest"
+  "SUBSET_UNION_ABSORPTION" > "Lattices.semilattice_sup_class.le_iff_sup"
+  "SUBSET_UNIONS" > "Complete_Lattices.Union_mono"
+  "SUBSET_UNION" > "HOLLight.hollight.SUBSET_UNION"
+  "SUBSET_TRANS" > "Orderings.order_trans_rules_23"
+  "SUBSET_RESTRICT" > "HOLLight.hollight.SUBSET_RESTRICT"
+  "SUBSET_REFL" > "Inductive.basic_monos_1"
+  "SUBSET_PSUBSET_TRANS" > "Orderings.order_le_less_trans"
+  "SUBSET_NUMSEG" > "HOLLight.hollight.SUBSET_NUMSEG"
+  "SUBSET_INTER_ABSORPTION" > "Lattices.semilattice_inf_class.le_iff_inf"
+  "SUBSET_INTER" > "Lattices.semilattice_inf_class.le_inf_iff"
+  "SUBSET_INSERT_DELETE" > "HOLLight.hollight.SUBSET_INSERT_DELETE"
+  "SUBSET_INSERT" > "Set.subset_insert"
+  "SUBSET_IMAGE" > "Set.subset_image_iff"
+  "SUBSET_EMPTY" > "Orderings.bot_class.bot_unique"
+  "SUBSET_DIFF" > "Set.Diff_subset"
+  "SUBSET_DELETE" > "HOLLight.hollight.SUBSET_DELETE"
+  "SUBSET_CARD_EQ" > "HOLLight.hollight.SUBSET_CARD_EQ"
+  "SUBSET_ANTISYM_EQ" > "Orderings.order_class.eq_iff"
+  "SUBSET_ANTISYM" > "Orderings.order_antisym"
+  "SND" > "Product_Type.snd_conv"
+  "SKOLEM_THM" > "HOLLight.hollight.SKOLEM_THM"
+  "SING_def" > "HOLLight.hollight.SING_def"
+  "SING_SUBSET" > "HOLLight.hollight.SING_SUBSET"
+  "SING_GSPEC" > "HOLLight.hollight.SING_GSPEC"
+  "SIMPLE_IMAGE_GEN" > "HOLLight.hollight.SIMPLE_IMAGE_GEN"
+  "SIMPLE_IMAGE" > "HOLLight.hollight.SIMPLE_IMAGE"
+  "SET_RECURSION_LEMMA" > "HOLLight.hollight.SET_RECURSION_LEMMA"
+  "SET_PROVE_CASES" > "HOLLight.hollight.SET_PROVE_CASES"
+  "SET_PAIR_THM" > "HOLLight.hollight.SET_PAIR_THM"
+  "SET_OF_LIST_MAP" > "List.set_map"
+  "SET_OF_LIST_EQ_EMPTY" > "List.set_empty"
+  "SET_OF_LIST_APPEND" > "List.set_append"
+  "SET_CASES" > "HOLLight.hollight.SET_CASES"
+  "SEMIRING_PTHS" > "HOLLight.hollight.SEMIRING_PTHS"
+  "SELECT_UNIQUE" > "HOLLight.hollight.SELECT_UNIQUE"
+  "SELECT_REFL" > "Hilbert_Choice.some_eq_trivial"
+  "SELECT_LEMMA" > "Hilbert_Choice.some_sym_eq_trivial"
+  "RIGHT_SUB_DISTRIB" > "Nat.diff_mult_distrib"
+  "RIGHT_OR_FORALL_THM" > "HOL.all_simps_4"
+  "RIGHT_OR_EXISTS_THM" > "HOL.ex_simps_4"
+  "RIGHT_OR_DISTRIB" > "Groebner_Basis.dnf_2"
+  "RIGHT_IMP_FORALL_THM" > "HOL.all_simps_6"
+  "RIGHT_IMP_EXISTS_THM" > "HOL.ex_simps_6"
+  "RIGHT_FORALL_OR_THM" > "HOL.all_simps_4"
+  "RIGHT_FORALL_IMP_THM" > "HOL.all_simps_6"
+  "RIGHT_EXISTS_IMP_THM" > "HOL.ex_simps_6"
+  "RIGHT_EXISTS_AND_THM" > "HOL.ex_simps_2"
+  "RIGHT_AND_FORALL_THM" > "HOL.all_simps_2"
+  "RIGHT_AND_EXISTS_THM" > "HOL.ex_simps_2"
+  "RIGHT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_26"
+  "REVERSE_REVERSE" > "List.rev_rev_ident"
+  "REVERSE_APPEND" > "List.rev_append"
+  "REST_def" > "HOLLight.hollight.REST_def"
+  "REFL_CLAUSE" > "Groebner_Basis.bool_simps_6"
+  "REAL_WLOG_LT" > "HOLLight.hollight.REAL_WLOG_LT"
+  "REAL_WLOG_LE" > "HOLLight.hollight.REAL_WLOG_LE"
+  "REAL_SUB_TRIANGLE" > "HOLLight.hollight.REAL_SUB_TRIANGLE"
+  "REAL_SUB_SUB2" > "HOLLight.hollight.REAL_SUB_SUB2"
+  "REAL_SUB_SUB" > "HOLLight.hollight.REAL_SUB_SUB"
+  "REAL_SUB_RZERO" > "HOLLight.hollight.REAL_SUB_RZERO"
+  "REAL_SUB_RNEG" > "HOLLight.hollight.REAL_SUB_RNEG"
+  "REAL_SUB_REFL" > "HOLLight.hollight.REAL_SUB_REFL"
+  "REAL_SUB_RDISTRIB" > "HOLLight.hollight.REAL_SUB_RDISTRIB"
+  "REAL_SUB_POW_R1" > "HOLLight.hollight.REAL_SUB_POW_R1"
+  "REAL_SUB_POW_L1" > "HOLLight.hollight.REAL_SUB_POW_L1"
+  "REAL_SUB_POW" > "HOLLight.hollight.REAL_SUB_POW"
+  "REAL_SUB_NEG2" > "HOLLight.hollight.REAL_SUB_NEG2"
+  "REAL_SUB_LZERO" > "HOLLight.hollight.REAL_SUB_LZERO"
+  "REAL_SUB_LT" > "HOLLight.hollight.REAL_SUB_LT"
+  "REAL_SUB_LNEG" > "HOLLight.hollight.REAL_SUB_LNEG"
+  "REAL_SUB_LE" > "HOLLight.hollight.REAL_SUB_LE"
+  "REAL_SUB_LDISTRIB" > "HOLLight.hollight.REAL_SUB_LDISTRIB"
+  "REAL_SUB_INV" > "HOLLight.hollight.REAL_SUB_INV"
+  "REAL_SUB_ADD2" > "HOLLight.hollight.REAL_SUB_ADD2"
+  "REAL_SUB_ADD" > "HOLLight.hollight.REAL_SUB_ADD"
+  "REAL_SUB_ABS" > "HOLLight.hollight.REAL_SUB_ABS"
+  "REAL_SUB_0" > "HOLLight.hollight.REAL_SUB_0"
+  "REAL_SOS_EQ_0" > "HOLLight.hollight.REAL_SOS_EQ_0"
+  "REAL_SGN_NEG" > "HOLLight.hollight.REAL_SGN_NEG"
+  "REAL_SGN_MUL" > "HOLLight.hollight.REAL_SGN_MUL"
+  "REAL_SGN_INV" > "HOLLight.hollight.REAL_SGN_INV"
+  "REAL_SGN_DIV" > "HOLLight.hollight.REAL_SGN_DIV"
+  "REAL_SGN_ABS" > "HOLLight.hollight.REAL_SGN_ABS"
+  "REAL_SGN_0" > "HOLLight.hollight.REAL_SGN_0"
+  "REAL_SGN" > "HOLLight.hollight.REAL_SGN"
+  "REAL_RNEG_UNIQ" > "HOLLight.hollight.REAL_RNEG_UNIQ"
+  "REAL_POW_ZERO" > "HOLLight.hollight.REAL_POW_ZERO"
+  "REAL_POW_SUB" > "HOLLight.hollight.REAL_POW_SUB"
+  "REAL_POW_POW" > "HOLLight.hollight.REAL_POW_POW"
+  "REAL_POW_ONE" > "HOLLight.hollight.REAL_POW_ONE"
+  "REAL_POW_NZ" > "HOLLight.hollight.REAL_POW_NZ"
+  "REAL_POW_NEG" > "HOLLight.hollight.REAL_POW_NEG"
+  "REAL_POW_MUL" > "HOLLight.hollight.REAL_POW_MUL"
+  "REAL_POW_MONO_LT" > "HOLLight.hollight.REAL_POW_MONO_LT"
+  "REAL_POW_MONO_INV" > "HOLLight.hollight.REAL_POW_MONO_INV"
+  "REAL_POW_MONO" > "HOLLight.hollight.REAL_POW_MONO"
+  "REAL_POW_LT_1" > "HOLLight.hollight.REAL_POW_LT_1"
+  "REAL_POW_LT2_REV" > "HOLLight.hollight.REAL_POW_LT2_REV"
+  "REAL_POW_LT2_ODD_EQ" > "HOLLight.hollight.REAL_POW_LT2_ODD_EQ"
+  "REAL_POW_LT2_ODD" > "HOLLight.hollight.REAL_POW_LT2_ODD"
+  "REAL_POW_LT2" > "HOLLight.hollight.REAL_POW_LT2"
+  "REAL_POW_LT" > "HOLLight.hollight.REAL_POW_LT"
+  "REAL_POW_LE_1" > "HOLLight.hollight.REAL_POW_LE_1"
+  "REAL_POW_LE2_REV" > "HOLLight.hollight.REAL_POW_LE2_REV"
+  "REAL_POW_LE2_ODD_EQ" > "HOLLight.hollight.REAL_POW_LE2_ODD_EQ"
+  "REAL_POW_LE2_ODD" > "HOLLight.hollight.REAL_POW_LE2_ODD"
+  "REAL_POW_LE2" > "HOLLight.hollight.REAL_POW_LE2"
+  "REAL_POW_LE" > "HOLLight.hollight.REAL_POW_LE"
+  "REAL_POW_INV" > "HOLLight.hollight.REAL_POW_INV"
+  "REAL_POW_EQ_ODD_EQ" > "HOLLight.hollight.REAL_POW_EQ_ODD_EQ"
+  "REAL_POW_EQ_ODD" > "HOLLight.hollight.REAL_POW_EQ_ODD"
+  "REAL_POW_EQ_EQ" > "HOLLight.hollight.REAL_POW_EQ_EQ"
+  "REAL_POW_EQ_ABS" > "HOLLight.hollight.REAL_POW_EQ_ABS"
+  "REAL_POW_EQ_1_IMP" > "HOLLight.hollight.REAL_POW_EQ_1_IMP"
+  "REAL_POW_EQ_1" > "HOLLight.hollight.REAL_POW_EQ_1"
+  "REAL_POW_EQ_0" > "HOLLight.hollight.REAL_POW_EQ_0"
+  "REAL_POW_EQ" > "HOLLight.hollight.REAL_POW_EQ"
+  "REAL_POW_DIV" > "HOLLight.hollight.REAL_POW_DIV"
+  "REAL_POW_ADD" > "HOLLight.hollight.REAL_POW_ADD"
+  "REAL_POW_2" > "HOLLight.hollight.REAL_POW_2"
+  "REAL_POW_1_LT" > "HOLLight.hollight.REAL_POW_1_LT"
+  "REAL_POW_1_LE" > "HOLLight.hollight.REAL_POW_1_LE"
+  "REAL_POW_1" > "HOLLight.hollight.REAL_POW_1"
+  "REAL_POW2_ABS" > "HOLLight.hollight.REAL_POW2_ABS"
+  "REAL_POS_NZ" > "HOLLight.hollight.REAL_POS_NZ"
+  "REAL_POS" > "HOLLight.hollight.REAL_POS"
+  "REAL_POLY_NEG_CLAUSES" > "HOLLight.hollight.REAL_POLY_NEG_CLAUSES"
+  "REAL_POLY_CLAUSES" > "HOLLight.hollight.REAL_POLY_CLAUSES"
+  "REAL_OF_NUM_SUM_NUMSEG" > "HOLLight.hollight.REAL_OF_NUM_SUM_NUMSEG"
+  "REAL_OF_NUM_SUM" > "HOLLight.hollight.REAL_OF_NUM_SUM"
+  "REAL_OF_NUM_SUC" > "HOLLight.hollight.REAL_OF_NUM_SUC"
+  "REAL_OF_NUM_SUB" > "HOLLight.hollight.REAL_OF_NUM_SUB"
+  "REAL_OF_NUM_POW" > "HOLLight.hollight.REAL_OF_NUM_POW"
+  "REAL_OF_NUM_MIN" > "HOLLight.hollight.REAL_OF_NUM_MIN"
+  "REAL_OF_NUM_MAX" > "HOLLight.hollight.REAL_OF_NUM_MAX"
+  "REAL_OF_NUM_LT" > "HOLLight.hollight.REAL_OF_NUM_LT"
+  "REAL_OF_NUM_GT" > "HOLLight.hollight.REAL_OF_NUM_GT"
+  "REAL_OF_NUM_GE" > "HOLLight.hollight.REAL_OF_NUM_GE"
+  "REAL_NOT_LT" > "HOLLight.hollight.REAL_NOT_LT"
+  "REAL_NOT_LE" > "HOLLight.hollight.real_lt_def"
+  "REAL_NOT_EQ" > "HOLLight.hollight.REAL_NOT_EQ"
+  "REAL_NEG_SUB" > "HOLLight.hollight.REAL_NEG_SUB"
+  "REAL_NEG_RMUL" > "HOLLight.hollight.REAL_NEG_RMUL"
+  "REAL_NEG_NEG" > "HOLLight.hollight.REAL_NEG_NEG"
+  "REAL_NEG_MUL2" > "HOLLight.hollight.REAL_NEG_MUL2"
+  "REAL_NEG_MINUS1" > "HOLLight.hollight.REAL_NEG_MINUS1"
+  "REAL_NEG_LT0" > "HOLLight.hollight.REAL_NEG_LT0"
+  "REAL_NEG_LMUL" > "HOLLight.hollight.REAL_NEG_LMUL"
+  "REAL_NEG_LE0" > "HOLLight.hollight.REAL_NEG_LE0"
+  "REAL_NEG_GT0" > "HOLLight.hollight.REAL_NEG_GT0"
+  "REAL_NEG_GE0" > "HOLLight.hollight.REAL_NEG_GE0"
+  "REAL_NEG_EQ_0" > "HOLLight.hollight.REAL_NEG_EQ_0"
+  "REAL_NEG_EQ" > "HOLLight.hollight.REAL_NEG_EQ"
+  "REAL_NEG_ADD" > "HOLLight.hollight.REAL_NEG_ADD"
+  "REAL_NEG_0" > "HOLLight.hollight.REAL_NEG_0"
+  "REAL_NEGNEG" > "HOLLight.hollight.REAL_NEGNEG"
+  "REAL_MUL_RZERO" > "HOLLight.hollight.REAL_MUL_RZERO"
+  "REAL_MUL_RNEG" > "HOLLight.hollight.REAL_MUL_RNEG"
+  "REAL_MUL_RINV_UNIQ" > "HOLLight.hollight.REAL_MUL_RINV_UNIQ"
+  "REAL_MUL_RINV" > "HOLLight.hollight.REAL_MUL_RINV"
+  "REAL_MUL_RID" > "HOLLight.hollight.REAL_MUL_RID"
+  "REAL_MUL_POS_LT" > "HOLLight.hollight.REAL_MUL_POS_LT"
+  "REAL_MUL_POS_LE" > "HOLLight.hollight.REAL_MUL_POS_LE"
+  "REAL_MUL_LZERO" > "HOLLight.hollight.REAL_MUL_LZERO"
+  "REAL_MUL_LNEG" > "HOLLight.hollight.REAL_MUL_LNEG"
+  "REAL_MUL_LINV_UNIQ" > "HOLLight.hollight.REAL_MUL_LINV_UNIQ"
+  "REAL_MUL_AC" > "HOLLight.hollight.REAL_MUL_AC"
+  "REAL_MUL_2" > "HOLLight.hollight.REAL_MUL_2"
+  "REAL_MIN_SYM" > "HOLLight.hollight.REAL_MIN_SYM"
+  "REAL_MIN_MIN" > "HOLLight.hollight.REAL_MIN_MIN"
+  "REAL_MIN_MAX" > "HOLLight.hollight.REAL_MIN_MAX"
+  "REAL_MIN_LT" > "HOLLight.hollight.REAL_MIN_LT"
+  "REAL_MIN_LE" > "HOLLight.hollight.REAL_MIN_LE"
+  "REAL_MIN_ASSOC" > "HOLLight.hollight.REAL_MIN_ASSOC"
+  "REAL_MIN_ACI" > "HOLLight.hollight.REAL_MIN_ACI"
+  "REAL_MAX_SYM" > "HOLLight.hollight.REAL_MAX_SYM"
+  "REAL_MAX_MIN" > "HOLLight.hollight.REAL_MAX_MIN"
+  "REAL_MAX_MAX" > "HOLLight.hollight.REAL_MAX_MAX"
+  "REAL_MAX_LT" > "HOLLight.hollight.REAL_MAX_LT"
+  "REAL_MAX_LE" > "HOLLight.hollight.REAL_MAX_LE"
+  "REAL_MAX_ASSOC" > "HOLLight.hollight.REAL_MAX_ASSOC"
+  "REAL_MAX_ACI" > "HOLLight.hollight.REAL_MAX_ACI"
+  "REAL_LT_TRANS" > "HOLLight.hollight.REAL_LT_TRANS"
+  "REAL_LT_TOTAL" > "HOLLight.hollight.REAL_LT_TOTAL"
+  "REAL_LT_SUB_RADD" > "HOLLight.hollight.REAL_LT_SUB_RADD"
+  "REAL_LT_SUB_LADD" > "HOLLight.hollight.REAL_LT_SUB_LADD"
+  "REAL_LT_SQUARE_ABS" > "HOLLight.hollight.REAL_LT_SQUARE_ABS"
+  "REAL_LT_SQUARE" > "HOLLight.hollight.REAL_LT_SQUARE"
+  "REAL_LT_RNEG" > "HOLLight.hollight.REAL_LT_RNEG"
+  "REAL_LT_RMUL_EQ" > "HOLLight.hollight.REAL_LT_RMUL_EQ"
+  "REAL_LT_RMUL" > "HOLLight.hollight.REAL_LT_RMUL"
+  "REAL_LT_RINV" > "HOLLight.hollight.REAL_LT_RINV"
+  "REAL_LT_REFL" > "HOLLight.hollight.REAL_LT_REFL"
+  "REAL_LT_RDIV_EQ" > "HOLLight.hollight.REAL_LT_RDIV_EQ"
+  "REAL_LT_RCANCEL_IMP" > "HOLLight.hollight.REAL_LT_RCANCEL_IMP"
+  "REAL_LT_RADD" > "HOLLight.hollight.REAL_LT_RADD"
+  "REAL_LT_POW2" > "HOLLight.hollight.REAL_LT_POW2"
+  "REAL_LT_NEGTOTAL" > "HOLLight.hollight.REAL_LT_NEGTOTAL"
+  "REAL_LT_NEG2" > "HOLLight.hollight.REAL_LT_NEG2"
+  "REAL_LT_NEG" > "HOLLight.hollight.REAL_LT_NEG"
+  "REAL_LT_MUL_EQ" > "HOLLight.hollight.REAL_LT_MUL_EQ"
+  "REAL_LT_MUL2" > "HOLLight.hollight.REAL_LT_MUL2"
+  "REAL_LT_MUL" > "HOLLight.hollight.REAL_LT_MUL"
+  "REAL_LT_MIN" > "HOLLight.hollight.REAL_LT_MIN"
+  "REAL_LT_MAX" > "HOLLight.hollight.REAL_LT_MAX"
+  "REAL_LT_LNEG" > "HOLLight.hollight.REAL_LT_LNEG"
+  "REAL_LT_LMUL_EQ" > "HOLLight.hollight.REAL_LT_LMUL_EQ"
+  "REAL_LT_LMUL" > "HOLLight.hollight.REAL_LT_LMUL"
+  "REAL_LT_LINV" > "HOLLight.hollight.REAL_LT_LINV"
+  "REAL_LT_LE" > "HOLLight.hollight.REAL_LT_LE"
+  "REAL_LT_LDIV_EQ" > "HOLLight.hollight.REAL_LT_LDIV_EQ"
+  "REAL_LT_LCANCEL_IMP" > "HOLLight.hollight.REAL_LT_LCANCEL_IMP"
+  "REAL_LT_LADD_IMP" > "HOLLight.hollight.REAL_LT_LADD_IMP"
+  "REAL_LT_LADD" > "HOLLight.hollight.REAL_LT_LADD"
+  "REAL_LT_INV_EQ" > "HOLLight.hollight.REAL_LT_INV_EQ"
+  "REAL_LT_INV2" > "HOLLight.hollight.REAL_LT_INV2"
+  "REAL_LT_INV" > "HOLLight.hollight.REAL_LT_INV"
+  "REAL_LT_IMP_NZ" > "HOLLight.hollight.REAL_LT_IMP_NZ"
+  "REAL_LT_IMP_NE" > "HOLLight.hollight.REAL_LT_IMP_NE"
+  "REAL_LT_IMP_LE" > "HOLLight.hollight.REAL_LT_IMP_LE"
+  "REAL_LT_GT" > "HOLLight.hollight.REAL_LT_GT"
+  "REAL_LT_DIV2_EQ" > "HOLLight.hollight.REAL_LT_DIV2_EQ"
+  "REAL_LT_DIV" > "HOLLight.hollight.REAL_LT_DIV"
+  "REAL_LT_ANTISYM" > "HOLLight.hollight.REAL_LT_ANTISYM"
+  "REAL_LT_ADD_SUB" > "HOLLight.hollight.REAL_LT_ADD_SUB"
+  "REAL_LT_ADDR" > "HOLLight.hollight.REAL_LT_ADDR"
+  "REAL_LT_ADDNEG2" > "HOLLight.hollight.REAL_LT_ADDNEG2"
+  "REAL_LT_ADDNEG" > "HOLLight.hollight.REAL_LT_ADDNEG"
+  "REAL_LT_ADDL" > "HOLLight.hollight.REAL_LT_ADDL"
+  "REAL_LT_ADD2" > "HOLLight.hollight.REAL_LT_ADD2"
+  "REAL_LT_ADD1" > "HOLLight.hollight.REAL_LT_ADD1"
+  "REAL_LT_ADD" > "HOLLight.hollight.REAL_LT_ADD"
+  "REAL_LT_01" > "HOLLight.hollight.REAL_LT_01"
+  "REAL_LTE_TRANS" > "HOLLight.hollight.REAL_LTE_TRANS"
+  "REAL_LTE_TOTAL" > "HOLLight.hollight.REAL_LTE_TOTAL"
+  "REAL_LTE_ANTISYM" > "HOLLight.hollight.REAL_LTE_ANTISYM"
+  "REAL_LTE_ADD2" > "HOLLight.hollight.REAL_LTE_ADD2"
+  "REAL_LTE_ADD" > "HOLLight.hollight.REAL_LTE_ADD"
+  "REAL_LNEG_UNIQ" > "HOLLight.hollight.REAL_LNEG_UNIQ"
+  "REAL_LE_SUB_RADD" > "HOLLight.hollight.REAL_LE_SUB_RADD"
+  "REAL_LE_SUB_LADD" > "HOLLight.hollight.REAL_LE_SUB_LADD"
+  "REAL_LE_SQUARE_ABS" > "HOLLight.hollight.REAL_LE_SQUARE_ABS"
+  "REAL_LE_SQUARE" > "HOLLight.hollight.REAL_LE_SQUARE"
+  "REAL_LE_RNEG" > "HOLLight.hollight.REAL_LE_RNEG"
+  "REAL_LE_RMUL_EQ" > "HOLLight.hollight.REAL_LE_RMUL_EQ"
+  "REAL_LE_RMUL" > "HOLLight.hollight.REAL_LE_RMUL"
+  "REAL_LE_RINV" > "HOLLight.hollight.REAL_LE_RINV"
+  "REAL_LE_RDIV_EQ" > "HOLLight.hollight.REAL_LE_RDIV_EQ"
+  "REAL_LE_RCANCEL_IMP" > "HOLLight.hollight.REAL_LE_RCANCEL_IMP"
+  "REAL_LE_RADD" > "HOLLight.hollight.REAL_LE_RADD"
+  "REAL_LE_POW_2" > "HOLLight.hollight.REAL_LE_POW_2"
+  "REAL_LE_POW2" > "HOLLight.hollight.REAL_LE_POW2"
+  "REAL_LE_NEGTOTAL" > "HOLLight.hollight.REAL_LE_NEGTOTAL"
+  "REAL_LE_NEGR" > "HOLLight.hollight.REAL_LE_NEGR"
+  "REAL_LE_NEGL" > "HOLLight.hollight.REAL_LE_NEGL"
+  "REAL_LE_NEG2" > "HOLLight.hollight.REAL_LE_NEG2"
+  "REAL_LE_NEG" > "HOLLight.hollight.REAL_LE_NEG"
+  "REAL_LE_MUL_EQ" > "HOLLight.hollight.REAL_LE_MUL_EQ"
+  "REAL_LE_MUL2" > "HOLLight.hollight.REAL_LE_MUL2"
+  "REAL_LE_MIN" > "HOLLight.hollight.REAL_LE_MIN"
+  "REAL_LE_MAX" > "HOLLight.hollight.REAL_LE_MAX"
+  "REAL_LE_LT" > "HOLLight.hollight.REAL_LE_LT"
+  "REAL_LE_LNEG" > "HOLLight.hollight.REAL_LE_LNEG"
+  "REAL_LE_LMUL_EQ" > "HOLLight.hollight.REAL_LE_LMUL_EQ"
+  "REAL_LE_LMUL" > "HOLLight.hollight.REAL_LE_LMUL"
+  "REAL_LE_LINV" > "HOLLight.hollight.REAL_LE_LINV"
+  "REAL_LE_LDIV_EQ" > "HOLLight.hollight.REAL_LE_LDIV_EQ"
+  "REAL_LE_LCANCEL_IMP" > "HOLLight.hollight.REAL_LE_LCANCEL_IMP"
+  "REAL_LE_LADD" > "HOLLight.hollight.REAL_LE_LADD"
+  "REAL_LE_INV_EQ" > "HOLLight.hollight.REAL_LE_INV_EQ"
+  "REAL_LE_INV2" > "HOLLight.hollight.REAL_LE_INV2"
+  "REAL_LE_INV" > "HOLLight.hollight.REAL_LE_INV"
+  "REAL_LE_DOUBLE" > "HOLLight.hollight.REAL_LE_DOUBLE"
+  "REAL_LE_DIV2_EQ" > "HOLLight.hollight.REAL_LE_DIV2_EQ"
+  "REAL_LE_DIV" > "HOLLight.hollight.REAL_LE_DIV"
+  "REAL_LE_ADDR" > "HOLLight.hollight.REAL_LE_ADDR"
+  "REAL_LE_ADDL" > "HOLLight.hollight.REAL_LE_ADDL"
+  "REAL_LE_ADD2" > "HOLLight.hollight.REAL_LE_ADD2"
+  "REAL_LE_ADD" > "HOLLight.hollight.REAL_LE_ADD"
+  "REAL_LE_01" > "HOLLight.hollight.REAL_LE_01"
+  "REAL_LET_TRANS" > "HOLLight.hollight.REAL_LET_TRANS"
+  "REAL_LET_TOTAL" > "HOLLight.hollight.REAL_LET_TOTAL"
+  "REAL_LET_ANTISYM" > "HOLLight.hollight.REAL_LET_ANTISYM"
+  "REAL_LET_ADD2" > "HOLLight.hollight.REAL_LET_ADD2"
+  "REAL_LET_ADD" > "HOLLight.hollight.REAL_LET_ADD"
+  "REAL_INV_POW" > "HOLLight.hollight.REAL_INV_POW"
+  "REAL_INV_NEG" > "HOLLight.hollight.REAL_INV_NEG"
+  "REAL_INV_MUL" > "HOLLight.hollight.REAL_INV_MUL"
+  "REAL_INV_LT_1" > "HOLLight.hollight.REAL_INV_LT_1"
+  "REAL_INV_LE_1" > "HOLLight.hollight.REAL_INV_LE_1"
+  "REAL_INV_INV" > "HOLLight.hollight.REAL_INV_INV"
+  "REAL_INV_EQ_1" > "HOLLight.hollight.REAL_INV_EQ_1"
+  "REAL_INV_EQ_0" > "HOLLight.hollight.REAL_INV_EQ_0"
+  "REAL_INV_DIV" > "HOLLight.hollight.REAL_INV_DIV"
+  "REAL_INV_1_LT" > "HOLLight.hollight.REAL_INV_1_LT"
+  "REAL_INV_1_LE" > "HOLLight.hollight.REAL_INV_1_LE"
+  "REAL_INV_1" > "HOLLight.hollight.REAL_INV_1"
+  "REAL_INTEGRAL" > "HOLLight.hollight.REAL_INTEGRAL"
+  "REAL_HREAL_LEMMA2" > "HOLLight.hollight.REAL_HREAL_LEMMA2"
+  "REAL_HREAL_LEMMA1" > "HOLLight.hollight.REAL_HREAL_LEMMA1"
+  "REAL_EQ_SUB_RADD" > "HOLLight.hollight.REAL_EQ_SUB_RADD"
+  "REAL_EQ_SUB_LADD" > "HOLLight.hollight.REAL_EQ_SUB_LADD"
+  "REAL_EQ_SQUARE_ABS" > "HOLLight.hollight.REAL_EQ_SQUARE_ABS"
+  "REAL_EQ_RDIV_EQ" > "HOLLight.hollight.REAL_EQ_RDIV_EQ"
+  "REAL_EQ_RCANCEL_IMP" > "HOLLight.hollight.REAL_EQ_RCANCEL_IMP"
+  "REAL_EQ_NEG2" > "HOLLight.hollight.REAL_EQ_NEG2"
+  "REAL_EQ_MUL_RCANCEL" > "HOLLight.hollight.REAL_EQ_MUL_RCANCEL"
+  "REAL_EQ_MUL_LCANCEL" > "HOLLight.hollight.REAL_EQ_MUL_LCANCEL"
+  "REAL_EQ_LDIV_EQ" > "HOLLight.hollight.REAL_EQ_LDIV_EQ"
+  "REAL_EQ_LCANCEL_IMP" > "HOLLight.hollight.REAL_EQ_LCANCEL_IMP"
+  "REAL_EQ_INV2" > "HOLLight.hollight.REAL_EQ_INV2"
+  "REAL_EQ_IMP_LE" > "HOLLight.hollight.REAL_EQ_IMP_LE"
+  "REAL_EQ_ADD_RCANCEL_0" > "HOLLight.hollight.REAL_EQ_ADD_RCANCEL_0"
+  "REAL_EQ_ADD_RCANCEL" > "HOLLight.hollight.REAL_EQ_ADD_RCANCEL"
+  "REAL_EQ_ADD_LCANCEL_0" > "HOLLight.hollight.REAL_EQ_ADD_LCANCEL_0"
+  "REAL_EQ_ADD_LCANCEL" > "HOLLight.hollight.REAL_EQ_ADD_LCANCEL"
+  "REAL_ENTIRE" > "HOLLight.hollight.REAL_ENTIRE"
+  "REAL_DOWN2" > "HOLLight.hollight.REAL_DOWN2"
+  "REAL_DOWN" > "HOLLight.hollight.REAL_DOWN"
+  "REAL_DIV_RMUL" > "HOLLight.hollight.REAL_DIV_RMUL"
+  "REAL_DIV_REFL" > "HOLLight.hollight.REAL_DIV_REFL"
+  "REAL_DIV_POW2_ALT" > "HOLLight.hollight.REAL_DIV_POW2_ALT"
+  "REAL_DIV_POW2" > "HOLLight.hollight.REAL_DIV_POW2"
+  "REAL_DIV_LMUL" > "HOLLight.hollight.REAL_DIV_LMUL"
+  "REAL_DIV_1" > "HOLLight.hollight.REAL_DIV_1"
+  "REAL_DIFFSQ" > "HOLLight.hollight.REAL_DIFFSQ"
+  "REAL_COMPLETE_SOMEPOS" > "HOLLight.hollight.REAL_COMPLETE_SOMEPOS"
+  "REAL_COMPLETE" > "HOLLight.hollight.REAL_COMPLETE"
+  "REAL_BOUNDS_LT" > "HOLLight.hollight.REAL_BOUNDS_LT"
+  "REAL_BOUNDS_LE" > "HOLLight.hollight.REAL_BOUNDS_LE"
+  "REAL_ADD_SUB2" > "HOLLight.hollight.REAL_ADD_SUB2"
+  "REAL_ADD_SUB" > "HOLLight.hollight.REAL_ADD_SUB"
+  "REAL_ADD_RINV" > "HOLLight.hollight.REAL_ADD_RINV"
+  "REAL_ADD_RID" > "HOLLight.hollight.REAL_ADD_RID"
+  "REAL_ADD_RDISTRIB" > "HOLLight.hollight.REAL_ADD_RDISTRIB"
+  "REAL_ADD_AC" > "HOLLight.hollight.REAL_ADD_AC"
+  "REAL_ADD2_SUB2" > "HOLLight.hollight.REAL_ADD2_SUB2"
+  "REAL_ABS_ZERO" > "HOLLight.hollight.REAL_ABS_ZERO"
+  "REAL_ABS_TRIANGLE_LT" > "HOLLight.hollight.REAL_ABS_TRIANGLE_LT"
+  "REAL_ABS_TRIANGLE_LE" > "HOLLight.hollight.REAL_ABS_TRIANGLE_LE"
+  "REAL_ABS_TRIANGLE" > "HOLLight.hollight.REAL_ABS_TRIANGLE"
+  "REAL_ABS_SUB_ABS" > "HOLLight.hollight.REAL_ABS_SUB_ABS"
+  "REAL_ABS_SUB" > "HOLLight.hollight.REAL_ABS_SUB"
+  "REAL_ABS_STILLNZ" > "HOLLight.hollight.REAL_ABS_STILLNZ"
+  "REAL_ABS_SIGN2" > "HOLLight.hollight.REAL_ABS_SIGN2"
+  "REAL_ABS_SIGN" > "HOLLight.hollight.REAL_ABS_SIGN"
+  "REAL_ABS_SGN" > "HOLLight.hollight.REAL_ABS_SGN"
+  "REAL_ABS_REFL" > "HOLLight.hollight.REAL_ABS_REFL"
+  "REAL_ABS_POW" > "HOLLight.hollight.REAL_ABS_POW"
+  "REAL_ABS_POS" > "HOLLight.hollight.REAL_ABS_POS"
+  "REAL_ABS_NZ" > "HOLLight.hollight.REAL_ABS_NZ"
+  "REAL_ABS_NUM" > "HOLLight.hollight.REAL_ABS_NUM"
+  "REAL_ABS_NEG" > "HOLLight.hollight.REAL_ABS_NEG"
+  "REAL_ABS_MUL" > "HOLLight.hollight.REAL_ABS_MUL"
+  "REAL_ABS_LE" > "HOLLight.hollight.REAL_ABS_LE"
+  "REAL_ABS_INV" > "HOLLight.hollight.REAL_ABS_INV"
+  "REAL_ABS_DIV" > "HOLLight.hollight.REAL_ABS_DIV"
+  "REAL_ABS_CIRCLE" > "HOLLight.hollight.REAL_ABS_CIRCLE"
+  "REAL_ABS_CASES" > "HOLLight.hollight.REAL_ABS_CASES"
+  "REAL_ABS_BOUNDS" > "HOLLight.hollight.REAL_ABS_BOUNDS"
+  "REAL_ABS_BOUND" > "HOLLight.hollight.REAL_ABS_BOUND"
+  "REAL_ABS_BETWEEN2" > "HOLLight.hollight.REAL_ABS_BETWEEN2"
+  "REAL_ABS_BETWEEN1" > "HOLLight.hollight.REAL_ABS_BETWEEN1"
+  "REAL_ABS_BETWEEN" > "HOLLight.hollight.REAL_ABS_BETWEEN"
+  "REAL_ABS_ABS" > "HOLLight.hollight.REAL_ABS_ABS"
+  "REAL_ABS_1" > "HOLLight.hollight.REAL_ABS_1"
+  "REAL_ABS_0" > "HOLLight.hollight.REAL_ABS_0"
+  "RAT_LEMMA5" > "HOLLight.hollight.RAT_LEMMA5"
+  "RAT_LEMMA4" > "HOLLight.hollight.RAT_LEMMA4"
+  "RAT_LEMMA3" > "HOLLight.hollight.RAT_LEMMA3"
+  "RAT_LEMMA2" > "HOLLight.hollight.RAT_LEMMA2"
+  "RAT_LEMMA1" > "HOLLight.hollight.RAT_LEMMA1"
+  "PSUBSET_UNIV" > "HOLLight.hollight.PSUBSET_UNIV"
+  "PSUBSET_TRANS" > "Orderings.order_less_trans"
+  "PSUBSET_SUBSET_TRANS" > "Orderings.order_less_le_trans"
+  "PSUBSET_MEMBER" > "HOLLight.hollight.PSUBSET_MEMBER"
+  "PSUBSET_IRREFL" > "Orderings.order_less_irrefl"
+  "PSUBSET_INSERT_SUBSET" > "HOLLight.hollight.PSUBSET_INSERT_SUBSET"
+  "PSUBSET_ALT" > "HOLLight.hollight.PSUBSET_ALT"
+  "PRE_ELIM_THM" > "HOLLight.hollight.PRE_ELIM_THM"
+  "POWERSET_CLAUSES" > "HOLLight.hollight.POWERSET_CLAUSES"
+  "PASSOC_def" > "HOLLight.hollight.PASSOC_def"
+  "PAIR_SURJECTIVE" > "Product_Type.prod.nchotomy"
+  "PAIR_EXISTS_THM" > "HOLLight.hollight.PAIR_EXISTS_THM"
+  "PAIR_EQ" > "Product_Type.Pair_eq"
+  "PAIRWISE_def" > "HOLLight.hollight.PAIRWISE_def"
+  "PAIRWISE_SING" > "HOLLight.hollight.PAIRWISE_SING"
+  "PAIRWISE_MONO" > "HOLLight.hollight.PAIRWISE_MONO"
+  "PAIRWISE_EMPTY" > "HOLLight.hollight.PAIRWISE_EMPTY"
+  "PAIR" > "HOLLightCompat.PAIR"
+  "OR_EXISTS_THM" > "HOL.ex_disj_distrib"
+  "OR_CLAUSES" > "HOLLight.hollight.OR_CLAUSES"
+  "ONE" > "Nat.One_nat_def"
+  "ODD_SUB" > "HOLLight.hollight.ODD_SUB"
+  "ODD_MULT" > "HOLLight.hollight.ODD_MULT"
+  "ODD_MOD" > "HOLLight.hollight.ODD_MOD"
+  "ODD_EXP" > "HOLLight.hollight.ODD_EXP"
+  "ODD_EXISTS" > "Parity.odd_Suc_mult_two_ex"
+  "ODD_DOUBLE" > "HOLLight.hollight.ODD_DOUBLE"
+  "ODD_ADD" > "Parity.odd_add"
+  "NUM_REP_def" > "HOLLight.hollight.NUM_REP_def"
+  "NUM_OF_INT_OF_NUM" > "HOLLight.hollight.NUM_OF_INT_OF_NUM"
+  "NUM_OF_INT" > "HOLLight.hollight.NUM_OF_INT"
+  "NUM_INTEGRAL_LEMMA" > "HOLLight.hollight.NUM_INTEGRAL_LEMMA"
+  "NUM_INTEGRAL" > "HOLLight.hollight.NUM_INTEGRAL"
+  "NUM_GCD" > "HOLLight.hollight.NUM_GCD"
+  "NUMSUM_def" > "HOLLight.hollight.NUMSUM_def"
+  "NUMSUM_INJ" > "HOLLight.hollight.NUMSUM_INJ"
+  "NUMSND_def" > "HOLLight.hollight.NUMSND_def"
+  "NUMSEG_SING" > "SetInterval.order_class.atLeastAtMost_singleton"
+  "NUMSEG_RREC" > "HOLLight.hollight.NUMSEG_RREC"
+  "NUMSEG_REC" > "SetInterval.atLeastAtMostSuc_conv"
+  "NUMSEG_OFFSET_IMAGE" > "SetInterval.image_add_atLeastAtMost"
+  "NUMSEG_LT" > "HOLLight.hollight.NUMSEG_LT"
+  "NUMSEG_LREC" > "HOLLight.hollight.NUMSEG_LREC"
+  "NUMSEG_LE" > "HOLLight.hollight.NUMSEG_LE"
+  "NUMSEG_EMPTY" > "HOLLight.hollight.NUMSEG_EMPTY"
+  "NUMSEG_COMBINE_R" > "HOLLight.hollight.NUMSEG_COMBINE_R"
+  "NUMSEG_COMBINE_L" > "HOLLight.hollight.NUMSEG_COMBINE_L"
+  "NUMSEG_CLAUSES" > "HOLLight.hollight.NUMSEG_CLAUSES"
+  "NUMSEG_ADD_SPLIT" > "HOLLight.hollight.NUMSEG_ADD_SPLIT"
+  "NUMRIGHT_def" > "HOLLight.hollight.NUMRIGHT_def"
+  "NUMPAIR_def" > "HOLLight.hollight.NUMPAIR_def"
+  "NUMPAIR_INJ_LEMMA" > "HOLLight.hollight.NUMPAIR_INJ_LEMMA"
+  "NUMPAIR_INJ" > "HOLLight.hollight.NUMPAIR_INJ"
+  "NUMLEFT_def" > "HOLLight.hollight.NUMLEFT_def"
+  "NUMFST_def" > "HOLLight.hollight.NUMFST_def"
+  "NSUM_UNION_RZERO" > "HOLLight.hollight.NSUM_UNION_RZERO"
+  "NSUM_UNION_NONZERO" > "HOLLight.hollight.NSUM_UNION_NONZERO"
+  "NSUM_UNION_LZERO" > "HOLLight.hollight.NSUM_UNION_LZERO"
+  "NSUM_UNION_EQ" > "HOLLight.hollight.NSUM_UNION_EQ"
+  "NSUM_UNIONS_NONZERO" > "HOLLight.hollight.NSUM_UNIONS_NONZERO"
+  "NSUM_UNION" > "HOLLight.hollight.NSUM_UNION"
+  "NSUM_TRIV_NUMSEG" > "HOLLight.hollight.NSUM_TRIV_NUMSEG"
+  "NSUM_SWAP_NUMSEG" > "HOLLight.hollight.NSUM_SWAP_NUMSEG"
+  "NSUM_SWAP" > "HOLLight.hollight.NSUM_SWAP"
+  "NSUM_SUPPORT" > "HOLLight.hollight.NSUM_SUPPORT"
+  "NSUM_SUPERSET" > "HOLLight.hollight.NSUM_SUPERSET"
+  "NSUM_SUBSET_SIMPLE" > "HOLLight.hollight.NSUM_SUBSET_SIMPLE"
+  "NSUM_SUBSET" > "HOLLight.hollight.NSUM_SUBSET"
+  "NSUM_SING_NUMSEG" > "HOLLight.hollight.NSUM_SING_NUMSEG"
+  "NSUM_SING" > "HOLLight.hollight.NSUM_SING"
+  "NSUM_RMUL" > "HOLLight.hollight.NSUM_RMUL"
+  "NSUM_RESTRICT_SET" > "HOLLight.hollight.NSUM_RESTRICT_SET"
+  "NSUM_RESTRICT" > "HOLLight.hollight.NSUM_RESTRICT"
+  "NSUM_POS_BOUND" > "HOLLight.hollight.NSUM_POS_BOUND"
+  "NSUM_PAIR" > "HOLLight.hollight.NSUM_PAIR"
+  "NSUM_OFFSET_0" > "HOLLight.hollight.NSUM_OFFSET_0"
+  "NSUM_OFFSET" > "HOLLight.hollight.NSUM_OFFSET"
+  "NSUM_NSUM_RESTRICT" > "HOLLight.hollight.NSUM_NSUM_RESTRICT"
+  "NSUM_NSUM_PRODUCT" > "HOLLight.hollight.NSUM_NSUM_PRODUCT"
+  "NSUM_MULTICOUNT_GEN" > "HOLLight.hollight.NSUM_MULTICOUNT_GEN"
+  "NSUM_MULTICOUNT" > "HOLLight.hollight.NSUM_MULTICOUNT"
+  "NSUM_LT_ALL" > "HOLLight.hollight.NSUM_LT_ALL"
+  "NSUM_LT" > "HOLLight.hollight.NSUM_LT"
+  "NSUM_LMUL" > "HOLLight.hollight.NSUM_LMUL"
+  "NSUM_LE_NUMSEG" > "HOLLight.hollight.NSUM_LE_NUMSEG"
+  "NSUM_LE" > "HOLLight.hollight.NSUM_LE"
+  "NSUM_INJECTION" > "HOLLight.hollight.NSUM_INJECTION"
+  "NSUM_INCL_EXCL" > "HOLLight.hollight.NSUM_INCL_EXCL"
+  "NSUM_IMAGE_NONZERO" > "HOLLight.hollight.NSUM_IMAGE_NONZERO"
+  "NSUM_IMAGE_GEN" > "HOLLight.hollight.NSUM_IMAGE_GEN"
+  "NSUM_IMAGE" > "HOLLight.hollight.NSUM_IMAGE"
+  "NSUM_GROUP" > "HOLLight.hollight.NSUM_GROUP"
+  "NSUM_EQ_SUPERSET" > "HOLLight.hollight.NSUM_EQ_SUPERSET"
+  "NSUM_EQ_NUMSEG" > "HOLLight.hollight.NSUM_EQ_NUMSEG"
+  "NSUM_EQ_GENERAL_INVERSES" > "HOLLight.hollight.NSUM_EQ_GENERAL_INVERSES"
+  "NSUM_EQ_GENERAL" > "HOLLight.hollight.NSUM_EQ_GENERAL"
+  "NSUM_EQ_0_NUMSEG" > "HOLLight.hollight.NSUM_EQ_0_NUMSEG"
+  "NSUM_EQ_0_IFF_NUMSEG" > "HOLLight.hollight.NSUM_EQ_0_IFF_NUMSEG"
+  "NSUM_EQ_0_IFF" > "HOLLight.hollight.NSUM_EQ_0_IFF"
+  "NSUM_EQ_0" > "HOLLight.hollight.NSUM_EQ_0"
+  "NSUM_EQ" > "HOLLight.hollight.NSUM_EQ"
+  "NSUM_DIFF" > "HOLLight.hollight.NSUM_DIFF"
+  "NSUM_DELTA" > "HOLLight.hollight.NSUM_DELTA"
+  "NSUM_DELETE" > "HOLLight.hollight.NSUM_DELETE"
+  "NSUM_CONST_NUMSEG" > "HOLLight.hollight.NSUM_CONST_NUMSEG"
+  "NSUM_CONST" > "HOLLight.hollight.NSUM_CONST"
+  "NSUM_CLOSED" > "HOLLight.hollight.NSUM_CLOSED"
+  "NSUM_CLAUSES_RIGHT" > "HOLLight.hollight.NSUM_CLAUSES_RIGHT"
+  "NSUM_CLAUSES_NUMSEG" > "HOLLight.hollight.NSUM_CLAUSES_NUMSEG"
+  "NSUM_CLAUSES_LEFT" > "HOLLight.hollight.NSUM_CLAUSES_LEFT"
+  "NSUM_CLAUSES" > "HOLLight.hollight.NSUM_CLAUSES"
+  "NSUM_CASES" > "HOLLight.hollight.NSUM_CASES"
+  "NSUM_BOUND_LT_GEN" > "HOLLight.hollight.NSUM_BOUND_LT_GEN"
+  "NSUM_BOUND_LT_ALL" > "HOLLight.hollight.NSUM_BOUND_LT_ALL"
+  "NSUM_BOUND_LT" > "HOLLight.hollight.NSUM_BOUND_LT"
+  "NSUM_BOUND_GEN" > "HOLLight.hollight.NSUM_BOUND_GEN"
+  "NSUM_BOUND" > "HOLLight.hollight.NSUM_BOUND"
+  "NSUM_BIJECTION" > "HOLLight.hollight.NSUM_BIJECTION"
+  "NSUM_ADD_SPLIT" > "HOLLight.hollight.NSUM_ADD_SPLIT"
+  "NSUM_ADD_NUMSEG" > "HOLLight.hollight.NSUM_ADD_NUMSEG"
+  "NSUM_ADD_GEN" > "HOLLight.hollight.NSUM_ADD_GEN"
+  "NSUM_ADD" > "HOLLight.hollight.NSUM_ADD"
+  "NSUM_0" > "HOLLight.hollight.NSUM_0"
+  "NOT_UNIV_PSUBSET" > "Orderings.top_class.not_top_less"
+  "NOT_SUC" > "Nat.Suc_not_Zero"
+  "NOT_PSUBSET_EMPTY" > "Orderings.bot_class.not_less_bot"
+  "NOT_ODD" > "HOLLight.hollight.NOT_ODD"
+  "NOT_LT" > "Orderings.linorder_class.not_less"
+  "NOT_LE" > "Orderings.linorder_class.not_le"
+  "NOT_IN_EMPTY" > "HOLLight.hollight.NOT_IN_EMPTY"
+  "NOT_INSERT_EMPTY" > "Set.insert_not_empty"
+  "NOT_FORALL_THM" > "HOL.not_all"
+  "NOT_EXISTS_THM" > "HOL.not_ex"
+  "NOT_EX" > "HOLLightList.NOT_EX"
+  "NOT_EVEN" > "HOLLight.hollight.NOT_EVEN"
+  "NOT_EQUAL_SETS" > "HOLLight.hollight.NOT_EQUAL_SETS"
+  "NOT_EMPTY_INSERT" > "Set.empty_not_insert"
+  "NOT_CONS_NIL" > "List.list.distinct_2"
+  "NOT_CLAUSES_WEAK" > "HOLLight.hollight.NOT_CLAUSES_WEAK"
+  "NOT_ALL" > "HOLLightList.NOT_ALL"
+  "NEUTRAL_REAL_MUL" > "HOLLight.hollight.NEUTRAL_REAL_MUL"
+  "NEUTRAL_REAL_ADD" > "HOLLight.hollight.NEUTRAL_REAL_ADD"
+  "NEUTRAL_MUL" > "HOLLight.hollight.NEUTRAL_MUL"
+  "NEUTRAL_ADD" > "HOLLight.hollight.NEUTRAL_ADD"
+  "NADD_UBOUND" > "HOLLight.hollight.NADD_UBOUND"
+  "NADD_SUC" > "HOLLight.hollight.NADD_SUC"
+  "NADD_RDISTRIB" > "HOLLight.hollight.NADD_RDISTRIB"
+  "NADD_OF_NUM_WELLDEF" > "HOLLight.hollight.NADD_OF_NUM_WELLDEF"
+  "NADD_OF_NUM_MUL" > "HOLLight.hollight.NADD_OF_NUM_MUL"
+  "NADD_OF_NUM_LE" > "HOLLight.hollight.NADD_OF_NUM_LE"
+  "NADD_OF_NUM_EQ" > "HOLLight.hollight.NADD_OF_NUM_EQ"
+  "NADD_OF_NUM_ADD" > "HOLLight.hollight.NADD_OF_NUM_ADD"
+  "NADD_OF_NUM" > "HOLLight.hollight.NADD_OF_NUM"
+  "NADD_NONZERO" > "HOLLight.hollight.NADD_NONZERO"
+  "NADD_MUL_WELLDEF_LEMMA" > "HOLLight.hollight.NADD_MUL_WELLDEF_LEMMA"
+  "NADD_MUL_WELLDEF" > "HOLLight.hollight.NADD_MUL_WELLDEF"
+  "NADD_MUL_SYM" > "HOLLight.hollight.NADD_MUL_SYM"
+  "NADD_MUL_LINV_LEMMA8" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA8"
+  "NADD_MUL_LINV_LEMMA7a" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA7a"
+  "NADD_MUL_LINV_LEMMA7" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA7"
+  "NADD_MUL_LINV_LEMMA6" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA6"
+  "NADD_MUL_LINV_LEMMA5" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA5"
+  "NADD_MUL_LINV_LEMMA4" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA4"
+  "NADD_MUL_LINV_LEMMA3" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA3"
+  "NADD_MUL_LINV_LEMMA2" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA2"
+  "NADD_MUL_LINV_LEMMA1" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA1"
+  "NADD_MUL_LINV_LEMMA0" > "HOLLight.hollight.NADD_MUL_LINV_LEMMA0"
+  "NADD_MUL_LINV" > "HOLLight.hollight.NADD_MUL_LINV"
+  "NADD_MUL_LID" > "HOLLight.hollight.NADD_MUL_LID"
+  "NADD_MUL_ASSOC" > "HOLLight.hollight.NADD_MUL_ASSOC"
+  "NADD_MULTIPLICATIVE" > "HOLLight.hollight.NADD_MULTIPLICATIVE"
+  "NADD_MUL" > "HOLLight.hollight.NADD_MUL"
+  "NADD_LE_WELLDEF_LEMMA" > "HOLLight.hollight.NADD_LE_WELLDEF_LEMMA"
+  "NADD_LE_WELLDEF" > "HOLLight.hollight.NADD_LE_WELLDEF"
+  "NADD_LE_TRANS" > "HOLLight.hollight.NADD_LE_TRANS"
+  "NADD_LE_TOTAL_LEMMA" > "HOLLight.hollight.NADD_LE_TOTAL_LEMMA"
+  "NADD_LE_TOTAL" > "HOLLight.hollight.NADD_LE_TOTAL"
+  "NADD_LE_RMUL" > "HOLLight.hollight.NADD_LE_RMUL"
+  "NADD_LE_REFL" > "HOLLight.hollight.NADD_LE_REFL"
+  "NADD_LE_RADD" > "HOLLight.hollight.NADD_LE_RADD"
+  "NADD_LE_LMUL" > "HOLLight.hollight.NADD_LE_LMUL"
+  "NADD_LE_LADD" > "HOLLight.hollight.NADD_LE_LADD"
+  "NADD_LE_EXISTS" > "HOLLight.hollight.NADD_LE_EXISTS"
+  "NADD_LE_ANTISYM" > "HOLLight.hollight.NADD_LE_ANTISYM"
+  "NADD_LE_ADD" > "HOLLight.hollight.NADD_LE_ADD"
+  "NADD_LE_0" > "HOLLight.hollight.NADD_LE_0"
+  "NADD_LDISTRIB" > "HOLLight.hollight.NADD_LDISTRIB"
+  "NADD_LBOUND" > "HOLLight.hollight.NADD_LBOUND"
+  "NADD_INV_WELLDEF" > "HOLLight.hollight.NADD_INV_WELLDEF"
+  "NADD_INV_0" > "HOLLight.hollight.NADD_INV_0"
+  "NADD_INV" > "HOLLight.hollight.NADD_INV"
+  "NADD_EQ_TRANS" > "HOLLight.hollight.NADD_EQ_TRANS"
+  "NADD_EQ_SYM" > "HOLLight.hollight.NADD_EQ_SYM"
+  "NADD_EQ_REFL" > "HOLLight.hollight.NADD_EQ_REFL"
+  "NADD_EQ_IMP_LE" > "HOLLight.hollight.NADD_EQ_IMP_LE"
+  "NADD_DIST_LEMMA" > "HOLLight.hollight.NADD_DIST_LEMMA"
+  "NADD_DIST" > "HOLLight.hollight.NADD_DIST"
+  "NADD_COMPLETE" > "HOLLight.hollight.NADD_COMPLETE"
+  "NADD_CAUCHY" > "HOLLight.hollight.NADD_CAUCHY"
+  "NADD_BOUND" > "HOLLight.hollight.NADD_BOUND"
+  "NADD_ARCH_ZERO" > "HOLLight.hollight.NADD_ARCH_ZERO"
+  "NADD_ARCH_MULT" > "HOLLight.hollight.NADD_ARCH_MULT"
+  "NADD_ARCH_LEMMA" > "HOLLight.hollight.NADD_ARCH_LEMMA"
+  "NADD_ARCH" > "HOLLight.hollight.NADD_ARCH"
+  "NADD_ALTMUL" > "HOLLight.hollight.NADD_ALTMUL"
+  "NADD_ADD_WELLDEF" > "HOLLight.hollight.NADD_ADD_WELLDEF"
+  "NADD_ADD_SYM" > "HOLLight.hollight.NADD_ADD_SYM"
+  "NADD_ADD_LID" > "HOLLight.hollight.NADD_ADD_LID"
+  "NADD_ADD_LCANCEL" > "HOLLight.hollight.NADD_ADD_LCANCEL"
+  "NADD_ADD_ASSOC" > "HOLLight.hollight.NADD_ADD_ASSOC"
+  "NADD_ADDITIVE" > "HOLLight.hollight.NADD_ADDITIVE"
+  "NADD_ADD" > "HOLLight.hollight.NADD_ADD"
+  "MULT_SYM" > "Fields.linordered_field_class.sign_simps_40"
+  "MULT_SUC" > "Nat.mult_Suc_right"
+  "MULT_EXP" > "Power.comm_monoid_mult_class.power_mult_distrib"
+  "MULT_EQ_1" > "Nat.nat_mult_eq_1_iff"
+  "MULT_EQ_0" > "Nat.mult_is_0"
+  "MULT_DIV_LE" > "HOLLight.hollight.MULT_DIV_LE"
+  "MULT_CLAUSES" > "HOLLight.hollight.MULT_CLAUSES"
+  "MULT_ASSOC" > "Fields.linordered_field_class.sign_simps_41"
+  "MULT_AC" > "HOLLight.hollight.MULT_AC"
+  "MULT_2" > "Int.semiring_mult_2"
+  "MULT_0" > "Divides.arithmetic_simps_41"
+  "MONO_FORALL" > "Inductive.basic_monos_6"
+  "MONO_EXISTS" > "Inductive.basic_monos_5"
+  "MONO_COND" > "HOLLight.hollight.MONO_COND"
+  "MONO_ALL2" > "List.list_all2_mono"
+  "MONO_ALL" > "HOLLightList.MONO_ALL"
+  "MONOIDAL_REAL_MUL" > "HOLLight.hollight.MONOIDAL_REAL_MUL"
+  "MONOIDAL_REAL_ADD" > "HOLLight.hollight.MONOIDAL_REAL_ADD"
+  "MONOIDAL_MUL" > "HOLLight.hollight.MONOIDAL_MUL"
+  "MONOIDAL_ADD" > "HOLLight.hollight.MONOIDAL_ADD"
+  "MONOIDAL_AC" > "HOLLight.hollight.MONOIDAL_AC"
+  "MOD_UNIQ" > "HOLLight.hollight.MOD_UNIQ"
+  "MOD_MULT_RMOD" > "HOLLight.hollight.MOD_MULT_RMOD"
+  "MOD_MULT_MOD2" > "HOLLight.hollight.MOD_MULT_MOD2"
+  "MOD_MULT_LMOD" > "HOLLight.hollight.MOD_MULT_LMOD"
+  "MOD_MULT_ADD" > "Divides.mod_mult_self3"
+  "MOD_MULT2" > "HOLLight.hollight.MOD_MULT2"
+  "MOD_MOD_REFL" > "HOLLight.hollight.MOD_MOD_REFL"
+  "MOD_MOD" > "HOLLight.hollight.MOD_MOD"
+  "MOD_LT" > "Divides.mod_less"
+  "MOD_LE" > "HOLLight.hollight.MOD_LE"
+  "MOD_EXP_MOD" > "HOLLight.hollight.MOD_EXP_MOD"
+  "MOD_EXISTS" > "HOLLight.hollight.MOD_EXISTS"
+  "MOD_EQ_0" > "HOLLight.hollight.MOD_EQ_0"
+  "MOD_EQ" > "HOLLight.hollight.MOD_EQ"
+  "MOD_ADD_MOD" > "HOLLight.hollight.MOD_ADD_MOD"
+  "MK_REC_INJ" > "HOLLight.hollight.MK_REC_INJ"
+  "MINIMAL" > "HOLLight.hollight.MINIMAL"
+  "MEM_MAP" > "HOLLightList.MEM_MAP"
+  "MEM_FILTER" > "HOLLightList.MEM_FILTER"
+  "MEM_EXISTS_EL" > "HOLLightList.MEM_EXISTS_EL"
+  "MEM_EL" > "List.nth_mem"
+  "MEM_APPEND" > "HOLLightList.MEM_APPEND"
+  "MEMBER_NOT_EMPTY" > "Set.ex_in_conv"
+  "MEASURE_LE" > "HOLLight.hollight.MEASURE_LE"
+  "MATCH_SEQPATTERN" > "HOLLight.hollight.MATCH_SEQPATTERN"
+  "MAP_o" > "List.map.compositionality"
+  "MAP_SND_ZIP" > "List.map_snd_zip"
+  "MAP_ID" > "List.map_ident"
+  "MAP_I" > "List.map.id"
+  "MAP_FST_ZIP" > "List.map_fst_zip"
+  "MAP_EQ_NIL" > "List.map_is_Nil_conv"
+  "MAP_EQ_DEGEN" > "HOLLightList.MAP_EQ_DEGEN"
+  "MAP_EQ_ALL2" > "HOLLightList.MAP_EQ_ALL2"
+  "MAP_EQ" > "HOLLightList.MAP_EQ"
+  "MAP_APPEND" > "List.map_append"
+  "MAP2" > "HOLLightList.MAP2"
+  "LT_TRANS" > "Orderings.order_less_trans"
+  "LT_SUC_LE" > "Nat.le_simps_2"
+  "LT_SUC" > "Nat.Suc_less_eq"
+  "LT_REFL" > "Nat.less_not_refl"
+  "LT_NZ" > "Nat.neq0_conv"
+  "LT_MULT_RCANCEL" > "HOLLight.hollight.LT_MULT_RCANCEL"
+  "LT_MULT_LCANCEL" > "HOLLight.hollight.LT_MULT_LCANCEL"
+  "LT_MULT2" > "HOLLight.hollight.LT_MULT2"
+  "LT_MULT" > "Nat.nat_0_less_mult_iff"
+  "LT_LMULT" > "HOLLight.hollight.LT_LMULT"
+  "LT_LE" > "Nat.nat_less_le"
+  "LT_IMP_LE" > "FunDef.termination_basic_simps_5"
+  "LT_EXP" > "HOLLight.hollight.LT_EXP"
+  "LT_EXISTS" > "HOLLight.hollight.LT_EXISTS"
+  "LT_CASES" > "HOLLight.hollight.LT_CASES"
+  "LT_ANTISYM" > "HOLLight.hollight.LT_ANTISYM"
+  "LT_ADD_RCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_right"
+  "LT_ADD_LCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_less_cancel_left"
+  "LT_ADDR" > "HOLLight.hollight.LT_ADDR"
+  "LT_ADD2" > "Groups.add_mono_thms_linordered_field_5"
+  "LT_ADD" > "HOLLight.hollight.LT_ADD"
+  "LT_0" > "Nat.zero_less_Suc"
+  "LTE_TRANS" > "Orderings.order_less_le_trans"
+  "LTE_CASES" > "HOLLight.hollight.LTE_CASES"
+  "LTE_ANTISYM" > "HOLLight.hollight.LTE_ANTISYM"
+  "LTE_ADD2" > "Groups.add_mono_thms_linordered_field_3"
+  "LE_TRANS" > "Nat.le_trans"
+  "LE_SUC_LT" > "Nat.Suc_le_eq"
+  "LE_SUC" > "Nat.Suc_le_mono"
+  "LE_SQUARE_REFL" > "Nat.le_square"
+  "LE_REFL" > "Nat.le_refl"
+  "LE_RDIV_EQ" > "HOLLight.hollight.LE_RDIV_EQ"
+  "LE_MULT_RCANCEL" > "HOLLight.hollight.LE_MULT_RCANCEL"
+  "LE_MULT_LCANCEL" > "HOLLight.hollight.LE_MULT_LCANCEL"
+  "LE_MULT2" > "Nat.mult_le_mono"
+  "LE_LT" > "Nat.le_eq_less_or_eq"
+  "LE_LDIV_EQ" > "HOLLight.hollight.LE_LDIV_EQ"
+  "LE_LDIV" > "HOLLight.hollight.LE_LDIV"
+  "LE_EXP" > "HOLLight.hollight.LE_EXP"
+  "LE_EXISTS" > "Nat.le_iff_add"
+  "LE_CASES" > "Nat.nat_le_linear"
+  "LE_C" > "HOLLight.hollight.LE_C"
+  "LE_ANTISYM" > "Orderings.order_class.eq_iff"
+  "LE_ADD_RCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_right"
+  "LE_ADD_LCANCEL" > "Groups.ordered_ab_semigroup_add_imp_le_class.add_le_cancel_left"
+  "LE_ADDR" > "Nat.le_add2"
+  "LE_ADD2" > "Groups.add_mono_thms_linordered_semiring_1"
+  "LE_ADD" > "Nat.le_add1"
+  "LE_1" > "HOLLight.hollight.LE_1"
+  "LE_0" > "Nat.le0"
+  "LET_TRANS" > "Orderings.order_le_less_trans"
+  "LET_END_def" > "HOLLight.hollight.LET_END_def"
+  "LET_CASES" > "Orderings.linorder_class.le_less_linear"
+  "LET_ANTISYM" > "HOLLight.hollight.LET_ANTISYM"
+  "LET_ADD2" > "Groups.add_mono_thms_linordered_field_4"
+  "LENGTH_TL" > "HOLLightList.LENGTH_TL"
+  "LENGTH_REPLICATE" > "List.length_replicate"
+  "LENGTH_MAP2" > "HOLLightList.LENGTH_MAP2"
+  "LENGTH_MAP" > "List.length_map"
+  "LENGTH_EQ_NIL" > "List.length_0_conv"
+  "LENGTH_EQ_CONS" > "List.length_Suc_conv"
+  "LENGTH_APPEND" > "List.length_append"
+  "LEFT_SUB_DISTRIB" > "Nat.diff_mult_distrib2"
+  "LEFT_OR_FORALL_THM" > "HOL.all_simps_3"
+  "LEFT_OR_EXISTS_THM" > "HOL.ex_simps_3"
+  "LEFT_OR_DISTRIB" > "Groebner_Basis.dnf_1"
+  "LEFT_IMP_FORALL_THM" > "HOL.ex_simps_5"
+  "LEFT_IMP_EXISTS_THM" > "HOL.all_simps_5"
+  "LEFT_FORALL_OR_THM" > "HOL.all_simps_3"
+  "LEFT_FORALL_IMP_THM" > "HOL.all_simps_5"
+  "LEFT_EXISTS_IMP_THM" > "HOL.ex_simps_5"
+  "LEFT_EXISTS_AND_THM" > "HOL.ex_simps_1"
+  "LEFT_AND_FORALL_THM" > "HOL.all_simps_1"
+  "LEFT_AND_EXISTS_THM" > "HOL.ex_simps_1"
+  "LEFT_ADD_DISTRIB" > "Fields.linordered_field_class.sign_simps_25"
+  "LAST_EL" > "List.last_conv_nth"
+  "LAST_CLAUSES" > "HOLLightList.LAST_CLAUSES"
+  "LAST_APPEND" > "List.last_append"
+  "LAMBDA_UNIQUE" > "HOLLight.hollight.LAMBDA_UNIQUE"
+  "LAMBDA_PAIR_THM" > "HOLLight.hollight.LAMBDA_PAIR_THM"
+  "LAMBDA_ETA" > "HOLLight.hollight.LAMBDA_ETA"
+  "LAMBDA_BETA" > "HOLLight.hollight.LAMBDA_BETA"
+  "I_THM" > "HOL.refl"
+  "I_O_ID" > "HOLLight.hollight.I_O_ID"
+  "ITSET_def" > "HOLLight.hollight.ITSET_def"
+  "ITSET_EQ" > "HOLLight.hollight.ITSET_EQ"
+  "ITLIST_EXTRA" > "HOLLightList.ITLIST_EXTRA"
+  "ITLIST_APPEND" > "List.foldr_append"
+  "ITLIST2" > "HOLLightList.ITLIST2"
+  "ITERATE_UNION_NONZERO" > "HOLLight.hollight.ITERATE_UNION_NONZERO"
+  "ITERATE_UNION_GEN" > "HOLLight.hollight.ITERATE_UNION_GEN"
+  "ITERATE_UNION" > "HOLLight.hollight.ITERATE_UNION"
+  "ITERATE_SUPPORT" > "HOLLight.hollight.ITERATE_SUPPORT"
+  "ITERATE_SUPERSET" > "HOLLight.hollight.ITERATE_SUPERSET"
+  "ITERATE_SING" > "HOLLight.hollight.ITERATE_SING"
+  "ITERATE_RELATED" > "HOLLight.hollight.ITERATE_RELATED"
+  "ITERATE_PAIR" > "HOLLight.hollight.ITERATE_PAIR"
+  "ITERATE_OP_GEN" > "HOLLight.hollight.ITERATE_OP_GEN"
+  "ITERATE_OP" > "HOLLight.hollight.ITERATE_OP"
+  "ITERATE_ITERATE_PRODUCT" > "HOLLight.hollight.ITERATE_ITERATE_PRODUCT"
+  "ITERATE_INJECTION" > "HOLLight.hollight.ITERATE_INJECTION"
+  "ITERATE_INCL_EXCL" > "HOLLight.hollight.ITERATE_INCL_EXCL"
+  "ITERATE_IMAGE_NONZERO" > "HOLLight.hollight.ITERATE_IMAGE_NONZERO"
+  "ITERATE_IMAGE" > "HOLLight.hollight.ITERATE_IMAGE"
+  "ITERATE_EXPAND_CASES" > "HOLLight.hollight.ITERATE_EXPAND_CASES"
+  "ITERATE_EQ_NEUTRAL" > "HOLLight.hollight.ITERATE_EQ_NEUTRAL"
+  "ITERATE_EQ_GENERAL_INVERSES" > "HOLLight.hollight.ITERATE_EQ_GENERAL_INVERSES"
+  "ITERATE_EQ_GENERAL" > "HOLLight.hollight.ITERATE_EQ_GENERAL"
+  "ITERATE_EQ" > "HOLLight.hollight.ITERATE_EQ"
+  "ITERATE_DIFF_GEN" > "HOLLight.hollight.ITERATE_DIFF_GEN"
+  "ITERATE_DIFF" > "HOLLight.hollight.ITERATE_DIFF"
+  "ITERATE_DELTA" > "HOLLight.hollight.ITERATE_DELTA"
+  "ITERATE_DELETE" > "HOLLight.hollight.ITERATE_DELETE"
+  "ITERATE_CLOSED" > "HOLLight.hollight.ITERATE_CLOSED"
+  "ITERATE_CLAUSES_NUMSEG" > "HOLLight.hollight.ITERATE_CLAUSES_NUMSEG"
+  "ITERATE_CLAUSES_GEN" > "HOLLight.hollight.ITERATE_CLAUSES_GEN"
+  "ITERATE_CLAUSES" > "HOLLight.hollight.ITERATE_CLAUSES"
+  "ITERATE_CASES" > "HOLLight.hollight.ITERATE_CASES"
+  "ITERATE_BIJECTION" > "HOLLight.hollight.ITERATE_BIJECTION"
+  "ISO_def" > "HOLLight.hollight.ISO_def"
+  "ISO_USAGE" > "HOLLight.hollight.ISO_USAGE"
+  "ISO_REFL" > "HOLLight.hollight.ISO_REFL"
+  "ISO_FUN" > "HOLLight.hollight.ISO_FUN"
+  "IN_UNIV" > "Set.UNIV_I"
+  "IN_UNIONS" > "HOLLight.hollight.IN_UNIONS"
+  "IN_UNION" > "Complete_Lattices.mem_simps_3"
+  "IN_SUPPORT" > "HOLLight.hollight.IN_SUPPORT"
+  "IN_SING" > "Set.singleton_iff"
+  "IN_SET_OF_LIST" > "HOLLightList.IN_SET_OF_LIST"
+  "IN_REST" > "HOLLight.hollight.IN_REST"
+  "IN_NUMSEG_0" > "HOLLight.hollight.IN_NUMSEG_0"
+  "IN_NUMSEG" > "SetInterval.ord_class.atLeastAtMost_iff"
+  "IN_INTERS" > "HOLLight.hollight.IN_INTERS"
+  "IN_INTER" > "Complete_Lattices.mem_simps_4"
+  "IN_INSERT" > "Complete_Lattices.mem_simps_1"
+  "IN_IMAGE" > "HOLLight.hollight.IN_IMAGE"
+  "IN_ELIM_THM" > "HOLLight.hollight.IN_ELIM_THM"
+  "IN_ELIM_PAIR_THM" > "HOLLight.hollight.IN_ELIM_PAIR_THM"
+  "IN_DISJOINT" > "HOLLight.hollight.IN_DISJOINT"
+  "IN_DIFF" > "Complete_Lattices.mem_simps_6"
+  "IN_DELETE_EQ" > "HOLLight.hollight.IN_DELETE_EQ"
+  "IN_DELETE" > "HOLLight.hollight.IN_DELETE"
+  "IN_CROSS" > "HOLLight.hollight.IN_CROSS"
+  "INT_WOP" > "HOLLight.hollight.INT_WOP"
+  "INT_POW" > "HOLLight.hollight.INT_POW"
+  "INT_OF_NUM_OF_INT" > "HOLLight.hollight.INT_OF_NUM_OF_INT"
+  "INT_LT_DISCRETE" > "HOLLight.hollight.INT_LT_DISCRETE"
+  "INT_LT" > "HOLLight.hollight.INT_LT"
+  "INT_INTEGRAL" > "HOLLight.hollight.INT_INTEGRAL"
+  "INT_IMAGE" > "HOLLight.hollight.INT_IMAGE"
+  "INT_GT_DISCRETE" > "HOLLight.hollight.INT_GT_DISCRETE"
+  "INT_GT" > "HOLLight.hollight.INT_GT"
+  "INT_GE" > "HOLLight.hollight.INT_GE"
+  "INT_GCD_EXISTS_POS" > "HOLLight.hollight.INT_GCD_EXISTS_POS"
+  "INT_GCD_EXISTS" > "HOLLight.hollight.INT_GCD_EXISTS"
+  "INT_FORALL_POS" > "HOLLight.hollight.INT_FORALL_POS"
+  "INT_FORALL_ABS" > "HOLLight.hollight.INT_FORALL_ABS"
+  "INT_EXISTS_POS" > "HOLLight.hollight.INT_EXISTS_POS"
+  "INT_EXISTS_ABS" > "HOLLight.hollight.INT_EXISTS_ABS"
+  "INT_DIVMOD_UNIQ" > "HOLLight.hollight.INT_DIVMOD_UNIQ"
+  "INT_DIVMOD_EXIST_0" > "HOLLight.hollight.INT_DIVMOD_EXIST_0"
+  "INT_DIVISION" > "HOLLight.hollight.INT_DIVISION"
+  "INT_ARCH" > "HOLLight.hollight.INT_ARCH"
+  "INT_ABS_MUL_1" > "HOLLight.hollight.INT_ABS_MUL_1"
+  "INT_ABS" > "HOLLight.hollight.INT_ABS"
+  "INTER_UNIV" > "HOLLight.hollight.INTER_UNIV"
+  "INTER_UNIONS" > "HOLLight.hollight.INTER_UNIONS"
+  "INTER_SUBSET" > "HOLLight.hollight.INTER_SUBSET"
+  "INTER_OVER_UNION" > "Lattices.distrib_lattice_class.distrib_1"
+  "INTER_IDEMPOT" > "Big_Operators.lattice_class.Inf_fin.idem"
+  "INTER_EMPTY" > "HOLLight.hollight.INTER_EMPTY"
+  "INTER_COMM" > "Lattices.lattice_class.inf_sup_aci_1"
+  "INTER_ASSOC" > "Lattices.lattice_class.inf_sup_aci_2"
+  "INTER_ACI" > "HOLLight.hollight.INTER_ACI"
+  "INTERS_UNIONS" > "HOLLight.hollight.INTERS_UNIONS"
+  "INTERS_INSERT" > "Complete_Lattices.Inter_insert"
+  "INTERS_IMAGE" > "HOLLight.hollight.INTERS_IMAGE"
+  "INTERS_GSPEC" > "HOLLight.hollight.INTERS_GSPEC"
+  "INTERS_2" > "Complete_Lattices.Int_eq_Inter"
+  "INTERS_1" > "Complete_Lattices.complete_lattice_class.Inf_singleton"
+  "INTERS_0" > "Complete_Lattices.Inter_empty"
+  "INSERT_UNIV" > "HOLLight.hollight.INSERT_UNIV"
+  "INSERT_UNION_EQ" > "Set.Un_insert_left"
+  "INSERT_UNION" > "HOLLight.hollight.INSERT_UNION"
+  "INSERT_SUBSET" > "Set.insert_subset"
+  "INSERT_INTER" > "Set.Int_insert_left"
+  "INSERT_INSERT" > "Set.insert_absorb2"
+  "INSERT_DIFF" > "Set.insert_Diff_if"
+  "INSERT_DELETE" > "Set.insert_Diff"
+  "INSERT_COMM" > "Set.insert_commute"
+  "INSERT_AC" > "HOLLight.hollight.INSERT_AC"
+  "INSERT" > "HOLLight.hollight.INSERT"
+  "INJ_def" > "HOLLight.hollight.INJ_def"
+  "INJ_INVERSE2" > "HOLLight.hollight.INJ_INVERSE2"
+  "INJP_def" > "HOLLight.hollight.INJP_def"
+  "INJP_INJ" > "HOLLight.hollight.INJP_INJ"
+  "INJN_def" > "HOLLight.hollight.INJN_def"
+  "INJN_INJ" > "HOLLight.hollight.INJN_INJ"
+  "INJF_def" > "HOLLight.hollight.INJF_def"
+  "INJF_INJ" > "HOLLight.hollight.INJF_INJ"
+  "INJECTIVE_ON_LEFT_INVERSE" > "HOLLight.hollight.INJECTIVE_ON_LEFT_INVERSE"
+  "INJECTIVE_ON_IMAGE" > "HOLLight.hollight.INJECTIVE_ON_IMAGE"
+  "INJECTIVE_MAP" > "HOLLightList.INJECTIVE_MAP"
+  "INJECTIVE_LEFT_INVERSE" > "HOLLight.hollight.INJECTIVE_LEFT_INVERSE"
+  "INJECTIVE_IMAGE" > "HOLLight.hollight.INJECTIVE_IMAGE"
+  "INJA_def" > "HOLLight.hollight.INJA_def"
+  "INJA_INJ" > "HOLLight.hollight.INJA_INJ"
+  "INFINITE_NONEMPTY" > "Infinite_Set.infinite_imp_nonempty"
+  "INFINITE_IMAGE_INJ" > "HOLLight.hollight.INFINITE_IMAGE_INJ"
+  "INFINITE_DIFF_FINITE" > "Infinite_Set.Diff_infinite_finite"
+  "IND_SUC_def" > "HOLLight.hollight.IND_SUC_def"
+  "IND_SUC_0_EXISTS" > "HOLLight.hollight.IND_SUC_0_EXISTS"
+  "IND_0_def" > "HOLLight.hollight.IND_0_def"
+  "IMP_EQ_CLAUSE" > "HOLLight.hollight.IMP_EQ_CLAUSE"
+  "IMP_CONJ_ALT" > "HOLLight.hollight.IMP_CONJ_ALT"
+  "IMP_CONJ" > "HOL.imp_conjL"
+  "IMP_CLAUSES" > "HOLLight.hollight.IMP_CLAUSES"
+  "IMAGE_o" > "Fun.image_compose"
+  "IMAGE_UNIONS" > "HOLLight.hollight.IMAGE_UNIONS"
+  "IMAGE_UNION" > "Set.image_Un"
+  "IMAGE_SUBSET" > "Set.image_mono"
+  "IMAGE_INTER_INJ" > "HOLLight.hollight.IMAGE_INTER_INJ"
+  "IMAGE_INJECTIVE_IMAGE_OF_SUBSET" > "HOLLight.hollight.IMAGE_INJECTIVE_IMAGE_OF_SUBSET"
+  "IMAGE_IMP_INJECTIVE_GEN" > "HOLLight.hollight.IMAGE_IMP_INJECTIVE_GEN"
+  "IMAGE_IMP_INJECTIVE" > "HOLLight.hollight.IMAGE_IMP_INJECTIVE"
+  "IMAGE_ID" > "Set.image_ident"
+  "IMAGE_I" > "Fun.image_id"
+  "IMAGE_EQ_EMPTY" > "Set.image_is_empty"
+  "IMAGE_DIFF_INJ" > "HOLLight.hollight.IMAGE_DIFF_INJ"
+  "IMAGE_DELETE_INJ" > "HOLLight.hollight.IMAGE_DELETE_INJ"
+  "IMAGE_CONST" > "Set.image_constant_conv"
+  "IMAGE_CLAUSES" > "HOLLight.hollight.IMAGE_CLAUSES"
+  "HREAL_MUL_RZERO" > "HOLLight.hollight.HREAL_MUL_RZERO"
+  "HREAL_MUL_LZERO" > "HOLLight.hollight.HREAL_MUL_LZERO"
+  "HREAL_LE_MUL_RCANCEL_IMP" > "HOLLight.hollight.HREAL_LE_MUL_RCANCEL_IMP"
+  "HREAL_LE_EXISTS_DEF" > "HOLLight.hollight.HREAL_LE_EXISTS_DEF"
+  "HREAL_LE_ADD_RCANCEL" > "HOLLight.hollight.HREAL_LE_ADD_RCANCEL"
+  "HREAL_LE_ADD_LCANCEL" > "HOLLight.hollight.HREAL_LE_ADD_LCANCEL"
+  "HREAL_LE_ADD2" > "HOLLight.hollight.HREAL_LE_ADD2"
+  "HREAL_EQ_ADD_RCANCEL" > "HOLLight.hollight.HREAL_EQ_ADD_RCANCEL"
+  "HREAL_EQ_ADD_LCANCEL" > "HOLLight.hollight.HREAL_EQ_ADD_LCANCEL"
+  "HREAL_ADD_RID" > "HOLLight.hollight.HREAL_ADD_RID"
+  "HREAL_ADD_RDISTRIB" > "HOLLight.hollight.HREAL_ADD_RDISTRIB"
+  "HREAL_ADD_AC" > "HOLLight.hollight.HREAL_ADD_AC"
+  "HD_APPEND" > "List.hd_append"
+  "HAS_SIZE_def" > "HOLLight.hollight.HAS_SIZE_def"
+  "HAS_SIZE_UNIONS" > "HOLLight.hollight.HAS_SIZE_UNIONS"
+  "HAS_SIZE_UNION" > "HOLLight.hollight.HAS_SIZE_UNION"
+  "HAS_SIZE_SUC" > "HOLLight.hollight.HAS_SIZE_SUC"
+  "HAS_SIZE_PRODUCT_DEPENDENT" > "HOLLight.hollight.HAS_SIZE_PRODUCT_DEPENDENT"
+  "HAS_SIZE_PRODUCT" > "HOLLight.hollight.HAS_SIZE_PRODUCT"
+  "HAS_SIZE_POWERSET" > "HOLLight.hollight.HAS_SIZE_POWERSET"
+  "HAS_SIZE_NUMSEG_LT" > "HOLLight.hollight.HAS_SIZE_NUMSEG_LT"
+  "HAS_SIZE_NUMSEG_LE" > "HOLLight.hollight.HAS_SIZE_NUMSEG_LE"
+  "HAS_SIZE_NUMSEG_1" > "HOLLight.hollight.HAS_SIZE_NUMSEG_1"
+  "HAS_SIZE_NUMSEG" > "HOLLight.hollight.HAS_SIZE_NUMSEG"
+  "HAS_SIZE_INDEX" > "HOLLight.hollight.HAS_SIZE_INDEX"
+  "HAS_SIZE_IMAGE_INJ_EQ" > "HOLLight.hollight.HAS_SIZE_IMAGE_INJ_EQ"
+  "HAS_SIZE_IMAGE_INJ" > "HOLLight.hollight.HAS_SIZE_IMAGE_INJ"
+  "HAS_SIZE_FUNSPACE" > "HOLLight.hollight.HAS_SIZE_FUNSPACE"
+  "HAS_SIZE_FINITE_IMAGE" > "HOLLight.hollight.HAS_SIZE_FINITE_IMAGE"
+  "HAS_SIZE_DIFF" > "HOLLight.hollight.HAS_SIZE_DIFF"
+  "HAS_SIZE_CROSS" > "HOLLight.hollight.HAS_SIZE_CROSS"
+  "HAS_SIZE_CLAUSES" > "HOLLight.hollight.HAS_SIZE_CLAUSES"
+  "HAS_SIZE_CARD" > "HOLLight.hollight.HAS_SIZE_CARD"
+  "HAS_SIZE_1" > "HOLLight.hollight.HAS_SIZE_1"
+  "HAS_SIZE_0" > "HOLLight.hollight.HAS_SIZE_0"
+  "GE_C" > "HOLLight.hollight.GE_C"
+  "FUN_IN_IMAGE" > "Set.imageI"
+  "FUN_EQ_THM" > "HOL.fun_eq_iff"
+  "FUNCTION_FACTORS_RIGHT" > "HOLLight.hollight.FUNCTION_FACTORS_RIGHT"
+  "FUNCTION_FACTORS_LEFT" > "HOLLight.hollight.FUNCTION_FACTORS_LEFT"
+  "FST" > "Product_Type.fst_conv"
+  "FORALL_UNWIND_THM2" > "HOL.simp_thms_41"
+  "FORALL_UNWIND_THM1" > "HOL.simp_thms_42"
+  "FORALL_UNCURRY" > "HOLLight.hollight.FORALL_UNCURRY"
+  "FORALL_TRIPLED_THM" > "HOLLight.hollight.FORALL_TRIPLED_THM"
+  "FORALL_SUBSET_IMAGE" > "HOLLight.hollight.FORALL_SUBSET_IMAGE"
+  "FORALL_SIMP" > "HOL.simp_thms_35"
+  "FORALL_PAIR_THM" > "Product_Type.split_paired_All"
+  "FORALL_PAIRED_THM" > "HOLLight.hollight.FORALL_PAIRED_THM"
+  "FORALL_NOT_THM" > "HOL.not_ex"
+  "FORALL_IN_UNIONS" > "HOLLight.hollight.FORALL_IN_UNIONS"
+  "FORALL_IN_INSERT" > "HOLLight.hollight.FORALL_IN_INSERT"
+  "FORALL_IN_IMAGE" > "HOLLight.hollight.FORALL_IN_IMAGE"
+  "FORALL_IN_GSPEC" > "HOLLight.hollight.FORALL_IN_GSPEC"
+  "FORALL_IN_CLAUSES" > "HOLLight.hollight.FORALL_IN_CLAUSES"
+  "FORALL_FINITE_INDEX" > "HOLLight.hollight.FORALL_FINITE_INDEX"
+  "FORALL_BOOL_THM" > "Set.all_bool_eq"
+  "FORALL_AND_THM" > "HOL.all_conj_distrib"
+  "FORALL_ALL" > "HOLLightList.FORALL_ALL"
+  "FNIL_def" > "HOLLight.hollight.FNIL_def"
+  "FINREC_def" > "HOLLight.hollight.FINREC_def"
+  "FINREC_UNIQUE_LEMMA" > "HOLLight.hollight.FINREC_UNIQUE_LEMMA"
+  "FINREC_SUC_LEMMA" > "HOLLight.hollight.FINREC_SUC_LEMMA"
+  "FINREC_FUN_LEMMA" > "HOLLight.hollight.FINREC_FUN_LEMMA"
+  "FINREC_FUN" > "HOLLight.hollight.FINREC_FUN"
+  "FINREC_EXISTS_LEMMA" > "HOLLight.hollight.FINREC_EXISTS_LEMMA"
+  "FINREC_1_LEMMA" > "HOLLight.hollight.FINREC_1_LEMMA"
+  "FINITE_UNION_IMP" > "Finite_Set.finite_UnI"
+  "FINITE_UNIONS" > "HOLLight.hollight.FINITE_UNIONS"
+  "FINITE_UNION" > "Finite_Set.finite_Un"
+  "FINITE_SUPPORT_DELTA" > "HOLLight.hollight.FINITE_SUPPORT_DELTA"
+  "FINITE_SUPPORT" > "HOLLight.hollight.FINITE_SUPPORT"
+  "FINITE_SUM_IMAGE" > "HOLLight.hollight.FINITE_SUM_IMAGE"
+  "FINITE_SUBSET_IMAGE_IMP" > "HOLLight.hollight.FINITE_SUBSET_IMAGE_IMP"
+  "FINITE_SUBSET_IMAGE" > "HOLLight.hollight.FINITE_SUBSET_IMAGE"
+  "FINITE_SUBSET" > "Finite_Set.finite_subset"
+  "FINITE_SING" > "HOLLight.hollight.FINITE_SING"
+  "FINITE_RESTRICT" > "HOLLight.hollight.FINITE_RESTRICT"
+  "FINITE_RECURSION_DELETE" > "HOLLight.hollight.FINITE_RECURSION_DELETE"
+  "FINITE_RECURSION" > "HOLLight.hollight.FINITE_RECURSION"
+  "FINITE_REAL_INTERVAL" > "HOLLight.hollight.FINITE_REAL_INTERVAL"
+  "FINITE_PRODUCT_DEPENDENT" > "HOLLight.hollight.FINITE_PRODUCT_DEPENDENT"
+  "FINITE_PRODUCT" > "HOLLight.hollight.FINITE_PRODUCT"
+  "FINITE_POWERSET" > "HOLLight.hollight.FINITE_POWERSET"
+  "FINITE_NUMSEG_LT" > "HOLLight.hollight.FINITE_NUMSEG_LT"
+  "FINITE_NUMSEG_LE" > "HOLLight.hollight.FINITE_NUMSEG_LE"
+  "FINITE_NUMSEG" > "SetInterval.finite_atLeastAtMost"
+  "FINITE_INTSEG" > "HOLLight.hollight.FINITE_INTSEG"
+  "FINITE_INTER" > "Finite_Set.finite_Int"
+  "FINITE_INSERT" > "Finite_Set.finite_insert"
+  "FINITE_INDUCT_STRONG" > "Finite_Set.finite_induct"
+  "FINITE_INDUCT_DELETE" > "HOLLight.hollight.FINITE_INDUCT_DELETE"
+  "FINITE_INDEX_WORKS" > "HOLLight.hollight.FINITE_INDEX_WORKS"
+  "FINITE_INDEX_NUMSEG" > "HOLLight.hollight.FINITE_INDEX_NUMSEG"
+  "FINITE_INDEX_NUMBERS" > "HOLLight.hollight.FINITE_INDEX_NUMBERS"
+  "FINITE_INDEX_INRANGE" > "HOLLight.hollight.FINITE_INDEX_INRANGE"
+  "FINITE_INDEX_INJ" > "HOLLight.hollight.FINITE_INDEX_INJ"
+  "FINITE_IMAGE_INJ_GENERAL" > "HOLLight.hollight.FINITE_IMAGE_INJ_GENERAL"
+  "FINITE_IMAGE_INJ_EQ" > "HOLLight.hollight.FINITE_IMAGE_INJ_EQ"
+  "FINITE_IMAGE_INJ" > "HOLLight.hollight.FINITE_IMAGE_INJ"
+  "FINITE_IMAGE_IMAGE" > "HOLLight.hollight.FINITE_IMAGE_IMAGE"
+  "FINITE_IMAGE_EXPAND" > "HOLLight.hollight.FINITE_IMAGE_EXPAND"
+  "FINITE_IMAGE" > "Finite_Set.finite_imageI"
+  "FINITE_HAS_SIZE" > "HOLLight.hollight.FINITE_HAS_SIZE"
+  "FINITE_FUNSPACE" > "HOLLight.hollight.FINITE_FUNSPACE"
+  "FINITE_FINITE_UNIONS" > "HOLLight.hollight.FINITE_FINITE_UNIONS"
+  "FINITE_FINITE_PREIMAGE_GENERAL" > "HOLLight.hollight.FINITE_FINITE_PREIMAGE_GENERAL"
+  "FINITE_FINITE_PREIMAGE" > "HOLLight.hollight.FINITE_FINITE_PREIMAGE"
+  "FINITE_FINITE_IMAGE" > "HOLLight.hollight.FINITE_FINITE_IMAGE"
+  "FINITE_EMPTY" > "Finite_Set.finite.emptyI"
+  "FINITE_DIFF" > "Finite_Set.finite_Diff"
+  "FINITE_DELETE_IMP" > "HOLLight.hollight.FINITE_DELETE_IMP"
+  "FINITE_DELETE" > "HOLLight.hollight.FINITE_DELETE"
+  "FINITE_CROSS" > "HOLLight.hollight.FINITE_CROSS"
+  "FINITE_CART" > "HOLLight.hollight.FINITE_CART"
+  "FILTER_MAP" > "List.filter_map"
+  "FILTER_APPEND" > "List.filter_append"
+  "FCONS_def" > "HOLLight.hollight.FCONS_def"
+  "FCONS_UNDO" > "HOLLight.hollight.FCONS_UNDO"
+  "FACT_NZ" > "Fact.fact_nonzero_nat"
+  "FACT_MONO" > "Fact.fact_mono_nat"
+  "FACT_LT" > "Fact.fact_gt_zero_nat"
+  "FACT_LE" > "Fact.fact_ge_one_nat"
+  "EX_MEM" > "HOLLightList.EX_MEM"
+  "EX_IMP" > "HOLLightList.EX_IMP"
+  "EXTENSION" > "Set.set_eq_iff"
+  "EXP_ZERO" > "Power.power_0_left"
+  "EXP_ONE" > "Power.monoid_mult_class.power_one"
+  "EXP_MULT" > "Power.monoid_mult_class.power_mult"
+  "EXP_MONO_LT_IMP" > "HOLLight.hollight.EXP_MONO_LT_IMP"
+  "EXP_MONO_LT" > "HOLLight.hollight.EXP_MONO_LT"
+  "EXP_MONO_LE_IMP" > "HOLLight.hollight.EXP_MONO_LE_IMP"
+  "EXP_MONO_LE" > "HOLLight.hollight.EXP_MONO_LE"
+  "EXP_MONO_EQ" > "HOLLight.hollight.EXP_MONO_EQ"
+  "EXP_LT_0" > "HOLLight.hollight.EXP_LT_0"
+  "EXP_EQ_1" > "HOLLight.hollight.EXP_EQ_1"
+  "EXP_EQ_0" > "Power.power_eq_0_iff"
+  "EXP_ADD" > "Power.monoid_mult_class.power_add"
+  "EXP_2" > "Nat_Numeral.monoid_mult_class.power2_eq_square"
+  "EXP_1" > "Power.monoid_mult_class.power_one_right"
+  "EXISTS_UNIQUE_THM" > "HOLLightCompat.EXISTS_UNIQUE_THM"
+  "EXISTS_UNIQUE_REFL" > "HOL.ex1_eq_1"
+  "EXISTS_UNIQUE_ALT" > "HOLLight.hollight.EXISTS_UNIQUE_ALT"
+  "EXISTS_UNIQUE" > "HOL.Ex1_def"
+  "EXISTS_UNCURRY" > "HOLLight.hollight.EXISTS_UNCURRY"
+  "EXISTS_TRIPLED_THM" > "HOLLight.hollight.EXISTS_TRIPLED_THM"
+  "EXISTS_THM" > "HOL4Setup.EXISTS_DEF"
+  "EXISTS_SUBSET_IMAGE" > "HOLLight.hollight.EXISTS_SUBSET_IMAGE"
+  "EXISTS_SIMP" > "HOL.simp_thms_36"
+  "EXISTS_REFL" > "HOL.simp_thms_37"
+  "EXISTS_PAIR_THM" > "Product_Type.split_paired_Ex"
+  "EXISTS_PAIRED_THM" > "HOLLight.hollight.EXISTS_PAIRED_THM"
+  "EXISTS_OR_THM" > "HOL.ex_disj_distrib"
+  "EXISTS_ONE_REP" > "HOLLight.hollight.EXISTS_ONE_REP"
+  "EXISTS_NOT_THM" > "HOL.not_all"
+  "EXISTS_IN_UNIONS" > "HOLLight.hollight.EXISTS_IN_UNIONS"
+  "EXISTS_IN_INSERT" > "HOLLight.hollight.EXISTS_IN_INSERT"
+  "EXISTS_IN_IMAGE" > "HOLLight.hollight.EXISTS_IN_IMAGE"
+  "EXISTS_IN_GSPEC" > "HOLLight.hollight.EXISTS_IN_GSPEC"
+  "EXISTS_IN_CLAUSES" > "HOLLight.hollight.EXISTS_IN_CLAUSES"
+  "EXISTS_FINITE_SUBSET_IMAGE" > "HOLLight.hollight.EXISTS_FINITE_SUBSET_IMAGE"
+  "EXISTS_EX" > "HOLLightList.EXISTS_EX"
+  "EXISTS_BOOL_THM" > "Set.ex_bool_eq"
+  "EXCLUDED_MIDDLE" > "HOLLight.hollight.EXCLUDED_MIDDLE"
+  "EVEN_SUB" > "HOLLight.hollight.EVEN_SUB"
+  "EVEN_OR_ODD" > "HOLLight.hollight.EVEN_OR_ODD"
+  "EVEN_ODD_DECOMPOSITION" > "HOLLight.hollight.EVEN_ODD_DECOMPOSITION"
+  "EVEN_MULT" > "Parity.even_product_nat"
+  "EVEN_MOD" > "HOLLight.hollight.EVEN_MOD"
+  "EVEN_EXP" > "HOLLight.hollight.EVEN_EXP"
+  "EVEN_EXISTS_LEMMA" > "HOLLight.hollight.EVEN_EXISTS_LEMMA"
+  "EVEN_EXISTS" > "Parity.even_mult_two_ex"
+  "EVEN_DOUBLE" > "HOLLight.hollight.EVEN_DOUBLE"
+  "EVEN_AND_ODD" > "HOLLight.hollight.EVEN_AND_ODD"
+  "EVEN_ADD" > "Parity.even_add"
+  "EQ_UNIV" > "HOLLight.hollight.EQ_UNIV"
+  "EQ_TRANS" > "HOL.trans"
+  "EQ_SYM_EQ" > "HOL.eq_ac_1"
+  "EQ_SYM" > "HOL.eq_reflection"
+  "EQ_REFL" > "HOL.refl"
+  "EQ_MULT_RCANCEL" > "Nat.mult_cancel2"
+  "EQ_MULT_LCANCEL" > "Numeral_Simprocs.nat_mult_eq_cancel_disj"
+  "EQ_IMP_LE" > "Nat.eq_imp_le"
+  "EQ_EXT" > "HOL.eq_reflection"
+  "EQ_EXP" > "HOLLight.hollight.EQ_EXP"
+  "EQ_CLAUSES" > "HOLLight.hollight.EQ_CLAUSES"
+  "EQ_ADD_RCANCEL_0" > "HOLLight.hollight.EQ_ADD_RCANCEL_0"
+  "EQ_ADD_RCANCEL" > "Groups.cancel_semigroup_add_class.add_right_cancel"
+  "EQ_ADD_LCANCEL_0" > "HOLLight.hollight.EQ_ADD_LCANCEL_0"
+  "EQ_ADD_LCANCEL" > "Groups.cancel_semigroup_add_class.add_left_cancel"
+  "EMPTY_UNIONS" > "HOLLight.hollight.EMPTY_UNIONS"
+  "EMPTY_UNION" > "Lattices.bounded_lattice_bot_class.sup_eq_bot_iff"
+  "EMPTY_SUBSET" > "Orderings.bot_class.bot_least"
+  "EMPTY_NOT_UNIV" > "HOLLight.hollight.EMPTY_NOT_UNIV"
+  "EMPTY_GSPEC" > "HOLLight.hollight.EMPTY_GSPEC"
+  "EMPTY_DIFF" > "Set.empty_Diff"
+  "EMPTY_DELETE" > "HOLLight.hollight.EMPTY_DELETE"
+  "EL_CONS" > "List.nth_Cons'"
+  "EL_APPEND" > "List.nth_append"
+  "DIV_UNIQ" > "HOLLight.hollight.DIV_UNIQ"
+  "DIV_REFL" > "Divides.semiring_div_class.div_self"
+  "DIV_MUL_LE" > "HOLLight.hollight.DIV_MUL_LE"
+  "DIV_MULT2" > "HOLLight.hollight.DIV_MULT2"
+  "DIV_MONO_LT" > "HOLLight.hollight.DIV_MONO_LT"
+  "DIV_MONO2" > "HOLLight.hollight.DIV_MONO2"
+  "DIV_MONO" > "HOLLight.hollight.DIV_MONO"
+  "DIV_MOD" > "HOLLight.hollight.DIV_MOD"
+  "DIV_LT" > "Divides.div_less"
+  "DIV_LE_EXCLUSION" > "HOLLight.hollight.DIV_LE_EXCLUSION"
+  "DIV_LE" > "HOLLight.hollight.DIV_LE"
+  "DIV_EQ_EXCLUSION" > "HOLLight.hollight.DIV_EQ_EXCLUSION"
+  "DIV_EQ_0" > "HOLLight.hollight.DIV_EQ_0"
+  "DIV_DIV" > "HOLLight.hollight.DIV_DIV"
+  "DIV_ADD_MOD" > "HOLLight.hollight.DIV_ADD_MOD"
+  "DIVMOD_UNIQ_LEMMA" > "HOLLight.hollight.DIVMOD_UNIQ_LEMMA"
+  "DIVMOD_UNIQ" > "HOLLight.hollight.DIVMOD_UNIQ"
+  "DIVMOD_EXIST_0" > "HOLLight.hollight.DIVMOD_EXIST_0"
+  "DIVMOD_EXIST" > "HOLLight.hollight.DIVMOD_EXIST"
+  "DIVMOD_ELIM_THM" > "HOLLight.hollight.DIVMOD_ELIM_THM"
+  "DIVISION" > "HOLLight.hollight.DIVISION"
+  "DIST_TRIANGLE_LE" > "HOLLight.hollight.DIST_TRIANGLE_LE"
+  "DIST_TRIANGLES_LE" > "HOLLight.hollight.DIST_TRIANGLES_LE"
+  "DIST_SYM" > "HOLLight.hollight.DIST_SYM"
+  "DIST_RZERO" > "HOLLight.hollight.DIST_RZERO"
+  "DIST_RMUL" > "HOLLight.hollight.DIST_RMUL"
+  "DIST_REFL" > "HOLLight.hollight.DIST_REFL"
+  "DIST_RADD_0" > "HOLLight.hollight.DIST_RADD_0"
+  "DIST_RADD" > "HOLLight.hollight.DIST_RADD"
+  "DIST_LZERO" > "HOLLight.hollight.DIST_LZERO"
+  "DIST_LMUL" > "HOLLight.hollight.DIST_LMUL"
+  "DIST_LE_CASES" > "HOLLight.hollight.DIST_LE_CASES"
+  "DIST_LADD_0" > "HOLLight.hollight.DIST_LADD_0"
+  "DIST_LADD" > "HOLLight.hollight.DIST_LADD"
+  "DIST_EQ_0" > "HOLLight.hollight.DIST_EQ_0"
+  "DIST_ELIM_THM" > "HOLLight.hollight.DIST_ELIM_THM"
+  "DISJ_SYM" > "Groebner_Basis.dnf_4"
+  "DISJ_ASSOC" > "HOL.disj_ac_3"
+  "DISJ_ACI" > "HOLLight.hollight.DISJ_ACI"
+  "DISJOINT_UNION" > "HOLLight.hollight.DISJOINT_UNION"
+  "DISJOINT_SYM" > "HOLLight.hollight.DISJOINT_SYM"
+  "DISJOINT_NUMSEG" > "HOLLight.hollight.DISJOINT_NUMSEG"
+  "DISJOINT_INSERT" > "HOLLight.hollight.DISJOINT_INSERT"
+  "DISJOINT_EMPTY_REFL" > "HOLLight.hollight.DISJOINT_EMPTY_REFL"
+  "DISJOINT_EMPTY" > "HOLLight.hollight.DISJOINT_EMPTY"
+  "DISJOINT_DELETE_SYM" > "HOLLight.hollight.DISJOINT_DELETE_SYM"
+  "DIMINDEX_UNIV" > "HOLLight.hollight.DIMINDEX_UNIV"
+  "DIMINDEX_UNIQUE" > "HOLLight.hollight.DIMINDEX_UNIQUE"
+  "DIMINDEX_NONZERO" > "HOLLight.hollight.DIMINDEX_NONZERO"
+  "DIMINDEX_GE_1" > "HOLLight.hollight.DIMINDEX_GE_1"
+  "DIMINDEX_FINITE_IMAGE" > "HOLLight.hollight.DIMINDEX_FINITE_IMAGE"
+  "DIFF_UNIV" > "Set.Diff_UNIV"
+  "DIFF_INTERS" > "HOLLight.hollight.DIFF_INTERS"
+  "DIFF_INSERT" > "Set.Diff_insert2"
+  "DIFF_EQ_EMPTY" > "Set.Diff_cancel"
+  "DIFF_EMPTY" > "Set.Diff_empty"
+  "DIFF_DIFF" > "Set.Diff_idemp"
+  "DEST_REC_INJ" > "HOLLight.hollight.recspace._dest_rec_inject"
+  "DELETE_SUBSET" > "HOLLight.hollight.DELETE_SUBSET"
+  "DELETE_NON_ELEMENT" > "HOLLight.hollight.DELETE_NON_ELEMENT"
+  "DELETE_INTER" > "HOLLight.hollight.DELETE_INTER"
+  "DELETE_INSERT" > "HOLLight.hollight.DELETE_INSERT"
+  "DELETE_DELETE" > "HOLLight.hollight.DELETE_DELETE"
+  "DELETE_COMM" > "HOLLight.hollight.DELETE_COMM"
+  "DEF_~" > "Groebner_Basis.bool_simps_19"
+  "DEF_vector" > "HOLLight.hollight.DEF_vector"
+  "DEF_treal_of_num" > "HOLLight.hollight.DEF_treal_of_num"
+  "DEF_treal_neg" > "HOLLight.hollight.DEF_treal_neg"
+  "DEF_treal_mul" > "HOLLight.hollight.DEF_treal_mul"
+  "DEF_treal_le" > "HOLLight.hollight.DEF_treal_le"
+  "DEF_treal_inv" > "HOLLight.hollight.DEF_treal_inv"
+  "DEF_treal_eq" > "HOLLight.hollight.DEF_treal_eq"
+  "DEF_treal_add" > "HOLLight.hollight.DEF_treal_add"
+  "DEF_tailadmissible" > "HOLLight.hollight.DEF_tailadmissible"
+  "DEF_support" > "HOLLight.hollight.DEF_support"
+  "DEF_superadmissible" > "HOLLight.hollight.DEF_superadmissible"
+  "DEF_sum" > "HOLLight.hollight.DEF_sum"
+  "DEF_sndcart" > "HOLLight.hollight.DEF_sndcart"
+  "DEF_set_of_list" > "HOLLightList.DEF_set_of_list"
+  "DEF_rem" > "HOLLight.hollight.DEF_rem"
+  "DEF_real_sub" > "HOLLight.hollight.DEF_real_sub"
+  "DEF_real_sgn" > "HOLLight.hollight.DEF_real_sgn"
+  "DEF_real_pow" > "HOLLight.hollight.DEF_real_pow"
+  "DEF_real_of_num" > "HOLLight.hollight.DEF_real_of_num"
+  "DEF_real_neg" > "HOLLight.hollight.DEF_real_neg"
+  "DEF_real_mul" > "HOLLight.hollight.DEF_real_mul"
+  "DEF_real_mod" > "HOLLight.hollight.DEF_real_mod"
+  "DEF_real_min" > "HOLLight.hollight.DEF_real_min"
+  "DEF_real_max" > "HOLLight.hollight.DEF_real_max"
+  "DEF_real_lt" > "HOLLight.hollight.DEF_real_lt"
+  "DEF_real_le" > "HOLLight.hollight.DEF_real_le"
+  "DEF_real_inv" > "HOLLight.hollight.DEF_real_inv"
+  "DEF_real_gt" > "HOLLight.hollight.DEF_real_gt"
+  "DEF_real_ge" > "HOLLight.hollight.DEF_real_ge"
+  "DEF_real_div" > "HOLLight.hollight.DEF_real_div"
+  "DEF_real_add" > "HOLLight.hollight.DEF_real_add"
+  "DEF_real_abs" > "HOLLight.hollight.DEF_real_abs"
+  "DEF_pastecart" > "HOLLight.hollight.DEF_pastecart"
+  "DEF_pairwise" > "HOLLight.hollight.DEF_pairwise"
+  "DEF_o" > "Fun.comp_def"
+  "DEF_num_of_int" > "HOLLight.hollight.DEF_num_of_int"
+  "DEF_num_mod" > "HOLLight.hollight.DEF_num_mod"
+  "DEF_num_gcd" > "HOLLight.hollight.DEF_num_gcd"
+  "DEF_num_divides" > "HOLLight.hollight.DEF_num_divides"
+  "DEF_num_coprime" > "HOLLight.hollight.DEF_num_coprime"
+  "DEF_nsum" > "HOLLight.hollight.DEF_nsum"
+  "DEF_neutral" > "HOLLight.hollight.DEF_neutral"
+  "DEF_nadd_rinv" > "HOLLight.hollight.DEF_nadd_rinv"
+  "DEF_nadd_of_num" > "HOLLight.hollight.DEF_nadd_of_num"
+  "DEF_nadd_mul" > "HOLLight.hollight.DEF_nadd_mul"
+  "DEF_nadd_le" > "HOLLight.hollight.DEF_nadd_le"
+  "DEF_nadd_inv" > "HOLLight.hollight.DEF_nadd_inv"
+  "DEF_nadd_eq" > "HOLLight.hollight.DEF_nadd_eq"
+  "DEF_nadd_add" > "HOLLight.hollight.DEF_nadd_add"
+  "DEF_monoidal" > "HOLLight.hollight.DEF_monoidal"
+  "DEF_minimal" > "HOLLight.hollight.DEF_minimal"
+  "DEF_lambda" > "HOLLight.hollight.DEF_lambda"
+  "DEF_iterate" > "HOLLight.hollight.DEF_iterate"
+  "DEF_is_nadd" > "HOLLight.hollight.DEF_is_nadd"
+  "DEF_integer" > "HOLLight.hollight.DEF_integer"
+  "DEF_int_sub" > "HOLLight.hollight.DEF_int_sub"
+  "DEF_int_sgn" > "HOLLight.hollight.DEF_int_sgn"
+  "DEF_int_pow" > "HOLLight.hollight.DEF_int_pow"
+  "DEF_int_of_num" > "HOLLight.hollight.DEF_int_of_num"
+  "DEF_int_neg" > "HOLLight.hollight.DEF_int_neg"
+  "DEF_int_mul" > "HOLLight.hollight.DEF_int_mul"
+  "DEF_int_mod" > "HOLLight.hollight.DEF_int_mod"
+  "DEF_int_min" > "HOLLight.hollight.DEF_int_min"
+  "DEF_int_max" > "HOLLight.hollight.DEF_int_max"
+  "DEF_int_lt" > "HOLLight.hollight.DEF_int_lt"
+  "DEF_int_le" > "HOLLight.hollight.DEF_int_le"
+  "DEF_int_gt" > "HOLLight.hollight.DEF_int_gt"
+  "DEF_int_ge" > "HOLLight.hollight.DEF_int_ge"
+  "DEF_int_gcd" > "HOLLight.hollight.DEF_int_gcd"
+  "DEF_int_divides" > "HOLLight.hollight.DEF_int_divides"
+  "DEF_int_coprime" > "HOLLight.hollight.DEF_int_coprime"
+  "DEF_int_add" > "HOLLight.hollight.DEF_int_add"
+  "DEF_int_abs" > "HOLLight.hollight.DEF_int_abs"
+  "DEF_hreal_of_num" > "HOLLight.hollight.DEF_hreal_of_num"
+  "DEF_hreal_mul" > "HOLLight.hollight.DEF_hreal_mul"
+  "DEF_hreal_le" > "HOLLight.hollight.DEF_hreal_le"
+  "DEF_hreal_inv" > "HOLLight.hollight.DEF_hreal_inv"
+  "DEF_hreal_add" > "HOLLight.hollight.DEF_hreal_add"
+  "DEF_fstcart" > "HOLLight.hollight.DEF_fstcart"
+  "DEF_div" > "HOLLight.hollight.DEF_div"
+  "DEF_dist" > "HOLLight.hollight.DEF_dist"
+  "DEF_dimindex" > "HOLLight.hollight.DEF_dimindex"
+  "DEF_admissible" > "HOLLight.hollight.DEF_admissible"
+  "DEF__star_" > "HOLLightCompat.DEF__star_"
+  "DEF__slash__backslash_" > "HOLLightCompat.DEF__slash__backslash_"
+  "DEF__questionmark__exclamationmark_" > "HOLLightCompat.EXISTS_UNIQUE_THM"
+  "DEF__questionmark_" > "HOL.Ex_def"
+  "DEF__lessthan__equal__c" > "HOLLight.hollight.DEF__lessthan__equal__c"
+  "DEF__lessthan__equal_" > "HOLLightCompat.DEF__lessthan__equal_"
+  "DEF__lessthan__c" > "HOLLight.hollight.DEF__lessthan__c"
+  "DEF__lessthan_" > "HOLLightCompat.DEF__lessthan_"
+  "DEF__greaterthan__equal__c" > "HOLLight.hollight.DEF__greaterthan__equal__c"
+  "DEF__greaterthan__equal_" > "HOLLightCompat.DEF__greaterthan__equal_"
+  "DEF__greaterthan__c" > "HOLLight.hollight.DEF__greaterthan__c"
+  "DEF__greaterthan_" > "HOLLightCompat.DEF__greaterthan_"
+  "DEF__exclamationmark_" > "HOL.All_def"
+  "DEF__equal__equal__greaterthan_" > "HOLLightCompat.DEF__equal__equal__greaterthan_"
+  "DEF__equal__equal_" > "HOLLight.hollight.DEF__equal__equal_"
+  "DEF__equal__c" > "HOLLight.hollight.DEF__equal__c"
+  "DEF__dot__dot_" > "HOLLightCompat.dotdot_def"
+  "DEF__backslash__slash_" > "HOL.or_def"
+  "DEF__UNGUARDED_PATTERN" > "HOLLight.hollight.DEF__UNGUARDED_PATTERN"
+  "DEF__SEQPATTERN" > "HOLLight.hollight.DEF__SEQPATTERN"
+  "DEF__MATCH" > "HOLLight.hollight.DEF__MATCH"
+  "DEF__GUARDED_PATTERN" > "HOLLight.hollight.DEF__GUARDED_PATTERN"
+  "DEF__FUNCTION" > "HOLLight.hollight.DEF__FUNCTION"
+  "DEF__FALSITY_" > "HOLLight.hollight.DEF__FALSITY_"
+  "DEF__11937" > "HOLLight.hollight.DEF__11937"
+  "DEF_ZRECSPACE" > "HOLLight.hollight.DEF_ZRECSPACE"
+  "DEF_ZCONSTR" > "HOLLight.hollight.DEF_ZCONSTR"
+  "DEF_ZBOT" > "HOLLight.hollight.DEF_ZBOT"
+  "DEF_WF" > "HOLLightCompat.DEF_WF"
+  "DEF_UNIV" > "HOLLightCompat.DEF_UNIV"
+  "DEF_UNIONS" > "HOLLightCompat.DEF_UNIONS"
+  "DEF_UNION" > "HOLLightCompat.DEF_UNION"
+  "DEF_UNCURRY" > "HOLLight.hollight.DEF_UNCURRY"
+  "DEF_T" > "HOL.True_def"
+  "DEF_SURJ" > "HOLLight.hollight.DEF_SURJ"
+  "DEF_SUBSET" > "HOLLightCompat.DEF_SUBSET"
+  "DEF_SND" > "HOLLightCompat.DEF_SND"
+  "DEF_SING" > "HOLLight.hollight.DEF_SING"
+  "DEF_SETSPEC" > "HOLLightCompat.SETSPEC_def"
+  "DEF_REVERSE" > "HOLLightList.DEF_REVERSE"
+  "DEF_REST" > "HOLLight.hollight.DEF_REST"
+  "DEF_REPLICATE" > "HOLLightList.DEF_REPLICATE"
+  "DEF_PSUBSET" > "HOLLightCompat.DEF_PSUBSET"
+  "DEF_PRE" > "HOLLightCompat.DEF_PRE"
+  "DEF_PASSOC" > "HOLLight.hollight.DEF_PASSOC"
+  "DEF_PAIRWISE" > "HOLLight.hollight.DEF_PAIRWISE"
+  "DEF_ONTO" > "Fun.surj_def"
+  "DEF_ONE_ONE" > "HOLLightCompat.DEF_ONE_ONE"
+  "DEF_ODD" > "HOLLightCompat.DEF_ODD"
+  "DEF_NUM_REP" > "HOLLight.hollight.DEF_NUM_REP"
+  "DEF_NUMSUM" > "HOLLight.hollight.DEF_NUMSUM"
+  "DEF_NUMSND" > "HOLLight.hollight.DEF_NUMSND"
+  "DEF_NUMRIGHT" > "HOLLight.hollight.DEF_NUMRIGHT"
+  "DEF_NUMPAIR" > "HOLLight.hollight.DEF_NUMPAIR"
+  "DEF_NUMLEFT" > "HOLLight.hollight.DEF_NUMLEFT"
+  "DEF_NUMFST" > "HOLLight.hollight.DEF_NUMFST"
+  "DEF_NUMERAL" > "HOLLightCompat.NUMERAL_def"
+  "DEF_NULL" > "HOLLightList.DEF_NULL"
+  "DEF_MOD" > "HOLLightCompat.DEF_MOD"
+  "DEF_MIN" > "Orderings.ord_class.min_def"
+  "DEF_MEM" > "HOLLightList.DEF_MEM"
+  "DEF_MEASURE" > "HOLLightCompat.MEASURE_def"
+  "DEF_MAX" > "Orderings.ord_class.max_def"
+  "DEF_MAP" > "HOLLightList.DEF_MAP"
+  "DEF_LET_END" > "HOLLight.hollight.DEF_LET_END"
+  "DEF_LET" > "HOLLightCompat.LET_def"
+  "DEF_LENGTH" > "HOLLightList.DEF_LENGTH"
+  "DEF_LAST" > "HOLLightList.DEF_LAST"
+  "DEF_ITSET" > "HOLLight.hollight.DEF_ITSET"
+  "DEF_ITLIST" > "HOLLightList.DEF_ITLIST"
+  "DEF_ISO" > "HOLLight.hollight.DEF_ISO"
+  "DEF_INTERS" > "HOLLightCompat.DEF_INTERS"
+  "DEF_INTER" > "HOLLightCompat.DEF_INTER"
+  "DEF_INSERT" > "HOLLightCompat.DEF_INSERT"
+  "DEF_INJP" > "HOLLight.hollight.DEF_INJP"
+  "DEF_INJN" > "HOLLight.hollight.DEF_INJN"
+  "DEF_INJF" > "HOLLight.hollight.DEF_INJF"
+  "DEF_INJA" > "HOLLight.hollight.DEF_INJA"
+  "DEF_INJ" > "HOLLight.hollight.DEF_INJ"
+  "DEF_INFINITE" > "HOLLightCompat.DEF_INFINITE"
+  "DEF_IND_SUC" > "HOLLight.hollight.DEF_IND_SUC"
+  "DEF_IND_0" > "HOLLight.hollight.DEF_IND_0"
+  "DEF_IN" > "Set.mem_def"
+  "DEF_IMAGE" > "HOLLightCompat.DEF_IMAGE"
+  "DEF_I" > "Fun.id_apply"
+  "DEF_HAS_SIZE" > "HOLLight.hollight.DEF_HAS_SIZE"
+  "DEF_GSPEC" > "Set.Collect_def"
+  "DEF_GEQ" > "HOLLightCompat.DEF_GEQ"
+  "DEF_GABS" > "HOLLightCompat.DEF_GABS"
+  "DEF_FST" > "HOLLightCompat.DEF_FST"
+  "DEF_FNIL" > "HOLLight.hollight.DEF_FNIL"
+  "DEF_FINREC" > "HOLLight.hollight.DEF_FINREC"
+  "DEF_FINITE" > "HOLLightCompat.DEF_FINITE"
+  "DEF_FILTER" > "HOLLightList.DEF_FILTER"
+  "DEF_FCONS" > "HOLLight.hollight.DEF_FCONS"
+  "DEF_FACT" > "HOLLightCompat.DEF_FACT"
+  "DEF_F" > "HOL.False_def"
+  "DEF_EXP" > "HOLLightCompat.DEF_EXP"
+  "DEF_EX" > "HOLLightList.DEF_EX"
+  "DEF_EVEN" > "HOLLightCompat.DEF_EVEN"
+  "DEF_EMPTY" > "HOLLightCompat.DEF_EMPTY"
+  "DEF_EL" > "HOLLightList.DEF_EL"
+  "DEF_DIV" > "HOLLightCompat.DEF_DIV"
+  "DEF_DISJOINT" > "HOLLightCompat.DEF_DISJOINT"
+  "DEF_DIFF" > "HOLLightCompat.DEF_DIFF"
+  "DEF_DELETE" > "HOLLightCompat.DEF_DELETE"
+  "DEF_DECIMAL" > "HOLLight.hollight.DEF_DECIMAL"
+  "DEF_CURRY" > "Product_Type.curry_conv"
+  "DEF_CROSS" > "HOLLight.hollight.DEF_CROSS"
+  "DEF_COUNTABLE" > "HOLLight.hollight.DEF_COUNTABLE"
+  "DEF_CONSTR" > "HOLLight.hollight.DEF_CONSTR"
+  "DEF_COND" > "HOLLightCompat.COND_DEF"
+  "DEF_CHOICE" > "HOLLightCompat.DEF_CHOICE"
+  "DEF_CASEWISE" > "HOLLight.hollight.DEF_CASEWISE"
+  "DEF_CARD" > "HOLLight.hollight.DEF_CARD"
+  "DEF_BUTLAST" > "HOLLightList.DEF_BUTLAST"
+  "DEF_BOTTOM" > "HOLLight.hollight.DEF_BOTTOM"
+  "DEF_BIT1" > "HOLLightCompat.BIT1_DEF"
+  "DEF_BIT0" > "HOLLightCompat.BIT0_DEF"
+  "DEF_BIJ" > "HOLLight.hollight.DEF_BIJ"
+  "DEF_ASCII" > "HOLLight.hollight.DEF_ASCII"
+  "DEF_APPEND" > "HOLLightList.DEF_APPEND"
+  "DEF_ALL2" > "HOLLightList.DEF_ALL2"
+  "DEF_ALL" > "HOLLightList.DEF_ALL"
+  "DEF_-" > "HOLLightCompat.DEF_MINUS"
+  "DEF_+" > "HOLLightCompat.DEF_PLUS"
+  "DEF_$" > "HOLLight.hollight.DEF_$"
+  "DECOMPOSITION" > "HOLLight.hollight.DECOMPOSITION"
+  "DECIMAL_def" > "HOLLight.hollight.DECIMAL_def"
+  "CROSS_def" > "HOLLight.hollight.CROSS_def"
+  "CROSS_EQ_EMPTY" > "HOLLight.hollight.CROSS_EQ_EMPTY"
+  "COUNTABLE_def" > "HOLLight.hollight.COUNTABLE_def"
+  "CONS_HD_TL" > "List.hd_Cons_tl"
+  "CONS_11" > "List.list.inject"
+  "CONSTR_def" > "HOLLight.hollight.CONSTR_def"
+  "CONSTR_REC" > "HOLLight.hollight.CONSTR_REC"
+  "CONSTR_INJ" > "HOLLight.hollight.CONSTR_INJ"
+  "CONSTR_IND" > "HOLLight.hollight.CONSTR_IND"
+  "CONSTR_BOT" > "HOLLight.hollight.CONSTR_BOT"
+  "CONJ_SYM" > "Groebner_Basis.dnf_3"
+  "CONJ_ASSOC" > "HOL.conj_ac_3"
+  "CONJ_ACI" > "HOLLight.hollight.CONJ_ACI"
+  "COND_RATOR" > "HOLLight.hollight.COND_RATOR"
+  "COND_RAND" > "HOL.if_distrib"
+  "COND_ID" > "HOL.if_cancel"
+  "COND_EXPAND" > "HOLLight.hollight.COND_EXPAND"
+  "COND_EQ_CLAUSE" > "HOLLight.hollight.COND_EQ_CLAUSE"
+  "COND_ELIM_THM" > "HOL.if_splits_1"
+  "COND_CLAUSES" > "HOLLight.hollight.COND_CLAUSES"
+  "COND_ABS" > "HOLLight.hollight.COND_ABS"
+  "COMPONENT" > "Set.insertI1"
+  "CHOOSE_SUBSET_STRONG" > "HOLLight.hollight.CHOOSE_SUBSET_STRONG"
+  "CHOOSE_SUBSET" > "HOLLight.hollight.CHOOSE_SUBSET"
+  "CHOICE_DEF" > "HOLLight.hollight.CHOICE_DEF"
+  "CASEWISE_def" > "HOLLight.hollight.CASEWISE_def"
+  "CART_EQ_FULL" > "HOLLight.hollight.CART_EQ_FULL"
+  "CART_EQ" > "HOLLight.hollight.CART_EQ"
+  "CARD_def" > "HOLLight.hollight.CARD_def"
+  "CARD_UNION_OVERLAP_EQ" > "HOLLight.hollight.CARD_UNION_OVERLAP_EQ"
+  "CARD_UNION_OVERLAP" > "HOLLight.hollight.CARD_UNION_OVERLAP"
+  "CARD_UNION_LE" > "HOLLight.hollight.CARD_UNION_LE"
+  "CARD_UNION_GEN" > "HOLLight.hollight.CARD_UNION_GEN"
+  "CARD_UNION_EQ" > "HOLLight.hollight.CARD_UNION_EQ"
+  "CARD_UNIONS_LE" > "HOLLight.hollight.CARD_UNIONS_LE"
+  "CARD_UNIONS" > "HOLLight.hollight.CARD_UNIONS"
+  "CARD_UNION" > "HOLLight.hollight.CARD_UNION"
+  "CARD_SUBSET_LE" > "HOLLight.hollight.CARD_SUBSET_LE"
+  "CARD_SUBSET_IMAGE" > "HOLLight.hollight.CARD_SUBSET_IMAGE"
+  "CARD_SUBSET_EQ" > "HOLLight.hollight.CARD_SUBSET_EQ"
+  "CARD_SUBSET" > "HOLLight.hollight.CARD_SUBSET"
+  "CARD_PSUBSET" > "HOLLight.hollight.CARD_PSUBSET"
+  "CARD_PRODUCT" > "HOLLight.hollight.CARD_PRODUCT"
+  "CARD_POWERSET" > "HOLLight.hollight.CARD_POWERSET"
+  "CARD_NUMSEG_LT" > "HOLLight.hollight.CARD_NUMSEG_LT"
+  "CARD_NUMSEG_LEMMA" > "HOLLight.hollight.CARD_NUMSEG_LEMMA"
+  "CARD_NUMSEG_LE" > "HOLLight.hollight.CARD_NUMSEG_LE"
+  "CARD_NUMSEG_1" > "HOLLight.hollight.CARD_NUMSEG_1"
+  "CARD_NUMSEG" > "HOLLight.hollight.CARD_NUMSEG"
+  "CARD_LE_INJ" > "HOLLight.hollight.CARD_LE_INJ"
+  "CARD_IMAGE_LE" > "HOLLight.hollight.CARD_IMAGE_LE"
+  "CARD_IMAGE_INJ_EQ" > "HOLLight.hollight.CARD_IMAGE_INJ_EQ"
+  "CARD_IMAGE_INJ" > "HOLLight.hollight.CARD_IMAGE_INJ"
+  "CARD_FUNSPACE" > "HOLLight.hollight.CARD_FUNSPACE"
+  "CARD_FINITE_IMAGE" > "HOLLight.hollight.CARD_FINITE_IMAGE"
+  "CARD_EQ_SUM" > "HOLLight.hollight.CARD_EQ_SUM"
+  "CARD_EQ_NSUM" > "HOLLight.hollight.CARD_EQ_NSUM"
+  "CARD_EQ_BIJECTIONS" > "HOLLight.hollight.CARD_EQ_BIJECTIONS"
+  "CARD_EQ_BIJECTION" > "HOLLight.hollight.CARD_EQ_BIJECTION"
+  "CARD_EQ_0" > "HOLLight.hollight.CARD_EQ_0"
+  "CARD_DIFF" > "HOLLight.hollight.CARD_DIFF"
+  "CARD_DELETE" > "HOLLight.hollight.CARD_DELETE"
+  "CARD_CROSS" > "HOLLight.hollight.CARD_CROSS"
+  "CARD_CLAUSES" > "HOLLight.hollight.CARD_CLAUSES"
+  "BOUNDS_NOTZERO" > "HOLLight.hollight.BOUNDS_NOTZERO"
+  "BOUNDS_LINEAR_0" > "HOLLight.hollight.BOUNDS_LINEAR_0"
+  "BOUNDS_LINEAR" > "HOLLight.hollight.BOUNDS_LINEAR"
+  "BOUNDS_IGNORE" > "HOLLight.hollight.BOUNDS_IGNORE"
+  "BOUNDS_DIVIDED" > "HOLLight.hollight.BOUNDS_DIVIDED"
+  "BOTTOM_def" > "HOLLight.hollight.BOTTOM_def"
+  "BOOL_CASES_AX" > "HOL.True_or_False"
+  "BIT1_THM" > "HOLLight.hollight.BIT1_THM"
+  "BIT1" > "HOLLight.hollight.BIT1"
+  "BIT0_THM" > "Int.semiring_mult_2"
+  "BIT0" > "Int.semiring_mult_2"
+  "BIJ_def" > "HOLLight.hollight.BIJ_def"
+  "BIJECTIVE_ON_LEFT_RIGHT_INVERSE" > "HOLLight.hollight.BIJECTIVE_ON_LEFT_RIGHT_INVERSE"
+  "BIJECTIVE_LEFT_RIGHT_INVERSE" > "HOLLight.hollight.BIJECTIVE_LEFT_RIGHT_INVERSE"
+  "BIJECTIONS_HAS_SIZE_EQ" > "HOLLight.hollight.BIJECTIONS_HAS_SIZE_EQ"
+  "BIJECTIONS_HAS_SIZE" > "HOLLight.hollight.BIJECTIONS_HAS_SIZE"
+  "BIJECTIONS_CARD_EQ" > "HOLLight.hollight.BIJECTIONS_CARD_EQ"
+  "BETA_THM" > "HOL.eta_contract_eq"
+  "ASCII_def" > "HOLLight.hollight.ASCII_def"
+  "ARITH_ZERO" > "HOLLight.hollight.ARITH_ZERO"
+  "ARITH_SUC" > "HOLLight.hollight.ARITH_SUC"
+  "ARITH_SUB" > "HOLLight.hollight.ARITH_SUB"
+  "ARITH_PRE" > "HOLLight.hollight.ARITH_PRE"
+  "ARITH_ODD" > "HOLLight.hollight.ARITH_ODD"
+  "ARITH_MULT" > "HOLLight.hollight.ARITH_MULT"
+  "ARITH_LT" > "HOLLight.hollight.ARITH_LT"
+  "ARITH_LE" > "HOLLight.hollight.ARITH_LE"
+  "ARITH_EXP" > "HOLLight.hollight.ARITH_EXP"
+  "ARITH_EVEN" > "HOLLight.hollight.ARITH_EVEN"
+  "ARITH_EQ" > "HOLLight.hollight.ARITH_EQ"
+  "ARITH_ADD" > "HOLLight.hollight.ARITH_ADD"
+  "APPEND_NIL" > "List.append_Nil2"
+  "APPEND_EQ_NIL" > "List.append_is_Nil_conv"
+  "APPEND_BUTLAST_LAST" > "List.append_butlast_last_id"
+  "APPEND_ASSOC" > "List.append_assoc"
+  "AND_FORALL_THM" > "HOL.all_conj_distrib"
+  "AND_CLAUSES" > "HOLLight.hollight.AND_CLAUSES"
+  "AND_ALL2" > "HOLLightList.AND_ALL2"
+  "AND_ALL" > "HOLLightList.AND_ALL"
+  "ALL_T" > "HOLLightList.ALL_T"
+  "ALL_MP" > "HOLLightList.ALL_MP"
+  "ALL_MEM" > "HOLLightList.ALL_MEM"
+  "ALL_IMP" > "HOLLightList.ALL_IMP"
+  "ALL_EL" > "List.list_all_length"
+  "ALL_APPEND" > "List.list_all_append"
+  "ALL2_MAP2" > "HOLLightList.ALL2_MAP2"
+  "ALL2_MAP" > "HOLLightList.ALL2_MAP"
+  "ALL2_AND_RIGHT" > "HOLLightList.ALL2_AND_RIGHT"
+  "ALL2_ALL" > "HOLLightList.ALL2_ALL"
+  "ALL2" > "HOLLightList.ALL2"
+  "ADMISSIBLE_UNGUARDED_PATTERN" > "HOLLight.hollight.ADMISSIBLE_UNGUARDED_PATTERN"
+  "ADMISSIBLE_SUM" > "HOLLight.hollight.ADMISSIBLE_SUM"
+  "ADMISSIBLE_SEQPATTERN" > "HOLLight.hollight.ADMISSIBLE_SEQPATTERN"
+  "ADMISSIBLE_RAND" > "HOLLight.hollight.ADMISSIBLE_RAND"
+  "ADMISSIBLE_NSUM" > "HOLLight.hollight.ADMISSIBLE_NSUM"
+  "ADMISSIBLE_NEST" > "HOLLight.hollight.ADMISSIBLE_NEST"
+  "ADMISSIBLE_MATCH_SEQPATTERN" > "HOLLight.hollight.ADMISSIBLE_MATCH_SEQPATTERN"
+  "ADMISSIBLE_MATCH" > "HOLLight.hollight.ADMISSIBLE_MATCH"
+  "ADMISSIBLE_MAP" > "HOLLight.hollight.ADMISSIBLE_MAP"
+  "ADMISSIBLE_LAMBDA" > "HOLLight.hollight.ADMISSIBLE_LAMBDA"
+  "ADMISSIBLE_IMP_SUPERADMISSIBLE" > "HOLLight.hollight.ADMISSIBLE_IMP_SUPERADMISSIBLE"
+  "ADMISSIBLE_GUARDED_PATTERN" > "HOLLight.hollight.ADMISSIBLE_GUARDED_PATTERN"
+  "ADMISSIBLE_CONST" > "HOLLight.hollight.ADMISSIBLE_CONST"
+  "ADMISSIBLE_COND" > "HOLLight.hollight.ADMISSIBLE_COND"
+  "ADMISSIBLE_COMB" > "HOLLight.hollight.ADMISSIBLE_COMB"
+  "ADMISSIBLE_BASE" > "HOLLight.hollight.ADMISSIBLE_BASE"
+  "ADD_SYM" > "Fields.linordered_field_class.sign_simps_43"
+  "ADD_SUC" > "Nat.add_Suc_right"
+  "ADD_SUBR2" > "Nat.diff_add_0"
+  "ADD_SUBR" > "HOLLight.hollight.ADD_SUBR"
+  "ADD_SUB2" > "Nat.diff_add_inverse"
+  "ADD_SUB" > "Nat.diff_add_inverse2"
+  "ADD_EQ_0" > "Nat.add_is_0"
+  "ADD_CLAUSES" > "HOLLight.hollight.ADD_CLAUSES"
+  "ADD_ASSOC" > "Fields.linordered_field_class.sign_simps_44"
+  "ADD_AC" > "HOLLight.hollight.ADD_AC"
+  "ADD_0" > "Divides.arithmetic_simps_39"
+  "ADD1" > "Nat_Numeral.Suc_eq_plus1"
+  "ABS_SIMP" > "HOL.refl"
+  "ABSORPTION" > "HOLLight.hollight.ABSORPTION"
+  ">_c_def" > "HOLLight.hollight.>_c_def"
+  ">=_c_def" > "HOLLight.hollight.>=_c_def"
+  "=_c_def" > "HOLLight.hollight.=_c_def"
+  "<_c_def" > "HOLLight.hollight.<_c_def"
+  "<=_c_def" > "HOLLight.hollight.<=_c_def"
+  "$_def" > "HOLLight.hollight.$_def"
+
+ignore_thms
+  "WF_REC_CASES"
+  "TYDEF_sum"
+  "TYDEF_prod"
+  "TYDEF_option"
+  "TYDEF_num"
+  "TYDEF_list"
+  "TYDEF_1"
+  "SNDCART_PASTECART"
+  "SET_OF_LIST_OF_SET"
+  "REP_ABS_PAIR"
+  "RECURSION_CASEWISE_PAIRWISE"
+  "RECURSION_CASEWISE"
+  "PASTECART_FST_SND"
+  "PASTECART_EQ"
+  "MEM_LIST_OF_SET"
+  "MEM_ASSOC"
+  "LIST_OF_SET_PROPERTIES"
+  "LENGTH_LIST_OF_SET"
+  "HAS_SIZE_SET_OF_LIST"
+  "FSTCART_PASTECART"
+  "FORALL_PASTECART"
+  "FINITE_SET_OF_LIST"
+  "EX_MAP"
+  "EXISTS_PASTECART"
+  "EL_TL"
+  "DIMINDEX_HAS_SIZE_FINITE_SUM"
+  "DIMINDEX_FINITE_SUM"
+  "DEF_one"
+  "DEF_mk_pair"
+  "DEF_list_of_set"
+  "DEF__0"
+  "DEF_ZIP"
+  "DEF_TL"
+  "DEF_SUC"
+  "DEF_SOME"
+  "DEF_OUTR"
+  "DEF_OUTL"
+  "DEF_NONE"
+  "DEF_NIL"
+  "DEF_MAP2"
+  "DEF_ITLIST2"
+  "DEF_INR"
+  "DEF_INL"
+  "DEF_HD"
+  "DEF_CONS"
+  "DEF_ASSOC"
+  "DEF_,"
+  "CASEWISE_WORKS"
+  "CASEWISE_CASES"
+  "CASEWISE"
+  "CARD_SET_OF_LIST_LE"
+  "ALL_MAP"
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/HOL_Light/Template/GenHOLLight.thy	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,220 @@
+(*  Title:      HOL/Import/Generate-HOLLight/GenHOLLight.thy
+    Author:     Steven Obua, TU Muenchen
+    Author:     Cezary Kaliszyk
+*)
+
+theory GenHOLLight
+imports "../../HOL4Syntax" "../Compatibility"
+begin
+
+import_segment "hollight"
+
+setup_dump "../Generated" "HOLLight"
+
+append_dump {*theory HOL4Base
+imports "../../HOL4Syntax" "../Compatibility"
+begin
+*}
+
+import_theory "~~/src/HOL/Import/HOL_Light/Generated" hollight
+
+;ignore_thms
+  (* Unit type *)
+  TYDEF_1 DEF_one
+  (* Product type *)
+  TYDEF_prod "DEF_," DEF_mk_pair REP_ABS_PAIR
+  (* Option type *)
+  TYDEF_option DEF_NONE DEF_SOME
+  (* Sum type *)
+  TYDEF_sum DEF_INL DEF_INR DEF_OUTL DEF_OUTR
+  (* Naturals *)
+  TYDEF_num DEF__0 DEF_SUC
+  (* Lists *)
+  TYDEF_list DEF_NIL DEF_CONS DEF_HD DEF_TL DEF_MAP2 DEF_ITLIST2 ALL_MAP EX_MAP
+  DEF_ASSOC MEM_ASSOC DEF_ZIP EL_TL
+
+  (* list_of_set uses Isabelle lists with HOLLight CARD *)
+  DEF_list_of_set LIST_OF_SET_PROPERTIES SET_OF_LIST_OF_SET LENGTH_LIST_OF_SET
+  MEM_LIST_OF_SET HAS_SIZE_SET_OF_LIST FINITE_SET_OF_LIST
+  (* UNIV *)
+  DIMINDEX_FINITE_SUM  DIMINDEX_HAS_SIZE_FINITE_SUM FSTCART_PASTECART
+  SNDCART_PASTECART PASTECART_FST_SND PASTECART_EQ FORALL_PASTECART EXISTS_PASTECART
+  (* Reals *)
+  (* TYDEF_real DEF_real_of_num DEF_real_neg DEF_real_add DEF_real_mul DEF_real_le
+  DEF_real_inv REAL_HREAL_LEMMA1 REAL_HREAL_LEMMA2 *)
+  (* Integers *)
+  (* TYDEF_int DEF_int_divides DEF_int_coprime*)
+  (* HOLLight CARD and CASEWISE with Isabelle lists *)
+  CARD_SET_OF_LIST_LE CASEWISE CASEWISE_CASES RECURSION_CASEWISE CASEWISE_WORKS
+  WF_REC_CASES RECURSION_CASEWISE_PAIRWISE
+
+;type_maps
+  bool > HOL.bool
+  "fun" > "fun"
+  N_1 >  Product_Type.unit
+  prod > Product_Type.prod
+  ind > Nat.ind
+  num > Nat.nat
+  sum > Sum_Type.sum
+  option > Datatype.option
+  list > List.list
+(*real > RealDef.real *)
+(*int > Int.int *)
+
+;const_renames
+  "==" > "eqeq"
+  "ALL" > list_ALL
+  "EX" > list_EX
+
+;const_maps
+  T > HOL.True
+  F > HOL.False
+  "=" > HOL.eq
+  "==>" > HOL.implies
+  "/\\" > HOL.conj
+  "\\/" > HOL.disj
+  "!" > HOL.All
+  "?" > HOL.Ex
+  "?!" > HOL.Ex1
+  "~" > HOL.Not
+  COND > HOL.If
+  ONE_ONE > Fun.inj
+  ONTO > Fun.surj
+  o > Fun.comp
+  "@" > Hilbert_Choice.Eps
+  CHOICE > Hilbert_Choice.Eps
+  I > Fun.id
+  one > Product_Type.Unity
+  LET > HOLLightCompat.LET
+  mk_pair > Product_Type.Pair_Rep
+  "," > Product_Type.Pair
+  FST > Product_Type.fst
+  SND > Product_Type.snd
+  CURRY > Product_Type.curry
+  "_0" > Groups.zero_class.zero :: nat
+  SUC > Nat.Suc
+  PRE > HOLLightCompat.Pred
+  NUMERAL > HOLLightCompat.NUMERAL
+  mk_num > Fun.id
+  "+" > Groups.plus_class.plus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  "*" > Groups.times_class.times :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  "-" > Groups.minus_class.minus :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  "<" > Orderings.ord_class.less :: "nat \<Rightarrow> nat \<Rightarrow> bool"
+  "<=" > Orderings.ord_class.less_eq :: "nat \<Rightarrow> nat \<Rightarrow> bool"
+  ">" > Orderings.ord_class.greater :: "nat \<Rightarrow> nat \<Rightarrow> bool"
+  ">=" > Orderings.ord_class.greater_eq :: "nat \<Rightarrow> nat \<Rightarrow> bool"
+  EXP > Power.power_class.power :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  MAX > Orderings.ord_class.max :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  MIN > Orderings.ord_class.min :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  DIV > Divides.div_class.div :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  MOD > Divides.div_class.mod :: "nat \<Rightarrow> nat \<Rightarrow> nat"
+  BIT0 > HOLLightCompat.NUMERAL_BIT0
+  BIT1 > HOLLightCompat.NUMERAL_BIT1
+  INL > Sum_Type.Inl
+  INR > Sum_Type.Inr
+  OUTL > HOLLightCompat.OUTL
+  OUTR > HOLLightCompat.OUTR
+  NONE > Datatype.None
+  SOME > Datatype.Some
+  EVEN > Parity.even_odd_class.even :: "nat \<Rightarrow> bool"
+  ODD > HOLLightCompat.ODD
+  FACT > Fact.fact_class.fact :: "nat \<Rightarrow> nat"
+  WF > Wellfounded.wfP
+  NIL > List.list.Nil
+  CONS > List.list.Cons
+  APPEND > List.append
+  REVERSE > List.rev
+  LENGTH > List.length
+  MAP > List.map
+  LAST > List.last
+  BUTLAST > List.butlast
+  REPLICATE > List.replicate
+  ITLIST > List.foldr
+  list_ALL > List.list_all
+  ALL2 > List.list_all2
+  list_EX > List.list_ex
+  FILTER > List.filter
+  NULL > List.null
+  HD > List.hd
+  TL > List.tl
+  EL > HOLLightList.list_el
+  ZIP > List.zip
+  MAP2 > HOLLightList.map2
+  ITLIST2 > HOLLightList.fold2
+  MEM > HOLLightList.list_mem
+  set_of_list > List.set
+  IN > Set.member
+  INSERT > Set.insert
+  EMPTY > Orderings.bot_class.bot :: "'a \<Rightarrow> bool"
+  GABS > Hilbert_Choice.Eps
+  GEQ > HOL.eq
+  GSPEC > Set.Collect
+  SETSPEC > HOLLightCompat.SETSPEC
+  UNION > Lattices.sup_class.sup :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
+  UNIONS > Complete_Lattices.Sup_class.Sup :: "(('a \<Rightarrow> bool) \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
+  INTER > Lattices.inf_class.inf :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
+  INTERS > Complete_Lattices.Inf_class.Inf :: "(('a \<Rightarrow> bool) \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
+  DIFF > Groups.minus_class.minus :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> bool"
+  SUBSET > Orderings.ord_class.less_eq :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
+  PSUBSET > Orderings.ord_class.less :: "('a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
+  DELETE > HOLLightCompat.DELETE
+  DISJOINT > HOLLightCompat.DISJOINT
+  IMAGE > Set.image
+  FINITE > Finite_Set.finite
+  INFINITE > HOLLightCompat.INFINITE
+  ".." > HOLLightCompat.dotdot
+  UNIV > Orderings.top_class.top :: "'a \<Rightarrow> bool"
+  MEASURE > HOLLightCompat.MEASURE
+(*real_of_num > RealDef.real :: "nat => real"
+  real_neg > Groups.uminus_class.uminus :: "real => real"
+  real_inv > Fields.inverse_class.inverse :: "real => real"
+  real_add > Groups.plus_class.plus :: "real => real => real"
+  real_sub > Groups.minus_class.minus :: "real => real => real"
+  real_mul > Groups.times_class.times :: "real => real => real"
+  real_div > Fields.inverse_class.divide :: "real => real => real"
+  real_lt > Orderings.ord_class.less :: "real \<Rightarrow> real \<Rightarrow> bool"
+  real_le > Orderings.ord_class.less_eq :: "real \<Rightarrow> real \<Rightarrow> bool"
+  real_gt > Orderings.ord_class.greater :: "real \<Rightarrow> real \<Rightarrow> bool"
+  real_ge > Orderings.ord_class.greater_eq :: "real \<Rightarrow> real \<Rightarrow> bool"
+  real_pow > Power.power_class.power :: "real \<Rightarrow> nat \<Rightarrow> real"
+  real_abs > Groups.abs_class.abs :: "real \<Rightarrow> real"
+  real_max > Orderings.ord_class.max :: "real \<Rightarrow> real \<Rightarrow> real"
+  real_min > Orderings.ord_class.min :: "real \<Rightarrow> real \<Rightarrow> real"
+  real_sgn > Groups.sgn_class.sgn :: "real \<Rightarrow> real"*)
+(*real_of_int > RealDef.real :: "int => real"
+  int_of_real > Archimedean_Field.floor :: "real \<Rightarrow> int"
+  dest_int > RealDef.real :: "int => real"
+  mk_int > Archimedean_Field.floor :: "real \<Rightarrow> int"
+  int_lt > Orderings.ord_class.less :: "int \<Rightarrow> int \<Rightarrow> bool"
+  int_le > Orderings.ord_class.less_eq :: "int \<Rightarrow> int \<Rightarrow> bool"
+  int_gt > Orderings.ord_class.greater :: "int \<Rightarrow> int \<Rightarrow> bool"
+  int_ge > Orderings.ord_class.greater_eq :: "int \<Rightarrow> int \<Rightarrow> bool"
+  int_of_num > Nat.semiring_1_class.of_nat :: "nat \<Rightarrow> int"
+  int_neg > Groups.uminus_class.uminus :: "int \<Rightarrow> int"
+  int_add > Groups.plus_class.plus :: "int => int => int"
+  int_sub > Groups.minus_class.minus :: "int => int => int"
+  int_mul > Groups.times_class.times :: "int => int => int"
+  int_abs > Groups.abs_class.abs :: "int \<Rightarrow> int"
+  int_max > Orderings.ord_class.max :: "int \<Rightarrow> int \<Rightarrow> int"
+  int_min > Orderings.ord_class.min :: "int \<Rightarrow> int \<Rightarrow> int"
+  int_sgn > Groups.sgn_class.sgn :: "int \<Rightarrow> int"
+  int_pow > Power.power_class.power :: "int \<Rightarrow> nat \<Rightarrow> int"
+  int_div > HOLLightInt.hl_div :: "int \<Rightarrow> int \<Rightarrow> int"
+  div > HOLLightInt.hl_div :: "int \<Rightarrow> int \<Rightarrow> int"
+  mod_int > HOLLightInt.hl_mod :: "int \<Rightarrow> int \<Rightarrow> int"
+  rem > HOLLightInt.hl_mod :: "int \<Rightarrow> int \<Rightarrow> int"
+  int_divides > Rings.dvd_class.dvd :: "int \<Rightarrow> int \<Rightarrow> bool"
+  int_mod > HOLLightInt.int_mod :: "int \<Rightarrow> int \<Rightarrow> int \<Rightarrow> bool"
+  int_gcd > HOLLightInt.int_gcd :: "int \<times> int \<Rightarrow> int"
+  int_coprime > HOLLightInt.int_coprime :: "int \<times> int \<Rightarrow> bool"
+  eqeq > HOLLightInt.eqeq*)
+
+;end_import
+
+;append_dump "end"
+
+;flush_dump
+
+;import_segment ""
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/Import/README	Sat Mar 03 22:37:41 2012 +0100
@@ -0,0 +1,19 @@
+
+ATTENTION!  This is largely outdated.  The hint to PROOF_DIRS might be
+everything which is still relevant.
+
+All the files in this directory (except this README, HOL4.thy, and
+ROOT.ML) are automatically generated.  Edit the files in
+../Generate-HOL and run "isabelle make HOL-Complex-Generate-HOL" in
+~~/src/HOL, if something needs to be changed.
+
+To build the logic in this directory, simply do a "isabelle make
+HOL-Import-HOL" in ~~/src/HOL.
+
+Note that the quick_and_dirty flag is on as default for this
+directory, which means that the original HOL4 proofs are not consulted
+at all.  If a real replay of the HOL4 proofs is desired, get and
+unpack the HOL4 proof objects to somewhere on your harddisk, and set
+the variable PROOF_DIRS to the directory where the directory "hol4"
+is.  Now edit the ROOT.ML file to unset the quick_and_dirty flag and
+do "isabelle make HOL-Import-HOL" in ~~/src/HOL.