Added HOL proof importer.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Base.thy Fri Apr 02 17:37:45 2004 +0200
1.3 @@ -0,0 +1,273 @@
1.4 +theory GenHOL4Base = HOL4Compat + HOL4Syntax:;
1.5 +
1.6 +import_segment "hol4";
1.7 +
1.8 +setup_dump "../HOL" "HOL4Base";
1.9 +
1.10 +append_dump "theory HOL4Base = HOL4Compat + HOL4Syntax:";
1.11 +
1.12 +import_theory bool;
1.13 +
1.14 +const_maps
1.15 + T > True
1.16 + F > False
1.17 + "!" > All
1.18 + "/\\" > "op &"
1.19 + "\\/" > "op |"
1.20 + "?" > Ex
1.21 + "?!" > Ex1
1.22 + "~" > Not
1.23 + COND > If
1.24 + bool_case > Datatype.bool.bool_case
1.25 + ONE_ONE > HOL4Setup.ONE_ONE
1.26 + ONTO > HOL4Setup.ONTO
1.27 + TYPE_DEFINITION > HOL4Setup.TYPE_DEFINITION
1.28 + LET > HOL4Compat.LET;
1.29 +
1.30 +ignore_thms
1.31 + BOUNDED_DEF
1.32 + BOUNDED_THM
1.33 + UNBOUNDED_DEF
1.34 + UNBOUNDED_THM;
1.35 +
1.36 +end_import;
1.37 +
1.38 +import_theory combin;
1.39 +
1.40 +const_maps
1.41 + o > Fun.comp;
1.42 +
1.43 +end_import;
1.44 +
1.45 +import_theory sum;
1.46 +
1.47 +type_maps
1.48 + sum > "+";
1.49 +
1.50 +const_maps
1.51 + INL > Inl
1.52 + INR > Inr
1.53 + ISL > HOL4Compat.ISL
1.54 + ISR > HOL4Compat.ISR
1.55 + OUTL > HOL4Compat.OUTL
1.56 + OUTR > HOL4Compat.OUTR
1.57 + sum_case > Datatype.sum.sum_case;
1.58 +
1.59 +ignore_thms
1.60 + sum_TY_DEF
1.61 + sum_ISO_DEF
1.62 + IS_SUM_REP
1.63 + INL_DEF
1.64 + INR_DEF
1.65 + sum_axiom
1.66 + sum_Axiom;
1.67 +
1.68 +end_import;
1.69 +
1.70 +import_theory one;
1.71 +
1.72 +type_maps
1.73 + one > Product_Type.unit;
1.74 +
1.75 +const_maps
1.76 + one > Product_Type.Unity;
1.77 +
1.78 +ignore_thms
1.79 + one_TY_DEF
1.80 + one_axiom
1.81 + one_Axiom
1.82 + one_DEF;
1.83 +
1.84 +end_import;
1.85 +
1.86 +import_theory option;
1.87 +
1.88 +type_maps
1.89 + option > Datatype.option;
1.90 +
1.91 +const_maps
1.92 + NONE > Datatype.option.None
1.93 + SOME > Datatype.option.Some
1.94 + option_case > Datatype.option.option_case
1.95 + OPTION_MAP > Datatype.option_map
1.96 + THE > Datatype.the
1.97 + IS_SOME > HOL4Compat.IS_SOME
1.98 + IS_NONE > HOL4Compat.IS_NONE
1.99 + OPTION_JOIN > HOL4Compat.OPTION_JOIN;
1.100 +
1.101 +ignore_thms
1.102 + option_axiom
1.103 + option_Axiom
1.104 + option_TY_DEF
1.105 + option_REP_ABS_DEF
1.106 + SOME_DEF
1.107 + NONE_DEF;
1.108 +
1.109 +end_import;
1.110 +
1.111 +import_theory marker;
1.112 +end_import;
1.113 +
1.114 +import_theory relation;
1.115 +
1.116 +const_renames
1.117 + reflexive > pred_reflexive;
1.118 +
1.119 +end_import;
1.120 +
1.121 +import_theory pair;
1.122 +
1.123 +type_maps
1.124 + prod > "*";
1.125 +
1.126 +const_maps
1.127 + "," > Pair
1.128 + FST > fst
1.129 + SND > snd
1.130 + CURRY > curry
1.131 + UNCURRY > split
1.132 + "##" > prod_fun
1.133 + pair_case > split;
1.134 +
1.135 +ignore_thms
1.136 + prod_TY_DEF
1.137 + MK_PAIR_DEF
1.138 + IS_PAIR_DEF
1.139 + ABS_REP_prod
1.140 + COMMA_DEF;
1.141 +
1.142 +end_import;
1.143 +
1.144 +import_theory num;
1.145 +
1.146 +type_maps
1.147 + num > nat;
1.148 +
1.149 +const_maps
1.150 + SUC > Suc
1.151 + 0 > 0 :: nat;
1.152 +
1.153 +ignore_thms
1.154 + num_TY_DEF
1.155 + num_ISO_DEF
1.156 + IS_NUM_REP
1.157 + ZERO_REP_DEF
1.158 + SUC_REP_DEF
1.159 + ZERO_DEF
1.160 + SUC_DEF;
1.161 +
1.162 +end_import;
1.163 +
1.164 +import_theory prim_rec;
1.165 +
1.166 +const_maps
1.167 + "<" > "op <" :: "[nat,nat]\<Rightarrow>bool";
1.168 +
1.169 +end_import;
1.170 +
1.171 +import_theory arithmetic;
1.172 +
1.173 +const_maps
1.174 + ALT_ZERO > HOL4Compat.ALT_ZERO
1.175 + NUMERAL_BIT1 > HOL4Compat.NUMERAL_BIT1
1.176 + NUMERAL_BIT2 > HOL4Compat.NUMERAL_BIT2
1.177 + NUMERAL > HOL4Compat.NUMERAL
1.178 + num_case > Nat.nat.nat_case
1.179 + ">" > HOL4Compat.nat_gt
1.180 + ">=" > HOL4Compat.nat_ge
1.181 + FUNPOW > HOL4Compat.FUNPOW
1.182 + "<=" > "op <=" :: "[nat,nat]\<Rightarrow>bool"
1.183 + "+" > "op +" :: "[nat,nat]\<Rightarrow>nat"
1.184 + "*" > "op *" :: "[nat,nat]\<Rightarrow>nat"
1.185 + "-" > "op -" :: "[nat,nat]\<Rightarrow>nat"
1.186 + MIN > HOL.min :: "[nat,nat]\<Rightarrow>nat"
1.187 + MAX > HOL.max :: "[nat,nat]\<Rightarrow>nat"
1.188 + DIV > "Divides.op div" :: "[nat,nat]\<Rightarrow>nat"
1.189 + MOD > "Divides.op mod" :: "[nat,nat]\<Rightarrow>nat"
1.190 + EXP > Nat.power :: "[nat,nat]\<Rightarrow>nat";
1.191 +
1.192 +end_import;
1.193 +
1.194 +import_theory hrat;
1.195 +end_import;
1.196 +
1.197 +import_theory hreal;
1.198 +end_import;
1.199 +
1.200 +import_theory numeral;
1.201 +end_import;
1.202 +
1.203 +import_theory ind_type;
1.204 +end_import;
1.205 +
1.206 +import_theory divides;
1.207 +
1.208 +const_maps
1.209 + divides > "Divides.op dvd" :: "[nat,nat]\<Rightarrow>bool";
1.210 +
1.211 +end_import;
1.212 +
1.213 +import_theory prime;
1.214 +end_import;
1.215 +
1.216 +import_theory list;
1.217 +
1.218 +type_maps
1.219 + list > List.list;
1.220 +
1.221 +const_maps
1.222 + CONS > List.list.Cons
1.223 + NIL > List.list.Nil
1.224 + list_case > List.list.list_case
1.225 + NULL > List.null
1.226 + HD > List.hd
1.227 + TL > List.tl
1.228 + MAP > List.map
1.229 + MEM > "List.op mem"
1.230 + FILTER > List.filter
1.231 + FOLDL > List.foldl
1.232 + EVERY > List.list_all
1.233 + REVERSE > List.rev
1.234 + LAST > List.last
1.235 + FRONT > List.butlast
1.236 + APPEND > "List.op @"
1.237 + FLAT > List.concat
1.238 + LENGTH > Nat.size
1.239 + REPLICATE > List.replicate
1.240 + list_size > HOL4Compat.list_size
1.241 + SUM > HOL4Compat.sum
1.242 + FOLDR > HOL4Compat.FOLDR
1.243 + EXISTS > HOL4Compat.list_exists
1.244 + MAP2 > HOL4Compat.map2
1.245 + ZIP > HOL4Compat.ZIP
1.246 + UNZIP > HOL4Compat.unzip;
1.247 +
1.248 +ignore_thms
1.249 + list_TY_DEF
1.250 + list_repfns
1.251 + list0_def
1.252 + list1_def
1.253 + NIL
1.254 + CONS_def;
1.255 +
1.256 +end_import;
1.257 +
1.258 +import_theory pred_set;
1.259 +end_import;
1.260 +
1.261 +import_theory operator;
1.262 +end_import;
1.263 +
1.264 +import_theory rich_list;
1.265 +end_import;
1.266 +
1.267 +import_theory state_transformer;
1.268 +end_import;
1.269 +
1.270 +append_dump "end";
1.271 +
1.272 +flush_dump;
1.273 +
1.274 +import_segment "";
1.275 +
1.276 +end
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Prob.thy Fri Apr 02 17:37:45 2004 +0200
2.3 @@ -0,0 +1,43 @@
2.4 +theory GenHOL4Prob = GenHOL4Real:
2.5 +
2.6 +import_segment "hol4";
2.7 +
2.8 +setup_dump "../HOL" "HOL4Prob";
2.9 +
2.10 +append_dump "theory HOL4Prob = HOL4Real:";
2.11 +
2.12 +import_theory prob_extra;
2.13 +
2.14 +const_moves
2.15 + COMPL > GenHOL4Base.pred_set.COMPL;
2.16 +
2.17 +end_import;
2.18 +
2.19 +import_theory prob_canon;
2.20 +end_import;
2.21 +
2.22 +import_theory boolean_sequence;
2.23 +end_import;
2.24 +
2.25 +import_theory prob_algebra;
2.26 +end_import;
2.27 +
2.28 +import_theory prob;
2.29 +end_import;
2.30 +
2.31 +import_theory prob_pseudo;
2.32 +end_import;
2.33 +
2.34 +import_theory prob_indep;
2.35 +end_import;
2.36 +
2.37 +import_theory prob_uniform;
2.38 +end_import;
2.39 +
2.40 +append_dump "end";
2.41 +
2.42 +flush_dump;
2.43 +
2.44 +import_segment "";
2.45 +
2.46 +end
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Real.thy Fri Apr 02 17:37:45 2004 +0200
3.3 @@ -0,0 +1,85 @@
3.4 +theory GenHOL4Real = GenHOL4Base:
3.5 +
3.6 +import_segment "hol4";
3.7 +
3.8 +setup_dump "../HOL" "HOL4Real";
3.9 +
3.10 +append_dump "theory HOL4Real = HOL4Base:";
3.11 +
3.12 +import_theory realax;
3.13 +
3.14 +type_maps
3.15 + real > RealDef.real;
3.16 +
3.17 +const_maps
3.18 + real_0 > 0 :: real
3.19 + real_1 > 1 :: real
3.20 + real_neg > uminus :: "real \<Rightarrow> real"
3.21 + inv > HOL.inverse :: "real \<Rightarrow> real"
3.22 + real_add > "op +" :: "[real,real] \<Rightarrow> real"
3.23 + real_mul > "op *" :: "[real,real] \<Rightarrow> real"
3.24 + real_lt > "op <" :: "[real,real] \<Rightarrow> bool";
3.25 +
3.26 +ignore_thms
3.27 + real_TY_DEF
3.28 + real_tybij
3.29 + real_0
3.30 + real_1
3.31 + real_neg
3.32 + real_inv
3.33 + real_add
3.34 + real_mul
3.35 + real_lt
3.36 + real_of_hreal
3.37 + hreal_of_real
3.38 + REAL_ISO_EQ
3.39 + REAL_POS
3.40 + SUP_ALLPOS_LEMMA1
3.41 + SUP_ALLPOS_LEMMA2
3.42 + SUP_ALLPOS_LEMMA3
3.43 + SUP_ALLPOS_LEMMA4;
3.44 +
3.45 +end_import;
3.46 +
3.47 +import_theory real;
3.48 +
3.49 +const_maps
3.50 + real_gt > HOL4Compat.real_gt
3.51 + real_ge > HOL4Compat.real_ge
3.52 + real_lte > "op <=" :: "[real,real] \<Rightarrow> bool"
3.53 + real_sub > "op -" :: "[real,real] \<Rightarrow> real"
3.54 + "/" > HOL.divide :: "[real,real] \<Rightarrow> real"
3.55 + pow > Nat.power :: "[real,nat] \<Rightarrow> real"
3.56 + abs > HOL.abs :: "real \<Rightarrow> real"
3.57 + real_of_num > RealDef.real :: "nat \<Rightarrow> real";
3.58 +
3.59 +end_import;
3.60 +
3.61 +import_theory topology;
3.62 +end_import;
3.63 +
3.64 +import_theory nets;
3.65 +end_import;
3.66 +
3.67 +import_theory seq;
3.68 +end_import;
3.69 +
3.70 +import_theory lim;
3.71 +end_import;
3.72 +
3.73 +import_theory powser;
3.74 +end_import;
3.75 +
3.76 +import_theory transc;
3.77 +end_import;
3.78 +
3.79 +import_theory poly;
3.80 +end_import;
3.81 +
3.82 +append_dump "end";
3.83 +
3.84 +flush_dump;
3.85 +
3.86 +import_segment "";
3.87 +
3.88 +end
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Vec.thy Fri Apr 02 17:37:45 2004 +0200
4.3 @@ -0,0 +1,40 @@
4.4 +theory GenHOL4Vec = GenHOL4Base:
4.5 +
4.6 +import_segment "hol4";
4.7 +
4.8 +setup_dump "../HOL" "HOL4Vec";
4.9 +
4.10 +append_dump "theory HOL4Vec = HOL4Base:";
4.11 +
4.12 +import_theory res_quan;
4.13 +end_import;
4.14 +
4.15 +import_theory word_base;
4.16 +
4.17 +const_renames
4.18 + BIT > bit;
4.19 +
4.20 +end_import;
4.21 +
4.22 +import_theory word_num;
4.23 +end_import;
4.24 +
4.25 +import_theory word_bitop;
4.26 +end_import;
4.27 +
4.28 +import_theory bword_num;
4.29 +end_import;
4.30 +
4.31 +import_theory bword_arith;
4.32 +end_import;
4.33 +
4.34 +import_theory bword_bitop;
4.35 +end_import;
4.36 +
4.37 +append_dump "end";
4.38 +
4.39 +flush_dump;
4.40 +
4.41 +import_segment "";
4.42 +
4.43 +end
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Word32.thy Fri Apr 02 17:37:45 2004 +0200
5.3 @@ -0,0 +1,29 @@
5.4 +theory GenHOL4Word32 = GenHOL4Base:;
5.5 +
5.6 +import_segment "hol4";
5.7 +
5.8 +setup_dump "../HOL" "HOL4Word32";
5.9 +
5.10 +append_dump "theory HOL4Word32 = HOL4Base:";
5.11 +
5.12 +import_theory bits;
5.13 +
5.14 +const_renames
5.15 + BIT > bit
5.16 +
5.17 +end_import;
5.18 +
5.19 +import_theory word32;
5.20 +
5.21 +const_renames
5.22 + "==" > EQUIV;
5.23 +
5.24 +end_import;
5.25 +
5.26 +append_dump "end";
5.27 +
5.28 +flush_dump;
5.29 +
5.30 +import_segment "";
5.31 +
5.32 +end
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/src/HOL/Import/Generate-HOL/ROOT.ML Fri Apr 02 17:37:45 2004 +0200
6.3 @@ -0,0 +1,5 @@
6.4 +with_path ".." use_thy "HOL4Compat";
6.5 +with_path ".." use_thy "HOL4Syntax";
6.6 +use_thy "GenHOL4Prob";
6.7 +use_thy "GenHOL4Vec";
6.8 +use_thy "GenHOL4Word32";
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/src/HOL/Import/HOL/HOL4.thy Fri Apr 02 17:37:45 2004 +0200
7.3 @@ -0,0 +1,3 @@
7.4 +theory HOL4 = HOL4Vec + HOL4Word32 + HOL4Real:
7.5 +
7.6 +end
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
8.2 +++ b/src/HOL/Import/HOL/HOL4Base.thy Fri Apr 02 17:37:45 2004 +0200
8.3 @@ -0,0 +1,4754 @@
8.4 +theory HOL4Base = HOL4Compat + HOL4Syntax:
8.5 +
8.6 +;setup_theory bool
8.7 +
8.8 +constdefs
8.9 + ARB :: "'a"
8.10 + "ARB == SOME x. True"
8.11 +
8.12 +lemma ARB_DEF: "ARB = (SOME x. True)"
8.13 + by (import bool ARB_DEF)
8.14 +
8.15 +constdefs
8.16 + IN :: "'a => ('a => bool) => bool"
8.17 + "IN == %x f. f x"
8.18 +
8.19 +lemma IN_DEF: "IN = (%x f. f x)"
8.20 + by (import bool IN_DEF)
8.21 +
8.22 +constdefs
8.23 + RES_FORALL :: "('a => bool) => ('a => bool) => bool"
8.24 + "RES_FORALL == %p m. ALL x. IN x p --> m x"
8.25 +
8.26 +lemma RES_FORALL_DEF: "RES_FORALL = (%p m. ALL x. IN x p --> m x)"
8.27 + by (import bool RES_FORALL_DEF)
8.28 +
8.29 +constdefs
8.30 + RES_EXISTS :: "('a => bool) => ('a => bool) => bool"
8.31 + "RES_EXISTS == %p m. EX x. IN x p & m x"
8.32 +
8.33 +lemma RES_EXISTS_DEF: "RES_EXISTS = (%p m. EX x. IN x p & m x)"
8.34 + by (import bool RES_EXISTS_DEF)
8.35 +
8.36 +constdefs
8.37 + RES_EXISTS_UNIQUE :: "('a => bool) => ('a => bool) => bool"
8.38 + "RES_EXISTS_UNIQUE ==
8.39 +%p m. RES_EXISTS p m &
8.40 + RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y))"
8.41 +
8.42 +lemma RES_EXISTS_UNIQUE_DEF: "RES_EXISTS_UNIQUE =
8.43 +(%p m. RES_EXISTS p m &
8.44 + RES_FORALL p (%x. RES_FORALL p (%y. m x & m y --> x = y)))"
8.45 + by (import bool RES_EXISTS_UNIQUE_DEF)
8.46 +
8.47 +constdefs
8.48 + RES_SELECT :: "('a => bool) => ('a => bool) => 'a"
8.49 + "RES_SELECT == %p m. SOME x. IN x p & m x"
8.50 +
8.51 +lemma RES_SELECT_DEF: "RES_SELECT = (%p m. SOME x. IN x p & m x)"
8.52 + by (import bool RES_SELECT_DEF)
8.53 +
8.54 +lemma EXCLUDED_MIDDLE: "ALL t. t | ~ t"
8.55 + by (import bool EXCLUDED_MIDDLE)
8.56 +
8.57 +lemma FORALL_THM: "All f = All f"
8.58 + by (import bool FORALL_THM)
8.59 +
8.60 +lemma EXISTS_THM: "Ex f = Ex f"
8.61 + by (import bool EXISTS_THM)
8.62 +
8.63 +lemma F_IMP: "ALL t. ~ t --> t --> False"
8.64 + by (import bool F_IMP)
8.65 +
8.66 +lemma NOT_AND: "~ (t & ~ t)"
8.67 + by (import bool NOT_AND)
8.68 +
8.69 +lemma AND_CLAUSES: "ALL t.
8.70 + (True & t) = t &
8.71 + (t & True) = t & (False & t) = False & (t & False) = False & (t & t) = t"
8.72 + by (import bool AND_CLAUSES)
8.73 +
8.74 +lemma OR_CLAUSES: "ALL t.
8.75 + (True | t) = True &
8.76 + (t | True) = True & (False | t) = t & (t | False) = t & (t | t) = t"
8.77 + by (import bool OR_CLAUSES)
8.78 +
8.79 +lemma IMP_CLAUSES: "ALL t.
8.80 + (True --> t) = t &
8.81 + (t --> True) = True &
8.82 + (False --> t) = True & (t --> t) = True & (t --> False) = (~ t)"
8.83 + by (import bool IMP_CLAUSES)
8.84 +
8.85 +lemma NOT_CLAUSES: "(ALL t. (~ ~ t) = t) & (~ True) = False & (~ False) = True"
8.86 + by (import bool NOT_CLAUSES)
8.87 +
8.88 +lemma BOOL_EQ_DISTINCT: "True ~= False & False ~= True"
8.89 + by (import bool BOOL_EQ_DISTINCT)
8.90 +
8.91 +lemma EQ_CLAUSES: "ALL t.
8.92 + (True = t) = t &
8.93 + (t = True) = t & (False = t) = (~ t) & (t = False) = (~ t)"
8.94 + by (import bool EQ_CLAUSES)
8.95 +
8.96 +lemma COND_CLAUSES: "ALL t1 t2. (if True then t1 else t2) = t1 & (if False then t1 else t2) = t2"
8.97 + by (import bool COND_CLAUSES)
8.98 +
8.99 +lemma SELECT_UNIQUE: "ALL P x. (ALL y. P y = (y = x)) --> Eps P = x"
8.100 + by (import bool SELECT_UNIQUE)
8.101 +
8.102 +lemma BOTH_EXISTS_AND_THM: "ALL (P::bool) Q::bool. (EX x::'a. P & Q) = ((EX x::'a. P) & (EX x::'a. Q))"
8.103 + by (import bool BOTH_EXISTS_AND_THM)
8.104 +
8.105 +lemma BOTH_FORALL_OR_THM: "ALL (P::bool) Q::bool.
8.106 + (ALL x::'a. P | Q) = ((ALL x::'a. P) | (ALL x::'a. Q))"
8.107 + by (import bool BOTH_FORALL_OR_THM)
8.108 +
8.109 +lemma BOTH_FORALL_IMP_THM: "ALL (P::bool) Q::bool.
8.110 + (ALL x::'a. P --> Q) = ((EX x::'a. P) --> (ALL x::'a. Q))"
8.111 + by (import bool BOTH_FORALL_IMP_THM)
8.112 +
8.113 +lemma BOTH_EXISTS_IMP_THM: "ALL (P::bool) Q::bool.
8.114 + (EX x::'a. P --> Q) = ((ALL x::'a. P) --> (EX x::'a. Q))"
8.115 + by (import bool BOTH_EXISTS_IMP_THM)
8.116 +
8.117 +lemma OR_IMP_THM: "ALL A B. (A = (B | A)) = (B --> A)"
8.118 + by (import bool OR_IMP_THM)
8.119 +
8.120 +lemma DE_MORGAN_THM: "ALL A B. (~ (A & B)) = (~ A | ~ B) & (~ (A | B)) = (~ A & ~ B)"
8.121 + by (import bool DE_MORGAN_THM)
8.122 +
8.123 +lemma IMP_F_EQ_F: "ALL t. (t --> False) = (t = False)"
8.124 + by (import bool IMP_F_EQ_F)
8.125 +
8.126 +lemma EQ_EXPAND: "ALL t1 t2. (t1 = t2) = (t1 & t2 | ~ t1 & ~ t2)"
8.127 + by (import bool EQ_EXPAND)
8.128 +
8.129 +lemma COND_RATOR: "ALL b f g x. (if b then f else g) x = (if b then f x else g x)"
8.130 + by (import bool COND_RATOR)
8.131 +
8.132 +lemma COND_ABS: "ALL b f g. (%x. if b then f x else g x) = (if b then f else g)"
8.133 + by (import bool COND_ABS)
8.134 +
8.135 +lemma COND_EXPAND: "ALL b t1 t2. (if b then t1 else t2) = ((~ b | t1) & (b | t2))"
8.136 + by (import bool COND_EXPAND)
8.137 +
8.138 +lemma ONE_ONE_THM: "ALL f. inj f = (ALL x1 x2. f x1 = f x2 --> x1 = x2)"
8.139 + by (import bool ONE_ONE_THM)
8.140 +
8.141 +lemma ABS_REP_THM: "(All::(('a => bool) => bool) => bool)
8.142 + (%P::'a => bool.
8.143 + (op -->::bool => bool => bool)
8.144 + ((Ex::(('b => 'a) => bool) => bool)
8.145 + ((TYPE_DEFINITION::('a => bool) => ('b => 'a) => bool) P))
8.146 + ((Ex::(('b => 'a) => bool) => bool)
8.147 + (%x::'b => 'a.
8.148 + (Ex::(('a => 'b) => bool) => bool)
8.149 + (%abs::'a => 'b.
8.150 + (op &::bool => bool => bool)
8.151 + ((All::('b => bool) => bool)
8.152 + (%a::'b. (op =::'b => 'b => bool) (abs (x a)) a))
8.153 + ((All::('a => bool) => bool)
8.154 + (%r::'a.
8.155 + (op =::bool => bool => bool) (P r)
8.156 + ((op =::'a => 'a => bool) (x (abs r)) r)))))))"
8.157 + by (import bool ABS_REP_THM)
8.158 +
8.159 +lemma LET_RAND: "(P::'b => bool) (Let (M::'a) (N::'a => 'b)) = (let x::'a = M in P (N x))"
8.160 + by (import bool LET_RAND)
8.161 +
8.162 +lemma LET_RATOR: "Let (M::'a) (N::'a => 'b => 'c) (b::'b) = (let x::'a = M in N x b)"
8.163 + by (import bool LET_RATOR)
8.164 +
8.165 +lemma SWAP_FORALL_THM: "ALL P. (ALL x. All (P x)) = (ALL y x. P x y)"
8.166 + by (import bool SWAP_FORALL_THM)
8.167 +
8.168 +lemma SWAP_EXISTS_THM: "ALL P. (EX x. Ex (P x)) = (EX y x. P x y)"
8.169 + by (import bool SWAP_EXISTS_THM)
8.170 +
8.171 +lemma AND_CONG: "ALL P P' Q Q'. (Q --> P = P') & (P' --> Q = Q') --> (P & Q) = (P' & Q')"
8.172 + by (import bool AND_CONG)
8.173 +
8.174 +lemma OR_CONG: "ALL P P' Q Q'. (~ Q --> P = P') & (~ P' --> Q = Q') --> (P | Q) = (P' | Q')"
8.175 + by (import bool OR_CONG)
8.176 +
8.177 +lemma COND_CONG: "ALL P Q x x' y y'.
8.178 + P = Q & (Q --> x = x') & (~ Q --> y = y') -->
8.179 + (if P then x else y) = (if Q then x' else y')"
8.180 + by (import bool COND_CONG)
8.181 +
8.182 +lemma MONO_COND: "(x --> y) --> (z --> w) --> (if b then x else z) --> (if b then y else w)"
8.183 + by (import bool MONO_COND)
8.184 +
8.185 +lemma SKOLEM_THM: "ALL P. (ALL x. Ex (P x)) = (EX f. ALL x. P x (f x))"
8.186 + by (import bool SKOLEM_THM)
8.187 +
8.188 +lemma bool_case_thm: "(ALL (e0::'a) e1::'a. (case True of True => e0 | False => e1) = e0) &
8.189 +(ALL (e0::'a) e1::'a. (case False of True => e0 | False => e1) = e1)"
8.190 + by (import bool bool_case_thm)
8.191 +
8.192 +lemma bool_case_ID: "ALL x b. (case b of True => x | False => x) = x"
8.193 + by (import bool bool_case_ID)
8.194 +
8.195 +lemma boolAxiom: "ALL e0 e1. EX x. x True = e0 & x False = e1"
8.196 + by (import bool boolAxiom)
8.197 +
8.198 +lemma UEXISTS_OR_THM: "ALL P Q. (EX! x. P x | Q x) --> Ex1 P | Ex1 Q"
8.199 + by (import bool UEXISTS_OR_THM)
8.200 +
8.201 +lemma UEXISTS_SIMP: "(EX! x::'a. (t::bool)) = (t & (ALL x::'a. All (op = x)))"
8.202 + by (import bool UEXISTS_SIMP)
8.203 +
8.204 +consts
8.205 + RES_ABSTRACT :: "('a => bool) => ('a => 'b) => 'a => 'b"
8.206 +
8.207 +specification (RES_ABSTRACT) RES_ABSTRACT_DEF: "(ALL (p::'a => bool) (m::'a => 'b) x::'a.
8.208 + IN x p --> RES_ABSTRACT p m x = m x) &
8.209 +(ALL (p::'a => bool) (m1::'a => 'b) m2::'a => 'b.
8.210 + (ALL x::'a. IN x p --> m1 x = m2 x) -->
8.211 + RES_ABSTRACT p m1 = RES_ABSTRACT p m2)"
8.212 + by (import bool RES_ABSTRACT_DEF)
8.213 +
8.214 +lemma BOOL_FUN_CASES_THM: "ALL f. f = (%b. True) | f = (%b. False) | f = (%b. b) | f = Not"
8.215 + by (import bool BOOL_FUN_CASES_THM)
8.216 +
8.217 +lemma BOOL_FUN_INDUCT: "ALL P. P (%b. True) & P (%b. False) & P (%b. b) & P Not --> All P"
8.218 + by (import bool BOOL_FUN_INDUCT)
8.219 +
8.220 +;end_setup
8.221 +
8.222 +;setup_theory combin
8.223 +
8.224 +constdefs
8.225 + K :: "'a => 'b => 'a"
8.226 + "K == %x y. x"
8.227 +
8.228 +lemma K_DEF: "K = (%x y. x)"
8.229 + by (import combin K_DEF)
8.230 +
8.231 +constdefs
8.232 + S :: "('a => 'b => 'c) => ('a => 'b) => 'a => 'c"
8.233 + "S == %f g x. f x (g x)"
8.234 +
8.235 +lemma S_DEF: "S = (%f g x. f x (g x))"
8.236 + by (import combin S_DEF)
8.237 +
8.238 +constdefs
8.239 + I :: "'a => 'a"
8.240 + "(op ==::('a => 'a) => ('a => 'a) => prop) (I::'a => 'a)
8.241 + ((S::('a => ('a => 'a) => 'a) => ('a => 'a => 'a) => 'a => 'a)
8.242 + (K::'a => ('a => 'a) => 'a) (K::'a => 'a => 'a))"
8.243 +
8.244 +lemma I_DEF: "(op =::('a => 'a) => ('a => 'a) => bool) (I::'a => 'a)
8.245 + ((S::('a => ('a => 'a) => 'a) => ('a => 'a => 'a) => 'a => 'a)
8.246 + (K::'a => ('a => 'a) => 'a) (K::'a => 'a => 'a))"
8.247 + by (import combin I_DEF)
8.248 +
8.249 +constdefs
8.250 + C :: "('a => 'b => 'c) => 'b => 'a => 'c"
8.251 + "C == %f x y. f y x"
8.252 +
8.253 +lemma C_DEF: "C = (%f x y. f y x)"
8.254 + by (import combin C_DEF)
8.255 +
8.256 +constdefs
8.257 + W :: "('a => 'a => 'b) => 'a => 'b"
8.258 + "W == %f x. f x x"
8.259 +
8.260 +lemma W_DEF: "W = (%f x. f x x)"
8.261 + by (import combin W_DEF)
8.262 +
8.263 +lemma I_THM: "ALL x. I x = x"
8.264 + by (import combin I_THM)
8.265 +
8.266 +lemma I_o_ID: "ALL f. I o f = f & f o I = f"
8.267 + by (import combin I_o_ID)
8.268 +
8.269 +;end_setup
8.270 +
8.271 +;setup_theory sum
8.272 +
8.273 +lemma ISL_OR_ISR: "ALL x. ISL x | ISR x"
8.274 + by (import sum ISL_OR_ISR)
8.275 +
8.276 +lemma INL: "ALL x. ISL x --> Inl (OUTL x) = x"
8.277 + by (import sum INL)
8.278 +
8.279 +lemma INR: "ALL x. ISR x --> Inr (OUTR x) = x"
8.280 + by (import sum INR)
8.281 +
8.282 +lemma sum_case_cong: "ALL (M::'b + 'c) (M'::'b + 'c) (f::'b => 'a) g::'c => 'a.
8.283 + M = M' &
8.284 + (ALL x::'b. M' = Inl x --> f x = (f'::'b => 'a) x) &
8.285 + (ALL y::'c. M' = Inr y --> g y = (g'::'c => 'a) y) -->
8.286 + sum_case f g M = sum_case f' g' M'"
8.287 + by (import sum sum_case_cong)
8.288 +
8.289 +;end_setup
8.290 +
8.291 +;setup_theory one
8.292 +
8.293 +;end_setup
8.294 +
8.295 +;setup_theory option
8.296 +
8.297 +lemma option_CLAUSES: "(op &::bool => bool => bool)
8.298 + ((All::('a => bool) => bool)
8.299 + (%x::'a.
8.300 + (All::('a => bool) => bool)
8.301 + (%y::'a.
8.302 + (op =::bool => bool => bool)
8.303 + ((op =::'a option => 'a option => bool) ((Some::'a ~=> 'a) x)
8.304 + ((Some::'a ~=> 'a) y))
8.305 + ((op =::'a => 'a => bool) x y))))
8.306 + ((op &::bool => bool => bool)
8.307 + ((All::('a => bool) => bool)
8.308 + (%x::'a.
8.309 + (op =::'a => 'a => bool)
8.310 + ((the::'a option => 'a) ((Some::'a ~=> 'a) x)) x))
8.311 + ((op &::bool => bool => bool)
8.312 + ((All::('a => bool) => bool)
8.313 + (%x::'a.
8.314 + (Not::bool => bool)
8.315 + ((op =::'a option => 'a option => bool) (None::'a option)
8.316 + ((Some::'a ~=> 'a) x))))
8.317 + ((op &::bool => bool => bool)
8.318 + ((All::('a => bool) => bool)
8.319 + (%x::'a.
8.320 + (Not::bool => bool)
8.321 + ((op =::'a option => 'a option => bool) ((Some::'a ~=> 'a) x)
8.322 + (None::'a option))))
8.323 + ((op &::bool => bool => bool)
8.324 + ((All::('a => bool) => bool)
8.325 + (%x::'a.
8.326 + (op =::bool => bool => bool)
8.327 + ((IS_SOME::'a option => bool) ((Some::'a ~=> 'a) x))
8.328 + (True::bool)))
8.329 + ((op &::bool => bool => bool)
8.330 + ((op =::bool => bool => bool)
8.331 + ((IS_SOME::'a option => bool) (None::'a option)) (False::bool))
8.332 + ((op &::bool => bool => bool)
8.333 + ((All::('a option => bool) => bool)
8.334 + (%x::'a option.
8.335 + (op =::bool => bool => bool)
8.336 + ((IS_NONE::'a option => bool) x)
8.337 + ((op =::'a option => 'a option => bool) x
8.338 + (None::'a option))))
8.339 + ((op &::bool => bool => bool)
8.340 + ((All::('a option => bool) => bool)
8.341 + (%x::'a option.
8.342 + (op =::bool => bool => bool)
8.343 + ((Not::bool => bool) ((IS_SOME::'a option => bool) x))
8.344 + ((op =::'a option => 'a option => bool) x
8.345 + (None::'a option))))
8.346 + ((op &::bool => bool => bool)
8.347 + ((All::('a option => bool) => bool)
8.348 + (%x::'a option.
8.349 + (op -->::bool => bool => bool)
8.350 + ((IS_SOME::'a option => bool) x)
8.351 + ((op =::'a option => 'a option => bool)
8.352 + ((Some::'a ~=> 'a) ((the::'a option => 'a) x))
8.353 + x)))
8.354 + ((op &::bool => bool => bool)
8.355 + ((All::('a option => bool) => bool)
8.356 + (%x::'a option.
8.357 + (op =::'a option => 'a option => bool)
8.358 + ((option_case::'a option
8.359 + => ('a ~=> 'a) => 'a option ~=> 'a)
8.360 + (None::'a option) (Some::'a ~=> 'a) x)
8.361 + x))
8.362 + ((op &::bool => bool => bool)
8.363 + ((All::('a option => bool) => bool)
8.364 + (%x::'a option.
8.365 + (op =::'a option => 'a option => bool)
8.366 + ((option_case::'a option
8.367 + => ('a ~=> 'a) => 'a option ~=> 'a)
8.368 + x (Some::'a ~=> 'a) x)
8.369 + x))
8.370 + ((op &::bool => bool => bool)
8.371 + ((All::('a option => bool) => bool)
8.372 + (%x::'a option.
8.373 + (op -->::bool => bool => bool)
8.374 + ((IS_NONE::'a option => bool) x)
8.375 + ((op =::'b => 'b => bool)
8.376 + ((option_case::'b
8.377 + => ('a => 'b) => 'a option => 'b)
8.378 + (e::'b) (f::'a => 'b) x)
8.379 + e)))
8.380 + ((op &::bool => bool => bool)
8.381 + ((All::('a option => bool) => bool)
8.382 + (%x::'a option.
8.383 + (op -->::bool => bool => bool)
8.384 + ((IS_SOME::'a option => bool) x)
8.385 + ((op =::'b => 'b => bool)
8.386 + ((option_case::'b
8.387 + => ('a => 'b) => 'a option => 'b)
8.388 + e f x)
8.389 + (f ((the::'a option => 'a) x)))))
8.390 + ((op &::bool => bool => bool)
8.391 + ((All::('a option => bool) => bool)
8.392 + (%x::'a option.
8.393 + (op -->::bool => bool => bool)
8.394 + ((IS_SOME::'a option => bool) x)
8.395 + ((op =::'a option => 'a option => bool)
8.396 + ((option_case::'a option
8.397 + => ('a ~=> 'a) => 'a option ~=> 'a)
8.398 +(ea::'a option) (Some::'a ~=> 'a) x)
8.399 + x)))
8.400 + ((op &::bool => bool => bool)
8.401 + ((All::('b => bool) => bool)
8.402 + (%u::'b.
8.403 + (All::(('a => 'b) => bool) => bool)
8.404 + (%f::'a => 'b.
8.405 + (op =::'b => 'b => bool)
8.406 + ((option_case::'b => ('a => 'b) => 'a option => 'b) u f
8.407 + (None::'a option))
8.408 + u)))
8.409 + ((op &::bool => bool => bool)
8.410 + ((All::('b => bool) => bool)
8.411 + (%u::'b.
8.412 + (All::(('a => 'b) => bool) => bool)
8.413 +(%f::'a => 'b.
8.414 + (All::('a => bool) => bool)
8.415 + (%x::'a.
8.416 + (op =::'b => 'b => bool)
8.417 + ((option_case::'b => ('a => 'b) => 'a option => 'b) u f
8.418 + ((Some::'a ~=> 'a) x))
8.419 + (f x)))))
8.420 + ((op &::bool => bool => bool)
8.421 + ((All::(('a => 'b) => bool) => bool)
8.422 + (%f::'a => 'b.
8.423 + (All::('a => bool) => bool)
8.424 + (%x::'a.
8.425 + (op =::'b option => 'b option => bool)
8.426 + ((option_map::('a => 'b) => 'a option ~=> 'b) f
8.427 + ((Some::'a ~=> 'a) x))
8.428 + ((Some::'b ~=> 'b) (f x)))))
8.429 + ((op &::bool => bool => bool)
8.430 + ((All::(('a => 'b) => bool) => bool)
8.431 + (%f::'a => 'b.
8.432 + (op =::'b option => 'b option => bool)
8.433 + ((option_map::('a => 'b) => 'a option ~=> 'b) f (None::'a option))
8.434 + (None::'b option)))
8.435 + ((op &::bool => bool => bool)
8.436 + ((op =::'a option => 'a option => bool)
8.437 + ((OPTION_JOIN::'a option option ~=> 'a) (None::'a option option))
8.438 + (None::'a option))
8.439 + ((All::('a option => bool) => bool)
8.440 + (%x::'a option.
8.441 + (op =::'a option => 'a option => bool)
8.442 + ((OPTION_JOIN::'a option option ~=> 'a)
8.443 + ((Some::'a option ~=> 'a option) x))
8.444 + x))))))))))))))))))))"
8.445 + by (import option option_CLAUSES)
8.446 +
8.447 +lemma option_case_compute: "option_case (e::'b) (f::'a => 'b) (x::'a option) =
8.448 +(if IS_SOME x then f (the x) else e)"
8.449 + by (import option option_case_compute)
8.450 +
8.451 +lemma OPTION_MAP_EQ_SOME: "ALL f x y. (option_map f x = Some y) = (EX z. x = Some z & y = f z)"
8.452 + by (import option OPTION_MAP_EQ_SOME)
8.453 +
8.454 +lemma OPTION_JOIN_EQ_SOME: "ALL x xa. (OPTION_JOIN x = Some xa) = (x = Some (Some xa))"
8.455 + by (import option OPTION_JOIN_EQ_SOME)
8.456 +
8.457 +lemma option_case_cong: "ALL M M' u f.
8.458 + M = M' & (M' = None --> u = u') & (ALL x. M' = Some x --> f x = f' x) -->
8.459 + option_case u f M = option_case u' f' M'"
8.460 + by (import option option_case_cong)
8.461 +
8.462 +;end_setup
8.463 +
8.464 +;setup_theory marker
8.465 +
8.466 +consts
8.467 + stmarker :: "'a => 'a"
8.468 +
8.469 +defs
8.470 + stmarker_primdef: "stmarker == %x. x"
8.471 +
8.472 +lemma stmarker_def: "ALL x. stmarker x = x"
8.473 + by (import marker stmarker_def)
8.474 +
8.475 +lemma move_left_conj: "ALL x xa xb.
8.476 + (x & stmarker xb) = (stmarker xb & x) &
8.477 + ((stmarker xb & x) & xa) = (stmarker xb & x & xa) &
8.478 + (x & stmarker xb & xa) = (stmarker xb & x & xa)"
8.479 + by (import marker move_left_conj)
8.480 +
8.481 +lemma move_right_conj: "ALL x xa xb.
8.482 + (stmarker xb & x) = (x & stmarker xb) &
8.483 + (x & xa & stmarker xb) = ((x & xa) & stmarker xb) &
8.484 + ((x & stmarker xb) & xa) = ((x & xa) & stmarker xb)"
8.485 + by (import marker move_right_conj)
8.486 +
8.487 +lemma move_left_disj: "ALL x xa xb.
8.488 + (x | stmarker xb) = (stmarker xb | x) &
8.489 + ((stmarker xb | x) | xa) = (stmarker xb | x | xa) &
8.490 + (x | stmarker xb | xa) = (stmarker xb | x | xa)"
8.491 + by (import marker move_left_disj)
8.492 +
8.493 +lemma move_right_disj: "ALL x xa xb.
8.494 + (stmarker xb | x) = (x | stmarker xb) &
8.495 + (x | xa | stmarker xb) = ((x | xa) | stmarker xb) &
8.496 + ((x | stmarker xb) | xa) = ((x | xa) | stmarker xb)"
8.497 + by (import marker move_right_disj)
8.498 +
8.499 +;end_setup
8.500 +
8.501 +;setup_theory relation
8.502 +
8.503 +constdefs
8.504 + TC :: "('a => 'a => bool) => 'a => 'a => bool"
8.505 + "TC ==
8.506 +%R a b.
8.507 + ALL P.
8.508 + (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
8.509 + P a b"
8.510 +
8.511 +lemma TC_DEF: "ALL R a b.
8.512 + TC R a b =
8.513 + (ALL P.
8.514 + (ALL x y. R x y --> P x y) & (ALL x y z. P x y & P y z --> P x z) -->
8.515 + P a b)"
8.516 + by (import relation TC_DEF)
8.517 +
8.518 +constdefs
8.519 + RTC :: "('a => 'a => bool) => 'a => 'a => bool"
8.520 + "RTC ==
8.521 +%R a b.
8.522 + ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b"
8.523 +
8.524 +lemma RTC_DEF: "ALL R a b.
8.525 + RTC R a b =
8.526 + (ALL P. (ALL x. P x x) & (ALL x y z. R x y & P y z --> P x z) --> P a b)"
8.527 + by (import relation RTC_DEF)
8.528 +
8.529 +consts
8.530 + RC :: "('a => 'a => bool) => 'a => 'a => bool"
8.531 +
8.532 +defs
8.533 + RC_primdef: "RC == %R x y. x = y | R x y"
8.534 +
8.535 +lemma RC_def: "ALL R x y. RC R x y = (x = y | R x y)"
8.536 + by (import relation RC_def)
8.537 +
8.538 +consts
8.539 + transitive :: "('a => 'a => bool) => bool"
8.540 +
8.541 +defs
8.542 + transitive_primdef: "transitive == %R. ALL x y z. R x y & R y z --> R x z"
8.543 +
8.544 +lemma transitive_def: "ALL R. transitive R = (ALL x y z. R x y & R y z --> R x z)"
8.545 + by (import relation transitive_def)
8.546 +
8.547 +constdefs
8.548 + pred_reflexive :: "('a => 'a => bool) => bool"
8.549 + "pred_reflexive == %R. ALL x. R x x"
8.550 +
8.551 +lemma reflexive_def: "ALL R. pred_reflexive R = (ALL x. R x x)"
8.552 + by (import relation reflexive_def)
8.553 +
8.554 +lemma TC_TRANSITIVE: "ALL x. transitive (TC x)"
8.555 + by (import relation TC_TRANSITIVE)
8.556 +
8.557 +lemma RTC_INDUCT: "ALL x xa.
8.558 + (ALL x. xa x x) & (ALL xb y z. x xb y & xa y z --> xa xb z) -->
8.559 + (ALL xb xc. RTC x xb xc --> xa xb xc)"
8.560 + by (import relation RTC_INDUCT)
8.561 +
8.562 +lemma TC_RULES: "ALL x.
8.563 + (ALL xa xb. x xa xb --> TC x xa xb) &
8.564 + (ALL xa xb xc. TC x xa xb & TC x xb xc --> TC x xa xc)"
8.565 + by (import relation TC_RULES)
8.566 +
8.567 +lemma RTC_RULES: "ALL x.
8.568 + (ALL xa. RTC x xa xa) &
8.569 + (ALL xa xb xc. x xa xb & RTC x xb xc --> RTC x xa xc)"
8.570 + by (import relation RTC_RULES)
8.571 +
8.572 +lemma RTC_STRONG_INDUCT: "ALL R P.
8.573 + (ALL x. P x x) & (ALL x y z. R x y & RTC R y z & P y z --> P x z) -->
8.574 + (ALL x y. RTC R x y --> P x y)"
8.575 + by (import relation RTC_STRONG_INDUCT)
8.576 +
8.577 +lemma RTC_RTC: "ALL R x y. RTC R x y --> (ALL z. RTC R y z --> RTC R x z)"
8.578 + by (import relation RTC_RTC)
8.579 +
8.580 +lemma RTC_TRANSITIVE: "ALL x. transitive (RTC x)"
8.581 + by (import relation RTC_TRANSITIVE)
8.582 +
8.583 +lemma RTC_REFLEXIVE: "ALL R. pred_reflexive (RTC R)"
8.584 + by (import relation RTC_REFLEXIVE)
8.585 +
8.586 +lemma RC_REFLEXIVE: "ALL R. pred_reflexive (RC R)"
8.587 + by (import relation RC_REFLEXIVE)
8.588 +
8.589 +lemma TC_SUBSET: "ALL x xa xb. x xa xb --> TC x xa xb"
8.590 + by (import relation TC_SUBSET)
8.591 +
8.592 +lemma RTC_SUBSET: "ALL R x y. R x y --> RTC R x y"
8.593 + by (import relation RTC_SUBSET)
8.594 +
8.595 +lemma RC_SUBSET: "ALL R x y. R x y --> RC R x y"
8.596 + by (import relation RC_SUBSET)
8.597 +
8.598 +lemma RC_RTC: "ALL R x y. RC R x y --> RTC R x y"
8.599 + by (import relation RC_RTC)
8.600 +
8.601 +lemma TC_INDUCT: "ALL x xa.
8.602 + (ALL xb y. x xb y --> xa xb y) &
8.603 + (ALL x y z. xa x y & xa y z --> xa x z) -->
8.604 + (ALL xb xc. TC x xb xc --> xa xb xc)"
8.605 + by (import relation TC_INDUCT)
8.606 +
8.607 +lemma TC_INDUCT_LEFT1: "ALL x xa.
8.608 + (ALL xb y. x xb y --> xa xb y) &
8.609 + (ALL xb y z. x xb y & xa y z --> xa xb z) -->
8.610 + (ALL xb xc. TC x xb xc --> xa xb xc)"
8.611 + by (import relation TC_INDUCT_LEFT1)
8.612 +
8.613 +lemma TC_STRONG_INDUCT: "ALL R P.
8.614 + (ALL x y. R x y --> P x y) &
8.615 + (ALL x y z. P x y & P y z & TC R x y & TC R y z --> P x z) -->
8.616 + (ALL u v. TC R u v --> P u v)"
8.617 + by (import relation TC_STRONG_INDUCT)
8.618 +
8.619 +lemma TC_STRONG_INDUCT_LEFT1: "ALL R P.
8.620 + (ALL x y. R x y --> P x y) &
8.621 + (ALL x y z. R x y & P y z & TC R y z --> P x z) -->
8.622 + (ALL u v. TC R u v --> P u v)"
8.623 + by (import relation TC_STRONG_INDUCT_LEFT1)
8.624 +
8.625 +lemma TC_RTC: "ALL R x y. TC R x y --> RTC R x y"
8.626 + by (import relation TC_RTC)
8.627 +
8.628 +lemma RTC_TC_RC: "ALL R x y. RTC R x y --> RC R x y | TC R x y"
8.629 + by (import relation RTC_TC_RC)
8.630 +
8.631 +lemma TC_RC_EQNS: "ALL R. RC (TC R) = RTC R & TC (RC R) = RTC R"
8.632 + by (import relation TC_RC_EQNS)
8.633 +
8.634 +lemma RC_IDEM: "ALL R. RC (RC R) = RC R"
8.635 + by (import relation RC_IDEM)
8.636 +
8.637 +lemma TC_IDEM: "ALL R. TC (TC R) = TC R"
8.638 + by (import relation TC_IDEM)
8.639 +
8.640 +lemma RTC_IDEM: "ALL R. RTC (RTC R) = RTC R"
8.641 + by (import relation RTC_IDEM)
8.642 +
8.643 +lemma RTC_CASES1: "ALL x xa xb. RTC x xa xb = (xa = xb | (EX u. x xa u & RTC x u xb))"
8.644 + by (import relation RTC_CASES1)
8.645 +
8.646 +lemma RTC_CASES2: "ALL x xa xb. RTC x xa xb = (xa = xb | (EX u. RTC x xa u & x u xb))"
8.647 + by (import relation RTC_CASES2)
8.648 +
8.649 +lemma RTC_CASES_RTC_TWICE: "ALL x xa xb. RTC x xa xb = (EX u. RTC x xa u & RTC x u xb)"
8.650 + by (import relation RTC_CASES_RTC_TWICE)
8.651 +
8.652 +lemma TC_CASES1: "ALL R x z. TC R x z --> R x z | (EX y. R x y & TC R y z)"
8.653 + by (import relation TC_CASES1)
8.654 +
8.655 +lemma TC_CASES2: "ALL R x z. TC R x z --> R x z | (EX y. TC R x y & R y z)"
8.656 + by (import relation TC_CASES2)
8.657 +
8.658 +lemma TC_MONOTONE: "ALL R Q. (ALL x y. R x y --> Q x y) --> (ALL x y. TC R x y --> TC Q x y)"
8.659 + by (import relation TC_MONOTONE)
8.660 +
8.661 +lemma RTC_MONOTONE: "ALL R Q. (ALL x y. R x y --> Q x y) --> (ALL x y. RTC R x y --> RTC Q x y)"
8.662 + by (import relation RTC_MONOTONE)
8.663 +
8.664 +constdefs
8.665 + WF :: "('a => 'a => bool) => bool"
8.666 + "WF == %R. ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b))"
8.667 +
8.668 +lemma WF_DEF: "ALL R. WF R = (ALL B. Ex B --> (EX min. B min & (ALL b. R b min --> ~ B b)))"
8.669 + by (import relation WF_DEF)
8.670 +
8.671 +lemma WF_INDUCTION_THM: "ALL R. WF R --> (ALL P. (ALL x. (ALL y. R y x --> P y) --> P x) --> All P)"
8.672 + by (import relation WF_INDUCTION_THM)
8.673 +
8.674 +lemma WF_NOT_REFL: "ALL x xa xb. WF x --> x xa xb --> xa ~= xb"
8.675 + by (import relation WF_NOT_REFL)
8.676 +
8.677 +constdefs
8.678 + EMPTY_REL :: "'a => 'a => bool"
8.679 + "EMPTY_REL == %x y. False"
8.680 +
8.681 +lemma EMPTY_REL_DEF: "ALL x y. EMPTY_REL x y = False"
8.682 + by (import relation EMPTY_REL_DEF)
8.683 +
8.684 +lemma WF_EMPTY_REL: "WF EMPTY_REL"
8.685 + by (import relation WF_EMPTY_REL)
8.686 +
8.687 +lemma WF_SUBSET: "ALL x xa. WF x & (ALL xb y. xa xb y --> x xb y) --> WF xa"
8.688 + by (import relation WF_SUBSET)
8.689 +
8.690 +lemma WF_TC: "ALL R. WF R --> WF (TC R)"
8.691 + by (import relation WF_TC)
8.692 +
8.693 +consts
8.694 + inv_image :: "('b => 'b => bool) => ('a => 'b) => 'a => 'a => bool"
8.695 +
8.696 +defs
8.697 + inv_image_primdef: "relation.inv_image ==
8.698 +%(R::'b => 'b => bool) (f::'a => 'b) (x::'a) y::'a. R (f x) (f y)"
8.699 +
8.700 +lemma inv_image_def: "ALL (R::'b => 'b => bool) f::'a => 'b.
8.701 + relation.inv_image R f = (%(x::'a) y::'a. R (f x) (f y))"
8.702 + by (import relation inv_image_def)
8.703 +
8.704 +lemma WF_inv_image: "ALL (R::'b => 'b => bool) f::'a => 'b. WF R --> WF (relation.inv_image R f)"
8.705 + by (import relation WF_inv_image)
8.706 +
8.707 +constdefs
8.708 + RESTRICT :: "('a => 'b) => ('a => 'a => bool) => 'a => 'a => 'b"
8.709 + "RESTRICT == %f R x y. if R y x then f y else ARB"
8.710 +
8.711 +lemma RESTRICT_DEF: "ALL f R x. RESTRICT f R x = (%y. if R y x then f y else ARB)"
8.712 + by (import relation RESTRICT_DEF)
8.713 +
8.714 +lemma RESTRICT_LEMMA: "ALL x xa xb xc. xa xb xc --> RESTRICT x xa xc xb = x xb"
8.715 + by (import relation RESTRICT_LEMMA)
8.716 +
8.717 +consts
8.718 + approx :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => ('a => 'b) => bool"
8.719 +
8.720 +defs
8.721 + approx_primdef: "approx == %R M x f. f = RESTRICT (%y. M (RESTRICT f R y) y) R x"
8.722 +
8.723 +lemma approx_def: "ALL R M x f. approx R M x f = (f = RESTRICT (%y. M (RESTRICT f R y) y) R x)"
8.724 + by (import relation approx_def)
8.725 +
8.726 +consts
8.727 + the_fun :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'a => 'b"
8.728 +
8.729 +defs
8.730 + the_fun_primdef: "the_fun == %R M x. Eps (approx R M x)"
8.731 +
8.732 +lemma the_fun_def: "ALL R M x. the_fun R M x = Eps (approx R M x)"
8.733 + by (import relation the_fun_def)
8.734 +
8.735 +constdefs
8.736 + WFREC :: "('a => 'a => bool) => (('a => 'b) => 'a => 'b) => 'a => 'b"
8.737 + "WFREC ==
8.738 +%R M x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x"
8.739 +
8.740 +lemma WFREC_DEF: "ALL R M.
8.741 + WFREC R M =
8.742 + (%x. M (RESTRICT (the_fun (TC R) (%f v. M (RESTRICT f R v) v) x) R x) x)"
8.743 + by (import relation WFREC_DEF)
8.744 +
8.745 +lemma WFREC_THM: "ALL R M. WF R --> (ALL x. WFREC R M x = M (RESTRICT (WFREC R M) R x) x)"
8.746 + by (import relation WFREC_THM)
8.747 +
8.748 +lemma WFREC_COROLLARY: "ALL M R f. f = WFREC R M --> WF R --> (ALL x. f x = M (RESTRICT f R x) x)"
8.749 + by (import relation WFREC_COROLLARY)
8.750 +
8.751 +lemma WF_RECURSION_THM: "ALL R. WF R --> (ALL M. EX! f. ALL x. f x = M (RESTRICT f R x) x)"
8.752 + by (import relation WF_RECURSION_THM)
8.753 +
8.754 +;end_setup
8.755 +
8.756 +;setup_theory pair
8.757 +
8.758 +lemma CURRY_ONE_ONE_THM: "(curry f = curry g) = (f = g)"
8.759 + by (import pair CURRY_ONE_ONE_THM)
8.760 +
8.761 +lemma UNCURRY_ONE_ONE_THM: "(split f = split g) = (f = g)"
8.762 + by (import pair UNCURRY_ONE_ONE_THM)
8.763 +
8.764 +lemma pair_Axiom: "ALL f. EX x. ALL xa y. x (xa, y) = f xa y"
8.765 + by (import pair pair_Axiom)
8.766 +
8.767 +lemma UNCURRY_CONG: "ALL M M' f.
8.768 + M = M' & (ALL x y. M' = (x, y) --> f x y = f' x y) -->
8.769 + split f M = split f' M'"
8.770 + by (import pair UNCURRY_CONG)
8.771 +
8.772 +lemma ELIM_PEXISTS: "(EX p. P (fst p) (snd p)) = (EX p1. Ex (P p1))"
8.773 + by (import pair ELIM_PEXISTS)
8.774 +
8.775 +lemma ELIM_PFORALL: "(ALL p. P (fst p) (snd p)) = (ALL p1. All (P p1))"
8.776 + by (import pair ELIM_PFORALL)
8.777 +
8.778 +lemma PFORALL_THM: "ALL x. (ALL xa. All (x xa)) = All (split x)"
8.779 + by (import pair PFORALL_THM)
8.780 +
8.781 +lemma PEXISTS_THM: "ALL x. (EX xa. Ex (x xa)) = Ex (split x)"
8.782 + by (import pair PEXISTS_THM)
8.783 +
8.784 +lemma LET2_RAND: "ALL (x::'c => 'd) (xa::'a * 'b) xb::'a => 'b => 'c.
8.785 + x (Let xa (split xb)) = (let (xa::'a, y::'b) = xa in x (xb xa y))"
8.786 + by (import pair LET2_RAND)
8.787 +
8.788 +lemma LET2_RATOR: "ALL (x::'a1 * 'a2) (xa::'a1 => 'a2 => 'b => 'c) xb::'b.
8.789 + Let x (split xa) xb = (let (x::'a1, y::'a2) = x in xa x y xb)"
8.790 + by (import pair LET2_RATOR)
8.791 +
8.792 +lemma pair_case_cong: "ALL x xa xb.
8.793 + x = xa & (ALL x y. xa = (x, y) --> xb x y = f' x y) -->
8.794 + split xb x = split f' xa"
8.795 + by (import pair pair_case_cong)
8.796 +
8.797 +constdefs
8.798 + LEX :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool"
8.799 + "LEX == %R1 R2 (s, t) (u, v). R1 s u | s = u & R2 t v"
8.800 +
8.801 +lemma LEX_DEF: "ALL R1 R2. LEX R1 R2 = (%(s, t) (u, v). R1 s u | s = u & R2 t v)"
8.802 + by (import pair LEX_DEF)
8.803 +
8.804 +lemma WF_LEX: "ALL x xa. WF x & WF xa --> WF (LEX x xa)"
8.805 + by (import pair WF_LEX)
8.806 +
8.807 +constdefs
8.808 + RPROD :: "('a => 'a => bool) => ('b => 'b => bool) => 'a * 'b => 'a * 'b => bool"
8.809 + "RPROD == %R1 R2 (s, t) (u, v). R1 s u & R2 t v"
8.810 +
8.811 +lemma RPROD_DEF: "ALL R1 R2. RPROD R1 R2 = (%(s, t) (u, v). R1 s u & R2 t v)"
8.812 + by (import pair RPROD_DEF)
8.813 +
8.814 +lemma WF_RPROD: "ALL R Q. WF R & WF Q --> WF (RPROD R Q)"
8.815 + by (import pair WF_RPROD)
8.816 +
8.817 +;end_setup
8.818 +
8.819 +;setup_theory num
8.820 +
8.821 +;end_setup
8.822 +
8.823 +;setup_theory prim_rec
8.824 +
8.825 +lemma LESS_0_0: "0 < Suc 0"
8.826 + by (import prim_rec LESS_0_0)
8.827 +
8.828 +lemma LESS_LEMMA1: "ALL x xa. x < Suc xa --> x = xa | x < xa"
8.829 + by (import prim_rec LESS_LEMMA1)
8.830 +
8.831 +lemma LESS_LEMMA2: "ALL m n. m = n | m < n --> m < Suc n"
8.832 + by (import prim_rec LESS_LEMMA2)
8.833 +
8.834 +lemma LESS_THM: "ALL m n. (m < Suc n) = (m = n | m < n)"
8.835 + by (import prim_rec LESS_THM)
8.836 +
8.837 +lemma LESS_SUC_IMP: "ALL x xa. x < Suc xa --> x ~= xa --> x < xa"
8.838 + by (import prim_rec LESS_SUC_IMP)
8.839 +
8.840 +lemma EQ_LESS: "ALL n. Suc m = n --> m < n"
8.841 + by (import prim_rec EQ_LESS)
8.842 +
8.843 +lemma NOT_LESS_EQ: "ALL (m::nat) n::nat. m = n --> ~ m < n"
8.844 + by (import prim_rec NOT_LESS_EQ)
8.845 +
8.846 +constdefs
8.847 + SIMP_REC_REL :: "(nat => 'a) => 'a => ('a => 'a) => nat => bool"
8.848 + "SIMP_REC_REL == %fun x f n. fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m))"
8.849 +
8.850 +lemma SIMP_REC_REL: "ALL fun x f n.
8.851 + SIMP_REC_REL fun x f n = (fun 0 = x & (ALL m<n. fun (Suc m) = f (fun m)))"
8.852 + by (import prim_rec SIMP_REC_REL)
8.853 +
8.854 +lemma SIMP_REC_EXISTS: "ALL x f n. EX fun. SIMP_REC_REL fun x f n"
8.855 + by (import prim_rec SIMP_REC_EXISTS)
8.856 +
8.857 +lemma SIMP_REC_REL_UNIQUE: "ALL x xa xb xc xd xe.
8.858 + SIMP_REC_REL xb x xa xd & SIMP_REC_REL xc x xa xe -->
8.859 + (ALL n. n < xd & n < xe --> xb n = xc n)"
8.860 + by (import prim_rec SIMP_REC_REL_UNIQUE)
8.861 +
8.862 +lemma SIMP_REC_REL_UNIQUE_RESULT: "ALL x f n. EX! y. EX g. SIMP_REC_REL g x f (Suc n) & y = g n"
8.863 + by (import prim_rec SIMP_REC_REL_UNIQUE_RESULT)
8.864 +
8.865 +consts
8.866 + SIMP_REC :: "'a => ('a => 'a) => nat => 'a"
8.867 +
8.868 +specification (SIMP_REC) SIMP_REC: "ALL x f' n. EX g. SIMP_REC_REL g x f' (Suc n) & SIMP_REC x f' n = g n"
8.869 + by (import prim_rec SIMP_REC)
8.870 +
8.871 +lemma LESS_SUC_SUC: "ALL m. m < Suc m & m < Suc (Suc m)"
8.872 + by (import prim_rec LESS_SUC_SUC)
8.873 +
8.874 +lemma SIMP_REC_THM: "ALL x f.
8.875 + SIMP_REC x f 0 = x & (ALL m. SIMP_REC x f (Suc m) = f (SIMP_REC x f m))"
8.876 + by (import prim_rec SIMP_REC_THM)
8.877 +
8.878 +constdefs
8.879 + PRE :: "nat => nat"
8.880 + "PRE == %m. if m = 0 then 0 else SOME n. m = Suc n"
8.881 +
8.882 +lemma PRE_DEF: "ALL m. PRE m = (if m = 0 then 0 else SOME n. m = Suc n)"
8.883 + by (import prim_rec PRE_DEF)
8.884 +
8.885 +lemma PRE: "PRE 0 = 0 & (ALL m. PRE (Suc m) = m)"
8.886 + by (import prim_rec PRE)
8.887 +
8.888 +constdefs
8.889 + PRIM_REC_FUN :: "'a => ('a => nat => 'a) => nat => nat => 'a"
8.890 + "PRIM_REC_FUN == %x f. SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
8.891 +
8.892 +lemma PRIM_REC_FUN: "ALL x f. PRIM_REC_FUN x f = SIMP_REC (%n. x) (%fun n. f (fun (PRE n)) n)"
8.893 + by (import prim_rec PRIM_REC_FUN)
8.894 +
8.895 +lemma PRIM_REC_EQN: "ALL x f.
8.896 + (ALL n. PRIM_REC_FUN x f 0 n = x) &
8.897 + (ALL m n. PRIM_REC_FUN x f (Suc m) n = f (PRIM_REC_FUN x f m (PRE n)) n)"
8.898 + by (import prim_rec PRIM_REC_EQN)
8.899 +
8.900 +constdefs
8.901 + PRIM_REC :: "'a => ('a => nat => 'a) => nat => 'a"
8.902 + "PRIM_REC == %x f m. PRIM_REC_FUN x f m (PRE m)"
8.903 +
8.904 +lemma PRIM_REC: "ALL x f m. PRIM_REC x f m = PRIM_REC_FUN x f m (PRE m)"
8.905 + by (import prim_rec PRIM_REC)
8.906 +
8.907 +lemma PRIM_REC_THM: "ALL x f.
8.908 + PRIM_REC x f 0 = x & (ALL m. PRIM_REC x f (Suc m) = f (PRIM_REC x f m) m)"
8.909 + by (import prim_rec PRIM_REC_THM)
8.910 +
8.911 +lemma DC: "ALL P R a.
8.912 + P a & (ALL x. P x --> (EX y. P y & R x y)) -->
8.913 + (EX x. x 0 = a & (ALL n. P (x n) & R (x n) (x (Suc n))))"
8.914 + by (import prim_rec DC)
8.915 +
8.916 +lemma num_Axiom_old: "ALL e f. EX! fn1. fn1 0 = e & (ALL n. fn1 (Suc n) = f (fn1 n) n)"
8.917 + by (import prim_rec num_Axiom_old)
8.918 +
8.919 +lemma num_Axiom: "ALL e f. EX x. x 0 = e & (ALL n. x (Suc n) = f n (x n))"
8.920 + by (import prim_rec num_Axiom)
8.921 +
8.922 +consts
8.923 + wellfounded :: "('a => 'a => bool) => bool"
8.924 +
8.925 +defs
8.926 + wellfounded_primdef: "wellfounded == %R. ~ (EX f. ALL n. R (f (Suc n)) (f n))"
8.927 +
8.928 +lemma wellfounded_def: "ALL R. wellfounded R = (~ (EX f. ALL n. R (f (Suc n)) (f n)))"
8.929 + by (import prim_rec wellfounded_def)
8.930 +
8.931 +lemma WF_IFF_WELLFOUNDED: "ALL R. WF R = wellfounded R"
8.932 + by (import prim_rec WF_IFF_WELLFOUNDED)
8.933 +
8.934 +lemma WF_PRED: "WF (%x y. y = Suc x)"
8.935 + by (import prim_rec WF_PRED)
8.936 +
8.937 +lemma WF_LESS: "(WF::(nat => nat => bool) => bool) (op <::nat => nat => bool)"
8.938 + by (import prim_rec WF_LESS)
8.939 +
8.940 +consts
8.941 + measure :: "('a => nat) => 'a => 'a => bool"
8.942 +
8.943 +defs
8.944 + measure_primdef: "prim_rec.measure == relation.inv_image op <"
8.945 +
8.946 +lemma measure_def: "prim_rec.measure = relation.inv_image op <"
8.947 + by (import prim_rec measure_def)
8.948 +
8.949 +lemma WF_measure: "ALL x. WF (prim_rec.measure x)"
8.950 + by (import prim_rec WF_measure)
8.951 +
8.952 +lemma measure_thm: "ALL x xa xb. prim_rec.measure x xa xb = (x xa < x xb)"
8.953 + by (import prim_rec measure_thm)
8.954 +
8.955 +;end_setup
8.956 +
8.957 +;setup_theory arithmetic
8.958 +
8.959 +constdefs
8.960 + nat_elim__magic :: "nat => nat"
8.961 + "nat_elim__magic == %n. n"
8.962 +
8.963 +lemma nat_elim__magic: "ALL n. nat_elim__magic n = n"
8.964 + by (import arithmetic nat_elim__magic)
8.965 +
8.966 +consts
8.967 + EVEN :: "nat => bool"
8.968 +
8.969 +specification (EVEN) EVEN: "EVEN 0 = True & (ALL n. EVEN (Suc n) = (~ EVEN n))"
8.970 + by (import arithmetic EVEN)
8.971 +
8.972 +consts
8.973 + ODD :: "nat => bool"
8.974 +
8.975 +specification (ODD) ODD: "ODD 0 = False & (ALL n. ODD (Suc n) = (~ ODD n))"
8.976 + by (import arithmetic ODD)
8.977 +
8.978 +lemma TWO: "2 = Suc 1"
8.979 + by (import arithmetic TWO)
8.980 +
8.981 +lemma NORM_0: "(0::nat) = (0::nat)"
8.982 + by (import arithmetic NORM_0)
8.983 +
8.984 +lemma num_case_compute: "ALL n. nat_case f g n = (if n = 0 then f else g (PRE n))"
8.985 + by (import arithmetic num_case_compute)
8.986 +
8.987 +lemma ADD_CLAUSES: "0 + m = m & m + 0 = m & Suc m + n = Suc (m + n) & m + Suc n = Suc (m + n)"
8.988 + by (import arithmetic ADD_CLAUSES)
8.989 +
8.990 +lemma LESS_ADD: "ALL (m::nat) n::nat. n < m --> (EX p::nat. p + n = m)"
8.991 + by (import arithmetic LESS_ADD)
8.992 +
8.993 +lemma LESS_ANTISYM: "ALL (m::nat) n::nat. ~ (m < n & n < m)"
8.994 + by (import arithmetic LESS_ANTISYM)
8.995 +
8.996 +lemma LESS_LESS_SUC: "ALL x xa. ~ (x < xa & xa < Suc x)"
8.997 + by (import arithmetic LESS_LESS_SUC)
8.998 +
8.999 +lemma FUN_EQ_LEMMA: "ALL f x1 x2. f x1 & ~ f x2 --> x1 ~= x2"
8.1000 + by (import arithmetic FUN_EQ_LEMMA)
8.1001 +
8.1002 +lemma LESS_NOT_SUC: "ALL m n. m < n & n ~= Suc m --> Suc m < n"
8.1003 + by (import arithmetic LESS_NOT_SUC)
8.1004 +
8.1005 +lemma LESS_0_CASES: "ALL m::nat. (0::nat) = m | (0::nat) < m"
8.1006 + by (import arithmetic LESS_0_CASES)
8.1007 +
8.1008 +lemma LESS_CASES_IMP: "ALL (m::nat) n::nat. ~ m < n & m ~= n --> n < m"
8.1009 + by (import arithmetic LESS_CASES_IMP)
8.1010 +
8.1011 +lemma LESS_CASES: "ALL (m::nat) n::nat. m < n | n <= m"
8.1012 + by (import arithmetic LESS_CASES)
8.1013 +
8.1014 +lemma LESS_EQ_SUC_REFL: "ALL m. m <= Suc m"
8.1015 + by (import arithmetic LESS_EQ_SUC_REFL)
8.1016 +
8.1017 +lemma LESS_ADD_NONZERO: "ALL (m::nat) n::nat. n ~= (0::nat) --> m < m + n"
8.1018 + by (import arithmetic LESS_ADD_NONZERO)
8.1019 +
8.1020 +lemma LESS_EQ_ANTISYM: "ALL (x::nat) xa::nat. ~ (x < xa & xa <= x)"
8.1021 + by (import arithmetic LESS_EQ_ANTISYM)
8.1022 +
8.1023 +lemma SUB_0: "ALL m::nat. (0::nat) - m = (0::nat) & m - (0::nat) = m"
8.1024 + by (import arithmetic SUB_0)
8.1025 +
8.1026 +lemma SUC_SUB1: "ALL m. Suc m - 1 = m"
8.1027 + by (import arithmetic SUC_SUB1)
8.1028 +
8.1029 +lemma PRE_SUB1: "ALL m. PRE m = m - 1"
8.1030 + by (import arithmetic PRE_SUB1)
8.1031 +
8.1032 +lemma MULT_CLAUSES: "ALL x xa.
8.1033 + 0 * x = 0 &
8.1034 + x * 0 = 0 &
8.1035 + 1 * x = x &
8.1036 + x * 1 = x & Suc x * xa = x * xa + xa & x * Suc xa = x + x * xa"
8.1037 + by (import arithmetic MULT_CLAUSES)
8.1038 +
8.1039 +lemma PRE_SUB: "ALL m n. PRE (m - n) = PRE m - n"
8.1040 + by (import arithmetic PRE_SUB)
8.1041 +
8.1042 +lemma ADD_EQ_1: "ALL (m::nat) n::nat.
8.1043 + (m + n = (1::nat)) =
8.1044 + (m = (1::nat) & n = (0::nat) | m = (0::nat) & n = (1::nat))"
8.1045 + by (import arithmetic ADD_EQ_1)
8.1046 +
8.1047 +lemma ADD_INV_0_EQ: "ALL (m::nat) n::nat. (m + n = m) = (n = (0::nat))"
8.1048 + by (import arithmetic ADD_INV_0_EQ)
8.1049 +
8.1050 +lemma PRE_SUC_EQ: "ALL m n. 0 < n --> (m = PRE n) = (Suc m = n)"
8.1051 + by (import arithmetic PRE_SUC_EQ)
8.1052 +
8.1053 +lemma INV_PRE_EQ: "ALL m n. 0 < m & 0 < n --> (PRE m = PRE n) = (m = n)"
8.1054 + by (import arithmetic INV_PRE_EQ)
8.1055 +
8.1056 +lemma LESS_SUC_NOT: "ALL m n. m < n --> ~ n < Suc m"
8.1057 + by (import arithmetic LESS_SUC_NOT)
8.1058 +
8.1059 +lemma ADD_EQ_SUB: "ALL (m::nat) (n::nat) p::nat. n <= p --> (m + n = p) = (m = p - n)"
8.1060 + by (import arithmetic ADD_EQ_SUB)
8.1061 +
8.1062 +lemma LESS_ADD_1: "ALL (x::nat) xa::nat. xa < x --> (EX xb::nat. x = xa + (xb + (1::nat)))"
8.1063 + by (import arithmetic LESS_ADD_1)
8.1064 +
8.1065 +lemma NOT_ODD_EQ_EVEN: "ALL n m. Suc (n + n) ~= m + m"
8.1066 + by (import arithmetic NOT_ODD_EQ_EVEN)
8.1067 +
8.1068 +lemma MULT_SUC_EQ: "ALL p m n. (n * Suc p = m * Suc p) = (n = m)"
8.1069 + by (import arithmetic MULT_SUC_EQ)
8.1070 +
8.1071 +lemma MULT_EXP_MONO: "ALL p q n m. (n * Suc q ^ p = m * Suc q ^ p) = (n = m)"
8.1072 + by (import arithmetic MULT_EXP_MONO)
8.1073 +
8.1074 +lemma LESS_ADD_SUC: "ALL m n. m < m + Suc n"
8.1075 + by (import arithmetic LESS_ADD_SUC)
8.1076 +
8.1077 +lemma LESS_OR_EQ_ADD: "ALL (n::nat) m::nat. n < m | (EX p::nat. n = p + m)"
8.1078 + by (import arithmetic LESS_OR_EQ_ADD)
8.1079 +
8.1080 +lemma WOP: "ALL P::nat => bool. Ex P --> (EX n::nat. P n & (ALL m<n. ~ P m))"
8.1081 + by (import arithmetic WOP)
8.1082 +
8.1083 +lemma INV_PRE_LESS: "ALL m. 0 < m --> (ALL n. (PRE m < PRE n) = (m < n))"
8.1084 + by (import arithmetic INV_PRE_LESS)
8.1085 +
8.1086 +lemma INV_PRE_LESS_EQ: "ALL n. 0 < n --> (ALL m. (PRE m <= PRE n) = (m <= n))"
8.1087 + by (import arithmetic INV_PRE_LESS_EQ)
8.1088 +
8.1089 +lemma SUB_EQ_EQ_0: "ALL (m::nat) n::nat. (m - n = m) = (m = (0::nat) | n = (0::nat))"
8.1090 + by (import arithmetic SUB_EQ_EQ_0)
8.1091 +
8.1092 +lemma SUB_LESS_OR: "ALL (m::nat) n::nat. n < m --> n <= m - (1::nat)"
8.1093 + by (import arithmetic SUB_LESS_OR)
8.1094 +
8.1095 +lemma LESS_SUB_ADD_LESS: "ALL (n::nat) (m::nat) i::nat. i < n - m --> i + m < n"
8.1096 + by (import arithmetic LESS_SUB_ADD_LESS)
8.1097 +
8.1098 +lemma LESS_EQ_SUB_LESS: "ALL (x::nat) xa::nat. xa <= x --> (ALL c::nat. (x - xa < c) = (x < xa + c))"
8.1099 + by (import arithmetic LESS_EQ_SUB_LESS)
8.1100 +
8.1101 +lemma NOT_SUC_LESS_EQ: "ALL x xa. (~ Suc x <= xa) = (xa <= x)"
8.1102 + by (import arithmetic NOT_SUC_LESS_EQ)
8.1103 +
8.1104 +lemma SUB_LESS_EQ_ADD: "ALL (m::nat) p::nat. m <= p --> (ALL n::nat. (p - m <= n) = (p <= m + n))"
8.1105 + by (import arithmetic SUB_LESS_EQ_ADD)
8.1106 +
8.1107 +lemma SUB_CANCEL: "ALL (x::nat) (xa::nat) xb::nat.
8.1108 + xa <= x & xb <= x --> (x - xa = x - xb) = (xa = xb)"
8.1109 + by (import arithmetic SUB_CANCEL)
8.1110 +
8.1111 +lemma NOT_EXP_0: "ALL m n. Suc n ^ m ~= 0"
8.1112 + by (import arithmetic NOT_EXP_0)
8.1113 +
8.1114 +lemma ZERO_LESS_EXP: "ALL m n. 0 < Suc n ^ m"
8.1115 + by (import arithmetic ZERO_LESS_EXP)
8.1116 +
8.1117 +lemma ODD_OR_EVEN: "ALL x. EX xa. x = Suc (Suc 0) * xa | x = Suc (Suc 0) * xa + 1"
8.1118 + by (import arithmetic ODD_OR_EVEN)
8.1119 +
8.1120 +lemma LESS_EXP_SUC_MONO: "ALL n m. Suc (Suc m) ^ n < Suc (Suc m) ^ Suc n"
8.1121 + by (import arithmetic LESS_EXP_SUC_MONO)
8.1122 +
8.1123 +lemma LESS_LESS_CASES: "ALL (m::nat) n::nat. m = n | m < n | n < m"
8.1124 + by (import arithmetic LESS_LESS_CASES)
8.1125 +
8.1126 +lemma LESS_EQUAL_ADD: "ALL (m::nat) n::nat. m <= n --> (EX p::nat. n = m + p)"
8.1127 + by (import arithmetic LESS_EQUAL_ADD)
8.1128 +
8.1129 +lemma LESS_EQ_EXISTS: "ALL (m::nat) n::nat. (m <= n) = (EX p::nat. n = m + p)"
8.1130 + by (import arithmetic LESS_EQ_EXISTS)
8.1131 +
8.1132 +lemma MULT_EQ_1: "ALL (x::nat) y::nat. (x * y = (1::nat)) = (x = (1::nat) & y = (1::nat))"
8.1133 + by (import arithmetic MULT_EQ_1)
8.1134 +
8.1135 +consts
8.1136 + FACT :: "nat => nat"
8.1137 +
8.1138 +specification (FACT) FACT: "FACT 0 = 1 & (ALL n. FACT (Suc n) = Suc n * FACT n)"
8.1139 + by (import arithmetic FACT)
8.1140 +
8.1141 +lemma FACT_LESS: "ALL n. 0 < FACT n"
8.1142 + by (import arithmetic FACT_LESS)
8.1143 +
8.1144 +lemma EVEN_ODD: "ALL n. EVEN n = (~ ODD n)"
8.1145 + by (import arithmetic EVEN_ODD)
8.1146 +
8.1147 +lemma ODD_EVEN: "ALL x. ODD x = (~ EVEN x)"
8.1148 + by (import arithmetic ODD_EVEN)
8.1149 +
8.1150 +lemma EVEN_OR_ODD: "ALL x. EVEN x | ODD x"
8.1151 + by (import arithmetic EVEN_OR_ODD)
8.1152 +
8.1153 +lemma EVEN_AND_ODD: "ALL x. ~ (EVEN x & ODD x)"
8.1154 + by (import arithmetic EVEN_AND_ODD)
8.1155 +
8.1156 +lemma EVEN_ADD: "ALL m n. EVEN (m + n) = (EVEN m = EVEN n)"
8.1157 + by (import arithmetic EVEN_ADD)
8.1158 +
8.1159 +lemma EVEN_MULT: "ALL m n. EVEN (m * n) = (EVEN m | EVEN n)"
8.1160 + by (import arithmetic EVEN_MULT)
8.1161 +
8.1162 +lemma ODD_ADD: "ALL m n. ODD (m + n) = (ODD m ~= ODD n)"
8.1163 + by (import arithmetic ODD_ADD)
8.1164 +
8.1165 +lemma ODD_MULT: "ALL m n. ODD (m * n) = (ODD m & ODD n)"
8.1166 + by (import arithmetic ODD_MULT)
8.1167 +
8.1168 +lemma EVEN_DOUBLE: "ALL n. EVEN (2 * n)"
8.1169 + by (import arithmetic EVEN_DOUBLE)
8.1170 +
8.1171 +lemma ODD_DOUBLE: "ALL x. ODD (Suc (2 * x))"
8.1172 + by (import arithmetic ODD_DOUBLE)
8.1173 +
8.1174 +lemma EVEN_ODD_EXISTS: "ALL x. (EVEN x --> (EX m. x = 2 * m)) & (ODD x --> (EX m. x = Suc (2 * m)))"
8.1175 + by (import arithmetic EVEN_ODD_EXISTS)
8.1176 +
8.1177 +lemma EVEN_EXISTS: "ALL n. EVEN n = (EX m. n = 2 * m)"
8.1178 + by (import arithmetic EVEN_EXISTS)
8.1179 +
8.1180 +lemma ODD_EXISTS: "ALL n. ODD n = (EX m. n = Suc (2 * m))"
8.1181 + by (import arithmetic ODD_EXISTS)
8.1182 +
8.1183 +lemma NOT_SUC_LESS_EQ_0: "ALL x. ~ Suc x <= 0"
8.1184 + by (import arithmetic NOT_SUC_LESS_EQ_0)
8.1185 +
8.1186 +lemma NOT_LEQ: "ALL x xa. (~ x <= xa) = (Suc xa <= x)"
8.1187 + by (import arithmetic NOT_LEQ)
8.1188 +
8.1189 +lemma NOT_NUM_EQ: "ALL x xa. (x ~= xa) = (Suc x <= xa | Suc xa <= x)"
8.1190 + by (import arithmetic NOT_NUM_EQ)
8.1191 +
8.1192 +lemma NOT_GREATER_EQ: "ALL x xa. (~ xa <= x) = (Suc x <= xa)"
8.1193 + by (import arithmetic NOT_GREATER_EQ)
8.1194 +
8.1195 +lemma SUC_ADD_SYM: "ALL m n. Suc (m + n) = Suc n + m"
8.1196 + by (import arithmetic SUC_ADD_SYM)
8.1197 +
8.1198 +lemma NOT_SUC_ADD_LESS_EQ: "ALL m n. ~ Suc (m + n) <= m"
8.1199 + by (import arithmetic NOT_SUC_ADD_LESS_EQ)
8.1200 +
8.1201 +lemma SUB_LEFT_ADD: "ALL (m::nat) (n::nat) p::nat.
8.1202 + m + (n - p) = (if n <= p then m else m + n - p)"
8.1203 + by (import arithmetic SUB_LEFT_ADD)
8.1204 +
8.1205 +lemma SUB_RIGHT_ADD: "ALL (m::nat) (n::nat) p::nat. m - n + p = (if m <= n then p else m + p - n)"
8.1206 + by (import arithmetic SUB_RIGHT_ADD)
8.1207 +
8.1208 +lemma SUB_LEFT_SUB: "ALL (m::nat) (n::nat) p::nat.
8.1209 + m - (n - p) = (if n <= p then m else m + p - n)"
8.1210 + by (import arithmetic SUB_LEFT_SUB)
8.1211 +
8.1212 +lemma SUB_LEFT_SUC: "ALL m n. Suc (m - n) = (if m <= n then Suc 0 else Suc m - n)"
8.1213 + by (import arithmetic SUB_LEFT_SUC)
8.1214 +
8.1215 +lemma SUB_LEFT_LESS_EQ: "ALL (m::nat) (n::nat) p::nat. (m <= n - p) = (m + p <= n | m <= (0::nat))"
8.1216 + by (import arithmetic SUB_LEFT_LESS_EQ)
8.1217 +
8.1218 +lemma SUB_RIGHT_LESS_EQ: "ALL (m::nat) (n::nat) p::nat. (m - n <= p) = (m <= n + p)"
8.1219 + by (import arithmetic SUB_RIGHT_LESS_EQ)
8.1220 +
8.1221 +lemma SUB_RIGHT_LESS: "ALL (m::nat) (n::nat) p::nat. (m - n < p) = (m < n + p & (0::nat) < p)"
8.1222 + by (import arithmetic SUB_RIGHT_LESS)
8.1223 +
8.1224 +lemma SUB_RIGHT_GREATER_EQ: "ALL (m::nat) (n::nat) p::nat. (p <= m - n) = (n + p <= m | p <= (0::nat))"
8.1225 + by (import arithmetic SUB_RIGHT_GREATER_EQ)
8.1226 +
8.1227 +lemma SUB_LEFT_GREATER: "ALL (m::nat) (n::nat) p::nat. (n - p < m) = (n < m + p & (0::nat) < m)"
8.1228 + by (import arithmetic SUB_LEFT_GREATER)
8.1229 +
8.1230 +lemma SUB_RIGHT_GREATER: "ALL (m::nat) (n::nat) p::nat. (p < m - n) = (n + p < m)"
8.1231 + by (import arithmetic SUB_RIGHT_GREATER)
8.1232 +
8.1233 +lemma SUB_LEFT_EQ: "ALL (m::nat) (n::nat) p::nat.
8.1234 + (m = n - p) = (m + p = n | m <= (0::nat) & n <= p)"
8.1235 + by (import arithmetic SUB_LEFT_EQ)
8.1236 +
8.1237 +lemma SUB_RIGHT_EQ: "ALL (m::nat) (n::nat) p::nat.
8.1238 + (m - n = p) = (m = n + p | m <= n & p <= (0::nat))"
8.1239 + by (import arithmetic SUB_RIGHT_EQ)
8.1240 +
8.1241 +lemma LE: "(ALL n::nat. (n <= (0::nat)) = (n = (0::nat))) &
8.1242 +(ALL (m::nat) n::nat. (m <= Suc n) = (m = Suc n | m <= n))"
8.1243 + by (import arithmetic LE)
8.1244 +
8.1245 +lemma DA: "ALL (k::nat) n::nat.
8.1246 + (0::nat) < n --> (EX (x::nat) q::nat. k = q * n + x & x < n)"
8.1247 + by (import arithmetic DA)
8.1248 +
8.1249 +lemma DIV_LESS_EQ: "ALL n::nat. (0::nat) < n --> (ALL k::nat. k div n <= k)"
8.1250 + by (import arithmetic DIV_LESS_EQ)
8.1251 +
8.1252 +lemma DIV_UNIQUE: "ALL (n::nat) (k::nat) q::nat.
8.1253 + (EX r::nat. k = q * n + r & r < n) --> k div n = q"
8.1254 + by (import arithmetic DIV_UNIQUE)
8.1255 +
8.1256 +lemma MOD_UNIQUE: "ALL (n::nat) (k::nat) r::nat.
8.1257 + (EX q::nat. k = q * n + r & r < n) --> k mod n = r"
8.1258 + by (import arithmetic MOD_UNIQUE)
8.1259 +
8.1260 +lemma DIV_MULT: "ALL (n::nat) r::nat. r < n --> (ALL q::nat. (q * n + r) div n = q)"
8.1261 + by (import arithmetic DIV_MULT)
8.1262 +
8.1263 +lemma MOD_EQ_0: "ALL n::nat. (0::nat) < n --> (ALL k::nat. k * n mod n = (0::nat))"
8.1264 + by (import arithmetic MOD_EQ_0)
8.1265 +
8.1266 +lemma ZERO_MOD: "ALL n::nat. (0::nat) < n --> (0::nat) mod n = (0::nat)"
8.1267 + by (import arithmetic ZERO_MOD)
8.1268 +
8.1269 +lemma ZERO_DIV: "ALL n::nat. (0::nat) < n --> (0::nat) div n = (0::nat)"
8.1270 + by (import arithmetic ZERO_DIV)
8.1271 +
8.1272 +lemma MOD_MULT: "ALL (n::nat) r::nat. r < n --> (ALL q::nat. (q * n + r) mod n = r)"
8.1273 + by (import arithmetic MOD_MULT)
8.1274 +
8.1275 +lemma MOD_TIMES: "ALL n::nat.
8.1276 + (0::nat) < n --> (ALL (q::nat) r::nat. (q * n + r) mod n = r mod n)"
8.1277 + by (import arithmetic MOD_TIMES)
8.1278 +
8.1279 +lemma MOD_PLUS: "ALL n::nat.
8.1280 + (0::nat) < n -->
8.1281 + (ALL (j::nat) k::nat. (j mod n + k mod n) mod n = (j + k) mod n)"
8.1282 + by (import arithmetic MOD_PLUS)
8.1283 +
8.1284 +lemma MOD_MOD: "ALL n::nat. (0::nat) < n --> (ALL k::nat. k mod n mod n = k mod n)"
8.1285 + by (import arithmetic MOD_MOD)
8.1286 +
8.1287 +lemma ADD_DIV_ADD_DIV: "ALL x::nat.
8.1288 + (0::nat) < x -->
8.1289 + (ALL (xa::nat) r::nat. (xa * x + r) div x = xa + r div x)"
8.1290 + by (import arithmetic ADD_DIV_ADD_DIV)
8.1291 +
8.1292 +lemma MOD_MULT_MOD: "ALL (m::nat) n::nat.
8.1293 + (0::nat) < n & (0::nat) < m -->
8.1294 + (ALL x::nat. x mod (n * m) mod n = x mod n)"
8.1295 + by (import arithmetic MOD_MULT_MOD)
8.1296 +
8.1297 +lemma DIVMOD_ID: "ALL n::nat. (0::nat) < n --> n div n = (1::nat) & n mod n = (0::nat)"
8.1298 + by (import arithmetic DIVMOD_ID)
8.1299 +
8.1300 +lemma DIV_DIV_DIV_MULT: "ALL (x::nat) xa::nat.
8.1301 + (0::nat) < x & (0::nat) < xa -->
8.1302 + (ALL xb::nat. xb div x div xa = xb div (x * xa))"
8.1303 + by (import arithmetic DIV_DIV_DIV_MULT)
8.1304 +
8.1305 +lemma DIV_P: "ALL (P::nat => bool) (p::nat) q::nat.
8.1306 + (0::nat) < q -->
8.1307 + P (p div q) = (EX (k::nat) r::nat. p = k * q + r & r < q & P k)"
8.1308 + by (import arithmetic DIV_P)
8.1309 +
8.1310 +lemma MOD_P: "ALL (P::nat => bool) (p::nat) q::nat.
8.1311 + (0::nat) < q -->
8.1312 + P (p mod q) = (EX (k::nat) r::nat. p = k * q + r & r < q & P r)"
8.1313 + by (import arithmetic MOD_P)
8.1314 +
8.1315 +lemma MOD_TIMES2: "ALL n::nat.
8.1316 + (0::nat) < n -->
8.1317 + (ALL (j::nat) k::nat. j mod n * (k mod n) mod n = j * k mod n)"
8.1318 + by (import arithmetic MOD_TIMES2)
8.1319 +
8.1320 +lemma MOD_COMMON_FACTOR: "ALL (n::nat) (p::nat) q::nat.
8.1321 + (0::nat) < n & (0::nat) < q --> n * (p mod q) = n * p mod (n * q)"
8.1322 + by (import arithmetic MOD_COMMON_FACTOR)
8.1323 +
8.1324 +lemma num_case_cong: "ALL M M' b f.
8.1325 + M = M' & (M' = 0 --> b = b') & (ALL n. M' = Suc n --> f n = f' n) -->
8.1326 + nat_case b f M = nat_case b' f' M'"
8.1327 + by (import arithmetic num_case_cong)
8.1328 +
8.1329 +lemma SUC_ELIM_THM: "ALL P. (ALL n. P (Suc n) n) = (ALL n. 0 < n --> P n (n - 1))"
8.1330 + by (import arithmetic SUC_ELIM_THM)
8.1331 +
8.1332 +lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) =
8.1333 +(ALL x::nat. (b = a + x --> P (0::nat)) & (a = b + x --> P x))"
8.1334 + by (import arithmetic SUB_ELIM_THM)
8.1335 +
8.1336 +lemma PRE_ELIM_THM: "P (PRE n) = (ALL m. (n = 0 --> P 0) & (n = Suc m --> P m))"
8.1337 + by (import arithmetic PRE_ELIM_THM)
8.1338 +
8.1339 +lemma MULT_INCREASES: "ALL m n. 1 < m & 0 < n --> Suc n <= m * n"
8.1340 + by (import arithmetic MULT_INCREASES)
8.1341 +
8.1342 +lemma EXP_ALWAYS_BIG_ENOUGH: "ALL b::nat. (1::nat) < b --> (ALL n::nat. EX m::nat. n <= b ^ m)"
8.1343 + by (import arithmetic EXP_ALWAYS_BIG_ENOUGH)
8.1344 +
8.1345 +lemma EXP_EQ_0: "ALL (n::nat) m::nat. (n ^ m = (0::nat)) = (n = (0::nat) & (0::nat) < m)"
8.1346 + by (import arithmetic EXP_EQ_0)
8.1347 +
8.1348 +lemma EXP_1: "ALL x::nat. (1::nat) ^ x = (1::nat) & x ^ (1::nat) = x"
8.1349 + by (import arithmetic EXP_1)
8.1350 +
8.1351 +lemma EXP_EQ_1: "ALL (n::nat) m::nat. (n ^ m = (1::nat)) = (n = (1::nat) | m = (0::nat))"
8.1352 + by (import arithmetic EXP_EQ_1)
8.1353 +
8.1354 +lemma MIN_MAX_EQ: "ALL (x::nat) xa::nat. (min x xa = max x xa) = (x = xa)"
8.1355 + by (import arithmetic MIN_MAX_EQ)
8.1356 +
8.1357 +lemma MIN_MAX_LT: "ALL (x::nat) xa::nat. (min x xa < max x xa) = (x ~= xa)"
8.1358 + by (import arithmetic MIN_MAX_LT)
8.1359 +
8.1360 +lemma MIN_MAX_PRED: "ALL (P::nat => bool) (m::nat) n::nat.
8.1361 + P m & P n --> P (min m n) & P (max m n)"
8.1362 + by (import arithmetic MIN_MAX_PRED)
8.1363 +
8.1364 +lemma MIN_LT: "ALL (x::nat) xa::nat.
8.1365 + (min xa x < xa) = (xa ~= x & min xa x = x) &
8.1366 + (min xa x < x) = (xa ~= x & min xa x = xa) &
8.1367 + (xa < min xa x) = False & (x < min xa x) = False"
8.1368 + by (import arithmetic MIN_LT)
8.1369 +
8.1370 +lemma MAX_LT: "ALL (x::nat) xa::nat.
8.1371 + (xa < max xa x) = (xa ~= x & max xa x = x) &
8.1372 + (x < max xa x) = (xa ~= x & max xa x = xa) &
8.1373 + (max xa x < xa) = False & (max xa x < x) = False"
8.1374 + by (import arithmetic MAX_LT)
8.1375 +
8.1376 +lemma MIN_LE: "ALL (x::nat) xa::nat. min xa x <= xa & min xa x <= x"
8.1377 + by (import arithmetic MIN_LE)
8.1378 +
8.1379 +lemma MAX_LE: "ALL (x::nat) xa::nat. xa <= max xa x & x <= max xa x"
8.1380 + by (import arithmetic MAX_LE)
8.1381 +
8.1382 +lemma MIN_0: "ALL x::nat. min x (0::nat) = (0::nat) & min (0::nat) x = (0::nat)"
8.1383 + by (import arithmetic MIN_0)
8.1384 +
8.1385 +lemma MAX_0: "ALL x::nat. max x (0::nat) = x & max (0::nat) x = x"
8.1386 + by (import arithmetic MAX_0)
8.1387 +
8.1388 +lemma EXISTS_GREATEST: "ALL P::nat => bool.
8.1389 + (Ex P & (EX x::nat. ALL y::nat. x < y --> ~ P y)) =
8.1390 + (EX x::nat. P x & (ALL y::nat. x < y --> ~ P y))"
8.1391 + by (import arithmetic EXISTS_GREATEST)
8.1392 +
8.1393 +;end_setup
8.1394 +
8.1395 +;setup_theory hrat
8.1396 +
8.1397 +constdefs
8.1398 + trat_1 :: "nat * nat"
8.1399 + "trat_1 == (0, 0)"
8.1400 +
8.1401 +lemma trat_1: "trat_1 = (0, 0)"
8.1402 + by (import hrat trat_1)
8.1403 +
8.1404 +constdefs
8.1405 + trat_inv :: "nat * nat => nat * nat"
8.1406 + "trat_inv == %(x, y). (y, x)"
8.1407 +
8.1408 +lemma trat_inv: "ALL x y. trat_inv (x, y) = (y, x)"
8.1409 + by (import hrat trat_inv)
8.1410 +
8.1411 +constdefs
8.1412 + trat_add :: "nat * nat => nat * nat => nat * nat"
8.1413 + "trat_add ==
8.1414 +%(x, y) (x', y').
8.1415 + (PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
8.1416 +
8.1417 +lemma trat_add: "ALL x y x' y'.
8.1418 + trat_add (x, y) (x', y') =
8.1419 + (PRE (Suc x * Suc y' + Suc x' * Suc y), PRE (Suc y * Suc y'))"
8.1420 + by (import hrat trat_add)
8.1421 +
8.1422 +constdefs
8.1423 + trat_mul :: "nat * nat => nat * nat => nat * nat"
8.1424 + "trat_mul == %(x, y) (x', y'). (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
8.1425 +
8.1426 +lemma trat_mul: "ALL x y x' y'.
8.1427 + trat_mul (x, y) (x', y') = (PRE (Suc x * Suc x'), PRE (Suc y * Suc y'))"
8.1428 + by (import hrat trat_mul)
8.1429 +
8.1430 +consts
8.1431 + trat_sucint :: "nat => nat * nat"
8.1432 +
8.1433 +specification (trat_sucint) trat_sucint: "trat_sucint 0 = trat_1 &
8.1434 +(ALL n. trat_sucint (Suc n) = trat_add (trat_sucint n) trat_1)"
8.1435 + by (import hrat trat_sucint)
8.1436 +
8.1437 +constdefs
8.1438 + trat_eq :: "nat * nat => nat * nat => bool"
8.1439 + "trat_eq == %(x, y) (x', y'). Suc x * Suc y' = Suc x' * Suc y"
8.1440 +
8.1441 +lemma trat_eq: "ALL x y x' y'. trat_eq (x, y) (x', y') = (Suc x * Suc y' = Suc x' * Suc y)"
8.1442 + by (import hrat trat_eq)
8.1443 +
8.1444 +lemma TRAT_EQ_REFL: "ALL p. trat_eq p p"
8.1445 + by (import hrat TRAT_EQ_REFL)
8.1446 +
8.1447 +lemma TRAT_EQ_SYM: "ALL p q. trat_eq p q = trat_eq q p"
8.1448 + by (import hrat TRAT_EQ_SYM)
8.1449 +
8.1450 +lemma TRAT_EQ_TRANS: "ALL p q r. trat_eq p q & trat_eq q r --> trat_eq p r"
8.1451 + by (import hrat TRAT_EQ_TRANS)
8.1452 +
8.1453 +lemma TRAT_EQ_AP: "ALL p q. p = q --> trat_eq p q"
8.1454 + by (import hrat TRAT_EQ_AP)
8.1455 +
8.1456 +lemma TRAT_ADD_SYM_EQ: "ALL h i. trat_add h i = trat_add i h"
8.1457 + by (import hrat TRAT_ADD_SYM_EQ)
8.1458 +
8.1459 +lemma TRAT_MUL_SYM_EQ: "ALL h i. trat_mul h i = trat_mul i h"
8.1460 + by (import hrat TRAT_MUL_SYM_EQ)
8.1461 +
8.1462 +lemma TRAT_INV_WELLDEFINED: "ALL p q. trat_eq p q --> trat_eq (trat_inv p) (trat_inv q)"
8.1463 + by (import hrat TRAT_INV_WELLDEFINED)
8.1464 +
8.1465 +lemma TRAT_ADD_WELLDEFINED: "ALL p q r. trat_eq p q --> trat_eq (trat_add p r) (trat_add q r)"
8.1466 + by (import hrat TRAT_ADD_WELLDEFINED)
8.1467 +
8.1468 +lemma TRAT_ADD_WELLDEFINED2: "ALL p1 p2 q1 q2.
8.1469 + trat_eq p1 p2 & trat_eq q1 q2 -->
8.1470 + trat_eq (trat_add p1 q1) (trat_add p2 q2)"
8.1471 + by (import hrat TRAT_ADD_WELLDEFINED2)
8.1472 +
8.1473 +lemma TRAT_MUL_WELLDEFINED: "ALL p q r. trat_eq p q --> trat_eq (trat_mul p r) (trat_mul q r)"
8.1474 + by (import hrat TRAT_MUL_WELLDEFINED)
8.1475 +
8.1476 +lemma TRAT_MUL_WELLDEFINED2: "ALL p1 p2 q1 q2.
8.1477 + trat_eq p1 p2 & trat_eq q1 q2 -->
8.1478 + trat_eq (trat_mul p1 q1) (trat_mul p2 q2)"
8.1479 + by (import hrat TRAT_MUL_WELLDEFINED2)
8.1480 +
8.1481 +lemma TRAT_ADD_SYM: "ALL h i. trat_eq (trat_add h i) (trat_add i h)"
8.1482 + by (import hrat TRAT_ADD_SYM)
8.1483 +
8.1484 +lemma TRAT_ADD_ASSOC: "ALL h i j. trat_eq (trat_add h (trat_add i j)) (trat_add (trat_add h i) j)"
8.1485 + by (import hrat TRAT_ADD_ASSOC)
8.1486 +
8.1487 +lemma TRAT_MUL_SYM: "ALL h i. trat_eq (trat_mul h i) (trat_mul i h)"
8.1488 + by (import hrat TRAT_MUL_SYM)
8.1489 +
8.1490 +lemma TRAT_MUL_ASSOC: "ALL h i j. trat_eq (trat_mul h (trat_mul i j)) (trat_mul (trat_mul h i) j)"
8.1491 + by (import hrat TRAT_MUL_ASSOC)
8.1492 +
8.1493 +lemma TRAT_LDISTRIB: "ALL h i j.
8.1494 + trat_eq (trat_mul h (trat_add i j))
8.1495 + (trat_add (trat_mul h i) (trat_mul h j))"
8.1496 + by (import hrat TRAT_LDISTRIB)
8.1497 +
8.1498 +lemma TRAT_MUL_LID: "ALL h. trat_eq (trat_mul trat_1 h) h"
8.1499 + by (import hrat TRAT_MUL_LID)
8.1500 +
8.1501 +lemma TRAT_MUL_LINV: "ALL h. trat_eq (trat_mul (trat_inv h) h) trat_1"
8.1502 + by (import hrat TRAT_MUL_LINV)
8.1503 +
8.1504 +lemma TRAT_NOZERO: "ALL h i. ~ trat_eq (trat_add h i) h"
8.1505 + by (import hrat TRAT_NOZERO)
8.1506 +
8.1507 +lemma TRAT_ADD_TOTAL: "ALL h i.
8.1508 + trat_eq h i |
8.1509 + (EX d. trat_eq h (trat_add i d)) | (EX d. trat_eq i (trat_add h d))"
8.1510 + by (import hrat TRAT_ADD_TOTAL)
8.1511 +
8.1512 +lemma TRAT_SUCINT_0: "ALL n. trat_eq (trat_sucint n) (n, 0)"
8.1513 + by (import hrat TRAT_SUCINT_0)
8.1514 +
8.1515 +lemma TRAT_ARCH: "ALL h. EX n d. trat_eq (trat_sucint n) (trat_add h d)"
8.1516 + by (import hrat TRAT_ARCH)
8.1517 +
8.1518 +lemma TRAT_SUCINT: "trat_eq (trat_sucint 0) trat_1 &
8.1519 +(ALL n. trat_eq (trat_sucint (Suc n)) (trat_add (trat_sucint n) trat_1))"
8.1520 + by (import hrat TRAT_SUCINT)
8.1521 +
8.1522 +lemma TRAT_EQ_EQUIV: "ALL p q. trat_eq p q = (trat_eq p = trat_eq q)"
8.1523 + by (import hrat TRAT_EQ_EQUIV)
8.1524 +
8.1525 +typedef (open) hrat = "{x. EX xa. x = trat_eq xa}"
8.1526 + by (rule typedef_helper,import hrat hrat_TY_DEF)
8.1527 +
8.1528 +lemmas hrat_TY_DEF = typedef_hol2hol4 [OF type_definition_hrat]
8.1529 +
8.1530 +consts
8.1531 + mk_hrat :: "(nat * nat => bool) => hrat"
8.1532 + dest_hrat :: "hrat => nat * nat => bool"
8.1533 +
8.1534 +specification (dest_hrat mk_hrat) hrat_tybij: "(ALL a. mk_hrat (dest_hrat a) = a) &
8.1535 +(ALL r. (EX x. r = trat_eq x) = (dest_hrat (mk_hrat r) = r))"
8.1536 + by (import hrat hrat_tybij)
8.1537 +
8.1538 +constdefs
8.1539 + hrat_1 :: "hrat"
8.1540 + "hrat_1 == mk_hrat (trat_eq trat_1)"
8.1541 +
8.1542 +lemma hrat_1: "hrat_1 = mk_hrat (trat_eq trat_1)"
8.1543 + by (import hrat hrat_1)
8.1544 +
8.1545 +constdefs
8.1546 + hrat_inv :: "hrat => hrat"
8.1547 + "hrat_inv == %T1. mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
8.1548 +
8.1549 +lemma hrat_inv: "ALL T1. hrat_inv T1 = mk_hrat (trat_eq (trat_inv (Eps (dest_hrat T1))))"
8.1550 + by (import hrat hrat_inv)
8.1551 +
8.1552 +constdefs
8.1553 + hrat_add :: "hrat => hrat => hrat"
8.1554 + "hrat_add ==
8.1555 +%T1 T2.
8.1556 + mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
8.1557 +
8.1558 +lemma hrat_add: "ALL T1 T2.
8.1559 + hrat_add T1 T2 =
8.1560 + mk_hrat (trat_eq (trat_add (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
8.1561 + by (import hrat hrat_add)
8.1562 +
8.1563 +constdefs
8.1564 + hrat_mul :: "hrat => hrat => hrat"
8.1565 + "hrat_mul ==
8.1566 +%T1 T2.
8.1567 + mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
8.1568 +
8.1569 +lemma hrat_mul: "ALL T1 T2.
8.1570 + hrat_mul T1 T2 =
8.1571 + mk_hrat (trat_eq (trat_mul (Eps (dest_hrat T1)) (Eps (dest_hrat T2))))"
8.1572 + by (import hrat hrat_mul)
8.1573 +
8.1574 +constdefs
8.1575 + hrat_sucint :: "nat => hrat"
8.1576 + "hrat_sucint == %T1. mk_hrat (trat_eq (trat_sucint T1))"
8.1577 +
8.1578 +lemma hrat_sucint: "ALL T1. hrat_sucint T1 = mk_hrat (trat_eq (trat_sucint T1))"
8.1579 + by (import hrat hrat_sucint)
8.1580 +
8.1581 +lemma HRAT_ADD_SYM: "ALL h i. hrat_add h i = hrat_add i h"
8.1582 + by (import hrat HRAT_ADD_SYM)
8.1583 +
8.1584 +lemma HRAT_ADD_ASSOC: "ALL h i j. hrat_add h (hrat_add i j) = hrat_add (hrat_add h i) j"
8.1585 + by (import hrat HRAT_ADD_ASSOC)
8.1586 +
8.1587 +lemma HRAT_MUL_SYM: "ALL h i. hrat_mul h i = hrat_mul i h"
8.1588 + by (import hrat HRAT_MUL_SYM)
8.1589 +
8.1590 +lemma HRAT_MUL_ASSOC: "ALL h i j. hrat_mul h (hrat_mul i j) = hrat_mul (hrat_mul h i) j"
8.1591 + by (import hrat HRAT_MUL_ASSOC)
8.1592 +
8.1593 +lemma HRAT_LDISTRIB: "ALL h i j.
8.1594 + hrat_mul h (hrat_add i j) = hrat_add (hrat_mul h i) (hrat_mul h j)"
8.1595 + by (import hrat HRAT_LDISTRIB)
8.1596 +
8.1597 +lemma HRAT_MUL_LID: "ALL h. hrat_mul hrat_1 h = h"
8.1598 + by (import hrat HRAT_MUL_LID)
8.1599 +
8.1600 +lemma HRAT_MUL_LINV: "ALL h. hrat_mul (hrat_inv h) h = hrat_1"
8.1601 + by (import hrat HRAT_MUL_LINV)
8.1602 +
8.1603 +lemma HRAT_NOZERO: "ALL h i. hrat_add h i ~= h"
8.1604 + by (import hrat HRAT_NOZERO)
8.1605 +
8.1606 +lemma HRAT_ADD_TOTAL: "ALL h i. h = i | (EX x. h = hrat_add i x) | (EX x. i = hrat_add h x)"
8.1607 + by (import hrat HRAT_ADD_TOTAL)
8.1608 +
8.1609 +lemma HRAT_ARCH: "ALL h. EX x xa. hrat_sucint x = hrat_add h xa"
8.1610 + by (import hrat HRAT_ARCH)
8.1611 +
8.1612 +lemma HRAT_SUCINT: "hrat_sucint 0 = hrat_1 &
8.1613 +(ALL x. hrat_sucint (Suc x) = hrat_add (hrat_sucint x) hrat_1)"
8.1614 + by (import hrat HRAT_SUCINT)
8.1615 +
8.1616 +;end_setup
8.1617 +
8.1618 +;setup_theory hreal
8.1619 +
8.1620 +constdefs
8.1621 + hrat_lt :: "hrat => hrat => bool"
8.1622 + "hrat_lt == %x y. EX d. y = hrat_add x d"
8.1623 +
8.1624 +lemma hrat_lt: "ALL x y. hrat_lt x y = (EX d. y = hrat_add x d)"
8.1625 + by (import hreal hrat_lt)
8.1626 +
8.1627 +lemma HRAT_LT_REFL: "ALL x. ~ hrat_lt x x"
8.1628 + by (import hreal HRAT_LT_REFL)
8.1629 +
8.1630 +lemma HRAT_LT_TRANS: "ALL x y z. hrat_lt x y & hrat_lt y z --> hrat_lt x z"
8.1631 + by (import hreal HRAT_LT_TRANS)
8.1632 +
8.1633 +lemma HRAT_LT_ANTISYM: "ALL x y. ~ (hrat_lt x y & hrat_lt y x)"
8.1634 + by (import hreal HRAT_LT_ANTISYM)
8.1635 +
8.1636 +lemma HRAT_LT_TOTAL: "ALL x y. x = y | hrat_lt x y | hrat_lt y x"
8.1637 + by (import hreal HRAT_LT_TOTAL)
8.1638 +
8.1639 +lemma HRAT_MUL_RID: "ALL x. hrat_mul x hrat_1 = x"
8.1640 + by (import hreal HRAT_MUL_RID)
8.1641 +
8.1642 +lemma HRAT_MUL_RINV: "ALL x. hrat_mul x (hrat_inv x) = hrat_1"
8.1643 + by (import hreal HRAT_MUL_RINV)
8.1644 +
8.1645 +lemma HRAT_RDISTRIB: "ALL x y z.
8.1646 + hrat_mul (hrat_add x y) z = hrat_add (hrat_mul x z) (hrat_mul y z)"
8.1647 + by (import hreal HRAT_RDISTRIB)
8.1648 +
8.1649 +lemma HRAT_LT_ADDL: "ALL x y. hrat_lt x (hrat_add x y)"
8.1650 + by (import hreal HRAT_LT_ADDL)
8.1651 +
8.1652 +lemma HRAT_LT_ADDR: "ALL x xa. hrat_lt xa (hrat_add x xa)"
8.1653 + by (import hreal HRAT_LT_ADDR)
8.1654 +
8.1655 +lemma HRAT_LT_GT: "ALL x y. hrat_lt x y --> ~ hrat_lt y x"
8.1656 + by (import hreal HRAT_LT_GT)
8.1657 +
8.1658 +lemma HRAT_LT_NE: "ALL x y. hrat_lt x y --> x ~= y"
8.1659 + by (import hreal HRAT_LT_NE)
8.1660 +
8.1661 +lemma HRAT_EQ_LADD: "ALL x y z. (hrat_add x y = hrat_add x z) = (y = z)"
8.1662 + by (import hreal HRAT_EQ_LADD)
8.1663 +
8.1664 +lemma HRAT_EQ_LMUL: "ALL x y z. (hrat_mul x y = hrat_mul x z) = (y = z)"
8.1665 + by (import hreal HRAT_EQ_LMUL)
8.1666 +
8.1667 +lemma HRAT_LT_ADD2: "ALL u v x y.
8.1668 + hrat_lt u x & hrat_lt v y --> hrat_lt (hrat_add u v) (hrat_add x y)"
8.1669 + by (import hreal HRAT_LT_ADD2)
8.1670 +
8.1671 +lemma HRAT_LT_LADD: "ALL x y z. hrat_lt (hrat_add z x) (hrat_add z y) = hrat_lt x y"
8.1672 + by (import hreal HRAT_LT_LADD)
8.1673 +
8.1674 +lemma HRAT_LT_RADD: "ALL x y z. hrat_lt (hrat_add x z) (hrat_add y z) = hrat_lt x y"
8.1675 + by (import hreal HRAT_LT_RADD)
8.1676 +
8.1677 +lemma HRAT_LT_MUL2: "ALL u v x y.
8.1678 + hrat_lt u x & hrat_lt v y --> hrat_lt (hrat_mul u v) (hrat_mul x y)"
8.1679 + by (import hreal HRAT_LT_MUL2)
8.1680 +
8.1681 +lemma HRAT_LT_LMUL: "ALL x y z. hrat_lt (hrat_mul z x) (hrat_mul z y) = hrat_lt x y"
8.1682 + by (import hreal HRAT_LT_LMUL)
8.1683 +
8.1684 +lemma HRAT_LT_RMUL: "ALL x y z. hrat_lt (hrat_mul x z) (hrat_mul y z) = hrat_lt x y"
8.1685 + by (import hreal HRAT_LT_RMUL)
8.1686 +
8.1687 +lemma HRAT_LT_LMUL1: "ALL x y. hrat_lt (hrat_mul x y) y = hrat_lt x hrat_1"
8.1688 + by (import hreal HRAT_LT_LMUL1)
8.1689 +
8.1690 +lemma HRAT_LT_RMUL1: "ALL x y. hrat_lt (hrat_mul x y) x = hrat_lt y hrat_1"
8.1691 + by (import hreal HRAT_LT_RMUL1)
8.1692 +
8.1693 +lemma HRAT_GT_LMUL1: "ALL x y. hrat_lt y (hrat_mul x y) = hrat_lt hrat_1 x"
8.1694 + by (import hreal HRAT_GT_LMUL1)
8.1695 +
8.1696 +lemma HRAT_LT_L1: "ALL x y. hrat_lt (hrat_mul (hrat_inv x) y) hrat_1 = hrat_lt y x"
8.1697 + by (import hreal HRAT_LT_L1)
8.1698 +
8.1699 +lemma HRAT_LT_R1: "ALL x y. hrat_lt (hrat_mul x (hrat_inv y)) hrat_1 = hrat_lt x y"
8.1700 + by (import hreal HRAT_LT_R1)
8.1701 +
8.1702 +lemma HRAT_GT_L1: "ALL x y. hrat_lt hrat_1 (hrat_mul (hrat_inv x) y) = hrat_lt x y"
8.1703 + by (import hreal HRAT_GT_L1)
8.1704 +
8.1705 +lemma HRAT_INV_MUL: "ALL x y. hrat_inv (hrat_mul x y) = hrat_mul (hrat_inv x) (hrat_inv y)"
8.1706 + by (import hreal HRAT_INV_MUL)
8.1707 +
8.1708 +lemma HRAT_UP: "ALL x. Ex (hrat_lt x)"
8.1709 + by (import hreal HRAT_UP)
8.1710 +
8.1711 +lemma HRAT_DOWN: "ALL x. EX xa. hrat_lt xa x"
8.1712 + by (import hreal HRAT_DOWN)
8.1713 +
8.1714 +lemma HRAT_DOWN2: "ALL x y. EX xa. hrat_lt xa x & hrat_lt xa y"
8.1715 + by (import hreal HRAT_DOWN2)
8.1716 +
8.1717 +lemma HRAT_MEAN: "ALL x y. hrat_lt x y --> (EX xa. hrat_lt x xa & hrat_lt xa y)"
8.1718 + by (import hreal HRAT_MEAN)
8.1719 +
8.1720 +constdefs
8.1721 + isacut :: "(hrat => bool) => bool"
8.1722 + "isacut ==
8.1723 +%C. Ex C &
8.1724 + (EX x. ~ C x) &
8.1725 + (ALL x y. C x & hrat_lt y x --> C y) &
8.1726 + (ALL x. C x --> (EX y. C y & hrat_lt x y))"
8.1727 +
8.1728 +lemma isacut: "ALL C.
8.1729 + isacut C =
8.1730 + (Ex C &
8.1731 + (EX x. ~ C x) &
8.1732 + (ALL x y. C x & hrat_lt y x --> C y) &
8.1733 + (ALL x. C x --> (EX y. C y & hrat_lt x y)))"
8.1734 + by (import hreal isacut)
8.1735 +
8.1736 +constdefs
8.1737 + cut_of_hrat :: "hrat => hrat => bool"
8.1738 + "cut_of_hrat == %x y. hrat_lt y x"
8.1739 +
8.1740 +lemma cut_of_hrat: "ALL x. cut_of_hrat x = (%y. hrat_lt y x)"
8.1741 + by (import hreal cut_of_hrat)
8.1742 +
8.1743 +lemma ISACUT_HRAT: "ALL h. isacut (cut_of_hrat h)"
8.1744 + by (import hreal ISACUT_HRAT)
8.1745 +
8.1746 +typedef (open) hreal = "Collect isacut"
8.1747 + by (rule typedef_helper,import hreal hreal_TY_DEF)
8.1748 +
8.1749 +lemmas hreal_TY_DEF = typedef_hol2hol4 [OF type_definition_hreal]
8.1750 +
8.1751 +consts
8.1752 + hreal :: "(hrat => bool) => hreal"
8.1753 + cut :: "hreal => hrat => bool"
8.1754 +
8.1755 +specification (cut hreal) hreal_tybij: "(ALL a. hreal (hreal.cut a) = a) &
8.1756 +(ALL r. isacut r = (hreal.cut (hreal r) = r))"
8.1757 + by (import hreal hreal_tybij)
8.1758 +
8.1759 +lemma EQUAL_CUTS: "ALL X Y. hreal.cut X = hreal.cut Y --> X = Y"
8.1760 + by (import hreal EQUAL_CUTS)
8.1761 +
8.1762 +lemma CUT_ISACUT: "ALL x. isacut (hreal.cut x)"
8.1763 + by (import hreal CUT_ISACUT)
8.1764 +
8.1765 +lemma CUT_NONEMPTY: "ALL x. Ex (hreal.cut x)"
8.1766 + by (import hreal CUT_NONEMPTY)
8.1767 +
8.1768 +lemma CUT_BOUNDED: "ALL x. EX xa. ~ hreal.cut x xa"
8.1769 + by (import hreal CUT_BOUNDED)
8.1770 +
8.1771 +lemma CUT_DOWN: "ALL x xa xb. hreal.cut x xa & hrat_lt xb xa --> hreal.cut x xb"
8.1772 + by (import hreal CUT_DOWN)
8.1773 +
8.1774 +lemma CUT_UP: "ALL x xa. hreal.cut x xa --> (EX y. hreal.cut x y & hrat_lt xa y)"
8.1775 + by (import hreal CUT_UP)
8.1776 +
8.1777 +lemma CUT_UBOUND: "ALL x xa xb. ~ hreal.cut x xa & hrat_lt xa xb --> ~ hreal.cut x xb"
8.1778 + by (import hreal CUT_UBOUND)
8.1779 +
8.1780 +lemma CUT_STRADDLE: "ALL X x y. hreal.cut X x & ~ hreal.cut X y --> hrat_lt x y"
8.1781 + by (import hreal CUT_STRADDLE)
8.1782 +
8.1783 +lemma CUT_NEARTOP_ADD: "ALL X e. EX x. hreal.cut X x & ~ hreal.cut X (hrat_add x e)"
8.1784 + by (import hreal CUT_NEARTOP_ADD)
8.1785 +
8.1786 +lemma CUT_NEARTOP_MUL: "ALL X u.
8.1787 + hrat_lt hrat_1 u --> (EX x. hreal.cut X x & ~ hreal.cut X (hrat_mul u x))"
8.1788 + by (import hreal CUT_NEARTOP_MUL)
8.1789 +
8.1790 +constdefs
8.1791 + hreal_1 :: "hreal"
8.1792 + "hreal_1 == hreal (cut_of_hrat hrat_1)"
8.1793 +
8.1794 +lemma hreal_1: "hreal_1 = hreal (cut_of_hrat hrat_1)"
8.1795 + by (import hreal hreal_1)
8.1796 +
8.1797 +constdefs
8.1798 + hreal_add :: "hreal => hreal => hreal"
8.1799 + "hreal_add ==
8.1800 +%X Y. hreal (%w. EX x y. w = hrat_add x y & hreal.cut X x & hreal.cut Y y)"
8.1801 +
8.1802 +lemma hreal_add: "ALL X Y.
8.1803 + hreal_add X Y =
8.1804 + hreal (%w. EX x y. w = hrat_add x y & hreal.cut X x & hreal.cut Y y)"
8.1805 + by (import hreal hreal_add)
8.1806 +
8.1807 +constdefs
8.1808 + hreal_mul :: "hreal => hreal => hreal"
8.1809 + "hreal_mul ==
8.1810 +%X Y. hreal (%w. EX x y. w = hrat_mul x y & hreal.cut X x & hreal.cut Y y)"
8.1811 +
8.1812 +lemma hreal_mul: "ALL X Y.
8.1813 + hreal_mul X Y =
8.1814 + hreal (%w. EX x y. w = hrat_mul x y & hreal.cut X x & hreal.cut Y y)"
8.1815 + by (import hreal hreal_mul)
8.1816 +
8.1817 +constdefs
8.1818 + hreal_inv :: "hreal => hreal"
8.1819 + "hreal_inv ==
8.1820 +%X. hreal
8.1821 + (%w. EX d. hrat_lt d hrat_1 &
8.1822 + (ALL x. hreal.cut X x --> hrat_lt (hrat_mul w x) d))"
8.1823 +
8.1824 +lemma hreal_inv: "ALL X.
8.1825 + hreal_inv X =
8.1826 + hreal
8.1827 + (%w. EX d. hrat_lt d hrat_1 &
8.1828 + (ALL x. hreal.cut X x --> hrat_lt (hrat_mul w x) d))"
8.1829 + by (import hreal hreal_inv)
8.1830 +
8.1831 +constdefs
8.1832 + hreal_sup :: "(hreal => bool) => hreal"
8.1833 + "hreal_sup == %P. hreal (%w. EX X. P X & hreal.cut X w)"
8.1834 +
8.1835 +lemma hreal_sup: "ALL P. hreal_sup P = hreal (%w. EX X. P X & hreal.cut X w)"
8.1836 + by (import hreal hreal_sup)
8.1837 +
8.1838 +constdefs
8.1839 + hreal_lt :: "hreal => hreal => bool"
8.1840 + "hreal_lt == %X Y. X ~= Y & (ALL x. hreal.cut X x --> hreal.cut Y x)"
8.1841 +
8.1842 +lemma hreal_lt: "ALL X Y. hreal_lt X Y = (X ~= Y & (ALL x. hreal.cut X x --> hreal.cut Y x))"
8.1843 + by (import hreal hreal_lt)
8.1844 +
8.1845 +lemma HREAL_INV_ISACUT: "ALL X.
8.1846 + isacut
8.1847 + (%w. EX d. hrat_lt d hrat_1 &
8.1848 + (ALL x. hreal.cut X x --> hrat_lt (hrat_mul w x) d))"
8.1849 + by (import hreal HREAL_INV_ISACUT)
8.1850 +
8.1851 +lemma HREAL_ADD_ISACUT: "ALL X Y.
8.1852 + isacut (%w. EX x y. w = hrat_add x y & hreal.cut X x & hreal.cut Y y)"
8.1853 + by (import hreal HREAL_ADD_ISACUT)
8.1854 +
8.1855 +lemma HREAL_MUL_ISACUT: "ALL X Y.
8.1856 + isacut (%w. EX x y. w = hrat_mul x y & hreal.cut X x & hreal.cut Y y)"
8.1857 + by (import hreal HREAL_MUL_ISACUT)
8.1858 +
8.1859 +lemma HREAL_ADD_SYM: "ALL X Y. hreal_add X Y = hreal_add Y X"
8.1860 + by (import hreal HREAL_ADD_SYM)
8.1861 +
8.1862 +lemma HREAL_MUL_SYM: "ALL X Y. hreal_mul X Y = hreal_mul Y X"
8.1863 + by (import hreal HREAL_MUL_SYM)
8.1864 +
8.1865 +lemma HREAL_ADD_ASSOC: "ALL X Y Z. hreal_add X (hreal_add Y Z) = hreal_add (hreal_add X Y) Z"
8.1866 + by (import hreal HREAL_ADD_ASSOC)
8.1867 +
8.1868 +lemma HREAL_MUL_ASSOC: "ALL X Y Z. hreal_mul X (hreal_mul Y Z) = hreal_mul (hreal_mul X Y) Z"
8.1869 + by (import hreal HREAL_MUL_ASSOC)
8.1870 +
8.1871 +lemma HREAL_LDISTRIB: "ALL X Y Z.
8.1872 + hreal_mul X (hreal_add Y Z) = hreal_add (hreal_mul X Y) (hreal_mul X Z)"
8.1873 + by (import hreal HREAL_LDISTRIB)
8.1874 +
8.1875 +lemma HREAL_MUL_LID: "ALL X. hreal_mul hreal_1 X = X"
8.1876 + by (import hreal HREAL_MUL_LID)
8.1877 +
8.1878 +lemma HREAL_MUL_LINV: "ALL X. hreal_mul (hreal_inv X) X = hreal_1"
8.1879 + by (import hreal HREAL_MUL_LINV)
8.1880 +
8.1881 +lemma HREAL_NOZERO: "ALL X Y. hreal_add X Y ~= X"
8.1882 + by (import hreal HREAL_NOZERO)
8.1883 +
8.1884 +constdefs
8.1885 + hreal_sub :: "hreal => hreal => hreal"
8.1886 + "hreal_sub ==
8.1887 +%Y X. hreal (%w. EX x. ~ hreal.cut X x & hreal.cut Y (hrat_add x w))"
8.1888 +
8.1889 +lemma hreal_sub: "ALL Y X.
8.1890 + hreal_sub Y X =
8.1891 + hreal (%w. EX x. ~ hreal.cut X x & hreal.cut Y (hrat_add x w))"
8.1892 + by (import hreal hreal_sub)
8.1893 +
8.1894 +lemma HREAL_LT_LEMMA: "ALL X Y. hreal_lt X Y --> (EX x. ~ hreal.cut X x & hreal.cut Y x)"
8.1895 + by (import hreal HREAL_LT_LEMMA)
8.1896 +
8.1897 +lemma HREAL_SUB_ISACUT: "ALL X Y.
8.1898 + hreal_lt X Y -->
8.1899 + isacut (%w. EX x. ~ hreal.cut X x & hreal.cut Y (hrat_add x w))"
8.1900 + by (import hreal HREAL_SUB_ISACUT)
8.1901 +
8.1902 +lemma HREAL_SUB_ADD: "ALL X Y. hreal_lt X Y --> hreal_add (hreal_sub Y X) X = Y"
8.1903 + by (import hreal HREAL_SUB_ADD)
8.1904 +
8.1905 +lemma HREAL_LT_TOTAL: "ALL X Y. X = Y | hreal_lt X Y | hreal_lt Y X"
8.1906 + by (import hreal HREAL_LT_TOTAL)
8.1907 +
8.1908 +lemma HREAL_LT: "ALL X Y. hreal_lt X Y = (EX D. Y = hreal_add X D)"
8.1909 + by (import hreal HREAL_LT)
8.1910 +
8.1911 +lemma HREAL_ADD_TOTAL: "ALL X Y. X = Y | (EX D. Y = hreal_add X D) | (EX D. X = hreal_add Y D)"
8.1912 + by (import hreal HREAL_ADD_TOTAL)
8.1913 +
8.1914 +lemma HREAL_SUP_ISACUT: "ALL P.
8.1915 + Ex P & (EX Y. ALL X. P X --> hreal_lt X Y) -->
8.1916 + isacut (%w. EX X. P X & hreal.cut X w)"
8.1917 + by (import hreal HREAL_SUP_ISACUT)
8.1918 +
8.1919 +lemma HREAL_SUP: "ALL P.
8.1920 + Ex P & (EX Y. ALL X. P X --> hreal_lt X Y) -->
8.1921 + (ALL Y. (EX X. P X & hreal_lt Y X) = hreal_lt Y (hreal_sup P))"
8.1922 + by (import hreal HREAL_SUP)
8.1923 +
8.1924 +;end_setup
8.1925 +
8.1926 +;setup_theory numeral
8.1927 +
8.1928 +lemma numeral_suc: "Suc ALT_ZERO = NUMERAL_BIT1 ALT_ZERO &
8.1929 +(ALL x. Suc (NUMERAL_BIT1 x) = NUMERAL_BIT2 x) &
8.1930 +(ALL x. Suc (NUMERAL_BIT2 x) = NUMERAL_BIT1 (Suc x))"
8.1931 + by (import numeral numeral_suc)
8.1932 +
8.1933 +constdefs
8.1934 + iZ :: "nat => nat"
8.1935 + "iZ == %x. x"
8.1936 +
8.1937 +lemma iZ: "ALL x. iZ x = x"
8.1938 + by (import numeral iZ)
8.1939 +
8.1940 +constdefs
8.1941 + iiSUC :: "nat => nat"
8.1942 + "iiSUC == %n. Suc (Suc n)"
8.1943 +
8.1944 +lemma iiSUC: "ALL n. iiSUC n = Suc (Suc n)"
8.1945 + by (import numeral iiSUC)
8.1946 +
8.1947 +lemma numeral_distrib: "(ALL x::nat. (0::nat) + x = x) &
8.1948 +(ALL x::nat. x + (0::nat) = x) &
8.1949 +(ALL (x::nat) xa::nat. NUMERAL x + NUMERAL xa = NUMERAL (iZ (x + xa))) &
8.1950 +(ALL x::nat. (0::nat) * x = (0::nat)) &
8.1951 +(ALL x::nat. x * (0::nat) = (0::nat)) &
8.1952 +(ALL (x::nat) xa::nat. NUMERAL x * NUMERAL xa = NUMERAL (x * xa)) &
8.1953 +(ALL x::nat. (0::nat) - x = (0::nat)) &
8.1954 +(ALL x::nat. x - (0::nat) = x) &
8.1955 +(ALL (x::nat) xa::nat. NUMERAL x - NUMERAL xa = NUMERAL (x - xa)) &
8.1956 +(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT1 x) = (0::nat)) &
8.1957 +(ALL x::nat. (0::nat) ^ NUMERAL (NUMERAL_BIT2 x) = (0::nat)) &
8.1958 +(ALL x::nat. x ^ (0::nat) = (1::nat)) &
8.1959 +(ALL (x::nat) xa::nat. NUMERAL x ^ NUMERAL xa = NUMERAL (x ^ xa)) &
8.1960 +Suc (0::nat) = (1::nat) &
8.1961 +(ALL x::nat. Suc (NUMERAL x) = NUMERAL (Suc x)) &
8.1962 +PRE (0::nat) = (0::nat) &
8.1963 +(ALL x::nat. PRE (NUMERAL x) = NUMERAL (PRE x)) &
8.1964 +(ALL x::nat. (NUMERAL x = (0::nat)) = (x = ALT_ZERO)) &
8.1965 +(ALL x::nat. ((0::nat) = NUMERAL x) = (x = ALT_ZERO)) &
8.1966 +(ALL (x::nat) xa::nat. (NUMERAL x = NUMERAL xa) = (x = xa)) &
8.1967 +(ALL x::nat. (x < (0::nat)) = False) &
8.1968 +(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
8.1969 +(ALL (x::nat) xa::nat. (NUMERAL x < NUMERAL xa) = (x < xa)) &
8.1970 +(ALL x::nat. (x < (0::nat)) = False) &
8.1971 +(ALL x::nat. ((0::nat) < NUMERAL x) = (ALT_ZERO < x)) &
8.1972 +(ALL (x::nat) xa::nat. (NUMERAL xa < NUMERAL x) = (xa < x)) &
8.1973 +(ALL x::nat. ((0::nat) <= x) = True) &
8.1974 +(ALL x::nat. (NUMERAL x <= (0::nat)) = (x <= ALT_ZERO)) &
8.1975 +(ALL (x::nat) xa::nat. (NUMERAL x <= NUMERAL xa) = (x <= xa)) &
8.1976 +(ALL x::nat. ((0::nat) <= x) = True) &
8.1977 +(ALL x::nat. (x <= (0::nat)) = (x = (0::nat))) &
8.1978 +(ALL (x::nat) xa::nat. (NUMERAL xa <= NUMERAL x) = (xa <= x)) &
8.1979 +(ALL x::nat. ODD (NUMERAL x) = ODD x) &
8.1980 +(ALL x::nat. EVEN (NUMERAL x) = EVEN x) & ~ ODD (0::nat) & EVEN (0::nat)"
8.1981 + by (import numeral numeral_distrib)
8.1982 +
8.1983 +lemma numeral_iisuc: "iiSUC ALT_ZERO = NUMERAL_BIT2 ALT_ZERO &
8.1984 +iiSUC (NUMERAL_BIT1 n) = NUMERAL_BIT1 (Suc n) &
8.1985 +iiSUC (NUMERAL_BIT2 n) = NUMERAL_BIT2 (Suc n)"
8.1986 + by (import numeral numeral_iisuc)
8.1987 +
8.1988 +lemma numeral_add: "ALL x xa.
8.1989 + iZ (ALT_ZERO + x) = x &
8.1990 + iZ (x + ALT_ZERO) = x &
8.1991 + iZ (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (iZ (x + xa)) &
8.1992 + iZ (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
8.1993 + iZ (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
8.1994 + iZ (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
8.1995 + Suc (ALT_ZERO + x) = Suc x &
8.1996 + Suc (x + ALT_ZERO) = Suc x &
8.1997 + Suc (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT1 (Suc (x + xa)) &
8.1998 + Suc (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
8.1999 + Suc (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
8.2000 + Suc (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT1 (iiSUC (x + xa)) &
8.2001 + iiSUC (ALT_ZERO + x) = iiSUC x &
8.2002 + iiSUC (x + ALT_ZERO) = iiSUC x &
8.2003 + iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT1 xa) = NUMERAL_BIT2 (Suc (x + xa)) &
8.2004 + iiSUC (NUMERAL_BIT1 x + NUMERAL_BIT2 xa) =
8.2005 + NUMERAL_BIT1 (iiSUC (x + xa)) &
8.2006 + iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT1 xa) =
8.2007 + NUMERAL_BIT1 (iiSUC (x + xa)) &
8.2008 + iiSUC (NUMERAL_BIT2 x + NUMERAL_BIT2 xa) = NUMERAL_BIT2 (iiSUC (x + xa))"
8.2009 + by (import numeral numeral_add)
8.2010 +
8.2011 +lemma numeral_eq: "ALL x xa.
8.2012 + (ALT_ZERO = NUMERAL_BIT1 x) = False &
8.2013 + (NUMERAL_BIT1 x = ALT_ZERO) = False &
8.2014 + (ALT_ZERO = NUMERAL_BIT2 x) = False &
8.2015 + (NUMERAL_BIT2 x = ALT_ZERO) = False &
8.2016 + (NUMERAL_BIT1 x = NUMERAL_BIT2 xa) = False &
8.2017 + (NUMERAL_BIT2 x = NUMERAL_BIT1 xa) = False &
8.2018 + (NUMERAL_BIT1 x = NUMERAL_BIT1 xa) = (x = xa) &
8.2019 + (NUMERAL_BIT2 x = NUMERAL_BIT2 xa) = (x = xa)"
8.2020 + by (import numeral numeral_eq)
8.2021 +
8.2022 +lemma numeral_lt: "ALL x xa.
8.2023 + (ALT_ZERO < NUMERAL_BIT1 x) = True &
8.2024 + (ALT_ZERO < NUMERAL_BIT2 x) = True &
8.2025 + (x < ALT_ZERO) = False &
8.2026 + (NUMERAL_BIT1 x < NUMERAL_BIT1 xa) = (x < xa) &
8.2027 + (NUMERAL_BIT2 x < NUMERAL_BIT2 xa) = (x < xa) &
8.2028 + (NUMERAL_BIT1 x < NUMERAL_BIT2 xa) = (~ xa < x) &
8.2029 + (NUMERAL_BIT2 x < NUMERAL_BIT1 xa) = (x < xa)"
8.2030 + by (import numeral numeral_lt)
8.2031 +
8.2032 +lemma numeral_lte: "ALL x xa.
8.2033 + (ALT_ZERO <= x) = True &
8.2034 + (NUMERAL_BIT1 x <= ALT_ZERO) = False &
8.2035 + (NUMERAL_BIT2 x <= ALT_ZERO) = False &
8.2036 + (NUMERAL_BIT1 x <= NUMERAL_BIT1 xa) = (x <= xa) &
8.2037 + (NUMERAL_BIT1 x <= NUMERAL_BIT2 xa) = (x <= xa) &
8.2038 + (NUMERAL_BIT2 x <= NUMERAL_BIT1 xa) = (~ xa <= x) &
8.2039 + (NUMERAL_BIT2 x <= NUMERAL_BIT2 xa) = (x <= xa)"
8.2040 + by (import numeral numeral_lte)
8.2041 +
8.2042 +lemma numeral_pre: "PRE ALT_ZERO = ALT_ZERO &
8.2043 +PRE (NUMERAL_BIT1 ALT_ZERO) = ALT_ZERO &
8.2044 +(ALL x.
8.2045 + PRE (NUMERAL_BIT1 (NUMERAL_BIT1 x)) =
8.2046 + NUMERAL_BIT2 (PRE (NUMERAL_BIT1 x))) &
8.2047 +(ALL x.
8.2048 + PRE (NUMERAL_BIT1 (NUMERAL_BIT2 x)) = NUMERAL_BIT2 (NUMERAL_BIT1 x)) &
8.2049 +(ALL x. PRE (NUMERAL_BIT2 x) = NUMERAL_BIT1 x)"
8.2050 + by (import numeral numeral_pre)
8.2051 +
8.2052 +lemma bit_initiality: "ALL zf b1f b2f.
8.2053 + EX x. x ALT_ZERO = zf &
8.2054 + (ALL n. x (NUMERAL_BIT1 n) = b1f n (x n)) &
8.2055 + (ALL n. x (NUMERAL_BIT2 n) = b2f n (x n))"
8.2056 + by (import numeral bit_initiality)
8.2057 +
8.2058 +consts
8.2059 + iBIT_cases :: "nat => 'a => (nat => 'a) => (nat => 'a) => 'a"
8.2060 +
8.2061 +specification (iBIT_cases) iBIT_cases: "(ALL (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
8.2062 + iBIT_cases ALT_ZERO zf bf1 bf2 = zf) &
8.2063 +(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
8.2064 + iBIT_cases (NUMERAL_BIT1 n) zf bf1 bf2 = bf1 n) &
8.2065 +(ALL (n::nat) (zf::'a) (bf1::nat => 'a) bf2::nat => 'a.
8.2066 + iBIT_cases (NUMERAL_BIT2 n) zf bf1 bf2 = bf2 n)"
8.2067 + by (import numeral iBIT_cases)
8.2068 +
8.2069 +constdefs
8.2070 + iDUB :: "nat => nat"
8.2071 + "iDUB == %x. x + x"
8.2072 +
8.2073 +lemma iDUB: "ALL x. iDUB x = x + x"
8.2074 + by (import numeral iDUB)
8.2075 +
8.2076 +consts
8.2077 + iSUB :: "bool => nat => nat => nat"
8.2078 +
8.2079 +specification (iSUB) iSUB_DEF: "(ALL b x. iSUB b ALT_ZERO x = ALT_ZERO) &
8.2080 +(ALL b n x.
8.2081 + iSUB b (NUMERAL_BIT1 n) x =
8.2082 + (if b
8.2083 + then iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
8.2084 + (%m. NUMERAL_BIT1 (iSUB False n m))
8.2085 + else iBIT_cases x (iDUB n) (%m. NUMERAL_BIT1 (iSUB False n m))
8.2086 + (%m. iDUB (iSUB False n m)))) &
8.2087 +(ALL b n x.
8.2088 + iSUB b (NUMERAL_BIT2 n) x =
8.2089 + (if b
8.2090 + then iBIT_cases x (NUMERAL_BIT2 n) (%m. NUMERAL_BIT1 (iSUB True n m))
8.2091 + (%m. iDUB (iSUB True n m))
8.2092 + else iBIT_cases x (NUMERAL_BIT1 n) (%m. iDUB (iSUB True n m))
8.2093 + (%m. NUMERAL_BIT1 (iSUB False n m))))"
8.2094 + by (import numeral iSUB_DEF)
8.2095 +
8.2096 +lemma bit_induction: "ALL P.
8.2097 + P ALT_ZERO &
8.2098 + (ALL n. P n --> P (NUMERAL_BIT1 n)) &
8.2099 + (ALL n. P n --> P (NUMERAL_BIT2 n)) -->
8.2100 + All P"
8.2101 + by (import numeral bit_induction)
8.2102 +
8.2103 +lemma iSUB_THM: "ALL xa xb xc.
8.2104 + iSUB xa ALT_ZERO x = ALT_ZERO &
8.2105 + iSUB True xb ALT_ZERO = xb &
8.2106 + iSUB False (NUMERAL_BIT1 xb) ALT_ZERO = iDUB xb &
8.2107 + iSUB True (NUMERAL_BIT1 xb) (NUMERAL_BIT1 xc) = iDUB (iSUB True xb xc) &
8.2108 + iSUB False (NUMERAL_BIT1 xb) (NUMERAL_BIT1 xc) =
8.2109 + NUMERAL_BIT1 (iSUB False xb xc) &
8.2110 + iSUB True (NUMERAL_BIT1 xb) (NUMERAL_BIT2 xc) =
8.2111 + NUMERAL_BIT1 (iSUB False xb xc) &
8.2112 + iSUB False (NUMERAL_BIT1 xb) (NUMERAL_BIT2 xc) =
8.2113 + iDUB (iSUB False xb xc) &
8.2114 + iSUB False (NUMERAL_BIT2 xb) ALT_ZERO = NUMERAL_BIT1 xb &
8.2115 + iSUB True (NUMERAL_BIT2 xb) (NUMERAL_BIT1 xc) =
8.2116 + NUMERAL_BIT1 (iSUB True xb xc) &
8.2117 + iSUB False (NUMERAL_BIT2 xb) (NUMERAL_BIT1 xc) = iDUB (iSUB True xb xc) &
8.2118 + iSUB True (NUMERAL_BIT2 xb) (NUMERAL_BIT2 xc) = iDUB (iSUB True xb xc) &
8.2119 + iSUB False (NUMERAL_BIT2 xb) (NUMERAL_BIT2 xc) =
8.2120 + NUMERAL_BIT1 (iSUB False xb xc)"
8.2121 + by (import numeral iSUB_THM)
8.2122 +
8.2123 +lemma numeral_sub: "ALL x xa.
8.2124 + NUMERAL (x - xa) = (if xa < x then NUMERAL (iSUB True x xa) else 0)"
8.2125 + by (import numeral numeral_sub)
8.2126 +
8.2127 +lemma iDUB_removal: "ALL x.
8.2128 + iDUB (NUMERAL_BIT1 x) = NUMERAL_BIT2 (iDUB x) &
8.2129 + iDUB (NUMERAL_BIT2 x) = NUMERAL_BIT2 (NUMERAL_BIT1 x) &
8.2130 + iDUB ALT_ZERO = ALT_ZERO"
8.2131 + by (import numeral iDUB_removal)
8.2132 +
8.2133 +lemma numeral_mult: "ALL x xa.
8.2134 + ALT_ZERO * x = ALT_ZERO &
8.2135 + x * ALT_ZERO = ALT_ZERO &
8.2136 + NUMERAL_BIT1 x * xa = iZ (iDUB (x * xa) + xa) &
8.2137 + NUMERAL_BIT2 x * xa = iDUB (iZ (x * xa + xa))"
8.2138 + by (import numeral numeral_mult)
8.2139 +
8.2140 +constdefs
8.2141 + iSQR :: "nat => nat"
8.2142 + "iSQR == %x. x * x"
8.2143 +
8.2144 +lemma iSQR: "ALL x. iSQR x = x * x"
8.2145 + by (import numeral iSQR)
8.2146 +
8.2147 +lemma numeral_exp: "(ALL x. x ^ ALT_ZERO = NUMERAL_BIT1 ALT_ZERO) &
8.2148 +(ALL x xa. x ^ NUMERAL_BIT1 xa = x * iSQR (x ^ xa)) &
8.2149 +(ALL x xa. x ^ NUMERAL_BIT2 xa = iSQR x * iSQR (x ^ xa))"
8.2150 + by (import numeral numeral_exp)
8.2151 +
8.2152 +lemma numeral_evenodd: "ALL x.
8.2153 + EVEN ALT_ZERO &
8.2154 + EVEN (NUMERAL_BIT2 x) &
8.2155 + ~ EVEN (NUMERAL_BIT1 x) &
8.2156 + ~ ODD ALT_ZERO & ~ ODD (NUMERAL_BIT2 x) & ODD (NUMERAL_BIT1 x)"
8.2157 + by (import numeral numeral_evenodd)
8.2158 +
8.2159 +lemma numeral_fact: "ALL n. FACT n = (if n = 0 then 1 else n * FACT (PRE n))"
8.2160 + by (import numeral numeral_fact)
8.2161 +
8.2162 +lemma numeral_funpow: "ALL n. (f ^ n) x = (if n = 0 then x else (f ^ (n - 1)) (f x))"
8.2163 + by (import numeral numeral_funpow)
8.2164 +
8.2165 +;end_setup
8.2166 +
8.2167 +;setup_theory ind_type
8.2168 +
8.2169 +lemma INJ_INVERSE2: "ALL P::'A => 'B => 'C.
8.2170 + (ALL (x1::'A) (y1::'B) (x2::'A) y2::'B.
8.2171 + (P x1 y1 = P x2 y2) = (x1 = x2 & y1 = y2)) -->
8.2172 + (EX (x::'C => 'A) Y::'C => 'B.
8.2173 + ALL (xa::'A) y::'B. x (P xa y) = xa & Y (P xa y) = y)"
8.2174 + by (import ind_type INJ_INVERSE2)
8.2175 +
8.2176 +constdefs
8.2177 + NUMPAIR :: "nat => nat => nat"
8.2178 + "NUMPAIR == %x y. 2 ^ x * (2 * y + 1)"
8.2179 +
8.2180 +lemma NUMPAIR: "ALL x y. NUMPAIR x y = 2 ^ x * (2 * y + 1)"
8.2181 + by (import ind_type NUMPAIR)
8.2182 +
8.2183 +lemma NUMPAIR_INJ_LEMMA: "ALL x xa xb xc. NUMPAIR x xa = NUMPAIR xb xc --> x = xb"
8.2184 + by (import ind_type NUMPAIR_INJ_LEMMA)
8.2185 +
8.2186 +lemma NUMPAIR_INJ: "ALL x1 y1 x2 y2. (NUMPAIR x1 y1 = NUMPAIR x2 y2) = (x1 = x2 & y1 = y2)"
8.2187 + by (import ind_type NUMPAIR_INJ)
8.2188 +
8.2189 +consts
8.2190 + NUMSND :: "nat => nat"
8.2191 + NUMFST :: "nat => nat"
8.2192 +
8.2193 +specification (NUMFST NUMSND) NUMPAIR_DEST: "ALL x y. NUMFST (NUMPAIR x y) = x & NUMSND (NUMPAIR x y) = y"
8.2194 + by (import ind_type NUMPAIR_DEST)
8.2195 +
8.2196 +constdefs
8.2197 + NUMSUM :: "bool => nat => nat"
8.2198 + "NUMSUM == %b x. if b then Suc (2 * x) else 2 * x"
8.2199 +
8.2200 +lemma NUMSUM: "ALL b x. NUMSUM b x = (if b then Suc (2 * x) else 2 * x)"
8.2201 + by (import ind_type NUMSUM)
8.2202 +
8.2203 +lemma NUMSUM_INJ: "ALL b1 x1 b2 x2. (NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)"
8.2204 + by (import ind_type NUMSUM_INJ)
8.2205 +
8.2206 +consts
8.2207 + NUMRIGHT :: "nat => nat"
8.2208 + NUMLEFT :: "nat => bool"
8.2209 +
8.2210 +specification (NUMLEFT NUMRIGHT) NUMSUM_DEST: "ALL x y. NUMLEFT (NUMSUM x y) = x & NUMRIGHT (NUMSUM x y) = y"
8.2211 + by (import ind_type NUMSUM_DEST)
8.2212 +
8.2213 +constdefs
8.2214 + INJN :: "nat => nat => 'a => bool"
8.2215 + "INJN == %m n a. n = m"
8.2216 +
8.2217 +lemma INJN: "ALL m. INJN m = (%n a. n = m)"
8.2218 + by (import ind_type INJN)
8.2219 +
8.2220 +lemma INJN_INJ: "ALL n1 n2. (INJN n1 = INJN n2) = (n1 = n2)"
8.2221 + by (import ind_type INJN_INJ)
8.2222 +
8.2223 +constdefs
8.2224 + INJA :: "'a => nat => 'a => bool"
8.2225 + "INJA == %a n b. b = a"
8.2226 +
8.2227 +lemma INJA: "ALL a. INJA a = (%n b. b = a)"
8.2228 + by (import ind_type INJA)
8.2229 +
8.2230 +lemma INJA_INJ: "ALL a1 a2. (INJA a1 = INJA a2) = (a1 = a2)"
8.2231 + by (import ind_type INJA_INJ)
8.2232 +
8.2233 +constdefs
8.2234 + INJF :: "(nat => nat => 'a => bool) => nat => 'a => bool"
8.2235 + "INJF == %f n. f (NUMFST n) (NUMSND n)"
8.2236 +
8.2237 +lemma INJF: "ALL f. INJF f = (%n. f (NUMFST n) (NUMSND n))"
8.2238 + by (import ind_type INJF)
8.2239 +
8.2240 +lemma INJF_INJ: "ALL f1 f2. (INJF f1 = INJF f2) = (f1 = f2)"
8.2241 + by (import ind_type INJF_INJ)
8.2242 +
8.2243 +constdefs
8.2244 + INJP :: "(nat => 'a => bool) => (nat => 'a => bool) => nat => 'a => bool"
8.2245 + "INJP ==
8.2246 +%f1 f2 n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a"
8.2247 +
8.2248 +lemma INJP: "ALL f1 f2.
8.2249 + INJP f1 f2 =
8.2250 + (%n a. if NUMLEFT n then f1 (NUMRIGHT n) a else f2 (NUMRIGHT n) a)"
8.2251 + by (import ind_type INJP)
8.2252 +
8.2253 +lemma INJP_INJ: "ALL f1 f1' f2 f2'. (INJP f1 f2 = INJP f1' f2') = (f1 = f1' & f2 = f2')"
8.2254 + by (import ind_type INJP_INJ)
8.2255 +
8.2256 +constdefs
8.2257 + ZCONSTR :: "nat => 'a => (nat => nat => 'a => bool) => nat => 'a => bool"
8.2258 + "ZCONSTR == %c i r. INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
8.2259 +
8.2260 +lemma ZCONSTR: "ALL c i r. ZCONSTR c i r = INJP (INJN (Suc c)) (INJP (INJA i) (INJF r))"
8.2261 + by (import ind_type ZCONSTR)
8.2262 +
8.2263 +constdefs
8.2264 + ZBOT :: "nat => 'a => bool"
8.2265 + "ZBOT == INJP (INJN 0) (SOME z. True)"
8.2266 +
8.2267 +lemma ZBOT: "ZBOT = INJP (INJN 0) (SOME z. True)"
8.2268 + by (import ind_type ZBOT)
8.2269 +
8.2270 +lemma ZCONSTR_ZBOT: "ALL x xa xb. ZCONSTR x xa xb ~= ZBOT"
8.2271 + by (import ind_type ZCONSTR_ZBOT)
8.2272 +
8.2273 +constdefs
8.2274 + ZRECSPACE :: "(nat => 'a => bool) => bool"
8.2275 + "ZRECSPACE ==
8.2276 +%a0. ALL ZRECSPACE'.
8.2277 + (ALL a0.
8.2278 + a0 = ZBOT |
8.2279 + (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
8.2280 + ZRECSPACE' a0) -->
8.2281 + ZRECSPACE' a0"
8.2282 +
8.2283 +lemma ZRECSPACE: "ZRECSPACE =
8.2284 +(%a0. ALL ZRECSPACE'.
8.2285 + (ALL a0.
8.2286 + a0 = ZBOT |
8.2287 + (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE' (r n))) -->
8.2288 + ZRECSPACE' a0) -->
8.2289 + ZRECSPACE' a0)"
8.2290 + by (import ind_type ZRECSPACE)
8.2291 +
8.2292 +lemma ZRECSPACE_rules: "(op &::bool => bool => bool)
8.2293 + ((ZRECSPACE::(nat => 'a => bool) => bool) (ZBOT::nat => 'a => bool))
8.2294 + ((All::(nat => bool) => bool)
8.2295 + (%c::nat.
8.2296 + (All::('a => bool) => bool)
8.2297 + (%i::'a.
8.2298 + (All::((nat => nat => 'a => bool) => bool) => bool)
8.2299 + (%r::nat => nat => 'a => bool.
8.2300 + (op -->::bool => bool => bool)
8.2301 + ((All::(nat => bool) => bool)
8.2302 + (%n::nat.
8.2303 + (ZRECSPACE::(nat => 'a => bool) => bool) (r n)))
8.2304 + ((ZRECSPACE::(nat => 'a => bool) => bool)
8.2305 + ((ZCONSTR::nat
8.2306 + => 'a => (nat => nat => 'a => bool)
8.2307 + => nat => 'a => bool)
8.2308 + c i r))))))"
8.2309 + by (import ind_type ZRECSPACE_rules)
8.2310 +
8.2311 +lemma ZRECSPACE_ind: "ALL x.
8.2312 + x ZBOT & (ALL c i r. (ALL n. x (r n)) --> x (ZCONSTR c i r)) -->
8.2313 + (ALL a0. ZRECSPACE a0 --> x a0)"
8.2314 + by (import ind_type ZRECSPACE_ind)
8.2315 +
8.2316 +lemma ZRECSPACE_cases: "ALL a0.
8.2317 + ZRECSPACE a0 =
8.2318 + (a0 = ZBOT | (EX c i r. a0 = ZCONSTR c i r & (ALL n. ZRECSPACE (r n))))"
8.2319 + by (import ind_type ZRECSPACE_cases)
8.2320 +
8.2321 +typedef (open) ('a) recspace = "(Collect::((nat => 'a => bool) => bool) => (nat => 'a => bool) set)
8.2322 + (ZRECSPACE::(nat => 'a => bool) => bool)"
8.2323 + by (rule typedef_helper,import ind_type recspace_TY_DEF)
8.2324 +
8.2325 +lemmas recspace_TY_DEF = typedef_hol2hol4 [OF type_definition_recspace]
8.2326 +
8.2327 +consts
8.2328 + mk_rec :: "(nat => 'a => bool) => 'a recspace"
8.2329 + dest_rec :: "'a recspace => nat => 'a => bool"
8.2330 +
8.2331 +specification (dest_rec mk_rec) recspace_repfns: "(ALL a::'a recspace. mk_rec (dest_rec a) = a) &
8.2332 +(ALL r::nat => 'a => bool. ZRECSPACE r = (dest_rec (mk_rec r) = r))"
8.2333 + by (import ind_type recspace_repfns)
8.2334 +
8.2335 +constdefs
8.2336 + BOTTOM :: "'a recspace"
8.2337 + "BOTTOM == mk_rec ZBOT"
8.2338 +
8.2339 +lemma BOTTOM: "BOTTOM = mk_rec ZBOT"
8.2340 + by (import ind_type BOTTOM)
8.2341 +
8.2342 +constdefs
8.2343 + CONSTR :: "nat => 'a => (nat => 'a recspace) => 'a recspace"
8.2344 + "CONSTR == %c i r. mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
8.2345 +
8.2346 +lemma CONSTR: "ALL c i r. CONSTR c i r = mk_rec (ZCONSTR c i (%n. dest_rec (r n)))"
8.2347 + by (import ind_type CONSTR)
8.2348 +
8.2349 +lemma MK_REC_INJ: "ALL x y. mk_rec x = mk_rec y --> ZRECSPACE x & ZRECSPACE y --> x = y"
8.2350 + by (import ind_type MK_REC_INJ)
8.2351 +
8.2352 +lemma DEST_REC_INJ: "ALL x y. (dest_rec x = dest_rec y) = (x = y)"
8.2353 + by (import ind_type DEST_REC_INJ)
8.2354 +
8.2355 +lemma CONSTR_BOT: "ALL c i r. CONSTR c i r ~= BOTTOM"
8.2356 + by (import ind_type CONSTR_BOT)
8.2357 +
8.2358 +lemma CONSTR_INJ: "ALL c1 i1 r1 c2 i2 r2.
8.2359 + (CONSTR c1 i1 r1 = CONSTR c2 i2 r2) = (c1 = c2 & i1 = i2 & r1 = r2)"
8.2360 + by (import ind_type CONSTR_INJ)
8.2361 +
8.2362 +lemma CONSTR_IND: "ALL P.
8.2363 + P BOTTOM & (ALL c i r. (ALL n. P (r n)) --> P (CONSTR c i r)) --> All P"
8.2364 + by (import ind_type CONSTR_IND)
8.2365 +
8.2366 +lemma CONSTR_REC: "ALL Fn. EX f. ALL c i r. f (CONSTR c i r) = Fn c i r (%n. f (r n))"
8.2367 + by (import ind_type CONSTR_REC)
8.2368 +
8.2369 +consts
8.2370 + FCONS :: "'a => (nat => 'a) => nat => 'a"
8.2371 +
8.2372 +specification (FCONS) FCONS: "(ALL (a::'a) f::nat => 'a. FCONS a f (0::nat) = a) &
8.2373 +(ALL (a::'a) (f::nat => 'a) n::nat. FCONS a f (Suc n) = f n)"
8.2374 + by (import ind_type FCONS)
8.2375 +
8.2376 +constdefs
8.2377 + FNIL :: "nat => 'a"
8.2378 + "FNIL == %n. SOME x. True"
8.2379 +
8.2380 +lemma FNIL: "ALL n. FNIL n = (SOME x. True)"
8.2381 + by (import ind_type FNIL)
8.2382 +
8.2383 +constdefs
8.2384 + ISO :: "('a => 'b) => ('b => 'a) => bool"
8.2385 + "ISO == %f g. (ALL x. f (g x) = x) & (ALL y. g (f y) = y)"
8.2386 +
8.2387 +lemma ISO: "ALL f g. ISO f g = ((ALL x. f (g x) = x) & (ALL y. g (f y) = y))"
8.2388 + by (import ind_type ISO)
8.2389 +
8.2390 +lemma ISO_REFL: "ISO (%x. x) (%x. x)"
8.2391 + by (import ind_type ISO_REFL)
8.2392 +
8.2393 +lemma ISO_FUN: "ISO (f::'a => 'c) (f'::'c => 'a) & ISO (g::'b => 'd) (g'::'d => 'b) -->
8.2394 +ISO (%(h::'a => 'b) a'::'c. g (h (f' a')))
8.2395 + (%(h::'c => 'd) a::'a. g' (h (f a)))"
8.2396 + by (import ind_type ISO_FUN)
8.2397 +
8.2398 +lemma ISO_USAGE: "ISO f g -->
8.2399 +(ALL P. All P = (ALL x. P (g x))) &
8.2400 +(ALL P. Ex P = (EX x. P (g x))) & (ALL a b. (a = g b) = (f a = b))"
8.2401 + by (import ind_type ISO_USAGE)
8.2402 +
8.2403 +;end_setup
8.2404 +
8.2405 +;setup_theory divides
8.2406 +
8.2407 +lemma ONE_DIVIDES_ALL: "All (op dvd (1::nat))"
8.2408 + by (import divides ONE_DIVIDES_ALL)
8.2409 +
8.2410 +lemma DIVIDES_ADD_2: "ALL (a::nat) (b::nat) c::nat. a dvd b & a dvd b + c --> a dvd c"
8.2411 + by (import divides DIVIDES_ADD_2)
8.2412 +
8.2413 +lemma NOT_LT_DIV: "ALL (a::nat) b::nat. (0::nat) < b & b < a --> ~ a dvd b"
8.2414 + by (import divides NOT_LT_DIV)
8.2415 +
8.2416 +lemma DIVIDES_FACT: "ALL b. 0 < b --> b dvd FACT b"
8.2417 + by (import divides DIVIDES_FACT)
8.2418 +
8.2419 +lemma DIVIDES_MULT_LEFT: "ALL (x::nat) xa::nat. (x * xa dvd xa) = (xa = (0::nat) | x = (1::nat))"
8.2420 + by (import divides DIVIDES_MULT_LEFT)
8.2421 +
8.2422 +;end_setup
8.2423 +
8.2424 +;setup_theory prime
8.2425 +
8.2426 +consts
8.2427 + prime :: "nat => bool"
8.2428 +
8.2429 +defs
8.2430 + prime_primdef: "prime.prime == %a. a ~= 1 & (ALL b. b dvd a --> b = a | b = 1)"
8.2431 +
8.2432 +lemma prime_def: "ALL a. prime.prime a = (a ~= 1 & (ALL b. b dvd a --> b = a | b = 1))"
8.2433 + by (import prime prime_def)
8.2434 +
8.2435 +lemma NOT_PRIME_0: "~ prime.prime 0"
8.2436 + by (import prime NOT_PRIME_0)
8.2437 +
8.2438 +lemma NOT_PRIME_1: "~ prime.prime 1"
8.2439 + by (import prime NOT_PRIME_1)
8.2440 +
8.2441 +;end_setup
8.2442 +
8.2443 +;setup_theory list
8.2444 +
8.2445 +consts
8.2446 + EL :: "nat => 'a list => 'a"
8.2447 +
8.2448 +specification (EL) EL: "(ALL l::'a list. EL (0::nat) l = hd l) &
8.2449 +(ALL (l::'a list) n::nat. EL (Suc n) l = EL n (tl l))"
8.2450 + by (import list EL)
8.2451 +
8.2452 +lemma NULL: "(op &::bool => bool => bool) ((null::'a list => bool) ([]::'a list))
8.2453 + ((All::('a => bool) => bool)
8.2454 + (%x::'a.
8.2455 + (All::('a list => bool) => bool)
8.2456 + (%xa::'a list.
8.2457 + (Not::bool => bool)
8.2458 + ((null::'a list => bool)
8.2459 + ((op #::'a => 'a list => 'a list) x xa)))))"
8.2460 + by (import list NULL)
8.2461 +
8.2462 +lemma list_case_compute: "ALL l. list_case b f l = (if null l then b else f (hd l) (tl l))"
8.2463 + by (import list list_case_compute)
8.2464 +
8.2465 +lemma LIST_NOT_EQ: "ALL l1 l2. l1 ~= l2 --> (ALL x xa. x # l1 ~= xa # l2)"
8.2466 + by (import list LIST_NOT_EQ)
8.2467 +
8.2468 +lemma NOT_EQ_LIST: "ALL h1 h2. h1 ~= h2 --> (ALL x xa. h1 # x ~= h2 # xa)"
8.2469 + by (import list NOT_EQ_LIST)
8.2470 +
8.2471 +lemma EQ_LIST: "ALL h1 h2. h1 = h2 --> (ALL l1 l2. l1 = l2 --> h1 # l1 = h2 # l2)"
8.2472 + by (import list EQ_LIST)
8.2473 +
8.2474 +lemma CONS: "ALL l. ~ null l --> hd l # tl l = l"
8.2475 + by (import list CONS)
8.2476 +
8.2477 +lemma MAP_EQ_NIL: "ALL l f. (map f l = []) = (l = []) & ([] = map f l) = (l = [])"
8.2478 + by (import list MAP_EQ_NIL)
8.2479 +
8.2480 +lemma EVERY_EL: "ALL l P. list_all P l = (ALL n<length l. P (EL n l))"
8.2481 + by (import list EVERY_EL)
8.2482 +
8.2483 +lemma EVERY_CONJ: "ALL l. list_all (%x. P x & Q x) l = (list_all P l & list_all Q l)"
8.2484 + by (import list EVERY_CONJ)
8.2485 +
8.2486 +lemma EVERY_MEM: "ALL P l. list_all P l = (ALL e. e mem l --> P e)"
8.2487 + by (import list EVERY_MEM)
8.2488 +
8.2489 +lemma EXISTS_MEM: "ALL P l. list_exists P l = (EX e. e mem l & P e)"
8.2490 + by (import list EXISTS_MEM)
8.2491 +
8.2492 +lemma MEM_APPEND: "ALL e l1 l2. e mem l1 @ l2 = (e mem l1 | e mem l2)"
8.2493 + by (import list MEM_APPEND)
8.2494 +
8.2495 +lemma EXISTS_APPEND: "ALL P l1 l2. list_exists P (l1 @ l2) = (list_exists P l1 | list_exists P l2)"
8.2496 + by (import list EXISTS_APPEND)
8.2497 +
8.2498 +lemma NOT_EVERY: "ALL P l. (~ list_all P l) = list_exists (Not o P) l"
8.2499 + by (import list NOT_EVERY)
8.2500 +
8.2501 +lemma NOT_EXISTS: "ALL P l. (~ list_exists P l) = list_all (Not o P) l"
8.2502 + by (import list NOT_EXISTS)
8.2503 +
8.2504 +lemma MEM_MAP: "ALL l f x. x mem map f l = (EX y. x = f y & y mem l)"
8.2505 + by (import list MEM_MAP)
8.2506 +
8.2507 +lemma LENGTH_CONS: "ALL l n. (length l = Suc n) = (EX h l'. length l' = n & l = h # l')"
8.2508 + by (import list LENGTH_CONS)
8.2509 +
8.2510 +lemma LENGTH_EQ_CONS: "ALL P n.
8.2511 + (ALL l. length l = Suc n --> P l) =
8.2512 + (ALL l. length l = n --> (ALL x. P (x # l)))"
8.2513 + by (import list LENGTH_EQ_CONS)
8.2514 +
8.2515 +lemma LENGTH_EQ_NIL: "ALL P. (ALL l. length l = 0 --> P l) = P []"
8.2516 + by (import list LENGTH_EQ_NIL)
8.2517 +
8.2518 +lemma CONS_ACYCLIC: "ALL l x. l ~= x # l & x # l ~= l"
8.2519 + by (import list CONS_ACYCLIC)
8.2520 +
8.2521 +lemma APPEND_eq_NIL: "(ALL (l1::'a list) l2::'a list. ([] = l1 @ l2) = (l1 = [] & l2 = [])) &
8.2522 +(ALL (l1::'a list) l2::'a list. (l1 @ l2 = []) = (l1 = [] & l2 = []))"
8.2523 + by (import list APPEND_eq_NIL)
8.2524 +
8.2525 +lemma APPEND_11: "(ALL (l1::'a list) (l2::'a list) l3::'a list.
8.2526 + (l1 @ l2 = l1 @ l3) = (l2 = l3)) &
8.2527 +(ALL (l1::'a list) (l2::'a list) l3::'a list.
8.2528 + (l2 @ l1 = l3 @ l1) = (l2 = l3))"
8.2529 + by (import list APPEND_11)
8.2530 +
8.2531 +lemma EL_compute: "ALL n. EL n l = (if n = 0 then hd l else EL (PRE n) (tl l))"
8.2532 + by (import list EL_compute)
8.2533 +
8.2534 +lemma WF_LIST_PRED: "WF (%L1 L2. EX h. L2 = h # L1)"
8.2535 + by (import list WF_LIST_PRED)
8.2536 +
8.2537 +lemma list_size_cong: "ALL M N f f'.
8.2538 + M = N & (ALL x. x mem N --> f x = f' x) -->
8.2539 + list_size f M = list_size f' N"
8.2540 + by (import list list_size_cong)
8.2541 +
8.2542 +lemma FOLDR_CONG: "ALL l l' b b' f f'.
8.2543 + l = l' & b = b' & (ALL x a. x mem l' --> f x a = f' x a) -->
8.2544 + foldr f l b = foldr f' l' b'"
8.2545 + by (import list FOLDR_CONG)
8.2546 +
8.2547 +lemma FOLDL_CONG: "ALL l l' b b' f f'.
8.2548 + l = l' & b = b' & (ALL x a. x mem l' --> f a x = f' a x) -->
8.2549 + foldl f b l = foldl f' b' l'"
8.2550 + by (import list FOLDL_CONG)
8.2551 +
8.2552 +lemma MAP_CONG: "ALL l1 l2 f f'.
8.2553 + l1 = l2 & (ALL x. x mem l2 --> f x = f' x) --> map f l1 = map f' l2"
8.2554 + by (import list MAP_CONG)
8.2555 +
8.2556 +lemma EXISTS_CONG: "ALL l1 l2 P P'.
8.2557 + l1 = l2 & (ALL x. x mem l2 --> P x = P' x) -->
8.2558 + list_exists P l1 = list_exists P' l2"
8.2559 + by (import list EXISTS_CONG)
8.2560 +
8.2561 +lemma EVERY_CONG: "ALL l1 l2 P P'.
8.2562 + l1 = l2 & (ALL x. x mem l2 --> P x = P' x) -->
8.2563 + list_all P l1 = list_all P' l2"
8.2564 + by (import list EVERY_CONG)
8.2565 +
8.2566 +lemma EVERY_MONOTONIC: "ALL P Q. (ALL x. P x --> Q x) --> (ALL l. list_all P l --> list_all Q l)"
8.2567 + by (import list EVERY_MONOTONIC)
8.2568 +
8.2569 +lemma LENGTH_ZIP: "ALL l1 l2.
8.2570 + length l1 = length l2 -->
8.2571 + length (zip l1 l2) = length l1 & length (zip l1 l2) = length l2"
8.2572 + by (import list LENGTH_ZIP)
8.2573 +
8.2574 +lemma LENGTH_UNZIP: "ALL pl.
8.2575 + length (fst (unzip pl)) = length pl & length (snd (unzip pl)) = length pl"
8.2576 + by (import list LENGTH_UNZIP)
8.2577 +
8.2578 +lemma ZIP_UNZIP: "ALL l. ZIP (unzip l) = l"
8.2579 + by (import list ZIP_UNZIP)
8.2580 +
8.2581 +lemma UNZIP_ZIP: "ALL l1 l2. length l1 = length l2 --> unzip (zip l1 l2) = (l1, l2)"
8.2582 + by (import list UNZIP_ZIP)
8.2583 +
8.2584 +lemma ZIP_MAP: "ALL l1 l2 f1 f2.
8.2585 + length l1 = length l2 -->
8.2586 + zip (map f1 l1) l2 = map (%p. (f1 (fst p), snd p)) (zip l1 l2) &
8.2587 + zip l1 (map f2 l2) = map (%p. (fst p, f2 (snd p))) (zip l1 l2)"
8.2588 + by (import list ZIP_MAP)
8.2589 +
8.2590 +lemma MEM_ZIP: "ALL l1 l2 p.
8.2591 + length l1 = length l2 -->
8.2592 + p mem zip l1 l2 = (EX n<length l1. p = (EL n l1, EL n l2))"
8.2593 + by (import list MEM_ZIP)
8.2594 +
8.2595 +lemma EL_ZIP: "ALL l1 l2 n.
8.2596 + length l1 = length l2 & n < length l1 -->
8.2597 + EL n (zip l1 l2) = (EL n l1, EL n l2)"
8.2598 + by (import list EL_ZIP)
8.2599 +
8.2600 +lemma MAP2_ZIP: "ALL l1 l2.
8.2601 + length l1 = length l2 -->
8.2602 + (ALL f. map2 f l1 l2 = map (split f) (zip l1 l2))"
8.2603 + by (import list MAP2_ZIP)
8.2604 +
8.2605 +lemma MEM_EL: "ALL l x. x mem l = (EX n<length l. x = EL n l)"
8.2606 + by (import list MEM_EL)
8.2607 +
8.2608 +lemma LAST_CONS: "(ALL x::'a. last [x] = x) &
8.2609 +(ALL (x::'a) (xa::'a) xb::'a list. last (x # xa # xb) = last (xa # xb))"
8.2610 + by (import list LAST_CONS)
8.2611 +
8.2612 +lemma FRONT_CONS: "(ALL x::'a. butlast [x] = []) &
8.2613 +(ALL (x::'a) (xa::'a) xb::'a list.
8.2614 + butlast (x # xa # xb) = x # butlast (xa # xb))"
8.2615 + by (import list FRONT_CONS)
8.2616 +
8.2617 +;end_setup
8.2618 +
8.2619 +;setup_theory pred_set
8.2620 +
8.2621 +lemma EXTENSION: "ALL s t. (s = t) = (ALL x. IN x s = IN x t)"
8.2622 + by (import pred_set EXTENSION)
8.2623 +
8.2624 +lemma NOT_EQUAL_SETS: "ALL x xa. (x ~= xa) = (EX xb. IN xb xa = (~ IN xb x))"
8.2625 + by (import pred_set NOT_EQUAL_SETS)
8.2626 +
8.2627 +lemma NUM_SET_WOP: "ALL s::nat => bool.
8.2628 + (EX n::nat. IN n s) =
8.2629 + (EX n::nat. IN n s & (ALL m::nat. IN m s --> n <= m))"
8.2630 + by (import pred_set NUM_SET_WOP)
8.2631 +
8.2632 +consts
8.2633 + GSPEC :: "('b => 'a * bool) => 'a => bool"
8.2634 +
8.2635 +specification (GSPEC) GSPECIFICATION: "ALL (f::'b => 'a * bool) v::'a. IN v (GSPEC f) = (EX x::'b. (v, True) = f x)"
8.2636 + by (import pred_set GSPECIFICATION)
8.2637 +
8.2638 +lemma SET_MINIMUM: "ALL (s::'a => bool) M::'a => nat.
8.2639 + (EX x::'a. IN x s) =
8.2640 + (EX x::'a. IN x s & (ALL y::'a. IN y s --> M x <= M y))"
8.2641 + by (import pred_set SET_MINIMUM)
8.2642 +
8.2643 +constdefs
8.2644 + EMPTY :: "'a => bool"
8.2645 + "EMPTY == %x. False"
8.2646 +
8.2647 +lemma EMPTY_DEF: "EMPTY = (%x. False)"
8.2648 + by (import pred_set EMPTY_DEF)
8.2649 +
8.2650 +lemma NOT_IN_EMPTY: "ALL x. ~ IN x EMPTY"
8.2651 + by (import pred_set NOT_IN_EMPTY)
8.2652 +
8.2653 +lemma MEMBER_NOT_EMPTY: "ALL x. (EX xa. IN xa x) = (x ~= EMPTY)"
8.2654 + by (import pred_set MEMBER_NOT_EMPTY)
8.2655 +
8.2656 +constdefs
8.2657 + UNIV :: "'a => bool"
8.2658 + "pred_set.UNIV == %x. True"
8.2659 +
8.2660 +lemma UNIV_DEF: "pred_set.UNIV = (%x. True)"
8.2661 + by (import pred_set UNIV_DEF)
8.2662 +
8.2663 +lemma IN_UNIV: "ALL x. IN x pred_set.UNIV"
8.2664 + by (import pred_set IN_UNIV)
8.2665 +
8.2666 +lemma UNIV_NOT_EMPTY: "pred_set.UNIV ~= EMPTY"
8.2667 + by (import pred_set UNIV_NOT_EMPTY)
8.2668 +
8.2669 +lemma EMPTY_NOT_UNIV: "EMPTY ~= pred_set.UNIV"
8.2670 + by (import pred_set EMPTY_NOT_UNIV)
8.2671 +
8.2672 +lemma EQ_UNIV: "(ALL x. IN x s) = (s = pred_set.UNIV)"
8.2673 + by (import pred_set EQ_UNIV)
8.2674 +
8.2675 +constdefs
8.2676 + SUBSET :: "('a => bool) => ('a => bool) => bool"
8.2677 + "SUBSET == %s t. ALL x. IN x s --> IN x t"
8.2678 +
8.2679 +lemma SUBSET_DEF: "ALL s t. SUBSET s t = (ALL x. IN x s --> IN x t)"
8.2680 + by (import pred_set SUBSET_DEF)
8.2681 +
8.2682 +lemma SUBSET_TRANS: "ALL x xa xb. SUBSET x xa & SUBSET xa xb --> SUBSET x xb"
8.2683 + by (import pred_set SUBSET_TRANS)
8.2684 +
8.2685 +lemma SUBSET_REFL: "ALL x. SUBSET x x"
8.2686 + by (import pred_set SUBSET_REFL)
8.2687 +
8.2688 +lemma SUBSET_ANTISYM: "ALL x xa. SUBSET x xa & SUBSET xa x --> x = xa"
8.2689 + by (import pred_set SUBSET_ANTISYM)
8.2690 +
8.2691 +lemma EMPTY_SUBSET: "All (SUBSET EMPTY)"
8.2692 + by (import pred_set EMPTY_SUBSET)
8.2693 +
8.2694 +lemma SUBSET_EMPTY: "ALL x. SUBSET x EMPTY = (x = EMPTY)"
8.2695 + by (import pred_set SUBSET_EMPTY)
8.2696 +
8.2697 +lemma SUBSET_UNIV: "ALL x. SUBSET x pred_set.UNIV"
8.2698 + by (import pred_set SUBSET_UNIV)
8.2699 +
8.2700 +lemma UNIV_SUBSET: "ALL x. SUBSET pred_set.UNIV x = (x = pred_set.UNIV)"
8.2701 + by (import pred_set UNIV_SUBSET)
8.2702 +
8.2703 +constdefs
8.2704 + PSUBSET :: "('a => bool) => ('a => bool) => bool"
8.2705 + "PSUBSET == %s t. SUBSET s t & s ~= t"
8.2706 +
8.2707 +lemma PSUBSET_DEF: "ALL s t. PSUBSET s t = (SUBSET s t & s ~= t)"
8.2708 + by (import pred_set PSUBSET_DEF)
8.2709 +
8.2710 +lemma PSUBSET_TRANS: "ALL x xa xb. PSUBSET x xa & PSUBSET xa xb --> PSUBSET x xb"
8.2711 + by (import pred_set PSUBSET_TRANS)
8.2712 +
8.2713 +lemma PSUBSET_IRREFL: "ALL x. ~ PSUBSET x x"
8.2714 + by (import pred_set PSUBSET_IRREFL)
8.2715 +
8.2716 +lemma NOT_PSUBSET_EMPTY: "ALL x. ~ PSUBSET x EMPTY"
8.2717 + by (import pred_set NOT_PSUBSET_EMPTY)
8.2718 +
8.2719 +lemma NOT_UNIV_PSUBSET: "ALL x. ~ PSUBSET pred_set.UNIV x"
8.2720 + by (import pred_set NOT_UNIV_PSUBSET)
8.2721 +
8.2722 +lemma PSUBSET_UNIV: "ALL x. PSUBSET x pred_set.UNIV = (EX xa. ~ IN xa x)"
8.2723 + by (import pred_set PSUBSET_UNIV)
8.2724 +
8.2725 +constdefs
8.2726 + UNION :: "('a => bool) => ('a => bool) => 'a => bool"
8.2727 + "pred_set.UNION == %s t. GSPEC (%x. (x, IN x s | IN x t))"
8.2728 +
8.2729 +lemma UNION_DEF: "ALL s t. pred_set.UNION s t = GSPEC (%x. (x, IN x s | IN x t))"
8.2730 + by (import pred_set UNION_DEF)
8.2731 +
8.2732 +lemma IN_UNION: "ALL x xa xb. IN xb (pred_set.UNION x xa) = (IN xb x | IN xb xa)"
8.2733 + by (import pred_set IN_UNION)
8.2734 +
8.2735 +lemma UNION_ASSOC: "ALL x xa xb.
8.2736 + pred_set.UNION x (pred_set.UNION xa xb) =
8.2737 + pred_set.UNION (pred_set.UNION x xa) xb"
8.2738 + by (import pred_set UNION_ASSOC)
8.2739 +
8.2740 +lemma UNION_IDEMPOT: "ALL x. pred_set.UNION x x = x"
8.2741 + by (import pred_set UNION_IDEMPOT)
8.2742 +
8.2743 +lemma UNION_COMM: "ALL x xa. pred_set.UNION x xa = pred_set.UNION xa x"
8.2744 + by (import pred_set UNION_COMM)
8.2745 +
8.2746 +lemma SUBSET_UNION: "(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION x xa)) &
8.2747 +(ALL (x::'a => bool) xa::'a => bool. SUBSET x (pred_set.UNION xa x))"
8.2748 + by (import pred_set SUBSET_UNION)
8.2749 +
8.2750 +lemma UNION_SUBSET: "ALL s t u. SUBSET (pred_set.UNION s t) u = (SUBSET s u & SUBSET t u)"
8.2751 + by (import pred_set UNION_SUBSET)
8.2752 +
8.2753 +lemma SUBSET_UNION_ABSORPTION: "ALL x xa. SUBSET x xa = (pred_set.UNION x xa = xa)"
8.2754 + by (import pred_set SUBSET_UNION_ABSORPTION)
8.2755 +
8.2756 +lemma UNION_EMPTY: "(ALL x::'a => bool. pred_set.UNION EMPTY x = x) &
8.2757 +(ALL x::'a => bool. pred_set.UNION x EMPTY = x)"
8.2758 + by (import pred_set UNION_EMPTY)
8.2759 +
8.2760 +lemma UNION_UNIV: "(ALL x::'a => bool. pred_set.UNION pred_set.UNIV x = pred_set.UNIV) &
8.2761 +(ALL x::'a => bool. pred_set.UNION x pred_set.UNIV = pred_set.UNIV)"
8.2762 + by (import pred_set UNION_UNIV)
8.2763 +
8.2764 +lemma EMPTY_UNION: "ALL x xa. (pred_set.UNION x xa = EMPTY) = (x = EMPTY & xa = EMPTY)"
8.2765 + by (import pred_set EMPTY_UNION)
8.2766 +
8.2767 +constdefs
8.2768 + INTER :: "('a => bool) => ('a => bool) => 'a => bool"
8.2769 + "pred_set.INTER == %s t. GSPEC (%x. (x, IN x s & IN x t))"
8.2770 +
8.2771 +lemma INTER_DEF: "ALL s t. pred_set.INTER s t = GSPEC (%x. (x, IN x s & IN x t))"
8.2772 + by (import pred_set INTER_DEF)
8.2773 +
8.2774 +lemma IN_INTER: "ALL x xa xb. IN xb (pred_set.INTER x xa) = (IN xb x & IN xb xa)"
8.2775 + by (import pred_set IN_INTER)
8.2776 +
8.2777 +lemma INTER_ASSOC: "ALL x xa xb.
8.2778 + pred_set.INTER x (pred_set.INTER xa xb) =
8.2779 + pred_set.INTER (pred_set.INTER x xa) xb"
8.2780 + by (import pred_set INTER_ASSOC)
8.2781 +
8.2782 +lemma INTER_IDEMPOT: "ALL x. pred_set.INTER x x = x"
8.2783 + by (import pred_set INTER_IDEMPOT)
8.2784 +
8.2785 +lemma INTER_COMM: "ALL x xa. pred_set.INTER x xa = pred_set.INTER xa x"
8.2786 + by (import pred_set INTER_COMM)
8.2787 +
8.2788 +lemma INTER_SUBSET: "(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER x xa) x) &
8.2789 +(ALL (x::'a => bool) xa::'a => bool. SUBSET (pred_set.INTER xa x) x)"
8.2790 + by (import pred_set INTER_SUBSET)
8.2791 +
8.2792 +lemma SUBSET_INTER: "ALL s t u. SUBSET s (pred_set.INTER t u) = (SUBSET s t & SUBSET s u)"
8.2793 + by (import pred_set SUBSET_INTER)
8.2794 +
8.2795 +lemma SUBSET_INTER_ABSORPTION: "ALL x xa. SUBSET x xa = (pred_set.INTER x xa = x)"
8.2796 + by (import pred_set SUBSET_INTER_ABSORPTION)
8.2797 +
8.2798 +lemma INTER_EMPTY: "(ALL x::'a => bool. pred_set.INTER EMPTY x = EMPTY) &
8.2799 +(ALL x::'a => bool. pred_set.INTER x EMPTY = EMPTY)"
8.2800 + by (import pred_set INTER_EMPTY)
8.2801 +
8.2802 +lemma INTER_UNIV: "(ALL x::'a => bool. pred_set.INTER pred_set.UNIV x = x) &
8.2803 +(ALL x::'a => bool. pred_set.INTER x pred_set.UNIV = x)"
8.2804 + by (import pred_set INTER_UNIV)
8.2805 +
8.2806 +lemma UNION_OVER_INTER: "ALL x xa xb.
8.2807 + pred_set.INTER x (pred_set.UNION xa xb) =
8.2808 + pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER x xb)"
8.2809 + by (import pred_set UNION_OVER_INTER)
8.2810 +
8.2811 +lemma INTER_OVER_UNION: "ALL x xa xb.
8.2812 + pred_set.UNION x (pred_set.INTER xa xb) =
8.2813 + pred_set.INTER (pred_set.UNION x xa) (pred_set.UNION x xb)"
8.2814 + by (import pred_set INTER_OVER_UNION)
8.2815 +
8.2816 +constdefs
8.2817 + DISJOINT :: "('a => bool) => ('a => bool) => bool"
8.2818 + "DISJOINT == %s t. pred_set.INTER s t = EMPTY"
8.2819 +
8.2820 +lemma DISJOINT_DEF: "ALL s t. DISJOINT s t = (pred_set.INTER s t = EMPTY)"
8.2821 + by (import pred_set DISJOINT_DEF)
8.2822 +
8.2823 +lemma IN_DISJOINT: "ALL x xa. DISJOINT x xa = (~ (EX xb. IN xb x & IN xb xa))"
8.2824 + by (import pred_set IN_DISJOINT)
8.2825 +
8.2826 +lemma DISJOINT_SYM: "ALL x xa. DISJOINT x xa = DISJOINT xa x"
8.2827 + by (import pred_set DISJOINT_SYM)
8.2828 +
8.2829 +lemma DISJOINT_EMPTY: "ALL x. DISJOINT EMPTY x & DISJOINT x EMPTY"
8.2830 + by (import pred_set DISJOINT_EMPTY)
8.2831 +
8.2832 +lemma DISJOINT_EMPTY_REFL: "ALL x. (x = EMPTY) = DISJOINT x x"
8.2833 + by (import pred_set DISJOINT_EMPTY_REFL)
8.2834 +
8.2835 +lemma DISJOINT_UNION: "ALL x xa xb.
8.2836 + DISJOINT (pred_set.UNION x xa) xb = (DISJOINT x xb & DISJOINT xa xb)"
8.2837 + by (import pred_set DISJOINT_UNION)
8.2838 +
8.2839 +lemma DISJOINT_UNION_BOTH: "ALL s t u.
8.2840 + DISJOINT (pred_set.UNION s t) u = (DISJOINT s u & DISJOINT t u) &
8.2841 + DISJOINT u (pred_set.UNION s t) = (DISJOINT s u & DISJOINT t u)"
8.2842 + by (import pred_set DISJOINT_UNION_BOTH)
8.2843 +
8.2844 +constdefs
8.2845 + DIFF :: "('a => bool) => ('a => bool) => 'a => bool"
8.2846 + "DIFF == %s t. GSPEC (%x. (x, IN x s & ~ IN x t))"
8.2847 +
8.2848 +lemma DIFF_DEF: "ALL s t. DIFF s t = GSPEC (%x. (x, IN x s & ~ IN x t))"
8.2849 + by (import pred_set DIFF_DEF)
8.2850 +
8.2851 +lemma IN_DIFF: "ALL s t x. IN x (DIFF s t) = (IN x s & ~ IN x t)"
8.2852 + by (import pred_set IN_DIFF)
8.2853 +
8.2854 +lemma DIFF_EMPTY: "ALL s. DIFF s EMPTY = s"
8.2855 + by (import pred_set DIFF_EMPTY)
8.2856 +
8.2857 +lemma EMPTY_DIFF: "ALL s. DIFF EMPTY s = EMPTY"
8.2858 + by (import pred_set EMPTY_DIFF)
8.2859 +
8.2860 +lemma DIFF_UNIV: "ALL s. DIFF s pred_set.UNIV = EMPTY"
8.2861 + by (import pred_set DIFF_UNIV)
8.2862 +
8.2863 +lemma DIFF_DIFF: "ALL x xa. DIFF (DIFF x xa) xa = DIFF x xa"
8.2864 + by (import pred_set DIFF_DIFF)
8.2865 +
8.2866 +lemma DIFF_EQ_EMPTY: "ALL x. DIFF x x = EMPTY"
8.2867 + by (import pred_set DIFF_EQ_EMPTY)
8.2868 +
8.2869 +constdefs
8.2870 + INSERT :: "'a => ('a => bool) => 'a => bool"
8.2871 + "INSERT == %x s. GSPEC (%y. (y, y = x | IN y s))"
8.2872 +
8.2873 +lemma INSERT_DEF: "ALL x s. INSERT x s = GSPEC (%y. (y, y = x | IN y s))"
8.2874 + by (import pred_set INSERT_DEF)
8.2875 +
8.2876 +lemma IN_INSERT: "ALL x xa xb. IN x (INSERT xa xb) = (x = xa | IN x xb)"
8.2877 + by (import pred_set IN_INSERT)
8.2878 +
8.2879 +lemma COMPONENT: "ALL x xa. IN x (INSERT x xa)"
8.2880 + by (import pred_set COMPONENT)
8.2881 +
8.2882 +lemma SET_CASES: "ALL x. x = EMPTY | (EX xa xb. x = INSERT xa xb & ~ IN xa xb)"
8.2883 + by (import pred_set SET_CASES)
8.2884 +
8.2885 +lemma DECOMPOSITION: "ALL s x. IN x s = (EX t. s = INSERT x t & ~ IN x t)"
8.2886 + by (import pred_set DECOMPOSITION)
8.2887 +
8.2888 +lemma ABSORPTION: "ALL x xa. IN x xa = (INSERT x xa = xa)"
8.2889 + by (import pred_set ABSORPTION)
8.2890 +
8.2891 +lemma INSERT_INSERT: "ALL x xa. INSERT x (INSERT x xa) = INSERT x xa"
8.2892 + by (import pred_set INSERT_INSERT)
8.2893 +
8.2894 +lemma INSERT_COMM: "ALL x xa xb. INSERT x (INSERT xa xb) = INSERT xa (INSERT x xb)"
8.2895 + by (import pred_set INSERT_COMM)
8.2896 +
8.2897 +lemma INSERT_UNIV: "ALL x. INSERT x pred_set.UNIV = pred_set.UNIV"
8.2898 + by (import pred_set INSERT_UNIV)
8.2899 +
8.2900 +lemma NOT_INSERT_EMPTY: "ALL x xa. INSERT x xa ~= EMPTY"
8.2901 + by (import pred_set NOT_INSERT_EMPTY)
8.2902 +
8.2903 +lemma NOT_EMPTY_INSERT: "ALL x xa. EMPTY ~= INSERT x xa"
8.2904 + by (import pred_set NOT_EMPTY_INSERT)
8.2905 +
8.2906 +lemma INSERT_UNION: "ALL x s t.
8.2907 + pred_set.UNION (INSERT x s) t =
8.2908 + (if IN x t then pred_set.UNION s t else INSERT x (pred_set.UNION s t))"
8.2909 + by (import pred_set INSERT_UNION)
8.2910 +
8.2911 +lemma INSERT_UNION_EQ: "ALL x s t. pred_set.UNION (INSERT x s) t = INSERT x (pred_set.UNION s t)"
8.2912 + by (import pred_set INSERT_UNION_EQ)
8.2913 +
8.2914 +lemma INSERT_INTER: "ALL x s t.
8.2915 + pred_set.INTER (INSERT x s) t =
8.2916 + (if IN x t then INSERT x (pred_set.INTER s t) else pred_set.INTER s t)"
8.2917 + by (import pred_set INSERT_INTER)
8.2918 +
8.2919 +lemma DISJOINT_INSERT: "ALL x xa xb. DISJOINT (INSERT x xa) xb = (DISJOINT xa xb & ~ IN x xb)"
8.2920 + by (import pred_set DISJOINT_INSERT)
8.2921 +
8.2922 +lemma INSERT_SUBSET: "ALL x xa xb. SUBSET (INSERT x xa) xb = (IN x xb & SUBSET xa xb)"
8.2923 + by (import pred_set INSERT_SUBSET)
8.2924 +
8.2925 +lemma SUBSET_INSERT: "ALL x xa. ~ IN x xa --> (ALL xb. SUBSET xa (INSERT x xb) = SUBSET xa xb)"
8.2926 + by (import pred_set SUBSET_INSERT)
8.2927 +
8.2928 +lemma INSERT_DIFF: "ALL s t x.
8.2929 + DIFF (INSERT x s) t = (if IN x t then DIFF s t else INSERT x (DIFF s t))"
8.2930 + by (import pred_set INSERT_DIFF)
8.2931 +
8.2932 +constdefs
8.2933 + DELETE :: "('a => bool) => 'a => 'a => bool"
8.2934 + "DELETE == %s x. DIFF s (INSERT x EMPTY)"
8.2935 +
8.2936 +lemma DELETE_DEF: "ALL s x. DELETE s x = DIFF s (INSERT x EMPTY)"
8.2937 + by (import pred_set DELETE_DEF)
8.2938 +
8.2939 +lemma IN_DELETE: "ALL x xa xb. IN xa (DELETE x xb) = (IN xa x & xa ~= xb)"
8.2940 + by (import pred_set IN_DELETE)
8.2941 +
8.2942 +lemma DELETE_NON_ELEMENT: "ALL x xa. (~ IN x xa) = (DELETE xa x = xa)"
8.2943 + by (import pred_set DELETE_NON_ELEMENT)
8.2944 +
8.2945 +lemma IN_DELETE_EQ: "ALL s x x'. (IN x s = IN x' s) = (IN x (DELETE s x') = IN x' (DELETE s x))"
8.2946 + by (import pred_set IN_DELETE_EQ)
8.2947 +
8.2948 +lemma EMPTY_DELETE: "ALL x. DELETE EMPTY x = EMPTY"
8.2949 + by (import pred_set EMPTY_DELETE)
8.2950 +
8.2951 +lemma DELETE_DELETE: "ALL x xa. DELETE (DELETE xa x) x = DELETE xa x"
8.2952 + by (import pred_set DELETE_DELETE)
8.2953 +
8.2954 +lemma DELETE_COMM: "ALL x xa xb. DELETE (DELETE xb x) xa = DELETE (DELETE xb xa) x"
8.2955 + by (import pred_set DELETE_COMM)
8.2956 +
8.2957 +lemma DELETE_SUBSET: "ALL x xa. SUBSET (DELETE xa x) xa"
8.2958 + by (import pred_set DELETE_SUBSET)
8.2959 +
8.2960 +lemma SUBSET_DELETE: "ALL x xa xb. SUBSET xa (DELETE xb x) = (~ IN x xa & SUBSET xa xb)"
8.2961 + by (import pred_set SUBSET_DELETE)
8.2962 +
8.2963 +lemma SUBSET_INSERT_DELETE: "ALL x s t. SUBSET s (INSERT x t) = SUBSET (DELETE s x) t"
8.2964 + by (import pred_set SUBSET_INSERT_DELETE)
8.2965 +
8.2966 +lemma DIFF_INSERT: "ALL x xa xb. DIFF x (INSERT xb xa) = DIFF (DELETE x xb) xa"
8.2967 + by (import pred_set DIFF_INSERT)
8.2968 +
8.2969 +lemma PSUBSET_INSERT_SUBSET: "ALL x xa. PSUBSET x xa = (EX xb. ~ IN xb x & SUBSET (INSERT xb x) xa)"
8.2970 + by (import pred_set PSUBSET_INSERT_SUBSET)
8.2971 +
8.2972 +lemma PSUBSET_MEMBER: "ALL s t. PSUBSET s t = (SUBSET s t & (EX y. IN y t & ~ IN y s))"
8.2973 + by (import pred_set PSUBSET_MEMBER)
8.2974 +
8.2975 +lemma DELETE_INSERT: "ALL x xa xb.
8.2976 + DELETE (INSERT x xb) xa =
8.2977 + (if x = xa then DELETE xb xa else INSERT x (DELETE xb xa))"
8.2978 + by (import pred_set DELETE_INSERT)
8.2979 +
8.2980 +lemma INSERT_DELETE: "ALL x xa. IN x xa --> INSERT x (DELETE xa x) = xa"
8.2981 + by (import pred_set INSERT_DELETE)
8.2982 +
8.2983 +lemma DELETE_INTER: "ALL x xa xb.
8.2984 + pred_set.INTER (DELETE x xb) xa = DELETE (pred_set.INTER x xa) xb"
8.2985 + by (import pred_set DELETE_INTER)
8.2986 +
8.2987 +lemma DISJOINT_DELETE_SYM: "ALL x xa xb. DISJOINT (DELETE x xb) xa = DISJOINT (DELETE xa xb) x"
8.2988 + by (import pred_set DISJOINT_DELETE_SYM)
8.2989 +
8.2990 +consts
8.2991 + CHOICE :: "('a => bool) => 'a"
8.2992 +
8.2993 +specification (CHOICE) CHOICE_DEF: "ALL x. x ~= EMPTY --> IN (CHOICE x) x"
8.2994 + by (import pred_set CHOICE_DEF)
8.2995 +
8.2996 +constdefs
8.2997 + REST :: "('a => bool) => 'a => bool"
8.2998 + "REST == %s. DELETE s (CHOICE s)"
8.2999 +
8.3000 +lemma REST_DEF: "ALL s. REST s = DELETE s (CHOICE s)"
8.3001 + by (import pred_set REST_DEF)
8.3002 +
8.3003 +lemma CHOICE_NOT_IN_REST: "ALL x. ~ IN (CHOICE x) (REST x)"
8.3004 + by (import pred_set CHOICE_NOT_IN_REST)
8.3005 +
8.3006 +lemma CHOICE_INSERT_REST: "ALL s. s ~= EMPTY --> INSERT (CHOICE s) (REST s) = s"
8.3007 + by (import pred_set CHOICE_INSERT_REST)
8.3008 +
8.3009 +lemma REST_SUBSET: "ALL x. SUBSET (REST x) x"
8.3010 + by (import pred_set REST_SUBSET)
8.3011 +
8.3012 +lemma REST_PSUBSET: "ALL x. x ~= EMPTY --> PSUBSET (REST x) x"
8.3013 + by (import pred_set REST_PSUBSET)
8.3014 +
8.3015 +constdefs
8.3016 + SING :: "('a => bool) => bool"
8.3017 + "SING == %s. EX x. s = INSERT x EMPTY"
8.3018 +
8.3019 +lemma SING_DEF: "ALL s. SING s = (EX x. s = INSERT x EMPTY)"
8.3020 + by (import pred_set SING_DEF)
8.3021 +
8.3022 +lemma SING: "ALL x. SING (INSERT x EMPTY)"
8.3023 + by (import pred_set SING)
8.3024 +
8.3025 +lemma IN_SING: "ALL x xa. IN x (INSERT xa EMPTY) = (x = xa)"
8.3026 + by (import pred_set IN_SING)
8.3027 +
8.3028 +lemma NOT_SING_EMPTY: "ALL x. INSERT x EMPTY ~= EMPTY"
8.3029 + by (import pred_set NOT_SING_EMPTY)
8.3030 +
8.3031 +lemma NOT_EMPTY_SING: "ALL x. EMPTY ~= INSERT x EMPTY"
8.3032 + by (import pred_set NOT_EMPTY_SING)
8.3033 +
8.3034 +lemma EQUAL_SING: "ALL x xa. (INSERT x EMPTY = INSERT xa EMPTY) = (x = xa)"
8.3035 + by (import pred_set EQUAL_SING)
8.3036 +
8.3037 +lemma DISJOINT_SING_EMPTY: "ALL x. DISJOINT (INSERT x EMPTY) EMPTY"
8.3038 + by (import pred_set DISJOINT_SING_EMPTY)
8.3039 +
8.3040 +lemma INSERT_SING_UNION: "ALL x xa. INSERT xa x = pred_set.UNION (INSERT xa EMPTY) x"
8.3041 + by (import pred_set INSERT_SING_UNION)
8.3042 +
8.3043 +lemma SING_DELETE: "ALL x. DELETE (INSERT x EMPTY) x = EMPTY"
8.3044 + by (import pred_set SING_DELETE)
8.3045 +
8.3046 +lemma DELETE_EQ_SING: "ALL x xa. IN xa x --> (DELETE x xa = EMPTY) = (x = INSERT xa EMPTY)"
8.3047 + by (import pred_set DELETE_EQ_SING)
8.3048 +
8.3049 +lemma CHOICE_SING: "ALL x. CHOICE (INSERT x EMPTY) = x"
8.3050 + by (import pred_set CHOICE_SING)
8.3051 +
8.3052 +lemma REST_SING: "ALL x. REST (INSERT x EMPTY) = EMPTY"
8.3053 + by (import pred_set REST_SING)
8.3054 +
8.3055 +lemma SING_IFF_EMPTY_REST: "ALL x. SING x = (x ~= EMPTY & REST x = EMPTY)"
8.3056 + by (import pred_set SING_IFF_EMPTY_REST)
8.3057 +
8.3058 +constdefs
8.3059 + IMAGE :: "('a => 'b) => ('a => bool) => 'b => bool"
8.3060 + "IMAGE == %f s. GSPEC (%x. (f x, IN x s))"
8.3061 +
8.3062 +lemma IMAGE_DEF: "ALL f s. IMAGE f s = GSPEC (%x. (f x, IN x s))"
8.3063 + by (import pred_set IMAGE_DEF)
8.3064 +
8.3065 +lemma IN_IMAGE: "ALL (x::'b) (xa::'a => bool) xb::'a => 'b.
8.3066 + IN x (IMAGE xb xa) = (EX xc::'a. x = xb xc & IN xc xa)"
8.3067 + by (import pred_set IN_IMAGE)
8.3068 +
8.3069 +lemma IMAGE_IN: "ALL x xa. IN x xa --> (ALL xb. IN (xb x) (IMAGE xb xa))"
8.3070 + by (import pred_set IMAGE_IN)
8.3071 +
8.3072 +lemma IMAGE_EMPTY: "ALL x. IMAGE x EMPTY = EMPTY"
8.3073 + by (import pred_set IMAGE_EMPTY)
8.3074 +
8.3075 +lemma IMAGE_ID: "ALL x. IMAGE (%x. x) x = x"
8.3076 + by (import pred_set IMAGE_ID)
8.3077 +
8.3078 +lemma IMAGE_COMPOSE: "ALL (x::'b => 'c) (xa::'a => 'b) xb::'a => bool.
8.3079 + IMAGE (x o xa) xb = IMAGE x (IMAGE xa xb)"
8.3080 + by (import pred_set IMAGE_COMPOSE)
8.3081 +
8.3082 +lemma IMAGE_INSERT: "ALL x xa xb. IMAGE x (INSERT xa xb) = INSERT (x xa) (IMAGE x xb)"
8.3083 + by (import pred_set IMAGE_INSERT)
8.3084 +
8.3085 +lemma IMAGE_EQ_EMPTY: "ALL s x. (IMAGE x s = EMPTY) = (s = EMPTY)"
8.3086 + by (import pred_set IMAGE_EQ_EMPTY)
8.3087 +
8.3088 +lemma IMAGE_DELETE: "ALL f x s. ~ IN x s --> IMAGE f (DELETE s x) = IMAGE f s"
8.3089 + by (import pred_set IMAGE_DELETE)
8.3090 +
8.3091 +lemma IMAGE_UNION: "ALL x xa xb.
8.3092 + IMAGE x (pred_set.UNION xa xb) = pred_set.UNION (IMAGE x xa) (IMAGE x xb)"
8.3093 + by (import pred_set IMAGE_UNION)
8.3094 +
8.3095 +lemma IMAGE_SUBSET: "ALL x xa. SUBSET x xa --> (ALL xb. SUBSET (IMAGE xb x) (IMAGE xb xa))"
8.3096 + by (import pred_set IMAGE_SUBSET)
8.3097 +
8.3098 +lemma IMAGE_INTER: "ALL f s t.
8.3099 + SUBSET (IMAGE f (pred_set.INTER s t))
8.3100 + (pred_set.INTER (IMAGE f s) (IMAGE f t))"
8.3101 + by (import pred_set IMAGE_INTER)
8.3102 +
8.3103 +constdefs
8.3104 + INJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"
8.3105 + "INJ ==
8.3106 +%f s t.
8.3107 + (ALL x. IN x s --> IN (f x) t) &
8.3108 + (ALL x y. IN x s & IN y s --> f x = f y --> x = y)"
8.3109 +
8.3110 +lemma INJ_DEF: "ALL f s t.
8.3111 + INJ f s t =
8.3112 + ((ALL x. IN x s --> IN (f x) t) &
8.3113 + (ALL x y. IN x s & IN y s --> f x = f y --> x = y))"
8.3114 + by (import pred_set INJ_DEF)
8.3115 +
8.3116 +lemma INJ_ID: "ALL x. INJ (%x. x) x x"
8.3117 + by (import pred_set INJ_ID)
8.3118 +
8.3119 +lemma INJ_COMPOSE: "ALL x xa xb xc xd. INJ x xb xc & INJ xa xc xd --> INJ (xa o x) xb xd"
8.3120 + by (import pred_set INJ_COMPOSE)
8.3121 +
8.3122 +lemma INJ_EMPTY: "ALL x. All (INJ x EMPTY) & (ALL xa. INJ x xa EMPTY = (xa = EMPTY))"
8.3123 + by (import pred_set INJ_EMPTY)
8.3124 +
8.3125 +constdefs
8.3126 + SURJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"
8.3127 + "SURJ ==
8.3128 +%f s t.
8.3129 + (ALL x. IN x s --> IN (f x) t) &
8.3130 + (ALL x. IN x t --> (EX y. IN y s & f y = x))"
8.3131 +
8.3132 +lemma SURJ_DEF: "ALL f s t.
8.3133 + SURJ f s t =
8.3134 + ((ALL x. IN x s --> IN (f x) t) &
8.3135 + (ALL x. IN x t --> (EX y. IN y s & f y = x)))"
8.3136 + by (import pred_set SURJ_DEF)
8.3137 +
8.3138 +lemma SURJ_ID: "ALL x. SURJ (%x. x) x x"
8.3139 + by (import pred_set SURJ_ID)
8.3140 +
8.3141 +lemma SURJ_COMPOSE: "ALL x xa xb xc xd. SURJ x xb xc & SURJ xa xc xd --> SURJ (xa o x) xb xd"
8.3142 + by (import pred_set SURJ_COMPOSE)
8.3143 +
8.3144 +lemma SURJ_EMPTY: "ALL x.
8.3145 + (ALL xa. SURJ x EMPTY xa = (xa = EMPTY)) &
8.3146 + (ALL xa. SURJ x xa EMPTY = (xa = EMPTY))"
8.3147 + by (import pred_set SURJ_EMPTY)
8.3148 +
8.3149 +lemma IMAGE_SURJ: "ALL x xa xb. SURJ x xa xb = (IMAGE x xa = xb)"
8.3150 + by (import pred_set IMAGE_SURJ)
8.3151 +
8.3152 +constdefs
8.3153 + BIJ :: "('a => 'b) => ('a => bool) => ('b => bool) => bool"
8.3154 + "BIJ == %f s t. INJ f s t & SURJ f s t"
8.3155 +
8.3156 +lemma BIJ_DEF: "ALL f s t. BIJ f s t = (INJ f s t & SURJ f s t)"
8.3157 + by (import pred_set BIJ_DEF)
8.3158 +
8.3159 +lemma BIJ_ID: "ALL x. BIJ (%x. x) x x"
8.3160 + by (import pred_set BIJ_ID)
8.3161 +
8.3162 +lemma BIJ_EMPTY: "ALL x.
8.3163 + (ALL xa. BIJ x EMPTY xa = (xa = EMPTY)) &
8.3164 + (ALL xa. BIJ x xa EMPTY = (xa = EMPTY))"
8.3165 + by (import pred_set BIJ_EMPTY)
8.3166 +
8.3167 +lemma BIJ_COMPOSE: "ALL x xa xb xc xd. BIJ x xb xc & BIJ xa xc xd --> BIJ (xa o x) xb xd"
8.3168 + by (import pred_set BIJ_COMPOSE)
8.3169 +
8.3170 +consts
8.3171 + LINV :: "('a => 'b) => ('a => bool) => 'b => 'a"
8.3172 +
8.3173 +specification (LINV) LINV_DEF: "ALL f s t. INJ f s t --> (ALL x. IN x s --> LINV f s (f x) = x)"
8.3174 + by (import pred_set LINV_DEF)
8.3175 +
8.3176 +consts
8.3177 + RINV :: "('a => 'b) => ('a => bool) => 'b => 'a"
8.3178 +
8.3179 +specification (RINV) RINV_DEF: "ALL f s t. SURJ f s t --> (ALL x. IN x t --> f (RINV f s x) = x)"
8.3180 + by (import pred_set RINV_DEF)
8.3181 +
8.3182 +constdefs
8.3183 + FINITE :: "('a => bool) => bool"
8.3184 + "FINITE ==
8.3185 +%s. ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s"
8.3186 +
8.3187 +lemma FINITE_DEF: "ALL s.
8.3188 + FINITE s =
8.3189 + (ALL P. P EMPTY & (ALL s. P s --> (ALL e. P (INSERT e s))) --> P s)"
8.3190 + by (import pred_set FINITE_DEF)
8.3191 +
8.3192 +lemma FINITE_EMPTY: "FINITE EMPTY"
8.3193 + by (import pred_set FINITE_EMPTY)
8.3194 +
8.3195 +lemma FINITE_INDUCT: "ALL P.
8.3196 + P EMPTY &
8.3197 + (ALL s. FINITE s & P s --> (ALL e. ~ IN e s --> P (INSERT e s))) -->
8.3198 + (ALL s. FINITE s --> P s)"
8.3199 + by (import pred_set FINITE_INDUCT)
8.3200 +
8.3201 +lemma FINITE_INSERT: "ALL x s. FINITE (INSERT x s) = FINITE s"
8.3202 + by (import pred_set FINITE_INSERT)
8.3203 +
8.3204 +lemma FINITE_DELETE: "ALL x s. FINITE (DELETE s x) = FINITE s"
8.3205 + by (import pred_set FINITE_DELETE)
8.3206 +
8.3207 +lemma FINITE_UNION: "ALL s t. FINITE (pred_set.UNION s t) = (FINITE s & FINITE t)"
8.3208 + by (import pred_set FINITE_UNION)
8.3209 +
8.3210 +lemma INTER_FINITE: "ALL s. FINITE s --> (ALL t. FINITE (pred_set.INTER s t))"
8.3211 + by (import pred_set INTER_FINITE)
8.3212 +
8.3213 +lemma SUBSET_FINITE: "ALL s. FINITE s --> (ALL t. SUBSET t s --> FINITE t)"
8.3214 + by (import pred_set SUBSET_FINITE)
8.3215 +
8.3216 +lemma PSUBSET_FINITE: "ALL x. FINITE x --> (ALL xa. PSUBSET xa x --> FINITE xa)"
8.3217 + by (import pred_set PSUBSET_FINITE)
8.3218 +
8.3219 +lemma FINITE_DIFF: "ALL s. FINITE s --> (ALL t. FINITE (DIFF s t))"
8.3220 + by (import pred_set FINITE_DIFF)
8.3221 +
8.3222 +lemma FINITE_SING: "ALL x. FINITE (INSERT x EMPTY)"
8.3223 + by (import pred_set FINITE_SING)
8.3224 +
8.3225 +lemma SING_FINITE: "ALL x. SING x --> FINITE x"
8.3226 + by (import pred_set SING_FINITE)
8.3227 +
8.3228 +lemma IMAGE_FINITE: "ALL s. FINITE s --> (ALL f. FINITE (IMAGE f s))"
8.3229 + by (import pred_set IMAGE_FINITE)
8.3230 +
8.3231 +consts
8.3232 + CARD :: "('a => bool) => nat"
8.3233 +
8.3234 +specification (CARD) CARD_DEF: "(op &::bool => bool => bool)
8.3235 + ((op =::nat => nat => bool)
8.3236 + ((CARD::('a => bool) => nat) (EMPTY::'a => bool)) (0::nat))
8.3237 + ((All::(('a => bool) => bool) => bool)
8.3238 + (%s::'a => bool.
8.3239 + (op -->::bool => bool => bool) ((FINITE::('a => bool) => bool) s)
8.3240 + ((All::('a => bool) => bool)
8.3241 + (%x::'a.
8.3242 + (op =::nat => nat => bool)
8.3243 + ((CARD::('a => bool) => nat)
8.3244 + ((INSERT::'a => ('a => bool) => 'a => bool) x s))
8.3245 + ((If::bool => nat => nat => nat)
8.3246 + ((IN::'a => ('a => bool) => bool) x s)
8.3247 + ((CARD::('a => bool) => nat) s)
8.3248 + ((Suc::nat => nat) ((CARD::('a => bool) => nat) s)))))))"
8.3249 + by (import pred_set CARD_DEF)
8.3250 +
8.3251 +lemma CARD_EMPTY: "CARD EMPTY = 0"
8.3252 + by (import pred_set CARD_EMPTY)
8.3253 +
8.3254 +lemma CARD_INSERT: "ALL s.
8.3255 + FINITE s -->
8.3256 + (ALL x. CARD (INSERT x s) = (if IN x s then CARD s else Suc (CARD s)))"
8.3257 + by (import pred_set CARD_INSERT)
8.3258 +
8.3259 +lemma CARD_EQ_0: "ALL s. FINITE s --> (CARD s = 0) = (s = EMPTY)"
8.3260 + by (import pred_set CARD_EQ_0)
8.3261 +
8.3262 +lemma CARD_DELETE: "ALL s.
8.3263 + FINITE s -->
8.3264 + (ALL x. CARD (DELETE s x) = (if IN x s then CARD s - 1 else CARD s))"
8.3265 + by (import pred_set CARD_DELETE)
8.3266 +
8.3267 +lemma CARD_INTER_LESS_EQ: "ALL s. FINITE s --> (ALL t. CARD (pred_set.INTER s t) <= CARD s)"
8.3268 + by (import pred_set CARD_INTER_LESS_EQ)
8.3269 +
8.3270 +lemma CARD_UNION: "ALL s.
8.3271 + FINITE s -->
8.3272 + (ALL t.
8.3273 + FINITE t -->
8.3274 + CARD (pred_set.UNION s t) + CARD (pred_set.INTER s t) =
8.3275 + CARD s + CARD t)"
8.3276 + by (import pred_set CARD_UNION)
8.3277 +
8.3278 +lemma CARD_SUBSET: "ALL s. FINITE s --> (ALL t. SUBSET t s --> CARD t <= CARD s)"
8.3279 + by (import pred_set CARD_SUBSET)
8.3280 +
8.3281 +lemma CARD_PSUBSET: "ALL s. FINITE s --> (ALL t. PSUBSET t s --> CARD t < CARD s)"
8.3282 + by (import pred_set CARD_PSUBSET)
8.3283 +
8.3284 +lemma CARD_SING: "ALL x. CARD (INSERT x EMPTY) = 1"
8.3285 + by (import pred_set CARD_SING)
8.3286 +
8.3287 +lemma SING_IFF_CARD1: "ALL x. SING x = (CARD x = 1 & FINITE x)"
8.3288 + by (import pred_set SING_IFF_CARD1)
8.3289 +
8.3290 +lemma CARD_DIFF: "ALL t.
8.3291 + FINITE t -->
8.3292 + (ALL s.
8.3293 + FINITE s --> CARD (DIFF s t) = CARD s - CARD (pred_set.INTER s t))"
8.3294 + by (import pred_set CARD_DIFF)
8.3295 +
8.3296 +lemma LESS_CARD_DIFF: "ALL t.
8.3297 + FINITE t -->
8.3298 + (ALL s. FINITE s --> CARD t < CARD s --> 0 < CARD (DIFF s t))"
8.3299 + by (import pred_set LESS_CARD_DIFF)
8.3300 +
8.3301 +lemma FINITE_COMPLETE_INDUCTION: "ALL P.
8.3302 + (ALL x. (ALL y. PSUBSET y x --> P y) --> FINITE x --> P x) -->
8.3303 + (ALL x. FINITE x --> P x)"
8.3304 + by (import pred_set FINITE_COMPLETE_INDUCTION)
8.3305 +
8.3306 +constdefs
8.3307 + INFINITE :: "('a => bool) => bool"
8.3308 + "INFINITE == %s. ~ FINITE s"
8.3309 +
8.3310 +lemma INFINITE_DEF: "ALL s. INFINITE s = (~ FINITE s)"
8.3311 + by (import pred_set INFINITE_DEF)
8.3312 +
8.3313 +lemma NOT_IN_FINITE: "(op =::bool => bool => bool)
8.3314 + ((INFINITE::('a => bool) => bool) (pred_set.UNIV::'a => bool))
8.3315 + ((All::(('a => bool) => bool) => bool)
8.3316 + (%s::'a => bool.
8.3317 + (op -->::bool => bool => bool) ((FINITE::('a => bool) => bool) s)
8.3318 + ((Ex::('a => bool) => bool)
8.3319 + (%x::'a.
8.3320 + (Not::bool => bool) ((IN::'a => ('a => bool) => bool) x s)))))"
8.3321 + by (import pred_set NOT_IN_FINITE)
8.3322 +
8.3323 +lemma INFINITE_INHAB: "ALL x. INFINITE x --> (EX xa. IN xa x)"
8.3324 + by (import pred_set INFINITE_INHAB)
8.3325 +
8.3326 +lemma IMAGE_11_INFINITE: "ALL f.
8.3327 + (ALL x y. f x = f y --> x = y) -->
8.3328 + (ALL s. INFINITE s --> INFINITE (IMAGE f s))"
8.3329 + by (import pred_set IMAGE_11_INFINITE)
8.3330 +
8.3331 +lemma INFINITE_SUBSET: "ALL x. INFINITE x --> (ALL xa. SUBSET x xa --> INFINITE xa)"
8.3332 + by (import pred_set INFINITE_SUBSET)
8.3333 +
8.3334 +lemma IN_INFINITE_NOT_FINITE: "ALL x xa. INFINITE x & FINITE xa --> (EX xb. IN xb x & ~ IN xb xa)"
8.3335 + by (import pred_set IN_INFINITE_NOT_FINITE)
8.3336 +
8.3337 +lemma INFINITE_UNIV: "(op =::bool => bool => bool)
8.3338 + ((INFINITE::('a => bool) => bool) (pred_set.UNIV::'a => bool))
8.3339 + ((Ex::(('a => 'a) => bool) => bool)
8.3340 + (%f::'a => 'a.
8.3341 + (op &::bool => bool => bool)
8.3342 + ((All::('a => bool) => bool)
8.3343 + (%x::'a.
8.3344 + (All::('a => bool) => bool)
8.3345 + (%y::'a.
8.3346 + (op -->::bool => bool => bool)
8.3347 + ((op =::'a => 'a => bool) (f x) (f y))
8.3348 + ((op =::'a => 'a => bool) x y))))
8.3349 + ((Ex::('a => bool) => bool)
8.3350 + (%y::'a.
8.3351 + (All::('a => bool) => bool)
8.3352 + (%x::'a.
8.3353 + (Not::bool => bool)
8.3354 + ((op =::'a => 'a => bool) (f x) y))))))"
8.3355 + by (import pred_set INFINITE_UNIV)
8.3356 +
8.3357 +lemma FINITE_PSUBSET_INFINITE: "ALL x. INFINITE x = (ALL xa. FINITE xa --> SUBSET xa x --> PSUBSET xa x)"
8.3358 + by (import pred_set FINITE_PSUBSET_INFINITE)
8.3359 +
8.3360 +lemma FINITE_PSUBSET_UNIV: "(op =::bool => bool => bool)
8.3361 + ((INFINITE::('a => bool) => bool) (pred_set.UNIV::'a => bool))
8.3362 + ((All::(('a => bool) => bool) => bool)
8.3363 + (%s::'a => bool.
8.3364 + (op -->::bool => bool => bool) ((FINITE::('a => bool) => bool) s)
8.3365 + ((PSUBSET::('a => bool) => ('a => bool) => bool) s
8.3366 + (pred_set.UNIV::'a => bool))))"
8.3367 + by (import pred_set FINITE_PSUBSET_UNIV)
8.3368 +
8.3369 +lemma INFINITE_DIFF_FINITE: "ALL s t. INFINITE s & FINITE t --> DIFF s t ~= EMPTY"
8.3370 + by (import pred_set INFINITE_DIFF_FINITE)
8.3371 +
8.3372 +lemma FINITE_ISO_NUM: "ALL s.
8.3373 + FINITE s -->
8.3374 + (EX f. (ALL n m. n < CARD s & m < CARD s --> f n = f m --> n = m) &
8.3375 + s = GSPEC (%n. (f n, n < CARD s)))"
8.3376 + by (import pred_set FINITE_ISO_NUM)
8.3377 +
8.3378 +lemma FINITE_WEAK_ENUMERATE: "ALL x::'a => bool.
8.3379 + FINITE x =
8.3380 + (EX (f::nat => 'a) b::nat. ALL e::'a. IN e x = (EX n<b. e = f n))"
8.3381 + by (import pred_set FINITE_WEAK_ENUMERATE)
8.3382 +
8.3383 +constdefs
8.3384 + BIGUNION :: "(('a => bool) => bool) => 'a => bool"
8.3385 + "BIGUNION == %P. GSPEC (%x. (x, EX p. IN p P & IN x p))"
8.3386 +
8.3387 +lemma BIGUNION: "ALL P. BIGUNION P = GSPEC (%x. (x, EX p. IN p P & IN x p))"
8.3388 + by (import pred_set BIGUNION)
8.3389 +
8.3390 +lemma IN_BIGUNION: "ALL x xa. IN x (BIGUNION xa) = (EX s. IN x s & IN s xa)"
8.3391 + by (import pred_set IN_BIGUNION)
8.3392 +
8.3393 +lemma BIGUNION_EMPTY: "BIGUNION EMPTY = EMPTY"
8.3394 + by (import pred_set BIGUNION_EMPTY)
8.3395 +
8.3396 +lemma BIGUNION_SING: "ALL x. BIGUNION (INSERT x EMPTY) = x"
8.3397 + by (import pred_set BIGUNION_SING)
8.3398 +
8.3399 +lemma BIGUNION_UNION: "ALL x xa.
8.3400 + BIGUNION (pred_set.UNION x xa) =
8.3401 + pred_set.UNION (BIGUNION x) (BIGUNION xa)"
8.3402 + by (import pred_set BIGUNION_UNION)
8.3403 +
8.3404 +lemma DISJOINT_BIGUNION: "(ALL (s::('a => bool) => bool) t::'a => bool.
8.3405 + DISJOINT (BIGUNION s) t =
8.3406 + (ALL s'::'a => bool. IN s' s --> DISJOINT s' t)) &
8.3407 +(ALL (x::('a => bool) => bool) xa::'a => bool.
8.3408 + DISJOINT xa (BIGUNION x) =
8.3409 + (ALL xb::'a => bool. IN xb x --> DISJOINT xa xb))"
8.3410 + by (import pred_set DISJOINT_BIGUNION)
8.3411 +
8.3412 +lemma BIGUNION_INSERT: "ALL x xa. BIGUNION (INSERT x xa) = pred_set.UNION x (BIGUNION xa)"
8.3413 + by (import pred_set BIGUNION_INSERT)
8.3414 +
8.3415 +lemma BIGUNION_SUBSET: "ALL X P. SUBSET (BIGUNION P) X = (ALL Y. IN Y P --> SUBSET Y X)"
8.3416 + by (import pred_set BIGUNION_SUBSET)
8.3417 +
8.3418 +lemma FINITE_BIGUNION: "ALL x. FINITE x & (ALL s. IN s x --> FINITE s) --> FINITE (BIGUNION x)"
8.3419 + by (import pred_set FINITE_BIGUNION)
8.3420 +
8.3421 +constdefs
8.3422 + BIGINTER :: "(('a => bool) => bool) => 'a => bool"
8.3423 + "BIGINTER == %B. GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
8.3424 +
8.3425 +lemma BIGINTER: "ALL B. BIGINTER B = GSPEC (%x. (x, ALL P. IN P B --> IN x P))"
8.3426 + by (import pred_set BIGINTER)
8.3427 +
8.3428 +lemma IN_BIGINTER: "IN x (BIGINTER B) = (ALL P. IN P B --> IN x P)"
8.3429 + by (import pred_set IN_BIGINTER)
8.3430 +
8.3431 +lemma BIGINTER_INSERT: "ALL P B. BIGINTER (INSERT P B) = pred_set.INTER P (BIGINTER B)"
8.3432 + by (import pred_set BIGINTER_INSERT)
8.3433 +
8.3434 +lemma BIGINTER_EMPTY: "BIGINTER EMPTY = pred_set.UNIV"
8.3435 + by (import pred_set BIGINTER_EMPTY)
8.3436 +
8.3437 +lemma BIGINTER_INTER: "ALL x xa. BIGINTER (INSERT x (INSERT xa EMPTY)) = pred_set.INTER x xa"
8.3438 + by (import pred_set BIGINTER_INTER)
8.3439 +
8.3440 +lemma BIGINTER_SING: "ALL x. BIGINTER (INSERT x EMPTY) = x"
8.3441 + by (import pred_set BIGINTER_SING)
8.3442 +
8.3443 +lemma SUBSET_BIGINTER: "ALL X P. SUBSET X (BIGINTER P) = (ALL x. IN x P --> SUBSET X x)"
8.3444 + by (import pred_set SUBSET_BIGINTER)
8.3445 +
8.3446 +lemma DISJOINT_BIGINTER: "ALL x xa xb.
8.3447 + IN xa xb & DISJOINT xa x -->
8.3448 + DISJOINT x (BIGINTER xb) & DISJOINT (BIGINTER xb) x"
8.3449 + by (import pred_set DISJOINT_BIGINTER)
8.3450 +
8.3451 +constdefs
8.3452 + CROSS :: "('a => bool) => ('b => bool) => 'a * 'b => bool"
8.3453 + "CROSS == %P Q. GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
8.3454 +
8.3455 +lemma CROSS_DEF: "ALL P Q. CROSS P Q = GSPEC (%p. (p, IN (fst p) P & IN (snd p) Q))"
8.3456 + by (import pred_set CROSS_DEF)
8.3457 +
8.3458 +lemma IN_CROSS: "ALL x xa xb. IN xb (CROSS x xa) = (IN (fst xb) x & IN (snd xb) xa)"
8.3459 + by (import pred_set IN_CROSS)
8.3460 +
8.3461 +lemma CROSS_EMPTY: "ALL x. CROSS x EMPTY = EMPTY & CROSS EMPTY x = EMPTY"
8.3462 + by (import pred_set CROSS_EMPTY)
8.3463 +
8.3464 +lemma CROSS_INSERT_LEFT: "ALL x xa xb.
8.3465 + CROSS (INSERT xb x) xa =
8.3466 + pred_set.UNION (CROSS (INSERT xb EMPTY) xa) (CROSS x xa)"
8.3467 + by (import pred_set CROSS_INSERT_LEFT)
8.3468 +
8.3469 +lemma CROSS_INSERT_RIGHT: "ALL x xa xb.
8.3470 + CROSS x (INSERT xb xa) =
8.3471 + pred_set.UNION (CROSS x (INSERT xb EMPTY)) (CROSS x xa)"
8.3472 + by (import pred_set CROSS_INSERT_RIGHT)
8.3473 +
8.3474 +lemma FINITE_CROSS: "ALL x xa. FINITE x & FINITE xa --> FINITE (CROSS x xa)"
8.3475 + by (import pred_set FINITE_CROSS)
8.3476 +
8.3477 +lemma CROSS_SINGS: "ALL x xa. CROSS (INSERT x EMPTY) (INSERT xa EMPTY) = INSERT (x, xa) EMPTY"
8.3478 + by (import pred_set CROSS_SINGS)
8.3479 +
8.3480 +lemma CARD_SING_CROSS: "ALL x s. FINITE s --> CARD (CROSS (INSERT x EMPTY) s) = CARD s"
8.3481 + by (import pred_set CARD_SING_CROSS)
8.3482 +
8.3483 +lemma CARD_CROSS: "ALL x xa. FINITE x & FINITE xa --> CARD (CROSS x xa) = CARD x * CARD xa"
8.3484 + by (import pred_set CARD_CROSS)
8.3485 +
8.3486 +lemma CROSS_SUBSET: "ALL x xa xb xc.
8.3487 + SUBSET (CROSS xb xc) (CROSS x xa) =
8.3488 + (xb = EMPTY | xc = EMPTY | SUBSET xb x & SUBSET xc xa)"
8.3489 + by (import pred_set CROSS_SUBSET)
8.3490 +
8.3491 +lemma FINITE_CROSS_EQ: "ALL P Q. FINITE (CROSS P Q) = (P = EMPTY | Q = EMPTY | FINITE P & FINITE Q)"
8.3492 + by (import pred_set FINITE_CROSS_EQ)
8.3493 +
8.3494 +constdefs
8.3495 + COMPL :: "('a => bool) => 'a => bool"
8.3496 + "COMPL == DIFF pred_set.UNIV"
8.3497 +
8.3498 +lemma COMPL_DEF: "ALL P. COMPL P = DIFF pred_set.UNIV P"
8.3499 + by (import pred_set COMPL_DEF)
8.3500 +
8.3501 +lemma IN_COMPL: "ALL x xa. IN x (COMPL xa) = (~ IN x xa)"
8.3502 + by (import pred_set IN_COMPL)
8.3503 +
8.3504 +lemma COMPL_COMPL: "ALL x. COMPL (COMPL x) = x"
8.3505 + by (import pred_set COMPL_COMPL)
8.3506 +
8.3507 +lemma COMPL_CLAUSES: "ALL x.
8.3508 + pred_set.INTER (COMPL x) x = EMPTY &
8.3509 + pred_set.UNION (COMPL x) x = pred_set.UNIV"
8.3510 + by (import pred_set COMPL_CLAUSES)
8.3511 +
8.3512 +lemma COMPL_SPLITS: "ALL x xa.
8.3513 + pred_set.UNION (pred_set.INTER x xa) (pred_set.INTER (COMPL x) xa) = xa"
8.3514 + by (import pred_set COMPL_SPLITS)
8.3515 +
8.3516 +lemma INTER_UNION_COMPL: "ALL x xa. pred_set.INTER x xa = COMPL (pred_set.UNION (COMPL x) (COMPL xa))"
8.3517 + by (import pred_set INTER_UNION_COMPL)
8.3518 +
8.3519 +lemma COMPL_EMPTY: "COMPL EMPTY = pred_set.UNIV"
8.3520 + by (import pred_set COMPL_EMPTY)
8.3521 +
8.3522 +consts
8.3523 + count :: "nat => nat => bool"
8.3524 +
8.3525 +defs
8.3526 + count_primdef: "count == %n. GSPEC (%m. (m, m < n))"
8.3527 +
8.3528 +lemma count_def: "ALL n. count n = GSPEC (%m. (m, m < n))"
8.3529 + by (import pred_set count_def)
8.3530 +
8.3531 +lemma IN_COUNT: "ALL m n. IN m (count n) = (m < n)"
8.3532 + by (import pred_set IN_COUNT)
8.3533 +
8.3534 +lemma COUNT_ZERO: "count 0 = EMPTY"
8.3535 + by (import pred_set COUNT_ZERO)
8.3536 +
8.3537 +lemma COUNT_SUC: "ALL n. count (Suc n) = INSERT n (count n)"
8.3538 + by (import pred_set COUNT_SUC)
8.3539 +
8.3540 +lemma FINITE_COUNT: "ALL n. FINITE (count n)"
8.3541 + by (import pred_set FINITE_COUNT)
8.3542 +
8.3543 +lemma CARD_COUNT: "ALL n. CARD (count n) = n"
8.3544 + by (import pred_set CARD_COUNT)
8.3545 +
8.3546 +constdefs
8.3547 + ITSET_tupled :: "('a => 'b => 'b) => ('a => bool) * 'b => 'b"
8.3548 + "ITSET_tupled ==
8.3549 +%f. WFREC
8.3550 + (SOME R.
8.3551 + WF R &
8.3552 + (ALL b s.
8.3553 + FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
8.3554 + (%ITSET_tupled (v, v1).
8.3555 + if FINITE v
8.3556 + then if v = EMPTY then v1
8.3557 + else ITSET_tupled (REST v, f (CHOICE v) v1)
8.3558 + else ARB)"
8.3559 +
8.3560 +lemma ITSET_tupled_primitive_def: "ALL f.
8.3561 + ITSET_tupled f =
8.3562 + WFREC
8.3563 + (SOME R.
8.3564 + WF R &
8.3565 + (ALL b s.
8.3566 + FINITE s & s ~= EMPTY --> R (REST s, f (CHOICE s) b) (s, b)))
8.3567 + (%ITSET_tupled (v, v1).
8.3568 + if FINITE v
8.3569 + then if v = EMPTY then v1
8.3570 + else ITSET_tupled (REST v, f (CHOICE v) v1)
8.3571 + else ARB)"
8.3572 + by (import pred_set ITSET_tupled_primitive_def)
8.3573 +
8.3574 +constdefs
8.3575 + ITSET :: "('a => 'b => 'b) => ('a => bool) => 'b => 'b"
8.3576 + "ITSET == %f x x1. ITSET_tupled f (x, x1)"
8.3577 +
8.3578 +lemma ITSET_curried_def: "ALL f x x1. ITSET f x x1 = ITSET_tupled f (x, x1)"
8.3579 + by (import pred_set ITSET_curried_def)
8.3580 +
8.3581 +lemma ITSET_IND: "ALL P.
8.3582 + (ALL s b.
8.3583 + (FINITE s & s ~= EMPTY --> P (REST s) (f (CHOICE s) b)) -->
8.3584 + P s b) -->
8.3585 + (ALL v. All (P v))"
8.3586 + by (import pred_set ITSET_IND)
8.3587 +
8.3588 +lemma ITSET_THM: "ALL s f b.
8.3589 + FINITE s -->
8.3590 + ITSET f s b =
8.3591 + (if s = EMPTY then b else ITSET f (REST s) (f (CHOICE s) b))"
8.3592 + by (import pred_set ITSET_THM)
8.3593 +
8.3594 +lemma ITSET_EMPTY: "ALL x xa. ITSET x EMPTY xa = xa"
8.3595 + by (import pred_set ITSET_EMPTY)
8.3596 +
8.3597 +;end_setup
8.3598 +
8.3599 +;setup_theory operator
8.3600 +
8.3601 +constdefs
8.3602 + ASSOC :: "('a => 'a => 'a) => bool"
8.3603 + "ASSOC == %f. ALL x y z. f x (f y z) = f (f x y) z"
8.3604 +
8.3605 +lemma ASSOC_DEF: "ALL f. ASSOC f = (ALL x y z. f x (f y z) = f (f x y) z)"
8.3606 + by (import operator ASSOC_DEF)
8.3607 +
8.3608 +constdefs
8.3609 + COMM :: "('a => 'a => 'b) => bool"
8.3610 + "COMM == %f. ALL x y. f x y = f y x"
8.3611 +
8.3612 +lemma COMM_DEF: "ALL f. COMM f = (ALL x y. f x y = f y x)"
8.3613 + by (import operator COMM_DEF)
8.3614 +
8.3615 +constdefs
8.3616 + FCOMM :: "('a => 'b => 'a) => ('c => 'a => 'a) => bool"
8.3617 + "FCOMM == %f g. ALL x y z. g x (f y z) = f (g x y) z"
8.3618 +
8.3619 +lemma FCOMM_DEF: "ALL f g. FCOMM f g = (ALL x y z. g x (f y z) = f (g x y) z)"
8.3620 + by (import operator FCOMM_DEF)
8.3621 +
8.3622 +constdefs
8.3623 + RIGHT_ID :: "('a => 'b => 'a) => 'b => bool"
8.3624 + "RIGHT_ID == %f e. ALL x. f x e = x"
8.3625 +
8.3626 +lemma RIGHT_ID_DEF: "ALL f e. RIGHT_ID f e = (ALL x. f x e = x)"
8.3627 + by (import operator RIGHT_ID_DEF)
8.3628 +
8.3629 +constdefs
8.3630 + LEFT_ID :: "('a => 'b => 'b) => 'a => bool"
8.3631 + "LEFT_ID == %f e. ALL x. f e x = x"
8.3632 +
8.3633 +lemma LEFT_ID_DEF: "ALL f e. LEFT_ID f e = (ALL x. f e x = x)"
8.3634 + by (import operator LEFT_ID_DEF)
8.3635 +
8.3636 +constdefs
8.3637 + MONOID :: "('a => 'a => 'a) => 'a => bool"
8.3638 + "MONOID == %f e. ASSOC f & RIGHT_ID f e & LEFT_ID f e"
8.3639 +
8.3640 +lemma MONOID_DEF: "ALL f e. MONOID f e = (ASSOC f & RIGHT_ID f e & LEFT_ID f e)"
8.3641 + by (import operator MONOID_DEF)
8.3642 +
8.3643 +lemma ASSOC_CONJ: "ASSOC op &"
8.3644 + by (import operator ASSOC_CONJ)
8.3645 +
8.3646 +lemma ASSOC_DISJ: "ASSOC op |"
8.3647 + by (import operator ASSOC_DISJ)
8.3648 +
8.3649 +lemma FCOMM_ASSOC: "ALL x. FCOMM x x = ASSOC x"
8.3650 + by (import operator FCOMM_ASSOC)
8.3651 +
8.3652 +lemma MONOID_CONJ_T: "MONOID op & True"
8.3653 + by (import operator MONOID_CONJ_T)
8.3654 +
8.3655 +lemma MONOID_DISJ_F: "MONOID op | False"
8.3656 + by (import operator MONOID_DISJ_F)
8.3657 +
8.3658 +;end_setup
8.3659 +
8.3660 +;setup_theory rich_list
8.3661 +
8.3662 +consts
8.3663 + SNOC :: "'a => 'a list => 'a list"
8.3664 +
8.3665 +specification (SNOC) SNOC: "(ALL x::'a. SNOC x [] = [x]) &
8.3666 +(ALL (x::'a) (x'::'a) l::'a list. SNOC x (x' # l) = x' # SNOC x l)"
8.3667 + by (import rich_list SNOC)
8.3668 +
8.3669 +consts
8.3670 + SCANL :: "('b => 'a => 'b) => 'b => 'a list => 'b list"
8.3671 +
8.3672 +specification (SCANL) SCANL: "(ALL (f::'b => 'a => 'b) e::'b. SCANL f e [] = [e]) &
8.3673 +(ALL (f::'b => 'a => 'b) (e::'b) (x::'a) l::'a list.
8.3674 + SCANL f e (x # l) = e # SCANL f (f e x) l)"
8.3675 + by (import rich_list SCANL)
8.3676 +
8.3677 +consts
8.3678 + SCANR :: "('a => 'b => 'b) => 'b => 'a list => 'b list"
8.3679 +
8.3680 +specification (SCANR) SCANR: "(ALL (f::'a => 'b => 'b) e::'b. SCANR f e [] = [e]) &
8.3681 +(ALL (f::'a => 'b => 'b) (e::'b) (x::'a) l::'a list.
8.3682 + SCANR f e (x # l) = f x (hd (SCANR f e l)) # SCANR f e l)"
8.3683 + by (import rich_list SCANR)
8.3684 +
8.3685 +lemma IS_EL_DEF: "ALL x l. x mem l = list_exists (op = x) l"
8.3686 + by (import rich_list IS_EL_DEF)
8.3687 +
8.3688 +constdefs
8.3689 + AND_EL :: "bool list => bool"
8.3690 + "AND_EL == list_all I"
8.3691 +
8.3692 +lemma AND_EL_DEF: "AND_EL = list_all I"
8.3693 + by (import rich_list AND_EL_DEF)
8.3694 +
8.3695 +constdefs
8.3696 + OR_EL :: "bool list => bool"
8.3697 + "OR_EL == list_exists I"
8.3698 +
8.3699 +lemma OR_EL_DEF: "OR_EL = list_exists I"
8.3700 + by (import rich_list OR_EL_DEF)
8.3701 +
8.3702 +consts
8.3703 + FIRSTN :: "nat => 'a list => 'a list"
8.3704 +
8.3705 +specification (FIRSTN) FIRSTN: "(ALL l::'a list. FIRSTN (0::nat) l = []) &
8.3706 +(ALL (n::nat) (x::'a) l::'a list. FIRSTN (Suc n) (x # l) = x # FIRSTN n l)"
8.3707 + by (import rich_list FIRSTN)
8.3708 +
8.3709 +consts
8.3710 + BUTFIRSTN :: "nat => 'a list => 'a list"
8.3711 +
8.3712 +specification (BUTFIRSTN) BUTFIRSTN: "(ALL l::'a list. BUTFIRSTN (0::nat) l = l) &
8.3713 +(ALL (n::nat) (x::'a) l::'a list. BUTFIRSTN (Suc n) (x # l) = BUTFIRSTN n l)"
8.3714 + by (import rich_list BUTFIRSTN)
8.3715 +
8.3716 +consts
8.3717 + SEG :: "nat => nat => 'a list => 'a list"
8.3718 +
8.3719 +specification (SEG) SEG: "(ALL (k::nat) l::'a list. SEG (0::nat) k l = []) &
8.3720 +(ALL (m::nat) (x::'a) l::'a list.
8.3721 + SEG (Suc m) (0::nat) (x # l) = x # SEG m (0::nat) l) &
8.3722 +(ALL (m::nat) (k::nat) (x::'a) l::'a list.
8.3723 + SEG (Suc m) (Suc k) (x # l) = SEG (Suc m) k l)"
8.3724 + by (import rich_list SEG)
8.3725 +
8.3726 +lemma LAST: "ALL x l. last (SNOC x l) = x"
8.3727 + by (import rich_list LAST)
8.3728 +
8.3729 +lemma BUTLAST: "ALL x l. butlast (SNOC x l) = l"
8.3730 + by (import rich_list BUTLAST)
8.3731 +
8.3732 +consts
8.3733 + LASTN :: "nat => 'a list => 'a list"
8.3734 +
8.3735 +specification (LASTN) LASTN: "(ALL l::'a list. LASTN (0::nat) l = []) &
8.3736 +(ALL (n::nat) (x::'a) l::'a list.
8.3737 + LASTN (Suc n) (SNOC x l) = SNOC x (LASTN n l))"
8.3738 + by (import rich_list LASTN)
8.3739 +
8.3740 +consts
8.3741 + BUTLASTN :: "nat => 'a list => 'a list"
8.3742 +
8.3743 +specification (BUTLASTN) BUTLASTN: "(ALL l::'a list. BUTLASTN (0::nat) l = l) &
8.3744 +(ALL (n::nat) (x::'a) l::'a list.
8.3745 + BUTLASTN (Suc n) (SNOC x l) = BUTLASTN n l)"
8.3746 + by (import rich_list BUTLASTN)
8.3747 +
8.3748 +lemma EL: "(ALL x::'a list. EL (0::nat) x = hd x) &
8.3749 +(ALL (x::nat) xa::'a list. EL (Suc x) xa = EL x (tl xa))"
8.3750 + by (import rich_list EL)
8.3751 +
8.3752 +consts
8.3753 + ELL :: "nat => 'a list => 'a"
8.3754 +
8.3755 +specification (ELL) ELL: "(ALL l::'a list. ELL (0::nat) l = last l) &
8.3756 +(ALL (n::nat) l::'a list. ELL (Suc n) l = ELL n (butlast l))"
8.3757 + by (import rich_list ELL)
8.3758 +
8.3759 +consts
8.3760 + IS_PREFIX :: "'a list => 'a list => bool"
8.3761 +
8.3762 +specification (IS_PREFIX) IS_PREFIX: "(ALL l::'a list. IS_PREFIX l [] = True) &
8.3763 +(ALL (x::'a) l::'a list. IS_PREFIX [] (x # l) = False) &
8.3764 +(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
8.3765 + IS_PREFIX (x1 # l1) (x2 # l2) = (x1 = x2 & IS_PREFIX l1 l2))"
8.3766 + by (import rich_list IS_PREFIX)
8.3767 +
8.3768 +lemma SNOC_APPEND: "ALL x l. SNOC x l = l @ [x]"
8.3769 + by (import rich_list SNOC_APPEND)
8.3770 +
8.3771 +lemma REVERSE: "rev [] = [] & (ALL (x::'a) xa::'a list. rev (x # xa) = SNOC x (rev xa))"
8.3772 + by (import rich_list REVERSE)
8.3773 +
8.3774 +lemma REVERSE_SNOC: "ALL x l. rev (SNOC x l) = x # rev l"
8.3775 + by (import rich_list REVERSE_SNOC)
8.3776 +
8.3777 +lemma SNOC_Axiom: "ALL (e::'b) f::'a => 'a list => 'b => 'b.
8.3778 + EX x::'a list => 'b.
8.3779 + x [] = e & (ALL (xa::'a) l::'a list. x (SNOC xa l) = f xa l (x l))"
8.3780 + by (import rich_list SNOC_Axiom)
8.3781 +
8.3782 +consts
8.3783 + IS_SUFFIX :: "'a list => 'a list => bool"
8.3784 +
8.3785 +specification (IS_SUFFIX) IS_SUFFIX: "(ALL l::'a list. IS_SUFFIX l [] = True) &
8.3786 +(ALL (x::'a) l::'a list. IS_SUFFIX [] (SNOC x l) = False) &
8.3787 +(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
8.3788 + IS_SUFFIX (SNOC x1 l1) (SNOC x2 l2) = (x1 = x2 & IS_SUFFIX l1 l2))"
8.3789 + by (import rich_list IS_SUFFIX)
8.3790 +
8.3791 +consts
8.3792 + IS_SUBLIST :: "'a list => 'a list => bool"
8.3793 +
8.3794 +specification (IS_SUBLIST) IS_SUBLIST: "(ALL l::'a list. IS_SUBLIST l [] = True) &
8.3795 +(ALL (x::'a) l::'a list. IS_SUBLIST [] (x # l) = False) &
8.3796 +(ALL (x1::'a) (l1::'a list) (x2::'a) l2::'a list.
8.3797 + IS_SUBLIST (x1 # l1) (x2 # l2) =
8.3798 + (x1 = x2 & IS_PREFIX l1 l2 | IS_SUBLIST l1 (x2 # l2)))"
8.3799 + by (import rich_list IS_SUBLIST)
8.3800 +
8.3801 +consts
8.3802 + SPLITP :: "('a => bool) => 'a list => 'a list * 'a list"
8.3803 +
8.3804 +specification (SPLITP) SPLITP: "(ALL P::'a => bool. SPLITP P [] = ([], [])) &
8.3805 +(ALL (P::'a => bool) (x::'a) l::'a list.
8.3806 + SPLITP P (x # l) =
8.3807 + (if P x then ([], x # l) else (x # fst (SPLITP P l), snd (SPLITP P l))))"
8.3808 + by (import rich_list SPLITP)
8.3809 +
8.3810 +constdefs
8.3811 + PREFIX :: "('a => bool) => 'a list => 'a list"
8.3812 + "PREFIX == %P l. fst (SPLITP (Not o P) l)"
8.3813 +
8.3814 +lemma PREFIX_DEF: "ALL P l. PREFIX P l = fst (SPLITP (Not o P) l)"
8.3815 + by (import rich_list PREFIX_DEF)
8.3816 +
8.3817 +constdefs
8.3818 + SUFFIX :: "('a => bool) => 'a list => 'a list"
8.3819 + "SUFFIX == %P. foldl (%l' x. if P x then SNOC x l' else []) []"
8.3820 +
8.3821 +lemma SUFFIX_DEF: "ALL P l. SUFFIX P l = foldl (%l' x. if P x then SNOC x l' else []) [] l"
8.3822 + by (import rich_list SUFFIX_DEF)
8.3823 +
8.3824 +constdefs
8.3825 + UNZIP_FST :: "('a * 'b) list => 'a list"
8.3826 + "UNZIP_FST == %l. fst (unzip l)"
8.3827 +
8.3828 +lemma UNZIP_FST_DEF: "ALL l. UNZIP_FST l = fst (unzip l)"
8.3829 + by (import rich_list UNZIP_FST_DEF)
8.3830 +
8.3831 +constdefs
8.3832 + UNZIP_SND :: "('a * 'b) list => 'b list"
8.3833 + "UNZIP_SND == %l. snd (unzip l)"
8.3834 +
8.3835 +lemma UNZIP_SND_DEF: "ALL l. UNZIP_SND l = snd (unzip l)"
8.3836 + by (import rich_list UNZIP_SND_DEF)
8.3837 +
8.3838 +consts
8.3839 + GENLIST :: "(nat => 'a) => nat => 'a list"
8.3840 +
8.3841 +specification (GENLIST) GENLIST: "(ALL f::nat => 'a. GENLIST f (0::nat) = []) &
8.3842 +(ALL (f::nat => 'a) n::nat. GENLIST f (Suc n) = SNOC (f n) (GENLIST f n))"
8.3843 + by (import rich_list GENLIST)
8.3844 +
8.3845 +consts
8.3846 + REPLICATE :: "nat => 'a => 'a list"
8.3847 +
8.3848 +specification (REPLICATE) REPLICATE: "(ALL x::'a. REPLICATE (0::nat) x = []) &
8.3849 +(ALL (n::nat) x::'a. REPLICATE (Suc n) x = x # REPLICATE n x)"
8.3850 + by (import rich_list REPLICATE)
8.3851 +
8.3852 +lemma LENGTH_MAP2: "ALL l1 l2.
8.3853 + length l1 = length l2 -->
8.3854 + (ALL f.
8.3855 + length (map2 f l1 l2) = length l1 &
8.3856 + length (map2 f l1 l2) = length l2)"
8.3857 + by (import rich_list LENGTH_MAP2)
8.3858 +
8.3859 +lemma NULL_EQ_NIL: "ALL l. null l = (l = [])"
8.3860 + by (import rich_list NULL_EQ_NIL)
8.3861 +
8.3862 +lemma LENGTH_EQ: "ALL x y. x = y --> length x = length y"
8.3863 + by (import rich_list LENGTH_EQ)
8.3864 +
8.3865 +lemma LENGTH_NOT_NULL: "ALL l. (0 < length l) = (~ null l)"
8.3866 + by (import rich_list LENGTH_NOT_NULL)
8.3867 +
8.3868 +lemma SNOC_INDUCT: "ALL P. P [] & (ALL l. P l --> (ALL x. P (SNOC x l))) --> All P"
8.3869 + by (import rich_list SNOC_INDUCT)
8.3870 +
8.3871 +lemma SNOC_CASES: "ALL x'. x' = [] | (EX x l. x' = SNOC x l)"
8.3872 + by (import rich_list SNOC_CASES)
8.3873 +
8.3874 +lemma LENGTH_SNOC: "ALL x l. length (SNOC x l) = Suc (length l)"
8.3875 + by (import rich_list LENGTH_SNOC)
8.3876 +
8.3877 +lemma NOT_NIL_SNOC: "ALL x xa. [] ~= SNOC x xa"
8.3878 + by (import rich_list NOT_NIL_SNOC)
8.3879 +
8.3880 +lemma NOT_SNOC_NIL: "ALL x xa. SNOC x xa ~= []"
8.3881 + by (import rich_list NOT_SNOC_NIL)
8.3882 +
8.3883 +lemma SNOC_11: "ALL x l x' l'. (SNOC x l = SNOC x' l') = (x = x' & l = l')"
8.3884 + by (import rich_list SNOC_11)
8.3885 +
8.3886 +lemma SNOC_EQ_LENGTH_EQ: "ALL x1 l1 x2 l2. SNOC x1 l1 = SNOC x2 l2 --> length l1 = length l2"
8.3887 + by (import rich_list SNOC_EQ_LENGTH_EQ)
8.3888 +
8.3889 +lemma SNOC_REVERSE_CONS: "ALL x xa. SNOC x xa = rev (x # rev xa)"
8.3890 + by (import rich_list SNOC_REVERSE_CONS)
8.3891 +
8.3892 +lemma MAP_SNOC: "ALL x xa xb. map x (SNOC xa xb) = SNOC (x xa) (map x xb)"
8.3893 + by (import rich_list MAP_SNOC)
8.3894 +
8.3895 +lemma FOLDR_SNOC: "ALL f e x l. foldr f (SNOC x l) e = foldr f l (f x e)"
8.3896 + by (import rich_list FOLDR_SNOC)
8.3897 +
8.3898 +lemma FOLDL_SNOC: "ALL (f::'b => 'a => 'b) (e::'b) (x::'a) l::'a list.
8.3899 + foldl f e (SNOC x l) = f (foldl f e l) x"
8.3900 + by (import rich_list FOLDL_SNOC)
8.3901 +
8.3902 +lemma FOLDR_FOLDL: "ALL f e. MONOID f e --> (ALL l. foldr f l e = foldl f e l)"
8.3903 + by (import rich_list FOLDR_FOLDL)
8.3904 +
8.3905 +lemma LENGTH_FOLDR: "ALL l. length l = foldr (%x. Suc) l 0"
8.3906 + by (import rich_list LENGTH_FOLDR)
8.3907 +
8.3908 +lemma LENGTH_FOLDL: "ALL l. length l = foldl (%l' x. Suc l') 0 l"
8.3909 + by (import rich_list LENGTH_FOLDL)
8.3910 +
8.3911 +lemma MAP_FOLDR: "ALL f l. map f l = foldr (%x. op # (f x)) l []"
8.3912 + by (import rich_list MAP_FOLDR)
8.3913 +
8.3914 +lemma MAP_FOLDL: "ALL f l. map f l = foldl (%l' x. SNOC (f x) l') [] l"
8.3915 + by (import rich_list MAP_FOLDL)
8.3916 +
8.3917 +lemma MAP_o: "ALL (f::'b => 'c) g::'a => 'b. map (f o g) = map f o map g"
8.3918 + by (import rich_list MAP_o)
8.3919 +
8.3920 +lemma FILTER_FOLDR: "ALL P l. filter P l = foldr (%x l'. if P x then x # l' else l') l []"
8.3921 + by (import rich_list FILTER_FOLDR)
8.3922 +
8.3923 +lemma FILTER_SNOC: "ALL P x l.
8.3924 + filter P (SNOC x l) = (if P x then SNOC x (filter P l) else filter P l)"
8.3925 + by (import rich_list FILTER_SNOC)
8.3926 +
8.3927 +lemma FILTER_FOLDL: "ALL P l. filter P l = foldl (%l' x. if P x then SNOC x l' else l') [] l"
8.3928 + by (import rich_list FILTER_FOLDL)
8.3929 +
8.3930 +lemma FILTER_COMM: "ALL f1 f2 l. filter f1 (filter f2 l) = filter f2 (filter f1 l)"
8.3931 + by (import rich_list FILTER_COMM)
8.3932 +
8.3933 +lemma FILTER_IDEM: "ALL f l. filter f (filter f l) = filter f l"
8.3934 + by (import rich_list FILTER_IDEM)
8.3935 +
8.3936 +lemma FILTER_MAP: "ALL (f1::'b => bool) (f2::'a => 'b) l::'a list.
8.3937 + filter f1 (map f2 l) = map f2 (filter (f1 o f2) l)"
8.3938 + by (import rich_list FILTER_MAP)
8.3939 +
8.3940 +lemma LENGTH_SEG: "ALL n k l. n + k <= length l --> length (SEG n k l) = n"
8.3941 + by (import rich_list LENGTH_SEG)
8.3942 +
8.3943 +lemma APPEND_NIL: "(ALL l::'a list. l @ [] = l) & (ALL x::'a list. [] @ x = x)"
8.3944 + by (import rich_list APPEND_NIL)
8.3945 +
8.3946 +lemma APPEND_SNOC: "ALL l1 x l2. l1 @ SNOC x l2 = SNOC x (l1 @ l2)"
8.3947 + by (import rich_list APPEND_SNOC)
8.3948 +
8.3949 +lemma APPEND_FOLDR: "ALL l1 l2. l1 @ l2 = foldr op # l1 l2"
8.3950 + by (import rich_list APPEND_FOLDR)
8.3951 +
8.3952 +lemma APPEND_FOLDL: "ALL l1 l2. l1 @ l2 = foldl (%l' x. SNOC x l') l1 l2"
8.3953 + by (import rich_list APPEND_FOLDL)
8.3954 +
8.3955 +lemma CONS_APPEND: "ALL x l. x # l = [x] @ l"
8.3956 + by (import rich_list CONS_APPEND)
8.3957 +
8.3958 +lemma ASSOC_APPEND: "ASSOC op @"
8.3959 + by (import rich_list ASSOC_APPEND)
8.3960 +
8.3961 +lemma MONOID_APPEND_NIL: "MONOID op @ []"
8.3962 + by (import rich_list MONOID_APPEND_NIL)
8.3963 +
8.3964 +lemma APPEND_LENGTH_EQ: "ALL l1 l1'.
8.3965 + length l1 = length l1' -->
8.3966 + (ALL l2 l2'.
8.3967 + length l2 = length l2' -->
8.3968 + (l1 @ l2 = l1' @ l2') = (l1 = l1' & l2 = l2'))"
8.3969 + by (import rich_list APPEND_LENGTH_EQ)
8.3970 +
8.3971 +lemma FLAT_SNOC: "ALL x l. concat (SNOC x l) = concat l @ x"
8.3972 + by (import rich_list FLAT_SNOC)
8.3973 +
8.3974 +lemma FLAT_FOLDR: "ALL l. concat l = foldr op @ l []"
8.3975 + by (import rich_list FLAT_FOLDR)
8.3976 +
8.3977 +lemma FLAT_FOLDL: "ALL l. concat l = foldl op @ [] l"
8.3978 + by (import rich_list FLAT_FOLDL)
8.3979 +
8.3980 +lemma LENGTH_FLAT: "ALL l. length (concat l) = sum (map size l)"
8.3981 + by (import rich_list LENGTH_FLAT)
8.3982 +
8.3983 +lemma REVERSE_FOLDR: "ALL l. rev l = foldr SNOC l []"
8.3984 + by (import rich_list REVERSE_FOLDR)
8.3985 +
8.3986 +lemma REVERSE_FOLDL: "ALL l. rev l = foldl (%l' x. x # l') [] l"
8.3987 + by (import rich_list REVERSE_FOLDL)
8.3988 +
8.3989 +lemma ALL_EL_SNOC: "ALL P x l. list_all P (SNOC x l) = (list_all P l & P x)"
8.3990 + by (import rich_list ALL_EL_SNOC)
8.3991 +
8.3992 +lemma ALL_EL_MAP: "ALL (P::'b => bool) (f::'a => 'b) l::'a list.
8.3993 + list_all P (map f l) = list_all (P o f) l"
8.3994 + by (import rich_list ALL_EL_MAP)
8.3995 +
8.3996 +lemma SOME_EL_SNOC: "ALL P x l. list_exists P (SNOC x l) = (P x | list_exists P l)"
8.3997 + by (import rich_list SOME_EL_SNOC)
8.3998 +
8.3999 +lemma IS_EL_SNOC: "ALL y x l. y mem SNOC x l = (y = x | y mem l)"
8.4000 + by (import rich_list IS_EL_SNOC)
8.4001 +
8.4002 +lemma SUM_SNOC: "ALL x l. sum (SNOC x l) = sum l + x"
8.4003 + by (import rich_list SUM_SNOC)
8.4004 +
8.4005 +lemma SUM_FOLDL: "ALL l. sum l = foldl op + 0 l"
8.4006 + by (import rich_list SUM_FOLDL)
8.4007 +
8.4008 +lemma IS_PREFIX_APPEND: "ALL l1 l2. IS_PREFIX l1 l2 = (EX l. l1 = l2 @ l)"
8.4009 + by (import rich_list IS_PREFIX_APPEND)
8.4010 +
8.4011 +lemma IS_SUFFIX_APPEND: "ALL l1 l2. IS_SUFFIX l1 l2 = (EX l. l1 = l @ l2)"
8.4012 + by (import rich_list IS_SUFFIX_APPEND)
8.4013 +
8.4014 +lemma IS_SUBLIST_APPEND: "ALL l1 l2. IS_SUBLIST l1 l2 = (EX l l'. l1 = l @ l2 @ l')"
8.4015 + by (import rich_list IS_SUBLIST_APPEND)
8.4016 +
8.4017 +lemma IS_PREFIX_IS_SUBLIST: "ALL l1 l2. IS_PREFIX l1 l2 --> IS_SUBLIST l1 l2"
8.4018 + by (import rich_list IS_PREFIX_IS_SUBLIST)
8.4019 +
8.4020 +lemma IS_SUFFIX_IS_SUBLIST: "ALL l1 l2. IS_SUFFIX l1 l2 --> IS_SUBLIST l1 l2"
8.4021 + by (import rich_list IS_SUFFIX_IS_SUBLIST)
8.4022 +
8.4023 +lemma IS_PREFIX_REVERSE: "ALL l1 l2. IS_PREFIX (rev l1) (rev l2) = IS_SUFFIX l1 l2"
8.4024 + by (import rich_list IS_PREFIX_REVERSE)
8.4025 +
8.4026 +lemma IS_SUFFIX_REVERSE: "ALL l2 l1. IS_SUFFIX (rev l1) (rev l2) = IS_PREFIX l1 l2"
8.4027 + by (import rich_list IS_SUFFIX_REVERSE)
8.4028 +
8.4029 +lemma IS_SUBLIST_REVERSE: "ALL l1 l2. IS_SUBLIST (rev l1) (rev l2) = IS_SUBLIST l1 l2"
8.4030 + by (import rich_list IS_SUBLIST_REVERSE)
8.4031 +
8.4032 +lemma PREFIX_FOLDR: "ALL P x. PREFIX P x = foldr (%x l'. if P x then x # l' else []) x []"
8.4033 + by (import rich_list PREFIX_FOLDR)
8.4034 +
8.4035 +lemma PREFIX: "(ALL x::'a => bool. PREFIX x [] = []) &
8.4036 +(ALL (x::'a => bool) (xa::'a) xb::'a list.
8.4037 + PREFIX x (xa # xb) = (if x xa then xa # PREFIX x xb else []))"
8.4038 + by (import rich_list PREFIX)
8.4039 +
8.4040 +lemma IS_PREFIX_PREFIX: "ALL P l. IS_PREFIX l (PREFIX P l)"
8.4041 + by (import rich_list IS_PREFIX_PREFIX)
8.4042 +
8.4043 +lemma LENGTH_SCANL: "ALL (f::'b => 'a => 'b) (e::'b) l::'a list.
8.4044 + length (SCANL f e l) = Suc (length l)"
8.4045 + by (import rich_list LENGTH_SCANL)
8.4046 +
8.4047 +lemma LENGTH_SCANR: "ALL f e l. length (SCANR f e l) = Suc (length l)"
8.4048 + by (import rich_list LENGTH_SCANR)
8.4049 +
8.4050 +lemma COMM_MONOID_FOLDL: "ALL x.
8.4051 + COMM x -->
8.4052 + (ALL xa. MONOID x xa --> (ALL e l. foldl x e l = x e (foldl x xa l)))"
8.4053 + by (import rich_list COMM_MONOID_FOLDL)
8.4054 +
8.4055 +lemma COMM_MONOID_FOLDR: "ALL x.
8.4056 + COMM x -->
8.4057 + (ALL xa. MONOID x xa --> (ALL e l. foldr x l e = x e (foldr x l xa)))"
8.4058 + by (import rich_list COMM_MONOID_FOLDR)
8.4059 +
8.4060 +lemma FCOMM_FOLDR_APPEND: "ALL x xa.
8.4061 + FCOMM x xa -->
8.4062 + (ALL xb.
8.4063 + LEFT_ID x xb -->
8.4064 + (ALL l1 l2.
8.4065 + foldr xa (l1 @ l2) xb = x (foldr xa l1 xb) (foldr xa l2 xb)))"
8.4066 + by (import rich_list FCOMM_FOLDR_APPEND)
8.4067 +
8.4068 +lemma FCOMM_FOLDL_APPEND: "ALL x xa.
8.4069 + FCOMM x xa -->
8.4070 + (ALL xb.
8.4071 + RIGHT_ID xa xb -->
8.4072 + (ALL l1 l2.
8.4073 + foldl x xb (l1 @ l2) = xa (foldl x xb l1) (foldl x xb l2)))"
8.4074 + by (import rich_list FCOMM_FOLDL_APPEND)
8.4075 +
8.4076 +lemma FOLDL_SINGLE: "ALL x xa xb. foldl x xa [xb] = x xa xb"
8.4077 + by (import rich_list FOLDL_SINGLE)
8.4078 +
8.4079 +lemma FOLDR_SINGLE: "ALL x xa xb. foldr x [xb] xa = x xb xa"
8.4080 + by (import rich_list FOLDR_SINGLE)
8.4081 +
8.4082 +lemma FOLDR_CONS_NIL: "ALL l. foldr op # l [] = l"
8.4083 + by (import rich_list FOLDR_CONS_NIL)
8.4084 +
8.4085 +lemma FOLDL_SNOC_NIL: "ALL l. foldl (%xs x. SNOC x xs) [] l = l"
8.4086 + by (import rich_list FOLDL_SNOC_NIL)
8.4087 +
8.4088 +lemma FOLDR_REVERSE: "ALL x xa xb. foldr x (rev xb) xa = foldl (%xa y. x y xa) xa xb"
8.4089 + by (import rich_list FOLDR_REVERSE)
8.4090 +
8.4091 +lemma FOLDL_REVERSE: "ALL x xa xb. foldl x xa (rev xb) = foldr (%xa y. x y xa) xb xa"
8.4092 + by (import rich_list FOLDL_REVERSE)
8.4093 +
8.4094 +lemma FOLDR_MAP: "ALL (f::'a => 'a => 'a) (e::'a) (g::'b => 'a) l::'b list.
8.4095 + foldr f (map g l) e = foldr (%x::'b. f (g x)) l e"
8.4096 + by (import rich_list FOLDR_MAP)
8.4097 +
8.4098 +lemma FOLDL_MAP: "ALL (f::'a => 'a => 'a) (e::'a) (g::'b => 'a) l::'b list.
8.4099 + foldl f e (map g l) = foldl (%(x::'a) y::'b. f x (g y)) e l"
8.4100 + by (import rich_list FOLDL_MAP)
8.4101 +
8.4102 +lemma ALL_EL_FOLDR: "ALL P l. list_all P l = foldr (%x. op & (P x)) l True"
8.4103 + by (import rich_list ALL_EL_FOLDR)
8.4104 +
8.4105 +lemma ALL_EL_FOLDL: "ALL P l. list_all P l = foldl (%l' x. l' & P x) True l"
8.4106 + by (import rich_list ALL_EL_FOLDL)
8.4107 +
8.4108 +lemma SOME_EL_FOLDR: "ALL P l. list_exists P l = foldr (%x. op | (P x)) l False"
8.4109 + by (import rich_list SOME_EL_FOLDR)
8.4110 +
8.4111 +lemma SOME_EL_FOLDL: "ALL P l. list_exists P l = foldl (%l' x. l' | P x) False l"
8.4112 + by (import rich_list SOME_EL_FOLDL)
8.4113 +
8.4114 +lemma ALL_EL_FOLDR_MAP: "ALL x xa. list_all x xa = foldr op & (map x xa) True"
8.4115 + by (import rich_list ALL_EL_FOLDR_MAP)
8.4116 +
8.4117 +lemma ALL_EL_FOLDL_MAP: "ALL x xa. list_all x xa = foldl op & True (map x xa)"
8.4118 + by (import rich_list ALL_EL_FOLDL_MAP)
8.4119 +
8.4120 +lemma SOME_EL_FOLDR_MAP: "ALL x xa. list_exists x xa = foldr op | (map x xa) False"
8.4121 + by (import rich_list SOME_EL_FOLDR_MAP)
8.4122 +
8.4123 +lemma SOME_EL_FOLDL_MAP: "ALL x xa. list_exists x xa = foldl op | False (map x xa)"
8.4124 + by (import rich_list SOME_EL_FOLDL_MAP)
8.4125 +
8.4126 +lemma FOLDR_FILTER: "ALL (f::'a => 'a => 'a) (e::'a) (P::'a => bool) l::'a list.
8.4127 + foldr f (filter P l) e =
8.4128 + foldr (%(x::'a) y::'a. if P x then f x y else y) l e"
8.4129 + by (import rich_list FOLDR_FILTER)
8.4130 +
8.4131 +lemma FOLDL_FILTER: "ALL (f::'a => 'a => 'a) (e::'a) (P::'a => bool) l::'a list.
8.4132 + foldl f e (filter P l) =
8.4133 + foldl (%(x::'a) y::'a. if P y then f x y else x) e l"
8.4134 + by (import rich_list FOLDL_FILTER)
8.4135 +
8.4136 +lemma ASSOC_FOLDR_FLAT: "ALL f.
8.4137 + ASSOC f -->
8.4138 + (ALL e.
8.4139 + LEFT_ID f e -->
8.4140 + (ALL l. foldr f (concat l) e = foldr f (map (FOLDR f e) l) e))"
8.4141 + by (import rich_list ASSOC_FOLDR_FLAT)
8.4142 +
8.4143 +lemma ASSOC_FOLDL_FLAT: "ALL f.
8.4144 + ASSOC f -->
8.4145 + (ALL e.
8.4146 + RIGHT_ID f e -->
8.4147 + (ALL l. foldl f e (concat l) = foldl f e (map (foldl f e) l)))"
8.4148 + by (import rich_list ASSOC_FOLDL_FLAT)
8.4149 +
8.4150 +lemma SOME_EL_MAP: "ALL (P::'b => bool) (f::'a => 'b) l::'a list.
8.4151 + list_exists P (map f l) = list_exists (P o f) l"
8.4152 + by (import rich_list SOME_EL_MAP)
8.4153 +
8.4154 +lemma SOME_EL_DISJ: "ALL P Q l.
8.4155 + list_exists (%x. P x | Q x) l = (list_exists P l | list_exists Q l)"
8.4156 + by (import rich_list SOME_EL_DISJ)
8.4157 +
8.4158 +lemma IS_EL_FOLDR: "ALL x xa. x mem xa = foldr (%xa. op | (x = xa)) xa False"
8.4159 + by (import rich_list IS_EL_FOLDR)
8.4160 +
8.4161 +lemma IS_EL_FOLDL: "ALL x xa. x mem xa = foldl (%l' xa. l' | x = xa) False xa"
8.4162 + by (import rich_list IS_EL_FOLDL)
8.4163 +
8.4164 +lemma NULL_FOLDR: "ALL l. null l = foldr (%x l'. False) l True"
8.4165 + by (import rich_list NULL_FOLDR)
8.4166 +
8.4167 +lemma NULL_FOLDL: "ALL l. null l = foldl (%x l'. False) True l"
8.4168 + by (import rich_list NULL_FOLDL)
8.4169 +
8.4170 +lemma FILTER_REVERSE: "ALL P l. filter P (rev l) = rev (filter P l)"
8.4171 + by (import rich_list FILTER_REVERSE)
8.4172 +
8.4173 +lemma SEG_LENGTH_ID: "ALL l. SEG (length l) 0 l = l"
8.4174 + by (import rich_list SEG_LENGTH_ID)
8.4175 +
8.4176 +lemma SEG_SUC_CONS: "ALL m n l x. SEG m (Suc n) (x # l) = SEG m n l"
8.4177 + by (import rich_list SEG_SUC_CONS)
8.4178 +
8.4179 +lemma SEG_0_SNOC: "ALL m l x. m <= length l --> SEG m 0 (SNOC x l) = SEG m 0 l"
8.4180 + by (import rich_list SEG_0_SNOC)
8.4181 +
8.4182 +lemma BUTLASTN_SEG: "ALL n l. n <= length l --> BUTLASTN n l = SEG (length l - n) 0 l"
8.4183 + by (import rich_list BUTLASTN_SEG)
8.4184 +
8.4185 +lemma LASTN_CONS: "ALL n l. n <= length l --> (ALL x. LASTN n (x # l) = LASTN n l)"
8.4186 + by (import rich_list LASTN_CONS)
8.4187 +
8.4188 +lemma LENGTH_LASTN: "ALL n l. n <= length l --> length (LASTN n l) = n"
8.4189 + by (import rich_list LENGTH_LASTN)
8.4190 +
8.4191 +lemma LASTN_LENGTH_ID: "ALL l. LASTN (length l) l = l"
8.4192 + by (import rich_list LASTN_LENGTH_ID)
8.4193 +
8.4194 +lemma LASTN_LASTN: "ALL l n m. m <= length l --> n <= m --> LASTN n (LASTN m l) = LASTN n l"
8.4195 + by (import rich_list LASTN_LASTN)
8.4196 +
8.4197 +lemma FIRSTN_LENGTH_ID: "ALL l. FIRSTN (length l) l = l"
8.4198 + by (import rich_list FIRSTN_LENGTH_ID)
8.4199 +
8.4200 +lemma FIRSTN_SNOC: "ALL n l. n <= length l --> (ALL x. FIRSTN n (SNOC x l) = FIRSTN n l)"
8.4201 + by (import rich_list FIRSTN_SNOC)
8.4202 +
8.4203 +lemma BUTLASTN_LENGTH_NIL: "ALL l. BUTLASTN (length l) l = []"
8.4204 + by (import rich_list BUTLASTN_LENGTH_NIL)
8.4205 +
8.4206 +lemma BUTLASTN_SUC_BUTLAST: "ALL n l. n < length l --> BUTLASTN (Suc n) l = BUTLASTN n (butlast l)"
8.4207 + by (import rich_list BUTLASTN_SUC_BUTLAST)
8.4208 +
8.4209 +lemma BUTLASTN_BUTLAST: "ALL n l. n < length l --> BUTLASTN n (butlast l) = butlast (BUTLASTN n l)"
8.4210 + by (import rich_list BUTLASTN_BUTLAST)
8.4211 +
8.4212 +lemma LENGTH_BUTLASTN: "ALL n l. n <= length l --> length (BUTLASTN n l) = length l - n"
8.4213 + by (import rich_list LENGTH_BUTLASTN)
8.4214 +
8.4215 +lemma BUTLASTN_BUTLASTN: "ALL m n l.
8.4216 + n + m <= length l --> BUTLASTN n (BUTLASTN m l) = BUTLASTN (n + m) l"
8.4217 + by (import rich_list BUTLASTN_BUTLASTN)
8.4218 +
8.4219 +lemma APPEND_BUTLASTN_LASTN: "ALL n l. n <= length l --> BUTLASTN n l @ LASTN n l = l"
8.4220 + by (import rich_list APPEND_BUTLASTN_LASTN)
8.4221 +
8.4222 +lemma APPEND_FIRSTN_LASTN: "ALL m n l. m + n = length l --> FIRSTN n l @ LASTN m l = l"
8.4223 + by (import rich_list APPEND_FIRSTN_LASTN)
8.4224 +
8.4225 +lemma BUTLASTN_APPEND2: "ALL n l1 l2. n <= length l2 --> BUTLASTN n (l1 @ l2) = l1 @ BUTLASTN n l2"
8.4226 + by (import rich_list BUTLASTN_APPEND2)
8.4227 +
8.4228 +lemma BUTLASTN_LENGTH_APPEND: "ALL l2 l1. BUTLASTN (length l2) (l1 @ l2) = l1"
8.4229 + by (import rich_list BUTLASTN_LENGTH_APPEND)
8.4230 +
8.4231 +lemma LASTN_LENGTH_APPEND: "ALL l2 l1. LASTN (length l2) (l1 @ l2) = l2"
8.4232 + by (import rich_list LASTN_LENGTH_APPEND)
8.4233 +
8.4234 +lemma BUTLASTN_CONS: "ALL n l. n <= length l --> (ALL x. BUTLASTN n (x # l) = x # BUTLASTN n l)"
8.4235 + by (import rich_list BUTLASTN_CONS)
8.4236 +
8.4237 +lemma BUTLASTN_LENGTH_CONS: "ALL l x. BUTLASTN (length l) (x # l) = [x]"
8.4238 + by (import rich_list BUTLASTN_LENGTH_CONS)
8.4239 +
8.4240 +lemma LAST_LASTN_LAST: "ALL n l. n <= length l --> 0 < n --> last (LASTN n l) = last l"
8.4241 + by (import rich_list LAST_LASTN_LAST)
8.4242 +
8.4243 +lemma BUTLASTN_LASTN_NIL: "ALL n l. n <= length l --> BUTLASTN n (LASTN n l) = []"
8.4244 + by (import rich_list BUTLASTN_LASTN_NIL)
8.4245 +
8.4246 +lemma LASTN_BUTLASTN: "ALL n m l.
8.4247 + n + m <= length l -->
8.4248 + LASTN n (BUTLASTN m l) = BUTLASTN m (LASTN (n + m) l)"
8.4249 + by (import rich_list LASTN_BUTLASTN)
8.4250 +
8.4251 +lemma BUTLASTN_LASTN: "ALL m n l.
8.4252 + m <= n & n <= length l -->
8.4253 + BUTLASTN m (LASTN n l) = LASTN (n - m) (BUTLASTN m l)"
8.4254 + by (import rich_list BUTLASTN_LASTN)
8.4255 +
8.4256 +lemma LASTN_1: "ALL l. l ~= [] --> LASTN 1 l = [last l]"
8.4257 + by (import rich_list LASTN_1)
8.4258 +
8.4259 +lemma BUTLASTN_1: "ALL l. l ~= [] --> BUTLASTN 1 l = butlast l"
8.4260 + by (import rich_list BUTLASTN_1)
8.4261 +
8.4262 +lemma BUTLASTN_APPEND1: "ALL l2 n.
8.4263 + length l2 <= n -->
8.4264 + (ALL l1. BUTLASTN n (l1 @ l2) = BUTLASTN (n - length l2) l1)"
8.4265 + by (import rich_list BUTLASTN_APPEND1)
8.4266 +
8.4267 +lemma LASTN_APPEND2: "ALL n l2. n <= length l2 --> (ALL l1. LASTN n (l1 @ l2) = LASTN n l2)"
8.4268 + by (import rich_list LASTN_APPEND2)
8.4269 +
8.4270 +lemma LASTN_APPEND1: "ALL l2 n.
8.4271 + length l2 <= n -->
8.4272 + (ALL l1. LASTN n (l1 @ l2) = LASTN (n - length l2) l1 @ l2)"
8.4273 + by (import rich_list LASTN_APPEND1)
8.4274 +
8.4275 +lemma LASTN_MAP: "ALL n l. n <= length l --> (ALL f. LASTN n (map f l) = map f (LASTN n l))"
8.4276 + by (import rich_list LASTN_MAP)
8.4277 +
8.4278 +lemma BUTLASTN_MAP: "ALL n l.
8.4279 + n <= length l --> (ALL f. BUTLASTN n (map f l) = map f (BUTLASTN n l))"
8.4280 + by (import rich_list BUTLASTN_MAP)
8.4281 +
8.4282 +lemma ALL_EL_LASTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (LASTN m l))"
8.4283 + by (import rich_list ALL_EL_LASTN)
8.4284 +
8.4285 +lemma ALL_EL_BUTLASTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (BUTLASTN m l))"
8.4286 + by (import rich_list ALL_EL_BUTLASTN)
8.4287 +
8.4288 +lemma LENGTH_FIRSTN: "ALL n l. n <= length l --> length (FIRSTN n l) = n"
8.4289 + by (import rich_list LENGTH_FIRSTN)
8.4290 +
8.4291 +lemma FIRSTN_FIRSTN: "ALL m l. m <= length l --> (ALL n<=m. FIRSTN n (FIRSTN m l) = FIRSTN n l)"
8.4292 + by (import rich_list FIRSTN_FIRSTN)
8.4293 +
8.4294 +lemma LENGTH_BUTFIRSTN: "ALL n l. n <= length l --> length (BUTFIRSTN n l) = length l - n"
8.4295 + by (import rich_list LENGTH_BUTFIRSTN)
8.4296 +
8.4297 +lemma BUTFIRSTN_LENGTH_NIL: "ALL l. BUTFIRSTN (length l) l = []"
8.4298 + by (import rich_list BUTFIRSTN_LENGTH_NIL)
8.4299 +
8.4300 +lemma BUTFIRSTN_APPEND1: "ALL n l1.
8.4301 + n <= length l1 --> (ALL l2. BUTFIRSTN n (l1 @ l2) = BUTFIRSTN n l1 @ l2)"
8.4302 + by (import rich_list BUTFIRSTN_APPEND1)
8.4303 +
8.4304 +lemma BUTFIRSTN_APPEND2: "ALL l1 n.
8.4305 + length l1 <= n -->
8.4306 + (ALL l2. BUTFIRSTN n (l1 @ l2) = BUTFIRSTN (n - length l1) l2)"
8.4307 + by (import rich_list BUTFIRSTN_APPEND2)
8.4308 +
8.4309 +lemma BUTFIRSTN_BUTFIRSTN: "ALL n m l.
8.4310 + n + m <= length l --> BUTFIRSTN n (BUTFIRSTN m l) = BUTFIRSTN (n + m) l"
8.4311 + by (import rich_list BUTFIRSTN_BUTFIRSTN)
8.4312 +
8.4313 +lemma APPEND_FIRSTN_BUTFIRSTN: "ALL n l. n <= length l --> FIRSTN n l @ BUTFIRSTN n l = l"
8.4314 + by (import rich_list APPEND_FIRSTN_BUTFIRSTN)
8.4315 +
8.4316 +lemma LASTN_SEG: "ALL n l. n <= length l --> LASTN n l = SEG n (length l - n) l"
8.4317 + by (import rich_list LASTN_SEG)
8.4318 +
8.4319 +lemma FIRSTN_SEG: "ALL n l. n <= length l --> FIRSTN n l = SEG n 0 l"
8.4320 + by (import rich_list FIRSTN_SEG)
8.4321 +
8.4322 +lemma BUTFIRSTN_SEG: "ALL n l. n <= length l --> BUTFIRSTN n l = SEG (length l - n) n l"
8.4323 + by (import rich_list BUTFIRSTN_SEG)
8.4324 +
8.4325 +lemma BUTFIRSTN_SNOC: "ALL n l.
8.4326 + n <= length l -->
8.4327 + (ALL x. BUTFIRSTN n (SNOC x l) = SNOC x (BUTFIRSTN n l))"
8.4328 + by (import rich_list BUTFIRSTN_SNOC)
8.4329 +
8.4330 +lemma APPEND_BUTLASTN_BUTFIRSTN: "ALL m n l. m + n = length l --> BUTLASTN m l @ BUTFIRSTN n l = l"
8.4331 + by (import rich_list APPEND_BUTLASTN_BUTFIRSTN)
8.4332 +
8.4333 +lemma SEG_SEG: "ALL n1 m1 n2 m2 l.
8.4334 + n1 + m1 <= length l & n2 + m2 <= n1 -->
8.4335 + SEG n2 m2 (SEG n1 m1 l) = SEG n2 (m1 + m2) l"
8.4336 + by (import rich_list SEG_SEG)
8.4337 +
8.4338 +lemma SEG_APPEND1: "ALL n m l1. n + m <= length l1 --> (ALL l2. SEG n m (l1 @ l2) = SEG n m l1)"
8.4339 + by (import rich_list SEG_APPEND1)
8.4340 +
8.4341 +lemma SEG_APPEND2: "ALL l1 m n l2.
8.4342 + length l1 <= m & n <= length l2 -->
8.4343 + SEG n m (l1 @ l2) = SEG n (m - length l1) l2"
8.4344 + by (import rich_list SEG_APPEND2)
8.4345 +
8.4346 +lemma SEG_FIRSTN_BUTFISTN: "ALL n m l. n + m <= length l --> SEG n m l = FIRSTN n (BUTFIRSTN m l)"
8.4347 + by (import rich_list SEG_FIRSTN_BUTFISTN)
8.4348 +
8.4349 +lemma SEG_APPEND: "ALL m l1 n l2.
8.4350 + m < length l1 & length l1 <= n + m & n + m <= length l1 + length l2 -->
8.4351 + SEG n m (l1 @ l2) =
8.4352 + SEG (length l1 - m) m l1 @ SEG (n + m - length l1) 0 l2"
8.4353 + by (import rich_list SEG_APPEND)
8.4354 +
8.4355 +lemma SEG_LENGTH_SNOC: "ALL x xa. SEG 1 (length x) (SNOC xa x) = [xa]"
8.4356 + by (import rich_list SEG_LENGTH_SNOC)
8.4357 +
8.4358 +lemma SEG_SNOC: "ALL n m l. n + m <= length l --> (ALL x. SEG n m (SNOC x l) = SEG n m l)"
8.4359 + by (import rich_list SEG_SNOC)
8.4360 +
8.4361 +lemma ELL_SEG: "ALL n l. n < length l --> ELL n l = hd (SEG 1 (PRE (length l - n)) l)"
8.4362 + by (import rich_list ELL_SEG)
8.4363 +
8.4364 +lemma SNOC_FOLDR: "ALL x l. SNOC x l = foldr op # l [x]"
8.4365 + by (import rich_list SNOC_FOLDR)
8.4366 +
8.4367 +lemma IS_EL_FOLDR_MAP: "ALL x xa. x mem xa = foldr op | (map (op = x) xa) False"
8.4368 + by (import rich_list IS_EL_FOLDR_MAP)
8.4369 +
8.4370 +lemma IS_EL_FOLDL_MAP: "ALL x xa. x mem xa = foldl op | False (map (op = x) xa)"
8.4371 + by (import rich_list IS_EL_FOLDL_MAP)
8.4372 +
8.4373 +lemma FILTER_FILTER: "ALL P Q l. filter P (filter Q l) = [x:l. P x & Q x]"
8.4374 + by (import rich_list FILTER_FILTER)
8.4375 +
8.4376 +lemma FCOMM_FOLDR_FLAT: "ALL g f.
8.4377 + FCOMM g f -->
8.4378 + (ALL e.
8.4379 + LEFT_ID g e -->
8.4380 + (ALL l. foldr f (concat l) e = foldr g (map (FOLDR f e) l) e))"
8.4381 + by (import rich_list FCOMM_FOLDR_FLAT)
8.4382 +
8.4383 +lemma FCOMM_FOLDL_FLAT: "ALL f g.
8.4384 + FCOMM f g -->
8.4385 + (ALL e.
8.4386 + RIGHT_ID g e -->
8.4387 + (ALL l. foldl f e (concat l) = foldl g e (map (foldl f e) l)))"
8.4388 + by (import rich_list FCOMM_FOLDL_FLAT)
8.4389 +
8.4390 +lemma FOLDR_MAP_REVERSE: "ALL f::'a => 'a => 'a.
8.4391 + (ALL (a::'a) (b::'a) c::'a. f a (f b c) = f b (f a c)) -->
8.4392 + (ALL (e::'a) (g::'b => 'a) l::'b list.
8.4393 + foldr f (map g (rev l)) e = foldr f (map g l) e)"
8.4394 + by (import rich_list FOLDR_MAP_REVERSE)
8.4395 +
8.4396 +lemma FOLDR_FILTER_REVERSE: "ALL f::'a => 'a => 'a.
8.4397 + (ALL (a::'a) (b::'a) c::'a. f a (f b c) = f b (f a c)) -->
8.4398 + (ALL (e::'a) (P::'a => bool) l::'a list.
8.4399 + foldr f (filter P (rev l)) e = foldr f (filter P l) e)"
8.4400 + by (import rich_list FOLDR_FILTER_REVERSE)
8.4401 +
8.4402 +lemma COMM_ASSOC_FOLDR_REVERSE: "ALL f. COMM f --> ASSOC f --> (ALL e l. foldr f (rev l) e = foldr f l e)"
8.4403 + by (import rich_list COMM_ASSOC_FOLDR_REVERSE)
8.4404 +
8.4405 +lemma COMM_ASSOC_FOLDL_REVERSE: "ALL f. COMM f --> ASSOC f --> (ALL e l. foldl f e (rev l) = foldl f e l)"
8.4406 + by (import rich_list COMM_ASSOC_FOLDL_REVERSE)
8.4407 +
8.4408 +lemma ELL_LAST: "ALL l. ~ null l --> ELL 0 l = last l"
8.4409 + by (import rich_list ELL_LAST)
8.4410 +
8.4411 +lemma ELL_0_SNOC: "ALL l x. ELL 0 (SNOC x l) = x"
8.4412 + by (import rich_list ELL_0_SNOC)
8.4413 +
8.4414 +lemma ELL_SNOC: "ALL n. 0 < n --> (ALL x l. ELL n (SNOC x l) = ELL (PRE n) l)"
8.4415 + by (import rich_list ELL_SNOC)
8.4416 +
8.4417 +lemma ELL_SUC_SNOC: "ALL n x xa. ELL (Suc n) (SNOC x xa) = ELL n xa"
8.4418 + by (import rich_list ELL_SUC_SNOC)
8.4419 +
8.4420 +lemma ELL_CONS: "ALL n l. n < length l --> (ALL x. ELL n (x # l) = ELL n l)"
8.4421 + by (import rich_list ELL_CONS)
8.4422 +
8.4423 +lemma ELL_LENGTH_CONS: "ALL l x. ELL (length l) (x # l) = x"
8.4424 + by (import rich_list ELL_LENGTH_CONS)
8.4425 +
8.4426 +lemma ELL_LENGTH_SNOC: "ALL l x. ELL (length l) (SNOC x l) = (if null l then x else hd l)"
8.4427 + by (import rich_list ELL_LENGTH_SNOC)
8.4428 +
8.4429 +lemma ELL_APPEND2: "ALL n l2. n < length l2 --> (ALL l1. ELL n (l1 @ l2) = ELL n l2)"
8.4430 + by (import rich_list ELL_APPEND2)
8.4431 +
8.4432 +lemma ELL_APPEND1: "ALL l2 n.
8.4433 + length l2 <= n --> (ALL l1. ELL n (l1 @ l2) = ELL (n - length l2) l1)"
8.4434 + by (import rich_list ELL_APPEND1)
8.4435 +
8.4436 +lemma ELL_PRE_LENGTH: "ALL l. l ~= [] --> ELL (PRE (length l)) l = hd l"
8.4437 + by (import rich_list ELL_PRE_LENGTH)
8.4438 +
8.4439 +lemma EL_LENGTH_SNOC: "ALL l x. EL (length l) (SNOC x l) = x"
8.4440 + by (import rich_list EL_LENGTH_SNOC)
8.4441 +
8.4442 +lemma EL_PRE_LENGTH: "ALL l. l ~= [] --> EL (PRE (length l)) l = last l"
8.4443 + by (import rich_list EL_PRE_LENGTH)
8.4444 +
8.4445 +lemma EL_SNOC: "ALL n l. n < length l --> (ALL x. EL n (SNOC x l) = EL n l)"
8.4446 + by (import rich_list EL_SNOC)
8.4447 +
8.4448 +lemma EL_ELL: "ALL n l. n < length l --> EL n l = ELL (PRE (length l - n)) l"
8.4449 + by (import rich_list EL_ELL)
8.4450 +
8.4451 +lemma EL_LENGTH_APPEND: "ALL l2 l1. ~ null l2 --> EL (length l1) (l1 @ l2) = hd l2"
8.4452 + by (import rich_list EL_LENGTH_APPEND)
8.4453 +
8.4454 +lemma ELL_EL: "ALL n l. n < length l --> ELL n l = EL (PRE (length l - n)) l"
8.4455 + by (import rich_list ELL_EL)
8.4456 +
8.4457 +lemma ELL_MAP: "ALL n l f. n < length l --> ELL n (map f l) = f (ELL n l)"
8.4458 + by (import rich_list ELL_MAP)
8.4459 +
8.4460 +lemma LENGTH_BUTLAST: "ALL l. l ~= [] --> length (butlast l) = PRE (length l)"
8.4461 + by (import rich_list LENGTH_BUTLAST)
8.4462 +
8.4463 +lemma BUTFIRSTN_LENGTH_APPEND: "ALL l1 l2. BUTFIRSTN (length l1) (l1 @ l2) = l2"
8.4464 + by (import rich_list BUTFIRSTN_LENGTH_APPEND)
8.4465 +
8.4466 +lemma FIRSTN_APPEND1: "ALL n l1. n <= length l1 --> (ALL l2. FIRSTN n (l1 @ l2) = FIRSTN n l1)"
8.4467 + by (import rich_list FIRSTN_APPEND1)
8.4468 +
8.4469 +lemma FIRSTN_APPEND2: "ALL l1 n.
8.4470 + length l1 <= n -->
8.4471 + (ALL l2. FIRSTN n (l1 @ l2) = l1 @ FIRSTN (n - length l1) l2)"
8.4472 + by (import rich_list FIRSTN_APPEND2)
8.4473 +
8.4474 +lemma FIRSTN_LENGTH_APPEND: "ALL l1 l2. FIRSTN (length l1) (l1 @ l2) = l1"
8.4475 + by (import rich_list FIRSTN_LENGTH_APPEND)
8.4476 +
8.4477 +lemma REVERSE_FLAT: "ALL l. rev (concat l) = concat (rev (map rev l))"
8.4478 + by (import rich_list REVERSE_FLAT)
8.4479 +
8.4480 +lemma MAP_FILTER: "ALL f P l.
8.4481 + (ALL x. P (f x) = P x) --> map f (filter P l) = filter P (map f l)"
8.4482 + by (import rich_list MAP_FILTER)
8.4483 +
8.4484 +lemma FLAT_REVERSE: "ALL l. concat (rev l) = rev (concat (map rev l))"
8.4485 + by (import rich_list FLAT_REVERSE)
8.4486 +
8.4487 +lemma FLAT_FLAT: "ALL l. concat (concat l) = concat (map concat l)"
8.4488 + by (import rich_list FLAT_FLAT)
8.4489 +
8.4490 +lemma ALL_EL_REVERSE: "ALL P l. list_all P (rev l) = list_all P l"
8.4491 + by (import rich_list ALL_EL_REVERSE)
8.4492 +
8.4493 +lemma SOME_EL_REVERSE: "ALL P l. list_exists P (rev l) = list_exists P l"
8.4494 + by (import rich_list SOME_EL_REVERSE)
8.4495 +
8.4496 +lemma ALL_EL_SEG: "ALL P l.
8.4497 + list_all P l --> (ALL m k. m + k <= length l --> list_all P (SEG m k l))"
8.4498 + by (import rich_list ALL_EL_SEG)
8.4499 +
8.4500 +lemma ALL_EL_FIRSTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (FIRSTN m l))"
8.4501 + by (import rich_list ALL_EL_FIRSTN)
8.4502 +
8.4503 +lemma ALL_EL_BUTFIRSTN: "ALL P l. list_all P l --> (ALL m<=length l. list_all P (BUTFIRSTN m l))"
8.4504 + by (import rich_list ALL_EL_BUTFIRSTN)
8.4505 +
8.4506 +lemma SOME_EL_SEG: "ALL m k l.
8.4507 + m + k <= length l -->
8.4508 + (ALL P. list_exists P (SEG m k l) --> list_exists P l)"
8.4509 + by (import rich_list SOME_EL_SEG)
8.4510 +
8.4511 +lemma SOME_EL_FIRSTN: "ALL m l.
8.4512 + m <= length l --> (ALL P. list_exists P (FIRSTN m l) --> list_exists P l)"
8.4513 + by (import rich_list SOME_EL_FIRSTN)
8.4514 +
8.4515 +lemma SOME_EL_BUTFIRSTN: "ALL m l.
8.4516 + m <= length l -->
8.4517 + (ALL P. list_exists P (BUTFIRSTN m l) --> list_exists P l)"
8.4518 + by (import rich_list SOME_EL_BUTFIRSTN)
8.4519 +
8.4520 +lemma SOME_EL_LASTN: "ALL m l.
8.4521 + m <= length l --> (ALL P. list_exists P (LASTN m l) --> list_exists P l)"
8.4522 + by (import rich_list SOME_EL_LASTN)
8.4523 +
8.4524 +lemma SOME_EL_BUTLASTN: "ALL m l.
8.4525 + m <= length l -->
8.4526 + (ALL P. list_exists P (BUTLASTN m l) --> list_exists P l)"
8.4527 + by (import rich_list SOME_EL_BUTLASTN)
8.4528 +
8.4529 +lemma IS_EL_REVERSE: "ALL x l. x mem rev l = x mem l"
8.4530 + by (import rich_list IS_EL_REVERSE)
8.4531 +
8.4532 +lemma IS_EL_FILTER: "ALL P x. P x --> (ALL l. x mem filter P l = x mem l)"
8.4533 + by (import rich_list IS_EL_FILTER)
8.4534 +
8.4535 +lemma IS_EL_SEG: "ALL n m l. n + m <= length l --> (ALL x. x mem SEG n m l --> x mem l)"
8.4536 + by (import rich_list IS_EL_SEG)
8.4537 +
8.4538 +lemma IS_EL_SOME_EL: "ALL x l. x mem l = list_exists (op = x) l"
8.4539 + by (import rich_list IS_EL_SOME_EL)
8.4540 +
8.4541 +lemma IS_EL_FIRSTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem FIRSTN x xa --> xb mem xa)"
8.4542 + by (import rich_list IS_EL_FIRSTN)
8.4543 +
8.4544 +lemma IS_EL_BUTFIRSTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem BUTFIRSTN x xa --> xb mem xa)"
8.4545 + by (import rich_list IS_EL_BUTFIRSTN)
8.4546 +
8.4547 +lemma IS_EL_BUTLASTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem BUTLASTN x xa --> xb mem xa)"
8.4548 + by (import rich_list IS_EL_BUTLASTN)
8.4549 +
8.4550 +lemma IS_EL_LASTN: "ALL x xa. x <= length xa --> (ALL xb. xb mem LASTN x xa --> xb mem xa)"
8.4551 + by (import rich_list IS_EL_LASTN)
8.4552 +
8.4553 +lemma ZIP_SNOC: "ALL l1 l2.
8.4554 + length l1 = length l2 -->
8.4555 + (ALL x1 x2. zip (SNOC x1 l1) (SNOC x2 l2) = SNOC (x1, x2) (zip l1 l2))"
8.4556 + by (import rich_list ZIP_SNOC)
8.4557 +
8.4558 +lemma UNZIP_SNOC: "ALL x l.
8.4559 + unzip (SNOC x l) =
8.4560 + (SNOC (fst x) (fst (unzip l)), SNOC (snd x) (snd (unzip l)))"
8.4561 + by (import rich_list UNZIP_SNOC)
8.4562 +
8.4563 +lemma LENGTH_UNZIP_FST: "ALL x. length (UNZIP_FST x) = length x"
8.4564 + by (import rich_list LENGTH_UNZIP_FST)
8.4565 +
8.4566 +lemma LENGTH_UNZIP_SND: "ALL x. length (UNZIP_SND x) = length x"
8.4567 + by (import rich_list LENGTH_UNZIP_SND)
8.4568 +
8.4569 +lemma SUM_APPEND: "ALL l1 l2. sum (l1 @ l2) = sum l1 + sum l2"
8.4570 + by (import rich_list SUM_APPEND)
8.4571 +
8.4572 +lemma SUM_REVERSE: "ALL l. sum (rev l) = sum l"
8.4573 + by (import rich_list SUM_REVERSE)
8.4574 +
8.4575 +lemma SUM_FLAT: "ALL l. sum (concat l) = sum (map sum l)"
8.4576 + by (import rich_list SUM_FLAT)
8.4577 +
8.4578 +lemma EL_APPEND1: "ALL n l1 l2. n < length l1 --> EL n (l1 @ l2) = EL n l1"
8.4579 + by (import rich_list EL_APPEND1)
8.4580 +
8.4581 +lemma EL_APPEND2: "ALL l1 n.
8.4582 + length l1 <= n --> (ALL l2. EL n (l1 @ l2) = EL (n - length l1) l2)"
8.4583 + by (import rich_list EL_APPEND2)
8.4584 +
8.4585 +lemma EL_MAP: "ALL n l. n < length l --> (ALL f. EL n (map f l) = f (EL n l))"
8.4586 + by (import rich_list EL_MAP)
8.4587 +
8.4588 +lemma EL_CONS: "ALL n. 0 < n --> (ALL x l. EL n (x # l) = EL (PRE n) l)"
8.4589 + by (import rich_list EL_CONS)
8.4590 +
8.4591 +lemma EL_SEG: "ALL n l. n < length l --> EL n l = hd (SEG 1 n l)"
8.4592 + by (import rich_list EL_SEG)
8.4593 +
8.4594 +lemma EL_IS_EL: "ALL n l. n < length l --> EL n l mem l"
8.4595 + by (import rich_list EL_IS_EL)
8.4596 +
8.4597 +lemma TL_SNOC: "ALL x l. tl (SNOC x l) = (if null l then [] else SNOC x (tl l))"
8.4598 + by (import rich_list TL_SNOC)
8.4599 +
8.4600 +lemma EL_REVERSE: "ALL n l. n < length l --> EL n (rev l) = EL (PRE (length l - n)) l"
8.4601 + by (import rich_list EL_REVERSE)
8.4602 +
8.4603 +lemma EL_REVERSE_ELL: "ALL n l. n < length l --> EL n (rev l) = ELL n l"
8.4604 + by (import rich_list EL_REVERSE_ELL)
8.4605 +
8.4606 +lemma ELL_LENGTH_APPEND: "ALL l1 l2. ~ null l1 --> ELL (length l2) (l1 @ l2) = last l1"
8.4607 + by (import rich_list ELL_LENGTH_APPEND)
8.4608 +
8.4609 +lemma ELL_IS_EL: "ALL n l. n < length l --> ELL n l mem l"
8.4610 + by (import rich_list ELL_IS_EL)
8.4611 +
8.4612 +lemma ELL_REVERSE: "ALL n l. n < length l --> ELL n (rev l) = ELL (PRE (length l - n)) l"
8.4613 + by (import rich_list ELL_REVERSE)
8.4614 +
8.4615 +lemma ELL_REVERSE_EL: "ALL n l. n < length l --> ELL n (rev l) = EL n l"
8.4616 + by (import rich_list ELL_REVERSE_EL)
8.4617 +
8.4618 +lemma FIRSTN_BUTLASTN: "ALL n l. n <= length l --> FIRSTN n l = BUTLASTN (length l - n) l"
8.4619 + by (import rich_list FIRSTN_BUTLASTN)
8.4620 +
8.4621 +lemma BUTLASTN_FIRSTN: "ALL n l. n <= length l --> BUTLASTN n l = FIRSTN (length l - n) l"
8.4622 + by (import rich_list BUTLASTN_FIRSTN)
8.4623 +
8.4624 +lemma LASTN_BUTFIRSTN: "ALL n l. n <= length l --> LASTN n l = BUTFIRSTN (length l - n) l"
8.4625 + by (import rich_list LASTN_BUTFIRSTN)
8.4626 +
8.4627 +lemma BUTFIRSTN_LASTN: "ALL n l. n <= length l --> BUTFIRSTN n l = LASTN (length l - n) l"
8.4628 + by (import rich_list BUTFIRSTN_LASTN)
8.4629 +
8.4630 +lemma SEG_LASTN_BUTLASTN: "ALL n m l.
8.4631 + n + m <= length l -->
8.4632 + SEG n m l = LASTN n (BUTLASTN (length l - (n + m)) l)"
8.4633 + by (import rich_list SEG_LASTN_BUTLASTN)
8.4634 +
8.4635 +lemma BUTFIRSTN_REVERSE: "ALL n l. n <= length l --> BUTFIRSTN n (rev l) = rev (BUTLASTN n l)"
8.4636 + by (import rich_list BUTFIRSTN_REVERSE)
8.4637 +
8.4638 +lemma BUTLASTN_REVERSE: "ALL n l. n <= length l --> BUTLASTN n (rev l) = rev (BUTFIRSTN n l)"
8.4639 + by (import rich_list BUTLASTN_REVERSE)
8.4640 +
8.4641 +lemma LASTN_REVERSE: "ALL n l. n <= length l --> LASTN n (rev l) = rev (FIRSTN n l)"
8.4642 + by (import rich_list LASTN_REVERSE)
8.4643 +
8.4644 +lemma FIRSTN_REVERSE: "ALL n l. n <= length l --> FIRSTN n (rev l) = rev (LASTN n l)"
8.4645 + by (import rich_list FIRSTN_REVERSE)
8.4646 +
8.4647 +lemma SEG_REVERSE: "ALL n m l.
8.4648 + n + m <= length l -->
8.4649 + SEG n m (rev l) = rev (SEG n (length l - (n + m)) l)"
8.4650 + by (import rich_list SEG_REVERSE)
8.4651 +
8.4652 +lemma LENGTH_GENLIST: "ALL f n. length (GENLIST f n) = n"
8.4653 + by (import rich_list LENGTH_GENLIST)
8.4654 +
8.4655 +lemma LENGTH_REPLICATE: "ALL n x. length (REPLICATE n x) = n"
8.4656 + by (import rich_list LENGTH_REPLICATE)
8.4657 +
8.4658 +lemma IS_EL_REPLICATE: "ALL n. 0 < n --> (ALL x. x mem REPLICATE n x)"
8.4659 + by (import rich_list IS_EL_REPLICATE)
8.4660 +
8.4661 +lemma ALL_EL_REPLICATE: "ALL x n. list_all (op = x) (REPLICATE n x)"
8.4662 + by (import rich_list ALL_EL_REPLICATE)
8.4663 +
8.4664 +lemma AND_EL_FOLDL: "ALL l. AND_EL l = foldl op & True l"
8.4665 + by (import rich_list AND_EL_FOLDL)
8.4666 +
8.4667 +lemma AND_EL_FOLDR: "ALL l. AND_EL l = foldr op & l True"
8.4668 + by (import rich_list AND_EL_FOLDR)
8.4669 +
8.4670 +lemma OR_EL_FOLDL: "ALL l. OR_EL l = foldl op | False l"
8.4671 + by (import rich_list OR_EL_FOLDL)
8.4672 +
8.4673 +lemma OR_EL_FOLDR: "ALL l. OR_EL l = foldr op | l False"
8.4674 + by (import rich_list OR_EL_FOLDR)
8.4675 +
8.4676 +;end_setup
8.4677 +
8.4678 +;setup_theory state_transformer
8.4679 +
8.4680 +constdefs
8.4681 + UNIT :: "'b => 'a => 'b * 'a"
8.4682 + "(op ==::('b => 'a => 'b * 'a) => ('b => 'a => 'b * 'a) => prop)
8.4683 + (UNIT::'b => 'a => 'b * 'a) (Pair::'b => 'a => 'b * 'a)"
8.4684 +
8.4685 +lemma UNIT_DEF: "ALL x::'b. UNIT x = Pair x"
8.4686 + by (import state_transformer UNIT_DEF)
8.4687 +
8.4688 +constdefs
8.4689 + BIND :: "('a => 'b * 'a) => ('b => 'a => 'c * 'a) => 'a => 'c * 'a"
8.4690 + "BIND == %g f. split f o g"
8.4691 +
8.4692 +lemma BIND_DEF: "ALL g f. BIND g f = split f o g"
8.4693 + by (import state_transformer BIND_DEF)
8.4694 +
8.4695 +constdefs
8.4696 + MMAP :: "('c => 'b) => ('a => 'c * 'a) => 'a => 'b * 'a"
8.4697 + "MMAP == %(f::'c => 'b) m::'a => 'c * 'a. BIND m (UNIT o f)"
8.4698 +
8.4699 +lemma MMAP_DEF: "ALL (f::'c => 'b) m::'a => 'c * 'a. MMAP f m = BIND m (UNIT o f)"
8.4700 + by (import state_transformer MMAP_DEF)
8.4701 +
8.4702 +constdefs
8.4703 + JOIN :: "('a => ('a => 'b * 'a) * 'a) => 'a => 'b * 'a"
8.4704 + "JOIN == %z. BIND z I"
8.4705 +
8.4706 +lemma JOIN_DEF: "ALL z. JOIN z = BIND z I"
8.4707 + by (import state_transformer JOIN_DEF)
8.4708 +
8.4709 +lemma BIND_LEFT_UNIT: "ALL k x. BIND (UNIT x) k = k x"
8.4710 + by (import state_transformer BIND_LEFT_UNIT)
8.4711 +
8.4712 +lemma UNIT_UNCURRY: "ALL x. split UNIT x = x"
8.4713 + by (import state_transformer UNIT_UNCURRY)
8.4714 +
8.4715 +lemma BIND_RIGHT_UNIT: "ALL k. BIND k UNIT = k"
8.4716 + by (import state_transformer BIND_RIGHT_UNIT)
8.4717 +
8.4718 +lemma BIND_ASSOC: "ALL x xa xb. BIND x (%a. BIND (xa a) xb) = BIND (BIND x xa) xb"
8.4719 + by (import state_transformer BIND_ASSOC)
8.4720 +
8.4721 +lemma MMAP_ID: "MMAP I = I"
8.4722 + by (import state_transformer MMAP_ID)
8.4723 +
8.4724 +lemma MMAP_COMP: "ALL (f::'c => 'd) g::'b => 'c. MMAP (f o g) = MMAP f o MMAP g"
8.4725 + by (import state_transformer MMAP_COMP)
8.4726 +
8.4727 +lemma MMAP_UNIT: "ALL f::'b => 'c. MMAP f o UNIT = UNIT o f"
8.4728 + by (import state_transformer MMAP_UNIT)
8.4729 +
8.4730 +lemma MMAP_JOIN: "ALL f::'b => 'c. MMAP f o JOIN = JOIN o MMAP (MMAP f)"
8.4731 + by (import state_transformer MMAP_JOIN)
8.4732 +
8.4733 +lemma JOIN_UNIT: "JOIN o UNIT = I"
8.4734 + by (import state_transformer JOIN_UNIT)
8.4735 +
8.4736 +lemma JOIN_MMAP_UNIT: "JOIN o MMAP UNIT = I"
8.4737 + by (import state_transformer JOIN_MMAP_UNIT)
8.4738 +
8.4739 +lemma JOIN_MAP_JOIN: "JOIN o MMAP JOIN = JOIN o JOIN"
8.4740 + by (import state_transformer JOIN_MAP_JOIN)
8.4741 +
8.4742 +lemma JOIN_MAP: "ALL x xa. BIND x xa = JOIN (MMAP xa x)"
8.4743 + by (import state_transformer JOIN_MAP)
8.4744 +
8.4745 +lemma FST_o_UNIT: "ALL x. fst o UNIT x = K x"
8.4746 + by (import state_transformer FST_o_UNIT)
8.4747 +
8.4748 +lemma SND_o_UNIT: "ALL x. snd o UNIT x = I"
8.4749 + by (import state_transformer SND_o_UNIT)
8.4750 +
8.4751 +lemma FST_o_MMAP: "ALL x xa. fst o MMAP x xa = x o (fst o xa)"
8.4752 + by (import state_transformer FST_o_MMAP)
8.4753 +
8.4754 +;end_setup
8.4755 +
8.4756 +end
8.4757 +
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
9.2 +++ b/src/HOL/Import/HOL/HOL4Prob.thy Fri Apr 02 17:37:45 2004 +0200
9.3 @@ -0,0 +1,3981 @@
9.4 +theory HOL4Prob = HOL4Real:
9.5 +
9.6 +;setup_theory prob_extra
9.7 +
9.8 +lemma BOOL_BOOL_CASES_THM: "ALL f. f = (%b. False) | f = (%b. True) | f = (%b. b) | f = Not"
9.9 + by (import prob_extra BOOL_BOOL_CASES_THM)
9.10 +
9.11 +lemma EVEN_ODD_BASIC: "EVEN 0 & ~ EVEN 1 & EVEN 2 & ~ ODD 0 & ODD 1 & ~ ODD 2"
9.12 + by (import prob_extra EVEN_ODD_BASIC)
9.13 +
9.14 +lemma EVEN_ODD_EXISTS_EQ: "ALL n. EVEN n = (EX m. n = 2 * m) & ODD n = (EX m. n = Suc (2 * m))"
9.15 + by (import prob_extra EVEN_ODD_EXISTS_EQ)
9.16 +
9.17 +lemma DIV_THEN_MULT: "ALL p q. Suc q * (p div Suc q) <= p"
9.18 + by (import prob_extra DIV_THEN_MULT)
9.19 +
9.20 +lemma DIV_TWO_UNIQUE: "(All::(nat => bool) => bool)
9.21 + (%n::nat.
9.22 + (All::(nat => bool) => bool)
9.23 + (%q::nat.
9.24 + (All::(nat => bool) => bool)
9.25 + (%r::nat.
9.26 + (op -->::bool => bool => bool)
9.27 + ((op &::bool => bool => bool)
9.28 + ((op =::nat => nat => bool) n
9.29 + ((op +::nat => nat => nat)
9.30 + ((op *::nat => nat => nat)
9.31 + ((number_of::bin => nat)
9.32 + ((op BIT::bin => bool => bin)
9.33 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.34 + (True::bool))
9.35 + (False::bool)))
9.36 + q)
9.37 + r))
9.38 + ((op |::bool => bool => bool)
9.39 + ((op =::nat => nat => bool) r (0::nat))
9.40 + ((op =::nat => nat => bool) r (1::nat))))
9.41 + ((op &::bool => bool => bool)
9.42 + ((op =::nat => nat => bool) q
9.43 + ((op div::nat => nat => nat) n
9.44 + ((number_of::bin => nat)
9.45 + ((op BIT::bin => bool => bin)
9.46 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.47 + (True::bool))
9.48 + (False::bool)))))
9.49 + ((op =::nat => nat => bool) r
9.50 + ((op mod::nat => nat => nat) n
9.51 + ((number_of::bin => nat)
9.52 + ((op BIT::bin => bool => bin)
9.53 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.54 + (True::bool))
9.55 + (False::bool)))))))))"
9.56 + by (import prob_extra DIV_TWO_UNIQUE)
9.57 +
9.58 +lemma DIVISION_TWO: "ALL n::nat.
9.59 + n = (2::nat) * (n div (2::nat)) + n mod (2::nat) &
9.60 + (n mod (2::nat) = (0::nat) | n mod (2::nat) = (1::nat))"
9.61 + by (import prob_extra DIVISION_TWO)
9.62 +
9.63 +lemma DIV_TWO: "ALL n::nat. n = (2::nat) * (n div (2::nat)) + n mod (2::nat)"
9.64 + by (import prob_extra DIV_TWO)
9.65 +
9.66 +lemma MOD_TWO: "ALL n. n mod 2 = (if EVEN n then 0 else 1)"
9.67 + by (import prob_extra MOD_TWO)
9.68 +
9.69 +lemma DIV_TWO_BASIC: "(0::nat) div (2::nat) = (0::nat) &
9.70 +(1::nat) div (2::nat) = (0::nat) & (2::nat) div (2::nat) = (1::nat)"
9.71 + by (import prob_extra DIV_TWO_BASIC)
9.72 +
9.73 +lemma DIV_TWO_MONO: "(All::(nat => bool) => bool)
9.74 + (%m::nat.
9.75 + (All::(nat => bool) => bool)
9.76 + (%n::nat.
9.77 + (op -->::bool => bool => bool)
9.78 + ((op <::nat => nat => bool)
9.79 + ((op div::nat => nat => nat) m
9.80 + ((number_of::bin => nat)
9.81 + ((op BIT::bin => bool => bin)
9.82 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.83 + (True::bool))
9.84 + (False::bool))))
9.85 + ((op div::nat => nat => nat) n
9.86 + ((number_of::bin => nat)
9.87 + ((op BIT::bin => bool => bin)
9.88 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.89 + (True::bool))
9.90 + (False::bool)))))
9.91 + ((op <::nat => nat => bool) m n)))"
9.92 + by (import prob_extra DIV_TWO_MONO)
9.93 +
9.94 +lemma DIV_TWO_MONO_EVEN: "(All::(nat => bool) => bool)
9.95 + (%m::nat.
9.96 + (All::(nat => bool) => bool)
9.97 + (%n::nat.
9.98 + (op -->::bool => bool => bool) ((EVEN::nat => bool) n)
9.99 + ((op =::bool => bool => bool)
9.100 + ((op <::nat => nat => bool)
9.101 + ((op div::nat => nat => nat) m
9.102 + ((number_of::bin => nat)
9.103 + ((op BIT::bin => bool => bin)
9.104 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.105 + (True::bool))
9.106 + (False::bool))))
9.107 + ((op div::nat => nat => nat) n
9.108 + ((number_of::bin => nat)
9.109 + ((op BIT::bin => bool => bin)
9.110 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.111 + (True::bool))
9.112 + (False::bool)))))
9.113 + ((op <::nat => nat => bool) m n))))"
9.114 + by (import prob_extra DIV_TWO_MONO_EVEN)
9.115 +
9.116 +lemma DIV_TWO_CANCEL: "ALL n. 2 * n div 2 = n & Suc (2 * n) div 2 = n"
9.117 + by (import prob_extra DIV_TWO_CANCEL)
9.118 +
9.119 +lemma EXP_DIV_TWO: "ALL n::nat. (2::nat) ^ Suc n div (2::nat) = (2::nat) ^ n"
9.120 + by (import prob_extra EXP_DIV_TWO)
9.121 +
9.122 +lemma EVEN_EXP_TWO: "ALL n. EVEN (2 ^ n) = (n ~= 0)"
9.123 + by (import prob_extra EVEN_EXP_TWO)
9.124 +
9.125 +lemma DIV_TWO_EXP: "ALL (n::nat) k::nat.
9.126 + (k div (2::nat) < (2::nat) ^ n) = (k < (2::nat) ^ Suc n)"
9.127 + by (import prob_extra DIV_TWO_EXP)
9.128 +
9.129 +consts
9.130 + inf :: "(real => bool) => real"
9.131 +
9.132 +defs
9.133 + inf_primdef: "inf == %P. - sup (IMAGE uminus P)"
9.134 +
9.135 +lemma inf_def: "ALL P. inf P = - sup (IMAGE uminus P)"
9.136 + by (import prob_extra inf_def)
9.137 +
9.138 +lemma INF_DEF_ALT: "ALL P. inf P = - sup (%r. P (- r))"
9.139 + by (import prob_extra INF_DEF_ALT)
9.140 +
9.141 +lemma REAL_SUP_EXISTS_UNIQUE: "(All::((real => bool) => bool) => bool)
9.142 + (%P::real => bool.
9.143 + (op -->::bool => bool => bool)
9.144 + ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
9.145 + ((Ex::(real => bool) => bool)
9.146 + (%z::real.
9.147 + (All::(real => bool) => bool)
9.148 + (%x::real.
9.149 + (op -->::bool => bool => bool) (P x)
9.150 + ((op <=::real => real => bool) x z)))))
9.151 + ((Ex1::(real => bool) => bool)
9.152 + (%s::real.
9.153 + (All::(real => bool) => bool)
9.154 + (%y::real.
9.155 + (op =::bool => bool => bool)
9.156 + ((Ex::(real => bool) => bool)
9.157 + (%x::real.
9.158 + (op &::bool => bool => bool) (P x)
9.159 + ((op <::real => real => bool) y x)))
9.160 + ((op <::real => real => bool) y s)))))"
9.161 + by (import prob_extra REAL_SUP_EXISTS_UNIQUE)
9.162 +
9.163 +lemma REAL_SUP_MAX: "(All::((real => bool) => bool) => bool)
9.164 + (%P::real => bool.
9.165 + (All::(real => bool) => bool)
9.166 + (%z::real.
9.167 + (op -->::bool => bool => bool)
9.168 + ((op &::bool => bool => bool) (P z)
9.169 + ((All::(real => bool) => bool)
9.170 + (%x::real.
9.171 + (op -->::bool => bool => bool) (P x)
9.172 + ((op <=::real => real => bool) x z))))
9.173 + ((op =::real => real => bool) ((sup::(real => bool) => real) P)
9.174 + z)))"
9.175 + by (import prob_extra REAL_SUP_MAX)
9.176 +
9.177 +lemma REAL_INF_MIN: "(All::((real => bool) => bool) => bool)
9.178 + (%P::real => bool.
9.179 + (All::(real => bool) => bool)
9.180 + (%z::real.
9.181 + (op -->::bool => bool => bool)
9.182 + ((op &::bool => bool => bool) (P z)
9.183 + ((All::(real => bool) => bool)
9.184 + (%x::real.
9.185 + (op -->::bool => bool => bool) (P x)
9.186 + ((op <=::real => real => bool) z x))))
9.187 + ((op =::real => real => bool) ((inf::(real => bool) => real) P)
9.188 + z)))"
9.189 + by (import prob_extra REAL_INF_MIN)
9.190 +
9.191 +lemma HALF_POS: "(0::real) < (1::real) / (2::real)"
9.192 + by (import prob_extra HALF_POS)
9.193 +
9.194 +lemma HALF_CANCEL: "(2::real) * ((1::real) / (2::real)) = (1::real)"
9.195 + by (import prob_extra HALF_CANCEL)
9.196 +
9.197 +lemma POW_HALF_POS: "ALL n::nat. (0::real) < ((1::real) / (2::real)) ^ n"
9.198 + by (import prob_extra POW_HALF_POS)
9.199 +
9.200 +lemma POW_HALF_MONO: "(All::(nat => bool) => bool)
9.201 + (%m::nat.
9.202 + (All::(nat => bool) => bool)
9.203 + (%n::nat.
9.204 + (op -->::bool => bool => bool) ((op <=::nat => nat => bool) m n)
9.205 + ((op <=::real => real => bool)
9.206 + ((op ^::real => nat => real)
9.207 + ((op /::real => real => real) (1::real)
9.208 + ((number_of::bin => real)
9.209 + ((op BIT::bin => bool => bin)
9.210 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.211 + (True::bool))
9.212 + (False::bool))))
9.213 + n)
9.214 + ((op ^::real => nat => real)
9.215 + ((op /::real => real => real) (1::real)
9.216 + ((number_of::bin => real)
9.217 + ((op BIT::bin => bool => bin)
9.218 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.219 + (True::bool))
9.220 + (False::bool))))
9.221 + m))))"
9.222 + by (import prob_extra POW_HALF_MONO)
9.223 +
9.224 +lemma POW_HALF_TWICE: "ALL n::nat.
9.225 + ((1::real) / (2::real)) ^ n = (2::real) * ((1::real) / (2::real)) ^ Suc n"
9.226 + by (import prob_extra POW_HALF_TWICE)
9.227 +
9.228 +lemma X_HALF_HALF: "ALL x::real. (1::real) / (2::real) * x + (1::real) / (2::real) * x = x"
9.229 + by (import prob_extra X_HALF_HALF)
9.230 +
9.231 +lemma REAL_SUP_LE_X: "(All::((real => bool) => bool) => bool)
9.232 + (%P::real => bool.
9.233 + (All::(real => bool) => bool)
9.234 + (%x::real.
9.235 + (op -->::bool => bool => bool)
9.236 + ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
9.237 + ((All::(real => bool) => bool)
9.238 + (%r::real.
9.239 + (op -->::bool => bool => bool) (P r)
9.240 + ((op <=::real => real => bool) r x))))
9.241 + ((op <=::real => real => bool) ((sup::(real => bool) => real) P)
9.242 + x)))"
9.243 + by (import prob_extra REAL_SUP_LE_X)
9.244 +
9.245 +lemma REAL_X_LE_SUP: "(All::((real => bool) => bool) => bool)
9.246 + (%P::real => bool.
9.247 + (All::(real => bool) => bool)
9.248 + (%x::real.
9.249 + (op -->::bool => bool => bool)
9.250 + ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P)
9.251 + ((op &::bool => bool => bool)
9.252 + ((Ex::(real => bool) => bool)
9.253 + (%z::real.
9.254 + (All::(real => bool) => bool)
9.255 + (%r::real.
9.256 + (op -->::bool => bool => bool) (P r)
9.257 + ((op <=::real => real => bool) r z))))
9.258 + ((Ex::(real => bool) => bool)
9.259 + (%r::real.
9.260 + (op &::bool => bool => bool) (P r)
9.261 + ((op <=::real => real => bool) x r)))))
9.262 + ((op <=::real => real => bool) x
9.263 + ((sup::(real => bool) => real) P))))"
9.264 + by (import prob_extra REAL_X_LE_SUP)
9.265 +
9.266 +lemma ABS_BETWEEN_LE: "ALL (x::real) (y::real) d::real.
9.267 + ((0::real) <= d & x - d <= y & y <= x + d) = (abs (y - x) <= d)"
9.268 + by (import prob_extra ABS_BETWEEN_LE)
9.269 +
9.270 +lemma ONE_MINUS_HALF: "(1::real) - (1::real) / (2::real) = (1::real) / (2::real)"
9.271 + by (import prob_extra ONE_MINUS_HALF)
9.272 +
9.273 +lemma HALF_LT_1: "(1::real) / (2::real) < (1::real)"
9.274 + by (import prob_extra HALF_LT_1)
9.275 +
9.276 +lemma POW_HALF_EXP: "ALL n::nat. ((1::real) / (2::real)) ^ n = inverse (real ((2::nat) ^ n))"
9.277 + by (import prob_extra POW_HALF_EXP)
9.278 +
9.279 +lemma INV_SUC_POS: "ALL n. 0 < 1 / real (Suc n)"
9.280 + by (import prob_extra INV_SUC_POS)
9.281 +
9.282 +lemma INV_SUC_MAX: "ALL x. 1 / real (Suc x) <= 1"
9.283 + by (import prob_extra INV_SUC_MAX)
9.284 +
9.285 +lemma INV_SUC: "ALL n. 0 < 1 / real (Suc n) & 1 / real (Suc n) <= 1"
9.286 + by (import prob_extra INV_SUC)
9.287 +
9.288 +lemma ABS_UNIT_INTERVAL: "(All::(real => bool) => bool)
9.289 + (%x::real.
9.290 + (All::(real => bool) => bool)
9.291 + (%y::real.
9.292 + (op -->::bool => bool => bool)
9.293 + ((op &::bool => bool => bool)
9.294 + ((op <=::real => real => bool) (0::real) x)
9.295 + ((op &::bool => bool => bool)
9.296 + ((op <=::real => real => bool) x (1::real))
9.297 + ((op &::bool => bool => bool)
9.298 + ((op <=::real => real => bool) (0::real) y)
9.299 + ((op <=::real => real => bool) y (1::real)))))
9.300 + ((op <=::real => real => bool)
9.301 + ((abs::real => real) ((op -::real => real => real) x y))
9.302 + (1::real))))"
9.303 + by (import prob_extra ABS_UNIT_INTERVAL)
9.304 +
9.305 +lemma MEM_NIL: "ALL l. (ALL x. ~ x mem l) = (l = [])"
9.306 + by (import prob_extra MEM_NIL)
9.307 +
9.308 +lemma MAP_MEM: "ALL f l x. x mem map f l = (EX y. y mem l & x = f y)"
9.309 + by (import prob_extra MAP_MEM)
9.310 +
9.311 +lemma MEM_NIL_MAP_CONS: "ALL x l. ~ [] mem map (op # x) l"
9.312 + by (import prob_extra MEM_NIL_MAP_CONS)
9.313 +
9.314 +lemma FILTER_TRUE: "ALL l. [x:l. True] = l"
9.315 + by (import prob_extra FILTER_TRUE)
9.316 +
9.317 +lemma FILTER_FALSE: "ALL l. [x:l. False] = []"
9.318 + by (import prob_extra FILTER_FALSE)
9.319 +
9.320 +lemma FILTER_MEM: "(All::(('a => bool) => bool) => bool)
9.321 + (%P::'a => bool.
9.322 + (All::('a => bool) => bool)
9.323 + (%x::'a.
9.324 + (All::('a list => bool) => bool)
9.325 + (%l::'a list.
9.326 + (op -->::bool => bool => bool)
9.327 + ((op mem::'a => 'a list => bool) x
9.328 + ((filter::('a => bool) => 'a list => 'a list) P l))
9.329 + (P x))))"
9.330 + by (import prob_extra FILTER_MEM)
9.331 +
9.332 +lemma MEM_FILTER: "(All::(('a => bool) => bool) => bool)
9.333 + (%P::'a => bool.
9.334 + (All::('a list => bool) => bool)
9.335 + (%l::'a list.
9.336 + (All::('a => bool) => bool)
9.337 + (%x::'a.
9.338 + (op -->::bool => bool => bool)
9.339 + ((op mem::'a => 'a list => bool) x
9.340 + ((filter::('a => bool) => 'a list => 'a list) P l))
9.341 + ((op mem::'a => 'a list => bool) x l))))"
9.342 + by (import prob_extra MEM_FILTER)
9.343 +
9.344 +lemma FILTER_OUT_ELT: "ALL x l. x mem l | [y:l. y ~= x] = l"
9.345 + by (import prob_extra FILTER_OUT_ELT)
9.346 +
9.347 +lemma IS_PREFIX_NIL: "ALL x. IS_PREFIX x [] & IS_PREFIX [] x = (x = [])"
9.348 + by (import prob_extra IS_PREFIX_NIL)
9.349 +
9.350 +lemma IS_PREFIX_REFL: "ALL x. IS_PREFIX x x"
9.351 + by (import prob_extra IS_PREFIX_REFL)
9.352 +
9.353 +lemma IS_PREFIX_ANTISYM: "(All::('a list => bool) => bool)
9.354 + (%x::'a list.
9.355 + (All::('a list => bool) => bool)
9.356 + (%y::'a list.
9.357 + (op -->::bool => bool => bool)
9.358 + ((op &::bool => bool => bool)
9.359 + ((IS_PREFIX::'a list => 'a list => bool) y x)
9.360 + ((IS_PREFIX::'a list => 'a list => bool) x y))
9.361 + ((op =::'a list => 'a list => bool) x y)))"
9.362 + by (import prob_extra IS_PREFIX_ANTISYM)
9.363 +
9.364 +lemma IS_PREFIX_TRANS: "(All::('a list => bool) => bool)
9.365 + (%x::'a list.
9.366 + (All::('a list => bool) => bool)
9.367 + (%y::'a list.
9.368 + (All::('a list => bool) => bool)
9.369 + (%z::'a list.
9.370 + (op -->::bool => bool => bool)
9.371 + ((op &::bool => bool => bool)
9.372 + ((IS_PREFIX::'a list => 'a list => bool) x y)
9.373 + ((IS_PREFIX::'a list => 'a list => bool) y z))
9.374 + ((IS_PREFIX::'a list => 'a list => bool) x z))))"
9.375 + by (import prob_extra IS_PREFIX_TRANS)
9.376 +
9.377 +lemma IS_PREFIX_BUTLAST: "ALL x y. IS_PREFIX (x # y) (butlast (x # y))"
9.378 + by (import prob_extra IS_PREFIX_BUTLAST)
9.379 +
9.380 +lemma IS_PREFIX_LENGTH: "(All::('a list => bool) => bool)
9.381 + (%x::'a list.
9.382 + (All::('a list => bool) => bool)
9.383 + (%y::'a list.
9.384 + (op -->::bool => bool => bool)
9.385 + ((IS_PREFIX::'a list => 'a list => bool) y x)
9.386 + ((op <=::nat => nat => bool) ((size::'a list => nat) x)
9.387 + ((size::'a list => nat) y))))"
9.388 + by (import prob_extra IS_PREFIX_LENGTH)
9.389 +
9.390 +lemma IS_PREFIX_LENGTH_ANTI: "(All::('a list => bool) => bool)
9.391 + (%x::'a list.
9.392 + (All::('a list => bool) => bool)
9.393 + (%y::'a list.
9.394 + (op -->::bool => bool => bool)
9.395 + ((op &::bool => bool => bool)
9.396 + ((IS_PREFIX::'a list => 'a list => bool) y x)
9.397 + ((op =::nat => nat => bool) ((size::'a list => nat) x)
9.398 + ((size::'a list => nat) y)))
9.399 + ((op =::'a list => 'a list => bool) x y)))"
9.400 + by (import prob_extra IS_PREFIX_LENGTH_ANTI)
9.401 +
9.402 +lemma IS_PREFIX_SNOC: "ALL x y z. IS_PREFIX (SNOC x y) z = (IS_PREFIX y z | z = SNOC x y)"
9.403 + by (import prob_extra IS_PREFIX_SNOC)
9.404 +
9.405 +lemma FOLDR_MAP: "ALL (f::'b => 'c => 'c) (e::'c) (g::'a => 'b) l::'a list.
9.406 + foldr f (map g l) e = foldr (%x::'a. f (g x)) l e"
9.407 + by (import prob_extra FOLDR_MAP)
9.408 +
9.409 +lemma LAST_MEM: "ALL h t. last (h # t) mem h # t"
9.410 + by (import prob_extra LAST_MEM)
9.411 +
9.412 +lemma LAST_MAP_CONS: "ALL (b::bool) (h::bool list) t::bool list list.
9.413 + EX x::bool list. last (map (op # b) (h # t)) = b # x"
9.414 + by (import prob_extra LAST_MAP_CONS)
9.415 +
9.416 +lemma EXISTS_LONGEST: "(All::('a list => bool) => bool)
9.417 + (%x::'a list.
9.418 + (All::('a list list => bool) => bool)
9.419 + (%y::'a list list.
9.420 + (Ex::('a list => bool) => bool)
9.421 + (%z::'a list.
9.422 + (op &::bool => bool => bool)
9.423 + ((op mem::'a list => 'a list list => bool) z
9.424 + ((op #::'a list => 'a list list => 'a list list) x y))
9.425 + ((All::('a list => bool) => bool)
9.426 + (%w::'a list.
9.427 + (op -->::bool => bool => bool)
9.428 + ((op mem::'a list => 'a list list => bool) w
9.429 + ((op #::'a list => 'a list list => 'a list list) x
9.430 + y))
9.431 + ((op <=::nat => nat => bool)
9.432 + ((size::'a list => nat) w)
9.433 + ((size::'a list => nat) z)))))))"
9.434 + by (import prob_extra EXISTS_LONGEST)
9.435 +
9.436 +lemma UNION_DEF_ALT: "ALL s t. pred_set.UNION s t = (%x. s x | t x)"
9.437 + by (import prob_extra UNION_DEF_ALT)
9.438 +
9.439 +lemma INTER_UNION_RDISTRIB: "ALL p q r.
9.440 + pred_set.INTER (pred_set.UNION p q) r =
9.441 + pred_set.UNION (pred_set.INTER p r) (pred_set.INTER q r)"
9.442 + by (import prob_extra INTER_UNION_RDISTRIB)
9.443 +
9.444 +lemma SUBSET_EQ: "ALL x xa. (x = xa) = (SUBSET x xa & SUBSET xa x)"
9.445 + by (import prob_extra SUBSET_EQ)
9.446 +
9.447 +lemma INTER_IS_EMPTY: "ALL s t. (pred_set.INTER s t = EMPTY) = (ALL x. ~ s x | ~ t x)"
9.448 + by (import prob_extra INTER_IS_EMPTY)
9.449 +
9.450 +lemma UNION_DISJOINT_SPLIT: "(All::(('a => bool) => bool) => bool)
9.451 + (%s::'a => bool.
9.452 + (All::(('a => bool) => bool) => bool)
9.453 + (%t::'a => bool.
9.454 + (All::(('a => bool) => bool) => bool)
9.455 + (%u::'a => bool.
9.456 + (op -->::bool => bool => bool)
9.457 + ((op &::bool => bool => bool)
9.458 + ((op =::('a => bool) => ('a => bool) => bool)
9.459 + ((pred_set.UNION::('a => bool)
9.460 +=> ('a => bool) => 'a => bool)
9.461 + s t)
9.462 + ((pred_set.UNION::('a => bool)
9.463 +=> ('a => bool) => 'a => bool)
9.464 + s u))
9.465 + ((op &::bool => bool => bool)
9.466 + ((op =::('a => bool) => ('a => bool) => bool)
9.467 + ((pred_set.INTER::('a => bool)
9.468 + => ('a => bool) => 'a => bool)
9.469 + s t)
9.470 + (EMPTY::'a => bool))
9.471 + ((op =::('a => bool) => ('a => bool) => bool)
9.472 + ((pred_set.INTER::('a => bool)
9.473 + => ('a => bool) => 'a => bool)
9.474 + s u)
9.475 + (EMPTY::'a => bool))))
9.476 + ((op =::('a => bool) => ('a => bool) => bool) t u))))"
9.477 + by (import prob_extra UNION_DISJOINT_SPLIT)
9.478 +
9.479 +lemma GSPEC_DEF_ALT: "ALL f. GSPEC f = (%v. EX x. (v, True) = f x)"
9.480 + by (import prob_extra GSPEC_DEF_ALT)
9.481 +
9.482 +;end_setup
9.483 +
9.484 +;setup_theory prob_canon
9.485 +
9.486 +consts
9.487 + alg_twin :: "bool list => bool list => bool"
9.488 +
9.489 +defs
9.490 + alg_twin_primdef: "alg_twin == %x y. EX l. x = SNOC True l & y = SNOC False l"
9.491 +
9.492 +lemma alg_twin_def: "ALL x y. alg_twin x y = (EX l. x = SNOC True l & y = SNOC False l)"
9.493 + by (import prob_canon alg_twin_def)
9.494 +
9.495 +constdefs
9.496 + alg_order_tupled :: "bool list * bool list => bool"
9.497 + "(op ==::(bool list * bool list => bool)
9.498 + => (bool list * bool list => bool) => prop)
9.499 + (alg_order_tupled::bool list * bool list => bool)
9.500 + ((WFREC::(bool list * bool list => bool list * bool list => bool)
9.501 + => ((bool list * bool list => bool)
9.502 + => bool list * bool list => bool)
9.503 + => bool list * bool list => bool)
9.504 + ((Eps::((bool list * bool list => bool list * bool list => bool) => bool)
9.505 + => bool list * bool list => bool list * bool list => bool)
9.506 + (%R::bool list * bool list => bool list * bool list => bool.
9.507 + (op &::bool => bool => bool)
9.508 + ((WF::(bool list * bool list => bool list * bool list => bool)
9.509 + => bool)
9.510 + R)
9.511 + ((All::(bool => bool) => bool)
9.512 + (%h'::bool.
9.513 + (All::(bool => bool) => bool)
9.514 + (%h::bool.
9.515 + (All::(bool list => bool) => bool)
9.516 + (%t'::bool list.
9.517 + (All::(bool list => bool) => bool)
9.518 + (%t::bool list.
9.519 + R ((Pair::bool list
9.520 + => bool list => bool list * bool list)
9.521 + t t')
9.522 + ((Pair::bool list
9.523 + => bool list => bool list * bool list)
9.524 + ((op #::bool => bool list => bool list) h
9.525 + t)
9.526 + ((op #::bool => bool list => bool list) h'
9.527 + t')))))))))
9.528 + (%alg_order_tupled::bool list * bool list => bool.
9.529 + (split::(bool list => bool list => bool)
9.530 + => bool list * bool list => bool)
9.531 + (%(v::bool list) v1::bool list.
9.532 + (list_case::bool
9.533 + => (bool => bool list => bool) => bool list => bool)
9.534 + ((list_case::bool
9.535 + => (bool => bool list => bool)
9.536 + => bool list => bool)
9.537 + (True::bool) (%(v8::bool) v9::bool list. True::bool) v1)
9.538 + (%(v4::bool) v5::bool list.
9.539 + (list_case::bool
9.540 + => (bool => bool list => bool)
9.541 + => bool list => bool)
9.542 + (False::bool)
9.543 + (%(v10::bool) v11::bool list.
9.544 + (op |::bool => bool => bool)
9.545 + ((op &::bool => bool => bool)
9.546 + ((op =::bool => bool => bool) v4 (True::bool))
9.547 + ((op =::bool => bool => bool) v10 (False::bool)))
9.548 + ((op &::bool => bool => bool)
9.549 + ((op =::bool => bool => bool) v4 v10)
9.550 + (alg_order_tupled
9.551 + ((Pair::bool list
9.552 + => bool list => bool list * bool list)
9.553 + v5 v11))))
9.554 + v1)
9.555 + v)))"
9.556 +
9.557 +lemma alg_order_tupled_primitive_def: "(op =::(bool list * bool list => bool)
9.558 + => (bool list * bool list => bool) => bool)
9.559 + (alg_order_tupled::bool list * bool list => bool)
9.560 + ((WFREC::(bool list * bool list => bool list * bool list => bool)
9.561 + => ((bool list * bool list => bool)
9.562 + => bool list * bool list => bool)
9.563 + => bool list * bool list => bool)
9.564 + ((Eps::((bool list * bool list => bool list * bool list => bool) => bool)
9.565 + => bool list * bool list => bool list * bool list => bool)
9.566 + (%R::bool list * bool list => bool list * bool list => bool.
9.567 + (op &::bool => bool => bool)
9.568 + ((WF::(bool list * bool list => bool list * bool list => bool)
9.569 + => bool)
9.570 + R)
9.571 + ((All::(bool => bool) => bool)
9.572 + (%h'::bool.
9.573 + (All::(bool => bool) => bool)
9.574 + (%h::bool.
9.575 + (All::(bool list => bool) => bool)
9.576 + (%t'::bool list.
9.577 + (All::(bool list => bool) => bool)
9.578 + (%t::bool list.
9.579 + R ((Pair::bool list
9.580 + => bool list => bool list * bool list)
9.581 + t t')
9.582 + ((Pair::bool list
9.583 + => bool list => bool list * bool list)
9.584 + ((op #::bool => bool list => bool list) h
9.585 + t)
9.586 + ((op #::bool => bool list => bool list) h'
9.587 + t')))))))))
9.588 + (%alg_order_tupled::bool list * bool list => bool.
9.589 + (split::(bool list => bool list => bool)
9.590 + => bool list * bool list => bool)
9.591 + (%(v::bool list) v1::bool list.
9.592 + (list_case::bool
9.593 + => (bool => bool list => bool) => bool list => bool)
9.594 + ((list_case::bool
9.595 + => (bool => bool list => bool)
9.596 + => bool list => bool)
9.597 + (True::bool) (%(v8::bool) v9::bool list. True::bool) v1)
9.598 + (%(v4::bool) v5::bool list.
9.599 + (list_case::bool
9.600 + => (bool => bool list => bool)
9.601 + => bool list => bool)
9.602 + (False::bool)
9.603 + (%(v10::bool) v11::bool list.
9.604 + (op |::bool => bool => bool)
9.605 + ((op &::bool => bool => bool)
9.606 + ((op =::bool => bool => bool) v4 (True::bool))
9.607 + ((op =::bool => bool => bool) v10 (False::bool)))
9.608 + ((op &::bool => bool => bool)
9.609 + ((op =::bool => bool => bool) v4 v10)
9.610 + (alg_order_tupled
9.611 + ((Pair::bool list
9.612 + => bool list => bool list * bool list)
9.613 + v5 v11))))
9.614 + v1)
9.615 + v)))"
9.616 + by (import prob_canon alg_order_tupled_primitive_def)
9.617 +
9.618 +consts
9.619 + alg_order :: "bool list => bool list => bool"
9.620 +
9.621 +defs
9.622 + alg_order_primdef: "alg_order == %x x1. alg_order_tupled (x, x1)"
9.623 +
9.624 +lemma alg_order_curried_def: "ALL x x1. alg_order x x1 = alg_order_tupled (x, x1)"
9.625 + by (import prob_canon alg_order_curried_def)
9.626 +
9.627 +lemma alg_order_ind: "(All::((bool list => bool list => bool) => bool) => bool)
9.628 + (%P::bool list => bool list => bool.
9.629 + (op -->::bool => bool => bool)
9.630 + ((op &::bool => bool => bool)
9.631 + ((All::(bool => bool) => bool)
9.632 + (%x::bool.
9.633 + (All::(bool list => bool) => bool)
9.634 + (%xa::bool list.
9.635 + P ([]::bool list)
9.636 + ((op #::bool => bool list => bool list) x xa))))
9.637 + ((op &::bool => bool => bool) (P ([]::bool list) ([]::bool list))
9.638 + ((op &::bool => bool => bool)
9.639 + ((All::(bool => bool) => bool)
9.640 + (%x::bool.
9.641 + (All::(bool list => bool) => bool)
9.642 + (%xa::bool list.
9.643 + P ((op #::bool => bool list => bool list) x xa)
9.644 + ([]::bool list))))
9.645 + ((All::(bool => bool) => bool)
9.646 + (%x::bool.
9.647 + (All::(bool list => bool) => bool)
9.648 + (%xa::bool list.
9.649 + (All::(bool => bool) => bool)
9.650 + (%xb::bool.
9.651 + (All::(bool list => bool) => bool)
9.652 + (%xc::bool list.
9.653 + (op -->::bool => bool => bool) (P xa xc)
9.654 + (P ((op #::bool => bool list => bool list)
9.655 + x xa)
9.656 + ((op #::bool => bool list => bool list)
9.657 +xb xc))))))))))
9.658 + ((All::(bool list => bool) => bool)
9.659 + (%x::bool list. (All::(bool list => bool) => bool) (P x))))"
9.660 + by (import prob_canon alg_order_ind)
9.661 +
9.662 +lemma alg_order_def: "alg_order [] (v6 # v7) = True &
9.663 +alg_order [] [] = True &
9.664 +alg_order (v2 # v3) [] = False &
9.665 +alg_order (h # t) (h' # t') =
9.666 +(h = True & h' = False | h = h' & alg_order t t')"
9.667 + by (import prob_canon alg_order_def)
9.668 +
9.669 +consts
9.670 + alg_sorted :: "bool list list => bool"
9.671 +
9.672 +defs
9.673 + alg_sorted_primdef: "alg_sorted ==
9.674 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
9.675 + (%alg_sorted.
9.676 + list_case True
9.677 + (%v2. list_case True
9.678 + (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
9.679 +
9.680 +lemma alg_sorted_primitive_def: "alg_sorted =
9.681 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
9.682 + (%alg_sorted.
9.683 + list_case True
9.684 + (%v2. list_case True
9.685 + (%v6 v7. alg_order v2 v6 & alg_sorted (v6 # v7))))"
9.686 + by (import prob_canon alg_sorted_primitive_def)
9.687 +
9.688 +lemma alg_sorted_ind: "(All::((bool list list => bool) => bool) => bool)
9.689 + (%P::bool list list => bool.
9.690 + (op -->::bool => bool => bool)
9.691 + ((op &::bool => bool => bool)
9.692 + ((All::(bool list => bool) => bool)
9.693 + (%x::bool list.
9.694 + (All::(bool list => bool) => bool)
9.695 + (%y::bool list.
9.696 + (All::(bool list list => bool) => bool)
9.697 + (%z::bool list list.
9.698 + (op -->::bool => bool => bool)
9.699 + (P ((op #::bool list
9.700 + => bool list list => bool list list)
9.701 + y z))
9.702 + (P ((op #::bool list
9.703 + => bool list list => bool list list)
9.704 + x ((op #::bool list
9.705 + => bool list list => bool list list)
9.706 + y z)))))))
9.707 + ((op &::bool => bool => bool)
9.708 + ((All::(bool list => bool) => bool)
9.709 + (%v::bool list.
9.710 + P ((op #::bool list => bool list list => bool list list) v
9.711 + ([]::bool list list))))
9.712 + (P ([]::bool list list))))
9.713 + ((All::(bool list list => bool) => bool) P))"
9.714 + by (import prob_canon alg_sorted_ind)
9.715 +
9.716 +lemma alg_sorted_def: "alg_sorted (x # y # z) = (alg_order x y & alg_sorted (y # z)) &
9.717 +alg_sorted [v] = True & alg_sorted [] = True"
9.718 + by (import prob_canon alg_sorted_def)
9.719 +
9.720 +consts
9.721 + alg_prefixfree :: "bool list list => bool"
9.722 +
9.723 +defs
9.724 + alg_prefixfree_primdef: "alg_prefixfree ==
9.725 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
9.726 + (%alg_prefixfree.
9.727 + list_case True
9.728 + (%v2. list_case True
9.729 + (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
9.730 +
9.731 +lemma alg_prefixfree_primitive_def: "alg_prefixfree =
9.732 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
9.733 + (%alg_prefixfree.
9.734 + list_case True
9.735 + (%v2. list_case True
9.736 + (%v6 v7. ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))"
9.737 + by (import prob_canon alg_prefixfree_primitive_def)
9.738 +
9.739 +lemma alg_prefixfree_ind: "(All::((bool list list => bool) => bool) => bool)
9.740 + (%P::bool list list => bool.
9.741 + (op -->::bool => bool => bool)
9.742 + ((op &::bool => bool => bool)
9.743 + ((All::(bool list => bool) => bool)
9.744 + (%x::bool list.
9.745 + (All::(bool list => bool) => bool)
9.746 + (%y::bool list.
9.747 + (All::(bool list list => bool) => bool)
9.748 + (%z::bool list list.
9.749 + (op -->::bool => bool => bool)
9.750 + (P ((op #::bool list
9.751 + => bool list list => bool list list)
9.752 + y z))
9.753 + (P ((op #::bool list
9.754 + => bool list list => bool list list)
9.755 + x ((op #::bool list
9.756 + => bool list list => bool list list)
9.757 + y z)))))))
9.758 + ((op &::bool => bool => bool)
9.759 + ((All::(bool list => bool) => bool)
9.760 + (%v::bool list.
9.761 + P ((op #::bool list => bool list list => bool list list) v
9.762 + ([]::bool list list))))
9.763 + (P ([]::bool list list))))
9.764 + ((All::(bool list list => bool) => bool) P))"
9.765 + by (import prob_canon alg_prefixfree_ind)
9.766 +
9.767 +lemma alg_prefixfree_def: "alg_prefixfree (x # y # z) = (~ IS_PREFIX y x & alg_prefixfree (y # z)) &
9.768 +alg_prefixfree [v] = True & alg_prefixfree [] = True"
9.769 + by (import prob_canon alg_prefixfree_def)
9.770 +
9.771 +consts
9.772 + alg_twinfree :: "bool list list => bool"
9.773 +
9.774 +defs
9.775 + alg_twinfree_primdef: "alg_twinfree ==
9.776 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
9.777 + (%alg_twinfree.
9.778 + list_case True
9.779 + (%v2. list_case True
9.780 + (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
9.781 +
9.782 +lemma alg_twinfree_primitive_def: "alg_twinfree =
9.783 +WFREC (SOME R. WF R & (ALL x z y. R (y # z) (x # y # z)))
9.784 + (%alg_twinfree.
9.785 + list_case True
9.786 + (%v2. list_case True
9.787 + (%v6 v7. ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))"
9.788 + by (import prob_canon alg_twinfree_primitive_def)
9.789 +
9.790 +lemma alg_twinfree_ind: "(All::((bool list list => bool) => bool) => bool)
9.791 + (%P::bool list list => bool.
9.792 + (op -->::bool => bool => bool)
9.793 + ((op &::bool => bool => bool)
9.794 + ((All::(bool list => bool) => bool)
9.795 + (%x::bool list.
9.796 + (All::(bool list => bool) => bool)
9.797 + (%y::bool list.
9.798 + (All::(bool list list => bool) => bool)
9.799 + (%z::bool list list.
9.800 + (op -->::bool => bool => bool)
9.801 + (P ((op #::bool list
9.802 + => bool list list => bool list list)
9.803 + y z))
9.804 + (P ((op #::bool list
9.805 + => bool list list => bool list list)
9.806 + x ((op #::bool list
9.807 + => bool list list => bool list list)
9.808 + y z)))))))
9.809 + ((op &::bool => bool => bool)
9.810 + ((All::(bool list => bool) => bool)
9.811 + (%v::bool list.
9.812 + P ((op #::bool list => bool list list => bool list list) v
9.813 + ([]::bool list list))))
9.814 + (P ([]::bool list list))))
9.815 + ((All::(bool list list => bool) => bool) P))"
9.816 + by (import prob_canon alg_twinfree_ind)
9.817 +
9.818 +lemma alg_twinfree_def: "alg_twinfree (x # y # z) = (~ alg_twin x y & alg_twinfree (y # z)) &
9.819 +alg_twinfree [v] = True & alg_twinfree [] = True"
9.820 + by (import prob_canon alg_twinfree_def)
9.821 +
9.822 +consts
9.823 + alg_longest :: "bool list list => nat"
9.824 +
9.825 +defs
9.826 + alg_longest_primdef: "alg_longest == FOLDR (%h t. if t <= length h then length h else t) 0"
9.827 +
9.828 +lemma alg_longest_def: "alg_longest = FOLDR (%h t. if t <= length h then length h else t) 0"
9.829 + by (import prob_canon alg_longest_def)
9.830 +
9.831 +consts
9.832 + alg_canon_prefs :: "bool list => bool list list => bool list list"
9.833 +
9.834 +specification (alg_canon_prefs_primdef: alg_canon_prefs) alg_canon_prefs_def: "(ALL l. alg_canon_prefs l [] = [l]) &
9.835 +(ALL l h t.
9.836 + alg_canon_prefs l (h # t) =
9.837 + (if IS_PREFIX h l then alg_canon_prefs l t else l # h # t))"
9.838 + by (import prob_canon alg_canon_prefs_def)
9.839 +
9.840 +consts
9.841 + alg_canon_find :: "bool list => bool list list => bool list list"
9.842 +
9.843 +specification (alg_canon_find_primdef: alg_canon_find) alg_canon_find_def: "(ALL l. alg_canon_find l [] = [l]) &
9.844 +(ALL l h t.
9.845 + alg_canon_find l (h # t) =
9.846 + (if alg_order h l
9.847 + then if IS_PREFIX l h then h # t else h # alg_canon_find l t
9.848 + else alg_canon_prefs l (h # t)))"
9.849 + by (import prob_canon alg_canon_find_def)
9.850 +
9.851 +consts
9.852 + alg_canon1 :: "bool list list => bool list list"
9.853 +
9.854 +defs
9.855 + alg_canon1_primdef: "alg_canon1 == FOLDR alg_canon_find []"
9.856 +
9.857 +lemma alg_canon1_def: "alg_canon1 = FOLDR alg_canon_find []"
9.858 + by (import prob_canon alg_canon1_def)
9.859 +
9.860 +consts
9.861 + alg_canon_merge :: "bool list => bool list list => bool list list"
9.862 +
9.863 +specification (alg_canon_merge_primdef: alg_canon_merge) alg_canon_merge_def: "(ALL l. alg_canon_merge l [] = [l]) &
9.864 +(ALL l h t.
9.865 + alg_canon_merge l (h # t) =
9.866 + (if alg_twin l h then alg_canon_merge (butlast h) t else l # h # t))"
9.867 + by (import prob_canon alg_canon_merge_def)
9.868 +
9.869 +consts
9.870 + alg_canon2 :: "bool list list => bool list list"
9.871 +
9.872 +defs
9.873 + alg_canon2_primdef: "alg_canon2 == FOLDR alg_canon_merge []"
9.874 +
9.875 +lemma alg_canon2_def: "alg_canon2 = FOLDR alg_canon_merge []"
9.876 + by (import prob_canon alg_canon2_def)
9.877 +
9.878 +consts
9.879 + alg_canon :: "bool list list => bool list list"
9.880 +
9.881 +defs
9.882 + alg_canon_primdef: "alg_canon == %l. alg_canon2 (alg_canon1 l)"
9.883 +
9.884 +lemma alg_canon_def: "ALL l. alg_canon l = alg_canon2 (alg_canon1 l)"
9.885 + by (import prob_canon alg_canon_def)
9.886 +
9.887 +consts
9.888 + algebra_canon :: "bool list list => bool"
9.889 +
9.890 +defs
9.891 + algebra_canon_primdef: "algebra_canon == %l. alg_canon l = l"
9.892 +
9.893 +lemma algebra_canon_def: "ALL l. algebra_canon l = (alg_canon l = l)"
9.894 + by (import prob_canon algebra_canon_def)
9.895 +
9.896 +lemma ALG_TWIN_NIL: "ALL l. ~ alg_twin l [] & ~ alg_twin [] l"
9.897 + by (import prob_canon ALG_TWIN_NIL)
9.898 +
9.899 +lemma ALG_TWIN_SING: "ALL x l.
9.900 + alg_twin [x] l = (x = True & l = [False]) &
9.901 + alg_twin l [x] = (l = [True] & x = False)"
9.902 + by (import prob_canon ALG_TWIN_SING)
9.903 +
9.904 +lemma ALG_TWIN_CONS: "ALL x y z h t.
9.905 + alg_twin (x # y # z) (h # t) = (x = h & alg_twin (y # z) t) &
9.906 + alg_twin (h # t) (x # y # z) = (x = h & alg_twin t (y # z))"
9.907 + by (import prob_canon ALG_TWIN_CONS)
9.908 +
9.909 +lemma ALG_TWIN_REDUCE: "ALL h t t'. alg_twin (h # t) (h # t') = alg_twin t t'"
9.910 + by (import prob_canon ALG_TWIN_REDUCE)
9.911 +
9.912 +lemma ALG_TWINS_PREFIX: "(All::(bool list => bool) => bool)
9.913 + (%x::bool list.
9.914 + (All::(bool list => bool) => bool)
9.915 + (%l::bool list.
9.916 + (op -->::bool => bool => bool)
9.917 + ((IS_PREFIX::bool list => bool list => bool) x l)
9.918 + ((op |::bool => bool => bool)
9.919 + ((op =::bool list => bool list => bool) x l)
9.920 + ((op |::bool => bool => bool)
9.921 + ((IS_PREFIX::bool list => bool list => bool) x
9.922 + ((SNOC::bool => bool list => bool list) (True::bool) l))
9.923 + ((IS_PREFIX::bool list => bool list => bool) x
9.924 + ((SNOC::bool => bool list => bool list) (False::bool)
9.925 + l))))))"
9.926 + by (import prob_canon ALG_TWINS_PREFIX)
9.927 +
9.928 +lemma ALG_ORDER_NIL: "ALL x. alg_order [] x & alg_order x [] = (x = [])"
9.929 + by (import prob_canon ALG_ORDER_NIL)
9.930 +
9.931 +lemma ALG_ORDER_REFL: "ALL x. alg_order x x"
9.932 + by (import prob_canon ALG_ORDER_REFL)
9.933 +
9.934 +lemma ALG_ORDER_ANTISYM: "(All::(bool list => bool) => bool)
9.935 + (%x::bool list.
9.936 + (All::(bool list => bool) => bool)
9.937 + (%y::bool list.
9.938 + (op -->::bool => bool => bool)
9.939 + ((op &::bool => bool => bool)
9.940 + ((alg_order::bool list => bool list => bool) x y)
9.941 + ((alg_order::bool list => bool list => bool) y x))
9.942 + ((op =::bool list => bool list => bool) x y)))"
9.943 + by (import prob_canon ALG_ORDER_ANTISYM)
9.944 +
9.945 +lemma ALG_ORDER_TRANS: "(All::(bool list => bool) => bool)
9.946 + (%x::bool list.
9.947 + (All::(bool list => bool) => bool)
9.948 + (%y::bool list.
9.949 + (All::(bool list => bool) => bool)
9.950 + (%z::bool list.
9.951 + (op -->::bool => bool => bool)
9.952 + ((op &::bool => bool => bool)
9.953 + ((alg_order::bool list => bool list => bool) x y)
9.954 + ((alg_order::bool list => bool list => bool) y z))
9.955 + ((alg_order::bool list => bool list => bool) x z))))"
9.956 + by (import prob_canon ALG_ORDER_TRANS)
9.957 +
9.958 +lemma ALG_ORDER_TOTAL: "ALL x y. alg_order x y | alg_order y x"
9.959 + by (import prob_canon ALG_ORDER_TOTAL)
9.960 +
9.961 +lemma ALG_ORDER_PREFIX: "(All::(bool list => bool) => bool)
9.962 + (%x::bool list.
9.963 + (All::(bool list => bool) => bool)
9.964 + (%y::bool list.
9.965 + (op -->::bool => bool => bool)
9.966 + ((IS_PREFIX::bool list => bool list => bool) y x)
9.967 + ((alg_order::bool list => bool list => bool) x y)))"
9.968 + by (import prob_canon ALG_ORDER_PREFIX)
9.969 +
9.970 +lemma ALG_ORDER_PREFIX_ANTI: "(All::(bool list => bool) => bool)
9.971 + (%x::bool list.
9.972 + (All::(bool list => bool) => bool)
9.973 + (%y::bool list.
9.974 + (op -->::bool => bool => bool)
9.975 + ((op &::bool => bool => bool)
9.976 + ((alg_order::bool list => bool list => bool) x y)
9.977 + ((IS_PREFIX::bool list => bool list => bool) x y))
9.978 + ((op =::bool list => bool list => bool) x y)))"
9.979 + by (import prob_canon ALG_ORDER_PREFIX_ANTI)
9.980 +
9.981 +lemma ALG_ORDER_PREFIX_MONO: "(All::(bool list => bool) => bool)
9.982 + (%x::bool list.
9.983 + (All::(bool list => bool) => bool)
9.984 + (%y::bool list.
9.985 + (All::(bool list => bool) => bool)
9.986 + (%z::bool list.
9.987 + (op -->::bool => bool => bool)
9.988 + ((op &::bool => bool => bool)
9.989 + ((alg_order::bool list => bool list => bool) x y)
9.990 + ((op &::bool => bool => bool)
9.991 + ((alg_order::bool list => bool list => bool) y z)
9.992 + ((IS_PREFIX::bool list => bool list => bool) z x)))
9.993 + ((IS_PREFIX::bool list => bool list => bool) y x))))"
9.994 + by (import prob_canon ALG_ORDER_PREFIX_MONO)
9.995 +
9.996 +lemma ALG_ORDER_PREFIX_TRANS: "(All::(bool list => bool) => bool)
9.997 + (%x::bool list.
9.998 + (All::(bool list => bool) => bool)
9.999 + (%y::bool list.
9.1000 + (All::(bool list => bool) => bool)
9.1001 + (%z::bool list.
9.1002 + (op -->::bool => bool => bool)
9.1003 + ((op &::bool => bool => bool)
9.1004 + ((alg_order::bool list => bool list => bool) x y)
9.1005 + ((IS_PREFIX::bool list => bool list => bool) y z))
9.1006 + ((op |::bool => bool => bool)
9.1007 + ((alg_order::bool list => bool list => bool) x z)
9.1008 + ((IS_PREFIX::bool list => bool list => bool) x z)))))"
9.1009 + by (import prob_canon ALG_ORDER_PREFIX_TRANS)
9.1010 +
9.1011 +lemma ALG_ORDER_SNOC: "ALL x l. ~ alg_order (SNOC x l) l"
9.1012 + by (import prob_canon ALG_ORDER_SNOC)
9.1013 +
9.1014 +lemma ALG_SORTED_MIN: "(All::(bool list => bool) => bool)
9.1015 + (%h::bool list.
9.1016 + (All::(bool list list => bool) => bool)
9.1017 + (%t::bool list list.
9.1018 + (op -->::bool => bool => bool)
9.1019 + ((alg_sorted::bool list list => bool)
9.1020 + ((op #::bool list => bool list list => bool list list) h t))
9.1021 + ((All::(bool list => bool) => bool)
9.1022 + (%x::bool list.
9.1023 + (op -->::bool => bool => bool)
9.1024 + ((op mem::bool list => bool list list => bool) x t)
9.1025 + ((alg_order::bool list => bool list => bool) h x)))))"
9.1026 + by (import prob_canon ALG_SORTED_MIN)
9.1027 +
9.1028 +lemma ALG_SORTED_DEF_ALT: "(All::(bool list => bool) => bool)
9.1029 + (%h::bool list.
9.1030 + (All::(bool list list => bool) => bool)
9.1031 + (%t::bool list list.
9.1032 + (op =::bool => bool => bool)
9.1033 + ((alg_sorted::bool list list => bool)
9.1034 + ((op #::bool list => bool list list => bool list list) h t))
9.1035 + ((op &::bool => bool => bool)
9.1036 + ((All::(bool list => bool) => bool)
9.1037 + (%x::bool list.
9.1038 + (op -->::bool => bool => bool)
9.1039 + ((op mem::bool list => bool list list => bool) x t)
9.1040 + ((alg_order::bool list => bool list => bool) h x)))
9.1041 + ((alg_sorted::bool list list => bool) t))))"
9.1042 + by (import prob_canon ALG_SORTED_DEF_ALT)
9.1043 +
9.1044 +lemma ALG_SORTED_TL: "(All::(bool list => bool) => bool)
9.1045 + (%h::bool list.
9.1046 + (All::(bool list list => bool) => bool)
9.1047 + (%t::bool list list.
9.1048 + (op -->::bool => bool => bool)
9.1049 + ((alg_sorted::bool list list => bool)
9.1050 + ((op #::bool list => bool list list => bool list list) h t))
9.1051 + ((alg_sorted::bool list list => bool) t)))"
9.1052 + by (import prob_canon ALG_SORTED_TL)
9.1053 +
9.1054 +lemma ALG_SORTED_MONO: "(All::(bool list => bool) => bool)
9.1055 + (%x::bool list.
9.1056 + (All::(bool list => bool) => bool)
9.1057 + (%y::bool list.
9.1058 + (All::(bool list list => bool) => bool)
9.1059 + (%z::bool list list.
9.1060 + (op -->::bool => bool => bool)
9.1061 + ((alg_sorted::bool list list => bool)
9.1062 + ((op #::bool list => bool list list => bool list list) x
9.1063 + ((op #::bool list => bool list list => bool list list) y
9.1064 + z)))
9.1065 + ((alg_sorted::bool list list => bool)
9.1066 + ((op #::bool list => bool list list => bool list list) x
9.1067 + z)))))"
9.1068 + by (import prob_canon ALG_SORTED_MONO)
9.1069 +
9.1070 +lemma ALG_SORTED_TLS: "ALL l b. alg_sorted (map (op # b) l) = alg_sorted l"
9.1071 + by (import prob_canon ALG_SORTED_TLS)
9.1072 +
9.1073 +lemma ALG_SORTED_STEP: "ALL l1 l2.
9.1074 + alg_sorted (map (op # True) l1 @ map (op # False) l2) =
9.1075 + (alg_sorted l1 & alg_sorted l2)"
9.1076 + by (import prob_canon ALG_SORTED_STEP)
9.1077 +
9.1078 +lemma ALG_SORTED_APPEND: "ALL h h' t t'.
9.1079 + alg_sorted ((h # t) @ h' # t') =
9.1080 + (alg_sorted (h # t) & alg_sorted (h' # t') & alg_order (last (h # t)) h')"
9.1081 + by (import prob_canon ALG_SORTED_APPEND)
9.1082 +
9.1083 +lemma ALG_SORTED_FILTER: "(All::((bool list => bool) => bool) => bool)
9.1084 + (%P::bool list => bool.
9.1085 + (All::(bool list list => bool) => bool)
9.1086 + (%b::bool list list.
9.1087 + (op -->::bool => bool => bool)
9.1088 + ((alg_sorted::bool list list => bool) b)
9.1089 + ((alg_sorted::bool list list => bool)
9.1090 + ((filter::(bool list => bool)
9.1091 + => bool list list => bool list list)
9.1092 + P b))))"
9.1093 + by (import prob_canon ALG_SORTED_FILTER)
9.1094 +
9.1095 +lemma ALG_PREFIXFREE_TL: "(All::(bool list => bool) => bool)
9.1096 + (%h::bool list.
9.1097 + (All::(bool list list => bool) => bool)
9.1098 + (%t::bool list list.
9.1099 + (op -->::bool => bool => bool)
9.1100 + ((alg_prefixfree::bool list list => bool)
9.1101 + ((op #::bool list => bool list list => bool list list) h t))
9.1102 + ((alg_prefixfree::bool list list => bool) t)))"
9.1103 + by (import prob_canon ALG_PREFIXFREE_TL)
9.1104 +
9.1105 +lemma ALG_PREFIXFREE_MONO: "(All::(bool list => bool) => bool)
9.1106 + (%x::bool list.
9.1107 + (All::(bool list => bool) => bool)
9.1108 + (%y::bool list.
9.1109 + (All::(bool list list => bool) => bool)
9.1110 + (%z::bool list list.
9.1111 + (op -->::bool => bool => bool)
9.1112 + ((op &::bool => bool => bool)
9.1113 + ((alg_sorted::bool list list => bool)
9.1114 + ((op #::bool list => bool list list => bool list list) x
9.1115 + ((op #::bool list => bool list list => bool list list)
9.1116 + y z)))
9.1117 + ((alg_prefixfree::bool list list => bool)
9.1118 + ((op #::bool list => bool list list => bool list list) x
9.1119 + ((op #::bool list => bool list list => bool list list)
9.1120 + y z))))
9.1121 + ((alg_prefixfree::bool list list => bool)
9.1122 + ((op #::bool list => bool list list => bool list list) x
9.1123 + z)))))"
9.1124 + by (import prob_canon ALG_PREFIXFREE_MONO)
9.1125 +
9.1126 +lemma ALG_PREFIXFREE_ELT: "(All::(bool list => bool) => bool)
9.1127 + (%h::bool list.
9.1128 + (All::(bool list list => bool) => bool)
9.1129 + (%t::bool list list.
9.1130 + (op -->::bool => bool => bool)
9.1131 + ((op &::bool => bool => bool)
9.1132 + ((alg_sorted::bool list list => bool)
9.1133 + ((op #::bool list => bool list list => bool list list) h t))
9.1134 + ((alg_prefixfree::bool list list => bool)
9.1135 + ((op #::bool list => bool list list => bool list list) h t)))
9.1136 + ((All::(bool list => bool) => bool)
9.1137 + (%x::bool list.
9.1138 + (op -->::bool => bool => bool)
9.1139 + ((op mem::bool list => bool list list => bool) x t)
9.1140 + ((op &::bool => bool => bool)
9.1141 + ((Not::bool => bool)
9.1142 + ((IS_PREFIX::bool list => bool list => bool) x h))
9.1143 + ((Not::bool => bool)
9.1144 + ((IS_PREFIX::bool list => bool list => bool) h
9.1145 + x)))))))"
9.1146 + by (import prob_canon ALG_PREFIXFREE_ELT)
9.1147 +
9.1148 +lemma ALG_PREFIXFREE_TLS: "ALL l b. alg_prefixfree (map (op # b) l) = alg_prefixfree l"
9.1149 + by (import prob_canon ALG_PREFIXFREE_TLS)
9.1150 +
9.1151 +lemma ALG_PREFIXFREE_STEP: "ALL l1 l2.
9.1152 + alg_prefixfree (map (op # True) l1 @ map (op # False) l2) =
9.1153 + (alg_prefixfree l1 & alg_prefixfree l2)"
9.1154 + by (import prob_canon ALG_PREFIXFREE_STEP)
9.1155 +
9.1156 +lemma ALG_PREFIXFREE_APPEND: "ALL h h' t t'.
9.1157 + alg_prefixfree ((h # t) @ h' # t') =
9.1158 + (alg_prefixfree (h # t) &
9.1159 + alg_prefixfree (h' # t') & ~ IS_PREFIX h' (last (h # t)))"
9.1160 + by (import prob_canon ALG_PREFIXFREE_APPEND)
9.1161 +
9.1162 +lemma ALG_PREFIXFREE_FILTER: "(All::((bool list => bool) => bool) => bool)
9.1163 + (%P::bool list => bool.
9.1164 + (All::(bool list list => bool) => bool)
9.1165 + (%b::bool list list.
9.1166 + (op -->::bool => bool => bool)
9.1167 + ((op &::bool => bool => bool)
9.1168 + ((alg_sorted::bool list list => bool) b)
9.1169 + ((alg_prefixfree::bool list list => bool) b))
9.1170 + ((alg_prefixfree::bool list list => bool)
9.1171 + ((filter::(bool list => bool)
9.1172 + => bool list list => bool list list)
9.1173 + P b))))"
9.1174 + by (import prob_canon ALG_PREFIXFREE_FILTER)
9.1175 +
9.1176 +lemma ALG_TWINFREE_TL: "(All::(bool list => bool) => bool)
9.1177 + (%h::bool list.
9.1178 + (All::(bool list list => bool) => bool)
9.1179 + (%t::bool list list.
9.1180 + (op -->::bool => bool => bool)
9.1181 + ((alg_twinfree::bool list list => bool)
9.1182 + ((op #::bool list => bool list list => bool list list) h t))
9.1183 + ((alg_twinfree::bool list list => bool) t)))"
9.1184 + by (import prob_canon ALG_TWINFREE_TL)
9.1185 +
9.1186 +lemma ALG_TWINFREE_TLS: "ALL l b. alg_twinfree (map (op # b) l) = alg_twinfree l"
9.1187 + by (import prob_canon ALG_TWINFREE_TLS)
9.1188 +
9.1189 +lemma ALG_TWINFREE_STEP1: "(All::(bool list list => bool) => bool)
9.1190 + (%l1::bool list list.
9.1191 + (All::(bool list list => bool) => bool)
9.1192 + (%l2::bool list list.
9.1193 + (op -->::bool => bool => bool)
9.1194 + ((alg_twinfree::bool list list => bool)
9.1195 + ((op @::bool list list => bool list list => bool list list)
9.1196 + ((map::(bool list => bool list)
9.1197 + => bool list list => bool list list)
9.1198 + ((op #::bool => bool list => bool list) (True::bool)) l1)
9.1199 + ((map::(bool list => bool list)
9.1200 + => bool list list => bool list list)
9.1201 + ((op #::bool => bool list => bool list) (False::bool))
9.1202 + l2)))
9.1203 + ((op &::bool => bool => bool)
9.1204 + ((alg_twinfree::bool list list => bool) l1)
9.1205 + ((alg_twinfree::bool list list => bool) l2))))"
9.1206 + by (import prob_canon ALG_TWINFREE_STEP1)
9.1207 +
9.1208 +lemma ALG_TWINFREE_STEP2: "(All::(bool list list => bool) => bool)
9.1209 + (%l1::bool list list.
9.1210 + (All::(bool list list => bool) => bool)
9.1211 + (%l2::bool list list.
9.1212 + (op -->::bool => bool => bool)
9.1213 + ((op &::bool => bool => bool)
9.1214 + ((op |::bool => bool => bool)
9.1215 + ((Not::bool => bool)
9.1216 + ((op mem::bool list => bool list list => bool)
9.1217 + ([]::bool list) l1))
9.1218 + ((Not::bool => bool)
9.1219 + ((op mem::bool list => bool list list => bool)
9.1220 + ([]::bool list) l2)))
9.1221 + ((op &::bool => bool => bool)
9.1222 + ((alg_twinfree::bool list list => bool) l1)
9.1223 + ((alg_twinfree::bool list list => bool) l2)))
9.1224 + ((alg_twinfree::bool list list => bool)
9.1225 + ((op @::bool list list => bool list list => bool list list)
9.1226 + ((map::(bool list => bool list)
9.1227 + => bool list list => bool list list)
9.1228 + ((op #::bool => bool list => bool list) (True::bool)) l1)
9.1229 + ((map::(bool list => bool list)
9.1230 + => bool list list => bool list list)
9.1231 + ((op #::bool => bool list => bool list) (False::bool))
9.1232 + l2)))))"
9.1233 + by (import prob_canon ALG_TWINFREE_STEP2)
9.1234 +
9.1235 +lemma ALG_TWINFREE_STEP: "(All::(bool list list => bool) => bool)
9.1236 + (%l1::bool list list.
9.1237 + (All::(bool list list => bool) => bool)
9.1238 + (%l2::bool list list.
9.1239 + (op -->::bool => bool => bool)
9.1240 + ((op |::bool => bool => bool)
9.1241 + ((Not::bool => bool)
9.1242 + ((op mem::bool list => bool list list => bool)
9.1243 + ([]::bool list) l1))
9.1244 + ((Not::bool => bool)
9.1245 + ((op mem::bool list => bool list list => bool)
9.1246 + ([]::bool list) l2)))
9.1247 + ((op =::bool => bool => bool)
9.1248 + ((alg_twinfree::bool list list => bool)
9.1249 + ((op @::bool list list => bool list list => bool list list)
9.1250 + ((map::(bool list => bool list)
9.1251 + => bool list list => bool list list)
9.1252 + ((op #::bool => bool list => bool list) (True::bool)) l1)
9.1253 + ((map::(bool list => bool list)
9.1254 + => bool list list => bool list list)
9.1255 + ((op #::bool => bool list => bool list) (False::bool))
9.1256 + l2)))
9.1257 + ((op &::bool => bool => bool)
9.1258 + ((alg_twinfree::bool list list => bool) l1)
9.1259 + ((alg_twinfree::bool list list => bool) l2)))))"
9.1260 + by (import prob_canon ALG_TWINFREE_STEP)
9.1261 +
9.1262 +lemma ALG_LONGEST_HD: "ALL h t. length h <= alg_longest (h # t)"
9.1263 + by (import prob_canon ALG_LONGEST_HD)
9.1264 +
9.1265 +lemma ALG_LONGEST_TL: "ALL h t. alg_longest t <= alg_longest (h # t)"
9.1266 + by (import prob_canon ALG_LONGEST_TL)
9.1267 +
9.1268 +lemma ALG_LONGEST_TLS: "ALL h t b. alg_longest (map (op # b) (h # t)) = Suc (alg_longest (h # t))"
9.1269 + by (import prob_canon ALG_LONGEST_TLS)
9.1270 +
9.1271 +lemma ALG_LONGEST_APPEND: "ALL l1 l2.
9.1272 + alg_longest l1 <= alg_longest (l1 @ l2) &
9.1273 + alg_longest l2 <= alg_longest (l1 @ l2)"
9.1274 + by (import prob_canon ALG_LONGEST_APPEND)
9.1275 +
9.1276 +lemma ALG_CANON_PREFS_HD: "ALL l b. hd (alg_canon_prefs l b) = l"
9.1277 + by (import prob_canon ALG_CANON_PREFS_HD)
9.1278 +
9.1279 +lemma ALG_CANON_PREFS_DELETES: "(All::(bool list => bool) => bool)
9.1280 + (%l::bool list.
9.1281 + (All::(bool list list => bool) => bool)
9.1282 + (%b::bool list list.
9.1283 + (All::(bool list => bool) => bool)
9.1284 + (%x::bool list.
9.1285 + (op -->::bool => bool => bool)
9.1286 + ((op mem::bool list => bool list list => bool) x
9.1287 + ((alg_canon_prefs::bool list
9.1288 + => bool list list => bool list list)
9.1289 + l b))
9.1290 + ((op mem::bool list => bool list list => bool) x
9.1291 + ((op #::bool list => bool list list => bool list list) l
9.1292 + b)))))"
9.1293 + by (import prob_canon ALG_CANON_PREFS_DELETES)
9.1294 +
9.1295 +lemma ALG_CANON_PREFS_SORTED: "(All::(bool list => bool) => bool)
9.1296 + (%l::bool list.
9.1297 + (All::(bool list list => bool) => bool)
9.1298 + (%b::bool list list.
9.1299 + (op -->::bool => bool => bool)
9.1300 + ((alg_sorted::bool list list => bool)
9.1301 + ((op #::bool list => bool list list => bool list list) l b))
9.1302 + ((alg_sorted::bool list list => bool)
9.1303 + ((alg_canon_prefs::bool list
9.1304 + => bool list list => bool list list)
9.1305 + l b))))"
9.1306 + by (import prob_canon ALG_CANON_PREFS_SORTED)
9.1307 +
9.1308 +lemma ALG_CANON_PREFS_PREFIXFREE: "(All::(bool list => bool) => bool)
9.1309 + (%l::bool list.
9.1310 + (All::(bool list list => bool) => bool)
9.1311 + (%b::bool list list.
9.1312 + (op -->::bool => bool => bool)
9.1313 + ((op &::bool => bool => bool)
9.1314 + ((alg_sorted::bool list list => bool) b)
9.1315 + ((alg_prefixfree::bool list list => bool) b))
9.1316 + ((alg_prefixfree::bool list list => bool)
9.1317 + ((alg_canon_prefs::bool list
9.1318 + => bool list list => bool list list)
9.1319 + l b))))"
9.1320 + by (import prob_canon ALG_CANON_PREFS_PREFIXFREE)
9.1321 +
9.1322 +lemma ALG_CANON_PREFS_CONSTANT: "(All::(bool list => bool) => bool)
9.1323 + (%l::bool list.
9.1324 + (All::(bool list list => bool) => bool)
9.1325 + (%b::bool list list.
9.1326 + (op -->::bool => bool => bool)
9.1327 + ((alg_prefixfree::bool list list => bool)
9.1328 + ((op #::bool list => bool list list => bool list list) l b))
9.1329 + ((op =::bool list list => bool list list => bool)
9.1330 + ((alg_canon_prefs::bool list
9.1331 + => bool list list => bool list list)
9.1332 + l b)
9.1333 + ((op #::bool list => bool list list => bool list list) l b))))"
9.1334 + by (import prob_canon ALG_CANON_PREFS_CONSTANT)
9.1335 +
9.1336 +lemma ALG_CANON_FIND_HD: "ALL l h t.
9.1337 + hd (alg_canon_find l (h # t)) = l | hd (alg_canon_find l (h # t)) = h"
9.1338 + by (import prob_canon ALG_CANON_FIND_HD)
9.1339 +
9.1340 +lemma ALG_CANON_FIND_DELETES: "(All::(bool list => bool) => bool)
9.1341 + (%l::bool list.
9.1342 + (All::(bool list list => bool) => bool)
9.1343 + (%b::bool list list.
9.1344 + (All::(bool list => bool) => bool)
9.1345 + (%x::bool list.
9.1346 + (op -->::bool => bool => bool)
9.1347 + ((op mem::bool list => bool list list => bool) x
9.1348 + ((alg_canon_find::bool list
9.1349 + => bool list list => bool list list)
9.1350 + l b))
9.1351 + ((op mem::bool list => bool list list => bool) x
9.1352 + ((op #::bool list => bool list list => bool list list) l
9.1353 + b)))))"
9.1354 + by (import prob_canon ALG_CANON_FIND_DELETES)
9.1355 +
9.1356 +lemma ALG_CANON_FIND_SORTED: "(All::(bool list => bool) => bool)
9.1357 + (%l::bool list.
9.1358 + (All::(bool list list => bool) => bool)
9.1359 + (%b::bool list list.
9.1360 + (op -->::bool => bool => bool)
9.1361 + ((alg_sorted::bool list list => bool) b)
9.1362 + ((alg_sorted::bool list list => bool)
9.1363 + ((alg_canon_find::bool list
9.1364 + => bool list list => bool list list)
9.1365 + l b))))"
9.1366 + by (import prob_canon ALG_CANON_FIND_SORTED)
9.1367 +
9.1368 +lemma ALG_CANON_FIND_PREFIXFREE: "(All::(bool list => bool) => bool)
9.1369 + (%l::bool list.
9.1370 + (All::(bool list list => bool) => bool)
9.1371 + (%b::bool list list.
9.1372 + (op -->::bool => bool => bool)
9.1373 + ((op &::bool => bool => bool)
9.1374 + ((alg_sorted::bool list list => bool) b)
9.1375 + ((alg_prefixfree::bool list list => bool) b))
9.1376 + ((alg_prefixfree::bool list list => bool)
9.1377 + ((alg_canon_find::bool list
9.1378 + => bool list list => bool list list)
9.1379 + l b))))"
9.1380 + by (import prob_canon ALG_CANON_FIND_PREFIXFREE)
9.1381 +
9.1382 +lemma ALG_CANON_FIND_CONSTANT: "(All::(bool list => bool) => bool)
9.1383 + (%l::bool list.
9.1384 + (All::(bool list list => bool) => bool)
9.1385 + (%b::bool list list.
9.1386 + (op -->::bool => bool => bool)
9.1387 + ((op &::bool => bool => bool)
9.1388 + ((alg_sorted::bool list list => bool)
9.1389 + ((op #::bool list => bool list list => bool list list) l b))
9.1390 + ((alg_prefixfree::bool list list => bool)
9.1391 + ((op #::bool list => bool list list => bool list list) l b)))
9.1392 + ((op =::bool list list => bool list list => bool)
9.1393 + ((alg_canon_find::bool list
9.1394 + => bool list list => bool list list)
9.1395 + l b)
9.1396 + ((op #::bool list => bool list list => bool list list) l b))))"
9.1397 + by (import prob_canon ALG_CANON_FIND_CONSTANT)
9.1398 +
9.1399 +lemma ALG_CANON1_SORTED: "ALL x. alg_sorted (alg_canon1 x)"
9.1400 + by (import prob_canon ALG_CANON1_SORTED)
9.1401 +
9.1402 +lemma ALG_CANON1_PREFIXFREE: "ALL l. alg_prefixfree (alg_canon1 l)"
9.1403 + by (import prob_canon ALG_CANON1_PREFIXFREE)
9.1404 +
9.1405 +lemma ALG_CANON1_CONSTANT: "(All::(bool list list => bool) => bool)
9.1406 + (%l::bool list list.
9.1407 + (op -->::bool => bool => bool)
9.1408 + ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l)
9.1409 + ((alg_prefixfree::bool list list => bool) l))
9.1410 + ((op =::bool list list => bool list list => bool)
9.1411 + ((alg_canon1::bool list list => bool list list) l) l))"
9.1412 + by (import prob_canon ALG_CANON1_CONSTANT)
9.1413 +
9.1414 +lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list => bool) => bool)
9.1415 + (%l::bool list.
9.1416 + (All::(bool list list => bool) => bool)
9.1417 + (%b::bool list list.
9.1418 + (op -->::bool => bool => bool)
9.1419 + ((op &::bool => bool => bool)
9.1420 + ((alg_sorted::bool list list => bool)
9.1421 + ((op #::bool list => bool list list => bool list list) l b))
9.1422 + ((op &::bool => bool => bool)
9.1423 + ((alg_prefixfree::bool list list => bool)
9.1424 + ((op #::bool list => bool list list => bool list list) l
9.1425 + b))
9.1426 + ((alg_twinfree::bool list list => bool) b)))
9.1427 + ((op &::bool => bool => bool)
9.1428 + ((alg_sorted::bool list list => bool)
9.1429 + ((alg_canon_merge::bool list
9.1430 + => bool list list => bool list list)
9.1431 + l b))
9.1432 + ((op &::bool => bool => bool)
9.1433 + ((alg_prefixfree::bool list list => bool)
9.1434 + ((alg_canon_merge::bool list
9.1435 + => bool list list => bool list list)
9.1436 + l b))
9.1437 + ((alg_twinfree::bool list list => bool)
9.1438 + ((alg_canon_merge::bool list
9.1439 + => bool list list => bool list list)
9.1440 + l b))))))"
9.1441 + by (import prob_canon ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE)
9.1442 +
9.1443 +lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "(All::(bool list => bool) => bool)
9.1444 + (%l::bool list.
9.1445 + (All::(bool list list => bool) => bool)
9.1446 + (%b::bool list list.
9.1447 + (All::(bool list => bool) => bool)
9.1448 + (%h::bool list.
9.1449 + (op -->::bool => bool => bool)
9.1450 + ((All::(bool list => bool) => bool)
9.1451 + (%x::bool list.
9.1452 + (op -->::bool => bool => bool)
9.1453 + ((op mem::bool list => bool list list => bool) x
9.1454 + ((op #::bool list
9.1455 + => bool list list => bool list list)
9.1456 + l b))
9.1457 + ((op &::bool => bool => bool)
9.1458 + ((Not::bool => bool)
9.1459 + ((IS_PREFIX::bool list => bool list => bool) h
9.1460 + x))
9.1461 + ((Not::bool => bool)
9.1462 + ((IS_PREFIX::bool list => bool list => bool) x
9.1463 + h)))))
9.1464 + ((All::(bool list => bool) => bool)
9.1465 + (%x::bool list.
9.1466 + (op -->::bool => bool => bool)
9.1467 + ((op mem::bool list => bool list list => bool) x
9.1468 + ((alg_canon_merge::bool list
9.1469 + => bool list list => bool list list)
9.1470 + l b))
9.1471 + ((op &::bool => bool => bool)
9.1472 + ((Not::bool => bool)
9.1473 + ((IS_PREFIX::bool list => bool list => bool) h
9.1474 + x))
9.1475 + ((Not::bool => bool)
9.1476 + ((IS_PREFIX::bool list => bool list => bool) x
9.1477 + h))))))))"
9.1478 + by (import prob_canon ALG_CANON_MERGE_PREFIXFREE_PRESERVE)
9.1479 +
9.1480 +lemma ALG_CANON_MERGE_SHORTENS: "(All::(bool list => bool) => bool)
9.1481 + (%l::bool list.
9.1482 + (All::(bool list list => bool) => bool)
9.1483 + (%b::bool list list.
9.1484 + (All::(bool list => bool) => bool)
9.1485 + (%x::bool list.
9.1486 + (op -->::bool => bool => bool)
9.1487 + ((op mem::bool list => bool list list => bool) x
9.1488 + ((alg_canon_merge::bool list
9.1489 + => bool list list => bool list list)
9.1490 + l b))
9.1491 + ((Ex::(bool list => bool) => bool)
9.1492 + (%y::bool list.
9.1493 + (op &::bool => bool => bool)
9.1494 + ((op mem::bool list => bool list list => bool) y
9.1495 + ((op #::bool list
9.1496 + => bool list list => bool list list)
9.1497 + l b))
9.1498 + ((IS_PREFIX::bool list => bool list => bool) y
9.1499 + x))))))"
9.1500 + by (import prob_canon ALG_CANON_MERGE_SHORTENS)
9.1501 +
9.1502 +lemma ALG_CANON_MERGE_CONSTANT: "(All::(bool list => bool) => bool)
9.1503 + (%l::bool list.
9.1504 + (All::(bool list list => bool) => bool)
9.1505 + (%b::bool list list.
9.1506 + (op -->::bool => bool => bool)
9.1507 + ((alg_twinfree::bool list list => bool)
9.1508 + ((op #::bool list => bool list list => bool list list) l b))
9.1509 + ((op =::bool list list => bool list list => bool)
9.1510 + ((alg_canon_merge::bool list
9.1511 + => bool list list => bool list list)
9.1512 + l b)
9.1513 + ((op #::bool list => bool list list => bool list list) l b))))"
9.1514 + by (import prob_canon ALG_CANON_MERGE_CONSTANT)
9.1515 +
9.1516 +lemma ALG_CANON2_PREFIXFREE_PRESERVE: "(All::(bool list list => bool) => bool)
9.1517 + (%x::bool list list.
9.1518 + (All::(bool list => bool) => bool)
9.1519 + (%xa::bool list.
9.1520 + (op -->::bool => bool => bool)
9.1521 + ((All::(bool list => bool) => bool)
9.1522 + (%xb::bool list.
9.1523 + (op -->::bool => bool => bool)
9.1524 + ((op mem::bool list => bool list list => bool) xb x)
9.1525 + ((op &::bool => bool => bool)
9.1526 + ((Not::bool => bool)
9.1527 + ((IS_PREFIX::bool list => bool list => bool) xa xb))
9.1528 + ((Not::bool => bool)
9.1529 + ((IS_PREFIX::bool list => bool list => bool) xb
9.1530 + xa)))))
9.1531 + ((All::(bool list => bool) => bool)
9.1532 + (%xb::bool list.
9.1533 + (op -->::bool => bool => bool)
9.1534 + ((op mem::bool list => bool list list => bool) xb
9.1535 + ((alg_canon2::bool list list => bool list list) x))
9.1536 + ((op &::bool => bool => bool)
9.1537 + ((Not::bool => bool)
9.1538 + ((IS_PREFIX::bool list => bool list => bool) xa xb))
9.1539 + ((Not::bool => bool)
9.1540 + ((IS_PREFIX::bool list => bool list => bool) xb
9.1541 + xa)))))))"
9.1542 + by (import prob_canon ALG_CANON2_PREFIXFREE_PRESERVE)
9.1543 +
9.1544 +lemma ALG_CANON2_SHORTENS: "(All::(bool list list => bool) => bool)
9.1545 + (%x::bool list list.
9.1546 + (All::(bool list => bool) => bool)
9.1547 + (%xa::bool list.
9.1548 + (op -->::bool => bool => bool)
9.1549 + ((op mem::bool list => bool list list => bool) xa
9.1550 + ((alg_canon2::bool list list => bool list list) x))
9.1551 + ((Ex::(bool list => bool) => bool)
9.1552 + (%y::bool list.
9.1553 + (op &::bool => bool => bool)
9.1554 + ((op mem::bool list => bool list list => bool) y x)
9.1555 + ((IS_PREFIX::bool list => bool list => bool) y xa)))))"
9.1556 + by (import prob_canon ALG_CANON2_SHORTENS)
9.1557 +
9.1558 +lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list list => bool) => bool)
9.1559 + (%x::bool list list.
9.1560 + (op -->::bool => bool => bool)
9.1561 + ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) x)
9.1562 + ((alg_prefixfree::bool list list => bool) x))
9.1563 + ((op &::bool => bool => bool)
9.1564 + ((alg_sorted::bool list list => bool)
9.1565 + ((alg_canon2::bool list list => bool list list) x))
9.1566 + ((op &::bool => bool => bool)
9.1567 + ((alg_prefixfree::bool list list => bool)
9.1568 + ((alg_canon2::bool list list => bool list list) x))
9.1569 + ((alg_twinfree::bool list list => bool)
9.1570 + ((alg_canon2::bool list list => bool list list) x)))))"
9.1571 + by (import prob_canon ALG_CANON2_SORTED_PREFIXFREE_TWINFREE)
9.1572 +
9.1573 +lemma ALG_CANON2_CONSTANT: "(All::(bool list list => bool) => bool)
9.1574 + (%l::bool list list.
9.1575 + (op -->::bool => bool => bool)
9.1576 + ((alg_twinfree::bool list list => bool) l)
9.1577 + ((op =::bool list list => bool list list => bool)
9.1578 + ((alg_canon2::bool list list => bool list list) l) l))"
9.1579 + by (import prob_canon ALG_CANON2_CONSTANT)
9.1580 +
9.1581 +lemma ALG_CANON_SORTED_PREFIXFREE_TWINFREE: "ALL l.
9.1582 + alg_sorted (alg_canon l) &
9.1583 + alg_prefixfree (alg_canon l) & alg_twinfree (alg_canon l)"
9.1584 + by (import prob_canon ALG_CANON_SORTED_PREFIXFREE_TWINFREE)
9.1585 +
9.1586 +lemma ALG_CANON_CONSTANT: "(All::(bool list list => bool) => bool)
9.1587 + (%l::bool list list.
9.1588 + (op -->::bool => bool => bool)
9.1589 + ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l)
9.1590 + ((op &::bool => bool => bool)
9.1591 + ((alg_prefixfree::bool list list => bool) l)
9.1592 + ((alg_twinfree::bool list list => bool) l)))
9.1593 + ((op =::bool list list => bool list list => bool)
9.1594 + ((alg_canon::bool list list => bool list list) l) l))"
9.1595 + by (import prob_canon ALG_CANON_CONSTANT)
9.1596 +
9.1597 +lemma ALG_CANON_IDEMPOT: "ALL l. alg_canon (alg_canon l) = alg_canon l"
9.1598 + by (import prob_canon ALG_CANON_IDEMPOT)
9.1599 +
9.1600 +lemma ALGEBRA_CANON_DEF_ALT: "ALL l. algebra_canon l = (alg_sorted l & alg_prefixfree l & alg_twinfree l)"
9.1601 + by (import prob_canon ALGEBRA_CANON_DEF_ALT)
9.1602 +
9.1603 +lemma ALGEBRA_CANON_BASIC: "algebra_canon [] & algebra_canon [[]] & (ALL x. algebra_canon [x])"
9.1604 + by (import prob_canon ALGEBRA_CANON_BASIC)
9.1605 +
9.1606 +lemma ALG_CANON_BASIC: "alg_canon [] = [] & alg_canon [[]] = [[]] & (ALL x. alg_canon [x] = [x])"
9.1607 + by (import prob_canon ALG_CANON_BASIC)
9.1608 +
9.1609 +lemma ALGEBRA_CANON_TL: "(All::(bool list => bool) => bool)
9.1610 + (%h::bool list.
9.1611 + (All::(bool list list => bool) => bool)
9.1612 + (%t::bool list list.
9.1613 + (op -->::bool => bool => bool)
9.1614 + ((algebra_canon::bool list list => bool)
9.1615 + ((op #::bool list => bool list list => bool list list) h t))
9.1616 + ((algebra_canon::bool list list => bool) t)))"
9.1617 + by (import prob_canon ALGEBRA_CANON_TL)
9.1618 +
9.1619 +lemma ALGEBRA_CANON_NIL_MEM: "ALL l. (algebra_canon l & [] mem l) = (l = [[]])"
9.1620 + by (import prob_canon ALGEBRA_CANON_NIL_MEM)
9.1621 +
9.1622 +lemma ALGEBRA_CANON_TLS: "ALL l b. algebra_canon (map (op # b) l) = algebra_canon l"
9.1623 + by (import prob_canon ALGEBRA_CANON_TLS)
9.1624 +
9.1625 +lemma ALGEBRA_CANON_STEP1: "(All::(bool list list => bool) => bool)
9.1626 + (%l1::bool list list.
9.1627 + (All::(bool list list => bool) => bool)
9.1628 + (%l2::bool list list.
9.1629 + (op -->::bool => bool => bool)
9.1630 + ((algebra_canon::bool list list => bool)
9.1631 + ((op @::bool list list => bool list list => bool list list)
9.1632 + ((map::(bool list => bool list)
9.1633 + => bool list list => bool list list)
9.1634 + ((op #::bool => bool list => bool list) (True::bool)) l1)
9.1635 + ((map::(bool list => bool list)
9.1636 + => bool list list => bool list list)
9.1637 + ((op #::bool => bool list => bool list) (False::bool))
9.1638 + l2)))
9.1639 + ((op &::bool => bool => bool)
9.1640 + ((algebra_canon::bool list list => bool) l1)
9.1641 + ((algebra_canon::bool list list => bool) l2))))"
9.1642 + by (import prob_canon ALGEBRA_CANON_STEP1)
9.1643 +
9.1644 +lemma ALGEBRA_CANON_STEP2: "(All::(bool list list => bool) => bool)
9.1645 + (%l1::bool list list.
9.1646 + (All::(bool list list => bool) => bool)
9.1647 + (%l2::bool list list.
9.1648 + (op -->::bool => bool => bool)
9.1649 + ((op &::bool => bool => bool)
9.1650 + ((op |::bool => bool => bool)
9.1651 + ((Not::bool => bool)
9.1652 + ((op =::bool list list => bool list list => bool) l1
9.1653 + ((op #::bool list => bool list list => bool list list)
9.1654 + ([]::bool list) ([]::bool list list))))
9.1655 + ((Not::bool => bool)
9.1656 + ((op =::bool list list => bool list list => bool) l2
9.1657 + ((op #::bool list => bool list list => bool list list)
9.1658 + ([]::bool list) ([]::bool list list)))))
9.1659 + ((op &::bool => bool => bool)
9.1660 + ((algebra_canon::bool list list => bool) l1)
9.1661 + ((algebra_canon::bool list list => bool) l2)))
9.1662 + ((algebra_canon::bool list list => bool)
9.1663 + ((op @::bool list list => bool list list => bool list list)
9.1664 + ((map::(bool list => bool list)
9.1665 + => bool list list => bool list list)
9.1666 + ((op #::bool => bool list => bool list) (True::bool)) l1)
9.1667 + ((map::(bool list => bool list)
9.1668 + => bool list list => bool list list)
9.1669 + ((op #::bool => bool list => bool list) (False::bool))
9.1670 + l2)))))"
9.1671 + by (import prob_canon ALGEBRA_CANON_STEP2)
9.1672 +
9.1673 +lemma ALGEBRA_CANON_STEP: "(All::(bool list list => bool) => bool)
9.1674 + (%l1::bool list list.
9.1675 + (All::(bool list list => bool) => bool)
9.1676 + (%l2::bool list list.
9.1677 + (op -->::bool => bool => bool)
9.1678 + ((op |::bool => bool => bool)
9.1679 + ((Not::bool => bool)
9.1680 + ((op =::bool list list => bool list list => bool) l1
9.1681 + ((op #::bool list => bool list list => bool list list)
9.1682 + ([]::bool list) ([]::bool list list))))
9.1683 + ((Not::bool => bool)
9.1684 + ((op =::bool list list => bool list list => bool) l2
9.1685 + ((op #::bool list => bool list list => bool list list)
9.1686 + ([]::bool list) ([]::bool list list)))))
9.1687 + ((op =::bool => bool => bool)
9.1688 + ((algebra_canon::bool list list => bool)
9.1689 + ((op @::bool list list => bool list list => bool list list)
9.1690 + ((map::(bool list => bool list)
9.1691 + => bool list list => bool list list)
9.1692 + ((op #::bool => bool list => bool list) (True::bool)) l1)
9.1693 + ((map::(bool list => bool list)
9.1694 + => bool list list => bool list list)
9.1695 + ((op #::bool => bool list => bool list) (False::bool))
9.1696 + l2)))
9.1697 + ((op &::bool => bool => bool)
9.1698 + ((algebra_canon::bool list list => bool) l1)
9.1699 + ((algebra_canon::bool list list => bool) l2)))))"
9.1700 + by (import prob_canon ALGEBRA_CANON_STEP)
9.1701 +
9.1702 +lemma ALGEBRA_CANON_CASES_THM: "(All::(bool list list => bool) => bool)
9.1703 + (%l::bool list list.
9.1704 + (op -->::bool => bool => bool)
9.1705 + ((algebra_canon::bool list list => bool) l)
9.1706 + ((op |::bool => bool => bool)
9.1707 + ((op =::bool list list => bool list list => bool) l
9.1708 + ([]::bool list list))
9.1709 + ((op |::bool => bool => bool)
9.1710 + ((op =::bool list list => bool list list => bool) l
9.1711 + ((op #::bool list => bool list list => bool list list)
9.1712 + ([]::bool list) ([]::bool list list)))
9.1713 + ((Ex::(bool list list => bool) => bool)
9.1714 + (%l1::bool list list.
9.1715 + (Ex::(bool list list => bool) => bool)
9.1716 + (%l2::bool list list.
9.1717 + (op &::bool => bool => bool)
9.1718 + ((algebra_canon::bool list list => bool) l1)
9.1719 + ((op &::bool => bool => bool)
9.1720 + ((algebra_canon::bool list list => bool) l2)
9.1721 + ((op =::bool list list => bool list list => bool) l
9.1722 + ((op @::bool list list
9.1723 + => bool list list => bool list list)
9.1724 + ((map::(bool list => bool list)
9.1725 + => bool list list => bool list list)
9.1726 + ((op #::bool => bool list => bool list)
9.1727 + (True::bool))
9.1728 + l1)
9.1729 + ((map::(bool list => bool list)
9.1730 + => bool list list => bool list list)
9.1731 + ((op #::bool => bool list => bool list)
9.1732 + (False::bool))
9.1733 + l2))))))))))"
9.1734 + by (import prob_canon ALGEBRA_CANON_CASES_THM)
9.1735 +
9.1736 +lemma ALGEBRA_CANON_CASES: "(All::((bool list list => bool) => bool) => bool)
9.1737 + (%P::bool list list => bool.
9.1738 + (op -->::bool => bool => bool)
9.1739 + ((op &::bool => bool => bool) (P ([]::bool list list))
9.1740 + ((op &::bool => bool => bool)
9.1741 + (P ((op #::bool list => bool list list => bool list list)
9.1742 + ([]::bool list) ([]::bool list list)))
9.1743 + ((All::(bool list list => bool) => bool)
9.1744 + (%l1::bool list list.
9.1745 + (All::(bool list list => bool) => bool)
9.1746 + (%l2::bool list list.
9.1747 + (op -->::bool => bool => bool)
9.1748 + ((op &::bool => bool => bool)
9.1749 + ((algebra_canon::bool list list => bool) l1)
9.1750 + ((op &::bool => bool => bool)
9.1751 + ((algebra_canon::bool list list => bool) l2)
9.1752 + ((algebra_canon::bool list list => bool)
9.1753 + ((op @::bool list list
9.1754 + => bool list list => bool list list)
9.1755 + ((map::(bool list => bool list)
9.1756 + => bool list list => bool list list)
9.1757 + ((op #::bool => bool list => bool list)
9.1758 + (True::bool))
9.1759 + l1)
9.1760 + ((map::(bool list => bool list)
9.1761 + => bool list list => bool list list)
9.1762 + ((op #::bool => bool list => bool list)
9.1763 + (False::bool))
9.1764 + l2)))))
9.1765 + (P ((op @::bool list list
9.1766 + => bool list list => bool list list)
9.1767 + ((map::(bool list => bool list)
9.1768 + => bool list list => bool list list)
9.1769 + ((op #::bool => bool list => bool list)
9.1770 + (True::bool))
9.1771 + l1)
9.1772 + ((map::(bool list => bool list)
9.1773 + => bool list list => bool list list)
9.1774 + ((op #::bool => bool list => bool list)
9.1775 + (False::bool))
9.1776 + l2))))))))
9.1777 + ((All::(bool list list => bool) => bool)
9.1778 + (%l::bool list list.
9.1779 + (op -->::bool => bool => bool)
9.1780 + ((algebra_canon::bool list list => bool) l) (P l))))"
9.1781 + by (import prob_canon ALGEBRA_CANON_CASES)
9.1782 +
9.1783 +lemma ALGEBRA_CANON_INDUCTION: "(All::((bool list list => bool) => bool) => bool)
9.1784 + (%P::bool list list => bool.
9.1785 + (op -->::bool => bool => bool)
9.1786 + ((op &::bool => bool => bool) (P ([]::bool list list))
9.1787 + ((op &::bool => bool => bool)
9.1788 + (P ((op #::bool list => bool list list => bool list list)
9.1789 + ([]::bool list) ([]::bool list list)))
9.1790 + ((All::(bool list list => bool) => bool)
9.1791 + (%l1::bool list list.
9.1792 + (All::(bool list list => bool) => bool)
9.1793 + (%l2::bool list list.
9.1794 + (op -->::bool => bool => bool)
9.1795 + ((op &::bool => bool => bool)
9.1796 + ((algebra_canon::bool list list => bool) l1)
9.1797 + ((op &::bool => bool => bool)
9.1798 + ((algebra_canon::bool list list => bool) l2)
9.1799 + ((op &::bool => bool => bool) (P l1)
9.1800 + ((op &::bool => bool => bool) (P l2)
9.1801 + ((algebra_canon::bool list list => bool)
9.1802 + ((op @::bool list list
9.1803 + => bool list list => bool list list)
9.1804 + ((map::(bool list => bool list)
9.1805 + => bool list list => bool list list)
9.1806 + ((op #::bool => bool list => bool list)
9.1807 +(True::bool))
9.1808 + l1)
9.1809 + ((map::(bool list => bool list)
9.1810 + => bool list list => bool list list)
9.1811 + ((op #::bool => bool list => bool list)
9.1812 +(False::bool))
9.1813 + l2)))))))
9.1814 + (P ((op @::bool list list
9.1815 + => bool list list => bool list list)
9.1816 + ((map::(bool list => bool list)
9.1817 + => bool list list => bool list list)
9.1818 + ((op #::bool => bool list => bool list)
9.1819 + (True::bool))
9.1820 + l1)
9.1821 + ((map::(bool list => bool list)
9.1822 + => bool list list => bool list list)
9.1823 + ((op #::bool => bool list => bool list)
9.1824 + (False::bool))
9.1825 + l2))))))))
9.1826 + ((All::(bool list list => bool) => bool)
9.1827 + (%l::bool list list.
9.1828 + (op -->::bool => bool => bool)
9.1829 + ((algebra_canon::bool list list => bool) l) (P l))))"
9.1830 + by (import prob_canon ALGEBRA_CANON_INDUCTION)
9.1831 +
9.1832 +lemma MEM_NIL_STEP: "ALL l1 l2. ~ [] mem map (op # True) l1 @ map (op # False) l2"
9.1833 + by (import prob_canon MEM_NIL_STEP)
9.1834 +
9.1835 +lemma ALG_SORTED_PREFIXFREE_MEM_NIL: "ALL l. (alg_sorted l & alg_prefixfree l & [] mem l) = (l = [[]])"
9.1836 + by (import prob_canon ALG_SORTED_PREFIXFREE_MEM_NIL)
9.1837 +
9.1838 +lemma ALG_SORTED_PREFIXFREE_EQUALITY: "(All::(bool list list => bool) => bool)
9.1839 + (%l::bool list list.
9.1840 + (All::(bool list list => bool) => bool)
9.1841 + (%l'::bool list list.
9.1842 + (op -->::bool => bool => bool)
9.1843 + ((op &::bool => bool => bool)
9.1844 + ((All::(bool list => bool) => bool)
9.1845 + (%x::bool list.
9.1846 + (op =::bool => bool => bool)
9.1847 + ((op mem::bool list => bool list list => bool) x l)
9.1848 + ((op mem::bool list => bool list list => bool) x l')))
9.1849 + ((op &::bool => bool => bool)
9.1850 + ((alg_sorted::bool list list => bool) l)
9.1851 + ((op &::bool => bool => bool)
9.1852 + ((alg_sorted::bool list list => bool) l')
9.1853 + ((op &::bool => bool => bool)
9.1854 + ((alg_prefixfree::bool list list => bool) l)
9.1855 + ((alg_prefixfree::bool list list => bool) l')))))
9.1856 + ((op =::bool list list => bool list list => bool) l l')))"
9.1857 + by (import prob_canon ALG_SORTED_PREFIXFREE_EQUALITY)
9.1858 +
9.1859 +;end_setup
9.1860 +
9.1861 +;setup_theory boolean_sequence
9.1862 +
9.1863 +consts
9.1864 + SHD :: "(nat => bool) => bool"
9.1865 +
9.1866 +defs
9.1867 + SHD_primdef: "SHD == %f. f 0"
9.1868 +
9.1869 +lemma SHD_def: "ALL f. SHD f = f 0"
9.1870 + by (import boolean_sequence SHD_def)
9.1871 +
9.1872 +consts
9.1873 + STL :: "(nat => bool) => nat => bool"
9.1874 +
9.1875 +defs
9.1876 + STL_primdef: "STL == %f n. f (Suc n)"
9.1877 +
9.1878 +lemma STL_def: "ALL f n. STL f n = f (Suc n)"
9.1879 + by (import boolean_sequence STL_def)
9.1880 +
9.1881 +consts
9.1882 + SCONS :: "bool => (nat => bool) => nat => bool"
9.1883 +
9.1884 +specification (SCONS_primdef: SCONS) SCONS_def: "(ALL h t. SCONS h t 0 = h) & (ALL h t n. SCONS h t (Suc n) = t n)"
9.1885 + by (import boolean_sequence SCONS_def)
9.1886 +
9.1887 +consts
9.1888 + SDEST :: "(nat => bool) => bool * (nat => bool)"
9.1889 +
9.1890 +defs
9.1891 + SDEST_primdef: "SDEST == %s. (SHD s, STL s)"
9.1892 +
9.1893 +lemma SDEST_def: "SDEST = (%s. (SHD s, STL s))"
9.1894 + by (import boolean_sequence SDEST_def)
9.1895 +
9.1896 +consts
9.1897 + SCONST :: "bool => nat => bool"
9.1898 +
9.1899 +defs
9.1900 + SCONST_primdef: "SCONST == K"
9.1901 +
9.1902 +lemma SCONST_def: "SCONST = K"
9.1903 + by (import boolean_sequence SCONST_def)
9.1904 +
9.1905 +consts
9.1906 + STAKE :: "nat => (nat => bool) => bool list"
9.1907 +
9.1908 +specification (STAKE_primdef: STAKE) STAKE_def: "(ALL s. STAKE 0 s = []) &
9.1909 +(ALL n s. STAKE (Suc n) s = SHD s # STAKE n (STL s))"
9.1910 + by (import boolean_sequence STAKE_def)
9.1911 +
9.1912 +consts
9.1913 + SDROP :: "nat => (nat => bool) => nat => bool"
9.1914 +
9.1915 +specification (SDROP_primdef: SDROP) SDROP_def: "SDROP 0 = I & (ALL n. SDROP (Suc n) = SDROP n o STL)"
9.1916 + by (import boolean_sequence SDROP_def)
9.1917 +
9.1918 +lemma SCONS_SURJ: "ALL x. EX xa t. x = SCONS xa t"
9.1919 + by (import boolean_sequence SCONS_SURJ)
9.1920 +
9.1921 +lemma SHD_STL_ISO: "ALL h t. EX x. SHD x = h & STL x = t"
9.1922 + by (import boolean_sequence SHD_STL_ISO)
9.1923 +
9.1924 +lemma SHD_SCONS: "ALL h t. SHD (SCONS h t) = h"
9.1925 + by (import boolean_sequence SHD_SCONS)
9.1926 +
9.1927 +lemma STL_SCONS: "ALL h t. STL (SCONS h t) = t"
9.1928 + by (import boolean_sequence STL_SCONS)
9.1929 +
9.1930 +lemma SHD_SCONST: "ALL b. SHD (SCONST b) = b"
9.1931 + by (import boolean_sequence SHD_SCONST)
9.1932 +
9.1933 +lemma STL_SCONST: "ALL b. STL (SCONST b) = SCONST b"
9.1934 + by (import boolean_sequence STL_SCONST)
9.1935 +
9.1936 +;end_setup
9.1937 +
9.1938 +;setup_theory prob_algebra
9.1939 +
9.1940 +consts
9.1941 + alg_embed :: "bool list => (nat => bool) => bool"
9.1942 +
9.1943 +specification (alg_embed_primdef: alg_embed) alg_embed_def: "(ALL s. alg_embed [] s = True) &
9.1944 +(ALL h t s. alg_embed (h # t) s = (h = SHD s & alg_embed t (STL s)))"
9.1945 + by (import prob_algebra alg_embed_def)
9.1946 +
9.1947 +consts
9.1948 + algebra_embed :: "bool list list => (nat => bool) => bool"
9.1949 +
9.1950 +specification (algebra_embed_primdef: algebra_embed) algebra_embed_def: "algebra_embed [] = EMPTY &
9.1951 +(ALL h t.
9.1952 + algebra_embed (h # t) = pred_set.UNION (alg_embed h) (algebra_embed t))"
9.1953 + by (import prob_algebra algebra_embed_def)
9.1954 +
9.1955 +consts
9.1956 + measurable :: "((nat => bool) => bool) => bool"
9.1957 +
9.1958 +defs
9.1959 + measurable_primdef: "measurable == %s. EX b. s = algebra_embed b"
9.1960 +
9.1961 +lemma measurable_def: "ALL s. measurable s = (EX b. s = algebra_embed b)"
9.1962 + by (import prob_algebra measurable_def)
9.1963 +
9.1964 +lemma HALVES_INTER: "pred_set.INTER (%x. SHD x = True) (%x. SHD x = False) = EMPTY"
9.1965 + by (import prob_algebra HALVES_INTER)
9.1966 +
9.1967 +lemma INTER_STL: "ALL p q. pred_set.INTER p q o STL = pred_set.INTER (p o STL) (q o STL)"
9.1968 + by (import prob_algebra INTER_STL)
9.1969 +
9.1970 +lemma COMPL_SHD: "ALL b. COMPL (%x. SHD x = b) = (%x. SHD x = (~ b))"
9.1971 + by (import prob_algebra COMPL_SHD)
9.1972 +
9.1973 +lemma ALG_EMBED_BASIC: "alg_embed [] = pred_set.UNIV &
9.1974 +(ALL h t.
9.1975 + alg_embed (h # t) = pred_set.INTER (%x. SHD x = h) (alg_embed t o STL))"
9.1976 + by (import prob_algebra ALG_EMBED_BASIC)
9.1977 +
9.1978 +lemma ALG_EMBED_NIL: "ALL c. All (alg_embed c) = (c = [])"
9.1979 + by (import prob_algebra ALG_EMBED_NIL)
9.1980 +
9.1981 +lemma ALG_EMBED_POPULATED: "ALL b. Ex (alg_embed b)"
9.1982 + by (import prob_algebra ALG_EMBED_POPULATED)
9.1983 +
9.1984 +lemma ALG_EMBED_PREFIX: "(All::(bool list => bool) => bool)
9.1985 + (%b::bool list.
9.1986 + (All::(bool list => bool) => bool)
9.1987 + (%c::bool list.
9.1988 + (All::((nat => bool) => bool) => bool)
9.1989 + (%s::nat => bool.
9.1990 + (op -->::bool => bool => bool)
9.1991 + ((op &::bool => bool => bool)
9.1992 + ((alg_embed::bool list => (nat => bool) => bool) b s)
9.1993 + ((alg_embed::bool list => (nat => bool) => bool) c s))
9.1994 + ((op |::bool => bool => bool)
9.1995 + ((IS_PREFIX::bool list => bool list => bool) b c)
9.1996 + ((IS_PREFIX::bool list => bool list => bool) c b)))))"
9.1997 + by (import prob_algebra ALG_EMBED_PREFIX)
9.1998 +
9.1999 +lemma ALG_EMBED_PREFIX_SUBSET: "ALL b c. SUBSET (alg_embed b) (alg_embed c) = IS_PREFIX b c"
9.2000 + by (import prob_algebra ALG_EMBED_PREFIX_SUBSET)
9.2001 +
9.2002 +lemma ALG_EMBED_TWINS: "ALL l.
9.2003 + pred_set.UNION (alg_embed (SNOC True l)) (alg_embed (SNOC False l)) =
9.2004 + alg_embed l"
9.2005 + by (import prob_algebra ALG_EMBED_TWINS)
9.2006 +
9.2007 +lemma ALGEBRA_EMBED_BASIC: "algebra_embed [] = EMPTY &
9.2008 +algebra_embed [[]] = pred_set.UNIV &
9.2009 +(ALL b. algebra_embed [[b]] = (%s. SHD s = b))"
9.2010 + by (import prob_algebra ALGEBRA_EMBED_BASIC)
9.2011 +
9.2012 +lemma ALGEBRA_EMBED_MEM: "(All::(bool list list => bool) => bool)
9.2013 + (%b::bool list list.
9.2014 + (All::((nat => bool) => bool) => bool)
9.2015 + (%x::nat => bool.
9.2016 + (op -->::bool => bool => bool)
9.2017 + ((algebra_embed::bool list list => (nat => bool) => bool) b x)
9.2018 + ((Ex::(bool list => bool) => bool)
9.2019 + (%l::bool list.
9.2020 + (op &::bool => bool => bool)
9.2021 + ((op mem::bool list => bool list list => bool) l b)
9.2022 + ((alg_embed::bool list => (nat => bool) => bool) l x)))))"
9.2023 + by (import prob_algebra ALGEBRA_EMBED_MEM)
9.2024 +
9.2025 +lemma ALGEBRA_EMBED_APPEND: "ALL l1 l2.
9.2026 + algebra_embed (l1 @ l2) =
9.2027 + pred_set.UNION (algebra_embed l1) (algebra_embed l2)"
9.2028 + by (import prob_algebra ALGEBRA_EMBED_APPEND)
9.2029 +
9.2030 +lemma ALGEBRA_EMBED_TLS: "ALL l b.
9.2031 + algebra_embed (map (op # b) l) (SCONS h t) = (h = b & algebra_embed l t)"
9.2032 + by (import prob_algebra ALGEBRA_EMBED_TLS)
9.2033 +
9.2034 +lemma ALG_CANON_PREFS_EMBED: "ALL l b. algebra_embed (alg_canon_prefs l b) = algebra_embed (l # b)"
9.2035 + by (import prob_algebra ALG_CANON_PREFS_EMBED)
9.2036 +
9.2037 +lemma ALG_CANON_FIND_EMBED: "ALL l b. algebra_embed (alg_canon_find l b) = algebra_embed (l # b)"
9.2038 + by (import prob_algebra ALG_CANON_FIND_EMBED)
9.2039 +
9.2040 +lemma ALG_CANON1_EMBED: "ALL x. algebra_embed (alg_canon1 x) = algebra_embed x"
9.2041 + by (import prob_algebra ALG_CANON1_EMBED)
9.2042 +
9.2043 +lemma ALG_CANON_MERGE_EMBED: "ALL l b. algebra_embed (alg_canon_merge l b) = algebra_embed (l # b)"
9.2044 + by (import prob_algebra ALG_CANON_MERGE_EMBED)
9.2045 +
9.2046 +lemma ALG_CANON2_EMBED: "ALL x. algebra_embed (alg_canon2 x) = algebra_embed x"
9.2047 + by (import prob_algebra ALG_CANON2_EMBED)
9.2048 +
9.2049 +lemma ALG_CANON_EMBED: "ALL l. algebra_embed (alg_canon l) = algebra_embed l"
9.2050 + by (import prob_algebra ALG_CANON_EMBED)
9.2051 +
9.2052 +lemma ALGEBRA_CANON_UNIV: "(All::(bool list list => bool) => bool)
9.2053 + (%l::bool list list.
9.2054 + (op -->::bool => bool => bool)
9.2055 + ((algebra_canon::bool list list => bool) l)
9.2056 + ((op -->::bool => bool => bool)
9.2057 + ((op =::((nat => bool) => bool) => ((nat => bool) => bool) => bool)
9.2058 + ((algebra_embed::bool list list => (nat => bool) => bool) l)
9.2059 + (pred_set.UNIV::(nat => bool) => bool))
9.2060 + ((op =::bool list list => bool list list => bool) l
9.2061 + ((op #::bool list => bool list list => bool list list)
9.2062 + ([]::bool list) ([]::bool list list)))))"
9.2063 + by (import prob_algebra ALGEBRA_CANON_UNIV)
9.2064 +
9.2065 +lemma ALG_CANON_REP: "ALL b c. (alg_canon b = alg_canon c) = (algebra_embed b = algebra_embed c)"
9.2066 + by (import prob_algebra ALG_CANON_REP)
9.2067 +
9.2068 +lemma ALGEBRA_CANON_EMBED_EMPTY: "(All::(bool list list => bool) => bool)
9.2069 + (%l::bool list list.
9.2070 + (op -->::bool => bool => bool)
9.2071 + ((algebra_canon::bool list list => bool) l)
9.2072 + ((op =::bool => bool => bool)
9.2073 + ((All::((nat => bool) => bool) => bool)
9.2074 + (%v::nat => bool.
9.2075 + (Not::bool => bool)
9.2076 + ((algebra_embed::bool list list => (nat => bool) => bool) l
9.2077 + v)))
9.2078 + ((op =::bool list list => bool list list => bool) l
9.2079 + ([]::bool list list))))"
9.2080 + by (import prob_algebra ALGEBRA_CANON_EMBED_EMPTY)
9.2081 +
9.2082 +lemma ALGEBRA_CANON_EMBED_UNIV: "(All::(bool list list => bool) => bool)
9.2083 + (%l::bool list list.
9.2084 + (op -->::bool => bool => bool)
9.2085 + ((algebra_canon::bool list list => bool) l)
9.2086 + ((op =::bool => bool => bool)
9.2087 + ((All::((nat => bool) => bool) => bool)
9.2088 + ((algebra_embed::bool list list => (nat => bool) => bool) l))
9.2089 + ((op =::bool list list => bool list list => bool) l
9.2090 + ((op #::bool list => bool list list => bool list list)
9.2091 + ([]::bool list) ([]::bool list list)))))"
9.2092 + by (import prob_algebra ALGEBRA_CANON_EMBED_UNIV)
9.2093 +
9.2094 +lemma MEASURABLE_ALGEBRA: "ALL b. measurable (algebra_embed b)"
9.2095 + by (import prob_algebra MEASURABLE_ALGEBRA)
9.2096 +
9.2097 +lemma MEASURABLE_BASIC: "measurable EMPTY &
9.2098 +measurable pred_set.UNIV & (ALL b. measurable (%s. SHD s = b))"
9.2099 + by (import prob_algebra MEASURABLE_BASIC)
9.2100 +
9.2101 +lemma MEASURABLE_SHD: "ALL b. measurable (%s. SHD s = b)"
9.2102 + by (import prob_algebra MEASURABLE_SHD)
9.2103 +
9.2104 +lemma ALGEBRA_EMBED_COMPL: "ALL l. EX l'. COMPL (algebra_embed l) = algebra_embed l'"
9.2105 + by (import prob_algebra ALGEBRA_EMBED_COMPL)
9.2106 +
9.2107 +lemma MEASURABLE_COMPL: "ALL s. measurable (COMPL s) = measurable s"
9.2108 + by (import prob_algebra MEASURABLE_COMPL)
9.2109 +
9.2110 +lemma MEASURABLE_UNION: "(All::(((nat => bool) => bool) => bool) => bool)
9.2111 + (%s::(nat => bool) => bool.
9.2112 + (All::(((nat => bool) => bool) => bool) => bool)
9.2113 + (%t::(nat => bool) => bool.
9.2114 + (op -->::bool => bool => bool)
9.2115 + ((op &::bool => bool => bool)
9.2116 + ((measurable::((nat => bool) => bool) => bool) s)
9.2117 + ((measurable::((nat => bool) => bool) => bool) t))
9.2118 + ((measurable::((nat => bool) => bool) => bool)
9.2119 + ((pred_set.UNION::((nat => bool) => bool)
9.2120 + => ((nat => bool) => bool)
9.2121 + => (nat => bool) => bool)
9.2122 + s t))))"
9.2123 + by (import prob_algebra MEASURABLE_UNION)
9.2124 +
9.2125 +lemma MEASURABLE_INTER: "(All::(((nat => bool) => bool) => bool) => bool)
9.2126 + (%s::(nat => bool) => bool.
9.2127 + (All::(((nat => bool) => bool) => bool) => bool)
9.2128 + (%t::(nat => bool) => bool.
9.2129 + (op -->::bool => bool => bool)
9.2130 + ((op &::bool => bool => bool)
9.2131 + ((measurable::((nat => bool) => bool) => bool) s)
9.2132 + ((measurable::((nat => bool) => bool) => bool) t))
9.2133 + ((measurable::((nat => bool) => bool) => bool)
9.2134 + ((pred_set.INTER::((nat => bool) => bool)
9.2135 + => ((nat => bool) => bool)
9.2136 + => (nat => bool) => bool)
9.2137 + s t))))"
9.2138 + by (import prob_algebra MEASURABLE_INTER)
9.2139 +
9.2140 +lemma MEASURABLE_STL: "ALL p. measurable (p o STL) = measurable p"
9.2141 + by (import prob_algebra MEASURABLE_STL)
9.2142 +
9.2143 +lemma MEASURABLE_SDROP: "ALL n p. measurable (p o SDROP n) = measurable p"
9.2144 + by (import prob_algebra MEASURABLE_SDROP)
9.2145 +
9.2146 +lemma MEASURABLE_INTER_HALVES: "ALL p.
9.2147 + (measurable (pred_set.INTER (%x. SHD x = True) p) &
9.2148 + measurable (pred_set.INTER (%x. SHD x = False) p)) =
9.2149 + measurable p"
9.2150 + by (import prob_algebra MEASURABLE_INTER_HALVES)
9.2151 +
9.2152 +lemma MEASURABLE_HALVES: "ALL p q.
9.2153 + measurable
9.2154 + (pred_set.UNION (pred_set.INTER (%x. SHD x = True) p)
9.2155 + (pred_set.INTER (%x. SHD x = False) q)) =
9.2156 + (measurable (pred_set.INTER (%x. SHD x = True) p) &
9.2157 + measurable (pred_set.INTER (%x. SHD x = False) q))"
9.2158 + by (import prob_algebra MEASURABLE_HALVES)
9.2159 +
9.2160 +lemma MEASURABLE_INTER_SHD: "ALL b p.
9.2161 + measurable (pred_set.INTER (%x. SHD x = b) (p o STL)) = measurable p"
9.2162 + by (import prob_algebra MEASURABLE_INTER_SHD)
9.2163 +
9.2164 +;end_setup
9.2165 +
9.2166 +;setup_theory prob
9.2167 +
9.2168 +consts
9.2169 + alg_measure :: "bool list list => real"
9.2170 +
9.2171 +specification (alg_measure_primdef: alg_measure) alg_measure_def: "alg_measure [] = 0 &
9.2172 +(ALL l rest. alg_measure (l # rest) = (1 / 2) ^ length l + alg_measure rest)"
9.2173 + by (import prob alg_measure_def)
9.2174 +
9.2175 +consts
9.2176 + algebra_measure :: "bool list list => real"
9.2177 +
9.2178 +defs
9.2179 + algebra_measure_primdef: "algebra_measure ==
9.2180 +%b. inf (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
9.2181 +
9.2182 +lemma algebra_measure_def: "ALL b.
9.2183 + algebra_measure b =
9.2184 + inf (%r. EX c. algebra_embed b = algebra_embed c & alg_measure c = r)"
9.2185 + by (import prob algebra_measure_def)
9.2186 +
9.2187 +consts
9.2188 + prob :: "((nat => bool) => bool) => real"
9.2189 +
9.2190 +defs
9.2191 + prob_primdef: "prob ==
9.2192 +%s. sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
9.2193 +
9.2194 +lemma prob_def: "ALL s.
9.2195 + prob s =
9.2196 + sup (%r. EX b. algebra_measure b = r & SUBSET (algebra_embed b) s)"
9.2197 + by (import prob prob_def)
9.2198 +
9.2199 +lemma ALG_TWINS_MEASURE: "ALL l::bool list.
9.2200 + ((1::real) / (2::real)) ^ length (SNOC True l) +
9.2201 + ((1::real) / (2::real)) ^ length (SNOC False l) =
9.2202 + ((1::real) / (2::real)) ^ length l"
9.2203 + by (import prob ALG_TWINS_MEASURE)
9.2204 +
9.2205 +lemma ALG_MEASURE_BASIC: "alg_measure [] = 0 &
9.2206 +alg_measure [[]] = 1 & (ALL b. alg_measure [[b]] = 1 / 2)"
9.2207 + by (import prob ALG_MEASURE_BASIC)
9.2208 +
9.2209 +lemma ALG_MEASURE_POS: "ALL l. 0 <= alg_measure l"
9.2210 + by (import prob ALG_MEASURE_POS)
9.2211 +
9.2212 +lemma ALG_MEASURE_APPEND: "ALL l1 l2. alg_measure (l1 @ l2) = alg_measure l1 + alg_measure l2"
9.2213 + by (import prob ALG_MEASURE_APPEND)
9.2214 +
9.2215 +lemma ALG_MEASURE_TLS: "ALL l b. 2 * alg_measure (map (op # b) l) = alg_measure l"
9.2216 + by (import prob ALG_MEASURE_TLS)
9.2217 +
9.2218 +lemma ALG_CANON_PREFS_MONO: "ALL l b. alg_measure (alg_canon_prefs l b) <= alg_measure (l # b)"
9.2219 + by (import prob ALG_CANON_PREFS_MONO)
9.2220 +
9.2221 +lemma ALG_CANON_FIND_MONO: "ALL l b. alg_measure (alg_canon_find l b) <= alg_measure (l # b)"
9.2222 + by (import prob ALG_CANON_FIND_MONO)
9.2223 +
9.2224 +lemma ALG_CANON1_MONO: "ALL x. alg_measure (alg_canon1 x) <= alg_measure x"
9.2225 + by (import prob ALG_CANON1_MONO)
9.2226 +
9.2227 +lemma ALG_CANON_MERGE_MONO: "ALL l b. alg_measure (alg_canon_merge l b) <= alg_measure (l # b)"
9.2228 + by (import prob ALG_CANON_MERGE_MONO)
9.2229 +
9.2230 +lemma ALG_CANON2_MONO: "ALL x. alg_measure (alg_canon2 x) <= alg_measure x"
9.2231 + by (import prob ALG_CANON2_MONO)
9.2232 +
9.2233 +lemma ALG_CANON_MONO: "ALL l. alg_measure (alg_canon l) <= alg_measure l"
9.2234 + by (import prob ALG_CANON_MONO)
9.2235 +
9.2236 +lemma ALGEBRA_MEASURE_DEF_ALT: "ALL l. algebra_measure l = alg_measure (alg_canon l)"
9.2237 + by (import prob ALGEBRA_MEASURE_DEF_ALT)
9.2238 +
9.2239 +lemma ALGEBRA_MEASURE_BASIC: "algebra_measure [] = 0 &
9.2240 +algebra_measure [[]] = 1 & (ALL b. algebra_measure [[b]] = 1 / 2)"
9.2241 + by (import prob ALGEBRA_MEASURE_BASIC)
9.2242 +
9.2243 +lemma ALGEBRA_CANON_MEASURE_MAX: "(All::(bool list list => bool) => bool)
9.2244 + (%l::bool list list.
9.2245 + (op -->::bool => bool => bool)
9.2246 + ((algebra_canon::bool list list => bool) l)
9.2247 + ((op <=::real => real => bool)
9.2248 + ((alg_measure::bool list list => real) l) (1::real)))"
9.2249 + by (import prob ALGEBRA_CANON_MEASURE_MAX)
9.2250 +
9.2251 +lemma ALGEBRA_MEASURE_MAX: "ALL l. algebra_measure l <= 1"
9.2252 + by (import prob ALGEBRA_MEASURE_MAX)
9.2253 +
9.2254 +lemma ALGEBRA_MEASURE_MONO_EMBED: "(All::(bool list list => bool) => bool)
9.2255 + (%x::bool list list.
9.2256 + (All::(bool list list => bool) => bool)
9.2257 + (%xa::bool list list.
9.2258 + (op -->::bool => bool => bool)
9.2259 + ((SUBSET::((nat => bool) => bool)
9.2260 + => ((nat => bool) => bool) => bool)
9.2261 + ((algebra_embed::bool list list => (nat => bool) => bool) x)
9.2262 + ((algebra_embed::bool list list => (nat => bool) => bool) xa))
9.2263 + ((op <=::real => real => bool)
9.2264 + ((algebra_measure::bool list list => real) x)
9.2265 + ((algebra_measure::bool list list => real) xa))))"
9.2266 + by (import prob ALGEBRA_MEASURE_MONO_EMBED)
9.2267 +
9.2268 +lemma ALG_MEASURE_COMPL: "(All::(bool list list => bool) => bool)
9.2269 + (%l::bool list list.
9.2270 + (op -->::bool => bool => bool)
9.2271 + ((algebra_canon::bool list list => bool) l)
9.2272 + ((All::(bool list list => bool) => bool)
9.2273 + (%c::bool list list.
9.2274 + (op -->::bool => bool => bool)
9.2275 + ((algebra_canon::bool list list => bool) c)
9.2276 + ((op -->::bool => bool => bool)
9.2277 + ((op =::((nat => bool) => bool)
9.2278 + => ((nat => bool) => bool) => bool)
9.2279 + ((COMPL::((nat => bool) => bool) => (nat => bool) => bool)
9.2280 + ((algebra_embed::bool list list => (nat => bool) => bool)
9.2281 + l))
9.2282 + ((algebra_embed::bool list list => (nat => bool) => bool)
9.2283 + c))
9.2284 + ((op =::real => real => bool)
9.2285 + ((op +::real => real => real)
9.2286 + ((alg_measure::bool list list => real) l)
9.2287 + ((alg_measure::bool list list => real) c))
9.2288 + (1::real))))))"
9.2289 + by (import prob ALG_MEASURE_COMPL)
9.2290 +
9.2291 +lemma ALG_MEASURE_ADDITIVE: "(All::(bool list list => bool) => bool)
9.2292 + (%l::bool list list.
9.2293 + (op -->::bool => bool => bool)
9.2294 + ((algebra_canon::bool list list => bool) l)
9.2295 + ((All::(bool list list => bool) => bool)
9.2296 + (%c::bool list list.
9.2297 + (op -->::bool => bool => bool)
9.2298 + ((algebra_canon::bool list list => bool) c)
9.2299 + ((All::(bool list list => bool) => bool)
9.2300 + (%d::bool list list.
9.2301 + (op -->::bool => bool => bool)
9.2302 + ((algebra_canon::bool list list => bool) d)
9.2303 + ((op -->::bool => bool => bool)
9.2304 + ((op &::bool => bool => bool)
9.2305 + ((op =::((nat => bool) => bool)
9.2306 + => ((nat => bool) => bool) => bool)
9.2307 + ((pred_set.INTER::((nat => bool) => bool)
9.2308 + => ((nat => bool) => bool) => (nat => bool) => bool)
9.2309 + ((algebra_embed::bool list list
9.2310 + => (nat => bool) => bool)
9.2311 + c)
9.2312 + ((algebra_embed::bool list list
9.2313 + => (nat => bool) => bool)
9.2314 + d))
9.2315 + (EMPTY::(nat => bool) => bool))
9.2316 + ((op =::((nat => bool) => bool)
9.2317 + => ((nat => bool) => bool) => bool)
9.2318 + ((algebra_embed::bool list list
9.2319 + => (nat => bool) => bool)
9.2320 + l)
9.2321 + ((pred_set.UNION::((nat => bool) => bool)
9.2322 + => ((nat => bool) => bool) => (nat => bool) => bool)
9.2323 + ((algebra_embed::bool list list
9.2324 + => (nat => bool) => bool)
9.2325 + c)
9.2326 + ((algebra_embed::bool list list
9.2327 + => (nat => bool) => bool)
9.2328 + d))))
9.2329 + ((op =::real => real => bool)
9.2330 + ((alg_measure::bool list list => real) l)
9.2331 + ((op +::real => real => real)
9.2332 + ((alg_measure::bool list list => real) c)
9.2333 + ((alg_measure::bool list list => real) d)))))))))"
9.2334 + by (import prob ALG_MEASURE_ADDITIVE)
9.2335 +
9.2336 +lemma PROB_ALGEBRA: "ALL l. prob (algebra_embed l) = algebra_measure l"
9.2337 + by (import prob PROB_ALGEBRA)
9.2338 +
9.2339 +lemma PROB_BASIC: "prob EMPTY = 0 &
9.2340 +prob pred_set.UNIV = 1 & (ALL b. prob (%s. SHD s = b) = 1 / 2)"
9.2341 + by (import prob PROB_BASIC)
9.2342 +
9.2343 +lemma PROB_ADDITIVE: "(All::(((nat => bool) => bool) => bool) => bool)
9.2344 + (%s::(nat => bool) => bool.
9.2345 + (All::(((nat => bool) => bool) => bool) => bool)
9.2346 + (%t::(nat => bool) => bool.
9.2347 + (op -->::bool => bool => bool)
9.2348 + ((op &::bool => bool => bool)
9.2349 + ((measurable::((nat => bool) => bool) => bool) s)
9.2350 + ((op &::bool => bool => bool)
9.2351 + ((measurable::((nat => bool) => bool) => bool) t)
9.2352 + ((op =::((nat => bool) => bool)
9.2353 + => ((nat => bool) => bool) => bool)
9.2354 + ((pred_set.INTER::((nat => bool) => bool)
9.2355 + => ((nat => bool) => bool)
9.2356 +=> (nat => bool) => bool)
9.2357 + s t)
9.2358 + (EMPTY::(nat => bool) => bool))))
9.2359 + ((op =::real => real => bool)
9.2360 + ((prob::((nat => bool) => bool) => real)
9.2361 + ((pred_set.UNION::((nat => bool) => bool)
9.2362 + => ((nat => bool) => bool)
9.2363 + => (nat => bool) => bool)
9.2364 + s t))
9.2365 + ((op +::real => real => real)
9.2366 + ((prob::((nat => bool) => bool) => real) s)
9.2367 + ((prob::((nat => bool) => bool) => real) t)))))"
9.2368 + by (import prob PROB_ADDITIVE)
9.2369 +
9.2370 +lemma PROB_COMPL: "(All::(((nat => bool) => bool) => bool) => bool)
9.2371 + (%s::(nat => bool) => bool.
9.2372 + (op -->::bool => bool => bool)
9.2373 + ((measurable::((nat => bool) => bool) => bool) s)
9.2374 + ((op =::real => real => bool)
9.2375 + ((prob::((nat => bool) => bool) => real)
9.2376 + ((COMPL::((nat => bool) => bool) => (nat => bool) => bool) s))
9.2377 + ((op -::real => real => real) (1::real)
9.2378 + ((prob::((nat => bool) => bool) => real) s))))"
9.2379 + by (import prob PROB_COMPL)
9.2380 +
9.2381 +lemma PROB_SUP_EXISTS1: "ALL s. EX x b. algebra_measure b = x & SUBSET (algebra_embed b) s"
9.2382 + by (import prob PROB_SUP_EXISTS1)
9.2383 +
9.2384 +lemma PROB_SUP_EXISTS2: "(All::(((nat => bool) => bool) => bool) => bool)
9.2385 + (%s::(nat => bool) => bool.
9.2386 + (Ex::(real => bool) => bool)
9.2387 + (%x::real.
9.2388 + (All::(real => bool) => bool)
9.2389 + (%r::real.
9.2390 + (op -->::bool => bool => bool)
9.2391 + ((Ex::(bool list list => bool) => bool)
9.2392 + (%b::bool list list.
9.2393 + (op &::bool => bool => bool)
9.2394 + ((op =::real => real => bool)
9.2395 + ((algebra_measure::bool list list => real) b) r)
9.2396 + ((SUBSET::((nat => bool) => bool)
9.2397 + => ((nat => bool) => bool) => bool)
9.2398 + ((algebra_embed::bool list list
9.2399 + => (nat => bool) => bool)
9.2400 + b)
9.2401 + s)))
9.2402 + ((op <=::real => real => bool) r x))))"
9.2403 + by (import prob PROB_SUP_EXISTS2)
9.2404 +
9.2405 +lemma PROB_LE_X: "(All::(((nat => bool) => bool) => bool) => bool)
9.2406 + (%s::(nat => bool) => bool.
9.2407 + (All::(real => bool) => bool)
9.2408 + (%x::real.
9.2409 + (op -->::bool => bool => bool)
9.2410 + ((All::(((nat => bool) => bool) => bool) => bool)
9.2411 + (%s'::(nat => bool) => bool.
9.2412 + (op -->::bool => bool => bool)
9.2413 + ((op &::bool => bool => bool)
9.2414 + ((measurable::((nat => bool) => bool) => bool) s')
9.2415 + ((SUBSET::((nat => bool) => bool)
9.2416 + => ((nat => bool) => bool) => bool)
9.2417 + s' s))
9.2418 + ((op <=::real => real => bool)
9.2419 + ((prob::((nat => bool) => bool) => real) s') x)))
9.2420 + ((op <=::real => real => bool)
9.2421 + ((prob::((nat => bool) => bool) => real) s) x)))"
9.2422 + by (import prob PROB_LE_X)
9.2423 +
9.2424 +lemma X_LE_PROB: "(All::(((nat => bool) => bool) => bool) => bool)
9.2425 + (%s::(nat => bool) => bool.
9.2426 + (All::(real => bool) => bool)
9.2427 + (%x::real.
9.2428 + (op -->::bool => bool => bool)
9.2429 + ((Ex::(((nat => bool) => bool) => bool) => bool)
9.2430 + (%s'::(nat => bool) => bool.
9.2431 + (op &::bool => bool => bool)
9.2432 + ((measurable::((nat => bool) => bool) => bool) s')
9.2433 + ((op &::bool => bool => bool)
9.2434 + ((SUBSET::((nat => bool) => bool)
9.2435 + => ((nat => bool) => bool) => bool)
9.2436 + s' s)
9.2437 + ((op <=::real => real => bool) x
9.2438 + ((prob::((nat => bool) => bool) => real) s')))))
9.2439 + ((op <=::real => real => bool) x
9.2440 + ((prob::((nat => bool) => bool) => real) s))))"
9.2441 + by (import prob X_LE_PROB)
9.2442 +
9.2443 +lemma PROB_SUBSET_MONO: "(All::(((nat => bool) => bool) => bool) => bool)
9.2444 + (%s::(nat => bool) => bool.
9.2445 + (All::(((nat => bool) => bool) => bool) => bool)
9.2446 + (%t::(nat => bool) => bool.
9.2447 + (op -->::bool => bool => bool)
9.2448 + ((SUBSET::((nat => bool) => bool)
9.2449 + => ((nat => bool) => bool) => bool)
9.2450 + s t)
9.2451 + ((op <=::real => real => bool)
9.2452 + ((prob::((nat => bool) => bool) => real) s)
9.2453 + ((prob::((nat => bool) => bool) => real) t))))"
9.2454 + by (import prob PROB_SUBSET_MONO)
9.2455 +
9.2456 +lemma PROB_ALG: "ALL x. prob (alg_embed x) = (1 / 2) ^ length x"
9.2457 + by (import prob PROB_ALG)
9.2458 +
9.2459 +lemma PROB_STL: "(All::(((nat => bool) => bool) => bool) => bool)
9.2460 + (%p::(nat => bool) => bool.
9.2461 + (op -->::bool => bool => bool)
9.2462 + ((measurable::((nat => bool) => bool) => bool) p)
9.2463 + ((op =::real => real => bool)
9.2464 + ((prob::((nat => bool) => bool) => real)
9.2465 + ((op o::((nat => bool) => bool)
9.2466 + => ((nat => bool) => nat => bool)
9.2467 + => (nat => bool) => bool)
9.2468 + p (STL::(nat => bool) => nat => bool)))
9.2469 + ((prob::((nat => bool) => bool) => real) p)))"
9.2470 + by (import prob PROB_STL)
9.2471 +
9.2472 +lemma PROB_SDROP: "(All::(nat => bool) => bool)
9.2473 + (%n::nat.
9.2474 + (All::(((nat => bool) => bool) => bool) => bool)
9.2475 + (%p::(nat => bool) => bool.
9.2476 + (op -->::bool => bool => bool)
9.2477 + ((measurable::((nat => bool) => bool) => bool) p)
9.2478 + ((op =::real => real => bool)
9.2479 + ((prob::((nat => bool) => bool) => real)
9.2480 + ((op o::((nat => bool) => bool)
9.2481 + => ((nat => bool) => nat => bool)
9.2482 + => (nat => bool) => bool)
9.2483 + p ((SDROP::nat => (nat => bool) => nat => bool) n)))
9.2484 + ((prob::((nat => bool) => bool) => real) p))))"
9.2485 + by (import prob PROB_SDROP)
9.2486 +
9.2487 +lemma PROB_INTER_HALVES: "(All::(((nat => bool) => bool) => bool) => bool)
9.2488 + (%p::(nat => bool) => bool.
9.2489 + (op -->::bool => bool => bool)
9.2490 + ((measurable::((nat => bool) => bool) => bool) p)
9.2491 + ((op =::real => real => bool)
9.2492 + ((op +::real => real => real)
9.2493 + ((prob::((nat => bool) => bool) => real)
9.2494 + ((pred_set.INTER::((nat => bool) => bool)
9.2495 + => ((nat => bool) => bool)
9.2496 + => (nat => bool) => bool)
9.2497 + (%x::nat => bool.
9.2498 + (op =::bool => bool => bool)
9.2499 + ((SHD::(nat => bool) => bool) x) (True::bool))
9.2500 + p))
9.2501 + ((prob::((nat => bool) => bool) => real)
9.2502 + ((pred_set.INTER::((nat => bool) => bool)
9.2503 + => ((nat => bool) => bool)
9.2504 + => (nat => bool) => bool)
9.2505 + (%x::nat => bool.
9.2506 + (op =::bool => bool => bool)
9.2507 + ((SHD::(nat => bool) => bool) x) (False::bool))
9.2508 + p)))
9.2509 + ((prob::((nat => bool) => bool) => real) p)))"
9.2510 + by (import prob PROB_INTER_HALVES)
9.2511 +
9.2512 +lemma PROB_INTER_SHD: "(All::(bool => bool) => bool)
9.2513 + (%b::bool.
9.2514 + (All::(((nat => bool) => bool) => bool) => bool)
9.2515 + (%p::(nat => bool) => bool.
9.2516 + (op -->::bool => bool => bool)
9.2517 + ((measurable::((nat => bool) => bool) => bool) p)
9.2518 + ((op =::real => real => bool)
9.2519 + ((prob::((nat => bool) => bool) => real)
9.2520 + ((pred_set.INTER::((nat => bool) => bool)
9.2521 + => ((nat => bool) => bool)
9.2522 + => (nat => bool) => bool)
9.2523 + (%x::nat => bool.
9.2524 + (op =::bool => bool => bool)
9.2525 + ((SHD::(nat => bool) => bool) x) b)
9.2526 + ((op o::((nat => bool) => bool)
9.2527 + => ((nat => bool) => nat => bool)
9.2528 + => (nat => bool) => bool)
9.2529 + p (STL::(nat => bool) => nat => bool))))
9.2530 + ((op *::real => real => real)
9.2531 + ((op /::real => real => real) (1::real)
9.2532 + ((number_of::bin => real)
9.2533 + ((op BIT::bin => bool => bin)
9.2534 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.2535 + (True::bool))
9.2536 + (False::bool))))
9.2537 + ((prob::((nat => bool) => bool) => real) p)))))"
9.2538 + by (import prob PROB_INTER_SHD)
9.2539 +
9.2540 +lemma ALGEBRA_MEASURE_POS: "ALL l. 0 <= algebra_measure l"
9.2541 + by (import prob ALGEBRA_MEASURE_POS)
9.2542 +
9.2543 +lemma ALGEBRA_MEASURE_RANGE: "ALL l. 0 <= algebra_measure l & algebra_measure l <= 1"
9.2544 + by (import prob ALGEBRA_MEASURE_RANGE)
9.2545 +
9.2546 +lemma PROB_POS: "ALL p. 0 <= prob p"
9.2547 + by (import prob PROB_POS)
9.2548 +
9.2549 +lemma PROB_MAX: "ALL p. prob p <= 1"
9.2550 + by (import prob PROB_MAX)
9.2551 +
9.2552 +lemma PROB_RANGE: "ALL p. 0 <= prob p & prob p <= 1"
9.2553 + by (import prob PROB_RANGE)
9.2554 +
9.2555 +lemma ABS_PROB: "ALL p. abs (prob p) = prob p"
9.2556 + by (import prob ABS_PROB)
9.2557 +
9.2558 +lemma PROB_SHD: "ALL b. prob (%s. SHD s = b) = 1 / 2"
9.2559 + by (import prob PROB_SHD)
9.2560 +
9.2561 +lemma PROB_COMPL_LE1: "(All::(((nat => bool) => bool) => bool) => bool)
9.2562 + (%p::(nat => bool) => bool.
9.2563 + (All::(real => bool) => bool)
9.2564 + (%r::real.
9.2565 + (op -->::bool => bool => bool)
9.2566 + ((measurable::((nat => bool) => bool) => bool) p)
9.2567 + ((op =::bool => bool => bool)
9.2568 + ((op <=::real => real => bool)
9.2569 + ((prob::((nat => bool) => bool) => real)
9.2570 + ((COMPL::((nat => bool) => bool) => (nat => bool) => bool)
9.2571 + p))
9.2572 + r)
9.2573 + ((op <=::real => real => bool)
9.2574 + ((op -::real => real => real) (1::real) r)
9.2575 + ((prob::((nat => bool) => bool) => real) p)))))"
9.2576 + by (import prob PROB_COMPL_LE1)
9.2577 +
9.2578 +;end_setup
9.2579 +
9.2580 +;setup_theory prob_pseudo
9.2581 +
9.2582 +consts
9.2583 + pseudo_linear_hd :: "nat => bool"
9.2584 +
9.2585 +defs
9.2586 + pseudo_linear_hd_primdef: "pseudo_linear_hd == EVEN"
9.2587 +
9.2588 +lemma pseudo_linear_hd_def: "pseudo_linear_hd = EVEN"
9.2589 + by (import prob_pseudo pseudo_linear_hd_def)
9.2590 +
9.2591 +consts
9.2592 + pseudo_linear_tl :: "nat => nat => nat => nat => nat"
9.2593 +
9.2594 +defs
9.2595 + pseudo_linear_tl_primdef: "pseudo_linear_tl == %a b n x. (a * x + b) mod (2 * n + 1)"
9.2596 +
9.2597 +lemma pseudo_linear_tl_def: "ALL a b n x. pseudo_linear_tl a b n x = (a * x + b) mod (2 * n + 1)"
9.2598 + by (import prob_pseudo pseudo_linear_tl_def)
9.2599 +
9.2600 +lemma PSEUDO_LINEAR1_EXECUTE: "EX x. (ALL xa. SHD (x xa) = pseudo_linear_hd xa) &
9.2601 + (ALL xa.
9.2602 + STL (x xa) =
9.2603 + x (pseudo_linear_tl
9.2604 + (NUMERAL
9.2605 + (NUMERAL_BIT1
9.2606 + (NUMERAL_BIT1
9.2607 + (NUMERAL_BIT1
9.2608 + (NUMERAL_BIT2
9.2609 + (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
9.2610 + (NUMERAL
9.2611 + (NUMERAL_BIT1
9.2612 + (NUMERAL_BIT1
9.2613 + (NUMERAL_BIT1
9.2614 + (NUMERAL_BIT1
9.2615 + (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
9.2616 + (NUMERAL
9.2617 + (NUMERAL_BIT1
9.2618 + (NUMERAL_BIT1
9.2619 + (NUMERAL_BIT1
9.2620 + (NUMERAL_BIT1
9.2621 + (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
9.2622 + xa))"
9.2623 + by (import prob_pseudo PSEUDO_LINEAR1_EXECUTE)
9.2624 +
9.2625 +consts
9.2626 + pseudo_linear1 :: "nat => nat => bool"
9.2627 +
9.2628 +specification (pseudo_linear1_primdef: pseudo_linear1) pseudo_linear1_def: "(ALL x. SHD (pseudo_linear1 x) = pseudo_linear_hd x) &
9.2629 +(ALL x.
9.2630 + STL (pseudo_linear1 x) =
9.2631 + pseudo_linear1
9.2632 + (pseudo_linear_tl
9.2633 + (NUMERAL
9.2634 + (NUMERAL_BIT1
9.2635 + (NUMERAL_BIT1
9.2636 + (NUMERAL_BIT1
9.2637 + (NUMERAL_BIT2 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
9.2638 + (NUMERAL
9.2639 + (NUMERAL_BIT1
9.2640 + (NUMERAL_BIT1
9.2641 + (NUMERAL_BIT1
9.2642 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT2 ALT_ZERO)))))))
9.2643 + (NUMERAL
9.2644 + (NUMERAL_BIT1
9.2645 + (NUMERAL_BIT1
9.2646 + (NUMERAL_BIT1
9.2647 + (NUMERAL_BIT1 (NUMERAL_BIT2 (NUMERAL_BIT1 ALT_ZERO)))))))
9.2648 + x))"
9.2649 + by (import prob_pseudo pseudo_linear1_def)
9.2650 +
9.2651 +consts
9.2652 + pseudo :: "nat => nat => bool"
9.2653 +
9.2654 +defs
9.2655 + pseudo_primdef: "pseudo == pseudo_linear1"
9.2656 +
9.2657 +lemma pseudo_def: "pseudo = pseudo_linear1"
9.2658 + by (import prob_pseudo pseudo_def)
9.2659 +
9.2660 +;end_setup
9.2661 +
9.2662 +;setup_theory prob_indep
9.2663 +
9.2664 +consts
9.2665 + indep_set :: "((nat => bool) => bool) => ((nat => bool) => bool) => bool"
9.2666 +
9.2667 +defs
9.2668 + indep_set_primdef: "indep_set ==
9.2669 +%p q. measurable p &
9.2670 + measurable q & prob (pred_set.INTER p q) = prob p * prob q"
9.2671 +
9.2672 +lemma indep_set_def: "ALL p q.
9.2673 + indep_set p q =
9.2674 + (measurable p &
9.2675 + measurable q & prob (pred_set.INTER p q) = prob p * prob q)"
9.2676 + by (import prob_indep indep_set_def)
9.2677 +
9.2678 +consts
9.2679 + alg_cover_set :: "bool list list => bool"
9.2680 +
9.2681 +defs
9.2682 + alg_cover_set_primdef: "alg_cover_set ==
9.2683 +%l. alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV"
9.2684 +
9.2685 +lemma alg_cover_set_def: "ALL l.
9.2686 + alg_cover_set l =
9.2687 + (alg_sorted l & alg_prefixfree l & algebra_embed l = pred_set.UNIV)"
9.2688 + by (import prob_indep alg_cover_set_def)
9.2689 +
9.2690 +consts
9.2691 + alg_cover :: "bool list list => (nat => bool) => bool list"
9.2692 +
9.2693 +defs
9.2694 + alg_cover_primdef: "alg_cover == %l x. SOME b. b mem l & alg_embed b x"
9.2695 +
9.2696 +lemma alg_cover_def: "ALL l x. alg_cover l x = (SOME b. b mem l & alg_embed b x)"
9.2697 + by (import prob_indep alg_cover_def)
9.2698 +
9.2699 +consts
9.2700 + indep :: "((nat => bool) => 'a * (nat => bool)) => bool"
9.2701 +
9.2702 +defs
9.2703 + indep_primdef: "indep ==
9.2704 +%f. EX l r.
9.2705 + alg_cover_set l &
9.2706 + (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s)))"
9.2707 +
9.2708 +lemma indep_def: "ALL f.
9.2709 + indep f =
9.2710 + (EX l r.
9.2711 + alg_cover_set l &
9.2712 + (ALL s. f s = (let c = alg_cover l s in (r c, SDROP (length c) s))))"
9.2713 + by (import prob_indep indep_def)
9.2714 +
9.2715 +lemma INDEP_SET_BASIC: "(All::(((nat => bool) => bool) => bool) => bool)
9.2716 + (%p::(nat => bool) => bool.
9.2717 + (op -->::bool => bool => bool)
9.2718 + ((measurable::((nat => bool) => bool) => bool) p)
9.2719 + ((op &::bool => bool => bool)
9.2720 + ((indep_set::((nat => bool) => bool)
9.2721 + => ((nat => bool) => bool) => bool)
9.2722 + (EMPTY::(nat => bool) => bool) p)
9.2723 + ((indep_set::((nat => bool) => bool)
9.2724 + => ((nat => bool) => bool) => bool)
9.2725 + (pred_set.UNIV::(nat => bool) => bool) p)))"
9.2726 + by (import prob_indep INDEP_SET_BASIC)
9.2727 +
9.2728 +lemma INDEP_SET_SYM: "ALL p q. indep_set p q = indep_set p q"
9.2729 + by (import prob_indep INDEP_SET_SYM)
9.2730 +
9.2731 +lemma INDEP_SET_DISJOINT_DECOMP: "(All::(((nat => bool) => bool) => bool) => bool)
9.2732 + (%p::(nat => bool) => bool.
9.2733 + (All::(((nat => bool) => bool) => bool) => bool)
9.2734 + (%q::(nat => bool) => bool.
9.2735 + (All::(((nat => bool) => bool) => bool) => bool)
9.2736 + (%r::(nat => bool) => bool.
9.2737 + (op -->::bool => bool => bool)
9.2738 + ((op &::bool => bool => bool)
9.2739 + ((indep_set::((nat => bool) => bool)
9.2740 + => ((nat => bool) => bool) => bool)
9.2741 + p r)
9.2742 + ((op &::bool => bool => bool)
9.2743 + ((indep_set::((nat => bool) => bool)
9.2744 + => ((nat => bool) => bool) => bool)
9.2745 + q r)
9.2746 + ((op =::((nat => bool) => bool)
9.2747 + => ((nat => bool) => bool) => bool)
9.2748 + ((pred_set.INTER::((nat => bool) => bool)
9.2749 + => ((nat => bool) => bool) => (nat => bool) => bool)
9.2750 + p q)
9.2751 + (EMPTY::(nat => bool) => bool))))
9.2752 + ((indep_set::((nat => bool) => bool)
9.2753 + => ((nat => bool) => bool) => bool)
9.2754 + ((pred_set.UNION::((nat => bool) => bool)
9.2755 + => ((nat => bool) => bool)
9.2756 + => (nat => bool) => bool)
9.2757 + p q)
9.2758 + r))))"
9.2759 + by (import prob_indep INDEP_SET_DISJOINT_DECOMP)
9.2760 +
9.2761 +lemma ALG_COVER_SET_BASIC: "~ alg_cover_set [] & alg_cover_set [[]] & alg_cover_set [[True], [False]]"
9.2762 + by (import prob_indep ALG_COVER_SET_BASIC)
9.2763 +
9.2764 +lemma ALG_COVER_WELL_DEFINED: "(All::(bool list list => bool) => bool)
9.2765 + (%l::bool list list.
9.2766 + (All::((nat => bool) => bool) => bool)
9.2767 + (%x::nat => bool.
9.2768 + (op -->::bool => bool => bool)
9.2769 + ((alg_cover_set::bool list list => bool) l)
9.2770 + ((op &::bool => bool => bool)
9.2771 + ((op mem::bool list => bool list list => bool)
9.2772 + ((alg_cover::bool list list => (nat => bool) => bool list) l
9.2773 + x)
9.2774 + l)
9.2775 + ((alg_embed::bool list => (nat => bool) => bool)
9.2776 + ((alg_cover::bool list list => (nat => bool) => bool list) l
9.2777 + x)
9.2778 + x))))"
9.2779 + by (import prob_indep ALG_COVER_WELL_DEFINED)
9.2780 +
9.2781 +lemma ALG_COVER_UNIV: "alg_cover [[]] = K []"
9.2782 + by (import prob_indep ALG_COVER_UNIV)
9.2783 +
9.2784 +lemma MAP_CONS_TL_FILTER: "(All::(bool list list => bool) => bool)
9.2785 + (%l::bool list list.
9.2786 + (All::(bool => bool) => bool)
9.2787 + (%b::bool.
9.2788 + (op -->::bool => bool => bool)
9.2789 + ((Not::bool => bool)
9.2790 + ((op mem::bool list => bool list list => bool) ([]::bool list)
9.2791 + l))
9.2792 + ((op =::bool list list => bool list list => bool)
9.2793 + ((map::(bool list => bool list)
9.2794 + => bool list list => bool list list)
9.2795 + ((op #::bool => bool list => bool list) b)
9.2796 + ((map::(bool list => bool list)
9.2797 + => bool list list => bool list list)
9.2798 + (tl::bool list => bool list)
9.2799 + ((filter::(bool list => bool)
9.2800 + => bool list list => bool list list)
9.2801 + (%x::bool list.
9.2802 + (op =::bool => bool => bool)
9.2803 + ((hd::bool list => bool) x) b)
9.2804 + l)))
9.2805 + ((filter::(bool list => bool)
9.2806 + => bool list list => bool list list)
9.2807 + (%x::bool list.
9.2808 + (op =::bool => bool => bool) ((hd::bool list => bool) x)
9.2809 + b)
9.2810 + l))))"
9.2811 + by (import prob_indep MAP_CONS_TL_FILTER)
9.2812 +
9.2813 +lemma ALG_COVER_SET_CASES_THM: "ALL l.
9.2814 + alg_cover_set l =
9.2815 + (l = [[]] |
9.2816 + (EX x xa.
9.2817 + alg_cover_set x &
9.2818 + alg_cover_set xa & l = map (op # True) x @ map (op # False) xa))"
9.2819 + by (import prob_indep ALG_COVER_SET_CASES_THM)
9.2820 +
9.2821 +lemma ALG_COVER_SET_CASES: "(All::((bool list list => bool) => bool) => bool)
9.2822 + (%P::bool list list => bool.
9.2823 + (op -->::bool => bool => bool)
9.2824 + ((op &::bool => bool => bool)
9.2825 + (P ((op #::bool list => bool list list => bool list list)
9.2826 + ([]::bool list) ([]::bool list list)))
9.2827 + ((All::(bool list list => bool) => bool)
9.2828 + (%l1::bool list list.
9.2829 + (All::(bool list list => bool) => bool)
9.2830 + (%l2::bool list list.
9.2831 + (op -->::bool => bool => bool)
9.2832 + ((op &::bool => bool => bool)
9.2833 + ((alg_cover_set::bool list list => bool) l1)
9.2834 + ((op &::bool => bool => bool)
9.2835 + ((alg_cover_set::bool list list => bool) l2)
9.2836 + ((alg_cover_set::bool list list => bool)
9.2837 + ((op @::bool list list
9.2838 + => bool list list => bool list list)
9.2839 + ((map::(bool list => bool list)
9.2840 + => bool list list => bool list list)
9.2841 + ((op #::bool => bool list => bool list)
9.2842 + (True::bool))
9.2843 + l1)
9.2844 + ((map::(bool list => bool list)
9.2845 + => bool list list => bool list list)
9.2846 + ((op #::bool => bool list => bool list)
9.2847 + (False::bool))
9.2848 + l2)))))
9.2849 + (P ((op @::bool list list
9.2850 + => bool list list => bool list list)
9.2851 + ((map::(bool list => bool list)
9.2852 + => bool list list => bool list list)
9.2853 + ((op #::bool => bool list => bool list)
9.2854 + (True::bool))
9.2855 + l1)
9.2856 + ((map::(bool list => bool list)
9.2857 + => bool list list => bool list list)
9.2858 + ((op #::bool => bool list => bool list)
9.2859 + (False::bool))
9.2860 + l2)))))))
9.2861 + ((All::(bool list list => bool) => bool)
9.2862 + (%l::bool list list.
9.2863 + (op -->::bool => bool => bool)
9.2864 + ((alg_cover_set::bool list list => bool) l) (P l))))"
9.2865 + by (import prob_indep ALG_COVER_SET_CASES)
9.2866 +
9.2867 +lemma ALG_COVER_SET_INDUCTION: "(All::((bool list list => bool) => bool) => bool)
9.2868 + (%P::bool list list => bool.
9.2869 + (op -->::bool => bool => bool)
9.2870 + ((op &::bool => bool => bool)
9.2871 + (P ((op #::bool list => bool list list => bool list list)
9.2872 + ([]::bool list) ([]::bool list list)))
9.2873 + ((All::(bool list list => bool) => bool)
9.2874 + (%l1::bool list list.
9.2875 + (All::(bool list list => bool) => bool)
9.2876 + (%l2::bool list list.
9.2877 + (op -->::bool => bool => bool)
9.2878 + ((op &::bool => bool => bool)
9.2879 + ((alg_cover_set::bool list list => bool) l1)
9.2880 + ((op &::bool => bool => bool)
9.2881 + ((alg_cover_set::bool list list => bool) l2)
9.2882 + ((op &::bool => bool => bool) (P l1)
9.2883 + ((op &::bool => bool => bool) (P l2)
9.2884 + ((alg_cover_set::bool list list => bool)
9.2885 + ((op @::bool list list
9.2886 +=> bool list list => bool list list)
9.2887 + ((map::(bool list => bool list)
9.2888 + => bool list list => bool list list)
9.2889 + ((op #::bool => bool list => bool list)
9.2890 + (True::bool))
9.2891 + l1)
9.2892 + ((map::(bool list => bool list)
9.2893 + => bool list list => bool list list)
9.2894 + ((op #::bool => bool list => bool list)
9.2895 + (False::bool))
9.2896 + l2)))))))
9.2897 + (P ((op @::bool list list
9.2898 + => bool list list => bool list list)
9.2899 + ((map::(bool list => bool list)
9.2900 + => bool list list => bool list list)
9.2901 + ((op #::bool => bool list => bool list)
9.2902 + (True::bool))
9.2903 + l1)
9.2904 + ((map::(bool list => bool list)
9.2905 + => bool list list => bool list list)
9.2906 + ((op #::bool => bool list => bool list)
9.2907 + (False::bool))
9.2908 + l2)))))))
9.2909 + ((All::(bool list list => bool) => bool)
9.2910 + (%l::bool list list.
9.2911 + (op -->::bool => bool => bool)
9.2912 + ((alg_cover_set::bool list list => bool) l) (P l))))"
9.2913 + by (import prob_indep ALG_COVER_SET_INDUCTION)
9.2914 +
9.2915 +lemma ALG_COVER_EXISTS_UNIQUE: "(All::(bool list list => bool) => bool)
9.2916 + (%l::bool list list.
9.2917 + (op -->::bool => bool => bool)
9.2918 + ((alg_cover_set::bool list list => bool) l)
9.2919 + ((All::((nat => bool) => bool) => bool)
9.2920 + (%s::nat => bool.
9.2921 + (Ex1::(bool list => bool) => bool)
9.2922 + (%x::bool list.
9.2923 + (op &::bool => bool => bool)
9.2924 + ((op mem::bool list => bool list list => bool) x l)
9.2925 + ((alg_embed::bool list => (nat => bool) => bool) x s)))))"
9.2926 + by (import prob_indep ALG_COVER_EXISTS_UNIQUE)
9.2927 +
9.2928 +lemma ALG_COVER_UNIQUE: "(All::(bool list list => bool) => bool)
9.2929 + (%l::bool list list.
9.2930 + (All::(bool list => bool) => bool)
9.2931 + (%x::bool list.
9.2932 + (All::((nat => bool) => bool) => bool)
9.2933 + (%s::nat => bool.
9.2934 + (op -->::bool => bool => bool)
9.2935 + ((op &::bool => bool => bool)
9.2936 + ((alg_cover_set::bool list list => bool) l)
9.2937 + ((op &::bool => bool => bool)
9.2938 + ((op mem::bool list => bool list list => bool) x l)
9.2939 + ((alg_embed::bool list => (nat => bool) => bool) x s)))
9.2940 + ((op =::bool list => bool list => bool)
9.2941 + ((alg_cover::bool list list => (nat => bool) => bool list)
9.2942 + l s)
9.2943 + x))))"
9.2944 + by (import prob_indep ALG_COVER_UNIQUE)
9.2945 +
9.2946 +lemma ALG_COVER_STEP: "(All::(bool list list => bool) => bool)
9.2947 + (%l1::bool list list.
9.2948 + (All::(bool list list => bool) => bool)
9.2949 + (%l2::bool list list.
9.2950 + (All::(bool => bool) => bool)
9.2951 + (%h::bool.
9.2952 + (All::((nat => bool) => bool) => bool)
9.2953 + (%t::nat => bool.
9.2954 + (op -->::bool => bool => bool)
9.2955 + ((op &::bool => bool => bool)
9.2956 + ((alg_cover_set::bool list list => bool) l1)
9.2957 + ((alg_cover_set::bool list list => bool) l2))
9.2958 + ((op =::bool list => bool list => bool)
9.2959 + ((alg_cover::bool list list
9.2960 + => (nat => bool) => bool list)
9.2961 + ((op @::bool list list
9.2962 + => bool list list => bool list list)
9.2963 + ((map::(bool list => bool list)
9.2964 + => bool list list => bool list list)
9.2965 + ((op #::bool => bool list => bool list)
9.2966 + (True::bool))
9.2967 + l1)
9.2968 + ((map::(bool list => bool list)
9.2969 + => bool list list => bool list list)
9.2970 + ((op #::bool => bool list => bool list)
9.2971 + (False::bool))
9.2972 + l2))
9.2973 + ((SCONS::bool => (nat => bool) => nat => bool) h
9.2974 + t))
9.2975 + ((If::bool => bool list => bool list => bool list) h
9.2976 + ((op #::bool => bool list => bool list)
9.2977 + (True::bool)
9.2978 + ((alg_cover::bool list list
9.2979 + => (nat => bool) => bool list)
9.2980 + l1 t))
9.2981 + ((op #::bool => bool list => bool list)
9.2982 + (False::bool)
9.2983 + ((alg_cover::bool list list
9.2984 + => (nat => bool) => bool list)
9.2985 + l2 t))))))))"
9.2986 + by (import prob_indep ALG_COVER_STEP)
9.2987 +
9.2988 +lemma ALG_COVER_HEAD: "(All::(bool list list => bool) => bool)
9.2989 + (%l::bool list list.
9.2990 + (op -->::bool => bool => bool)
9.2991 + ((alg_cover_set::bool list list => bool) l)
9.2992 + ((All::((bool list => bool) => bool) => bool)
9.2993 + (%f::bool list => bool.
9.2994 + (op =::((nat => bool) => bool)
9.2995 + => ((nat => bool) => bool) => bool)
9.2996 + ((op o::(bool list => bool)
9.2997 + => ((nat => bool) => bool list)
9.2998 + => (nat => bool) => bool)
9.2999 + f ((alg_cover::bool list list => (nat => bool) => bool list)
9.3000 + l))
9.3001 + ((algebra_embed::bool list list => (nat => bool) => bool)
9.3002 + ((filter::(bool list => bool)
9.3003 + => bool list list => bool list list)
9.3004 + f l)))))"
9.3005 + by (import prob_indep ALG_COVER_HEAD)
9.3006 +
9.3007 +lemma ALG_COVER_TAIL_STEP: "(All::(bool list list => bool) => bool)
9.3008 + (%l1::bool list list.
9.3009 + (All::(bool list list => bool) => bool)
9.3010 + (%l2::bool list list.
9.3011 + (All::(((nat => bool) => bool) => bool) => bool)
9.3012 + (%q::(nat => bool) => bool.
9.3013 + (op -->::bool => bool => bool)
9.3014 + ((op &::bool => bool => bool)
9.3015 + ((alg_cover_set::bool list list => bool) l1)
9.3016 + ((alg_cover_set::bool list list => bool) l2))
9.3017 + ((op =::((nat => bool) => bool)
9.3018 + => ((nat => bool) => bool) => bool)
9.3019 + ((op o::((nat => bool) => bool)
9.3020 + => ((nat => bool) => nat => bool)
9.3021 + => (nat => bool) => bool)
9.3022 + q (%x::nat => bool.
9.3023 + (SDROP::nat => (nat => bool) => nat => bool)
9.3024 + ((size::bool list => nat)
9.3025 + ((alg_cover::bool list list
9.3026 + => (nat => bool) => bool list)
9.3027 + ((op @::bool list list
9.3028 + => bool list list => bool list list)
9.3029 + ((map::(bool list => bool list)
9.3030 + => bool list list => bool list list)
9.3031 + ((op #::bool => bool list => bool list)
9.3032 + (True::bool))
9.3033 + l1)
9.3034 + ((map::(bool list => bool list)
9.3035 + => bool list list => bool list list)
9.3036 + ((op #::bool => bool list => bool list)
9.3037 + (False::bool))
9.3038 + l2))
9.3039 + x))
9.3040 + x))
9.3041 + ((pred_set.UNION::((nat => bool) => bool)
9.3042 + => ((nat => bool) => bool)
9.3043 + => (nat => bool) => bool)
9.3044 + ((pred_set.INTER::((nat => bool) => bool)
9.3045 +=> ((nat => bool) => bool) => (nat => bool) => bool)
9.3046 + (%x::nat => bool.
9.3047 + (op =::bool => bool => bool)
9.3048 + ((SHD::(nat => bool) => bool) x) (True::bool))
9.3049 + ((op o::((nat => bool) => bool)
9.3050 + => ((nat => bool) => nat => bool)
9.3051 + => (nat => bool) => bool)
9.3052 + q ((op o::((nat => bool) => nat => bool)
9.3053 + => ((nat => bool) => nat => bool)
9.3054 + => (nat => bool) => nat => bool)
9.3055 + (%x::nat => bool.
9.3056 + (SDROP::nat => (nat => bool) => nat => bool)
9.3057 + ((size::bool list => nat)
9.3058 + ((alg_cover::bool list list
9.3059 + => (nat => bool) => bool list)
9.3060 + l1 x))
9.3061 + x)
9.3062 + (STL::(nat => bool) => nat => bool))))
9.3063 + ((pred_set.INTER::((nat => bool) => bool)
9.3064 +=> ((nat => bool) => bool) => (nat => bool) => bool)
9.3065 + (%x::nat => bool.
9.3066 + (op =::bool => bool => bool)
9.3067 + ((SHD::(nat => bool) => bool) x) (False::bool))
9.3068 + ((op o::((nat => bool) => bool)
9.3069 + => ((nat => bool) => nat => bool)
9.3070 + => (nat => bool) => bool)
9.3071 + q ((op o::((nat => bool) => nat => bool)
9.3072 + => ((nat => bool) => nat => bool)
9.3073 + => (nat => bool) => nat => bool)
9.3074 + (%x::nat => bool.
9.3075 + (SDROP::nat => (nat => bool) => nat => bool)
9.3076 + ((size::bool list => nat)
9.3077 + ((alg_cover::bool list list
9.3078 + => (nat => bool) => bool list)
9.3079 + l2 x))
9.3080 + x)
9.3081 + (STL::(nat => bool) => nat => bool)))))))))"
9.3082 + by (import prob_indep ALG_COVER_TAIL_STEP)
9.3083 +
9.3084 +lemma ALG_COVER_TAIL_MEASURABLE: "(All::(bool list list => bool) => bool)
9.3085 + (%l::bool list list.
9.3086 + (op -->::bool => bool => bool)
9.3087 + ((alg_cover_set::bool list list => bool) l)
9.3088 + ((All::(((nat => bool) => bool) => bool) => bool)
9.3089 + (%q::(nat => bool) => bool.
9.3090 + (op =::bool => bool => bool)
9.3091 + ((measurable::((nat => bool) => bool) => bool)
9.3092 + ((op o::((nat => bool) => bool)
9.3093 + => ((nat => bool) => nat => bool)
9.3094 + => (nat => bool) => bool)
9.3095 + q (%x::nat => bool.
9.3096 + (SDROP::nat => (nat => bool) => nat => bool)
9.3097 + ((size::bool list => nat)
9.3098 + ((alg_cover::bool list list
9.3099 + => (nat => bool) => bool list)
9.3100 + l x))
9.3101 + x)))
9.3102 + ((measurable::((nat => bool) => bool) => bool) q))))"
9.3103 + by (import prob_indep ALG_COVER_TAIL_MEASURABLE)
9.3104 +
9.3105 +lemma ALG_COVER_TAIL_PROB: "(All::(bool list list => bool) => bool)
9.3106 + (%l::bool list list.
9.3107 + (op -->::bool => bool => bool)
9.3108 + ((alg_cover_set::bool list list => bool) l)
9.3109 + ((All::(((nat => bool) => bool) => bool) => bool)
9.3110 + (%q::(nat => bool) => bool.
9.3111 + (op -->::bool => bool => bool)
9.3112 + ((measurable::((nat => bool) => bool) => bool) q)
9.3113 + ((op =::real => real => bool)
9.3114 + ((prob::((nat => bool) => bool) => real)
9.3115 + ((op o::((nat => bool) => bool)
9.3116 + => ((nat => bool) => nat => bool)
9.3117 + => (nat => bool) => bool)
9.3118 + q (%x::nat => bool.
9.3119 + (SDROP::nat => (nat => bool) => nat => bool)
9.3120 + ((size::bool list => nat)
9.3121 + ((alg_cover::bool list list
9.3122 + => (nat => bool) => bool list)
9.3123 + l x))
9.3124 + x)))
9.3125 + ((prob::((nat => bool) => bool) => real) q)))))"
9.3126 + by (import prob_indep ALG_COVER_TAIL_PROB)
9.3127 +
9.3128 +lemma INDEP_INDEP_SET_LEMMA: "(All::(bool list list => bool) => bool)
9.3129 + (%l::bool list list.
9.3130 + (op -->::bool => bool => bool)
9.3131 + ((alg_cover_set::bool list list => bool) l)
9.3132 + ((All::(((nat => bool) => bool) => bool) => bool)
9.3133 + (%q::(nat => bool) => bool.
9.3134 + (op -->::bool => bool => bool)
9.3135 + ((measurable::((nat => bool) => bool) => bool) q)
9.3136 + ((All::(bool list => bool) => bool)
9.3137 + (%x::bool list.
9.3138 + (op -->::bool => bool => bool)
9.3139 + ((op mem::bool list => bool list list => bool) x l)
9.3140 + ((op =::real => real => bool)
9.3141 + ((prob::((nat => bool) => bool) => real)
9.3142 + ((pred_set.INTER::((nat => bool) => bool)
9.3143 + => ((nat => bool) => bool) => (nat => bool) => bool)
9.3144 + ((alg_embed::bool list => (nat => bool) => bool)
9.3145 + x)
9.3146 + ((op o::((nat => bool) => bool)
9.3147 + => ((nat => bool) => nat => bool)
9.3148 + => (nat => bool) => bool)
9.3149 + q (%x::nat => bool.
9.3150 + (SDROP::nat
9.3151 + => (nat => bool) => nat => bool)
9.3152 + ((size::bool list => nat)
9.3153 + ((alg_cover::bool list list
9.3154 + => (nat => bool) => bool list)
9.3155 + l x))
9.3156 + x))))
9.3157 + ((op *::real => real => real)
9.3158 + ((op ^::real => nat => real)
9.3159 + ((op /::real => real => real) (1::real)
9.3160 + ((number_of::bin => real)
9.3161 + ((op BIT::bin => bool => bin)
9.3162 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3163 + (True::bool))
9.3164 + (False::bool))))
9.3165 + ((size::bool list => nat) x))
9.3166 + ((prob::((nat => bool) => bool) => real) q))))))))"
9.3167 + by (import prob_indep INDEP_INDEP_SET_LEMMA)
9.3168 +
9.3169 +lemma INDEP_SET_LIST: "(All::(((nat => bool) => bool) => bool) => bool)
9.3170 + (%q::(nat => bool) => bool.
9.3171 + (All::(bool list list => bool) => bool)
9.3172 + (%l::bool list list.
9.3173 + (op -->::bool => bool => bool)
9.3174 + ((op &::bool => bool => bool)
9.3175 + ((alg_sorted::bool list list => bool) l)
9.3176 + ((op &::bool => bool => bool)
9.3177 + ((alg_prefixfree::bool list list => bool) l)
9.3178 + ((op &::bool => bool => bool)
9.3179 + ((measurable::((nat => bool) => bool) => bool) q)
9.3180 + ((All::(bool list => bool) => bool)
9.3181 + (%x::bool list.
9.3182 + (op -->::bool => bool => bool)
9.3183 + ((op mem::bool list => bool list list => bool) x l)
9.3184 + ((indep_set::((nat => bool) => bool)
9.3185 + => ((nat => bool) => bool) => bool)
9.3186 + ((alg_embed::bool list => (nat => bool) => bool)
9.3187 + x)
9.3188 + q))))))
9.3189 + ((indep_set::((nat => bool) => bool)
9.3190 + => ((nat => bool) => bool) => bool)
9.3191 + ((algebra_embed::bool list list => (nat => bool) => bool) l)
9.3192 + q)))"
9.3193 + by (import prob_indep INDEP_SET_LIST)
9.3194 +
9.3195 +lemma INDEP_INDEP_SET: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
9.3196 + (%f::(nat => bool) => 'a * (nat => bool).
9.3197 + (All::(('a => bool) => bool) => bool)
9.3198 + (%p::'a => bool.
9.3199 + (All::(((nat => bool) => bool) => bool) => bool)
9.3200 + (%q::(nat => bool) => bool.
9.3201 + (op -->::bool => bool => bool)
9.3202 + ((op &::bool => bool => bool)
9.3203 + ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
9.3204 + ((measurable::((nat => bool) => bool) => bool) q))
9.3205 + ((indep_set::((nat => bool) => bool)
9.3206 + => ((nat => bool) => bool) => bool)
9.3207 + ((op o::('a => bool)
9.3208 + => ((nat => bool) => 'a) => (nat => bool) => bool)
9.3209 + p ((op o::('a * (nat => bool) => 'a)
9.3210 + => ((nat => bool) => 'a * (nat => bool))
9.3211 + => (nat => bool) => 'a)
9.3212 + (fst::'a * (nat => bool) => 'a) f))
9.3213 + ((op o::((nat => bool) => bool)
9.3214 + => ((nat => bool) => nat => bool)
9.3215 + => (nat => bool) => bool)
9.3216 + q ((op o::('a * (nat => bool) => nat => bool)
9.3217 + => ((nat => bool) => 'a * (nat => bool))
9.3218 + => (nat => bool) => nat => bool)
9.3219 + (snd::'a * (nat => bool) => nat => bool) f))))))"
9.3220 + by (import prob_indep INDEP_INDEP_SET)
9.3221 +
9.3222 +lemma INDEP_UNIT: "ALL x. indep (UNIT x)"
9.3223 + by (import prob_indep INDEP_UNIT)
9.3224 +
9.3225 +lemma INDEP_SDEST: "indep SDEST"
9.3226 + by (import prob_indep INDEP_SDEST)
9.3227 +
9.3228 +lemma BIND_STEP: "ALL f. BIND SDEST (%k. f o SCONS k) = f"
9.3229 + by (import prob_indep BIND_STEP)
9.3230 +
9.3231 +lemma INDEP_BIND_SDEST: "(All::((bool => (nat => bool) => 'a * (nat => bool)) => bool) => bool)
9.3232 + (%f::bool => (nat => bool) => 'a * (nat => bool).
9.3233 + (op -->::bool => bool => bool)
9.3234 + ((All::(bool => bool) => bool)
9.3235 + (%x::bool.
9.3236 + (indep::((nat => bool) => 'a * (nat => bool)) => bool) (f x)))
9.3237 + ((indep::((nat => bool) => 'a * (nat => bool)) => bool)
9.3238 + ((BIND::((nat => bool) => bool * (nat => bool))
9.3239 + => (bool => (nat => bool) => 'a * (nat => bool))
9.3240 + => (nat => bool) => 'a * (nat => bool))
9.3241 + (SDEST::(nat => bool) => bool * (nat => bool)) f)))"
9.3242 + by (import prob_indep INDEP_BIND_SDEST)
9.3243 +
9.3244 +lemma INDEP_BIND: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
9.3245 + (%f::(nat => bool) => 'a * (nat => bool).
9.3246 + (All::(('a => (nat => bool) => 'b * (nat => bool)) => bool) => bool)
9.3247 + (%g::'a => (nat => bool) => 'b * (nat => bool).
9.3248 + (op -->::bool => bool => bool)
9.3249 + ((op &::bool => bool => bool)
9.3250 + ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
9.3251 + ((All::('a => bool) => bool)
9.3252 + (%x::'a.
9.3253 + (indep::((nat => bool) => 'b * (nat => bool)) => bool)
9.3254 + (g x))))
9.3255 + ((indep::((nat => bool) => 'b * (nat => bool)) => bool)
9.3256 + ((BIND::((nat => bool) => 'a * (nat => bool))
9.3257 + => ('a => (nat => bool) => 'b * (nat => bool))
9.3258 + => (nat => bool) => 'b * (nat => bool))
9.3259 + f g))))"
9.3260 + by (import prob_indep INDEP_BIND)
9.3261 +
9.3262 +lemma INDEP_PROB: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
9.3263 + (%f::(nat => bool) => 'a * (nat => bool).
9.3264 + (All::(('a => bool) => bool) => bool)
9.3265 + (%p::'a => bool.
9.3266 + (All::(((nat => bool) => bool) => bool) => bool)
9.3267 + (%q::(nat => bool) => bool.
9.3268 + (op -->::bool => bool => bool)
9.3269 + ((op &::bool => bool => bool)
9.3270 + ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
9.3271 + ((measurable::((nat => bool) => bool) => bool) q))
9.3272 + ((op =::real => real => bool)
9.3273 + ((prob::((nat => bool) => bool) => real)
9.3274 + ((pred_set.INTER::((nat => bool) => bool)
9.3275 +=> ((nat => bool) => bool) => (nat => bool) => bool)
9.3276 + ((op o::('a => bool)
9.3277 + => ((nat => bool) => 'a)
9.3278 + => (nat => bool) => bool)
9.3279 + p ((op o::('a * (nat => bool) => 'a)
9.3280 + => ((nat => bool) => 'a * (nat => bool))
9.3281 + => (nat => bool) => 'a)
9.3282 + (fst::'a * (nat => bool) => 'a) f))
9.3283 + ((op o::((nat => bool) => bool)
9.3284 + => ((nat => bool) => nat => bool)
9.3285 + => (nat => bool) => bool)
9.3286 + q ((op o::('a * (nat => bool) => nat => bool)
9.3287 + => ((nat => bool) => 'a * (nat => bool))
9.3288 + => (nat => bool) => nat => bool)
9.3289 + (snd::'a * (nat => bool) => nat => bool) f))))
9.3290 + ((op *::real => real => real)
9.3291 + ((prob::((nat => bool) => bool) => real)
9.3292 + ((op o::('a => bool)
9.3293 + => ((nat => bool) => 'a)
9.3294 + => (nat => bool) => bool)
9.3295 + p ((op o::('a * (nat => bool) => 'a)
9.3296 + => ((nat => bool) => 'a * (nat => bool))
9.3297 + => (nat => bool) => 'a)
9.3298 + (fst::'a * (nat => bool) => 'a) f)))
9.3299 + ((prob::((nat => bool) => bool) => real) q))))))"
9.3300 + by (import prob_indep INDEP_PROB)
9.3301 +
9.3302 +lemma INDEP_MEASURABLE1: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
9.3303 + (%f::(nat => bool) => 'a * (nat => bool).
9.3304 + (All::(('a => bool) => bool) => bool)
9.3305 + (%p::'a => bool.
9.3306 + (op -->::bool => bool => bool)
9.3307 + ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
9.3308 + ((measurable::((nat => bool) => bool) => bool)
9.3309 + ((op o::('a => bool)
9.3310 + => ((nat => bool) => 'a) => (nat => bool) => bool)
9.3311 + p ((op o::('a * (nat => bool) => 'a)
9.3312 + => ((nat => bool) => 'a * (nat => bool))
9.3313 + => (nat => bool) => 'a)
9.3314 + (fst::'a * (nat => bool) => 'a) f)))))"
9.3315 + by (import prob_indep INDEP_MEASURABLE1)
9.3316 +
9.3317 +lemma INDEP_MEASURABLE2: "(All::(((nat => bool) => 'a * (nat => bool)) => bool) => bool)
9.3318 + (%f::(nat => bool) => 'a * (nat => bool).
9.3319 + (All::(((nat => bool) => bool) => bool) => bool)
9.3320 + (%q::(nat => bool) => bool.
9.3321 + (op -->::bool => bool => bool)
9.3322 + ((op &::bool => bool => bool)
9.3323 + ((indep::((nat => bool) => 'a * (nat => bool)) => bool) f)
9.3324 + ((measurable::((nat => bool) => bool) => bool) q))
9.3325 + ((measurable::((nat => bool) => bool) => bool)
9.3326 + ((op o::((nat => bool) => bool)
9.3327 + => ((nat => bool) => nat => bool)
9.3328 + => (nat => bool) => bool)
9.3329 + q ((op o::('a * (nat => bool) => nat => bool)
9.3330 + => ((nat => bool) => 'a * (nat => bool))
9.3331 + => (nat => bool) => nat => bool)
9.3332 + (snd::'a * (nat => bool) => nat => bool) f)))))"
9.3333 + by (import prob_indep INDEP_MEASURABLE2)
9.3334 +
9.3335 +lemma PROB_INDEP_BOUND: "(All::(((nat => bool) => nat * (nat => bool)) => bool) => bool)
9.3336 + (%f::(nat => bool) => nat * (nat => bool).
9.3337 + (All::(nat => bool) => bool)
9.3338 + (%n::nat.
9.3339 + (op -->::bool => bool => bool)
9.3340 + ((indep::((nat => bool) => nat * (nat => bool)) => bool) f)
9.3341 + ((op =::real => real => bool)
9.3342 + ((prob::((nat => bool) => bool) => real)
9.3343 + (%s::nat => bool.
9.3344 + (op <::nat => nat => bool)
9.3345 + ((fst::nat * (nat => bool) => nat) (f s))
9.3346 + ((Suc::nat => nat) n)))
9.3347 + ((op +::real => real => real)
9.3348 + ((prob::((nat => bool) => bool) => real)
9.3349 + (%s::nat => bool.
9.3350 + (op <::nat => nat => bool)
9.3351 + ((fst::nat * (nat => bool) => nat) (f s)) n))
9.3352 + ((prob::((nat => bool) => bool) => real)
9.3353 + (%s::nat => bool.
9.3354 + (op =::nat => nat => bool)
9.3355 + ((fst::nat * (nat => bool) => nat) (f s)) n))))))"
9.3356 + by (import prob_indep PROB_INDEP_BOUND)
9.3357 +
9.3358 +;end_setup
9.3359 +
9.3360 +;setup_theory prob_uniform
9.3361 +
9.3362 +consts
9.3363 + unif_bound :: "nat => nat"
9.3364 +
9.3365 +defs
9.3366 + unif_bound_primdef: "unif_bound ==
9.3367 +WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
9.3368 + (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
9.3369 +
9.3370 +lemma unif_bound_primitive_def: "unif_bound =
9.3371 +WFREC (SOME R. WF R & (ALL v. R (Suc v div 2) (Suc v)))
9.3372 + (%unif_bound. nat_case 0 (%v1. Suc (unif_bound (Suc v1 div 2))))"
9.3373 + by (import prob_uniform unif_bound_primitive_def)
9.3374 +
9.3375 +lemma unif_bound_def: "unif_bound 0 = 0 & unif_bound (Suc v) = Suc (unif_bound (Suc v div 2))"
9.3376 + by (import prob_uniform unif_bound_def)
9.3377 +
9.3378 +lemma unif_bound_ind: "(All::((nat => bool) => bool) => bool)
9.3379 + (%P::nat => bool.
9.3380 + (op -->::bool => bool => bool)
9.3381 + ((op &::bool => bool => bool) (P (0::nat))
9.3382 + ((All::(nat => bool) => bool)
9.3383 + (%v::nat.
9.3384 + (op -->::bool => bool => bool)
9.3385 + (P ((op div::nat => nat => nat) ((Suc::nat => nat) v)
9.3386 + ((number_of::bin => nat)
9.3387 + ((op BIT::bin => bool => bin)
9.3388 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3389 + (True::bool))
9.3390 + (False::bool)))))
9.3391 + (P ((Suc::nat => nat) v)))))
9.3392 + ((All::(nat => bool) => bool) P))"
9.3393 + by (import prob_uniform unif_bound_ind)
9.3394 +
9.3395 +constdefs
9.3396 + unif_tupled :: "nat * (nat => bool) => nat * (nat => bool)"
9.3397 + "unif_tupled ==
9.3398 +WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
9.3399 + (%unif_tupled (v, v1).
9.3400 + case v of 0 => (0, v1)
9.3401 + | Suc v3 =>
9.3402 + let (m, s') = unif_tupled (Suc v3 div 2, v1)
9.3403 + in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
9.3404 +
9.3405 +lemma unif_tupled_primitive_def: "unif_tupled =
9.3406 +WFREC (SOME R. WF R & (ALL s v2. R (Suc v2 div 2, s) (Suc v2, s)))
9.3407 + (%unif_tupled (v, v1).
9.3408 + case v of 0 => (0, v1)
9.3409 + | Suc v3 =>
9.3410 + let (m, s') = unif_tupled (Suc v3 div 2, v1)
9.3411 + in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
9.3412 + by (import prob_uniform unif_tupled_primitive_def)
9.3413 +
9.3414 +consts
9.3415 + unif :: "nat => (nat => bool) => nat * (nat => bool)"
9.3416 +
9.3417 +defs
9.3418 + unif_primdef: "unif == %x x1. unif_tupled (x, x1)"
9.3419 +
9.3420 +lemma unif_curried_def: "ALL x x1. unif x x1 = unif_tupled (x, x1)"
9.3421 + by (import prob_uniform unif_curried_def)
9.3422 +
9.3423 +lemma unif_def: "unif 0 s = (0, s) &
9.3424 +unif (Suc v2) s =
9.3425 +(let (m, s') = unif (Suc v2 div 2) s
9.3426 + in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))"
9.3427 + by (import prob_uniform unif_def)
9.3428 +
9.3429 +lemma unif_ind: "(All::((nat => (nat => bool) => bool) => bool) => bool)
9.3430 + (%P::nat => (nat => bool) => bool.
9.3431 + (op -->::bool => bool => bool)
9.3432 + ((op &::bool => bool => bool)
9.3433 + ((All::((nat => bool) => bool) => bool) (P (0::nat)))
9.3434 + ((All::(nat => bool) => bool)
9.3435 + (%v2::nat.
9.3436 + (All::((nat => bool) => bool) => bool)
9.3437 + (%s::nat => bool.
9.3438 + (op -->::bool => bool => bool)
9.3439 + (P ((op div::nat => nat => nat) ((Suc::nat => nat) v2)
9.3440 + ((number_of::bin => nat)
9.3441 + ((op BIT::bin => bool => bin)
9.3442 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3443 + (True::bool))
9.3444 + (False::bool))))
9.3445 + s)
9.3446 + (P ((Suc::nat => nat) v2) s)))))
9.3447 + ((All::(nat => bool) => bool)
9.3448 + (%v::nat. (All::((nat => bool) => bool) => bool) (P v))))"
9.3449 + by (import prob_uniform unif_ind)
9.3450 +
9.3451 +constdefs
9.3452 + uniform_tupled :: "nat * nat * (nat => bool) => nat * (nat => bool)"
9.3453 + "(op ==::(nat * nat * (nat => bool) => nat * (nat => bool))
9.3454 + => (nat * nat * (nat => bool) => nat * (nat => bool)) => prop)
9.3455 + (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool))
9.3456 + ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
9.3457 + => ((nat * nat * (nat => bool) => nat * (nat => bool))
9.3458 + => nat * nat * (nat => bool) => nat * (nat => bool))
9.3459 + => nat * nat * (nat => bool) => nat * (nat => bool))
9.3460 + ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
9.3461 + => bool)
9.3462 + => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
9.3463 + (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool.
9.3464 + (op &::bool => bool => bool)
9.3465 + ((WF::(nat * nat * (nat => bool)
9.3466 + => nat * nat * (nat => bool) => bool)
9.3467 + => bool)
9.3468 + R)
9.3469 + ((All::(nat => bool) => bool)
9.3470 + (%t::nat.
9.3471 + (All::((nat => bool) => bool) => bool)
9.3472 + (%s::nat => bool.
9.3473 + (All::(nat => bool) => bool)
9.3474 + (%n::nat.
9.3475 + (All::(nat => bool) => bool)
9.3476 + (%res::nat.
9.3477 + (All::((nat => bool) => bool) => bool)
9.3478 + (%s'::nat => bool.
9.3479 + (op -->::bool => bool => bool)
9.3480 + ((op &::bool => bool => bool)
9.3481 + ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
9.3482 + ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s')
9.3483 + ((unif::nat => (nat => bool) => nat * (nat => bool)) n s))
9.3484 + ((Not::bool => bool)
9.3485 + ((op <::nat => nat => bool) res ((Suc::nat => nat) n))))
9.3486 + (R
9.3487 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t
9.3488 + ((Pair::nat => (nat => bool) => nat * (nat => bool))
9.3489 + ((Suc::nat => nat) n) s'))
9.3490 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool))
9.3491 + ((Suc::nat => nat) t)
9.3492 + ((Pair::nat => (nat => bool) => nat * (nat => bool))
9.3493 + ((Suc::nat => nat) n) s)))))))))))
9.3494 + (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool).
9.3495 + (split::(nat => nat * (nat => bool) => nat * (nat => bool))
9.3496 + => nat * nat * (nat => bool) => nat * (nat => bool))
9.3497 + (%(v::nat) v1::nat * (nat => bool).
9.3498 + (nat_case::nat * (nat => bool)
9.3499 + => (nat => nat * (nat => bool))
9.3500 + => nat => nat * (nat => bool))
9.3501 + ((split::(nat => (nat => bool) => nat * (nat => bool))
9.3502 + => nat * (nat => bool) => nat * (nat => bool))
9.3503 + (%(v3::nat) v4::nat => bool.
9.3504 + (nat_case::nat * (nat => bool)
9.3505 + => (nat => nat * (nat => bool))
9.3506 + => nat => nat * (nat => bool))
9.3507 + (ARB::nat * (nat => bool))
9.3508 + (%v5::nat.
9.3509 + (Pair::nat => (nat => bool) => nat * (nat => bool))
9.3510 + (0::nat) v4)
9.3511 + v3)
9.3512 + v1)
9.3513 + (%v2::nat.
9.3514 + (split::(nat => (nat => bool) => nat * (nat => bool))
9.3515 + => nat * (nat => bool) => nat * (nat => bool))
9.3516 + (%(v7::nat) v8::nat => bool.
9.3517 + (nat_case::nat * (nat => bool)
9.3518 + => (nat => nat * (nat => bool))
9.3519 + => nat => nat * (nat => bool))
9.3520 + (ARB::nat * (nat => bool))
9.3521 + (%v9::nat.
9.3522 + (Let::nat * (nat => bool)
9.3523 + => (nat * (nat => bool)
9.3524 + => nat * (nat => bool))
9.3525 + => nat * (nat => bool))
9.3526 + ((unif::nat
9.3527 + => (nat => bool) => nat * (nat => bool))
9.3528 + v9 v8)
9.3529 + ((split::(nat
9.3530 +=> (nat => bool) => nat * (nat => bool))
9.3531 + => nat * (nat => bool)
9.3532 + => nat * (nat => bool))
9.3533 + (%(res::nat) s'::nat => bool.
9.3534 + (If::bool
9.3535 + => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool))
9.3536 + ((op <::nat => nat => bool) res
9.3537 + ((Suc::nat => nat) v9))
9.3538 + ((Pair::nat
9.3539 + => (nat => bool) => nat * (nat => bool))
9.3540 + res s')
9.3541 + (uniform_tupled
9.3542 + ((Pair::nat
9.3543 + => nat * (nat => bool) => nat * nat * (nat => bool))
9.3544 + v2 ((Pair::nat => (nat => bool) => nat * (nat => bool))
9.3545 + ((Suc::nat => nat) v9) s'))))))
9.3546 + v7)
9.3547 + v1)
9.3548 + v)))"
9.3549 +
9.3550 +lemma uniform_tupled_primitive_def: "(op =::(nat * nat * (nat => bool) => nat * (nat => bool))
9.3551 + => (nat * nat * (nat => bool) => nat * (nat => bool)) => bool)
9.3552 + (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool))
9.3553 + ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
9.3554 + => ((nat * nat * (nat => bool) => nat * (nat => bool))
9.3555 + => nat * nat * (nat => bool) => nat * (nat => bool))
9.3556 + => nat * nat * (nat => bool) => nat * (nat => bool))
9.3557 + ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
9.3558 + => bool)
9.3559 + => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool)
9.3560 + (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool.
9.3561 + (op &::bool => bool => bool)
9.3562 + ((WF::(nat * nat * (nat => bool)
9.3563 + => nat * nat * (nat => bool) => bool)
9.3564 + => bool)
9.3565 + R)
9.3566 + ((All::(nat => bool) => bool)
9.3567 + (%t::nat.
9.3568 + (All::((nat => bool) => bool) => bool)
9.3569 + (%s::nat => bool.
9.3570 + (All::(nat => bool) => bool)
9.3571 + (%n::nat.
9.3572 + (All::(nat => bool) => bool)
9.3573 + (%res::nat.
9.3574 + (All::((nat => bool) => bool) => bool)
9.3575 + (%s'::nat => bool.
9.3576 + (op -->::bool => bool => bool)
9.3577 + ((op &::bool => bool => bool)
9.3578 + ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
9.3579 + ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s')
9.3580 + ((unif::nat => (nat => bool) => nat * (nat => bool)) n s))
9.3581 + ((Not::bool => bool)
9.3582 + ((op <::nat => nat => bool) res ((Suc::nat => nat) n))))
9.3583 + (R
9.3584 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t
9.3585 + ((Pair::nat => (nat => bool) => nat * (nat => bool))
9.3586 + ((Suc::nat => nat) n) s'))
9.3587 + ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool))
9.3588 + ((Suc::nat => nat) t)
9.3589 + ((Pair::nat => (nat => bool) => nat * (nat => bool))
9.3590 + ((Suc::nat => nat) n) s)))))))))))
9.3591 + (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool).
9.3592 + (split::(nat => nat * (nat => bool) => nat * (nat => bool))
9.3593 + => nat * nat * (nat => bool) => nat * (nat => bool))
9.3594 + (%(v::nat) v1::nat * (nat => bool).
9.3595 + (nat_case::nat * (nat => bool)
9.3596 + => (nat => nat * (nat => bool))
9.3597 + => nat => nat * (nat => bool))
9.3598 + ((split::(nat => (nat => bool) => nat * (nat => bool))
9.3599 + => nat * (nat => bool) => nat * (nat => bool))
9.3600 + (%(v3::nat) v4::nat => bool.
9.3601 + (nat_case::nat * (nat => bool)
9.3602 + => (nat => nat * (nat => bool))
9.3603 + => nat => nat * (nat => bool))
9.3604 + (ARB::nat * (nat => bool))
9.3605 + (%v5::nat.
9.3606 + (Pair::nat => (nat => bool) => nat * (nat => bool))
9.3607 + (0::nat) v4)
9.3608 + v3)
9.3609 + v1)
9.3610 + (%v2::nat.
9.3611 + (split::(nat => (nat => bool) => nat * (nat => bool))
9.3612 + => nat * (nat => bool) => nat * (nat => bool))
9.3613 + (%(v7::nat) v8::nat => bool.
9.3614 + (nat_case::nat * (nat => bool)
9.3615 + => (nat => nat * (nat => bool))
9.3616 + => nat => nat * (nat => bool))
9.3617 + (ARB::nat * (nat => bool))
9.3618 + (%v9::nat.
9.3619 + (Let::nat * (nat => bool)
9.3620 + => (nat * (nat => bool)
9.3621 + => nat * (nat => bool))
9.3622 + => nat * (nat => bool))
9.3623 + ((unif::nat
9.3624 + => (nat => bool) => nat * (nat => bool))
9.3625 + v9 v8)
9.3626 + ((split::(nat
9.3627 +=> (nat => bool) => nat * (nat => bool))
9.3628 + => nat * (nat => bool)
9.3629 + => nat * (nat => bool))
9.3630 + (%(res::nat) s'::nat => bool.
9.3631 + (If::bool
9.3632 + => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool))
9.3633 + ((op <::nat => nat => bool) res
9.3634 + ((Suc::nat => nat) v9))
9.3635 + ((Pair::nat
9.3636 + => (nat => bool) => nat * (nat => bool))
9.3637 + res s')
9.3638 + (uniform_tupled
9.3639 + ((Pair::nat
9.3640 + => nat * (nat => bool) => nat * nat * (nat => bool))
9.3641 + v2 ((Pair::nat => (nat => bool) => nat * (nat => bool))
9.3642 + ((Suc::nat => nat) v9) s'))))))
9.3643 + v7)
9.3644 + v1)
9.3645 + v)))"
9.3646 + by (import prob_uniform uniform_tupled_primitive_def)
9.3647 +
9.3648 +consts
9.3649 + uniform :: "nat => nat => (nat => bool) => nat * (nat => bool)"
9.3650 +
9.3651 +defs
9.3652 + uniform_primdef: "uniform == %x x1 x2. uniform_tupled (x, x1, x2)"
9.3653 +
9.3654 +lemma uniform_curried_def: "ALL x x1 x2. uniform x x1 x2 = uniform_tupled (x, x1, x2)"
9.3655 + by (import prob_uniform uniform_curried_def)
9.3656 +
9.3657 +lemma uniform_ind: "(All::((nat => nat => (nat => bool) => bool) => bool) => bool)
9.3658 + (%P::nat => nat => (nat => bool) => bool.
9.3659 + (op -->::bool => bool => bool)
9.3660 + ((op &::bool => bool => bool)
9.3661 + ((All::(nat => bool) => bool)
9.3662 + (%x::nat.
9.3663 + (All::((nat => bool) => bool) => bool)
9.3664 + (P ((Suc::nat => nat) x) (0::nat))))
9.3665 + ((op &::bool => bool => bool)
9.3666 + ((All::((nat => bool) => bool) => bool) (P (0::nat) (0::nat)))
9.3667 + ((op &::bool => bool => bool)
9.3668 + ((All::(nat => bool) => bool)
9.3669 + (%x::nat.
9.3670 + (All::((nat => bool) => bool) => bool)
9.3671 + (P (0::nat) ((Suc::nat => nat) x))))
9.3672 + ((All::(nat => bool) => bool)
9.3673 + (%x::nat.
9.3674 + (All::(nat => bool) => bool)
9.3675 + (%xa::nat.
9.3676 + (All::((nat => bool) => bool) => bool)
9.3677 + (%xb::nat => bool.
9.3678 + (op -->::bool => bool => bool)
9.3679 + ((All::(nat => bool) => bool)
9.3680 + (%xc::nat.
9.3681 + (All::((nat => bool) => bool) => bool)
9.3682 + (%xd::nat => bool.
9.3683 + (op -->::bool => bool => bool)
9.3684 + ((op &::bool => bool => bool)
9.3685 + ((op =::nat * (nat => bool) => nat * (nat => bool) => bool)
9.3686 + ((Pair::nat => (nat => bool) => nat * (nat => bool)) xc xd)
9.3687 + ((unif::nat => (nat => bool) => nat * (nat => bool)) xa xb))
9.3688 + ((Not::bool => bool)
9.3689 + ((op <::nat => nat => bool) xc ((Suc::nat => nat) xa))))
9.3690 + (P x ((Suc::nat => nat) xa) xd))))
9.3691 + (P ((Suc::nat => nat) x) ((Suc::nat => nat) xa)
9.3692 + xb))))))))
9.3693 + ((All::(nat => bool) => bool)
9.3694 + (%x::nat.
9.3695 + (All::(nat => bool) => bool)
9.3696 + (%xa::nat. (All::((nat => bool) => bool) => bool) (P x xa)))))"
9.3697 + by (import prob_uniform uniform_ind)
9.3698 +
9.3699 +lemma uniform_def: "uniform 0 (Suc n) s = (0, s) &
9.3700 +uniform (Suc t) (Suc n) s =
9.3701 +(let (xa, x) = unif n s
9.3702 + in if xa < Suc n then (xa, x) else uniform t (Suc n) x)"
9.3703 + by (import prob_uniform uniform_def)
9.3704 +
9.3705 +lemma SUC_DIV_TWO_ZERO: "ALL n. (Suc n div 2 = 0) = (n = 0)"
9.3706 + by (import prob_uniform SUC_DIV_TWO_ZERO)
9.3707 +
9.3708 +lemma UNIF_BOUND_LOWER: "ALL n. n < 2 ^ unif_bound n"
9.3709 + by (import prob_uniform UNIF_BOUND_LOWER)
9.3710 +
9.3711 +lemma UNIF_BOUND_LOWER_SUC: "ALL n. Suc n <= 2 ^ unif_bound n"
9.3712 + by (import prob_uniform UNIF_BOUND_LOWER_SUC)
9.3713 +
9.3714 +lemma UNIF_BOUND_UPPER: "(All::(nat => bool) => bool)
9.3715 + (%n::nat.
9.3716 + (op -->::bool => bool => bool)
9.3717 + ((Not::bool => bool) ((op =::nat => nat => bool) n (0::nat)))
9.3718 + ((op <=::nat => nat => bool)
9.3719 + ((op ^::nat => nat => nat)
9.3720 + ((number_of::bin => nat)
9.3721 + ((op BIT::bin => bool => bin)
9.3722 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
9.3723 + (False::bool)))
9.3724 + ((unif_bound::nat => nat) n))
9.3725 + ((op *::nat => nat => nat)
9.3726 + ((number_of::bin => nat)
9.3727 + ((op BIT::bin => bool => bin)
9.3728 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
9.3729 + (False::bool)))
9.3730 + n)))"
9.3731 + by (import prob_uniform UNIF_BOUND_UPPER)
9.3732 +
9.3733 +lemma UNIF_BOUND_UPPER_SUC: "ALL n. 2 ^ unif_bound n <= Suc (2 * n)"
9.3734 + by (import prob_uniform UNIF_BOUND_UPPER_SUC)
9.3735 +
9.3736 +lemma UNIF_DEF_MONAD: "unif 0 = UNIT 0 &
9.3737 +(ALL n.
9.3738 + unif (Suc n) =
9.3739 + BIND (unif (Suc n div 2))
9.3740 + (%m. BIND SDEST (%b. UNIT (if b then 2 * m + 1 else 2 * m))))"
9.3741 + by (import prob_uniform UNIF_DEF_MONAD)
9.3742 +
9.3743 +lemma UNIFORM_DEF_MONAD: "(ALL x. uniform 0 (Suc x) = UNIT 0) &
9.3744 +(ALL x xa.
9.3745 + uniform (Suc x) (Suc xa) =
9.3746 + BIND (unif xa) (%m. if m < Suc xa then UNIT m else uniform x (Suc xa)))"
9.3747 + by (import prob_uniform UNIFORM_DEF_MONAD)
9.3748 +
9.3749 +lemma INDEP_UNIF: "ALL n. indep (unif n)"
9.3750 + by (import prob_uniform INDEP_UNIF)
9.3751 +
9.3752 +lemma INDEP_UNIFORM: "ALL t n. indep (uniform t (Suc n))"
9.3753 + by (import prob_uniform INDEP_UNIFORM)
9.3754 +
9.3755 +lemma PROB_UNIF: "ALL n k.
9.3756 + prob (%s. fst (unif n s) = k) =
9.3757 + (if k < 2 ^ unif_bound n then (1 / 2) ^ unif_bound n else 0)"
9.3758 + by (import prob_uniform PROB_UNIF)
9.3759 +
9.3760 +lemma UNIF_RANGE: "ALL n s. fst (unif n s) < 2 ^ unif_bound n"
9.3761 + by (import prob_uniform UNIF_RANGE)
9.3762 +
9.3763 +lemma PROB_UNIF_PAIR: "ALL n k k'.
9.3764 + (prob (%s. fst (unif n s) = k) = prob (%s. fst (unif n s) = k')) =
9.3765 + ((k < 2 ^ unif_bound n) = (k' < 2 ^ unif_bound n))"
9.3766 + by (import prob_uniform PROB_UNIF_PAIR)
9.3767 +
9.3768 +lemma PROB_UNIF_BOUND: "(All::(nat => bool) => bool)
9.3769 + (%n::nat.
9.3770 + (All::(nat => bool) => bool)
9.3771 + (%k::nat.
9.3772 + (op -->::bool => bool => bool)
9.3773 + ((op <=::nat => nat => bool) k
9.3774 + ((op ^::nat => nat => nat)
9.3775 + ((number_of::bin => nat)
9.3776 + ((op BIT::bin => bool => bin)
9.3777 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3778 + (True::bool))
9.3779 + (False::bool)))
9.3780 + ((unif_bound::nat => nat) n)))
9.3781 + ((op =::real => real => bool)
9.3782 + ((prob::((nat => bool) => bool) => real)
9.3783 + (%s::nat => bool.
9.3784 + (op <::nat => nat => bool)
9.3785 + ((fst::nat * (nat => bool) => nat)
9.3786 + ((unif::nat => (nat => bool) => nat * (nat => bool)) n
9.3787 + s))
9.3788 + k))
9.3789 + ((op *::real => real => real) ((real::nat => real) k)
9.3790 + ((op ^::real => nat => real)
9.3791 + ((op /::real => real => real) (1::real)
9.3792 + ((number_of::bin => real)
9.3793 + ((op BIT::bin => bool => bin)
9.3794 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3795 + (True::bool))
9.3796 + (False::bool))))
9.3797 + ((unif_bound::nat => nat) n))))))"
9.3798 + by (import prob_uniform PROB_UNIF_BOUND)
9.3799 +
9.3800 +lemma PROB_UNIF_GOOD: "ALL n. 1 / 2 <= prob (%s. fst (unif n s) < Suc n)"
9.3801 + by (import prob_uniform PROB_UNIF_GOOD)
9.3802 +
9.3803 +lemma UNIFORM_RANGE: "ALL t n s. fst (uniform t (Suc n) s) < Suc n"
9.3804 + by (import prob_uniform UNIFORM_RANGE)
9.3805 +
9.3806 +lemma PROB_UNIFORM_LOWER_BOUND: "(All::(real => bool) => bool)
9.3807 + (%b::real.
9.3808 + (op -->::bool => bool => bool)
9.3809 + ((All::(nat => bool) => bool)
9.3810 + (%k::nat.
9.3811 + (op -->::bool => bool => bool)
9.3812 + ((op <::nat => nat => bool) k ((Suc::nat => nat) (n::nat)))
9.3813 + ((op <::real => real => bool)
9.3814 + ((prob::((nat => bool) => bool) => real)
9.3815 + (%s::nat => bool.
9.3816 + (op =::nat => nat => bool)
9.3817 + ((fst::nat * (nat => bool) => nat)
9.3818 + ((uniform::nat
9.3819 + => nat
9.3820 +=> (nat => bool) => nat * (nat => bool))
9.3821 + (t::nat) ((Suc::nat => nat) n) s))
9.3822 + k))
9.3823 + b)))
9.3824 + ((All::(nat => bool) => bool)
9.3825 + (%m::nat.
9.3826 + (op -->::bool => bool => bool)
9.3827 + ((op <::nat => nat => bool) m ((Suc::nat => nat) n))
9.3828 + ((op <::real => real => bool)
9.3829 + ((prob::((nat => bool) => bool) => real)
9.3830 + (%s::nat => bool.
9.3831 + (op <::nat => nat => bool)
9.3832 + ((fst::nat * (nat => bool) => nat)
9.3833 + ((uniform::nat
9.3834 + => nat
9.3835 +=> (nat => bool) => nat * (nat => bool))
9.3836 + t ((Suc::nat => nat) n) s))
9.3837 + ((Suc::nat => nat) m)))
9.3838 + ((op *::real => real => real)
9.3839 + ((real::nat => real) ((Suc::nat => nat) m)) b)))))"
9.3840 + by (import prob_uniform PROB_UNIFORM_LOWER_BOUND)
9.3841 +
9.3842 +lemma PROB_UNIFORM_UPPER_BOUND: "(All::(real => bool) => bool)
9.3843 + (%b::real.
9.3844 + (op -->::bool => bool => bool)
9.3845 + ((All::(nat => bool) => bool)
9.3846 + (%k::nat.
9.3847 + (op -->::bool => bool => bool)
9.3848 + ((op <::nat => nat => bool) k ((Suc::nat => nat) (n::nat)))
9.3849 + ((op <::real => real => bool) b
9.3850 + ((prob::((nat => bool) => bool) => real)
9.3851 + (%s::nat => bool.
9.3852 + (op =::nat => nat => bool)
9.3853 + ((fst::nat * (nat => bool) => nat)
9.3854 + ((uniform::nat
9.3855 + => nat
9.3856 +=> (nat => bool) => nat * (nat => bool))
9.3857 + (t::nat) ((Suc::nat => nat) n) s))
9.3858 + k)))))
9.3859 + ((All::(nat => bool) => bool)
9.3860 + (%m::nat.
9.3861 + (op -->::bool => bool => bool)
9.3862 + ((op <::nat => nat => bool) m ((Suc::nat => nat) n))
9.3863 + ((op <::real => real => bool)
9.3864 + ((op *::real => real => real)
9.3865 + ((real::nat => real) ((Suc::nat => nat) m)) b)
9.3866 + ((prob::((nat => bool) => bool) => real)
9.3867 + (%s::nat => bool.
9.3868 + (op <::nat => nat => bool)
9.3869 + ((fst::nat * (nat => bool) => nat)
9.3870 + ((uniform::nat
9.3871 + => nat
9.3872 +=> (nat => bool) => nat * (nat => bool))
9.3873 + t ((Suc::nat => nat) n) s))
9.3874 + ((Suc::nat => nat) m)))))))"
9.3875 + by (import prob_uniform PROB_UNIFORM_UPPER_BOUND)
9.3876 +
9.3877 +lemma PROB_UNIFORM_PAIR_SUC: "(All::(nat => bool) => bool)
9.3878 + (%t::nat.
9.3879 + (All::(nat => bool) => bool)
9.3880 + (%n::nat.
9.3881 + (All::(nat => bool) => bool)
9.3882 + (%k::nat.
9.3883 + (All::(nat => bool) => bool)
9.3884 + (%k'::nat.
9.3885 + (op -->::bool => bool => bool)
9.3886 + ((op &::bool => bool => bool)
9.3887 + ((op <::nat => nat => bool) k ((Suc::nat => nat) n))
9.3888 + ((op <::nat => nat => bool) k'
9.3889 + ((Suc::nat => nat) n)))
9.3890 + ((op <=::real => real => bool)
9.3891 + ((abs::real => real)
9.3892 + ((op -::real => real => real)
9.3893 + ((prob::((nat => bool) => bool) => real)
9.3894 + (%s::nat => bool.
9.3895 + (op =::nat => nat => bool)
9.3896 + ((fst::nat * (nat => bool) => nat)
9.3897 + ((uniform::nat
9.3898 + => nat => (nat => bool) => nat * (nat => bool))
9.3899 +t ((Suc::nat => nat) n) s))
9.3900 + k))
9.3901 + ((prob::((nat => bool) => bool) => real)
9.3902 + (%s::nat => bool.
9.3903 + (op =::nat => nat => bool)
9.3904 + ((fst::nat * (nat => bool) => nat)
9.3905 + ((uniform::nat
9.3906 + => nat => (nat => bool) => nat * (nat => bool))
9.3907 +t ((Suc::nat => nat) n) s))
9.3908 + k'))))
9.3909 + ((op ^::real => nat => real)
9.3910 + ((op /::real => real => real) (1::real)
9.3911 + ((number_of::bin => real)
9.3912 + ((op BIT::bin => bool => bin)
9.3913 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3914 + (True::bool))
9.3915 + (False::bool))))
9.3916 + t))))))"
9.3917 + by (import prob_uniform PROB_UNIFORM_PAIR_SUC)
9.3918 +
9.3919 +lemma PROB_UNIFORM_SUC: "(All::(nat => bool) => bool)
9.3920 + (%t::nat.
9.3921 + (All::(nat => bool) => bool)
9.3922 + (%n::nat.
9.3923 + (All::(nat => bool) => bool)
9.3924 + (%k::nat.
9.3925 + (op -->::bool => bool => bool)
9.3926 + ((op <::nat => nat => bool) k ((Suc::nat => nat) n))
9.3927 + ((op <=::real => real => bool)
9.3928 + ((abs::real => real)
9.3929 + ((op -::real => real => real)
9.3930 + ((prob::((nat => bool) => bool) => real)
9.3931 + (%s::nat => bool.
9.3932 + (op =::nat => nat => bool)
9.3933 + ((fst::nat * (nat => bool) => nat)
9.3934 + ((uniform::nat
9.3935 + => nat => (nat => bool) => nat * (nat => bool))
9.3936 + t ((Suc::nat => nat) n) s))
9.3937 + k))
9.3938 + ((op /::real => real => real) (1::real)
9.3939 + ((real::nat => real) ((Suc::nat => nat) n)))))
9.3940 + ((op ^::real => nat => real)
9.3941 + ((op /::real => real => real) (1::real)
9.3942 + ((number_of::bin => real)
9.3943 + ((op BIT::bin => bool => bin)
9.3944 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3945 + (True::bool))
9.3946 + (False::bool))))
9.3947 + t)))))"
9.3948 + by (import prob_uniform PROB_UNIFORM_SUC)
9.3949 +
9.3950 +lemma PROB_UNIFORM: "(All::(nat => bool) => bool)
9.3951 + (%t::nat.
9.3952 + (All::(nat => bool) => bool)
9.3953 + (%n::nat.
9.3954 + (All::(nat => bool) => bool)
9.3955 + (%k::nat.
9.3956 + (op -->::bool => bool => bool)
9.3957 + ((op <::nat => nat => bool) k n)
9.3958 + ((op <=::real => real => bool)
9.3959 + ((abs::real => real)
9.3960 + ((op -::real => real => real)
9.3961 + ((prob::((nat => bool) => bool) => real)
9.3962 + (%s::nat => bool.
9.3963 + (op =::nat => nat => bool)
9.3964 + ((fst::nat * (nat => bool) => nat)
9.3965 + ((uniform::nat
9.3966 + => nat => (nat => bool) => nat * (nat => bool))
9.3967 + t n s))
9.3968 + k))
9.3969 + ((op /::real => real => real) (1::real)
9.3970 + ((real::nat => real) n))))
9.3971 + ((op ^::real => nat => real)
9.3972 + ((op /::real => real => real) (1::real)
9.3973 + ((number_of::bin => real)
9.3974 + ((op BIT::bin => bool => bin)
9.3975 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
9.3976 + (True::bool))
9.3977 + (False::bool))))
9.3978 + t)))))"
9.3979 + by (import prob_uniform PROB_UNIFORM)
9.3980 +
9.3981 +;end_setup
9.3982 +
9.3983 +end
9.3984 +
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
10.2 +++ b/src/HOL/Import/HOL/HOL4Real.thy Fri Apr 02 17:37:45 2004 +0200
10.3 @@ -0,0 +1,7644 @@
10.4 +theory HOL4Real = HOL4Base:
10.5 +
10.6 +;setup_theory realax
10.7 +
10.8 +lemma HREAL_RDISTRIB: "ALL x y z.
10.9 + hreal_mul (hreal_add x y) z = hreal_add (hreal_mul x z) (hreal_mul y z)"
10.10 + by (import realax HREAL_RDISTRIB)
10.11 +
10.12 +lemma HREAL_EQ_ADDL: "ALL x y. x ~= hreal_add x y"
10.13 + by (import realax HREAL_EQ_ADDL)
10.14 +
10.15 +lemma HREAL_EQ_LADD: "ALL x y z. (hreal_add x y = hreal_add x z) = (y = z)"
10.16 + by (import realax HREAL_EQ_LADD)
10.17 +
10.18 +lemma HREAL_LT_REFL: "ALL x. ~ hreal_lt x x"
10.19 + by (import realax HREAL_LT_REFL)
10.20 +
10.21 +lemma HREAL_LT_ADDL: "ALL x y. hreal_lt x (hreal_add x y)"
10.22 + by (import realax HREAL_LT_ADDL)
10.23 +
10.24 +lemma HREAL_LT_NE: "ALL x y. hreal_lt x y --> x ~= y"
10.25 + by (import realax HREAL_LT_NE)
10.26 +
10.27 +lemma HREAL_LT_ADDR: "ALL x y. ~ hreal_lt (hreal_add x y) x"
10.28 + by (import realax HREAL_LT_ADDR)
10.29 +
10.30 +lemma HREAL_LT_GT: "ALL x y. hreal_lt x y --> ~ hreal_lt y x"
10.31 + by (import realax HREAL_LT_GT)
10.32 +
10.33 +lemma HREAL_LT_ADD2: "ALL x1 x2 y1 y2.
10.34 + hreal_lt x1 y1 & hreal_lt x2 y2 -->
10.35 + hreal_lt (hreal_add x1 x2) (hreal_add y1 y2)"
10.36 + by (import realax HREAL_LT_ADD2)
10.37 +
10.38 +lemma HREAL_LT_LADD: "ALL x y z. hreal_lt (hreal_add x y) (hreal_add x z) = hreal_lt y z"
10.39 + by (import realax HREAL_LT_LADD)
10.40 +
10.41 +constdefs
10.42 + treal_0 :: "hreal * hreal"
10.43 + "treal_0 == (hreal_1, hreal_1)"
10.44 +
10.45 +lemma treal_0: "treal_0 = (hreal_1, hreal_1)"
10.46 + by (import realax treal_0)
10.47 +
10.48 +constdefs
10.49 + treal_1 :: "hreal * hreal"
10.50 + "treal_1 == (hreal_add hreal_1 hreal_1, hreal_1)"
10.51 +
10.52 +lemma treal_1: "treal_1 = (hreal_add hreal_1 hreal_1, hreal_1)"
10.53 + by (import realax treal_1)
10.54 +
10.55 +constdefs
10.56 + treal_neg :: "hreal * hreal => hreal * hreal"
10.57 + "treal_neg == %(x, y). (y, x)"
10.58 +
10.59 +lemma treal_neg: "ALL x y. treal_neg (x, y) = (y, x)"
10.60 + by (import realax treal_neg)
10.61 +
10.62 +constdefs
10.63 + treal_add :: "hreal * hreal => hreal * hreal => hreal * hreal"
10.64 + "treal_add == %(x1, y1) (x2, y2). (hreal_add x1 x2, hreal_add y1 y2)"
10.65 +
10.66 +lemma treal_add: "ALL x1 y1 x2 y2.
10.67 + treal_add (x1, y1) (x2, y2) = (hreal_add x1 x2, hreal_add y1 y2)"
10.68 + by (import realax treal_add)
10.69 +
10.70 +constdefs
10.71 + treal_mul :: "hreal * hreal => hreal * hreal => hreal * hreal"
10.72 + "treal_mul ==
10.73 +%(x1, y1) (x2, y2).
10.74 + (hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
10.75 + hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
10.76 +
10.77 +lemma treal_mul: "ALL x1 y1 x2 y2.
10.78 + treal_mul (x1, y1) (x2, y2) =
10.79 + (hreal_add (hreal_mul x1 x2) (hreal_mul y1 y2),
10.80 + hreal_add (hreal_mul x1 y2) (hreal_mul y1 x2))"
10.81 + by (import realax treal_mul)
10.82 +
10.83 +constdefs
10.84 + treal_lt :: "hreal * hreal => hreal * hreal => bool"
10.85 + "treal_lt == %(x1, y1) (x2, y2). hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
10.86 +
10.87 +lemma treal_lt: "ALL x1 y1 x2 y2.
10.88 + treal_lt (x1, y1) (x2, y2) = hreal_lt (hreal_add x1 y2) (hreal_add x2 y1)"
10.89 + by (import realax treal_lt)
10.90 +
10.91 +constdefs
10.92 + treal_inv :: "hreal * hreal => hreal * hreal"
10.93 + "treal_inv ==
10.94 +%(x, y).
10.95 + if x = y then treal_0
10.96 + else if hreal_lt y x
10.97 + then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
10.98 + else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1)"
10.99 +
10.100 +lemma treal_inv: "ALL x y.
10.101 + treal_inv (x, y) =
10.102 + (if x = y then treal_0
10.103 + else if hreal_lt y x
10.104 + then (hreal_add (hreal_inv (hreal_sub x y)) hreal_1, hreal_1)
10.105 + else (hreal_1, hreal_add (hreal_inv (hreal_sub y x)) hreal_1))"
10.106 + by (import realax treal_inv)
10.107 +
10.108 +constdefs
10.109 + treal_eq :: "hreal * hreal => hreal * hreal => bool"
10.110 + "treal_eq == %(x1, y1) (x2, y2). hreal_add x1 y2 = hreal_add x2 y1"
10.111 +
10.112 +lemma treal_eq: "ALL x1 y1 x2 y2.
10.113 + treal_eq (x1, y1) (x2, y2) = (hreal_add x1 y2 = hreal_add x2 y1)"
10.114 + by (import realax treal_eq)
10.115 +
10.116 +lemma TREAL_EQ_REFL: "ALL x. treal_eq x x"
10.117 + by (import realax TREAL_EQ_REFL)
10.118 +
10.119 +lemma TREAL_EQ_SYM: "ALL x y. treal_eq x y = treal_eq y x"
10.120 + by (import realax TREAL_EQ_SYM)
10.121 +
10.122 +lemma TREAL_EQ_TRANS: "ALL x y z. treal_eq x y & treal_eq y z --> treal_eq x z"
10.123 + by (import realax TREAL_EQ_TRANS)
10.124 +
10.125 +lemma TREAL_EQ_EQUIV: "ALL p q. treal_eq p q = (treal_eq p = treal_eq q)"
10.126 + by (import realax TREAL_EQ_EQUIV)
10.127 +
10.128 +lemma TREAL_EQ_AP: "ALL p q. p = q --> treal_eq p q"
10.129 + by (import realax TREAL_EQ_AP)
10.130 +
10.131 +lemma TREAL_10: "~ treal_eq treal_1 treal_0"
10.132 + by (import realax TREAL_10)
10.133 +
10.134 +lemma TREAL_ADD_SYM: "ALL x y. treal_add x y = treal_add y x"
10.135 + by (import realax TREAL_ADD_SYM)
10.136 +
10.137 +lemma TREAL_MUL_SYM: "ALL x y. treal_mul x y = treal_mul y x"
10.138 + by (import realax TREAL_MUL_SYM)
10.139 +
10.140 +lemma TREAL_ADD_ASSOC: "ALL x y z. treal_add x (treal_add y z) = treal_add (treal_add x y) z"
10.141 + by (import realax TREAL_ADD_ASSOC)
10.142 +
10.143 +lemma TREAL_MUL_ASSOC: "ALL x y z. treal_mul x (treal_mul y z) = treal_mul (treal_mul x y) z"
10.144 + by (import realax TREAL_MUL_ASSOC)
10.145 +
10.146 +lemma TREAL_LDISTRIB: "ALL x y z.
10.147 + treal_mul x (treal_add y z) = treal_add (treal_mul x y) (treal_mul x z)"
10.148 + by (import realax TREAL_LDISTRIB)
10.149 +
10.150 +lemma TREAL_ADD_LID: "ALL x. treal_eq (treal_add treal_0 x) x"
10.151 + by (import realax TREAL_ADD_LID)
10.152 +
10.153 +lemma TREAL_MUL_LID: "ALL x. treal_eq (treal_mul treal_1 x) x"
10.154 + by (import realax TREAL_MUL_LID)
10.155 +
10.156 +lemma TREAL_ADD_LINV: "ALL x. treal_eq (treal_add (treal_neg x) x) treal_0"
10.157 + by (import realax TREAL_ADD_LINV)
10.158 +
10.159 +lemma TREAL_INV_0: "treal_eq (treal_inv treal_0) treal_0"
10.160 + by (import realax TREAL_INV_0)
10.161 +
10.162 +lemma TREAL_MUL_LINV: "ALL x. ~ treal_eq x treal_0 --> treal_eq (treal_mul (treal_inv x) x) treal_1"
10.163 + by (import realax TREAL_MUL_LINV)
10.164 +
10.165 +lemma TREAL_LT_TOTAL: "ALL x y. treal_eq x y | treal_lt x y | treal_lt y x"
10.166 + by (import realax TREAL_LT_TOTAL)
10.167 +
10.168 +lemma TREAL_LT_REFL: "ALL x. ~ treal_lt x x"
10.169 + by (import realax TREAL_LT_REFL)
10.170 +
10.171 +lemma TREAL_LT_TRANS: "ALL x y z. treal_lt x y & treal_lt y z --> treal_lt x z"
10.172 + by (import realax TREAL_LT_TRANS)
10.173 +
10.174 +lemma TREAL_LT_ADD: "ALL x y z. treal_lt y z --> treal_lt (treal_add x y) (treal_add x z)"
10.175 + by (import realax TREAL_LT_ADD)
10.176 +
10.177 +lemma TREAL_LT_MUL: "ALL x y.
10.178 + treal_lt treal_0 x & treal_lt treal_0 y -->
10.179 + treal_lt treal_0 (treal_mul x y)"
10.180 + by (import realax TREAL_LT_MUL)
10.181 +
10.182 +constdefs
10.183 + treal_of_hreal :: "hreal => hreal * hreal"
10.184 + "treal_of_hreal == %x. (hreal_add x hreal_1, hreal_1)"
10.185 +
10.186 +lemma treal_of_hreal: "ALL x. treal_of_hreal x = (hreal_add x hreal_1, hreal_1)"
10.187 + by (import realax treal_of_hreal)
10.188 +
10.189 +constdefs
10.190 + hreal_of_treal :: "hreal * hreal => hreal"
10.191 + "hreal_of_treal == %(x, y). SOME d. x = hreal_add y d"
10.192 +
10.193 +lemma hreal_of_treal: "ALL x y. hreal_of_treal (x, y) = (SOME d. x = hreal_add y d)"
10.194 + by (import realax hreal_of_treal)
10.195 +
10.196 +lemma TREAL_BIJ: "(ALL h. hreal_of_treal (treal_of_hreal h) = h) &
10.197 +(ALL r. treal_lt treal_0 r = treal_eq (treal_of_hreal (hreal_of_treal r)) r)"
10.198 + by (import realax TREAL_BIJ)
10.199 +
10.200 +lemma TREAL_ISO: "ALL h i. hreal_lt h i --> treal_lt (treal_of_hreal h) (treal_of_hreal i)"
10.201 + by (import realax TREAL_ISO)
10.202 +
10.203 +lemma TREAL_BIJ_WELLDEF: "ALL h i. treal_eq h i --> hreal_of_treal h = hreal_of_treal i"
10.204 + by (import realax TREAL_BIJ_WELLDEF)
10.205 +
10.206 +lemma TREAL_NEG_WELLDEF: "ALL x1 x2. treal_eq x1 x2 --> treal_eq (treal_neg x1) (treal_neg x2)"
10.207 + by (import realax TREAL_NEG_WELLDEF)
10.208 +
10.209 +lemma TREAL_ADD_WELLDEFR: "ALL x1 x2 y. treal_eq x1 x2 --> treal_eq (treal_add x1 y) (treal_add x2 y)"
10.210 + by (import realax TREAL_ADD_WELLDEFR)
10.211 +
10.212 +lemma TREAL_ADD_WELLDEF: "ALL x1 x2 y1 y2.
10.213 + treal_eq x1 x2 & treal_eq y1 y2 -->
10.214 + treal_eq (treal_add x1 y1) (treal_add x2 y2)"
10.215 + by (import realax TREAL_ADD_WELLDEF)
10.216 +
10.217 +lemma TREAL_MUL_WELLDEFR: "ALL x1 x2 y. treal_eq x1 x2 --> treal_eq (treal_mul x1 y) (treal_mul x2 y)"
10.218 + by (import realax TREAL_MUL_WELLDEFR)
10.219 +
10.220 +lemma TREAL_MUL_WELLDEF: "ALL x1 x2 y1 y2.
10.221 + treal_eq x1 x2 & treal_eq y1 y2 -->
10.222 + treal_eq (treal_mul x1 y1) (treal_mul x2 y2)"
10.223 + by (import realax TREAL_MUL_WELLDEF)
10.224 +
10.225 +lemma TREAL_LT_WELLDEFR: "ALL x1 x2 y. treal_eq x1 x2 --> treal_lt x1 y = treal_lt x2 y"
10.226 + by (import realax TREAL_LT_WELLDEFR)
10.227 +
10.228 +lemma TREAL_LT_WELLDEFL: "ALL x y1 y2. treal_eq y1 y2 --> treal_lt x y1 = treal_lt x y2"
10.229 + by (import realax TREAL_LT_WELLDEFL)
10.230 +
10.231 +lemma TREAL_LT_WELLDEF: "ALL x1 x2 y1 y2.
10.232 + treal_eq x1 x2 & treal_eq y1 y2 --> treal_lt x1 y1 = treal_lt x2 y2"
10.233 + by (import realax TREAL_LT_WELLDEF)
10.234 +
10.235 +lemma TREAL_INV_WELLDEF: "ALL x1 x2. treal_eq x1 x2 --> treal_eq (treal_inv x1) (treal_inv x2)"
10.236 + by (import realax TREAL_INV_WELLDEF)
10.237 +
10.238 +;end_setup
10.239 +
10.240 +;setup_theory real
10.241 +
10.242 +lemma REAL_0: "(0::real) = (0::real)"
10.243 + by (import real REAL_0)
10.244 +
10.245 +lemma REAL_1: "(1::real) = (1::real)"
10.246 + by (import real REAL_1)
10.247 +
10.248 +lemma REAL_ADD_LID_UNIQ: "ALL (x::real) y::real. (x + y = y) = (x = (0::real))"
10.249 + by (import real REAL_ADD_LID_UNIQ)
10.250 +
10.251 +lemma REAL_ADD_RID_UNIQ: "ALL (x::real) y::real. (x + y = x) = (y = (0::real))"
10.252 + by (import real REAL_ADD_RID_UNIQ)
10.253 +
10.254 +lemma REAL_LNEG_UNIQ: "ALL (x::real) y::real. (x + y = (0::real)) = (x = - y)"
10.255 + by (import real REAL_LNEG_UNIQ)
10.256 +
10.257 +lemma REAL_LT_ANTISYM: "ALL (x::real) y::real. ~ (x < y & y < x)"
10.258 + by (import real REAL_LT_ANTISYM)
10.259 +
10.260 +lemma REAL_LET_TOTAL: "ALL (x::real) y::real. x <= y | y < x"
10.261 + by (import real REAL_LET_TOTAL)
10.262 +
10.263 +lemma REAL_LTE_TOTAL: "ALL (x::real) y::real. x < y | y <= x"
10.264 + by (import real REAL_LTE_TOTAL)
10.265 +
10.266 +lemma REAL_LET_ANTISYM: "ALL (x::real) y::real. ~ (x < y & y <= x)"
10.267 + by (import real REAL_LET_ANTISYM)
10.268 +
10.269 +lemma REAL_LTE_ANTSYM: "ALL (x::real) y::real. ~ (x <= y & y < x)"
10.270 + by (import real REAL_LTE_ANTSYM)
10.271 +
10.272 +lemma REAL_LT_NEGTOTAL: "ALL x::real. x = (0::real) | (0::real) < x | (0::real) < - x"
10.273 + by (import real REAL_LT_NEGTOTAL)
10.274 +
10.275 +lemma REAL_LE_NEGTOTAL: "ALL x::real. (0::real) <= x | (0::real) <= - x"
10.276 + by (import real REAL_LE_NEGTOTAL)
10.277 +
10.278 +lemma REAL_LE_MUL: "ALL (x::real) y::real.
10.279 + (0::real) <= x & (0::real) <= y --> (0::real) <= x * y"
10.280 + by (import real REAL_LE_MUL)
10.281 +
10.282 +lemma REAL_LT_ADDNEG: "ALL (x::real) (y::real) z::real. (y < x + - z) = (y + z < x)"
10.283 + by (import real REAL_LT_ADDNEG)
10.284 +
10.285 +lemma REAL_LT_ADDNEG2: "ALL (x::real) (y::real) z::real. (x + - y < z) = (x < z + y)"
10.286 + by (import real REAL_LT_ADDNEG2)
10.287 +
10.288 +lemma REAL_LT_ADD1: "ALL (x::real) y::real. x <= y --> x < y + (1::real)"
10.289 + by (import real REAL_LT_ADD1)
10.290 +
10.291 +lemma REAL_LE_DOUBLE: "ALL x::real. ((0::real) <= x + x) = ((0::real) <= x)"
10.292 + by (import real REAL_LE_DOUBLE)
10.293 +
10.294 +lemma REAL_NEG_EQ: "ALL (x::real) y::real. (- x = y) = (x = - y)"
10.295 + by (import real REAL_NEG_EQ)
10.296 +
10.297 +lemma REAL_NEG_MINUS1: "ALL x::real. - x = - (1::real) * x"
10.298 + by (import real REAL_NEG_MINUS1)
10.299 +
10.300 +lemma REAL_LT_LMUL_0: "ALL (x::real) y::real.
10.301 + (0::real) < x --> ((0::real) < x * y) = ((0::real) < y)"
10.302 + by (import real REAL_LT_LMUL_0)
10.303 +
10.304 +lemma REAL_LT_RMUL_0: "ALL (x::real) y::real.
10.305 + (0::real) < y --> ((0::real) < x * y) = ((0::real) < x)"
10.306 + by (import real REAL_LT_RMUL_0)
10.307 +
10.308 +lemma REAL_LT_LMUL: "ALL (x::real) (y::real) z::real. (0::real) < x --> (x * y < x * z) = (y < z)"
10.309 + by (import real REAL_LT_LMUL)
10.310 +
10.311 +lemma REAL_LINV_UNIQ: "ALL (x::real) y::real. x * y = (1::real) --> x = inverse y"
10.312 + by (import real REAL_LINV_UNIQ)
10.313 +
10.314 +lemma REAL_LE_INV: "ALL x::real. (0::real) <= x --> (0::real) <= inverse x"
10.315 + by (import real REAL_LE_INV)
10.316 +
10.317 +lemma REAL_LE_ADDR: "ALL (x::real) y::real. (x <= x + y) = ((0::real) <= y)"
10.318 + by (import real REAL_LE_ADDR)
10.319 +
10.320 +lemma REAL_LE_ADDL: "ALL (x::real) y::real. (y <= x + y) = ((0::real) <= x)"
10.321 + by (import real REAL_LE_ADDL)
10.322 +
10.323 +lemma REAL_LT_ADDR: "ALL (x::real) y::real. (x < x + y) = ((0::real) < y)"
10.324 + by (import real REAL_LT_ADDR)
10.325 +
10.326 +lemma REAL_LT_ADDL: "ALL (x::real) y::real. (y < x + y) = ((0::real) < x)"
10.327 + by (import real REAL_LT_ADDL)
10.328 +
10.329 +lemma REAL_LT_NZ: "ALL n::nat. (real n ~= (0::real)) = ((0::real) < real n)"
10.330 + by (import real REAL_LT_NZ)
10.331 +
10.332 +lemma REAL_NZ_IMP_LT: "ALL n::nat. n ~= (0::nat) --> (0::real) < real n"
10.333 + by (import real REAL_NZ_IMP_LT)
10.334 +
10.335 +lemma REAL_LT_RDIV_0: "ALL (y::real) z::real.
10.336 + (0::real) < z --> ((0::real) < y / z) = ((0::real) < y)"
10.337 + by (import real REAL_LT_RDIV_0)
10.338 +
10.339 +lemma REAL_LT_RDIV: "ALL (x::real) (y::real) z::real. (0::real) < z --> (x / z < y / z) = (x < y)"
10.340 + by (import real REAL_LT_RDIV)
10.341 +
10.342 +lemma REAL_LT_FRACTION_0: "ALL (n::nat) d::real.
10.343 + n ~= (0::nat) --> ((0::real) < d / real n) = ((0::real) < d)"
10.344 + by (import real REAL_LT_FRACTION_0)
10.345 +
10.346 +lemma REAL_LT_MULTIPLE: "ALL (x::nat) xa::real.
10.347 + (1::nat) < x --> (xa < real x * xa) = ((0::real) < xa)"
10.348 + by (import real REAL_LT_MULTIPLE)
10.349 +
10.350 +lemma REAL_LT_FRACTION: "ALL (n::nat) d::real. (1::nat) < n --> (d / real n < d) = ((0::real) < d)"
10.351 + by (import real REAL_LT_FRACTION)
10.352 +
10.353 +lemma REAL_LT_HALF2: "ALL d::real. (d / (2::real) < d) = ((0::real) < d)"
10.354 + by (import real REAL_LT_HALF2)
10.355 +
10.356 +lemma REAL_DIV_LMUL: "ALL (x::real) y::real. y ~= (0::real) --> y * (x / y) = x"
10.357 + by (import real REAL_DIV_LMUL)
10.358 +
10.359 +lemma REAL_DIV_RMUL: "ALL (x::real) y::real. y ~= (0::real) --> x / y * y = x"
10.360 + by (import real REAL_DIV_RMUL)
10.361 +
10.362 +lemma REAL_DOWN: "ALL x::real. (0::real) < x --> (EX xa::real. (0::real) < xa & xa < x)"
10.363 + by (import real REAL_DOWN)
10.364 +
10.365 +lemma REAL_SUB_SUB: "ALL (x::real) y::real. x - y - x = - y"
10.366 + by (import real REAL_SUB_SUB)
10.367 +
10.368 +lemma REAL_ADD2_SUB2: "ALL (a::real) (b::real) (c::real) d::real. a + b - (c + d) = a - c + (b - d)"
10.369 + by (import real REAL_ADD2_SUB2)
10.370 +
10.371 +lemma REAL_LET_ADD: "ALL (x::real) y::real. (0::real) <= x & (0::real) < y --> (0::real) < x + y"
10.372 + by (import real REAL_LET_ADD)
10.373 +
10.374 +lemma REAL_LTE_ADD: "ALL (x::real) y::real. (0::real) < x & (0::real) <= y --> (0::real) < x + y"
10.375 + by (import real REAL_LTE_ADD)
10.376 +
10.377 +lemma REAL_SUB_LNEG: "ALL (x::real) y::real. - x - y = - (x + y)"
10.378 + by (import real REAL_SUB_LNEG)
10.379 +
10.380 +lemma REAL_SUB_NEG2: "ALL (x::real) y::real. - x - - y = y - x"
10.381 + by (import real REAL_SUB_NEG2)
10.382 +
10.383 +lemma REAL_SUB_TRIANGLE: "ALL (a::real) (b::real) c::real. a - b + (b - c) = a - c"
10.384 + by (import real REAL_SUB_TRIANGLE)
10.385 +
10.386 +lemma REAL_INV_MUL: "ALL (x::real) y::real.
10.387 + x ~= (0::real) & y ~= (0::real) -->
10.388 + inverse (x * y) = inverse x * inverse y"
10.389 + by (import real REAL_INV_MUL)
10.390 +
10.391 +lemma REAL_SUB_INV2: "ALL (x::real) y::real.
10.392 + x ~= (0::real) & y ~= (0::real) -->
10.393 + inverse x - inverse y = (y - x) / (x * y)"
10.394 + by (import real REAL_SUB_INV2)
10.395 +
10.396 +lemma REAL_SUB_SUB2: "ALL (x::real) y::real. x - (x - y) = y"
10.397 + by (import real REAL_SUB_SUB2)
10.398 +
10.399 +lemma REAL_ADD_SUB2: "ALL (x::real) y::real. x - (x + y) = - y"
10.400 + by (import real REAL_ADD_SUB2)
10.401 +
10.402 +lemma REAL_LE_MUL2: "ALL (x1::real) (x2::real) (y1::real) y2::real.
10.403 + (0::real) <= x1 & (0::real) <= y1 & x1 <= x2 & y1 <= y2 -->
10.404 + x1 * y1 <= x2 * y2"
10.405 + by (import real REAL_LE_MUL2)
10.406 +
10.407 +lemma REAL_LE_LDIV: "ALL (x::real) (y::real) z::real. (0::real) < x & y <= z * x --> y / x <= z"
10.408 + by (import real REAL_LE_LDIV)
10.409 +
10.410 +lemma REAL_LE_RDIV: "ALL (x::real) (y::real) z::real. (0::real) < x & y * x <= z --> y <= z / x"
10.411 + by (import real REAL_LE_RDIV)
10.412 +
10.413 +lemma REAL_LT_DIV: "ALL (x::real) xa::real.
10.414 + (0::real) < x & (0::real) < xa --> (0::real) < x / xa"
10.415 + by (import real REAL_LT_DIV)
10.416 +
10.417 +lemma REAL_LE_DIV: "ALL (x::real) xa::real.
10.418 + (0::real) <= x & (0::real) <= xa --> (0::real) <= x / xa"
10.419 + by (import real REAL_LE_DIV)
10.420 +
10.421 +lemma REAL_LT_1: "ALL (x::real) y::real. (0::real) <= x & x < y --> x / y < (1::real)"
10.422 + by (import real REAL_LT_1)
10.423 +
10.424 +lemma REAL_POS_NZ: "ALL x::real. (0::real) < x --> x ~= (0::real)"
10.425 + by (import real REAL_POS_NZ)
10.426 +
10.427 +lemma REAL_EQ_LMUL_IMP: "ALL (x::real) (xa::real) xb::real.
10.428 + x ~= (0::real) & x * xa = x * xb --> xa = xb"
10.429 + by (import real REAL_EQ_LMUL_IMP)
10.430 +
10.431 +lemma REAL_FACT_NZ: "ALL n. real (FACT n) ~= 0"
10.432 + by (import real REAL_FACT_NZ)
10.433 +
10.434 +lemma REAL_DIFFSQ: "ALL (x::real) y::real. (x + y) * (x - y) = x * x - y * y"
10.435 + by (import real REAL_DIFFSQ)
10.436 +
10.437 +lemma REAL_POASQ: "ALL x::real. ((0::real) < x * x) = (x ~= (0::real))"
10.438 + by (import real REAL_POASQ)
10.439 +
10.440 +lemma REAL_SUMSQ: "ALL (x::real) y::real.
10.441 + (x * x + y * y = (0::real)) = (x = (0::real) & y = (0::real))"
10.442 + by (import real REAL_SUMSQ)
10.443 +
10.444 +lemma REAL_MIDDLE1: "ALL (a::real) b::real. a <= b --> a <= (a + b) / (2::real)"
10.445 + by (import real REAL_MIDDLE1)
10.446 +
10.447 +lemma REAL_MIDDLE2: "ALL (a::real) b::real. a <= b --> (a + b) / (2::real) <= b"
10.448 + by (import real REAL_MIDDLE2)
10.449 +
10.450 +lemma ABS_LT_MUL2: "ALL (w::real) (x::real) (y::real) z::real.
10.451 + abs w < y & abs x < z --> abs (w * x) < y * z"
10.452 + by (import real ABS_LT_MUL2)
10.453 +
10.454 +lemma ABS_SUB: "ALL (x::real) y::real. abs (x - y) = abs (y - x)"
10.455 + by (import real ABS_SUB)
10.456 +
10.457 +lemma ABS_REFL: "ALL x::real. (abs x = x) = ((0::real) <= x)"
10.458 + by (import real ABS_REFL)
10.459 +
10.460 +lemma ABS_BETWEEN: "ALL (x::real) (y::real) d::real.
10.461 + ((0::real) < d & x - d < y & y < x + d) = (abs (y - x) < d)"
10.462 + by (import real ABS_BETWEEN)
10.463 +
10.464 +lemma ABS_BOUND: "ALL (x::real) (y::real) d::real. abs (x - y) < d --> y < x + d"
10.465 + by (import real ABS_BOUND)
10.466 +
10.467 +lemma ABS_STILLNZ: "ALL (x::real) y::real. abs (x - y) < abs y --> x ~= (0::real)"
10.468 + by (import real ABS_STILLNZ)
10.469 +
10.470 +lemma ABS_CASES: "ALL x::real. x = (0::real) | (0::real) < abs x"
10.471 + by (import real ABS_CASES)
10.472 +
10.473 +lemma ABS_BETWEEN1: "ALL (x::real) (y::real) z::real. x < z & abs (y - x) < z - x --> y < z"
10.474 + by (import real ABS_BETWEEN1)
10.475 +
10.476 +lemma ABS_SIGN: "ALL (x::real) y::real. abs (x - y) < y --> (0::real) < x"
10.477 + by (import real ABS_SIGN)
10.478 +
10.479 +lemma ABS_SIGN2: "ALL (x::real) y::real. abs (x - y) < - y --> x < (0::real)"
10.480 + by (import real ABS_SIGN2)
10.481 +
10.482 +lemma ABS_CIRCLE: "ALL (x::real) (y::real) h::real.
10.483 + abs h < abs y - abs x --> abs (x + h) < abs y"
10.484 + by (import real ABS_CIRCLE)
10.485 +
10.486 +lemma REAL_SUB_ABS: "ALL (x::real) y::real. abs x - abs y <= abs (x - y)"
10.487 + by (import real REAL_SUB_ABS)
10.488 +
10.489 +lemma ABS_SUB_ABS: "ALL (x::real) y::real. abs (abs x - abs y) <= abs (x - y)"
10.490 + by (import real ABS_SUB_ABS)
10.491 +
10.492 +lemma ABS_BETWEEN2: "ALL (x0::real) (x::real) (y0::real) y::real.
10.493 + x0 < y0 &
10.494 + abs (x - x0) < (y0 - x0) / (2::real) &
10.495 + abs (y - y0) < (y0 - x0) / (2::real) -->
10.496 + x < y"
10.497 + by (import real ABS_BETWEEN2)
10.498 +
10.499 +lemma POW_PLUS1: "ALL e. 0 < e --> (ALL n. 1 + real n * e <= (1 + e) ^ n)"
10.500 + by (import real POW_PLUS1)
10.501 +
10.502 +lemma POW_M1: "ALL n::nat. abs ((- (1::real)) ^ n) = (1::real)"
10.503 + by (import real POW_M1)
10.504 +
10.505 +lemma REAL_LE1_POW2: "ALL x::real. (1::real) <= x --> (1::real) <= x ^ 2"
10.506 + by (import real REAL_LE1_POW2)
10.507 +
10.508 +lemma REAL_LT1_POW2: "ALL x::real. (1::real) < x --> (1::real) < x ^ 2"
10.509 + by (import real REAL_LT1_POW2)
10.510 +
10.511 +lemma POW_POS_LT: "ALL (x::real) n::nat. (0::real) < x --> (0::real) < x ^ Suc n"
10.512 + by (import real POW_POS_LT)
10.513 +
10.514 +lemma POW_LT: "ALL (n::nat) (x::real) y::real.
10.515 + (0::real) <= x & x < y --> x ^ Suc n < y ^ Suc n"
10.516 + by (import real POW_LT)
10.517 +
10.518 +lemma POW_ZERO_EQ: "ALL (n::nat) x::real. (x ^ Suc n = (0::real)) = (x = (0::real))"
10.519 + by (import real POW_ZERO_EQ)
10.520 +
10.521 +lemma REAL_POW_LT2: "ALL (n::nat) (x::real) y::real.
10.522 + n ~= (0::nat) & (0::real) <= x & x < y --> x ^ n < y ^ n"
10.523 + by (import real REAL_POW_LT2)
10.524 +
10.525 +lemma REAL_SUP_SOMEPOS: "ALL P::real => bool.
10.526 + (EX x::real. P x & (0::real) < x) &
10.527 + (EX z::real. ALL x::real. P x --> x < z) -->
10.528 + (EX s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s))"
10.529 + by (import real REAL_SUP_SOMEPOS)
10.530 +
10.531 +lemma SUP_LEMMA1: "ALL (P::real => bool) (s::real) d::real.
10.532 + (ALL y::real. (EX x::real. P (x + d) & y < x) = (y < s)) -->
10.533 + (ALL y::real. (EX x::real. P x & y < x) = (y < s + d))"
10.534 + by (import real SUP_LEMMA1)
10.535 +
10.536 +lemma SUP_LEMMA2: "ALL P::real => bool.
10.537 + Ex P --> (EX (d::real) x::real. P (x + d) & (0::real) < x)"
10.538 + by (import real SUP_LEMMA2)
10.539 +
10.540 +lemma SUP_LEMMA3: "ALL d::real.
10.541 + (EX z::real. ALL x::real. (P::real => bool) x --> x < z) -->
10.542 + (EX x::real. ALL xa::real. P (xa + d) --> xa < x)"
10.543 + by (import real SUP_LEMMA3)
10.544 +
10.545 +lemma REAL_SUP_EXISTS: "ALL P::real => bool.
10.546 + Ex P & (EX z::real. ALL x::real. P x --> x < z) -->
10.547 + (EX x::real. ALL y::real. (EX x::real. P x & y < x) = (y < x))"
10.548 + by (import real REAL_SUP_EXISTS)
10.549 +
10.550 +constdefs
10.551 + sup :: "(real => bool) => real"
10.552 + "sup == %P. SOME s. ALL y. (EX x. P x & y < x) = (y < s)"
10.553 +
10.554 +lemma sup: "ALL P. sup P = (SOME s. ALL y. (EX x. P x & y < x) = (y < s))"
10.555 + by (import real sup)
10.556 +
10.557 +lemma REAL_SUP: "ALL P.
10.558 + Ex P & (EX z. ALL x. P x --> x < z) -->
10.559 + (ALL y. (EX x. P x & y < x) = (y < sup P))"
10.560 + by (import real REAL_SUP)
10.561 +
10.562 +lemma REAL_SUP_UBOUND: "ALL P. Ex P & (EX z. ALL x. P x --> x < z) --> (ALL y. P y --> y <= sup P)"
10.563 + by (import real REAL_SUP_UBOUND)
10.564 +
10.565 +lemma SETOK_LE_LT: "ALL P::real => bool.
10.566 + (Ex P & (EX z::real. ALL x::real. P x --> x <= z)) =
10.567 + (Ex P & (EX z::real. ALL x::real. P x --> x < z))"
10.568 + by (import real SETOK_LE_LT)
10.569 +
10.570 +lemma REAL_SUP_LE: "ALL P.
10.571 + Ex P & (EX z. ALL x. P x --> x <= z) -->
10.572 + (ALL y. (EX x. P x & y < x) = (y < sup P))"
10.573 + by (import real REAL_SUP_LE)
10.574 +
10.575 +lemma REAL_SUP_UBOUND_LE: "ALL P. Ex P & (EX z. ALL x. P x --> x <= z) --> (ALL y. P y --> y <= sup P)"
10.576 + by (import real REAL_SUP_UBOUND_LE)
10.577 +
10.578 +lemma REAL_ARCH_LEAST: "ALL y.
10.579 + 0 < y -->
10.580 + (ALL x. 0 <= x --> (EX n. real n * y <= x & x < real (Suc n) * y))"
10.581 + by (import real REAL_ARCH_LEAST)
10.582 +
10.583 +consts
10.584 + sumc :: "nat => nat => (nat => real) => real"
10.585 +
10.586 +specification (sumc) sumc: "(ALL n f. sumc n 0 f = 0) &
10.587 +(ALL n m f. sumc n (Suc m) f = sumc n m f + f (n + m))"
10.588 + by (import real sumc)
10.589 +
10.590 +constdefs
10.591 + sum :: "nat * nat => (nat => real) => real"
10.592 + "real.sum == split sumc"
10.593 +
10.594 +lemma SUM_DEF: "ALL m n f. real.sum (m, n) f = sumc m n f"
10.595 + by (import real SUM_DEF)
10.596 +
10.597 +lemma sum: "ALL x xa xb.
10.598 + real.sum (xa, 0) x = 0 &
10.599 + real.sum (xa, Suc xb) x = real.sum (xa, xb) x + x (xa + xb)"
10.600 + by (import real sum)
10.601 +
10.602 +lemma SUM_TWO: "ALL f n p. real.sum (0, n) f + real.sum (n, p) f = real.sum (0, n + p) f"
10.603 + by (import real SUM_TWO)
10.604 +
10.605 +lemma SUM_DIFF: "ALL f m n. real.sum (m, n) f = real.sum (0, m + n) f - real.sum (0, m) f"
10.606 + by (import real SUM_DIFF)
10.607 +
10.608 +lemma ABS_SUM: "ALL f m n. abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
10.609 + by (import real ABS_SUM)
10.610 +
10.611 +lemma SUM_LE: "ALL f g m n.
10.612 + (ALL r. m <= r & r < n + m --> f r <= g r) -->
10.613 + real.sum (m, n) f <= real.sum (m, n) g"
10.614 + by (import real SUM_LE)
10.615 +
10.616 +lemma SUM_EQ: "ALL f g m n.
10.617 + (ALL r. m <= r & r < n + m --> f r = g r) -->
10.618 + real.sum (m, n) f = real.sum (m, n) g"
10.619 + by (import real SUM_EQ)
10.620 +
10.621 +lemma SUM_POS: "ALL f. (ALL n. 0 <= f n) --> (ALL m n. 0 <= real.sum (m, n) f)"
10.622 + by (import real SUM_POS)
10.623 +
10.624 +lemma SUM_POS_GEN: "ALL f m. (ALL n. m <= n --> 0 <= f n) --> (ALL n. 0 <= real.sum (m, n) f)"
10.625 + by (import real SUM_POS_GEN)
10.626 +
10.627 +lemma SUM_ABS: "ALL f m x.
10.628 + abs (real.sum (m, x) (%m. abs (f m))) = real.sum (m, x) (%m. abs (f m))"
10.629 + by (import real SUM_ABS)
10.630 +
10.631 +lemma SUM_ABS_LE: "ALL f m n. abs (real.sum (m, n) f) <= real.sum (m, n) (%n. abs (f n))"
10.632 + by (import real SUM_ABS_LE)
10.633 +
10.634 +lemma SUM_ZERO: "ALL f N.
10.635 + (ALL n. N <= n --> f n = 0) -->
10.636 + (ALL m n. N <= m --> real.sum (m, n) f = 0)"
10.637 + by (import real SUM_ZERO)
10.638 +
10.639 +lemma SUM_ADD: "ALL f g m n.
10.640 + real.sum (m, n) (%n. f n + g n) = real.sum (m, n) f + real.sum (m, n) g"
10.641 + by (import real SUM_ADD)
10.642 +
10.643 +lemma SUM_CMUL: "ALL f c m n. real.sum (m, n) (%n. c * f n) = c * real.sum (m, n) f"
10.644 + by (import real SUM_CMUL)
10.645 +
10.646 +lemma SUM_NEG: "ALL f n d. real.sum (n, d) (%n. - f n) = - real.sum (n, d) f"
10.647 + by (import real SUM_NEG)
10.648 +
10.649 +lemma SUM_SUB: "ALL f g m n.
10.650 + real.sum (m, n) (%x. f x - g x) = real.sum (m, n) f - real.sum (m, n) g"
10.651 + by (import real SUM_SUB)
10.652 +
10.653 +lemma SUM_SUBST: "ALL f g m n.
10.654 + (ALL p. m <= p & p < m + n --> f p = g p) -->
10.655 + real.sum (m, n) f = real.sum (m, n) g"
10.656 + by (import real SUM_SUBST)
10.657 +
10.658 +lemma SUM_NSUB: "ALL n f c. real.sum (0, n) f - real n * c = real.sum (0, n) (%p. f p - c)"
10.659 + by (import real SUM_NSUB)
10.660 +
10.661 +lemma SUM_BOUND: "ALL f k m n.
10.662 + (ALL p. m <= p & p < m + n --> f p <= k) -->
10.663 + real.sum (m, n) f <= real n * k"
10.664 + by (import real SUM_BOUND)
10.665 +
10.666 +lemma SUM_GROUP: "ALL n k f.
10.667 + real.sum (0, n) (%m. real.sum (m * k, k) f) = real.sum (0, n * k) f"
10.668 + by (import real SUM_GROUP)
10.669 +
10.670 +lemma SUM_1: "ALL f n. real.sum (n, 1) f = f n"
10.671 + by (import real SUM_1)
10.672 +
10.673 +lemma SUM_2: "ALL f n. real.sum (n, 2) f = f n + f (n + 1)"
10.674 + by (import real SUM_2)
10.675 +
10.676 +lemma SUM_OFFSET: "ALL f n k.
10.677 + real.sum (0, n) (%m. f (m + k)) =
10.678 + real.sum (0, n + k) f - real.sum (0, k) f"
10.679 + by (import real SUM_OFFSET)
10.680 +
10.681 +lemma SUM_REINDEX: "ALL f m k n. real.sum (m + k, n) f = real.sum (m, n) (%r. f (r + k))"
10.682 + by (import real SUM_REINDEX)
10.683 +
10.684 +lemma SUM_0: "ALL m n. real.sum (m, n) (%r. 0) = 0"
10.685 + by (import real SUM_0)
10.686 +
10.687 +lemma SUM_PERMUTE_0: "ALL n p.
10.688 + (ALL y<n. EX! x. x < n & p x = y) -->
10.689 + (ALL f. real.sum (0, n) (%n. f (p n)) = real.sum (0, n) f)"
10.690 + by (import real SUM_PERMUTE_0)
10.691 +
10.692 +lemma SUM_CANCEL: "ALL f n d. real.sum (n, d) (%n. f (Suc n) - f n) = f (n + d) - f n"
10.693 + by (import real SUM_CANCEL)
10.694 +
10.695 +lemma REAL_LE_RNEG: "ALL (x::real) y::real. (x <= - y) = (x + y <= (0::real))"
10.696 + by (import real REAL_LE_RNEG)
10.697 +
10.698 +lemma REAL_EQ_RDIV_EQ: "ALL (x::real) (xa::real) xb::real.
10.699 + (0::real) < xb --> (x = xa / xb) = (x * xb = xa)"
10.700 + by (import real REAL_EQ_RDIV_EQ)
10.701 +
10.702 +lemma REAL_EQ_LDIV_EQ: "ALL (x::real) (xa::real) xb::real.
10.703 + (0::real) < xb --> (x / xb = xa) = (x = xa * xb)"
10.704 + by (import real REAL_EQ_LDIV_EQ)
10.705 +
10.706 +;end_setup
10.707 +
10.708 +;setup_theory topology
10.709 +
10.710 +constdefs
10.711 + re_Union :: "(('a => bool) => bool) => 'a => bool"
10.712 + "re_Union == %P x. EX s. P s & s x"
10.713 +
10.714 +lemma re_Union: "ALL P. re_Union P = (%x. EX s. P s & s x)"
10.715 + by (import topology re_Union)
10.716 +
10.717 +constdefs
10.718 + re_union :: "('a => bool) => ('a => bool) => 'a => bool"
10.719 + "re_union == %P Q x. P x | Q x"
10.720 +
10.721 +lemma re_union: "ALL P Q. re_union P Q = (%x. P x | Q x)"
10.722 + by (import topology re_union)
10.723 +
10.724 +constdefs
10.725 + re_intersect :: "('a => bool) => ('a => bool) => 'a => bool"
10.726 + "re_intersect == %P Q x. P x & Q x"
10.727 +
10.728 +lemma re_intersect: "ALL P Q. re_intersect P Q = (%x. P x & Q x)"
10.729 + by (import topology re_intersect)
10.730 +
10.731 +constdefs
10.732 + re_null :: "'a => bool"
10.733 + "re_null == %x. False"
10.734 +
10.735 +lemma re_null: "re_null = (%x. False)"
10.736 + by (import topology re_null)
10.737 +
10.738 +constdefs
10.739 + re_universe :: "'a => bool"
10.740 + "re_universe == %x. True"
10.741 +
10.742 +lemma re_universe: "re_universe = (%x. True)"
10.743 + by (import topology re_universe)
10.744 +
10.745 +constdefs
10.746 + re_subset :: "('a => bool) => ('a => bool) => bool"
10.747 + "re_subset == %P Q. ALL x. P x --> Q x"
10.748 +
10.749 +lemma re_subset: "ALL P Q. re_subset P Q = (ALL x. P x --> Q x)"
10.750 + by (import topology re_subset)
10.751 +
10.752 +constdefs
10.753 + re_compl :: "('a => bool) => 'a => bool"
10.754 + "re_compl == %P x. ~ P x"
10.755 +
10.756 +lemma re_compl: "ALL P. re_compl P = (%x. ~ P x)"
10.757 + by (import topology re_compl)
10.758 +
10.759 +lemma SUBSET_REFL: "ALL P. re_subset P P"
10.760 + by (import topology SUBSET_REFL)
10.761 +
10.762 +lemma COMPL_MEM: "ALL P x. P x = (~ re_compl P x)"
10.763 + by (import topology COMPL_MEM)
10.764 +
10.765 +lemma SUBSET_ANTISYM: "ALL P Q. (re_subset P Q & re_subset Q P) = (P = Q)"
10.766 + by (import topology SUBSET_ANTISYM)
10.767 +
10.768 +lemma SUBSET_TRANS: "ALL P Q R. re_subset P Q & re_subset Q R --> re_subset P R"
10.769 + by (import topology SUBSET_TRANS)
10.770 +
10.771 +constdefs
10.772 + istopology :: "(('a => bool) => bool) => bool"
10.773 + "istopology ==
10.774 +%L. L re_null &
10.775 + L re_universe &
10.776 + (ALL a b. L a & L b --> L (re_intersect a b)) &
10.777 + (ALL P. re_subset P L --> L (re_Union P))"
10.778 +
10.779 +lemma istopology: "ALL L.
10.780 + istopology L =
10.781 + (L re_null &
10.782 + L re_universe &
10.783 + (ALL a b. L a & L b --> L (re_intersect a b)) &
10.784 + (ALL P. re_subset P L --> L (re_Union P)))"
10.785 + by (import topology istopology)
10.786 +
10.787 +typedef (open) ('a) topology = "(Collect::((('a => bool) => bool) => bool) => (('a => bool) => bool) set)
10.788 + (istopology::(('a => bool) => bool) => bool)"
10.789 + by (rule typedef_helper,import topology topology_TY_DEF)
10.790 +
10.791 +lemmas topology_TY_DEF = typedef_hol2hol4 [OF type_definition_topology]
10.792 +
10.793 +consts
10.794 + topology :: "(('a => bool) => bool) => 'a topology"
10.795 + "open" :: "'a topology => ('a => bool) => bool"
10.796 +
10.797 +specification ("open" topology) topology_tybij: "(ALL a::'a topology. topology (open a) = a) &
10.798 +(ALL r::('a => bool) => bool. istopology r = (open (topology r) = r))"
10.799 + by (import topology topology_tybij)
10.800 +
10.801 +lemma TOPOLOGY: "ALL L.
10.802 + open L re_null &
10.803 + open L re_universe &
10.804 + (ALL a b. open L a & open L b --> open L (re_intersect a b)) &
10.805 + (ALL P. re_subset P (open L) --> open L (re_Union P))"
10.806 + by (import topology TOPOLOGY)
10.807 +
10.808 +lemma TOPOLOGY_UNION: "ALL x xa. re_subset xa (open x) --> open x (re_Union xa)"
10.809 + by (import topology TOPOLOGY_UNION)
10.810 +
10.811 +constdefs
10.812 + neigh :: "'a topology => ('a => bool) * 'a => bool"
10.813 + "neigh == %top (N, x). EX P. open top P & re_subset P N & P x"
10.814 +
10.815 +lemma neigh: "ALL top N x. neigh top (N, x) = (EX P. open top P & re_subset P N & P x)"
10.816 + by (import topology neigh)
10.817 +
10.818 +lemma OPEN_OWN_NEIGH: "ALL S' top x. open top S' & S' x --> neigh top (S', x)"
10.819 + by (import topology OPEN_OWN_NEIGH)
10.820 +
10.821 +lemma OPEN_UNOPEN: "ALL S' top. open top S' = (re_Union (%P. open top P & re_subset P S') = S')"
10.822 + by (import topology OPEN_UNOPEN)
10.823 +
10.824 +lemma OPEN_SUBOPEN: "ALL S' top.
10.825 + open top S' = (ALL x. S' x --> (EX P. P x & open top P & re_subset P S'))"
10.826 + by (import topology OPEN_SUBOPEN)
10.827 +
10.828 +lemma OPEN_NEIGH: "ALL S' top.
10.829 + open top S' = (ALL x. S' x --> (EX N. neigh top (N, x) & re_subset N S'))"
10.830 + by (import topology OPEN_NEIGH)
10.831 +
10.832 +constdefs
10.833 + closed :: "'a topology => ('a => bool) => bool"
10.834 + "closed == %L S'. open L (re_compl S')"
10.835 +
10.836 +lemma closed: "ALL L S'. closed L S' = open L (re_compl S')"
10.837 + by (import topology closed)
10.838 +
10.839 +constdefs
10.840 + limpt :: "'a topology => 'a => ('a => bool) => bool"
10.841 + "limpt == %top x S'. ALL N. neigh top (N, x) --> (EX y. x ~= y & S' y & N y)"
10.842 +
10.843 +lemma limpt: "ALL top x S'.
10.844 + limpt top x S' =
10.845 + (ALL N. neigh top (N, x) --> (EX y. x ~= y & S' y & N y))"
10.846 + by (import topology limpt)
10.847 +
10.848 +lemma CLOSED_LIMPT: "ALL top S'. closed top S' = (ALL x. limpt top x S' --> S' x)"
10.849 + by (import topology CLOSED_LIMPT)
10.850 +
10.851 +constdefs
10.852 + ismet :: "('a * 'a => real) => bool"
10.853 + "ismet ==
10.854 +%m. (ALL x y. (m (x, y) = 0) = (x = y)) &
10.855 + (ALL x y z. m (y, z) <= m (x, y) + m (x, z))"
10.856 +
10.857 +lemma ismet: "ALL m.
10.858 + ismet m =
10.859 + ((ALL x y. (m (x, y) = 0) = (x = y)) &
10.860 + (ALL x y z. m (y, z) <= m (x, y) + m (x, z)))"
10.861 + by (import topology ismet)
10.862 +
10.863 +typedef (open) ('a) metric = "(Collect::(('a * 'a => real) => bool) => ('a * 'a => real) set)
10.864 + (ismet::('a * 'a => real) => bool)"
10.865 + by (rule typedef_helper,import topology metric_TY_DEF)
10.866 +
10.867 +lemmas metric_TY_DEF = typedef_hol2hol4 [OF type_definition_metric]
10.868 +
10.869 +consts
10.870 + metric :: "('a * 'a => real) => 'a metric"
10.871 + dist :: "'a metric => 'a * 'a => real"
10.872 +
10.873 +specification (dist metric) metric_tybij: "(ALL a::'a metric. metric (dist a) = a) &
10.874 +(ALL r::'a * 'a => real. ismet r = (dist (metric r) = r))"
10.875 + by (import topology metric_tybij)
10.876 +
10.877 +lemma METRIC_ISMET: "ALL m. ismet (dist m)"
10.878 + by (import topology METRIC_ISMET)
10.879 +
10.880 +lemma METRIC_ZERO: "ALL m x y. (dist m (x, y) = 0) = (x = y)"
10.881 + by (import topology METRIC_ZERO)
10.882 +
10.883 +lemma METRIC_SAME: "ALL m x. dist m (x, x) = 0"
10.884 + by (import topology METRIC_SAME)
10.885 +
10.886 +lemma METRIC_POS: "ALL m x y. 0 <= dist m (x, y)"
10.887 + by (import topology METRIC_POS)
10.888 +
10.889 +lemma METRIC_SYM: "ALL m x y. dist m (x, y) = dist m (y, x)"
10.890 + by (import topology METRIC_SYM)
10.891 +
10.892 +lemma METRIC_TRIANGLE: "ALL m x y z. dist m (x, z) <= dist m (x, y) + dist m (y, z)"
10.893 + by (import topology METRIC_TRIANGLE)
10.894 +
10.895 +lemma METRIC_NZ: "ALL m x y. x ~= y --> 0 < dist m (x, y)"
10.896 + by (import topology METRIC_NZ)
10.897 +
10.898 +constdefs
10.899 + mtop :: "'a metric => 'a topology"
10.900 + "mtop ==
10.901 +%m. topology
10.902 + (%S'. ALL x.
10.903 + S' x --> (EX e. 0 < e & (ALL y. dist m (x, y) < e --> S' y)))"
10.904 +
10.905 +lemma mtop: "ALL m.
10.906 + mtop m =
10.907 + topology
10.908 + (%S'. ALL x.
10.909 + S' x --> (EX e. 0 < e & (ALL y. dist m (x, y) < e --> S' y)))"
10.910 + by (import topology mtop)
10.911 +
10.912 +lemma mtop_istopology: "ALL m.
10.913 + istopology
10.914 + (%S'. ALL x.
10.915 + S' x --> (EX e. 0 < e & (ALL y. dist m (x, y) < e --> S' y)))"
10.916 + by (import topology mtop_istopology)
10.917 +
10.918 +lemma MTOP_OPEN: "ALL S' x.
10.919 + open (mtop x) S' =
10.920 + (ALL xa. S' xa --> (EX e. 0 < e & (ALL y. dist x (xa, y) < e --> S' y)))"
10.921 + by (import topology MTOP_OPEN)
10.922 +
10.923 +constdefs
10.924 + B :: "'a metric => 'a * real => 'a => bool"
10.925 + "B == %m (x, e) y. dist m (x, y) < e"
10.926 +
10.927 +lemma ball: "ALL m x e. B m (x, e) = (%y. dist m (x, y) < e)"
10.928 + by (import topology ball)
10.929 +
10.930 +lemma BALL_OPEN: "ALL m x e. 0 < e --> open (mtop m) (B m (x, e))"
10.931 + by (import topology BALL_OPEN)
10.932 +
10.933 +lemma BALL_NEIGH: "ALL m x e. 0 < e --> neigh (mtop m) (B m (x, e), x)"
10.934 + by (import topology BALL_NEIGH)
10.935 +
10.936 +lemma MTOP_LIMPT: "ALL m x S'.
10.937 + limpt (mtop m) x S' =
10.938 + (ALL e. 0 < e --> (EX y. x ~= y & S' y & dist m (x, y) < e))"
10.939 + by (import topology MTOP_LIMPT)
10.940 +
10.941 +lemma ISMET_R1: "ismet (%(x, y). abs (y - x))"
10.942 + by (import topology ISMET_R1)
10.943 +
10.944 +constdefs
10.945 + mr1 :: "real metric"
10.946 + "mr1 == metric (%(x, y). abs (y - x))"
10.947 +
10.948 +lemma mr1: "mr1 = metric (%(x, y). abs (y - x))"
10.949 + by (import topology mr1)
10.950 +
10.951 +lemma MR1_DEF: "ALL x y. dist mr1 (x, y) = abs (y - x)"
10.952 + by (import topology MR1_DEF)
10.953 +
10.954 +lemma MR1_ADD: "ALL x d. dist mr1 (x, x + d) = abs d"
10.955 + by (import topology MR1_ADD)
10.956 +
10.957 +lemma MR1_SUB: "ALL x d. dist mr1 (x, x - d) = abs d"
10.958 + by (import topology MR1_SUB)
10.959 +
10.960 +lemma MR1_ADD_POS: "ALL x d. 0 <= d --> dist mr1 (x, x + d) = d"
10.961 + by (import topology MR1_ADD_POS)
10.962 +
10.963 +lemma MR1_SUB_LE: "ALL x d. 0 <= d --> dist mr1 (x, x - d) = d"
10.964 + by (import topology MR1_SUB_LE)
10.965 +
10.966 +lemma MR1_ADD_LT: "ALL x d. 0 < d --> dist mr1 (x, x + d) = d"
10.967 + by (import topology MR1_ADD_LT)
10.968 +
10.969 +lemma MR1_SUB_LT: "ALL x d. 0 < d --> dist mr1 (x, x - d) = d"
10.970 + by (import topology MR1_SUB_LT)
10.971 +
10.972 +lemma MR1_BETWEEN1: "ALL x y z. x < z & dist mr1 (x, y) < z - x --> y < z"
10.973 + by (import topology MR1_BETWEEN1)
10.974 +
10.975 +lemma MR1_LIMPT: "ALL x. limpt (mtop mr1) x re_universe"
10.976 + by (import topology MR1_LIMPT)
10.977 +
10.978 +;end_setup
10.979 +
10.980 +;setup_theory nets
10.981 +
10.982 +constdefs
10.983 + dorder :: "('a => 'a => bool) => bool"
10.984 + "dorder ==
10.985 +%g. ALL x y.
10.986 + g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y))"
10.987 +
10.988 +lemma dorder: "ALL g.
10.989 + dorder g =
10.990 + (ALL x y.
10.991 + g x x & g y y --> (EX z. g z z & (ALL w. g w z --> g w x & g w y)))"
10.992 + by (import nets dorder)
10.993 +
10.994 +constdefs
10.995 + tends :: "('b => 'a) => 'a => 'a topology * ('b => 'b => bool) => bool"
10.996 + "tends ==
10.997 +%(s::'b => 'a) (l::'a) (top::'a topology, g::'b => 'b => bool).
10.998 + ALL N::'a => bool.
10.999 + neigh top (N, l) -->
10.1000 + (EX n::'b. g n n & (ALL m::'b. g m n --> N (s m)))"
10.1001 +
10.1002 +lemma tends: "ALL (s::'b => 'a) (l::'a) (top::'a topology) g::'b => 'b => bool.
10.1003 + tends s l (top, g) =
10.1004 + (ALL N::'a => bool.
10.1005 + neigh top (N, l) -->
10.1006 + (EX n::'b. g n n & (ALL m::'b. g m n --> N (s m))))"
10.1007 + by (import nets tends)
10.1008 +
10.1009 +constdefs
10.1010 + bounded :: "'a metric * ('b => 'b => bool) => ('b => 'a) => bool"
10.1011 + "bounded ==
10.1012 +%(m, g) f. EX k x N. g N N & (ALL n. g n N --> dist m (f n, x) < k)"
10.1013 +
10.1014 +lemma bounded: "ALL m g f.
10.1015 + bounded (m, g) f =
10.1016 + (EX k x N. g N N & (ALL n. g n N --> dist m (f n, x) < k))"
10.1017 + by (import nets bounded)
10.1018 +
10.1019 +constdefs
10.1020 + tendsto :: "'a metric * 'a => 'a => 'a => bool"
10.1021 + "tendsto == %(m, x) y z. 0 < dist m (x, y) & dist m (x, y) <= dist m (x, z)"
10.1022 +
10.1023 +lemma tendsto: "ALL m x y z.
10.1024 + tendsto (m, x) y z = (0 < dist m (x, y) & dist m (x, y) <= dist m (x, z))"
10.1025 + by (import nets tendsto)
10.1026 +
10.1027 +lemma DORDER_LEMMA: "ALL g.
10.1028 + dorder g -->
10.1029 + (ALL P Q.
10.1030 + (EX n. g n n & (ALL m. g m n --> P m)) &
10.1031 + (EX n. g n n & (ALL m. g m n --> Q m)) -->
10.1032 + (EX n. g n n & (ALL m. g m n --> P m & Q m)))"
10.1033 + by (import nets DORDER_LEMMA)
10.1034 +
10.1035 +lemma DORDER_NGE: "dorder nat_ge"
10.1036 + by (import nets DORDER_NGE)
10.1037 +
10.1038 +lemma DORDER_TENDSTO: "ALL m x. dorder (tendsto (m, x))"
10.1039 + by (import nets DORDER_TENDSTO)
10.1040 +
10.1041 +lemma MTOP_TENDS: "ALL d g x x0.
10.1042 + tends x x0 (mtop d, g) =
10.1043 + (ALL e.
10.1044 + 0 < e --> (EX n. g n n & (ALL m. g m n --> dist d (x m, x0) < e)))"
10.1045 + by (import nets MTOP_TENDS)
10.1046 +
10.1047 +lemma MTOP_TENDS_UNIQ: "ALL (g::'b => 'b => bool) d::'a metric.
10.1048 + dorder g -->
10.1049 + tends (x::'b => 'a) (x0::'a) (mtop d, g) &
10.1050 + tends x (x1::'a) (mtop d, g) -->
10.1051 + x0 = x1"
10.1052 + by (import nets MTOP_TENDS_UNIQ)
10.1053 +
10.1054 +lemma SEQ_TENDS: "ALL d x x0.
10.1055 + tends x x0 (mtop d, nat_ge) =
10.1056 + (ALL xa. 0 < xa --> (EX xb. ALL xc. xb <= xc --> dist d (x xc, x0) < xa))"
10.1057 + by (import nets SEQ_TENDS)
10.1058 +
10.1059 +lemma LIM_TENDS: "ALL m1 m2 f x0 y0.
10.1060 + limpt (mtop m1) x0 re_universe -->
10.1061 + tends f y0 (mtop m2, tendsto (m1, x0)) =
10.1062 + (ALL e.
10.1063 + 0 < e -->
10.1064 + (EX d. 0 < d &
10.1065 + (ALL x.
10.1066 + 0 < dist m1 (x, x0) & dist m1 (x, x0) <= d -->
10.1067 + dist m2 (f x, y0) < e)))"
10.1068 + by (import nets LIM_TENDS)
10.1069 +
10.1070 +lemma LIM_TENDS2: "ALL m1 m2 f x0 y0.
10.1071 + limpt (mtop m1) x0 re_universe -->
10.1072 + tends f y0 (mtop m2, tendsto (m1, x0)) =
10.1073 + (ALL e.
10.1074 + 0 < e -->
10.1075 + (EX d. 0 < d &
10.1076 + (ALL x.
10.1077 + 0 < dist m1 (x, x0) & dist m1 (x, x0) < d -->
10.1078 + dist m2 (f x, y0) < e)))"
10.1079 + by (import nets LIM_TENDS2)
10.1080 +
10.1081 +lemma MR1_BOUNDED: "ALL g f.
10.1082 + bounded (mr1, g) f = (EX k N. g N N & (ALL n. g n N --> abs (f n) < k))"
10.1083 + by (import nets MR1_BOUNDED)
10.1084 +
10.1085 +lemma NET_NULL: "ALL g x x0. tends x x0 (mtop mr1, g) = tends (%n. x n - x0) 0 (mtop mr1, g)"
10.1086 + by (import nets NET_NULL)
10.1087 +
10.1088 +lemma NET_CONV_BOUNDED: "ALL g x x0. tends x x0 (mtop mr1, g) --> bounded (mr1, g) x"
10.1089 + by (import nets NET_CONV_BOUNDED)
10.1090 +
10.1091 +lemma NET_CONV_NZ: "ALL g x x0.
10.1092 + tends x x0 (mtop mr1, g) & x0 ~= 0 -->
10.1093 + (EX N. g N N & (ALL n. g n N --> x n ~= 0))"
10.1094 + by (import nets NET_CONV_NZ)
10.1095 +
10.1096 +lemma NET_CONV_IBOUNDED: "ALL g x x0.
10.1097 + tends x x0 (mtop mr1, g) & x0 ~= 0 -->
10.1098 + bounded (mr1, g) (%n. inverse (x n))"
10.1099 + by (import nets NET_CONV_IBOUNDED)
10.1100 +
10.1101 +lemma NET_NULL_ADD: "ALL g.
10.1102 + dorder g -->
10.1103 + (ALL x y.
10.1104 + tends x 0 (mtop mr1, g) & tends y 0 (mtop mr1, g) -->
10.1105 + tends (%n. x n + y n) 0 (mtop mr1, g))"
10.1106 + by (import nets NET_NULL_ADD)
10.1107 +
10.1108 +lemma NET_NULL_MUL: "ALL g.
10.1109 + dorder g -->
10.1110 + (ALL x y.
10.1111 + bounded (mr1, g) x & tends y 0 (mtop mr1, g) -->
10.1112 + tends (%n. x n * y n) 0 (mtop mr1, g))"
10.1113 + by (import nets NET_NULL_MUL)
10.1114 +
10.1115 +lemma NET_NULL_CMUL: "ALL g k x. tends x 0 (mtop mr1, g) --> tends (%n. k * x n) 0 (mtop mr1, g)"
10.1116 + by (import nets NET_NULL_CMUL)
10.1117 +
10.1118 +lemma NET_ADD: "ALL g.
10.1119 + dorder g -->
10.1120 + (ALL x x0 y y0.
10.1121 + tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
10.1122 + tends (%n. x n + y n) (x0 + y0) (mtop mr1, g))"
10.1123 + by (import nets NET_ADD)
10.1124 +
10.1125 +lemma NET_NEG: "ALL g.
10.1126 + dorder g -->
10.1127 + (ALL x x0.
10.1128 + tends x x0 (mtop mr1, g) = tends (%n. - x n) (- x0) (mtop mr1, g))"
10.1129 + by (import nets NET_NEG)
10.1130 +
10.1131 +lemma NET_SUB: "ALL g.
10.1132 + dorder g -->
10.1133 + (ALL x x0 y y0.
10.1134 + tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
10.1135 + tends (%xa. x xa - y xa) (x0 - y0) (mtop mr1, g))"
10.1136 + by (import nets NET_SUB)
10.1137 +
10.1138 +lemma NET_MUL: "ALL g.
10.1139 + dorder g -->
10.1140 + (ALL x y x0 y0.
10.1141 + tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
10.1142 + tends (%n. x n * y n) (x0 * y0) (mtop mr1, g))"
10.1143 + by (import nets NET_MUL)
10.1144 +
10.1145 +lemma NET_INV: "ALL g.
10.1146 + dorder g -->
10.1147 + (ALL x x0.
10.1148 + tends x x0 (mtop mr1, g) & x0 ~= 0 -->
10.1149 + tends (%n. inverse (x n)) (inverse x0) (mtop mr1, g))"
10.1150 + by (import nets NET_INV)
10.1151 +
10.1152 +lemma NET_DIV: "ALL g.
10.1153 + dorder g -->
10.1154 + (ALL x x0 y y0.
10.1155 + tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) & y0 ~= 0 -->
10.1156 + tends (%xa. x xa / y xa) (x0 / y0) (mtop mr1, g))"
10.1157 + by (import nets NET_DIV)
10.1158 +
10.1159 +lemma NET_ABS: "ALL g x x0.
10.1160 + tends x x0 (mtop mr1, g) --> tends (%n. abs (x n)) (abs x0) (mtop mr1, g)"
10.1161 + by (import nets NET_ABS)
10.1162 +
10.1163 +lemma NET_LE: "ALL g.
10.1164 + dorder g -->
10.1165 + (ALL x x0 y y0.
10.1166 + tends x x0 (mtop mr1, g) &
10.1167 + tends y y0 (mtop mr1, g) &
10.1168 + (EX N. g N N & (ALL n. g n N --> x n <= y n)) -->
10.1169 + x0 <= y0)"
10.1170 + by (import nets NET_LE)
10.1171 +
10.1172 +;end_setup
10.1173 +
10.1174 +;setup_theory seq
10.1175 +
10.1176 +constdefs
10.1177 + "-->" :: "(nat => real) => real => bool" ("-->")
10.1178 + "--> == %x x0. tends x x0 (mtop mr1, nat_ge)"
10.1179 +
10.1180 +lemma tends_num_real: "ALL x x0. --> x x0 = tends x x0 (mtop mr1, nat_ge)"
10.1181 + by (import seq tends_num_real)
10.1182 +
10.1183 +lemma SEQ: "(All::((nat => real) => bool) => bool)
10.1184 + (%x::nat => real.
10.1185 + (All::(real => bool) => bool)
10.1186 + (%x0::real.
10.1187 + (op =::bool => bool => bool)
10.1188 + ((-->::(nat => real) => real => bool) x x0)
10.1189 + ((All::(real => bool) => bool)
10.1190 + (%e::real.
10.1191 + (op -->::bool => bool => bool)
10.1192 + ((op <::real => real => bool) (0::real) e)
10.1193 + ((Ex::(nat => bool) => bool)
10.1194 + (%N::nat.
10.1195 + (All::(nat => bool) => bool)
10.1196 + (%n::nat.
10.1197 + (op -->::bool => bool => bool)
10.1198 + ((op <=::nat => nat => bool) N n)
10.1199 + ((op <::real => real => bool)
10.1200 + ((abs::real => real)
10.1201 + ((op -::real => real => real) (x n) x0))
10.1202 + e))))))))"
10.1203 + by (import seq SEQ)
10.1204 +
10.1205 +lemma SEQ_CONST: "ALL k. --> (%x. k) k"
10.1206 + by (import seq SEQ_CONST)
10.1207 +
10.1208 +lemma SEQ_ADD: "(All::((nat => real) => bool) => bool)
10.1209 + (%x::nat => real.
10.1210 + (All::(real => bool) => bool)
10.1211 + (%x0::real.
10.1212 + (All::((nat => real) => bool) => bool)
10.1213 + (%y::nat => real.
10.1214 + (All::(real => bool) => bool)
10.1215 + (%y0::real.
10.1216 + (op -->::bool => bool => bool)
10.1217 + ((op &::bool => bool => bool)
10.1218 + ((-->::(nat => real) => real => bool) x x0)
10.1219 + ((-->::(nat => real) => real => bool) y y0))
10.1220 + ((-->::(nat => real) => real => bool)
10.1221 + (%n::nat. (op +::real => real => real) (x n) (y n))
10.1222 + ((op +::real => real => real) x0 y0))))))"
10.1223 + by (import seq SEQ_ADD)
10.1224 +
10.1225 +lemma SEQ_MUL: "(All::((nat => real) => bool) => bool)
10.1226 + (%x::nat => real.
10.1227 + (All::(real => bool) => bool)
10.1228 + (%x0::real.
10.1229 + (All::((nat => real) => bool) => bool)
10.1230 + (%y::nat => real.
10.1231 + (All::(real => bool) => bool)
10.1232 + (%y0::real.
10.1233 + (op -->::bool => bool => bool)
10.1234 + ((op &::bool => bool => bool)
10.1235 + ((-->::(nat => real) => real => bool) x x0)
10.1236 + ((-->::(nat => real) => real => bool) y y0))
10.1237 + ((-->::(nat => real) => real => bool)
10.1238 + (%n::nat. (op *::real => real => real) (x n) (y n))
10.1239 + ((op *::real => real => real) x0 y0))))))"
10.1240 + by (import seq SEQ_MUL)
10.1241 +
10.1242 +lemma SEQ_NEG: "ALL x x0. --> x x0 = --> (%n. - x n) (- x0)"
10.1243 + by (import seq SEQ_NEG)
10.1244 +
10.1245 +lemma SEQ_INV: "(All::((nat => real) => bool) => bool)
10.1246 + (%x::nat => real.
10.1247 + (All::(real => bool) => bool)
10.1248 + (%x0::real.
10.1249 + (op -->::bool => bool => bool)
10.1250 + ((op &::bool => bool => bool)
10.1251 + ((-->::(nat => real) => real => bool) x x0)
10.1252 + ((Not::bool => bool)
10.1253 + ((op =::real => real => bool) x0 (0::real))))
10.1254 + ((-->::(nat => real) => real => bool)
10.1255 + (%n::nat. (inverse::real => real) (x n))
10.1256 + ((inverse::real => real) x0))))"
10.1257 + by (import seq SEQ_INV)
10.1258 +
10.1259 +lemma SEQ_SUB: "(All::((nat => real) => bool) => bool)
10.1260 + (%x::nat => real.
10.1261 + (All::(real => bool) => bool)
10.1262 + (%x0::real.
10.1263 + (All::((nat => real) => bool) => bool)
10.1264 + (%y::nat => real.
10.1265 + (All::(real => bool) => bool)
10.1266 + (%y0::real.
10.1267 + (op -->::bool => bool => bool)
10.1268 + ((op &::bool => bool => bool)
10.1269 + ((-->::(nat => real) => real => bool) x x0)
10.1270 + ((-->::(nat => real) => real => bool) y y0))
10.1271 + ((-->::(nat => real) => real => bool)
10.1272 + (%n::nat. (op -::real => real => real) (x n) (y n))
10.1273 + ((op -::real => real => real) x0 y0))))))"
10.1274 + by (import seq SEQ_SUB)
10.1275 +
10.1276 +lemma SEQ_DIV: "(All::((nat => real) => bool) => bool)
10.1277 + (%x::nat => real.
10.1278 + (All::(real => bool) => bool)
10.1279 + (%x0::real.
10.1280 + (All::((nat => real) => bool) => bool)
10.1281 + (%y::nat => real.
10.1282 + (All::(real => bool) => bool)
10.1283 + (%y0::real.
10.1284 + (op -->::bool => bool => bool)
10.1285 + ((op &::bool => bool => bool)
10.1286 + ((-->::(nat => real) => real => bool) x x0)
10.1287 + ((op &::bool => bool => bool)
10.1288 + ((-->::(nat => real) => real => bool) y y0)
10.1289 + ((Not::bool => bool)
10.1290 + ((op =::real => real => bool) y0 (0::real)))))
10.1291 + ((-->::(nat => real) => real => bool)
10.1292 + (%n::nat. (op /::real => real => real) (x n) (y n))
10.1293 + ((op /::real => real => real) x0 y0))))))"
10.1294 + by (import seq SEQ_DIV)
10.1295 +
10.1296 +lemma SEQ_UNIQ: "(All::((nat => real) => bool) => bool)
10.1297 + (%x::nat => real.
10.1298 + (All::(real => bool) => bool)
10.1299 + (%x1::real.
10.1300 + (All::(real => bool) => bool)
10.1301 + (%x2::real.
10.1302 + (op -->::bool => bool => bool)
10.1303 + ((op &::bool => bool => bool)
10.1304 + ((-->::(nat => real) => real => bool) x x1)
10.1305 + ((-->::(nat => real) => real => bool) x x2))
10.1306 + ((op =::real => real => bool) x1 x2))))"
10.1307 + by (import seq SEQ_UNIQ)
10.1308 +
10.1309 +constdefs
10.1310 + convergent :: "(nat => real) => bool"
10.1311 + "convergent == %f. Ex (--> f)"
10.1312 +
10.1313 +lemma convergent: "ALL f. convergent f = Ex (--> f)"
10.1314 + by (import seq convergent)
10.1315 +
10.1316 +constdefs
10.1317 + cauchy :: "(nat => real) => bool"
10.1318 + "(op ==::((nat => real) => bool) => ((nat => real) => bool) => prop)
10.1319 + (cauchy::(nat => real) => bool)
10.1320 + (%f::nat => real.
10.1321 + (All::(real => bool) => bool)
10.1322 + (%e::real.
10.1323 + (op -->::bool => bool => bool)
10.1324 + ((op <::real => real => bool) (0::real) e)
10.1325 + ((Ex::(nat => bool) => bool)
10.1326 + (%N::nat.
10.1327 + (All::(nat => bool) => bool)
10.1328 + (%m::nat.
10.1329 + (All::(nat => bool) => bool)
10.1330 + (%n::nat.
10.1331 + (op -->::bool => bool => bool)
10.1332 + ((op &::bool => bool => bool)
10.1333 + ((op <=::nat => nat => bool) N m)
10.1334 + ((op <=::nat => nat => bool) N n))
10.1335 + ((op <::real => real => bool)
10.1336 + ((abs::real => real)
10.1337 + ((op -::real => real => real) (f m) (f n)))
10.1338 + e)))))))"
10.1339 +
10.1340 +lemma cauchy: "(All::((nat => real) => bool) => bool)
10.1341 + (%f::nat => real.
10.1342 + (op =::bool => bool => bool) ((cauchy::(nat => real) => bool) f)
10.1343 + ((All::(real => bool) => bool)
10.1344 + (%e::real.
10.1345 + (op -->::bool => bool => bool)
10.1346 + ((op <::real => real => bool) (0::real) e)
10.1347 + ((Ex::(nat => bool) => bool)
10.1348 + (%N::nat.
10.1349 + (All::(nat => bool) => bool)
10.1350 + (%m::nat.
10.1351 + (All::(nat => bool) => bool)
10.1352 + (%n::nat.
10.1353 + (op -->::bool => bool => bool)
10.1354 + ((op &::bool => bool => bool)
10.1355 + ((op <=::nat => nat => bool) N m)
10.1356 + ((op <=::nat => nat => bool) N n))
10.1357 + ((op <::real => real => bool)
10.1358 + ((abs::real => real)
10.1359 + ((op -::real => real => real) (f m)
10.1360 + (f n)))
10.1361 + e))))))))"
10.1362 + by (import seq cauchy)
10.1363 +
10.1364 +constdefs
10.1365 + lim :: "(nat => real) => real"
10.1366 + "lim == %f. Eps (--> f)"
10.1367 +
10.1368 +lemma lim: "ALL f. lim f = Eps (--> f)"
10.1369 + by (import seq lim)
10.1370 +
10.1371 +lemma SEQ_LIM: "ALL f. convergent f = --> f (lim f)"
10.1372 + by (import seq SEQ_LIM)
10.1373 +
10.1374 +constdefs
10.1375 + subseq :: "(nat => nat) => bool"
10.1376 + "(op ==::((nat => nat) => bool) => ((nat => nat) => bool) => prop)
10.1377 + (subseq::(nat => nat) => bool)
10.1378 + (%f::nat => nat.
10.1379 + (All::(nat => bool) => bool)
10.1380 + (%m::nat.
10.1381 + (All::(nat => bool) => bool)
10.1382 + (%n::nat.
10.1383 + (op -->::bool => bool => bool)
10.1384 + ((op <::nat => nat => bool) m n)
10.1385 + ((op <::nat => nat => bool) (f m) (f n)))))"
10.1386 +
10.1387 +lemma subseq: "(All::((nat => nat) => bool) => bool)
10.1388 + (%f::nat => nat.
10.1389 + (op =::bool => bool => bool) ((subseq::(nat => nat) => bool) f)
10.1390 + ((All::(nat => bool) => bool)
10.1391 + (%m::nat.
10.1392 + (All::(nat => bool) => bool)
10.1393 + (%n::nat.
10.1394 + (op -->::bool => bool => bool)
10.1395 + ((op <::nat => nat => bool) m n)
10.1396 + ((op <::nat => nat => bool) (f m) (f n))))))"
10.1397 + by (import seq subseq)
10.1398 +
10.1399 +lemma SUBSEQ_SUC: "ALL f. subseq f = (ALL n. f n < f (Suc n))"
10.1400 + by (import seq SUBSEQ_SUC)
10.1401 +
10.1402 +constdefs
10.1403 + mono :: "(nat => real) => bool"
10.1404 + "(op ==::((nat => real) => bool) => ((nat => real) => bool) => prop)
10.1405 + (seq.mono::(nat => real) => bool)
10.1406 + (%f::nat => real.
10.1407 + (op |::bool => bool => bool)
10.1408 + ((All::(nat => bool) => bool)
10.1409 + (%m::nat.
10.1410 + (All::(nat => bool) => bool)
10.1411 + (%n::nat.
10.1412 + (op -->::bool => bool => bool)
10.1413 + ((op <=::nat => nat => bool) m n)
10.1414 + ((op <=::real => real => bool) (f m) (f n)))))
10.1415 + ((All::(nat => bool) => bool)
10.1416 + (%m::nat.
10.1417 + (All::(nat => bool) => bool)
10.1418 + (%n::nat.
10.1419 + (op -->::bool => bool => bool)
10.1420 + ((op <=::nat => nat => bool) m n)
10.1421 + ((op <=::real => real => bool) (f n) (f m))))))"
10.1422 +
10.1423 +lemma mono: "(All::((nat => real) => bool) => bool)
10.1424 + (%f::nat => real.
10.1425 + (op =::bool => bool => bool) ((seq.mono::(nat => real) => bool) f)
10.1426 + ((op |::bool => bool => bool)
10.1427 + ((All::(nat => bool) => bool)
10.1428 + (%m::nat.
10.1429 + (All::(nat => bool) => bool)
10.1430 + (%n::nat.
10.1431 + (op -->::bool => bool => bool)
10.1432 + ((op <=::nat => nat => bool) m n)
10.1433 + ((op <=::real => real => bool) (f m) (f n)))))
10.1434 + ((All::(nat => bool) => bool)
10.1435 + (%m::nat.
10.1436 + (All::(nat => bool) => bool)
10.1437 + (%n::nat.
10.1438 + (op -->::bool => bool => bool)
10.1439 + ((op <=::nat => nat => bool) m n)
10.1440 + ((op <=::real => real => bool) (f n) (f m)))))))"
10.1441 + by (import seq mono)
10.1442 +
10.1443 +lemma MONO_SUC: "ALL f. seq.mono f = ((ALL x. f x <= f (Suc x)) | (ALL n. f (Suc n) <= f n))"
10.1444 + by (import seq MONO_SUC)
10.1445 +
10.1446 +lemma MAX_LEMMA: "ALL (s::nat => real) N::nat. EX k::real. ALL n<N. abs (s n) < k"
10.1447 + by (import seq MAX_LEMMA)
10.1448 +
10.1449 +lemma SEQ_BOUNDED: "ALL s. bounded (mr1, nat_ge) s = (EX k. ALL n. abs (s n) < k)"
10.1450 + by (import seq SEQ_BOUNDED)
10.1451 +
10.1452 +lemma SEQ_BOUNDED_2: "(All::((nat => real) => bool) => bool)
10.1453 + (%f::nat => real.
10.1454 + (All::(real => bool) => bool)
10.1455 + (%k::real.
10.1456 + (All::(real => bool) => bool)
10.1457 + (%k'::real.
10.1458 + (op -->::bool => bool => bool)
10.1459 + ((All::(nat => bool) => bool)
10.1460 + (%n::nat.
10.1461 + (op &::bool => bool => bool)
10.1462 + ((op <=::real => real => bool) k (f n))
10.1463 + ((op <=::real => real => bool) (f n) k')))
10.1464 + ((bounded::real metric * (nat => nat => bool)
10.1465 + => (nat => real) => bool)
10.1466 + ((Pair::real metric
10.1467 + => (nat => nat => bool)
10.1468 + => real metric * (nat => nat => bool))
10.1469 + (mr1::real metric) (nat_ge::nat => nat => bool))
10.1470 + f))))"
10.1471 + by (import seq SEQ_BOUNDED_2)
10.1472 +
10.1473 +lemma SEQ_CBOUNDED: "(All::((nat => real) => bool) => bool)
10.1474 + (%f::nat => real.
10.1475 + (op -->::bool => bool => bool) ((cauchy::(nat => real) => bool) f)
10.1476 + ((bounded::real metric * (nat => nat => bool)
10.1477 + => (nat => real) => bool)
10.1478 + ((Pair::real metric
10.1479 + => (nat => nat => bool)
10.1480 + => real metric * (nat => nat => bool))
10.1481 + (mr1::real metric) (nat_ge::nat => nat => bool))
10.1482 + f))"
10.1483 + by (import seq SEQ_CBOUNDED)
10.1484 +
10.1485 +lemma SEQ_ICONV: "(All::((nat => real) => bool) => bool)
10.1486 + (%f::nat => real.
10.1487 + (op -->::bool => bool => bool)
10.1488 + ((op &::bool => bool => bool)
10.1489 + ((bounded::real metric * (nat => nat => bool)
10.1490 + => (nat => real) => bool)
10.1491 + ((Pair::real metric
10.1492 + => (nat => nat => bool)
10.1493 + => real metric * (nat => nat => bool))
10.1494 + (mr1::real metric) (nat_ge::nat => nat => bool))
10.1495 + f)
10.1496 + ((All::(nat => bool) => bool)
10.1497 + (%m::nat.
10.1498 + (All::(nat => bool) => bool)
10.1499 + (%n::nat.
10.1500 + (op -->::bool => bool => bool)
10.1501 + ((op <=::nat => nat => bool) n m)
10.1502 + ((op <=::real => real => bool) (f n) (f m))))))
10.1503 + ((convergent::(nat => real) => bool) f))"
10.1504 + by (import seq SEQ_ICONV)
10.1505 +
10.1506 +lemma SEQ_NEG_CONV: "ALL f. convergent f = convergent (%n. - f n)"
10.1507 + by (import seq SEQ_NEG_CONV)
10.1508 +
10.1509 +lemma SEQ_NEG_BOUNDED: "ALL f. bounded (mr1, nat_ge) (%n. - f n) = bounded (mr1, nat_ge) f"
10.1510 + by (import seq SEQ_NEG_BOUNDED)
10.1511 +
10.1512 +lemma SEQ_BCONV: "(All::((nat => real) => bool) => bool)
10.1513 + (%f::nat => real.
10.1514 + (op -->::bool => bool => bool)
10.1515 + ((op &::bool => bool => bool)
10.1516 + ((bounded::real metric * (nat => nat => bool)
10.1517 + => (nat => real) => bool)
10.1518 + ((Pair::real metric
10.1519 + => (nat => nat => bool)
10.1520 + => real metric * (nat => nat => bool))
10.1521 + (mr1::real metric) (nat_ge::nat => nat => bool))
10.1522 + f)
10.1523 + ((seq.mono::(nat => real) => bool) f))
10.1524 + ((convergent::(nat => real) => bool) f))"
10.1525 + by (import seq SEQ_BCONV)
10.1526 +
10.1527 +lemma SEQ_MONOSUB: "ALL s. EX f. subseq f & seq.mono (%n. s (f n))"
10.1528 + by (import seq SEQ_MONOSUB)
10.1529 +
10.1530 +lemma SEQ_SBOUNDED: "(All::((nat => real) => bool) => bool)
10.1531 + (%s::nat => real.
10.1532 + (All::((nat => nat) => bool) => bool)
10.1533 + (%f::nat => nat.
10.1534 + (op -->::bool => bool => bool)
10.1535 + ((bounded::real metric * (nat => nat => bool)
10.1536 + => (nat => real) => bool)
10.1537 + ((Pair::real metric
10.1538 + => (nat => nat => bool)
10.1539 + => real metric * (nat => nat => bool))
10.1540 + (mr1::real metric) (nat_ge::nat => nat => bool))
10.1541 + s)
10.1542 + ((bounded::real metric * (nat => nat => bool)
10.1543 + => (nat => real) => bool)
10.1544 + ((Pair::real metric
10.1545 + => (nat => nat => bool)
10.1546 + => real metric * (nat => nat => bool))
10.1547 + (mr1::real metric) (nat_ge::nat => nat => bool))
10.1548 + (%n::nat. s (f n)))))"
10.1549 + by (import seq SEQ_SBOUNDED)
10.1550 +
10.1551 +lemma SEQ_SUBLE: "(All::((nat => nat) => bool) => bool)
10.1552 + (%f::nat => nat.
10.1553 + (op -->::bool => bool => bool) ((subseq::(nat => nat) => bool) f)
10.1554 + ((All::(nat => bool) => bool)
10.1555 + (%n::nat. (op <=::nat => nat => bool) n (f n))))"
10.1556 + by (import seq SEQ_SUBLE)
10.1557 +
10.1558 +lemma SEQ_DIRECT: "(All::((nat => nat) => bool) => bool)
10.1559 + (%f::nat => nat.
10.1560 + (op -->::bool => bool => bool) ((subseq::(nat => nat) => bool) f)
10.1561 + ((All::(nat => bool) => bool)
10.1562 + (%N1::nat.
10.1563 + (All::(nat => bool) => bool)
10.1564 + (%N2::nat.
10.1565 + (Ex::(nat => bool) => bool)
10.1566 + (%x::nat.
10.1567 + (op &::bool => bool => bool)
10.1568 + ((op <=::nat => nat => bool) N1 x)
10.1569 + ((op <=::nat => nat => bool) N2 (f x)))))))"
10.1570 + by (import seq SEQ_DIRECT)
10.1571 +
10.1572 +lemma SEQ_CAUCHY: "ALL f. cauchy f = convergent f"
10.1573 + by (import seq SEQ_CAUCHY)
10.1574 +
10.1575 +lemma SEQ_LE: "(All::((nat => real) => bool) => bool)
10.1576 + (%f::nat => real.
10.1577 + (All::((nat => real) => bool) => bool)
10.1578 + (%g::nat => real.
10.1579 + (All::(real => bool) => bool)
10.1580 + (%l::real.
10.1581 + (All::(real => bool) => bool)
10.1582 + (%m::real.
10.1583 + (op -->::bool => bool => bool)
10.1584 + ((op &::bool => bool => bool)
10.1585 + ((-->::(nat => real) => real => bool) f l)
10.1586 + ((op &::bool => bool => bool)
10.1587 + ((-->::(nat => real) => real => bool) g m)
10.1588 + ((Ex::(nat => bool) => bool)
10.1589 + (%x::nat.
10.1590 + (All::(nat => bool) => bool)
10.1591 + (%xa::nat.
10.1592 + (op -->::bool => bool => bool)
10.1593 + ((op <=::nat => nat => bool) x xa)
10.1594 + ((op <=::real => real => bool) (f xa)
10.1595 + (g xa)))))))
10.1596 + ((op <=::real => real => bool) l m)))))"
10.1597 + by (import seq SEQ_LE)
10.1598 +
10.1599 +lemma SEQ_SUC: "ALL f l. --> f l = --> (%n. f (Suc n)) l"
10.1600 + by (import seq SEQ_SUC)
10.1601 +
10.1602 +lemma SEQ_ABS: "ALL f. --> (%n. abs (f n)) 0 = --> f 0"
10.1603 + by (import seq SEQ_ABS)
10.1604 +
10.1605 +lemma SEQ_ABS_IMP: "(All::((nat => real) => bool) => bool)
10.1606 + (%f::nat => real.
10.1607 + (All::(real => bool) => bool)
10.1608 + (%l::real.
10.1609 + (op -->::bool => bool => bool)
10.1610 + ((-->::(nat => real) => real => bool) f l)
10.1611 + ((-->::(nat => real) => real => bool)
10.1612 + (%n::nat. (abs::real => real) (f n)) ((abs::real => real) l))))"
10.1613 + by (import seq SEQ_ABS_IMP)
10.1614 +
10.1615 +lemma SEQ_INV0: "(All::((nat => real) => bool) => bool)
10.1616 + (%f::nat => real.
10.1617 + (op -->::bool => bool => bool)
10.1618 + ((All::(real => bool) => bool)
10.1619 + (%y::real.
10.1620 + (Ex::(nat => bool) => bool)
10.1621 + (%N::nat.
10.1622 + (All::(nat => bool) => bool)
10.1623 + (%n::nat.
10.1624 + (op -->::bool => bool => bool)
10.1625 + ((op <=::nat => nat => bool) N n)
10.1626 + ((op <::real => real => bool) y (f n))))))
10.1627 + ((-->::(nat => real) => real => bool)
10.1628 + (%n::nat. (inverse::real => real) (f n)) (0::real)))"
10.1629 + by (import seq SEQ_INV0)
10.1630 +
10.1631 +lemma SEQ_POWER_ABS: "(All::(real => bool) => bool)
10.1632 + (%c::real.
10.1633 + (op -->::bool => bool => bool)
10.1634 + ((op <::real => real => bool) ((abs::real => real) c) (1::real))
10.1635 + ((-->::(nat => real) => real => bool)
10.1636 + ((op ^::real => nat => real) ((abs::real => real) c)) (0::real)))"
10.1637 + by (import seq SEQ_POWER_ABS)
10.1638 +
10.1639 +lemma SEQ_POWER: "(All::(real => bool) => bool)
10.1640 + (%c::real.
10.1641 + (op -->::bool => bool => bool)
10.1642 + ((op <::real => real => bool) ((abs::real => real) c) (1::real))
10.1643 + ((-->::(nat => real) => real => bool) ((op ^::real => nat => real) c)
10.1644 + (0::real)))"
10.1645 + by (import seq SEQ_POWER)
10.1646 +
10.1647 +lemma NEST_LEMMA: "(All::((nat => real) => bool) => bool)
10.1648 + (%f::nat => real.
10.1649 + (All::((nat => real) => bool) => bool)
10.1650 + (%g::nat => real.
10.1651 + (op -->::bool => bool => bool)
10.1652 + ((op &::bool => bool => bool)
10.1653 + ((All::(nat => bool) => bool)
10.1654 + (%n::nat.
10.1655 + (op <=::real => real => bool) (f n)
10.1656 + (f ((Suc::nat => nat) n))))
10.1657 + ((op &::bool => bool => bool)
10.1658 + ((All::(nat => bool) => bool)
10.1659 + (%n::nat.
10.1660 + (op <=::real => real => bool) (g ((Suc::nat => nat) n))
10.1661 + (g n)))
10.1662 + ((All::(nat => bool) => bool)
10.1663 + (%n::nat. (op <=::real => real => bool) (f n) (g n)))))
10.1664 + ((Ex::(real => bool) => bool)
10.1665 + (%l::real.
10.1666 + (Ex::(real => bool) => bool)
10.1667 + (%m::real.
10.1668 + (op &::bool => bool => bool)
10.1669 + ((op <=::real => real => bool) l m)
10.1670 + ((op &::bool => bool => bool)
10.1671 + ((op &::bool => bool => bool)
10.1672 + ((All::(nat => bool) => bool)
10.1673 + (%n::nat.
10.1674 + (op <=::real => real => bool) (f n) l))
10.1675 + ((-->::(nat => real) => real => bool) f l))
10.1676 + ((op &::bool => bool => bool)
10.1677 + ((All::(nat => bool) => bool)
10.1678 + (%n::nat.
10.1679 + (op <=::real => real => bool) m (g n)))
10.1680 + ((-->::(nat => real) => real => bool) g m))))))))"
10.1681 + by (import seq NEST_LEMMA)
10.1682 +
10.1683 +lemma NEST_LEMMA_UNIQ: "(All::((nat => real) => bool) => bool)
10.1684 + (%f::nat => real.
10.1685 + (All::((nat => real) => bool) => bool)
10.1686 + (%g::nat => real.
10.1687 + (op -->::bool => bool => bool)
10.1688 + ((op &::bool => bool => bool)
10.1689 + ((All::(nat => bool) => bool)
10.1690 + (%n::nat.
10.1691 + (op <=::real => real => bool) (f n)
10.1692 + (f ((Suc::nat => nat) n))))
10.1693 + ((op &::bool => bool => bool)
10.1694 + ((All::(nat => bool) => bool)
10.1695 + (%n::nat.
10.1696 + (op <=::real => real => bool) (g ((Suc::nat => nat) n))
10.1697 + (g n)))
10.1698 + ((op &::bool => bool => bool)
10.1699 + ((All::(nat => bool) => bool)
10.1700 + (%n::nat. (op <=::real => real => bool) (f n) (g n)))
10.1701 + ((-->::(nat => real) => real => bool)
10.1702 + (%n::nat. (op -::real => real => real) (f n) (g n))
10.1703 + (0::real)))))
10.1704 + ((Ex::(real => bool) => bool)
10.1705 + (%x::real.
10.1706 + (op &::bool => bool => bool)
10.1707 + ((op &::bool => bool => bool)
10.1708 + ((All::(nat => bool) => bool)
10.1709 + (%n::nat. (op <=::real => real => bool) (f n) x))
10.1710 + ((-->::(nat => real) => real => bool) f x))
10.1711 + ((op &::bool => bool => bool)
10.1712 + ((All::(nat => bool) => bool)
10.1713 + (%n::nat. (op <=::real => real => bool) x (g n)))
10.1714 + ((-->::(nat => real) => real => bool) g x))))))"
10.1715 + by (import seq NEST_LEMMA_UNIQ)
10.1716 +
10.1717 +lemma BOLZANO_LEMMA: "(All::((real * real => bool) => bool) => bool)
10.1718 + (%P::real * real => bool.
10.1719 + (op -->::bool => bool => bool)
10.1720 + ((op &::bool => bool => bool)
10.1721 + ((All::(real => bool) => bool)
10.1722 + (%a::real.
10.1723 + (All::(real => bool) => bool)
10.1724 + (%b::real.
10.1725 + (All::(real => bool) => bool)
10.1726 + (%c::real.
10.1727 + (op -->::bool => bool => bool)
10.1728 + ((op &::bool => bool => bool)
10.1729 + ((op <=::real => real => bool) a b)
10.1730 + ((op &::bool => bool => bool)
10.1731 + ((op <=::real => real => bool) b c)
10.1732 + ((op &::bool => bool => bool)
10.1733 + (P ((Pair::real => real => real * real) a b))
10.1734 + (P ((Pair::real => real => real * real) b
10.1735 + c)))))
10.1736 + (P ((Pair::real => real => real * real) a c))))))
10.1737 + ((All::(real => bool) => bool)
10.1738 + (%x::real.
10.1739 + (Ex::(real => bool) => bool)
10.1740 + (%d::real.
10.1741 + (op &::bool => bool => bool)
10.1742 + ((op <::real => real => bool) (0::real) d)
10.1743 + ((All::(real => bool) => bool)
10.1744 + (%a::real.
10.1745 + (All::(real => bool) => bool)
10.1746 + (%b::real.
10.1747 + (op -->::bool => bool => bool)
10.1748 + ((op &::bool => bool => bool)
10.1749 + ((op <=::real => real => bool) a x)
10.1750 + ((op &::bool => bool => bool)
10.1751 + ((op <=::real => real => bool) x b)
10.1752 + ((op <::real => real => bool)
10.1753 +((op -::real => real => real) b a) d)))
10.1754 + (P ((Pair::real => real => real * real) a
10.1755 + b)))))))))
10.1756 + ((All::(real => bool) => bool)
10.1757 + (%a::real.
10.1758 + (All::(real => bool) => bool)
10.1759 + (%b::real.
10.1760 + (op -->::bool => bool => bool)
10.1761 + ((op <=::real => real => bool) a b)
10.1762 + (P ((Pair::real => real => real * real) a b))))))"
10.1763 + by (import seq BOLZANO_LEMMA)
10.1764 +
10.1765 +constdefs
10.1766 + sums :: "(nat => real) => real => bool"
10.1767 + "sums == %f. --> (%n. real.sum (0, n) f)"
10.1768 +
10.1769 +lemma sums: "ALL f s. sums f s = --> (%n. real.sum (0, n) f) s"
10.1770 + by (import seq sums)
10.1771 +
10.1772 +constdefs
10.1773 + summable :: "(nat => real) => bool"
10.1774 + "summable == %f. Ex (sums f)"
10.1775 +
10.1776 +lemma summable: "ALL f. summable f = Ex (sums f)"
10.1777 + by (import seq summable)
10.1778 +
10.1779 +constdefs
10.1780 + suminf :: "(nat => real) => real"
10.1781 + "suminf == %f. Eps (sums f)"
10.1782 +
10.1783 +lemma suminf: "ALL f. suminf f = Eps (sums f)"
10.1784 + by (import seq suminf)
10.1785 +
10.1786 +lemma SUM_SUMMABLE: "(All::((nat => real) => bool) => bool)
10.1787 + (%f::nat => real.
10.1788 + (All::(real => bool) => bool)
10.1789 + (%l::real.
10.1790 + (op -->::bool => bool => bool)
10.1791 + ((sums::(nat => real) => real => bool) f l)
10.1792 + ((summable::(nat => real) => bool) f)))"
10.1793 + by (import seq SUM_SUMMABLE)
10.1794 +
10.1795 +lemma SUMMABLE_SUM: "(All::((nat => real) => bool) => bool)
10.1796 + (%f::nat => real.
10.1797 + (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
10.1798 + ((sums::(nat => real) => real => bool) f
10.1799 + ((suminf::(nat => real) => real) f)))"
10.1800 + by (import seq SUMMABLE_SUM)
10.1801 +
10.1802 +lemma SUM_UNIQ: "(All::((nat => real) => bool) => bool)
10.1803 + (%f::nat => real.
10.1804 + (All::(real => bool) => bool)
10.1805 + (%x::real.
10.1806 + (op -->::bool => bool => bool)
10.1807 + ((sums::(nat => real) => real => bool) f x)
10.1808 + ((op =::real => real => bool) x
10.1809 + ((suminf::(nat => real) => real) f))))"
10.1810 + by (import seq SUM_UNIQ)
10.1811 +
10.1812 +lemma SER_0: "(All::((nat => real) => bool) => bool)
10.1813 + (%f::nat => real.
10.1814 + (All::(nat => bool) => bool)
10.1815 + (%n::nat.
10.1816 + (op -->::bool => bool => bool)
10.1817 + ((All::(nat => bool) => bool)
10.1818 + (%m::nat.
10.1819 + (op -->::bool => bool => bool)
10.1820 + ((op <=::nat => nat => bool) n m)
10.1821 + ((op =::real => real => bool) (f m) (0::real))))
10.1822 + ((sums::(nat => real) => real => bool) f
10.1823 + ((real.sum::nat * nat => (nat => real) => real)
10.1824 + ((Pair::nat => nat => nat * nat) (0::nat) n) f))))"
10.1825 + by (import seq SER_0)
10.1826 +
10.1827 +lemma SER_POS_LE: "(All::((nat => real) => bool) => bool)
10.1828 + (%f::nat => real.
10.1829 + (All::(nat => bool) => bool)
10.1830 + (%n::nat.
10.1831 + (op -->::bool => bool => bool)
10.1832 + ((op &::bool => bool => bool)
10.1833 + ((summable::(nat => real) => bool) f)
10.1834 + ((All::(nat => bool) => bool)
10.1835 + (%m::nat.
10.1836 + (op -->::bool => bool => bool)
10.1837 + ((op <=::nat => nat => bool) n m)
10.1838 + ((op <=::real => real => bool) (0::real) (f m)))))
10.1839 + ((op <=::real => real => bool)
10.1840 + ((real.sum::nat * nat => (nat => real) => real)
10.1841 + ((Pair::nat => nat => nat * nat) (0::nat) n) f)
10.1842 + ((suminf::(nat => real) => real) f))))"
10.1843 + by (import seq SER_POS_LE)
10.1844 +
10.1845 +lemma SER_POS_LT: "(All::((nat => real) => bool) => bool)
10.1846 + (%f::nat => real.
10.1847 + (All::(nat => bool) => bool)
10.1848 + (%n::nat.
10.1849 + (op -->::bool => bool => bool)
10.1850 + ((op &::bool => bool => bool)
10.1851 + ((summable::(nat => real) => bool) f)
10.1852 + ((All::(nat => bool) => bool)
10.1853 + (%m::nat.
10.1854 + (op -->::bool => bool => bool)
10.1855 + ((op <=::nat => nat => bool) n m)
10.1856 + ((op <::real => real => bool) (0::real) (f m)))))
10.1857 + ((op <::real => real => bool)
10.1858 + ((real.sum::nat * nat => (nat => real) => real)
10.1859 + ((Pair::nat => nat => nat * nat) (0::nat) n) f)
10.1860 + ((suminf::(nat => real) => real) f))))"
10.1861 + by (import seq SER_POS_LT)
10.1862 +
10.1863 +lemma SER_GROUP: "(All::((nat => real) => bool) => bool)
10.1864 + (%f::nat => real.
10.1865 + (All::(nat => bool) => bool)
10.1866 + (%k::nat.
10.1867 + (op -->::bool => bool => bool)
10.1868 + ((op &::bool => bool => bool)
10.1869 + ((summable::(nat => real) => bool) f)
10.1870 + ((op <::nat => nat => bool) (0::nat) k))
10.1871 + ((sums::(nat => real) => real => bool)
10.1872 + (%n::nat.
10.1873 + (real.sum::nat * nat => (nat => real) => real)
10.1874 + ((Pair::nat => nat => nat * nat)
10.1875 + ((op *::nat => nat => nat) n k) k)
10.1876 + f)
10.1877 + ((suminf::(nat => real) => real) f))))"
10.1878 + by (import seq SER_GROUP)
10.1879 +
10.1880 +lemma SER_PAIR: "(All::((nat => real) => bool) => bool)
10.1881 + (%f::nat => real.
10.1882 + (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
10.1883 + ((sums::(nat => real) => real => bool)
10.1884 + (%n::nat.
10.1885 + (real.sum::nat * nat => (nat => real) => real)
10.1886 + ((Pair::nat => nat => nat * nat)
10.1887 + ((op *::nat => nat => nat)
10.1888 + ((number_of::bin => nat)
10.1889 + ((op BIT::bin => bool => bin)
10.1890 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.1891 + (True::bool))
10.1892 + (False::bool)))
10.1893 + n)
10.1894 + ((number_of::bin => nat)
10.1895 + ((op BIT::bin => bool => bin)
10.1896 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.1897 + (True::bool))
10.1898 + (False::bool))))
10.1899 + f)
10.1900 + ((suminf::(nat => real) => real) f)))"
10.1901 + by (import seq SER_PAIR)
10.1902 +
10.1903 +lemma SER_OFFSET: "(All::((nat => real) => bool) => bool)
10.1904 + (%f::nat => real.
10.1905 + (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
10.1906 + ((All::(nat => bool) => bool)
10.1907 + (%k::nat.
10.1908 + (sums::(nat => real) => real => bool)
10.1909 + (%n::nat. f ((op +::nat => nat => nat) n k))
10.1910 + ((op -::real => real => real)
10.1911 + ((suminf::(nat => real) => real) f)
10.1912 + ((real.sum::nat * nat => (nat => real) => real)
10.1913 + ((Pair::nat => nat => nat * nat) (0::nat) k) f)))))"
10.1914 + by (import seq SER_OFFSET)
10.1915 +
10.1916 +lemma SER_POS_LT_PAIR: "(All::((nat => real) => bool) => bool)
10.1917 + (%f::nat => real.
10.1918 + (All::(nat => bool) => bool)
10.1919 + (%n::nat.
10.1920 + (op -->::bool => bool => bool)
10.1921 + ((op &::bool => bool => bool)
10.1922 + ((summable::(nat => real) => bool) f)
10.1923 + ((All::(nat => bool) => bool)
10.1924 + (%d::nat.
10.1925 + (op <::real => real => bool) (0::real)
10.1926 + ((op +::real => real => real)
10.1927 + (f ((op +::nat => nat => nat) n
10.1928 + ((op *::nat => nat => nat)
10.1929 + ((number_of::bin => nat)
10.1930 + ((op BIT::bin => bool => bin)
10.1931 + ((op BIT::bin => bool => bin)
10.1932 + (bin.Pls::bin) (True::bool))
10.1933 + (False::bool)))
10.1934 + d)))
10.1935 + (f ((op +::nat => nat => nat) n
10.1936 + ((op +::nat => nat => nat)
10.1937 + ((op *::nat => nat => nat)
10.1938 + ((number_of::bin => nat)
10.1939 + ((op BIT::bin => bool => bin)
10.1940 + ((op BIT::bin => bool => bin)
10.1941 + (bin.Pls::bin) (True::bool))
10.1942 + (False::bool)))
10.1943 + d)
10.1944 + (1::nat))))))))
10.1945 + ((op <::real => real => bool)
10.1946 + ((real.sum::nat * nat => (nat => real) => real)
10.1947 + ((Pair::nat => nat => nat * nat) (0::nat) n) f)
10.1948 + ((suminf::(nat => real) => real) f))))"
10.1949 + by (import seq SER_POS_LT_PAIR)
10.1950 +
10.1951 +lemma SER_ADD: "(All::((nat => real) => bool) => bool)
10.1952 + (%x::nat => real.
10.1953 + (All::(real => bool) => bool)
10.1954 + (%x0::real.
10.1955 + (All::((nat => real) => bool) => bool)
10.1956 + (%y::nat => real.
10.1957 + (All::(real => bool) => bool)
10.1958 + (%y0::real.
10.1959 + (op -->::bool => bool => bool)
10.1960 + ((op &::bool => bool => bool)
10.1961 + ((sums::(nat => real) => real => bool) x x0)
10.1962 + ((sums::(nat => real) => real => bool) y y0))
10.1963 + ((sums::(nat => real) => real => bool)
10.1964 + (%n::nat. (op +::real => real => real) (x n) (y n))
10.1965 + ((op +::real => real => real) x0 y0))))))"
10.1966 + by (import seq SER_ADD)
10.1967 +
10.1968 +lemma SER_CMUL: "(All::((nat => real) => bool) => bool)
10.1969 + (%x::nat => real.
10.1970 + (All::(real => bool) => bool)
10.1971 + (%x0::real.
10.1972 + (All::(real => bool) => bool)
10.1973 + (%c::real.
10.1974 + (op -->::bool => bool => bool)
10.1975 + ((sums::(nat => real) => real => bool) x x0)
10.1976 + ((sums::(nat => real) => real => bool)
10.1977 + (%n::nat. (op *::real => real => real) c (x n))
10.1978 + ((op *::real => real => real) c x0)))))"
10.1979 + by (import seq SER_CMUL)
10.1980 +
10.1981 +lemma SER_NEG: "(All::((nat => real) => bool) => bool)
10.1982 + (%x::nat => real.
10.1983 + (All::(real => bool) => bool)
10.1984 + (%x0::real.
10.1985 + (op -->::bool => bool => bool)
10.1986 + ((sums::(nat => real) => real => bool) x x0)
10.1987 + ((sums::(nat => real) => real => bool)
10.1988 + (%xa::nat. (uminus::real => real) (x xa))
10.1989 + ((uminus::real => real) x0))))"
10.1990 + by (import seq SER_NEG)
10.1991 +
10.1992 +lemma SER_SUB: "(All::((nat => real) => bool) => bool)
10.1993 + (%x::nat => real.
10.1994 + (All::(real => bool) => bool)
10.1995 + (%x0::real.
10.1996 + (All::((nat => real) => bool) => bool)
10.1997 + (%y::nat => real.
10.1998 + (All::(real => bool) => bool)
10.1999 + (%y0::real.
10.2000 + (op -->::bool => bool => bool)
10.2001 + ((op &::bool => bool => bool)
10.2002 + ((sums::(nat => real) => real => bool) x x0)
10.2003 + ((sums::(nat => real) => real => bool) y y0))
10.2004 + ((sums::(nat => real) => real => bool)
10.2005 + (%xa::nat.
10.2006 + (op -::real => real => real) (x xa) (y xa))
10.2007 + ((op -::real => real => real) x0 y0))))))"
10.2008 + by (import seq SER_SUB)
10.2009 +
10.2010 +lemma SER_CDIV: "(All::((nat => real) => bool) => bool)
10.2011 + (%x::nat => real.
10.2012 + (All::(real => bool) => bool)
10.2013 + (%x0::real.
10.2014 + (All::(real => bool) => bool)
10.2015 + (%c::real.
10.2016 + (op -->::bool => bool => bool)
10.2017 + ((sums::(nat => real) => real => bool) x x0)
10.2018 + ((sums::(nat => real) => real => bool)
10.2019 + (%xa::nat. (op /::real => real => real) (x xa) c)
10.2020 + ((op /::real => real => real) x0 c)))))"
10.2021 + by (import seq SER_CDIV)
10.2022 +
10.2023 +lemma SER_CAUCHY: "(All::((nat => real) => bool) => bool)
10.2024 + (%f::nat => real.
10.2025 + (op =::bool => bool => bool) ((summable::(nat => real) => bool) f)
10.2026 + ((All::(real => bool) => bool)
10.2027 + (%e::real.
10.2028 + (op -->::bool => bool => bool)
10.2029 + ((op <::real => real => bool) (0::real) e)
10.2030 + ((Ex::(nat => bool) => bool)
10.2031 + (%N::nat.
10.2032 + (All::(nat => bool) => bool)
10.2033 + (%m::nat.
10.2034 + (All::(nat => bool) => bool)
10.2035 + (%n::nat.
10.2036 + (op -->::bool => bool => bool)
10.2037 + ((op <=::nat => nat => bool) N m)
10.2038 + ((op <::real => real => bool)
10.2039 + ((abs::real => real)
10.2040 + ((real.sum::nat * nat
10.2041 + => (nat => real) => real)
10.2042 + ((Pair::nat => nat => nat * nat) m n)
10.2043 + f))
10.2044 + e))))))))"
10.2045 + by (import seq SER_CAUCHY)
10.2046 +
10.2047 +lemma SER_ZERO: "(All::((nat => real) => bool) => bool)
10.2048 + (%f::nat => real.
10.2049 + (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f)
10.2050 + ((-->::(nat => real) => real => bool) f (0::real)))"
10.2051 + by (import seq SER_ZERO)
10.2052 +
10.2053 +lemma SER_COMPAR: "(All::((nat => real) => bool) => bool)
10.2054 + (%f::nat => real.
10.2055 + (All::((nat => real) => bool) => bool)
10.2056 + (%g::nat => real.
10.2057 + (op -->::bool => bool => bool)
10.2058 + ((op &::bool => bool => bool)
10.2059 + ((Ex::(nat => bool) => bool)
10.2060 + (%x::nat.
10.2061 + (All::(nat => bool) => bool)
10.2062 + (%xa::nat.
10.2063 + (op -->::bool => bool => bool)
10.2064 + ((op <=::nat => nat => bool) x xa)
10.2065 + ((op <=::real => real => bool)
10.2066 + ((abs::real => real) (f xa)) (g xa)))))
10.2067 + ((summable::(nat => real) => bool) g))
10.2068 + ((summable::(nat => real) => bool) f)))"
10.2069 + by (import seq SER_COMPAR)
10.2070 +
10.2071 +lemma SER_COMPARA: "(All::((nat => real) => bool) => bool)
10.2072 + (%f::nat => real.
10.2073 + (All::((nat => real) => bool) => bool)
10.2074 + (%g::nat => real.
10.2075 + (op -->::bool => bool => bool)
10.2076 + ((op &::bool => bool => bool)
10.2077 + ((Ex::(nat => bool) => bool)
10.2078 + (%x::nat.
10.2079 + (All::(nat => bool) => bool)
10.2080 + (%xa::nat.
10.2081 + (op -->::bool => bool => bool)
10.2082 + ((op <=::nat => nat => bool) x xa)
10.2083 + ((op <=::real => real => bool)
10.2084 + ((abs::real => real) (f xa)) (g xa)))))
10.2085 + ((summable::(nat => real) => bool) g))
10.2086 + ((summable::(nat => real) => bool)
10.2087 + (%k::nat. (abs::real => real) (f k)))))"
10.2088 + by (import seq SER_COMPARA)
10.2089 +
10.2090 +lemma SER_LE: "(All::((nat => real) => bool) => bool)
10.2091 + (%f::nat => real.
10.2092 + (All::((nat => real) => bool) => bool)
10.2093 + (%g::nat => real.
10.2094 + (op -->::bool => bool => bool)
10.2095 + ((op &::bool => bool => bool)
10.2096 + ((All::(nat => bool) => bool)
10.2097 + (%n::nat. (op <=::real => real => bool) (f n) (g n)))
10.2098 + ((op &::bool => bool => bool)
10.2099 + ((summable::(nat => real) => bool) f)
10.2100 + ((summable::(nat => real) => bool) g)))
10.2101 + ((op <=::real => real => bool)
10.2102 + ((suminf::(nat => real) => real) f)
10.2103 + ((suminf::(nat => real) => real) g))))"
10.2104 + by (import seq SER_LE)
10.2105 +
10.2106 +lemma SER_LE2: "(All::((nat => real) => bool) => bool)
10.2107 + (%f::nat => real.
10.2108 + (All::((nat => real) => bool) => bool)
10.2109 + (%g::nat => real.
10.2110 + (op -->::bool => bool => bool)
10.2111 + ((op &::bool => bool => bool)
10.2112 + ((All::(nat => bool) => bool)
10.2113 + (%n::nat.
10.2114 + (op <=::real => real => bool) ((abs::real => real) (f n))
10.2115 + (g n)))
10.2116 + ((summable::(nat => real) => bool) g))
10.2117 + ((op &::bool => bool => bool)
10.2118 + ((summable::(nat => real) => bool) f)
10.2119 + ((op <=::real => real => bool)
10.2120 + ((suminf::(nat => real) => real) f)
10.2121 + ((suminf::(nat => real) => real) g)))))"
10.2122 + by (import seq SER_LE2)
10.2123 +
10.2124 +lemma SER_ACONV: "(All::((nat => real) => bool) => bool)
10.2125 + (%f::nat => real.
10.2126 + (op -->::bool => bool => bool)
10.2127 + ((summable::(nat => real) => bool)
10.2128 + (%n::nat. (abs::real => real) (f n)))
10.2129 + ((summable::(nat => real) => bool) f))"
10.2130 + by (import seq SER_ACONV)
10.2131 +
10.2132 +lemma SER_ABS: "(All::((nat => real) => bool) => bool)
10.2133 + (%f::nat => real.
10.2134 + (op -->::bool => bool => bool)
10.2135 + ((summable::(nat => real) => bool)
10.2136 + (%n::nat. (abs::real => real) (f n)))
10.2137 + ((op <=::real => real => bool)
10.2138 + ((abs::real => real) ((suminf::(nat => real) => real) f))
10.2139 + ((suminf::(nat => real) => real)
10.2140 + (%n::nat. (abs::real => real) (f n)))))"
10.2141 + by (import seq SER_ABS)
10.2142 +
10.2143 +lemma GP_FINITE: "(All::(real => bool) => bool)
10.2144 + (%x::real.
10.2145 + (op -->::bool => bool => bool)
10.2146 + ((Not::bool => bool) ((op =::real => real => bool) x (1::real)))
10.2147 + ((All::(nat => bool) => bool)
10.2148 + (%n::nat.
10.2149 + (op =::real => real => bool)
10.2150 + ((real.sum::nat * nat => (nat => real) => real)
10.2151 + ((Pair::nat => nat => nat * nat) (0::nat) n)
10.2152 + ((op ^::real => nat => real) x))
10.2153 + ((op /::real => real => real)
10.2154 + ((op -::real => real => real)
10.2155 + ((op ^::real => nat => real) x n) (1::real))
10.2156 + ((op -::real => real => real) x (1::real))))))"
10.2157 + by (import seq GP_FINITE)
10.2158 +
10.2159 +lemma GP: "(All::(real => bool) => bool)
10.2160 + (%x::real.
10.2161 + (op -->::bool => bool => bool)
10.2162 + ((op <::real => real => bool) ((abs::real => real) x) (1::real))
10.2163 + ((sums::(nat => real) => real => bool) ((op ^::real => nat => real) x)
10.2164 + ((inverse::real => real)
10.2165 + ((op -::real => real => real) (1::real) x))))"
10.2166 + by (import seq GP)
10.2167 +
10.2168 +lemma ABS_NEG_LEMMA: "(All::(real => bool) => bool)
10.2169 + (%c::real.
10.2170 + (op -->::bool => bool => bool)
10.2171 + ((op <=::real => real => bool) c (0::real))
10.2172 + ((All::(real => bool) => bool)
10.2173 + (%x::real.
10.2174 + (All::(real => bool) => bool)
10.2175 + (%y::real.
10.2176 + (op -->::bool => bool => bool)
10.2177 + ((op <=::real => real => bool) ((abs::real => real) x)
10.2178 + ((op *::real => real => real) c
10.2179 + ((abs::real => real) y)))
10.2180 + ((op =::real => real => bool) x (0::real))))))"
10.2181 + by (import seq ABS_NEG_LEMMA)
10.2182 +
10.2183 +lemma SER_RATIO: "(All::((nat => real) => bool) => bool)
10.2184 + (%f::nat => real.
10.2185 + (All::(real => bool) => bool)
10.2186 + (%c::real.
10.2187 + (All::(nat => bool) => bool)
10.2188 + (%N::nat.
10.2189 + (op -->::bool => bool => bool)
10.2190 + ((op &::bool => bool => bool)
10.2191 + ((op <::real => real => bool) c (1::real))
10.2192 + ((All::(nat => bool) => bool)
10.2193 + (%n::nat.
10.2194 + (op -->::bool => bool => bool)
10.2195 + ((op <=::nat => nat => bool) N n)
10.2196 + ((op <=::real => real => bool)
10.2197 + ((abs::real => real) (f ((Suc::nat => nat) n)))
10.2198 + ((op *::real => real => real) c
10.2199 + ((abs::real => real) (f n)))))))
10.2200 + ((summable::(nat => real) => bool) f))))"
10.2201 + by (import seq SER_RATIO)
10.2202 +
10.2203 +;end_setup
10.2204 +
10.2205 +;setup_theory lim
10.2206 +
10.2207 +constdefs
10.2208 + tends_real_real :: "(real => real) => real => real => bool"
10.2209 + "tends_real_real == %f l x0. tends f l (mtop mr1, tendsto (mr1, x0))"
10.2210 +
10.2211 +lemma tends_real_real: "ALL f l x0. tends_real_real f l x0 = tends f l (mtop mr1, tendsto (mr1, x0))"
10.2212 + by (import lim tends_real_real)
10.2213 +
10.2214 +lemma LIM: "(All::((real => real) => bool) => bool)
10.2215 + (%f::real => real.
10.2216 + (All::(real => bool) => bool)
10.2217 + (%y0::real.
10.2218 + (All::(real => bool) => bool)
10.2219 + (%x0::real.
10.2220 + (op =::bool => bool => bool)
10.2221 + ((tends_real_real::(real => real) => real => real => bool) f
10.2222 + y0 x0)
10.2223 + ((All::(real => bool) => bool)
10.2224 + (%e::real.
10.2225 + (op -->::bool => bool => bool)
10.2226 + ((op <::real => real => bool) (0::real) e)
10.2227 + ((Ex::(real => bool) => bool)
10.2228 + (%d::real.
10.2229 + (op &::bool => bool => bool)
10.2230 + ((op <::real => real => bool) (0::real) d)
10.2231 + ((All::(real => bool) => bool)
10.2232 + (%x::real.
10.2233 + (op -->::bool => bool => bool)
10.2234 + ((op &::bool => bool => bool)
10.2235 + ((op <::real => real => bool) (0::real)
10.2236 + ((abs::real => real) ((op -::real => real => real) x x0)))
10.2237 + ((op <::real => real => bool)
10.2238 + ((abs::real => real) ((op -::real => real => real) x x0)) d))
10.2239 + ((op <::real => real => bool)
10.2240 + ((abs::real => real) ((op -::real => real => real) (f x) y0)) e))))))))))"
10.2241 + by (import lim LIM)
10.2242 +
10.2243 +lemma LIM_CONST: "ALL k. All (tends_real_real (%x. k) k)"
10.2244 + by (import lim LIM_CONST)
10.2245 +
10.2246 +lemma LIM_ADD: "(All::((real => real) => bool) => bool)
10.2247 + (%f::real => real.
10.2248 + (All::((real => real) => bool) => bool)
10.2249 + (%g::real => real.
10.2250 + (All::(real => bool) => bool)
10.2251 + (%l::real.
10.2252 + (All::(real => bool) => bool)
10.2253 + (%m::real.
10.2254 + (All::(real => bool) => bool)
10.2255 + (%x::real.
10.2256 + (op -->::bool => bool => bool)
10.2257 + ((op &::bool => bool => bool)
10.2258 + ((tends_real_real::(real => real)
10.2259 + => real => real => bool)
10.2260 + f l x)
10.2261 + ((tends_real_real::(real => real)
10.2262 + => real => real => bool)
10.2263 + g m x))
10.2264 + ((tends_real_real::(real => real)
10.2265 + => real => real => bool)
10.2266 + (%x::real.
10.2267 + (op +::real => real => real) (f x) (g x))
10.2268 + ((op +::real => real => real) l m) x))))))"
10.2269 + by (import lim LIM_ADD)
10.2270 +
10.2271 +lemma LIM_MUL: "(All::((real => real) => bool) => bool)
10.2272 + (%f::real => real.
10.2273 + (All::((real => real) => bool) => bool)
10.2274 + (%g::real => real.
10.2275 + (All::(real => bool) => bool)
10.2276 + (%l::real.
10.2277 + (All::(real => bool) => bool)
10.2278 + (%m::real.
10.2279 + (All::(real => bool) => bool)
10.2280 + (%x::real.
10.2281 + (op -->::bool => bool => bool)
10.2282 + ((op &::bool => bool => bool)
10.2283 + ((tends_real_real::(real => real)
10.2284 + => real => real => bool)
10.2285 + f l x)
10.2286 + ((tends_real_real::(real => real)
10.2287 + => real => real => bool)
10.2288 + g m x))
10.2289 + ((tends_real_real::(real => real)
10.2290 + => real => real => bool)
10.2291 + (%x::real.
10.2292 + (op *::real => real => real) (f x) (g x))
10.2293 + ((op *::real => real => real) l m) x))))))"
10.2294 + by (import lim LIM_MUL)
10.2295 +
10.2296 +lemma LIM_NEG: "ALL f l x. tends_real_real f l x = tends_real_real (%x. - f x) (- l) x"
10.2297 + by (import lim LIM_NEG)
10.2298 +
10.2299 +lemma LIM_INV: "(All::((real => real) => bool) => bool)
10.2300 + (%f::real => real.
10.2301 + (All::(real => bool) => bool)
10.2302 + (%l::real.
10.2303 + (All::(real => bool) => bool)
10.2304 + (%x::real.
10.2305 + (op -->::bool => bool => bool)
10.2306 + ((op &::bool => bool => bool)
10.2307 + ((tends_real_real::(real => real) => real => real => bool)
10.2308 + f l x)
10.2309 + ((Not::bool => bool)
10.2310 + ((op =::real => real => bool) l (0::real))))
10.2311 + ((tends_real_real::(real => real) => real => real => bool)
10.2312 + (%x::real. (inverse::real => real) (f x))
10.2313 + ((inverse::real => real) l) x))))"
10.2314 + by (import lim LIM_INV)
10.2315 +
10.2316 +lemma LIM_SUB: "(All::((real => real) => bool) => bool)
10.2317 + (%f::real => real.
10.2318 + (All::((real => real) => bool) => bool)
10.2319 + (%g::real => real.
10.2320 + (All::(real => bool) => bool)
10.2321 + (%l::real.
10.2322 + (All::(real => bool) => bool)
10.2323 + (%m::real.
10.2324 + (All::(real => bool) => bool)
10.2325 + (%x::real.
10.2326 + (op -->::bool => bool => bool)
10.2327 + ((op &::bool => bool => bool)
10.2328 + ((tends_real_real::(real => real)
10.2329 + => real => real => bool)
10.2330 + f l x)
10.2331 + ((tends_real_real::(real => real)
10.2332 + => real => real => bool)
10.2333 + g m x))
10.2334 + ((tends_real_real::(real => real)
10.2335 + => real => real => bool)
10.2336 + (%x::real.
10.2337 + (op -::real => real => real) (f x) (g x))
10.2338 + ((op -::real => real => real) l m) x))))))"
10.2339 + by (import lim LIM_SUB)
10.2340 +
10.2341 +lemma LIM_DIV: "(All::((real => real) => bool) => bool)
10.2342 + (%f::real => real.
10.2343 + (All::((real => real) => bool) => bool)
10.2344 + (%g::real => real.
10.2345 + (All::(real => bool) => bool)
10.2346 + (%l::real.
10.2347 + (All::(real => bool) => bool)
10.2348 + (%m::real.
10.2349 + (All::(real => bool) => bool)
10.2350 + (%x::real.
10.2351 + (op -->::bool => bool => bool)
10.2352 + ((op &::bool => bool => bool)
10.2353 + ((tends_real_real::(real => real)
10.2354 + => real => real => bool)
10.2355 + f l x)
10.2356 + ((op &::bool => bool => bool)
10.2357 + ((tends_real_real::(real => real)
10.2358 + => real => real => bool)
10.2359 + g m x)
10.2360 + ((Not::bool => bool)
10.2361 + ((op =::real => real => bool) m
10.2362 + (0::real)))))
10.2363 + ((tends_real_real::(real => real)
10.2364 + => real => real => bool)
10.2365 + (%x::real.
10.2366 + (op /::real => real => real) (f x) (g x))
10.2367 + ((op /::real => real => real) l m) x))))))"
10.2368 + by (import lim LIM_DIV)
10.2369 +
10.2370 +lemma LIM_NULL: "ALL f l x. tends_real_real f l x = tends_real_real (%x. f x - l) 0 x"
10.2371 + by (import lim LIM_NULL)
10.2372 +
10.2373 +lemma LIM_X: "ALL x0. tends_real_real (%x. x) x0 x0"
10.2374 + by (import lim LIM_X)
10.2375 +
10.2376 +lemma LIM_UNIQ: "(All::((real => real) => bool) => bool)
10.2377 + (%f::real => real.
10.2378 + (All::(real => bool) => bool)
10.2379 + (%l::real.
10.2380 + (All::(real => bool) => bool)
10.2381 + (%m::real.
10.2382 + (All::(real => bool) => bool)
10.2383 + (%x::real.
10.2384 + (op -->::bool => bool => bool)
10.2385 + ((op &::bool => bool => bool)
10.2386 + ((tends_real_real::(real => real)
10.2387 + => real => real => bool)
10.2388 + f l x)
10.2389 + ((tends_real_real::(real => real)
10.2390 + => real => real => bool)
10.2391 + f m x))
10.2392 + ((op =::real => real => bool) l m)))))"
10.2393 + by (import lim LIM_UNIQ)
10.2394 +
10.2395 +lemma LIM_EQUAL: "(All::((real => real) => bool) => bool)
10.2396 + (%f::real => real.
10.2397 + (All::((real => real) => bool) => bool)
10.2398 + (%g::real => real.
10.2399 + (All::(real => bool) => bool)
10.2400 + (%l::real.
10.2401 + (All::(real => bool) => bool)
10.2402 + (%x0::real.
10.2403 + (op -->::bool => bool => bool)
10.2404 + ((All::(real => bool) => bool)
10.2405 + (%x::real.
10.2406 + (op -->::bool => bool => bool)
10.2407 + ((Not::bool => bool)
10.2408 + ((op =::real => real => bool) x x0))
10.2409 + ((op =::real => real => bool) (f x) (g x))))
10.2410 + ((op =::bool => bool => bool)
10.2411 + ((tends_real_real::(real => real)
10.2412 + => real => real => bool)
10.2413 + f l x0)
10.2414 + ((tends_real_real::(real => real)
10.2415 + => real => real => bool)
10.2416 + g l x0))))))"
10.2417 + by (import lim LIM_EQUAL)
10.2418 +
10.2419 +lemma LIM_TRANSFORM: "(All::((real => real) => bool) => bool)
10.2420 + (%f::real => real.
10.2421 + (All::((real => real) => bool) => bool)
10.2422 + (%g::real => real.
10.2423 + (All::(real => bool) => bool)
10.2424 + (%x0::real.
10.2425 + (All::(real => bool) => bool)
10.2426 + (%l::real.
10.2427 + (op -->::bool => bool => bool)
10.2428 + ((op &::bool => bool => bool)
10.2429 + ((tends_real_real::(real => real)
10.2430 + => real => real => bool)
10.2431 + (%x::real.
10.2432 + (op -::real => real => real) (f x) (g x))
10.2433 + (0::real) x0)
10.2434 + ((tends_real_real::(real => real)
10.2435 + => real => real => bool)
10.2436 + g l x0))
10.2437 + ((tends_real_real::(real => real)
10.2438 + => real => real => bool)
10.2439 + f l x0)))))"
10.2440 + by (import lim LIM_TRANSFORM)
10.2441 +
10.2442 +constdefs
10.2443 + diffl :: "(real => real) => real => real => bool"
10.2444 + "diffl == %f l x. tends_real_real (%h. (f (x + h) - f x) / h) l 0"
10.2445 +
10.2446 +lemma diffl: "ALL f l x. diffl f l x = tends_real_real (%h. (f (x + h) - f x) / h) l 0"
10.2447 + by (import lim diffl)
10.2448 +
10.2449 +constdefs
10.2450 + contl :: "(real => real) => real => bool"
10.2451 + "contl == %f x. tends_real_real (%h. f (x + h)) (f x) 0"
10.2452 +
10.2453 +lemma contl: "ALL f x. contl f x = tends_real_real (%h. f (x + h)) (f x) 0"
10.2454 + by (import lim contl)
10.2455 +
10.2456 +constdefs
10.2457 + differentiable :: "(real => real) => real => bool"
10.2458 + "differentiable == %f x. EX l. diffl f l x"
10.2459 +
10.2460 +lemma differentiable: "ALL f x. differentiable f x = (EX l. diffl f l x)"
10.2461 + by (import lim differentiable)
10.2462 +
10.2463 +lemma DIFF_UNIQ: "(All::((real => real) => bool) => bool)
10.2464 + (%f::real => real.
10.2465 + (All::(real => bool) => bool)
10.2466 + (%l::real.
10.2467 + (All::(real => bool) => bool)
10.2468 + (%m::real.
10.2469 + (All::(real => bool) => bool)
10.2470 + (%x::real.
10.2471 + (op -->::bool => bool => bool)
10.2472 + ((op &::bool => bool => bool)
10.2473 + ((diffl::(real => real) => real => real => bool) f l
10.2474 + x)
10.2475 + ((diffl::(real => real) => real => real => bool) f m
10.2476 + x))
10.2477 + ((op =::real => real => bool) l m)))))"
10.2478 + by (import lim DIFF_UNIQ)
10.2479 +
10.2480 +lemma DIFF_CONT: "(All::((real => real) => bool) => bool)
10.2481 + (%f::real => real.
10.2482 + (All::(real => bool) => bool)
10.2483 + (%l::real.
10.2484 + (All::(real => bool) => bool)
10.2485 + (%x::real.
10.2486 + (op -->::bool => bool => bool)
10.2487 + ((diffl::(real => real) => real => real => bool) f l x)
10.2488 + ((contl::(real => real) => real => bool) f x))))"
10.2489 + by (import lim DIFF_CONT)
10.2490 +
10.2491 +lemma CONTL_LIM: "ALL f x. contl f x = tends_real_real f (f x) x"
10.2492 + by (import lim CONTL_LIM)
10.2493 +
10.2494 +lemma DIFF_CARAT: "ALL f l x.
10.2495 + diffl f l x =
10.2496 + (EX g. (ALL z. f z - f x = g z * (z - x)) & contl g x & g x = l)"
10.2497 + by (import lim DIFF_CARAT)
10.2498 +
10.2499 +lemma CONT_CONST: "ALL k. All (contl (%x. k))"
10.2500 + by (import lim CONT_CONST)
10.2501 +
10.2502 +lemma CONT_ADD: "(All::((real => real) => bool) => bool)
10.2503 + (%f::real => real.
10.2504 + (All::((real => real) => bool) => bool)
10.2505 + (%g::real => real.
10.2506 + (All::(real => bool) => bool)
10.2507 + (%x::real.
10.2508 + (op -->::bool => bool => bool)
10.2509 + ((op &::bool => bool => bool)
10.2510 + ((contl::(real => real) => real => bool) f x)
10.2511 + ((contl::(real => real) => real => bool) g x))
10.2512 + ((contl::(real => real) => real => bool)
10.2513 + (%x::real. (op +::real => real => real) (f x) (g x)) x))))"
10.2514 + by (import lim CONT_ADD)
10.2515 +
10.2516 +lemma CONT_MUL: "(All::((real => real) => bool) => bool)
10.2517 + (%f::real => real.
10.2518 + (All::((real => real) => bool) => bool)
10.2519 + (%g::real => real.
10.2520 + (All::(real => bool) => bool)
10.2521 + (%x::real.
10.2522 + (op -->::bool => bool => bool)
10.2523 + ((op &::bool => bool => bool)
10.2524 + ((contl::(real => real) => real => bool) f x)
10.2525 + ((contl::(real => real) => real => bool) g x))
10.2526 + ((contl::(real => real) => real => bool)
10.2527 + (%x::real. (op *::real => real => real) (f x) (g x)) x))))"
10.2528 + by (import lim CONT_MUL)
10.2529 +
10.2530 +lemma CONT_NEG: "(All::((real => real) => bool) => bool)
10.2531 + (%f::real => real.
10.2532 + (All::(real => bool) => bool)
10.2533 + (%x::real.
10.2534 + (op -->::bool => bool => bool)
10.2535 + ((contl::(real => real) => real => bool) f x)
10.2536 + ((contl::(real => real) => real => bool)
10.2537 + (%x::real. (uminus::real => real) (f x)) x)))"
10.2538 + by (import lim CONT_NEG)
10.2539 +
10.2540 +lemma CONT_INV: "(All::((real => real) => bool) => bool)
10.2541 + (%f::real => real.
10.2542 + (All::(real => bool) => bool)
10.2543 + (%x::real.
10.2544 + (op -->::bool => bool => bool)
10.2545 + ((op &::bool => bool => bool)
10.2546 + ((contl::(real => real) => real => bool) f x)
10.2547 + ((Not::bool => bool)
10.2548 + ((op =::real => real => bool) (f x) (0::real))))
10.2549 + ((contl::(real => real) => real => bool)
10.2550 + (%x::real. (inverse::real => real) (f x)) x)))"
10.2551 + by (import lim CONT_INV)
10.2552 +
10.2553 +lemma CONT_SUB: "(All::((real => real) => bool) => bool)
10.2554 + (%f::real => real.
10.2555 + (All::((real => real) => bool) => bool)
10.2556 + (%g::real => real.
10.2557 + (All::(real => bool) => bool)
10.2558 + (%x::real.
10.2559 + (op -->::bool => bool => bool)
10.2560 + ((op &::bool => bool => bool)
10.2561 + ((contl::(real => real) => real => bool) f x)
10.2562 + ((contl::(real => real) => real => bool) g x))
10.2563 + ((contl::(real => real) => real => bool)
10.2564 + (%x::real. (op -::real => real => real) (f x) (g x)) x))))"
10.2565 + by (import lim CONT_SUB)
10.2566 +
10.2567 +lemma CONT_DIV: "(All::((real => real) => bool) => bool)
10.2568 + (%f::real => real.
10.2569 + (All::((real => real) => bool) => bool)
10.2570 + (%g::real => real.
10.2571 + (All::(real => bool) => bool)
10.2572 + (%x::real.
10.2573 + (op -->::bool => bool => bool)
10.2574 + ((op &::bool => bool => bool)
10.2575 + ((contl::(real => real) => real => bool) f x)
10.2576 + ((op &::bool => bool => bool)
10.2577 + ((contl::(real => real) => real => bool) g x)
10.2578 + ((Not::bool => bool)
10.2579 + ((op =::real => real => bool) (g x) (0::real)))))
10.2580 + ((contl::(real => real) => real => bool)
10.2581 + (%x::real. (op /::real => real => real) (f x) (g x)) x))))"
10.2582 + by (import lim CONT_DIV)
10.2583 +
10.2584 +lemma CONT_COMPOSE: "(All::((real => real) => bool) => bool)
10.2585 + (%f::real => real.
10.2586 + (All::((real => real) => bool) => bool)
10.2587 + (%g::real => real.
10.2588 + (All::(real => bool) => bool)
10.2589 + (%x::real.
10.2590 + (op -->::bool => bool => bool)
10.2591 + ((op &::bool => bool => bool)
10.2592 + ((contl::(real => real) => real => bool) f x)
10.2593 + ((contl::(real => real) => real => bool) g (f x)))
10.2594 + ((contl::(real => real) => real => bool) (%x::real. g (f x))
10.2595 + x))))"
10.2596 + by (import lim CONT_COMPOSE)
10.2597 +
10.2598 +lemma IVT: "(All::((real => real) => bool) => bool)
10.2599 + (%f::real => real.
10.2600 + (All::(real => bool) => bool)
10.2601 + (%a::real.
10.2602 + (All::(real => bool) => bool)
10.2603 + (%b::real.
10.2604 + (All::(real => bool) => bool)
10.2605 + (%y::real.
10.2606 + (op -->::bool => bool => bool)
10.2607 + ((op &::bool => bool => bool)
10.2608 + ((op <=::real => real => bool) a b)
10.2609 + ((op &::bool => bool => bool)
10.2610 + ((op &::bool => bool => bool)
10.2611 + ((op <=::real => real => bool) (f a) y)
10.2612 + ((op <=::real => real => bool) y (f b)))
10.2613 + ((All::(real => bool) => bool)
10.2614 + (%x::real.
10.2615 + (op -->::bool => bool => bool)
10.2616 + ((op &::bool => bool => bool)
10.2617 + ((op <=::real => real => bool) a x)
10.2618 + ((op <=::real => real => bool) x b))
10.2619 + ((contl::(real => real) => real => bool) f
10.2620 + x)))))
10.2621 + ((Ex::(real => bool) => bool)
10.2622 + (%x::real.
10.2623 + (op &::bool => bool => bool)
10.2624 + ((op <=::real => real => bool) a x)
10.2625 + ((op &::bool => bool => bool)
10.2626 + ((op <=::real => real => bool) x b)
10.2627 + ((op =::real => real => bool) (f x) y))))))))"
10.2628 + by (import lim IVT)
10.2629 +
10.2630 +lemma IVT2: "(All::((real => real) => bool) => bool)
10.2631 + (%f::real => real.
10.2632 + (All::(real => bool) => bool)
10.2633 + (%a::real.
10.2634 + (All::(real => bool) => bool)
10.2635 + (%b::real.
10.2636 + (All::(real => bool) => bool)
10.2637 + (%y::real.
10.2638 + (op -->::bool => bool => bool)
10.2639 + ((op &::bool => bool => bool)
10.2640 + ((op <=::real => real => bool) a b)
10.2641 + ((op &::bool => bool => bool)
10.2642 + ((op &::bool => bool => bool)
10.2643 + ((op <=::real => real => bool) (f b) y)
10.2644 + ((op <=::real => real => bool) y (f a)))
10.2645 + ((All::(real => bool) => bool)
10.2646 + (%x::real.
10.2647 + (op -->::bool => bool => bool)
10.2648 + ((op &::bool => bool => bool)
10.2649 + ((op <=::real => real => bool) a x)
10.2650 + ((op <=::real => real => bool) x b))
10.2651 + ((contl::(real => real) => real => bool) f
10.2652 + x)))))
10.2653 + ((Ex::(real => bool) => bool)
10.2654 + (%x::real.
10.2655 + (op &::bool => bool => bool)
10.2656 + ((op <=::real => real => bool) a x)
10.2657 + ((op &::bool => bool => bool)
10.2658 + ((op <=::real => real => bool) x b)
10.2659 + ((op =::real => real => bool) (f x) y))))))))"
10.2660 + by (import lim IVT2)
10.2661 +
10.2662 +lemma DIFF_CONST: "ALL k. All (diffl (%x. k) 0)"
10.2663 + by (import lim DIFF_CONST)
10.2664 +
10.2665 +lemma DIFF_ADD: "(All::((real => real) => bool) => bool)
10.2666 + (%f::real => real.
10.2667 + (All::((real => real) => bool) => bool)
10.2668 + (%g::real => real.
10.2669 + (All::(real => bool) => bool)
10.2670 + (%l::real.
10.2671 + (All::(real => bool) => bool)
10.2672 + (%m::real.
10.2673 + (All::(real => bool) => bool)
10.2674 + (%x::real.
10.2675 + (op -->::bool => bool => bool)
10.2676 + ((op &::bool => bool => bool)
10.2677 + ((diffl::(real => real) => real => real => bool)
10.2678 + f l x)
10.2679 + ((diffl::(real => real) => real => real => bool)
10.2680 + g m x))
10.2681 + ((diffl::(real => real) => real => real => bool)
10.2682 + (%x::real.
10.2683 + (op +::real => real => real) (f x) (g x))
10.2684 + ((op +::real => real => real) l m) x))))))"
10.2685 + by (import lim DIFF_ADD)
10.2686 +
10.2687 +lemma DIFF_MUL: "(All::((real => real) => bool) => bool)
10.2688 + (%f::real => real.
10.2689 + (All::((real => real) => bool) => bool)
10.2690 + (%g::real => real.
10.2691 + (All::(real => bool) => bool)
10.2692 + (%l::real.
10.2693 + (All::(real => bool) => bool)
10.2694 + (%m::real.
10.2695 + (All::(real => bool) => bool)
10.2696 + (%x::real.
10.2697 + (op -->::bool => bool => bool)
10.2698 + ((op &::bool => bool => bool)
10.2699 + ((diffl::(real => real) => real => real => bool)
10.2700 + f l x)
10.2701 + ((diffl::(real => real) => real => real => bool)
10.2702 + g m x))
10.2703 + ((diffl::(real => real) => real => real => bool)
10.2704 + (%x::real.
10.2705 + (op *::real => real => real) (f x) (g x))
10.2706 + ((op +::real => real => real)
10.2707 + ((op *::real => real => real) l (g x))
10.2708 + ((op *::real => real => real) m (f x)))
10.2709 + x))))))"
10.2710 + by (import lim DIFF_MUL)
10.2711 +
10.2712 +lemma DIFF_CMUL: "(All::((real => real) => bool) => bool)
10.2713 + (%f::real => real.
10.2714 + (All::(real => bool) => bool)
10.2715 + (%c::real.
10.2716 + (All::(real => bool) => bool)
10.2717 + (%l::real.
10.2718 + (All::(real => bool) => bool)
10.2719 + (%x::real.
10.2720 + (op -->::bool => bool => bool)
10.2721 + ((diffl::(real => real) => real => real => bool) f l x)
10.2722 + ((diffl::(real => real) => real => real => bool)
10.2723 + (%x::real. (op *::real => real => real) c (f x))
10.2724 + ((op *::real => real => real) c l) x)))))"
10.2725 + by (import lim DIFF_CMUL)
10.2726 +
10.2727 +lemma DIFF_NEG: "(All::((real => real) => bool) => bool)
10.2728 + (%f::real => real.
10.2729 + (All::(real => bool) => bool)
10.2730 + (%l::real.
10.2731 + (All::(real => bool) => bool)
10.2732 + (%x::real.
10.2733 + (op -->::bool => bool => bool)
10.2734 + ((diffl::(real => real) => real => real => bool) f l x)
10.2735 + ((diffl::(real => real) => real => real => bool)
10.2736 + (%x::real. (uminus::real => real) (f x))
10.2737 + ((uminus::real => real) l) x))))"
10.2738 + by (import lim DIFF_NEG)
10.2739 +
10.2740 +lemma DIFF_SUB: "(All::((real => real) => bool) => bool)
10.2741 + (%f::real => real.
10.2742 + (All::((real => real) => bool) => bool)
10.2743 + (%g::real => real.
10.2744 + (All::(real => bool) => bool)
10.2745 + (%l::real.
10.2746 + (All::(real => bool) => bool)
10.2747 + (%m::real.
10.2748 + (All::(real => bool) => bool)
10.2749 + (%x::real.
10.2750 + (op -->::bool => bool => bool)
10.2751 + ((op &::bool => bool => bool)
10.2752 + ((diffl::(real => real) => real => real => bool)
10.2753 + f l x)
10.2754 + ((diffl::(real => real) => real => real => bool)
10.2755 + g m x))
10.2756 + ((diffl::(real => real) => real => real => bool)
10.2757 + (%x::real.
10.2758 + (op -::real => real => real) (f x) (g x))
10.2759 + ((op -::real => real => real) l m) x))))))"
10.2760 + by (import lim DIFF_SUB)
10.2761 +
10.2762 +lemma DIFF_CHAIN: "(All::((real => real) => bool) => bool)
10.2763 + (%f::real => real.
10.2764 + (All::((real => real) => bool) => bool)
10.2765 + (%g::real => real.
10.2766 + (All::(real => bool) => bool)
10.2767 + (%l::real.
10.2768 + (All::(real => bool) => bool)
10.2769 + (%m::real.
10.2770 + (All::(real => bool) => bool)
10.2771 + (%x::real.
10.2772 + (op -->::bool => bool => bool)
10.2773 + ((op &::bool => bool => bool)
10.2774 + ((diffl::(real => real) => real => real => bool)
10.2775 + f l (g x))
10.2776 + ((diffl::(real => real) => real => real => bool)
10.2777 + g m x))
10.2778 + ((diffl::(real => real) => real => real => bool)
10.2779 + (%x::real. f (g x))
10.2780 + ((op *::real => real => real) l m) x))))))"
10.2781 + by (import lim DIFF_CHAIN)
10.2782 +
10.2783 +lemma DIFF_X: "All (diffl (%x. x) 1)"
10.2784 + by (import lim DIFF_X)
10.2785 +
10.2786 +lemma DIFF_POW: "ALL n x. diffl (%x. x ^ n) (real n * x ^ (n - 1)) x"
10.2787 + by (import lim DIFF_POW)
10.2788 +
10.2789 +lemma DIFF_XM1: "(All::(real => bool) => bool)
10.2790 + (%x::real.
10.2791 + (op -->::bool => bool => bool)
10.2792 + ((Not::bool => bool) ((op =::real => real => bool) x (0::real)))
10.2793 + ((diffl::(real => real) => real => real => bool)
10.2794 + (inverse::real => real)
10.2795 + ((uminus::real => real)
10.2796 + ((op ^::real => nat => real) ((inverse::real => real) x)
10.2797 + ((number_of::bin => nat)
10.2798 + ((op BIT::bin => bool => bin)
10.2799 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.2800 + (False::bool)))))
10.2801 + x))"
10.2802 + by (import lim DIFF_XM1)
10.2803 +
10.2804 +lemma DIFF_INV: "(All::((real => real) => bool) => bool)
10.2805 + (%f::real => real.
10.2806 + (All::(real => bool) => bool)
10.2807 + (%l::real.
10.2808 + (All::(real => bool) => bool)
10.2809 + (%x::real.
10.2810 + (op -->::bool => bool => bool)
10.2811 + ((op &::bool => bool => bool)
10.2812 + ((diffl::(real => real) => real => real => bool) f l x)
10.2813 + ((Not::bool => bool)
10.2814 + ((op =::real => real => bool) (f x) (0::real))))
10.2815 + ((diffl::(real => real) => real => real => bool)
10.2816 + (%x::real. (inverse::real => real) (f x))
10.2817 + ((uminus::real => real)
10.2818 + ((op /::real => real => real) l
10.2819 + ((op ^::real => nat => real) (f x)
10.2820 + ((number_of::bin => nat)
10.2821 + ((op BIT::bin => bool => bin)
10.2822 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.2823 + (True::bool))
10.2824 + (False::bool))))))
10.2825 + x))))"
10.2826 + by (import lim DIFF_INV)
10.2827 +
10.2828 +lemma DIFF_DIV: "(All::((real => real) => bool) => bool)
10.2829 + (%f::real => real.
10.2830 + (All::((real => real) => bool) => bool)
10.2831 + (%g::real => real.
10.2832 + (All::(real => bool) => bool)
10.2833 + (%l::real.
10.2834 + (All::(real => bool) => bool)
10.2835 + (%m::real.
10.2836 + (All::(real => bool) => bool)
10.2837 + (%x::real.
10.2838 + (op -->::bool => bool => bool)
10.2839 + ((op &::bool => bool => bool)
10.2840 + ((diffl::(real => real) => real => real => bool)
10.2841 + f l x)
10.2842 + ((op &::bool => bool => bool)
10.2843 + ((diffl::(real => real)
10.2844 + => real => real => bool)
10.2845 + g m x)
10.2846 + ((Not::bool => bool)
10.2847 + ((op =::real => real => bool) (g x)
10.2848 + (0::real)))))
10.2849 + ((diffl::(real => real) => real => real => bool)
10.2850 + (%x::real.
10.2851 + (op /::real => real => real) (f x) (g x))
10.2852 + ((op /::real => real => real)
10.2853 + ((op -::real => real => real)
10.2854 + ((op *::real => real => real) l (g x))
10.2855 + ((op *::real => real => real) m (f x)))
10.2856 + ((op ^::real => nat => real) (g x)
10.2857 + ((number_of::bin => nat)
10.2858 + ((op BIT::bin => bool => bin)
10.2859 + ((op BIT::bin => bool => bin)
10.2860 +(bin.Pls::bin) (True::bool))
10.2861 + (False::bool)))))
10.2862 + x))))))"
10.2863 + by (import lim DIFF_DIV)
10.2864 +
10.2865 +lemma DIFF_SUM: "(All::((nat => real => real) => bool) => bool)
10.2866 + (%f::nat => real => real.
10.2867 + (All::((nat => real => real) => bool) => bool)
10.2868 + (%f'::nat => real => real.
10.2869 + (All::(nat => bool) => bool)
10.2870 + (%m::nat.
10.2871 + (All::(nat => bool) => bool)
10.2872 + (%n::nat.
10.2873 + (All::(real => bool) => bool)
10.2874 + (%x::real.
10.2875 + (op -->::bool => bool => bool)
10.2876 + ((All::(nat => bool) => bool)
10.2877 + (%r::nat.
10.2878 + (op -->::bool => bool => bool)
10.2879 + ((op &::bool => bool => bool)
10.2880 + ((op <=::nat => nat => bool) m r)
10.2881 + ((op <::nat => nat => bool) r
10.2882 + ((op +::nat => nat => nat) m n)))
10.2883 + ((diffl::(real => real)
10.2884 + => real => real => bool)
10.2885 + (f r) (f' r x) x)))
10.2886 + ((diffl::(real => real) => real => real => bool)
10.2887 + (%x::real.
10.2888 + (real.sum::nat * nat
10.2889 + => (nat => real) => real)
10.2890 + ((Pair::nat => nat => nat * nat) m n)
10.2891 + (%n::nat. f n x))
10.2892 + ((real.sum::nat * nat => (nat => real) => real)
10.2893 + ((Pair::nat => nat => nat * nat) m n)
10.2894 + (%r::nat. f' r x))
10.2895 + x))))))"
10.2896 + by (import lim DIFF_SUM)
10.2897 +
10.2898 +lemma CONT_BOUNDED: "(All::((real => real) => bool) => bool)
10.2899 + (%f::real => real.
10.2900 + (All::(real => bool) => bool)
10.2901 + (%a::real.
10.2902 + (All::(real => bool) => bool)
10.2903 + (%b::real.
10.2904 + (op -->::bool => bool => bool)
10.2905 + ((op &::bool => bool => bool)
10.2906 + ((op <=::real => real => bool) a b)
10.2907 + ((All::(real => bool) => bool)
10.2908 + (%x::real.
10.2909 + (op -->::bool => bool => bool)
10.2910 + ((op &::bool => bool => bool)
10.2911 + ((op <=::real => real => bool) a x)
10.2912 + ((op <=::real => real => bool) x b))
10.2913 + ((contl::(real => real) => real => bool) f x))))
10.2914 + ((Ex::(real => bool) => bool)
10.2915 + (%M::real.
10.2916 + (All::(real => bool) => bool)
10.2917 + (%x::real.
10.2918 + (op -->::bool => bool => bool)
10.2919 + ((op &::bool => bool => bool)
10.2920 + ((op <=::real => real => bool) a x)
10.2921 + ((op <=::real => real => bool) x b))
10.2922 + ((op <=::real => real => bool) (f x) M)))))))"
10.2923 + by (import lim CONT_BOUNDED)
10.2924 +
10.2925 +lemma CONT_HASSUP: "(All::((real => real) => bool) => bool)
10.2926 + (%f::real => real.
10.2927 + (All::(real => bool) => bool)
10.2928 + (%a::real.
10.2929 + (All::(real => bool) => bool)
10.2930 + (%b::real.
10.2931 + (op -->::bool => bool => bool)
10.2932 + ((op &::bool => bool => bool)
10.2933 + ((op <=::real => real => bool) a b)
10.2934 + ((All::(real => bool) => bool)
10.2935 + (%x::real.
10.2936 + (op -->::bool => bool => bool)
10.2937 + ((op &::bool => bool => bool)
10.2938 + ((op <=::real => real => bool) a x)
10.2939 + ((op <=::real => real => bool) x b))
10.2940 + ((contl::(real => real) => real => bool) f x))))
10.2941 + ((Ex::(real => bool) => bool)
10.2942 + (%M::real.
10.2943 + (op &::bool => bool => bool)
10.2944 + ((All::(real => bool) => bool)
10.2945 + (%x::real.
10.2946 + (op -->::bool => bool => bool)
10.2947 + ((op &::bool => bool => bool)
10.2948 + ((op <=::real => real => bool) a x)
10.2949 + ((op <=::real => real => bool) x b))
10.2950 + ((op <=::real => real => bool) (f x) M)))
10.2951 + ((All::(real => bool) => bool)
10.2952 + (%N::real.
10.2953 + (op -->::bool => bool => bool)
10.2954 + ((op <::real => real => bool) N M)
10.2955 + ((Ex::(real => bool) => bool)
10.2956 + (%x::real.
10.2957 + (op &::bool => bool => bool)
10.2958 + ((op <=::real => real => bool) a x)
10.2959 + ((op &::bool => bool => bool)
10.2960 + ((op <=::real => real => bool) x b)
10.2961 + ((op <::real => real => bool) N (f x))))))))))))"
10.2962 + by (import lim CONT_HASSUP)
10.2963 +
10.2964 +lemma CONT_ATTAINS: "(All::((real => real) => bool) => bool)
10.2965 + (%f::real => real.
10.2966 + (All::(real => bool) => bool)
10.2967 + (%a::real.
10.2968 + (All::(real => bool) => bool)
10.2969 + (%b::real.
10.2970 + (op -->::bool => bool => bool)
10.2971 + ((op &::bool => bool => bool)
10.2972 + ((op <=::real => real => bool) a b)
10.2973 + ((All::(real => bool) => bool)
10.2974 + (%x::real.
10.2975 + (op -->::bool => bool => bool)
10.2976 + ((op &::bool => bool => bool)
10.2977 + ((op <=::real => real => bool) a x)
10.2978 + ((op <=::real => real => bool) x b))
10.2979 + ((contl::(real => real) => real => bool) f x))))
10.2980 + ((Ex::(real => bool) => bool)
10.2981 + (%x::real.
10.2982 + (op &::bool => bool => bool)
10.2983 + ((All::(real => bool) => bool)
10.2984 + (%xa::real.
10.2985 + (op -->::bool => bool => bool)
10.2986 + ((op &::bool => bool => bool)
10.2987 + ((op <=::real => real => bool) a xa)
10.2988 + ((op <=::real => real => bool) xa b))
10.2989 + ((op <=::real => real => bool) (f xa) x)))
10.2990 + ((Ex::(real => bool) => bool)
10.2991 + (%xa::real.
10.2992 + (op &::bool => bool => bool)
10.2993 + ((op <=::real => real => bool) a xa)
10.2994 + ((op &::bool => bool => bool)
10.2995 + ((op <=::real => real => bool) xa b)
10.2996 + ((op =::real => real => bool) (f xa)
10.2997 + x)))))))))"
10.2998 + by (import lim CONT_ATTAINS)
10.2999 +
10.3000 +lemma CONT_ATTAINS2: "(All::((real => real) => bool) => bool)
10.3001 + (%f::real => real.
10.3002 + (All::(real => bool) => bool)
10.3003 + (%a::real.
10.3004 + (All::(real => bool) => bool)
10.3005 + (%b::real.
10.3006 + (op -->::bool => bool => bool)
10.3007 + ((op &::bool => bool => bool)
10.3008 + ((op <=::real => real => bool) a b)
10.3009 + ((All::(real => bool) => bool)
10.3010 + (%x::real.
10.3011 + (op -->::bool => bool => bool)
10.3012 + ((op &::bool => bool => bool)
10.3013 + ((op <=::real => real => bool) a x)
10.3014 + ((op <=::real => real => bool) x b))
10.3015 + ((contl::(real => real) => real => bool) f x))))
10.3016 + ((Ex::(real => bool) => bool)
10.3017 + (%x::real.
10.3018 + (op &::bool => bool => bool)
10.3019 + ((All::(real => bool) => bool)
10.3020 + (%xa::real.
10.3021 + (op -->::bool => bool => bool)
10.3022 + ((op &::bool => bool => bool)
10.3023 + ((op <=::real => real => bool) a xa)
10.3024 + ((op <=::real => real => bool) xa b))
10.3025 + ((op <=::real => real => bool) x (f xa))))
10.3026 + ((Ex::(real => bool) => bool)
10.3027 + (%xa::real.
10.3028 + (op &::bool => bool => bool)
10.3029 + ((op <=::real => real => bool) a xa)
10.3030 + ((op &::bool => bool => bool)
10.3031 + ((op <=::real => real => bool) xa b)
10.3032 + ((op =::real => real => bool) (f xa)
10.3033 + x)))))))))"
10.3034 + by (import lim CONT_ATTAINS2)
10.3035 +
10.3036 +lemma CONT_ATTAINS_ALL: "(All::((real => real) => bool) => bool)
10.3037 + (%f::real => real.
10.3038 + (All::(real => bool) => bool)
10.3039 + (%a::real.
10.3040 + (All::(real => bool) => bool)
10.3041 + (%b::real.
10.3042 + (op -->::bool => bool => bool)
10.3043 + ((op &::bool => bool => bool)
10.3044 + ((op <=::real => real => bool) a b)
10.3045 + ((All::(real => bool) => bool)
10.3046 + (%x::real.
10.3047 + (op -->::bool => bool => bool)
10.3048 + ((op &::bool => bool => bool)
10.3049 + ((op <=::real => real => bool) a x)
10.3050 + ((op <=::real => real => bool) x b))
10.3051 + ((contl::(real => real) => real => bool) f x))))
10.3052 + ((Ex::(real => bool) => bool)
10.3053 + (%x::real.
10.3054 + (Ex::(real => bool) => bool)
10.3055 + (%M::real.
10.3056 + (op &::bool => bool => bool)
10.3057 + ((op <=::real => real => bool) x M)
10.3058 + ((op &::bool => bool => bool)
10.3059 + ((All::(real => bool) => bool)
10.3060 + (%y::real.
10.3061 + (op -->::bool => bool => bool)
10.3062 + ((op &::bool => bool => bool)
10.3063 + ((op <=::real => real => bool) x y) ((op <=::real => real => bool) y M))
10.3064 + ((Ex::(real => bool) => bool)
10.3065 + (%x::real.
10.3066 + (op &::bool => bool => bool) ((op <=::real => real => bool) a x)
10.3067 + ((op &::bool => bool => bool) ((op <=::real => real => bool) x b)
10.3068 + ((op =::real => real => bool) (f x) y))))))
10.3069 + ((All::(real => bool) => bool)
10.3070 + (%xa::real.
10.3071 + (op -->::bool => bool => bool)
10.3072 + ((op &::bool => bool => bool)
10.3073 + ((op <=::real => real => bool) a xa) ((op <=::real => real => bool) xa b))
10.3074 + ((op &::bool => bool => bool)
10.3075 + ((op <=::real => real => bool) x (f xa))
10.3076 + ((op <=::real => real => bool) (f xa) M)))))))))))"
10.3077 + by (import lim CONT_ATTAINS_ALL)
10.3078 +
10.3079 +lemma DIFF_LINC: "(All::((real => real) => bool) => bool)
10.3080 + (%f::real => real.
10.3081 + (All::(real => bool) => bool)
10.3082 + (%x::real.
10.3083 + (All::(real => bool) => bool)
10.3084 + (%l::real.
10.3085 + (op -->::bool => bool => bool)
10.3086 + ((op &::bool => bool => bool)
10.3087 + ((diffl::(real => real) => real => real => bool) f l x)
10.3088 + ((op <::real => real => bool) (0::real) l))
10.3089 + ((Ex::(real => bool) => bool)
10.3090 + (%d::real.
10.3091 + (op &::bool => bool => bool)
10.3092 + ((op <::real => real => bool) (0::real) d)
10.3093 + ((All::(real => bool) => bool)
10.3094 + (%h::real.
10.3095 + (op -->::bool => bool => bool)
10.3096 + ((op &::bool => bool => bool)
10.3097 + ((op <::real => real => bool) (0::real) h)
10.3098 + ((op <::real => real => bool) h d))
10.3099 + ((op <::real => real => bool) (f x)
10.3100 + (f ((op +::real => real => real) x
10.3101 + h))))))))))"
10.3102 + by (import lim DIFF_LINC)
10.3103 +
10.3104 +lemma DIFF_LDEC: "(All::((real => real) => bool) => bool)
10.3105 + (%f::real => real.
10.3106 + (All::(real => bool) => bool)
10.3107 + (%x::real.
10.3108 + (All::(real => bool) => bool)
10.3109 + (%l::real.
10.3110 + (op -->::bool => bool => bool)
10.3111 + ((op &::bool => bool => bool)
10.3112 + ((diffl::(real => real) => real => real => bool) f l x)
10.3113 + ((op <::real => real => bool) l (0::real)))
10.3114 + ((Ex::(real => bool) => bool)
10.3115 + (%d::real.
10.3116 + (op &::bool => bool => bool)
10.3117 + ((op <::real => real => bool) (0::real) d)
10.3118 + ((All::(real => bool) => bool)
10.3119 + (%h::real.
10.3120 + (op -->::bool => bool => bool)
10.3121 + ((op &::bool => bool => bool)
10.3122 + ((op <::real => real => bool) (0::real) h)
10.3123 + ((op <::real => real => bool) h d))
10.3124 + ((op <::real => real => bool) (f x)
10.3125 + (f ((op -::real => real => real) x
10.3126 + h))))))))))"
10.3127 + by (import lim DIFF_LDEC)
10.3128 +
10.3129 +lemma DIFF_LMAX: "(All::((real => real) => bool) => bool)
10.3130 + (%f::real => real.
10.3131 + (All::(real => bool) => bool)
10.3132 + (%x::real.
10.3133 + (All::(real => bool) => bool)
10.3134 + (%l::real.
10.3135 + (op -->::bool => bool => bool)
10.3136 + ((op &::bool => bool => bool)
10.3137 + ((diffl::(real => real) => real => real => bool) f l x)
10.3138 + ((Ex::(real => bool) => bool)
10.3139 + (%d::real.
10.3140 + (op &::bool => bool => bool)
10.3141 + ((op <::real => real => bool) (0::real) d)
10.3142 + ((All::(real => bool) => bool)
10.3143 + (%y::real.
10.3144 + (op -->::bool => bool => bool)
10.3145 + ((op <::real => real => bool)
10.3146 + ((abs::real => real)
10.3147 + ((op -::real => real => real) x y))
10.3148 + d)
10.3149 + ((op <=::real => real => bool) (f y)
10.3150 + (f x)))))))
10.3151 + ((op =::real => real => bool) l (0::real)))))"
10.3152 + by (import lim DIFF_LMAX)
10.3153 +
10.3154 +lemma DIFF_LMIN: "(All::((real => real) => bool) => bool)
10.3155 + (%f::real => real.
10.3156 + (All::(real => bool) => bool)
10.3157 + (%x::real.
10.3158 + (All::(real => bool) => bool)
10.3159 + (%l::real.
10.3160 + (op -->::bool => bool => bool)
10.3161 + ((op &::bool => bool => bool)
10.3162 + ((diffl::(real => real) => real => real => bool) f l x)
10.3163 + ((Ex::(real => bool) => bool)
10.3164 + (%d::real.
10.3165 + (op &::bool => bool => bool)
10.3166 + ((op <::real => real => bool) (0::real) d)
10.3167 + ((All::(real => bool) => bool)
10.3168 + (%y::real.
10.3169 + (op -->::bool => bool => bool)
10.3170 + ((op <::real => real => bool)
10.3171 + ((abs::real => real)
10.3172 + ((op -::real => real => real) x y))
10.3173 + d)
10.3174 + ((op <=::real => real => bool) (f x)
10.3175 + (f y)))))))
10.3176 + ((op =::real => real => bool) l (0::real)))))"
10.3177 + by (import lim DIFF_LMIN)
10.3178 +
10.3179 +lemma DIFF_LCONST: "(All::((real => real) => bool) => bool)
10.3180 + (%f::real => real.
10.3181 + (All::(real => bool) => bool)
10.3182 + (%x::real.
10.3183 + (All::(real => bool) => bool)
10.3184 + (%l::real.
10.3185 + (op -->::bool => bool => bool)
10.3186 + ((op &::bool => bool => bool)
10.3187 + ((diffl::(real => real) => real => real => bool) f l x)
10.3188 + ((Ex::(real => bool) => bool)
10.3189 + (%d::real.
10.3190 + (op &::bool => bool => bool)
10.3191 + ((op <::real => real => bool) (0::real) d)
10.3192 + ((All::(real => bool) => bool)
10.3193 + (%y::real.
10.3194 + (op -->::bool => bool => bool)
10.3195 + ((op <::real => real => bool)
10.3196 + ((abs::real => real)
10.3197 + ((op -::real => real => real) x y))
10.3198 + d)
10.3199 + ((op =::real => real => bool) (f y)
10.3200 + (f x)))))))
10.3201 + ((op =::real => real => bool) l (0::real)))))"
10.3202 + by (import lim DIFF_LCONST)
10.3203 +
10.3204 +lemma INTERVAL_LEMMA: "(All::(real => bool) => bool)
10.3205 + (%a::real.
10.3206 + (All::(real => bool) => bool)
10.3207 + (%b::real.
10.3208 + (All::(real => bool) => bool)
10.3209 + (%x::real.
10.3210 + (op -->::bool => bool => bool)
10.3211 + ((op &::bool => bool => bool)
10.3212 + ((op <::real => real => bool) a x)
10.3213 + ((op <::real => real => bool) x b))
10.3214 + ((Ex::(real => bool) => bool)
10.3215 + (%d::real.
10.3216 + (op &::bool => bool => bool)
10.3217 + ((op <::real => real => bool) (0::real) d)
10.3218 + ((All::(real => bool) => bool)
10.3219 + (%y::real.
10.3220 + (op -->::bool => bool => bool)
10.3221 + ((op <::real => real => bool)
10.3222 + ((abs::real => real)
10.3223 + ((op -::real => real => real) x y))
10.3224 + d)
10.3225 + ((op &::bool => bool => bool)
10.3226 + ((op <=::real => real => bool) a y)
10.3227 + ((op <=::real => real => bool) y b)))))))))"
10.3228 + by (import lim INTERVAL_LEMMA)
10.3229 +
10.3230 +lemma ROLLE: "(All::((real => real) => bool) => bool)
10.3231 + (%f::real => real.
10.3232 + (All::(real => bool) => bool)
10.3233 + (%a::real.
10.3234 + (All::(real => bool) => bool)
10.3235 + (%b::real.
10.3236 + (op -->::bool => bool => bool)
10.3237 + ((op &::bool => bool => bool)
10.3238 + ((op <::real => real => bool) a b)
10.3239 + ((op &::bool => bool => bool)
10.3240 + ((op =::real => real => bool) (f a) (f b))
10.3241 + ((op &::bool => bool => bool)
10.3242 + ((All::(real => bool) => bool)
10.3243 + (%x::real.
10.3244 + (op -->::bool => bool => bool)
10.3245 + ((op &::bool => bool => bool)
10.3246 + ((op <=::real => real => bool) a x)
10.3247 + ((op <=::real => real => bool) x b))
10.3248 + ((contl::(real => real) => real => bool) f x)))
10.3249 + ((All::(real => bool) => bool)
10.3250 + (%x::real.
10.3251 + (op -->::bool => bool => bool)
10.3252 + ((op &::bool => bool => bool)
10.3253 + ((op <::real => real => bool) a x)
10.3254 + ((op <::real => real => bool) x b))
10.3255 + ((differentiable::(real => real)
10.3256 + => real => bool)
10.3257 + f x))))))
10.3258 + ((Ex::(real => bool) => bool)
10.3259 + (%z::real.
10.3260 + (op &::bool => bool => bool)
10.3261 + ((op <::real => real => bool) a z)
10.3262 + ((op &::bool => bool => bool)
10.3263 + ((op <::real => real => bool) z b)
10.3264 + ((diffl::(real => real) => real => real => bool) f
10.3265 + (0::real) z)))))))"
10.3266 + by (import lim ROLLE)
10.3267 +
10.3268 +lemma MVT_LEMMA: "ALL (f::real => real) (a::real) b::real.
10.3269 + f a - (f b - f a) / (b - a) * a = f b - (f b - f a) / (b - a) * b"
10.3270 + by (import lim MVT_LEMMA)
10.3271 +
10.3272 +lemma MVT: "(All::((real => real) => bool) => bool)
10.3273 + (%f::real => real.
10.3274 + (All::(real => bool) => bool)
10.3275 + (%a::real.
10.3276 + (All::(real => bool) => bool)
10.3277 + (%b::real.
10.3278 + (op -->::bool => bool => bool)
10.3279 + ((op &::bool => bool => bool)
10.3280 + ((op <::real => real => bool) a b)
10.3281 + ((op &::bool => bool => bool)
10.3282 + ((All::(real => bool) => bool)
10.3283 + (%x::real.
10.3284 + (op -->::bool => bool => bool)
10.3285 + ((op &::bool => bool => bool)
10.3286 + ((op <=::real => real => bool) a x)
10.3287 + ((op <=::real => real => bool) x b))
10.3288 + ((contl::(real => real) => real => bool) f x)))
10.3289 + ((All::(real => bool) => bool)
10.3290 + (%x::real.
10.3291 + (op -->::bool => bool => bool)
10.3292 + ((op &::bool => bool => bool)
10.3293 + ((op <::real => real => bool) a x)
10.3294 + ((op <::real => real => bool) x b))
10.3295 + ((differentiable::(real => real) => real => bool)
10.3296 + f x)))))
10.3297 + ((Ex::(real => bool) => bool)
10.3298 + (%l::real.
10.3299 + (Ex::(real => bool) => bool)
10.3300 + (%z::real.
10.3301 + (op &::bool => bool => bool)
10.3302 + ((op <::real => real => bool) a z)
10.3303 + ((op &::bool => bool => bool)
10.3304 + ((op <::real => real => bool) z b)
10.3305 + ((op &::bool => bool => bool)
10.3306 + ((diffl::(real => real)
10.3307 + => real => real => bool)
10.3308 + f l z)
10.3309 + ((op =::real => real => bool)
10.3310 + ((op -::real => real => real) (f b) (f a))
10.3311 + ((op *::real => real => real)
10.3312 + ((op -::real => real => real) b a)
10.3313 + l))))))))))"
10.3314 + by (import lim MVT)
10.3315 +
10.3316 +lemma DIFF_ISCONST_END: "(All::((real => real) => bool) => bool)
10.3317 + (%f::real => real.
10.3318 + (All::(real => bool) => bool)
10.3319 + (%a::real.
10.3320 + (All::(real => bool) => bool)
10.3321 + (%b::real.
10.3322 + (op -->::bool => bool => bool)
10.3323 + ((op &::bool => bool => bool)
10.3324 + ((op <::real => real => bool) a b)
10.3325 + ((op &::bool => bool => bool)
10.3326 + ((All::(real => bool) => bool)
10.3327 + (%x::real.
10.3328 + (op -->::bool => bool => bool)
10.3329 + ((op &::bool => bool => bool)
10.3330 + ((op <=::real => real => bool) a x)
10.3331 + ((op <=::real => real => bool) x b))
10.3332 + ((contl::(real => real) => real => bool) f x)))
10.3333 + ((All::(real => bool) => bool)
10.3334 + (%x::real.
10.3335 + (op -->::bool => bool => bool)
10.3336 + ((op &::bool => bool => bool)
10.3337 + ((op <::real => real => bool) a x)
10.3338 + ((op <::real => real => bool) x b))
10.3339 + ((diffl::(real => real) => real => real => bool)
10.3340 + f (0::real) x)))))
10.3341 + ((op =::real => real => bool) (f b) (f a)))))"
10.3342 + by (import lim DIFF_ISCONST_END)
10.3343 +
10.3344 +lemma DIFF_ISCONST: "(All::((real => real) => bool) => bool)
10.3345 + (%f::real => real.
10.3346 + (All::(real => bool) => bool)
10.3347 + (%a::real.
10.3348 + (All::(real => bool) => bool)
10.3349 + (%b::real.
10.3350 + (op -->::bool => bool => bool)
10.3351 + ((op &::bool => bool => bool)
10.3352 + ((op <::real => real => bool) a b)
10.3353 + ((op &::bool => bool => bool)
10.3354 + ((All::(real => bool) => bool)
10.3355 + (%x::real.
10.3356 + (op -->::bool => bool => bool)
10.3357 + ((op &::bool => bool => bool)
10.3358 + ((op <=::real => real => bool) a x)
10.3359 + ((op <=::real => real => bool) x b))
10.3360 + ((contl::(real => real) => real => bool) f x)))
10.3361 + ((All::(real => bool) => bool)
10.3362 + (%x::real.
10.3363 + (op -->::bool => bool => bool)
10.3364 + ((op &::bool => bool => bool)
10.3365 + ((op <::real => real => bool) a x)
10.3366 + ((op <::real => real => bool) x b))
10.3367 + ((diffl::(real => real) => real => real => bool)
10.3368 + f (0::real) x)))))
10.3369 + ((All::(real => bool) => bool)
10.3370 + (%x::real.
10.3371 + (op -->::bool => bool => bool)
10.3372 + ((op &::bool => bool => bool)
10.3373 + ((op <=::real => real => bool) a x)
10.3374 + ((op <=::real => real => bool) x b))
10.3375 + ((op =::real => real => bool) (f x) (f a)))))))"
10.3376 + by (import lim DIFF_ISCONST)
10.3377 +
10.3378 +lemma DIFF_ISCONST_ALL: "(All::((real => real) => bool) => bool)
10.3379 + (%f::real => real.
10.3380 + (op -->::bool => bool => bool)
10.3381 + ((All::(real => bool) => bool)
10.3382 + ((diffl::(real => real) => real => real => bool) f (0::real)))
10.3383 + ((All::(real => bool) => bool)
10.3384 + (%x::real.
10.3385 + (All::(real => bool) => bool)
10.3386 + (%y::real. (op =::real => real => bool) (f x) (f y)))))"
10.3387 + by (import lim DIFF_ISCONST_ALL)
10.3388 +
10.3389 +lemma INTERVAL_ABS: "ALL (x::real) (z::real) d::real.
10.3390 + (x - d <= z & z <= x + d) = (abs (z - x) <= d)"
10.3391 + by (import lim INTERVAL_ABS)
10.3392 +
10.3393 +lemma CONT_INJ_LEMMA: "(All::((real => real) => bool) => bool)
10.3394 + (%f::real => real.
10.3395 + (All::((real => real) => bool) => bool)
10.3396 + (%g::real => real.
10.3397 + (All::(real => bool) => bool)
10.3398 + (%x::real.
10.3399 + (All::(real => bool) => bool)
10.3400 + (%d::real.
10.3401 + (op -->::bool => bool => bool)
10.3402 + ((op &::bool => bool => bool)
10.3403 + ((op <::real => real => bool) (0::real) d)
10.3404 + ((op &::bool => bool => bool)
10.3405 + ((All::(real => bool) => bool)
10.3406 + (%z::real.
10.3407 + (op -->::bool => bool => bool)
10.3408 + ((op <=::real => real => bool)
10.3409 + ((abs::real => real)
10.3410 + ((op -::real => real => real) z x))
10.3411 + d)
10.3412 + ((op =::real => real => bool) (g (f z)) z)))
10.3413 + ((All::(real => bool) => bool)
10.3414 + (%z::real.
10.3415 + (op -->::bool => bool => bool)
10.3416 + ((op <=::real => real => bool)
10.3417 + ((abs::real => real)
10.3418 + ((op -::real => real => real) z x))
10.3419 + d)
10.3420 + ((contl::(real => real) => real => bool) f
10.3421 + z)))))
10.3422 + ((Not::bool => bool)
10.3423 + ((All::(real => bool) => bool)
10.3424 + (%z::real.
10.3425 + (op -->::bool => bool => bool)
10.3426 + ((op <=::real => real => bool)
10.3427 + ((abs::real => real)
10.3428 + ((op -::real => real => real) z x))
10.3429 + d)
10.3430 + ((op <=::real => real => bool) (f z)
10.3431 + (f x)))))))))"
10.3432 + by (import lim CONT_INJ_LEMMA)
10.3433 +
10.3434 +lemma CONT_INJ_LEMMA2: "(All::((real => real) => bool) => bool)
10.3435 + (%f::real => real.
10.3436 + (All::((real => real) => bool) => bool)
10.3437 + (%g::real => real.
10.3438 + (All::(real => bool) => bool)
10.3439 + (%x::real.
10.3440 + (All::(real => bool) => bool)
10.3441 + (%d::real.
10.3442 + (op -->::bool => bool => bool)
10.3443 + ((op &::bool => bool => bool)
10.3444 + ((op <::real => real => bool) (0::real) d)
10.3445 + ((op &::bool => bool => bool)
10.3446 + ((All::(real => bool) => bool)
10.3447 + (%z::real.
10.3448 + (op -->::bool => bool => bool)
10.3449 + ((op <=::real => real => bool)
10.3450 + ((abs::real => real)
10.3451 + ((op -::real => real => real) z x))
10.3452 + d)
10.3453 + ((op =::real => real => bool) (g (f z)) z)))
10.3454 + ((All::(real => bool) => bool)
10.3455 + (%z::real.
10.3456 + (op -->::bool => bool => bool)
10.3457 + ((op <=::real => real => bool)
10.3458 + ((abs::real => real)
10.3459 + ((op -::real => real => real) z x))
10.3460 + d)
10.3461 + ((contl::(real => real) => real => bool) f
10.3462 + z)))))
10.3463 + ((Not::bool => bool)
10.3464 + ((All::(real => bool) => bool)
10.3465 + (%z::real.
10.3466 + (op -->::bool => bool => bool)
10.3467 + ((op <=::real => real => bool)
10.3468 + ((abs::real => real)
10.3469 + ((op -::real => real => real) z x))
10.3470 + d)
10.3471 + ((op <=::real => real => bool) (f x)
10.3472 + (f z)))))))))"
10.3473 + by (import lim CONT_INJ_LEMMA2)
10.3474 +
10.3475 +lemma CONT_INJ_RANGE: "(All::((real => real) => bool) => bool)
10.3476 + (%f::real => real.
10.3477 + (All::((real => real) => bool) => bool)
10.3478 + (%g::real => real.
10.3479 + (All::(real => bool) => bool)
10.3480 + (%x::real.
10.3481 + (All::(real => bool) => bool)
10.3482 + (%d::real.
10.3483 + (op -->::bool => bool => bool)
10.3484 + ((op &::bool => bool => bool)
10.3485 + ((op <::real => real => bool) (0::real) d)
10.3486 + ((op &::bool => bool => bool)
10.3487 + ((All::(real => bool) => bool)
10.3488 + (%z::real.
10.3489 + (op -->::bool => bool => bool)
10.3490 + ((op <=::real => real => bool)
10.3491 + ((abs::real => real)
10.3492 + ((op -::real => real => real) z x))
10.3493 + d)
10.3494 + ((op =::real => real => bool) (g (f z)) z)))
10.3495 + ((All::(real => bool) => bool)
10.3496 + (%z::real.
10.3497 + (op -->::bool => bool => bool)
10.3498 + ((op <=::real => real => bool)
10.3499 + ((abs::real => real)
10.3500 + ((op -::real => real => real) z x))
10.3501 + d)
10.3502 + ((contl::(real => real) => real => bool) f
10.3503 + z)))))
10.3504 + ((Ex::(real => bool) => bool)
10.3505 + (%e::real.
10.3506 + (op &::bool => bool => bool)
10.3507 + ((op <::real => real => bool) (0::real) e)
10.3508 + ((All::(real => bool) => bool)
10.3509 + (%y::real.
10.3510 + (op -->::bool => bool => bool)
10.3511 + ((op <=::real => real => bool)
10.3512 + ((abs::real => real)
10.3513 + ((op -::real => real => real) y (f x)))
10.3514 + e)
10.3515 + ((Ex::(real => bool) => bool)
10.3516 + (%z::real.
10.3517 + (op &::bool => bool => bool)
10.3518 + ((op <=::real => real => bool)
10.3519 + ((abs::real => real) ((op -::real => real => real) z x)) d)
10.3520 + ((op =::real => real => bool) (f z) y)))))))))))"
10.3521 + by (import lim CONT_INJ_RANGE)
10.3522 +
10.3523 +lemma CONT_INVERSE: "(All::((real => real) => bool) => bool)
10.3524 + (%f::real => real.
10.3525 + (All::((real => real) => bool) => bool)
10.3526 + (%g::real => real.
10.3527 + (All::(real => bool) => bool)
10.3528 + (%x::real.
10.3529 + (All::(real => bool) => bool)
10.3530 + (%d::real.
10.3531 + (op -->::bool => bool => bool)
10.3532 + ((op &::bool => bool => bool)
10.3533 + ((op <::real => real => bool) (0::real) d)
10.3534 + ((op &::bool => bool => bool)
10.3535 + ((All::(real => bool) => bool)
10.3536 + (%z::real.
10.3537 + (op -->::bool => bool => bool)
10.3538 + ((op <=::real => real => bool)
10.3539 + ((abs::real => real)
10.3540 + ((op -::real => real => real) z x))
10.3541 + d)
10.3542 + ((op =::real => real => bool) (g (f z)) z)))
10.3543 + ((All::(real => bool) => bool)
10.3544 + (%z::real.
10.3545 + (op -->::bool => bool => bool)
10.3546 + ((op <=::real => real => bool)
10.3547 + ((abs::real => real)
10.3548 + ((op -::real => real => real) z x))
10.3549 + d)
10.3550 + ((contl::(real => real) => real => bool) f
10.3551 + z)))))
10.3552 + ((contl::(real => real) => real => bool) g (f x))))))"
10.3553 + by (import lim CONT_INVERSE)
10.3554 +
10.3555 +lemma DIFF_INVERSE: "(All::((real => real) => bool) => bool)
10.3556 + (%f::real => real.
10.3557 + (All::((real => real) => bool) => bool)
10.3558 + (%g::real => real.
10.3559 + (All::(real => bool) => bool)
10.3560 + (%l::real.
10.3561 + (All::(real => bool) => bool)
10.3562 + (%x::real.
10.3563 + (All::(real => bool) => bool)
10.3564 + (%d::real.
10.3565 + (op -->::bool => bool => bool)
10.3566 + ((op &::bool => bool => bool)
10.3567 + ((op <::real => real => bool) (0::real) d)
10.3568 + ((op &::bool => bool => bool)
10.3569 + ((All::(real => bool) => bool)
10.3570 + (%z::real.
10.3571 + (op -->::bool => bool => bool)
10.3572 + ((op <=::real => real => bool)
10.3573 + ((abs::real => real) ((op -::real => real => real) z x)) d)
10.3574 + ((op =::real => real => bool) (g (f z))
10.3575 + z)))
10.3576 + ((op &::bool => bool => bool)
10.3577 + ((All::(real => bool) => bool)
10.3578 + (%z::real.
10.3579 +(op -->::bool => bool => bool)
10.3580 + ((op <=::real => real => bool)
10.3581 + ((abs::real => real) ((op -::real => real => real) z x)) d)
10.3582 + ((contl::(real => real) => real => bool) f z)))
10.3583 + ((op &::bool => bool => bool)
10.3584 + ((diffl::(real => real)
10.3585 + => real => real => bool)
10.3586 + f l x)
10.3587 + ((Not::bool => bool)
10.3588 + ((op =::real => real => bool) l
10.3589 +(0::real)))))))
10.3590 + ((diffl::(real => real) => real => real => bool) g
10.3591 + ((inverse::real => real) l) (f x)))))))"
10.3592 + by (import lim DIFF_INVERSE)
10.3593 +
10.3594 +lemma DIFF_INVERSE_LT: "(All::((real => real) => bool) => bool)
10.3595 + (%f::real => real.
10.3596 + (All::((real => real) => bool) => bool)
10.3597 + (%g::real => real.
10.3598 + (All::(real => bool) => bool)
10.3599 + (%l::real.
10.3600 + (All::(real => bool) => bool)
10.3601 + (%x::real.
10.3602 + (All::(real => bool) => bool)
10.3603 + (%d::real.
10.3604 + (op -->::bool => bool => bool)
10.3605 + ((op &::bool => bool => bool)
10.3606 + ((op <::real => real => bool) (0::real) d)
10.3607 + ((op &::bool => bool => bool)
10.3608 + ((All::(real => bool) => bool)
10.3609 + (%z::real.
10.3610 + (op -->::bool => bool => bool)
10.3611 + ((op <::real => real => bool)
10.3612 + ((abs::real => real) ((op -::real => real => real) z x)) d)
10.3613 + ((op =::real => real => bool) (g (f z))
10.3614 + z)))
10.3615 + ((op &::bool => bool => bool)
10.3616 + ((All::(real => bool) => bool)
10.3617 + (%z::real.
10.3618 +(op -->::bool => bool => bool)
10.3619 + ((op <::real => real => bool)
10.3620 + ((abs::real => real) ((op -::real => real => real) z x)) d)
10.3621 + ((contl::(real => real) => real => bool) f z)))
10.3622 + ((op &::bool => bool => bool)
10.3623 + ((diffl::(real => real)
10.3624 + => real => real => bool)
10.3625 + f l x)
10.3626 + ((Not::bool => bool)
10.3627 + ((op =::real => real => bool) l
10.3628 +(0::real)))))))
10.3629 + ((diffl::(real => real) => real => real => bool) g
10.3630 + ((inverse::real => real) l) (f x)))))))"
10.3631 + by (import lim DIFF_INVERSE_LT)
10.3632 +
10.3633 +lemma INTERVAL_CLEMMA: "(All::(real => bool) => bool)
10.3634 + (%a::real.
10.3635 + (All::(real => bool) => bool)
10.3636 + (%b::real.
10.3637 + (All::(real => bool) => bool)
10.3638 + (%x::real.
10.3639 + (op -->::bool => bool => bool)
10.3640 + ((op &::bool => bool => bool)
10.3641 + ((op <::real => real => bool) a x)
10.3642 + ((op <::real => real => bool) x b))
10.3643 + ((Ex::(real => bool) => bool)
10.3644 + (%d::real.
10.3645 + (op &::bool => bool => bool)
10.3646 + ((op <::real => real => bool) (0::real) d)
10.3647 + ((All::(real => bool) => bool)
10.3648 + (%y::real.
10.3649 + (op -->::bool => bool => bool)
10.3650 + ((op <=::real => real => bool)
10.3651 + ((abs::real => real)
10.3652 + ((op -::real => real => real) y x))
10.3653 + d)
10.3654 + ((op &::bool => bool => bool)
10.3655 + ((op <::real => real => bool) a y)
10.3656 + ((op <::real => real => bool) y b)))))))))"
10.3657 + by (import lim INTERVAL_CLEMMA)
10.3658 +
10.3659 +lemma DIFF_INVERSE_OPEN: "(All::((real => real) => bool) => bool)
10.3660 + (%f::real => real.
10.3661 + (All::((real => real) => bool) => bool)
10.3662 + (%g::real => real.
10.3663 + (All::(real => bool) => bool)
10.3664 + (%l::real.
10.3665 + (All::(real => bool) => bool)
10.3666 + (%a::real.
10.3667 + (All::(real => bool) => bool)
10.3668 + (%x::real.
10.3669 + (All::(real => bool) => bool)
10.3670 + (%b::real.
10.3671 + (op -->::bool => bool => bool)
10.3672 + ((op &::bool => bool => bool)
10.3673 + ((op <::real => real => bool) a x)
10.3674 + ((op &::bool => bool => bool)
10.3675 + ((op <::real => real => bool) x b)
10.3676 + ((op &::bool => bool => bool)
10.3677 + ((All::(real => bool) => bool)
10.3678 + (%z::real.
10.3679 + (op -->::bool => bool => bool)
10.3680 + ((op &::bool => bool => bool) ((op <::real => real => bool) a z)
10.3681 + ((op <::real => real => bool) z b))
10.3682 + ((op &::bool => bool => bool)
10.3683 + ((op =::real => real => bool) (g (f z)) z)
10.3684 + ((contl::(real => real) => real => bool) f z))))
10.3685 + ((op &::bool => bool => bool)
10.3686 + ((diffl::(real => real) => real => real => bool) f l x)
10.3687 + ((Not::bool => bool) ((op =::real => real => bool) l (0::real)))))))
10.3688 + ((diffl::(real => real)
10.3689 + => real => real => bool)
10.3690 + g ((inverse::real => real) l) (f x))))))))"
10.3691 + by (import lim DIFF_INVERSE_OPEN)
10.3692 +
10.3693 +;end_setup
10.3694 +
10.3695 +;setup_theory powser
10.3696 +
10.3697 +lemma POWDIFF_LEMMA: "ALL n x y.
10.3698 + real.sum (0, Suc n) (%p. x ^ p * y ^ (Suc n - p)) =
10.3699 + y * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
10.3700 + by (import powser POWDIFF_LEMMA)
10.3701 +
10.3702 +lemma POWDIFF: "ALL n x y.
10.3703 + x ^ Suc n - y ^ Suc n =
10.3704 + (x - y) * real.sum (0, Suc n) (%p. x ^ p * y ^ (n - p))"
10.3705 + by (import powser POWDIFF)
10.3706 +
10.3707 +lemma POWREV: "ALL n x y.
10.3708 + real.sum (0, Suc n) (%xa. x ^ xa * y ^ (n - xa)) =
10.3709 + real.sum (0, Suc n) (%xa. x ^ (n - xa) * y ^ xa)"
10.3710 + by (import powser POWREV)
10.3711 +
10.3712 +lemma POWSER_INSIDEA: "(All::((nat => real) => bool) => bool)
10.3713 + (%f::nat => real.
10.3714 + (All::(real => bool) => bool)
10.3715 + (%x::real.
10.3716 + (All::(real => bool) => bool)
10.3717 + (%z::real.
10.3718 + (op -->::bool => bool => bool)
10.3719 + ((op &::bool => bool => bool)
10.3720 + ((summable::(nat => real) => bool)
10.3721 + (%n::nat.
10.3722 + (op *::real => real => real) (f n)
10.3723 + ((op ^::real => nat => real) x n)))
10.3724 + ((op <::real => real => bool) ((abs::real => real) z)
10.3725 + ((abs::real => real) x)))
10.3726 + ((summable::(nat => real) => bool)
10.3727 + (%n::nat.
10.3728 + (op *::real => real => real)
10.3729 + ((abs::real => real) (f n))
10.3730 + ((op ^::real => nat => real) z n))))))"
10.3731 + by (import powser POWSER_INSIDEA)
10.3732 +
10.3733 +lemma POWSER_INSIDE: "(All::((nat => real) => bool) => bool)
10.3734 + (%f::nat => real.
10.3735 + (All::(real => bool) => bool)
10.3736 + (%x::real.
10.3737 + (All::(real => bool) => bool)
10.3738 + (%z::real.
10.3739 + (op -->::bool => bool => bool)
10.3740 + ((op &::bool => bool => bool)
10.3741 + ((summable::(nat => real) => bool)
10.3742 + (%n::nat.
10.3743 + (op *::real => real => real) (f n)
10.3744 + ((op ^::real => nat => real) x n)))
10.3745 + ((op <::real => real => bool) ((abs::real => real) z)
10.3746 + ((abs::real => real) x)))
10.3747 + ((summable::(nat => real) => bool)
10.3748 + (%n::nat.
10.3749 + (op *::real => real => real) (f n)
10.3750 + ((op ^::real => nat => real) z n))))))"
10.3751 + by (import powser POWSER_INSIDE)
10.3752 +
10.3753 +constdefs
10.3754 + diffs :: "(nat => real) => nat => real"
10.3755 + "diffs == %c n. real (Suc n) * c (Suc n)"
10.3756 +
10.3757 +lemma diffs: "ALL c. diffs c = (%n. real (Suc n) * c (Suc n))"
10.3758 + by (import powser diffs)
10.3759 +
10.3760 +lemma DIFFS_NEG: "ALL c. diffs (%n. - c n) = (%x. - diffs c x)"
10.3761 + by (import powser DIFFS_NEG)
10.3762 +
10.3763 +lemma DIFFS_LEMMA: "ALL n c x.
10.3764 + real.sum (0, n) (%n. diffs c n * x ^ n) =
10.3765 + real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) +
10.3766 + real n * (c n * x ^ (n - 1))"
10.3767 + by (import powser DIFFS_LEMMA)
10.3768 +
10.3769 +lemma DIFFS_LEMMA2: "ALL n c x.
10.3770 + real.sum (0, n) (%n. real n * (c n * x ^ (n - 1))) =
10.3771 + real.sum (0, n) (%n. diffs c n * x ^ n) - real n * (c n * x ^ (n - 1))"
10.3772 + by (import powser DIFFS_LEMMA2)
10.3773 +
10.3774 +lemma DIFFS_EQUIV: "(All::((nat => real) => bool) => bool)
10.3775 + (%c::nat => real.
10.3776 + (All::(real => bool) => bool)
10.3777 + (%x::real.
10.3778 + (op -->::bool => bool => bool)
10.3779 + ((summable::(nat => real) => bool)
10.3780 + (%n::nat.
10.3781 + (op *::real => real => real)
10.3782 + ((diffs::(nat => real) => nat => real) c n)
10.3783 + ((op ^::real => nat => real) x n)))
10.3784 + ((sums::(nat => real) => real => bool)
10.3785 + (%n::nat.
10.3786 + (op *::real => real => real) ((real::nat => real) n)
10.3787 + ((op *::real => real => real) (c n)
10.3788 + ((op ^::real => nat => real) x
10.3789 + ((op -::nat => nat => nat) n (1::nat)))))
10.3790 + ((suminf::(nat => real) => real)
10.3791 + (%n::nat.
10.3792 + (op *::real => real => real)
10.3793 + ((diffs::(nat => real) => nat => real) c n)
10.3794 + ((op ^::real => nat => real) x n))))))"
10.3795 + by (import powser DIFFS_EQUIV)
10.3796 +
10.3797 +lemma TERMDIFF_LEMMA1: "ALL m z h.
10.3798 + real.sum (0, m) (%p. (z + h) ^ (m - p) * z ^ p - z ^ m) =
10.3799 + real.sum (0, m) (%p. z ^ p * ((z + h) ^ (m - p) - z ^ (m - p)))"
10.3800 + by (import powser TERMDIFF_LEMMA1)
10.3801 +
10.3802 +lemma TERMDIFF_LEMMA2: "(All::(real => bool) => bool)
10.3803 + (%z::real.
10.3804 + (All::(real => bool) => bool)
10.3805 + (%h::real.
10.3806 + (All::(nat => bool) => bool)
10.3807 + (%n::nat.
10.3808 + (op -->::bool => bool => bool)
10.3809 + ((Not::bool => bool)
10.3810 + ((op =::real => real => bool) h (0::real)))
10.3811 + ((op =::real => real => bool)
10.3812 + ((op -::real => real => real)
10.3813 + ((op /::real => real => real)
10.3814 + ((op -::real => real => real)
10.3815 + ((op ^::real => nat => real)
10.3816 + ((op +::real => real => real) z h) n)
10.3817 + ((op ^::real => nat => real) z n))
10.3818 + h)
10.3819 + ((op *::real => real => real) ((real::nat => real) n)
10.3820 + ((op ^::real => nat => real) z
10.3821 + ((op -::nat => nat => nat) n (1::nat)))))
10.3822 + ((op *::real => real => real) h
10.3823 + ((real.sum::nat * nat => (nat => real) => real)
10.3824 + ((Pair::nat => nat => nat * nat) (0::nat)
10.3825 + ((op -::nat => nat => nat) n (1::nat)))
10.3826 + (%p::nat.
10.3827 + (op *::real => real => real)
10.3828 + ((op ^::real => nat => real) z p)
10.3829 + ((real.sum::nat * nat => (nat => real) => real)
10.3830 + ((Pair::nat => nat => nat * nat) (0::nat)
10.3831 + ((op -::nat => nat => nat)
10.3832 + ((op -::nat => nat => nat) n (1::nat)) p))
10.3833 + (%q::nat.
10.3834 + (op *::real => real => real)
10.3835 + ((op ^::real => nat => real)
10.3836 + ((op +::real => real => real) z h) q)
10.3837 + ((op ^::real => nat => real) z
10.3838 + ((op -::nat => nat => nat)
10.3839 +((op -::nat => nat => nat)
10.3840 + ((op -::nat => nat => nat) n
10.3841 + ((number_of::bin => nat)
10.3842 + ((op BIT::bin => bool => bin)
10.3843 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.3844 + (False::bool))))
10.3845 + p)
10.3846 +q)))))))))))"
10.3847 + by (import powser TERMDIFF_LEMMA2)
10.3848 +
10.3849 +lemma TERMDIFF_LEMMA3: "(All::(real => bool) => bool)
10.3850 + (%z::real.
10.3851 + (All::(real => bool) => bool)
10.3852 + (%h::real.
10.3853 + (All::(nat => bool) => bool)
10.3854 + (%n::nat.
10.3855 + (All::(real => bool) => bool)
10.3856 + (%k'::real.
10.3857 + (op -->::bool => bool => bool)
10.3858 + ((op &::bool => bool => bool)
10.3859 + ((Not::bool => bool)
10.3860 + ((op =::real => real => bool) h (0::real)))
10.3861 + ((op &::bool => bool => bool)
10.3862 + ((op <=::real => real => bool)
10.3863 + ((abs::real => real) z) k')
10.3864 + ((op <=::real => real => bool)
10.3865 + ((abs::real => real)
10.3866 + ((op +::real => real => real) z h))
10.3867 + k')))
10.3868 + ((op <=::real => real => bool)
10.3869 + ((abs::real => real)
10.3870 + ((op -::real => real => real)
10.3871 + ((op /::real => real => real)
10.3872 + ((op -::real => real => real)
10.3873 + ((op ^::real => nat => real)
10.3874 + ((op +::real => real => real) z h) n)
10.3875 + ((op ^::real => nat => real) z n))
10.3876 + h)
10.3877 + ((op *::real => real => real)
10.3878 + ((real::nat => real) n)
10.3879 + ((op ^::real => nat => real) z
10.3880 + ((op -::nat => nat => nat) n (1::nat))))))
10.3881 + ((op *::real => real => real) ((real::nat => real) n)
10.3882 + ((op *::real => real => real)
10.3883 + ((real::nat => real)
10.3884 + ((op -::nat => nat => nat) n (1::nat)))
10.3885 + ((op *::real => real => real)
10.3886 + ((op ^::real => nat => real) k'
10.3887 + ((op -::nat => nat => nat) n
10.3888 + ((number_of::bin => nat)
10.3889 + ((op BIT::bin => bool => bin)
10.3890 + ((op BIT::bin => bool => bin)
10.3891 + (bin.Pls::bin) (True::bool))
10.3892 + (False::bool)))))
10.3893 + ((abs::real => real) h)))))))))"
10.3894 + by (import powser TERMDIFF_LEMMA3)
10.3895 +
10.3896 +lemma TERMDIFF_LEMMA4: "(All::((real => real) => bool) => bool)
10.3897 + (%f::real => real.
10.3898 + (All::(real => bool) => bool)
10.3899 + (%k'::real.
10.3900 + (All::(real => bool) => bool)
10.3901 + (%k::real.
10.3902 + (op -->::bool => bool => bool)
10.3903 + ((op &::bool => bool => bool)
10.3904 + ((op <::real => real => bool) (0::real) k)
10.3905 + ((All::(real => bool) => bool)
10.3906 + (%h::real.
10.3907 + (op -->::bool => bool => bool)
10.3908 + ((op &::bool => bool => bool)
10.3909 + ((op <::real => real => bool) (0::real)
10.3910 + ((abs::real => real) h))
10.3911 + ((op <::real => real => bool)
10.3912 + ((abs::real => real) h) k))
10.3913 + ((op <=::real => real => bool)
10.3914 + ((abs::real => real) (f h))
10.3915 + ((op *::real => real => real) k'
10.3916 + ((abs::real => real) h))))))
10.3917 + ((tends_real_real::(real => real) => real => real => bool) f
10.3918 + (0::real) (0::real)))))"
10.3919 + by (import powser TERMDIFF_LEMMA4)
10.3920 +
10.3921 +lemma TERMDIFF_LEMMA5: "(All::((nat => real) => bool) => bool)
10.3922 + (%f::nat => real.
10.3923 + (All::((real => nat => real) => bool) => bool)
10.3924 + (%g::real => nat => real.
10.3925 + (All::(real => bool) => bool)
10.3926 + (%k::real.
10.3927 + (op -->::bool => bool => bool)
10.3928 + ((op &::bool => bool => bool)
10.3929 + ((op <::real => real => bool) (0::real) k)
10.3930 + ((op &::bool => bool => bool)
10.3931 + ((summable::(nat => real) => bool) f)
10.3932 + ((All::(real => bool) => bool)
10.3933 + (%h::real.
10.3934 + (op -->::bool => bool => bool)
10.3935 + ((op &::bool => bool => bool)
10.3936 + ((op <::real => real => bool) (0::real)
10.3937 + ((abs::real => real) h))
10.3938 + ((op <::real => real => bool)
10.3939 + ((abs::real => real) h) k))
10.3940 + ((All::(nat => bool) => bool)
10.3941 + (%n::nat.
10.3942 + (op <=::real => real => bool)
10.3943 + ((abs::real => real) (g h n))
10.3944 + ((op *::real => real => real) (f n)
10.3945 + ((abs::real => real) h))))))))
10.3946 + ((tends_real_real::(real => real) => real => real => bool)
10.3947 + (%h::real. (suminf::(nat => real) => real) (g h))
10.3948 + (0::real) (0::real)))))"
10.3949 + by (import powser TERMDIFF_LEMMA5)
10.3950 +
10.3951 +lemma TERMDIFF: "(All::((nat => real) => bool) => bool)
10.3952 + (%c::nat => real.
10.3953 + (All::(real => bool) => bool)
10.3954 + (%k'::real.
10.3955 + (All::(real => bool) => bool)
10.3956 + (%x::real.
10.3957 + (op -->::bool => bool => bool)
10.3958 + ((op &::bool => bool => bool)
10.3959 + ((summable::(nat => real) => bool)
10.3960 + (%n::nat.
10.3961 + (op *::real => real => real) (c n)
10.3962 + ((op ^::real => nat => real) k' n)))
10.3963 + ((op &::bool => bool => bool)
10.3964 + ((summable::(nat => real) => bool)
10.3965 + (%n::nat.
10.3966 + (op *::real => real => real)
10.3967 + ((diffs::(nat => real) => nat => real) c n)
10.3968 + ((op ^::real => nat => real) k' n)))
10.3969 + ((op &::bool => bool => bool)
10.3970 + ((summable::(nat => real) => bool)
10.3971 + (%n::nat.
10.3972 + (op *::real => real => real)
10.3973 + ((diffs::(nat => real) => nat => real)
10.3974 + ((diffs::(nat => real) => nat => real) c) n)
10.3975 + ((op ^::real => nat => real) k' n)))
10.3976 + ((op <::real => real => bool) ((abs::real => real) x)
10.3977 + ((abs::real => real) k')))))
10.3978 + ((diffl::(real => real) => real => real => bool)
10.3979 + (%x::real.
10.3980 + (suminf::(nat => real) => real)
10.3981 + (%n::nat.
10.3982 + (op *::real => real => real) (c n)
10.3983 + ((op ^::real => nat => real) x n)))
10.3984 + ((suminf::(nat => real) => real)
10.3985 + (%n::nat.
10.3986 + (op *::real => real => real)
10.3987 + ((diffs::(nat => real) => nat => real) c n)
10.3988 + ((op ^::real => nat => real) x n)))
10.3989 + x))))"
10.3990 + by (import powser TERMDIFF)
10.3991 +
10.3992 +;end_setup
10.3993 +
10.3994 +;setup_theory transc
10.3995 +
10.3996 +constdefs
10.3997 + exp :: "real => real"
10.3998 + "exp == %x. suminf (%n. inverse (real (FACT n)) * x ^ n)"
10.3999 +
10.4000 +lemma exp: "ALL x. exp x = suminf (%n. inverse (real (FACT n)) * x ^ n)"
10.4001 + by (import transc exp)
10.4002 +
10.4003 +constdefs
10.4004 + cos :: "real => real"
10.4005 + "cos ==
10.4006 +%x. suminf
10.4007 + (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
10.4008 +
10.4009 +lemma cos: "ALL x.
10.4010 + cos x =
10.4011 + suminf
10.4012 + (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)"
10.4013 + by (import transc cos)
10.4014 +
10.4015 +constdefs
10.4016 + sin :: "real => real"
10.4017 + "sin ==
10.4018 +%x. suminf
10.4019 + (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
10.4020 + x ^ n)"
10.4021 +
10.4022 +lemma sin: "ALL x.
10.4023 + sin x =
10.4024 + suminf
10.4025 + (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
10.4026 + x ^ n)"
10.4027 + by (import transc sin)
10.4028 +
10.4029 +lemma EXP_CONVERGES: "ALL x. sums (%n. inverse (real (FACT n)) * x ^ n) (exp x)"
10.4030 + by (import transc EXP_CONVERGES)
10.4031 +
10.4032 +lemma SIN_CONVERGES: "ALL x.
10.4033 + sums
10.4034 + (%n. (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
10.4035 + x ^ n)
10.4036 + (sin x)"
10.4037 + by (import transc SIN_CONVERGES)
10.4038 +
10.4039 +lemma COS_CONVERGES: "ALL x.
10.4040 + sums
10.4041 + (%n. (if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) * x ^ n)
10.4042 + (cos x)"
10.4043 + by (import transc COS_CONVERGES)
10.4044 +
10.4045 +lemma EXP_FDIFF: "diffs (%n. inverse (real (FACT n))) = (%n. inverse (real (FACT n)))"
10.4046 + by (import transc EXP_FDIFF)
10.4047 +
10.4048 +lemma SIN_FDIFF: "diffs (%n. if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)) =
10.4049 +(%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0)"
10.4050 + by (import transc SIN_FDIFF)
10.4051 +
10.4052 +lemma COS_FDIFF: "diffs (%n. if EVEN n then (- 1) ^ (n div 2) / real (FACT n) else 0) =
10.4053 +(%n. - (if EVEN n then 0 else (- 1) ^ ((n - 1) div 2) / real (FACT n)))"
10.4054 + by (import transc COS_FDIFF)
10.4055 +
10.4056 +lemma SIN_NEGLEMMA: "ALL x.
10.4057 + - sin x =
10.4058 + suminf
10.4059 + (%n. - ((if EVEN n then 0
10.4060 + else (- 1) ^ ((n - 1) div 2) / real (FACT n)) *
10.4061 + x ^ n))"
10.4062 + by (import transc SIN_NEGLEMMA)
10.4063 +
10.4064 +lemma DIFF_EXP: "ALL x. diffl exp (exp x) x"
10.4065 + by (import transc DIFF_EXP)
10.4066 +
10.4067 +lemma DIFF_SIN: "ALL x. diffl sin (cos x) x"
10.4068 + by (import transc DIFF_SIN)
10.4069 +
10.4070 +lemma DIFF_COS: "ALL x. diffl cos (- sin x) x"
10.4071 + by (import transc DIFF_COS)
10.4072 +
10.4073 +lemma DIFF_COMPOSITE: "(op &::bool => bool => bool)
10.4074 + ((op -->::bool => bool => bool)
10.4075 + ((op &::bool => bool => bool)
10.4076 + ((diffl::(real => real) => real => real => bool) (f::real => real)
10.4077 + (l::real) (x::real))
10.4078 + ((Not::bool => bool) ((op =::real => real => bool) (f x) (0::real))))
10.4079 + ((diffl::(real => real) => real => real => bool)
10.4080 + (%x::real. (inverse::real => real) (f x))
10.4081 + ((uminus::real => real)
10.4082 + ((op /::real => real => real) l
10.4083 + ((op ^::real => nat => real) (f x)
10.4084 + ((number_of::bin => nat)
10.4085 + ((op BIT::bin => bool => bin)
10.4086 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4087 + (False::bool))))))
10.4088 + x))
10.4089 + ((op &::bool => bool => bool)
10.4090 + ((op -->::bool => bool => bool)
10.4091 + ((op &::bool => bool => bool)
10.4092 + ((diffl::(real => real) => real => real => bool) f l x)
10.4093 + ((op &::bool => bool => bool)
10.4094 + ((diffl::(real => real) => real => real => bool) (g::real => real)
10.4095 + (m::real) x)
10.4096 + ((Not::bool => bool)
10.4097 + ((op =::real => real => bool) (g x) (0::real)))))
10.4098 + ((diffl::(real => real) => real => real => bool)
10.4099 + (%x::real. (op /::real => real => real) (f x) (g x))
10.4100 + ((op /::real => real => real)
10.4101 + ((op -::real => real => real)
10.4102 + ((op *::real => real => real) l (g x))
10.4103 + ((op *::real => real => real) m (f x)))
10.4104 + ((op ^::real => nat => real) (g x)
10.4105 + ((number_of::bin => nat)
10.4106 + ((op BIT::bin => bool => bin)
10.4107 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4108 + (False::bool)))))
10.4109 + x))
10.4110 + ((op &::bool => bool => bool)
10.4111 + ((op -->::bool => bool => bool)
10.4112 + ((op &::bool => bool => bool)
10.4113 + ((diffl::(real => real) => real => real => bool) f l x)
10.4114 + ((diffl::(real => real) => real => real => bool) g m x))
10.4115 + ((diffl::(real => real) => real => real => bool)
10.4116 + (%x::real. (op +::real => real => real) (f x) (g x))
10.4117 + ((op +::real => real => real) l m) x))
10.4118 + ((op &::bool => bool => bool)
10.4119 + ((op -->::bool => bool => bool)
10.4120 + ((op &::bool => bool => bool)
10.4121 + ((diffl::(real => real) => real => real => bool) f l x)
10.4122 + ((diffl::(real => real) => real => real => bool) g m x))
10.4123 + ((diffl::(real => real) => real => real => bool)
10.4124 + (%x::real. (op *::real => real => real) (f x) (g x))
10.4125 + ((op +::real => real => real)
10.4126 + ((op *::real => real => real) l (g x))
10.4127 + ((op *::real => real => real) m (f x)))
10.4128 + x))
10.4129 + ((op &::bool => bool => bool)
10.4130 + ((op -->::bool => bool => bool)
10.4131 + ((op &::bool => bool => bool)
10.4132 + ((diffl::(real => real) => real => real => bool) f l x)
10.4133 + ((diffl::(real => real) => real => real => bool) g m x))
10.4134 + ((diffl::(real => real) => real => real => bool)
10.4135 + (%x::real. (op -::real => real => real) (f x) (g x))
10.4136 + ((op -::real => real => real) l m) x))
10.4137 + ((op &::bool => bool => bool)
10.4138 + ((op -->::bool => bool => bool)
10.4139 + ((diffl::(real => real) => real => real => bool) f l x)
10.4140 + ((diffl::(real => real) => real => real => bool)
10.4141 + (%x::real. (uminus::real => real) (f x))
10.4142 + ((uminus::real => real) l) x))
10.4143 + ((op &::bool => bool => bool)
10.4144 + ((op -->::bool => bool => bool)
10.4145 + ((diffl::(real => real) => real => real => bool) g m x)
10.4146 + ((diffl::(real => real) => real => real => bool)
10.4147 + (%x::real. (op ^::real => nat => real) (g x) (n::nat))
10.4148 + ((op *::real => real => real)
10.4149 + ((op *::real => real => real) ((real::nat => real) n)
10.4150 + ((op ^::real => nat => real) (g x)
10.4151 + ((op -::nat => nat => nat) n (1::nat))))
10.4152 + m)
10.4153 + x))
10.4154 + ((op &::bool => bool => bool)
10.4155 + ((op -->::bool => bool => bool)
10.4156 + ((diffl::(real => real) => real => real => bool) g m x)
10.4157 + ((diffl::(real => real) => real => real => bool)
10.4158 + (%x::real. (exp::real => real) (g x))
10.4159 + ((op *::real => real => real) ((exp::real => real) (g x))
10.4160 + m)
10.4161 + x))
10.4162 + ((op &::bool => bool => bool)
10.4163 + ((op -->::bool => bool => bool)
10.4164 + ((diffl::(real => real) => real => real => bool) g m x)
10.4165 + ((diffl::(real => real) => real => real => bool)
10.4166 + (%x::real. (sin::real => real) (g x))
10.4167 + ((op *::real => real => real)
10.4168 + ((cos::real => real) (g x)) m)
10.4169 + x))
10.4170 + ((op -->::bool => bool => bool)
10.4171 + ((diffl::(real => real) => real => real => bool) g m x)
10.4172 + ((diffl::(real => real) => real => real => bool)
10.4173 + (%x::real. (cos::real => real) (g x))
10.4174 + ((op *::real => real => real)
10.4175 + ((uminus::real => real) ((sin::real => real) (g x)))
10.4176 + m)
10.4177 + x))))))))))"
10.4178 + by (import transc DIFF_COMPOSITE)
10.4179 +
10.4180 +lemma EXP_0: "exp 0 = 1"
10.4181 + by (import transc EXP_0)
10.4182 +
10.4183 +lemma EXP_LE_X: "(All::(real => bool) => bool)
10.4184 + (%x::real.
10.4185 + (op -->::bool => bool => bool)
10.4186 + ((op <=::real => real => bool) (0::real) x)
10.4187 + ((op <=::real => real => bool)
10.4188 + ((op +::real => real => real) (1::real) x) ((exp::real => real) x)))"
10.4189 + by (import transc EXP_LE_X)
10.4190 +
10.4191 +lemma EXP_LT_1: "(All::(real => bool) => bool)
10.4192 + (%x::real.
10.4193 + (op -->::bool => bool => bool)
10.4194 + ((op <::real => real => bool) (0::real) x)
10.4195 + ((op <::real => real => bool) (1::real) ((exp::real => real) x)))"
10.4196 + by (import transc EXP_LT_1)
10.4197 +
10.4198 +lemma EXP_ADD_MUL: "ALL x y. exp (x + y) * exp (- x) = exp y"
10.4199 + by (import transc EXP_ADD_MUL)
10.4200 +
10.4201 +lemma EXP_NEG_MUL: "ALL x. exp x * exp (- x) = 1"
10.4202 + by (import transc EXP_NEG_MUL)
10.4203 +
10.4204 +lemma EXP_NEG_MUL2: "ALL x. exp (- x) * exp x = 1"
10.4205 + by (import transc EXP_NEG_MUL2)
10.4206 +
10.4207 +lemma EXP_NEG: "ALL x. exp (- x) = inverse (exp x)"
10.4208 + by (import transc EXP_NEG)
10.4209 +
10.4210 +lemma EXP_ADD: "ALL x y. exp (x + y) = exp x * exp y"
10.4211 + by (import transc EXP_ADD)
10.4212 +
10.4213 +lemma EXP_POS_LE: "ALL x. 0 <= exp x"
10.4214 + by (import transc EXP_POS_LE)
10.4215 +
10.4216 +lemma EXP_NZ: "ALL x. exp x ~= 0"
10.4217 + by (import transc EXP_NZ)
10.4218 +
10.4219 +lemma EXP_POS_LT: "ALL x. 0 < exp x"
10.4220 + by (import transc EXP_POS_LT)
10.4221 +
10.4222 +lemma EXP_N: "ALL n x. exp (real n * x) = exp x ^ n"
10.4223 + by (import transc EXP_N)
10.4224 +
10.4225 +lemma EXP_SUB: "ALL x y. exp (x - y) = exp x / exp y"
10.4226 + by (import transc EXP_SUB)
10.4227 +
10.4228 +lemma EXP_MONO_IMP: "(All::(real => bool) => bool)
10.4229 + (%x::real.
10.4230 + (All::(real => bool) => bool)
10.4231 + (%y::real.
10.4232 + (op -->::bool => bool => bool) ((op <::real => real => bool) x y)
10.4233 + ((op <::real => real => bool) ((exp::real => real) x)
10.4234 + ((exp::real => real) y))))"
10.4235 + by (import transc EXP_MONO_IMP)
10.4236 +
10.4237 +lemma EXP_MONO_LT: "ALL x y. (exp x < exp y) = (x < y)"
10.4238 + by (import transc EXP_MONO_LT)
10.4239 +
10.4240 +lemma EXP_MONO_LE: "ALL x y. (exp x <= exp y) = (x <= y)"
10.4241 + by (import transc EXP_MONO_LE)
10.4242 +
10.4243 +lemma EXP_INJ: "ALL x y. (exp x = exp y) = (x = y)"
10.4244 + by (import transc EXP_INJ)
10.4245 +
10.4246 +lemma EXP_TOTAL_LEMMA: "(All::(real => bool) => bool)
10.4247 + (%y::real.
10.4248 + (op -->::bool => bool => bool)
10.4249 + ((op <=::real => real => bool) (1::real) y)
10.4250 + ((Ex::(real => bool) => bool)
10.4251 + (%x::real.
10.4252 + (op &::bool => bool => bool)
10.4253 + ((op <=::real => real => bool) (0::real) x)
10.4254 + ((op &::bool => bool => bool)
10.4255 + ((op <=::real => real => bool) x
10.4256 + ((op -::real => real => real) y (1::real)))
10.4257 + ((op =::real => real => bool) ((exp::real => real) x) y)))))"
10.4258 + by (import transc EXP_TOTAL_LEMMA)
10.4259 +
10.4260 +lemma EXP_TOTAL: "(All::(real => bool) => bool)
10.4261 + (%y::real.
10.4262 + (op -->::bool => bool => bool)
10.4263 + ((op <::real => real => bool) (0::real) y)
10.4264 + ((Ex::(real => bool) => bool)
10.4265 + (%x::real. (op =::real => real => bool) ((exp::real => real) x) y)))"
10.4266 + by (import transc EXP_TOTAL)
10.4267 +
10.4268 +constdefs
10.4269 + ln :: "real => real"
10.4270 + "ln == %x. SOME u. exp u = x"
10.4271 +
10.4272 +lemma ln: "ALL x. ln x = (SOME u. exp u = x)"
10.4273 + by (import transc ln)
10.4274 +
10.4275 +lemma LN_EXP: "ALL x. ln (exp x) = x"
10.4276 + by (import transc LN_EXP)
10.4277 +
10.4278 +lemma EXP_LN: "ALL x. (exp (ln x) = x) = (0 < x)"
10.4279 + by (import transc EXP_LN)
10.4280 +
10.4281 +lemma LN_MUL: "(All::(real => bool) => bool)
10.4282 + (%x::real.
10.4283 + (All::(real => bool) => bool)
10.4284 + (%y::real.
10.4285 + (op -->::bool => bool => bool)
10.4286 + ((op &::bool => bool => bool)
10.4287 + ((op <::real => real => bool) (0::real) x)
10.4288 + ((op <::real => real => bool) (0::real) y))
10.4289 + ((op =::real => real => bool)
10.4290 + ((ln::real => real) ((op *::real => real => real) x y))
10.4291 + ((op +::real => real => real) ((ln::real => real) x)
10.4292 + ((ln::real => real) y)))))"
10.4293 + by (import transc LN_MUL)
10.4294 +
10.4295 +lemma LN_INJ: "(All::(real => bool) => bool)
10.4296 + (%x::real.
10.4297 + (All::(real => bool) => bool)
10.4298 + (%y::real.
10.4299 + (op -->::bool => bool => bool)
10.4300 + ((op &::bool => bool => bool)
10.4301 + ((op <::real => real => bool) (0::real) x)
10.4302 + ((op <::real => real => bool) (0::real) y))
10.4303 + ((op =::bool => bool => bool)
10.4304 + ((op =::real => real => bool) ((ln::real => real) x)
10.4305 + ((ln::real => real) y))
10.4306 + ((op =::real => real => bool) x y))))"
10.4307 + by (import transc LN_INJ)
10.4308 +
10.4309 +lemma LN_1: "ln 1 = 0"
10.4310 + by (import transc LN_1)
10.4311 +
10.4312 +lemma LN_INV: "(All::(real => bool) => bool)
10.4313 + (%x::real.
10.4314 + (op -->::bool => bool => bool)
10.4315 + ((op <::real => real => bool) (0::real) x)
10.4316 + ((op =::real => real => bool)
10.4317 + ((ln::real => real) ((inverse::real => real) x))
10.4318 + ((uminus::real => real) ((ln::real => real) x))))"
10.4319 + by (import transc LN_INV)
10.4320 +
10.4321 +lemma LN_DIV: "(All::(real => bool) => bool)
10.4322 + (%x::real.
10.4323 + (All::(real => bool) => bool)
10.4324 + (%y::real.
10.4325 + (op -->::bool => bool => bool)
10.4326 + ((op &::bool => bool => bool)
10.4327 + ((op <::real => real => bool) (0::real) x)
10.4328 + ((op <::real => real => bool) (0::real) y))
10.4329 + ((op =::real => real => bool)
10.4330 + ((ln::real => real) ((op /::real => real => real) x y))
10.4331 + ((op -::real => real => real) ((ln::real => real) x)
10.4332 + ((ln::real => real) y)))))"
10.4333 + by (import transc LN_DIV)
10.4334 +
10.4335 +lemma LN_MONO_LT: "(All::(real => bool) => bool)
10.4336 + (%x::real.
10.4337 + (All::(real => bool) => bool)
10.4338 + (%y::real.
10.4339 + (op -->::bool => bool => bool)
10.4340 + ((op &::bool => bool => bool)
10.4341 + ((op <::real => real => bool) (0::real) x)
10.4342 + ((op <::real => real => bool) (0::real) y))
10.4343 + ((op =::bool => bool => bool)
10.4344 + ((op <::real => real => bool) ((ln::real => real) x)
10.4345 + ((ln::real => real) y))
10.4346 + ((op <::real => real => bool) x y))))"
10.4347 + by (import transc LN_MONO_LT)
10.4348 +
10.4349 +lemma LN_MONO_LE: "(All::(real => bool) => bool)
10.4350 + (%x::real.
10.4351 + (All::(real => bool) => bool)
10.4352 + (%y::real.
10.4353 + (op -->::bool => bool => bool)
10.4354 + ((op &::bool => bool => bool)
10.4355 + ((op <::real => real => bool) (0::real) x)
10.4356 + ((op <::real => real => bool) (0::real) y))
10.4357 + ((op =::bool => bool => bool)
10.4358 + ((op <=::real => real => bool) ((ln::real => real) x)
10.4359 + ((ln::real => real) y))
10.4360 + ((op <=::real => real => bool) x y))))"
10.4361 + by (import transc LN_MONO_LE)
10.4362 +
10.4363 +lemma LN_POW: "(All::(nat => bool) => bool)
10.4364 + (%n::nat.
10.4365 + (All::(real => bool) => bool)
10.4366 + (%x::real.
10.4367 + (op -->::bool => bool => bool)
10.4368 + ((op <::real => real => bool) (0::real) x)
10.4369 + ((op =::real => real => bool)
10.4370 + ((ln::real => real) ((op ^::real => nat => real) x n))
10.4371 + ((op *::real => real => real) ((real::nat => real) n)
10.4372 + ((ln::real => real) x)))))"
10.4373 + by (import transc LN_POW)
10.4374 +
10.4375 +lemma LN_LE: "(All::(real => bool) => bool)
10.4376 + (%x::real.
10.4377 + (op -->::bool => bool => bool)
10.4378 + ((op <=::real => real => bool) (0::real) x)
10.4379 + ((op <=::real => real => bool)
10.4380 + ((ln::real => real) ((op +::real => real => real) (1::real) x)) x))"
10.4381 + by (import transc LN_LE)
10.4382 +
10.4383 +lemma LN_LT_X: "(All::(real => bool) => bool)
10.4384 + (%x::real.
10.4385 + (op -->::bool => bool => bool)
10.4386 + ((op <::real => real => bool) (0::real) x)
10.4387 + ((op <::real => real => bool) ((ln::real => real) x) x))"
10.4388 + by (import transc LN_LT_X)
10.4389 +
10.4390 +lemma LN_POS: "(All::(real => bool) => bool)
10.4391 + (%x::real.
10.4392 + (op -->::bool => bool => bool)
10.4393 + ((op <=::real => real => bool) (1::real) x)
10.4394 + ((op <=::real => real => bool) (0::real) ((ln::real => real) x)))"
10.4395 + by (import transc LN_POS)
10.4396 +
10.4397 +constdefs
10.4398 + root :: "nat => real => real"
10.4399 + "(op ==::(nat => real => real) => (nat => real => real) => prop)
10.4400 + (root::nat => real => real)
10.4401 + (%(n::nat) x::real.
10.4402 + (Eps::(real => bool) => real)
10.4403 + (%u::real.
10.4404 + (op &::bool => bool => bool)
10.4405 + ((op -->::bool => bool => bool)
10.4406 + ((op <::real => real => bool) (0::real) x)
10.4407 + ((op <::real => real => bool) (0::real) u))
10.4408 + ((op =::real => real => bool) ((op ^::real => nat => real) u n)
10.4409 + x)))"
10.4410 +
10.4411 +lemma root: "(All::(nat => bool) => bool)
10.4412 + (%n::nat.
10.4413 + (All::(real => bool) => bool)
10.4414 + (%x::real.
10.4415 + (op =::real => real => bool) ((root::nat => real => real) n x)
10.4416 + ((Eps::(real => bool) => real)
10.4417 + (%u::real.
10.4418 + (op &::bool => bool => bool)
10.4419 + ((op -->::bool => bool => bool)
10.4420 + ((op <::real => real => bool) (0::real) x)
10.4421 + ((op <::real => real => bool) (0::real) u))
10.4422 + ((op =::real => real => bool)
10.4423 + ((op ^::real => nat => real) u n) x)))))"
10.4424 + by (import transc root)
10.4425 +
10.4426 +constdefs
10.4427 + sqrt :: "real => real"
10.4428 + "sqrt == root 2"
10.4429 +
10.4430 +lemma sqrt: "ALL x. sqrt x = root 2 x"
10.4431 + by (import transc sqrt)
10.4432 +
10.4433 +lemma ROOT_LT_LEMMA: "(All::(nat => bool) => bool)
10.4434 + (%n::nat.
10.4435 + (All::(real => bool) => bool)
10.4436 + (%x::real.
10.4437 + (op -->::bool => bool => bool)
10.4438 + ((op <::real => real => bool) (0::real) x)
10.4439 + ((op =::real => real => bool)
10.4440 + ((op ^::real => nat => real)
10.4441 + ((exp::real => real)
10.4442 + ((op /::real => real => real) ((ln::real => real) x)
10.4443 + ((real::nat => real) ((Suc::nat => nat) n))))
10.4444 + ((Suc::nat => nat) n))
10.4445 + x)))"
10.4446 + by (import transc ROOT_LT_LEMMA)
10.4447 +
10.4448 +lemma ROOT_LN: "(All::(nat => bool) => bool)
10.4449 + (%n::nat.
10.4450 + (All::(real => bool) => bool)
10.4451 + (%x::real.
10.4452 + (op -->::bool => bool => bool)
10.4453 + ((op <::real => real => bool) (0::real) x)
10.4454 + ((op =::real => real => bool)
10.4455 + ((root::nat => real => real) ((Suc::nat => nat) n) x)
10.4456 + ((exp::real => real)
10.4457 + ((op /::real => real => real) ((ln::real => real) x)
10.4458 + ((real::nat => real) ((Suc::nat => nat) n)))))))"
10.4459 + by (import transc ROOT_LN)
10.4460 +
10.4461 +lemma ROOT_0: "ALL n. root (Suc n) 0 = 0"
10.4462 + by (import transc ROOT_0)
10.4463 +
10.4464 +lemma ROOT_1: "ALL n. root (Suc n) 1 = 1"
10.4465 + by (import transc ROOT_1)
10.4466 +
10.4467 +lemma ROOT_POS_LT: "(All::(nat => bool) => bool)
10.4468 + (%n::nat.
10.4469 + (All::(real => bool) => bool)
10.4470 + (%x::real.
10.4471 + (op -->::bool => bool => bool)
10.4472 + ((op <::real => real => bool) (0::real) x)
10.4473 + ((op <::real => real => bool) (0::real)
10.4474 + ((root::nat => real => real) ((Suc::nat => nat) n) x))))"
10.4475 + by (import transc ROOT_POS_LT)
10.4476 +
10.4477 +lemma ROOT_POW_POS: "(All::(nat => bool) => bool)
10.4478 + (%n::nat.
10.4479 + (All::(real => bool) => bool)
10.4480 + (%x::real.
10.4481 + (op -->::bool => bool => bool)
10.4482 + ((op <=::real => real => bool) (0::real) x)
10.4483 + ((op =::real => real => bool)
10.4484 + ((op ^::real => nat => real)
10.4485 + ((root::nat => real => real) ((Suc::nat => nat) n) x)
10.4486 + ((Suc::nat => nat) n))
10.4487 + x)))"
10.4488 + by (import transc ROOT_POW_POS)
10.4489 +
10.4490 +lemma POW_ROOT_POS: "(All::(nat => bool) => bool)
10.4491 + (%n::nat.
10.4492 + (All::(real => bool) => bool)
10.4493 + (%x::real.
10.4494 + (op -->::bool => bool => bool)
10.4495 + ((op <=::real => real => bool) (0::real) x)
10.4496 + ((op =::real => real => bool)
10.4497 + ((root::nat => real => real) ((Suc::nat => nat) n)
10.4498 + ((op ^::real => nat => real) x ((Suc::nat => nat) n)))
10.4499 + x)))"
10.4500 + by (import transc POW_ROOT_POS)
10.4501 +
10.4502 +lemma ROOT_POS: "(All::(nat => bool) => bool)
10.4503 + (%n::nat.
10.4504 + (All::(real => bool) => bool)
10.4505 + (%x::real.
10.4506 + (op -->::bool => bool => bool)
10.4507 + ((op <=::real => real => bool) (0::real) x)
10.4508 + ((op <=::real => real => bool) (0::real)
10.4509 + ((root::nat => real => real) ((Suc::nat => nat) n) x))))"
10.4510 + by (import transc ROOT_POS)
10.4511 +
10.4512 +lemma ROOT_POS_UNIQ: "(All::(nat => bool) => bool)
10.4513 + (%n::nat.
10.4514 + (All::(real => bool) => bool)
10.4515 + (%x::real.
10.4516 + (All::(real => bool) => bool)
10.4517 + (%y::real.
10.4518 + (op -->::bool => bool => bool)
10.4519 + ((op &::bool => bool => bool)
10.4520 + ((op <=::real => real => bool) (0::real) x)
10.4521 + ((op &::bool => bool => bool)
10.4522 + ((op <=::real => real => bool) (0::real) y)
10.4523 + ((op =::real => real => bool)
10.4524 + ((op ^::real => nat => real) y ((Suc::nat => nat) n))
10.4525 + x)))
10.4526 + ((op =::real => real => bool)
10.4527 + ((root::nat => real => real) ((Suc::nat => nat) n) x)
10.4528 + y))))"
10.4529 + by (import transc ROOT_POS_UNIQ)
10.4530 +
10.4531 +lemma ROOT_MUL: "(All::(nat => bool) => bool)
10.4532 + (%n::nat.
10.4533 + (All::(real => bool) => bool)
10.4534 + (%x::real.
10.4535 + (All::(real => bool) => bool)
10.4536 + (%y::real.
10.4537 + (op -->::bool => bool => bool)
10.4538 + ((op &::bool => bool => bool)
10.4539 + ((op <=::real => real => bool) (0::real) x)
10.4540 + ((op <=::real => real => bool) (0::real) y))
10.4541 + ((op =::real => real => bool)
10.4542 + ((root::nat => real => real) ((Suc::nat => nat) n)
10.4543 + ((op *::real => real => real) x y))
10.4544 + ((op *::real => real => real)
10.4545 + ((root::nat => real => real) ((Suc::nat => nat) n) x)
10.4546 + ((root::nat => real => real) ((Suc::nat => nat) n)
10.4547 + y))))))"
10.4548 + by (import transc ROOT_MUL)
10.4549 +
10.4550 +lemma ROOT_INV: "(All::(nat => bool) => bool)
10.4551 + (%n::nat.
10.4552 + (All::(real => bool) => bool)
10.4553 + (%x::real.
10.4554 + (op -->::bool => bool => bool)
10.4555 + ((op <=::real => real => bool) (0::real) x)
10.4556 + ((op =::real => real => bool)
10.4557 + ((root::nat => real => real) ((Suc::nat => nat) n)
10.4558 + ((inverse::real => real) x))
10.4559 + ((inverse::real => real)
10.4560 + ((root::nat => real => real) ((Suc::nat => nat) n) x)))))"
10.4561 + by (import transc ROOT_INV)
10.4562 +
10.4563 +lemma ROOT_DIV: "(All::(nat => bool) => bool)
10.4564 + (%x::nat.
10.4565 + (All::(real => bool) => bool)
10.4566 + (%xa::real.
10.4567 + (All::(real => bool) => bool)
10.4568 + (%xb::real.
10.4569 + (op -->::bool => bool => bool)
10.4570 + ((op &::bool => bool => bool)
10.4571 + ((op <=::real => real => bool) (0::real) xa)
10.4572 + ((op <=::real => real => bool) (0::real) xb))
10.4573 + ((op =::real => real => bool)
10.4574 + ((root::nat => real => real) ((Suc::nat => nat) x)
10.4575 + ((op /::real => real => real) xa xb))
10.4576 + ((op /::real => real => real)
10.4577 + ((root::nat => real => real) ((Suc::nat => nat) x) xa)
10.4578 + ((root::nat => real => real) ((Suc::nat => nat) x)
10.4579 + xb))))))"
10.4580 + by (import transc ROOT_DIV)
10.4581 +
10.4582 +lemma ROOT_MONO_LE: "(All::(real => bool) => bool)
10.4583 + (%x::real.
10.4584 + (All::(real => bool) => bool)
10.4585 + (%y::real.
10.4586 + (op -->::bool => bool => bool)
10.4587 + ((op &::bool => bool => bool)
10.4588 + ((op <=::real => real => bool) (0::real) x)
10.4589 + ((op <=::real => real => bool) x y))
10.4590 + ((op <=::real => real => bool)
10.4591 + ((root::nat => real => real) ((Suc::nat => nat) (n::nat)) x)
10.4592 + ((root::nat => real => real) ((Suc::nat => nat) n) y))))"
10.4593 + by (import transc ROOT_MONO_LE)
10.4594 +
10.4595 +lemma SQRT_0: "sqrt 0 = 0"
10.4596 + by (import transc SQRT_0)
10.4597 +
10.4598 +lemma SQRT_1: "sqrt 1 = 1"
10.4599 + by (import transc SQRT_1)
10.4600 +
10.4601 +lemma SQRT_POS_LT: "(All::(real => bool) => bool)
10.4602 + (%x::real.
10.4603 + (op -->::bool => bool => bool)
10.4604 + ((op <::real => real => bool) (0::real) x)
10.4605 + ((op <::real => real => bool) (0::real) ((sqrt::real => real) x)))"
10.4606 + by (import transc SQRT_POS_LT)
10.4607 +
10.4608 +lemma SQRT_POS_LE: "(All::(real => bool) => bool)
10.4609 + (%x::real.
10.4610 + (op -->::bool => bool => bool)
10.4611 + ((op <=::real => real => bool) (0::real) x)
10.4612 + ((op <=::real => real => bool) (0::real) ((sqrt::real => real) x)))"
10.4613 + by (import transc SQRT_POS_LE)
10.4614 +
10.4615 +lemma SQRT_POW2: "ALL x. (sqrt x ^ 2 = x) = (0 <= x)"
10.4616 + by (import transc SQRT_POW2)
10.4617 +
10.4618 +lemma SQRT_POW_2: "(All::(real => bool) => bool)
10.4619 + (%x::real.
10.4620 + (op -->::bool => bool => bool)
10.4621 + ((op <=::real => real => bool) (0::real) x)
10.4622 + ((op =::real => real => bool)
10.4623 + ((op ^::real => nat => real) ((sqrt::real => real) x)
10.4624 + ((number_of::bin => nat)
10.4625 + ((op BIT::bin => bool => bin)
10.4626 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4627 + (False::bool))))
10.4628 + x))"
10.4629 + by (import transc SQRT_POW_2)
10.4630 +
10.4631 +lemma POW_2_SQRT: "(op -->::bool => bool => bool)
10.4632 + ((op <=::real => real => bool) (0::real) (x::real))
10.4633 + ((op =::real => real => bool)
10.4634 + ((sqrt::real => real)
10.4635 + ((op ^::real => nat => real) x
10.4636 + ((number_of::bin => nat)
10.4637 + ((op BIT::bin => bool => bin)
10.4638 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4639 + (False::bool)))))
10.4640 + x)"
10.4641 + by (import transc POW_2_SQRT)
10.4642 +
10.4643 +lemma SQRT_POS_UNIQ: "(All::(real => bool) => bool)
10.4644 + (%x::real.
10.4645 + (All::(real => bool) => bool)
10.4646 + (%xa::real.
10.4647 + (op -->::bool => bool => bool)
10.4648 + ((op &::bool => bool => bool)
10.4649 + ((op <=::real => real => bool) (0::real) x)
10.4650 + ((op &::bool => bool => bool)
10.4651 + ((op <=::real => real => bool) (0::real) xa)
10.4652 + ((op =::real => real => bool)
10.4653 + ((op ^::real => nat => real) xa
10.4654 + ((number_of::bin => nat)
10.4655 + ((op BIT::bin => bool => bin)
10.4656 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.4657 + (True::bool))
10.4658 + (False::bool))))
10.4659 + x)))
10.4660 + ((op =::real => real => bool) ((sqrt::real => real) x) xa)))"
10.4661 + by (import transc SQRT_POS_UNIQ)
10.4662 +
10.4663 +lemma SQRT_MUL: "(All::(real => bool) => bool)
10.4664 + (%x::real.
10.4665 + (All::(real => bool) => bool)
10.4666 + (%xa::real.
10.4667 + (op -->::bool => bool => bool)
10.4668 + ((op &::bool => bool => bool)
10.4669 + ((op <=::real => real => bool) (0::real) x)
10.4670 + ((op <=::real => real => bool) (0::real) xa))
10.4671 + ((op =::real => real => bool)
10.4672 + ((sqrt::real => real) ((op *::real => real => real) x xa))
10.4673 + ((op *::real => real => real) ((sqrt::real => real) x)
10.4674 + ((sqrt::real => real) xa)))))"
10.4675 + by (import transc SQRT_MUL)
10.4676 +
10.4677 +lemma SQRT_INV: "(All::(real => bool) => bool)
10.4678 + (%x::real.
10.4679 + (op -->::bool => bool => bool)
10.4680 + ((op <=::real => real => bool) (0::real) x)
10.4681 + ((op =::real => real => bool)
10.4682 + ((sqrt::real => real) ((inverse::real => real) x))
10.4683 + ((inverse::real => real) ((sqrt::real => real) x))))"
10.4684 + by (import transc SQRT_INV)
10.4685 +
10.4686 +lemma SQRT_DIV: "(All::(real => bool) => bool)
10.4687 + (%x::real.
10.4688 + (All::(real => bool) => bool)
10.4689 + (%xa::real.
10.4690 + (op -->::bool => bool => bool)
10.4691 + ((op &::bool => bool => bool)
10.4692 + ((op <=::real => real => bool) (0::real) x)
10.4693 + ((op <=::real => real => bool) (0::real) xa))
10.4694 + ((op =::real => real => bool)
10.4695 + ((sqrt::real => real) ((op /::real => real => real) x xa))
10.4696 + ((op /::real => real => real) ((sqrt::real => real) x)
10.4697 + ((sqrt::real => real) xa)))))"
10.4698 + by (import transc SQRT_DIV)
10.4699 +
10.4700 +lemma SQRT_MONO_LE: "(All::(real => bool) => bool)
10.4701 + (%x::real.
10.4702 + (All::(real => bool) => bool)
10.4703 + (%xa::real.
10.4704 + (op -->::bool => bool => bool)
10.4705 + ((op &::bool => bool => bool)
10.4706 + ((op <=::real => real => bool) (0::real) x)
10.4707 + ((op <=::real => real => bool) x xa))
10.4708 + ((op <=::real => real => bool) ((sqrt::real => real) x)
10.4709 + ((sqrt::real => real) xa))))"
10.4710 + by (import transc SQRT_MONO_LE)
10.4711 +
10.4712 +lemma SQRT_EVEN_POW2: "(All::(nat => bool) => bool)
10.4713 + (%n::nat.
10.4714 + (op -->::bool => bool => bool) ((EVEN::nat => bool) n)
10.4715 + ((op =::real => real => bool)
10.4716 + ((sqrt::real => real)
10.4717 + ((op ^::real => nat => real)
10.4718 + ((number_of::bin => real)
10.4719 + ((op BIT::bin => bool => bin)
10.4720 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4721 + (False::bool)))
10.4722 + n))
10.4723 + ((op ^::real => nat => real)
10.4724 + ((number_of::bin => real)
10.4725 + ((op BIT::bin => bool => bin)
10.4726 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4727 + (False::bool)))
10.4728 + ((op div::nat => nat => nat) n
10.4729 + ((number_of::bin => nat)
10.4730 + ((op BIT::bin => bool => bin)
10.4731 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4732 + (False::bool)))))))"
10.4733 + by (import transc SQRT_EVEN_POW2)
10.4734 +
10.4735 +lemma REAL_DIV_SQRT: "(All::(real => bool) => bool)
10.4736 + (%x::real.
10.4737 + (op -->::bool => bool => bool)
10.4738 + ((op <=::real => real => bool) (0::real) x)
10.4739 + ((op =::real => real => bool)
10.4740 + ((op /::real => real => real) x ((sqrt::real => real) x))
10.4741 + ((sqrt::real => real) x)))"
10.4742 + by (import transc REAL_DIV_SQRT)
10.4743 +
10.4744 +lemma SQRT_EQ: "(All::(real => bool) => bool)
10.4745 + (%x::real.
10.4746 + (All::(real => bool) => bool)
10.4747 + (%y::real.
10.4748 + (op -->::bool => bool => bool)
10.4749 + ((op &::bool => bool => bool)
10.4750 + ((op =::real => real => bool)
10.4751 + ((op ^::real => nat => real) x
10.4752 + ((number_of::bin => nat)
10.4753 + ((op BIT::bin => bool => bin)
10.4754 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.4755 + (True::bool))
10.4756 + (False::bool))))
10.4757 + y)
10.4758 + ((op <=::real => real => bool) (0::real) x))
10.4759 + ((op =::real => real => bool) x ((sqrt::real => real) y))))"
10.4760 + by (import transc SQRT_EQ)
10.4761 +
10.4762 +lemma SIN_0: "sin 0 = 0"
10.4763 + by (import transc SIN_0)
10.4764 +
10.4765 +lemma COS_0: "cos 0 = 1"
10.4766 + by (import transc COS_0)
10.4767 +
10.4768 +lemma SIN_CIRCLE: "ALL x. sin x ^ 2 + cos x ^ 2 = 1"
10.4769 + by (import transc SIN_CIRCLE)
10.4770 +
10.4771 +lemma SIN_BOUND: "ALL x. abs (sin x) <= 1"
10.4772 + by (import transc SIN_BOUND)
10.4773 +
10.4774 +lemma SIN_BOUNDS: "ALL x. - 1 <= sin x & sin x <= 1"
10.4775 + by (import transc SIN_BOUNDS)
10.4776 +
10.4777 +lemma COS_BOUND: "ALL x. abs (cos x) <= 1"
10.4778 + by (import transc COS_BOUND)
10.4779 +
10.4780 +lemma COS_BOUNDS: "ALL x. - 1 <= cos x & cos x <= 1"
10.4781 + by (import transc COS_BOUNDS)
10.4782 +
10.4783 +lemma SIN_COS_ADD: "ALL x y.
10.4784 + (sin (x + y) - (sin x * cos y + cos x * sin y)) ^ 2 +
10.4785 + (cos (x + y) - (cos x * cos y - sin x * sin y)) ^ 2 =
10.4786 + 0"
10.4787 + by (import transc SIN_COS_ADD)
10.4788 +
10.4789 +lemma SIN_COS_NEG: "ALL x. (sin (- x) + sin x) ^ 2 + (cos (- x) - cos x) ^ 2 = 0"
10.4790 + by (import transc SIN_COS_NEG)
10.4791 +
10.4792 +lemma SIN_ADD: "ALL x y. sin (x + y) = sin x * cos y + cos x * sin y"
10.4793 + by (import transc SIN_ADD)
10.4794 +
10.4795 +lemma COS_ADD: "ALL x y. cos (x + y) = cos x * cos y - sin x * sin y"
10.4796 + by (import transc COS_ADD)
10.4797 +
10.4798 +lemma SIN_NEG: "ALL x. sin (- x) = - sin x"
10.4799 + by (import transc SIN_NEG)
10.4800 +
10.4801 +lemma COS_NEG: "ALL x. cos (- x) = cos x"
10.4802 + by (import transc COS_NEG)
10.4803 +
10.4804 +lemma SIN_DOUBLE: "ALL x. sin (2 * x) = 2 * (sin x * cos x)"
10.4805 + by (import transc SIN_DOUBLE)
10.4806 +
10.4807 +lemma COS_DOUBLE: "ALL x. cos (2 * x) = cos x ^ 2 - sin x ^ 2"
10.4808 + by (import transc COS_DOUBLE)
10.4809 +
10.4810 +lemma SIN_PAIRED: "ALL x.
10.4811 + sums (%n. (- 1) ^ n / real (FACT (2 * n + 1)) * x ^ (2 * n + 1)) (sin x)"
10.4812 + by (import transc SIN_PAIRED)
10.4813 +
10.4814 +lemma SIN_POS: "(All::(real => bool) => bool)
10.4815 + (%x::real.
10.4816 + (op -->::bool => bool => bool)
10.4817 + ((op &::bool => bool => bool)
10.4818 + ((op <::real => real => bool) (0::real) x)
10.4819 + ((op <::real => real => bool) x
10.4820 + ((number_of::bin => real)
10.4821 + ((op BIT::bin => bool => bin)
10.4822 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4823 + (False::bool)))))
10.4824 + ((op <::real => real => bool) (0::real) ((sin::real => real) x)))"
10.4825 + by (import transc SIN_POS)
10.4826 +
10.4827 +lemma COS_PAIRED: "ALL x. sums (%n. (- 1) ^ n / real (FACT (2 * n)) * x ^ (2 * n)) (cos x)"
10.4828 + by (import transc COS_PAIRED)
10.4829 +
10.4830 +lemma COS_2: "cos 2 < 0"
10.4831 + by (import transc COS_2)
10.4832 +
10.4833 +lemma COS_ISZERO: "EX! x. 0 <= x & x <= 2 & cos x = 0"
10.4834 + by (import transc COS_ISZERO)
10.4835 +
10.4836 +constdefs
10.4837 + pi :: "real"
10.4838 + "pi == 2 * (SOME x. 0 <= x & x <= 2 & cos x = 0)"
10.4839 +
10.4840 +lemma pi: "pi = 2 * (SOME x. 0 <= x & x <= 2 & cos x = 0)"
10.4841 + by (import transc pi)
10.4842 +
10.4843 +lemma PI2: "pi / 2 = (SOME x. 0 <= x & x <= 2 & cos x = 0)"
10.4844 + by (import transc PI2)
10.4845 +
10.4846 +lemma COS_PI2: "cos (pi / 2) = 0"
10.4847 + by (import transc COS_PI2)
10.4848 +
10.4849 +lemma PI2_BOUNDS: "0 < pi / 2 & pi / 2 < 2"
10.4850 + by (import transc PI2_BOUNDS)
10.4851 +
10.4852 +lemma PI_POS: "0 < pi"
10.4853 + by (import transc PI_POS)
10.4854 +
10.4855 +lemma SIN_PI2: "sin (pi / 2) = 1"
10.4856 + by (import transc SIN_PI2)
10.4857 +
10.4858 +lemma COS_PI: "cos pi = - 1"
10.4859 + by (import transc COS_PI)
10.4860 +
10.4861 +lemma SIN_PI: "sin pi = 0"
10.4862 + by (import transc SIN_PI)
10.4863 +
10.4864 +lemma SIN_COS: "ALL x. sin x = cos (pi / 2 - x)"
10.4865 + by (import transc SIN_COS)
10.4866 +
10.4867 +lemma COS_SIN: "ALL x. cos x = sin (pi / 2 - x)"
10.4868 + by (import transc COS_SIN)
10.4869 +
10.4870 +lemma SIN_PERIODIC_PI: "ALL x. sin (x + pi) = - sin x"
10.4871 + by (import transc SIN_PERIODIC_PI)
10.4872 +
10.4873 +lemma COS_PERIODIC_PI: "ALL x. cos (x + pi) = - cos x"
10.4874 + by (import transc COS_PERIODIC_PI)
10.4875 +
10.4876 +lemma SIN_PERIODIC: "ALL x. sin (x + 2 * pi) = sin x"
10.4877 + by (import transc SIN_PERIODIC)
10.4878 +
10.4879 +lemma COS_PERIODIC: "ALL x. cos (x + 2 * pi) = cos x"
10.4880 + by (import transc COS_PERIODIC)
10.4881 +
10.4882 +lemma COS_NPI: "ALL n. cos (real n * pi) = (- 1) ^ n"
10.4883 + by (import transc COS_NPI)
10.4884 +
10.4885 +lemma SIN_NPI: "ALL n::nat. sin (real n * pi) = (0::real)"
10.4886 + by (import transc SIN_NPI)
10.4887 +
10.4888 +lemma SIN_POS_PI2: "(All::(real => bool) => bool)
10.4889 + (%x::real.
10.4890 + (op -->::bool => bool => bool)
10.4891 + ((op &::bool => bool => bool)
10.4892 + ((op <::real => real => bool) (0::real) x)
10.4893 + ((op <::real => real => bool) x
10.4894 + ((op /::real => real => real) (pi::real)
10.4895 + ((number_of::bin => real)
10.4896 + ((op BIT::bin => bool => bin)
10.4897 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4898 + (False::bool))))))
10.4899 + ((op <::real => real => bool) (0::real) ((sin::real => real) x)))"
10.4900 + by (import transc SIN_POS_PI2)
10.4901 +
10.4902 +lemma COS_POS_PI2: "(All::(real => bool) => bool)
10.4903 + (%x::real.
10.4904 + (op -->::bool => bool => bool)
10.4905 + ((op &::bool => bool => bool)
10.4906 + ((op <::real => real => bool) (0::real) x)
10.4907 + ((op <::real => real => bool) x
10.4908 + ((op /::real => real => real) (pi::real)
10.4909 + ((number_of::bin => real)
10.4910 + ((op BIT::bin => bool => bin)
10.4911 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4912 + (False::bool))))))
10.4913 + ((op <::real => real => bool) (0::real) ((cos::real => real) x)))"
10.4914 + by (import transc COS_POS_PI2)
10.4915 +
10.4916 +lemma COS_POS_PI: "(All::(real => bool) => bool)
10.4917 + (%x::real.
10.4918 + (op -->::bool => bool => bool)
10.4919 + ((op &::bool => bool => bool)
10.4920 + ((op <::real => real => bool)
10.4921 + ((uminus::real => real)
10.4922 + ((op /::real => real => real) (pi::real)
10.4923 + ((number_of::bin => real)
10.4924 + ((op BIT::bin => bool => bin)
10.4925 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4926 + (False::bool)))))
10.4927 + x)
10.4928 + ((op <::real => real => bool) x
10.4929 + ((op /::real => real => real) (pi::real)
10.4930 + ((number_of::bin => real)
10.4931 + ((op BIT::bin => bool => bin)
10.4932 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4933 + (False::bool))))))
10.4934 + ((op <::real => real => bool) (0::real) ((cos::real => real) x)))"
10.4935 + by (import transc COS_POS_PI)
10.4936 +
10.4937 +lemma SIN_POS_PI: "(All::(real => bool) => bool)
10.4938 + (%x::real.
10.4939 + (op -->::bool => bool => bool)
10.4940 + ((op &::bool => bool => bool)
10.4941 + ((op <::real => real => bool) (0::real) x)
10.4942 + ((op <::real => real => bool) x (pi::real)))
10.4943 + ((op <::real => real => bool) (0::real) ((sin::real => real) x)))"
10.4944 + by (import transc SIN_POS_PI)
10.4945 +
10.4946 +lemma COS_POS_PI2_LE: "(All::(real => bool) => bool)
10.4947 + (%x::real.
10.4948 + (op -->::bool => bool => bool)
10.4949 + ((op &::bool => bool => bool)
10.4950 + ((op <=::real => real => bool) (0::real) x)
10.4951 + ((op <=::real => real => bool) x
10.4952 + ((op /::real => real => real) (pi::real)
10.4953 + ((number_of::bin => real)
10.4954 + ((op BIT::bin => bool => bin)
10.4955 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4956 + (False::bool))))))
10.4957 + ((op <=::real => real => bool) (0::real) ((cos::real => real) x)))"
10.4958 + by (import transc COS_POS_PI2_LE)
10.4959 +
10.4960 +lemma COS_POS_PI_LE: "(All::(real => bool) => bool)
10.4961 + (%x::real.
10.4962 + (op -->::bool => bool => bool)
10.4963 + ((op &::bool => bool => bool)
10.4964 + ((op <=::real => real => bool)
10.4965 + ((uminus::real => real)
10.4966 + ((op /::real => real => real) (pi::real)
10.4967 + ((number_of::bin => real)
10.4968 + ((op BIT::bin => bool => bin)
10.4969 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4970 + (False::bool)))))
10.4971 + x)
10.4972 + ((op <=::real => real => bool) x
10.4973 + ((op /::real => real => real) (pi::real)
10.4974 + ((number_of::bin => real)
10.4975 + ((op BIT::bin => bool => bin)
10.4976 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4977 + (False::bool))))))
10.4978 + ((op <=::real => real => bool) (0::real) ((cos::real => real) x)))"
10.4979 + by (import transc COS_POS_PI_LE)
10.4980 +
10.4981 +lemma SIN_POS_PI2_LE: "(All::(real => bool) => bool)
10.4982 + (%x::real.
10.4983 + (op -->::bool => bool => bool)
10.4984 + ((op &::bool => bool => bool)
10.4985 + ((op <=::real => real => bool) (0::real) x)
10.4986 + ((op <=::real => real => bool) x
10.4987 + ((op /::real => real => real) (pi::real)
10.4988 + ((number_of::bin => real)
10.4989 + ((op BIT::bin => bool => bin)
10.4990 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.4991 + (False::bool))))))
10.4992 + ((op <=::real => real => bool) (0::real) ((sin::real => real) x)))"
10.4993 + by (import transc SIN_POS_PI2_LE)
10.4994 +
10.4995 +lemma SIN_POS_PI_LE: "(All::(real => bool) => bool)
10.4996 + (%x::real.
10.4997 + (op -->::bool => bool => bool)
10.4998 + ((op &::bool => bool => bool)
10.4999 + ((op <=::real => real => bool) (0::real) x)
10.5000 + ((op <=::real => real => bool) x (pi::real)))
10.5001 + ((op <=::real => real => bool) (0::real) ((sin::real => real) x)))"
10.5002 + by (import transc SIN_POS_PI_LE)
10.5003 +
10.5004 +lemma COS_TOTAL: "(All::(real => bool) => bool)
10.5005 + (%y::real.
10.5006 + (op -->::bool => bool => bool)
10.5007 + ((op &::bool => bool => bool)
10.5008 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5009 + ((op <=::real => real => bool) y (1::real)))
10.5010 + ((Ex1::(real => bool) => bool)
10.5011 + (%x::real.
10.5012 + (op &::bool => bool => bool)
10.5013 + ((op <=::real => real => bool) (0::real) x)
10.5014 + ((op &::bool => bool => bool)
10.5015 + ((op <=::real => real => bool) x (pi::real))
10.5016 + ((op =::real => real => bool) ((cos::real => real) x) y)))))"
10.5017 + by (import transc COS_TOTAL)
10.5018 +
10.5019 +lemma SIN_TOTAL: "(All::(real => bool) => bool)
10.5020 + (%y::real.
10.5021 + (op -->::bool => bool => bool)
10.5022 + ((op &::bool => bool => bool)
10.5023 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5024 + ((op <=::real => real => bool) y (1::real)))
10.5025 + ((Ex1::(real => bool) => bool)
10.5026 + (%x::real.
10.5027 + (op &::bool => bool => bool)
10.5028 + ((op <=::real => real => bool)
10.5029 + ((uminus::real => real)
10.5030 + ((op /::real => real => real) (pi::real)
10.5031 + ((number_of::bin => real)
10.5032 + ((op BIT::bin => bool => bin)
10.5033 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5034 + (True::bool))
10.5035 + (False::bool)))))
10.5036 + x)
10.5037 + ((op &::bool => bool => bool)
10.5038 + ((op <=::real => real => bool) x
10.5039 + ((op /::real => real => real) (pi::real)
10.5040 + ((number_of::bin => real)
10.5041 + ((op BIT::bin => bool => bin)
10.5042 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5043 + (True::bool))
10.5044 + (False::bool)))))
10.5045 + ((op =::real => real => bool) ((sin::real => real) x) y)))))"
10.5046 + by (import transc SIN_TOTAL)
10.5047 +
10.5048 +lemma COS_ZERO_LEMMA: "(All::(real => bool) => bool)
10.5049 + (%x::real.
10.5050 + (op -->::bool => bool => bool)
10.5051 + ((op &::bool => bool => bool)
10.5052 + ((op <=::real => real => bool) (0::real) x)
10.5053 + ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
10.5054 + ((Ex::(nat => bool) => bool)
10.5055 + (%n::nat.
10.5056 + (op &::bool => bool => bool)
10.5057 + ((Not::bool => bool) ((EVEN::nat => bool) n))
10.5058 + ((op =::real => real => bool) x
10.5059 + ((op *::real => real => real) ((real::nat => real) n)
10.5060 + ((op /::real => real => real) (pi::real)
10.5061 + ((number_of::bin => real)
10.5062 + ((op BIT::bin => bool => bin)
10.5063 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5064 + (True::bool))
10.5065 + (False::bool)))))))))"
10.5066 + by (import transc COS_ZERO_LEMMA)
10.5067 +
10.5068 +lemma SIN_ZERO_LEMMA: "(All::(real => bool) => bool)
10.5069 + (%x::real.
10.5070 + (op -->::bool => bool => bool)
10.5071 + ((op &::bool => bool => bool)
10.5072 + ((op <=::real => real => bool) (0::real) x)
10.5073 + ((op =::real => real => bool) ((sin::real => real) x) (0::real)))
10.5074 + ((Ex::(nat => bool) => bool)
10.5075 + (%n::nat.
10.5076 + (op &::bool => bool => bool) ((EVEN::nat => bool) n)
10.5077 + ((op =::real => real => bool) x
10.5078 + ((op *::real => real => real) ((real::nat => real) n)
10.5079 + ((op /::real => real => real) (pi::real)
10.5080 + ((number_of::bin => real)
10.5081 + ((op BIT::bin => bool => bin)
10.5082 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5083 + (True::bool))
10.5084 + (False::bool)))))))))"
10.5085 + by (import transc SIN_ZERO_LEMMA)
10.5086 +
10.5087 +lemma COS_ZERO: "ALL x.
10.5088 + (cos x = 0) =
10.5089 + ((EX n. ~ EVEN n & x = real n * (pi / 2)) |
10.5090 + (EX n. ~ EVEN n & x = - (real n * (pi / 2))))"
10.5091 + by (import transc COS_ZERO)
10.5092 +
10.5093 +lemma SIN_ZERO: "ALL x.
10.5094 + (sin x = 0) =
10.5095 + ((EX n. EVEN n & x = real n * (pi / 2)) |
10.5096 + (EX n. EVEN n & x = - (real n * (pi / 2))))"
10.5097 + by (import transc SIN_ZERO)
10.5098 +
10.5099 +constdefs
10.5100 + tan :: "real => real"
10.5101 + "tan == %x. sin x / cos x"
10.5102 +
10.5103 +lemma tan: "ALL x. tan x = sin x / cos x"
10.5104 + by (import transc tan)
10.5105 +
10.5106 +lemma TAN_0: "tan 0 = 0"
10.5107 + by (import transc TAN_0)
10.5108 +
10.5109 +lemma TAN_PI: "tan pi = 0"
10.5110 + by (import transc TAN_PI)
10.5111 +
10.5112 +lemma TAN_NPI: "ALL n::nat. tan (real n * pi) = (0::real)"
10.5113 + by (import transc TAN_NPI)
10.5114 +
10.5115 +lemma TAN_NEG: "ALL x. tan (- x) = - tan x"
10.5116 + by (import transc TAN_NEG)
10.5117 +
10.5118 +lemma TAN_PERIODIC: "ALL x. tan (x + 2 * pi) = tan x"
10.5119 + by (import transc TAN_PERIODIC)
10.5120 +
10.5121 +lemma TAN_ADD: "(All::(real => bool) => bool)
10.5122 + (%x::real.
10.5123 + (All::(real => bool) => bool)
10.5124 + (%y::real.
10.5125 + (op -->::bool => bool => bool)
10.5126 + ((op &::bool => bool => bool)
10.5127 + ((Not::bool => bool)
10.5128 + ((op =::real => real => bool) ((cos::real => real) x)
10.5129 + (0::real)))
10.5130 + ((op &::bool => bool => bool)
10.5131 + ((Not::bool => bool)
10.5132 + ((op =::real => real => bool) ((cos::real => real) y)
10.5133 + (0::real)))
10.5134 + ((Not::bool => bool)
10.5135 + ((op =::real => real => bool)
10.5136 + ((cos::real => real) ((op +::real => real => real) x y))
10.5137 + (0::real)))))
10.5138 + ((op =::real => real => bool)
10.5139 + ((tan::real => real) ((op +::real => real => real) x y))
10.5140 + ((op /::real => real => real)
10.5141 + ((op +::real => real => real) ((tan::real => real) x)
10.5142 + ((tan::real => real) y))
10.5143 + ((op -::real => real => real) (1::real)
10.5144 + ((op *::real => real => real) ((tan::real => real) x)
10.5145 + ((tan::real => real) y)))))))"
10.5146 + by (import transc TAN_ADD)
10.5147 +
10.5148 +lemma TAN_DOUBLE: "(All::(real => bool) => bool)
10.5149 + (%x::real.
10.5150 + (op -->::bool => bool => bool)
10.5151 + ((op &::bool => bool => bool)
10.5152 + ((Not::bool => bool)
10.5153 + ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
10.5154 + ((Not::bool => bool)
10.5155 + ((op =::real => real => bool)
10.5156 + ((cos::real => real)
10.5157 + ((op *::real => real => real)
10.5158 + ((number_of::bin => real)
10.5159 + ((op BIT::bin => bool => bin)
10.5160 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5161 + (True::bool))
10.5162 + (False::bool)))
10.5163 + x))
10.5164 + (0::real))))
10.5165 + ((op =::real => real => bool)
10.5166 + ((tan::real => real)
10.5167 + ((op *::real => real => real)
10.5168 + ((number_of::bin => real)
10.5169 + ((op BIT::bin => bool => bin)
10.5170 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5171 + (False::bool)))
10.5172 + x))
10.5173 + ((op /::real => real => real)
10.5174 + ((op *::real => real => real)
10.5175 + ((number_of::bin => real)
10.5176 + ((op BIT::bin => bool => bin)
10.5177 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5178 + (False::bool)))
10.5179 + ((tan::real => real) x))
10.5180 + ((op -::real => real => real) (1::real)
10.5181 + ((op ^::real => nat => real) ((tan::real => real) x)
10.5182 + ((number_of::bin => nat)
10.5183 + ((op BIT::bin => bool => bin)
10.5184 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5185 + (False::bool))))))))"
10.5186 + by (import transc TAN_DOUBLE)
10.5187 +
10.5188 +lemma TAN_POS_PI2: "(All::(real => bool) => bool)
10.5189 + (%x::real.
10.5190 + (op -->::bool => bool => bool)
10.5191 + ((op &::bool => bool => bool)
10.5192 + ((op <::real => real => bool) (0::real) x)
10.5193 + ((op <::real => real => bool) x
10.5194 + ((op /::real => real => real) (pi::real)
10.5195 + ((number_of::bin => real)
10.5196 + ((op BIT::bin => bool => bin)
10.5197 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5198 + (False::bool))))))
10.5199 + ((op <::real => real => bool) (0::real) ((tan::real => real) x)))"
10.5200 + by (import transc TAN_POS_PI2)
10.5201 +
10.5202 +lemma DIFF_TAN: "(All::(real => bool) => bool)
10.5203 + (%x::real.
10.5204 + (op -->::bool => bool => bool)
10.5205 + ((Not::bool => bool)
10.5206 + ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
10.5207 + ((diffl::(real => real) => real => real => bool) (tan::real => real)
10.5208 + ((inverse::real => real)
10.5209 + ((op ^::real => nat => real) ((cos::real => real) x)
10.5210 + ((number_of::bin => nat)
10.5211 + ((op BIT::bin => bool => bin)
10.5212 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5213 + (False::bool)))))
10.5214 + x))"
10.5215 + by (import transc DIFF_TAN)
10.5216 +
10.5217 +lemma TAN_TOTAL_LEMMA: "(All::(real => bool) => bool)
10.5218 + (%y::real.
10.5219 + (op -->::bool => bool => bool)
10.5220 + ((op <::real => real => bool) (0::real) y)
10.5221 + ((Ex::(real => bool) => bool)
10.5222 + (%x::real.
10.5223 + (op &::bool => bool => bool)
10.5224 + ((op <::real => real => bool) (0::real) x)
10.5225 + ((op &::bool => bool => bool)
10.5226 + ((op <::real => real => bool) x
10.5227 + ((op /::real => real => real) (pi::real)
10.5228 + ((number_of::bin => real)
10.5229 + ((op BIT::bin => bool => bin)
10.5230 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5231 + (True::bool))
10.5232 + (False::bool)))))
10.5233 + ((op <::real => real => bool) y ((tan::real => real) x))))))"
10.5234 + by (import transc TAN_TOTAL_LEMMA)
10.5235 +
10.5236 +lemma TAN_TOTAL_POS: "(All::(real => bool) => bool)
10.5237 + (%y::real.
10.5238 + (op -->::bool => bool => bool)
10.5239 + ((op <=::real => real => bool) (0::real) y)
10.5240 + ((Ex::(real => bool) => bool)
10.5241 + (%x::real.
10.5242 + (op &::bool => bool => bool)
10.5243 + ((op <=::real => real => bool) (0::real) x)
10.5244 + ((op &::bool => bool => bool)
10.5245 + ((op <::real => real => bool) x
10.5246 + ((op /::real => real => real) (pi::real)
10.5247 + ((number_of::bin => real)
10.5248 + ((op BIT::bin => bool => bin)
10.5249 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5250 + (True::bool))
10.5251 + (False::bool)))))
10.5252 + ((op =::real => real => bool) ((tan::real => real) x) y)))))"
10.5253 + by (import transc TAN_TOTAL_POS)
10.5254 +
10.5255 +lemma TAN_TOTAL: "ALL y. EX! x. - (pi / 2) < x & x < pi / 2 & tan x = y"
10.5256 + by (import transc TAN_TOTAL)
10.5257 +
10.5258 +constdefs
10.5259 + asn :: "real => real"
10.5260 + "asn == %y. SOME x. - (pi / 2) <= x & x <= pi / 2 & sin x = y"
10.5261 +
10.5262 +lemma asn: "ALL y. asn y = (SOME x. - (pi / 2) <= x & x <= pi / 2 & sin x = y)"
10.5263 + by (import transc asn)
10.5264 +
10.5265 +constdefs
10.5266 + acs :: "real => real"
10.5267 + "acs == %y. SOME x. 0 <= x & x <= pi & cos x = y"
10.5268 +
10.5269 +lemma acs: "ALL y. acs y = (SOME x. 0 <= x & x <= pi & cos x = y)"
10.5270 + by (import transc acs)
10.5271 +
10.5272 +constdefs
10.5273 + atn :: "real => real"
10.5274 + "atn == %y. SOME x. - (pi / 2) < x & x < pi / 2 & tan x = y"
10.5275 +
10.5276 +lemma atn: "ALL y. atn y = (SOME x. - (pi / 2) < x & x < pi / 2 & tan x = y)"
10.5277 + by (import transc atn)
10.5278 +
10.5279 +lemma ASN: "(All::(real => bool) => bool)
10.5280 + (%y::real.
10.5281 + (op -->::bool => bool => bool)
10.5282 + ((op &::bool => bool => bool)
10.5283 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5284 + ((op <=::real => real => bool) y (1::real)))
10.5285 + ((op &::bool => bool => bool)
10.5286 + ((op <=::real => real => bool)
10.5287 + ((uminus::real => real)
10.5288 + ((op /::real => real => real) (pi::real)
10.5289 + ((number_of::bin => real)
10.5290 + ((op BIT::bin => bool => bin)
10.5291 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5292 + (False::bool)))))
10.5293 + ((asn::real => real) y))
10.5294 + ((op &::bool => bool => bool)
10.5295 + ((op <=::real => real => bool) ((asn::real => real) y)
10.5296 + ((op /::real => real => real) (pi::real)
10.5297 + ((number_of::bin => real)
10.5298 + ((op BIT::bin => bool => bin)
10.5299 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5300 + (False::bool)))))
10.5301 + ((op =::real => real => bool)
10.5302 + ((sin::real => real) ((asn::real => real) y)) y))))"
10.5303 + by (import transc ASN)
10.5304 +
10.5305 +lemma ASN_SIN: "(All::(real => bool) => bool)
10.5306 + (%y::real.
10.5307 + (op -->::bool => bool => bool)
10.5308 + ((op &::bool => bool => bool)
10.5309 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5310 + ((op <=::real => real => bool) y (1::real)))
10.5311 + ((op =::real => real => bool)
10.5312 + ((sin::real => real) ((asn::real => real) y)) y))"
10.5313 + by (import transc ASN_SIN)
10.5314 +
10.5315 +lemma ASN_BOUNDS: "(All::(real => bool) => bool)
10.5316 + (%y::real.
10.5317 + (op -->::bool => bool => bool)
10.5318 + ((op &::bool => bool => bool)
10.5319 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5320 + ((op <=::real => real => bool) y (1::real)))
10.5321 + ((op &::bool => bool => bool)
10.5322 + ((op <=::real => real => bool)
10.5323 + ((uminus::real => real)
10.5324 + ((op /::real => real => real) (pi::real)
10.5325 + ((number_of::bin => real)
10.5326 + ((op BIT::bin => bool => bin)
10.5327 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5328 + (False::bool)))))
10.5329 + ((asn::real => real) y))
10.5330 + ((op <=::real => real => bool) ((asn::real => real) y)
10.5331 + ((op /::real => real => real) (pi::real)
10.5332 + ((number_of::bin => real)
10.5333 + ((op BIT::bin => bool => bin)
10.5334 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5335 + (False::bool)))))))"
10.5336 + by (import transc ASN_BOUNDS)
10.5337 +
10.5338 +lemma ASN_BOUNDS_LT: "(All::(real => bool) => bool)
10.5339 + (%y::real.
10.5340 + (op -->::bool => bool => bool)
10.5341 + ((op &::bool => bool => bool)
10.5342 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5343 + ((op <::real => real => bool) y (1::real)))
10.5344 + ((op &::bool => bool => bool)
10.5345 + ((op <::real => real => bool)
10.5346 + ((uminus::real => real)
10.5347 + ((op /::real => real => real) (pi::real)
10.5348 + ((number_of::bin => real)
10.5349 + ((op BIT::bin => bool => bin)
10.5350 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5351 + (False::bool)))))
10.5352 + ((asn::real => real) y))
10.5353 + ((op <::real => real => bool) ((asn::real => real) y)
10.5354 + ((op /::real => real => real) (pi::real)
10.5355 + ((number_of::bin => real)
10.5356 + ((op BIT::bin => bool => bin)
10.5357 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5358 + (False::bool)))))))"
10.5359 + by (import transc ASN_BOUNDS_LT)
10.5360 +
10.5361 +lemma SIN_ASN: "(All::(real => bool) => bool)
10.5362 + (%x::real.
10.5363 + (op -->::bool => bool => bool)
10.5364 + ((op &::bool => bool => bool)
10.5365 + ((op <=::real => real => bool)
10.5366 + ((uminus::real => real)
10.5367 + ((op /::real => real => real) (pi::real)
10.5368 + ((number_of::bin => real)
10.5369 + ((op BIT::bin => bool => bin)
10.5370 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5371 + (False::bool)))))
10.5372 + x)
10.5373 + ((op <=::real => real => bool) x
10.5374 + ((op /::real => real => real) (pi::real)
10.5375 + ((number_of::bin => real)
10.5376 + ((op BIT::bin => bool => bin)
10.5377 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5378 + (False::bool))))))
10.5379 + ((op =::real => real => bool)
10.5380 + ((asn::real => real) ((sin::real => real) x)) x))"
10.5381 + by (import transc SIN_ASN)
10.5382 +
10.5383 +lemma ACS: "(All::(real => bool) => bool)
10.5384 + (%y::real.
10.5385 + (op -->::bool => bool => bool)
10.5386 + ((op &::bool => bool => bool)
10.5387 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5388 + ((op <=::real => real => bool) y (1::real)))
10.5389 + ((op &::bool => bool => bool)
10.5390 + ((op <=::real => real => bool) (0::real) ((acs::real => real) y))
10.5391 + ((op &::bool => bool => bool)
10.5392 + ((op <=::real => real => bool) ((acs::real => real) y) (pi::real))
10.5393 + ((op =::real => real => bool)
10.5394 + ((cos::real => real) ((acs::real => real) y)) y))))"
10.5395 + by (import transc ACS)
10.5396 +
10.5397 +lemma ACS_COS: "(All::(real => bool) => bool)
10.5398 + (%y::real.
10.5399 + (op -->::bool => bool => bool)
10.5400 + ((op &::bool => bool => bool)
10.5401 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5402 + ((op <=::real => real => bool) y (1::real)))
10.5403 + ((op =::real => real => bool)
10.5404 + ((cos::real => real) ((acs::real => real) y)) y))"
10.5405 + by (import transc ACS_COS)
10.5406 +
10.5407 +lemma ACS_BOUNDS: "(All::(real => bool) => bool)
10.5408 + (%y::real.
10.5409 + (op -->::bool => bool => bool)
10.5410 + ((op &::bool => bool => bool)
10.5411 + ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5412 + ((op <=::real => real => bool) y (1::real)))
10.5413 + ((op &::bool => bool => bool)
10.5414 + ((op <=::real => real => bool) (0::real) ((acs::real => real) y))
10.5415 + ((op <=::real => real => bool) ((acs::real => real) y) (pi::real))))"
10.5416 + by (import transc ACS_BOUNDS)
10.5417 +
10.5418 +lemma ACS_BOUNDS_LT: "(All::(real => bool) => bool)
10.5419 + (%y::real.
10.5420 + (op -->::bool => bool => bool)
10.5421 + ((op &::bool => bool => bool)
10.5422 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) y)
10.5423 + ((op <::real => real => bool) y (1::real)))
10.5424 + ((op &::bool => bool => bool)
10.5425 + ((op <::real => real => bool) (0::real) ((acs::real => real) y))
10.5426 + ((op <::real => real => bool) ((acs::real => real) y) (pi::real))))"
10.5427 + by (import transc ACS_BOUNDS_LT)
10.5428 +
10.5429 +lemma COS_ACS: "(All::(real => bool) => bool)
10.5430 + (%x::real.
10.5431 + (op -->::bool => bool => bool)
10.5432 + ((op &::bool => bool => bool)
10.5433 + ((op <=::real => real => bool) (0::real) x)
10.5434 + ((op <=::real => real => bool) x (pi::real)))
10.5435 + ((op =::real => real => bool)
10.5436 + ((acs::real => real) ((cos::real => real) x)) x))"
10.5437 + by (import transc COS_ACS)
10.5438 +
10.5439 +lemma ATN: "ALL y. - (pi / 2) < atn y & atn y < pi / 2 & tan (atn y) = y"
10.5440 + by (import transc ATN)
10.5441 +
10.5442 +lemma ATN_TAN: "ALL x. tan (atn x) = x"
10.5443 + by (import transc ATN_TAN)
10.5444 +
10.5445 +lemma ATN_BOUNDS: "ALL x. - (pi / 2) < atn x & atn x < pi / 2"
10.5446 + by (import transc ATN_BOUNDS)
10.5447 +
10.5448 +lemma TAN_ATN: "(All::(real => bool) => bool)
10.5449 + (%x::real.
10.5450 + (op -->::bool => bool => bool)
10.5451 + ((op &::bool => bool => bool)
10.5452 + ((op <::real => real => bool)
10.5453 + ((uminus::real => real)
10.5454 + ((op /::real => real => real) (pi::real)
10.5455 + ((number_of::bin => real)
10.5456 + ((op BIT::bin => bool => bin)
10.5457 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5458 + (False::bool)))))
10.5459 + x)
10.5460 + ((op <::real => real => bool) x
10.5461 + ((op /::real => real => real) (pi::real)
10.5462 + ((number_of::bin => real)
10.5463 + ((op BIT::bin => bool => bin)
10.5464 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5465 + (False::bool))))))
10.5466 + ((op =::real => real => bool)
10.5467 + ((atn::real => real) ((tan::real => real) x)) x))"
10.5468 + by (import transc TAN_ATN)
10.5469 +
10.5470 +lemma TAN_SEC: "(All::(real => bool) => bool)
10.5471 + (%x::real.
10.5472 + (op -->::bool => bool => bool)
10.5473 + ((Not::bool => bool)
10.5474 + ((op =::real => real => bool) ((cos::real => real) x) (0::real)))
10.5475 + ((op =::real => real => bool)
10.5476 + ((op +::real => real => real) (1::real)
10.5477 + ((op ^::real => nat => real) ((tan::real => real) x)
10.5478 + ((number_of::bin => nat)
10.5479 + ((op BIT::bin => bool => bin)
10.5480 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5481 + (False::bool)))))
10.5482 + ((op ^::real => nat => real)
10.5483 + ((inverse::real => real) ((cos::real => real) x))
10.5484 + ((number_of::bin => nat)
10.5485 + ((op BIT::bin => bool => bin)
10.5486 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5487 + (False::bool))))))"
10.5488 + by (import transc TAN_SEC)
10.5489 +
10.5490 +lemma SIN_COS_SQ: "(All::(real => bool) => bool)
10.5491 + (%x::real.
10.5492 + (op -->::bool => bool => bool)
10.5493 + ((op &::bool => bool => bool)
10.5494 + ((op <=::real => real => bool) (0::real) x)
10.5495 + ((op <=::real => real => bool) x (pi::real)))
10.5496 + ((op =::real => real => bool) ((sin::real => real) x)
10.5497 + ((sqrt::real => real)
10.5498 + ((op -::real => real => real) (1::real)
10.5499 + ((op ^::real => nat => real) ((cos::real => real) x)
10.5500 + ((number_of::bin => nat)
10.5501 + ((op BIT::bin => bool => bin)
10.5502 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5503 + (False::bool))))))))"
10.5504 + by (import transc SIN_COS_SQ)
10.5505 +
10.5506 +lemma COS_SIN_SQ: "(All::(real => bool) => bool)
10.5507 + (%x::real.
10.5508 + (op -->::bool => bool => bool)
10.5509 + ((op &::bool => bool => bool)
10.5510 + ((op <=::real => real => bool)
10.5511 + ((uminus::real => real)
10.5512 + ((op /::real => real => real) (pi::real)
10.5513 + ((number_of::bin => real)
10.5514 + ((op BIT::bin => bool => bin)
10.5515 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5516 + (False::bool)))))
10.5517 + x)
10.5518 + ((op <=::real => real => bool) x
10.5519 + ((op /::real => real => real) (pi::real)
10.5520 + ((number_of::bin => real)
10.5521 + ((op BIT::bin => bool => bin)
10.5522 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5523 + (False::bool))))))
10.5524 + ((op =::real => real => bool) ((cos::real => real) x)
10.5525 + ((sqrt::real => real)
10.5526 + ((op -::real => real => real) (1::real)
10.5527 + ((op ^::real => nat => real) ((sin::real => real) x)
10.5528 + ((number_of::bin => nat)
10.5529 + ((op BIT::bin => bool => bin)
10.5530 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5531 + (False::bool))))))))"
10.5532 + by (import transc COS_SIN_SQ)
10.5533 +
10.5534 +lemma COS_ATN_NZ: "ALL x. cos (atn x) ~= 0"
10.5535 + by (import transc COS_ATN_NZ)
10.5536 +
10.5537 +lemma COS_ASN_NZ: "(All::(real => bool) => bool)
10.5538 + (%x::real.
10.5539 + (op -->::bool => bool => bool)
10.5540 + ((op &::bool => bool => bool)
10.5541 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
10.5542 + ((op <::real => real => bool) x (1::real)))
10.5543 + ((Not::bool => bool)
10.5544 + ((op =::real => real => bool)
10.5545 + ((cos::real => real) ((asn::real => real) x)) (0::real))))"
10.5546 + by (import transc COS_ASN_NZ)
10.5547 +
10.5548 +lemma SIN_ACS_NZ: "(All::(real => bool) => bool)
10.5549 + (%x::real.
10.5550 + (op -->::bool => bool => bool)
10.5551 + ((op &::bool => bool => bool)
10.5552 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
10.5553 + ((op <::real => real => bool) x (1::real)))
10.5554 + ((Not::bool => bool)
10.5555 + ((op =::real => real => bool)
10.5556 + ((sin::real => real) ((acs::real => real) x)) (0::real))))"
10.5557 + by (import transc SIN_ACS_NZ)
10.5558 +
10.5559 +lemma COS_SIN_SQRT: "(All::(real => bool) => bool)
10.5560 + (%x::real.
10.5561 + (op -->::bool => bool => bool)
10.5562 + ((op <=::real => real => bool) (0::real) ((cos::real => real) x))
10.5563 + ((op =::real => real => bool) ((cos::real => real) x)
10.5564 + ((sqrt::real => real)
10.5565 + ((op -::real => real => real) (1::real)
10.5566 + ((op ^::real => nat => real) ((sin::real => real) x)
10.5567 + ((number_of::bin => nat)
10.5568 + ((op BIT::bin => bool => bin)
10.5569 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5570 + (False::bool))))))))"
10.5571 + by (import transc COS_SIN_SQRT)
10.5572 +
10.5573 +lemma SIN_COS_SQRT: "(All::(real => bool) => bool)
10.5574 + (%x::real.
10.5575 + (op -->::bool => bool => bool)
10.5576 + ((op <=::real => real => bool) (0::real) ((sin::real => real) x))
10.5577 + ((op =::real => real => bool) ((sin::real => real) x)
10.5578 + ((sqrt::real => real)
10.5579 + ((op -::real => real => real) (1::real)
10.5580 + ((op ^::real => nat => real) ((cos::real => real) x)
10.5581 + ((number_of::bin => nat)
10.5582 + ((op BIT::bin => bool => bin)
10.5583 + ((op BIT::bin => bool => bin) (bin.Pls::bin) (True::bool))
10.5584 + (False::bool))))))))"
10.5585 + by (import transc SIN_COS_SQRT)
10.5586 +
10.5587 +lemma DIFF_LN: "(All::(real => bool) => bool)
10.5588 + (%x::real.
10.5589 + (op -->::bool => bool => bool)
10.5590 + ((op <::real => real => bool) (0::real) x)
10.5591 + ((diffl::(real => real) => real => real => bool) (ln::real => real)
10.5592 + ((inverse::real => real) x) x))"
10.5593 + by (import transc DIFF_LN)
10.5594 +
10.5595 +lemma DIFF_ASN_LEMMA: "(All::(real => bool) => bool)
10.5596 + (%x::real.
10.5597 + (op -->::bool => bool => bool)
10.5598 + ((op &::bool => bool => bool)
10.5599 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
10.5600 + ((op <::real => real => bool) x (1::real)))
10.5601 + ((diffl::(real => real) => real => real => bool) (asn::real => real)
10.5602 + ((inverse::real => real)
10.5603 + ((cos::real => real) ((asn::real => real) x)))
10.5604 + x))"
10.5605 + by (import transc DIFF_ASN_LEMMA)
10.5606 +
10.5607 +lemma DIFF_ASN: "(All::(real => bool) => bool)
10.5608 + (%x::real.
10.5609 + (op -->::bool => bool => bool)
10.5610 + ((op &::bool => bool => bool)
10.5611 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
10.5612 + ((op <::real => real => bool) x (1::real)))
10.5613 + ((diffl::(real => real) => real => real => bool) (asn::real => real)
10.5614 + ((inverse::real => real)
10.5615 + ((sqrt::real => real)
10.5616 + ((op -::real => real => real) (1::real)
10.5617 + ((op ^::real => nat => real) x
10.5618 + ((number_of::bin => nat)
10.5619 + ((op BIT::bin => bool => bin)
10.5620 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5621 + (True::bool))
10.5622 + (False::bool)))))))
10.5623 + x))"
10.5624 + by (import transc DIFF_ASN)
10.5625 +
10.5626 +lemma DIFF_ACS_LEMMA: "(All::(real => bool) => bool)
10.5627 + (%x::real.
10.5628 + (op -->::bool => bool => bool)
10.5629 + ((op &::bool => bool => bool)
10.5630 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
10.5631 + ((op <::real => real => bool) x (1::real)))
10.5632 + ((diffl::(real => real) => real => real => bool) (acs::real => real)
10.5633 + ((inverse::real => real)
10.5634 + ((uminus::real => real)
10.5635 + ((sin::real => real) ((acs::real => real) x))))
10.5636 + x))"
10.5637 + by (import transc DIFF_ACS_LEMMA)
10.5638 +
10.5639 +lemma DIFF_ACS: "(All::(real => bool) => bool)
10.5640 + (%x::real.
10.5641 + (op -->::bool => bool => bool)
10.5642 + ((op &::bool => bool => bool)
10.5643 + ((op <::real => real => bool) ((uminus::real => real) (1::real)) x)
10.5644 + ((op <::real => real => bool) x (1::real)))
10.5645 + ((diffl::(real => real) => real => real => bool) (acs::real => real)
10.5646 + ((uminus::real => real)
10.5647 + ((inverse::real => real)
10.5648 + ((sqrt::real => real)
10.5649 + ((op -::real => real => real) (1::real)
10.5650 + ((op ^::real => nat => real) x
10.5651 + ((number_of::bin => nat)
10.5652 + ((op BIT::bin => bool => bin)
10.5653 + ((op BIT::bin => bool => bin) (bin.Pls::bin)
10.5654 + (True::bool))
10.5655 + (False::bool))))))))
10.5656 + x))"
10.5657 + by (import transc DIFF_ACS)
10.5658 +
10.5659 +lemma DIFF_ATN: "ALL x. diffl atn (inverse (1 + x ^ 2)) x"
10.5660 + by (import transc DIFF_ATN)
10.5661 +
10.5662 +constdefs
10.5663 + division :: "real * real => (nat => real) => bool"
10.5664 + "(op ==::(real * real => (nat => real) => bool)
10.5665 + => (real * real => (nat => real) => bool) => prop)
10.5666 + (division::real * real => (nat => real) => bool)
10.5667 + ((split::(real => real => (nat => real) => bool)
10.5668 + => real * real => (nat => real) => bool)
10.5669 + (%(a::real) (b::real) D::nat => real.
10.5670 + (op &::bool => bool => bool)
10.5671 + ((op =::real => real => bool) (D (0::nat)) a)
10.5672 + ((Ex::(nat => bool) => bool)
10.5673 + (%N::nat.
10.5674 + (op &::bool => bool => bool)
10.5675 + ((All::(nat => bool) => bool)
10.5676 + (%n::nat.
10.5677 + (op -->::bool => bool => bool)
10.5678 + ((op <::nat => nat => bool) n N)
10.5679 + ((op <::real => real => bool) (D n)
10.5680 + (D ((Suc::nat => nat) n)))))
10.5681 + ((All::(nat => bool) => bool)
10.5682 + (%n::nat.
10.5683 + (op -->::bool => bool => bool)
10.5684 + ((op <=::nat => nat => bool) N n)
10.5685 + ((op =::real => real => bool) (D n) b)))))))"
10.5686 +
10.5687 +lemma division: "(All::(real => bool) => bool)
10.5688 + (%a::real.
10.5689 + (All::(real => bool) => bool)
10.5690 + (%b::real.
10.5691 + (All::((nat => real) => bool) => bool)
10.5692 + (%D::nat => real.
10.5693 + (op =::bool => bool => bool)
10.5694 + ((division::real * real => (nat => real) => bool)
10.5695 + ((Pair::real => real => real * real) a b) D)
10.5696 + ((op &::bool => bool => bool)
10.5697 + ((op =::real => real => bool) (D (0::nat)) a)
10.5698 + ((Ex::(nat => bool) => bool)
10.5699 + (%N::nat.
10.5700 + (op &::bool => bool => bool)
10.5701 + ((All::(nat => bool) => bool)
10.5702 + (%n::nat.
10.5703 + (op -->::bool => bool => bool)
10.5704 + ((op <::nat => nat => bool) n N)
10.5705 + ((op <::real => real => bool) (D n)
10.5706 + (D ((Suc::nat => nat) n)))))
10.5707 + ((All::(nat => bool) => bool)
10.5708 + (%n::nat.
10.5709 + (op -->::bool => bool => bool)
10.5710 + ((op <=::nat => nat => bool) N n)
10.5711 + ((op =::real => real => bool) (D n)
10.5712 + b)))))))))"
10.5713 + by (import transc division)
10.5714 +
10.5715 +constdefs
10.5716 + dsize :: "(nat => real) => nat"
10.5717 + "(op ==::((nat => real) => nat) => ((nat => real) => nat) => prop)
10.5718 + (dsize::(nat => real) => nat)
10.5719 + (%D::nat => real.
10.5720 + (Eps::(nat => bool) => nat)
10.5721 + (%N::nat.
10.5722 + (op &::bool => bool => bool)
10.5723 + ((All::(nat => bool) => bool)
10.5724 + (%n::nat.
10.5725 + (op -->::bool => bool => bool)
10.5726 + ((op <::nat => nat => bool) n N)
10.5727 + ((op <::real => real => bool) (D n)
10.5728 + (D ((Suc::nat => nat) n)))))
10.5729 + ((All::(nat => bool) => bool)
10.5730 + (%n::nat.
10.5731 + (op -->::bool => bool => bool)
10.5732 + ((op <=::nat => nat => bool) N n)
10.5733 + ((op =::real => real => bool) (D n) (D N))))))"
10.5734 +
10.5735 +lemma dsize: "(All::((nat => real) => bool) => bool)
10.5736 + (%D::nat => real.
10.5737 + (op =::nat => nat => bool) ((dsize::(nat => real) => nat) D)
10.5738 + ((Eps::(nat => bool) => nat)
10.5739 + (%N::nat.
10.5740 + (op &::bool => bool => bool)
10.5741 + ((All::(nat => bool) => bool)
10.5742 + (%n::nat.
10.5743 + (op -->::bool => bool => bool)
10.5744 + ((op <::nat => nat => bool) n N)
10.5745 + ((op <::real => real => bool) (D n)
10.5746 + (D ((Suc::nat => nat) n)))))
10.5747 + ((All::(nat => bool) => bool)
10.5748 + (%n::nat.
10.5749 + (op -->::bool => bool => bool)
10.5750 + ((op <=::nat => nat => bool) N n)
10.5751 + ((op =::real => real => bool) (D n) (D N)))))))"
10.5752 + by (import transc dsize)
10.5753 +
10.5754 +constdefs
10.5755 + tdiv :: "real * real => (nat => real) * (nat => real) => bool"
10.5756 + "tdiv ==
10.5757 +%(a, b) (D, p). division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n))"
10.5758 +
10.5759 +lemma tdiv: "ALL a b D p.
10.5760 + tdiv (a, b) (D, p) =
10.5761 + (division (a, b) D & (ALL n. D n <= p n & p n <= D (Suc n)))"
10.5762 + by (import transc tdiv)
10.5763 +
10.5764 +constdefs
10.5765 + gauge :: "(real => bool) => (real => real) => bool"
10.5766 + "(op ==::((real => bool) => (real => real) => bool)
10.5767 + => ((real => bool) => (real => real) => bool) => prop)
10.5768 + (gauge::(real => bool) => (real => real) => bool)
10.5769 + (%(E::real => bool) g::real => real.
10.5770 + (All::(real => bool) => bool)
10.5771 + (%x::real.
10.5772 + (op -->::bool => bool => bool) (E x)
10.5773 + ((op <::real => real => bool) (0::real) (g x))))"
10.5774 +
10.5775 +lemma gauge: "(All::((real => bool) => bool) => bool)
10.5776 + (%E::real => bool.
10.5777 + (All::((real => real) => bool) => bool)
10.5778 + (%g::real => real.
10.5779 + (op =::bool => bool => bool)
10.5780 + ((gauge::(real => bool) => (real => real) => bool) E g)
10.5781 + ((All::(real => bool) => bool)
10.5782 + (%x::real.
10.5783 + (op -->::bool => bool => bool) (E x)
10.5784 + ((op <::real => real => bool) (0::real) (g x))))))"
10.5785 + by (import transc gauge)
10.5786 +
10.5787 +constdefs
10.5788 + fine :: "(real => real) => (nat => real) * (nat => real) => bool"
10.5789 + "fine == %g (D, p). ALL n<dsize D. D (Suc n) - D n < g (p n)"
10.5790 +
10.5791 +lemma fine: "ALL g D p. fine g (D, p) = (ALL n<dsize D. D (Suc n) - D n < g (p n))"
10.5792 + by (import transc fine)
10.5793 +
10.5794 +constdefs
10.5795 + rsum :: "(nat => real) * (nat => real) => (real => real) => real"
10.5796 + "rsum == %(D, p) f. real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
10.5797 +
10.5798 +lemma rsum: "ALL D p f.
10.5799 + rsum (D, p) f = real.sum (0, dsize D) (%n. f (p n) * (D (Suc n) - D n))"
10.5800 + by (import transc rsum)
10.5801 +
10.5802 +constdefs
10.5803 + Dint :: "real * real => (real => real) => real => bool"
10.5804 + "(op ==::(real * real => (real => real) => real => bool)
10.5805 + => (real * real => (real => real) => real => bool) => prop)
10.5806 + (Dint::real * real => (real => real) => real => bool)
10.5807 + ((split::(real => real => (real => real) => real => bool)
10.5808 + => real * real => (real => real) => real => bool)
10.5809 + (%(a::real) (b::real) (f::real => real) k::real.
10.5810 + (All::(real => bool) => bool)
10.5811 + (%e::real.
10.5812 + (op -->::bool => bool => bool)
10.5813 + ((op <::real => real => bool) (0::real) e)
10.5814 + ((Ex::((real => real) => bool) => bool)
10.5815 + (%g::real => real.
10.5816 + (op &::bool => bool => bool)
10.5817 + ((gauge::(real => bool) => (real => real) => bool)
10.5818 + (%x::real.
10.5819 + (op &::bool => bool => bool)
10.5820 + ((op <=::real => real => bool) a x)
10.5821 + ((op <=::real => real => bool) x b))
10.5822 + g)
10.5823 + ((All::((nat => real) => bool) => bool)
10.5824 + (%D::nat => real.
10.5825 + (All::((nat => real) => bool) => bool)
10.5826 + (%p::nat => real.
10.5827 + (op -->::bool => bool => bool)
10.5828 + ((op &::bool => bool => bool)
10.5829 + ((tdiv::real * real
10.5830 + => (nat => real) * (nat => real) => bool)
10.5831 + ((Pair::real => real => real * real) a
10.5832 +b)
10.5833 + ((Pair::(nat => real)
10.5834 + => (nat => real) => (nat => real) * (nat => real))
10.5835 +D p))
10.5836 + ((fine::(real => real)
10.5837 + => (nat => real) * (nat => real) => bool)
10.5838 + g ((Pair::(nat => real)
10.5839 + => (nat => real) => (nat => real) * (nat => real))
10.5840 + D p)))
10.5841 + ((op <::real => real => bool)
10.5842 + ((abs::real => real)
10.5843 + ((op -::real => real => real)
10.5844 +((rsum::(nat => real) * (nat => real) => (real => real) => real)
10.5845 + ((Pair::(nat => real) => (nat => real) => (nat => real) * (nat => real)) D
10.5846 + p)
10.5847 + f)
10.5848 +k))
10.5849 + e)))))))))"
10.5850 +
10.5851 +lemma Dint: "(All::(real => bool) => bool)
10.5852 + (%a::real.
10.5853 + (All::(real => bool) => bool)
10.5854 + (%b::real.
10.5855 + (All::((real => real) => bool) => bool)
10.5856 + (%f::real => real.
10.5857 + (All::(real => bool) => bool)
10.5858 + (%k::real.
10.5859 + (op =::bool => bool => bool)
10.5860 + ((Dint::real * real => (real => real) => real => bool)
10.5861 + ((Pair::real => real => real * real) a b) f k)
10.5862 + ((All::(real => bool) => bool)
10.5863 + (%e::real.
10.5864 + (op -->::bool => bool => bool)
10.5865 + ((op <::real => real => bool) (0::real) e)
10.5866 + ((Ex::((real => real) => bool) => bool)
10.5867 + (%g::real => real.
10.5868 + (op &::bool => bool => bool)
10.5869 + ((gauge::(real => bool)
10.5870 + => (real => real) => bool)
10.5871 + (%x::real.
10.5872 + (op &::bool => bool => bool) ((op <=::real => real => bool) a x)
10.5873 + ((op <=::real => real => bool) x b))
10.5874 + g)
10.5875 + ((All::((nat => real) => bool) => bool)
10.5876 + (%D::nat => real.
10.5877 + (All::((nat => real) => bool) => bool)
10.5878 + (%p::nat => real.
10.5879 + (op -->::bool => bool => bool)
10.5880 + ((op &::bool => bool => bool)
10.5881 + ((tdiv::real * real => (nat => real) * (nat => real) => bool)
10.5882 + ((Pair::real => real => real * real) a b)
10.5883 + ((Pair::(nat => real)
10.5884 + => (nat => real) => (nat => real) * (nat => real))
10.5885 + D p))
10.5886 + ((fine::(real => real) => (nat => real) * (nat => real) => bool)
10.5887 + g ((Pair::(nat => real)
10.5888 + => (nat => real) => (nat => real) * (nat => real))
10.5889 + D p)))
10.5890 + ((op <::real => real => bool)
10.5891 + ((abs::real => real)
10.5892 + ((op -::real => real => real)
10.5893 + ((rsum::(nat => real) * (nat => real)
10.5894 + => (real => real) => real)
10.5895 + ((Pair::(nat => real)
10.5896 + => (nat => real) => (nat => real) * (nat => real))
10.5897 + D p)
10.5898 + f)
10.5899 + k))
10.5900 + e))))))))))))"
10.5901 + by (import transc Dint)
10.5902 +
10.5903 +lemma DIVISION_0: "(All::(real => bool) => bool)
10.5904 + (%a::real.
10.5905 + (All::(real => bool) => bool)
10.5906 + (%b::real.
10.5907 + (op -->::bool => bool => bool) ((op =::real => real => bool) a b)
10.5908 + ((op =::nat => nat => bool)
10.5909 + ((dsize::(nat => real) => nat)
10.5910 + (%n::nat.
10.5911 + (If::bool => real => real => real)
10.5912 + ((op =::nat => nat => bool) n (0::nat)) a b))
10.5913 + (0::nat))))"
10.5914 + by (import transc DIVISION_0)
10.5915 +
10.5916 +lemma DIVISION_1: "(All::(real => bool) => bool)
10.5917 + (%a::real.
10.5918 + (All::(real => bool) => bool)
10.5919 + (%b::real.
10.5920 + (op -->::bool => bool => bool) ((op <::real => real => bool) a b)
10.5921 + ((op =::nat => nat => bool)
10.5922 + ((dsize::(nat => real) => nat)
10.5923 + (%n::nat.
10.5924 + (If::bool => real => real => real)
10.5925 + ((op =::nat => nat => bool) n (0::nat)) a b))
10.5926 + (1::nat))))"
10.5927 + by (import transc DIVISION_1)
10.5928 +
10.5929 +lemma DIVISION_SINGLE: "(All::(real => bool) => bool)
10.5930 + (%a::real.
10.5931 + (All::(real => bool) => bool)
10.5932 + (%b::real.
10.5933 + (op -->::bool => bool => bool) ((op <=::real => real => bool) a b)
10.5934 + ((division::real * real => (nat => real) => bool)
10.5935 + ((Pair::real => real => real * real) a b)
10.5936 + (%n::nat.
10.5937 + (If::bool => real => real => real)
10.5938 + ((op =::nat => nat => bool) n (0::nat)) a b))))"
10.5939 + by (import transc DIVISION_SINGLE)
10.5940 +
10.5941 +lemma DIVISION_LHS: "(All::((nat => real) => bool) => bool)
10.5942 + (%D::nat => real.
10.5943 + (All::(real => bool) => bool)
10.5944 + (%a::real.
10.5945 + (All::(real => bool) => bool)
10.5946 + (%b::real.
10.5947 + (op -->::bool => bool => bool)
10.5948 + ((division::real * real => (nat => real) => bool)
10.5949 + ((Pair::real => real => real * real) a b) D)
10.5950 + ((op =::real => real => bool) (D (0::nat)) a))))"
10.5951 + by (import transc DIVISION_LHS)
10.5952 +
10.5953 +lemma DIVISION_THM: "(All::((nat => real) => bool) => bool)
10.5954 + (%D::nat => real.
10.5955 + (All::(real => bool) => bool)
10.5956 + (%a::real.
10.5957 + (All::(real => bool) => bool)
10.5958 + (%b::real.
10.5959 + (op =::bool => bool => bool)
10.5960 + ((division::real * real => (nat => real) => bool)
10.5961 + ((Pair::real => real => real * real) a b) D)
10.5962 + ((op &::bool => bool => bool)
10.5963 + ((op =::real => real => bool) (D (0::nat)) a)
10.5964 + ((op &::bool => bool => bool)
10.5965 + ((All::(nat => bool) => bool)
10.5966 + (%n::nat.
10.5967 + (op -->::bool => bool => bool)
10.5968 + ((op <::nat => nat => bool) n
10.5969 + ((dsize::(nat => real) => nat) D))
10.5970 + ((op <::real => real => bool) (D n)
10.5971 + (D ((Suc::nat => nat) n)))))
10.5972 + ((All::(nat => bool) => bool)
10.5973 + (%n::nat.
10.5974 + (op -->::bool => bool => bool)
10.5975 + ((op <=::nat => nat => bool)
10.5976 + ((dsize::(nat => real) => nat) D) n)
10.5977 + ((op =::real => real => bool) (D n) b))))))))"
10.5978 + by (import transc DIVISION_THM)
10.5979 +
10.5980 +lemma DIVISION_RHS: "(All::((nat => real) => bool) => bool)
10.5981 + (%D::nat => real.
10.5982 + (All::(real => bool) => bool)
10.5983 + (%a::real.
10.5984 + (All::(real => bool) => bool)
10.5985 + (%b::real.
10.5986 + (op -->::bool => bool => bool)
10.5987 + ((division::real * real => (nat => real) => bool)
10.5988 + ((Pair::real => real => real * real) a b) D)
10.5989 + ((op =::real => real => bool)
10.5990 + (D ((dsize::(nat => real) => nat) D)) b))))"
10.5991 + by (import transc DIVISION_RHS)
10.5992 +
10.5993 +lemma DIVISION_LT_GEN: "(All::((nat => real) => bool) => bool)
10.5994 + (%D::nat => real.
10.5995 + (All::(real => bool) => bool)
10.5996 + (%a::real.
10.5997 + (All::(real => bool) => bool)
10.5998 + (%b::real.
10.5999 + (All::(nat => bool) => bool)
10.6000 + (%m::nat.
10.6001 + (All::(nat => bool) => bool)
10.6002 + (%n::nat.
10.6003 + (op -->::bool => bool => bool)
10.6004 + ((op &::bool => bool => bool)
10.6005 + ((division::real * real
10.6006 + => (nat => real) => bool)
10.6007 + ((Pair::real => real => real * real) a b) D)
10.6008 + ((op &::bool => bool => bool)
10.6009 + ((op <::nat => nat => bool) m n)
10.6010 + ((op <=::nat => nat => bool) n
10.6011 + ((dsize::(nat => real) => nat) D))))
10.6012 + ((op <::real => real => bool) (D m) (D n)))))))"
10.6013 + by (import transc DIVISION_LT_GEN)
10.6014 +
10.6015 +lemma DIVISION_LT: "(All::((nat => real) => bool) => bool)
10.6016 + (%D::nat => real.
10.6017 + (All::(real => bool) => bool)
10.6018 + (%a::real.
10.6019 + (All::(real => bool) => bool)
10.6020 + (%b::real.
10.6021 + (op -->::bool => bool => bool)
10.6022 + ((division::real * real => (nat => real) => bool)
10.6023 + ((Pair::real => real => real * real) a b) D)
10.6024 + ((All::(nat => bool) => bool)
10.6025 + (%n::nat.
10.6026 + (op -->::bool => bool => bool)
10.6027 + ((op <::nat => nat => bool) n
10.6028 + ((dsize::(nat => real) => nat) D))
10.6029 + ((op <::real => real => bool) (D (0::nat))
10.6030 + (D ((Suc::nat => nat) n))))))))"
10.6031 + by (import transc DIVISION_LT)
10.6032 +
10.6033 +lemma DIVISION_LE: "(All::((nat => real) => bool) => bool)
10.6034 + (%D::nat => real.
10.6035 + (All::(real => bool) => bool)
10.6036 + (%a::real.
10.6037 + (All::(real => bool) => bool)
10.6038 + (%b::real.
10.6039 + (op -->::bool => bool => bool)
10.6040 + ((division::real * real => (nat => real) => bool)
10.6041 + ((Pair::real => real => real * real) a b) D)
10.6042 + ((op <=::real => real => bool) a b))))"
10.6043 + by (import transc DIVISION_LE)
10.6044 +
10.6045 +lemma DIVISION_GT: "(All::((nat => real) => bool) => bool)
10.6046 + (%D::nat => real.
10.6047 + (All::(real => bool) => bool)
10.6048 + (%a::real.
10.6049 + (All::(real => bool) => bool)
10.6050 + (%b::real.
10.6051 + (op -->::bool => bool => bool)
10.6052 + ((division::real * real => (nat => real) => bool)
10.6053 + ((Pair::real => real => real * real) a b) D)
10.6054 + ((All::(nat => bool) => bool)
10.6055 + (%n::nat.
10.6056 + (op -->::bool => bool => bool)
10.6057 + ((op <::nat => nat => bool) n
10.6058 + ((dsize::(nat => real) => nat) D))
10.6059 + ((op <::real => real => bool) (D n)
10.6060 + (D ((dsize::(nat => real) => nat) D))))))))"
10.6061 + by (import transc DIVISION_GT)
10.6062 +
10.6063 +lemma DIVISION_EQ: "(All::((nat => real) => bool) => bool)
10.6064 + (%D::nat => real.
10.6065 + (All::(real => bool) => bool)
10.6066 + (%a::real.
10.6067 + (All::(real => bool) => bool)
10.6068 + (%b::real.
10.6069 + (op -->::bool => bool => bool)
10.6070 + ((division::real * real => (nat => real) => bool)
10.6071 + ((Pair::real => real => real * real) a b) D)
10.6072 + ((op =::bool => bool => bool)
10.6073 + ((op =::real => real => bool) a b)
10.6074 + ((op =::nat => nat => bool)
10.6075 + ((dsize::(nat => real) => nat) D) (0::nat))))))"
10.6076 + by (import transc DIVISION_EQ)
10.6077 +
10.6078 +lemma DIVISION_LBOUND: "(All::((nat => real) => bool) => bool)
10.6079 + (%D::nat => real.
10.6080 + (All::(real => bool) => bool)
10.6081 + (%a::real.
10.6082 + (All::(real => bool) => bool)
10.6083 + (%b::real.
10.6084 + (op -->::bool => bool => bool)
10.6085 + ((division::real * real => (nat => real) => bool)
10.6086 + ((Pair::real => real => real * real) a b) D)
10.6087 + ((All::(nat => bool) => bool)
10.6088 + (%r::nat. (op <=::real => real => bool) a (D r))))))"
10.6089 + by (import transc DIVISION_LBOUND)
10.6090 +
10.6091 +lemma DIVISION_LBOUND_LT: "(All::((nat => real) => bool) => bool)
10.6092 + (%D::nat => real.
10.6093 + (All::(real => bool) => bool)
10.6094 + (%a::real.
10.6095 + (All::(real => bool) => bool)
10.6096 + (%b::real.
10.6097 + (op -->::bool => bool => bool)
10.6098 + ((op &::bool => bool => bool)
10.6099 + ((division::real * real => (nat => real) => bool)
10.6100 + ((Pair::real => real => real * real) a b) D)
10.6101 + ((Not::bool => bool)
10.6102 + ((op =::nat => nat => bool)
10.6103 + ((dsize::(nat => real) => nat) D) (0::nat))))
10.6104 + ((All::(nat => bool) => bool)
10.6105 + (%n::nat.
10.6106 + (op <::real => real => bool) a
10.6107 + (D ((Suc::nat => nat) n)))))))"
10.6108 + by (import transc DIVISION_LBOUND_LT)
10.6109 +
10.6110 +lemma DIVISION_UBOUND: "(All::((nat => real) => bool) => bool)
10.6111 + (%D::nat => real.
10.6112 + (All::(real => bool) => bool)
10.6113 + (%a::real.
10.6114 + (All::(real => bool) => bool)
10.6115 + (%b::real.
10.6116 + (op -->::bool => bool => bool)
10.6117 + ((division::real * real => (nat => real) => bool)
10.6118 + ((Pair::real => real => real * real) a b) D)
10.6119 + ((All::(nat => bool) => bool)
10.6120 + (%r::nat. (op <=::real => real => bool) (D r) b)))))"
10.6121 + by (import transc DIVISION_UBOUND)
10.6122 +
10.6123 +lemma DIVISION_UBOUND_LT: "(All::((nat => real) => bool) => bool)
10.6124 + (%D::nat => real.
10.6125 + (All::(real => bool) => bool)
10.6126 + (%a::real.
10.6127 + (All::(real => bool) => bool)
10.6128 + (%b::real.
10.6129 + (All::(nat => bool) => bool)
10.6130 + (%n::nat.
10.6131 + (op -->::bool => bool => bool)
10.6132 + ((op &::bool => bool => bool)
10.6133 + ((division::real * real => (nat => real) => bool)
10.6134 + ((Pair::real => real => real * real) a b) D)
10.6135 + ((op <::nat => nat => bool) n
10.6136 + ((dsize::(nat => real) => nat) D)))
10.6137 + ((op <::real => real => bool) (D n) b)))))"
10.6138 + by (import transc DIVISION_UBOUND_LT)
10.6139 +
10.6140 +lemma DIVISION_APPEND: "(All::(real => bool) => bool)
10.6141 + (%a::real.
10.6142 + (All::(real => bool) => bool)
10.6143 + (%b::real.
10.6144 + (All::(real => bool) => bool)
10.6145 + (%c::real.
10.6146 + (op -->::bool => bool => bool)
10.6147 + ((op &::bool => bool => bool)
10.6148 + ((Ex::((nat => real) => bool) => bool)
10.6149 + (%D1::nat => real.
10.6150 + (Ex::((nat => real) => bool) => bool)
10.6151 + (%p1::nat => real.
10.6152 + (op &::bool => bool => bool)
10.6153 + ((tdiv::real * real
10.6154 +=> (nat => real) * (nat => real) => bool)
10.6155 + ((Pair::real => real => real * real) a b)
10.6156 + ((Pair::(nat => real)
10.6157 + => (nat => real) => (nat => real) * (nat => real))
10.6158 + D1 p1))
10.6159 + ((fine::(real => real)
10.6160 +=> (nat => real) * (nat => real) => bool)
10.6161 + (g::real => real)
10.6162 + ((Pair::(nat => real)
10.6163 + => (nat => real) => (nat => real) * (nat => real))
10.6164 + D1 p1)))))
10.6165 + ((Ex::((nat => real) => bool) => bool)
10.6166 + (%D2::nat => real.
10.6167 + (Ex::((nat => real) => bool) => bool)
10.6168 + (%p2::nat => real.
10.6169 + (op &::bool => bool => bool)
10.6170 + ((tdiv::real * real
10.6171 +=> (nat => real) * (nat => real) => bool)
10.6172 + ((Pair::real => real => real * real) b c)
10.6173 + ((Pair::(nat => real)
10.6174 + => (nat => real) => (nat => real) * (nat => real))
10.6175 + D2 p2))
10.6176 + ((fine::(real => real)
10.6177 +=> (nat => real) * (nat => real) => bool)
10.6178 + g ((Pair::(nat => real)
10.6179 + => (nat => real) => (nat => real) * (nat => real))
10.6180 + D2 p2))))))
10.6181 + ((Ex::((nat => real) => bool) => bool)
10.6182 + (%x::nat => real.
10.6183 + (Ex::((nat => real) => bool) => bool)
10.6184 + (%p::nat => real.
10.6185 + (op &::bool => bool => bool)
10.6186 + ((tdiv::real * real
10.6187 + => (nat => real) * (nat => real)
10.6188 + => bool)
10.6189 + ((Pair::real => real => real * real) a c)
10.6190 + ((Pair::(nat => real)
10.6191 +=> (nat => real) => (nat => real) * (nat => real))
10.6192 + x p))
10.6193 + ((fine::(real => real)
10.6194 + => (nat => real) * (nat => real)
10.6195 + => bool)
10.6196 + g ((Pair::(nat => real)
10.6197 + => (nat => real) => (nat => real) * (nat => real))
10.6198 + x p))))))))"
10.6199 + by (import transc DIVISION_APPEND)
10.6200 +
10.6201 +lemma DIVISION_EXISTS: "(All::(real => bool) => bool)
10.6202 + (%a::real.
10.6203 + (All::(real => bool) => bool)
10.6204 + (%b::real.
10.6205 + (All::((real => real) => bool) => bool)
10.6206 + (%g::real => real.
10.6207 + (op -->::bool => bool => bool)
10.6208 + ((op &::bool => bool => bool)
10.6209 + ((op <=::real => real => bool) a b)
10.6210 + ((gauge::(real => bool) => (real => real) => bool)
10.6211 + (%x::real.
10.6212 + (op &::bool => bool => bool)
10.6213 + ((op <=::real => real => bool) a x)
10.6214 + ((op <=::real => real => bool) x b))
10.6215 + g))
10.6216 + ((Ex::((nat => real) => bool) => bool)
10.6217 + (%D::nat => real.
10.6218 + (Ex::((nat => real) => bool) => bool)
10.6219 + (%p::nat => real.
10.6220 + (op &::bool => bool => bool)
10.6221 + ((tdiv::real * real
10.6222 + => (nat => real) * (nat => real)
10.6223 + => bool)
10.6224 + ((Pair::real => real => real * real) a b)
10.6225 + ((Pair::(nat => real)
10.6226 +=> (nat => real) => (nat => real) * (nat => real))
10.6227 + D p))
10.6228 + ((fine::(real => real)
10.6229 + => (nat => real) * (nat => real)
10.6230 + => bool)
10.6231 + g ((Pair::(nat => real)
10.6232 + => (nat => real) => (nat => real) * (nat => real))
10.6233 + D p))))))))"
10.6234 + by (import transc DIVISION_EXISTS)
10.6235 +
10.6236 +lemma GAUGE_MIN: "(All::((real => bool) => bool) => bool)
10.6237 + (%E::real => bool.
10.6238 + (All::((real => real) => bool) => bool)
10.6239 + (%g1::real => real.
10.6240 + (All::((real => real) => bool) => bool)
10.6241 + (%g2::real => real.
10.6242 + (op -->::bool => bool => bool)
10.6243 + ((op &::bool => bool => bool)
10.6244 + ((gauge::(real => bool) => (real => real) => bool) E g1)
10.6245 + ((gauge::(real => bool) => (real => real) => bool) E g2))
10.6246 + ((gauge::(real => bool) => (real => real) => bool) E
10.6247 + (%x::real.
10.6248 + (If::bool => real => real => real)
10.6249 + ((op <::real => real => bool) (g1 x) (g2 x)) (g1 x)
10.6250 + (g2 x))))))"
10.6251 + by (import transc GAUGE_MIN)
10.6252 +
10.6253 +lemma FINE_MIN: "(All::((real => real) => bool) => bool)
10.6254 + (%g1::real => real.
10.6255 + (All::((real => real) => bool) => bool)
10.6256 + (%g2::real => real.
10.6257 + (All::((nat => real) => bool) => bool)
10.6258 + (%D::nat => real.
10.6259 + (All::((nat => real) => bool) => bool)
10.6260 + (%p::nat => real.
10.6261 + (op -->::bool => bool => bool)
10.6262 + ((fine::(real => real)
10.6263 + => (nat => real) * (nat => real) => bool)
10.6264 + (%x::real.
10.6265 + (If::bool => real => real => real)
10.6266 + ((op <::real => real => bool) (g1 x) (g2 x))
10.6267 + (g1 x) (g2 x))
10.6268 + ((Pair::(nat => real)
10.6269 + => (nat => real)
10.6270 + => (nat => real) * (nat => real))
10.6271 + D p))
10.6272 + ((op &::bool => bool => bool)
10.6273 + ((fine::(real => real)
10.6274 + => (nat => real) * (nat => real) => bool)
10.6275 + g1 ((Pair::(nat => real)
10.6276 + => (nat => real)
10.6277 + => (nat => real) * (nat => real))
10.6278 + D p))
10.6279 + ((fine::(real => real)
10.6280 + => (nat => real) * (nat => real) => bool)
10.6281 + g2 ((Pair::(nat => real)
10.6282 + => (nat => real)
10.6283 + => (nat => real) * (nat => real))
10.6284 + D p)))))))"
10.6285 + by (import transc FINE_MIN)
10.6286 +
10.6287 +lemma DINT_UNIQ: "(All::(real => bool) => bool)
10.6288 + (%a::real.
10.6289 + (All::(real => bool) => bool)
10.6290 + (%b::real.
10.6291 + (All::((real => real) => bool) => bool)
10.6292 + (%f::real => real.
10.6293 + (All::(real => bool) => bool)
10.6294 + (%k1::real.
10.6295 + (All::(real => bool) => bool)
10.6296 + (%k2::real.
10.6297 + (op -->::bool => bool => bool)
10.6298 + ((op &::bool => bool => bool)
10.6299 + ((op <=::real => real => bool) a b)
10.6300 + ((op &::bool => bool => bool)
10.6301 + ((Dint::real * real
10.6302 +=> (real => real) => real => bool)
10.6303 + ((Pair::real => real => real * real) a b) f
10.6304 + k1)
10.6305 + ((Dint::real * real
10.6306 +=> (real => real) => real => bool)
10.6307 + ((Pair::real => real => real * real) a b) f
10.6308 + k2)))
10.6309 + ((op =::real => real => bool) k1 k2))))))"
10.6310 + by (import transc DINT_UNIQ)
10.6311 +
10.6312 +lemma INTEGRAL_NULL: "ALL f a. Dint (a, a) f 0"
10.6313 + by (import transc INTEGRAL_NULL)
10.6314 +
10.6315 +lemma FTC1: "(All::((real => real) => bool) => bool)
10.6316 + (%f::real => real.
10.6317 + (All::((real => real) => bool) => bool)
10.6318 + (%f'::real => real.
10.6319 + (All::(real => bool) => bool)
10.6320 + (%a::real.
10.6321 + (All::(real => bool) => bool)
10.6322 + (%b::real.
10.6323 + (op -->::bool => bool => bool)
10.6324 + ((op &::bool => bool => bool)
10.6325 + ((op <=::real => real => bool) a b)
10.6326 + ((All::(real => bool) => bool)
10.6327 + (%x::real.
10.6328 + (op -->::bool => bool => bool)
10.6329 + ((op &::bool => bool => bool)
10.6330 + ((op <=::real => real => bool) a x)
10.6331 + ((op <=::real => real => bool) x b))
10.6332 + ((diffl::(real => real)
10.6333 + => real => real => bool)
10.6334 + f (f' x) x))))
10.6335 + ((Dint::real * real => (real => real) => real => bool)
10.6336 + ((Pair::real => real => real * real) a b) f'
10.6337 + ((op -::real => real => real) (f b) (f a)))))))"
10.6338 + by (import transc FTC1)
10.6339 +
10.6340 +lemma MCLAURIN: "(All::((real => real) => bool) => bool)
10.6341 + (%f::real => real.
10.6342 + (All::((nat => real => real) => bool) => bool)
10.6343 + (%diff::nat => real => real.
10.6344 + (All::(real => bool) => bool)
10.6345 + (%h::real.
10.6346 + (All::(nat => bool) => bool)
10.6347 + (%n::nat.
10.6348 + (op -->::bool => bool => bool)
10.6349 + ((op &::bool => bool => bool)
10.6350 + ((op <::real => real => bool) (0::real) h)
10.6351 + ((op &::bool => bool => bool)
10.6352 + ((op <::nat => nat => bool) (0::nat) n)
10.6353 + ((op &::bool => bool => bool)
10.6354 + ((op =::(real => real) => (real => real) => bool)
10.6355 + (diff (0::nat)) f)
10.6356 + ((All::(nat => bool) => bool)
10.6357 + (%m::nat.
10.6358 + (All::(real => bool) => bool)
10.6359 + (%t::real.
10.6360 +(op -->::bool => bool => bool)
10.6361 + ((op &::bool => bool => bool) ((op <::nat => nat => bool) m n)
10.6362 + ((op &::bool => bool => bool) ((op <=::real => real => bool) (0::real) t)
10.6363 + ((op <=::real => real => bool) t h)))
10.6364 + ((diffl::(real => real) => real => real => bool) (diff m)
10.6365 + (diff ((Suc::nat => nat) m) t) t)))))))
10.6366 + ((Ex::(real => bool) => bool)
10.6367 + (%t::real.
10.6368 + (op &::bool => bool => bool)
10.6369 + ((op <::real => real => bool) (0::real) t)
10.6370 + ((op &::bool => bool => bool)
10.6371 + ((op <::real => real => bool) t h)
10.6372 + ((op =::real => real => bool) (f h)
10.6373 + ((op +::real => real => real)
10.6374 + ((real.sum::nat * nat
10.6375 + => (nat => real) => real)
10.6376 + ((Pair::nat => nat => nat * nat)
10.6377 +(0::nat) n)
10.6378 + (%m::nat.
10.6379 + (op *::real => real => real)
10.6380 + ((op /::real => real => real) (diff m (0::real))
10.6381 + ((real::nat => real) ((FACT::nat => nat) m)))
10.6382 + ((op ^::real => nat => real) h m)))
10.6383 + ((op *::real => real => real)
10.6384 + ((op /::real => real => real) (diff n t)
10.6385 +((real::nat => real) ((FACT::nat => nat) n)))
10.6386 + ((op ^::real => nat => real) h
10.6387 +n)))))))))))"
10.6388 + by (import transc MCLAURIN)
10.6389 +
10.6390 +lemma MCLAURIN_NEG: "(All::((real => real) => bool) => bool)
10.6391 + (%f::real => real.
10.6392 + (All::((nat => real => real) => bool) => bool)
10.6393 + (%diff::nat => real => real.
10.6394 + (All::(real => bool) => bool)
10.6395 + (%h::real.
10.6396 + (All::(nat => bool) => bool)
10.6397 + (%n::nat.
10.6398 + (op -->::bool => bool => bool)
10.6399 + ((op &::bool => bool => bool)
10.6400 + ((op <::real => real => bool) h (0::real))
10.6401 + ((op &::bool => bool => bool)
10.6402 + ((op <::nat => nat => bool) (0::nat) n)
10.6403 + ((op &::bool => bool => bool)
10.6404 + ((op =::(real => real) => (real => real) => bool)
10.6405 + (diff (0::nat)) f)
10.6406 + ((All::(nat => bool) => bool)
10.6407 + (%m::nat.
10.6408 + (All::(real => bool) => bool)
10.6409 + (%t::real.
10.6410 +(op -->::bool => bool => bool)
10.6411 + ((op &::bool => bool => bool) ((op <::nat => nat => bool) m n)
10.6412 + ((op &::bool => bool => bool) ((op <=::real => real => bool) h t)
10.6413 + ((op <=::real => real => bool) t (0::real))))
10.6414 + ((diffl::(real => real) => real => real => bool) (diff m)
10.6415 + (diff ((Suc::nat => nat) m) t) t)))))))
10.6416 + ((Ex::(real => bool) => bool)
10.6417 + (%t::real.
10.6418 + (op &::bool => bool => bool)
10.6419 + ((op <::real => real => bool) h t)
10.6420 + ((op &::bool => bool => bool)
10.6421 + ((op <::real => real => bool) t (0::real))
10.6422 + ((op =::real => real => bool) (f h)
10.6423 + ((op +::real => real => real)
10.6424 + ((real.sum::nat * nat
10.6425 + => (nat => real) => real)
10.6426 + ((Pair::nat => nat => nat * nat)
10.6427 +(0::nat) n)
10.6428 + (%m::nat.
10.6429 + (op *::real => real => real)
10.6430 + ((op /::real => real => real) (diff m (0::real))
10.6431 + ((real::nat => real) ((FACT::nat => nat) m)))
10.6432 + ((op ^::real => nat => real) h m)))
10.6433 + ((op *::real => real => real)
10.6434 + ((op /::real => real => real) (diff n t)
10.6435 +((real::nat => real) ((FACT::nat => nat) n)))
10.6436 + ((op ^::real => nat => real) h
10.6437 +n)))))))))))"
10.6438 + by (import transc MCLAURIN_NEG)
10.6439 +
10.6440 +lemma MCLAURIN_ALL_LT: "(All::((real => real) => bool) => bool)
10.6441 + (%f::real => real.
10.6442 + (All::((nat => real => real) => bool) => bool)
10.6443 + (%diff::nat => real => real.
10.6444 + (op -->::bool => bool => bool)
10.6445 + ((op &::bool => bool => bool)
10.6446 + ((op =::(real => real) => (real => real) => bool)
10.6447 + (diff (0::nat)) f)
10.6448 + ((All::(nat => bool) => bool)
10.6449 + (%m::nat.
10.6450 + (All::(real => bool) => bool)
10.6451 + (%x::real.
10.6452 + (diffl::(real => real) => real => real => bool)
10.6453 + (diff m) (diff ((Suc::nat => nat) m) x) x))))
10.6454 + ((All::(real => bool) => bool)
10.6455 + (%x::real.
10.6456 + (All::(nat => bool) => bool)
10.6457 + (%n::nat.
10.6458 + (op -->::bool => bool => bool)
10.6459 + ((op &::bool => bool => bool)
10.6460 + ((Not::bool => bool)
10.6461 + ((op =::real => real => bool) x (0::real)))
10.6462 + ((op <::nat => nat => bool) (0::nat) n))
10.6463 + ((Ex::(real => bool) => bool)
10.6464 + (%t::real.
10.6465 + (op &::bool => bool => bool)
10.6466 + ((op <::real => real => bool) (0::real)
10.6467 + ((abs::real => real) t))
10.6468 + ((op &::bool => bool => bool)
10.6469 + ((op <::real => real => bool)
10.6470 + ((abs::real => real) t)
10.6471 + ((abs::real => real) x))
10.6472 + ((op =::real => real => bool) (f x)
10.6473 + ((op +::real => real => real)
10.6474 + ((real.sum::nat * nat
10.6475 + => (nat => real) => real)
10.6476 +((Pair::nat => nat => nat * nat) (0::nat) n)
10.6477 +(%m::nat.
10.6478 + (op *::real => real => real)
10.6479 + ((op /::real => real => real) (diff m (0::real))
10.6480 + ((real::nat => real) ((FACT::nat => nat) m)))
10.6481 + ((op ^::real => nat => real) x m)))
10.6482 + ((op *::real => real => real)
10.6483 +((op /::real => real => real) (diff n t)
10.6484 + ((real::nat => real) ((FACT::nat => nat) n)))
10.6485 +((op ^::real => nat => real) x n))))))))))))"
10.6486 + by (import transc MCLAURIN_ALL_LT)
10.6487 +
10.6488 +lemma MCLAURIN_ZERO: "(All::((nat => real => real) => bool) => bool)
10.6489 + (%diff::nat => real => real.
10.6490 + (All::(nat => bool) => bool)
10.6491 + (%n::nat.
10.6492 + (All::(real => bool) => bool)
10.6493 + (%x::real.
10.6494 + (op -->::bool => bool => bool)
10.6495 + ((op &::bool => bool => bool)
10.6496 + ((op =::real => real => bool) x (0::real))
10.6497 + ((op <::nat => nat => bool) (0::nat) n))
10.6498 + ((op =::real => real => bool)
10.6499 + ((real.sum::nat * nat => (nat => real) => real)
10.6500 + ((Pair::nat => nat => nat * nat) (0::nat) n)
10.6501 + (%m::nat.
10.6502 + (op *::real => real => real)
10.6503 + ((op /::real => real => real) (diff m (0::real))
10.6504 + ((real::nat => real) ((FACT::nat => nat) m)))
10.6505 + ((op ^::real => nat => real) x m)))
10.6506 + (diff (0::nat) (0::real))))))"
10.6507 + by (import transc MCLAURIN_ZERO)
10.6508 +
10.6509 +lemma MCLAURIN_ALL_LE: "(All::((real => real) => bool) => bool)
10.6510 + (%f::real => real.
10.6511 + (All::((nat => real => real) => bool) => bool)
10.6512 + (%diff::nat => real => real.
10.6513 + (op -->::bool => bool => bool)
10.6514 + ((op &::bool => bool => bool)
10.6515 + ((op =::(real => real) => (real => real) => bool)
10.6516 + (diff (0::nat)) f)
10.6517 + ((All::(nat => bool) => bool)
10.6518 + (%m::nat.
10.6519 + (All::(real => bool) => bool)
10.6520 + (%x::real.
10.6521 + (diffl::(real => real) => real => real => bool)
10.6522 + (diff m) (diff ((Suc::nat => nat) m) x) x))))
10.6523 + ((All::(real => bool) => bool)
10.6524 + (%x::real.
10.6525 + (All::(nat => bool) => bool)
10.6526 + (%n::nat.
10.6527 + (Ex::(real => bool) => bool)
10.6528 + (%t::real.
10.6529 + (op &::bool => bool => bool)
10.6530 + ((op <=::real => real => bool)
10.6531 + ((abs::real => real) t)
10.6532 + ((abs::real => real) x))
10.6533 + ((op =::real => real => bool) (f x)
10.6534 + ((op +::real => real => real)
10.6535 + ((real.sum::nat * nat
10.6536 + => (nat => real) => real)
10.6537 + ((Pair::nat => nat => nat * nat) (0::nat)
10.6538 + n)
10.6539 + (%m::nat.
10.6540 +(op *::real => real => real)
10.6541 + ((op /::real => real => real) (diff m (0::real))
10.6542 + ((real::nat => real) ((FACT::nat => nat) m)))
10.6543 + ((op ^::real => nat => real) x m)))
10.6544 + ((op *::real => real => real)
10.6545 + ((op /::real => real => real) (diff n t)
10.6546 + ((real::nat => real)
10.6547 +((FACT::nat => nat) n)))
10.6548 + ((op ^::real => nat => real) x n))))))))))"
10.6549 + by (import transc MCLAURIN_ALL_LE)
10.6550 +
10.6551 +lemma MCLAURIN_EXP_LT: "(All::(real => bool) => bool)
10.6552 + (%x::real.
10.6553 + (All::(nat => bool) => bool)
10.6554 + (%n::nat.
10.6555 + (op -->::bool => bool => bool)
10.6556 + ((op &::bool => bool => bool)
10.6557 + ((Not::bool => bool)
10.6558 + ((op =::real => real => bool) x (0::real)))
10.6559 + ((op <::nat => nat => bool) (0::nat) n))
10.6560 + ((Ex::(real => bool) => bool)
10.6561 + (%xa::real.
10.6562 + (op &::bool => bool => bool)
10.6563 + ((op <::real => real => bool) (0::real)
10.6564 + ((abs::real => real) xa))
10.6565 + ((op &::bool => bool => bool)
10.6566 + ((op <::real => real => bool) ((abs::real => real) xa)
10.6567 + ((abs::real => real) x))
10.6568 + ((op =::real => real => bool) ((exp::real => real) x)
10.6569 + ((op +::real => real => real)
10.6570 + ((real.sum::nat * nat => (nat => real) => real)
10.6571 + ((Pair::nat => nat => nat * nat) (0::nat) n)
10.6572 + (%m::nat.
10.6573 + (op /::real => real => real)
10.6574 + ((op ^::real => nat => real) x m)
10.6575 + ((real::nat => real)
10.6576 + ((FACT::nat => nat) m))))
10.6577 + ((op *::real => real => real)
10.6578 + ((op /::real => real => real)
10.6579 + ((exp::real => real) xa)
10.6580 + ((real::nat => real) ((FACT::nat => nat) n)))
10.6581 + ((op ^::real => nat => real) x n)))))))))"
10.6582 + by (import transc MCLAURIN_EXP_LT)
10.6583 +
10.6584 +lemma MCLAURIN_EXP_LE: "ALL x n.
10.6585 + EX xa.
10.6586 + abs xa <= abs x &
10.6587 + exp x =
10.6588 + real.sum (0, n) (%m. x ^ m / real (FACT m)) +
10.6589 + exp xa / real (FACT n) * x ^ n"
10.6590 + by (import transc MCLAURIN_EXP_LE)
10.6591 +
10.6592 +lemma DIFF_LN_COMPOSITE: "(All::((real => real) => bool) => bool)
10.6593 + (%g::real => real.
10.6594 + (All::(real => bool) => bool)
10.6595 + (%m::real.
10.6596 + (All::(real => bool) => bool)
10.6597 + (%x::real.
10.6598 + (op -->::bool => bool => bool)
10.6599 + ((op &::bool => bool => bool)
10.6600 + ((diffl::(real => real) => real => real => bool) g m x)
10.6601 + ((op <::real => real => bool) (0::real) (g x)))
10.6602 + ((diffl::(real => real) => real => real => bool)
10.6603 + (%x::real. (ln::real => real) (g x))
10.6604 + ((op *::real => real => real)
10.6605 + ((inverse::real => real) (g x)) m)
10.6606 + x))))"
10.6607 + by (import transc DIFF_LN_COMPOSITE)
10.6608 +
10.6609 +;end_setup
10.6610 +
10.6611 +;setup_theory poly
10.6612 +
10.6613 +consts
10.6614 + poly :: "real list => real => real"
10.6615 +
10.6616 +specification (poly_primdef: poly) poly_def: "(ALL x. poly [] x = 0) & (ALL h t x. poly (h # t) x = h + x * poly t x)"
10.6617 + by (import poly poly_def)
10.6618 +
10.6619 +consts
10.6620 + poly_add :: "real list => real list => real list"
10.6621 +
10.6622 +specification (poly_add_primdef: poly_add) poly_add_def: "(ALL l2. poly_add [] l2 = l2) &
10.6623 +(ALL h t l2.
10.6624 + poly_add (h # t) l2 =
10.6625 + (if l2 = [] then h # t else (h + hd l2) # poly_add t (tl l2)))"
10.6626 + by (import poly poly_add_def)
10.6627 +
10.6628 +consts
10.6629 + "##" :: "real => real list => real list" ("##")
10.6630 +
10.6631 +specification ("##") poly_cmul_def: "(ALL c. ## c [] = []) & (ALL c h t. ## c (h # t) = c * h # ## c t)"
10.6632 + by (import poly poly_cmul_def)
10.6633 +
10.6634 +consts
10.6635 + poly_neg :: "real list => real list"
10.6636 +
10.6637 +defs
10.6638 + poly_neg_primdef: "poly_neg == ## (- 1)"
10.6639 +
10.6640 +lemma poly_neg_def: "poly_neg = ## (- 1)"
10.6641 + by (import poly poly_neg_def)
10.6642 +
10.6643 +consts
10.6644 + poly_mul :: "real list => real list => real list"
10.6645 +
10.6646 +specification (poly_mul_primdef: poly_mul) poly_mul_def: "(ALL l2. poly_mul [] l2 = []) &
10.6647 +(ALL h t l2.
10.6648 + poly_mul (h # t) l2 =
10.6649 + (if t = [] then ## h l2 else poly_add (## h l2) (0 # poly_mul t l2)))"
10.6650 + by (import poly poly_mul_def)
10.6651 +
10.6652 +consts
10.6653 + poly_exp :: "real list => nat => real list"
10.6654 +
10.6655 +specification (poly_exp_primdef: poly_exp) poly_exp_def: "(ALL p. poly_exp p 0 = [1]) &
10.6656 +(ALL p n. poly_exp p (Suc n) = poly_mul p (poly_exp p n))"
10.6657 + by (import poly poly_exp_def)
10.6658 +
10.6659 +consts
10.6660 + poly_diff_aux :: "nat => real list => real list"
10.6661 +
10.6662 +specification (poly_diff_aux_primdef: poly_diff_aux) poly_diff_aux_def: "(ALL n. poly_diff_aux n [] = []) &
10.6663 +(ALL n h t. poly_diff_aux n (h # t) = real n * h # poly_diff_aux (Suc n) t)"
10.6664 + by (import poly poly_diff_aux_def)
10.6665 +
10.6666 +constdefs
10.6667 + diff :: "real list => real list"
10.6668 + "diff == %l. if l = [] then [] else poly_diff_aux 1 (tl l)"
10.6669 +
10.6670 +lemma poly_diff_def: "ALL l. diff l = (if l = [] then [] else poly_diff_aux 1 (tl l))"
10.6671 + by (import poly poly_diff_def)
10.6672 +
10.6673 +lemma POLY_ADD_CLAUSES: "poly_add [] p2 = p2 &
10.6674 +poly_add p1 [] = p1 &
10.6675 +poly_add (h1 # t1) (h2 # t2) = (h1 + h2) # poly_add t1 t2"
10.6676 + by (import poly POLY_ADD_CLAUSES)
10.6677 +
10.6678 +lemma POLY_CMUL_CLAUSES: "## c [] = [] & ## c (h # t) = c * h # ## c t"
10.6679 + by (import poly POLY_CMUL_CLAUSES)
10.6680 +
10.6681 +lemma POLY_NEG_CLAUSES: "poly_neg [] = [] & poly_neg (h # t) = - h # poly_neg t"
10.6682 + by (import poly POLY_NEG_CLAUSES)
10.6683 +
10.6684 +lemma POLY_MUL_CLAUSES: "poly_mul [] p2 = [] &
10.6685 +poly_mul [h1] p2 = ## h1 p2 &
10.6686 +poly_mul (h1 # k1 # t1) p2 = poly_add (## h1 p2) (0 # poly_mul (k1 # t1) p2)"
10.6687 + by (import poly POLY_MUL_CLAUSES)
10.6688 +
10.6689 +lemma POLY_DIFF_CLAUSES: "diff [] = [] & diff [c] = [] & diff (h # t) = poly_diff_aux 1 t"
10.6690 + by (import poly POLY_DIFF_CLAUSES)
10.6691 +
10.6692 +lemma POLY_ADD: "ALL t p2 x. poly (poly_add t p2) x = poly t x + poly p2 x"
10.6693 + by (import poly POLY_ADD)
10.6694 +
10.6695 +lemma POLY_CMUL: "ALL t c x. poly (## c t) x = c * poly t x"
10.6696 + by (import poly POLY_CMUL)
10.6697 +
10.6698 +lemma POLY_NEG: "ALL x xa. poly (poly_neg x) xa = - poly x xa"
10.6699 + by (import poly POLY_NEG)
10.6700 +
10.6701 +lemma POLY_MUL: "ALL x t p2. poly (poly_mul t p2) x = poly t x * poly p2 x"
10.6702 + by (import poly POLY_MUL)
10.6703 +
10.6704 +lemma POLY_EXP: "ALL p n x. poly (poly_exp p n) x = poly p x ^ n"
10.6705 + by (import poly POLY_EXP)
10.6706 +
10.6707 +lemma POLY_DIFF_LEMMA: "ALL t n x.
10.6708 + diffl (%x. x ^ Suc n * poly t x)
10.6709 + (x ^ n * poly (poly_diff_aux (Suc n) t) x) x"
10.6710 + by (import poly POLY_DIFF_LEMMA)
10.6711 +
10.6712 +lemma POLY_DIFF: "ALL t x. diffl (poly t) (poly (diff t) x) x"
10.6713 + by (import poly POLY_DIFF)
10.6714 +
10.6715 +lemma POLY_DIFFERENTIABLE: "ALL l. All (differentiable (poly l))"
10.6716 + by (import poly POLY_DIFFERENTIABLE)
10.6717 +
10.6718 +lemma POLY_CONT: "ALL l. All (contl (poly l))"
10.6719 + by (import poly POLY_CONT)
10.6720 +
10.6721 +lemma POLY_IVT_POS: "(All::(real list => bool) => bool)
10.6722 + (%x::real list.
10.6723 + (All::(real => bool) => bool)
10.6724 + (%xa::real.
10.6725 + (All::(real => bool) => bool)
10.6726 + (%xb::real.
10.6727 + (op -->::bool => bool => bool)
10.6728 + ((op &::bool => bool => bool)
10.6729 + ((op <::real => real => bool) xa xb)
10.6730 + ((op &::bool => bool => bool)
10.6731 + ((op <::real => real => bool)
10.6732 + ((poly::real list => real => real) x xa) (0::real))
10.6733 + ((op <::real => real => bool) (0::real)
10.6734 + ((poly::real list => real => real) x xb))))
10.6735 + ((Ex::(real => bool) => bool)
10.6736 + (%xc::real.
10.6737 + (op &::bool => bool => bool)
10.6738 + ((op <::real => real => bool) xa xc)
10.6739 + ((op &::bool => bool => bool)
10.6740 + ((op <::real => real => bool) xc xb)
10.6741 + ((op =::real => real => bool)
10.6742 + ((poly::real list => real => real) x xc)
10.6743 + (0::real))))))))"
10.6744 + by (import poly POLY_IVT_POS)
10.6745 +
10.6746 +lemma POLY_IVT_NEG: "(All::(real list => bool) => bool)
10.6747 + (%p::real list.
10.6748 + (All::(real => bool) => bool)
10.6749 + (%a::real.
10.6750 + (All::(real => bool) => bool)
10.6751 + (%b::real.
10.6752 + (op -->::bool => bool => bool)
10.6753 + ((op &::bool => bool => bool)
10.6754 + ((op <::real => real => bool) a b)
10.6755 + ((op &::bool => bool => bool)
10.6756 + ((op <::real => real => bool) (0::real)
10.6757 + ((poly::real list => real => real) p a))
10.6758 + ((op <::real => real => bool)
10.6759 + ((poly::real list => real => real) p b) (0::real))))
10.6760 + ((Ex::(real => bool) => bool)
10.6761 + (%x::real.
10.6762 + (op &::bool => bool => bool)
10.6763 + ((op <::real => real => bool) a x)
10.6764 + ((op &::bool => bool => bool)
10.6765 + ((op <::real => real => bool) x b)
10.6766 + ((op =::real => real => bool)
10.6767 + ((poly::real list => real => real) p x)
10.6768 + (0::real))))))))"
10.6769 + by (import poly POLY_IVT_NEG)
10.6770 +
10.6771 +lemma POLY_MVT: "(All::(real list => bool) => bool)
10.6772 + (%p::real list.
10.6773 + (All::(real => bool) => bool)
10.6774 + (%a::real.
10.6775 + (All::(real => bool) => bool)
10.6776 + (%b::real.
10.6777 + (op -->::bool => bool => bool)
10.6778 + ((op <::real => real => bool) a b)
10.6779 + ((Ex::(real => bool) => bool)
10.6780 + (%x::real.
10.6781 + (op &::bool => bool => bool)
10.6782 + ((op <::real => real => bool) a x)
10.6783 + ((op &::bool => bool => bool)
10.6784 + ((op <::real => real => bool) x b)
10.6785 + ((op =::real => real => bool)
10.6786 + ((op -::real => real => real)
10.6787 + ((poly::real list => real => real) p b)
10.6788 + ((poly::real list => real => real) p a))
10.6789 + ((op *::real => real => real)
10.6790 + ((op -::real => real => real) b a)
10.6791 + ((poly::real list => real => real)
10.6792 + ((diff::real list => real list) p) x)))))))))"
10.6793 + by (import poly POLY_MVT)
10.6794 +
10.6795 +lemma POLY_ADD_RZERO: "ALL x. poly (poly_add x []) = poly x"
10.6796 + by (import poly POLY_ADD_RZERO)
10.6797 +
10.6798 +lemma POLY_MUL_ASSOC: "ALL x xa xb.
10.6799 + poly (poly_mul x (poly_mul xa xb)) = poly (poly_mul (poly_mul x xa) xb)"
10.6800 + by (import poly POLY_MUL_ASSOC)
10.6801 +
10.6802 +lemma POLY_EXP_ADD: "ALL x xa xb.
10.6803 + poly (poly_exp xb (xa + x)) =
10.6804 + poly (poly_mul (poly_exp xb xa) (poly_exp xb x))"
10.6805 + by (import poly POLY_EXP_ADD)
10.6806 +
10.6807 +lemma POLY_DIFF_AUX_ADD: "ALL t p2 n.
10.6808 + poly (poly_diff_aux n (poly_add t p2)) =
10.6809 + poly (poly_add (poly_diff_aux n t) (poly_diff_aux n p2))"
10.6810 + by (import poly POLY_DIFF_AUX_ADD)
10.6811 +
10.6812 +lemma POLY_DIFF_AUX_CMUL: "ALL t c n. poly (poly_diff_aux n (## c t)) = poly (## c (poly_diff_aux n t))"
10.6813 + by (import poly POLY_DIFF_AUX_CMUL)
10.6814 +
10.6815 +lemma POLY_DIFF_AUX_NEG: "ALL x xa.
10.6816 + poly (poly_diff_aux xa (poly_neg x)) =
10.6817 + poly (poly_neg (poly_diff_aux xa x))"
10.6818 + by (import poly POLY_DIFF_AUX_NEG)
10.6819 +
10.6820 +lemma POLY_DIFF_AUX_MUL_LEMMA: "ALL t n.
10.6821 + poly (poly_diff_aux (Suc n) t) = poly (poly_add (poly_diff_aux n t) t)"
10.6822 + by (import poly POLY_DIFF_AUX_MUL_LEMMA)
10.6823 +
10.6824 +lemma POLY_DIFF_ADD: "ALL t p2. poly (diff (poly_add t p2)) = poly (poly_add (diff t) (diff p2))"
10.6825 + by (import poly POLY_DIFF_ADD)
10.6826 +
10.6827 +lemma POLY_DIFF_CMUL: "ALL t c. poly (diff (## c t)) = poly (## c (diff t))"
10.6828 + by (import poly POLY_DIFF_CMUL)
10.6829 +
10.6830 +lemma POLY_DIFF_NEG: "ALL x. poly (diff (poly_neg x)) = poly (poly_neg (diff x))"
10.6831 + by (import poly POLY_DIFF_NEG)
10.6832 +
10.6833 +lemma POLY_DIFF_MUL_LEMMA: "ALL x xa. poly (diff (xa # x)) = poly (poly_add (0 # diff x) x)"
10.6834 + by (import poly POLY_DIFF_MUL_LEMMA)
10.6835 +
10.6836 +lemma POLY_DIFF_MUL: "ALL t p2.
10.6837 + poly (diff (poly_mul t p2)) =
10.6838 + poly (poly_add (poly_mul t (diff p2)) (poly_mul (diff t) p2))"
10.6839 + by (import poly POLY_DIFF_MUL)
10.6840 +
10.6841 +lemma POLY_DIFF_EXP: "ALL p n.
10.6842 + poly (diff (poly_exp p (Suc n))) =
10.6843 + poly (poly_mul (## (real (Suc n)) (poly_exp p n)) (diff p))"
10.6844 + by (import poly POLY_DIFF_EXP)
10.6845 +
10.6846 +lemma POLY_DIFF_EXP_PRIME: "ALL n a.
10.6847 + poly (diff (poly_exp [- a, 1] (Suc n))) =
10.6848 + poly (## (real (Suc n)) (poly_exp [- a, 1] n))"
10.6849 + by (import poly POLY_DIFF_EXP_PRIME)
10.6850 +
10.6851 +lemma POLY_LINEAR_REM: "ALL t h. EX q r. h # t = poly_add [r] (poly_mul [- a, 1] q)"
10.6852 + by (import poly POLY_LINEAR_REM)
10.6853 +
10.6854 +lemma POLY_LINEAR_DIVIDES: "ALL a t. (poly t a = 0) = (t = [] | (EX q. t = poly_mul [- a, 1] q))"
10.6855 + by (import poly POLY_LINEAR_DIVIDES)
10.6856 +
10.6857 +lemma POLY_LENGTH_MUL: "ALL x. length (poly_mul [- a, 1] x) = Suc (length x)"
10.6858 + by (import poly POLY_LENGTH_MUL)
10.6859 +
10.6860 +lemma POLY_ROOTS_INDEX_LEMMA: "(All::(nat => bool) => bool)
10.6861 + (%n::nat.
10.6862 + (All::(real list => bool) => bool)
10.6863 + (%p::real list.
10.6864 + (op -->::bool => bool => bool)
10.6865 + ((op &::bool => bool => bool)
10.6866 + ((Not::bool => bool)
10.6867 + ((op =::(real => real) => (real => real) => bool)
10.6868 + ((poly::real list => real => real) p)
10.6869 + ((poly::real list => real => real) ([]::real list))))
10.6870 + ((op =::nat => nat => bool) ((size::real list => nat) p) n))
10.6871 + ((Ex::((nat => real) => bool) => bool)
10.6872 + (%i::nat => real.
10.6873 + (All::(real => bool) => bool)
10.6874 + (%x::real.
10.6875 + (op -->::bool => bool => bool)
10.6876 + ((op =::real => real => bool)
10.6877 + ((poly::real list => real => real) p x) (0::real))
10.6878 + ((Ex::(nat => bool) => bool)
10.6879 + (%m::nat.
10.6880 + (op &::bool => bool => bool)
10.6881 + ((op <=::nat => nat => bool) m n)
10.6882 + ((op =::real => real => bool) x (i m)))))))))"
10.6883 + by (import poly POLY_ROOTS_INDEX_LEMMA)
10.6884 +
10.6885 +lemma POLY_ROOTS_INDEX_LENGTH: "(All::(real list => bool) => bool)
10.6886 + (%p::real list.
10.6887 + (op -->::bool => bool => bool)
10.6888 + ((Not::bool => bool)
10.6889 + ((op =::(real => real) => (real => real) => bool)
10.6890 + ((poly::real list => real => real) p)
10.6891 + ((poly::real list => real => real) ([]::real list))))
10.6892 + ((Ex::((nat => real) => bool) => bool)
10.6893 + (%i::nat => real.
10.6894 + (All::(real => bool) => bool)
10.6895 + (%x::real.
10.6896 + (op -->::bool => bool => bool)
10.6897 + ((op =::real => real => bool)
10.6898 + ((poly::real list => real => real) p x) (0::real))
10.6899 + ((Ex::(nat => bool) => bool)
10.6900 + (%n::nat.
10.6901 + (op &::bool => bool => bool)
10.6902 + ((op <=::nat => nat => bool) n
10.6903 + ((size::real list => nat) p))
10.6904 + ((op =::real => real => bool) x (i n))))))))"
10.6905 + by (import poly POLY_ROOTS_INDEX_LENGTH)
10.6906 +
10.6907 +lemma POLY_ROOTS_FINITE_LEMMA: "(All::(real list => bool) => bool)
10.6908 + (%p::real list.
10.6909 + (op -->::bool => bool => bool)
10.6910 + ((Not::bool => bool)
10.6911 + ((op =::(real => real) => (real => real) => bool)
10.6912 + ((poly::real list => real => real) p)
10.6913 + ((poly::real list => real => real) ([]::real list))))
10.6914 + ((Ex::(nat => bool) => bool)
10.6915 + (%N::nat.
10.6916 + (Ex::((nat => real) => bool) => bool)
10.6917 + (%i::nat => real.
10.6918 + (All::(real => bool) => bool)
10.6919 + (%x::real.
10.6920 + (op -->::bool => bool => bool)
10.6921 + ((op =::real => real => bool)
10.6922 + ((poly::real list => real => real) p x) (0::real))
10.6923 + ((Ex::(nat => bool) => bool)
10.6924 + (%n::nat.
10.6925 + (op &::bool => bool => bool)
10.6926 + ((op <::nat => nat => bool) n N)
10.6927 + ((op =::real => real => bool) x (i n)))))))))"
10.6928 + by (import poly POLY_ROOTS_FINITE_LEMMA)
10.6929 +
10.6930 +lemma FINITE_LEMMA: "(All::((nat => real) => bool) => bool)
10.6931 + (%i::nat => real.
10.6932 + (All::(nat => bool) => bool)
10.6933 + (%x::nat.
10.6934 + (All::((real => bool) => bool) => bool)
10.6935 + (%xa::real => bool.
10.6936 + (op -->::bool => bool => bool)
10.6937 + ((All::(real => bool) => bool)
10.6938 + (%xb::real.
10.6939 + (op -->::bool => bool => bool) (xa xb)
10.6940 + ((Ex::(nat => bool) => bool)
10.6941 + (%n::nat.
10.6942 + (op &::bool => bool => bool)
10.6943 + ((op <::nat => nat => bool) n x)
10.6944 + ((op =::real => real => bool) xb (i n))))))
10.6945 + ((Ex::(real => bool) => bool)
10.6946 + (%a::real.
10.6947 + (All::(real => bool) => bool)
10.6948 + (%x::real.
10.6949 + (op -->::bool => bool => bool) (xa x)
10.6950 + ((op <::real => real => bool) x a)))))))"
10.6951 + by (import poly FINITE_LEMMA)
10.6952 +
10.6953 +lemma POLY_ROOTS_FINITE: "(All::(real list => bool) => bool)
10.6954 + (%p::real list.
10.6955 + (op =::bool => bool => bool)
10.6956 + ((Not::bool => bool)
10.6957 + ((op =::(real => real) => (real => real) => bool)
10.6958 + ((poly::real list => real => real) p)
10.6959 + ((poly::real list => real => real) ([]::real list))))
10.6960 + ((Ex::(nat => bool) => bool)
10.6961 + (%N::nat.
10.6962 + (Ex::((nat => real) => bool) => bool)
10.6963 + (%i::nat => real.
10.6964 + (All::(real => bool) => bool)
10.6965 + (%x::real.
10.6966 + (op -->::bool => bool => bool)
10.6967 + ((op =::real => real => bool)
10.6968 + ((poly::real list => real => real) p x) (0::real))
10.6969 + ((Ex::(nat => bool) => bool)
10.6970 + (%n::nat.
10.6971 + (op &::bool => bool => bool)
10.6972 + ((op <::nat => nat => bool) n N)
10.6973 + ((op =::real => real => bool) x (i n)))))))))"
10.6974 + by (import poly POLY_ROOTS_FINITE)
10.6975 +
10.6976 +lemma POLY_ENTIRE_LEMMA: "(All::(real list => bool) => bool)
10.6977 + (%p::real list.
10.6978 + (All::(real list => bool) => bool)
10.6979 + (%q::real list.
10.6980 + (op -->::bool => bool => bool)
10.6981 + ((op &::bool => bool => bool)
10.6982 + ((Not::bool => bool)
10.6983 + ((op =::(real => real) => (real => real) => bool)
10.6984 + ((poly::real list => real => real) p)
10.6985 + ((poly::real list => real => real) ([]::real list))))
10.6986 + ((Not::bool => bool)
10.6987 + ((op =::(real => real) => (real => real) => bool)
10.6988 + ((poly::real list => real => real) q)
10.6989 + ((poly::real list => real => real) ([]::real list)))))
10.6990 + ((Not::bool => bool)
10.6991 + ((op =::(real => real) => (real => real) => bool)
10.6992 + ((poly::real list => real => real)
10.6993 + ((poly_mul::real list => real list => real list) p q))
10.6994 + ((poly::real list => real => real) ([]::real list))))))"
10.6995 + by (import poly POLY_ENTIRE_LEMMA)
10.6996 +
10.6997 +lemma POLY_ENTIRE: "ALL p q.
10.6998 + (poly (poly_mul p q) = poly []) = (poly p = poly [] | poly q = poly [])"
10.6999 + by (import poly POLY_ENTIRE)
10.7000 +
10.7001 +lemma POLY_MUL_LCANCEL: "ALL x xa xb.
10.7002 + (poly (poly_mul x xa) = poly (poly_mul x xb)) =
10.7003 + (poly x = poly [] | poly xa = poly xb)"
10.7004 + by (import poly POLY_MUL_LCANCEL)
10.7005 +
10.7006 +lemma POLY_EXP_EQ_0: "ALL p n. (poly (poly_exp p n) = poly []) = (poly p = poly [] & n ~= 0)"
10.7007 + by (import poly POLY_EXP_EQ_0)
10.7008 +
10.7009 +lemma POLY_PRIME_EQ_0: "ALL a. poly [a, 1] ~= poly []"
10.7010 + by (import poly POLY_PRIME_EQ_0)
10.7011 +
10.7012 +lemma POLY_EXP_PRIME_EQ_0: "ALL a n. poly (poly_exp [a, 1] n) ~= poly []"
10.7013 + by (import poly POLY_EXP_PRIME_EQ_0)
10.7014 +
10.7015 +lemma POLY_ZERO_LEMMA: "(All::(real => bool) => bool)
10.7016 + (%h::real.
10.7017 + (All::(real list => bool) => bool)
10.7018 + (%t::real list.
10.7019 + (op -->::bool => bool => bool)
10.7020 + ((op =::(real => real) => (real => real) => bool)
10.7021 + ((poly::real list => real => real)
10.7022 + ((op #::real => real list => real list) h t))
10.7023 + ((poly::real list => real => real) ([]::real list)))
10.7024 + ((op &::bool => bool => bool)
10.7025 + ((op =::real => real => bool) h (0::real))
10.7026 + ((op =::(real => real) => (real => real) => bool)
10.7027 + ((poly::real list => real => real) t)
10.7028 + ((poly::real list => real => real) ([]::real list))))))"
10.7029 + by (import poly POLY_ZERO_LEMMA)
10.7030 +
10.7031 +lemma POLY_ZERO: "ALL t. (poly t = poly []) = list_all (%c. c = 0) t"
10.7032 + by (import poly POLY_ZERO)
10.7033 +
10.7034 +lemma POLY_DIFF_AUX_ISZERO: "ALL t n.
10.7035 + list_all (%c. c = 0) (poly_diff_aux (Suc n) t) = list_all (%c. c = 0) t"
10.7036 + by (import poly POLY_DIFF_AUX_ISZERO)
10.7037 +
10.7038 +lemma POLY_DIFF_ISZERO: "(All::(real list => bool) => bool)
10.7039 + (%x::real list.
10.7040 + (op -->::bool => bool => bool)
10.7041 + ((op =::(real => real) => (real => real) => bool)
10.7042 + ((poly::real list => real => real)
10.7043 + ((diff::real list => real list) x))
10.7044 + ((poly::real list => real => real) ([]::real list)))
10.7045 + ((Ex::(real => bool) => bool)
10.7046 + (%h::real.
10.7047 + (op =::(real => real) => (real => real) => bool)
10.7048 + ((poly::real list => real => real) x)
10.7049 + ((poly::real list => real => real)
10.7050 + ((op #::real => real list => real list) h
10.7051 + ([]::real list))))))"
10.7052 + by (import poly POLY_DIFF_ISZERO)
10.7053 +
10.7054 +lemma POLY_DIFF_ZERO: "(All::(real list => bool) => bool)
10.7055 + (%x::real list.
10.7056 + (op -->::bool => bool => bool)
10.7057 + ((op =::(real => real) => (real => real) => bool)
10.7058 + ((poly::real list => real => real) x)
10.7059 + ((poly::real list => real => real) ([]::real list)))
10.7060 + ((op =::(real => real) => (real => real) => bool)
10.7061 + ((poly::real list => real => real)
10.7062 + ((diff::real list => real list) x))
10.7063 + ((poly::real list => real => real) ([]::real list))))"
10.7064 + by (import poly POLY_DIFF_ZERO)
10.7065 +
10.7066 +lemma POLY_DIFF_WELLDEF: "(All::(real list => bool) => bool)
10.7067 + (%p::real list.
10.7068 + (All::(real list => bool) => bool)
10.7069 + (%q::real list.
10.7070 + (op -->::bool => bool => bool)
10.7071 + ((op =::(real => real) => (real => real) => bool)
10.7072 + ((poly::real list => real => real) p)
10.7073 + ((poly::real list => real => real) q))
10.7074 + ((op =::(real => real) => (real => real) => bool)
10.7075 + ((poly::real list => real => real)
10.7076 + ((diff::real list => real list) p))
10.7077 + ((poly::real list => real => real)
10.7078 + ((diff::real list => real list) q)))))"
10.7079 + by (import poly POLY_DIFF_WELLDEF)
10.7080 +
10.7081 +constdefs
10.7082 + poly_divides :: "real list => real list => bool"
10.7083 + "poly_divides == %p1 p2. EX q. poly p2 = poly (poly_mul p1 q)"
10.7084 +
10.7085 +lemma poly_divides: "ALL p1 p2. poly_divides p1 p2 = (EX q. poly p2 = poly (poly_mul p1 q))"
10.7086 + by (import poly poly_divides)
10.7087 +
10.7088 +lemma POLY_PRIMES: "ALL a p q.
10.7089 + poly_divides [a, 1] (poly_mul p q) =
10.7090 + (poly_divides [a, 1] p | poly_divides [a, 1] q)"
10.7091 + by (import poly POLY_PRIMES)
10.7092 +
10.7093 +lemma POLY_DIVIDES_REFL: "ALL p. poly_divides p p"
10.7094 + by (import poly POLY_DIVIDES_REFL)
10.7095 +
10.7096 +lemma POLY_DIVIDES_TRANS: "(All::(real list => bool) => bool)
10.7097 + (%p::real list.
10.7098 + (All::(real list => bool) => bool)
10.7099 + (%q::real list.
10.7100 + (All::(real list => bool) => bool)
10.7101 + (%r::real list.
10.7102 + (op -->::bool => bool => bool)
10.7103 + ((op &::bool => bool => bool)
10.7104 + ((poly_divides::real list => real list => bool) p q)
10.7105 + ((poly_divides::real list => real list => bool) q r))
10.7106 + ((poly_divides::real list => real list => bool) p r))))"
10.7107 + by (import poly POLY_DIVIDES_TRANS)
10.7108 +
10.7109 +lemma POLY_DIVIDES_EXP: "(All::(real list => bool) => bool)
10.7110 + (%p::real list.
10.7111 + (All::(nat => bool) => bool)
10.7112 + (%m::nat.
10.7113 + (All::(nat => bool) => bool)
10.7114 + (%n::nat.
10.7115 + (op -->::bool => bool => bool)
10.7116 + ((op <=::nat => nat => bool) m n)
10.7117 + ((poly_divides::real list => real list => bool)
10.7118 + ((poly_exp::real list => nat => real list) p m)
10.7119 + ((poly_exp::real list => nat => real list) p n)))))"
10.7120 + by (import poly POLY_DIVIDES_EXP)
10.7121 +
10.7122 +lemma POLY_EXP_DIVIDES: "(All::(real list => bool) => bool)
10.7123 + (%p::real list.
10.7124 + (All::(real list => bool) => bool)
10.7125 + (%q::real list.
10.7126 + (All::(nat => bool) => bool)
10.7127 + (%m::nat.
10.7128 + (All::(nat => bool) => bool)
10.7129 + (%n::nat.
10.7130 + (op -->::bool => bool => bool)
10.7131 + ((op &::bool => bool => bool)
10.7132 + ((poly_divides::real list => real list => bool)
10.7133 + ((poly_exp::real list => nat => real list) p n) q)
10.7134 + ((op <=::nat => nat => bool) m n))
10.7135 + ((poly_divides::real list => real list => bool)
10.7136 + ((poly_exp::real list => nat => real list) p m)
10.7137 + q)))))"
10.7138 + by (import poly POLY_EXP_DIVIDES)
10.7139 +
10.7140 +lemma POLY_DIVIDES_ADD: "(All::(real list => bool) => bool)
10.7141 + (%p::real list.
10.7142 + (All::(real list => bool) => bool)
10.7143 + (%q::real list.
10.7144 + (All::(real list => bool) => bool)
10.7145 + (%r::real list.
10.7146 + (op -->::bool => bool => bool)
10.7147 + ((op &::bool => bool => bool)
10.7148 + ((poly_divides::real list => real list => bool) p q)
10.7149 + ((poly_divides::real list => real list => bool) p r))
10.7150 + ((poly_divides::real list => real list => bool) p
10.7151 + ((poly_add::real list => real list => real list) q r)))))"
10.7152 + by (import poly POLY_DIVIDES_ADD)
10.7153 +
10.7154 +lemma POLY_DIVIDES_SUB: "(All::(real list => bool) => bool)
10.7155 + (%p::real list.
10.7156 + (All::(real list => bool) => bool)
10.7157 + (%q::real list.
10.7158 + (All::(real list => bool) => bool)
10.7159 + (%r::real list.
10.7160 + (op -->::bool => bool => bool)
10.7161 + ((op &::bool => bool => bool)
10.7162 + ((poly_divides::real list => real list => bool) p q)
10.7163 + ((poly_divides::real list => real list => bool) p
10.7164 + ((poly_add::real list => real list => real list) q r)))
10.7165 + ((poly_divides::real list => real list => bool) p r))))"
10.7166 + by (import poly POLY_DIVIDES_SUB)
10.7167 +
10.7168 +lemma POLY_DIVIDES_SUB2: "(All::(real list => bool) => bool)
10.7169 + (%p::real list.
10.7170 + (All::(real list => bool) => bool)
10.7171 + (%q::real list.
10.7172 + (All::(real list => bool) => bool)
10.7173 + (%r::real list.
10.7174 + (op -->::bool => bool => bool)
10.7175 + ((op &::bool => bool => bool)
10.7176 + ((poly_divides::real list => real list => bool) p r)
10.7177 + ((poly_divides::real list => real list => bool) p
10.7178 + ((poly_add::real list => real list => real list) q r)))
10.7179 + ((poly_divides::real list => real list => bool) p q))))"
10.7180 + by (import poly POLY_DIVIDES_SUB2)
10.7181 +
10.7182 +lemma POLY_DIVIDES_ZERO: "(All::(real list => bool) => bool)
10.7183 + (%p::real list.
10.7184 + (All::(real list => bool) => bool)
10.7185 + (%q::real list.
10.7186 + (op -->::bool => bool => bool)
10.7187 + ((op =::(real => real) => (real => real) => bool)
10.7188 + ((poly::real list => real => real) p)
10.7189 + ((poly::real list => real => real) ([]::real list)))
10.7190 + ((poly_divides::real list => real list => bool) q p)))"
10.7191 + by (import poly POLY_DIVIDES_ZERO)
10.7192 +
10.7193 +lemma POLY_ORDER_EXISTS: "(All::(real => bool) => bool)
10.7194 + (%a::real.
10.7195 + (All::(nat => bool) => bool)
10.7196 + (%d::nat.
10.7197 + (All::(real list => bool) => bool)
10.7198 + (%p::real list.
10.7199 + (op -->::bool => bool => bool)
10.7200 + ((op &::bool => bool => bool)
10.7201 + ((op =::nat => nat => bool) ((size::real list => nat) p)
10.7202 + d)
10.7203 + ((Not::bool => bool)
10.7204 + ((op =::(real => real) => (real => real) => bool)
10.7205 + ((poly::real list => real => real) p)
10.7206 + ((poly::real list => real => real) ([]::real list)))))
10.7207 + ((Ex::(nat => bool) => bool)
10.7208 + (%x::nat.
10.7209 + (op &::bool => bool => bool)
10.7210 + ((poly_divides::real list => real list => bool)
10.7211 + ((poly_exp::real list => nat => real list)
10.7212 + ((op #::real => real list => real list)
10.7213 + ((uminus::real => real) a)
10.7214 + ((op #::real => real list => real list)
10.7215 + (1::real) ([]::real list)))
10.7216 + x)
10.7217 + p)
10.7218 + ((Not::bool => bool)
10.7219 + ((poly_divides::real list => real list => bool)
10.7220 + ((poly_exp::real list => nat => real list)
10.7221 + ((op #::real => real list => real list)
10.7222 + ((uminus::real => real) a)
10.7223 + ((op #::real => real list => real list)
10.7224 + (1::real) ([]::real list)))
10.7225 + ((Suc::nat => nat) x))
10.7226 + p)))))))"
10.7227 + by (import poly POLY_ORDER_EXISTS)
10.7228 +
10.7229 +lemma POLY_ORDER: "(All::(real list => bool) => bool)
10.7230 + (%p::real list.
10.7231 + (All::(real => bool) => bool)
10.7232 + (%a::real.
10.7233 + (op -->::bool => bool => bool)
10.7234 + ((Not::bool => bool)
10.7235 + ((op =::(real => real) => (real => real) => bool)
10.7236 + ((poly::real list => real => real) p)
10.7237 + ((poly::real list => real => real) ([]::real list))))
10.7238 + ((Ex1::(nat => bool) => bool)
10.7239 + (%n::nat.
10.7240 + (op &::bool => bool => bool)
10.7241 + ((poly_divides::real list => real list => bool)
10.7242 + ((poly_exp::real list => nat => real list)
10.7243 + ((op #::real => real list => real list)
10.7244 + ((uminus::real => real) a)
10.7245 + ((op #::real => real list => real list) (1::real)
10.7246 + ([]::real list)))
10.7247 + n)
10.7248 + p)
10.7249 + ((Not::bool => bool)
10.7250 + ((poly_divides::real list => real list => bool)
10.7251 + ((poly_exp::real list => nat => real list)
10.7252 + ((op #::real => real list => real list)
10.7253 + ((uminus::real => real) a)
10.7254 + ((op #::real => real list => real list) (1::real)
10.7255 + ([]::real list)))
10.7256 + ((Suc::nat => nat) n))
10.7257 + p))))))"
10.7258 + by (import poly POLY_ORDER)
10.7259 +
10.7260 +constdefs
10.7261 + poly_order :: "real => real list => nat"
10.7262 + "poly_order ==
10.7263 +%a p. SOME n.
10.7264 + poly_divides (poly_exp [- a, 1] n) p &
10.7265 + ~ poly_divides (poly_exp [- a, 1] (Suc n)) p"
10.7266 +
10.7267 +lemma poly_order: "ALL a p.
10.7268 + poly_order a p =
10.7269 + (SOME n.
10.7270 + poly_divides (poly_exp [- a, 1] n) p &
10.7271 + ~ poly_divides (poly_exp [- a, 1] (Suc n)) p)"
10.7272 + by (import poly poly_order)
10.7273 +
10.7274 +lemma ORDER: "ALL p a n.
10.7275 + (poly_divides (poly_exp [- a, 1] n) p &
10.7276 + ~ poly_divides (poly_exp [- a, 1] (Suc n)) p) =
10.7277 + (n = poly_order a p & poly p ~= poly [])"
10.7278 + by (import poly ORDER)
10.7279 +
10.7280 +lemma ORDER_THM: "(All::(real list => bool) => bool)
10.7281 + (%p::real list.
10.7282 + (All::(real => bool) => bool)
10.7283 + (%a::real.
10.7284 + (op -->::bool => bool => bool)
10.7285 + ((Not::bool => bool)
10.7286 + ((op =::(real => real) => (real => real) => bool)
10.7287 + ((poly::real list => real => real) p)
10.7288 + ((poly::real list => real => real) ([]::real list))))
10.7289 + ((op &::bool => bool => bool)
10.7290 + ((poly_divides::real list => real list => bool)
10.7291 + ((poly_exp::real list => nat => real list)
10.7292 + ((op #::real => real list => real list)
10.7293 + ((uminus::real => real) a)
10.7294 + ((op #::real => real list => real list) (1::real)
10.7295 + ([]::real list)))
10.7296 + ((poly_order::real => real list => nat) a p))
10.7297 + p)
10.7298 + ((Not::bool => bool)
10.7299 + ((poly_divides::real list => real list => bool)
10.7300 + ((poly_exp::real list => nat => real list)
10.7301 + ((op #::real => real list => real list)
10.7302 + ((uminus::real => real) a)
10.7303 + ((op #::real => real list => real list) (1::real)
10.7304 + ([]::real list)))
10.7305 + ((Suc::nat => nat)
10.7306 + ((poly_order::real => real list => nat) a p)))
10.7307 + p)))))"
10.7308 + by (import poly ORDER_THM)
10.7309 +
10.7310 +lemma ORDER_UNIQUE: "(All::(real list => bool) => bool)
10.7311 + (%p::real list.
10.7312 + (All::(real => bool) => bool)
10.7313 + (%a::real.
10.7314 + (All::(nat => bool) => bool)
10.7315 + (%n::nat.
10.7316 + (op -->::bool => bool => bool)
10.7317 + ((op &::bool => bool => bool)
10.7318 + ((Not::bool => bool)
10.7319 + ((op =::(real => real) => (real => real) => bool)
10.7320 + ((poly::real list => real => real) p)
10.7321 + ((poly::real list => real => real) ([]::real list))))
10.7322 + ((op &::bool => bool => bool)
10.7323 + ((poly_divides::real list => real list => bool)
10.7324 + ((poly_exp::real list => nat => real list)
10.7325 + ((op #::real => real list => real list)
10.7326 + ((uminus::real => real) a)
10.7327 + ((op #::real => real list => real list) (1::real)
10.7328 + ([]::real list)))
10.7329 + n)
10.7330 + p)
10.7331 + ((Not::bool => bool)
10.7332 + ((poly_divides::real list => real list => bool)
10.7333 + ((poly_exp::real list => nat => real list)
10.7334 + ((op #::real => real list => real list)
10.7335 + ((uminus::real => real) a)
10.7336 + ((op #::real => real list => real list)
10.7337 + (1::real) ([]::real list)))
10.7338 + ((Suc::nat => nat) n))
10.7339 + p))))
10.7340 + ((op =::nat => nat => bool) n
10.7341 + ((poly_order::real => real list => nat) a p)))))"
10.7342 + by (import poly ORDER_UNIQUE)
10.7343 +
10.7344 +lemma ORDER_POLY: "(All::(real list => bool) => bool)
10.7345 + (%p::real list.
10.7346 + (All::(real list => bool) => bool)
10.7347 + (%q::real list.
10.7348 + (All::(real => bool) => bool)
10.7349 + (%a::real.
10.7350 + (op -->::bool => bool => bool)
10.7351 + ((op =::(real => real) => (real => real) => bool)
10.7352 + ((poly::real list => real => real) p)
10.7353 + ((poly::real list => real => real) q))
10.7354 + ((op =::nat => nat => bool)
10.7355 + ((poly_order::real => real list => nat) a p)
10.7356 + ((poly_order::real => real list => nat) a q)))))"
10.7357 + by (import poly ORDER_POLY)
10.7358 +
10.7359 +lemma ORDER_ROOT: "ALL p a. (poly p a = 0) = (poly p = poly [] | poly_order a p ~= 0)"
10.7360 + by (import poly ORDER_ROOT)
10.7361 +
10.7362 +lemma ORDER_DIVIDES: "ALL p a n.
10.7363 + poly_divides (poly_exp [- a, 1] n) p =
10.7364 + (poly p = poly [] | n <= poly_order a p)"
10.7365 + by (import poly ORDER_DIVIDES)
10.7366 +
10.7367 +lemma ORDER_DECOMP: "(All::(real list => bool) => bool)
10.7368 + (%p::real list.
10.7369 + (All::(real => bool) => bool)
10.7370 + (%a::real.
10.7371 + (op -->::bool => bool => bool)
10.7372 + ((Not::bool => bool)
10.7373 + ((op =::(real => real) => (real => real) => bool)
10.7374 + ((poly::real list => real => real) p)
10.7375 + ((poly::real list => real => real) ([]::real list))))
10.7376 + ((Ex::(real list => bool) => bool)
10.7377 + (%x::real list.
10.7378 + (op &::bool => bool => bool)
10.7379 + ((op =::(real => real) => (real => real) => bool)
10.7380 + ((poly::real list => real => real) p)
10.7381 + ((poly::real list => real => real)
10.7382 + ((poly_mul::real list => real list => real list)
10.7383 + ((poly_exp::real list => nat => real list)
10.7384 + ((op #::real => real list => real list)
10.7385 + ((uminus::real => real) a)
10.7386 + ((op #::real => real list => real list)
10.7387 + (1::real) ([]::real list)))
10.7388 + ((poly_order::real => real list => nat) a p))
10.7389 + x)))
10.7390 + ((Not::bool => bool)
10.7391 + ((poly_divides::real list => real list => bool)
10.7392 + ((op #::real => real list => real list)
10.7393 + ((uminus::real => real) a)
10.7394 + ((op #::real => real list => real list) (1::real)
10.7395 + ([]::real list)))
10.7396 + x))))))"
10.7397 + by (import poly ORDER_DECOMP)
10.7398 +
10.7399 +lemma ORDER_MUL: "(All::(real => bool) => bool)
10.7400 + (%a::real.
10.7401 + (All::(real list => bool) => bool)
10.7402 + (%p::real list.
10.7403 + (All::(real list => bool) => bool)
10.7404 + (%q::real list.
10.7405 + (op -->::bool => bool => bool)
10.7406 + ((Not::bool => bool)
10.7407 + ((op =::(real => real) => (real => real) => bool)
10.7408 + ((poly::real list => real => real)
10.7409 + ((poly_mul::real list => real list => real list) p q))
10.7410 + ((poly::real list => real => real) ([]::real list))))
10.7411 + ((op =::nat => nat => bool)
10.7412 + ((poly_order::real => real list => nat) a
10.7413 + ((poly_mul::real list => real list => real list) p q))
10.7414 + ((op +::nat => nat => nat)
10.7415 + ((poly_order::real => real list => nat) a p)
10.7416 + ((poly_order::real => real list => nat) a q))))))"
10.7417 + by (import poly ORDER_MUL)
10.7418 +
10.7419 +lemma ORDER_DIFF: "(All::(real list => bool) => bool)
10.7420 + (%p::real list.
10.7421 + (All::(real => bool) => bool)
10.7422 + (%a::real.
10.7423 + (op -->::bool => bool => bool)
10.7424 + ((op &::bool => bool => bool)
10.7425 + ((Not::bool => bool)
10.7426 + ((op =::(real => real) => (real => real) => bool)
10.7427 + ((poly::real list => real => real)
10.7428 + ((diff::real list => real list) p))
10.7429 + ((poly::real list => real => real) ([]::real list))))
10.7430 + ((Not::bool => bool)
10.7431 + ((op =::nat => nat => bool)
10.7432 + ((poly_order::real => real list => nat) a p) (0::nat))))
10.7433 + ((op =::nat => nat => bool)
10.7434 + ((poly_order::real => real list => nat) a p)
10.7435 + ((Suc::nat => nat)
10.7436 + ((poly_order::real => real list => nat) a
10.7437 + ((diff::real list => real list) p))))))"
10.7438 + by (import poly ORDER_DIFF)
10.7439 +
10.7440 +lemma POLY_SQUAREFREE_DECOMP_ORDER: "(All::(real list => bool) => bool)
10.7441 + (%p::real list.
10.7442 + (All::(real list => bool) => bool)
10.7443 + (%q::real list.
10.7444 + (All::(real list => bool) => bool)
10.7445 + (%d::real list.
10.7446 + (All::(real list => bool) => bool)
10.7447 + (%e::real list.
10.7448 + (All::(real list => bool) => bool)
10.7449 + (%r::real list.
10.7450 + (All::(real list => bool) => bool)
10.7451 + (%s::real list.
10.7452 + (op -->::bool => bool => bool)
10.7453 + ((op &::bool => bool => bool)
10.7454 + ((Not::bool => bool)
10.7455 + ((op =::(real => real)
10.7456 + => (real => real) => bool)
10.7457 + ((poly::real list => real => real)
10.7458 + ((diff::real list => real list) p))
10.7459 + ((poly::real list => real => real)
10.7460 + ([]::real list))))
10.7461 + ((op &::bool => bool => bool)
10.7462 + ((op =::(real => real)
10.7463 + => (real => real) => bool)
10.7464 + ((poly::real list => real => real) p)
10.7465 + ((poly::real list => real => real)
10.7466 + ((poly_mul::real list => real list => real list) q d)))
10.7467 + ((op &::bool => bool => bool)
10.7468 + ((op =::(real => real)
10.7469 + => (real => real) => bool)
10.7470 + ((poly::real list => real => real) ((diff::real list => real list) p))
10.7471 + ((poly::real list => real => real)
10.7472 + ((poly_mul::real list => real list => real list) e d)))
10.7473 + ((op =::(real => real)
10.7474 + => (real => real) => bool)
10.7475 + ((poly::real list => real => real) d)
10.7476 + ((poly::real list => real => real)
10.7477 + ((poly_add::real list => real list => real list)
10.7478 + ((poly_mul::real list => real list => real list) r p)
10.7479 + ((poly_mul::real list => real list => real list) s
10.7480 + ((diff::real list => real list) p))))))))
10.7481 + ((All::(real => bool) => bool)
10.7482 + (%a::real.
10.7483 + (op =::nat => nat => bool)
10.7484 +((poly_order::real => real list => nat) a q)
10.7485 +((If::bool => nat => nat => nat)
10.7486 + ((op =::nat => nat => bool) ((poly_order::real => real list => nat) a p)
10.7487 + (0::nat))
10.7488 + (0::nat) (1::nat))))))))))"
10.7489 + by (import poly POLY_SQUAREFREE_DECOMP_ORDER)
10.7490 +
10.7491 +constdefs
10.7492 + rsquarefree :: "real list => bool"
10.7493 + "rsquarefree ==
10.7494 +%p. poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1)"
10.7495 +
10.7496 +lemma rsquarefree: "ALL p.
10.7497 + rsquarefree p =
10.7498 + (poly p ~= poly [] & (ALL a. poly_order a p = 0 | poly_order a p = 1))"
10.7499 + by (import poly rsquarefree)
10.7500 +
10.7501 +lemma RSQUAREFREE_ROOTS: "ALL p. rsquarefree p = (ALL a. ~ (poly p a = 0 & poly (diff p) a = 0))"
10.7502 + by (import poly RSQUAREFREE_ROOTS)
10.7503 +
10.7504 +lemma RSQUAREFREE_DECOMP: "(All::(real list => bool) => bool)
10.7505 + (%p::real list.
10.7506 + (All::(real => bool) => bool)
10.7507 + (%a::real.
10.7508 + (op -->::bool => bool => bool)
10.7509 + ((op &::bool => bool => bool)
10.7510 + ((rsquarefree::real list => bool) p)
10.7511 + ((op =::real => real => bool)
10.7512 + ((poly::real list => real => real) p a) (0::real)))
10.7513 + ((Ex::(real list => bool) => bool)
10.7514 + (%q::real list.
10.7515 + (op &::bool => bool => bool)
10.7516 + ((op =::(real => real) => (real => real) => bool)
10.7517 + ((poly::real list => real => real) p)
10.7518 + ((poly::real list => real => real)
10.7519 + ((poly_mul::real list => real list => real list)
10.7520 + ((op #::real => real list => real list)
10.7521 + ((uminus::real => real) a)
10.7522 + ((op #::real => real list => real list) (1::real)
10.7523 + ([]::real list)))
10.7524 + q)))
10.7525 + ((Not::bool => bool)
10.7526 + ((op =::real => real => bool)
10.7527 + ((poly::real list => real => real) q a)
10.7528 + (0::real)))))))"
10.7529 + by (import poly RSQUAREFREE_DECOMP)
10.7530 +
10.7531 +lemma POLY_SQUAREFREE_DECOMP: "(All::(real list => bool) => bool)
10.7532 + (%p::real list.
10.7533 + (All::(real list => bool) => bool)
10.7534 + (%q::real list.
10.7535 + (All::(real list => bool) => bool)
10.7536 + (%d::real list.
10.7537 + (All::(real list => bool) => bool)
10.7538 + (%e::real list.
10.7539 + (All::(real list => bool) => bool)
10.7540 + (%r::real list.
10.7541 + (All::(real list => bool) => bool)
10.7542 + (%s::real list.
10.7543 + (op -->::bool => bool => bool)
10.7544 + ((op &::bool => bool => bool)
10.7545 + ((Not::bool => bool)
10.7546 + ((op =::(real => real)
10.7547 + => (real => real) => bool)
10.7548 + ((poly::real list => real => real)
10.7549 + ((diff::real list => real list) p))
10.7550 + ((poly::real list => real => real)
10.7551 + ([]::real list))))
10.7552 + ((op &::bool => bool => bool)
10.7553 + ((op =::(real => real)
10.7554 + => (real => real) => bool)
10.7555 + ((poly::real list => real => real) p)
10.7556 + ((poly::real list => real => real)
10.7557 + ((poly_mul::real list => real list => real list) q d)))
10.7558 + ((op &::bool => bool => bool)
10.7559 + ((op =::(real => real)
10.7560 + => (real => real) => bool)
10.7561 + ((poly::real list => real => real) ((diff::real list => real list) p))
10.7562 + ((poly::real list => real => real)
10.7563 + ((poly_mul::real list => real list => real list) e d)))
10.7564 + ((op =::(real => real)
10.7565 + => (real => real) => bool)
10.7566 + ((poly::real list => real => real) d)
10.7567 + ((poly::real list => real => real)
10.7568 + ((poly_add::real list => real list => real list)
10.7569 + ((poly_mul::real list => real list => real list) r p)
10.7570 + ((poly_mul::real list => real list => real list) s
10.7571 + ((diff::real list => real list) p))))))))
10.7572 + ((op &::bool => bool => bool)
10.7573 + ((rsquarefree::real list => bool) q)
10.7574 + ((All::(real => bool) => bool)
10.7575 + (%x::real.
10.7576 + (op =::bool => bool => bool)
10.7577 + ((op =::real => real => bool) ((poly::real list => real => real) q x)
10.7578 + (0::real))
10.7579 + ((op =::real => real => bool) ((poly::real list => real => real) p x)
10.7580 + (0::real)))))))))))"
10.7581 + by (import poly POLY_SQUAREFREE_DECOMP)
10.7582 +
10.7583 +consts
10.7584 + normalize :: "real list => real list"
10.7585 +
10.7586 +specification (normalize) normalize: "normalize [] = [] &
10.7587 +(ALL h t.
10.7588 + normalize (h # t) =
10.7589 + (if normalize t = [] then if h = 0 then [] else [h]
10.7590 + else h # normalize t))"
10.7591 + by (import poly normalize)
10.7592 +
10.7593 +lemma POLY_NORMALIZE: "ALL t. poly (normalize t) = poly t"
10.7594 + by (import poly POLY_NORMALIZE)
10.7595 +
10.7596 +constdefs
10.7597 + degree :: "real list => nat"
10.7598 + "degree == %p. PRE (length (normalize p))"
10.7599 +
10.7600 +lemma degree: "ALL p. degree p = PRE (length (normalize p))"
10.7601 + by (import poly degree)
10.7602 +
10.7603 +lemma DEGREE_ZERO: "(All::(real list => bool) => bool)
10.7604 + (%p::real list.
10.7605 + (op -->::bool => bool => bool)
10.7606 + ((op =::(real => real) => (real => real) => bool)
10.7607 + ((poly::real list => real => real) p)
10.7608 + ((poly::real list => real => real) ([]::real list)))
10.7609 + ((op =::nat => nat => bool) ((degree::real list => nat) p) (0::nat)))"
10.7610 + by (import poly DEGREE_ZERO)
10.7611 +
10.7612 +lemma POLY_ROOTS_FINITE_SET: "(All::(real list => bool) => bool)
10.7613 + (%p::real list.
10.7614 + (op -->::bool => bool => bool)
10.7615 + ((Not::bool => bool)
10.7616 + ((op =::(real => real) => (real => real) => bool)
10.7617 + ((poly::real list => real => real) p)
10.7618 + ((poly::real list => real => real) ([]::real list))))
10.7619 + ((FINITE::(real => bool) => bool)
10.7620 + ((GSPEC::(real => real * bool) => real => bool)
10.7621 + (%x::real.
10.7622 + (Pair::real => bool => real * bool) x
10.7623 + ((op =::real => real => bool)
10.7624 + ((poly::real list => real => real) p x) (0::real))))))"
10.7625 + by (import poly POLY_ROOTS_FINITE_SET)
10.7626 +
10.7627 +lemma POLY_MONO: "(All::(real => bool) => bool)
10.7628 + (%x::real.
10.7629 + (All::(real => bool) => bool)
10.7630 + (%k::real.
10.7631 + (All::(real list => bool) => bool)
10.7632 + (%xa::real list.
10.7633 + (op -->::bool => bool => bool)
10.7634 + ((op <=::real => real => bool) ((abs::real => real) x) k)
10.7635 + ((op <=::real => real => bool)
10.7636 + ((abs::real => real)
10.7637 + ((poly::real list => real => real) xa x))
10.7638 + ((poly::real list => real => real)
10.7639 + ((map::(real => real) => real list => real list)
10.7640 + (abs::real => real) xa)
10.7641 + k)))))"
10.7642 + by (import poly POLY_MONO)
10.7643 +
10.7644 +;end_setup
10.7645 +
10.7646 +end
10.7647 +
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/src/HOL/Import/HOL/HOL4Vec.thy Fri Apr 02 17:37:45 2004 +0200
11.3 @@ -0,0 +1,1212 @@
11.4 +theory HOL4Vec = HOL4Base:
11.5 +
11.6 +;setup_theory res_quan
11.7 +
11.8 +lemma RES_FORALL_CONJ_DIST: "ALL P Q R. RES_FORALL P (%i. Q i & R i) = (RES_FORALL P Q & RES_FORALL P R)"
11.9 + by (import res_quan RES_FORALL_CONJ_DIST)
11.10 +
11.11 +lemma RES_FORALL_DISJ_DIST: "ALL P Q R. RES_FORALL (%j. P j | Q j) R = (RES_FORALL P R & RES_FORALL Q R)"
11.12 + by (import res_quan RES_FORALL_DISJ_DIST)
11.13 +
11.14 +lemma RES_FORALL_UNIQUE: "ALL x xa. RES_FORALL (op = xa) x = x xa"
11.15 + by (import res_quan RES_FORALL_UNIQUE)
11.16 +
11.17 +lemma RES_FORALL_FORALL: "ALL (P::'a => bool) (R::'a => 'b => bool) x::'b.
11.18 + (ALL x::'b. RES_FORALL P (%i::'a. R i x)) =
11.19 + RES_FORALL P (%i::'a. All (R i))"
11.20 + by (import res_quan RES_FORALL_FORALL)
11.21 +
11.22 +lemma RES_FORALL_REORDER: "ALL P Q R.
11.23 + RES_FORALL P (%i. RES_FORALL Q (R i)) =
11.24 + RES_FORALL Q (%j. RES_FORALL P (%i. R i j))"
11.25 + by (import res_quan RES_FORALL_REORDER)
11.26 +
11.27 +lemma RES_FORALL_EMPTY: "All (RES_FORALL EMPTY)"
11.28 + by (import res_quan RES_FORALL_EMPTY)
11.29 +
11.30 +lemma RES_FORALL_UNIV: "ALL p. RES_FORALL pred_set.UNIV p = All p"
11.31 + by (import res_quan RES_FORALL_UNIV)
11.32 +
11.33 +lemma RES_FORALL_NULL: "ALL p m. RES_FORALL p (%x. m) = (p = EMPTY | m)"
11.34 + by (import res_quan RES_FORALL_NULL)
11.35 +
11.36 +lemma RES_EXISTS_DISJ_DIST: "(All::(('a => bool) => bool) => bool)
11.37 + (%P::'a => bool.
11.38 + (All::(('a => bool) => bool) => bool)
11.39 + (%Q::'a => bool.
11.40 + (All::(('a => bool) => bool) => bool)
11.41 + (%R::'a => bool.
11.42 + (op =::bool => bool => bool)
11.43 + ((RES_EXISTS::('a => bool) => ('a => bool) => bool) P
11.44 + (%i::'a. (op |::bool => bool => bool) (Q i) (R i)))
11.45 + ((op |::bool => bool => bool)
11.46 + ((RES_EXISTS::('a => bool) => ('a => bool) => bool) P Q)
11.47 + ((RES_EXISTS::('a => bool) => ('a => bool) => bool) P
11.48 + R)))))"
11.49 + by (import res_quan RES_EXISTS_DISJ_DIST)
11.50 +
11.51 +lemma RES_DISJ_EXISTS_DIST: "ALL P Q R. RES_EXISTS (%i. P i | Q i) R = (RES_EXISTS P R | RES_EXISTS Q R)"
11.52 + by (import res_quan RES_DISJ_EXISTS_DIST)
11.53 +
11.54 +lemma RES_EXISTS_EQUAL: "ALL x xa. RES_EXISTS (op = xa) x = x xa"
11.55 + by (import res_quan RES_EXISTS_EQUAL)
11.56 +
11.57 +lemma RES_EXISTS_REORDER: "ALL P Q R.
11.58 + RES_EXISTS P (%i. RES_EXISTS Q (R i)) =
11.59 + RES_EXISTS Q (%j. RES_EXISTS P (%i. R i j))"
11.60 + by (import res_quan RES_EXISTS_REORDER)
11.61 +
11.62 +lemma RES_EXISTS_EMPTY: "ALL p. ~ RES_EXISTS EMPTY p"
11.63 + by (import res_quan RES_EXISTS_EMPTY)
11.64 +
11.65 +lemma RES_EXISTS_UNIV: "ALL p. RES_EXISTS pred_set.UNIV p = Ex p"
11.66 + by (import res_quan RES_EXISTS_UNIV)
11.67 +
11.68 +lemma RES_EXISTS_NULL: "ALL p m. RES_EXISTS p (%x. m) = (p ~= EMPTY & m)"
11.69 + by (import res_quan RES_EXISTS_NULL)
11.70 +
11.71 +lemma RES_EXISTS_ALT: "ALL p m. RES_EXISTS p m = (IN (RES_SELECT p m) p & m (RES_SELECT p m))"
11.72 + by (import res_quan RES_EXISTS_ALT)
11.73 +
11.74 +lemma RES_EXISTS_UNIQUE_EMPTY: "ALL p. ~ RES_EXISTS_UNIQUE EMPTY p"
11.75 + by (import res_quan RES_EXISTS_UNIQUE_EMPTY)
11.76 +
11.77 +lemma RES_EXISTS_UNIQUE_UNIV: "ALL p. RES_EXISTS_UNIQUE pred_set.UNIV p = Ex1 p"
11.78 + by (import res_quan RES_EXISTS_UNIQUE_UNIV)
11.79 +
11.80 +lemma RES_EXISTS_UNIQUE_NULL: "ALL p m. RES_EXISTS_UNIQUE p (%x. m) = ((EX x. p = INSERT x EMPTY) & m)"
11.81 + by (import res_quan RES_EXISTS_UNIQUE_NULL)
11.82 +
11.83 +lemma RES_EXISTS_UNIQUE_ALT: "ALL p m.
11.84 + RES_EXISTS_UNIQUE p m =
11.85 + RES_EXISTS p (%x. m x & RES_FORALL p (%y. m y --> y = x))"
11.86 + by (import res_quan RES_EXISTS_UNIQUE_ALT)
11.87 +
11.88 +lemma RES_SELECT_EMPTY: "ALL p. RES_SELECT EMPTY p = (SOME x. False)"
11.89 + by (import res_quan RES_SELECT_EMPTY)
11.90 +
11.91 +lemma RES_SELECT_UNIV: "ALL p. RES_SELECT pred_set.UNIV p = Eps p"
11.92 + by (import res_quan RES_SELECT_UNIV)
11.93 +
11.94 +lemma RES_ABSTRACT: "ALL p m x. IN x p --> RES_ABSTRACT p m x = m x"
11.95 + by (import res_quan RES_ABSTRACT)
11.96 +
11.97 +lemma RES_ABSTRACT_EQUAL: "ALL p m1 m2.
11.98 + (ALL x. IN x p --> m1 x = m2 x) --> RES_ABSTRACT p m1 = RES_ABSTRACT p m2"
11.99 + by (import res_quan RES_ABSTRACT_EQUAL)
11.100 +
11.101 +lemma RES_ABSTRACT_IDEMPOT: "ALL p m. RES_ABSTRACT p (RES_ABSTRACT p m) = RES_ABSTRACT p m"
11.102 + by (import res_quan RES_ABSTRACT_IDEMPOT)
11.103 +
11.104 +lemma RES_ABSTRACT_EQUAL_EQ: "ALL p m1 m2.
11.105 + (RES_ABSTRACT p m1 = RES_ABSTRACT p m2) = (ALL x. IN x p --> m1 x = m2 x)"
11.106 + by (import res_quan RES_ABSTRACT_EQUAL_EQ)
11.107 +
11.108 +;end_setup
11.109 +
11.110 +;setup_theory word_base
11.111 +
11.112 +typedef (open) ('a) word = "(Collect::('a list recspace => bool) => 'a list recspace set)
11.113 + (%x::'a list recspace.
11.114 + (All::(('a list recspace => bool) => bool) => bool)
11.115 + (%word::'a list recspace => bool.
11.116 + (op -->::bool => bool => bool)
11.117 + ((All::('a list recspace => bool) => bool)
11.118 + (%a0::'a list recspace.
11.119 + (op -->::bool => bool => bool)
11.120 + ((Ex::('a list => bool) => bool)
11.121 + (%a::'a list.
11.122 + (op =::'a list recspace => 'a list recspace => bool)
11.123 + a0 ((CONSTR::nat
11.124 +=> 'a list => (nat => 'a list recspace) => 'a list recspace)
11.125 + (0::nat) a
11.126 + (%n::nat. BOTTOM::'a list recspace))))
11.127 + (word a0)))
11.128 + (word x)))"
11.129 + by (rule typedef_helper,import word_base word_TY_DEF)
11.130 +
11.131 +lemmas word_TY_DEF = typedef_hol2hol4 [OF type_definition_word]
11.132 +
11.133 +consts
11.134 + mk_word :: "'a list recspace => 'a word"
11.135 + dest_word :: "'a word => 'a list recspace"
11.136 +
11.137 +specification (dest_word mk_word) word_repfns: "(ALL a::'a word. mk_word (dest_word a) = a) &
11.138 +(ALL r::'a list recspace.
11.139 + (ALL word::'a list recspace => bool.
11.140 + (ALL a0::'a list recspace.
11.141 + (EX a::'a list. a0 = CONSTR (0::nat) a (%n::nat. BOTTOM)) -->
11.142 + word a0) -->
11.143 + word r) =
11.144 + (dest_word (mk_word r) = r))"
11.145 + by (import word_base word_repfns)
11.146 +
11.147 +consts
11.148 + word_base0 :: "'a list => 'a word"
11.149 +
11.150 +defs
11.151 + word_base0_primdef: "word_base0 == %a. mk_word (CONSTR 0 a (%n. BOTTOM))"
11.152 +
11.153 +lemma word_base0_def: "word_base0 = (%a. mk_word (CONSTR 0 a (%n. BOTTOM)))"
11.154 + by (import word_base word_base0_def)
11.155 +
11.156 +constdefs
11.157 + WORD :: "'a list => 'a word"
11.158 + "WORD == word_base0"
11.159 +
11.160 +lemma WORD: "WORD = word_base0"
11.161 + by (import word_base WORD)
11.162 +
11.163 +consts
11.164 + word_case :: "('a list => 'b) => 'a word => 'b"
11.165 +
11.166 +specification (word_case_primdef: word_case) word_case_def: "ALL f a. word_case f (WORD a) = f a"
11.167 + by (import word_base word_case_def)
11.168 +
11.169 +consts
11.170 + word_size :: "('a => nat) => 'a word => nat"
11.171 +
11.172 +specification (word_size_primdef: word_size) word_size_def: "ALL f a. word_size f (WORD a) = 1 + list_size f a"
11.173 + by (import word_base word_size_def)
11.174 +
11.175 +lemma word_11: "ALL a a'. (WORD a = WORD a') = (a = a')"
11.176 + by (import word_base word_11)
11.177 +
11.178 +lemma word_case_cong: "ALL M M' f.
11.179 + M = M' & (ALL a. M' = WORD a --> f a = f' a) -->
11.180 + word_case f M = word_case f' M'"
11.181 + by (import word_base word_case_cong)
11.182 +
11.183 +lemma word_nchotomy: "ALL x. EX l. x = WORD l"
11.184 + by (import word_base word_nchotomy)
11.185 +
11.186 +lemma word_Axiom: "ALL f. EX fn. ALL a. fn (WORD a) = f a"
11.187 + by (import word_base word_Axiom)
11.188 +
11.189 +lemma word_induction: "ALL P. (ALL a. P (WORD a)) --> All P"
11.190 + by (import word_base word_induction)
11.191 +
11.192 +lemma word_Ax: "ALL f. EX fn. ALL a. fn (WORD a) = f a"
11.193 + by (import word_base word_Ax)
11.194 +
11.195 +lemma WORD_11: "ALL x xa. (WORD x = WORD xa) = (x = xa)"
11.196 + by (import word_base WORD_11)
11.197 +
11.198 +lemma word_induct: "ALL x. (ALL l. x (WORD l)) --> All x"
11.199 + by (import word_base word_induct)
11.200 +
11.201 +lemma word_cases: "ALL x. EX l. x = WORD l"
11.202 + by (import word_base word_cases)
11.203 +
11.204 +consts
11.205 + WORDLEN :: "'a word => nat"
11.206 +
11.207 +specification (WORDLEN) WORDLEN_DEF: "ALL l. WORDLEN (WORD l) = length l"
11.208 + by (import word_base WORDLEN_DEF)
11.209 +
11.210 +consts
11.211 + PWORDLEN :: "nat => 'a word => bool"
11.212 +
11.213 +defs
11.214 + PWORDLEN_primdef: "PWORDLEN == %n. GSPEC (%w. (w, WORDLEN w = n))"
11.215 +
11.216 +lemma PWORDLEN_def: "ALL n. PWORDLEN n = GSPEC (%w. (w, WORDLEN w = n))"
11.217 + by (import word_base PWORDLEN_def)
11.218 +
11.219 +lemma IN_PWORDLEN: "ALL n l. IN (WORD l) (PWORDLEN n) = (length l = n)"
11.220 + by (import word_base IN_PWORDLEN)
11.221 +
11.222 +lemma PWORDLEN: "ALL n w. IN w (PWORDLEN n) = (WORDLEN w = n)"
11.223 + by (import word_base PWORDLEN)
11.224 +
11.225 +lemma PWORDLEN0: "ALL w. IN w (PWORDLEN 0) --> w = WORD []"
11.226 + by (import word_base PWORDLEN0)
11.227 +
11.228 +lemma PWORDLEN1: "ALL x. IN (WORD [x]) (PWORDLEN 1)"
11.229 + by (import word_base PWORDLEN1)
11.230 +
11.231 +consts
11.232 + WSEG :: "nat => nat => 'a word => 'a word"
11.233 +
11.234 +specification (WSEG) WSEG_DEF: "ALL m k l. WSEG m k (WORD l) = WORD (LASTN m (BUTLASTN k l))"
11.235 + by (import word_base WSEG_DEF)
11.236 +
11.237 +lemma WSEG0: "ALL k w. WSEG 0 k w = WORD []"
11.238 + by (import word_base WSEG0)
11.239 +
11.240 +lemma WSEG_PWORDLEN: "ALL n.
11.241 + RES_FORALL (PWORDLEN n)
11.242 + (%w. ALL m k. m + k <= n --> IN (WSEG m k w) (PWORDLEN m))"
11.243 + by (import word_base WSEG_PWORDLEN)
11.244 +
11.245 +lemma WSEG_WORDLEN: "ALL x.
11.246 + RES_FORALL (PWORDLEN x)
11.247 + (%xa. ALL xb xc. xb + xc <= x --> WORDLEN (WSEG xb xc xa) = xb)"
11.248 + by (import word_base WSEG_WORDLEN)
11.249 +
11.250 +lemma WSEG_WORD_LENGTH: "ALL n. RES_FORALL (PWORDLEN n) (%w. WSEG n 0 w = w)"
11.251 + by (import word_base WSEG_WORD_LENGTH)
11.252 +
11.253 +consts
11.254 + bit :: "nat => 'a word => 'a"
11.255 +
11.256 +specification (bit) BIT_DEF: "ALL k l. bit k (WORD l) = ELL k l"
11.257 + by (import word_base BIT_DEF)
11.258 +
11.259 +lemma BIT0: "ALL x. bit 0 (WORD [x]) = x"
11.260 + by (import word_base BIT0)
11.261 +
11.262 +lemma WSEG_BIT: "ALL n. RES_FORALL (PWORDLEN n) (%w. ALL k<n. WSEG 1 k w = WORD [bit k w])"
11.263 + by (import word_base WSEG_BIT)
11.264 +
11.265 +lemma BIT_WSEG: "ALL n.
11.266 + RES_FORALL (PWORDLEN n)
11.267 + (%w. ALL m k j.
11.268 + m + k <= n --> j < m --> bit j (WSEG m k w) = bit (j + k) w)"
11.269 + by (import word_base BIT_WSEG)
11.270 +
11.271 +consts
11.272 + MSB :: "'a word => 'a"
11.273 +
11.274 +specification (MSB) MSB_DEF: "ALL l. MSB (WORD l) = hd l"
11.275 + by (import word_base MSB_DEF)
11.276 +
11.277 +lemma MSB: "ALL n. RES_FORALL (PWORDLEN n) (%w. 0 < n --> MSB w = bit (PRE n) w)"
11.278 + by (import word_base MSB)
11.279 +
11.280 +consts
11.281 + LSB :: "'a word => 'a"
11.282 +
11.283 +specification (LSB) LSB_DEF: "ALL l. LSB (WORD l) = last l"
11.284 + by (import word_base LSB_DEF)
11.285 +
11.286 +lemma LSB: "ALL n. RES_FORALL (PWORDLEN n) (%w. 0 < n --> LSB w = bit 0 w)"
11.287 + by (import word_base LSB)
11.288 +
11.289 +consts
11.290 + WSPLIT :: "nat => 'a word => 'a word * 'a word"
11.291 +
11.292 +specification (WSPLIT) WSPLIT_DEF: "ALL m l. WSPLIT m (WORD l) = (WORD (BUTLASTN m l), WORD (LASTN m l))"
11.293 + by (import word_base WSPLIT_DEF)
11.294 +
11.295 +consts
11.296 + WCAT :: "'a word * 'a word => 'a word"
11.297 +
11.298 +specification (WCAT) WCAT_DEF: "ALL l1 l2. WCAT (WORD l1, WORD l2) = WORD (l1 @ l2)"
11.299 + by (import word_base WCAT_DEF)
11.300 +
11.301 +lemma WORD_PARTITION: "(ALL n::nat.
11.302 + RES_FORALL (PWORDLEN n)
11.303 + (%w::'a word. ALL m<=n. WCAT (WSPLIT m w) = w)) &
11.304 +(ALL (n::nat) m::nat.
11.305 + RES_FORALL (PWORDLEN n)
11.306 + (%w1::'a word.
11.307 + RES_FORALL (PWORDLEN m)
11.308 + (%w2::'a word. WSPLIT m (WCAT (w1, w2)) = (w1, w2))))"
11.309 + by (import word_base WORD_PARTITION)
11.310 +
11.311 +lemma WCAT_ASSOC: "ALL w1 w2 w3. WCAT (w1, WCAT (w2, w3)) = WCAT (WCAT (w1, w2), w3)"
11.312 + by (import word_base WCAT_ASSOC)
11.313 +
11.314 +lemma WCAT0: "ALL w. WCAT (WORD [], w) = w & WCAT (w, WORD []) = w"
11.315 + by (import word_base WCAT0)
11.316 +
11.317 +lemma WCAT_11: "ALL m n.
11.318 + RES_FORALL (PWORDLEN m)
11.319 + (%wm1. RES_FORALL (PWORDLEN m)
11.320 + (%wm2. RES_FORALL (PWORDLEN n)
11.321 + (%wn1. RES_FORALL (PWORDLEN n)
11.322 + (%wn2. (WCAT (wm1, wn1) = WCAT (wm2, wn2)) =
11.323 + (wm1 = wm2 & wn1 = wn2)))))"
11.324 + by (import word_base WCAT_11)
11.325 +
11.326 +lemma WSPLIT_PWORDLEN: "ALL n.
11.327 + RES_FORALL (PWORDLEN n)
11.328 + (%w. ALL m<=n.
11.329 + IN (fst (WSPLIT m w)) (PWORDLEN (n - m)) &
11.330 + IN (snd (WSPLIT m w)) (PWORDLEN m))"
11.331 + by (import word_base WSPLIT_PWORDLEN)
11.332 +
11.333 +lemma WCAT_PWORDLEN: "ALL n1.
11.334 + RES_FORALL (PWORDLEN n1)
11.335 + (%w1. ALL n2.
11.336 + RES_FORALL (PWORDLEN n2)
11.337 + (%w2. IN (WCAT (w1, w2)) (PWORDLEN (n1 + n2))))"
11.338 + by (import word_base WCAT_PWORDLEN)
11.339 +
11.340 +lemma WORDLEN_SUC_WCAT: "ALL n w.
11.341 + IN w (PWORDLEN (Suc n)) -->
11.342 + RES_EXISTS (PWORDLEN 1)
11.343 + (%b. RES_EXISTS (PWORDLEN n) (%w'. w = WCAT (b, w')))"
11.344 + by (import word_base WORDLEN_SUC_WCAT)
11.345 +
11.346 +lemma WSEG_WSEG: "ALL n.
11.347 + RES_FORALL (PWORDLEN n)
11.348 + (%w. ALL m1 k1 m2 k2.
11.349 + m1 + k1 <= n & m2 + k2 <= m1 -->
11.350 + WSEG m2 k2 (WSEG m1 k1 w) = WSEG m2 (k1 + k2) w)"
11.351 + by (import word_base WSEG_WSEG)
11.352 +
11.353 +lemma WSPLIT_WSEG: "ALL n.
11.354 + RES_FORALL (PWORDLEN n)
11.355 + (%w. ALL k<=n. WSPLIT k w = (WSEG (n - k) k w, WSEG k 0 w))"
11.356 + by (import word_base WSPLIT_WSEG)
11.357 +
11.358 +lemma WSPLIT_WSEG1: "ALL n.
11.359 + RES_FORALL (PWORDLEN n)
11.360 + (%w. ALL k<=n. fst (WSPLIT k w) = WSEG (n - k) k w)"
11.361 + by (import word_base WSPLIT_WSEG1)
11.362 +
11.363 +lemma WSPLIT_WSEG2: "ALL n. RES_FORALL (PWORDLEN n) (%w. ALL k<=n. snd (WSPLIT k w) = WSEG k 0 w)"
11.364 + by (import word_base WSPLIT_WSEG2)
11.365 +
11.366 +lemma WCAT_WSEG_WSEG: "ALL n.
11.367 + RES_FORALL (PWORDLEN n)
11.368 + (%w. ALL m1 m2 k.
11.369 + m1 + (m2 + k) <= n -->
11.370 + WCAT (WSEG m2 (m1 + k) w, WSEG m1 k w) = WSEG (m1 + m2) k w)"
11.371 + by (import word_base WCAT_WSEG_WSEG)
11.372 +
11.373 +lemma WORD_SPLIT: "ALL x xa.
11.374 + RES_FORALL (PWORDLEN (x + xa)) (%w. w = WCAT (WSEG x xa w, WSEG xa 0 w))"
11.375 + by (import word_base WORD_SPLIT)
11.376 +
11.377 +lemma WORDLEN_SUC_WCAT_WSEG_WSEG: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG 1 n w, WSEG n 0 w))"
11.378 + by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG)
11.379 +
11.380 +lemma WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT: "RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WSEG 1 0 w))"
11.381 + by (import word_base WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT)
11.382 +
11.383 +lemma WORDLEN_SUC_WCAT_BIT_WSEG: "ALL n.
11.384 + RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WORD [bit n w], WSEG n 0 w))"
11.385 + by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG)
11.386 +
11.387 +lemma WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT: "ALL n.
11.388 + RES_FORALL (PWORDLEN (Suc n)) (%w. w = WCAT (WSEG n 1 w, WORD [bit 0 w]))"
11.389 + by (import word_base WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT)
11.390 +
11.391 +lemma WSEG_WCAT1: "ALL n1 n2.
11.392 + RES_FORALL (PWORDLEN n1)
11.393 + (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n1 n2 (WCAT (w1, w2)) = w1))"
11.394 + by (import word_base WSEG_WCAT1)
11.395 +
11.396 +lemma WSEG_WCAT2: "ALL n1 n2.
11.397 + RES_FORALL (PWORDLEN n1)
11.398 + (%w1. RES_FORALL (PWORDLEN n2) (%w2. WSEG n2 0 (WCAT (w1, w2)) = w2))"
11.399 + by (import word_base WSEG_WCAT2)
11.400 +
11.401 +lemma WSEG_SUC: "ALL n.
11.402 + RES_FORALL (PWORDLEN n)
11.403 + (%w. ALL k m1.
11.404 + k + Suc m1 < n -->
11.405 + WSEG (Suc m1) k w = WCAT (WSEG 1 (k + m1) w, WSEG m1 k w))"
11.406 + by (import word_base WSEG_SUC)
11.407 +
11.408 +lemma WORD_CONS_WCAT: "ALL x l. WORD (x # l) = WCAT (WORD [x], WORD l)"
11.409 + by (import word_base WORD_CONS_WCAT)
11.410 +
11.411 +lemma WORD_SNOC_WCAT: "ALL l x. WORD (SNOC x l) = WCAT (WORD l, WORD [x])"
11.412 + by (import word_base WORD_SNOC_WCAT)
11.413 +
11.414 +lemma BIT_WCAT_FST: "ALL n1 n2.
11.415 + RES_FORALL (PWORDLEN n1)
11.416 + (%w1. RES_FORALL (PWORDLEN n2)
11.417 + (%w2. ALL k.
11.418 + n2 <= k & k < n1 + n2 -->
11.419 + bit k (WCAT (w1, w2)) = bit (k - n2) w1))"
11.420 + by (import word_base BIT_WCAT_FST)
11.421 +
11.422 +lemma BIT_WCAT_SND: "ALL n1 n2.
11.423 + RES_FORALL (PWORDLEN n1)
11.424 + (%w1. RES_FORALL (PWORDLEN n2)
11.425 + (%w2. ALL k<n2. bit k (WCAT (w1, w2)) = bit k w2))"
11.426 + by (import word_base BIT_WCAT_SND)
11.427 +
11.428 +lemma BIT_WCAT1: "ALL n. RES_FORALL (PWORDLEN n) (%w. ALL b. bit n (WCAT (WORD [b], w)) = b)"
11.429 + by (import word_base BIT_WCAT1)
11.430 +
11.431 +lemma WSEG_WCAT_WSEG1: "ALL n1 n2.
11.432 + RES_FORALL (PWORDLEN n1)
11.433 + (%w1. RES_FORALL (PWORDLEN n2)
11.434 + (%w2. ALL m k.
11.435 + m <= n1 & n2 <= k -->
11.436 + WSEG m k (WCAT (w1, w2)) = WSEG m (k - n2) w1))"
11.437 + by (import word_base WSEG_WCAT_WSEG1)
11.438 +
11.439 +lemma WSEG_WCAT_WSEG2: "ALL n1 n2.
11.440 + RES_FORALL (PWORDLEN n1)
11.441 + (%w1. RES_FORALL (PWORDLEN n2)
11.442 + (%w2. ALL m k.
11.443 + m + k <= n2 --> WSEG m k (WCAT (w1, w2)) = WSEG m k w2))"
11.444 + by (import word_base WSEG_WCAT_WSEG2)
11.445 +
11.446 +lemma WSEG_WCAT_WSEG: "ALL n1 n2.
11.447 + RES_FORALL (PWORDLEN n1)
11.448 + (%w1. RES_FORALL (PWORDLEN n2)
11.449 + (%w2. ALL m k.
11.450 + m + k <= n1 + n2 & k < n2 & n2 <= m + k -->
11.451 + WSEG m k (WCAT (w1, w2)) =
11.452 + WCAT (WSEG (m + k - n2) 0 w1, WSEG (n2 - k) k w2)))"
11.453 + by (import word_base WSEG_WCAT_WSEG)
11.454 +
11.455 +lemma BIT_EQ_IMP_WORD_EQ: "ALL n.
11.456 + RES_FORALL (PWORDLEN n)
11.457 + (%w1. RES_FORALL (PWORDLEN n)
11.458 + (%w2. (ALL k<n. bit k w1 = bit k w2) --> w1 = w2))"
11.459 + by (import word_base BIT_EQ_IMP_WORD_EQ)
11.460 +
11.461 +;end_setup
11.462 +
11.463 +;setup_theory word_num
11.464 +
11.465 +constdefs
11.466 + LVAL :: "('a => nat) => nat => 'a list => nat"
11.467 + "LVAL == %f b. foldl (%e x. b * e + f x) 0"
11.468 +
11.469 +lemma LVAL_DEF: "ALL f b l. LVAL f b l = foldl (%e x. b * e + f x) 0 l"
11.470 + by (import word_num LVAL_DEF)
11.471 +
11.472 +consts
11.473 + NVAL :: "('a => nat) => nat => 'a word => nat"
11.474 +
11.475 +specification (NVAL) NVAL_DEF: "ALL f b l. NVAL f b (WORD l) = LVAL f b l"
11.476 + by (import word_num NVAL_DEF)
11.477 +
11.478 +lemma LVAL: "(ALL (x::'a => nat) xa::nat. LVAL x xa [] = (0::nat)) &
11.479 +(ALL (x::'a list) (xa::'a => nat) (xb::nat) xc::'a.
11.480 + LVAL xa xb (xc # x) = xa xc * xb ^ length x + LVAL xa xb x)"
11.481 + by (import word_num LVAL)
11.482 +
11.483 +lemma LVAL_SNOC: "ALL l h f b. LVAL f b (SNOC h l) = LVAL f b l * b + f h"
11.484 + by (import word_num LVAL_SNOC)
11.485 +
11.486 +lemma LVAL_MAX: "ALL l f b. (ALL x. f x < b) --> LVAL f b l < b ^ length l"
11.487 + by (import word_num LVAL_MAX)
11.488 +
11.489 +lemma NVAL_MAX: "ALL f b.
11.490 + (ALL x. f x < b) -->
11.491 + (ALL n. RES_FORALL (PWORDLEN n) (%w. NVAL f b w < b ^ n))"
11.492 + by (import word_num NVAL_MAX)
11.493 +
11.494 +lemma NVAL0: "ALL x xa. NVAL x xa (WORD []) = 0"
11.495 + by (import word_num NVAL0)
11.496 +
11.497 +lemma NVAL1: "ALL x xa xb. NVAL x xa (WORD [xb]) = x xb"
11.498 + by (import word_num NVAL1)
11.499 +
11.500 +lemma NVAL_WORDLEN_0: "RES_FORALL (PWORDLEN 0) (%w. ALL fv r. NVAL fv r w = 0)"
11.501 + by (import word_num NVAL_WORDLEN_0)
11.502 +
11.503 +lemma NVAL_WCAT1: "ALL w f b x. NVAL f b (WCAT (w, WORD [x])) = NVAL f b w * b + f x"
11.504 + by (import word_num NVAL_WCAT1)
11.505 +
11.506 +lemma NVAL_WCAT2: "ALL n.
11.507 + RES_FORALL (PWORDLEN n)
11.508 + (%w. ALL f b x.
11.509 + NVAL f b (WCAT (WORD [x], w)) = f x * b ^ n + NVAL f b w)"
11.510 + by (import word_num NVAL_WCAT2)
11.511 +
11.512 +lemma NVAL_WCAT: "ALL n m.
11.513 + RES_FORALL (PWORDLEN n)
11.514 + (%w1. RES_FORALL (PWORDLEN m)
11.515 + (%w2. ALL f b.
11.516 + NVAL f b (WCAT (w1, w2)) =
11.517 + NVAL f b w1 * b ^ m + NVAL f b w2))"
11.518 + by (import word_num NVAL_WCAT)
11.519 +
11.520 +consts
11.521 + NLIST :: "nat => (nat => 'a) => nat => nat => 'a list"
11.522 +
11.523 +specification (NLIST) NLIST_DEF: "(ALL (frep::nat => 'a) (b::nat) m::nat. NLIST (0::nat) frep b m = []) &
11.524 +(ALL (n::nat) (frep::nat => 'a) (b::nat) m::nat.
11.525 + NLIST (Suc n) frep b m =
11.526 + SNOC (frep (m mod b)) (NLIST n frep b (m div b)))"
11.527 + by (import word_num NLIST_DEF)
11.528 +
11.529 +constdefs
11.530 + NWORD :: "nat => (nat => 'a) => nat => nat => 'a word"
11.531 + "NWORD == %n frep b m. WORD (NLIST n frep b m)"
11.532 +
11.533 +lemma NWORD_DEF: "ALL n frep b m. NWORD n frep b m = WORD (NLIST n frep b m)"
11.534 + by (import word_num NWORD_DEF)
11.535 +
11.536 +lemma NWORD_LENGTH: "ALL x xa xb xc. WORDLEN (NWORD x xa xb xc) = x"
11.537 + by (import word_num NWORD_LENGTH)
11.538 +
11.539 +lemma NWORD_PWORDLEN: "ALL x xa xb xc. IN (NWORD x xa xb xc) (PWORDLEN x)"
11.540 + by (import word_num NWORD_PWORDLEN)
11.541 +
11.542 +;end_setup
11.543 +
11.544 +;setup_theory word_bitop
11.545 +
11.546 +consts
11.547 + PBITOP :: "('a word => 'b word) => bool"
11.548 +
11.549 +defs
11.550 + PBITOP_primdef: "PBITOP ==
11.551 +GSPEC
11.552 + (%oper.
11.553 + (oper,
11.554 + ALL n.
11.555 + RES_FORALL (PWORDLEN n)
11.556 + (%w. IN (oper w) (PWORDLEN n) &
11.557 + (ALL m k.
11.558 + m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
11.559 +
11.560 +lemma PBITOP_def: "PBITOP =
11.561 +GSPEC
11.562 + (%oper.
11.563 + (oper,
11.564 + ALL n.
11.565 + RES_FORALL (PWORDLEN n)
11.566 + (%w. IN (oper w) (PWORDLEN n) &
11.567 + (ALL m k.
11.568 + m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))))"
11.569 + by (import word_bitop PBITOP_def)
11.570 +
11.571 +lemma IN_PBITOP: "ALL oper.
11.572 + IN oper PBITOP =
11.573 + (ALL n.
11.574 + RES_FORALL (PWORDLEN n)
11.575 + (%w. IN (oper w) (PWORDLEN n) &
11.576 + (ALL m k.
11.577 + m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w))))"
11.578 + by (import word_bitop IN_PBITOP)
11.579 +
11.580 +lemma PBITOP_PWORDLEN: "RES_FORALL PBITOP
11.581 + (%oper. ALL n. RES_FORALL (PWORDLEN n) (%w. IN (oper w) (PWORDLEN n)))"
11.582 + by (import word_bitop PBITOP_PWORDLEN)
11.583 +
11.584 +lemma PBITOP_WSEG: "RES_FORALL PBITOP
11.585 + (%oper.
11.586 + ALL n.
11.587 + RES_FORALL (PWORDLEN n)
11.588 + (%w. ALL m k.
11.589 + m + k <= n --> oper (WSEG m k w) = WSEG m k (oper w)))"
11.590 + by (import word_bitop PBITOP_WSEG)
11.591 +
11.592 +lemma PBITOP_BIT: "RES_FORALL PBITOP
11.593 + (%oper.
11.594 + ALL n.
11.595 + RES_FORALL (PWORDLEN n)
11.596 + (%w. ALL k<n. oper (WORD [bit k w]) = WORD [bit k (oper w)]))"
11.597 + by (import word_bitop PBITOP_BIT)
11.598 +
11.599 +consts
11.600 + PBITBOP :: "('a word => 'b word => 'c word) => bool"
11.601 +
11.602 +defs
11.603 + PBITBOP_primdef: "PBITBOP ==
11.604 +GSPEC
11.605 + (%oper.
11.606 + (oper,
11.607 + ALL n.
11.608 + RES_FORALL (PWORDLEN n)
11.609 + (%w1. RES_FORALL (PWORDLEN n)
11.610 + (%w2. IN (oper w1 w2) (PWORDLEN n) &
11.611 + (ALL m k.
11.612 + m + k <= n -->
11.613 + oper (WSEG m k w1) (WSEG m k w2) =
11.614 + WSEG m k (oper w1 w2))))))"
11.615 +
11.616 +lemma PBITBOP_def: "PBITBOP =
11.617 +GSPEC
11.618 + (%oper.
11.619 + (oper,
11.620 + ALL n.
11.621 + RES_FORALL (PWORDLEN n)
11.622 + (%w1. RES_FORALL (PWORDLEN n)
11.623 + (%w2. IN (oper w1 w2) (PWORDLEN n) &
11.624 + (ALL m k.
11.625 + m + k <= n -->
11.626 + oper (WSEG m k w1) (WSEG m k w2) =
11.627 + WSEG m k (oper w1 w2))))))"
11.628 + by (import word_bitop PBITBOP_def)
11.629 +
11.630 +lemma IN_PBITBOP: "ALL oper.
11.631 + IN oper PBITBOP =
11.632 + (ALL n.
11.633 + RES_FORALL (PWORDLEN n)
11.634 + (%w1. RES_FORALL (PWORDLEN n)
11.635 + (%w2. IN (oper w1 w2) (PWORDLEN n) &
11.636 + (ALL m k.
11.637 + m + k <= n -->
11.638 + oper (WSEG m k w1) (WSEG m k w2) =
11.639 + WSEG m k (oper w1 w2)))))"
11.640 + by (import word_bitop IN_PBITBOP)
11.641 +
11.642 +lemma PBITBOP_PWORDLEN: "RES_FORALL PBITBOP
11.643 + (%oper.
11.644 + ALL n.
11.645 + RES_FORALL (PWORDLEN n)
11.646 + (%w1. RES_FORALL (PWORDLEN n) (%w2. IN (oper w1 w2) (PWORDLEN n))))"
11.647 + by (import word_bitop PBITBOP_PWORDLEN)
11.648 +
11.649 +lemma PBITBOP_WSEG: "RES_FORALL PBITBOP
11.650 + (%oper.
11.651 + ALL n.
11.652 + RES_FORALL (PWORDLEN n)
11.653 + (%w1. RES_FORALL (PWORDLEN n)
11.654 + (%w2. ALL m k.
11.655 + m + k <= n -->
11.656 + oper (WSEG m k w1) (WSEG m k w2) =
11.657 + WSEG m k (oper w1 w2))))"
11.658 + by (import word_bitop PBITBOP_WSEG)
11.659 +
11.660 +lemma PBITBOP_EXISTS: "ALL f. EX x. ALL l1 l2. x (WORD l1) (WORD l2) = WORD (map2 f l1 l2)"
11.661 + by (import word_bitop PBITBOP_EXISTS)
11.662 +
11.663 +consts
11.664 + WMAP :: "('a => 'b) => 'a word => 'b word"
11.665 +
11.666 +specification (WMAP) WMAP_DEF: "ALL f l. WMAP f (WORD l) = WORD (map f l)"
11.667 + by (import word_bitop WMAP_DEF)
11.668 +
11.669 +lemma WMAP_PWORDLEN: "RES_FORALL (PWORDLEN n) (%w. ALL f. IN (WMAP f w) (PWORDLEN n))"
11.670 + by (import word_bitop WMAP_PWORDLEN)
11.671 +
11.672 +lemma WMAP_0: "ALL x. WMAP x (WORD []) = WORD []"
11.673 + by (import word_bitop WMAP_0)
11.674 +
11.675 +lemma WMAP_BIT: "ALL n.
11.676 + RES_FORALL (PWORDLEN n)
11.677 + (%w. ALL k<n. ALL f. bit k (WMAP f w) = f (bit k w))"
11.678 + by (import word_bitop WMAP_BIT)
11.679 +
11.680 +lemma WMAP_WSEG: "ALL n.
11.681 + RES_FORALL (PWORDLEN n)
11.682 + (%w. ALL m k.
11.683 + m + k <= n -->
11.684 + (ALL f. WMAP f (WSEG m k w) = WSEG m k (WMAP f w)))"
11.685 + by (import word_bitop WMAP_WSEG)
11.686 +
11.687 +lemma WMAP_PBITOP: "ALL f. IN (WMAP f) PBITOP"
11.688 + by (import word_bitop WMAP_PBITOP)
11.689 +
11.690 +lemma WMAP_WCAT: "ALL w1 w2 f. WMAP f (WCAT (w1, w2)) = WCAT (WMAP f w1, WMAP f w2)"
11.691 + by (import word_bitop WMAP_WCAT)
11.692 +
11.693 +lemma WMAP_o: "ALL w f g. WMAP g (WMAP f w) = WMAP (g o f) w"
11.694 + by (import word_bitop WMAP_o)
11.695 +
11.696 +consts
11.697 + FORALLBITS :: "('a => bool) => 'a word => bool"
11.698 +
11.699 +specification (FORALLBITS) FORALLBITS_DEF: "ALL P l. FORALLBITS P (WORD l) = list_all P l"
11.700 + by (import word_bitop FORALLBITS_DEF)
11.701 +
11.702 +lemma FORALLBITS: "ALL n.
11.703 + RES_FORALL (PWORDLEN n)
11.704 + (%w. ALL P. FORALLBITS P w = (ALL k<n. P (bit k w)))"
11.705 + by (import word_bitop FORALLBITS)
11.706 +
11.707 +lemma FORALLBITS_WSEG: "ALL n.
11.708 + RES_FORALL (PWORDLEN n)
11.709 + (%w. ALL P.
11.710 + FORALLBITS P w -->
11.711 + (ALL m k. m + k <= n --> FORALLBITS P (WSEG m k w)))"
11.712 + by (import word_bitop FORALLBITS_WSEG)
11.713 +
11.714 +lemma FORALLBITS_WCAT: "ALL w1 w2 P.
11.715 + FORALLBITS P (WCAT (w1, w2)) = (FORALLBITS P w1 & FORALLBITS P w2)"
11.716 + by (import word_bitop FORALLBITS_WCAT)
11.717 +
11.718 +consts
11.719 + EXISTSABIT :: "('a => bool) => 'a word => bool"
11.720 +
11.721 +specification (EXISTSABIT) EXISTSABIT_DEF: "ALL P l. EXISTSABIT P (WORD l) = list_exists P l"
11.722 + by (import word_bitop EXISTSABIT_DEF)
11.723 +
11.724 +lemma NOT_EXISTSABIT: "ALL P w. (~ EXISTSABIT P w) = FORALLBITS (Not o P) w"
11.725 + by (import word_bitop NOT_EXISTSABIT)
11.726 +
11.727 +lemma NOT_FORALLBITS: "ALL P w. (~ FORALLBITS P w) = EXISTSABIT (Not o P) w"
11.728 + by (import word_bitop NOT_FORALLBITS)
11.729 +
11.730 +lemma EXISTSABIT: "ALL n.
11.731 + RES_FORALL (PWORDLEN n)
11.732 + (%w. ALL P. EXISTSABIT P w = (EX k<n. P (bit k w)))"
11.733 + by (import word_bitop EXISTSABIT)
11.734 +
11.735 +lemma EXISTSABIT_WSEG: "ALL n.
11.736 + RES_FORALL (PWORDLEN n)
11.737 + (%w. ALL m k.
11.738 + m + k <= n -->
11.739 + (ALL P. EXISTSABIT P (WSEG m k w) --> EXISTSABIT P w))"
11.740 + by (import word_bitop EXISTSABIT_WSEG)
11.741 +
11.742 +lemma EXISTSABIT_WCAT: "ALL w1 w2 P.
11.743 + EXISTSABIT P (WCAT (w1, w2)) = (EXISTSABIT P w1 | EXISTSABIT P w2)"
11.744 + by (import word_bitop EXISTSABIT_WCAT)
11.745 +
11.746 +constdefs
11.747 + SHR :: "bool => 'a => 'a word => 'a word * 'a"
11.748 + "SHR ==
11.749 +%f b w.
11.750 + (WCAT
11.751 + (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
11.752 + WSEG (PRE (WORDLEN w)) 1 w),
11.753 + bit 0 w)"
11.754 +
11.755 +lemma SHR_DEF: "ALL f b w.
11.756 + SHR f b w =
11.757 + (WCAT
11.758 + (if f then WSEG 1 (PRE (WORDLEN w)) w else WORD [b],
11.759 + WSEG (PRE (WORDLEN w)) 1 w),
11.760 + bit 0 w)"
11.761 + by (import word_bitop SHR_DEF)
11.762 +
11.763 +constdefs
11.764 + SHL :: "bool => 'a word => 'a => 'a * 'a word"
11.765 + "SHL ==
11.766 +%f w b.
11.767 + (bit (PRE (WORDLEN w)) w,
11.768 + WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
11.769 +
11.770 +lemma SHL_DEF: "ALL f w b.
11.771 + SHL f w b =
11.772 + (bit (PRE (WORDLEN w)) w,
11.773 + WCAT (WSEG (PRE (WORDLEN w)) 0 w, if f then WSEG 1 0 w else WORD [b]))"
11.774 + by (import word_bitop SHL_DEF)
11.775 +
11.776 +lemma SHR_WSEG: "ALL n.
11.777 + RES_FORALL (PWORDLEN n)
11.778 + (%w. ALL m k.
11.779 + m + k <= n -->
11.780 + 0 < m -->
11.781 + (ALL f b.
11.782 + SHR f b (WSEG m k w) =
11.783 + (if f
11.784 + then WCAT (WSEG 1 (k + (m - 1)) w, WSEG (m - 1) (k + 1) w)
11.785 + else WCAT (WORD [b], WSEG (m - 1) (k + 1) w),
11.786 + bit k w)))"
11.787 + by (import word_bitop SHR_WSEG)
11.788 +
11.789 +lemma SHR_WSEG_1F: "ALL n.
11.790 + RES_FORALL (PWORDLEN n)
11.791 + (%w. ALL b m k.
11.792 + m + k <= n -->
11.793 + 0 < m -->
11.794 + SHR False b (WSEG m k w) =
11.795 + (WCAT (WORD [b], WSEG (m - 1) (k + 1) w), bit k w))"
11.796 + by (import word_bitop SHR_WSEG_1F)
11.797 +
11.798 +lemma SHR_WSEG_NF: "ALL n.
11.799 + RES_FORALL (PWORDLEN n)
11.800 + (%w. ALL m k.
11.801 + m + k < n -->
11.802 + 0 < m -->
11.803 + SHR False (bit (m + k) w) (WSEG m k w) =
11.804 + (WSEG m (k + 1) w, bit k w))"
11.805 + by (import word_bitop SHR_WSEG_NF)
11.806 +
11.807 +lemma SHL_WSEG: "ALL n.
11.808 + RES_FORALL (PWORDLEN n)
11.809 + (%w. ALL m k.
11.810 + m + k <= n -->
11.811 + 0 < m -->
11.812 + (ALL f b.
11.813 + SHL f (WSEG m k w) b =
11.814 + (bit (k + (m - 1)) w,
11.815 + if f then WCAT (WSEG (m - 1) k w, WSEG 1 k w)
11.816 + else WCAT (WSEG (m - 1) k w, WORD [b]))))"
11.817 + by (import word_bitop SHL_WSEG)
11.818 +
11.819 +lemma SHL_WSEG_1F: "ALL n.
11.820 + RES_FORALL (PWORDLEN n)
11.821 + (%w. ALL b m k.
11.822 + m + k <= n -->
11.823 + 0 < m -->
11.824 + SHL False (WSEG m k w) b =
11.825 + (bit (k + (m - 1)) w, WCAT (WSEG (m - 1) k w, WORD [b])))"
11.826 + by (import word_bitop SHL_WSEG_1F)
11.827 +
11.828 +lemma SHL_WSEG_NF: "ALL n.
11.829 + RES_FORALL (PWORDLEN n)
11.830 + (%w. ALL m k.
11.831 + m + k <= n -->
11.832 + 0 < m -->
11.833 + 0 < k -->
11.834 + SHL False (WSEG m k w) (bit (k - 1) w) =
11.835 + (bit (k + (m - 1)) w, WSEG m (k - 1) w))"
11.836 + by (import word_bitop SHL_WSEG_NF)
11.837 +
11.838 +lemma WSEG_SHL: "ALL n.
11.839 + RES_FORALL (PWORDLEN (Suc n))
11.840 + (%w. ALL m k.
11.841 + 0 < k & m + k <= Suc n -->
11.842 + (ALL b. WSEG m k (snd (SHL f w b)) = WSEG m (k - 1) w))"
11.843 + by (import word_bitop WSEG_SHL)
11.844 +
11.845 +lemma WSEG_SHL_0: "ALL n.
11.846 + RES_FORALL (PWORDLEN (Suc n))
11.847 + (%w. ALL m b.
11.848 + 0 < m & m <= Suc n -->
11.849 + WSEG m 0 (snd (SHL f w b)) =
11.850 + WCAT (WSEG (m - 1) 0 w, if f then WSEG 1 0 w else WORD [b]))"
11.851 + by (import word_bitop WSEG_SHL_0)
11.852 +
11.853 +;end_setup
11.854 +
11.855 +;setup_theory bword_num
11.856 +
11.857 +constdefs
11.858 + BV :: "bool => nat"
11.859 + "BV == %b. if b then Suc 0 else 0"
11.860 +
11.861 +lemma BV_DEF: "ALL b. BV b = (if b then Suc 0 else 0)"
11.862 + by (import bword_num BV_DEF)
11.863 +
11.864 +consts
11.865 + BNVAL :: "bool word => nat"
11.866 +
11.867 +specification (BNVAL) BNVAL_DEF: "ALL l. BNVAL (WORD l) = LVAL BV 2 l"
11.868 + by (import bword_num BNVAL_DEF)
11.869 +
11.870 +lemma BV_LESS_2: "ALL x. BV x < 2"
11.871 + by (import bword_num BV_LESS_2)
11.872 +
11.873 +lemma BNVAL_NVAL: "ALL w. BNVAL w = NVAL BV 2 w"
11.874 + by (import bword_num BNVAL_NVAL)
11.875 +
11.876 +lemma BNVAL0: "BNVAL (WORD []) = 0"
11.877 + by (import bword_num BNVAL0)
11.878 +
11.879 +lemma BNVAL_11: "ALL w1 w2. WORDLEN w1 = WORDLEN w2 --> BNVAL w1 = BNVAL w2 --> w1 = w2"
11.880 + by (import bword_num BNVAL_11)
11.881 +
11.882 +lemma BNVAL_ONTO: "ALL w. Ex (op = (BNVAL w))"
11.883 + by (import bword_num BNVAL_ONTO)
11.884 +
11.885 +lemma BNVAL_MAX: "ALL n. RES_FORALL (PWORDLEN n) (%w. BNVAL w < 2 ^ n)"
11.886 + by (import bword_num BNVAL_MAX)
11.887 +
11.888 +lemma BNVAL_WCAT1: "ALL n.
11.889 + RES_FORALL (PWORDLEN n)
11.890 + (%w. ALL x. BNVAL (WCAT (w, WORD [x])) = BNVAL w * 2 + BV x)"
11.891 + by (import bword_num BNVAL_WCAT1)
11.892 +
11.893 +lemma BNVAL_WCAT2: "ALL n.
11.894 + RES_FORALL (PWORDLEN n)
11.895 + (%w. ALL x. BNVAL (WCAT (WORD [x], w)) = BV x * 2 ^ n + BNVAL w)"
11.896 + by (import bword_num BNVAL_WCAT2)
11.897 +
11.898 +lemma BNVAL_WCAT: "ALL n m.
11.899 + RES_FORALL (PWORDLEN n)
11.900 + (%w1. RES_FORALL (PWORDLEN m)
11.901 + (%w2. BNVAL (WCAT (w1, w2)) = BNVAL w1 * 2 ^ m + BNVAL w2))"
11.902 + by (import bword_num BNVAL_WCAT)
11.903 +
11.904 +constdefs
11.905 + VB :: "nat => bool"
11.906 + "VB == %n. n mod 2 ~= 0"
11.907 +
11.908 +lemma VB_DEF: "ALL n. VB n = (n mod 2 ~= 0)"
11.909 + by (import bword_num VB_DEF)
11.910 +
11.911 +constdefs
11.912 + NBWORD :: "nat => nat => bool word"
11.913 + "NBWORD == %n m. WORD (NLIST n VB 2 m)"
11.914 +
11.915 +lemma NBWORD_DEF: "ALL n m. NBWORD n m = WORD (NLIST n VB 2 m)"
11.916 + by (import bword_num NBWORD_DEF)
11.917 +
11.918 +lemma NBWORD0: "ALL x. NBWORD 0 x = WORD []"
11.919 + by (import bword_num NBWORD0)
11.920 +
11.921 +lemma WORDLEN_NBWORD: "ALL x xa. WORDLEN (NBWORD x xa) = x"
11.922 + by (import bword_num WORDLEN_NBWORD)
11.923 +
11.924 +lemma PWORDLEN_NBWORD: "ALL x xa. IN (NBWORD x xa) (PWORDLEN x)"
11.925 + by (import bword_num PWORDLEN_NBWORD)
11.926 +
11.927 +lemma NBWORD_SUC: "ALL n m. NBWORD (Suc n) m = WCAT (NBWORD n (m div 2), WORD [VB (m mod 2)])"
11.928 + by (import bword_num NBWORD_SUC)
11.929 +
11.930 +lemma VB_BV: "ALL x. VB (BV x) = x"
11.931 + by (import bword_num VB_BV)
11.932 +
11.933 +lemma BV_VB: "ALL x<2. BV (VB x) = x"
11.934 + by (import bword_num BV_VB)
11.935 +
11.936 +lemma NBWORD_BNVAL: "ALL n. RES_FORALL (PWORDLEN n) (%w. NBWORD n (BNVAL w) = w)"
11.937 + by (import bword_num NBWORD_BNVAL)
11.938 +
11.939 +lemma BNVAL_NBWORD: "ALL n m. m < 2 ^ n --> BNVAL (NBWORD n m) = m"
11.940 + by (import bword_num BNVAL_NBWORD)
11.941 +
11.942 +lemma ZERO_WORD_VAL: "RES_FORALL (PWORDLEN n) (%w. (w = NBWORD n 0) = (BNVAL w = 0))"
11.943 + by (import bword_num ZERO_WORD_VAL)
11.944 +
11.945 +lemma WCAT_NBWORD_0: "ALL n1 n2. WCAT (NBWORD n1 0, NBWORD n2 0) = NBWORD (n1 + n2) 0"
11.946 + by (import bword_num WCAT_NBWORD_0)
11.947 +
11.948 +lemma WSPLIT_NBWORD_0: "ALL n m. m <= n --> WSPLIT m (NBWORD n 0) = (NBWORD (n - m) 0, NBWORD m 0)"
11.949 + by (import bword_num WSPLIT_NBWORD_0)
11.950 +
11.951 +lemma EQ_NBWORD0_SPLIT: "ALL n.
11.952 + RES_FORALL (PWORDLEN n)
11.953 + (%w. ALL m<=n.
11.954 + (w = NBWORD n 0) =
11.955 + (WSEG (n - m) m w = NBWORD (n - m) 0 & WSEG m 0 w = NBWORD m 0))"
11.956 + by (import bword_num EQ_NBWORD0_SPLIT)
11.957 +
11.958 +lemma NBWORD_MOD: "ALL n m. NBWORD n (m mod 2 ^ n) = NBWORD n m"
11.959 + by (import bword_num NBWORD_MOD)
11.960 +
11.961 +lemma WSEG_NBWORD_SUC: "ALL n m. WSEG n 0 (NBWORD (Suc n) m) = NBWORD n m"
11.962 + by (import bword_num WSEG_NBWORD_SUC)
11.963 +
11.964 +lemma NBWORD_SUC_WSEG: "ALL n. RES_FORALL (PWORDLEN (Suc n)) (%w. NBWORD n (BNVAL w) = WSEG n 0 w)"
11.965 + by (import bword_num NBWORD_SUC_WSEG)
11.966 +
11.967 +lemma DOUBL_EQ_SHL: "ALL x.
11.968 + 0 < x -->
11.969 + RES_FORALL (PWORDLEN x)
11.970 + (%xa. ALL xb.
11.971 + NBWORD x (BNVAL xa + BNVAL xa + BV xb) = snd (SHL False xa xb))"
11.972 + by (import bword_num DOUBL_EQ_SHL)
11.973 +
11.974 +lemma MSB_NBWORD: "ALL n m. bit n (NBWORD (Suc n) m) = VB (m div 2 ^ n mod 2)"
11.975 + by (import bword_num MSB_NBWORD)
11.976 +
11.977 +lemma NBWORD_SPLIT: "ALL n1 n2 m.
11.978 + NBWORD (n1 + n2) m = WCAT (NBWORD n1 (m div 2 ^ n2), NBWORD n2 m)"
11.979 + by (import bword_num NBWORD_SPLIT)
11.980 +
11.981 +lemma WSEG_NBWORD: "ALL m k n.
11.982 + m + k <= n --> (ALL l. WSEG m k (NBWORD n l) = NBWORD m (l div 2 ^ k))"
11.983 + by (import bword_num WSEG_NBWORD)
11.984 +
11.985 +lemma NBWORD_SUC_FST: "ALL n x. NBWORD (Suc n) x = WCAT (WORD [VB (x div 2 ^ n mod 2)], NBWORD n x)"
11.986 + by (import bword_num NBWORD_SUC_FST)
11.987 +
11.988 +lemma BIT_NBWORD0: "ALL k n. k < n --> bit k (NBWORD n 0) = False"
11.989 + by (import bword_num BIT_NBWORD0)
11.990 +
11.991 +lemma ADD_BNVAL_LEFT: "ALL n.
11.992 + RES_FORALL (PWORDLEN (Suc n))
11.993 + (%w1. RES_FORALL (PWORDLEN (Suc n))
11.994 + (%w2. BNVAL w1 + BNVAL w2 =
11.995 + (BV (bit n w1) + BV (bit n w2)) * 2 ^ n +
11.996 + (BNVAL (WSEG n 0 w1) + BNVAL (WSEG n 0 w2))))"
11.997 + by (import bword_num ADD_BNVAL_LEFT)
11.998 +
11.999 +lemma ADD_BNVAL_RIGHT: "ALL n.
11.1000 + RES_FORALL (PWORDLEN (Suc n))
11.1001 + (%w1. RES_FORALL (PWORDLEN (Suc n))
11.1002 + (%w2. BNVAL w1 + BNVAL w2 =
11.1003 + (BNVAL (WSEG n 1 w1) + BNVAL (WSEG n 1 w2)) * 2 +
11.1004 + (BV (bit 0 w1) + BV (bit 0 w2))))"
11.1005 + by (import bword_num ADD_BNVAL_RIGHT)
11.1006 +
11.1007 +lemma ADD_BNVAL_SPLIT: "ALL n1 n2.
11.1008 + RES_FORALL (PWORDLEN (n1 + n2))
11.1009 + (%w1. RES_FORALL (PWORDLEN (n1 + n2))
11.1010 + (%w2. BNVAL w1 + BNVAL w2 =
11.1011 + (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2)) * 2 ^ n2 +
11.1012 + (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2))))"
11.1013 + by (import bword_num ADD_BNVAL_SPLIT)
11.1014 +
11.1015 +;end_setup
11.1016 +
11.1017 +;setup_theory bword_arith
11.1018 +
11.1019 +consts
11.1020 + ACARRY :: "nat => bool word => bool word => bool => bool"
11.1021 +
11.1022 +specification (ACARRY) ACARRY_DEF: "(ALL w1 w2 cin. ACARRY 0 w1 w2 cin = cin) &
11.1023 +(ALL n w1 w2 cin.
11.1024 + ACARRY (Suc n) w1 w2 cin =
11.1025 + VB ((BV (bit n w1) + BV (bit n w2) + BV (ACARRY n w1 w2 cin)) div 2))"
11.1026 + by (import bword_arith ACARRY_DEF)
11.1027 +
11.1028 +consts
11.1029 + ICARRY :: "nat => bool word => bool word => bool => bool"
11.1030 +
11.1031 +specification (ICARRY) ICARRY_DEF: "(ALL w1 w2 cin. ICARRY 0 w1 w2 cin = cin) &
11.1032 +(ALL n w1 w2 cin.
11.1033 + ICARRY (Suc n) w1 w2 cin =
11.1034 + (bit n w1 & bit n w2 | (bit n w1 | bit n w2) & ICARRY n w1 w2 cin))"
11.1035 + by (import bword_arith ICARRY_DEF)
11.1036 +
11.1037 +lemma ACARRY_EQ_ICARRY: "ALL n.
11.1038 + RES_FORALL (PWORDLEN n)
11.1039 + (%w1. RES_FORALL (PWORDLEN n)
11.1040 + (%w2. ALL cin k.
11.1041 + k <= n --> ACARRY k w1 w2 cin = ICARRY k w1 w2 cin))"
11.1042 + by (import bword_arith ACARRY_EQ_ICARRY)
11.1043 +
11.1044 +lemma BNVAL_LESS_EQ: "ALL n. RES_FORALL (PWORDLEN n) (%w. BNVAL w <= 2 ^ n - 1)"
11.1045 + by (import bword_arith BNVAL_LESS_EQ)
11.1046 +
11.1047 +lemma ADD_BNVAL_LESS_EQ1: "ALL n cin.
11.1048 + RES_FORALL (PWORDLEN n)
11.1049 + (%w1. RES_FORALL (PWORDLEN n)
11.1050 + (%w2. (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n <= Suc 0))"
11.1051 + by (import bword_arith ADD_BNVAL_LESS_EQ1)
11.1052 +
11.1053 +lemma ADD_BV_BNVAL_DIV_LESS_EQ1: "ALL n x1 x2 cin.
11.1054 + RES_FORALL (PWORDLEN n)
11.1055 + (%w1. RES_FORALL (PWORDLEN n)
11.1056 + (%w2. (BV x1 + BV x2 +
11.1057 + (BNVAL w1 + (BNVAL w2 + BV cin)) div 2 ^ n) div
11.1058 + 2
11.1059 + <= 1))"
11.1060 + by (import bword_arith ADD_BV_BNVAL_DIV_LESS_EQ1)
11.1061 +
11.1062 +lemma ADD_BV_BNVAL_LESS_EQ: "ALL n x1 x2 cin.
11.1063 + RES_FORALL (PWORDLEN n)
11.1064 + (%w1. RES_FORALL (PWORDLEN n)
11.1065 + (%w2. BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))
11.1066 + <= Suc (2 ^ Suc n)))"
11.1067 + by (import bword_arith ADD_BV_BNVAL_LESS_EQ)
11.1068 +
11.1069 +lemma ADD_BV_BNVAL_LESS_EQ1: "ALL n x1 x2 cin.
11.1070 + RES_FORALL (PWORDLEN n)
11.1071 + (%w1. RES_FORALL (PWORDLEN n)
11.1072 + (%w2. (BV x1 + BV x2 + (BNVAL w1 + (BNVAL w2 + BV cin))) div
11.1073 + 2 ^ Suc n
11.1074 + <= 1))"
11.1075 + by (import bword_arith ADD_BV_BNVAL_LESS_EQ1)
11.1076 +
11.1077 +lemma ACARRY_EQ_ADD_DIV: "ALL n.
11.1078 + RES_FORALL (PWORDLEN n)
11.1079 + (%w1. RES_FORALL (PWORDLEN n)
11.1080 + (%w2. ALL k<n.
11.1081 + BV (ACARRY k w1 w2 cin) =
11.1082 + (BNVAL (WSEG k 0 w1) + BNVAL (WSEG k 0 w2) + BV cin) div
11.1083 + 2 ^ k))"
11.1084 + by (import bword_arith ACARRY_EQ_ADD_DIV)
11.1085 +
11.1086 +lemma ADD_WORD_SPLIT: "ALL n1 n2.
11.1087 + RES_FORALL (PWORDLEN (n1 + n2))
11.1088 + (%w1. RES_FORALL (PWORDLEN (n1 + n2))
11.1089 + (%w2. ALL cin.
11.1090 + NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
11.1091 + WCAT
11.1092 + (NBWORD n1
11.1093 + (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
11.1094 + BV (ACARRY n2 w1 w2 cin)),
11.1095 + NBWORD n2
11.1096 + (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) +
11.1097 + BV cin))))"
11.1098 + by (import bword_arith ADD_WORD_SPLIT)
11.1099 +
11.1100 +lemma WSEG_NBWORD_ADD: "ALL n.
11.1101 + RES_FORALL (PWORDLEN n)
11.1102 + (%w1. RES_FORALL (PWORDLEN n)
11.1103 + (%w2. ALL m k cin.
11.1104 + m + k <= n -->
11.1105 + WSEG m k (NBWORD n (BNVAL w1 + BNVAL w2 + BV cin)) =
11.1106 + NBWORD m
11.1107 + (BNVAL (WSEG m k w1) + BNVAL (WSEG m k w2) +
11.1108 + BV (ACARRY k w1 w2 cin))))"
11.1109 + by (import bword_arith WSEG_NBWORD_ADD)
11.1110 +
11.1111 +lemma ADD_NBWORD_EQ0_SPLIT: "ALL n1 n2.
11.1112 + RES_FORALL (PWORDLEN (n1 + n2))
11.1113 + (%w1. RES_FORALL (PWORDLEN (n1 + n2))
11.1114 + (%w2. ALL cin.
11.1115 + (NBWORD (n1 + n2) (BNVAL w1 + BNVAL w2 + BV cin) =
11.1116 + NBWORD (n1 + n2) 0) =
11.1117 + (NBWORD n1
11.1118 + (BNVAL (WSEG n1 n2 w1) + BNVAL (WSEG n1 n2 w2) +
11.1119 + BV (ACARRY n2 w1 w2 cin)) =
11.1120 + NBWORD n1 0 &
11.1121 + NBWORD n2
11.1122 + (BNVAL (WSEG n2 0 w1) + BNVAL (WSEG n2 0 w2) +
11.1123 + BV cin) =
11.1124 + NBWORD n2 0)))"
11.1125 + by (import bword_arith ADD_NBWORD_EQ0_SPLIT)
11.1126 +
11.1127 +lemma ACARRY_MSB: "ALL n.
11.1128 + RES_FORALL (PWORDLEN n)
11.1129 + (%w1. RES_FORALL (PWORDLEN n)
11.1130 + (%w2. ALL cin.
11.1131 + ACARRY n w1 w2 cin =
11.1132 + bit n (NBWORD (Suc n) (BNVAL w1 + BNVAL w2 + BV cin))))"
11.1133 + by (import bword_arith ACARRY_MSB)
11.1134 +
11.1135 +lemma ACARRY_WSEG: "ALL n.
11.1136 + RES_FORALL (PWORDLEN n)
11.1137 + (%w1. RES_FORALL (PWORDLEN n)
11.1138 + (%w2. ALL cin k m.
11.1139 + k < m & m <= n -->
11.1140 + ACARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
11.1141 + ACARRY k w1 w2 cin))"
11.1142 + by (import bword_arith ACARRY_WSEG)
11.1143 +
11.1144 +lemma ICARRY_WSEG: "ALL n.
11.1145 + RES_FORALL (PWORDLEN n)
11.1146 + (%w1. RES_FORALL (PWORDLEN n)
11.1147 + (%w2. ALL cin k m.
11.1148 + k < m & m <= n -->
11.1149 + ICARRY k (WSEG m 0 w1) (WSEG m 0 w2) cin =
11.1150 + ICARRY k w1 w2 cin))"
11.1151 + by (import bword_arith ICARRY_WSEG)
11.1152 +
11.1153 +lemma ACARRY_ACARRY_WSEG: "ALL n.
11.1154 + RES_FORALL (PWORDLEN n)
11.1155 + (%w1. RES_FORALL (PWORDLEN n)
11.1156 + (%w2. ALL cin m k1 k2.
11.1157 + k1 < m & k2 < n & m + k2 <= n -->
11.1158 + ACARRY k1 (WSEG m k2 w1) (WSEG m k2 w2)
11.1159 + (ACARRY k2 w1 w2 cin) =
11.1160 + ACARRY (k1 + k2) w1 w2 cin))"
11.1161 + by (import bword_arith ACARRY_ACARRY_WSEG)
11.1162 +
11.1163 +;end_setup
11.1164 +
11.1165 +;setup_theory bword_bitop
11.1166 +
11.1167 +consts
11.1168 + WNOT :: "bool word => bool word"
11.1169 +
11.1170 +specification (WNOT) WNOT_DEF: "ALL l. WNOT (WORD l) = WORD (map Not l)"
11.1171 + by (import bword_bitop WNOT_DEF)
11.1172 +
11.1173 +lemma PBITOP_WNOT: "IN WNOT PBITOP"
11.1174 + by (import bword_bitop PBITOP_WNOT)
11.1175 +
11.1176 +lemma WNOT_WNOT: "ALL w. WNOT (WNOT w) = w"
11.1177 + by (import bword_bitop WNOT_WNOT)
11.1178 +
11.1179 +lemma WCAT_WNOT: "ALL n1 n2.
11.1180 + RES_FORALL (PWORDLEN n1)
11.1181 + (%w1. RES_FORALL (PWORDLEN n2)
11.1182 + (%w2. WCAT (WNOT w1, WNOT w2) = WNOT (WCAT (w1, w2))))"
11.1183 + by (import bword_bitop WCAT_WNOT)
11.1184 +
11.1185 +consts
11.1186 + WAND :: "bool word => bool word => bool word"
11.1187 +
11.1188 +specification (WAND) WAND_DEF: "ALL l1 l2. WAND (WORD l1) (WORD l2) = WORD (map2 op & l1 l2)"
11.1189 + by (import bword_bitop WAND_DEF)
11.1190 +
11.1191 +lemma PBITBOP_WAND: "IN WAND PBITBOP"
11.1192 + by (import bword_bitop PBITBOP_WAND)
11.1193 +
11.1194 +consts
11.1195 + WOR :: "bool word => bool word => bool word"
11.1196 +
11.1197 +specification (WOR) WOR_DEF: "ALL l1 l2. WOR (WORD l1) (WORD l2) = WORD (map2 op | l1 l2)"
11.1198 + by (import bword_bitop WOR_DEF)
11.1199 +
11.1200 +lemma PBITBOP_WOR: "IN WOR PBITBOP"
11.1201 + by (import bword_bitop PBITBOP_WOR)
11.1202 +
11.1203 +consts
11.1204 + WXOR :: "bool word => bool word => bool word"
11.1205 +
11.1206 +specification (WXOR) WXOR_DEF: "ALL l1 l2. WXOR (WORD l1) (WORD l2) = WORD (map2 (%x y. x ~= y) l1 l2)"
11.1207 + by (import bword_bitop WXOR_DEF)
11.1208 +
11.1209 +lemma PBITBOP_WXOR: "IN WXOR PBITBOP"
11.1210 + by (import bword_bitop PBITBOP_WXOR)
11.1211 +
11.1212 +;end_setup
11.1213 +
11.1214 +end
11.1215 +
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
12.2 +++ b/src/HOL/Import/HOL/HOL4Word32.thy Fri Apr 02 17:37:45 2004 +0200
12.3 @@ -0,0 +1,1451 @@
12.4 +theory HOL4Word32 = HOL4Base:
12.5 +
12.6 +;setup_theory bits
12.7 +
12.8 +consts
12.9 + DIV2 :: "nat => nat"
12.10 +
12.11 +defs
12.12 + DIV2_primdef: "DIV2 == %n. n div 2"
12.13 +
12.14 +lemma DIV2_def: "ALL n. DIV2 n = n div 2"
12.15 + by (import bits DIV2_def)
12.16 +
12.17 +consts
12.18 + TIMES_2EXP :: "nat => nat => nat"
12.19 +
12.20 +defs
12.21 + TIMES_2EXP_primdef: "TIMES_2EXP == %x n. n * 2 ^ x"
12.22 +
12.23 +lemma TIMES_2EXP_def: "ALL x n. TIMES_2EXP x n = n * 2 ^ x"
12.24 + by (import bits TIMES_2EXP_def)
12.25 +
12.26 +consts
12.27 + DIV_2EXP :: "nat => nat => nat"
12.28 +
12.29 +defs
12.30 + DIV_2EXP_primdef: "DIV_2EXP == %x n. n div 2 ^ x"
12.31 +
12.32 +lemma DIV_2EXP_def: "ALL x n. DIV_2EXP x n = n div 2 ^ x"
12.33 + by (import bits DIV_2EXP_def)
12.34 +
12.35 +consts
12.36 + MOD_2EXP :: "nat => nat => nat"
12.37 +
12.38 +defs
12.39 + MOD_2EXP_primdef: "MOD_2EXP == %x n. n mod 2 ^ x"
12.40 +
12.41 +lemma MOD_2EXP_def: "ALL x n. MOD_2EXP x n = n mod 2 ^ x"
12.42 + by (import bits MOD_2EXP_def)
12.43 +
12.44 +consts
12.45 + DIVMOD_2EXP :: "nat => nat => nat * nat"
12.46 +
12.47 +defs
12.48 + DIVMOD_2EXP_primdef: "DIVMOD_2EXP == %x n. (n div 2 ^ x, n mod 2 ^ x)"
12.49 +
12.50 +lemma DIVMOD_2EXP_def: "ALL x n. DIVMOD_2EXP x n = (n div 2 ^ x, n mod 2 ^ x)"
12.51 + by (import bits DIVMOD_2EXP_def)
12.52 +
12.53 +consts
12.54 + SBIT :: "bool => nat => nat"
12.55 +
12.56 +defs
12.57 + SBIT_primdef: "SBIT == %b n. if b then 2 ^ n else 0"
12.58 +
12.59 +lemma SBIT_def: "ALL b n. SBIT b n = (if b then 2 ^ n else 0)"
12.60 + by (import bits SBIT_def)
12.61 +
12.62 +consts
12.63 + BITS :: "nat => nat => nat => nat"
12.64 +
12.65 +defs
12.66 + BITS_primdef: "BITS == %h l n. MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
12.67 +
12.68 +lemma BITS_def: "ALL h l n. BITS h l n = MOD_2EXP (Suc h - l) (DIV_2EXP l n)"
12.69 + by (import bits BITS_def)
12.70 +
12.71 +constdefs
12.72 + bit :: "nat => nat => bool"
12.73 + "bit == %b n. BITS b b n = 1"
12.74 +
12.75 +lemma BIT_def: "ALL b n. bit b n = (BITS b b n = 1)"
12.76 + by (import bits BIT_def)
12.77 +
12.78 +consts
12.79 + SLICE :: "nat => nat => nat => nat"
12.80 +
12.81 +defs
12.82 + SLICE_primdef: "SLICE == %h l n. MOD_2EXP (Suc h) n - MOD_2EXP l n"
12.83 +
12.84 +lemma SLICE_def: "ALL h l n. SLICE h l n = MOD_2EXP (Suc h) n - MOD_2EXP l n"
12.85 + by (import bits SLICE_def)
12.86 +
12.87 +consts
12.88 + LSBn :: "nat => bool"
12.89 +
12.90 +defs
12.91 + LSBn_primdef: "LSBn == bit 0"
12.92 +
12.93 +lemma LSBn_def: "LSBn = bit 0"
12.94 + by (import bits LSBn_def)
12.95 +
12.96 +consts
12.97 + BITWISE :: "nat => (bool => bool => bool) => nat => nat => nat"
12.98 +
12.99 +specification (BITWISE_primdef: BITWISE) BITWISE_def: "(ALL oper x y. BITWISE 0 oper x y = 0) &
12.100 +(ALL n oper x y.
12.101 + BITWISE (Suc n) oper x y =
12.102 + BITWISE n oper x y + SBIT (oper (bit n x) (bit n y)) n)"
12.103 + by (import bits BITWISE_def)
12.104 +
12.105 +lemma DIV1: "ALL x::nat. x div (1::nat) = x"
12.106 + by (import bits DIV1)
12.107 +
12.108 +lemma SUC_SUB: "Suc a - a = 1"
12.109 + by (import bits SUC_SUB)
12.110 +
12.111 +lemma DIV_MULT_1: "ALL (r::nat) n::nat. r < n --> (n + r) div n = (1::nat)"
12.112 + by (import bits DIV_MULT_1)
12.113 +
12.114 +lemma ZERO_LT_TWOEXP: "ALL n::nat. (0::nat) < (2::nat) ^ n"
12.115 + by (import bits ZERO_LT_TWOEXP)
12.116 +
12.117 +lemma MOD_2EXP_LT: "ALL (n::nat) k::nat. k mod (2::nat) ^ n < (2::nat) ^ n"
12.118 + by (import bits MOD_2EXP_LT)
12.119 +
12.120 +lemma TWOEXP_DIVISION: "ALL (n::nat) k::nat.
12.121 + k = k div (2::nat) ^ n * (2::nat) ^ n + k mod (2::nat) ^ n"
12.122 + by (import bits TWOEXP_DIVISION)
12.123 +
12.124 +lemma TWOEXP_MONO: "ALL (a::nat) b::nat. a < b --> (2::nat) ^ a < (2::nat) ^ b"
12.125 + by (import bits TWOEXP_MONO)
12.126 +
12.127 +lemma TWOEXP_MONO2: "ALL (a::nat) b::nat. a <= b --> (2::nat) ^ a <= (2::nat) ^ b"
12.128 + by (import bits TWOEXP_MONO2)
12.129 +
12.130 +lemma EXP_SUB_LESS_EQ: "ALL (a::nat) b::nat. (2::nat) ^ (a - b) <= (2::nat) ^ a"
12.131 + by (import bits EXP_SUB_LESS_EQ)
12.132 +
12.133 +lemma BITS_THM: "ALL x xa xb. BITS x xa xb = xb div 2 ^ xa mod 2 ^ (Suc x - xa)"
12.134 + by (import bits BITS_THM)
12.135 +
12.136 +lemma BITSLT_THM: "ALL h l n. BITS h l n < 2 ^ (Suc h - l)"
12.137 + by (import bits BITSLT_THM)
12.138 +
12.139 +lemma DIV_MULT_LEM: "ALL (m::nat) n::nat. (0::nat) < n --> m div n * n <= m"
12.140 + by (import bits DIV_MULT_LEM)
12.141 +
12.142 +lemma MOD_2EXP_LEM: "ALL (n::nat) x::nat.
12.143 + n mod (2::nat) ^ x = n - n div (2::nat) ^ x * (2::nat) ^ x"
12.144 + by (import bits MOD_2EXP_LEM)
12.145 +
12.146 +lemma BITS2_THM: "ALL h l n. BITS h l n = n mod 2 ^ Suc h div 2 ^ l"
12.147 + by (import bits BITS2_THM)
12.148 +
12.149 +lemma BITS_COMP_THM: "ALL h1 l1 h2 l2 n.
12.150 + h2 + l1 <= h1 --> BITS h2 l2 (BITS h1 l1 n) = BITS (h2 + l1) (l2 + l1) n"
12.151 + by (import bits BITS_COMP_THM)
12.152 +
12.153 +lemma BITS_DIV_THM: "ALL h l x n. BITS h l x div 2 ^ n = BITS h (l + n) x"
12.154 + by (import bits BITS_DIV_THM)
12.155 +
12.156 +lemma BITS_LT_HIGH: "ALL h l n. n < 2 ^ Suc h --> BITS h l n = n div 2 ^ l"
12.157 + by (import bits BITS_LT_HIGH)
12.158 +
12.159 +lemma BITS_ZERO: "ALL h l n. h < l --> BITS h l n = 0"
12.160 + by (import bits BITS_ZERO)
12.161 +
12.162 +lemma BITS_ZERO2: "ALL h l. BITS h l 0 = 0"
12.163 + by (import bits BITS_ZERO2)
12.164 +
12.165 +lemma BITS_ZERO3: "ALL h x. BITS h 0 x = x mod 2 ^ Suc h"
12.166 + by (import bits BITS_ZERO3)
12.167 +
12.168 +lemma BITS_COMP_THM2: "ALL h1 l1 h2 l2 n.
12.169 + BITS h2 l2 (BITS h1 l1 n) = BITS (min h1 (h2 + l1)) (l2 + l1) n"
12.170 + by (import bits BITS_COMP_THM2)
12.171 +
12.172 +lemma NOT_MOD2_LEM: "ALL n::nat. (n mod (2::nat) ~= (0::nat)) = (n mod (2::nat) = (1::nat))"
12.173 + by (import bits NOT_MOD2_LEM)
12.174 +
12.175 +lemma NOT_MOD2_LEM2: "ALL (n::nat) a::'a.
12.176 + (n mod (2::nat) ~= (1::nat)) = (n mod (2::nat) = (0::nat))"
12.177 + by (import bits NOT_MOD2_LEM2)
12.178 +
12.179 +lemma EVEN_MOD2_LEM: "ALL n. EVEN n = (n mod 2 = 0)"
12.180 + by (import bits EVEN_MOD2_LEM)
12.181 +
12.182 +lemma ODD_MOD2_LEM: "ALL n. ODD n = (n mod 2 = 1)"
12.183 + by (import bits ODD_MOD2_LEM)
12.184 +
12.185 +lemma LSB_ODD: "LSBn = ODD"
12.186 + by (import bits LSB_ODD)
12.187 +
12.188 +lemma DIV_MULT_THM: "ALL (x::nat) n::nat.
12.189 + n div (2::nat) ^ x * (2::nat) ^ x = n - n mod (2::nat) ^ x"
12.190 + by (import bits DIV_MULT_THM)
12.191 +
12.192 +lemma DIV_MULT_THM2: "ALL x::nat. (2::nat) * (x div (2::nat)) = x - x mod (2::nat)"
12.193 + by (import bits DIV_MULT_THM2)
12.194 +
12.195 +lemma LESS_EQ_EXP_MULT: "ALL (a::nat) b::nat. a <= b --> (EX x::nat. (2::nat) ^ b = x * (2::nat) ^ a)"
12.196 + by (import bits LESS_EQ_EXP_MULT)
12.197 +
12.198 +lemma SLICE_LEM1: "ALL (a::nat) (x::nat) y::nat.
12.199 + a div (2::nat) ^ (x + y) * (2::nat) ^ (x + y) =
12.200 + a div (2::nat) ^ x * (2::nat) ^ x -
12.201 + a div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
12.202 + by (import bits SLICE_LEM1)
12.203 +
12.204 +lemma SLICE_LEM2: "ALL (a::'a) (x::nat) y::nat.
12.205 + (n::nat) mod (2::nat) ^ (x + y) =
12.206 + n mod (2::nat) ^ x + n div (2::nat) ^ x mod (2::nat) ^ y * (2::nat) ^ x"
12.207 + by (import bits SLICE_LEM2)
12.208 +
12.209 +lemma SLICE_LEM3: "ALL (n::nat) (h::nat) l::nat.
12.210 + l < h --> n mod (2::nat) ^ Suc l <= n mod (2::nat) ^ h"
12.211 + by (import bits SLICE_LEM3)
12.212 +
12.213 +lemma SLICE_THM: "ALL n h l. SLICE h l n = BITS h l n * 2 ^ l"
12.214 + by (import bits SLICE_THM)
12.215 +
12.216 +lemma SLICELT_THM: "ALL h l n. SLICE h l n < 2 ^ Suc h"
12.217 + by (import bits SLICELT_THM)
12.218 +
12.219 +lemma BITS_SLICE_THM: "ALL h l n. BITS h l (SLICE h l n) = BITS h l n"
12.220 + by (import bits BITS_SLICE_THM)
12.221 +
12.222 +lemma BITS_SLICE_THM2: "ALL h l n. h <= h2 --> BITS h2 l (SLICE h l n) = BITS h l n"
12.223 + by (import bits BITS_SLICE_THM2)
12.224 +
12.225 +lemma MOD_2EXP_MONO: "ALL (n::nat) (h::nat) l::nat.
12.226 + l <= h --> n mod (2::nat) ^ l <= n mod (2::nat) ^ Suc h"
12.227 + by (import bits MOD_2EXP_MONO)
12.228 +
12.229 +lemma SLICE_COMP_THM: "ALL h m l n.
12.230 + Suc m <= h & l <= m --> SLICE h (Suc m) n + SLICE m l n = SLICE h l n"
12.231 + by (import bits SLICE_COMP_THM)
12.232 +
12.233 +lemma SLICE_ZERO: "ALL h l n. h < l --> SLICE h l n = 0"
12.234 + by (import bits SLICE_ZERO)
12.235 +
12.236 +lemma BIT_COMP_THM3: "ALL h m l n.
12.237 + Suc m <= h & l <= m -->
12.238 + BITS h (Suc m) n * 2 ^ (Suc m - l) + BITS m l n = BITS h l n"
12.239 + by (import bits BIT_COMP_THM3)
12.240 +
12.241 +lemma NOT_BIT: "ALL n a. (~ bit n a) = (BITS n n a = 0)"
12.242 + by (import bits NOT_BIT)
12.243 +
12.244 +lemma NOT_BITS: "ALL n a. (BITS n n a ~= 0) = (BITS n n a = 1)"
12.245 + by (import bits NOT_BITS)
12.246 +
12.247 +lemma NOT_BITS2: "ALL n a. (BITS n n a ~= 1) = (BITS n n a = 0)"
12.248 + by (import bits NOT_BITS2)
12.249 +
12.250 +lemma BIT_SLICE: "ALL n a b. (bit n a = bit n b) = (SLICE n n a = SLICE n n b)"
12.251 + by (import bits BIT_SLICE)
12.252 +
12.253 +lemma BIT_SLICE_LEM: "ALL y x n. SBIT (bit x n) (x + y) = SLICE x x n * 2 ^ y"
12.254 + by (import bits BIT_SLICE_LEM)
12.255 +
12.256 +lemma BIT_SLICE_THM: "ALL x xa. SBIT (bit x xa) x = SLICE x x xa"
12.257 + by (import bits BIT_SLICE_THM)
12.258 +
12.259 +lemma SBIT_DIV: "ALL b m n. n < m --> SBIT b (m - n) = SBIT b m div 2 ^ n"
12.260 + by (import bits SBIT_DIV)
12.261 +
12.262 +lemma BITS_SUC: "ALL h l n.
12.263 + l <= Suc h -->
12.264 + SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n = BITS (Suc h) l n"
12.265 + by (import bits BITS_SUC)
12.266 +
12.267 +lemma BITS_SUC_THM: "ALL h l n.
12.268 + BITS (Suc h) l n =
12.269 + (if Suc h < l then 0 else SBIT (bit (Suc h) n) (Suc h - l) + BITS h l n)"
12.270 + by (import bits BITS_SUC_THM)
12.271 +
12.272 +lemma BIT_BITS_THM: "ALL h l a b.
12.273 + (ALL x. l <= x & x <= h --> bit x a = bit x b) =
12.274 + (BITS h l a = BITS h l b)"
12.275 + by (import bits BIT_BITS_THM)
12.276 +
12.277 +lemma BITWISE_LT_2EXP: "ALL n oper a b. BITWISE n oper a b < 2 ^ n"
12.278 + by (import bits BITWISE_LT_2EXP)
12.279 +
12.280 +lemma LESS_EXP_MULT2: "ALL (a::nat) b::nat.
12.281 + a < b -->
12.282 + (EX x::nat. (2::nat) ^ b = (2::nat) ^ (x + (1::nat)) * (2::nat) ^ a)"
12.283 + by (import bits LESS_EXP_MULT2)
12.284 +
12.285 +lemma BITWISE_THM: "ALL x n oper a b.
12.286 + x < n --> bit x (BITWISE n oper a b) = oper (bit x a) (bit x b)"
12.287 + by (import bits BITWISE_THM)
12.288 +
12.289 +lemma BITWISE_COR: "ALL x n oper a b.
12.290 + x < n -->
12.291 + oper (bit x a) (bit x b) --> BITWISE n oper a b div 2 ^ x mod 2 = 1"
12.292 + by (import bits BITWISE_COR)
12.293 +
12.294 +lemma BITWISE_NOT_COR: "ALL x n oper a b.
12.295 + x < n -->
12.296 + ~ oper (bit x a) (bit x b) --> BITWISE n oper a b div 2 ^ x mod 2 = 0"
12.297 + by (import bits BITWISE_NOT_COR)
12.298 +
12.299 +lemma MOD_PLUS_RIGHT: "ALL n::nat.
12.300 + (0::nat) < n -->
12.301 + (ALL (j::nat) k::nat. (j + k mod n) mod n = (j + k) mod n)"
12.302 + by (import bits MOD_PLUS_RIGHT)
12.303 +
12.304 +lemma MOD_PLUS_1: "ALL n::nat.
12.305 + (0::nat) < n -->
12.306 + (ALL x::nat.
12.307 + ((x + (1::nat)) mod n = (0::nat)) = (x mod n + (1::nat) = n))"
12.308 + by (import bits MOD_PLUS_1)
12.309 +
12.310 +lemma MOD_ADD_1: "ALL n::nat.
12.311 + (0::nat) < n -->
12.312 + (ALL x::nat.
12.313 + (x + (1::nat)) mod n ~= (0::nat) -->
12.314 + (x + (1::nat)) mod n = x mod n + (1::nat))"
12.315 + by (import bits MOD_ADD_1)
12.316 +
12.317 +;end_setup
12.318 +
12.319 +;setup_theory word32
12.320 +
12.321 +consts
12.322 + HB :: "nat"
12.323 +
12.324 +defs
12.325 + HB_primdef: "HB ==
12.326 +NUMERAL
12.327 + (NUMERAL_BIT1
12.328 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
12.329 +
12.330 +lemma HB_def: "HB =
12.331 +NUMERAL
12.332 + (NUMERAL_BIT1
12.333 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))"
12.334 + by (import word32 HB_def)
12.335 +
12.336 +consts
12.337 + WL :: "nat"
12.338 +
12.339 +defs
12.340 + WL_primdef: "WL == Suc HB"
12.341 +
12.342 +lemma WL_def: "WL = Suc HB"
12.343 + by (import word32 WL_def)
12.344 +
12.345 +consts
12.346 + MODw :: "nat => nat"
12.347 +
12.348 +defs
12.349 + MODw_primdef: "MODw == %n. n mod 2 ^ WL"
12.350 +
12.351 +lemma MODw_def: "ALL n. MODw n = n mod 2 ^ WL"
12.352 + by (import word32 MODw_def)
12.353 +
12.354 +consts
12.355 + INw :: "nat => bool"
12.356 +
12.357 +defs
12.358 + INw_primdef: "INw == %n. n < 2 ^ WL"
12.359 +
12.360 +lemma INw_def: "ALL n. INw n = (n < 2 ^ WL)"
12.361 + by (import word32 INw_def)
12.362 +
12.363 +consts
12.364 + EQUIV :: "nat => nat => bool"
12.365 +
12.366 +defs
12.367 + EQUIV_primdef: "EQUIV == %x y. MODw x = MODw y"
12.368 +
12.369 +lemma EQUIV_def: "ALL x y. EQUIV x y = (MODw x = MODw y)"
12.370 + by (import word32 EQUIV_def)
12.371 +
12.372 +lemma EQUIV_QT: "ALL x y. EQUIV x y = (EQUIV x = EQUIV y)"
12.373 + by (import word32 EQUIV_QT)
12.374 +
12.375 +lemma FUNPOW_THM: "ALL f n x. (f ^ n) (f x) = f ((f ^ n) x)"
12.376 + by (import word32 FUNPOW_THM)
12.377 +
12.378 +lemma FUNPOW_THM2: "ALL f n x. (f ^ Suc n) x = f ((f ^ n) x)"
12.379 + by (import word32 FUNPOW_THM2)
12.380 +
12.381 +lemma FUNPOW_COMP: "ALL f m n a. (f ^ m) ((f ^ n) a) = (f ^ (m + n)) a"
12.382 + by (import word32 FUNPOW_COMP)
12.383 +
12.384 +lemma INw_MODw: "ALL n. INw (MODw n)"
12.385 + by (import word32 INw_MODw)
12.386 +
12.387 +lemma TOw_IDEM: "ALL a. INw a --> MODw a = a"
12.388 + by (import word32 TOw_IDEM)
12.389 +
12.390 +lemma MODw_IDEM2: "ALL a. MODw (MODw a) = MODw a"
12.391 + by (import word32 MODw_IDEM2)
12.392 +
12.393 +lemma TOw_QT: "ALL a. EQUIV (MODw a) a"
12.394 + by (import word32 TOw_QT)
12.395 +
12.396 +lemma MODw_THM: "MODw = BITS HB 0"
12.397 + by (import word32 MODw_THM)
12.398 +
12.399 +lemma MOD_ADD: "ALL a b. MODw (a + b) = MODw (MODw a + MODw b)"
12.400 + by (import word32 MOD_ADD)
12.401 +
12.402 +lemma MODw_MULT: "ALL a b. MODw (a * b) = MODw (MODw a * MODw b)"
12.403 + by (import word32 MODw_MULT)
12.404 +
12.405 +consts
12.406 + AONE :: "nat"
12.407 +
12.408 +defs
12.409 + AONE_primdef: "AONE == 1"
12.410 +
12.411 +lemma AONE_def: "AONE = 1"
12.412 + by (import word32 AONE_def)
12.413 +
12.414 +lemma ADD_QT: "(ALL n. EQUIV (0 + n) n) & (ALL m n. EQUIV (Suc m + n) (Suc (m + n)))"
12.415 + by (import word32 ADD_QT)
12.416 +
12.417 +lemma ADD_0_QT: "ALL a. EQUIV (a + 0) a"
12.418 + by (import word32 ADD_0_QT)
12.419 +
12.420 +lemma ADD_COMM_QT: "ALL a b. EQUIV (a + b) (b + a)"
12.421 + by (import word32 ADD_COMM_QT)
12.422 +
12.423 +lemma ADD_ASSOC_QT: "ALL a b c. EQUIV (a + (b + c)) (a + b + c)"
12.424 + by (import word32 ADD_ASSOC_QT)
12.425 +
12.426 +lemma MULT_QT: "(ALL n. EQUIV (0 * n) 0) & (ALL m n. EQUIV (Suc m * n) (m * n + n))"
12.427 + by (import word32 MULT_QT)
12.428 +
12.429 +lemma ADD1_QT: "ALL m. EQUIV (Suc m) (m + AONE)"
12.430 + by (import word32 ADD1_QT)
12.431 +
12.432 +lemma ADD_CLAUSES_QT: "(ALL m. EQUIV (0 + m) m) &
12.433 +(ALL m. EQUIV (m + 0) m) &
12.434 +(ALL m n. EQUIV (Suc m + n) (Suc (m + n))) &
12.435 +(ALL m n. EQUIV (m + Suc n) (Suc (m + n)))"
12.436 + by (import word32 ADD_CLAUSES_QT)
12.437 +
12.438 +lemma SUC_EQUIV_COMP: "ALL a b. EQUIV (Suc a) b --> EQUIV a (b + (2 ^ WL - 1))"
12.439 + by (import word32 SUC_EQUIV_COMP)
12.440 +
12.441 +lemma INV_SUC_EQ_QT: "ALL m n. EQUIV (Suc m) (Suc n) = EQUIV m n"
12.442 + by (import word32 INV_SUC_EQ_QT)
12.443 +
12.444 +lemma ADD_INV_0_QT: "ALL m n. EQUIV (m + n) m --> EQUIV n 0"
12.445 + by (import word32 ADD_INV_0_QT)
12.446 +
12.447 +lemma ADD_INV_0_EQ_QT: "ALL m n. EQUIV (m + n) m = EQUIV n 0"
12.448 + by (import word32 ADD_INV_0_EQ_QT)
12.449 +
12.450 +lemma EQ_ADD_LCANCEL_QT: "ALL m n p. EQUIV (m + n) (m + p) = EQUIV n p"
12.451 + by (import word32 EQ_ADD_LCANCEL_QT)
12.452 +
12.453 +lemma EQ_ADD_RCANCEL_QT: "ALL x xa xb. EQUIV (x + xb) (xa + xb) = EQUIV x xa"
12.454 + by (import word32 EQ_ADD_RCANCEL_QT)
12.455 +
12.456 +lemma LEFT_ADD_DISTRIB_QT: "ALL m n p. EQUIV (p * (m + n)) (p * m + p * n)"
12.457 + by (import word32 LEFT_ADD_DISTRIB_QT)
12.458 +
12.459 +lemma MULT_ASSOC_QT: "ALL m n p. EQUIV (m * (n * p)) (m * n * p)"
12.460 + by (import word32 MULT_ASSOC_QT)
12.461 +
12.462 +lemma MULT_COMM_QT: "ALL m n. EQUIV (m * n) (n * m)"
12.463 + by (import word32 MULT_COMM_QT)
12.464 +
12.465 +lemma MULT_CLAUSES_QT: "ALL m n.
12.466 + EQUIV (0 * m) 0 &
12.467 + EQUIV (m * 0) 0 &
12.468 + EQUIV (AONE * m) m &
12.469 + EQUIV (m * AONE) m &
12.470 + EQUIV (Suc m * n) (m * n + n) & EQUIV (m * Suc n) (m + m * n)"
12.471 + by (import word32 MULT_CLAUSES_QT)
12.472 +
12.473 +consts
12.474 + MSBn :: "nat => bool"
12.475 +
12.476 +defs
12.477 + MSBn_primdef: "MSBn == bit HB"
12.478 +
12.479 +lemma MSBn_def: "MSBn = bit HB"
12.480 + by (import word32 MSBn_def)
12.481 +
12.482 +consts
12.483 + ONE_COMP :: "nat => nat"
12.484 +
12.485 +defs
12.486 + ONE_COMP_primdef: "ONE_COMP == %x. 2 ^ WL - 1 - MODw x"
12.487 +
12.488 +lemma ONE_COMP_def: "ALL x. ONE_COMP x = 2 ^ WL - 1 - MODw x"
12.489 + by (import word32 ONE_COMP_def)
12.490 +
12.491 +consts
12.492 + TWO_COMP :: "nat => nat"
12.493 +
12.494 +defs
12.495 + TWO_COMP_primdef: "TWO_COMP == %x. 2 ^ WL - MODw x"
12.496 +
12.497 +lemma TWO_COMP_def: "ALL x. TWO_COMP x = 2 ^ WL - MODw x"
12.498 + by (import word32 TWO_COMP_def)
12.499 +
12.500 +lemma ADD_TWO_COMP_QT: "ALL a. EQUIV (MODw a + TWO_COMP a) 0"
12.501 + by (import word32 ADD_TWO_COMP_QT)
12.502 +
12.503 +lemma TWO_COMP_ONE_COMP_QT: "ALL a. EQUIV (TWO_COMP a) (ONE_COMP a + AONE)"
12.504 + by (import word32 TWO_COMP_ONE_COMP_QT)
12.505 +
12.506 +lemma BIT_EQUIV_THM: "ALL x xa. (ALL xb<WL. bit xb x = bit xb xa) = EQUIV x xa"
12.507 + by (import word32 BIT_EQUIV_THM)
12.508 +
12.509 +lemma BITS_SUC2: "ALL n a. BITS (Suc n) 0 a = SLICE (Suc n) (Suc n) a + BITS n 0 a"
12.510 + by (import word32 BITS_SUC2)
12.511 +
12.512 +lemma BITWISE_ONE_COMP_THM: "ALL a b. BITWISE WL (%x y. ~ x) a b = ONE_COMP a"
12.513 + by (import word32 BITWISE_ONE_COMP_THM)
12.514 +
12.515 +lemma ONE_COMP_THM: "ALL x xa. xa < WL --> bit xa (ONE_COMP x) = (~ bit xa x)"
12.516 + by (import word32 ONE_COMP_THM)
12.517 +
12.518 +consts
12.519 + OR :: "nat => nat => nat"
12.520 +
12.521 +defs
12.522 + OR_primdef: "OR == BITWISE WL op |"
12.523 +
12.524 +lemma OR_def: "OR = BITWISE WL op |"
12.525 + by (import word32 OR_def)
12.526 +
12.527 +consts
12.528 + AND :: "nat => nat => nat"
12.529 +
12.530 +defs
12.531 + AND_primdef: "AND == BITWISE WL op &"
12.532 +
12.533 +lemma AND_def: "AND = BITWISE WL op &"
12.534 + by (import word32 AND_def)
12.535 +
12.536 +consts
12.537 + EOR :: "nat => nat => nat"
12.538 +
12.539 +defs
12.540 + EOR_primdef: "EOR == BITWISE WL (%x y. x ~= y)"
12.541 +
12.542 +lemma EOR_def: "EOR = BITWISE WL (%x y. x ~= y)"
12.543 + by (import word32 EOR_def)
12.544 +
12.545 +consts
12.546 + COMP0 :: "nat"
12.547 +
12.548 +defs
12.549 + COMP0_primdef: "COMP0 == ONE_COMP 0"
12.550 +
12.551 +lemma COMP0_def: "COMP0 = ONE_COMP 0"
12.552 + by (import word32 COMP0_def)
12.553 +
12.554 +lemma BITWISE_THM2: "ALL y oper a b.
12.555 + (ALL x<WL. oper (bit x a) (bit x b) = bit x y) =
12.556 + EQUIV (BITWISE WL oper a b) y"
12.557 + by (import word32 BITWISE_THM2)
12.558 +
12.559 +lemma OR_ASSOC_QT: "ALL a b c. EQUIV (OR a (OR b c)) (OR (OR a b) c)"
12.560 + by (import word32 OR_ASSOC_QT)
12.561 +
12.562 +lemma OR_COMM_QT: "ALL a b. EQUIV (OR a b) (OR b a)"
12.563 + by (import word32 OR_COMM_QT)
12.564 +
12.565 +lemma OR_ABSORB_QT: "ALL a b. EQUIV (AND a (OR a b)) a"
12.566 + by (import word32 OR_ABSORB_QT)
12.567 +
12.568 +lemma OR_IDEM_QT: "ALL a. EQUIV (OR a a) a"
12.569 + by (import word32 OR_IDEM_QT)
12.570 +
12.571 +lemma AND_ASSOC_QT: "ALL a b c. EQUIV (AND a (AND b c)) (AND (AND a b) c)"
12.572 + by (import word32 AND_ASSOC_QT)
12.573 +
12.574 +lemma AND_COMM_QT: "ALL a b. EQUIV (AND a b) (AND b a)"
12.575 + by (import word32 AND_COMM_QT)
12.576 +
12.577 +lemma AND_ABSORB_QT: "ALL a b. EQUIV (OR a (AND a b)) a"
12.578 + by (import word32 AND_ABSORB_QT)
12.579 +
12.580 +lemma AND_IDEM_QT: "ALL a. EQUIV (AND a a) a"
12.581 + by (import word32 AND_IDEM_QT)
12.582 +
12.583 +lemma OR_COMP_QT: "ALL a. EQUIV (OR a (ONE_COMP a)) COMP0"
12.584 + by (import word32 OR_COMP_QT)
12.585 +
12.586 +lemma AND_COMP_QT: "ALL a. EQUIV (AND a (ONE_COMP a)) 0"
12.587 + by (import word32 AND_COMP_QT)
12.588 +
12.589 +lemma ONE_COMP_QT: "ALL a. EQUIV (ONE_COMP (ONE_COMP a)) a"
12.590 + by (import word32 ONE_COMP_QT)
12.591 +
12.592 +lemma RIGHT_AND_OVER_OR_QT: "ALL a b c. EQUIV (AND (OR a b) c) (OR (AND a c) (AND b c))"
12.593 + by (import word32 RIGHT_AND_OVER_OR_QT)
12.594 +
12.595 +lemma RIGHT_OR_OVER_AND_QT: "ALL a b c. EQUIV (OR (AND a b) c) (AND (OR a c) (OR b c))"
12.596 + by (import word32 RIGHT_OR_OVER_AND_QT)
12.597 +
12.598 +lemma DE_MORGAN_THM_QT: "ALL a b.
12.599 + EQUIV (ONE_COMP (AND a b)) (OR (ONE_COMP a) (ONE_COMP b)) &
12.600 + EQUIV (ONE_COMP (OR a b)) (AND (ONE_COMP a) (ONE_COMP b))"
12.601 + by (import word32 DE_MORGAN_THM_QT)
12.602 +
12.603 +lemma BIT_EQUIV: "ALL n a b. n < WL --> EQUIV a b --> bit n a = bit n b"
12.604 + by (import word32 BIT_EQUIV)
12.605 +
12.606 +lemma LSB_WELLDEF: "ALL a b. EQUIV a b --> LSBn a = LSBn b"
12.607 + by (import word32 LSB_WELLDEF)
12.608 +
12.609 +lemma MSB_WELLDEF: "ALL a b. EQUIV a b --> MSBn a = MSBn b"
12.610 + by (import word32 MSB_WELLDEF)
12.611 +
12.612 +lemma BITWISE_ISTEP: "ALL n oper a b.
12.613 + 0 < n -->
12.614 + BITWISE n oper (a div 2) (b div 2) =
12.615 + BITWISE n oper a b div 2 + SBIT (oper (bit n a) (bit n b)) (n - 1)"
12.616 + by (import word32 BITWISE_ISTEP)
12.617 +
12.618 +lemma BITWISE_EVAL: "ALL n oper a b.
12.619 + BITWISE (Suc n) oper a b =
12.620 + 2 * BITWISE n oper (a div 2) (b div 2) + SBIT (oper (LSBn a) (LSBn b)) 0"
12.621 + by (import word32 BITWISE_EVAL)
12.622 +
12.623 +lemma BITWISE_WELLDEF: "ALL n oper a b c d.
12.624 + EQUIV a b & EQUIV c d --> EQUIV (BITWISE n oper a c) (BITWISE n oper b d)"
12.625 + by (import word32 BITWISE_WELLDEF)
12.626 +
12.627 +lemma BITWISEw_WELLDEF: "ALL oper a b c d.
12.628 + EQUIV a b & EQUIV c d -->
12.629 + EQUIV (BITWISE WL oper a c) (BITWISE WL oper b d)"
12.630 + by (import word32 BITWISEw_WELLDEF)
12.631 +
12.632 +lemma SUC_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (Suc a) (Suc b)"
12.633 + by (import word32 SUC_WELLDEF)
12.634 +
12.635 +lemma ADD_WELLDEF: "ALL a b c d. EQUIV a b & EQUIV c d --> EQUIV (a + c) (b + d)"
12.636 + by (import word32 ADD_WELLDEF)
12.637 +
12.638 +lemma MUL_WELLDEF: "ALL a b c d. EQUIV a b & EQUIV c d --> EQUIV (a * c) (b * d)"
12.639 + by (import word32 MUL_WELLDEF)
12.640 +
12.641 +lemma ONE_COMP_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (ONE_COMP a) (ONE_COMP b)"
12.642 + by (import word32 ONE_COMP_WELLDEF)
12.643 +
12.644 +lemma TWO_COMP_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (TWO_COMP a) (TWO_COMP b)"
12.645 + by (import word32 TWO_COMP_WELLDEF)
12.646 +
12.647 +lemma TOw_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (MODw a) (MODw b)"
12.648 + by (import word32 TOw_WELLDEF)
12.649 +
12.650 +consts
12.651 + LSR_ONE :: "nat => nat"
12.652 +
12.653 +defs
12.654 + LSR_ONE_primdef: "LSR_ONE == %a. MODw a div 2"
12.655 +
12.656 +lemma LSR_ONE_def: "ALL a. LSR_ONE a = MODw a div 2"
12.657 + by (import word32 LSR_ONE_def)
12.658 +
12.659 +consts
12.660 + ASR_ONE :: "nat => nat"
12.661 +
12.662 +defs
12.663 + ASR_ONE_primdef: "ASR_ONE == %a. LSR_ONE a + SBIT (MSBn a) HB"
12.664 +
12.665 +lemma ASR_ONE_def: "ALL a. ASR_ONE a = LSR_ONE a + SBIT (MSBn a) HB"
12.666 + by (import word32 ASR_ONE_def)
12.667 +
12.668 +consts
12.669 + ROR_ONE :: "nat => nat"
12.670 +
12.671 +defs
12.672 + ROR_ONE_primdef: "ROR_ONE == %a. LSR_ONE a + SBIT (LSBn a) HB"
12.673 +
12.674 +lemma ROR_ONE_def: "ALL a. ROR_ONE a = LSR_ONE a + SBIT (LSBn a) HB"
12.675 + by (import word32 ROR_ONE_def)
12.676 +
12.677 +consts
12.678 + RRXn :: "bool => nat => nat"
12.679 +
12.680 +defs
12.681 + RRXn_primdef: "RRXn == %c a. LSR_ONE a + SBIT c HB"
12.682 +
12.683 +lemma RRXn_def: "ALL c a. RRXn c a = LSR_ONE a + SBIT c HB"
12.684 + by (import word32 RRXn_def)
12.685 +
12.686 +lemma LSR_ONE_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (LSR_ONE a) (LSR_ONE b)"
12.687 + by (import word32 LSR_ONE_WELLDEF)
12.688 +
12.689 +lemma ASR_ONE_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (ASR_ONE a) (ASR_ONE b)"
12.690 + by (import word32 ASR_ONE_WELLDEF)
12.691 +
12.692 +lemma ROR_ONE_WELLDEF: "ALL a b. EQUIV a b --> EQUIV (ROR_ONE a) (ROR_ONE b)"
12.693 + by (import word32 ROR_ONE_WELLDEF)
12.694 +
12.695 +lemma RRX_WELLDEF: "ALL a b c. EQUIV a b --> EQUIV (RRXn c a) (RRXn c b)"
12.696 + by (import word32 RRX_WELLDEF)
12.697 +
12.698 +lemma LSR_ONE: "LSR_ONE = BITS HB 1"
12.699 + by (import word32 LSR_ONE)
12.700 +
12.701 +typedef (open) word32 = "{x. EX xa. x = EQUIV xa}"
12.702 + by (rule typedef_helper,import word32 word32_TY_DEF)
12.703 +
12.704 +lemmas word32_TY_DEF = typedef_hol2hol4 [OF type_definition_word32]
12.705 +
12.706 +consts
12.707 + mk_word32 :: "(nat => bool) => word32"
12.708 + dest_word32 :: "word32 => nat => bool"
12.709 +
12.710 +specification (dest_word32 mk_word32) word32_tybij: "(ALL a. mk_word32 (dest_word32 a) = a) &
12.711 +(ALL r. (EX x. r = EQUIV x) = (dest_word32 (mk_word32 r) = r))"
12.712 + by (import word32 word32_tybij)
12.713 +
12.714 +consts
12.715 + w_0 :: "word32"
12.716 +
12.717 +defs
12.718 + w_0_primdef: "w_0 == mk_word32 (EQUIV 0)"
12.719 +
12.720 +lemma w_0_def: "w_0 = mk_word32 (EQUIV 0)"
12.721 + by (import word32 w_0_def)
12.722 +
12.723 +consts
12.724 + w_1 :: "word32"
12.725 +
12.726 +defs
12.727 + w_1_primdef: "w_1 == mk_word32 (EQUIV AONE)"
12.728 +
12.729 +lemma w_1_def: "w_1 = mk_word32 (EQUIV AONE)"
12.730 + by (import word32 w_1_def)
12.731 +
12.732 +consts
12.733 + w_T :: "word32"
12.734 +
12.735 +defs
12.736 + w_T_primdef: "w_T == mk_word32 (EQUIV COMP0)"
12.737 +
12.738 +lemma w_T_def: "w_T = mk_word32 (EQUIV COMP0)"
12.739 + by (import word32 w_T_def)
12.740 +
12.741 +constdefs
12.742 + word_suc :: "word32 => word32"
12.743 + "word_suc == %T1. mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
12.744 +
12.745 +lemma word_suc: "ALL T1. word_suc T1 = mk_word32 (EQUIV (Suc (Eps (dest_word32 T1))))"
12.746 + by (import word32 word_suc)
12.747 +
12.748 +constdefs
12.749 + word_add :: "word32 => word32 => word32"
12.750 + "word_add ==
12.751 +%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
12.752 +
12.753 +lemma word_add: "ALL T1 T2.
12.754 + word_add T1 T2 =
12.755 + mk_word32 (EQUIV (Eps (dest_word32 T1) + Eps (dest_word32 T2)))"
12.756 + by (import word32 word_add)
12.757 +
12.758 +constdefs
12.759 + word_mul :: "word32 => word32 => word32"
12.760 + "word_mul ==
12.761 +%T1 T2. mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
12.762 +
12.763 +lemma word_mul: "ALL T1 T2.
12.764 + word_mul T1 T2 =
12.765 + mk_word32 (EQUIV (Eps (dest_word32 T1) * Eps (dest_word32 T2)))"
12.766 + by (import word32 word_mul)
12.767 +
12.768 +constdefs
12.769 + word_1comp :: "word32 => word32"
12.770 + "word_1comp == %T1. mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
12.771 +
12.772 +lemma word_1comp: "ALL T1. word_1comp T1 = mk_word32 (EQUIV (ONE_COMP (Eps (dest_word32 T1))))"
12.773 + by (import word32 word_1comp)
12.774 +
12.775 +constdefs
12.776 + word_2comp :: "word32 => word32"
12.777 + "word_2comp == %T1. mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
12.778 +
12.779 +lemma word_2comp: "ALL T1. word_2comp T1 = mk_word32 (EQUIV (TWO_COMP (Eps (dest_word32 T1))))"
12.780 + by (import word32 word_2comp)
12.781 +
12.782 +constdefs
12.783 + word_lsr1 :: "word32 => word32"
12.784 + "word_lsr1 == %T1. mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
12.785 +
12.786 +lemma word_lsr1: "ALL T1. word_lsr1 T1 = mk_word32 (EQUIV (LSR_ONE (Eps (dest_word32 T1))))"
12.787 + by (import word32 word_lsr1)
12.788 +
12.789 +constdefs
12.790 + word_asr1 :: "word32 => word32"
12.791 + "word_asr1 == %T1. mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
12.792 +
12.793 +lemma word_asr1: "ALL T1. word_asr1 T1 = mk_word32 (EQUIV (ASR_ONE (Eps (dest_word32 T1))))"
12.794 + by (import word32 word_asr1)
12.795 +
12.796 +constdefs
12.797 + word_ror1 :: "word32 => word32"
12.798 + "word_ror1 == %T1. mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
12.799 +
12.800 +lemma word_ror1: "ALL T1. word_ror1 T1 = mk_word32 (EQUIV (ROR_ONE (Eps (dest_word32 T1))))"
12.801 + by (import word32 word_ror1)
12.802 +
12.803 +consts
12.804 + RRX :: "bool => word32 => word32"
12.805 +
12.806 +defs
12.807 + RRX_primdef: "RRX == %T1 T2. mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
12.808 +
12.809 +lemma RRX_def: "ALL T1 T2. RRX T1 T2 = mk_word32 (EQUIV (RRXn T1 (Eps (dest_word32 T2))))"
12.810 + by (import word32 RRX_def)
12.811 +
12.812 +consts
12.813 + LSB :: "word32 => bool"
12.814 +
12.815 +defs
12.816 + LSB_primdef: "LSB == %T1. LSBn (Eps (dest_word32 T1))"
12.817 +
12.818 +lemma LSB_def: "ALL T1. LSB T1 = LSBn (Eps (dest_word32 T1))"
12.819 + by (import word32 LSB_def)
12.820 +
12.821 +consts
12.822 + MSB :: "word32 => bool"
12.823 +
12.824 +defs
12.825 + MSB_primdef: "MSB == %T1. MSBn (Eps (dest_word32 T1))"
12.826 +
12.827 +lemma MSB_def: "ALL T1. MSB T1 = MSBn (Eps (dest_word32 T1))"
12.828 + by (import word32 MSB_def)
12.829 +
12.830 +constdefs
12.831 + bitwise_or :: "word32 => word32 => word32"
12.832 + "bitwise_or ==
12.833 +%T1 T2. mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
12.834 +
12.835 +lemma bitwise_or: "ALL T1 T2.
12.836 + bitwise_or T1 T2 =
12.837 + mk_word32 (EQUIV (OR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
12.838 + by (import word32 bitwise_or)
12.839 +
12.840 +constdefs
12.841 + bitwise_eor :: "word32 => word32 => word32"
12.842 + "bitwise_eor ==
12.843 +%T1 T2.
12.844 + mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
12.845 +
12.846 +lemma bitwise_eor: "ALL T1 T2.
12.847 + bitwise_eor T1 T2 =
12.848 + mk_word32 (EQUIV (EOR (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
12.849 + by (import word32 bitwise_eor)
12.850 +
12.851 +constdefs
12.852 + bitwise_and :: "word32 => word32 => word32"
12.853 + "bitwise_and ==
12.854 +%T1 T2.
12.855 + mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
12.856 +
12.857 +lemma bitwise_and: "ALL T1 T2.
12.858 + bitwise_and T1 T2 =
12.859 + mk_word32 (EQUIV (AND (Eps (dest_word32 T1)) (Eps (dest_word32 T2))))"
12.860 + by (import word32 bitwise_and)
12.861 +
12.862 +consts
12.863 + TOw :: "word32 => word32"
12.864 +
12.865 +defs
12.866 + TOw_primdef: "TOw == %T1. mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
12.867 +
12.868 +lemma TOw_def: "ALL T1. TOw T1 = mk_word32 (EQUIV (MODw (Eps (dest_word32 T1))))"
12.869 + by (import word32 TOw_def)
12.870 +
12.871 +consts
12.872 + n2w :: "nat => word32"
12.873 +
12.874 +defs
12.875 + n2w_primdef: "n2w == %n. mk_word32 (EQUIV n)"
12.876 +
12.877 +lemma n2w_def: "ALL n. n2w n = mk_word32 (EQUIV n)"
12.878 + by (import word32 n2w_def)
12.879 +
12.880 +consts
12.881 + w2n :: "word32 => nat"
12.882 +
12.883 +defs
12.884 + w2n_primdef: "w2n == %w. MODw (Eps (dest_word32 w))"
12.885 +
12.886 +lemma w2n_def: "ALL w. w2n w = MODw (Eps (dest_word32 w))"
12.887 + by (import word32 w2n_def)
12.888 +
12.889 +lemma ADDw: "(ALL x. word_add w_0 x = x) &
12.890 +(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa))"
12.891 + by (import word32 ADDw)
12.892 +
12.893 +lemma ADD_0w: "ALL x. word_add x w_0 = x"
12.894 + by (import word32 ADD_0w)
12.895 +
12.896 +lemma ADD1w: "ALL x. word_suc x = word_add x w_1"
12.897 + by (import word32 ADD1w)
12.898 +
12.899 +lemma ADD_ASSOCw: "ALL x xa xb. word_add x (word_add xa xb) = word_add (word_add x xa) xb"
12.900 + by (import word32 ADD_ASSOCw)
12.901 +
12.902 +lemma ADD_CLAUSESw: "(ALL x. word_add w_0 x = x) &
12.903 +(ALL x. word_add x w_0 = x) &
12.904 +(ALL x xa. word_add (word_suc x) xa = word_suc (word_add x xa)) &
12.905 +(ALL x xa. word_add x (word_suc xa) = word_suc (word_add x xa))"
12.906 + by (import word32 ADD_CLAUSESw)
12.907 +
12.908 +lemma ADD_COMMw: "ALL x xa. word_add x xa = word_add xa x"
12.909 + by (import word32 ADD_COMMw)
12.910 +
12.911 +lemma ADD_INV_0_EQw: "ALL x xa. (word_add x xa = x) = (xa = w_0)"
12.912 + by (import word32 ADD_INV_0_EQw)
12.913 +
12.914 +lemma EQ_ADD_LCANCELw: "ALL x xa xb. (word_add x xa = word_add x xb) = (xa = xb)"
12.915 + by (import word32 EQ_ADD_LCANCELw)
12.916 +
12.917 +lemma EQ_ADD_RCANCELw: "ALL x xa xb. (word_add x xb = word_add xa xb) = (x = xa)"
12.918 + by (import word32 EQ_ADD_RCANCELw)
12.919 +
12.920 +lemma LEFT_ADD_DISTRIBw: "ALL x xa xb.
12.921 + word_mul xb (word_add x xa) = word_add (word_mul xb x) (word_mul xb xa)"
12.922 + by (import word32 LEFT_ADD_DISTRIBw)
12.923 +
12.924 +lemma MULT_ASSOCw: "ALL x xa xb. word_mul x (word_mul xa xb) = word_mul (word_mul x xa) xb"
12.925 + by (import word32 MULT_ASSOCw)
12.926 +
12.927 +lemma MULT_COMMw: "ALL x xa. word_mul x xa = word_mul xa x"
12.928 + by (import word32 MULT_COMMw)
12.929 +
12.930 +lemma MULT_CLAUSESw: "ALL x xa.
12.931 + word_mul w_0 x = w_0 &
12.932 + word_mul x w_0 = w_0 &
12.933 + word_mul w_1 x = x &
12.934 + word_mul x w_1 = x &
12.935 + word_mul (word_suc x) xa = word_add (word_mul x xa) xa &
12.936 + word_mul x (word_suc xa) = word_add x (word_mul x xa)"
12.937 + by (import word32 MULT_CLAUSESw)
12.938 +
12.939 +lemma TWO_COMP_ONE_COMP: "ALL x. word_2comp x = word_add (word_1comp x) w_1"
12.940 + by (import word32 TWO_COMP_ONE_COMP)
12.941 +
12.942 +lemma OR_ASSOCw: "ALL x xa xb.
12.943 + bitwise_or x (bitwise_or xa xb) = bitwise_or (bitwise_or x xa) xb"
12.944 + by (import word32 OR_ASSOCw)
12.945 +
12.946 +lemma OR_COMMw: "ALL x xa. bitwise_or x xa = bitwise_or xa x"
12.947 + by (import word32 OR_COMMw)
12.948 +
12.949 +lemma OR_IDEMw: "ALL x. bitwise_or x x = x"
12.950 + by (import word32 OR_IDEMw)
12.951 +
12.952 +lemma OR_ABSORBw: "ALL x xa. bitwise_and x (bitwise_or x xa) = x"
12.953 + by (import word32 OR_ABSORBw)
12.954 +
12.955 +lemma AND_ASSOCw: "ALL x xa xb.
12.956 + bitwise_and x (bitwise_and xa xb) = bitwise_and (bitwise_and x xa) xb"
12.957 + by (import word32 AND_ASSOCw)
12.958 +
12.959 +lemma AND_COMMw: "ALL x xa. bitwise_and x xa = bitwise_and xa x"
12.960 + by (import word32 AND_COMMw)
12.961 +
12.962 +lemma AND_IDEMw: "ALL x. bitwise_and x x = x"
12.963 + by (import word32 AND_IDEMw)
12.964 +
12.965 +lemma AND_ABSORBw: "ALL x xa. bitwise_or x (bitwise_and x xa) = x"
12.966 + by (import word32 AND_ABSORBw)
12.967 +
12.968 +lemma ONE_COMPw: "ALL x. word_1comp (word_1comp x) = x"
12.969 + by (import word32 ONE_COMPw)
12.970 +
12.971 +lemma RIGHT_AND_OVER_ORw: "ALL x xa xb.
12.972 + bitwise_and (bitwise_or x xa) xb =
12.973 + bitwise_or (bitwise_and x xb) (bitwise_and xa xb)"
12.974 + by (import word32 RIGHT_AND_OVER_ORw)
12.975 +
12.976 +lemma RIGHT_OR_OVER_ANDw: "ALL x xa xb.
12.977 + bitwise_or (bitwise_and x xa) xb =
12.978 + bitwise_and (bitwise_or x xb) (bitwise_or xa xb)"
12.979 + by (import word32 RIGHT_OR_OVER_ANDw)
12.980 +
12.981 +lemma DE_MORGAN_THMw: "ALL x xa.
12.982 + word_1comp (bitwise_and x xa) =
12.983 + bitwise_or (word_1comp x) (word_1comp xa) &
12.984 + word_1comp (bitwise_or x xa) = bitwise_and (word_1comp x) (word_1comp xa)"
12.985 + by (import word32 DE_MORGAN_THMw)
12.986 +
12.987 +lemma w_0: "w_0 = n2w 0"
12.988 + by (import word32 w_0)
12.989 +
12.990 +lemma w_1: "w_1 = n2w 1"
12.991 + by (import word32 w_1)
12.992 +
12.993 +lemma w_T: "w_T =
12.994 +n2w (NUMERAL
12.995 + (NUMERAL_BIT1
12.996 + (NUMERAL_BIT1
12.997 + (NUMERAL_BIT1
12.998 + (NUMERAL_BIT1
12.999 + (NUMERAL_BIT1
12.1000 + (NUMERAL_BIT1
12.1001 + (NUMERAL_BIT1
12.1002 + (NUMERAL_BIT1
12.1003 + (NUMERAL_BIT1
12.1004 + (NUMERAL_BIT1
12.1005 + (NUMERAL_BIT1
12.1006 + (NUMERAL_BIT1
12.1007 + (NUMERAL_BIT1
12.1008 + (NUMERAL_BIT1
12.1009 + (NUMERAL_BIT1
12.1010 + (NUMERAL_BIT1
12.1011 +(NUMERAL_BIT1
12.1012 + (NUMERAL_BIT1
12.1013 + (NUMERAL_BIT1
12.1014 + (NUMERAL_BIT1
12.1015 + (NUMERAL_BIT1
12.1016 + (NUMERAL_BIT1
12.1017 + (NUMERAL_BIT1
12.1018 + (NUMERAL_BIT1
12.1019 + (NUMERAL_BIT1
12.1020 + (NUMERAL_BIT1
12.1021 + (NUMERAL_BIT1
12.1022 + (NUMERAL_BIT1
12.1023 + (NUMERAL_BIT1
12.1024 + (NUMERAL_BIT1
12.1025 + (NUMERAL_BIT1
12.1026 + (NUMERAL_BIT1
12.1027 + ALT_ZERO)))))))))))))))))))))))))))))))))"
12.1028 + by (import word32 w_T)
12.1029 +
12.1030 +lemma ADD_TWO_COMP: "ALL x. word_add x (word_2comp x) = w_0"
12.1031 + by (import word32 ADD_TWO_COMP)
12.1032 +
12.1033 +lemma ADD_TWO_COMP2: "ALL x. word_add (word_2comp x) x = w_0"
12.1034 + by (import word32 ADD_TWO_COMP2)
12.1035 +
12.1036 +constdefs
12.1037 + word_sub :: "word32 => word32 => word32"
12.1038 + "word_sub == %a b. word_add a (word_2comp b)"
12.1039 +
12.1040 +lemma word_sub: "ALL a b. word_sub a b = word_add a (word_2comp b)"
12.1041 + by (import word32 word_sub)
12.1042 +
12.1043 +constdefs
12.1044 + word_lsl :: "word32 => nat => word32"
12.1045 + "word_lsl == %a n. word_mul a (n2w (2 ^ n))"
12.1046 +
12.1047 +lemma word_lsl: "ALL a n. word_lsl a n = word_mul a (n2w (2 ^ n))"
12.1048 + by (import word32 word_lsl)
12.1049 +
12.1050 +constdefs
12.1051 + word_lsr :: "word32 => nat => word32"
12.1052 + "word_lsr == %a n. (word_lsr1 ^ n) a"
12.1053 +
12.1054 +lemma word_lsr: "ALL a n. word_lsr a n = (word_lsr1 ^ n) a"
12.1055 + by (import word32 word_lsr)
12.1056 +
12.1057 +constdefs
12.1058 + word_asr :: "word32 => nat => word32"
12.1059 + "word_asr == %a n. (word_asr1 ^ n) a"
12.1060 +
12.1061 +lemma word_asr: "ALL a n. word_asr a n = (word_asr1 ^ n) a"
12.1062 + by (import word32 word_asr)
12.1063 +
12.1064 +constdefs
12.1065 + word_ror :: "word32 => nat => word32"
12.1066 + "word_ror == %a n. (word_ror1 ^ n) a"
12.1067 +
12.1068 +lemma word_ror: "ALL a n. word_ror a n = (word_ror1 ^ n) a"
12.1069 + by (import word32 word_ror)
12.1070 +
12.1071 +consts
12.1072 + BITw :: "nat => word32 => bool"
12.1073 +
12.1074 +defs
12.1075 + BITw_primdef: "BITw == %b n. bit b (w2n n)"
12.1076 +
12.1077 +lemma BITw_def: "ALL b n. BITw b n = bit b (w2n n)"
12.1078 + by (import word32 BITw_def)
12.1079 +
12.1080 +consts
12.1081 + BITSw :: "nat => nat => word32 => nat"
12.1082 +
12.1083 +defs
12.1084 + BITSw_primdef: "BITSw == %h l n. BITS h l (w2n n)"
12.1085 +
12.1086 +lemma BITSw_def: "ALL h l n. BITSw h l n = BITS h l (w2n n)"
12.1087 + by (import word32 BITSw_def)
12.1088 +
12.1089 +consts
12.1090 + SLICEw :: "nat => nat => word32 => nat"
12.1091 +
12.1092 +defs
12.1093 + SLICEw_primdef: "SLICEw == %h l n. SLICE h l (w2n n)"
12.1094 +
12.1095 +lemma SLICEw_def: "ALL h l n. SLICEw h l n = SLICE h l (w2n n)"
12.1096 + by (import word32 SLICEw_def)
12.1097 +
12.1098 +lemma TWO_COMP_ADD: "ALL a b. word_2comp (word_add a b) = word_add (word_2comp a) (word_2comp b)"
12.1099 + by (import word32 TWO_COMP_ADD)
12.1100 +
12.1101 +lemma TWO_COMP_ELIM: "ALL a. word_2comp (word_2comp a) = a"
12.1102 + by (import word32 TWO_COMP_ELIM)
12.1103 +
12.1104 +lemma ADD_SUB_ASSOC: "ALL a b c. word_sub (word_add a b) c = word_add a (word_sub b c)"
12.1105 + by (import word32 ADD_SUB_ASSOC)
12.1106 +
12.1107 +lemma ADD_SUB_SYM: "ALL a b c. word_sub (word_add a b) c = word_add (word_sub a c) b"
12.1108 + by (import word32 ADD_SUB_SYM)
12.1109 +
12.1110 +lemma SUB_EQUALw: "ALL a. word_sub a a = w_0"
12.1111 + by (import word32 SUB_EQUALw)
12.1112 +
12.1113 +lemma ADD_SUBw: "ALL a b. word_sub (word_add a b) b = a"
12.1114 + by (import word32 ADD_SUBw)
12.1115 +
12.1116 +lemma SUB_SUBw: "ALL a b c. word_sub a (word_sub b c) = word_sub (word_add a c) b"
12.1117 + by (import word32 SUB_SUBw)
12.1118 +
12.1119 +lemma ONE_COMP_TWO_COMP: "ALL a. word_1comp a = word_sub (word_2comp a) w_1"
12.1120 + by (import word32 ONE_COMP_TWO_COMP)
12.1121 +
12.1122 +lemma SUBw: "ALL m n. word_sub (word_suc m) n = word_suc (word_sub m n)"
12.1123 + by (import word32 SUBw)
12.1124 +
12.1125 +lemma ADD_EQ_SUBw: "ALL m n p. (word_add m n = p) = (m = word_sub p n)"
12.1126 + by (import word32 ADD_EQ_SUBw)
12.1127 +
12.1128 +lemma CANCEL_SUBw: "ALL m n p. (word_sub n p = word_sub m p) = (n = m)"
12.1129 + by (import word32 CANCEL_SUBw)
12.1130 +
12.1131 +lemma SUB_PLUSw: "ALL a b c. word_sub a (word_add b c) = word_sub (word_sub a b) c"
12.1132 + by (import word32 SUB_PLUSw)
12.1133 +
12.1134 +lemma word_nchotomy: "ALL w. EX n. w = n2w n"
12.1135 + by (import word32 word_nchotomy)
12.1136 +
12.1137 +lemma dest_word_mk_word_eq3: "ALL a. dest_word32 (mk_word32 (EQUIV a)) = EQUIV a"
12.1138 + by (import word32 dest_word_mk_word_eq3)
12.1139 +
12.1140 +lemma MODw_ELIM: "ALL n. n2w (MODw n) = n2w n"
12.1141 + by (import word32 MODw_ELIM)
12.1142 +
12.1143 +lemma w2n_EVAL: "ALL n. w2n (n2w n) = MODw n"
12.1144 + by (import word32 w2n_EVAL)
12.1145 +
12.1146 +lemma w2n_ELIM: "ALL a. n2w (w2n a) = a"
12.1147 + by (import word32 w2n_ELIM)
12.1148 +
12.1149 +lemma n2w_11: "ALL a b. (n2w a = n2w b) = (MODw a = MODw b)"
12.1150 + by (import word32 n2w_11)
12.1151 +
12.1152 +lemma ADD_EVAL: "word_add (n2w a) (n2w b) = n2w (a + b)"
12.1153 + by (import word32 ADD_EVAL)
12.1154 +
12.1155 +lemma MUL_EVAL: "word_mul (n2w a) (n2w b) = n2w (a * b)"
12.1156 + by (import word32 MUL_EVAL)
12.1157 +
12.1158 +lemma ONE_COMP_EVAL: "word_1comp (n2w a) = n2w (ONE_COMP a)"
12.1159 + by (import word32 ONE_COMP_EVAL)
12.1160 +
12.1161 +lemma TWO_COMP_EVAL: "word_2comp (n2w a) = n2w (TWO_COMP a)"
12.1162 + by (import word32 TWO_COMP_EVAL)
12.1163 +
12.1164 +lemma LSR_ONE_EVAL: "word_lsr1 (n2w a) = n2w (LSR_ONE a)"
12.1165 + by (import word32 LSR_ONE_EVAL)
12.1166 +
12.1167 +lemma ASR_ONE_EVAL: "word_asr1 (n2w a) = n2w (ASR_ONE a)"
12.1168 + by (import word32 ASR_ONE_EVAL)
12.1169 +
12.1170 +lemma ROR_ONE_EVAL: "word_ror1 (n2w a) = n2w (ROR_ONE a)"
12.1171 + by (import word32 ROR_ONE_EVAL)
12.1172 +
12.1173 +lemma RRX_EVAL: "RRX c (n2w a) = n2w (RRXn c a)"
12.1174 + by (import word32 RRX_EVAL)
12.1175 +
12.1176 +lemma LSB_EVAL: "LSB (n2w a) = LSBn a"
12.1177 + by (import word32 LSB_EVAL)
12.1178 +
12.1179 +lemma MSB_EVAL: "MSB (n2w a) = MSBn a"
12.1180 + by (import word32 MSB_EVAL)
12.1181 +
12.1182 +lemma OR_EVAL: "bitwise_or (n2w a) (n2w b) = n2w (OR a b)"
12.1183 + by (import word32 OR_EVAL)
12.1184 +
12.1185 +lemma EOR_EVAL: "bitwise_eor (n2w a) (n2w b) = n2w (EOR a b)"
12.1186 + by (import word32 EOR_EVAL)
12.1187 +
12.1188 +lemma AND_EVAL: "bitwise_and (n2w a) (n2w b) = n2w (AND a b)"
12.1189 + by (import word32 AND_EVAL)
12.1190 +
12.1191 +lemma BITS_EVAL: "ALL h l a. BITSw h l (n2w a) = BITS h l (MODw a)"
12.1192 + by (import word32 BITS_EVAL)
12.1193 +
12.1194 +lemma BIT_EVAL: "ALL b a. BITw b (n2w a) = bit b (MODw a)"
12.1195 + by (import word32 BIT_EVAL)
12.1196 +
12.1197 +lemma SLICE_EVAL: "ALL h l a. SLICEw h l (n2w a) = SLICE h l (MODw a)"
12.1198 + by (import word32 SLICE_EVAL)
12.1199 +
12.1200 +lemma LSL_ADD: "ALL a m n. word_lsl (word_lsl a m) n = word_lsl a (m + n)"
12.1201 + by (import word32 LSL_ADD)
12.1202 +
12.1203 +lemma LSR_ADD: "ALL x xa xb. word_lsr (word_lsr x xa) xb = word_lsr x (xa + xb)"
12.1204 + by (import word32 LSR_ADD)
12.1205 +
12.1206 +lemma ASR_ADD: "ALL x xa xb. word_asr (word_asr x xa) xb = word_asr x (xa + xb)"
12.1207 + by (import word32 ASR_ADD)
12.1208 +
12.1209 +lemma ROR_ADD: "ALL x xa xb. word_ror (word_ror x xa) xb = word_ror x (xa + xb)"
12.1210 + by (import word32 ROR_ADD)
12.1211 +
12.1212 +lemma LSL_LIMIT: "ALL w n. HB < n --> word_lsl w n = w_0"
12.1213 + by (import word32 LSL_LIMIT)
12.1214 +
12.1215 +lemma MOD_MOD_DIV: "ALL a b. INw (MODw a div 2 ^ b)"
12.1216 + by (import word32 MOD_MOD_DIV)
12.1217 +
12.1218 +lemma MOD_MOD_DIV_2EXP: "ALL a n. MODw (MODw a div 2 ^ n) div 2 = MODw a div 2 ^ Suc n"
12.1219 + by (import word32 MOD_MOD_DIV_2EXP)
12.1220 +
12.1221 +lemma LSR_EVAL: "ALL n. word_lsr (n2w a) n = n2w (MODw a div 2 ^ n)"
12.1222 + by (import word32 LSR_EVAL)
12.1223 +
12.1224 +lemma LSR_THM: "ALL x n. word_lsr (n2w n) x = n2w (BITS HB (min WL x) n)"
12.1225 + by (import word32 LSR_THM)
12.1226 +
12.1227 +lemma LSR_LIMIT: "ALL x w. HB < x --> word_lsr w x = w_0"
12.1228 + by (import word32 LSR_LIMIT)
12.1229 +
12.1230 +lemma LEFT_SHIFT_LESS: "ALL (n::nat) (m::nat) a::nat.
12.1231 + a < (2::nat) ^ m -->
12.1232 + (2::nat) ^ n + a * (2::nat) ^ n <= (2::nat) ^ (m + n)"
12.1233 + by (import word32 LEFT_SHIFT_LESS)
12.1234 +
12.1235 +lemma ROR_THM: "ALL x n.
12.1236 + word_ror (n2w n) x =
12.1237 + (let x' = x mod WL
12.1238 + in n2w (BITS HB x' n + BITS (x' - 1) 0 n * 2 ^ (WL - x')))"
12.1239 + by (import word32 ROR_THM)
12.1240 +
12.1241 +lemma ROR_CYCLE: "ALL x w. word_ror w (x * WL) = w"
12.1242 + by (import word32 ROR_CYCLE)
12.1243 +
12.1244 +lemma ASR_THM: "ALL x n.
12.1245 + word_asr (n2w n) x =
12.1246 + (let x' = min HB x; s = BITS HB x' n
12.1247 + in n2w (if MSBn n then 2 ^ WL - 2 ^ (WL - x') + s else s))"
12.1248 + by (import word32 ASR_THM)
12.1249 +
12.1250 +lemma ASR_LIMIT: "ALL x w. HB <= x --> word_asr w x = (if MSB w then w_T else w_0)"
12.1251 + by (import word32 ASR_LIMIT)
12.1252 +
12.1253 +lemma ZERO_SHIFT: "(ALL n. word_lsl w_0 n = w_0) &
12.1254 +(ALL n. word_asr w_0 n = w_0) &
12.1255 +(ALL n. word_lsr w_0 n = w_0) & (ALL n. word_ror w_0 n = w_0)"
12.1256 + by (import word32 ZERO_SHIFT)
12.1257 +
12.1258 +lemma ZERO_SHIFT2: "(ALL a. word_lsl a 0 = a) &
12.1259 +(ALL a. word_asr a 0 = a) &
12.1260 +(ALL a. word_lsr a 0 = a) & (ALL a. word_ror a 0 = a)"
12.1261 + by (import word32 ZERO_SHIFT2)
12.1262 +
12.1263 +lemma ASR_w_T: "ALL n. word_asr w_T n = w_T"
12.1264 + by (import word32 ASR_w_T)
12.1265 +
12.1266 +lemma ROR_w_T: "ALL n. word_ror w_T n = w_T"
12.1267 + by (import word32 ROR_w_T)
12.1268 +
12.1269 +lemma MODw_EVAL: "ALL x.
12.1270 + MODw x =
12.1271 + x mod
12.1272 + NUMERAL
12.1273 + (NUMERAL_BIT2
12.1274 + (NUMERAL_BIT1
12.1275 + (NUMERAL_BIT1
12.1276 + (NUMERAL_BIT1
12.1277 + (NUMERAL_BIT1
12.1278 + (NUMERAL_BIT1
12.1279 + (NUMERAL_BIT1
12.1280 + (NUMERAL_BIT1
12.1281 + (NUMERAL_BIT1
12.1282 + (NUMERAL_BIT1
12.1283 + (NUMERAL_BIT1
12.1284 + (NUMERAL_BIT1
12.1285 + (NUMERAL_BIT1
12.1286 + (NUMERAL_BIT1
12.1287 + (NUMERAL_BIT1
12.1288 + (NUMERAL_BIT1
12.1289 + (NUMERAL_BIT1
12.1290 +(NUMERAL_BIT1
12.1291 + (NUMERAL_BIT1
12.1292 + (NUMERAL_BIT1
12.1293 + (NUMERAL_BIT1
12.1294 + (NUMERAL_BIT1
12.1295 + (NUMERAL_BIT1
12.1296 + (NUMERAL_BIT1
12.1297 + (NUMERAL_BIT1
12.1298 + (NUMERAL_BIT1
12.1299 + (NUMERAL_BIT1
12.1300 + (NUMERAL_BIT1
12.1301 + (NUMERAL_BIT1
12.1302 + (NUMERAL_BIT1
12.1303 + (NUMERAL_BIT1
12.1304 + (NUMERAL_BIT1
12.1305 + ALT_ZERO))))))))))))))))))))))))))))))))"
12.1306 + by (import word32 MODw_EVAL)
12.1307 +
12.1308 +lemma ADD_EVAL2: "ALL b a. word_add (n2w a) (n2w b) = n2w (MODw (a + b))"
12.1309 + by (import word32 ADD_EVAL2)
12.1310 +
12.1311 +lemma MUL_EVAL2: "ALL b a. word_mul (n2w a) (n2w b) = n2w (MODw (a * b))"
12.1312 + by (import word32 MUL_EVAL2)
12.1313 +
12.1314 +lemma ONE_COMP_EVAL2: "ALL a.
12.1315 + word_1comp (n2w a) =
12.1316 + n2w (2 ^
12.1317 + NUMERAL
12.1318 + (NUMERAL_BIT2
12.1319 + (NUMERAL_BIT1
12.1320 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
12.1321 + 1 -
12.1322 + MODw a)"
12.1323 + by (import word32 ONE_COMP_EVAL2)
12.1324 +
12.1325 +lemma TWO_COMP_EVAL2: "ALL a.
12.1326 + word_2comp (n2w a) =
12.1327 + n2w (MODw
12.1328 + (2 ^
12.1329 + NUMERAL
12.1330 + (NUMERAL_BIT2
12.1331 + (NUMERAL_BIT1
12.1332 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))) -
12.1333 + MODw a))"
12.1334 + by (import word32 TWO_COMP_EVAL2)
12.1335 +
12.1336 +lemma LSR_ONE_EVAL2: "ALL a. word_lsr1 (n2w a) = n2w (MODw a div 2)"
12.1337 + by (import word32 LSR_ONE_EVAL2)
12.1338 +
12.1339 +lemma ASR_ONE_EVAL2: "ALL a.
12.1340 + word_asr1 (n2w a) =
12.1341 + n2w (MODw a div 2 +
12.1342 + SBIT (MSBn a)
12.1343 + (NUMERAL
12.1344 + (NUMERAL_BIT1
12.1345 + (NUMERAL_BIT1
12.1346 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
12.1347 + by (import word32 ASR_ONE_EVAL2)
12.1348 +
12.1349 +lemma ROR_ONE_EVAL2: "ALL a.
12.1350 + word_ror1 (n2w a) =
12.1351 + n2w (MODw a div 2 +
12.1352 + SBIT (LSBn a)
12.1353 + (NUMERAL
12.1354 + (NUMERAL_BIT1
12.1355 + (NUMERAL_BIT1
12.1356 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
12.1357 + by (import word32 ROR_ONE_EVAL2)
12.1358 +
12.1359 +lemma RRX_EVAL2: "ALL c a.
12.1360 + RRX c (n2w a) =
12.1361 + n2w (MODw a div 2 +
12.1362 + SBIT c
12.1363 + (NUMERAL
12.1364 + (NUMERAL_BIT1
12.1365 + (NUMERAL_BIT1
12.1366 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO)))))))"
12.1367 + by (import word32 RRX_EVAL2)
12.1368 +
12.1369 +lemma LSB_EVAL2: "ALL a. LSB (n2w a) = ODD a"
12.1370 + by (import word32 LSB_EVAL2)
12.1371 +
12.1372 +lemma MSB_EVAL2: "ALL a.
12.1373 + MSB (n2w a) =
12.1374 + bit (NUMERAL
12.1375 + (NUMERAL_BIT1
12.1376 + (NUMERAL_BIT1
12.1377 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
12.1378 + a"
12.1379 + by (import word32 MSB_EVAL2)
12.1380 +
12.1381 +lemma OR_EVAL2: "ALL b a.
12.1382 + bitwise_or (n2w a) (n2w b) =
12.1383 + n2w (BITWISE
12.1384 + (NUMERAL
12.1385 + (NUMERAL_BIT2
12.1386 + (NUMERAL_BIT1
12.1387 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
12.1388 + op | a b)"
12.1389 + by (import word32 OR_EVAL2)
12.1390 +
12.1391 +lemma AND_EVAL2: "ALL b a.
12.1392 + bitwise_and (n2w a) (n2w b) =
12.1393 + n2w (BITWISE
12.1394 + (NUMERAL
12.1395 + (NUMERAL_BIT2
12.1396 + (NUMERAL_BIT1
12.1397 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
12.1398 + op & a b)"
12.1399 + by (import word32 AND_EVAL2)
12.1400 +
12.1401 +lemma EOR_EVAL2: "ALL b a.
12.1402 + bitwise_eor (n2w a) (n2w b) =
12.1403 + n2w (BITWISE
12.1404 + (NUMERAL
12.1405 + (NUMERAL_BIT2
12.1406 + (NUMERAL_BIT1
12.1407 + (NUMERAL_BIT1 (NUMERAL_BIT1 (NUMERAL_BIT1 ALT_ZERO))))))
12.1408 + (%x y. x ~= y) a b)"
12.1409 + by (import word32 EOR_EVAL2)
12.1410 +
12.1411 +lemma BITWISE_EVAL2: "ALL n oper x y.
12.1412 + BITWISE n oper x y =
12.1413 + (if n = 0 then 0
12.1414 + else 2 * BITWISE (n - 1) oper (x div 2) (y div 2) +
12.1415 + (if oper (ODD x) (ODD y) then 1 else 0))"
12.1416 + by (import word32 BITWISE_EVAL2)
12.1417 +
12.1418 +lemma BITSwLT_THM: "ALL h l n. BITSw h l n < 2 ^ (Suc h - l)"
12.1419 + by (import word32 BITSwLT_THM)
12.1420 +
12.1421 +lemma BITSw_COMP_THM: "ALL h1 l1 h2 l2 n.
12.1422 + h2 + l1 <= h1 -->
12.1423 + BITS h2 l2 (BITSw h1 l1 n) = BITSw (h2 + l1) (l2 + l1) n"
12.1424 + by (import word32 BITSw_COMP_THM)
12.1425 +
12.1426 +lemma BITSw_DIV_THM: "ALL h l n x. BITSw h l x div 2 ^ n = BITSw h (l + n) x"
12.1427 + by (import word32 BITSw_DIV_THM)
12.1428 +
12.1429 +lemma BITw_THM: "ALL b n. BITw b n = (BITSw b b n = 1)"
12.1430 + by (import word32 BITw_THM)
12.1431 +
12.1432 +lemma SLICEw_THM: "ALL n h l. SLICEw h l n = BITSw h l n * 2 ^ l"
12.1433 + by (import word32 SLICEw_THM)
12.1434 +
12.1435 +lemma BITS_SLICEw_THM: "ALL h l n. BITS h l (SLICEw h l n) = BITSw h l n"
12.1436 + by (import word32 BITS_SLICEw_THM)
12.1437 +
12.1438 +lemma SLICEw_ZERO_THM: "ALL n h. SLICEw h 0 n = BITSw h 0 n"
12.1439 + by (import word32 SLICEw_ZERO_THM)
12.1440 +
12.1441 +lemma SLICEw_COMP_THM: "ALL h m l a.
12.1442 + Suc m <= h & l <= m --> SLICEw h (Suc m) a + SLICEw m l a = SLICEw h l a"
12.1443 + by (import word32 SLICEw_COMP_THM)
12.1444 +
12.1445 +lemma BITSw_ZERO: "ALL h l n. h < l --> BITSw h l n = 0"
12.1446 + by (import word32 BITSw_ZERO)
12.1447 +
12.1448 +lemma SLICEw_ZERO: "ALL h l n. h < l --> SLICEw h l n = 0"
12.1449 + by (import word32 SLICEw_ZERO)
12.1450 +
12.1451 +;end_setup
12.1452 +
12.1453 +end
12.1454 +
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
13.2 +++ b/src/HOL/Import/HOL/README Fri Apr 02 17:37:45 2004 +0200
13.3 @@ -0,0 +1,3 @@
13.4 +All the files in this directory (except this README, HOL4.thy, and
13.5 +ROOT.ML) are automatically generated. Edit the files in
13.6 +../Generate-HOL, if something needs to be changed.
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
14.2 +++ b/src/HOL/Import/HOL/ROOT.ML Fri Apr 02 17:37:45 2004 +0200
14.3 @@ -0,0 +1,4 @@
14.4 +with_path ".." use_thy "HOL4Compat";
14.5 +with_path ".." use_thy "HOL4Syntax";
14.6 +setmp quick_and_dirty true use_thy "HOL4Prob";
14.7 +setmp quick_and_dirty true use_thy "HOL4";
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
15.2 +++ b/src/HOL/Import/HOL/arithmetic.imp Fri Apr 02 17:37:45 2004 +0200
15.3 @@ -0,0 +1,271 @@
15.4 +import
15.5 +
15.6 +import_segment "hol4"
15.7 +
15.8 +def_maps
15.9 + "nat_elim__magic" > "nat_elim__magic_def"
15.10 + "ODD" > "ODD_def"
15.11 + "FACT" > "FACT_def"
15.12 + "EVEN" > "EVEN_def"
15.13 +
15.14 +const_maps
15.15 + "num_case" > "Nat.nat.nat_case"
15.16 + "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
15.17 + "NUMERAL_BIT2" > "HOL4Compat.NUMERAL_BIT2"
15.18 + "NUMERAL_BIT1" > "HOL4Compat.NUMERAL_BIT1"
15.19 + "NUMERAL" > "HOL4Compat.NUMERAL"
15.20 + "MOD" > "Divides.op mod" :: "nat => nat => nat"
15.21 + "MIN" > "HOL.min" :: "nat => nat => nat"
15.22 + "MAX" > "HOL.max" :: "nat => nat => nat"
15.23 + "FUNPOW" > "HOL4Compat.FUNPOW"
15.24 + "EXP" > "Nat.power" :: "nat => nat => nat"
15.25 + "DIV" > "Divides.op div" :: "nat => nat => nat"
15.26 + "ALT_ZERO" > "HOL4Compat.ALT_ZERO"
15.27 + ">=" > "HOL4Compat.nat_ge"
15.28 + ">" > "HOL4Compat.nat_gt"
15.29 + "<=" > "op <=" :: "nat => nat => bool"
15.30 + "-" > "op -" :: "nat => nat => nat"
15.31 + "+" > "op +" :: "nat => nat => nat"
15.32 + "*" > "op *" :: "nat => nat => nat"
15.33 +
15.34 +thm_maps
15.35 + "num_case_def" > "HOL4Compat.num_case_def"
15.36 + "num_case_cong" > "HOL4Base.arithmetic.num_case_cong"
15.37 + "num_case_compute" > "HOL4Base.arithmetic.num_case_compute"
15.38 + "num_CASES" > "Nat.nat.nchotomy"
15.39 + "nat_elim__magic_def" > "HOL4Base.arithmetic.nat_elim__magic_def"
15.40 + "nat_elim__magic" > "HOL4Base.arithmetic.nat_elim__magic"
15.41 + "ZERO_MOD" > "HOL4Base.arithmetic.ZERO_MOD"
15.42 + "ZERO_LESS_EXP" > "HOL4Base.arithmetic.ZERO_LESS_EXP"
15.43 + "ZERO_LESS_EQ" > "Nat.le0"
15.44 + "ZERO_DIV" > "HOL4Base.arithmetic.ZERO_DIV"
15.45 + "WOP" > "HOL4Base.arithmetic.WOP"
15.46 + "TWO" > "HOL4Base.arithmetic.TWO"
15.47 + "TIMES2" > "NatSimprocs.nat_mult_2"
15.48 + "SUC_SUB1" > "HOL4Base.arithmetic.SUC_SUB1"
15.49 + "SUC_ONE_ADD" > "NatBin.Suc_eq_add_numeral_1_left"
15.50 + "SUC_NOT" > "Nat.nat.simps_2"
15.51 + "SUC_ELIM_THM" > "HOL4Base.arithmetic.SUC_ELIM_THM"
15.52 + "SUC_ADD_SYM" > "HOL4Base.arithmetic.SUC_ADD_SYM"
15.53 + "SUB_SUB" > "NatArith.diff_diff_right"
15.54 + "SUB_RIGHT_SUB" > "Nat.diff_diff_left"
15.55 + "SUB_RIGHT_LESS_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_LESS_EQ"
15.56 + "SUB_RIGHT_LESS" > "HOL4Base.arithmetic.SUB_RIGHT_LESS"
15.57 + "SUB_RIGHT_GREATER_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER_EQ"
15.58 + "SUB_RIGHT_GREATER" > "HOL4Base.arithmetic.SUB_RIGHT_GREATER"
15.59 + "SUB_RIGHT_EQ" > "HOL4Base.arithmetic.SUB_RIGHT_EQ"
15.60 + "SUB_RIGHT_ADD" > "HOL4Base.arithmetic.SUB_RIGHT_ADD"
15.61 + "SUB_PLUS" > "Nat.diff_diff_left"
15.62 + "SUB_MONO_EQ" > "Nat.diff_Suc_Suc"
15.63 + "SUB_LESS_OR" > "HOL4Base.arithmetic.SUB_LESS_OR"
15.64 + "SUB_LESS_EQ_ADD" > "HOL4Base.arithmetic.SUB_LESS_EQ_ADD"
15.65 + "SUB_LESS_EQ" > "Nat.diff_le_self"
15.66 + "SUB_LESS_0" > "Nat.zero_less_diff"
15.67 + "SUB_LEFT_SUC" > "HOL4Base.arithmetic.SUB_LEFT_SUC"
15.68 + "SUB_LEFT_SUB" > "HOL4Base.arithmetic.SUB_LEFT_SUB"
15.69 + "SUB_LEFT_LESS_EQ" > "HOL4Base.arithmetic.SUB_LEFT_LESS_EQ"
15.70 + "SUB_LEFT_LESS" > "NatArith.less_diff_conv"
15.71 + "SUB_LEFT_GREATER_EQ" > "NatArith.le_diff_conv"
15.72 + "SUB_LEFT_GREATER" > "HOL4Base.arithmetic.SUB_LEFT_GREATER"
15.73 + "SUB_LEFT_EQ" > "HOL4Base.arithmetic.SUB_LEFT_EQ"
15.74 + "SUB_LEFT_ADD" > "HOL4Base.arithmetic.SUB_LEFT_ADD"
15.75 + "SUB_EQ_EQ_0" > "HOL4Base.arithmetic.SUB_EQ_EQ_0"
15.76 + "SUB_EQ_0" > "Nat.diff_is_0_eq"
15.77 + "SUB_EQUAL_0" > "Nat.diff_self_eq_0"
15.78 + "SUB_ELIM_THM" > "HOL4Base.arithmetic.SUB_ELIM_THM"
15.79 + "SUB_CANCEL" > "HOL4Base.arithmetic.SUB_CANCEL"
15.80 + "SUB_ADD" > "Nat.le_add_diff_inverse2"
15.81 + "SUB_0" > "HOL4Base.arithmetic.SUB_0"
15.82 + "SUB" > "HOL4Compat.SUB"
15.83 + "RIGHT_SUB_DISTRIB" > "Nat.nat_distrib_3"
15.84 + "RIGHT_ADD_DISTRIB" > "Nat.nat_distrib_1"
15.85 + "PRE_SUC_EQ" > "HOL4Base.arithmetic.PRE_SUC_EQ"
15.86 + "PRE_SUB1" > "HOL4Base.arithmetic.PRE_SUB1"
15.87 + "PRE_SUB" > "HOL4Base.arithmetic.PRE_SUB"
15.88 + "PRE_ELIM_THM" > "HOL4Base.arithmetic.PRE_ELIM_THM"
15.89 + "OR_LESS" > "Nat.Suc_le_lessD"
15.90 + "ONE" > "Nat.One_nat_def"
15.91 + "ODD_OR_EVEN" > "HOL4Base.arithmetic.ODD_OR_EVEN"
15.92 + "ODD_MULT" > "HOL4Base.arithmetic.ODD_MULT"
15.93 + "ODD_EXISTS" > "HOL4Base.arithmetic.ODD_EXISTS"
15.94 + "ODD_EVEN" > "HOL4Base.arithmetic.ODD_EVEN"
15.95 + "ODD_DOUBLE" > "HOL4Base.arithmetic.ODD_DOUBLE"
15.96 + "ODD_ADD" > "HOL4Base.arithmetic.ODD_ADD"
15.97 + "ODD" > "HOL4Base.arithmetic.ODD"
15.98 + "NUMERAL_DEF" > "HOL4Compat.NUMERAL_def"
15.99 + "NUMERAL_BIT2" > "HOL4Compat.NUMERAL_BIT2_def"
15.100 + "NUMERAL_BIT1" > "HOL4Compat.NUMERAL_BIT1_def"
15.101 + "NOT_ZERO_LT_ZERO" > "Nat.neq0_conv"
15.102 + "NOT_SUC_LESS_EQ_0" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ_0"
15.103 + "NOT_SUC_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_LESS_EQ"
15.104 + "NOT_SUC_ADD_LESS_EQ" > "HOL4Base.arithmetic.NOT_SUC_ADD_LESS_EQ"
15.105 + "NOT_ODD_EQ_EVEN" > "HOL4Base.arithmetic.NOT_ODD_EQ_EVEN"
15.106 + "NOT_NUM_EQ" > "HOL4Base.arithmetic.NOT_NUM_EQ"
15.107 + "NOT_LESS_EQUAL" > "Nat.not_le_iff_less"
15.108 + "NOT_LESS" > "Nat.not_less_iff_le"
15.109 + "NOT_LEQ" > "HOL4Base.arithmetic.NOT_LEQ"
15.110 + "NOT_GREATER_EQ" > "HOL4Base.arithmetic.NOT_GREATER_EQ"
15.111 + "NOT_GREATER" > "Nat.not_less_iff_le"
15.112 + "NOT_EXP_0" > "HOL4Base.arithmetic.NOT_EXP_0"
15.113 + "NORM_0" > "HOL4Base.arithmetic.NORM_0"
15.114 + "MULT_SYM" > "Nat.nat_mult_commute"
15.115 + "MULT_SUC_EQ" > "HOL4Base.arithmetic.MULT_SUC_EQ"
15.116 + "MULT_SUC" > "Nat.mult_Suc_right"
15.117 + "MULT_RIGHT_1" > "Nat.nat_mult_1_right"
15.118 + "MULT_MONO_EQ" > "Nat.Suc_mult_cancel1"
15.119 + "MULT_LESS_EQ_SUC" > "Nat.Suc_mult_le_cancel1"
15.120 + "MULT_LEFT_1" > "Nat.nat_mult_1"
15.121 + "MULT_INCREASES" > "HOL4Base.arithmetic.MULT_INCREASES"
15.122 + "MULT_EXP_MONO" > "HOL4Base.arithmetic.MULT_EXP_MONO"
15.123 + "MULT_EQ_1" > "HOL4Base.arithmetic.MULT_EQ_1"
15.124 + "MULT_EQ_0" > "Nat.mult_is_0"
15.125 + "MULT_DIV" > "Divides.div_mult_self_is_m"
15.126 + "MULT_COMM" > "Nat.nat_mult_commute"
15.127 + "MULT_CLAUSES" > "HOL4Base.arithmetic.MULT_CLAUSES"
15.128 + "MULT_ASSOC" > "Nat.nat_mult_assoc"
15.129 + "MULT_0" > "Nat.mult_0_right"
15.130 + "MULT" > "HOL4Compat.MULT"
15.131 + "MOD_UNIQUE" > "HOL4Base.arithmetic.MOD_UNIQUE"
15.132 + "MOD_TIMES2" > "HOL4Base.arithmetic.MOD_TIMES2"
15.133 + "MOD_TIMES" > "HOL4Base.arithmetic.MOD_TIMES"
15.134 + "MOD_PLUS" > "HOL4Base.arithmetic.MOD_PLUS"
15.135 + "MOD_P" > "HOL4Base.arithmetic.MOD_P"
15.136 + "MOD_ONE" > "Divides.mod_1"
15.137 + "MOD_MULT_MOD" > "HOL4Base.arithmetic.MOD_MULT_MOD"
15.138 + "MOD_MULT" > "HOL4Base.arithmetic.MOD_MULT"
15.139 + "MOD_MOD" > "HOL4Base.arithmetic.MOD_MOD"
15.140 + "MOD_EQ_0" > "HOL4Base.arithmetic.MOD_EQ_0"
15.141 + "MOD_COMMON_FACTOR" > "HOL4Base.arithmetic.MOD_COMMON_FACTOR"
15.142 + "MIN_MAX_PRED" > "HOL4Base.arithmetic.MIN_MAX_PRED"
15.143 + "MIN_MAX_LT" > "HOL4Base.arithmetic.MIN_MAX_LT"
15.144 + "MIN_MAX_EQ" > "HOL4Base.arithmetic.MIN_MAX_EQ"
15.145 + "MIN_LT" > "HOL4Base.arithmetic.MIN_LT"
15.146 + "MIN_LE" > "HOL4Base.arithmetic.MIN_LE"
15.147 + "MIN_IDEM" > "HOL.min_same"
15.148 + "MIN_DEF" > "HOL4Compat.MIN_DEF"
15.149 + "MIN_COMM" > "HOL.min_ac_2"
15.150 + "MIN_ASSOC" > "HOL.min_ac_1"
15.151 + "MIN_0" > "HOL4Base.arithmetic.MIN_0"
15.152 + "MAX_LT" > "HOL4Base.arithmetic.MAX_LT"
15.153 + "MAX_LE" > "HOL4Base.arithmetic.MAX_LE"
15.154 + "MAX_IDEM" > "HOL.max_same"
15.155 + "MAX_DEF" > "HOL4Compat.MAX_DEF"
15.156 + "MAX_COMM" > "HOL.max_ac_2"
15.157 + "MAX_ASSOC" > "HOL.max_ac_1"
15.158 + "MAX_0" > "HOL4Base.arithmetic.MAX_0"
15.159 + "LESS_TRANS" > "Nat.less_trans"
15.160 + "LESS_SUC_NOT" > "HOL4Base.arithmetic.LESS_SUC_NOT"
15.161 + "LESS_SUC_EQ_COR" > "Nat.Suc_lessI"
15.162 + "LESS_SUB_ADD_LESS" > "HOL4Base.arithmetic.LESS_SUB_ADD_LESS"
15.163 + "LESS_OR_EQ_ADD" > "HOL4Base.arithmetic.LESS_OR_EQ_ADD"
15.164 + "LESS_OR_EQ" > "HOL4Compat.LESS_OR_EQ"
15.165 + "LESS_OR" > "Nat.Suc_leI"
15.166 + "LESS_NOT_SUC" > "HOL4Base.arithmetic.LESS_NOT_SUC"
15.167 + "LESS_MULT_MONO" > "Nat.Suc_mult_less_cancel1"
15.168 + "LESS_MULT2" > "Ring_and_Field.mult_pos"
15.169 + "LESS_MONO_REV" > "Nat.Suc_less_SucD"
15.170 + "LESS_MONO_MULT" > "Nat.mult_le_mono1"
15.171 + "LESS_MONO_EQ" > "Nat.Suc_less_eq"
15.172 + "LESS_MONO_ADD_INV" > "Ring_and_Field.add_less_imp_less_right"
15.173 + "LESS_MONO_ADD_EQ" > "Ring_and_Field.add_less_cancel_right"
15.174 + "LESS_MONO_ADD" > "Nat.add_less_mono1"
15.175 + "LESS_MOD" > "Divides.mod_less"
15.176 + "LESS_LESS_SUC" > "HOL4Base.arithmetic.LESS_LESS_SUC"
15.177 + "LESS_LESS_EQ_TRANS" > "Nat.less_le_trans"
15.178 + "LESS_LESS_CASES" > "HOL4Base.arithmetic.LESS_LESS_CASES"
15.179 + "LESS_IMP_LESS_OR_EQ" > "Nat.le_simps_1"
15.180 + "LESS_IMP_LESS_ADD" > "Nat.trans_less_add1"
15.181 + "LESS_EXP_SUC_MONO" > "HOL4Base.arithmetic.LESS_EXP_SUC_MONO"
15.182 + "LESS_EQ_TRANS" > "Nat.le_trans"
15.183 + "LESS_EQ_SUC_REFL" > "HOL4Base.arithmetic.LESS_EQ_SUC_REFL"
15.184 + "LESS_EQ_SUB_LESS" > "HOL4Base.arithmetic.LESS_EQ_SUB_LESS"
15.185 + "LESS_EQ_REFL" > "Nat.le_refl"
15.186 + "LESS_EQ_MONO_ADD_EQ" > "Ring_and_Field.add_le_cancel_right"
15.187 + "LESS_EQ_MONO" > "Nat.Suc_le_mono"
15.188 + "LESS_EQ_LESS_TRANS" > "Nat.le_less_trans"
15.189 + "LESS_EQ_LESS_EQ_MONO" > "Nat.add_le_mono"
15.190 + "LESS_EQ_IMP_LESS_SUC" > "Nat.le_imp_less_Suc"
15.191 + "LESS_EQ_EXISTS" > "HOL4Base.arithmetic.LESS_EQ_EXISTS"
15.192 + "LESS_EQ_CASES" > "Nat.nat_le_linear"
15.193 + "LESS_EQ_ANTISYM" > "HOL4Base.arithmetic.LESS_EQ_ANTISYM"
15.194 + "LESS_EQ_ADD_SUB" > "Nat.diff_add_assoc"
15.195 + "LESS_EQ_ADD" > "Nat.le_add1"
15.196 + "LESS_EQ_0" > "Nat.le_0_eq"
15.197 + "LESS_EQUAL_ANTISYM" > "Nat.le_anti_sym"
15.198 + "LESS_EQUAL_ADD" > "HOL4Base.arithmetic.LESS_EQUAL_ADD"
15.199 + "LESS_EQ" > "Nat.le_simps_3"
15.200 + "LESS_DIV_EQ_ZERO" > "Divides.div_less"
15.201 + "LESS_CASES_IMP" > "HOL4Base.arithmetic.LESS_CASES_IMP"
15.202 + "LESS_CASES" > "HOL4Base.arithmetic.LESS_CASES"
15.203 + "LESS_ANTISYM" > "HOL4Base.arithmetic.LESS_ANTISYM"
15.204 + "LESS_ADD_SUC" > "HOL4Base.arithmetic.LESS_ADD_SUC"
15.205 + "LESS_ADD_NONZERO" > "HOL4Base.arithmetic.LESS_ADD_NONZERO"
15.206 + "LESS_ADD_1" > "HOL4Base.arithmetic.LESS_ADD_1"
15.207 + "LESS_ADD" > "HOL4Base.arithmetic.LESS_ADD"
15.208 + "LESS_0_CASES" > "HOL4Base.arithmetic.LESS_0_CASES"
15.209 + "LEFT_SUB_DISTRIB" > "Nat.nat_distrib_4"
15.210 + "LEFT_ADD_DISTRIB" > "Nat.nat_distrib_2"
15.211 + "LE" > "HOL4Base.arithmetic.LE"
15.212 + "INV_PRE_LESS_EQ" > "HOL4Base.arithmetic.INV_PRE_LESS_EQ"
15.213 + "INV_PRE_LESS" > "HOL4Base.arithmetic.INV_PRE_LESS"
15.214 + "INV_PRE_EQ" > "HOL4Base.arithmetic.INV_PRE_EQ"
15.215 + "GREATER_OR_EQ" > "HOL4Compat.GREATER_OR_EQ"
15.216 + "GREATER_EQ" > "HOL4Compat.real_ge"
15.217 + "GREATER_DEF" > "HOL4Compat.GREATER_DEF"
15.218 + "FUN_EQ_LEMMA" > "HOL4Base.arithmetic.FUN_EQ_LEMMA"
15.219 + "FUNPOW" > "HOL4Compat.FUNPOW"
15.220 + "FACT_LESS" > "HOL4Base.arithmetic.FACT_LESS"
15.221 + "FACT" > "HOL4Base.arithmetic.FACT"
15.222 + "EXP_INJECTIVE" > "Power.power_inject_exp"
15.223 + "EXP_EQ_1" > "HOL4Base.arithmetic.EXP_EQ_1"
15.224 + "EXP_EQ_0" > "HOL4Base.arithmetic.EXP_EQ_0"
15.225 + "EXP_ALWAYS_BIG_ENOUGH" > "HOL4Base.arithmetic.EXP_ALWAYS_BIG_ENOUGH"
15.226 + "EXP_ADD" > "Power.power_add"
15.227 + "EXP_1" > "HOL4Base.arithmetic.EXP_1"
15.228 + "EXP" > "HOL4Compat.EXP"
15.229 + "EXISTS_GREATEST" > "HOL4Base.arithmetic.EXISTS_GREATEST"
15.230 + "EVEN_OR_ODD" > "HOL4Base.arithmetic.EVEN_OR_ODD"
15.231 + "EVEN_ODD_EXISTS" > "HOL4Base.arithmetic.EVEN_ODD_EXISTS"
15.232 + "EVEN_ODD" > "HOL4Base.arithmetic.EVEN_ODD"
15.233 + "EVEN_MULT" > "HOL4Base.arithmetic.EVEN_MULT"
15.234 + "EVEN_EXISTS" > "HOL4Base.arithmetic.EVEN_EXISTS"
15.235 + "EVEN_DOUBLE" > "HOL4Base.arithmetic.EVEN_DOUBLE"
15.236 + "EVEN_AND_ODD" > "HOL4Base.arithmetic.EVEN_AND_ODD"
15.237 + "EVEN_ADD" > "HOL4Base.arithmetic.EVEN_ADD"
15.238 + "EVEN" > "HOL4Base.arithmetic.EVEN"
15.239 + "EQ_MULT_LCANCEL" > "NatBin.nat_mult_eq_cancel_disj"
15.240 + "EQ_MONO_ADD_EQ" > "Nat.nat_add_right_cancel"
15.241 + "EQ_LESS_EQ" > "HOL.order_eq_iff"
15.242 + "EQ_ADD_RCANCEL" > "Nat.nat_add_right_cancel"
15.243 + "EQ_ADD_LCANCEL" > "Nat.nat_add_left_cancel"
15.244 + "DIV_UNIQUE" > "HOL4Base.arithmetic.DIV_UNIQUE"
15.245 + "DIV_P" > "HOL4Base.arithmetic.DIV_P"
15.246 + "DIV_ONE" > "Divides.div_1"
15.247 + "DIV_MULT" > "HOL4Base.arithmetic.DIV_MULT"
15.248 + "DIV_LESS_EQ" > "HOL4Base.arithmetic.DIV_LESS_EQ"
15.249 + "DIV_LESS" > "Divides.div_less_dividend"
15.250 + "DIV_DIV_DIV_MULT" > "HOL4Base.arithmetic.DIV_DIV_DIV_MULT"
15.251 + "DIVMOD_ID" > "HOL4Base.arithmetic.DIVMOD_ID"
15.252 + "DIVISION" > "HOL4Compat.DIVISION"
15.253 + "DA" > "HOL4Base.arithmetic.DA"
15.254 + "COMPLETE_INDUCTION" > "Nat.less_induct"
15.255 + "CANCEL_SUB" > "NatArith.eq_diff_iff"
15.256 + "ALT_ZERO" > "HOL4Compat.ALT_ZERO_def"
15.257 + "ADD_SYM" > "Nat.nat_add_commute"
15.258 + "ADD_SUC" > "Nat.add_Suc_right"
15.259 + "ADD_SUB" > "Nat.diff_add_inverse2"
15.260 + "ADD_MONO_LESS_EQ" > "Nat.nat_add_left_cancel_le"
15.261 + "ADD_INV_0_EQ" > "HOL4Base.arithmetic.ADD_INV_0_EQ"
15.262 + "ADD_INV_0" > "Nat.add_eq_self_zero"
15.263 + "ADD_EQ_SUB" > "HOL4Base.arithmetic.ADD_EQ_SUB"
15.264 + "ADD_EQ_1" > "HOL4Base.arithmetic.ADD_EQ_1"
15.265 + "ADD_EQ_0" > "Nat.add_is_0"
15.266 + "ADD_DIV_ADD_DIV" > "HOL4Base.arithmetic.ADD_DIV_ADD_DIV"
15.267 + "ADD_COMM" > "Nat.nat_add_commute"
15.268 + "ADD_CLAUSES" > "HOL4Base.arithmetic.ADD_CLAUSES"
15.269 + "ADD_ASSOC" > "Nat.nat_add_assoc"
15.270 + "ADD_0" > "Nat.add_0_right"
15.271 + "ADD1" > "Presburger.Suc_plus1"
15.272 + "ADD" > "HOL4Compat.ADD"
15.273 +
15.274 +end
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
16.2 +++ b/src/HOL/Import/HOL/bits.imp Fri Apr 02 17:37:45 2004 +0200
16.3 @@ -0,0 +1,115 @@
16.4 +import
16.5 +
16.6 +import_segment "hol4"
16.7 +
16.8 +def_maps
16.9 + "bit" > "bit_def"
16.10 + "TIMES_2EXP" > "TIMES_2EXP_primdef"
16.11 + "SLICE" > "SLICE_primdef"
16.12 + "SBIT" > "SBIT_primdef"
16.13 + "MOD_2EXP" > "MOD_2EXP_primdef"
16.14 + "LSBn" > "LSBn_primdef"
16.15 + "DIV_2EXP" > "DIV_2EXP_primdef"
16.16 + "DIVMOD_2EXP" > "DIVMOD_2EXP_primdef"
16.17 + "DIV2" > "DIV2_primdef"
16.18 + "BITWISE" > "BITWISE_primdef"
16.19 + "BITS" > "BITS_primdef"
16.20 +
16.21 +const_maps
16.22 + "bit" > "HOL4Word32.bits.bit"
16.23 + "TIMES_2EXP" > "HOL4Word32.bits.TIMES_2EXP"
16.24 + "SLICE" > "HOL4Word32.bits.SLICE"
16.25 + "SBIT" > "HOL4Word32.bits.SBIT"
16.26 + "MOD_2EXP" > "HOL4Word32.bits.MOD_2EXP"
16.27 + "LSBn" > "HOL4Word32.bits.LSBn"
16.28 + "DIV_2EXP" > "HOL4Word32.bits.DIV_2EXP"
16.29 + "DIVMOD_2EXP" > "HOL4Word32.bits.DIVMOD_2EXP"
16.30 + "DIV2" > "HOL4Word32.bits.DIV2"
16.31 + "BITS" > "HOL4Word32.bits.BITS"
16.32 +
16.33 +const_renames
16.34 + "BIT" > "bit"
16.35 +
16.36 +thm_maps
16.37 + "bit_def" > "HOL4Word32.bits.bit_def"
16.38 + "ZERO_LT_TWOEXP" > "HOL4Word32.bits.ZERO_LT_TWOEXP"
16.39 + "TWOEXP_MONO2" > "HOL4Word32.bits.TWOEXP_MONO2"
16.40 + "TWOEXP_MONO" > "HOL4Word32.bits.TWOEXP_MONO"
16.41 + "TWOEXP_DIVISION" > "HOL4Word32.bits.TWOEXP_DIVISION"
16.42 + "TIMES_2EXP_primdef" > "HOL4Word32.bits.TIMES_2EXP_primdef"
16.43 + "TIMES_2EXP_def" > "HOL4Word32.bits.TIMES_2EXP_def"
16.44 + "SUC_SUB" > "HOL4Word32.bits.SUC_SUB"
16.45 + "SLICE_primdef" > "HOL4Word32.bits.SLICE_primdef"
16.46 + "SLICE_def" > "HOL4Word32.bits.SLICE_def"
16.47 + "SLICE_ZERO" > "HOL4Word32.bits.SLICE_ZERO"
16.48 + "SLICE_THM" > "HOL4Word32.bits.SLICE_THM"
16.49 + "SLICE_LEM3" > "HOL4Word32.bits.SLICE_LEM3"
16.50 + "SLICE_LEM2" > "HOL4Word32.bits.SLICE_LEM2"
16.51 + "SLICE_LEM1" > "HOL4Word32.bits.SLICE_LEM1"
16.52 + "SLICE_COMP_THM" > "HOL4Word32.bits.SLICE_COMP_THM"
16.53 + "SLICELT_THM" > "HOL4Word32.bits.SLICELT_THM"
16.54 + "SBIT_primdef" > "HOL4Word32.bits.SBIT_primdef"
16.55 + "SBIT_def" > "HOL4Word32.bits.SBIT_def"
16.56 + "SBIT_DIV" > "HOL4Word32.bits.SBIT_DIV"
16.57 + "ODD_MOD2_LEM" > "HOL4Word32.bits.ODD_MOD2_LEM"
16.58 + "NOT_ZERO_ADD1" > "Nat.not0_implies_Suc"
16.59 + "NOT_MOD2_LEM2" > "HOL4Word32.bits.NOT_MOD2_LEM2"
16.60 + "NOT_MOD2_LEM" > "HOL4Word32.bits.NOT_MOD2_LEM"
16.61 + "NOT_BITS2" > "HOL4Word32.bits.NOT_BITS2"
16.62 + "NOT_BITS" > "HOL4Word32.bits.NOT_BITS"
16.63 + "NOT_BIT" > "HOL4Word32.bits.NOT_BIT"
16.64 + "MOD_PLUS_RIGHT" > "HOL4Word32.bits.MOD_PLUS_RIGHT"
16.65 + "MOD_PLUS_1" > "HOL4Word32.bits.MOD_PLUS_1"
16.66 + "MOD_ADD_1" > "HOL4Word32.bits.MOD_ADD_1"
16.67 + "MOD_2EXP_primdef" > "HOL4Word32.bits.MOD_2EXP_primdef"
16.68 + "MOD_2EXP_def" > "HOL4Word32.bits.MOD_2EXP_def"
16.69 + "MOD_2EXP_MONO" > "HOL4Word32.bits.MOD_2EXP_MONO"
16.70 + "MOD_2EXP_LT" > "HOL4Word32.bits.MOD_2EXP_LT"
16.71 + "MOD_2EXP_LEM" > "HOL4Word32.bits.MOD_2EXP_LEM"
16.72 + "LSBn_primdef" > "HOL4Word32.bits.LSBn_primdef"
16.73 + "LSBn_def" > "HOL4Word32.bits.LSBn_def"
16.74 + "LSB_ODD" > "HOL4Word32.bits.LSB_ODD"
16.75 + "LESS_EXP_MULT2" > "HOL4Word32.bits.LESS_EXP_MULT2"
16.76 + "LESS_EQ_EXP_MULT" > "HOL4Word32.bits.LESS_EQ_EXP_MULT"
16.77 + "EXP_SUB_LESS_EQ" > "HOL4Word32.bits.EXP_SUB_LESS_EQ"
16.78 + "EVEN_MOD2_LEM" > "HOL4Word32.bits.EVEN_MOD2_LEM"
16.79 + "DIV_MULT_THM2" > "HOL4Word32.bits.DIV_MULT_THM2"
16.80 + "DIV_MULT_THM" > "HOL4Word32.bits.DIV_MULT_THM"
16.81 + "DIV_MULT_LEM" > "HOL4Word32.bits.DIV_MULT_LEM"
16.82 + "DIV_MULT_1" > "HOL4Word32.bits.DIV_MULT_1"
16.83 + "DIV_2EXP_primdef" > "HOL4Word32.bits.DIV_2EXP_primdef"
16.84 + "DIV_2EXP_def" > "HOL4Word32.bits.DIV_2EXP_def"
16.85 + "DIVMOD_2EXP_primdef" > "HOL4Word32.bits.DIVMOD_2EXP_primdef"
16.86 + "DIVMOD_2EXP_def" > "HOL4Word32.bits.DIVMOD_2EXP_def"
16.87 + "DIV2_primdef" > "HOL4Word32.bits.DIV2_primdef"
16.88 + "DIV2_def" > "HOL4Word32.bits.DIV2_def"
16.89 + "DIV1" > "HOL4Word32.bits.DIV1"
16.90 + "BIT_def" > "HOL4Word32.bits.BIT_def"
16.91 + "BIT_SLICE_THM" > "HOL4Word32.bits.BIT_SLICE_THM"
16.92 + "BIT_SLICE_LEM" > "HOL4Word32.bits.BIT_SLICE_LEM"
16.93 + "BIT_SLICE" > "HOL4Word32.bits.BIT_SLICE"
16.94 + "BIT_COMP_THM3" > "HOL4Word32.bits.BIT_COMP_THM3"
16.95 + "BIT_BITS_THM" > "HOL4Word32.bits.BIT_BITS_THM"
16.96 + "BITWISE_def" > "HOL4Word32.bits.BITWISE_def"
16.97 + "BITWISE_THM" > "HOL4Word32.bits.BITWISE_THM"
16.98 + "BITWISE_NOT_COR" > "HOL4Word32.bits.BITWISE_NOT_COR"
16.99 + "BITWISE_LT_2EXP" > "HOL4Word32.bits.BITWISE_LT_2EXP"
16.100 + "BITWISE_COR" > "HOL4Word32.bits.BITWISE_COR"
16.101 + "BITS_primdef" > "HOL4Word32.bits.BITS_primdef"
16.102 + "BITS_def" > "HOL4Word32.bits.BITS_def"
16.103 + "BITS_ZERO3" > "HOL4Word32.bits.BITS_ZERO3"
16.104 + "BITS_ZERO2" > "HOL4Word32.bits.BITS_ZERO2"
16.105 + "BITS_ZERO" > "HOL4Word32.bits.BITS_ZERO"
16.106 + "BITS_THM" > "HOL4Word32.bits.BITS_THM"
16.107 + "BITS_SUC_THM" > "HOL4Word32.bits.BITS_SUC_THM"
16.108 + "BITS_SUC" > "HOL4Word32.bits.BITS_SUC"
16.109 + "BITS_SLICE_THM2" > "HOL4Word32.bits.BITS_SLICE_THM2"
16.110 + "BITS_SLICE_THM" > "HOL4Word32.bits.BITS_SLICE_THM"
16.111 + "BITS_LT_HIGH" > "HOL4Word32.bits.BITS_LT_HIGH"
16.112 + "BITS_DIV_THM" > "HOL4Word32.bits.BITS_DIV_THM"
16.113 + "BITS_COMP_THM2" > "HOL4Word32.bits.BITS_COMP_THM2"
16.114 + "BITS_COMP_THM" > "HOL4Word32.bits.BITS_COMP_THM"
16.115 + "BITSLT_THM" > "HOL4Word32.bits.BITSLT_THM"
16.116 + "BITS2_THM" > "HOL4Word32.bits.BITS2_THM"
16.117 +
16.118 +end
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
17.2 +++ b/src/HOL/Import/HOL/bool.imp Fri Apr 02 17:37:45 2004 +0200
17.3 @@ -0,0 +1,195 @@
17.4 +import
17.5 +
17.6 +import_segment "hol4"
17.7 +
17.8 +def_maps
17.9 + "RES_SELECT" > "RES_SELECT_def"
17.10 + "RES_FORALL" > "RES_FORALL_def"
17.11 + "RES_EXISTS_UNIQUE" > "RES_EXISTS_UNIQUE_def"
17.12 + "RES_EXISTS" > "RES_EXISTS_def"
17.13 + "RES_ABSTRACT" > "RES_ABSTRACT_def"
17.14 + "IN" > "IN_def"
17.15 + "ARB" > "ARB_def"
17.16 +
17.17 +const_maps
17.18 + "~" > "Not"
17.19 + "bool_case" > "Datatype.bool.bool_case"
17.20 + "\\/" > "op |"
17.21 + "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
17.22 + "T" > "True"
17.23 + "RES_SELECT" > "HOL4Base.bool.RES_SELECT"
17.24 + "RES_FORALL" > "HOL4Base.bool.RES_FORALL"
17.25 + "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE"
17.26 + "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS"
17.27 + "ONTO" > "HOL4Setup.ONTO"
17.28 + "ONE_ONE" > "HOL4Setup.ONE_ONE"
17.29 + "LET" > "HOL4Compat.LET"
17.30 + "IN" > "HOL4Base.bool.IN"
17.31 + "F" > "False"
17.32 + "COND" > "If"
17.33 + "ARB" > "HOL4Base.bool.ARB"
17.34 + "?!" > "Ex1"
17.35 + "?" > "Ex"
17.36 + "/\\" > "op &"
17.37 + "!" > "All"
17.38 +
17.39 +thm_maps
17.40 + "bool_case_thm" > "HOL4Base.bool.bool_case_thm"
17.41 + "bool_case_ID" > "HOL4Base.bool.bool_case_ID"
17.42 + "bool_case_DEF" > "HOL4Compat.bool_case_DEF"
17.43 + "bool_INDUCT" > "Set.bool_induct"
17.44 + "boolAxiom" > "HOL4Base.bool.boolAxiom"
17.45 + "UNWIND_THM2" > "HOL.simp_thms_39"
17.46 + "UNWIND_THM1" > "HOL.simp_thms_40"
17.47 + "UNWIND_FORALL_THM2" > "HOL.simp_thms_41"
17.48 + "UNWIND_FORALL_THM1" > "HOL.simp_thms_42"
17.49 + "UEXISTS_SIMP" > "HOL4Base.bool.UEXISTS_SIMP"
17.50 + "UEXISTS_OR_THM" > "HOL4Base.bool.UEXISTS_OR_THM"
17.51 + "T_DEF" > "HOL.True_def"
17.52 + "TYPE_DEFINITION_THM" > "HOL4Setup.TYPE_DEFINITION"
17.53 + "TYPE_DEFINITION" > "HOL4Setup.TYPE_DEFINITION"
17.54 + "TRUTH" > "HOL.TrueI"
17.55 + "SWAP_FORALL_THM" > "HOL4Base.bool.SWAP_FORALL_THM"
17.56 + "SWAP_EXISTS_THM" > "HOL4Base.bool.SWAP_EXISTS_THM"
17.57 + "SKOLEM_THM" > "HOL4Base.bool.SKOLEM_THM"
17.58 + "SELECT_UNIQUE" > "HOL4Base.bool.SELECT_UNIQUE"
17.59 + "SELECT_THM" > "HOL4Setup.EXISTS_DEF"
17.60 + "SELECT_REFL_2" > "Hilbert_Choice.some_sym_eq_trivial"
17.61 + "SELECT_REFL" > "Hilbert_Choice.some_eq_trivial"
17.62 + "SELECT_AX" > "Hilbert_Choice.tfl_some"
17.63 + "RIGHT_OR_OVER_AND" > "HOL.disj_conj_distribR"
17.64 + "RIGHT_OR_EXISTS_THM" > "HOL.ex_simps_4"
17.65 + "RIGHT_FORALL_OR_THM" > "HOL.all_simps_4"
17.66 + "RIGHT_FORALL_IMP_THM" > "HOL.all_simps_6"
17.67 + "RIGHT_EXISTS_IMP_THM" > "HOL.ex_simps_6"
17.68 + "RIGHT_EXISTS_AND_THM" > "HOL.ex_simps_2"
17.69 + "RIGHT_AND_OVER_OR" > "HOL.conj_disj_distribR"
17.70 + "RIGHT_AND_FORALL_THM" > "HOL.all_simps_2"
17.71 + "RES_SELECT_def" > "HOL4Base.bool.RES_SELECT_def"
17.72 + "RES_SELECT_DEF" > "HOL4Base.bool.RES_SELECT_DEF"
17.73 + "RES_FORALL_def" > "HOL4Base.bool.RES_FORALL_def"
17.74 + "RES_FORALL_DEF" > "HOL4Base.bool.RES_FORALL_DEF"
17.75 + "RES_EXISTS_def" > "HOL4Base.bool.RES_EXISTS_def"
17.76 + "RES_EXISTS_UNIQUE_def" > "HOL4Base.bool.RES_EXISTS_UNIQUE_def"
17.77 + "RES_EXISTS_UNIQUE_DEF" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
17.78 + "RES_EXISTS_DEF" > "HOL4Base.bool.RES_EXISTS_DEF"
17.79 + "RES_ABSTRACT_DEF" > "HOL4Base.bool.RES_ABSTRACT_DEF"
17.80 + "REFL_CLAUSE" > "HOL.simp_thms_6"
17.81 + "OR_INTRO_THM2" > "HOL.disjI2"
17.82 + "OR_INTRO_THM1" > "HOL.disjI1"
17.83 + "OR_IMP_THM" > "HOL4Base.bool.OR_IMP_THM"
17.84 + "OR_ELIM_THM" > "Recdef.tfl_disjE"
17.85 + "OR_DEF" > "HOL.or_def"
17.86 + "OR_CONG" > "HOL4Base.bool.OR_CONG"
17.87 + "OR_CLAUSES" > "HOL4Base.bool.OR_CLAUSES"
17.88 + "ONTO_THM" > "HOL4Setup.ONTO_DEF"
17.89 + "ONTO_DEF" > "HOL4Setup.ONTO_DEF"
17.90 + "ONE_ONE_THM" > "HOL4Base.bool.ONE_ONE_THM"
17.91 + "ONE_ONE_DEF" > "HOL4Setup.ONE_ONE_DEF"
17.92 + "NOT_IMP" > "HOL.not_imp"
17.93 + "NOT_FORALL_THM" > "Inductive.basic_monos_15"
17.94 + "NOT_F" > "HOL.Eq_FalseI"
17.95 + "NOT_EXISTS_THM" > "Inductive.basic_monos_16"
17.96 + "NOT_DEF" > "HOL.simp_thms_19"
17.97 + "NOT_CLAUSES" > "HOL4Base.bool.NOT_CLAUSES"
17.98 + "NOT_AND" > "HOL4Base.bool.NOT_AND"
17.99 + "MONO_OR" > "Inductive.basic_monos_3"
17.100 + "MONO_NOT" > "HOL.rev_contrapos"
17.101 + "MONO_IMP" > "Set.imp_mono"
17.102 + "MONO_EXISTS" > "Inductive.basic_monos_5"
17.103 + "MONO_COND" > "HOL4Base.bool.MONO_COND"
17.104 + "MONO_AND" > "Hilbert_Choice.conj_forward"
17.105 + "MONO_ALL" > "Inductive.basic_monos_6"
17.106 + "LET_THM" > "HOL.Let_def"
17.107 + "LET_RATOR" > "HOL4Base.bool.LET_RATOR"
17.108 + "LET_RAND" > "HOL4Base.bool.LET_RAND"
17.109 + "LET_DEF" > "HOL4Compat.LET_def"
17.110 + "LET_CONG" > "Recdef.let_cong"
17.111 + "LEFT_OR_OVER_AND" > "HOL.disj_conj_distribL"
17.112 + "LEFT_OR_EXISTS_THM" > "HOL.ex_simps_3"
17.113 + "LEFT_FORALL_OR_THM" > "HOL.all_simps_3"
17.114 + "LEFT_FORALL_IMP_THM" > "HOL.imp_ex"
17.115 + "LEFT_EXISTS_IMP_THM" > "HOL.imp_all"
17.116 + "LEFT_EXISTS_AND_THM" > "HOL.ex_simps_1"
17.117 + "LEFT_AND_OVER_OR" > "HOL.conj_disj_distribL"
17.118 + "LEFT_AND_FORALL_THM" > "HOL.all_simps_1"
17.119 + "IN_def" > "HOL4Base.bool.IN_def"
17.120 + "IN_DEF" > "HOL4Base.bool.IN_DEF"
17.121 + "INFINITY_AX" > "HOL4Setup.INFINITY_AX"
17.122 + "IMP_F_EQ_F" > "HOL4Base.bool.IMP_F_EQ_F"
17.123 + "IMP_F" > "HOL.notI"
17.124 + "IMP_DISJ_THM" > "Inductive.basic_monos_11"
17.125 + "IMP_CONG" > "HOL.imp_cong"
17.126 + "IMP_CLAUSES" > "HOL4Base.bool.IMP_CLAUSES"
17.127 + "IMP_ANTISYM_AX" > "HOL4Setup.light_imp_as"
17.128 + "F_IMP" > "HOL4Base.bool.F_IMP"
17.129 + "F_DEF" > "HOL.False_def"
17.130 + "FUN_EQ_THM" > "Fun.expand_fun_eq"
17.131 + "FORALL_THM" > "HOL4Base.bool.FORALL_THM"
17.132 + "FORALL_SIMP" > "HOL.simp_thms_35"
17.133 + "FORALL_DEF" > "HOL.All_def"
17.134 + "FORALL_AND_THM" > "HOL.all_conj_distrib"
17.135 + "FALSITY" > "HOL.FalseE"
17.136 + "EXISTS_UNIQUE_THM" > "HOL4Compat.EXISTS_UNIQUE_DEF"
17.137 + "EXISTS_UNIQUE_REFL" > "HOL.ex1_eq_1"
17.138 + "EXISTS_UNIQUE_DEF" > "HOL4Compat.EXISTS_UNIQUE_DEF"
17.139 + "EXISTS_THM" > "HOL4Base.bool.EXISTS_THM"
17.140 + "EXISTS_SIMP" > "HOL.simp_thms_36"
17.141 + "EXISTS_REFL" > "HOL.simp_thms_37"
17.142 + "EXISTS_OR_THM" > "HOL.ex_disj_distrib"
17.143 + "EXISTS_DEF" > "HOL4Setup.EXISTS_DEF"
17.144 + "EXCLUDED_MIDDLE" > "HOL4Base.bool.EXCLUDED_MIDDLE"
17.145 + "ETA_THM" > "Presburger.fm_modd_pinf"
17.146 + "ETA_AX" > "Presburger.fm_modd_pinf"
17.147 + "EQ_TRANS" > "Set.basic_trans_rules_31"
17.148 + "EQ_SYM_EQ" > "HOL.eq_sym_conv"
17.149 + "EQ_SYM" > "HOL.meta_eq_to_obj_eq"
17.150 + "EQ_REFL" > "Presburger.fm_modd_pinf"
17.151 + "EQ_IMP_THM" > "HOL.iff_conv_conj_imp"
17.152 + "EQ_EXT" > "HOL.meta_eq_to_obj_eq"
17.153 + "EQ_EXPAND" > "HOL4Base.bool.EQ_EXPAND"
17.154 + "EQ_CLAUSES" > "HOL4Base.bool.EQ_CLAUSES"
17.155 + "DISJ_SYM" > "HOL.disj_comms_1"
17.156 + "DISJ_IMP_THM" > "HOL.imp_disjL"
17.157 + "DISJ_COMM" > "HOL.disj_comms_1"
17.158 + "DISJ_ASSOC" > "Recdef.tfl_disj_assoc"
17.159 + "DE_MORGAN_THM" > "HOL4Base.bool.DE_MORGAN_THM"
17.160 + "CONJ_SYM" > "HOL.conj_comms_1"
17.161 + "CONJ_COMM" > "HOL.conj_comms_1"
17.162 + "CONJ_ASSOC" > "HOL.conj_assoc"
17.163 + "COND_RATOR" > "HOL4Base.bool.COND_RATOR"
17.164 + "COND_RAND" > "HOL.if_distrib"
17.165 + "COND_ID" > "HOL.if_cancel"
17.166 + "COND_EXPAND" > "HOL4Base.bool.COND_EXPAND"
17.167 + "COND_DEF" > "HOL4Compat.COND_DEF"
17.168 + "COND_CONG" > "HOL4Base.bool.COND_CONG"
17.169 + "COND_CLAUSES" > "HOL4Base.bool.COND_CLAUSES"
17.170 + "COND_ABS" > "HOL4Base.bool.COND_ABS"
17.171 + "BOTH_FORALL_OR_THM" > "HOL4Base.bool.BOTH_FORALL_OR_THM"
17.172 + "BOTH_FORALL_IMP_THM" > "HOL4Base.bool.BOTH_FORALL_IMP_THM"
17.173 + "BOTH_EXISTS_IMP_THM" > "HOL4Base.bool.BOTH_EXISTS_IMP_THM"
17.174 + "BOTH_EXISTS_AND_THM" > "HOL4Base.bool.BOTH_EXISTS_AND_THM"
17.175 + "BOOL_FUN_INDUCT" > "HOL4Base.bool.BOOL_FUN_INDUCT"
17.176 + "BOOL_FUN_CASES_THM" > "HOL4Base.bool.BOOL_FUN_CASES_THM"
17.177 + "BOOL_EQ_DISTINCT" > "HOL4Base.bool.BOOL_EQ_DISTINCT"
17.178 + "BOOL_CASES_AX" > "HOL.True_or_False"
17.179 + "BETA_THM" > "Presburger.fm_modd_pinf"
17.180 + "ARB_def" > "HOL4Base.bool.ARB_def"
17.181 + "ARB_DEF" > "HOL4Base.bool.ARB_DEF"
17.182 + "AND_INTRO_THM" > "HOL.conjI"
17.183 + "AND_IMP_INTRO" > "HOL.imp_conjL"
17.184 + "AND_DEF" > "HOL.and_def"
17.185 + "AND_CONG" > "HOL4Base.bool.AND_CONG"
17.186 + "AND_CLAUSES" > "HOL4Base.bool.AND_CLAUSES"
17.187 + "AND2_THM" > "HOL.conjunct2"
17.188 + "AND1_THM" > "HOL.conjunct1"
17.189 + "ABS_SIMP" > "Presburger.fm_modd_pinf"
17.190 + "ABS_REP_THM" > "HOL4Base.bool.ABS_REP_THM"
17.191 +
17.192 +ignore_thms
17.193 + "UNBOUNDED_THM"
17.194 + "UNBOUNDED_DEF"
17.195 + "BOUNDED_THM"
17.196 + "BOUNDED_DEF"
17.197 +
17.198 +end
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
18.2 +++ b/src/HOL/Import/HOL/boolean_sequence.imp Fri Apr 02 17:37:45 2004 +0200
18.3 @@ -0,0 +1,39 @@
18.4 +import
18.5 +
18.6 +import_segment "hol4"
18.7 +
18.8 +def_maps
18.9 + "STL" > "STL_primdef"
18.10 + "STAKE" > "STAKE_primdef"
18.11 + "SHD" > "SHD_primdef"
18.12 + "SDROP" > "SDROP_primdef"
18.13 + "SDEST" > "SDEST_primdef"
18.14 + "SCONST" > "SCONST_primdef"
18.15 + "SCONS" > "SCONS_primdef"
18.16 +
18.17 +const_maps
18.18 + "STL" > "HOL4Prob.boolean_sequence.STL"
18.19 + "SHD" > "HOL4Prob.boolean_sequence.SHD"
18.20 + "SDEST" > "HOL4Prob.boolean_sequence.SDEST"
18.21 + "SCONST" > "HOL4Prob.boolean_sequence.SCONST"
18.22 +
18.23 +thm_maps
18.24 + "STL_primdef" > "HOL4Prob.boolean_sequence.STL_primdef"
18.25 + "STL_def" > "HOL4Prob.boolean_sequence.STL_def"
18.26 + "STL_SCONST" > "HOL4Prob.boolean_sequence.STL_SCONST"
18.27 + "STL_SCONS" > "HOL4Prob.boolean_sequence.STL_SCONS"
18.28 + "STAKE_def" > "HOL4Prob.boolean_sequence.STAKE_def"
18.29 + "SHD_primdef" > "HOL4Prob.boolean_sequence.SHD_primdef"
18.30 + "SHD_def" > "HOL4Prob.boolean_sequence.SHD_def"
18.31 + "SHD_STL_ISO" > "HOL4Prob.boolean_sequence.SHD_STL_ISO"
18.32 + "SHD_SCONST" > "HOL4Prob.boolean_sequence.SHD_SCONST"
18.33 + "SHD_SCONS" > "HOL4Prob.boolean_sequence.SHD_SCONS"
18.34 + "SDROP_def" > "HOL4Prob.boolean_sequence.SDROP_def"
18.35 + "SDEST_primdef" > "HOL4Prob.boolean_sequence.SDEST_primdef"
18.36 + "SDEST_def" > "HOL4Prob.boolean_sequence.SDEST_def"
18.37 + "SCONS_def" > "HOL4Prob.boolean_sequence.SCONS_def"
18.38 + "SCONS_SURJ" > "HOL4Prob.boolean_sequence.SCONS_SURJ"
18.39 + "SCONST_primdef" > "HOL4Prob.boolean_sequence.SCONST_primdef"
18.40 + "SCONST_def" > "HOL4Prob.boolean_sequence.SCONST_def"
18.41 +
18.42 +end
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
19.2 +++ b/src/HOL/Import/HOL/bword_arith.imp Fri Apr 02 17:37:45 2004 +0200
19.3 @@ -0,0 +1,27 @@
19.4 +import
19.5 +
19.6 +import_segment "hol4"
19.7 +
19.8 +def_maps
19.9 + "ICARRY" > "ICARRY_def"
19.10 + "ACARRY" > "ACARRY_def"
19.11 +
19.12 +thm_maps
19.13 + "WSEG_NBWORD_ADD" > "HOL4Vec.bword_arith.WSEG_NBWORD_ADD"
19.14 + "ICARRY_WSEG" > "HOL4Vec.bword_arith.ICARRY_WSEG"
19.15 + "ICARRY_DEF" > "HOL4Vec.bword_arith.ICARRY_DEF"
19.16 + "BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.BNVAL_LESS_EQ"
19.17 + "ADD_WORD_SPLIT" > "HOL4Vec.bword_arith.ADD_WORD_SPLIT"
19.18 + "ADD_NBWORD_EQ0_SPLIT" > "HOL4Vec.bword_arith.ADD_NBWORD_EQ0_SPLIT"
19.19 + "ADD_BV_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ1"
19.20 + "ADD_BV_BNVAL_LESS_EQ" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_LESS_EQ"
19.21 + "ADD_BV_BNVAL_DIV_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BV_BNVAL_DIV_LESS_EQ1"
19.22 + "ADD_BNVAL_LESS_EQ1" > "HOL4Vec.bword_arith.ADD_BNVAL_LESS_EQ1"
19.23 + "ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_WSEG"
19.24 + "ACARRY_MSB" > "HOL4Vec.bword_arith.ACARRY_MSB"
19.25 + "ACARRY_EQ_ICARRY" > "HOL4Vec.bword_arith.ACARRY_EQ_ICARRY"
19.26 + "ACARRY_EQ_ADD_DIV" > "HOL4Vec.bword_arith.ACARRY_EQ_ADD_DIV"
19.27 + "ACARRY_DEF" > "HOL4Vec.bword_arith.ACARRY_DEF"
19.28 + "ACARRY_ACARRY_WSEG" > "HOL4Vec.bword_arith.ACARRY_ACARRY_WSEG"
19.29 +
19.30 +end
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
20.2 +++ b/src/HOL/Import/HOL/bword_bitop.imp Fri Apr 02 17:37:45 2004 +0200
20.3 @@ -0,0 +1,23 @@
20.4 +import
20.5 +
20.6 +import_segment "hol4"
20.7 +
20.8 +def_maps
20.9 + "WXOR" > "WXOR_def"
20.10 + "WOR" > "WOR_def"
20.11 + "WNOT" > "WNOT_def"
20.12 + "WAND" > "WAND_def"
20.13 +
20.14 +thm_maps
20.15 + "WXOR_DEF" > "HOL4Vec.bword_bitop.WXOR_DEF"
20.16 + "WOR_DEF" > "HOL4Vec.bword_bitop.WOR_DEF"
20.17 + "WNOT_WNOT" > "HOL4Vec.bword_bitop.WNOT_WNOT"
20.18 + "WNOT_DEF" > "HOL4Vec.bword_bitop.WNOT_DEF"
20.19 + "WCAT_WNOT" > "HOL4Vec.bword_bitop.WCAT_WNOT"
20.20 + "WAND_DEF" > "HOL4Vec.bword_bitop.WAND_DEF"
20.21 + "PBITOP_WNOT" > "HOL4Vec.bword_bitop.PBITOP_WNOT"
20.22 + "PBITBOP_WXOR" > "HOL4Vec.bword_bitop.PBITBOP_WXOR"
20.23 + "PBITBOP_WOR" > "HOL4Vec.bword_bitop.PBITBOP_WOR"
20.24 + "PBITBOP_WAND" > "HOL4Vec.bword_bitop.PBITBOP_WAND"
20.25 +
20.26 +end
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
21.2 +++ b/src/HOL/Import/HOL/bword_num.imp Fri Apr 02 17:37:45 2004 +0200
21.3 @@ -0,0 +1,58 @@
21.4 +import
21.5 +
21.6 +import_segment "hol4"
21.7 +
21.8 +def_maps
21.9 + "VB" > "VB_def"
21.10 + "NBWORD" > "NBWORD_def"
21.11 + "BV" > "BV_def"
21.12 + "BNVAL" > "BNVAL_def"
21.13 +
21.14 +const_maps
21.15 + "VB" > "HOL4Vec.bword_num.VB"
21.16 + "NBWORD" > "HOL4Vec.bword_num.NBWORD"
21.17 + "BV" > "HOL4Vec.bword_num.BV"
21.18 +
21.19 +thm_maps
21.20 + "ZERO_WORD_VAL" > "HOL4Vec.bword_num.ZERO_WORD_VAL"
21.21 + "WSPLIT_NBWORD_0" > "HOL4Vec.bword_num.WSPLIT_NBWORD_0"
21.22 + "WSEG_NBWORD_SUC" > "HOL4Vec.bword_num.WSEG_NBWORD_SUC"
21.23 + "WSEG_NBWORD" > "HOL4Vec.bword_num.WSEG_NBWORD"
21.24 + "WORDLEN_NBWORD" > "HOL4Vec.bword_num.WORDLEN_NBWORD"
21.25 + "WCAT_NBWORD_0" > "HOL4Vec.bword_num.WCAT_NBWORD_0"
21.26 + "VB_def" > "HOL4Vec.bword_num.VB_def"
21.27 + "VB_DEF" > "HOL4Vec.bword_num.VB_DEF"
21.28 + "VB_BV" > "HOL4Vec.bword_num.VB_BV"
21.29 + "PWORDLEN_NBWORD" > "HOL4Vec.bword_num.PWORDLEN_NBWORD"
21.30 + "NBWORD_def" > "HOL4Vec.bword_num.NBWORD_def"
21.31 + "NBWORD_SUC_WSEG" > "HOL4Vec.bword_num.NBWORD_SUC_WSEG"
21.32 + "NBWORD_SUC_FST" > "HOL4Vec.bword_num.NBWORD_SUC_FST"
21.33 + "NBWORD_SUC" > "HOL4Vec.bword_num.NBWORD_SUC"
21.34 + "NBWORD_SPLIT" > "HOL4Vec.bword_num.NBWORD_SPLIT"
21.35 + "NBWORD_MOD" > "HOL4Vec.bword_num.NBWORD_MOD"
21.36 + "NBWORD_DEF" > "HOL4Vec.bword_num.NBWORD_DEF"
21.37 + "NBWORD_BNVAL" > "HOL4Vec.bword_num.NBWORD_BNVAL"
21.38 + "NBWORD0" > "HOL4Vec.bword_num.NBWORD0"
21.39 + "MSB_NBWORD" > "HOL4Vec.bword_num.MSB_NBWORD"
21.40 + "EQ_NBWORD0_SPLIT" > "HOL4Vec.bword_num.EQ_NBWORD0_SPLIT"
21.41 + "DOUBL_EQ_SHL" > "HOL4Vec.bword_num.DOUBL_EQ_SHL"
21.42 + "BV_def" > "HOL4Vec.bword_num.BV_def"
21.43 + "BV_VB" > "HOL4Vec.bword_num.BV_VB"
21.44 + "BV_LESS_2" > "HOL4Vec.bword_num.BV_LESS_2"
21.45 + "BV_DEF" > "HOL4Vec.bword_num.BV_DEF"
21.46 + "BNVAL_WCAT2" > "HOL4Vec.bword_num.BNVAL_WCAT2"
21.47 + "BNVAL_WCAT1" > "HOL4Vec.bword_num.BNVAL_WCAT1"
21.48 + "BNVAL_WCAT" > "HOL4Vec.bword_num.BNVAL_WCAT"
21.49 + "BNVAL_ONTO" > "HOL4Vec.bword_num.BNVAL_ONTO"
21.50 + "BNVAL_NVAL" > "HOL4Vec.bword_num.BNVAL_NVAL"
21.51 + "BNVAL_NBWORD" > "HOL4Vec.bword_num.BNVAL_NBWORD"
21.52 + "BNVAL_MAX" > "HOL4Vec.bword_num.BNVAL_MAX"
21.53 + "BNVAL_DEF" > "HOL4Vec.bword_num.BNVAL_DEF"
21.54 + "BNVAL_11" > "HOL4Vec.bword_num.BNVAL_11"
21.55 + "BNVAL0" > "HOL4Vec.bword_num.BNVAL0"
21.56 + "BIT_NBWORD0" > "HOL4Vec.bword_num.BIT_NBWORD0"
21.57 + "ADD_BNVAL_SPLIT" > "HOL4Vec.bword_num.ADD_BNVAL_SPLIT"
21.58 + "ADD_BNVAL_RIGHT" > "HOL4Vec.bword_num.ADD_BNVAL_RIGHT"
21.59 + "ADD_BNVAL_LEFT" > "HOL4Vec.bword_num.ADD_BNVAL_LEFT"
21.60 +
21.61 +end
22.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
22.2 +++ b/src/HOL/Import/HOL/combin.imp Fri Apr 02 17:37:45 2004 +0200
22.3 @@ -0,0 +1,41 @@
22.4 +import
22.5 +
22.6 +import_segment "hol4"
22.7 +
22.8 +def_maps
22.9 + "W" > "W_def"
22.10 + "S" > "S_def"
22.11 + "K" > "K_def"
22.12 + "I" > "I_def"
22.13 + "C" > "C_def"
22.14 +
22.15 +const_maps
22.16 + "o" > "Fun.comp"
22.17 + "W" > "HOL4Base.combin.W"
22.18 + "S" > "HOL4Base.combin.S"
22.19 + "K" > "HOL4Base.combin.K"
22.20 + "I" > "HOL4Base.combin.I"
22.21 + "C" > "HOL4Base.combin.C"
22.22 +
22.23 +thm_maps
22.24 + "o_THM" > "Fun.o_apply"
22.25 + "o_DEF" > "Fun.o_apply"
22.26 + "o_ASSOC" > "Fun.o_assoc"
22.27 + "W_def" > "HOL4Base.combin.W_def"
22.28 + "W_THM" > "HOL4Base.combin.W_def"
22.29 + "W_DEF" > "HOL4Base.combin.W_DEF"
22.30 + "S_def" > "HOL4Base.combin.S_def"
22.31 + "S_THM" > "HOL4Base.combin.S_def"
22.32 + "S_DEF" > "HOL4Base.combin.S_DEF"
22.33 + "K_def" > "HOL4Base.combin.K_def"
22.34 + "K_THM" > "HOL4Base.combin.K_def"
22.35 + "K_DEF" > "HOL4Base.combin.K_DEF"
22.36 + "I_o_ID" > "HOL4Base.combin.I_o_ID"
22.37 + "I_def" > "HOL4Base.combin.I_def"
22.38 + "I_THM" > "HOL4Base.combin.I_THM"
22.39 + "I_DEF" > "HOL4Base.combin.I_DEF"
22.40 + "C_def" > "HOL4Base.combin.C_def"
22.41 + "C_THM" > "HOL4Base.combin.C_def"
22.42 + "C_DEF" > "HOL4Base.combin.C_DEF"
22.43 +
22.44 +end
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
23.2 +++ b/src/HOL/Import/HOL/divides.imp Fri Apr 02 17:37:45 2004 +0200
23.3 @@ -0,0 +1,24 @@
23.4 +import
23.5 +
23.6 +import_segment "hol4"
23.7 +
23.8 +const_maps
23.9 + "divides" > "Divides.op dvd" :: "nat => nat => bool"
23.10 +
23.11 +thm_maps
23.12 + "divides_def" > "HOL4Compat.divides_def"
23.13 + "ONE_DIVIDES_ALL" > "HOL4Base.divides.ONE_DIVIDES_ALL"
23.14 + "NOT_LT_DIV" > "HOL4Base.divides.NOT_LT_DIV"
23.15 + "DIVIDES_TRANS" > "Divides.dvd_trans"
23.16 + "DIVIDES_SUB" > "Divides.dvd_diff"
23.17 + "DIVIDES_REFL" > "Divides.dvd_refl"
23.18 + "DIVIDES_MULT_LEFT" > "HOL4Base.divides.DIVIDES_MULT_LEFT"
23.19 + "DIVIDES_MULT" > "Divides.dvd_mult2"
23.20 + "DIVIDES_LE" > "Divides.dvd_imp_le"
23.21 + "DIVIDES_FACT" > "HOL4Base.divides.DIVIDES_FACT"
23.22 + "DIVIDES_ANTISYM" > "Divides.dvd_anti_sym"
23.23 + "DIVIDES_ADD_2" > "HOL4Base.divides.DIVIDES_ADD_2"
23.24 + "DIVIDES_ADD_1" > "Divides.dvd_add"
23.25 + "ALL_DIVIDES_0" > "Divides.dvd_0_right"
23.26 +
23.27 +end
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
24.2 +++ b/src/HOL/Import/HOL/hrat.imp Fri Apr 02 17:37:45 2004 +0200
24.3 @@ -0,0 +1,95 @@
24.4 +import
24.5 +
24.6 +import_segment "hol4"
24.7 +
24.8 +def_maps
24.9 + "trat_sucint" > "trat_sucint_def"
24.10 + "trat_mul" > "trat_mul_def"
24.11 + "trat_inv" > "trat_inv_def"
24.12 + "trat_eq" > "trat_eq_def"
24.13 + "trat_add" > "trat_add_def"
24.14 + "trat_1" > "trat_1_def"
24.15 + "mk_hrat" > "mk_hrat_def"
24.16 + "hrat_sucint" > "hrat_sucint_def"
24.17 + "hrat_mul" > "hrat_mul_def"
24.18 + "hrat_inv" > "hrat_inv_def"
24.19 + "hrat_add" > "hrat_add_def"
24.20 + "hrat_1" > "hrat_1_def"
24.21 + "dest_hrat" > "dest_hrat_def"
24.22 +
24.23 +type_maps
24.24 + "hrat" > "HOL4Base.hrat.hrat"
24.25 +
24.26 +const_maps
24.27 + "trat_mul" > "HOL4Base.hrat.trat_mul"
24.28 + "trat_inv" > "HOL4Base.hrat.trat_inv"
24.29 + "trat_eq" > "HOL4Base.hrat.trat_eq"
24.30 + "trat_add" > "HOL4Base.hrat.trat_add"
24.31 + "trat_1" > "HOL4Base.hrat.trat_1"
24.32 + "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
24.33 + "hrat_mul" > "HOL4Base.hrat.hrat_mul"
24.34 + "hrat_inv" > "HOL4Base.hrat.hrat_inv"
24.35 + "hrat_add" > "HOL4Base.hrat.hrat_add"
24.36 + "hrat_1" > "HOL4Base.hrat.hrat_1"
24.37 +
24.38 +thm_maps
24.39 + "trat_sucint" > "HOL4Base.hrat.trat_sucint"
24.40 + "trat_mul_def" > "HOL4Base.hrat.trat_mul_def"
24.41 + "trat_mul" > "HOL4Base.hrat.trat_mul"
24.42 + "trat_inv_def" > "HOL4Base.hrat.trat_inv_def"
24.43 + "trat_inv" > "HOL4Base.hrat.trat_inv"
24.44 + "trat_eq_def" > "HOL4Base.hrat.trat_eq_def"
24.45 + "trat_eq" > "HOL4Base.hrat.trat_eq"
24.46 + "trat_add_def" > "HOL4Base.hrat.trat_add_def"
24.47 + "trat_add" > "HOL4Base.hrat.trat_add"
24.48 + "trat_1_def" > "HOL4Base.hrat.trat_1_def"
24.49 + "trat_1" > "HOL4Base.hrat.trat_1"
24.50 + "hrat_tybij" > "HOL4Base.hrat.hrat_tybij"
24.51 + "hrat_sucint_def" > "HOL4Base.hrat.hrat_sucint_def"
24.52 + "hrat_sucint" > "HOL4Base.hrat.hrat_sucint"
24.53 + "hrat_mul_def" > "HOL4Base.hrat.hrat_mul_def"
24.54 + "hrat_mul" > "HOL4Base.hrat.hrat_mul"
24.55 + "hrat_inv_def" > "HOL4Base.hrat.hrat_inv_def"
24.56 + "hrat_inv" > "HOL4Base.hrat.hrat_inv"
24.57 + "hrat_add_def" > "HOL4Base.hrat.hrat_add_def"
24.58 + "hrat_add" > "HOL4Base.hrat.hrat_add"
24.59 + "hrat_TY_DEF" > "HOL4Base.hrat.hrat_TY_DEF"
24.60 + "hrat_1_def" > "HOL4Base.hrat.hrat_1_def"
24.61 + "hrat_1" > "HOL4Base.hrat.hrat_1"
24.62 + "TRAT_SUCINT_0" > "HOL4Base.hrat.TRAT_SUCINT_0"
24.63 + "TRAT_SUCINT" > "HOL4Base.hrat.TRAT_SUCINT"
24.64 + "TRAT_NOZERO" > "HOL4Base.hrat.TRAT_NOZERO"
24.65 + "TRAT_MUL_WELLDEFINED2" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED2"
24.66 + "TRAT_MUL_WELLDEFINED" > "HOL4Base.hrat.TRAT_MUL_WELLDEFINED"
24.67 + "TRAT_MUL_SYM_EQ" > "HOL4Base.hrat.TRAT_MUL_SYM_EQ"
24.68 + "TRAT_MUL_SYM" > "HOL4Base.hrat.TRAT_MUL_SYM"
24.69 + "TRAT_MUL_LINV" > "HOL4Base.hrat.TRAT_MUL_LINV"
24.70 + "TRAT_MUL_LID" > "HOL4Base.hrat.TRAT_MUL_LID"
24.71 + "TRAT_MUL_ASSOC" > "HOL4Base.hrat.TRAT_MUL_ASSOC"
24.72 + "TRAT_LDISTRIB" > "HOL4Base.hrat.TRAT_LDISTRIB"
24.73 + "TRAT_INV_WELLDEFINED" > "HOL4Base.hrat.TRAT_INV_WELLDEFINED"
24.74 + "TRAT_EQ_TRANS" > "HOL4Base.hrat.TRAT_EQ_TRANS"
24.75 + "TRAT_EQ_SYM" > "HOL4Base.hrat.TRAT_EQ_SYM"
24.76 + "TRAT_EQ_REFL" > "HOL4Base.hrat.TRAT_EQ_REFL"
24.77 + "TRAT_EQ_EQUIV" > "HOL4Base.hrat.TRAT_EQ_EQUIV"
24.78 + "TRAT_EQ_AP" > "HOL4Base.hrat.TRAT_EQ_AP"
24.79 + "TRAT_ARCH" > "HOL4Base.hrat.TRAT_ARCH"
24.80 + "TRAT_ADD_WELLDEFINED2" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED2"
24.81 + "TRAT_ADD_WELLDEFINED" > "HOL4Base.hrat.TRAT_ADD_WELLDEFINED"
24.82 + "TRAT_ADD_TOTAL" > "HOL4Base.hrat.TRAT_ADD_TOTAL"
24.83 + "TRAT_ADD_SYM_EQ" > "HOL4Base.hrat.TRAT_ADD_SYM_EQ"
24.84 + "TRAT_ADD_SYM" > "HOL4Base.hrat.TRAT_ADD_SYM"
24.85 + "TRAT_ADD_ASSOC" > "HOL4Base.hrat.TRAT_ADD_ASSOC"
24.86 + "HRAT_SUCINT" > "HOL4Base.hrat.HRAT_SUCINT"
24.87 + "HRAT_NOZERO" > "HOL4Base.hrat.HRAT_NOZERO"
24.88 + "HRAT_MUL_SYM" > "HOL4Base.hrat.HRAT_MUL_SYM"
24.89 + "HRAT_MUL_LINV" > "HOL4Base.hrat.HRAT_MUL_LINV"
24.90 + "HRAT_MUL_LID" > "HOL4Base.hrat.HRAT_MUL_LID"
24.91 + "HRAT_MUL_ASSOC" > "HOL4Base.hrat.HRAT_MUL_ASSOC"
24.92 + "HRAT_LDISTRIB" > "HOL4Base.hrat.HRAT_LDISTRIB"
24.93 + "HRAT_ARCH" > "HOL4Base.hrat.HRAT_ARCH"
24.94 + "HRAT_ADD_TOTAL" > "HOL4Base.hrat.HRAT_ADD_TOTAL"
24.95 + "HRAT_ADD_SYM" > "HOL4Base.hrat.HRAT_ADD_SYM"
24.96 + "HRAT_ADD_ASSOC" > "HOL4Base.hrat.HRAT_ADD_ASSOC"
24.97 +
24.98 +end
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
25.2 +++ b/src/HOL/Import/HOL/hreal.imp Fri Apr 02 17:37:45 2004 +0200
25.3 @@ -0,0 +1,118 @@
25.4 +import
25.5 +
25.6 +import_segment "hol4"
25.7 +
25.8 +def_maps
25.9 + "isacut" > "isacut_def"
25.10 + "hreal_sup" > "hreal_sup_def"
25.11 + "hreal_sub" > "hreal_sub_def"
25.12 + "hreal_mul" > "hreal_mul_def"
25.13 + "hreal_lt" > "hreal_lt_def"
25.14 + "hreal_inv" > "hreal_inv_def"
25.15 + "hreal_add" > "hreal_add_def"
25.16 + "hreal_1" > "hreal_1_def"
25.17 + "hreal" > "hreal_def"
25.18 + "hrat_lt" > "hrat_lt_def"
25.19 + "cut_of_hrat" > "cut_of_hrat_def"
25.20 + "cut" > "cut_def"
25.21 +
25.22 +type_maps
25.23 + "hreal" > "HOL4Base.hreal.hreal"
25.24 +
25.25 +const_maps
25.26 + "isacut" > "HOL4Base.hreal.isacut"
25.27 + "hreal_sup" > "HOL4Base.hreal.hreal_sup"
25.28 + "hreal_sub" > "HOL4Base.hreal.hreal_sub"
25.29 + "hreal_mul" > "HOL4Base.hreal.hreal_mul"
25.30 + "hreal_lt" > "HOL4Base.hreal.hreal_lt"
25.31 + "hreal_inv" > "HOL4Base.hreal.hreal_inv"
25.32 + "hreal_add" > "HOL4Base.hreal.hreal_add"
25.33 + "hreal_1" > "HOL4Base.hreal.hreal_1"
25.34 + "hrat_lt" > "HOL4Base.hreal.hrat_lt"
25.35 + "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
25.36 +
25.37 +thm_maps
25.38 + "isacut_def" > "HOL4Base.hreal.isacut_def"
25.39 + "isacut" > "HOL4Base.hreal.isacut"
25.40 + "hreal_tybij" > "HOL4Base.hreal.hreal_tybij"
25.41 + "hreal_sup_def" > "HOL4Base.hreal.hreal_sup_def"
25.42 + "hreal_sup" > "HOL4Base.hreal.hreal_sup"
25.43 + "hreal_sub_def" > "HOL4Base.hreal.hreal_sub_def"
25.44 + "hreal_sub" > "HOL4Base.hreal.hreal_sub"
25.45 + "hreal_mul_def" > "HOL4Base.hreal.hreal_mul_def"
25.46 + "hreal_mul" > "HOL4Base.hreal.hreal_mul"
25.47 + "hreal_lt_def" > "HOL4Base.hreal.hreal_lt_def"
25.48 + "hreal_lt" > "HOL4Base.hreal.hreal_lt"
25.49 + "hreal_inv_def" > "HOL4Base.hreal.hreal_inv_def"
25.50 + "hreal_inv" > "HOL4Base.hreal.hreal_inv"
25.51 + "hreal_add_def" > "HOL4Base.hreal.hreal_add_def"
25.52 + "hreal_add" > "HOL4Base.hreal.hreal_add"
25.53 + "hreal_TY_DEF" > "HOL4Base.hreal.hreal_TY_DEF"
25.54 + "hreal_1_def" > "HOL4Base.hreal.hreal_1_def"
25.55 + "hreal_1" > "HOL4Base.hreal.hreal_1"
25.56 + "hrat_lt_def" > "HOL4Base.hreal.hrat_lt_def"
25.57 + "hrat_lt" > "HOL4Base.hreal.hrat_lt"
25.58 + "cut_of_hrat_def" > "HOL4Base.hreal.cut_of_hrat_def"
25.59 + "cut_of_hrat" > "HOL4Base.hreal.cut_of_hrat"
25.60 + "ISACUT_HRAT" > "HOL4Base.hreal.ISACUT_HRAT"
25.61 + "HREAL_SUP_ISACUT" > "HOL4Base.hreal.HREAL_SUP_ISACUT"
25.62 + "HREAL_SUP" > "HOL4Base.hreal.HREAL_SUP"
25.63 + "HREAL_SUB_ISACUT" > "HOL4Base.hreal.HREAL_SUB_ISACUT"
25.64 + "HREAL_SUB_ADD" > "HOL4Base.hreal.HREAL_SUB_ADD"
25.65 + "HREAL_NOZERO" > "HOL4Base.hreal.HREAL_NOZERO"
25.66 + "HREAL_MUL_SYM" > "HOL4Base.hreal.HREAL_MUL_SYM"
25.67 + "HREAL_MUL_LINV" > "HOL4Base.hreal.HREAL_MUL_LINV"
25.68 + "HREAL_MUL_LID" > "HOL4Base.hreal.HREAL_MUL_LID"
25.69 + "HREAL_MUL_ISACUT" > "HOL4Base.hreal.HREAL_MUL_ISACUT"
25.70 + "HREAL_MUL_ASSOC" > "HOL4Base.hreal.HREAL_MUL_ASSOC"
25.71 + "HREAL_LT_TOTAL" > "HOL4Base.hreal.HREAL_LT_TOTAL"
25.72 + "HREAL_LT_LEMMA" > "HOL4Base.hreal.HREAL_LT_LEMMA"
25.73 + "HREAL_LT" > "HOL4Base.hreal.HREAL_LT"
25.74 + "HREAL_LDISTRIB" > "HOL4Base.hreal.HREAL_LDISTRIB"
25.75 + "HREAL_INV_ISACUT" > "HOL4Base.hreal.HREAL_INV_ISACUT"
25.76 + "HREAL_ADD_TOTAL" > "HOL4Base.hreal.HREAL_ADD_TOTAL"
25.77 + "HREAL_ADD_SYM" > "HOL4Base.hreal.HREAL_ADD_SYM"
25.78 + "HREAL_ADD_ISACUT" > "HOL4Base.hreal.HREAL_ADD_ISACUT"
25.79 + "HREAL_ADD_ASSOC" > "HOL4Base.hreal.HREAL_ADD_ASSOC"
25.80 + "HRAT_UP" > "HOL4Base.hreal.HRAT_UP"
25.81 + "HRAT_RDISTRIB" > "HOL4Base.hreal.HRAT_RDISTRIB"
25.82 + "HRAT_MUL_RINV" > "HOL4Base.hreal.HRAT_MUL_RINV"
25.83 + "HRAT_MUL_RID" > "HOL4Base.hreal.HRAT_MUL_RID"
25.84 + "HRAT_MEAN" > "HOL4Base.hreal.HRAT_MEAN"
25.85 + "HRAT_LT_TRANS" > "HOL4Base.hreal.HRAT_LT_TRANS"
25.86 + "HRAT_LT_TOTAL" > "HOL4Base.hreal.HRAT_LT_TOTAL"
25.87 + "HRAT_LT_RMUL1" > "HOL4Base.hreal.HRAT_LT_RMUL1"
25.88 + "HRAT_LT_RMUL" > "HOL4Base.hreal.HRAT_LT_RMUL"
25.89 + "HRAT_LT_REFL" > "HOL4Base.hreal.HRAT_LT_REFL"
25.90 + "HRAT_LT_RADD" > "HOL4Base.hreal.HRAT_LT_RADD"
25.91 + "HRAT_LT_R1" > "HOL4Base.hreal.HRAT_LT_R1"
25.92 + "HRAT_LT_NE" > "HOL4Base.hreal.HRAT_LT_NE"
25.93 + "HRAT_LT_MUL2" > "HOL4Base.hreal.HRAT_LT_MUL2"
25.94 + "HRAT_LT_LMUL1" > "HOL4Base.hreal.HRAT_LT_LMUL1"
25.95 + "HRAT_LT_LMUL" > "HOL4Base.hreal.HRAT_LT_LMUL"
25.96 + "HRAT_LT_LADD" > "HOL4Base.hreal.HRAT_LT_LADD"
25.97 + "HRAT_LT_L1" > "HOL4Base.hreal.HRAT_LT_L1"
25.98 + "HRAT_LT_GT" > "HOL4Base.hreal.HRAT_LT_GT"
25.99 + "HRAT_LT_ANTISYM" > "HOL4Base.hreal.HRAT_LT_ANTISYM"
25.100 + "HRAT_LT_ADDR" > "HOL4Base.hreal.HRAT_LT_ADDR"
25.101 + "HRAT_LT_ADDL" > "HOL4Base.hreal.HRAT_LT_ADDL"
25.102 + "HRAT_LT_ADD2" > "HOL4Base.hreal.HRAT_LT_ADD2"
25.103 + "HRAT_INV_MUL" > "HOL4Base.hreal.HRAT_INV_MUL"
25.104 + "HRAT_GT_LMUL1" > "HOL4Base.hreal.HRAT_GT_LMUL1"
25.105 + "HRAT_GT_L1" > "HOL4Base.hreal.HRAT_GT_L1"
25.106 + "HRAT_EQ_LMUL" > "HOL4Base.hreal.HRAT_EQ_LMUL"
25.107 + "HRAT_EQ_LADD" > "HOL4Base.hreal.HRAT_EQ_LADD"
25.108 + "HRAT_DOWN2" > "HOL4Base.hreal.HRAT_DOWN2"
25.109 + "HRAT_DOWN" > "HOL4Base.hreal.HRAT_DOWN"
25.110 + "EQUAL_CUTS" > "HOL4Base.hreal.EQUAL_CUTS"
25.111 + "CUT_UP" > "HOL4Base.hreal.CUT_UP"
25.112 + "CUT_UBOUND" > "HOL4Base.hreal.CUT_UBOUND"
25.113 + "CUT_STRADDLE" > "HOL4Base.hreal.CUT_STRADDLE"
25.114 + "CUT_NONEMPTY" > "HOL4Base.hreal.CUT_NONEMPTY"
25.115 + "CUT_NEARTOP_MUL" > "HOL4Base.hreal.CUT_NEARTOP_MUL"
25.116 + "CUT_NEARTOP_ADD" > "HOL4Base.hreal.CUT_NEARTOP_ADD"
25.117 + "CUT_ISACUT" > "HOL4Base.hreal.CUT_ISACUT"
25.118 + "CUT_DOWN" > "HOL4Base.hreal.CUT_DOWN"
25.119 + "CUT_BOUNDED" > "HOL4Base.hreal.CUT_BOUNDED"
25.120 +
25.121 +end
26.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
26.2 +++ b/src/HOL/Import/HOL/ind_type.imp Fri Apr 02 17:37:45 2004 +0200
26.3 @@ -0,0 +1,99 @@
26.4 +import
26.5 +
26.6 +import_segment "hol4"
26.7 +
26.8 +def_maps
26.9 + "mk_rec" > "mk_rec_def"
26.10 + "dest_rec" > "dest_rec_def"
26.11 + "ZRECSPACE" > "ZRECSPACE_def"
26.12 + "ZCONSTR" > "ZCONSTR_def"
26.13 + "ZBOT" > "ZBOT_def"
26.14 + "NUMSUM" > "NUMSUM_def"
26.15 + "NUMSND" > "NUMSND_def"
26.16 + "NUMRIGHT" > "NUMRIGHT_def"
26.17 + "NUMPAIR" > "NUMPAIR_def"
26.18 + "NUMLEFT" > "NUMLEFT_def"
26.19 + "NUMFST" > "NUMFST_def"
26.20 + "ISO" > "ISO_def"
26.21 + "INJP" > "INJP_def"
26.22 + "INJN" > "INJN_def"
26.23 + "INJF" > "INJF_def"
26.24 + "INJA" > "INJA_def"
26.25 + "FNIL" > "FNIL_def"
26.26 + "FCONS" > "FCONS_def"
26.27 + "CONSTR" > "CONSTR_def"
26.28 + "BOTTOM" > "BOTTOM_def"
26.29 +
26.30 +type_maps
26.31 + "recspace" > "HOL4Base.ind_type.recspace"
26.32 +
26.33 +const_maps
26.34 + "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
26.35 + "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
26.36 + "ZBOT" > "HOL4Base.ind_type.ZBOT"
26.37 + "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
26.38 + "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
26.39 + "ISO" > "HOL4Base.ind_type.ISO"
26.40 + "INJP" > "HOL4Base.ind_type.INJP"
26.41 + "INJN" > "HOL4Base.ind_type.INJN"
26.42 + "INJF" > "HOL4Base.ind_type.INJF"
26.43 + "INJA" > "HOL4Base.ind_type.INJA"
26.44 + "FNIL" > "HOL4Base.ind_type.FNIL"
26.45 + "CONSTR" > "HOL4Base.ind_type.CONSTR"
26.46 + "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
26.47 +
26.48 +thm_maps
26.49 + "recspace_repfns" > "HOL4Base.ind_type.recspace_repfns"
26.50 + "recspace_TY_DEF" > "HOL4Base.ind_type.recspace_TY_DEF"
26.51 + "ZRECSPACE_rules" > "HOL4Base.ind_type.ZRECSPACE_rules"
26.52 + "ZRECSPACE_ind" > "HOL4Base.ind_type.ZRECSPACE_ind"
26.53 + "ZRECSPACE_def" > "HOL4Base.ind_type.ZRECSPACE_def"
26.54 + "ZRECSPACE_cases" > "HOL4Base.ind_type.ZRECSPACE_cases"
26.55 + "ZRECSPACE" > "HOL4Base.ind_type.ZRECSPACE"
26.56 + "ZCONSTR_def" > "HOL4Base.ind_type.ZCONSTR_def"
26.57 + "ZCONSTR_ZBOT" > "HOL4Base.ind_type.ZCONSTR_ZBOT"
26.58 + "ZCONSTR" > "HOL4Base.ind_type.ZCONSTR"
26.59 + "ZBOT_def" > "HOL4Base.ind_type.ZBOT_def"
26.60 + "ZBOT" > "HOL4Base.ind_type.ZBOT"
26.61 + "NUMSUM_def" > "HOL4Base.ind_type.NUMSUM_def"
26.62 + "NUMSUM_INJ" > "HOL4Base.ind_type.NUMSUM_INJ"
26.63 + "NUMSUM_DEST" > "HOL4Base.ind_type.NUMSUM_DEST"
26.64 + "NUMSUM" > "HOL4Base.ind_type.NUMSUM"
26.65 + "NUMPAIR_def" > "HOL4Base.ind_type.NUMPAIR_def"
26.66 + "NUMPAIR_INJ_LEMMA" > "HOL4Base.ind_type.NUMPAIR_INJ_LEMMA"
26.67 + "NUMPAIR_INJ" > "HOL4Base.ind_type.NUMPAIR_INJ"
26.68 + "NUMPAIR_DEST" > "HOL4Base.ind_type.NUMPAIR_DEST"
26.69 + "NUMPAIR" > "HOL4Base.ind_type.NUMPAIR"
26.70 + "MK_REC_INJ" > "HOL4Base.ind_type.MK_REC_INJ"
26.71 + "ISO_def" > "HOL4Base.ind_type.ISO_def"
26.72 + "ISO_USAGE" > "HOL4Base.ind_type.ISO_USAGE"
26.73 + "ISO_REFL" > "HOL4Base.ind_type.ISO_REFL"
26.74 + "ISO_FUN" > "HOL4Base.ind_type.ISO_FUN"
26.75 + "ISO" > "HOL4Base.ind_type.ISO"
26.76 + "INJ_INVERSE2" > "HOL4Base.ind_type.INJ_INVERSE2"
26.77 + "INJP_def" > "HOL4Base.ind_type.INJP_def"
26.78 + "INJP_INJ" > "HOL4Base.ind_type.INJP_INJ"
26.79 + "INJP" > "HOL4Base.ind_type.INJP"
26.80 + "INJN_def" > "HOL4Base.ind_type.INJN_def"
26.81 + "INJN_INJ" > "HOL4Base.ind_type.INJN_INJ"
26.82 + "INJN" > "HOL4Base.ind_type.INJN"
26.83 + "INJF_def" > "HOL4Base.ind_type.INJF_def"
26.84 + "INJF_INJ" > "HOL4Base.ind_type.INJF_INJ"
26.85 + "INJF" > "HOL4Base.ind_type.INJF"
26.86 + "INJA_def" > "HOL4Base.ind_type.INJA_def"
26.87 + "INJA_INJ" > "HOL4Base.ind_type.INJA_INJ"
26.88 + "INJA" > "HOL4Base.ind_type.INJA"
26.89 + "FNIL_def" > "HOL4Base.ind_type.FNIL_def"
26.90 + "FNIL" > "HOL4Base.ind_type.FNIL"
26.91 + "FCONS" > "HOL4Base.ind_type.FCONS"
26.92 + "DEST_REC_INJ" > "HOL4Base.ind_type.DEST_REC_INJ"
26.93 + "CONSTR_def" > "HOL4Base.ind_type.CONSTR_def"
26.94 + "CONSTR_REC" > "HOL4Base.ind_type.CONSTR_REC"
26.95 + "CONSTR_INJ" > "HOL4Base.ind_type.CONSTR_INJ"
26.96 + "CONSTR_IND" > "HOL4Base.ind_type.CONSTR_IND"
26.97 + "CONSTR_BOT" > "HOL4Base.ind_type.CONSTR_BOT"
26.98 + "CONSTR" > "HOL4Base.ind_type.CONSTR"
26.99 + "BOTTOM_def" > "HOL4Base.ind_type.BOTTOM_def"
26.100 + "BOTTOM" > "HOL4Base.ind_type.BOTTOM"
26.101 +
26.102 +end
27.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
27.2 +++ b/src/HOL/Import/HOL/lim.imp Fri Apr 02 17:37:45 2004 +0200
27.3 @@ -0,0 +1,93 @@
27.4 +import
27.5 +
27.6 +import_segment "hol4"
27.7 +
27.8 +def_maps
27.9 + "tends_real_real" > "tends_real_real_def"
27.10 + "diffl" > "diffl_def"
27.11 + "differentiable" > "differentiable_def"
27.12 + "contl" > "contl_def"
27.13 +
27.14 +const_maps
27.15 + "tends_real_real" > "HOL4Real.lim.tends_real_real"
27.16 + "diffl" > "HOL4Real.lim.diffl"
27.17 + "differentiable" > "HOL4Real.lim.differentiable"
27.18 + "contl" > "HOL4Real.lim.contl"
27.19 +
27.20 +thm_maps
27.21 + "tends_real_real_def" > "HOL4Real.lim.tends_real_real_def"
27.22 + "tends_real_real" > "HOL4Real.lim.tends_real_real"
27.23 + "diffl_def" > "HOL4Real.lim.diffl_def"
27.24 + "diffl" > "HOL4Real.lim.diffl"
27.25 + "differentiable_def" > "HOL4Real.lim.differentiable_def"
27.26 + "differentiable" > "HOL4Real.lim.differentiable"
27.27 + "contl_def" > "HOL4Real.lim.contl_def"
27.28 + "contl" > "HOL4Real.lim.contl"
27.29 + "ROLLE" > "HOL4Real.lim.ROLLE"
27.30 + "MVT_LEMMA" > "HOL4Real.lim.MVT_LEMMA"
27.31 + "MVT" > "HOL4Real.lim.MVT"
27.32 + "LIM_X" > "HOL4Real.lim.LIM_X"
27.33 + "LIM_UNIQ" > "HOL4Real.lim.LIM_UNIQ"
27.34 + "LIM_TRANSFORM" > "HOL4Real.lim.LIM_TRANSFORM"
27.35 + "LIM_SUB" > "HOL4Real.lim.LIM_SUB"
27.36 + "LIM_NULL" > "HOL4Real.lim.LIM_NULL"
27.37 + "LIM_NEG" > "HOL4Real.lim.LIM_NEG"
27.38 + "LIM_MUL" > "HOL4Real.lim.LIM_MUL"
27.39 + "LIM_INV" > "HOL4Real.lim.LIM_INV"
27.40 + "LIM_EQUAL" > "HOL4Real.lim.LIM_EQUAL"
27.41 + "LIM_DIV" > "HOL4Real.lim.LIM_DIV"
27.42 + "LIM_CONST" > "HOL4Real.lim.LIM_CONST"
27.43 + "LIM_ADD" > "HOL4Real.lim.LIM_ADD"
27.44 + "LIM" > "HOL4Real.lim.LIM"
27.45 + "IVT2" > "HOL4Real.lim.IVT2"
27.46 + "IVT" > "HOL4Real.lim.IVT"
27.47 + "INTERVAL_LEMMA" > "HOL4Real.lim.INTERVAL_LEMMA"
27.48 + "INTERVAL_CLEMMA" > "HOL4Real.lim.INTERVAL_CLEMMA"
27.49 + "INTERVAL_ABS" > "HOL4Real.lim.INTERVAL_ABS"
27.50 + "DIFF_XM1" > "HOL4Real.lim.DIFF_XM1"
27.51 + "DIFF_X" > "HOL4Real.lim.DIFF_X"
27.52 + "DIFF_UNIQ" > "HOL4Real.lim.DIFF_UNIQ"
27.53 + "DIFF_SUM" > "HOL4Real.lim.DIFF_SUM"
27.54 + "DIFF_SUB" > "HOL4Real.lim.DIFF_SUB"
27.55 + "DIFF_POW" > "HOL4Real.lim.DIFF_POW"
27.56 + "DIFF_NEG" > "HOL4Real.lim.DIFF_NEG"
27.57 + "DIFF_MUL" > "HOL4Real.lim.DIFF_MUL"
27.58 + "DIFF_LMIN" > "HOL4Real.lim.DIFF_LMIN"
27.59 + "DIFF_LMAX" > "HOL4Real.lim.DIFF_LMAX"
27.60 + "DIFF_LINC" > "HOL4Real.lim.DIFF_LINC"
27.61 + "DIFF_LDEC" > "HOL4Real.lim.DIFF_LDEC"
27.62 + "DIFF_LCONST" > "HOL4Real.lim.DIFF_LCONST"
27.63 + "DIFF_ISCONST_END" > "HOL4Real.lim.DIFF_ISCONST_END"
27.64 + "DIFF_ISCONST_ALL" > "HOL4Real.lim.DIFF_ISCONST_ALL"
27.65 + "DIFF_ISCONST" > "HOL4Real.lim.DIFF_ISCONST"
27.66 + "DIFF_INVERSE_OPEN" > "HOL4Real.lim.DIFF_INVERSE_OPEN"
27.67 + "DIFF_INVERSE_LT" > "HOL4Real.lim.DIFF_INVERSE_LT"
27.68 + "DIFF_INVERSE" > "HOL4Real.lim.DIFF_INVERSE"
27.69 + "DIFF_INV" > "HOL4Real.lim.DIFF_INV"
27.70 + "DIFF_DIV" > "HOL4Real.lim.DIFF_DIV"
27.71 + "DIFF_CONT" > "HOL4Real.lim.DIFF_CONT"
27.72 + "DIFF_CONST" > "HOL4Real.lim.DIFF_CONST"
27.73 + "DIFF_CMUL" > "HOL4Real.lim.DIFF_CMUL"
27.74 + "DIFF_CHAIN" > "HOL4Real.lim.DIFF_CHAIN"
27.75 + "DIFF_CARAT" > "HOL4Real.lim.DIFF_CARAT"
27.76 + "DIFF_ADD" > "HOL4Real.lim.DIFF_ADD"
27.77 + "CONT_SUB" > "HOL4Real.lim.CONT_SUB"
27.78 + "CONT_NEG" > "HOL4Real.lim.CONT_NEG"
27.79 + "CONT_MUL" > "HOL4Real.lim.CONT_MUL"
27.80 + "CONT_INVERSE" > "HOL4Real.lim.CONT_INVERSE"
27.81 + "CONT_INV" > "HOL4Real.lim.CONT_INV"
27.82 + "CONT_INJ_RANGE" > "HOL4Real.lim.CONT_INJ_RANGE"
27.83 + "CONT_INJ_LEMMA2" > "HOL4Real.lim.CONT_INJ_LEMMA2"
27.84 + "CONT_INJ_LEMMA" > "HOL4Real.lim.CONT_INJ_LEMMA"
27.85 + "CONT_HASSUP" > "HOL4Real.lim.CONT_HASSUP"
27.86 + "CONT_DIV" > "HOL4Real.lim.CONT_DIV"
27.87 + "CONT_CONST" > "HOL4Real.lim.CONT_CONST"
27.88 + "CONT_COMPOSE" > "HOL4Real.lim.CONT_COMPOSE"
27.89 + "CONT_BOUNDED" > "HOL4Real.lim.CONT_BOUNDED"
27.90 + "CONT_ATTAINS_ALL" > "HOL4Real.lim.CONT_ATTAINS_ALL"
27.91 + "CONT_ATTAINS2" > "HOL4Real.lim.CONT_ATTAINS2"
27.92 + "CONT_ATTAINS" > "HOL4Real.lim.CONT_ATTAINS"
27.93 + "CONT_ADD" > "HOL4Real.lim.CONT_ADD"
27.94 + "CONTL_LIM" > "HOL4Real.lim.CONTL_LIM"
27.95 +
27.96 +end
28.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
28.2 +++ b/src/HOL/Import/HOL/list.imp Fri Apr 02 17:37:45 2004 +0200
28.3 @@ -0,0 +1,135 @@
28.4 +import
28.5 +
28.6 +import_segment "hol4"
28.7 +
28.8 +def_maps
28.9 + "EL" > "EL_def"
28.10 +
28.11 +type_maps
28.12 + "list" > "List.list"
28.13 +
28.14 +const_maps
28.15 + "list_size" > "HOL4Compat.list_size"
28.16 + "list_case" > "List.list.list_case"
28.17 + "ZIP" > "HOL4Compat.ZIP"
28.18 + "UNZIP" > "HOL4Compat.unzip"
28.19 + "TL" > "List.tl"
28.20 + "SUM" > "HOL4Compat.sum"
28.21 + "REVERSE" > "List.rev"
28.22 + "REPLICATE" > "List.replicate"
28.23 + "NULL" > "List.null"
28.24 + "NIL" > "List.list.Nil"
28.25 + "MEM" > "List.op mem"
28.26 + "MAP2" > "HOL4Compat.map2"
28.27 + "MAP" > "List.map"
28.28 + "LENGTH" > "Nat.size"
28.29 + "LAST" > "List.last"
28.30 + "HD" > "List.hd"
28.31 + "FRONT" > "List.butlast"
28.32 + "FOLDR" > "HOL4Compat.FOLDR"
28.33 + "FOLDL" > "List.foldl"
28.34 + "FLAT" > "List.concat"
28.35 + "FILTER" > "List.filter"
28.36 + "EXISTS" > "HOL4Compat.list_exists"
28.37 + "EVERY" > "List.list_all"
28.38 + "CONS" > "List.list.Cons"
28.39 + "APPEND" > "List.op @"
28.40 +
28.41 +thm_maps
28.42 + "list_size_def" > "HOL4Compat.list_size_def"
28.43 + "list_size_cong" > "HOL4Base.list.list_size_cong"
28.44 + "list_nchotomy" > "HOL4Compat.list_CASES"
28.45 + "list_induction" > "HOL4Compat.unzip.induct"
28.46 + "list_distinct" > "List.list.simps_1"
28.47 + "list_case_def" > "HOL4Compat.list_case_def"
28.48 + "list_case_cong" > "HOL4Compat.list_case_cong"
28.49 + "list_case_compute" > "HOL4Base.list.list_case_compute"
28.50 + "list_INDUCT" > "HOL4Compat.unzip.induct"
28.51 + "list_CASES" > "HOL4Compat.list_CASES"
28.52 + "list_Axiom_old" > "HOL4Compat.list_Axiom_old"
28.53 + "list_Axiom" > "HOL4Compat.list_Axiom"
28.54 + "list_11" > "List.list.simps_3"
28.55 + "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
28.56 + "ZIP_MAP" > "HOL4Base.list.ZIP_MAP"
28.57 + "ZIP" > "HOL4Compat.ZIP"
28.58 + "WF_LIST_PRED" > "HOL4Base.list.WF_LIST_PRED"
28.59 + "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
28.60 + "UNZIP" > "HOL4Compat.UNZIP"
28.61 + "TL" > "List.tl.simps_2"
28.62 + "SUM" > "HOL4Compat.SUM"
28.63 + "REVERSE_REVERSE" > "List.rev_rev_ident"
28.64 + "REVERSE_DEF" > "HOL4Compat.REVERSE"
28.65 + "REVERSE_APPEND" > "List.rev_append"
28.66 + "NULL_DEF" > "HOL4Compat.NULL_DEF"
28.67 + "NULL" > "HOL4Base.list.NULL"
28.68 + "NOT_NIL_CONS" > "List.list.simps_1"
28.69 + "NOT_EXISTS" > "HOL4Base.list.NOT_EXISTS"
28.70 + "NOT_EVERY" > "HOL4Base.list.NOT_EVERY"
28.71 + "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
28.72 + "NOT_CONS_NIL" > "List.list.simps_2"
28.73 + "MEM_ZIP" > "HOL4Base.list.MEM_ZIP"
28.74 + "MEM_MAP" > "HOL4Base.list.MEM_MAP"
28.75 + "MEM_EL" > "HOL4Base.list.MEM_EL"
28.76 + "MEM_APPEND" > "HOL4Base.list.MEM_APPEND"
28.77 + "MEM" > "HOL4Compat.MEM"
28.78 + "MAP_EQ_NIL" > "HOL4Base.list.MAP_EQ_NIL"
28.79 + "MAP_CONG" > "HOL4Base.list.MAP_CONG"
28.80 + "MAP_APPEND" > "List.map_append"
28.81 + "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
28.82 + "MAP2" > "HOL4Compat.MAP2"
28.83 + "MAP" > "HOL4Compat.MAP"
28.84 + "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
28.85 + "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
28.86 + "LENGTH_UNZIP" > "HOL4Base.list.LENGTH_UNZIP"
28.87 + "LENGTH_NIL" > "List.length_0_conv"
28.88 + "LENGTH_MAP" > "List.length_map"
28.89 + "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
28.90 + "LENGTH_EQ_CONS" > "HOL4Base.list.LENGTH_EQ_CONS"
28.91 + "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
28.92 + "LENGTH_APPEND" > "List.length_append"
28.93 + "LENGTH" > "HOL4Compat.LENGTH"
28.94 + "LAST_DEF" > "List.last.simps"
28.95 + "LAST_CONS" > "HOL4Base.list.LAST_CONS"
28.96 + "HD" > "List.hd.simps"
28.97 + "FRONT_DEF" > "List.butlast.simps_2"
28.98 + "FRONT_CONS" > "HOL4Base.list.FRONT_CONS"
28.99 + "FOLDR_CONG" > "HOL4Base.list.FOLDR_CONG"
28.100 + "FOLDR" > "HOL4Compat.FOLDR"
28.101 + "FOLDL_CONG" > "HOL4Base.list.FOLDL_CONG"
28.102 + "FOLDL" > "HOL4Compat.FOLDL"
28.103 + "FLAT" > "HOL4Compat.FLAT"
28.104 + "FILTER" > "HOL4Compat.FILTER"
28.105 + "EXISTS_MEM" > "HOL4Base.list.EXISTS_MEM"
28.106 + "EXISTS_DEF" > "HOL4Compat.list_exists_DEF"
28.107 + "EXISTS_CONG" > "HOL4Base.list.EXISTS_CONG"
28.108 + "EXISTS_APPEND" > "HOL4Base.list.EXISTS_APPEND"
28.109 + "EVERY_MONOTONIC" > "HOL4Base.list.EVERY_MONOTONIC"
28.110 + "EVERY_MEM" > "HOL4Base.list.EVERY_MEM"
28.111 + "EVERY_EL" > "HOL4Base.list.EVERY_EL"
28.112 + "EVERY_DEF" > "HOL4Compat.EVERY_DEF"
28.113 + "EVERY_CONJ" > "HOL4Base.list.EVERY_CONJ"
28.114 + "EVERY_CONG" > "HOL4Base.list.EVERY_CONG"
28.115 + "EVERY_APPEND" > "List.list_all_append"
28.116 + "EQ_LIST" > "HOL4Base.list.EQ_LIST"
28.117 + "EL_compute" > "HOL4Base.list.EL_compute"
28.118 + "EL_ZIP" > "HOL4Base.list.EL_ZIP"
28.119 + "EL" > "HOL4Base.list.EL"
28.120 + "CONS_ACYCLIC" > "HOL4Base.list.CONS_ACYCLIC"
28.121 + "CONS_11" > "List.list.simps_3"
28.122 + "CONS" > "HOL4Base.list.CONS"
28.123 + "APPEND_eq_NIL" > "HOL4Base.list.APPEND_eq_NIL"
28.124 + "APPEND_NIL" > "List.append_Nil2"
28.125 + "APPEND_FRONT_LAST" > "List.append_butlast_last_id"
28.126 + "APPEND_ASSOC" > "List.append_assoc"
28.127 + "APPEND_11" > "HOL4Base.list.APPEND_11"
28.128 + "APPEND" > "HOL4Compat.APPEND"
28.129 +
28.130 +ignore_thms
28.131 + "list_repfns"
28.132 + "list_TY_DEF"
28.133 + "list1_def"
28.134 + "list0_def"
28.135 + "NIL"
28.136 + "CONS_def"
28.137 +
28.138 +end
29.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
29.2 +++ b/src/HOL/Import/HOL/marker.imp Fri Apr 02 17:37:45 2004 +0200
29.3 @@ -0,0 +1,19 @@
29.4 +import
29.5 +
29.6 +import_segment "hol4"
29.7 +
29.8 +def_maps
29.9 + "stmarker" > "stmarker_primdef"
29.10 +
29.11 +const_maps
29.12 + "stmarker" > "HOL4Base.marker.stmarker"
29.13 +
29.14 +thm_maps
29.15 + "stmarker_primdef" > "HOL4Base.marker.stmarker_primdef"
29.16 + "stmarker_def" > "HOL4Base.marker.stmarker_def"
29.17 + "move_right_disj" > "HOL4Base.marker.move_right_disj"
29.18 + "move_right_conj" > "HOL4Base.marker.move_right_conj"
29.19 + "move_left_disj" > "HOL4Base.marker.move_left_disj"
29.20 + "move_left_conj" > "HOL4Base.marker.move_left_conj"
29.21 +
29.22 +end
30.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
30.2 +++ b/src/HOL/Import/HOL/nets.imp Fri Apr 02 17:37:45 2004 +0200
30.3 @@ -0,0 +1,51 @@
30.4 +import
30.5 +
30.6 +import_segment "hol4"
30.7 +
30.8 +def_maps
30.9 + "tendsto" > "tendsto_def"
30.10 + "tends" > "tends_def"
30.11 + "dorder" > "dorder_def"
30.12 + "bounded" > "bounded_def"
30.13 +
30.14 +const_maps
30.15 + "tendsto" > "HOL4Real.nets.tendsto"
30.16 + "tends" > "HOL4Real.nets.tends"
30.17 + "dorder" > "HOL4Real.nets.dorder"
30.18 + "bounded" > "HOL4Real.nets.bounded"
30.19 +
30.20 +thm_maps
30.21 + "tendsto_def" > "HOL4Real.nets.tendsto_def"
30.22 + "tendsto" > "HOL4Real.nets.tendsto"
30.23 + "tends_def" > "HOL4Real.nets.tends_def"
30.24 + "tends" > "HOL4Real.nets.tends"
30.25 + "dorder_def" > "HOL4Real.nets.dorder_def"
30.26 + "dorder" > "HOL4Real.nets.dorder"
30.27 + "bounded_def" > "HOL4Real.nets.bounded_def"
30.28 + "bounded" > "HOL4Real.nets.bounded"
30.29 + "SEQ_TENDS" > "HOL4Real.nets.SEQ_TENDS"
30.30 + "NET_SUB" > "HOL4Real.nets.NET_SUB"
30.31 + "NET_NULL_MUL" > "HOL4Real.nets.NET_NULL_MUL"
30.32 + "NET_NULL_CMUL" > "HOL4Real.nets.NET_NULL_CMUL"
30.33 + "NET_NULL_ADD" > "HOL4Real.nets.NET_NULL_ADD"
30.34 + "NET_NULL" > "HOL4Real.nets.NET_NULL"
30.35 + "NET_NEG" > "HOL4Real.nets.NET_NEG"
30.36 + "NET_MUL" > "HOL4Real.nets.NET_MUL"
30.37 + "NET_LE" > "HOL4Real.nets.NET_LE"
30.38 + "NET_INV" > "HOL4Real.nets.NET_INV"
30.39 + "NET_DIV" > "HOL4Real.nets.NET_DIV"
30.40 + "NET_CONV_NZ" > "HOL4Real.nets.NET_CONV_NZ"
30.41 + "NET_CONV_IBOUNDED" > "HOL4Real.nets.NET_CONV_IBOUNDED"
30.42 + "NET_CONV_BOUNDED" > "HOL4Real.nets.NET_CONV_BOUNDED"
30.43 + "NET_ADD" > "HOL4Real.nets.NET_ADD"
30.44 + "NET_ABS" > "HOL4Real.nets.NET_ABS"
30.45 + "MTOP_TENDS_UNIQ" > "HOL4Real.nets.MTOP_TENDS_UNIQ"
30.46 + "MTOP_TENDS" > "HOL4Real.nets.MTOP_TENDS"
30.47 + "MR1_BOUNDED" > "HOL4Real.nets.MR1_BOUNDED"
30.48 + "LIM_TENDS2" > "HOL4Real.nets.LIM_TENDS2"
30.49 + "LIM_TENDS" > "HOL4Real.nets.LIM_TENDS"
30.50 + "DORDER_TENDSTO" > "HOL4Real.nets.DORDER_TENDSTO"
30.51 + "DORDER_NGE" > "HOL4Real.nets.DORDER_NGE"
30.52 + "DORDER_LEMMA" > "HOL4Real.nets.DORDER_LEMMA"
30.53 +
30.54 +end
31.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
31.2 +++ b/src/HOL/Import/HOL/num.imp Fri Apr 02 17:37:45 2004 +0200
31.3 @@ -0,0 +1,26 @@
31.4 +import
31.5 +
31.6 +import_segment "hol4"
31.7 +
31.8 +type_maps
31.9 + "num" > "nat"
31.10 +
31.11 +const_maps
31.12 + "SUC" > "Suc"
31.13 + "0" > "0" :: "nat"
31.14 +
31.15 +thm_maps
31.16 + "NOT_SUC" > "Nat.nat.simps_1"
31.17 + "INV_SUC" > "Nat.Suc_inject"
31.18 + "INDUCTION" > "List.lexn.induct"
31.19 +
31.20 +ignore_thms
31.21 + "num_TY_DEF"
31.22 + "num_ISO_DEF"
31.23 + "ZERO_REP_DEF"
31.24 + "ZERO_DEF"
31.25 + "SUC_REP_DEF"
31.26 + "SUC_DEF"
31.27 + "IS_NUM_REP"
31.28 +
31.29 +end
32.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
32.2 +++ b/src/HOL/Import/HOL/numeral.imp Fri Apr 02 17:37:45 2004 +0200
32.3 @@ -0,0 +1,49 @@
32.4 +import
32.5 +
32.6 +import_segment "hol4"
32.7 +
32.8 +def_maps
32.9 + "iiSUC" > "iiSUC_def"
32.10 + "iZ" > "iZ_def"
32.11 + "iSUB" > "iSUB_def"
32.12 + "iSQR" > "iSQR_def"
32.13 + "iDUB" > "iDUB_def"
32.14 + "iBIT_cases" > "iBIT_cases_def"
32.15 +
32.16 +const_maps
32.17 + "iiSUC" > "HOL4Base.numeral.iiSUC"
32.18 + "iZ" > "HOL4Base.numeral.iZ"
32.19 + "iSQR" > "HOL4Base.numeral.iSQR"
32.20 + "iDUB" > "HOL4Base.numeral.iDUB"
32.21 +
32.22 +thm_maps
32.23 + "numeral_suc" > "HOL4Base.numeral.numeral_suc"
32.24 + "numeral_sub" > "HOL4Base.numeral.numeral_sub"
32.25 + "numeral_pre" > "HOL4Base.numeral.numeral_pre"
32.26 + "numeral_mult" > "HOL4Base.numeral.numeral_mult"
32.27 + "numeral_lte" > "HOL4Base.numeral.numeral_lte"
32.28 + "numeral_lt" > "HOL4Base.numeral.numeral_lt"
32.29 + "numeral_iisuc" > "HOL4Base.numeral.numeral_iisuc"
32.30 + "numeral_funpow" > "HOL4Base.numeral.numeral_funpow"
32.31 + "numeral_fact" > "HOL4Base.numeral.numeral_fact"
32.32 + "numeral_exp" > "HOL4Base.numeral.numeral_exp"
32.33 + "numeral_evenodd" > "HOL4Base.numeral.numeral_evenodd"
32.34 + "numeral_eq" > "HOL4Base.numeral.numeral_eq"
32.35 + "numeral_distrib" > "HOL4Base.numeral.numeral_distrib"
32.36 + "numeral_add" > "HOL4Base.numeral.numeral_add"
32.37 + "iiSUC_def" > "HOL4Base.numeral.iiSUC_def"
32.38 + "iiSUC" > "HOL4Base.numeral.iiSUC"
32.39 + "iZ_def" > "HOL4Base.numeral.iZ_def"
32.40 + "iZ" > "HOL4Base.numeral.iZ"
32.41 + "iSUB_THM" > "HOL4Base.numeral.iSUB_THM"
32.42 + "iSUB_DEF" > "HOL4Base.numeral.iSUB_DEF"
32.43 + "iSQR_def" > "HOL4Base.numeral.iSQR_def"
32.44 + "iSQR" > "HOL4Base.numeral.iSQR"
32.45 + "iDUB_removal" > "HOL4Base.numeral.iDUB_removal"
32.46 + "iDUB_def" > "HOL4Base.numeral.iDUB_def"
32.47 + "iDUB" > "HOL4Base.numeral.iDUB"
32.48 + "iBIT_cases" > "HOL4Base.numeral.iBIT_cases"
32.49 + "bit_initiality" > "HOL4Base.numeral.bit_initiality"
32.50 + "bit_induction" > "HOL4Base.numeral.bit_induction"
32.51 +
32.52 +end
33.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
33.2 +++ b/src/HOL/Import/HOL/one.imp Fri Apr 02 17:37:45 2004 +0200
33.3 @@ -0,0 +1,20 @@
33.4 +import
33.5 +
33.6 +import_segment "hol4"
33.7 +
33.8 +type_maps
33.9 + "one" > "Product_Type.unit"
33.10 +
33.11 +const_maps
33.12 + "one" > "Product_Type.Unity"
33.13 +
33.14 +thm_maps
33.15 + "one" > "HOL4Compat.one"
33.16 +
33.17 +ignore_thms
33.18 + "one_axiom"
33.19 + "one_TY_DEF"
33.20 + "one_DEF"
33.21 + "one_Axiom"
33.22 +
33.23 +end
34.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
34.2 +++ b/src/HOL/Import/HOL/operator.imp Fri Apr 02 17:37:45 2004 +0200
34.3 @@ -0,0 +1,40 @@
34.4 +import
34.5 +
34.6 +import_segment "hol4"
34.7 +
34.8 +def_maps
34.9 + "RIGHT_ID" > "RIGHT_ID_def"
34.10 + "MONOID" > "MONOID_def"
34.11 + "LEFT_ID" > "LEFT_ID_def"
34.12 + "FCOMM" > "FCOMM_def"
34.13 + "COMM" > "COMM_def"
34.14 + "ASSOC" > "ASSOC_def"
34.15 +
34.16 +const_maps
34.17 + "RIGHT_ID" > "HOL4Base.operator.RIGHT_ID"
34.18 + "MONOID" > "HOL4Base.operator.MONOID"
34.19 + "LEFT_ID" > "HOL4Base.operator.LEFT_ID"
34.20 + "FCOMM" > "HOL4Base.operator.FCOMM"
34.21 + "COMM" > "HOL4Base.operator.COMM"
34.22 + "ASSOC" > "HOL4Base.operator.ASSOC"
34.23 +
34.24 +thm_maps
34.25 + "RIGHT_ID_def" > "HOL4Base.operator.RIGHT_ID_def"
34.26 + "RIGHT_ID_DEF" > "HOL4Base.operator.RIGHT_ID_DEF"
34.27 + "MONOID_def" > "HOL4Base.operator.MONOID_def"
34.28 + "MONOID_DISJ_F" > "HOL4Base.operator.MONOID_DISJ_F"
34.29 + "MONOID_DEF" > "HOL4Base.operator.MONOID_DEF"
34.30 + "MONOID_CONJ_T" > "HOL4Base.operator.MONOID_CONJ_T"
34.31 + "LEFT_ID_def" > "HOL4Base.operator.LEFT_ID_def"
34.32 + "LEFT_ID_DEF" > "HOL4Base.operator.LEFT_ID_DEF"
34.33 + "FCOMM_def" > "HOL4Base.operator.FCOMM_def"
34.34 + "FCOMM_DEF" > "HOL4Base.operator.FCOMM_DEF"
34.35 + "FCOMM_ASSOC" > "HOL4Base.operator.FCOMM_ASSOC"
34.36 + "COMM_def" > "HOL4Base.operator.COMM_def"
34.37 + "COMM_DEF" > "HOL4Base.operator.COMM_DEF"
34.38 + "ASSOC_def" > "HOL4Base.operator.ASSOC_def"
34.39 + "ASSOC_DISJ" > "HOL4Base.operator.ASSOC_DISJ"
34.40 + "ASSOC_DEF" > "HOL4Base.operator.ASSOC_DEF"
34.41 + "ASSOC_CONJ" > "HOL4Base.operator.ASSOC_CONJ"
34.42 +
34.43 +end
35.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
35.2 +++ b/src/HOL/Import/HOL/option.imp Fri Apr 02 17:37:45 2004 +0200
35.3 @@ -0,0 +1,45 @@
35.4 +import
35.5 +
35.6 +import_segment "hol4"
35.7 +
35.8 +type_maps
35.9 + "option" > "Datatype.option"
35.10 +
35.11 +const_maps
35.12 + "option_case" > "Datatype.option.option_case"
35.13 + "THE" > "Datatype.the"
35.14 + "SOME" > "Datatype.option.Some"
35.15 + "OPTION_MAP" > "Datatype.option_map"
35.16 + "OPTION_JOIN" > "HOL4Compat.OPTION_JOIN"
35.17 + "NONE" > "Datatype.option.None"
35.18 + "IS_SOME" > "HOL4Compat.IS_SOME"
35.19 + "IS_NONE" > "HOL4Compat.IS_NONE"
35.20 +
35.21 +thm_maps
35.22 + "option_nchotomy" > "Datatype.option.nchotomy"
35.23 + "option_induction" > "HOL4Compat.OPTION_JOIN.induct"
35.24 + "option_case_def" > "HOL4Compat.option_case_def"
35.25 + "option_case_cong" > "HOL4Base.option.option_case_cong"
35.26 + "option_case_compute" > "HOL4Base.option.option_case_compute"
35.27 + "option_CLAUSES" > "HOL4Base.option.option_CLAUSES"
35.28 + "THE_DEF" > "Datatype.the.simps"
35.29 + "SOME_11" > "Datatype.option.simps_3"
35.30 + "OPTION_MAP_EQ_SOME" > "HOL4Base.option.OPTION_MAP_EQ_SOME"
35.31 + "OPTION_MAP_EQ_NONE" > "Datatype.option_map_is_None"
35.32 + "OPTION_MAP_DEF" > "HOL4Compat.OPTION_MAP_DEF"
35.33 + "OPTION_JOIN_EQ_SOME" > "HOL4Base.option.OPTION_JOIN_EQ_SOME"
35.34 + "OPTION_JOIN_DEF" > "HOL4Compat.OPTION_JOIN_DEF"
35.35 + "NOT_SOME_NONE" > "Datatype.option.simps_2"
35.36 + "NOT_NONE_SOME" > "Datatype.option.simps_1"
35.37 + "IS_SOME_DEF" > "HOL4Compat.IS_SOME_DEF"
35.38 + "IS_NONE_DEF" > "HOL4Compat.IS_NONE_DEF"
35.39 +
35.40 +ignore_thms
35.41 + "option_axiom"
35.42 + "option_TY_DEF"
35.43 + "option_REP_ABS_DEF"
35.44 + "option_Axiom"
35.45 + "SOME_DEF"
35.46 + "NONE_DEF"
35.47 +
35.48 +end
36.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
36.2 +++ b/src/HOL/Import/HOL/pair.imp Fri Apr 02 17:37:45 2004 +0200
36.3 @@ -0,0 +1,70 @@
36.4 +import
36.5 +
36.6 +import_segment "hol4"
36.7 +
36.8 +def_maps
36.9 + "RPROD" > "RPROD_def"
36.10 + "LEX" > "LEX_def"
36.11 +
36.12 +type_maps
36.13 + "prod" > "*"
36.14 +
36.15 +const_maps
36.16 + "pair_case" > "split"
36.17 + "UNCURRY" > "split"
36.18 + "SND" > "snd"
36.19 + "RPROD" > "HOL4Base.pair.RPROD"
36.20 + "LEX" > "HOL4Base.pair.LEX"
36.21 + "FST" > "fst"
36.22 + "CURRY" > "curry"
36.23 + "," > "Pair"
36.24 + "##" > "prod_fun"
36.25 +
36.26 +thm_maps
36.27 + "pair_induction" > "Product_Type.prod_induct"
36.28 + "pair_case_thm" > "Product_Type.split"
36.29 + "pair_case_def" > "HOL4Compat.pair_case_def"
36.30 + "pair_case_cong" > "HOL4Base.pair.pair_case_cong"
36.31 + "pair_Axiom" > "HOL4Base.pair.pair_Axiom"
36.32 + "WF_RPROD" > "HOL4Base.pair.WF_RPROD"
36.33 + "WF_LEX" > "HOL4Base.pair.WF_LEX"
36.34 + "UNCURRY_VAR" > "Product_Type.split_beta"
36.35 + "UNCURRY_ONE_ONE_THM" > "HOL4Base.pair.UNCURRY_ONE_ONE_THM"
36.36 + "UNCURRY_DEF" > "Product_Type.split"
36.37 + "UNCURRY_CURRY_THM" > "Product_Type.split_curry"
36.38 + "UNCURRY_CONG" > "HOL4Base.pair.UNCURRY_CONG"
36.39 + "UNCURRY" > "Product_Type.split_beta"
36.40 + "SND" > "Product_Type.snd_conv"
36.41 + "RPROD_def" > "HOL4Base.pair.RPROD_def"
36.42 + "RPROD_DEF" > "HOL4Base.pair.RPROD_DEF"
36.43 + "PFORALL_THM" > "HOL4Base.pair.PFORALL_THM"
36.44 + "PEXISTS_THM" > "HOL4Base.pair.PEXISTS_THM"
36.45 + "PAIR_MAP_THM" > "Product_Type.prod_fun"
36.46 + "PAIR_MAP" > "HOL4Compat.PAIR_MAP"
36.47 + "PAIR_EQ" > "Product_Type.Pair_eq"
36.48 + "PAIR" > "HOL4Compat.PAIR"
36.49 + "LEX_def" > "HOL4Base.pair.LEX_def"
36.50 + "LEX_DEF" > "HOL4Base.pair.LEX_DEF"
36.51 + "LET2_RATOR" > "HOL4Base.pair.LET2_RATOR"
36.52 + "LET2_RAND" > "HOL4Base.pair.LET2_RAND"
36.53 + "LAMBDA_PROD" > "Product_Type.split_eta"
36.54 + "FST" > "Product_Type.fst_conv"
36.55 + "FORALL_PROD" > "Product_Type.split_paired_All"
36.56 + "EXISTS_PROD" > "Product_Type.split_paired_Ex"
36.57 + "ELIM_UNCURRY" > "Product_Type.split_beta"
36.58 + "ELIM_PFORALL" > "HOL4Base.pair.ELIM_PFORALL"
36.59 + "ELIM_PEXISTS" > "HOL4Base.pair.ELIM_PEXISTS"
36.60 + "CURRY_UNCURRY_THM" > "Product_Type.curry_split"
36.61 + "CURRY_ONE_ONE_THM" > "HOL4Base.pair.CURRY_ONE_ONE_THM"
36.62 + "CURRY_DEF" > "Product_Type.curry_conv"
36.63 + "CLOSED_PAIR_EQ" > "Product_Type.Pair_eq"
36.64 + "ABS_PAIR_THM" > "Product_Type.surj_pair"
36.65 +
36.66 +ignore_thms
36.67 + "prod_TY_DEF"
36.68 + "MK_PAIR_DEF"
36.69 + "IS_PAIR_DEF"
36.70 + "COMMA_DEF"
36.71 + "ABS_REP_prod"
36.72 +
36.73 +end
37.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
37.2 +++ b/src/HOL/Import/HOL/poly.imp Fri Apr 02 17:37:45 2004 +0200
37.3 @@ -0,0 +1,128 @@
37.4 +import
37.5 +
37.6 +import_segment "hol4"
37.7 +
37.8 +def_maps
37.9 + "rsquarefree" > "rsquarefree_def"
37.10 + "poly_order" > "poly_order_def"
37.11 + "poly_neg" > "poly_neg_primdef"
37.12 + "poly_mul" > "poly_mul_primdef"
37.13 + "poly_exp" > "poly_exp_primdef"
37.14 + "poly_divides" > "poly_divides_def"
37.15 + "poly_diff_aux" > "poly_diff_aux_primdef"
37.16 + "poly_add" > "poly_add_primdef"
37.17 + "poly" > "poly_primdef"
37.18 + "normalize" > "normalize_def"
37.19 + "diff" > "diff_def"
37.20 + "degree" > "degree_def"
37.21 + "##" > "##_def"
37.22 +
37.23 +const_maps
37.24 + "rsquarefree" > "HOL4Real.poly.rsquarefree"
37.25 + "poly_order" > "HOL4Real.poly.poly_order"
37.26 + "poly_neg" > "HOL4Real.poly.poly_neg"
37.27 + "poly_divides" > "HOL4Real.poly.poly_divides"
37.28 + "diff" > "HOL4Real.poly.diff"
37.29 + "degree" > "HOL4Real.poly.degree"
37.30 +
37.31 +thm_maps
37.32 + "rsquarefree_def" > "HOL4Real.poly.rsquarefree_def"
37.33 + "rsquarefree" > "HOL4Real.poly.rsquarefree"
37.34 + "poly_order_def" > "HOL4Real.poly.poly_order_def"
37.35 + "poly_order" > "HOL4Real.poly.poly_order"
37.36 + "poly_neg_primdef" > "HOL4Real.poly.poly_neg_primdef"
37.37 + "poly_neg_def" > "HOL4Real.poly.poly_neg_def"
37.38 + "poly_mul_def" > "HOL4Real.poly.poly_mul_def"
37.39 + "poly_exp_def" > "HOL4Real.poly.poly_exp_def"
37.40 + "poly_divides_def" > "HOL4Real.poly.poly_divides_def"
37.41 + "poly_divides" > "HOL4Real.poly.poly_divides"
37.42 + "poly_diff_def" > "HOL4Real.poly.poly_diff_def"
37.43 + "poly_diff_aux_def" > "HOL4Real.poly.poly_diff_aux_def"
37.44 + "poly_def" > "HOL4Real.poly.poly_def"
37.45 + "poly_cmul_def" > "HOL4Real.poly.poly_cmul_def"
37.46 + "poly_add_def" > "HOL4Real.poly.poly_add_def"
37.47 + "normalize" > "HOL4Real.poly.normalize"
37.48 + "diff_def" > "HOL4Real.poly.diff_def"
37.49 + "degree_def" > "HOL4Real.poly.degree_def"
37.50 + "degree" > "HOL4Real.poly.degree"
37.51 + "RSQUAREFREE_ROOTS" > "HOL4Real.poly.RSQUAREFREE_ROOTS"
37.52 + "RSQUAREFREE_DECOMP" > "HOL4Real.poly.RSQUAREFREE_DECOMP"
37.53 + "POLY_ZERO_LEMMA" > "HOL4Real.poly.POLY_ZERO_LEMMA"
37.54 + "POLY_ZERO" > "HOL4Real.poly.POLY_ZERO"
37.55 + "POLY_SQUAREFREE_DECOMP_ORDER" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP_ORDER"
37.56 + "POLY_SQUAREFREE_DECOMP" > "HOL4Real.poly.POLY_SQUAREFREE_DECOMP"
37.57 + "POLY_ROOTS_INDEX_LENGTH" > "HOL4Real.poly.POLY_ROOTS_INDEX_LENGTH"
37.58 + "POLY_ROOTS_INDEX_LEMMA" > "HOL4Real.poly.POLY_ROOTS_INDEX_LEMMA"
37.59 + "POLY_ROOTS_FINITE_SET" > "HOL4Real.poly.POLY_ROOTS_FINITE_SET"
37.60 + "POLY_ROOTS_FINITE_LEMMA" > "HOL4Real.poly.POLY_ROOTS_FINITE_LEMMA"
37.61 + "POLY_ROOTS_FINITE" > "HOL4Real.poly.POLY_ROOTS_FINITE"
37.62 + "POLY_PRIME_EQ_0" > "HOL4Real.poly.POLY_PRIME_EQ_0"
37.63 + "POLY_PRIMES" > "HOL4Real.poly.POLY_PRIMES"
37.64 + "POLY_ORDER_EXISTS" > "HOL4Real.poly.POLY_ORDER_EXISTS"
37.65 + "POLY_ORDER" > "HOL4Real.poly.POLY_ORDER"
37.66 + "POLY_NORMALIZE" > "HOL4Real.poly.POLY_NORMALIZE"
37.67 + "POLY_NEG_CLAUSES" > "HOL4Real.poly.POLY_NEG_CLAUSES"
37.68 + "POLY_NEG" > "HOL4Real.poly.POLY_NEG"
37.69 + "POLY_MVT" > "HOL4Real.poly.POLY_MVT"
37.70 + "POLY_MUL_LCANCEL" > "HOL4Real.poly.POLY_MUL_LCANCEL"
37.71 + "POLY_MUL_CLAUSES" > "HOL4Real.poly.POLY_MUL_CLAUSES"
37.72 + "POLY_MUL_ASSOC" > "HOL4Real.poly.POLY_MUL_ASSOC"
37.73 + "POLY_MUL" > "HOL4Real.poly.POLY_MUL"
37.74 + "POLY_MONO" > "HOL4Real.poly.POLY_MONO"
37.75 + "POLY_LINEAR_REM" > "HOL4Real.poly.POLY_LINEAR_REM"
37.76 + "POLY_LINEAR_DIVIDES" > "HOL4Real.poly.POLY_LINEAR_DIVIDES"
37.77 + "POLY_LENGTH_MUL" > "HOL4Real.poly.POLY_LENGTH_MUL"
37.78 + "POLY_IVT_POS" > "HOL4Real.poly.POLY_IVT_POS"
37.79 + "POLY_IVT_NEG" > "HOL4Real.poly.POLY_IVT_NEG"
37.80 + "POLY_EXP_PRIME_EQ_0" > "HOL4Real.poly.POLY_EXP_PRIME_EQ_0"
37.81 + "POLY_EXP_EQ_0" > "HOL4Real.poly.POLY_EXP_EQ_0"
37.82 + "POLY_EXP_DIVIDES" > "HOL4Real.poly.POLY_EXP_DIVIDES"
37.83 + "POLY_EXP_ADD" > "HOL4Real.poly.POLY_EXP_ADD"
37.84 + "POLY_EXP" > "HOL4Real.poly.POLY_EXP"
37.85 + "POLY_ENTIRE_LEMMA" > "HOL4Real.poly.POLY_ENTIRE_LEMMA"
37.86 + "POLY_ENTIRE" > "HOL4Real.poly.POLY_ENTIRE"
37.87 + "POLY_DIVIDES_ZERO" > "HOL4Real.poly.POLY_DIVIDES_ZERO"
37.88 + "POLY_DIVIDES_TRANS" > "HOL4Real.poly.POLY_DIVIDES_TRANS"
37.89 + "POLY_DIVIDES_SUB2" > "HOL4Real.poly.POLY_DIVIDES_SUB2"
37.90 + "POLY_DIVIDES_SUB" > "HOL4Real.poly.POLY_DIVIDES_SUB"
37.91 + "POLY_DIVIDES_REFL" > "HOL4Real.poly.POLY_DIVIDES_REFL"
37.92 + "POLY_DIVIDES_EXP" > "HOL4Real.poly.POLY_DIVIDES_EXP"
37.93 + "POLY_DIVIDES_ADD" > "HOL4Real.poly.POLY_DIVIDES_ADD"
37.94 + "POLY_DIFF_ZERO" > "HOL4Real.poly.POLY_DIFF_ZERO"
37.95 + "POLY_DIFF_WELLDEF" > "HOL4Real.poly.POLY_DIFF_WELLDEF"
37.96 + "POLY_DIFF_NEG" > "HOL4Real.poly.POLY_DIFF_NEG"
37.97 + "POLY_DIFF_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_MUL_LEMMA"
37.98 + "POLY_DIFF_MUL" > "HOL4Real.poly.POLY_DIFF_MUL"
37.99 + "POLY_DIFF_LEMMA" > "HOL4Real.poly.POLY_DIFF_LEMMA"
37.100 + "POLY_DIFF_ISZERO" > "HOL4Real.poly.POLY_DIFF_ISZERO"
37.101 + "POLY_DIFF_EXP_PRIME" > "HOL4Real.poly.POLY_DIFF_EXP_PRIME"
37.102 + "POLY_DIFF_EXP" > "HOL4Real.poly.POLY_DIFF_EXP"
37.103 + "POLY_DIFF_CMUL" > "HOL4Real.poly.POLY_DIFF_CMUL"
37.104 + "POLY_DIFF_CLAUSES" > "HOL4Real.poly.POLY_DIFF_CLAUSES"
37.105 + "POLY_DIFF_AUX_NEG" > "HOL4Real.poly.POLY_DIFF_AUX_NEG"
37.106 + "POLY_DIFF_AUX_MUL_LEMMA" > "HOL4Real.poly.POLY_DIFF_AUX_MUL_LEMMA"
37.107 + "POLY_DIFF_AUX_ISZERO" > "HOL4Real.poly.POLY_DIFF_AUX_ISZERO"
37.108 + "POLY_DIFF_AUX_CMUL" > "HOL4Real.poly.POLY_DIFF_AUX_CMUL"
37.109 + "POLY_DIFF_AUX_ADD" > "HOL4Real.poly.POLY_DIFF_AUX_ADD"
37.110 + "POLY_DIFF_ADD" > "HOL4Real.poly.POLY_DIFF_ADD"
37.111 + "POLY_DIFFERENTIABLE" > "HOL4Real.poly.POLY_DIFFERENTIABLE"
37.112 + "POLY_DIFF" > "HOL4Real.poly.POLY_DIFF"
37.113 + "POLY_CONT" > "HOL4Real.poly.POLY_CONT"
37.114 + "POLY_CMUL_CLAUSES" > "HOL4Real.poly.POLY_CMUL_CLAUSES"
37.115 + "POLY_CMUL" > "HOL4Real.poly.POLY_CMUL"
37.116 + "POLY_ADD_RZERO" > "HOL4Real.poly.POLY_ADD_RZERO"
37.117 + "POLY_ADD_CLAUSES" > "HOL4Real.poly.POLY_ADD_CLAUSES"
37.118 + "POLY_ADD" > "HOL4Real.poly.POLY_ADD"
37.119 + "ORDER_UNIQUE" > "HOL4Real.poly.ORDER_UNIQUE"
37.120 + "ORDER_THM" > "HOL4Real.poly.ORDER_THM"
37.121 + "ORDER_ROOT" > "HOL4Real.poly.ORDER_ROOT"
37.122 + "ORDER_POLY" > "HOL4Real.poly.ORDER_POLY"
37.123 + "ORDER_MUL" > "HOL4Real.poly.ORDER_MUL"
37.124 + "ORDER_DIVIDES" > "HOL4Real.poly.ORDER_DIVIDES"
37.125 + "ORDER_DIFF" > "HOL4Real.poly.ORDER_DIFF"
37.126 + "ORDER_DECOMP" > "HOL4Real.poly.ORDER_DECOMP"
37.127 + "ORDER" > "HOL4Real.poly.ORDER"
37.128 + "FINITE_LEMMA" > "HOL4Real.poly.FINITE_LEMMA"
37.129 + "DEGREE_ZERO" > "HOL4Real.poly.DEGREE_ZERO"
37.130 +
37.131 +end
38.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
38.2 +++ b/src/HOL/Import/HOL/powser.imp Fri Apr 02 17:37:45 2004 +0200
38.3 @@ -0,0 +1,30 @@
38.4 +import
38.5 +
38.6 +import_segment "hol4"
38.7 +
38.8 +def_maps
38.9 + "diffs" > "diffs_def"
38.10 +
38.11 +const_maps
38.12 + "diffs" > "HOL4Real.powser.diffs"
38.13 +
38.14 +thm_maps
38.15 + "diffs_def" > "HOL4Real.powser.diffs_def"
38.16 + "diffs" > "HOL4Real.powser.diffs"
38.17 + "TERMDIFF_LEMMA5" > "HOL4Real.powser.TERMDIFF_LEMMA5"
38.18 + "TERMDIFF_LEMMA4" > "HOL4Real.powser.TERMDIFF_LEMMA4"
38.19 + "TERMDIFF_LEMMA3" > "HOL4Real.powser.TERMDIFF_LEMMA3"
38.20 + "TERMDIFF_LEMMA2" > "HOL4Real.powser.TERMDIFF_LEMMA2"
38.21 + "TERMDIFF_LEMMA1" > "HOL4Real.powser.TERMDIFF_LEMMA1"
38.22 + "TERMDIFF" > "HOL4Real.powser.TERMDIFF"
38.23 + "POWSER_INSIDEA" > "HOL4Real.powser.POWSER_INSIDEA"
38.24 + "POWSER_INSIDE" > "HOL4Real.powser.POWSER_INSIDE"
38.25 + "POWREV" > "HOL4Real.powser.POWREV"
38.26 + "POWDIFF_LEMMA" > "HOL4Real.powser.POWDIFF_LEMMA"
38.27 + "POWDIFF" > "HOL4Real.powser.POWDIFF"
38.28 + "DIFFS_NEG" > "HOL4Real.powser.DIFFS_NEG"
38.29 + "DIFFS_LEMMA2" > "HOL4Real.powser.DIFFS_LEMMA2"
38.30 + "DIFFS_LEMMA" > "HOL4Real.powser.DIFFS_LEMMA"
38.31 + "DIFFS_EQUIV" > "HOL4Real.powser.DIFFS_EQUIV"
38.32 +
38.33 +end
39.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
39.2 +++ b/src/HOL/Import/HOL/pred_set.imp Fri Apr 02 17:37:45 2004 +0200
39.3 @@ -0,0 +1,322 @@
39.4 +import
39.5 +
39.6 +import_segment "hol4"
39.7 +
39.8 +def_maps
39.9 + "count" > "count_primdef"
39.10 + "UNIV" > "UNIV_def"
39.11 + "UNION" > "UNION_def"
39.12 + "SURJ" > "SURJ_def"
39.13 + "SUBSET" > "SUBSET_def"
39.14 + "SING" > "SING_def"
39.15 + "RINV" > "RINV_def"
39.16 + "REST" > "REST_def"
39.17 + "PSUBSET" > "PSUBSET_def"
39.18 + "LINV" > "LINV_def"
39.19 + "ITSET_tupled" > "ITSET_tupled_def"
39.20 + "ITSET" > "ITSET_def"
39.21 + "INTER" > "INTER_def"
39.22 + "INSERT" > "INSERT_def"
39.23 + "INJ" > "INJ_def"
39.24 + "INFINITE" > "INFINITE_def"
39.25 + "IMAGE" > "IMAGE_def"
39.26 + "GSPEC" > "GSPEC_def"
39.27 + "FINITE" > "FINITE_def"
39.28 + "EMPTY" > "EMPTY_def"
39.29 + "DISJOINT" > "DISJOINT_def"
39.30 + "DIFF" > "DIFF_def"
39.31 + "DELETE" > "DELETE_def"
39.32 + "CROSS" > "CROSS_def"
39.33 + "COMPL" > "COMPL_def"
39.34 + "CHOICE" > "CHOICE_def"
39.35 + "CARD" > "CARD_def"
39.36 + "BIJ" > "BIJ_def"
39.37 + "BIGUNION" > "BIGUNION_def"
39.38 + "BIGINTER" > "BIGINTER_def"
39.39 +
39.40 +const_maps
39.41 + "count" > "HOL4Base.pred_set.count"
39.42 + "UNIV" > "HOL4Base.pred_set.UNIV"
39.43 + "UNION" > "HOL4Base.pred_set.UNION"
39.44 + "SURJ" > "HOL4Base.pred_set.SURJ"
39.45 + "SUBSET" > "HOL4Base.pred_set.SUBSET"
39.46 + "SING" > "HOL4Base.pred_set.SING"
39.47 + "REST" > "HOL4Base.pred_set.REST"
39.48 + "PSUBSET" > "HOL4Base.pred_set.PSUBSET"
39.49 + "ITSET_tupled" > "HOL4Base.pred_set.ITSET_tupled"
39.50 + "ITSET" > "HOL4Base.pred_set.ITSET"
39.51 + "INTER" > "HOL4Base.pred_set.INTER"
39.52 + "INSERT" > "HOL4Base.pred_set.INSERT"
39.53 + "INJ" > "HOL4Base.pred_set.INJ"
39.54 + "INFINITE" > "HOL4Base.pred_set.INFINITE"
39.55 + "IMAGE" > "HOL4Base.pred_set.IMAGE"
39.56 + "FINITE" > "HOL4Base.pred_set.FINITE"
39.57 + "EMPTY" > "HOL4Base.pred_set.EMPTY"
39.58 + "DISJOINT" > "HOL4Base.pred_set.DISJOINT"
39.59 + "DIFF" > "HOL4Base.pred_set.DIFF"
39.60 + "DELETE" > "HOL4Base.pred_set.DELETE"
39.61 + "CROSS" > "HOL4Base.pred_set.CROSS"
39.62 + "COMPL" > "HOL4Base.pred_set.COMPL"
39.63 + "BIJ" > "HOL4Base.pred_set.BIJ"
39.64 + "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
39.65 + "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
39.66 +
39.67 +thm_maps
39.68 + "count_primdef" > "HOL4Base.pred_set.count_primdef"
39.69 + "count_def" > "HOL4Base.pred_set.count_def"
39.70 + "UNIV_def" > "HOL4Base.pred_set.UNIV_def"
39.71 + "UNIV_SUBSET" > "HOL4Base.pred_set.UNIV_SUBSET"
39.72 + "UNIV_NOT_EMPTY" > "HOL4Base.pred_set.UNIV_NOT_EMPTY"
39.73 + "UNIV_DEF" > "HOL4Base.pred_set.UNIV_DEF"
39.74 + "UNION_def" > "HOL4Base.pred_set.UNION_def"
39.75 + "UNION_UNIV" > "HOL4Base.pred_set.UNION_UNIV"
39.76 + "UNION_SUBSET" > "HOL4Base.pred_set.UNION_SUBSET"
39.77 + "UNION_OVER_INTER" > "HOL4Base.pred_set.UNION_OVER_INTER"
39.78 + "UNION_IDEMPOT" > "HOL4Base.pred_set.UNION_IDEMPOT"
39.79 + "UNION_EMPTY" > "HOL4Base.pred_set.UNION_EMPTY"
39.80 + "UNION_DEF" > "HOL4Base.pred_set.UNION_DEF"
39.81 + "UNION_COMM" > "HOL4Base.pred_set.UNION_COMM"
39.82 + "UNION_ASSOC" > "HOL4Base.pred_set.UNION_ASSOC"
39.83 + "SURJ_def" > "HOL4Base.pred_set.SURJ_def"
39.84 + "SURJ_ID" > "HOL4Base.pred_set.SURJ_ID"
39.85 + "SURJ_EMPTY" > "HOL4Base.pred_set.SURJ_EMPTY"
39.86 + "SURJ_DEF" > "HOL4Base.pred_set.SURJ_DEF"
39.87 + "SURJ_COMPOSE" > "HOL4Base.pred_set.SURJ_COMPOSE"
39.88 + "SUBSET_def" > "HOL4Base.pred_set.SUBSET_def"
39.89 + "SUBSET_UNIV" > "HOL4Base.pred_set.SUBSET_UNIV"
39.90 + "SUBSET_UNION_ABSORPTION" > "HOL4Base.pred_set.SUBSET_UNION_ABSORPTION"
39.91 + "SUBSET_UNION" > "HOL4Base.pred_set.SUBSET_UNION"
39.92 + "SUBSET_TRANS" > "HOL4Base.pred_set.SUBSET_TRANS"
39.93 + "SUBSET_REFL" > "HOL4Base.pred_set.SUBSET_REFL"
39.94 + "SUBSET_INTER_ABSORPTION" > "HOL4Base.pred_set.SUBSET_INTER_ABSORPTION"
39.95 + "SUBSET_INTER" > "HOL4Base.pred_set.SUBSET_INTER"
39.96 + "SUBSET_INSERT_DELETE" > "HOL4Base.pred_set.SUBSET_INSERT_DELETE"
39.97 + "SUBSET_INSERT" > "HOL4Base.pred_set.SUBSET_INSERT"
39.98 + "SUBSET_FINITE" > "HOL4Base.pred_set.SUBSET_FINITE"
39.99 + "SUBSET_EMPTY" > "HOL4Base.pred_set.SUBSET_EMPTY"
39.100 + "SUBSET_DELETE" > "HOL4Base.pred_set.SUBSET_DELETE"
39.101 + "SUBSET_DEF" > "HOL4Base.pred_set.SUBSET_DEF"
39.102 + "SUBSET_BIGINTER" > "HOL4Base.pred_set.SUBSET_BIGINTER"
39.103 + "SUBSET_ANTISYM" > "HOL4Base.pred_set.SUBSET_ANTISYM"
39.104 + "SPECIFICATION" > "HOL4Base.bool.IN_DEF"
39.105 + "SING_def" > "HOL4Base.pred_set.SING_def"
39.106 + "SING_IFF_EMPTY_REST" > "HOL4Base.pred_set.SING_IFF_EMPTY_REST"
39.107 + "SING_IFF_CARD1" > "HOL4Base.pred_set.SING_IFF_CARD1"
39.108 + "SING_FINITE" > "HOL4Base.pred_set.SING_FINITE"
39.109 + "SING_DELETE" > "HOL4Base.pred_set.SING_DELETE"
39.110 + "SING_DEF" > "HOL4Base.pred_set.SING_DEF"
39.111 + "SING" > "HOL4Base.pred_set.SING"
39.112 + "SET_MINIMUM" > "HOL4Base.pred_set.SET_MINIMUM"
39.113 + "SET_CASES" > "HOL4Base.pred_set.SET_CASES"
39.114 + "RINV_DEF" > "HOL4Base.pred_set.RINV_DEF"
39.115 + "REST_def" > "HOL4Base.pred_set.REST_def"
39.116 + "REST_SUBSET" > "HOL4Base.pred_set.REST_SUBSET"
39.117 + "REST_SING" > "HOL4Base.pred_set.REST_SING"
39.118 + "REST_PSUBSET" > "HOL4Base.pred_set.REST_PSUBSET"
39.119 + "REST_DEF" > "HOL4Base.pred_set.REST_DEF"
39.120 + "PSUBSET_def" > "HOL4Base.pred_set.PSUBSET_def"
39.121 + "PSUBSET_UNIV" > "HOL4Base.pred_set.PSUBSET_UNIV"
39.122 + "PSUBSET_TRANS" > "HOL4Base.pred_set.PSUBSET_TRANS"
39.123 + "PSUBSET_MEMBER" > "HOL4Base.pred_set.PSUBSET_MEMBER"
39.124 + "PSUBSET_IRREFL" > "HOL4Base.pred_set.PSUBSET_IRREFL"
39.125 + "PSUBSET_INSERT_SUBSET" > "HOL4Base.pred_set.PSUBSET_INSERT_SUBSET"
39.126 + "PSUBSET_FINITE" > "HOL4Base.pred_set.PSUBSET_FINITE"
39.127 + "PSUBSET_DEF" > "HOL4Base.pred_set.PSUBSET_DEF"
39.128 + "NUM_SET_WOP" > "HOL4Base.pred_set.NUM_SET_WOP"
39.129 + "NOT_UNIV_PSUBSET" > "HOL4Base.pred_set.NOT_UNIV_PSUBSET"
39.130 + "NOT_SING_EMPTY" > "HOL4Base.pred_set.NOT_SING_EMPTY"
39.131 + "NOT_PSUBSET_EMPTY" > "HOL4Base.pred_set.NOT_PSUBSET_EMPTY"
39.132 + "NOT_IN_FINITE" > "HOL4Base.pred_set.NOT_IN_FINITE"
39.133 + "NOT_IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
39.134 + "NOT_INSERT_EMPTY" > "HOL4Base.pred_set.NOT_INSERT_EMPTY"
39.135 + "NOT_EQUAL_SETS" > "HOL4Base.pred_set.NOT_EQUAL_SETS"
39.136 + "NOT_EMPTY_SING" > "HOL4Base.pred_set.NOT_EMPTY_SING"
39.137 + "NOT_EMPTY_INSERT" > "HOL4Base.pred_set.NOT_EMPTY_INSERT"
39.138 + "MEMBER_NOT_EMPTY" > "HOL4Base.pred_set.MEMBER_NOT_EMPTY"
39.139 + "LINV_DEF" > "HOL4Base.pred_set.LINV_DEF"
39.140 + "LESS_CARD_DIFF" > "HOL4Base.pred_set.LESS_CARD_DIFF"
39.141 + "ITSET_tupled_primitive_def" > "HOL4Base.pred_set.ITSET_tupled_primitive_def"
39.142 + "ITSET_tupled_def" > "HOL4Base.pred_set.ITSET_tupled_def"
39.143 + "ITSET_def" > "HOL4Base.pred_set.ITSET_def"
39.144 + "ITSET_curried_def" > "HOL4Base.pred_set.ITSET_curried_def"
39.145 + "ITSET_THM" > "HOL4Base.pred_set.ITSET_THM"
39.146 + "ITSET_IND" > "HOL4Base.pred_set.ITSET_IND"
39.147 + "ITSET_EMPTY" > "HOL4Base.pred_set.ITSET_EMPTY"
39.148 + "IN_UNIV" > "HOL4Base.pred_set.IN_UNIV"
39.149 + "IN_UNION" > "HOL4Base.pred_set.IN_UNION"
39.150 + "IN_SING" > "HOL4Base.pred_set.IN_SING"
39.151 + "IN_INTER" > "HOL4Base.pred_set.IN_INTER"
39.152 + "IN_INSERT" > "HOL4Base.pred_set.IN_INSERT"
39.153 + "IN_INFINITE_NOT_FINITE" > "HOL4Base.pred_set.IN_INFINITE_NOT_FINITE"
39.154 + "IN_IMAGE" > "HOL4Base.pred_set.IN_IMAGE"
39.155 + "IN_DISJOINT" > "HOL4Base.pred_set.IN_DISJOINT"
39.156 + "IN_DIFF" > "HOL4Base.pred_set.IN_DIFF"
39.157 + "IN_DELETE_EQ" > "HOL4Base.pred_set.IN_DELETE_EQ"
39.158 + "IN_DELETE" > "HOL4Base.pred_set.IN_DELETE"
39.159 + "IN_CROSS" > "HOL4Base.pred_set.IN_CROSS"
39.160 + "IN_COUNT" > "HOL4Base.pred_set.IN_COUNT"
39.161 + "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
39.162 + "IN_BIGUNION" > "HOL4Base.pred_set.IN_BIGUNION"
39.163 + "IN_BIGINTER" > "HOL4Base.pred_set.IN_BIGINTER"
39.164 + "INTER_def" > "HOL4Base.pred_set.INTER_def"
39.165 + "INTER_UNIV" > "HOL4Base.pred_set.INTER_UNIV"
39.166 + "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
39.167 + "INTER_SUBSET" > "HOL4Base.pred_set.INTER_SUBSET"
39.168 + "INTER_OVER_UNION" > "HOL4Base.pred_set.INTER_OVER_UNION"
39.169 + "INTER_IDEMPOT" > "HOL4Base.pred_set.INTER_IDEMPOT"
39.170 + "INTER_FINITE" > "HOL4Base.pred_set.INTER_FINITE"
39.171 + "INTER_EMPTY" > "HOL4Base.pred_set.INTER_EMPTY"
39.172 + "INTER_DEF" > "HOL4Base.pred_set.INTER_DEF"
39.173 + "INTER_COMM" > "HOL4Base.pred_set.INTER_COMM"
39.174 + "INTER_ASSOC" > "HOL4Base.pred_set.INTER_ASSOC"
39.175 + "INSERT_def" > "HOL4Base.pred_set.INSERT_def"
39.176 + "INSERT_UNIV" > "HOL4Base.pred_set.INSERT_UNIV"
39.177 + "INSERT_UNION_EQ" > "HOL4Base.pred_set.INSERT_UNION_EQ"
39.178 + "INSERT_UNION" > "HOL4Base.pred_set.INSERT_UNION"
39.179 + "INSERT_SUBSET" > "HOL4Base.pred_set.INSERT_SUBSET"
39.180 + "INSERT_SING_UNION" > "HOL4Base.pred_set.INSERT_SING_UNION"
39.181 + "INSERT_INTER" > "HOL4Base.pred_set.INSERT_INTER"
39.182 + "INSERT_INSERT" > "HOL4Base.pred_set.INSERT_INSERT"
39.183 + "INSERT_DIFF" > "HOL4Base.pred_set.INSERT_DIFF"
39.184 + "INSERT_DELETE" > "HOL4Base.pred_set.INSERT_DELETE"
39.185 + "INSERT_DEF" > "HOL4Base.pred_set.INSERT_DEF"
39.186 + "INSERT_COMM" > "HOL4Base.pred_set.INSERT_COMM"
39.187 + "INJ_def" > "HOL4Base.pred_set.INJ_def"
39.188 + "INJ_ID" > "HOL4Base.pred_set.INJ_ID"
39.189 + "INJ_EMPTY" > "HOL4Base.pred_set.INJ_EMPTY"
39.190 + "INJ_DEF" > "HOL4Base.pred_set.INJ_DEF"
39.191 + "INJ_COMPOSE" > "HOL4Base.pred_set.INJ_COMPOSE"
39.192 + "INFINITE_def" > "HOL4Base.pred_set.INFINITE_def"
39.193 + "INFINITE_UNIV" > "HOL4Base.pred_set.INFINITE_UNIV"
39.194 + "INFINITE_SUBSET" > "HOL4Base.pred_set.INFINITE_SUBSET"
39.195 + "INFINITE_INHAB" > "HOL4Base.pred_set.INFINITE_INHAB"
39.196 + "INFINITE_DIFF_FINITE" > "HOL4Base.pred_set.INFINITE_DIFF_FINITE"
39.197 + "INFINITE_DEF" > "HOL4Base.pred_set.INFINITE_DEF"
39.198 + "IMAGE_def" > "HOL4Base.pred_set.IMAGE_def"
39.199 + "IMAGE_UNION" > "HOL4Base.pred_set.IMAGE_UNION"
39.200 + "IMAGE_SURJ" > "HOL4Base.pred_set.IMAGE_SURJ"
39.201 + "IMAGE_SUBSET" > "HOL4Base.pred_set.IMAGE_SUBSET"
39.202 + "IMAGE_INTER" > "HOL4Base.pred_set.IMAGE_INTER"
39.203 + "IMAGE_INSERT" > "HOL4Base.pred_set.IMAGE_INSERT"
39.204 + "IMAGE_IN" > "HOL4Base.pred_set.IMAGE_IN"
39.205 + "IMAGE_ID" > "HOL4Base.pred_set.IMAGE_ID"
39.206 + "IMAGE_FINITE" > "HOL4Base.pred_set.IMAGE_FINITE"
39.207 + "IMAGE_EQ_EMPTY" > "HOL4Base.pred_set.IMAGE_EQ_EMPTY"
39.208 + "IMAGE_EMPTY" > "HOL4Base.pred_set.IMAGE_EMPTY"
39.209 + "IMAGE_DELETE" > "HOL4Base.pred_set.IMAGE_DELETE"
39.210 + "IMAGE_DEF" > "HOL4Base.pred_set.IMAGE_DEF"
39.211 + "IMAGE_COMPOSE" > "HOL4Base.pred_set.IMAGE_COMPOSE"
39.212 + "IMAGE_11_INFINITE" > "HOL4Base.pred_set.IMAGE_11_INFINITE"
39.213 + "GSPECIFICATION" > "HOL4Base.pred_set.GSPECIFICATION"
39.214 + "FINITE_def" > "HOL4Base.pred_set.FINITE_def"
39.215 + "FINITE_WEAK_ENUMERATE" > "HOL4Base.pred_set.FINITE_WEAK_ENUMERATE"
39.216 + "FINITE_UNION" > "HOL4Base.pred_set.FINITE_UNION"
39.217 + "FINITE_SING" > "HOL4Base.pred_set.FINITE_SING"
39.218 + "FINITE_PSUBSET_UNIV" > "HOL4Base.pred_set.FINITE_PSUBSET_UNIV"
39.219 + "FINITE_PSUBSET_INFINITE" > "HOL4Base.pred_set.FINITE_PSUBSET_INFINITE"
39.220 + "FINITE_ISO_NUM" > "HOL4Base.pred_set.FINITE_ISO_NUM"
39.221 + "FINITE_INSERT" > "HOL4Base.pred_set.FINITE_INSERT"
39.222 + "FINITE_INDUCT" > "HOL4Base.pred_set.FINITE_INDUCT"
39.223 + "FINITE_EMPTY" > "HOL4Base.pred_set.FINITE_EMPTY"
39.224 + "FINITE_DIFF" > "HOL4Base.pred_set.FINITE_DIFF"
39.225 + "FINITE_DELETE" > "HOL4Base.pred_set.FINITE_DELETE"
39.226 + "FINITE_DEF" > "HOL4Base.pred_set.FINITE_DEF"
39.227 + "FINITE_CROSS_EQ" > "HOL4Base.pred_set.FINITE_CROSS_EQ"
39.228 + "FINITE_CROSS" > "HOL4Base.pred_set.FINITE_CROSS"
39.229 + "FINITE_COUNT" > "HOL4Base.pred_set.FINITE_COUNT"
39.230 + "FINITE_COMPLETE_INDUCTION" > "HOL4Base.pred_set.FINITE_COMPLETE_INDUCTION"
39.231 + "FINITE_BIGUNION" > "HOL4Base.pred_set.FINITE_BIGUNION"
39.232 + "EXTENSION" > "HOL4Base.pred_set.EXTENSION"
39.233 + "EQ_UNIV" > "HOL4Base.pred_set.EQ_UNIV"
39.234 + "EQUAL_SING" > "HOL4Base.pred_set.EQUAL_SING"
39.235 + "EMPTY_def" > "HOL4Base.pred_set.EMPTY_def"
39.236 + "EMPTY_UNION" > "HOL4Base.pred_set.EMPTY_UNION"
39.237 + "EMPTY_SUBSET" > "HOL4Base.pred_set.EMPTY_SUBSET"
39.238 + "EMPTY_NOT_UNIV" > "HOL4Base.pred_set.EMPTY_NOT_UNIV"
39.239 + "EMPTY_DIFF" > "HOL4Base.pred_set.EMPTY_DIFF"
39.240 + "EMPTY_DELETE" > "HOL4Base.pred_set.EMPTY_DELETE"
39.241 + "EMPTY_DEF" > "HOL4Base.pred_set.EMPTY_DEF"
39.242 + "DISJOINT_def" > "HOL4Base.pred_set.DISJOINT_def"
39.243 + "DISJOINT_UNION_BOTH" > "HOL4Base.pred_set.DISJOINT_UNION_BOTH"
39.244 + "DISJOINT_UNION" > "HOL4Base.pred_set.DISJOINT_UNION"
39.245 + "DISJOINT_SYM" > "HOL4Base.pred_set.DISJOINT_SYM"
39.246 + "DISJOINT_SING_EMPTY" > "HOL4Base.pred_set.DISJOINT_SING_EMPTY"
39.247 + "DISJOINT_INSERT" > "HOL4Base.pred_set.DISJOINT_INSERT"
39.248 + "DISJOINT_EMPTY_REFL" > "HOL4Base.pred_set.DISJOINT_EMPTY_REFL"
39.249 + "DISJOINT_EMPTY" > "HOL4Base.pred_set.DISJOINT_EMPTY"
39.250 + "DISJOINT_DELETE_SYM" > "HOL4Base.pred_set.DISJOINT_DELETE_SYM"
39.251 + "DISJOINT_DEF" > "HOL4Base.pred_set.DISJOINT_DEF"
39.252 + "DISJOINT_BIGUNION" > "HOL4Base.pred_set.DISJOINT_BIGUNION"
39.253 + "DISJOINT_BIGINTER" > "HOL4Base.pred_set.DISJOINT_BIGINTER"
39.254 + "DIFF_def" > "HOL4Base.pred_set.DIFF_def"
39.255 + "DIFF_UNIV" > "HOL4Base.pred_set.DIFF_UNIV"
39.256 + "DIFF_INSERT" > "HOL4Base.pred_set.DIFF_INSERT"
39.257 + "DIFF_EQ_EMPTY" > "HOL4Base.pred_set.DIFF_EQ_EMPTY"
39.258 + "DIFF_EMPTY" > "HOL4Base.pred_set.DIFF_EMPTY"
39.259 + "DIFF_DIFF" > "HOL4Base.pred_set.DIFF_DIFF"
39.260 + "DIFF_DEF" > "HOL4Base.pred_set.DIFF_DEF"
39.261 + "DELETE_def" > "HOL4Base.pred_set.DELETE_def"
39.262 + "DELETE_SUBSET" > "HOL4Base.pred_set.DELETE_SUBSET"
39.263 + "DELETE_NON_ELEMENT" > "HOL4Base.pred_set.DELETE_NON_ELEMENT"
39.264 + "DELETE_INTER" > "HOL4Base.pred_set.DELETE_INTER"
39.265 + "DELETE_INSERT" > "HOL4Base.pred_set.DELETE_INSERT"
39.266 + "DELETE_EQ_SING" > "HOL4Base.pred_set.DELETE_EQ_SING"
39.267 + "DELETE_DELETE" > "HOL4Base.pred_set.DELETE_DELETE"
39.268 + "DELETE_DEF" > "HOL4Base.pred_set.DELETE_DEF"
39.269 + "DELETE_COMM" > "HOL4Base.pred_set.DELETE_COMM"
39.270 + "DECOMPOSITION" > "HOL4Base.pred_set.DECOMPOSITION"
39.271 + "CROSS_def" > "HOL4Base.pred_set.CROSS_def"
39.272 + "CROSS_SUBSET" > "HOL4Base.pred_set.CROSS_SUBSET"
39.273 + "CROSS_SINGS" > "HOL4Base.pred_set.CROSS_SINGS"
39.274 + "CROSS_INSERT_RIGHT" > "HOL4Base.pred_set.CROSS_INSERT_RIGHT"
39.275 + "CROSS_INSERT_LEFT" > "HOL4Base.pred_set.CROSS_INSERT_LEFT"
39.276 + "CROSS_EMPTY" > "HOL4Base.pred_set.CROSS_EMPTY"
39.277 + "CROSS_DEF" > "HOL4Base.pred_set.CROSS_DEF"
39.278 + "COUNT_ZERO" > "HOL4Base.pred_set.COUNT_ZERO"
39.279 + "COUNT_SUC" > "HOL4Base.pred_set.COUNT_SUC"
39.280 + "COMPONENT" > "HOL4Base.pred_set.COMPONENT"
39.281 + "COMPL_def" > "HOL4Base.pred_set.COMPL_def"
39.282 + "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
39.283 + "COMPL_EMPTY" > "HOL4Base.pred_set.COMPL_EMPTY"
39.284 + "COMPL_DEF" > "HOL4Base.pred_set.COMPL_DEF"
39.285 + "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
39.286 + "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
39.287 + "CHOICE_SING" > "HOL4Base.pred_set.CHOICE_SING"
39.288 + "CHOICE_NOT_IN_REST" > "HOL4Base.pred_set.CHOICE_NOT_IN_REST"
39.289 + "CHOICE_INSERT_REST" > "HOL4Base.pred_set.CHOICE_INSERT_REST"
39.290 + "CHOICE_DEF" > "HOL4Base.pred_set.CHOICE_DEF"
39.291 + "CARD_UNION" > "HOL4Base.pred_set.CARD_UNION"
39.292 + "CARD_SUBSET" > "HOL4Base.pred_set.CARD_SUBSET"
39.293 + "CARD_SING_CROSS" > "HOL4Base.pred_set.CARD_SING_CROSS"
39.294 + "CARD_SING" > "HOL4Base.pred_set.CARD_SING"
39.295 + "CARD_PSUBSET" > "HOL4Base.pred_set.CARD_PSUBSET"
39.296 + "CARD_INTER_LESS_EQ" > "HOL4Base.pred_set.CARD_INTER_LESS_EQ"
39.297 + "CARD_INSERT" > "HOL4Base.pred_set.CARD_INSERT"
39.298 + "CARD_EQ_0" > "HOL4Base.pred_set.CARD_EQ_0"
39.299 + "CARD_EMPTY" > "HOL4Base.pred_set.CARD_EMPTY"
39.300 + "CARD_DIFF" > "HOL4Base.pred_set.CARD_DIFF"
39.301 + "CARD_DELETE" > "HOL4Base.pred_set.CARD_DELETE"
39.302 + "CARD_DEF" > "HOL4Base.pred_set.CARD_DEF"
39.303 + "CARD_CROSS" > "HOL4Base.pred_set.CARD_CROSS"
39.304 + "CARD_COUNT" > "HOL4Base.pred_set.CARD_COUNT"
39.305 + "BIJ_def" > "HOL4Base.pred_set.BIJ_def"
39.306 + "BIJ_ID" > "HOL4Base.pred_set.BIJ_ID"
39.307 + "BIJ_EMPTY" > "HOL4Base.pred_set.BIJ_EMPTY"
39.308 + "BIJ_DEF" > "HOL4Base.pred_set.BIJ_DEF"
39.309 + "BIJ_COMPOSE" > "HOL4Base.pred_set.BIJ_COMPOSE"
39.310 + "BIGUNION_def" > "HOL4Base.pred_set.BIGUNION_def"
39.311 + "BIGUNION_UNION" > "HOL4Base.pred_set.BIGUNION_UNION"
39.312 + "BIGUNION_SUBSET" > "HOL4Base.pred_set.BIGUNION_SUBSET"
39.313 + "BIGUNION_SING" > "HOL4Base.pred_set.BIGUNION_SING"
39.314 + "BIGUNION_INSERT" > "HOL4Base.pred_set.BIGUNION_INSERT"
39.315 + "BIGUNION_EMPTY" > "HOL4Base.pred_set.BIGUNION_EMPTY"
39.316 + "BIGUNION" > "HOL4Base.pred_set.BIGUNION"
39.317 + "BIGINTER_def" > "HOL4Base.pred_set.BIGINTER_def"
39.318 + "BIGINTER_SING" > "HOL4Base.pred_set.BIGINTER_SING"
39.319 + "BIGINTER_INTER" > "HOL4Base.pred_set.BIGINTER_INTER"
39.320 + "BIGINTER_INSERT" > "HOL4Base.pred_set.BIGINTER_INSERT"
39.321 + "BIGINTER_EMPTY" > "HOL4Base.pred_set.BIGINTER_EMPTY"
39.322 + "BIGINTER" > "HOL4Base.pred_set.BIGINTER"
39.323 + "ABSORPTION" > "HOL4Base.pred_set.ABSORPTION"
39.324 +
39.325 +end
40.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
40.2 +++ b/src/HOL/Import/HOL/prim_rec.imp Fri Apr 02 17:37:45 2004 +0200
40.3 @@ -0,0 +1,72 @@
40.4 +import
40.5 +
40.6 +import_segment "hol4"
40.7 +
40.8 +def_maps
40.9 + "wellfounded" > "wellfounded_primdef"
40.10 + "measure" > "measure_primdef"
40.11 + "SIMP_REC_REL" > "SIMP_REC_REL_def"
40.12 + "SIMP_REC" > "SIMP_REC_def"
40.13 + "PRIM_REC_FUN" > "PRIM_REC_FUN_def"
40.14 + "PRIM_REC" > "PRIM_REC_def"
40.15 + "PRE" > "PRE_def"
40.16 +
40.17 +const_maps
40.18 + "wellfounded" > "HOL4Base.prim_rec.wellfounded"
40.19 + "measure" > "HOL4Base.prim_rec.measure"
40.20 + "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
40.21 + "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
40.22 + "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
40.23 + "PRE" > "HOL4Base.prim_rec.PRE"
40.24 + "<" > "op <" :: "nat => nat => bool"
40.25 +
40.26 +thm_maps
40.27 + "wellfounded_primdef" > "HOL4Base.prim_rec.wellfounded_primdef"
40.28 + "wellfounded_def" > "HOL4Base.prim_rec.wellfounded_def"
40.29 + "num_Axiom_old" > "HOL4Base.prim_rec.num_Axiom_old"
40.30 + "num_Axiom" > "HOL4Base.prim_rec.num_Axiom"
40.31 + "measure_thm" > "HOL4Base.prim_rec.measure_thm"
40.32 + "measure_primdef" > "HOL4Base.prim_rec.measure_primdef"
40.33 + "measure_def" > "HOL4Base.prim_rec.measure_def"
40.34 + "WF_measure" > "HOL4Base.prim_rec.WF_measure"
40.35 + "WF_PRED" > "HOL4Base.prim_rec.WF_PRED"
40.36 + "WF_LESS" > "HOL4Base.prim_rec.WF_LESS"
40.37 + "WF_IFF_WELLFOUNDED" > "HOL4Base.prim_rec.WF_IFF_WELLFOUNDED"
40.38 + "SUC_LESS" > "Nat.Suc_lessD"
40.39 + "SUC_ID" > "Nat.Suc_n_not_n"
40.40 + "SIMP_REC_THM" > "HOL4Base.prim_rec.SIMP_REC_THM"
40.41 + "SIMP_REC_REL_def" > "HOL4Base.prim_rec.SIMP_REC_REL_def"
40.42 + "SIMP_REC_REL_UNIQUE_RESULT" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE_RESULT"
40.43 + "SIMP_REC_REL_UNIQUE" > "HOL4Base.prim_rec.SIMP_REC_REL_UNIQUE"
40.44 + "SIMP_REC_REL" > "HOL4Base.prim_rec.SIMP_REC_REL"
40.45 + "SIMP_REC_EXISTS" > "HOL4Base.prim_rec.SIMP_REC_EXISTS"
40.46 + "SIMP_REC" > "HOL4Base.prim_rec.SIMP_REC"
40.47 + "PRIM_REC_def" > "HOL4Base.prim_rec.PRIM_REC_def"
40.48 + "PRIM_REC_THM" > "HOL4Base.prim_rec.PRIM_REC_THM"
40.49 + "PRIM_REC_FUN_def" > "HOL4Base.prim_rec.PRIM_REC_FUN_def"
40.50 + "PRIM_REC_FUN" > "HOL4Base.prim_rec.PRIM_REC_FUN"
40.51 + "PRIM_REC_EQN" > "HOL4Base.prim_rec.PRIM_REC_EQN"
40.52 + "PRIM_REC" > "HOL4Base.prim_rec.PRIM_REC"
40.53 + "PRE_def" > "HOL4Base.prim_rec.PRE_def"
40.54 + "PRE_DEF" > "HOL4Base.prim_rec.PRE_DEF"
40.55 + "PRE" > "HOL4Base.prim_rec.PRE"
40.56 + "NOT_LESS_EQ" > "HOL4Base.prim_rec.NOT_LESS_EQ"
40.57 + "NOT_LESS_0" > "Nat.not_less0"
40.58 + "LESS_THM" > "HOL4Base.prim_rec.LESS_THM"
40.59 + "LESS_SUC_SUC" > "HOL4Base.prim_rec.LESS_SUC_SUC"
40.60 + "LESS_SUC_REFL" > "Nat.lessI"
40.61 + "LESS_SUC_IMP" > "HOL4Base.prim_rec.LESS_SUC_IMP"
40.62 + "LESS_SUC" > "Nat.less_SucI"
40.63 + "LESS_REFL" > "Nat.less_not_refl"
40.64 + "LESS_NOT_EQ" > "Nat.less_not_refl3"
40.65 + "LESS_MONO" > "Nat.Suc_mono"
40.66 + "LESS_LEMMA2" > "HOL4Base.prim_rec.LESS_LEMMA2"
40.67 + "LESS_LEMMA1" > "HOL4Base.prim_rec.LESS_LEMMA1"
40.68 + "LESS_DEF" > "HOL4Compat.LESS_DEF"
40.69 + "LESS_0_0" > "HOL4Base.prim_rec.LESS_0_0"
40.70 + "LESS_0" > "Nat.zero_less_Suc"
40.71 + "INV_SUC_EQ" > "Nat.nat.simps_3"
40.72 + "EQ_LESS" > "HOL4Base.prim_rec.EQ_LESS"
40.73 + "DC" > "HOL4Base.prim_rec.DC"
40.74 +
40.75 +end
41.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
41.2 +++ b/src/HOL/Import/HOL/prime.imp Fri Apr 02 17:37:45 2004 +0200
41.3 @@ -0,0 +1,17 @@
41.4 +import
41.5 +
41.6 +import_segment "hol4"
41.7 +
41.8 +def_maps
41.9 + "prime" > "prime_primdef"
41.10 +
41.11 +const_maps
41.12 + "prime" > "HOL4Base.prime.prime"
41.13 +
41.14 +thm_maps
41.15 + "prime_primdef" > "HOL4Base.prime.prime_primdef"
41.16 + "prime_def" > "HOL4Base.prime.prime_def"
41.17 + "NOT_PRIME_1" > "HOL4Base.prime.NOT_PRIME_1"
41.18 + "NOT_PRIME_0" > "HOL4Base.prime.NOT_PRIME_0"
41.19 +
41.20 +end
42.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
42.2 +++ b/src/HOL/Import/HOL/prob.imp Fri Apr 02 17:37:45 2004 +0200
42.3 @@ -0,0 +1,61 @@
42.4 +import
42.5 +
42.6 +import_segment "hol4"
42.7 +
42.8 +def_maps
42.9 + "prob" > "prob_primdef"
42.10 + "algebra_measure" > "algebra_measure_primdef"
42.11 + "alg_measure" > "alg_measure_primdef"
42.12 +
42.13 +const_maps
42.14 + "prob" > "HOL4Prob.prob.prob"
42.15 + "algebra_measure" > "HOL4Prob.prob.algebra_measure"
42.16 +
42.17 +thm_maps
42.18 + "prob_primdef" > "HOL4Prob.prob.prob_primdef"
42.19 + "prob_def" > "HOL4Prob.prob.prob_def"
42.20 + "algebra_measure_primdef" > "HOL4Prob.prob.algebra_measure_primdef"
42.21 + "algebra_measure_def" > "HOL4Prob.prob.algebra_measure_def"
42.22 + "alg_measure_def" > "HOL4Prob.prob.alg_measure_def"
42.23 + "X_LE_PROB" > "HOL4Prob.prob.X_LE_PROB"
42.24 + "PROB_SUP_EXISTS2" > "HOL4Prob.prob.PROB_SUP_EXISTS2"
42.25 + "PROB_SUP_EXISTS1" > "HOL4Prob.prob.PROB_SUP_EXISTS1"
42.26 + "PROB_SUBSET_MONO" > "HOL4Prob.prob.PROB_SUBSET_MONO"
42.27 + "PROB_STL" > "HOL4Prob.prob.PROB_STL"
42.28 + "PROB_SHD" > "HOL4Prob.prob.PROB_SHD"
42.29 + "PROB_SDROP" > "HOL4Prob.prob.PROB_SDROP"
42.30 + "PROB_RANGE" > "HOL4Prob.prob.PROB_RANGE"
42.31 + "PROB_POS" > "HOL4Prob.prob.PROB_POS"
42.32 + "PROB_MAX" > "HOL4Prob.prob.PROB_MAX"
42.33 + "PROB_LE_X" > "HOL4Prob.prob.PROB_LE_X"
42.34 + "PROB_INTER_SHD" > "HOL4Prob.prob.PROB_INTER_SHD"
42.35 + "PROB_INTER_HALVES" > "HOL4Prob.prob.PROB_INTER_HALVES"
42.36 + "PROB_COMPL_LE1" > "HOL4Prob.prob.PROB_COMPL_LE1"
42.37 + "PROB_COMPL" > "HOL4Prob.prob.PROB_COMPL"
42.38 + "PROB_BASIC" > "HOL4Prob.prob.PROB_BASIC"
42.39 + "PROB_ALGEBRA" > "HOL4Prob.prob.PROB_ALGEBRA"
42.40 + "PROB_ALG" > "HOL4Prob.prob.PROB_ALG"
42.41 + "PROB_ADDITIVE" > "HOL4Prob.prob.PROB_ADDITIVE"
42.42 + "ALG_TWINS_MEASURE" > "HOL4Prob.prob.ALG_TWINS_MEASURE"
42.43 + "ALG_MEASURE_TLS" > "HOL4Prob.prob.ALG_MEASURE_TLS"
42.44 + "ALG_MEASURE_POS" > "HOL4Prob.prob.ALG_MEASURE_POS"
42.45 + "ALG_MEASURE_COMPL" > "HOL4Prob.prob.ALG_MEASURE_COMPL"
42.46 + "ALG_MEASURE_BASIC" > "HOL4Prob.prob.ALG_MEASURE_BASIC"
42.47 + "ALG_MEASURE_APPEND" > "HOL4Prob.prob.ALG_MEASURE_APPEND"
42.48 + "ALG_MEASURE_ADDITIVE" > "HOL4Prob.prob.ALG_MEASURE_ADDITIVE"
42.49 + "ALG_CANON_PREFS_MONO" > "HOL4Prob.prob.ALG_CANON_PREFS_MONO"
42.50 + "ALG_CANON_MONO" > "HOL4Prob.prob.ALG_CANON_MONO"
42.51 + "ALG_CANON_MERGE_MONO" > "HOL4Prob.prob.ALG_CANON_MERGE_MONO"
42.52 + "ALG_CANON_FIND_MONO" > "HOL4Prob.prob.ALG_CANON_FIND_MONO"
42.53 + "ALG_CANON2_MONO" > "HOL4Prob.prob.ALG_CANON2_MONO"
42.54 + "ALG_CANON1_MONO" > "HOL4Prob.prob.ALG_CANON1_MONO"
42.55 + "ALGEBRA_MEASURE_RANGE" > "HOL4Prob.prob.ALGEBRA_MEASURE_RANGE"
42.56 + "ALGEBRA_MEASURE_POS" > "HOL4Prob.prob.ALGEBRA_MEASURE_POS"
42.57 + "ALGEBRA_MEASURE_MONO_EMBED" > "HOL4Prob.prob.ALGEBRA_MEASURE_MONO_EMBED"
42.58 + "ALGEBRA_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_MEASURE_MAX"
42.59 + "ALGEBRA_MEASURE_DEF_ALT" > "HOL4Prob.prob.ALGEBRA_MEASURE_DEF_ALT"
42.60 + "ALGEBRA_MEASURE_BASIC" > "HOL4Prob.prob.ALGEBRA_MEASURE_BASIC"
42.61 + "ALGEBRA_CANON_MEASURE_MAX" > "HOL4Prob.prob.ALGEBRA_CANON_MEASURE_MAX"
42.62 + "ABS_PROB" > "HOL4Prob.prob.ABS_PROB"
42.63 +
42.64 +end
43.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
43.2 +++ b/src/HOL/Import/HOL/prob_algebra.imp Fri Apr 02 17:37:45 2004 +0200
43.3 @@ -0,0 +1,54 @@
43.4 +import
43.5 +
43.6 +import_segment "hol4"
43.7 +
43.8 +def_maps
43.9 + "measurable" > "measurable_primdef"
43.10 + "algebra_embed" > "algebra_embed_primdef"
43.11 + "alg_embed" > "alg_embed_primdef"
43.12 +
43.13 +const_maps
43.14 + "measurable" > "HOL4Prob.prob_algebra.measurable"
43.15 +
43.16 +thm_maps
43.17 + "measurable_primdef" > "HOL4Prob.prob_algebra.measurable_primdef"
43.18 + "measurable_def" > "HOL4Prob.prob_algebra.measurable_def"
43.19 + "algebra_embed_def" > "HOL4Prob.prob_algebra.algebra_embed_def"
43.20 + "alg_embed_def" > "HOL4Prob.prob_algebra.alg_embed_def"
43.21 + "MEASURABLE_UNION" > "HOL4Prob.prob_algebra.MEASURABLE_UNION"
43.22 + "MEASURABLE_STL" > "HOL4Prob.prob_algebra.MEASURABLE_STL"
43.23 + "MEASURABLE_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_SHD"
43.24 + "MEASURABLE_SDROP" > "HOL4Prob.prob_algebra.MEASURABLE_SDROP"
43.25 + "MEASURABLE_INTER_SHD" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_SHD"
43.26 + "MEASURABLE_INTER_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_INTER_HALVES"
43.27 + "MEASURABLE_INTER" > "HOL4Prob.prob_algebra.MEASURABLE_INTER"
43.28 + "MEASURABLE_HALVES" > "HOL4Prob.prob_algebra.MEASURABLE_HALVES"
43.29 + "MEASURABLE_COMPL" > "HOL4Prob.prob_algebra.MEASURABLE_COMPL"
43.30 + "MEASURABLE_BASIC" > "HOL4Prob.prob_algebra.MEASURABLE_BASIC"
43.31 + "MEASURABLE_ALGEBRA" > "HOL4Prob.prob_algebra.MEASURABLE_ALGEBRA"
43.32 + "INTER_STL" > "HOL4Prob.prob_algebra.INTER_STL"
43.33 + "HALVES_INTER" > "HOL4Prob.prob_algebra.HALVES_INTER"
43.34 + "COMPL_SHD" > "HOL4Prob.prob_algebra.COMPL_SHD"
43.35 + "ALG_EMBED_TWINS" > "HOL4Prob.prob_algebra.ALG_EMBED_TWINS"
43.36 + "ALG_EMBED_PREFIX_SUBSET" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX_SUBSET"
43.37 + "ALG_EMBED_PREFIX" > "HOL4Prob.prob_algebra.ALG_EMBED_PREFIX"
43.38 + "ALG_EMBED_POPULATED" > "HOL4Prob.prob_algebra.ALG_EMBED_POPULATED"
43.39 + "ALG_EMBED_NIL" > "HOL4Prob.prob_algebra.ALG_EMBED_NIL"
43.40 + "ALG_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALG_EMBED_BASIC"
43.41 + "ALG_CANON_REP" > "HOL4Prob.prob_algebra.ALG_CANON_REP"
43.42 + "ALG_CANON_PREFS_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_PREFS_EMBED"
43.43 + "ALG_CANON_MERGE_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_MERGE_EMBED"
43.44 + "ALG_CANON_FIND_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_FIND_EMBED"
43.45 + "ALG_CANON_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON_EMBED"
43.46 + "ALG_CANON2_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON2_EMBED"
43.47 + "ALG_CANON1_EMBED" > "HOL4Prob.prob_algebra.ALG_CANON1_EMBED"
43.48 + "ALGEBRA_EMBED_TLS" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_TLS"
43.49 + "ALGEBRA_EMBED_MEM" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_MEM"
43.50 + "ALGEBRA_EMBED_COMPL" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_COMPL"
43.51 + "ALGEBRA_EMBED_BASIC" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_BASIC"
43.52 + "ALGEBRA_EMBED_APPEND" > "HOL4Prob.prob_algebra.ALGEBRA_EMBED_APPEND"
43.53 + "ALGEBRA_CANON_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_UNIV"
43.54 + "ALGEBRA_CANON_EMBED_UNIV" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_UNIV"
43.55 + "ALGEBRA_CANON_EMBED_EMPTY" > "HOL4Prob.prob_algebra.ALGEBRA_CANON_EMBED_EMPTY"
43.56 +
43.57 +end
44.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
44.2 +++ b/src/HOL/Import/HOL/prob_canon.imp Fri Apr 02 17:37:45 2004 +0200
44.3 @@ -0,0 +1,147 @@
44.4 +import
44.5 +
44.6 +import_segment "hol4"
44.7 +
44.8 +def_maps
44.9 + "algebra_canon" > "algebra_canon_primdef"
44.10 + "alg_twinfree" > "alg_twinfree_primdef"
44.11 + "alg_twin" > "alg_twin_primdef"
44.12 + "alg_sorted" > "alg_sorted_primdef"
44.13 + "alg_prefixfree" > "alg_prefixfree_primdef"
44.14 + "alg_order_tupled" > "alg_order_tupled_def"
44.15 + "alg_order" > "alg_order_primdef"
44.16 + "alg_longest" > "alg_longest_primdef"
44.17 + "alg_canon_prefs" > "alg_canon_prefs_primdef"
44.18 + "alg_canon_merge" > "alg_canon_merge_primdef"
44.19 + "alg_canon_find" > "alg_canon_find_primdef"
44.20 + "alg_canon2" > "alg_canon2_primdef"
44.21 + "alg_canon1" > "alg_canon1_primdef"
44.22 + "alg_canon" > "alg_canon_primdef"
44.23 +
44.24 +const_maps
44.25 + "algebra_canon" > "HOL4Prob.prob_canon.algebra_canon"
44.26 + "alg_twinfree" > "HOL4Prob.prob_canon.alg_twinfree"
44.27 + "alg_twin" > "HOL4Prob.prob_canon.alg_twin"
44.28 + "alg_sorted" > "HOL4Prob.prob_canon.alg_sorted"
44.29 + "alg_prefixfree" > "HOL4Prob.prob_canon.alg_prefixfree"
44.30 + "alg_order_tupled" > "HOL4Prob.prob_canon.alg_order_tupled"
44.31 + "alg_order" > "HOL4Prob.prob_canon.alg_order"
44.32 + "alg_longest" > "HOL4Prob.prob_canon.alg_longest"
44.33 + "alg_canon2" > "HOL4Prob.prob_canon.alg_canon2"
44.34 + "alg_canon1" > "HOL4Prob.prob_canon.alg_canon1"
44.35 + "alg_canon" > "HOL4Prob.prob_canon.alg_canon"
44.36 +
44.37 +thm_maps
44.38 + "algebra_canon_primdef" > "HOL4Prob.prob_canon.algebra_canon_primdef"
44.39 + "algebra_canon_def" > "HOL4Prob.prob_canon.algebra_canon_def"
44.40 + "alg_twinfree_primitive_def" > "HOL4Prob.prob_canon.alg_twinfree_primitive_def"
44.41 + "alg_twinfree_primdef" > "HOL4Prob.prob_canon.alg_twinfree_primdef"
44.42 + "alg_twinfree_ind" > "HOL4Prob.prob_canon.alg_twinfree_ind"
44.43 + "alg_twinfree_def" > "HOL4Prob.prob_canon.alg_twinfree_def"
44.44 + "alg_twin_primdef" > "HOL4Prob.prob_canon.alg_twin_primdef"
44.45 + "alg_twin_def" > "HOL4Prob.prob_canon.alg_twin_def"
44.46 + "alg_sorted_primitive_def" > "HOL4Prob.prob_canon.alg_sorted_primitive_def"
44.47 + "alg_sorted_primdef" > "HOL4Prob.prob_canon.alg_sorted_primdef"
44.48 + "alg_sorted_ind" > "HOL4Prob.prob_canon.alg_sorted_ind"
44.49 + "alg_sorted_def" > "HOL4Prob.prob_canon.alg_sorted_def"
44.50 + "alg_prefixfree_primitive_def" > "HOL4Prob.prob_canon.alg_prefixfree_primitive_def"
44.51 + "alg_prefixfree_primdef" > "HOL4Prob.prob_canon.alg_prefixfree_primdef"
44.52 + "alg_prefixfree_ind" > "HOL4Prob.prob_canon.alg_prefixfree_ind"
44.53 + "alg_prefixfree_def" > "HOL4Prob.prob_canon.alg_prefixfree_def"
44.54 + "alg_order_tupled_primitive_def" > "HOL4Prob.prob_canon.alg_order_tupled_primitive_def"
44.55 + "alg_order_tupled_def" > "HOL4Prob.prob_canon.alg_order_tupled_def"
44.56 + "alg_order_primdef" > "HOL4Prob.prob_canon.alg_order_primdef"
44.57 + "alg_order_ind" > "HOL4Prob.prob_canon.alg_order_ind"
44.58 + "alg_order_def" > "HOL4Prob.prob_canon.alg_order_def"
44.59 + "alg_order_curried_def" > "HOL4Prob.prob_canon.alg_order_curried_def"
44.60 + "alg_longest_primdef" > "HOL4Prob.prob_canon.alg_longest_primdef"
44.61 + "alg_longest_def" > "HOL4Prob.prob_canon.alg_longest_def"
44.62 + "alg_canon_primdef" > "HOL4Prob.prob_canon.alg_canon_primdef"
44.63 + "alg_canon_prefs_def" > "HOL4Prob.prob_canon.alg_canon_prefs_def"
44.64 + "alg_canon_merge_def" > "HOL4Prob.prob_canon.alg_canon_merge_def"
44.65 + "alg_canon_find_def" > "HOL4Prob.prob_canon.alg_canon_find_def"
44.66 + "alg_canon_def" > "HOL4Prob.prob_canon.alg_canon_def"
44.67 + "alg_canon2_primdef" > "HOL4Prob.prob_canon.alg_canon2_primdef"
44.68 + "alg_canon2_def" > "HOL4Prob.prob_canon.alg_canon2_def"
44.69 + "alg_canon1_primdef" > "HOL4Prob.prob_canon.alg_canon1_primdef"
44.70 + "alg_canon1_def" > "HOL4Prob.prob_canon.alg_canon1_def"
44.71 + "MEM_NIL_STEP" > "HOL4Prob.prob_canon.MEM_NIL_STEP"
44.72 + "ALG_TWIN_SING" > "HOL4Prob.prob_canon.ALG_TWIN_SING"
44.73 + "ALG_TWIN_REDUCE" > "HOL4Prob.prob_canon.ALG_TWIN_REDUCE"
44.74 + "ALG_TWIN_NIL" > "HOL4Prob.prob_canon.ALG_TWIN_NIL"
44.75 + "ALG_TWIN_CONS" > "HOL4Prob.prob_canon.ALG_TWIN_CONS"
44.76 + "ALG_TWINS_PREFIX" > "HOL4Prob.prob_canon.ALG_TWINS_PREFIX"
44.77 + "ALG_TWINFREE_TLS" > "HOL4Prob.prob_canon.ALG_TWINFREE_TLS"
44.78 + "ALG_TWINFREE_TL" > "HOL4Prob.prob_canon.ALG_TWINFREE_TL"
44.79 + "ALG_TWINFREE_STEP2" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP2"
44.80 + "ALG_TWINFREE_STEP1" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP1"
44.81 + "ALG_TWINFREE_STEP" > "HOL4Prob.prob_canon.ALG_TWINFREE_STEP"
44.82 + "ALG_SORTED_TLS" > "HOL4Prob.prob_canon.ALG_SORTED_TLS"
44.83 + "ALG_SORTED_TL" > "HOL4Prob.prob_canon.ALG_SORTED_TL"
44.84 + "ALG_SORTED_STEP" > "HOL4Prob.prob_canon.ALG_SORTED_STEP"
44.85 + "ALG_SORTED_PREFIXFREE_MEM_NIL" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_MEM_NIL"
44.86 + "ALG_SORTED_PREFIXFREE_EQUALITY" > "HOL4Prob.prob_canon.ALG_SORTED_PREFIXFREE_EQUALITY"
44.87 + "ALG_SORTED_MONO" > "HOL4Prob.prob_canon.ALG_SORTED_MONO"
44.88 + "ALG_SORTED_MIN" > "HOL4Prob.prob_canon.ALG_SORTED_MIN"
44.89 + "ALG_SORTED_FILTER" > "HOL4Prob.prob_canon.ALG_SORTED_FILTER"
44.90 + "ALG_SORTED_DEF_ALT" > "HOL4Prob.prob_canon.ALG_SORTED_DEF_ALT"
44.91 + "ALG_SORTED_APPEND" > "HOL4Prob.prob_canon.ALG_SORTED_APPEND"
44.92 + "ALG_PREFIXFREE_TLS" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TLS"
44.93 + "ALG_PREFIXFREE_TL" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_TL"
44.94 + "ALG_PREFIXFREE_STEP" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_STEP"
44.95 + "ALG_PREFIXFREE_MONO" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_MONO"
44.96 + "ALG_PREFIXFREE_FILTER" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_FILTER"
44.97 + "ALG_PREFIXFREE_ELT" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_ELT"
44.98 + "ALG_PREFIXFREE_APPEND" > "HOL4Prob.prob_canon.ALG_PREFIXFREE_APPEND"
44.99 + "ALG_ORDER_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_TRANS"
44.100 + "ALG_ORDER_TOTAL" > "HOL4Prob.prob_canon.ALG_ORDER_TOTAL"
44.101 + "ALG_ORDER_SNOC" > "HOL4Prob.prob_canon.ALG_ORDER_SNOC"
44.102 + "ALG_ORDER_REFL" > "HOL4Prob.prob_canon.ALG_ORDER_REFL"
44.103 + "ALG_ORDER_PREFIX_TRANS" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_TRANS"
44.104 + "ALG_ORDER_PREFIX_MONO" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_MONO"
44.105 + "ALG_ORDER_PREFIX_ANTI" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX_ANTI"
44.106 + "ALG_ORDER_PREFIX" > "HOL4Prob.prob_canon.ALG_ORDER_PREFIX"
44.107 + "ALG_ORDER_NIL" > "HOL4Prob.prob_canon.ALG_ORDER_NIL"
44.108 + "ALG_ORDER_ANTISYM" > "HOL4Prob.prob_canon.ALG_ORDER_ANTISYM"
44.109 + "ALG_LONGEST_TLS" > "HOL4Prob.prob_canon.ALG_LONGEST_TLS"
44.110 + "ALG_LONGEST_TL" > "HOL4Prob.prob_canon.ALG_LONGEST_TL"
44.111 + "ALG_LONGEST_HD" > "HOL4Prob.prob_canon.ALG_LONGEST_HD"
44.112 + "ALG_LONGEST_APPEND" > "HOL4Prob.prob_canon.ALG_LONGEST_APPEND"
44.113 + "ALG_CANON_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_SORTED_PREFIXFREE_TWINFREE"
44.114 + "ALG_CANON_PREFS_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_SORTED"
44.115 + "ALG_CANON_PREFS_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_PREFIXFREE"
44.116 + "ALG_CANON_PREFS_HD" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_HD"
44.117 + "ALG_CANON_PREFS_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_DELETES"
44.118 + "ALG_CANON_PREFS_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_PREFS_CONSTANT"
44.119 + "ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE"
44.120 + "ALG_CANON_MERGE_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_SHORTENS"
44.121 + "ALG_CANON_MERGE_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_PREFIXFREE_PRESERVE"
44.122 + "ALG_CANON_MERGE_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_MERGE_CONSTANT"
44.123 + "ALG_CANON_IDEMPOT" > "HOL4Prob.prob_canon.ALG_CANON_IDEMPOT"
44.124 + "ALG_CANON_FIND_SORTED" > "HOL4Prob.prob_canon.ALG_CANON_FIND_SORTED"
44.125 + "ALG_CANON_FIND_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON_FIND_PREFIXFREE"
44.126 + "ALG_CANON_FIND_HD" > "HOL4Prob.prob_canon.ALG_CANON_FIND_HD"
44.127 + "ALG_CANON_FIND_DELETES" > "HOL4Prob.prob_canon.ALG_CANON_FIND_DELETES"
44.128 + "ALG_CANON_FIND_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_FIND_CONSTANT"
44.129 + "ALG_CANON_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON_CONSTANT"
44.130 + "ALG_CANON_BASIC" > "HOL4Prob.prob_canon.ALG_CANON_BASIC"
44.131 + "ALG_CANON2_SORTED_PREFIXFREE_TWINFREE" > "HOL4Prob.prob_canon.ALG_CANON2_SORTED_PREFIXFREE_TWINFREE"
44.132 + "ALG_CANON2_SHORTENS" > "HOL4Prob.prob_canon.ALG_CANON2_SHORTENS"
44.133 + "ALG_CANON2_PREFIXFREE_PRESERVE" > "HOL4Prob.prob_canon.ALG_CANON2_PREFIXFREE_PRESERVE"
44.134 + "ALG_CANON2_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON2_CONSTANT"
44.135 + "ALG_CANON1_SORTED" > "HOL4Prob.prob_canon.ALG_CANON1_SORTED"
44.136 + "ALG_CANON1_PREFIXFREE" > "HOL4Prob.prob_canon.ALG_CANON1_PREFIXFREE"
44.137 + "ALG_CANON1_CONSTANT" > "HOL4Prob.prob_canon.ALG_CANON1_CONSTANT"
44.138 + "ALGEBRA_CANON_TLS" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TLS"
44.139 + "ALGEBRA_CANON_TL" > "HOL4Prob.prob_canon.ALGEBRA_CANON_TL"
44.140 + "ALGEBRA_CANON_STEP2" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP2"
44.141 + "ALGEBRA_CANON_STEP1" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP1"
44.142 + "ALGEBRA_CANON_STEP" > "HOL4Prob.prob_canon.ALGEBRA_CANON_STEP"
44.143 + "ALGEBRA_CANON_NIL_MEM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_NIL_MEM"
44.144 + "ALGEBRA_CANON_INDUCTION" > "HOL4Prob.prob_canon.ALGEBRA_CANON_INDUCTION"
44.145 + "ALGEBRA_CANON_DEF_ALT" > "HOL4Prob.prob_canon.ALGEBRA_CANON_DEF_ALT"
44.146 + "ALGEBRA_CANON_CASES_THM" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES_THM"
44.147 + "ALGEBRA_CANON_CASES" > "HOL4Prob.prob_canon.ALGEBRA_CANON_CASES"
44.148 + "ALGEBRA_CANON_BASIC" > "HOL4Prob.prob_canon.ALGEBRA_CANON_BASIC"
44.149 +
44.150 +end
45.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
45.2 +++ b/src/HOL/Import/HOL/prob_extra.imp Fri Apr 02 17:37:45 2004 +0200
45.3 @@ -0,0 +1,96 @@
45.4 +import
45.5 +
45.6 +import_segment "hol4"
45.7 +
45.8 +def_maps
45.9 + "inf" > "inf_primdef"
45.10 +
45.11 +const_maps
45.12 + "inf" > "HOL4Prob.prob_extra.inf"
45.13 + "COMPL" > "HOL4Base.pred_set.COMPL"
45.14 +
45.15 +thm_maps
45.16 + "inf_primdef" > "HOL4Prob.prob_extra.inf_primdef"
45.17 + "inf_def" > "HOL4Prob.prob_extra.inf_def"
45.18 + "X_HALF_HALF" > "HOL4Prob.prob_extra.X_HALF_HALF"
45.19 + "UNION_DISJOINT_SPLIT" > "HOL4Prob.prob_extra.UNION_DISJOINT_SPLIT"
45.20 + "UNION_DEF_ALT" > "HOL4Prob.prob_extra.UNION_DEF_ALT"
45.21 + "SUBSET_EQ_DECOMP" > "HOL4Base.pred_set.SUBSET_ANTISYM"
45.22 + "SUBSET_EQ" > "HOL4Prob.prob_extra.SUBSET_EQ"
45.23 + "SET_EQ_EXT" > "HOL4Base.pred_set.EXTENSION"
45.24 + "REAL_X_LE_SUP" > "HOL4Prob.prob_extra.REAL_X_LE_SUP"
45.25 + "REAL_SUP_MAX" > "HOL4Prob.prob_extra.REAL_SUP_MAX"
45.26 + "REAL_SUP_LE_X" > "HOL4Prob.prob_extra.REAL_SUP_LE_X"
45.27 + "REAL_SUP_EXISTS_UNIQUE" > "HOL4Prob.prob_extra.REAL_SUP_EXISTS_UNIQUE"
45.28 + "REAL_POW" > "RealPow.realpow_real_of_nat"
45.29 + "REAL_LE_INV_LE" > "Ring_and_Field.le_imp_inverse_le"
45.30 + "REAL_LE_EQ" > "Set.basic_trans_rules_26"
45.31 + "REAL_INVINV_ALL" > "Ring_and_Field.inverse_inverse_eq"
45.32 + "REAL_INF_MIN" > "HOL4Prob.prob_extra.REAL_INF_MIN"
45.33 + "RAND_THM" > "HOL.arg_cong"
45.34 + "POW_HALF_TWICE" > "HOL4Prob.prob_extra.POW_HALF_TWICE"
45.35 + "POW_HALF_POS" > "HOL4Prob.prob_extra.POW_HALF_POS"
45.36 + "POW_HALF_MONO" > "HOL4Prob.prob_extra.POW_HALF_MONO"
45.37 + "POW_HALF_EXP" > "HOL4Prob.prob_extra.POW_HALF_EXP"
45.38 + "ONE_MINUS_HALF" > "HOL4Prob.prob_extra.ONE_MINUS_HALF"
45.39 + "MOD_TWO" > "HOL4Prob.prob_extra.MOD_TWO"
45.40 + "MEM_NIL_MAP_CONS" > "HOL4Prob.prob_extra.MEM_NIL_MAP_CONS"
45.41 + "MEM_NIL" > "HOL4Prob.prob_extra.MEM_NIL"
45.42 + "MEM_FILTER" > "HOL4Prob.prob_extra.MEM_FILTER"
45.43 + "MAP_MEM" > "HOL4Prob.prob_extra.MAP_MEM"
45.44 + "MAP_ID" > "List.map_ident"
45.45 + "LENGTH_FILTER" > "List.length_filter"
45.46 + "LAST_MEM" > "HOL4Prob.prob_extra.LAST_MEM"
45.47 + "LAST_MAP_CONS" > "HOL4Prob.prob_extra.LAST_MAP_CONS"
45.48 + "IS_PREFIX_TRANS" > "HOL4Prob.prob_extra.IS_PREFIX_TRANS"
45.49 + "IS_PREFIX_SNOC" > "HOL4Prob.prob_extra.IS_PREFIX_SNOC"
45.50 + "IS_PREFIX_REFL" > "HOL4Prob.prob_extra.IS_PREFIX_REFL"
45.51 + "IS_PREFIX_NIL" > "HOL4Prob.prob_extra.IS_PREFIX_NIL"
45.52 + "IS_PREFIX_LENGTH_ANTI" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH_ANTI"
45.53 + "IS_PREFIX_LENGTH" > "HOL4Prob.prob_extra.IS_PREFIX_LENGTH"
45.54 + "IS_PREFIX_BUTLAST" > "HOL4Prob.prob_extra.IS_PREFIX_BUTLAST"
45.55 + "IS_PREFIX_ANTISYM" > "HOL4Prob.prob_extra.IS_PREFIX_ANTISYM"
45.56 + "IN_EMPTY" > "HOL4Base.pred_set.NOT_IN_EMPTY"
45.57 + "IN_COMPL" > "HOL4Base.pred_set.IN_COMPL"
45.58 + "INV_SUC_POS" > "HOL4Prob.prob_extra.INV_SUC_POS"
45.59 + "INV_SUC_MAX" > "HOL4Prob.prob_extra.INV_SUC_MAX"
45.60 + "INV_SUC" > "HOL4Prob.prob_extra.INV_SUC"
45.61 + "INTER_UNION_RDISTRIB" > "HOL4Prob.prob_extra.INTER_UNION_RDISTRIB"
45.62 + "INTER_UNION_COMPL" > "HOL4Base.pred_set.INTER_UNION_COMPL"
45.63 + "INTER_IS_EMPTY" > "HOL4Prob.prob_extra.INTER_IS_EMPTY"
45.64 + "INF_DEF_ALT" > "HOL4Prob.prob_extra.INF_DEF_ALT"
45.65 + "HALF_POS" > "HOL4Prob.prob_extra.HALF_POS"
45.66 + "HALF_LT_1" > "HOL4Prob.prob_extra.HALF_LT_1"
45.67 + "HALF_CANCEL" > "HOL4Prob.prob_extra.HALF_CANCEL"
45.68 + "GSPEC_DEF_ALT" > "HOL4Prob.prob_extra.GSPEC_DEF_ALT"
45.69 + "FOLDR_MAP" > "HOL4Prob.prob_extra.FOLDR_MAP"
45.70 + "FILTER_TRUE" > "HOL4Prob.prob_extra.FILTER_TRUE"
45.71 + "FILTER_OUT_ELT" > "HOL4Prob.prob_extra.FILTER_OUT_ELT"
45.72 + "FILTER_MEM" > "HOL4Prob.prob_extra.FILTER_MEM"
45.73 + "FILTER_FALSE" > "HOL4Prob.prob_extra.FILTER_FALSE"
45.74 + "EXP_DIV_TWO" > "HOL4Prob.prob_extra.EXP_DIV_TWO"
45.75 + "EXISTS_LONGEST" > "HOL4Prob.prob_extra.EXISTS_LONGEST"
45.76 + "EVEN_ODD_EXISTS_EQ" > "HOL4Prob.prob_extra.EVEN_ODD_EXISTS_EQ"
45.77 + "EVEN_ODD_BASIC" > "HOL4Prob.prob_extra.EVEN_ODD_BASIC"
45.78 + "EVEN_EXP_TWO" > "HOL4Prob.prob_extra.EVEN_EXP_TWO"
45.79 + "EQ_EXT_EQ" > "Fun.expand_fun_eq"
45.80 + "DIV_TWO_UNIQUE" > "HOL4Prob.prob_extra.DIV_TWO_UNIQUE"
45.81 + "DIV_TWO_MONO_EVEN" > "HOL4Prob.prob_extra.DIV_TWO_MONO_EVEN"
45.82 + "DIV_TWO_MONO" > "HOL4Prob.prob_extra.DIV_TWO_MONO"
45.83 + "DIV_TWO_EXP" > "HOL4Prob.prob_extra.DIV_TWO_EXP"
45.84 + "DIV_TWO_CANCEL" > "HOL4Prob.prob_extra.DIV_TWO_CANCEL"
45.85 + "DIV_TWO_BASIC" > "HOL4Prob.prob_extra.DIV_TWO_BASIC"
45.86 + "DIV_TWO" > "HOL4Prob.prob_extra.DIV_TWO"
45.87 + "DIV_THEN_MULT" > "HOL4Prob.prob_extra.DIV_THEN_MULT"
45.88 + "DIVISION_TWO" > "HOL4Prob.prob_extra.DIVISION_TWO"
45.89 + "COMPL_def" > "HOL4Base.pred_set.COMPL_DEF"
45.90 + "COMPL_SPLITS" > "HOL4Base.pred_set.COMPL_SPLITS"
45.91 + "COMPL_COMPL" > "HOL4Base.pred_set.COMPL_COMPL"
45.92 + "COMPL_CLAUSES" > "HOL4Base.pred_set.COMPL_CLAUSES"
45.93 + "BOOL_BOOL_CASES_THM" > "HOL4Prob.prob_extra.BOOL_BOOL_CASES_THM"
45.94 + "BOOL_BOOL_CASES" > "HOL4Base.bool.BOOL_FUN_INDUCT"
45.95 + "APPEND_MEM" > "HOL4Base.list.MEM_APPEND"
45.96 + "ABS_UNIT_INTERVAL" > "HOL4Prob.prob_extra.ABS_UNIT_INTERVAL"
45.97 + "ABS_BETWEEN_LE" > "HOL4Prob.prob_extra.ABS_BETWEEN_LE"
45.98 +
45.99 +end
46.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
46.2 +++ b/src/HOL/Import/HOL/prob_indep.imp Fri Apr 02 17:37:45 2004 +0200
46.3 @@ -0,0 +1,56 @@
46.4 +import
46.5 +
46.6 +import_segment "hol4"
46.7 +
46.8 +def_maps
46.9 + "indep_set" > "indep_set_primdef"
46.10 + "indep" > "indep_primdef"
46.11 + "alg_cover_set" > "alg_cover_set_primdef"
46.12 + "alg_cover" > "alg_cover_primdef"
46.13 +
46.14 +const_maps
46.15 + "indep_set" > "HOL4Prob.prob_indep.indep_set"
46.16 + "indep" > "HOL4Prob.prob_indep.indep"
46.17 + "alg_cover_set" > "HOL4Prob.prob_indep.alg_cover_set"
46.18 + "alg_cover" > "HOL4Prob.prob_indep.alg_cover"
46.19 +
46.20 +thm_maps
46.21 + "indep_set_primdef" > "HOL4Prob.prob_indep.indep_set_primdef"
46.22 + "indep_set_def" > "HOL4Prob.prob_indep.indep_set_def"
46.23 + "indep_primdef" > "HOL4Prob.prob_indep.indep_primdef"
46.24 + "indep_def" > "HOL4Prob.prob_indep.indep_def"
46.25 + "alg_cover_set_primdef" > "HOL4Prob.prob_indep.alg_cover_set_primdef"
46.26 + "alg_cover_set_def" > "HOL4Prob.prob_indep.alg_cover_set_def"
46.27 + "alg_cover_primdef" > "HOL4Prob.prob_indep.alg_cover_primdef"
46.28 + "alg_cover_def" > "HOL4Prob.prob_indep.alg_cover_def"
46.29 + "PROB_INDEP_BOUND" > "HOL4Prob.prob_indep.PROB_INDEP_BOUND"
46.30 + "MAP_CONS_TL_FILTER" > "HOL4Prob.prob_indep.MAP_CONS_TL_FILTER"
46.31 + "INDEP_UNIT" > "HOL4Prob.prob_indep.INDEP_UNIT"
46.32 + "INDEP_SET_SYM" > "HOL4Prob.prob_indep.INDEP_SET_SYM"
46.33 + "INDEP_SET_LIST" > "HOL4Prob.prob_indep.INDEP_SET_LIST"
46.34 + "INDEP_SET_DISJOINT_DECOMP" > "HOL4Prob.prob_indep.INDEP_SET_DISJOINT_DECOMP"
46.35 + "INDEP_SET_BASIC" > "HOL4Prob.prob_indep.INDEP_SET_BASIC"
46.36 + "INDEP_SDEST" > "HOL4Prob.prob_indep.INDEP_SDEST"
46.37 + "INDEP_PROB" > "HOL4Prob.prob_indep.INDEP_PROB"
46.38 + "INDEP_MEASURABLE2" > "HOL4Prob.prob_indep.INDEP_MEASURABLE2"
46.39 + "INDEP_MEASURABLE1" > "HOL4Prob.prob_indep.INDEP_MEASURABLE1"
46.40 + "INDEP_INDEP_SET_LEMMA" > "HOL4Prob.prob_indep.INDEP_INDEP_SET_LEMMA"
46.41 + "INDEP_INDEP_SET" > "HOL4Prob.prob_indep.INDEP_INDEP_SET"
46.42 + "INDEP_BIND_SDEST" > "HOL4Prob.prob_indep.INDEP_BIND_SDEST"
46.43 + "INDEP_BIND" > "HOL4Prob.prob_indep.INDEP_BIND"
46.44 + "BIND_STEP" > "HOL4Prob.prob_indep.BIND_STEP"
46.45 + "ALG_COVER_WELL_DEFINED" > "HOL4Prob.prob_indep.ALG_COVER_WELL_DEFINED"
46.46 + "ALG_COVER_UNIV" > "HOL4Prob.prob_indep.ALG_COVER_UNIV"
46.47 + "ALG_COVER_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_UNIQUE"
46.48 + "ALG_COVER_TAIL_STEP" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_STEP"
46.49 + "ALG_COVER_TAIL_PROB" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_PROB"
46.50 + "ALG_COVER_TAIL_MEASURABLE" > "HOL4Prob.prob_indep.ALG_COVER_TAIL_MEASURABLE"
46.51 + "ALG_COVER_STEP" > "HOL4Prob.prob_indep.ALG_COVER_STEP"
46.52 + "ALG_COVER_SET_INDUCTION" > "HOL4Prob.prob_indep.ALG_COVER_SET_INDUCTION"
46.53 + "ALG_COVER_SET_CASES_THM" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES_THM"
46.54 + "ALG_COVER_SET_CASES" > "HOL4Prob.prob_indep.ALG_COVER_SET_CASES"
46.55 + "ALG_COVER_SET_BASIC" > "HOL4Prob.prob_indep.ALG_COVER_SET_BASIC"
46.56 + "ALG_COVER_HEAD" > "HOL4Prob.prob_indep.ALG_COVER_HEAD"
46.57 + "ALG_COVER_EXISTS_UNIQUE" > "HOL4Prob.prob_indep.ALG_COVER_EXISTS_UNIQUE"
46.58 +
46.59 +end
47.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
47.2 +++ b/src/HOL/Import/HOL/prob_pseudo.imp Fri Apr 02 17:37:45 2004 +0200
47.3 @@ -0,0 +1,26 @@
47.4 +import
47.5 +
47.6 +import_segment "hol4"
47.7 +
47.8 +def_maps
47.9 + "pseudo_linear_tl" > "pseudo_linear_tl_primdef"
47.10 + "pseudo_linear_hd" > "pseudo_linear_hd_primdef"
47.11 + "pseudo_linear1" > "pseudo_linear1_primdef"
47.12 + "pseudo" > "pseudo_primdef"
47.13 +
47.14 +const_maps
47.15 + "pseudo_linear_tl" > "HOL4Prob.prob_pseudo.pseudo_linear_tl"
47.16 + "pseudo_linear_hd" > "HOL4Prob.prob_pseudo.pseudo_linear_hd"
47.17 + "pseudo" > "HOL4Prob.prob_pseudo.pseudo"
47.18 +
47.19 +thm_maps
47.20 + "pseudo_primdef" > "HOL4Prob.prob_pseudo.pseudo_primdef"
47.21 + "pseudo_linear_tl_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_primdef"
47.22 + "pseudo_linear_tl_def" > "HOL4Prob.prob_pseudo.pseudo_linear_tl_def"
47.23 + "pseudo_linear_hd_primdef" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_primdef"
47.24 + "pseudo_linear_hd_def" > "HOL4Prob.prob_pseudo.pseudo_linear_hd_def"
47.25 + "pseudo_linear1_def" > "HOL4Prob.prob_pseudo.pseudo_linear1_def"
47.26 + "pseudo_def" > "HOL4Prob.prob_pseudo.pseudo_def"
47.27 + "PSEUDO_LINEAR1_EXECUTE" > "HOL4Prob.prob_pseudo.PSEUDO_LINEAR1_EXECUTE"
47.28 +
47.29 +end
48.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
48.2 +++ b/src/HOL/Import/HOL/prob_uniform.imp Fri Apr 02 17:37:45 2004 +0200
48.3 @@ -0,0 +1,57 @@
48.4 +import
48.5 +
48.6 +import_segment "hol4"
48.7 +
48.8 +def_maps
48.9 + "uniform_tupled" > "uniform_tupled_def"
48.10 + "uniform" > "uniform_primdef"
48.11 + "unif_tupled" > "unif_tupled_def"
48.12 + "unif_bound" > "unif_bound_primdef"
48.13 + "unif" > "unif_primdef"
48.14 +
48.15 +const_maps
48.16 + "uniform_tupled" > "HOL4Prob.prob_uniform.uniform_tupled"
48.17 + "uniform" > "HOL4Prob.prob_uniform.uniform"
48.18 + "unif_tupled" > "HOL4Prob.prob_uniform.unif_tupled"
48.19 + "unif_bound" > "HOL4Prob.prob_uniform.unif_bound"
48.20 + "unif" > "HOL4Prob.prob_uniform.unif"
48.21 +
48.22 +thm_maps
48.23 + "uniform_tupled_primitive_def" > "HOL4Prob.prob_uniform.uniform_tupled_primitive_def"
48.24 + "uniform_tupled_def" > "HOL4Prob.prob_uniform.uniform_tupled_def"
48.25 + "uniform_primdef" > "HOL4Prob.prob_uniform.uniform_primdef"
48.26 + "uniform_ind" > "HOL4Prob.prob_uniform.uniform_ind"
48.27 + "uniform_def" > "HOL4Prob.prob_uniform.uniform_def"
48.28 + "uniform_curried_def" > "HOL4Prob.prob_uniform.uniform_curried_def"
48.29 + "unif_tupled_primitive_def" > "HOL4Prob.prob_uniform.unif_tupled_primitive_def"
48.30 + "unif_tupled_def" > "HOL4Prob.prob_uniform.unif_tupled_def"
48.31 + "unif_primdef" > "HOL4Prob.prob_uniform.unif_primdef"
48.32 + "unif_ind" > "HOL4Prob.prob_uniform.unif_ind"
48.33 + "unif_def" > "HOL4Prob.prob_uniform.unif_def"
48.34 + "unif_curried_def" > "HOL4Prob.prob_uniform.unif_curried_def"
48.35 + "unif_bound_primitive_def" > "HOL4Prob.prob_uniform.unif_bound_primitive_def"
48.36 + "unif_bound_primdef" > "HOL4Prob.prob_uniform.unif_bound_primdef"
48.37 + "unif_bound_ind" > "HOL4Prob.prob_uniform.unif_bound_ind"
48.38 + "unif_bound_def" > "HOL4Prob.prob_uniform.unif_bound_def"
48.39 + "UNIF_RANGE" > "HOL4Prob.prob_uniform.UNIF_RANGE"
48.40 + "UNIF_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIF_DEF_MONAD"
48.41 + "UNIF_BOUND_UPPER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER_SUC"
48.42 + "UNIF_BOUND_UPPER" > "HOL4Prob.prob_uniform.UNIF_BOUND_UPPER"
48.43 + "UNIF_BOUND_LOWER_SUC" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER_SUC"
48.44 + "UNIF_BOUND_LOWER" > "HOL4Prob.prob_uniform.UNIF_BOUND_LOWER"
48.45 + "UNIFORM_RANGE" > "HOL4Prob.prob_uniform.UNIFORM_RANGE"
48.46 + "UNIFORM_DEF_MONAD" > "HOL4Prob.prob_uniform.UNIFORM_DEF_MONAD"
48.47 + "SUC_DIV_TWO_ZERO" > "HOL4Prob.prob_uniform.SUC_DIV_TWO_ZERO"
48.48 + "PROB_UNIF_PAIR" > "HOL4Prob.prob_uniform.PROB_UNIF_PAIR"
48.49 + "PROB_UNIF_GOOD" > "HOL4Prob.prob_uniform.PROB_UNIF_GOOD"
48.50 + "PROB_UNIF_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIF_BOUND"
48.51 + "PROB_UNIFORM_UPPER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_UPPER_BOUND"
48.52 + "PROB_UNIFORM_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_SUC"
48.53 + "PROB_UNIFORM_PAIR_SUC" > "HOL4Prob.prob_uniform.PROB_UNIFORM_PAIR_SUC"
48.54 + "PROB_UNIFORM_LOWER_BOUND" > "HOL4Prob.prob_uniform.PROB_UNIFORM_LOWER_BOUND"
48.55 + "PROB_UNIFORM" > "HOL4Prob.prob_uniform.PROB_UNIFORM"
48.56 + "PROB_UNIF" > "HOL4Prob.prob_uniform.PROB_UNIF"
48.57 + "INDEP_UNIFORM" > "HOL4Prob.prob_uniform.INDEP_UNIFORM"
48.58 + "INDEP_UNIF" > "HOL4Prob.prob_uniform.INDEP_UNIF"
48.59 +
48.60 +end
49.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
49.2 +++ b/src/HOL/Import/HOL/real.imp Fri Apr 02 17:37:45 2004 +0200
49.3 @@ -0,0 +1,359 @@
49.4 +import
49.5 +
49.6 +import_segment "hol4"
49.7 +
49.8 +def_maps
49.9 + "sup" > "sup_def"
49.10 + "sumc" > "sumc_def"
49.11 + "sum" > "sum_def"
49.12 +
49.13 +const_maps
49.14 + "sup" > "HOL4Real.real.sup"
49.15 + "sum" > "HOL4Real.real.sum"
49.16 + "real_sub" > "op -" :: "real => real => real"
49.17 + "real_of_num" > "RealDef.real" :: "nat => real"
49.18 + "real_lte" > "op <=" :: "real => real => bool"
49.19 + "real_gt" > "HOL4Compat.real_gt"
49.20 + "real_ge" > "HOL4Compat.real_ge"
49.21 + "pow" > "Nat.power" :: "real => nat => real"
49.22 + "abs" > "HOL.abs" :: "real => real"
49.23 + "/" > "HOL.divide" :: "real => real => real"
49.24 +
49.25 +thm_maps
49.26 + "sup_def" > "HOL4Real.real.sup_def"
49.27 + "sup" > "HOL4Real.real.sup"
49.28 + "sumc" > "HOL4Real.real.sumc"
49.29 + "sum_def" > "HOL4Real.real.sum_def"
49.30 + "sum" > "HOL4Real.real.sum"
49.31 + "real_sub" > "Ring_and_Field.compare_rls_1"
49.32 + "real_of_num" > "HOL4Compat.real_of_num"
49.33 + "real_lte" > "HOL4Compat.real_lte"
49.34 + "real_lt" > "HOL.linorder_not_le"
49.35 + "real_gt" > "HOL4Compat.real_gt"
49.36 + "real_ge" > "HOL4Compat.real_ge"
49.37 + "real_div" > "Ring_and_Field.field.divide_inverse"
49.38 + "pow" > "HOL4Compat.pow"
49.39 + "abs" > "HOL4Compat.abs"
49.40 + "SUP_LEMMA3" > "HOL4Real.real.SUP_LEMMA3"
49.41 + "SUP_LEMMA2" > "HOL4Real.real.SUP_LEMMA2"
49.42 + "SUP_LEMMA1" > "HOL4Real.real.SUP_LEMMA1"
49.43 + "SUM_ZERO" > "HOL4Real.real.SUM_ZERO"
49.44 + "SUM_TWO" > "HOL4Real.real.SUM_TWO"
49.45 + "SUM_SUBST" > "HOL4Real.real.SUM_SUBST"
49.46 + "SUM_SUB" > "HOL4Real.real.SUM_SUB"
49.47 + "SUM_REINDEX" > "HOL4Real.real.SUM_REINDEX"
49.48 + "SUM_POS_GEN" > "HOL4Real.real.SUM_POS_GEN"
49.49 + "SUM_POS" > "HOL4Real.real.SUM_POS"
49.50 + "SUM_PERMUTE_0" > "HOL4Real.real.SUM_PERMUTE_0"
49.51 + "SUM_OFFSET" > "HOL4Real.real.SUM_OFFSET"
49.52 + "SUM_NSUB" > "HOL4Real.real.SUM_NSUB"
49.53 + "SUM_NEG" > "HOL4Real.real.SUM_NEG"
49.54 + "SUM_LE" > "HOL4Real.real.SUM_LE"
49.55 + "SUM_GROUP" > "HOL4Real.real.SUM_GROUP"
49.56 + "SUM_EQ" > "HOL4Real.real.SUM_EQ"
49.57 + "SUM_DIFF" > "HOL4Real.real.SUM_DIFF"
49.58 + "SUM_DEF" > "HOL4Real.real.SUM_DEF"
49.59 + "SUM_CMUL" > "HOL4Real.real.SUM_CMUL"
49.60 + "SUM_CANCEL" > "HOL4Real.real.SUM_CANCEL"
49.61 + "SUM_BOUND" > "HOL4Real.real.SUM_BOUND"
49.62 + "SUM_ADD" > "HOL4Real.real.SUM_ADD"
49.63 + "SUM_ABS_LE" > "HOL4Real.real.SUM_ABS_LE"
49.64 + "SUM_ABS" > "HOL4Real.real.SUM_ABS"
49.65 + "SUM_2" > "HOL4Real.real.SUM_2"
49.66 + "SUM_1" > "HOL4Real.real.SUM_1"
49.67 + "SUM_0" > "HOL4Real.real.SUM_0"
49.68 + "SETOK_LE_LT" > "HOL4Real.real.SETOK_LE_LT"
49.69 + "REAL_SUP_UBOUND_LE" > "HOL4Real.real.REAL_SUP_UBOUND_LE"
49.70 + "REAL_SUP_UBOUND" > "HOL4Real.real.REAL_SUP_UBOUND"
49.71 + "REAL_SUP_SOMEPOS" > "HOL4Real.real.REAL_SUP_SOMEPOS"
49.72 + "REAL_SUP_LE" > "HOL4Real.real.REAL_SUP_LE"
49.73 + "REAL_SUP_EXISTS" > "HOL4Real.real.REAL_SUP_EXISTS"
49.74 + "REAL_SUP_ALLPOS" > "HOL4Compat.REAL_SUP_ALLPOS"
49.75 + "REAL_SUP" > "HOL4Real.real.REAL_SUP"
49.76 + "REAL_SUMSQ" > "HOL4Real.real.REAL_SUMSQ"
49.77 + "REAL_SUB_TRIANGLE" > "HOL4Real.real.REAL_SUB_TRIANGLE"
49.78 + "REAL_SUB_SUB2" > "HOL4Real.real.REAL_SUB_SUB2"
49.79 + "REAL_SUB_SUB" > "HOL4Real.real.REAL_SUB_SUB"
49.80 + "REAL_SUB_RZERO" > "Ring_and_Field.diff_0_right"
49.81 + "REAL_SUB_RNEG" > "Ring_and_Field.diff_minus_eq_add"
49.82 + "REAL_SUB_REFL" > "Ring_and_Field.diff_self"
49.83 + "REAL_SUB_RDISTRIB" > "Ring_and_Field.left_diff_distrib"
49.84 + "REAL_SUB_NEG2" > "HOL4Real.real.REAL_SUB_NEG2"
49.85 + "REAL_SUB_LZERO" > "Ring_and_Field.diff_0"
49.86 + "REAL_SUB_LT" > "RealDef.real_0_less_diff_iff"
49.87 + "REAL_SUB_LNEG" > "HOL4Real.real.REAL_SUB_LNEG"
49.88 + "REAL_SUB_LE" > "RealDef.real_0_le_diff_iff"
49.89 + "REAL_SUB_LDISTRIB" > "Ring_and_Field.right_diff_distrib"
49.90 + "REAL_SUB_INV2" > "HOL4Real.real.REAL_SUB_INV2"
49.91 + "REAL_SUB_ADD2" > "Ring_and_Field.add_minus_self_left"
49.92 + "REAL_SUB_ADD" > "Ring_and_Field.minus_add_self"
49.93 + "REAL_SUB_ABS" > "HOL4Real.real.REAL_SUB_ABS"
49.94 + "REAL_SUB_0" > "Ring_and_Field.eq_iff_diff_eq_0"
49.95 + "REAL_RNEG_UNIQ" > "RealDef.real_add_eq_0_iff"
49.96 + "REAL_RINV_UNIQ" > "RealDef.real_inverse_unique"
49.97 + "REAL_RDISTRIB" > "Ring_and_Field.ring_distrib_2"
49.98 + "REAL_POW_POW" > "Power.power_mult"
49.99 + "REAL_POW_MONO_LT" > "Power.power_strict_increasing"
49.100 + "REAL_POW_LT2" > "HOL4Real.real.REAL_POW_LT2"
49.101 + "REAL_POW_LT" > "Power.zero_less_power"
49.102 + "REAL_POW_INV" > "Power.power_inverse"
49.103 + "REAL_POW_DIV" > "Power.power_divide"
49.104 + "REAL_POW_ADD" > "Power.power_add"
49.105 + "REAL_POW2_ABS" > "NatBin.power2_abs"
49.106 + "REAL_POS_NZ" > "HOL4Real.real.REAL_POS_NZ"
49.107 + "REAL_POS" > "RealDef.real_of_nat_ge_zero"
49.108 + "REAL_POASQ" > "HOL4Real.real.REAL_POASQ"
49.109 + "REAL_OVER1" > "Ring_and_Field.divide_1"
49.110 + "REAL_OF_NUM_SUC" > "RealDef.real_of_nat_Suc"
49.111 + "REAL_OF_NUM_POW" > "RealPow.realpow_real_of_nat"
49.112 + "REAL_OF_NUM_MUL" > "RealDef.real_of_nat_mult"
49.113 + "REAL_OF_NUM_LE" > "RealDef.real_of_nat_le_iff"
49.114 + "REAL_OF_NUM_EQ" > "RealDef.real_of_nat_inject"
49.115 + "REAL_OF_NUM_ADD" > "RealDef.real_of_nat_add"
49.116 + "REAL_NZ_IMP_LT" > "HOL4Real.real.REAL_NZ_IMP_LT"
49.117 + "REAL_NOT_LT" > "HOL4Compat.real_lte"
49.118 + "REAL_NOT_LE" > "HOL.linorder_not_le"
49.119 + "REAL_NEG_SUB" > "Ring_and_Field.minus_diff_eq"
49.120 + "REAL_NEG_RMUL" > "Ring_and_Field.minus_mult_right"
49.121 + "REAL_NEG_NEG" > "Ring_and_Field.minus_minus"
49.122 + "REAL_NEG_MUL2" > "Ring_and_Field.minus_mult_minus"
49.123 + "REAL_NEG_MINUS1" > "HOL4Real.real.REAL_NEG_MINUS1"
49.124 + "REAL_NEG_LT0" > "Ring_and_Field.neg_less_0_iff_less"
49.125 + "REAL_NEG_LMUL" > "Ring_and_Field.minus_mult_left"
49.126 + "REAL_NEG_LE0" > "Ring_and_Field.neg_le_0_iff_le"
49.127 + "REAL_NEG_INV" > "Ring_and_Field.nonzero_inverse_minus_eq"
49.128 + "REAL_NEG_GT0" > "Ring_and_Field.neg_0_less_iff_less"
49.129 + "REAL_NEG_GE0" > "Ring_and_Field.neg_0_le_iff_le"
49.130 + "REAL_NEG_EQ0" > "Ring_and_Field.neg_equal_0_iff_equal"
49.131 + "REAL_NEG_EQ" > "HOL4Real.real.REAL_NEG_EQ"
49.132 + "REAL_NEG_ADD" > "Ring_and_Field.minus_add_distrib"
49.133 + "REAL_NEG_0" > "Ring_and_Field.minus_zero"
49.134 + "REAL_NEGNEG" > "Ring_and_Field.minus_minus"
49.135 + "REAL_MUL_SYM" > "Ring_and_Field.mult_ac_2"
49.136 + "REAL_MUL_RZERO" > "Ring_and_Field.mult_zero_right"
49.137 + "REAL_MUL_RNEG" > "Ring_and_Field.minus_mult_right"
49.138 + "REAL_MUL_RINV" > "Ring_and_Field.right_inverse"
49.139 + "REAL_MUL_RID" > "Ring_and_Field.mult_1_right"
49.140 + "REAL_MUL_LZERO" > "Ring_and_Field.mult_zero_left"
49.141 + "REAL_MUL_LNEG" > "Ring_and_Field.minus_mult_left"
49.142 + "REAL_MUL_LINV" > "HOL4Compat.REAL_MUL_LINV"
49.143 + "REAL_MUL_LID" > "Ring_and_Field.almost_semiring.mult_1"
49.144 + "REAL_MUL_ASSOC" > "HOL4Compat.REAL_MUL_ASSOC"
49.145 + "REAL_MUL" > "RealDef.real_of_nat_mult"
49.146 + "REAL_MIDDLE2" > "HOL4Real.real.REAL_MIDDLE2"
49.147 + "REAL_MIDDLE1" > "HOL4Real.real.REAL_MIDDLE1"
49.148 + "REAL_MEAN" > "Ring_and_Field.dense"
49.149 + "REAL_LT_TRANS" > "Set.basic_trans_rules_21"
49.150 + "REAL_LT_TOTAL" > "HOL4Compat.REAL_LT_TOTAL"
49.151 + "REAL_LT_SUB_RADD" > "Ring_and_Field.compare_rls_6"
49.152 + "REAL_LT_SUB_LADD" > "Ring_and_Field.compare_rls_7"
49.153 + "REAL_LT_RMUL_IMP" > "Ring_and_Field.mult_strict_right_mono"
49.154 + "REAL_LT_RMUL_0" > "HOL4Real.real.REAL_LT_RMUL_0"
49.155 + "REAL_LT_RMUL" > "RealDef.real_mult_less_iff1"
49.156 + "REAL_LT_REFL" > "HOL.order_less_irrefl"
49.157 + "REAL_LT_RDIV_EQ" > "Ring_and_Field.pos_less_divide_eq"
49.158 + "REAL_LT_RDIV_0" > "HOL4Real.real.REAL_LT_RDIV_0"
49.159 + "REAL_LT_RDIV" > "HOL4Real.real.REAL_LT_RDIV"
49.160 + "REAL_LT_RADD" > "Ring_and_Field.add_less_cancel_right"
49.161 + "REAL_LT_NZ" > "HOL4Real.real.REAL_LT_NZ"
49.162 + "REAL_LT_NEGTOTAL" > "HOL4Real.real.REAL_LT_NEGTOTAL"
49.163 + "REAL_LT_NEG" > "Ring_and_Field.neg_less_iff_less"
49.164 + "REAL_LT_MULTIPLE" > "HOL4Real.real.REAL_LT_MULTIPLE"
49.165 + "REAL_LT_MUL2" > "Ring_and_Field.mult_strict_mono'"
49.166 + "REAL_LT_MUL" > "Ring_and_Field.mult_pos"
49.167 + "REAL_LT_LMUL_IMP" > "Ring_and_Field.almost_ordered_semiring.mult_strict_left_mono"
49.168 + "REAL_LT_LMUL_0" > "HOL4Real.real.REAL_LT_LMUL_0"
49.169 + "REAL_LT_LMUL" > "HOL4Real.real.REAL_LT_LMUL"
49.170 + "REAL_LT_LE" > "HOL.order.order_less_le"
49.171 + "REAL_LT_LDIV_EQ" > "Ring_and_Field.pos_divide_less_eq"
49.172 + "REAL_LT_LADD" > "Ring_and_Field.add_less_cancel_left"
49.173 + "REAL_LT_INV_EQ" > "Ring_and_Field.inverse_positive_iff_positive"
49.174 + "REAL_LT_INV" > "Ring_and_Field.less_imp_inverse_less"
49.175 + "REAL_LT_IMP_NE" > "HOL.less_imp_neq"
49.176 + "REAL_LT_IMP_LE" > "HOL.order_less_imp_le"
49.177 + "REAL_LT_IADD" > "Ring_and_Field.add_strict_left_mono"
49.178 + "REAL_LT_HALF2" > "HOL4Real.real.REAL_LT_HALF2"
49.179 + "REAL_LT_HALF1" > "NatSimprocs.half_gt_zero_iff"
49.180 + "REAL_LT_GT" > "HOL.order_less_not_sym"
49.181 + "REAL_LT_FRACTION_0" > "HOL4Real.real.REAL_LT_FRACTION_0"
49.182 + "REAL_LT_FRACTION" > "HOL4Real.real.REAL_LT_FRACTION"
49.183 + "REAL_LT_DIV" > "HOL4Real.real.REAL_LT_DIV"
49.184 + "REAL_LT_ANTISYM" > "HOL4Real.real.REAL_LT_ANTISYM"
49.185 + "REAL_LT_ADD_SUB" > "Ring_and_Field.compare_rls_7"
49.186 + "REAL_LT_ADDR" > "HOL4Real.real.REAL_LT_ADDR"
49.187 + "REAL_LT_ADDNEG2" > "HOL4Real.real.REAL_LT_ADDNEG2"
49.188 + "REAL_LT_ADDNEG" > "HOL4Real.real.REAL_LT_ADDNEG"
49.189 + "REAL_LT_ADDL" > "HOL4Real.real.REAL_LT_ADDL"
49.190 + "REAL_LT_ADD2" > "Ring_and_Field.add_strict_mono"
49.191 + "REAL_LT_ADD1" > "HOL4Real.real.REAL_LT_ADD1"
49.192 + "REAL_LT_ADD" > "RealDef.real_add_order"
49.193 + "REAL_LT_1" > "HOL4Real.real.REAL_LT_1"
49.194 + "REAL_LT_01" > "Ring_and_Field.ordered_semiring.zero_less_one"
49.195 + "REAL_LTE_TRANS" > "Set.basic_trans_rules_24"
49.196 + "REAL_LTE_TOTAL" > "HOL4Real.real.REAL_LTE_TOTAL"
49.197 + "REAL_LTE_ANTSYM" > "HOL4Real.real.REAL_LTE_ANTSYM"
49.198 + "REAL_LTE_ADD2" > "Ring_and_Field.add_less_le_mono"
49.199 + "REAL_LTE_ADD" > "HOL4Real.real.REAL_LTE_ADD"
49.200 + "REAL_LT1_POW2" > "HOL4Real.real.REAL_LT1_POW2"
49.201 + "REAL_LT" > "RealDef.real_of_nat_less_iff"
49.202 + "REAL_LNEG_UNIQ" > "HOL4Real.real.REAL_LNEG_UNIQ"
49.203 + "REAL_LINV_UNIQ" > "HOL4Real.real.REAL_LINV_UNIQ"
49.204 + "REAL_LE_TRANS" > "Set.basic_trans_rules_25"
49.205 + "REAL_LE_TOTAL" > "HOL.linorder.linorder_linear"
49.206 + "REAL_LE_SUB_RADD" > "Ring_and_Field.compare_rls_8"
49.207 + "REAL_LE_SUB_LADD" > "Ring_and_Field.compare_rls_9"
49.208 + "REAL_LE_SQUARE" > "Ring_and_Field.zero_le_square"
49.209 + "REAL_LE_RNEG" > "HOL4Real.real.REAL_LE_RNEG"
49.210 + "REAL_LE_RMUL_IMP" > "Ring_and_Field.mult_right_mono"
49.211 + "REAL_LE_RMUL" > "RealDef.real_mult_le_cancel_iff1"
49.212 + "REAL_LE_REFL" > "HOL.order.order_refl"
49.213 + "REAL_LE_RDIV_EQ" > "Ring_and_Field.pos_le_divide_eq"
49.214 + "REAL_LE_RDIV" > "HOL4Real.real.REAL_LE_RDIV"
49.215 + "REAL_LE_RADD" > "Ring_and_Field.add_le_cancel_right"
49.216 + "REAL_LE_POW2" > "NatBin.zero_le_power2"
49.217 + "REAL_LE_NEGTOTAL" > "HOL4Real.real.REAL_LE_NEGTOTAL"
49.218 + "REAL_LE_NEGR" > "Ring_and_Field.le_minus_self_iff"
49.219 + "REAL_LE_NEGL" > "Ring_and_Field.minus_le_self_iff"
49.220 + "REAL_LE_NEG2" > "Ring_and_Field.neg_le_iff_le"
49.221 + "REAL_LE_NEG" > "Ring_and_Field.neg_le_iff_le"
49.222 + "REAL_LE_MUL2" > "HOL4Real.real.REAL_LE_MUL2"
49.223 + "REAL_LE_MUL" > "HOL4Real.real.REAL_LE_MUL"
49.224 + "REAL_LE_LT" > "HOL.order_le_less"
49.225 + "REAL_LE_LNEG" > "RealDef.real_0_le_add_iff"
49.226 + "REAL_LE_LMUL_IMP" > "Ring_and_Field.mult_left_mono"
49.227 + "REAL_LE_LMUL" > "RealDef.real_mult_le_cancel_iff2"
49.228 + "REAL_LE_LDIV_EQ" > "Ring_and_Field.pos_divide_le_eq"
49.229 + "REAL_LE_LDIV" > "HOL4Real.real.REAL_LE_LDIV"
49.230 + "REAL_LE_LADD_IMP" > "Ring_and_Field.almost_ordered_semiring.add_left_mono"
49.231 + "REAL_LE_LADD" > "Ring_and_Field.add_le_cancel_left"
49.232 + "REAL_LE_INV_EQ" > "Ring_and_Field.inverse_nonnegative_iff_nonnegative"
49.233 + "REAL_LE_INV" > "HOL4Real.real.REAL_LE_INV"
49.234 + "REAL_LE_DOUBLE" > "HOL4Real.real.REAL_LE_DOUBLE"
49.235 + "REAL_LE_DIV" > "HOL4Real.real.REAL_LE_DIV"
49.236 + "REAL_LE_ANTISYM" > "HOL.order_eq_iff"
49.237 + "REAL_LE_ADDR" > "HOL4Real.real.REAL_LE_ADDR"
49.238 + "REAL_LE_ADDL" > "HOL4Real.real.REAL_LE_ADDL"
49.239 + "REAL_LE_ADD2" > "Ring_and_Field.add_mono"
49.240 + "REAL_LE_ADD" > "RealDef.real_le_add_order"
49.241 + "REAL_LE_01" > "Ring_and_Field.zero_le_one"
49.242 + "REAL_LET_TRANS" > "Set.basic_trans_rules_23"
49.243 + "REAL_LET_TOTAL" > "HOL4Real.real.REAL_LET_TOTAL"
49.244 + "REAL_LET_ANTISYM" > "HOL4Real.real.REAL_LET_ANTISYM"
49.245 + "REAL_LET_ADD2" > "Ring_and_Field.add_le_less_mono"
49.246 + "REAL_LET_ADD" > "HOL4Real.real.REAL_LET_ADD"
49.247 + "REAL_LE1_POW2" > "HOL4Real.real.REAL_LE1_POW2"
49.248 + "REAL_LE" > "RealDef.real_of_nat_le_iff"
49.249 + "REAL_LDISTRIB" > "Ring_and_Field.ring_distrib_1"
49.250 + "REAL_INV_POS" > "Ring_and_Field.positive_imp_inverse_positive"
49.251 + "REAL_INV_NZ" > "Ring_and_Field.nonzero_imp_inverse_nonzero"
49.252 + "REAL_INV_MUL" > "HOL4Real.real.REAL_INV_MUL"
49.253 + "REAL_INV_LT1" > "RealDef.real_inverse_gt_one"
49.254 + "REAL_INV_INV" > "Ring_and_Field.inverse_inverse_eq"
49.255 + "REAL_INV_EQ_0" > "Ring_and_Field.inverse_nonzero_iff_nonzero"
49.256 + "REAL_INV_1OVER" > "Ring_and_Field.inverse_eq_divide"
49.257 + "REAL_INV_0" > "Ring_and_Field.division_by_zero.inverse_zero"
49.258 + "REAL_INVINV" > "Ring_and_Field.nonzero_inverse_inverse_eq"
49.259 + "REAL_INV1" > "Ring_and_Field.inverse_1"
49.260 + "REAL_INJ" > "RealDef.real_of_nat_inject"
49.261 + "REAL_HALF_DOUBLE" > "RComplete.real_sum_of_halves"
49.262 + "REAL_FACT_NZ" > "HOL4Real.real.REAL_FACT_NZ"
49.263 + "REAL_EQ_SUB_RADD" > "Ring_and_Field.compare_rls_10"
49.264 + "REAL_EQ_SUB_LADD" > "Ring_and_Field.compare_rls_11"
49.265 + "REAL_EQ_RMUL_IMP" > "Ring_and_Field.field_mult_cancel_right_lemma"
49.266 + "REAL_EQ_RMUL" > "Ring_and_Field.field_mult_cancel_right"
49.267 + "REAL_EQ_RDIV_EQ" > "HOL4Real.real.REAL_EQ_RDIV_EQ"
49.268 + "REAL_EQ_RADD" > "Ring_and_Field.add_right_cancel"
49.269 + "REAL_EQ_NEG" > "Ring_and_Field.neg_equal_iff_equal"
49.270 + "REAL_EQ_MUL_LCANCEL" > "Ring_and_Field.field_mult_cancel_left"
49.271 + "REAL_EQ_LMUL_IMP" > "HOL4Real.real.REAL_EQ_LMUL_IMP"
49.272 + "REAL_EQ_LMUL2" > "RealDef.real_mult_left_cancel"
49.273 + "REAL_EQ_LMUL" > "Ring_and_Field.field_mult_cancel_left"
49.274 + "REAL_EQ_LDIV_EQ" > "HOL4Real.real.REAL_EQ_LDIV_EQ"
49.275 + "REAL_EQ_LADD" > "Ring_and_Field.add_left_cancel"
49.276 + "REAL_EQ_IMP_LE" > "HOL.order_eq_refl"
49.277 + "REAL_ENTIRE" > "Ring_and_Field.field_mult_eq_0_iff"
49.278 + "REAL_DOWN2" > "RealDef.real_lbound_gt_zero"
49.279 + "REAL_DOWN" > "HOL4Real.real.REAL_DOWN"
49.280 + "REAL_DOUBLE" > "IntArith.mult_2"
49.281 + "REAL_DIV_RMUL" > "HOL4Real.real.REAL_DIV_RMUL"
49.282 + "REAL_DIV_REFL" > "Ring_and_Field.divide_self"
49.283 + "REAL_DIV_MUL2" > "Ring_and_Field.nonzero_mult_divide_cancel_left"
49.284 + "REAL_DIV_LZERO" > "Ring_and_Field.divide_zero_left"
49.285 + "REAL_DIV_LMUL" > "HOL4Real.real.REAL_DIV_LMUL"
49.286 + "REAL_DIFFSQ" > "HOL4Real.real.REAL_DIFFSQ"
49.287 + "REAL_ARCH_LEAST" > "HOL4Real.real.REAL_ARCH_LEAST"
49.288 + "REAL_ARCH" > "RComplete.reals_Archimedean3"
49.289 + "REAL_ADD_SYM" > "Ring_and_Field.add_ac_2"
49.290 + "REAL_ADD_SUB2" > "HOL4Real.real.REAL_ADD_SUB2"
49.291 + "REAL_ADD_SUB" > "Ring_and_Field.add_minus_self_right"
49.292 + "REAL_ADD_RINV" > "Ring_and_Field.right_minus"
49.293 + "REAL_ADD_RID_UNIQ" > "HOL4Real.real.REAL_ADD_RID_UNIQ"
49.294 + "REAL_ADD_RID" > "Ring_and_Field.add_0_right"
49.295 + "REAL_ADD_RDISTRIB" > "Ring_and_Field.ring_distrib_2"
49.296 + "REAL_ADD_LINV" > "HOL4Compat.REAL_ADD_LINV"
49.297 + "REAL_ADD_LID_UNIQ" > "HOL4Real.real.REAL_ADD_LID_UNIQ"
49.298 + "REAL_ADD_LID" > "Ring_and_Field.abelian_semigroup.add_0"
49.299 + "REAL_ADD_LDISTRIB" > "Ring_and_Field.ring_distrib_1"
49.300 + "REAL_ADD_ASSOC" > "HOL4Compat.REAL_ADD_ASSOC"
49.301 + "REAL_ADD2_SUB2" > "HOL4Real.real.REAL_ADD2_SUB2"
49.302 + "REAL_ADD" > "RealDef.real_of_nat_add"
49.303 + "REAL_ABS_TRIANGLE" > "Ring_and_Field.abs_triangle_ineq"
49.304 + "REAL_ABS_POS" > "Ring_and_Field.abs_ge_zero"
49.305 + "REAL_ABS_MUL" > "Ring_and_Field.abs_mult"
49.306 + "REAL_ABS_0" > "Ring_and_Field.abs_zero"
49.307 + "REAL_10" > "HOL4Compat.REAL_10"
49.308 + "REAL_1" > "HOL4Real.real.REAL_1"
49.309 + "REAL_0" > "HOL4Real.real.REAL_0"
49.310 + "REAL" > "RealDef.real_of_nat_Suc"
49.311 + "POW_ZERO_EQ" > "HOL4Real.real.POW_ZERO_EQ"
49.312 + "POW_ZERO" > "RealPow.realpow_zero_zero"
49.313 + "POW_POS_LT" > "HOL4Real.real.POW_POS_LT"
49.314 + "POW_POS" > "Power.zero_le_power"
49.315 + "POW_PLUS1" > "HOL4Real.real.POW_PLUS1"
49.316 + "POW_ONE" > "Power.power_one"
49.317 + "POW_NZ" > "Power.field_power_not_zero"
49.318 + "POW_MUL" > "Power.power_mult_distrib"
49.319 + "POW_MINUS1" > "NatBin.power_minus1_even"
49.320 + "POW_M1" > "HOL4Real.real.POW_M1"
49.321 + "POW_LT" > "HOL4Real.real.POW_LT"
49.322 + "POW_LE" > "Power.power_mono"
49.323 + "POW_INV" > "Power.nonzero_power_inverse"
49.324 + "POW_EQ" > "Power.power_inject_base"
49.325 + "POW_ADD" > "Power.power_add"
49.326 + "POW_ABS" > "Power.power_abs"
49.327 + "POW_2_LT" > "RealPow.two_realpow_gt"
49.328 + "POW_2_LE1" > "RealPow.two_realpow_ge_one"
49.329 + "POW_2" > "NatBin.power2_eq_square"
49.330 + "POW_1" > "Power.power_one_right"
49.331 + "POW_0" > "Power.power_0_Suc"
49.332 + "ABS_ZERO" > "Ring_and_Field.abs_zero_iff"
49.333 + "ABS_TRIANGLE" > "Ring_and_Field.abs_triangle_ineq"
49.334 + "ABS_SUM" > "HOL4Real.real.ABS_SUM"
49.335 + "ABS_SUB_ABS" > "HOL4Real.real.ABS_SUB_ABS"
49.336 + "ABS_SUB" > "HOL4Real.real.ABS_SUB"
49.337 + "ABS_STILLNZ" > "HOL4Real.real.ABS_STILLNZ"
49.338 + "ABS_SIGN2" > "HOL4Real.real.ABS_SIGN2"
49.339 + "ABS_SIGN" > "HOL4Real.real.ABS_SIGN"
49.340 + "ABS_REFL" > "HOL4Real.real.ABS_REFL"
49.341 + "ABS_POW2" > "NatBin.abs_power2"
49.342 + "ABS_POS" > "Ring_and_Field.abs_ge_zero"
49.343 + "ABS_NZ" > "Ring_and_Field.zero_less_abs_iff"
49.344 + "ABS_NEG" > "Ring_and_Field.abs_minus_cancel"
49.345 + "ABS_N" > "RealDef.abs_real_of_nat_cancel"
49.346 + "ABS_MUL" > "Ring_and_Field.abs_mult"
49.347 + "ABS_LT_MUL2" > "HOL4Real.real.ABS_LT_MUL2"
49.348 + "ABS_LE" > "Ring_and_Field.abs_ge_self"
49.349 + "ABS_INV" > "Ring_and_Field.nonzero_abs_inverse"
49.350 + "ABS_DIV" > "Ring_and_Field.nonzero_abs_divide"
49.351 + "ABS_CIRCLE" > "HOL4Real.real.ABS_CIRCLE"
49.352 + "ABS_CASES" > "HOL4Real.real.ABS_CASES"
49.353 + "ABS_BOUNDS" > "RealDef.abs_le_interval_iff"
49.354 + "ABS_BOUND" > "HOL4Real.real.ABS_BOUND"
49.355 + "ABS_BETWEEN2" > "HOL4Real.real.ABS_BETWEEN2"
49.356 + "ABS_BETWEEN1" > "HOL4Real.real.ABS_BETWEEN1"
49.357 + "ABS_BETWEEN" > "HOL4Real.real.ABS_BETWEEN"
49.358 + "ABS_ABS" > "Ring_and_Field.abs_idempotent"
49.359 + "ABS_1" > "Ring_and_Field.abs_one"
49.360 + "ABS_0" > "Ring_and_Field.abs_zero"
49.361 +
49.362 +end
50.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
50.2 +++ b/src/HOL/Import/HOL/realax.imp Fri Apr 02 17:37:45 2004 +0200
50.3 @@ -0,0 +1,141 @@
50.4 +import
50.5 +
50.6 +import_segment "hol4"
50.7 +
50.8 +def_maps
50.9 + "treal_of_hreal" > "treal_of_hreal_def"
50.10 + "treal_neg" > "treal_neg_def"
50.11 + "treal_mul" > "treal_mul_def"
50.12 + "treal_lt" > "treal_lt_def"
50.13 + "treal_inv" > "treal_inv_def"
50.14 + "treal_eq" > "treal_eq_def"
50.15 + "treal_add" > "treal_add_def"
50.16 + "treal_1" > "treal_1_def"
50.17 + "treal_0" > "treal_0_def"
50.18 + "hreal_of_treal" > "hreal_of_treal_def"
50.19 +
50.20 +type_maps
50.21 + "real" > "RealDef.real"
50.22 +
50.23 +const_maps
50.24 + "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
50.25 + "treal_neg" > "HOL4Real.realax.treal_neg"
50.26 + "treal_mul" > "HOL4Real.realax.treal_mul"
50.27 + "treal_lt" > "HOL4Real.realax.treal_lt"
50.28 + "treal_inv" > "HOL4Real.realax.treal_inv"
50.29 + "treal_eq" > "HOL4Real.realax.treal_eq"
50.30 + "treal_add" > "HOL4Real.realax.treal_add"
50.31 + "treal_1" > "HOL4Real.realax.treal_1"
50.32 + "treal_0" > "HOL4Real.realax.treal_0"
50.33 + "real_neg" > "uminus" :: "real => real"
50.34 + "real_mul" > "op *" :: "real => real => real"
50.35 + "real_lt" > "op <" :: "real => real => bool"
50.36 + "real_add" > "op +" :: "real => real => real"
50.37 + "real_1" > "1" :: "real"
50.38 + "real_0" > "0" :: "real"
50.39 + "inv" > "HOL.inverse" :: "real => real"
50.40 + "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
50.41 +
50.42 +thm_maps
50.43 + "treal_of_hreal_def" > "HOL4Real.realax.treal_of_hreal_def"
50.44 + "treal_of_hreal" > "HOL4Real.realax.treal_of_hreal"
50.45 + "treal_neg_def" > "HOL4Real.realax.treal_neg_def"
50.46 + "treal_neg" > "HOL4Real.realax.treal_neg"
50.47 + "treal_mul_def" > "HOL4Real.realax.treal_mul_def"
50.48 + "treal_mul" > "HOL4Real.realax.treal_mul"
50.49 + "treal_lt_def" > "HOL4Real.realax.treal_lt_def"
50.50 + "treal_lt" > "HOL4Real.realax.treal_lt"
50.51 + "treal_inv_def" > "HOL4Real.realax.treal_inv_def"
50.52 + "treal_inv" > "HOL4Real.realax.treal_inv"
50.53 + "treal_eq_def" > "HOL4Real.realax.treal_eq_def"
50.54 + "treal_eq" > "HOL4Real.realax.treal_eq"
50.55 + "treal_add_def" > "HOL4Real.realax.treal_add_def"
50.56 + "treal_add" > "HOL4Real.realax.treal_add"
50.57 + "treal_1_def" > "HOL4Real.realax.treal_1_def"
50.58 + "treal_1" > "HOL4Real.realax.treal_1"
50.59 + "treal_0_def" > "HOL4Real.realax.treal_0_def"
50.60 + "treal_0" > "HOL4Real.realax.treal_0"
50.61 + "hreal_of_treal_def" > "HOL4Real.realax.hreal_of_treal_def"
50.62 + "hreal_of_treal" > "HOL4Real.realax.hreal_of_treal"
50.63 + "TREAL_NEG_WELLDEF" > "HOL4Real.realax.TREAL_NEG_WELLDEF"
50.64 + "TREAL_MUL_WELLDEFR" > "HOL4Real.realax.TREAL_MUL_WELLDEFR"
50.65 + "TREAL_MUL_WELLDEF" > "HOL4Real.realax.TREAL_MUL_WELLDEF"
50.66 + "TREAL_MUL_SYM" > "HOL4Real.realax.TREAL_MUL_SYM"
50.67 + "TREAL_MUL_LINV" > "HOL4Real.realax.TREAL_MUL_LINV"
50.68 + "TREAL_MUL_LID" > "HOL4Real.realax.TREAL_MUL_LID"
50.69 + "TREAL_MUL_ASSOC" > "HOL4Real.realax.TREAL_MUL_ASSOC"
50.70 + "TREAL_LT_WELLDEFR" > "HOL4Real.realax.TREAL_LT_WELLDEFR"
50.71 + "TREAL_LT_WELLDEFL" > "HOL4Real.realax.TREAL_LT_WELLDEFL"
50.72 + "TREAL_LT_WELLDEF" > "HOL4Real.realax.TREAL_LT_WELLDEF"
50.73 + "TREAL_LT_TRANS" > "HOL4Real.realax.TREAL_LT_TRANS"
50.74 + "TREAL_LT_TOTAL" > "HOL4Real.realax.TREAL_LT_TOTAL"
50.75 + "TREAL_LT_REFL" > "HOL4Real.realax.TREAL_LT_REFL"
50.76 + "TREAL_LT_MUL" > "HOL4Real.realax.TREAL_LT_MUL"
50.77 + "TREAL_LT_ADD" > "HOL4Real.realax.TREAL_LT_ADD"
50.78 + "TREAL_LDISTRIB" > "HOL4Real.realax.TREAL_LDISTRIB"
50.79 + "TREAL_ISO" > "HOL4Real.realax.TREAL_ISO"
50.80 + "TREAL_INV_WELLDEF" > "HOL4Real.realax.TREAL_INV_WELLDEF"
50.81 + "TREAL_INV_0" > "HOL4Real.realax.TREAL_INV_0"
50.82 + "TREAL_EQ_TRANS" > "HOL4Real.realax.TREAL_EQ_TRANS"
50.83 + "TREAL_EQ_SYM" > "HOL4Real.realax.TREAL_EQ_SYM"
50.84 + "TREAL_EQ_REFL" > "HOL4Real.realax.TREAL_EQ_REFL"
50.85 + "TREAL_EQ_EQUIV" > "HOL4Real.realax.TREAL_EQ_EQUIV"
50.86 + "TREAL_EQ_AP" > "HOL4Real.realax.TREAL_EQ_AP"
50.87 + "TREAL_BIJ_WELLDEF" > "HOL4Real.realax.TREAL_BIJ_WELLDEF"
50.88 + "TREAL_BIJ" > "HOL4Real.realax.TREAL_BIJ"
50.89 + "TREAL_ADD_WELLDEFR" > "HOL4Real.realax.TREAL_ADD_WELLDEFR"
50.90 + "TREAL_ADD_WELLDEF" > "HOL4Real.realax.TREAL_ADD_WELLDEF"
50.91 + "TREAL_ADD_SYM" > "HOL4Real.realax.TREAL_ADD_SYM"
50.92 + "TREAL_ADD_LINV" > "HOL4Real.realax.TREAL_ADD_LINV"
50.93 + "TREAL_ADD_LID" > "HOL4Real.realax.TREAL_ADD_LID"
50.94 + "TREAL_ADD_ASSOC" > "HOL4Real.realax.TREAL_ADD_ASSOC"
50.95 + "TREAL_10" > "HOL4Real.realax.TREAL_10"
50.96 + "REAL_SUP_ALLPOS" > "HOL4Compat.REAL_SUP_ALLPOS"
50.97 + "REAL_MUL_SYM" > "Ring_and_Field.mult_ac_2"
50.98 + "REAL_MUL_LINV" > "HOL4Compat.REAL_MUL_LINV"
50.99 + "REAL_MUL_LID" > "Ring_and_Field.almost_semiring.mult_1"
50.100 + "REAL_MUL_ASSOC" > "HOL4Compat.REAL_MUL_ASSOC"
50.101 + "REAL_LT_TRANS" > "Set.basic_trans_rules_21"
50.102 + "REAL_LT_TOTAL" > "HOL4Compat.REAL_LT_TOTAL"
50.103 + "REAL_LT_REFL" > "HOL.order_less_irrefl"
50.104 + "REAL_LT_MUL" > "Ring_and_Field.mult_pos"
50.105 + "REAL_LT_IADD" > "Ring_and_Field.add_strict_left_mono"
50.106 + "REAL_LDISTRIB" > "Ring_and_Field.ring_distrib_1"
50.107 + "REAL_INV_0" > "Ring_and_Field.division_by_zero.inverse_zero"
50.108 + "REAL_ADD_SYM" > "Ring_and_Field.add_ac_2"
50.109 + "REAL_ADD_LINV" > "HOL4Compat.REAL_ADD_LINV"
50.110 + "REAL_ADD_LID" > "Ring_and_Field.abelian_semigroup.add_0"
50.111 + "REAL_ADD_ASSOC" > "HOL4Compat.REAL_ADD_ASSOC"
50.112 + "REAL_10" > "HOL4Compat.REAL_10"
50.113 + "HREAL_RDISTRIB" > "HOL4Real.realax.HREAL_RDISTRIB"
50.114 + "HREAL_LT_REFL" > "HOL4Real.realax.HREAL_LT_REFL"
50.115 + "HREAL_LT_NE" > "HOL4Real.realax.HREAL_LT_NE"
50.116 + "HREAL_LT_LADD" > "HOL4Real.realax.HREAL_LT_LADD"
50.117 + "HREAL_LT_GT" > "HOL4Real.realax.HREAL_LT_GT"
50.118 + "HREAL_LT_ADDR" > "HOL4Real.realax.HREAL_LT_ADDR"
50.119 + "HREAL_LT_ADDL" > "HOL4Real.realax.HREAL_LT_ADDL"
50.120 + "HREAL_LT_ADD2" > "HOL4Real.realax.HREAL_LT_ADD2"
50.121 + "HREAL_EQ_LADD" > "HOL4Real.realax.HREAL_EQ_LADD"
50.122 + "HREAL_EQ_ADDR" > "HOL4Base.hreal.HREAL_NOZERO"
50.123 + "HREAL_EQ_ADDL" > "HOL4Real.realax.HREAL_EQ_ADDL"
50.124 +
50.125 +ignore_thms
50.126 + "real_tybij"
50.127 + "real_of_hreal"
50.128 + "real_neg"
50.129 + "real_mul"
50.130 + "real_lt"
50.131 + "real_inv"
50.132 + "real_add"
50.133 + "real_TY_DEF"
50.134 + "real_1"
50.135 + "real_0"
50.136 + "hreal_of_real"
50.137 + "SUP_ALLPOS_LEMMA4"
50.138 + "SUP_ALLPOS_LEMMA3"
50.139 + "SUP_ALLPOS_LEMMA2"
50.140 + "SUP_ALLPOS_LEMMA1"
50.141 + "REAL_POS"
50.142 + "REAL_ISO_EQ"
50.143 +
50.144 +end
51.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
51.2 +++ b/src/HOL/Import/HOL/relation.imp Fri Apr 02 17:37:45 2004 +0200
51.3 @@ -0,0 +1,102 @@
51.4 +import
51.5 +
51.6 +import_segment "hol4"
51.7 +
51.8 +def_maps
51.9 + "transitive" > "transitive_primdef"
51.10 + "the_fun" > "the_fun_primdef"
51.11 + "pred_reflexive" > "pred_reflexive_def"
51.12 + "inv_image" > "inv_image_primdef"
51.13 + "approx" > "approx_primdef"
51.14 + "WFREC" > "WFREC_def"
51.15 + "WF" > "WF_def"
51.16 + "TC" > "TC_def"
51.17 + "RTC" > "RTC_def"
51.18 + "RESTRICT" > "RESTRICT_def"
51.19 + "RC" > "RC_primdef"
51.20 + "EMPTY_REL" > "EMPTY_REL_def"
51.21 +
51.22 +const_maps
51.23 + "transitive" > "HOL4Base.relation.transitive"
51.24 + "the_fun" > "HOL4Base.relation.the_fun"
51.25 + "pred_reflexive" > "HOL4Base.relation.pred_reflexive"
51.26 + "inv_image" > "HOL4Base.relation.inv_image"
51.27 + "approx" > "HOL4Base.relation.approx"
51.28 + "WFREC" > "HOL4Base.relation.WFREC"
51.29 + "WF" > "HOL4Base.relation.WF"
51.30 + "TC" > "HOL4Base.relation.TC"
51.31 + "RTC" > "HOL4Base.relation.RTC"
51.32 + "RESTRICT" > "HOL4Base.relation.RESTRICT"
51.33 + "RC" > "HOL4Base.relation.RC"
51.34 + "EMPTY_REL" > "HOL4Base.relation.EMPTY_REL"
51.35 +
51.36 +const_renames
51.37 + "reflexive" > "pred_reflexive"
51.38 +
51.39 +thm_maps
51.40 + "transitive_primdef" > "HOL4Base.relation.transitive_primdef"
51.41 + "transitive_def" > "HOL4Base.relation.transitive_def"
51.42 + "the_fun_primdef" > "HOL4Base.relation.the_fun_primdef"
51.43 + "the_fun_def" > "HOL4Base.relation.the_fun_def"
51.44 + "reflexive_def" > "HOL4Base.relation.reflexive_def"
51.45 + "pred_reflexive_def" > "HOL4Base.relation.pred_reflexive_def"
51.46 + "inv_image_primdef" > "HOL4Base.relation.inv_image_primdef"
51.47 + "inv_image_def" > "HOL4Base.relation.inv_image_def"
51.48 + "approx_primdef" > "HOL4Base.relation.approx_primdef"
51.49 + "approx_def" > "HOL4Base.relation.approx_def"
51.50 + "WF_inv_image" > "HOL4Base.relation.WF_inv_image"
51.51 + "WF_def" > "HOL4Base.relation.WF_def"
51.52 + "WF_TC" > "HOL4Base.relation.WF_TC"
51.53 + "WF_SUBSET" > "HOL4Base.relation.WF_SUBSET"
51.54 + "WF_RECURSION_THM" > "HOL4Base.relation.WF_RECURSION_THM"
51.55 + "WF_NOT_REFL" > "HOL4Base.relation.WF_NOT_REFL"
51.56 + "WF_INDUCTION_THM" > "HOL4Base.relation.WF_INDUCTION_THM"
51.57 + "WF_EMPTY_REL" > "HOL4Base.relation.WF_EMPTY_REL"
51.58 + "WF_DEF" > "HOL4Base.relation.WF_DEF"
51.59 + "WFREC_def" > "HOL4Base.relation.WFREC_def"
51.60 + "WFREC_THM" > "HOL4Base.relation.WFREC_THM"
51.61 + "WFREC_DEF" > "HOL4Base.relation.WFREC_DEF"
51.62 + "WFREC_COROLLARY" > "HOL4Base.relation.WFREC_COROLLARY"
51.63 + "TC_def" > "HOL4Base.relation.TC_def"
51.64 + "TC_TRANSITIVE" > "HOL4Base.relation.TC_TRANSITIVE"
51.65 + "TC_SUBSET" > "HOL4Base.relation.TC_SUBSET"
51.66 + "TC_STRONG_INDUCT_LEFT1" > "HOL4Base.relation.TC_STRONG_INDUCT_LEFT1"
51.67 + "TC_STRONG_INDUCT" > "HOL4Base.relation.TC_STRONG_INDUCT"
51.68 + "TC_RULES" > "HOL4Base.relation.TC_RULES"
51.69 + "TC_RTC" > "HOL4Base.relation.TC_RTC"
51.70 + "TC_RC_EQNS" > "HOL4Base.relation.TC_RC_EQNS"
51.71 + "TC_MONOTONE" > "HOL4Base.relation.TC_MONOTONE"
51.72 + "TC_INDUCT_LEFT1" > "HOL4Base.relation.TC_INDUCT_LEFT1"
51.73 + "TC_INDUCT" > "HOL4Base.relation.TC_INDUCT"
51.74 + "TC_IDEM" > "HOL4Base.relation.TC_IDEM"
51.75 + "TC_DEF" > "HOL4Base.relation.TC_DEF"
51.76 + "TC_CASES2" > "HOL4Base.relation.TC_CASES2"
51.77 + "TC_CASES1" > "HOL4Base.relation.TC_CASES1"
51.78 + "RTC_def" > "HOL4Base.relation.RTC_def"
51.79 + "RTC_TRANSITIVE" > "HOL4Base.relation.RTC_TRANSITIVE"
51.80 + "RTC_TC_RC" > "HOL4Base.relation.RTC_TC_RC"
51.81 + "RTC_SUBSET" > "HOL4Base.relation.RTC_SUBSET"
51.82 + "RTC_STRONG_INDUCT" > "HOL4Base.relation.RTC_STRONG_INDUCT"
51.83 + "RTC_RULES" > "HOL4Base.relation.RTC_RULES"
51.84 + "RTC_RTC" > "HOL4Base.relation.RTC_RTC"
51.85 + "RTC_REFLEXIVE" > "HOL4Base.relation.RTC_REFLEXIVE"
51.86 + "RTC_MONOTONE" > "HOL4Base.relation.RTC_MONOTONE"
51.87 + "RTC_INDUCT" > "HOL4Base.relation.RTC_INDUCT"
51.88 + "RTC_IDEM" > "HOL4Base.relation.RTC_IDEM"
51.89 + "RTC_DEF" > "HOL4Base.relation.RTC_DEF"
51.90 + "RTC_CASES_RTC_TWICE" > "HOL4Base.relation.RTC_CASES_RTC_TWICE"
51.91 + "RTC_CASES2" > "HOL4Base.relation.RTC_CASES2"
51.92 + "RTC_CASES1" > "HOL4Base.relation.RTC_CASES1"
51.93 + "RESTRICT_def" > "HOL4Base.relation.RESTRICT_def"
51.94 + "RESTRICT_LEMMA" > "HOL4Base.relation.RESTRICT_LEMMA"
51.95 + "RESTRICT_DEF" > "HOL4Base.relation.RESTRICT_DEF"
51.96 + "RC_primdef" > "HOL4Base.relation.RC_primdef"
51.97 + "RC_def" > "HOL4Base.relation.RC_def"
51.98 + "RC_SUBSET" > "HOL4Base.relation.RC_SUBSET"
51.99 + "RC_RTC" > "HOL4Base.relation.RC_RTC"
51.100 + "RC_REFLEXIVE" > "HOL4Base.relation.RC_REFLEXIVE"
51.101 + "RC_IDEM" > "HOL4Base.relation.RC_IDEM"
51.102 + "EMPTY_REL_def" > "HOL4Base.relation.EMPTY_REL_def"
51.103 + "EMPTY_REL_DEF" > "HOL4Base.relation.EMPTY_REL_DEF"
51.104 +
51.105 +end
52.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
52.2 +++ b/src/HOL/Import/HOL/res_quan.imp Fri Apr 02 17:37:45 2004 +0200
52.3 @@ -0,0 +1,37 @@
52.4 +import
52.5 +
52.6 +import_segment "hol4"
52.7 +
52.8 +thm_maps
52.9 + "RES_SELECT_UNIV" > "HOL4Vec.res_quan.RES_SELECT_UNIV"
52.10 + "RES_SELECT_EMPTY" > "HOL4Vec.res_quan.RES_SELECT_EMPTY"
52.11 + "RES_SELECT" > "HOL4Base.bool.RES_SELECT_DEF"
52.12 + "RES_FORALL_UNIV" > "HOL4Vec.res_quan.RES_FORALL_UNIV"
52.13 + "RES_FORALL_UNIQUE" > "HOL4Vec.res_quan.RES_FORALL_UNIQUE"
52.14 + "RES_FORALL_REORDER" > "HOL4Vec.res_quan.RES_FORALL_REORDER"
52.15 + "RES_FORALL_NULL" > "HOL4Vec.res_quan.RES_FORALL_NULL"
52.16 + "RES_FORALL_FORALL" > "HOL4Vec.res_quan.RES_FORALL_FORALL"
52.17 + "RES_FORALL_EMPTY" > "HOL4Vec.res_quan.RES_FORALL_EMPTY"
52.18 + "RES_FORALL_DISJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_DISJ_DIST"
52.19 + "RES_FORALL_CONJ_DIST" > "HOL4Vec.res_quan.RES_FORALL_CONJ_DIST"
52.20 + "RES_FORALL" > "HOL4Base.bool.RES_FORALL_DEF"
52.21 + "RES_EXISTS_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIV"
52.22 + "RES_EXISTS_UNIQUE_UNIV" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_UNIV"
52.23 + "RES_EXISTS_UNIQUE_NULL" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_NULL"
52.24 + "RES_EXISTS_UNIQUE_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_EMPTY"
52.25 + "RES_EXISTS_UNIQUE_ALT" > "HOL4Vec.res_quan.RES_EXISTS_UNIQUE_ALT"
52.26 + "RES_EXISTS_UNIQUE" > "HOL4Base.bool.RES_EXISTS_UNIQUE_DEF"
52.27 + "RES_EXISTS_REORDER" > "HOL4Vec.res_quan.RES_EXISTS_REORDER"
52.28 + "RES_EXISTS_NULL" > "HOL4Vec.res_quan.RES_EXISTS_NULL"
52.29 + "RES_EXISTS_EQUAL" > "HOL4Vec.res_quan.RES_EXISTS_EQUAL"
52.30 + "RES_EXISTS_EMPTY" > "HOL4Vec.res_quan.RES_EXISTS_EMPTY"
52.31 + "RES_EXISTS_DISJ_DIST" > "HOL4Vec.res_quan.RES_EXISTS_DISJ_DIST"
52.32 + "RES_EXISTS_ALT" > "HOL4Vec.res_quan.RES_EXISTS_ALT"
52.33 + "RES_EXISTS" > "HOL4Base.bool.RES_EXISTS_DEF"
52.34 + "RES_DISJ_EXISTS_DIST" > "HOL4Vec.res_quan.RES_DISJ_EXISTS_DIST"
52.35 + "RES_ABSTRACT_IDEMPOT" > "HOL4Vec.res_quan.RES_ABSTRACT_IDEMPOT"
52.36 + "RES_ABSTRACT_EQUAL_EQ" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL_EQ"
52.37 + "RES_ABSTRACT_EQUAL" > "HOL4Vec.res_quan.RES_ABSTRACT_EQUAL"
52.38 + "RES_ABSTRACT" > "HOL4Vec.res_quan.RES_ABSTRACT"
52.39 +
52.40 +end
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
53.2 +++ b/src/HOL/Import/HOL/rich_list.imp Fri Apr 02 17:37:45 2004 +0200
53.3 @@ -0,0 +1,375 @@
53.4 +import
53.5 +
53.6 +import_segment "hol4"
53.7 +
53.8 +def_maps
53.9 + "UNZIP_SND" > "UNZIP_SND_def"
53.10 + "UNZIP_FST" > "UNZIP_FST_def"
53.11 + "SUFFIX" > "SUFFIX_def"
53.12 + "SPLITP" > "SPLITP_def"
53.13 + "SNOC" > "SNOC_def"
53.14 + "SEG" > "SEG_def"
53.15 + "SCANR" > "SCANR_def"
53.16 + "SCANL" > "SCANL_def"
53.17 + "REPLICATE" > "REPLICATE_def"
53.18 + "PREFIX" > "PREFIX_def"
53.19 + "OR_EL" > "OR_EL_def"
53.20 + "LASTN" > "LASTN_def"
53.21 + "IS_SUFFIX" > "IS_SUFFIX_def"
53.22 + "IS_SUBLIST" > "IS_SUBLIST_def"
53.23 + "IS_PREFIX" > "IS_PREFIX_def"
53.24 + "GENLIST" > "GENLIST_def"
53.25 + "FIRSTN" > "FIRSTN_def"
53.26 + "ELL" > "ELL_def"
53.27 + "BUTLASTN" > "BUTLASTN_def"
53.28 + "BUTFIRSTN" > "BUTFIRSTN_def"
53.29 + "AND_EL" > "AND_EL_def"
53.30 +
53.31 +const_maps
53.32 + "UNZIP_SND" > "HOL4Base.rich_list.UNZIP_SND"
53.33 + "UNZIP_FST" > "HOL4Base.rich_list.UNZIP_FST"
53.34 + "SUFFIX" > "HOL4Base.rich_list.SUFFIX"
53.35 + "PREFIX" > "HOL4Base.rich_list.PREFIX"
53.36 + "OR_EL" > "HOL4Base.rich_list.OR_EL"
53.37 + "AND_EL" > "HOL4Base.rich_list.AND_EL"
53.38 +
53.39 +thm_maps
53.40 + "list_INDUCT" > "HOL4Compat.unzip.induct"
53.41 + "list_CASES" > "HOL4Compat.list_CASES"
53.42 + "ZIP_UNZIP" > "HOL4Base.list.ZIP_UNZIP"
53.43 + "ZIP_SNOC" > "HOL4Base.rich_list.ZIP_SNOC"
53.44 + "ZIP" > "HOL4Compat.ZIP"
53.45 + "UNZIP_ZIP" > "HOL4Base.list.UNZIP_ZIP"
53.46 + "UNZIP_SNOC" > "HOL4Base.rich_list.UNZIP_SNOC"
53.47 + "UNZIP_SND_def" > "HOL4Base.rich_list.UNZIP_SND_def"
53.48 + "UNZIP_SND_DEF" > "HOL4Base.rich_list.UNZIP_SND_DEF"
53.49 + "UNZIP_FST_def" > "HOL4Base.rich_list.UNZIP_FST_def"
53.50 + "UNZIP_FST_DEF" > "HOL4Base.rich_list.UNZIP_FST_DEF"
53.51 + "UNZIP" > "HOL4Compat.UNZIP"
53.52 + "TL_SNOC" > "HOL4Base.rich_list.TL_SNOC"
53.53 + "TL" > "List.tl.simps_2"
53.54 + "SUM_SNOC" > "HOL4Base.rich_list.SUM_SNOC"
53.55 + "SUM_REVERSE" > "HOL4Base.rich_list.SUM_REVERSE"
53.56 + "SUM_FOLDR" > "HOL4Compat.sum_def"
53.57 + "SUM_FOLDL" > "HOL4Base.rich_list.SUM_FOLDL"
53.58 + "SUM_FLAT" > "HOL4Base.rich_list.SUM_FLAT"
53.59 + "SUM_APPEND" > "HOL4Base.rich_list.SUM_APPEND"
53.60 + "SUM" > "HOL4Compat.SUM"
53.61 + "SUFFIX_def" > "HOL4Base.rich_list.SUFFIX_def"
53.62 + "SUFFIX_DEF" > "HOL4Base.rich_list.SUFFIX_DEF"
53.63 + "SPLITP" > "HOL4Base.rich_list.SPLITP"
53.64 + "SOME_EL_SNOC" > "HOL4Base.rich_list.SOME_EL_SNOC"
53.65 + "SOME_EL_SEG" > "HOL4Base.rich_list.SOME_EL_SEG"
53.66 + "SOME_EL_REVERSE" > "HOL4Base.rich_list.SOME_EL_REVERSE"
53.67 + "SOME_EL_MAP" > "HOL4Base.rich_list.SOME_EL_MAP"
53.68 + "SOME_EL_LASTN" > "HOL4Base.rich_list.SOME_EL_LASTN"
53.69 + "SOME_EL_FOLDR_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDR_MAP"
53.70 + "SOME_EL_FOLDR" > "HOL4Base.rich_list.SOME_EL_FOLDR"
53.71 + "SOME_EL_FOLDL_MAP" > "HOL4Base.rich_list.SOME_EL_FOLDL_MAP"
53.72 + "SOME_EL_FOLDL" > "HOL4Base.rich_list.SOME_EL_FOLDL"
53.73 + "SOME_EL_FIRSTN" > "HOL4Base.rich_list.SOME_EL_FIRSTN"
53.74 + "SOME_EL_DISJ" > "HOL4Base.rich_list.SOME_EL_DISJ"
53.75 + "SOME_EL_BUTLASTN" > "HOL4Base.rich_list.SOME_EL_BUTLASTN"
53.76 + "SOME_EL_BUTFIRSTN" > "HOL4Base.rich_list.SOME_EL_BUTFIRSTN"
53.77 + "SOME_EL_APPEND" > "HOL4Base.list.EXISTS_APPEND"
53.78 + "SOME_EL" > "HOL4Compat.list_exists_DEF"
53.79 + "SNOC_REVERSE_CONS" > "HOL4Base.rich_list.SNOC_REVERSE_CONS"
53.80 + "SNOC_INDUCT" > "HOL4Base.rich_list.SNOC_INDUCT"
53.81 + "SNOC_FOLDR" > "HOL4Base.rich_list.SNOC_FOLDR"
53.82 + "SNOC_EQ_LENGTH_EQ" > "HOL4Base.rich_list.SNOC_EQ_LENGTH_EQ"
53.83 + "SNOC_CASES" > "HOL4Base.rich_list.SNOC_CASES"
53.84 + "SNOC_Axiom" > "HOL4Base.rich_list.SNOC_Axiom"
53.85 + "SNOC_APPEND" > "HOL4Base.rich_list.SNOC_APPEND"
53.86 + "SNOC_11" > "HOL4Base.rich_list.SNOC_11"
53.87 + "SNOC" > "HOL4Base.rich_list.SNOC"
53.88 + "SEG_SUC_CONS" > "HOL4Base.rich_list.SEG_SUC_CONS"
53.89 + "SEG_SNOC" > "HOL4Base.rich_list.SEG_SNOC"
53.90 + "SEG_SEG" > "HOL4Base.rich_list.SEG_SEG"
53.91 + "SEG_REVERSE" > "HOL4Base.rich_list.SEG_REVERSE"
53.92 + "SEG_LENGTH_SNOC" > "HOL4Base.rich_list.SEG_LENGTH_SNOC"
53.93 + "SEG_LENGTH_ID" > "HOL4Base.rich_list.SEG_LENGTH_ID"
53.94 + "SEG_LASTN_BUTLASTN" > "HOL4Base.rich_list.SEG_LASTN_BUTLASTN"
53.95 + "SEG_FIRSTN_BUTFISTN" > "HOL4Base.rich_list.SEG_FIRSTN_BUTFISTN"
53.96 + "SEG_APPEND2" > "HOL4Base.rich_list.SEG_APPEND2"
53.97 + "SEG_APPEND1" > "HOL4Base.rich_list.SEG_APPEND1"
53.98 + "SEG_APPEND" > "HOL4Base.rich_list.SEG_APPEND"
53.99 + "SEG_0_SNOC" > "HOL4Base.rich_list.SEG_0_SNOC"
53.100 + "SEG" > "HOL4Base.rich_list.SEG"
53.101 + "SCANR" > "HOL4Base.rich_list.SCANR"
53.102 + "SCANL" > "HOL4Base.rich_list.SCANL"
53.103 + "REVERSE_SNOC" > "HOL4Base.rich_list.REVERSE_SNOC"
53.104 + "REVERSE_REVERSE" > "List.rev_rev_ident"
53.105 + "REVERSE_FOLDR" > "HOL4Base.rich_list.REVERSE_FOLDR"
53.106 + "REVERSE_FOLDL" > "HOL4Base.rich_list.REVERSE_FOLDL"
53.107 + "REVERSE_FLAT" > "HOL4Base.rich_list.REVERSE_FLAT"
53.108 + "REVERSE_EQ_NIL" > "List.rev_is_Nil_conv"
53.109 + "REVERSE_APPEND" > "List.rev_append"
53.110 + "REVERSE" > "HOL4Base.rich_list.REVERSE"
53.111 + "REPLICATE" > "HOL4Base.rich_list.REPLICATE"
53.112 + "PREFIX_def" > "HOL4Base.rich_list.PREFIX_def"
53.113 + "PREFIX_FOLDR" > "HOL4Base.rich_list.PREFIX_FOLDR"
53.114 + "PREFIX_DEF" > "HOL4Base.rich_list.PREFIX_DEF"
53.115 + "PREFIX" > "HOL4Base.rich_list.PREFIX"
53.116 + "OR_EL_def" > "HOL4Base.rich_list.OR_EL_def"
53.117 + "OR_EL_FOLDR" > "HOL4Base.rich_list.OR_EL_FOLDR"
53.118 + "OR_EL_FOLDL" > "HOL4Base.rich_list.OR_EL_FOLDL"
53.119 + "OR_EL_DEF" > "HOL4Base.rich_list.OR_EL_DEF"
53.120 + "NULL_FOLDR" > "HOL4Base.rich_list.NULL_FOLDR"
53.121 + "NULL_FOLDL" > "HOL4Base.rich_list.NULL_FOLDL"
53.122 + "NULL_EQ_NIL" > "HOL4Base.rich_list.NULL_EQ_NIL"
53.123 + "NULL_DEF" > "HOL4Compat.NULL_DEF"
53.124 + "NULL" > "HOL4Base.list.NULL"
53.125 + "NOT_SOME_EL_ALL_EL" > "HOL4Base.list.NOT_EXISTS"
53.126 + "NOT_SNOC_NIL" > "HOL4Base.rich_list.NOT_SNOC_NIL"
53.127 + "NOT_NIL_SNOC" > "HOL4Base.rich_list.NOT_NIL_SNOC"
53.128 + "NOT_NIL_CONS" > "List.list.simps_1"
53.129 + "NOT_EQ_LIST" > "HOL4Base.list.NOT_EQ_LIST"
53.130 + "NOT_CONS_NIL" > "List.list.simps_2"
53.131 + "NOT_ALL_EL_SOME_EL" > "HOL4Base.list.NOT_EVERY"
53.132 + "MONOID_APPEND_NIL" > "HOL4Base.rich_list.MONOID_APPEND_NIL"
53.133 + "MAP_o" > "HOL4Base.rich_list.MAP_o"
53.134 + "MAP_SNOC" > "HOL4Base.rich_list.MAP_SNOC"
53.135 + "MAP_REVERSE" > "List.rev_map"
53.136 + "MAP_MAP_o" > "List.map_compose"
53.137 + "MAP_FOLDR" > "HOL4Base.rich_list.MAP_FOLDR"
53.138 + "MAP_FOLDL" > "HOL4Base.rich_list.MAP_FOLDL"
53.139 + "MAP_FLAT" > "List.map_concat"
53.140 + "MAP_FILTER" > "HOL4Base.rich_list.MAP_FILTER"
53.141 + "MAP_APPEND" > "List.map_append"
53.142 + "MAP2_ZIP" > "HOL4Base.list.MAP2_ZIP"
53.143 + "MAP2" > "HOL4Compat.MAP2"
53.144 + "MAP" > "HOL4Compat.MAP"
53.145 + "LIST_NOT_EQ" > "HOL4Base.list.LIST_NOT_EQ"
53.146 + "LENGTH_ZIP" > "HOL4Base.list.LENGTH_ZIP"
53.147 + "LENGTH_UNZIP_SND" > "HOL4Base.rich_list.LENGTH_UNZIP_SND"
53.148 + "LENGTH_UNZIP_FST" > "HOL4Base.rich_list.LENGTH_UNZIP_FST"
53.149 + "LENGTH_SNOC" > "HOL4Base.rich_list.LENGTH_SNOC"
53.150 + "LENGTH_SEG" > "HOL4Base.rich_list.LENGTH_SEG"
53.151 + "LENGTH_SCANR" > "HOL4Base.rich_list.LENGTH_SCANR"
53.152 + "LENGTH_SCANL" > "HOL4Base.rich_list.LENGTH_SCANL"
53.153 + "LENGTH_REVERSE" > "List.length_rev"
53.154 + "LENGTH_REPLICATE" > "HOL4Base.rich_list.LENGTH_REPLICATE"
53.155 + "LENGTH_NOT_NULL" > "HOL4Base.rich_list.LENGTH_NOT_NULL"
53.156 + "LENGTH_NIL" > "List.length_0_conv"
53.157 + "LENGTH_MAP2" > "HOL4Base.rich_list.LENGTH_MAP2"
53.158 + "LENGTH_MAP" > "List.length_map"
53.159 + "LENGTH_LASTN" > "HOL4Base.rich_list.LENGTH_LASTN"
53.160 + "LENGTH_GENLIST" > "HOL4Base.rich_list.LENGTH_GENLIST"
53.161 + "LENGTH_FOLDR" > "HOL4Base.rich_list.LENGTH_FOLDR"
53.162 + "LENGTH_FOLDL" > "HOL4Base.rich_list.LENGTH_FOLDL"
53.163 + "LENGTH_FLAT" > "HOL4Base.rich_list.LENGTH_FLAT"
53.164 + "LENGTH_FIRSTN" > "HOL4Base.rich_list.LENGTH_FIRSTN"
53.165 + "LENGTH_EQ_NIL" > "HOL4Base.list.LENGTH_EQ_NIL"
53.166 + "LENGTH_EQ" > "HOL4Base.rich_list.LENGTH_EQ"
53.167 + "LENGTH_CONS" > "HOL4Base.list.LENGTH_CONS"
53.168 + "LENGTH_BUTLASTN" > "HOL4Base.rich_list.LENGTH_BUTLASTN"
53.169 + "LENGTH_BUTLAST" > "HOL4Base.rich_list.LENGTH_BUTLAST"
53.170 + "LENGTH_BUTFIRSTN" > "HOL4Base.rich_list.LENGTH_BUTFIRSTN"
53.171 + "LENGTH_APPEND" > "List.length_append"
53.172 + "LENGTH" > "HOL4Compat.LENGTH"
53.173 + "LAST_LASTN_LAST" > "HOL4Base.rich_list.LAST_LASTN_LAST"
53.174 + "LAST_CONS" > "HOL4Base.list.LAST_CONS"
53.175 + "LASTN_SEG" > "HOL4Base.rich_list.LASTN_SEG"
53.176 + "LASTN_REVERSE" > "HOL4Base.rich_list.LASTN_REVERSE"
53.177 + "LASTN_MAP" > "HOL4Base.rich_list.LASTN_MAP"
53.178 + "LASTN_LENGTH_ID" > "HOL4Base.rich_list.LASTN_LENGTH_ID"
53.179 + "LASTN_LENGTH_APPEND" > "HOL4Base.rich_list.LASTN_LENGTH_APPEND"
53.180 + "LASTN_LASTN" > "HOL4Base.rich_list.LASTN_LASTN"
53.181 + "LASTN_CONS" > "HOL4Base.rich_list.LASTN_CONS"
53.182 + "LASTN_BUTLASTN" > "HOL4Base.rich_list.LASTN_BUTLASTN"
53.183 + "LASTN_BUTFIRSTN" > "HOL4Base.rich_list.LASTN_BUTFIRSTN"
53.184 + "LASTN_APPEND2" > "HOL4Base.rich_list.LASTN_APPEND2"
53.185 + "LASTN_APPEND1" > "HOL4Base.rich_list.LASTN_APPEND1"
53.186 + "LASTN_1" > "HOL4Base.rich_list.LASTN_1"
53.187 + "LASTN" > "HOL4Base.rich_list.LASTN"
53.188 + "LAST" > "HOL4Base.rich_list.LAST"
53.189 + "IS_SUFFIX_REVERSE" > "HOL4Base.rich_list.IS_SUFFIX_REVERSE"
53.190 + "IS_SUFFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_SUFFIX_IS_SUBLIST"
53.191 + "IS_SUFFIX_APPEND" > "HOL4Base.rich_list.IS_SUFFIX_APPEND"
53.192 + "IS_SUFFIX" > "HOL4Base.rich_list.IS_SUFFIX"
53.193 + "IS_SUBLIST_REVERSE" > "HOL4Base.rich_list.IS_SUBLIST_REVERSE"
53.194 + "IS_SUBLIST_APPEND" > "HOL4Base.rich_list.IS_SUBLIST_APPEND"
53.195 + "IS_SUBLIST" > "HOL4Base.rich_list.IS_SUBLIST"
53.196 + "IS_PREFIX_REVERSE" > "HOL4Base.rich_list.IS_PREFIX_REVERSE"
53.197 + "IS_PREFIX_PREFIX" > "HOL4Base.rich_list.IS_PREFIX_PREFIX"
53.198 + "IS_PREFIX_IS_SUBLIST" > "HOL4Base.rich_list.IS_PREFIX_IS_SUBLIST"
53.199 + "IS_PREFIX_APPEND" > "HOL4Base.rich_list.IS_PREFIX_APPEND"
53.200 + "IS_PREFIX" > "HOL4Base.rich_list.IS_PREFIX"
53.201 + "IS_EL_SOME_EL" > "HOL4Base.rich_list.IS_EL_SOME_EL"
53.202 + "IS_EL_SNOC" > "HOL4Base.rich_list.IS_EL_SNOC"
53.203 + "IS_EL_SEG" > "HOL4Base.rich_list.IS_EL_SEG"
53.204 + "IS_EL_REVERSE" > "HOL4Base.rich_list.IS_EL_REVERSE"
53.205 + "IS_EL_REPLICATE" > "HOL4Base.rich_list.IS_EL_REPLICATE"
53.206 + "IS_EL_LASTN" > "HOL4Base.rich_list.IS_EL_LASTN"
53.207 + "IS_EL_FOLDR_MAP" > "HOL4Base.rich_list.IS_EL_FOLDR_MAP"
53.208 + "IS_EL_FOLDR" > "HOL4Base.rich_list.IS_EL_FOLDR"
53.209 + "IS_EL_FOLDL_MAP" > "HOL4Base.rich_list.IS_EL_FOLDL_MAP"
53.210 + "IS_EL_FOLDL" > "HOL4Base.rich_list.IS_EL_FOLDL"
53.211 + "IS_EL_FIRSTN" > "HOL4Base.rich_list.IS_EL_FIRSTN"
53.212 + "IS_EL_FILTER" > "HOL4Base.rich_list.IS_EL_FILTER"
53.213 + "IS_EL_DEF" > "HOL4Base.rich_list.IS_EL_DEF"
53.214 + "IS_EL_BUTLASTN" > "HOL4Base.rich_list.IS_EL_BUTLASTN"
53.215 + "IS_EL_BUTFIRSTN" > "HOL4Base.rich_list.IS_EL_BUTFIRSTN"
53.216 + "IS_EL_APPEND" > "HOL4Base.list.MEM_APPEND"
53.217 + "IS_EL" > "HOL4Compat.MEM"
53.218 + "HD" > "List.hd.simps"
53.219 + "GENLIST" > "HOL4Base.rich_list.GENLIST"
53.220 + "FOLDR_SNOC" > "HOL4Base.rich_list.FOLDR_SNOC"
53.221 + "FOLDR_SINGLE" > "HOL4Base.rich_list.FOLDR_SINGLE"
53.222 + "FOLDR_REVERSE" > "HOL4Base.rich_list.FOLDR_REVERSE"
53.223 + "FOLDR_MAP_REVERSE" > "HOL4Base.rich_list.FOLDR_MAP_REVERSE"
53.224 + "FOLDR_MAP" > "HOL4Base.rich_list.FOLDR_MAP"
53.225 + "FOLDR_FOLDL_REVERSE" > "List.foldr_foldl"
53.226 + "FOLDR_FOLDL" > "HOL4Base.rich_list.FOLDR_FOLDL"
53.227 + "FOLDR_FILTER_REVERSE" > "HOL4Base.rich_list.FOLDR_FILTER_REVERSE"
53.228 + "FOLDR_FILTER" > "HOL4Base.rich_list.FOLDR_FILTER"
53.229 + "FOLDR_CONS_NIL" > "HOL4Base.rich_list.FOLDR_CONS_NIL"
53.230 + "FOLDR_APPEND" > "List.foldr_append"
53.231 + "FOLDR" > "HOL4Compat.FOLDR"
53.232 + "FOLDL_SNOC_NIL" > "HOL4Base.rich_list.FOLDL_SNOC_NIL"
53.233 + "FOLDL_SNOC" > "HOL4Base.rich_list.FOLDL_SNOC"
53.234 + "FOLDL_SINGLE" > "HOL4Base.rich_list.FOLDL_SINGLE"
53.235 + "FOLDL_REVERSE" > "HOL4Base.rich_list.FOLDL_REVERSE"
53.236 + "FOLDL_MAP" > "HOL4Base.rich_list.FOLDL_MAP"
53.237 + "FOLDL_FOLDR_REVERSE" > "List.foldl_foldr"
53.238 + "FOLDL_FILTER" > "HOL4Base.rich_list.FOLDL_FILTER"
53.239 + "FOLDL_APPEND" > "List.foldl_append"
53.240 + "FOLDL" > "HOL4Compat.FOLDL"
53.241 + "FLAT_SNOC" > "HOL4Base.rich_list.FLAT_SNOC"
53.242 + "FLAT_REVERSE" > "HOL4Base.rich_list.FLAT_REVERSE"
53.243 + "FLAT_FOLDR" > "HOL4Base.rich_list.FLAT_FOLDR"
53.244 + "FLAT_FOLDL" > "HOL4Base.rich_list.FLAT_FOLDL"
53.245 + "FLAT_FLAT" > "HOL4Base.rich_list.FLAT_FLAT"
53.246 + "FLAT_APPEND" > "List.concat_append"
53.247 + "FLAT" > "HOL4Compat.FLAT"
53.248 + "FIRSTN_SNOC" > "HOL4Base.rich_list.FIRSTN_SNOC"
53.249 + "FIRSTN_SEG" > "HOL4Base.rich_list.FIRSTN_SEG"
53.250 + "FIRSTN_REVERSE" > "HOL4Base.rich_list.FIRSTN_REVERSE"
53.251 + "FIRSTN_LENGTH_ID" > "HOL4Base.rich_list.FIRSTN_LENGTH_ID"
53.252 + "FIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.FIRSTN_LENGTH_APPEND"
53.253 + "FIRSTN_FIRSTN" > "HOL4Base.rich_list.FIRSTN_FIRSTN"
53.254 + "FIRSTN_BUTLASTN" > "HOL4Base.rich_list.FIRSTN_BUTLASTN"
53.255 + "FIRSTN_APPEND2" > "HOL4Base.rich_list.FIRSTN_APPEND2"
53.256 + "FIRSTN_APPEND1" > "HOL4Base.rich_list.FIRSTN_APPEND1"
53.257 + "FIRSTN" > "HOL4Base.rich_list.FIRSTN"
53.258 + "FILTER_SNOC" > "HOL4Base.rich_list.FILTER_SNOC"
53.259 + "FILTER_REVERSE" > "HOL4Base.rich_list.FILTER_REVERSE"
53.260 + "FILTER_MAP" > "HOL4Base.rich_list.FILTER_MAP"
53.261 + "FILTER_IDEM" > "HOL4Base.rich_list.FILTER_IDEM"
53.262 + "FILTER_FOLDR" > "HOL4Base.rich_list.FILTER_FOLDR"
53.263 + "FILTER_FOLDL" > "HOL4Base.rich_list.FILTER_FOLDL"
53.264 + "FILTER_FLAT" > "List.filter_concat"
53.265 + "FILTER_FILTER" > "HOL4Base.rich_list.FILTER_FILTER"
53.266 + "FILTER_COMM" > "HOL4Base.rich_list.FILTER_COMM"
53.267 + "FILTER_APPEND" > "List.filter_append"
53.268 + "FILTER" > "HOL4Compat.FILTER"
53.269 + "FCOMM_FOLDR_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDR_FLAT"
53.270 + "FCOMM_FOLDR_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDR_APPEND"
53.271 + "FCOMM_FOLDL_FLAT" > "HOL4Base.rich_list.FCOMM_FOLDL_FLAT"
53.272 + "FCOMM_FOLDL_APPEND" > "HOL4Base.rich_list.FCOMM_FOLDL_APPEND"
53.273 + "EQ_LIST" > "HOL4Base.list.EQ_LIST"
53.274 + "EL_SNOC" > "HOL4Base.rich_list.EL_SNOC"
53.275 + "EL_SEG" > "HOL4Base.rich_list.EL_SEG"
53.276 + "EL_REVERSE_ELL" > "HOL4Base.rich_list.EL_REVERSE_ELL"
53.277 + "EL_REVERSE" > "HOL4Base.rich_list.EL_REVERSE"
53.278 + "EL_PRE_LENGTH" > "HOL4Base.rich_list.EL_PRE_LENGTH"
53.279 + "EL_MAP" > "HOL4Base.rich_list.EL_MAP"
53.280 + "EL_LENGTH_SNOC" > "HOL4Base.rich_list.EL_LENGTH_SNOC"
53.281 + "EL_LENGTH_APPEND" > "HOL4Base.rich_list.EL_LENGTH_APPEND"
53.282 + "EL_IS_EL" > "HOL4Base.rich_list.EL_IS_EL"
53.283 + "EL_ELL" > "HOL4Base.rich_list.EL_ELL"
53.284 + "EL_CONS" > "HOL4Base.rich_list.EL_CONS"
53.285 + "EL_APPEND2" > "HOL4Base.rich_list.EL_APPEND2"
53.286 + "EL_APPEND1" > "HOL4Base.rich_list.EL_APPEND1"
53.287 + "ELL_SUC_SNOC" > "HOL4Base.rich_list.ELL_SUC_SNOC"
53.288 + "ELL_SNOC" > "HOL4Base.rich_list.ELL_SNOC"
53.289 + "ELL_SEG" > "HOL4Base.rich_list.ELL_SEG"
53.290 + "ELL_REVERSE_EL" > "HOL4Base.rich_list.ELL_REVERSE_EL"
53.291 + "ELL_REVERSE" > "HOL4Base.rich_list.ELL_REVERSE"
53.292 + "ELL_PRE_LENGTH" > "HOL4Base.rich_list.ELL_PRE_LENGTH"
53.293 + "ELL_MAP" > "HOL4Base.rich_list.ELL_MAP"
53.294 + "ELL_LENGTH_SNOC" > "HOL4Base.rich_list.ELL_LENGTH_SNOC"
53.295 + "ELL_LENGTH_CONS" > "HOL4Base.rich_list.ELL_LENGTH_CONS"
53.296 + "ELL_LENGTH_APPEND" > "HOL4Base.rich_list.ELL_LENGTH_APPEND"
53.297 + "ELL_LAST" > "HOL4Base.rich_list.ELL_LAST"
53.298 + "ELL_IS_EL" > "HOL4Base.rich_list.ELL_IS_EL"
53.299 + "ELL_EL" > "HOL4Base.rich_list.ELL_EL"
53.300 + "ELL_CONS" > "HOL4Base.rich_list.ELL_CONS"
53.301 + "ELL_APPEND2" > "HOL4Base.rich_list.ELL_APPEND2"
53.302 + "ELL_APPEND1" > "HOL4Base.rich_list.ELL_APPEND1"
53.303 + "ELL_0_SNOC" > "HOL4Base.rich_list.ELL_0_SNOC"
53.304 + "ELL" > "HOL4Base.rich_list.ELL"
53.305 + "EL" > "HOL4Base.rich_list.EL"
53.306 + "CONS_APPEND" > "HOL4Base.rich_list.CONS_APPEND"
53.307 + "CONS_11" > "List.list.simps_3"
53.308 + "CONS" > "HOL4Base.list.CONS"
53.309 + "COMM_MONOID_FOLDR" > "HOL4Base.rich_list.COMM_MONOID_FOLDR"
53.310 + "COMM_MONOID_FOLDL" > "HOL4Base.rich_list.COMM_MONOID_FOLDL"
53.311 + "COMM_ASSOC_FOLDR_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDR_REVERSE"
53.312 + "COMM_ASSOC_FOLDL_REVERSE" > "HOL4Base.rich_list.COMM_ASSOC_FOLDL_REVERSE"
53.313 + "BUTLAST_CONS" > "HOL4Base.list.FRONT_CONS"
53.314 + "BUTLASTN_SUC_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_SUC_BUTLAST"
53.315 + "BUTLASTN_SEG" > "HOL4Base.rich_list.BUTLASTN_SEG"
53.316 + "BUTLASTN_REVERSE" > "HOL4Base.rich_list.BUTLASTN_REVERSE"
53.317 + "BUTLASTN_MAP" > "HOL4Base.rich_list.BUTLASTN_MAP"
53.318 + "BUTLASTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTLASTN_LENGTH_NIL"
53.319 + "BUTLASTN_LENGTH_CONS" > "HOL4Base.rich_list.BUTLASTN_LENGTH_CONS"
53.320 + "BUTLASTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTLASTN_LENGTH_APPEND"
53.321 + "BUTLASTN_LASTN_NIL" > "HOL4Base.rich_list.BUTLASTN_LASTN_NIL"
53.322 + "BUTLASTN_LASTN" > "HOL4Base.rich_list.BUTLASTN_LASTN"
53.323 + "BUTLASTN_FIRSTN" > "HOL4Base.rich_list.BUTLASTN_FIRSTN"
53.324 + "BUTLASTN_CONS" > "HOL4Base.rich_list.BUTLASTN_CONS"
53.325 + "BUTLASTN_BUTLASTN" > "HOL4Base.rich_list.BUTLASTN_BUTLASTN"
53.326 + "BUTLASTN_BUTLAST" > "HOL4Base.rich_list.BUTLASTN_BUTLAST"
53.327 + "BUTLASTN_APPEND2" > "HOL4Base.rich_list.BUTLASTN_APPEND2"
53.328 + "BUTLASTN_APPEND1" > "HOL4Base.rich_list.BUTLASTN_APPEND1"
53.329 + "BUTLASTN_1" > "HOL4Base.rich_list.BUTLASTN_1"
53.330 + "BUTLASTN" > "HOL4Base.rich_list.BUTLASTN"
53.331 + "BUTLAST" > "HOL4Base.rich_list.BUTLAST"
53.332 + "BUTFIRSTN_SNOC" > "HOL4Base.rich_list.BUTFIRSTN_SNOC"
53.333 + "BUTFIRSTN_SEG" > "HOL4Base.rich_list.BUTFIRSTN_SEG"
53.334 + "BUTFIRSTN_REVERSE" > "HOL4Base.rich_list.BUTFIRSTN_REVERSE"
53.335 + "BUTFIRSTN_LENGTH_NIL" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_NIL"
53.336 + "BUTFIRSTN_LENGTH_APPEND" > "HOL4Base.rich_list.BUTFIRSTN_LENGTH_APPEND"
53.337 + "BUTFIRSTN_LASTN" > "HOL4Base.rich_list.BUTFIRSTN_LASTN"
53.338 + "BUTFIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN_BUTFIRSTN"
53.339 + "BUTFIRSTN_APPEND2" > "HOL4Base.rich_list.BUTFIRSTN_APPEND2"
53.340 + "BUTFIRSTN_APPEND1" > "HOL4Base.rich_list.BUTFIRSTN_APPEND1"
53.341 + "BUTFIRSTN" > "HOL4Base.rich_list.BUTFIRSTN"
53.342 + "ASSOC_FOLDR_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDR_FLAT"
53.343 + "ASSOC_FOLDL_FLAT" > "HOL4Base.rich_list.ASSOC_FOLDL_FLAT"
53.344 + "ASSOC_APPEND" > "HOL4Base.rich_list.ASSOC_APPEND"
53.345 + "APPEND_SNOC" > "HOL4Base.rich_list.APPEND_SNOC"
53.346 + "APPEND_NIL" > "HOL4Base.rich_list.APPEND_NIL"
53.347 + "APPEND_LENGTH_EQ" > "HOL4Base.rich_list.APPEND_LENGTH_EQ"
53.348 + "APPEND_FOLDR" > "HOL4Base.rich_list.APPEND_FOLDR"
53.349 + "APPEND_FOLDL" > "HOL4Base.rich_list.APPEND_FOLDL"
53.350 + "APPEND_FIRSTN_LASTN" > "HOL4Base.rich_list.APPEND_FIRSTN_LASTN"
53.351 + "APPEND_FIRSTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_FIRSTN_BUTFIRSTN"
53.352 + "APPEND_BUTLAST_LAST" > "List.append_butlast_last_id"
53.353 + "APPEND_BUTLASTN_LASTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_LASTN"
53.354 + "APPEND_BUTLASTN_BUTFIRSTN" > "HOL4Base.rich_list.APPEND_BUTLASTN_BUTFIRSTN"
53.355 + "APPEND_ASSOC" > "List.append_assoc"
53.356 + "APPEND" > "HOL4Compat.APPEND"
53.357 + "AND_EL_def" > "HOL4Base.rich_list.AND_EL_def"
53.358 + "AND_EL_FOLDR" > "HOL4Base.rich_list.AND_EL_FOLDR"
53.359 + "AND_EL_FOLDL" > "HOL4Base.rich_list.AND_EL_FOLDL"
53.360 + "AND_EL_DEF" > "HOL4Base.rich_list.AND_EL_DEF"
53.361 + "ALL_EL_SNOC" > "HOL4Base.rich_list.ALL_EL_SNOC"
53.362 + "ALL_EL_SEG" > "HOL4Base.rich_list.ALL_EL_SEG"
53.363 + "ALL_EL_REVERSE" > "HOL4Base.rich_list.ALL_EL_REVERSE"
53.364 + "ALL_EL_REPLICATE" > "HOL4Base.rich_list.ALL_EL_REPLICATE"
53.365 + "ALL_EL_MAP" > "HOL4Base.rich_list.ALL_EL_MAP"
53.366 + "ALL_EL_LASTN" > "HOL4Base.rich_list.ALL_EL_LASTN"
53.367 + "ALL_EL_FOLDR_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDR_MAP"
53.368 + "ALL_EL_FOLDR" > "HOL4Base.rich_list.ALL_EL_FOLDR"
53.369 + "ALL_EL_FOLDL_MAP" > "HOL4Base.rich_list.ALL_EL_FOLDL_MAP"
53.370 + "ALL_EL_FOLDL" > "HOL4Base.rich_list.ALL_EL_FOLDL"
53.371 + "ALL_EL_FIRSTN" > "HOL4Base.rich_list.ALL_EL_FIRSTN"
53.372 + "ALL_EL_CONJ" > "HOL4Base.list.EVERY_CONJ"
53.373 + "ALL_EL_BUTLASTN" > "HOL4Base.rich_list.ALL_EL_BUTLASTN"
53.374 + "ALL_EL_BUTFIRSTN" > "HOL4Base.rich_list.ALL_EL_BUTFIRSTN"
53.375 + "ALL_EL_APPEND" > "List.list_all_append"
53.376 + "ALL_EL" > "HOL4Compat.EVERY_DEF"
53.377 +
53.378 +end
54.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
54.2 +++ b/src/HOL/Import/HOL/seq.imp Fri Apr 02 17:37:45 2004 +0200
54.3 @@ -0,0 +1,109 @@
54.4 +import
54.5 +
54.6 +import_segment "hol4"
54.7 +
54.8 +def_maps
54.9 + "sums" > "sums_def"
54.10 + "summable" > "summable_def"
54.11 + "suminf" > "suminf_def"
54.12 + "subseq" > "subseq_def"
54.13 + "mono" > "mono_def"
54.14 + "lim" > "lim_def"
54.15 + "convergent" > "convergent_def"
54.16 + "cauchy" > "cauchy_def"
54.17 + "-->" > "-->_def"
54.18 +
54.19 +const_maps
54.20 + "sums" > "HOL4Real.seq.sums"
54.21 + "summable" > "HOL4Real.seq.summable"
54.22 + "suminf" > "HOL4Real.seq.suminf"
54.23 + "subseq" > "HOL4Real.seq.subseq"
54.24 + "mono" > "HOL4Real.seq.mono"
54.25 + "lim" > "HOL4Real.seq.lim"
54.26 + "convergent" > "HOL4Real.seq.convergent"
54.27 + "cauchy" > "HOL4Real.seq.cauchy"
54.28 + "-->" > "HOL4Real.seq.-->"
54.29 +
54.30 +thm_maps
54.31 + "tends_num_real" > "HOL4Real.seq.tends_num_real"
54.32 + "sums_def" > "HOL4Real.seq.sums_def"
54.33 + "sums" > "HOL4Real.seq.sums"
54.34 + "summable_def" > "HOL4Real.seq.summable_def"
54.35 + "summable" > "HOL4Real.seq.summable"
54.36 + "suminf_def" > "HOL4Real.seq.suminf_def"
54.37 + "suminf" > "HOL4Real.seq.suminf"
54.38 + "subseq_def" > "HOL4Real.seq.subseq_def"
54.39 + "subseq" > "HOL4Real.seq.subseq"
54.40 + "mono_def" > "HOL4Real.seq.mono_def"
54.41 + "mono" > "HOL4Real.seq.mono"
54.42 + "lim_def" > "HOL4Real.seq.lim_def"
54.43 + "lim" > "HOL4Real.seq.lim"
54.44 + "convergent_def" > "HOL4Real.seq.convergent_def"
54.45 + "convergent" > "HOL4Real.seq.convergent"
54.46 + "cauchy_def" > "HOL4Real.seq.cauchy_def"
54.47 + "cauchy" > "HOL4Real.seq.cauchy"
54.48 + "SUM_UNIQ" > "HOL4Real.seq.SUM_UNIQ"
54.49 + "SUM_SUMMABLE" > "HOL4Real.seq.SUM_SUMMABLE"
54.50 + "SUMMABLE_SUM" > "HOL4Real.seq.SUMMABLE_SUM"
54.51 + "SUBSEQ_SUC" > "HOL4Real.seq.SUBSEQ_SUC"
54.52 + "SER_ZERO" > "HOL4Real.seq.SER_ZERO"
54.53 + "SER_SUB" > "HOL4Real.seq.SER_SUB"
54.54 + "SER_RATIO" > "HOL4Real.seq.SER_RATIO"
54.55 + "SER_POS_LT_PAIR" > "HOL4Real.seq.SER_POS_LT_PAIR"
54.56 + "SER_POS_LT" > "HOL4Real.seq.SER_POS_LT"
54.57 + "SER_POS_LE" > "HOL4Real.seq.SER_POS_LE"
54.58 + "SER_PAIR" > "HOL4Real.seq.SER_PAIR"
54.59 + "SER_OFFSET" > "HOL4Real.seq.SER_OFFSET"
54.60 + "SER_NEG" > "HOL4Real.seq.SER_NEG"
54.61 + "SER_LE2" > "HOL4Real.seq.SER_LE2"
54.62 + "SER_LE" > "HOL4Real.seq.SER_LE"
54.63 + "SER_GROUP" > "HOL4Real.seq.SER_GROUP"
54.64 + "SER_COMPARA" > "HOL4Real.seq.SER_COMPARA"
54.65 + "SER_COMPAR" > "HOL4Real.seq.SER_COMPAR"
54.66 + "SER_CMUL" > "HOL4Real.seq.SER_CMUL"
54.67 + "SER_CDIV" > "HOL4Real.seq.SER_CDIV"
54.68 + "SER_CAUCHY" > "HOL4Real.seq.SER_CAUCHY"
54.69 + "SER_ADD" > "HOL4Real.seq.SER_ADD"
54.70 + "SER_ACONV" > "HOL4Real.seq.SER_ACONV"
54.71 + "SER_ABS" > "HOL4Real.seq.SER_ABS"
54.72 + "SER_0" > "HOL4Real.seq.SER_0"
54.73 + "SEQ_UNIQ" > "HOL4Real.seq.SEQ_UNIQ"
54.74 + "SEQ_SUC" > "HOL4Real.seq.SEQ_SUC"
54.75 + "SEQ_SUBLE" > "HOL4Real.seq.SEQ_SUBLE"
54.76 + "SEQ_SUB" > "HOL4Real.seq.SEQ_SUB"
54.77 + "SEQ_SBOUNDED" > "HOL4Real.seq.SEQ_SBOUNDED"
54.78 + "SEQ_POWER_ABS" > "HOL4Real.seq.SEQ_POWER_ABS"
54.79 + "SEQ_POWER" > "HOL4Real.seq.SEQ_POWER"
54.80 + "SEQ_NEG_CONV" > "HOL4Real.seq.SEQ_NEG_CONV"
54.81 + "SEQ_NEG_BOUNDED" > "HOL4Real.seq.SEQ_NEG_BOUNDED"
54.82 + "SEQ_NEG" > "HOL4Real.seq.SEQ_NEG"
54.83 + "SEQ_MUL" > "HOL4Real.seq.SEQ_MUL"
54.84 + "SEQ_MONOSUB" > "HOL4Real.seq.SEQ_MONOSUB"
54.85 + "SEQ_LIM" > "HOL4Real.seq.SEQ_LIM"
54.86 + "SEQ_LE" > "HOL4Real.seq.SEQ_LE"
54.87 + "SEQ_INV0" > "HOL4Real.seq.SEQ_INV0"
54.88 + "SEQ_INV" > "HOL4Real.seq.SEQ_INV"
54.89 + "SEQ_ICONV" > "HOL4Real.seq.SEQ_ICONV"
54.90 + "SEQ_DIV" > "HOL4Real.seq.SEQ_DIV"
54.91 + "SEQ_DIRECT" > "HOL4Real.seq.SEQ_DIRECT"
54.92 + "SEQ_CONST" > "HOL4Real.seq.SEQ_CONST"
54.93 + "SEQ_CBOUNDED" > "HOL4Real.seq.SEQ_CBOUNDED"
54.94 + "SEQ_CAUCHY" > "HOL4Real.seq.SEQ_CAUCHY"
54.95 + "SEQ_BOUNDED_2" > "HOL4Real.seq.SEQ_BOUNDED_2"
54.96 + "SEQ_BOUNDED" > "HOL4Real.seq.SEQ_BOUNDED"
54.97 + "SEQ_BCONV" > "HOL4Real.seq.SEQ_BCONV"
54.98 + "SEQ_ADD" > "HOL4Real.seq.SEQ_ADD"
54.99 + "SEQ_ABS_IMP" > "HOL4Real.seq.SEQ_ABS_IMP"
54.100 + "SEQ_ABS" > "HOL4Real.seq.SEQ_ABS"
54.101 + "SEQ" > "HOL4Real.seq.SEQ"
54.102 + "NEST_LEMMA_UNIQ" > "HOL4Real.seq.NEST_LEMMA_UNIQ"
54.103 + "NEST_LEMMA" > "HOL4Real.seq.NEST_LEMMA"
54.104 + "MONO_SUC" > "HOL4Real.seq.MONO_SUC"
54.105 + "MAX_LEMMA" > "HOL4Real.seq.MAX_LEMMA"
54.106 + "GP_FINITE" > "HOL4Real.seq.GP_FINITE"
54.107 + "GP" > "HOL4Real.seq.GP"
54.108 + "BOLZANO_LEMMA" > "HOL4Real.seq.BOLZANO_LEMMA"
54.109 + "ABS_NEG_LEMMA" > "HOL4Real.seq.ABS_NEG_LEMMA"
54.110 + "-->_def" > "HOL4Real.seq.-->_def"
54.111 +
54.112 +end
55.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
55.2 +++ b/src/HOL/Import/HOL/state_transformer.imp Fri Apr 02 17:37:45 2004 +0200
55.3 @@ -0,0 +1,42 @@
55.4 +import
55.5 +
55.6 +import_segment "hol4"
55.7 +
55.8 +def_maps
55.9 + "UNIT" > "UNIT_def"
55.10 + "MMAP" > "MMAP_def"
55.11 + "JOIN" > "JOIN_def"
55.12 + "BIND" > "BIND_def"
55.13 +
55.14 +const_maps
55.15 + "UNIT" > "HOL4Base.state_transformer.UNIT"
55.16 + "MMAP" > "HOL4Base.state_transformer.MMAP"
55.17 + "JOIN" > "HOL4Base.state_transformer.JOIN"
55.18 + "BIND" > "HOL4Base.state_transformer.BIND"
55.19 +
55.20 +thm_maps
55.21 + "UNIT_def" > "HOL4Base.state_transformer.UNIT_def"
55.22 + "UNIT_UNCURRY" > "HOL4Base.state_transformer.UNIT_UNCURRY"
55.23 + "UNIT_DEF" > "HOL4Base.state_transformer.UNIT_DEF"
55.24 + "SND_o_UNIT" > "HOL4Base.state_transformer.SND_o_UNIT"
55.25 + "MMAP_def" > "HOL4Base.state_transformer.MMAP_def"
55.26 + "MMAP_UNIT" > "HOL4Base.state_transformer.MMAP_UNIT"
55.27 + "MMAP_JOIN" > "HOL4Base.state_transformer.MMAP_JOIN"
55.28 + "MMAP_ID" > "HOL4Base.state_transformer.MMAP_ID"
55.29 + "MMAP_DEF" > "HOL4Base.state_transformer.MMAP_DEF"
55.30 + "MMAP_COMP" > "HOL4Base.state_transformer.MMAP_COMP"
55.31 + "JOIN_def" > "HOL4Base.state_transformer.JOIN_def"
55.32 + "JOIN_UNIT" > "HOL4Base.state_transformer.JOIN_UNIT"
55.33 + "JOIN_MMAP_UNIT" > "HOL4Base.state_transformer.JOIN_MMAP_UNIT"
55.34 + "JOIN_MAP_JOIN" > "HOL4Base.state_transformer.JOIN_MAP_JOIN"
55.35 + "JOIN_MAP" > "HOL4Base.state_transformer.JOIN_MAP"
55.36 + "JOIN_DEF" > "HOL4Base.state_transformer.JOIN_DEF"
55.37 + "FST_o_UNIT" > "HOL4Base.state_transformer.FST_o_UNIT"
55.38 + "FST_o_MMAP" > "HOL4Base.state_transformer.FST_o_MMAP"
55.39 + "BIND_def" > "HOL4Base.state_transformer.BIND_def"
55.40 + "BIND_RIGHT_UNIT" > "HOL4Base.state_transformer.BIND_RIGHT_UNIT"
55.41 + "BIND_LEFT_UNIT" > "HOL4Base.state_transformer.BIND_LEFT_UNIT"
55.42 + "BIND_DEF" > "HOL4Base.state_transformer.BIND_DEF"
55.43 + "BIND_ASSOC" > "HOL4Base.state_transformer.BIND_ASSOC"
55.44 +
55.45 +end
56.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
56.2 +++ b/src/HOL/Import/HOL/sum.imp Fri Apr 02 17:37:45 2004 +0200
56.3 @@ -0,0 +1,43 @@
56.4 +import
56.5 +
56.6 +import_segment "hol4"
56.7 +
56.8 +type_maps
56.9 + "sum" > "+"
56.10 +
56.11 +const_maps
56.12 + "sum_case" > "Datatype.sum.sum_case"
56.13 + "OUTR" > "HOL4Compat.OUTR"
56.14 + "OUTL" > "HOL4Compat.OUTL"
56.15 + "ISR" > "HOL4Compat.ISR"
56.16 + "ISL" > "HOL4Compat.ISL"
56.17 + "INR" > "Inr"
56.18 + "INL" > "Inl"
56.19 +
56.20 +thm_maps
56.21 + "sum_distinct1" > "Sum_Type.Inr_not_Inl"
56.22 + "sum_distinct" > "Sum_Type.Inl_not_Inr"
56.23 + "sum_case_def" > "HOL4Compat.sum_case_def"
56.24 + "sum_case_cong" > "HOL4Base.sum.sum_case_cong"
56.25 + "sum_INDUCT" > "HOL4Compat.OUTR.induct"
56.26 + "sum_CASES" > "Datatype.sum.nchotomy"
56.27 + "OUTR" > "HOL4Compat.OUTR"
56.28 + "OUTL" > "HOL4Compat.OUTL"
56.29 + "ISR" > "HOL4Compat.ISR"
56.30 + "ISL_OR_ISR" > "HOL4Base.sum.ISL_OR_ISR"
56.31 + "ISL" > "HOL4Compat.ISL"
56.32 + "INR_neq_INL" > "Sum_Type.Inr_not_Inl"
56.33 + "INR_INL_11" > "HOL4Compat.INR_INL_11"
56.34 + "INR" > "HOL4Base.sum.INR"
56.35 + "INL" > "HOL4Base.sum.INL"
56.36 +
56.37 +ignore_thms
56.38 + "sum_axiom"
56.39 + "sum_TY_DEF"
56.40 + "sum_ISO_DEF"
56.41 + "sum_Axiom"
56.42 + "IS_SUM_REP"
56.43 + "INR_DEF"
56.44 + "INL_DEF"
56.45 +
56.46 +end
57.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
57.2 +++ b/src/HOL/Import/HOL/topology.imp Fri Apr 02 17:37:45 2004 +0200
57.3 @@ -0,0 +1,116 @@
57.4 +import
57.5 +
57.6 +import_segment "hol4"
57.7 +
57.8 +def_maps
57.9 + "topology" > "topology_def"
57.10 + "re_universe" > "re_universe_def"
57.11 + "re_union" > "re_union_def"
57.12 + "re_subset" > "re_subset_def"
57.13 + "re_null" > "re_null_def"
57.14 + "re_intersect" > "re_intersect_def"
57.15 + "re_compl" > "re_compl_def"
57.16 + "re_Union" > "re_Union_def"
57.17 + "open" > "open_def"
57.18 + "neigh" > "neigh_def"
57.19 + "mtop" > "mtop_def"
57.20 + "mr1" > "mr1_def"
57.21 + "metric" > "metric_def"
57.22 + "limpt" > "limpt_def"
57.23 + "istopology" > "istopology_def"
57.24 + "ismet" > "ismet_def"
57.25 + "dist" > "dist_def"
57.26 + "closed" > "closed_def"
57.27 + "B" > "B_def"
57.28 +
57.29 +type_maps
57.30 + "topology" > "HOL4Real.topology.topology"
57.31 + "metric" > "HOL4Real.topology.metric"
57.32 +
57.33 +const_maps
57.34 + "re_universe" > "HOL4Real.topology.re_universe"
57.35 + "re_union" > "HOL4Real.topology.re_union"
57.36 + "re_subset" > "HOL4Real.topology.re_subset"
57.37 + "re_null" > "HOL4Real.topology.re_null"
57.38 + "re_intersect" > "HOL4Real.topology.re_intersect"
57.39 + "re_compl" > "HOL4Real.topology.re_compl"
57.40 + "re_Union" > "HOL4Real.topology.re_Union"
57.41 + "neigh" > "HOL4Real.topology.neigh"
57.42 + "mtop" > "HOL4Real.topology.mtop"
57.43 + "mr1" > "HOL4Real.topology.mr1"
57.44 + "limpt" > "HOL4Real.topology.limpt"
57.45 + "istopology" > "HOL4Real.topology.istopology"
57.46 + "ismet" > "HOL4Real.topology.ismet"
57.47 + "closed" > "HOL4Real.topology.closed"
57.48 + "B" > "HOL4Real.topology.B"
57.49 +
57.50 +thm_maps
57.51 + "topology_tybij" > "HOL4Real.topology.topology_tybij"
57.52 + "topology_TY_DEF" > "HOL4Real.topology.topology_TY_DEF"
57.53 + "re_universe_def" > "HOL4Real.topology.re_universe_def"
57.54 + "re_universe" > "HOL4Real.topology.re_universe"
57.55 + "re_union_def" > "HOL4Real.topology.re_union_def"
57.56 + "re_union" > "HOL4Real.topology.re_union"
57.57 + "re_subset_def" > "HOL4Real.topology.re_subset_def"
57.58 + "re_subset" > "HOL4Real.topology.re_subset"
57.59 + "re_null_def" > "HOL4Real.topology.re_null_def"
57.60 + "re_null" > "HOL4Real.topology.re_null"
57.61 + "re_intersect_def" > "HOL4Real.topology.re_intersect_def"
57.62 + "re_intersect" > "HOL4Real.topology.re_intersect"
57.63 + "re_compl_def" > "HOL4Real.topology.re_compl_def"
57.64 + "re_compl" > "HOL4Real.topology.re_compl"
57.65 + "re_Union_def" > "HOL4Real.topology.re_Union_def"
57.66 + "re_Union" > "HOL4Real.topology.re_Union"
57.67 + "neigh_def" > "HOL4Real.topology.neigh_def"
57.68 + "neigh" > "HOL4Real.topology.neigh"
57.69 + "mtop_istopology" > "HOL4Real.topology.mtop_istopology"
57.70 + "mtop_def" > "HOL4Real.topology.mtop_def"
57.71 + "mtop" > "HOL4Real.topology.mtop"
57.72 + "mr1_def" > "HOL4Real.topology.mr1_def"
57.73 + "mr1" > "HOL4Real.topology.mr1"
57.74 + "metric_tybij" > "HOL4Real.topology.metric_tybij"
57.75 + "metric_TY_DEF" > "HOL4Real.topology.metric_TY_DEF"
57.76 + "limpt_def" > "HOL4Real.topology.limpt_def"
57.77 + "limpt" > "HOL4Real.topology.limpt"
57.78 + "istopology_def" > "HOL4Real.topology.istopology_def"
57.79 + "istopology" > "HOL4Real.topology.istopology"
57.80 + "ismet_def" > "HOL4Real.topology.ismet_def"
57.81 + "ismet" > "HOL4Real.topology.ismet"
57.82 + "closed_def" > "HOL4Real.topology.closed_def"
57.83 + "closed" > "HOL4Real.topology.closed"
57.84 + "ball" > "HOL4Real.topology.ball"
57.85 + "TOPOLOGY_UNION" > "HOL4Real.topology.TOPOLOGY_UNION"
57.86 + "TOPOLOGY" > "HOL4Real.topology.TOPOLOGY"
57.87 + "SUBSET_TRANS" > "HOL4Real.topology.SUBSET_TRANS"
57.88 + "SUBSET_REFL" > "HOL4Real.topology.SUBSET_REFL"
57.89 + "SUBSET_ANTISYM" > "HOL4Real.topology.SUBSET_ANTISYM"
57.90 + "OPEN_UNOPEN" > "HOL4Real.topology.OPEN_UNOPEN"
57.91 + "OPEN_SUBOPEN" > "HOL4Real.topology.OPEN_SUBOPEN"
57.92 + "OPEN_OWN_NEIGH" > "HOL4Real.topology.OPEN_OWN_NEIGH"
57.93 + "OPEN_NEIGH" > "HOL4Real.topology.OPEN_NEIGH"
57.94 + "MTOP_OPEN" > "HOL4Real.topology.MTOP_OPEN"
57.95 + "MTOP_LIMPT" > "HOL4Real.topology.MTOP_LIMPT"
57.96 + "MR1_SUB_LT" > "HOL4Real.topology.MR1_SUB_LT"
57.97 + "MR1_SUB_LE" > "HOL4Real.topology.MR1_SUB_LE"
57.98 + "MR1_SUB" > "HOL4Real.topology.MR1_SUB"
57.99 + "MR1_LIMPT" > "HOL4Real.topology.MR1_LIMPT"
57.100 + "MR1_DEF" > "HOL4Real.topology.MR1_DEF"
57.101 + "MR1_BETWEEN1" > "HOL4Real.topology.MR1_BETWEEN1"
57.102 + "MR1_ADD_POS" > "HOL4Real.topology.MR1_ADD_POS"
57.103 + "MR1_ADD_LT" > "HOL4Real.topology.MR1_ADD_LT"
57.104 + "MR1_ADD" > "HOL4Real.topology.MR1_ADD"
57.105 + "METRIC_ZERO" > "HOL4Real.topology.METRIC_ZERO"
57.106 + "METRIC_TRIANGLE" > "HOL4Real.topology.METRIC_TRIANGLE"
57.107 + "METRIC_SYM" > "HOL4Real.topology.METRIC_SYM"
57.108 + "METRIC_SAME" > "HOL4Real.topology.METRIC_SAME"
57.109 + "METRIC_POS" > "HOL4Real.topology.METRIC_POS"
57.110 + "METRIC_NZ" > "HOL4Real.topology.METRIC_NZ"
57.111 + "METRIC_ISMET" > "HOL4Real.topology.METRIC_ISMET"
57.112 + "ISMET_R1" > "HOL4Real.topology.ISMET_R1"
57.113 + "COMPL_MEM" > "HOL4Real.topology.COMPL_MEM"
57.114 + "CLOSED_LIMPT" > "HOL4Real.topology.CLOSED_LIMPT"
57.115 + "B_def" > "HOL4Real.topology.B_def"
57.116 + "BALL_OPEN" > "HOL4Real.topology.BALL_OPEN"
57.117 + "BALL_NEIGH" > "HOL4Real.topology.BALL_NEIGH"
57.118 +
57.119 +end
58.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
58.2 +++ b/src/HOL/Import/HOL/transc.imp Fri Apr 02 17:37:45 2004 +0200
58.3 @@ -0,0 +1,273 @@
58.4 +import
58.5 +
58.6 +import_segment "hol4"
58.7 +
58.8 +def_maps
58.9 + "tdiv" > "tdiv_def"
58.10 + "tan" > "tan_def"
58.11 + "sqrt" > "sqrt_def"
58.12 + "sin" > "sin_def"
58.13 + "rsum" > "rsum_def"
58.14 + "root" > "root_def"
58.15 + "pi" > "pi_def"
58.16 + "ln" > "ln_def"
58.17 + "gauge" > "gauge_def"
58.18 + "fine" > "fine_def"
58.19 + "exp" > "exp_def"
58.20 + "dsize" > "dsize_def"
58.21 + "division" > "division_def"
58.22 + "cos" > "cos_def"
58.23 + "atn" > "atn_def"
58.24 + "asn" > "asn_def"
58.25 + "acs" > "acs_def"
58.26 + "Dint" > "Dint_def"
58.27 +
58.28 +const_maps
58.29 + "tdiv" > "HOL4Real.transc.tdiv"
58.30 + "tan" > "HOL4Real.transc.tan"
58.31 + "sqrt" > "HOL4Real.transc.sqrt"
58.32 + "sin" > "HOL4Real.transc.sin"
58.33 + "rsum" > "HOL4Real.transc.rsum"
58.34 + "root" > "HOL4Real.transc.root"
58.35 + "pi" > "HOL4Real.transc.pi"
58.36 + "ln" > "HOL4Real.transc.ln"
58.37 + "gauge" > "HOL4Real.transc.gauge"
58.38 + "fine" > "HOL4Real.transc.fine"
58.39 + "exp" > "HOL4Real.transc.exp"
58.40 + "dsize" > "HOL4Real.transc.dsize"
58.41 + "division" > "HOL4Real.transc.division"
58.42 + "cos" > "HOL4Real.transc.cos"
58.43 + "atn" > "HOL4Real.transc.atn"
58.44 + "asn" > "HOL4Real.transc.asn"
58.45 + "acs" > "HOL4Real.transc.acs"
58.46 + "Dint" > "HOL4Real.transc.Dint"
58.47 +
58.48 +thm_maps
58.49 + "tdiv_def" > "HOL4Real.transc.tdiv_def"
58.50 + "tdiv" > "HOL4Real.transc.tdiv"
58.51 + "tan_def" > "HOL4Real.transc.tan_def"
58.52 + "tan" > "HOL4Real.transc.tan"
58.53 + "sqrt_def" > "HOL4Real.transc.sqrt_def"
58.54 + "sqrt" > "HOL4Real.transc.sqrt"
58.55 + "sin_def" > "HOL4Real.transc.sin_def"
58.56 + "sin" > "HOL4Real.transc.sin"
58.57 + "rsum_def" > "HOL4Real.transc.rsum_def"
58.58 + "rsum" > "HOL4Real.transc.rsum"
58.59 + "root_def" > "HOL4Real.transc.root_def"
58.60 + "root" > "HOL4Real.transc.root"
58.61 + "pi_def" > "HOL4Real.transc.pi_def"
58.62 + "pi" > "HOL4Real.transc.pi"
58.63 + "ln_def" > "HOL4Real.transc.ln_def"
58.64 + "ln" > "HOL4Real.transc.ln"
58.65 + "gauge_def" > "HOL4Real.transc.gauge_def"
58.66 + "gauge" > "HOL4Real.transc.gauge"
58.67 + "fine_def" > "HOL4Real.transc.fine_def"
58.68 + "fine" > "HOL4Real.transc.fine"
58.69 + "exp_def" > "HOL4Real.transc.exp_def"
58.70 + "exp" > "HOL4Real.transc.exp"
58.71 + "dsize_def" > "HOL4Real.transc.dsize_def"
58.72 + "dsize" > "HOL4Real.transc.dsize"
58.73 + "division_def" > "HOL4Real.transc.division_def"
58.74 + "division" > "HOL4Real.transc.division"
58.75 + "cos_def" > "HOL4Real.transc.cos_def"
58.76 + "cos" > "HOL4Real.transc.cos"
58.77 + "atn_def" > "HOL4Real.transc.atn_def"
58.78 + "atn" > "HOL4Real.transc.atn"
58.79 + "asn_def" > "HOL4Real.transc.asn_def"
58.80 + "asn" > "HOL4Real.transc.asn"
58.81 + "acs_def" > "HOL4Real.transc.acs_def"
58.82 + "acs" > "HOL4Real.transc.acs"
58.83 + "TAN_TOTAL_POS" > "HOL4Real.transc.TAN_TOTAL_POS"
58.84 + "TAN_TOTAL_LEMMA" > "HOL4Real.transc.TAN_TOTAL_LEMMA"
58.85 + "TAN_TOTAL" > "HOL4Real.transc.TAN_TOTAL"
58.86 + "TAN_SEC" > "HOL4Real.transc.TAN_SEC"
58.87 + "TAN_POS_PI2" > "HOL4Real.transc.TAN_POS_PI2"
58.88 + "TAN_PI" > "HOL4Real.transc.TAN_PI"
58.89 + "TAN_PERIODIC" > "HOL4Real.transc.TAN_PERIODIC"
58.90 + "TAN_NPI" > "HOL4Real.transc.TAN_NPI"
58.91 + "TAN_NEG" > "HOL4Real.transc.TAN_NEG"
58.92 + "TAN_DOUBLE" > "HOL4Real.transc.TAN_DOUBLE"
58.93 + "TAN_ATN" > "HOL4Real.transc.TAN_ATN"
58.94 + "TAN_ADD" > "HOL4Real.transc.TAN_ADD"
58.95 + "TAN_0" > "HOL4Real.transc.TAN_0"
58.96 + "SQRT_POW_2" > "HOL4Real.transc.SQRT_POW_2"
58.97 + "SQRT_POW2" > "HOL4Real.transc.SQRT_POW2"
58.98 + "SQRT_POS_UNIQ" > "HOL4Real.transc.SQRT_POS_UNIQ"
58.99 + "SQRT_POS_LT" > "HOL4Real.transc.SQRT_POS_LT"
58.100 + "SQRT_POS_LE" > "HOL4Real.transc.SQRT_POS_LE"
58.101 + "SQRT_MUL" > "HOL4Real.transc.SQRT_MUL"
58.102 + "SQRT_MONO_LE" > "HOL4Real.transc.SQRT_MONO_LE"
58.103 + "SQRT_INV" > "HOL4Real.transc.SQRT_INV"
58.104 + "SQRT_EVEN_POW2" > "HOL4Real.transc.SQRT_EVEN_POW2"
58.105 + "SQRT_EQ" > "HOL4Real.transc.SQRT_EQ"
58.106 + "SQRT_DIV" > "HOL4Real.transc.SQRT_DIV"
58.107 + "SQRT_1" > "HOL4Real.transc.SQRT_1"
58.108 + "SQRT_0" > "HOL4Real.transc.SQRT_0"
58.109 + "SIN_ZERO_LEMMA" > "HOL4Real.transc.SIN_ZERO_LEMMA"
58.110 + "SIN_ZERO" > "HOL4Real.transc.SIN_ZERO"
58.111 + "SIN_TOTAL" > "HOL4Real.transc.SIN_TOTAL"
58.112 + "SIN_POS_PI_LE" > "HOL4Real.transc.SIN_POS_PI_LE"
58.113 + "SIN_POS_PI2_LE" > "HOL4Real.transc.SIN_POS_PI2_LE"
58.114 + "SIN_POS_PI2" > "HOL4Real.transc.SIN_POS_PI2"
58.115 + "SIN_POS_PI" > "HOL4Real.transc.SIN_POS_PI"
58.116 + "SIN_POS" > "HOL4Real.transc.SIN_POS"
58.117 + "SIN_PI2" > "HOL4Real.transc.SIN_PI2"
58.118 + "SIN_PI" > "HOL4Real.transc.SIN_PI"
58.119 + "SIN_PERIODIC_PI" > "HOL4Real.transc.SIN_PERIODIC_PI"
58.120 + "SIN_PERIODIC" > "HOL4Real.transc.SIN_PERIODIC"
58.121 + "SIN_PAIRED" > "HOL4Real.transc.SIN_PAIRED"
58.122 + "SIN_NPI" > "HOL4Real.transc.SIN_NPI"
58.123 + "SIN_NEGLEMMA" > "HOL4Real.transc.SIN_NEGLEMMA"
58.124 + "SIN_NEG" > "HOL4Real.transc.SIN_NEG"
58.125 + "SIN_FDIFF" > "HOL4Real.transc.SIN_FDIFF"
58.126 + "SIN_DOUBLE" > "HOL4Real.transc.SIN_DOUBLE"
58.127 + "SIN_COS_SQRT" > "HOL4Real.transc.SIN_COS_SQRT"
58.128 + "SIN_COS_SQ" > "HOL4Real.transc.SIN_COS_SQ"
58.129 + "SIN_COS_NEG" > "HOL4Real.transc.SIN_COS_NEG"
58.130 + "SIN_COS_ADD" > "HOL4Real.transc.SIN_COS_ADD"
58.131 + "SIN_COS" > "HOL4Real.transc.SIN_COS"
58.132 + "SIN_CONVERGES" > "HOL4Real.transc.SIN_CONVERGES"
58.133 + "SIN_CIRCLE" > "HOL4Real.transc.SIN_CIRCLE"
58.134 + "SIN_BOUNDS" > "HOL4Real.transc.SIN_BOUNDS"
58.135 + "SIN_BOUND" > "HOL4Real.transc.SIN_BOUND"
58.136 + "SIN_ASN" > "HOL4Real.transc.SIN_ASN"
58.137 + "SIN_ADD" > "HOL4Real.transc.SIN_ADD"
58.138 + "SIN_ACS_NZ" > "HOL4Real.transc.SIN_ACS_NZ"
58.139 + "SIN_0" > "HOL4Real.transc.SIN_0"
58.140 + "ROOT_POW_POS" > "HOL4Real.transc.ROOT_POW_POS"
58.141 + "ROOT_POS_UNIQ" > "HOL4Real.transc.ROOT_POS_UNIQ"
58.142 + "ROOT_POS_LT" > "HOL4Real.transc.ROOT_POS_LT"
58.143 + "ROOT_POS" > "HOL4Real.transc.ROOT_POS"
58.144 + "ROOT_MUL" > "HOL4Real.transc.ROOT_MUL"
58.145 + "ROOT_MONO_LE" > "HOL4Real.transc.ROOT_MONO_LE"
58.146 + "ROOT_LT_LEMMA" > "HOL4Real.transc.ROOT_LT_LEMMA"
58.147 + "ROOT_LN" > "HOL4Real.transc.ROOT_LN"
58.148 + "ROOT_INV" > "HOL4Real.transc.ROOT_INV"
58.149 + "ROOT_DIV" > "HOL4Real.transc.ROOT_DIV"
58.150 + "ROOT_1" > "HOL4Real.transc.ROOT_1"
58.151 + "ROOT_0" > "HOL4Real.transc.ROOT_0"
58.152 + "REAL_DIV_SQRT" > "HOL4Real.transc.REAL_DIV_SQRT"
58.153 + "POW_ROOT_POS" > "HOL4Real.transc.POW_ROOT_POS"
58.154 + "POW_2_SQRT" > "HOL4Real.transc.POW_2_SQRT"
58.155 + "PI_POS" > "HOL4Real.transc.PI_POS"
58.156 + "PI2_BOUNDS" > "HOL4Real.transc.PI2_BOUNDS"
58.157 + "PI2" > "HOL4Real.transc.PI2"
58.158 + "MCLAURIN_ZERO" > "HOL4Real.transc.MCLAURIN_ZERO"
58.159 + "MCLAURIN_NEG" > "HOL4Real.transc.MCLAURIN_NEG"
58.160 + "MCLAURIN_EXP_LT" > "HOL4Real.transc.MCLAURIN_EXP_LT"
58.161 + "MCLAURIN_EXP_LE" > "HOL4Real.transc.MCLAURIN_EXP_LE"
58.162 + "MCLAURIN_ALL_LT" > "HOL4Real.transc.MCLAURIN_ALL_LT"
58.163 + "MCLAURIN_ALL_LE" > "HOL4Real.transc.MCLAURIN_ALL_LE"
58.164 + "MCLAURIN" > "HOL4Real.transc.MCLAURIN"
58.165 + "LN_POW" > "HOL4Real.transc.LN_POW"
58.166 + "LN_POS" > "HOL4Real.transc.LN_POS"
58.167 + "LN_MUL" > "HOL4Real.transc.LN_MUL"
58.168 + "LN_MONO_LT" > "HOL4Real.transc.LN_MONO_LT"
58.169 + "LN_MONO_LE" > "HOL4Real.transc.LN_MONO_LE"
58.170 + "LN_LT_X" > "HOL4Real.transc.LN_LT_X"
58.171 + "LN_LE" > "HOL4Real.transc.LN_LE"
58.172 + "LN_INV" > "HOL4Real.transc.LN_INV"
58.173 + "LN_INJ" > "HOL4Real.transc.LN_INJ"
58.174 + "LN_EXP" > "HOL4Real.transc.LN_EXP"
58.175 + "LN_DIV" > "HOL4Real.transc.LN_DIV"
58.176 + "LN_1" > "HOL4Real.transc.LN_1"
58.177 + "INTEGRAL_NULL" > "HOL4Real.transc.INTEGRAL_NULL"
58.178 + "GAUGE_MIN" > "HOL4Real.transc.GAUGE_MIN"
58.179 + "FTC1" > "HOL4Real.transc.FTC1"
58.180 + "FINE_MIN" > "HOL4Real.transc.FINE_MIN"
58.181 + "EXP_TOTAL_LEMMA" > "HOL4Real.transc.EXP_TOTAL_LEMMA"
58.182 + "EXP_TOTAL" > "HOL4Real.transc.EXP_TOTAL"
58.183 + "EXP_SUB" > "HOL4Real.transc.EXP_SUB"
58.184 + "EXP_POS_LT" > "HOL4Real.transc.EXP_POS_LT"
58.185 + "EXP_POS_LE" > "HOL4Real.transc.EXP_POS_LE"
58.186 + "EXP_NZ" > "HOL4Real.transc.EXP_NZ"
58.187 + "EXP_NEG_MUL2" > "HOL4Real.transc.EXP_NEG_MUL2"
58.188 + "EXP_NEG_MUL" > "HOL4Real.transc.EXP_NEG_MUL"
58.189 + "EXP_NEG" > "HOL4Real.transc.EXP_NEG"
58.190 + "EXP_N" > "HOL4Real.transc.EXP_N"
58.191 + "EXP_MONO_LT" > "HOL4Real.transc.EXP_MONO_LT"
58.192 + "EXP_MONO_LE" > "HOL4Real.transc.EXP_MONO_LE"
58.193 + "EXP_MONO_IMP" > "HOL4Real.transc.EXP_MONO_IMP"
58.194 + "EXP_LT_1" > "HOL4Real.transc.EXP_LT_1"
58.195 + "EXP_LN" > "HOL4Real.transc.EXP_LN"
58.196 + "EXP_LE_X" > "HOL4Real.transc.EXP_LE_X"
58.197 + "EXP_INJ" > "HOL4Real.transc.EXP_INJ"
58.198 + "EXP_FDIFF" > "HOL4Real.transc.EXP_FDIFF"
58.199 + "EXP_CONVERGES" > "HOL4Real.transc.EXP_CONVERGES"
58.200 + "EXP_ADD_MUL" > "HOL4Real.transc.EXP_ADD_MUL"
58.201 + "EXP_ADD" > "HOL4Real.transc.EXP_ADD"
58.202 + "EXP_0" > "HOL4Real.transc.EXP_0"
58.203 + "Dint_def" > "HOL4Real.transc.Dint_def"
58.204 + "Dint" > "HOL4Real.transc.Dint"
58.205 + "DIVISION_UBOUND_LT" > "HOL4Real.transc.DIVISION_UBOUND_LT"
58.206 + "DIVISION_UBOUND" > "HOL4Real.transc.DIVISION_UBOUND"
58.207 + "DIVISION_THM" > "HOL4Real.transc.DIVISION_THM"
58.208 + "DIVISION_SINGLE" > "HOL4Real.transc.DIVISION_SINGLE"
58.209 + "DIVISION_RHS" > "HOL4Real.transc.DIVISION_RHS"
58.210 + "DIVISION_LT_GEN" > "HOL4Real.transc.DIVISION_LT_GEN"
58.211 + "DIVISION_LT" > "HOL4Real.transc.DIVISION_LT"
58.212 + "DIVISION_LHS" > "HOL4Real.transc.DIVISION_LHS"
58.213 + "DIVISION_LE" > "HOL4Real.transc.DIVISION_LE"
58.214 + "DIVISION_LBOUND_LT" > "HOL4Real.transc.DIVISION_LBOUND_LT"
58.215 + "DIVISION_LBOUND" > "HOL4Real.transc.DIVISION_LBOUND"
58.216 + "DIVISION_GT" > "HOL4Real.transc.DIVISION_GT"
58.217 + "DIVISION_EXISTS" > "HOL4Real.transc.DIVISION_EXISTS"
58.218 + "DIVISION_EQ" > "HOL4Real.transc.DIVISION_EQ"
58.219 + "DIVISION_APPEND" > "HOL4Real.transc.DIVISION_APPEND"
58.220 + "DIVISION_1" > "HOL4Real.transc.DIVISION_1"
58.221 + "DIVISION_0" > "HOL4Real.transc.DIVISION_0"
58.222 + "DINT_UNIQ" > "HOL4Real.transc.DINT_UNIQ"
58.223 + "DIFF_TAN" > "HOL4Real.transc.DIFF_TAN"
58.224 + "DIFF_SIN" > "HOL4Real.transc.DIFF_SIN"
58.225 + "DIFF_LN_COMPOSITE" > "HOL4Real.transc.DIFF_LN_COMPOSITE"
58.226 + "DIFF_LN" > "HOL4Real.transc.DIFF_LN"
58.227 + "DIFF_EXP" > "HOL4Real.transc.DIFF_EXP"
58.228 + "DIFF_COS" > "HOL4Real.transc.DIFF_COS"
58.229 + "DIFF_COMPOSITE" > "HOL4Real.transc.DIFF_COMPOSITE"
58.230 + "DIFF_ATN" > "HOL4Real.transc.DIFF_ATN"
58.231 + "DIFF_ASN_LEMMA" > "HOL4Real.transc.DIFF_ASN_LEMMA"
58.232 + "DIFF_ASN" > "HOL4Real.transc.DIFF_ASN"
58.233 + "DIFF_ACS_LEMMA" > "HOL4Real.transc.DIFF_ACS_LEMMA"
58.234 + "DIFF_ACS" > "HOL4Real.transc.DIFF_ACS"
58.235 + "COS_ZERO_LEMMA" > "HOL4Real.transc.COS_ZERO_LEMMA"
58.236 + "COS_ZERO" > "HOL4Real.transc.COS_ZERO"
58.237 + "COS_TOTAL" > "HOL4Real.transc.COS_TOTAL"
58.238 + "COS_SIN_SQRT" > "HOL4Real.transc.COS_SIN_SQRT"
58.239 + "COS_SIN_SQ" > "HOL4Real.transc.COS_SIN_SQ"
58.240 + "COS_SIN" > "HOL4Real.transc.COS_SIN"
58.241 + "COS_POS_PI_LE" > "HOL4Real.transc.COS_POS_PI_LE"
58.242 + "COS_POS_PI2_LE" > "HOL4Real.transc.COS_POS_PI2_LE"
58.243 + "COS_POS_PI2" > "HOL4Real.transc.COS_POS_PI2"
58.244 + "COS_POS_PI" > "HOL4Real.transc.COS_POS_PI"
58.245 + "COS_PI2" > "HOL4Real.transc.COS_PI2"
58.246 + "COS_PI" > "HOL4Real.transc.COS_PI"
58.247 + "COS_PERIODIC_PI" > "HOL4Real.transc.COS_PERIODIC_PI"
58.248 + "COS_PERIODIC" > "HOL4Real.transc.COS_PERIODIC"
58.249 + "COS_PAIRED" > "HOL4Real.transc.COS_PAIRED"
58.250 + "COS_NPI" > "HOL4Real.transc.COS_NPI"
58.251 + "COS_NEG" > "HOL4Real.transc.COS_NEG"
58.252 + "COS_ISZERO" > "HOL4Real.transc.COS_ISZERO"
58.253 + "COS_FDIFF" > "HOL4Real.transc.COS_FDIFF"
58.254 + "COS_DOUBLE" > "HOL4Real.transc.COS_DOUBLE"
58.255 + "COS_CONVERGES" > "HOL4Real.transc.COS_CONVERGES"
58.256 + "COS_BOUNDS" > "HOL4Real.transc.COS_BOUNDS"
58.257 + "COS_BOUND" > "HOL4Real.transc.COS_BOUND"
58.258 + "COS_ATN_NZ" > "HOL4Real.transc.COS_ATN_NZ"
58.259 + "COS_ASN_NZ" > "HOL4Real.transc.COS_ASN_NZ"
58.260 + "COS_ADD" > "HOL4Real.transc.COS_ADD"
58.261 + "COS_ACS" > "HOL4Real.transc.COS_ACS"
58.262 + "COS_2" > "HOL4Real.transc.COS_2"
58.263 + "COS_0" > "HOL4Real.transc.COS_0"
58.264 + "ATN_TAN" > "HOL4Real.transc.ATN_TAN"
58.265 + "ATN_BOUNDS" > "HOL4Real.transc.ATN_BOUNDS"
58.266 + "ATN" > "HOL4Real.transc.ATN"
58.267 + "ASN_SIN" > "HOL4Real.transc.ASN_SIN"
58.268 + "ASN_BOUNDS_LT" > "HOL4Real.transc.ASN_BOUNDS_LT"
58.269 + "ASN_BOUNDS" > "HOL4Real.transc.ASN_BOUNDS"
58.270 + "ASN" > "HOL4Real.transc.ASN"
58.271 + "ACS_COS" > "HOL4Real.transc.ACS_COS"
58.272 + "ACS_BOUNDS_LT" > "HOL4Real.transc.ACS_BOUNDS_LT"
58.273 + "ACS_BOUNDS" > "HOL4Real.transc.ACS_BOUNDS"
58.274 + "ACS" > "HOL4Real.transc.ACS"
58.275 +
58.276 +end
59.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
59.2 +++ b/src/HOL/Import/HOL/word32.imp Fri Apr 02 17:37:45 2004 +0200
59.3 @@ -0,0 +1,377 @@
59.4 +import
59.5 +
59.6 +import_segment "hol4"
59.7 +
59.8 +def_maps
59.9 + "word_suc" > "word_suc_def"
59.10 + "word_sub" > "word_sub_def"
59.11 + "word_ror1" > "word_ror1_def"
59.12 + "word_ror" > "word_ror_def"
59.13 + "word_mul" > "word_mul_def"
59.14 + "word_lsr1" > "word_lsr1_def"
59.15 + "word_lsr" > "word_lsr_def"
59.16 + "word_lsl" > "word_lsl_def"
59.17 + "word_asr1" > "word_asr1_def"
59.18 + "word_asr" > "word_asr_def"
59.19 + "word_add" > "word_add_def"
59.20 + "word_2comp" > "word_2comp_def"
59.21 + "word_1comp" > "word_1comp_def"
59.22 + "w_T" > "w_T_primdef"
59.23 + "w_1" > "w_1_primdef"
59.24 + "w_0" > "w_0_primdef"
59.25 + "w2n" > "w2n_primdef"
59.26 + "n2w" > "n2w_primdef"
59.27 + "mk_word32" > "mk_word32_def"
59.28 + "dest_word32" > "dest_word32_def"
59.29 + "bitwise_or" > "bitwise_or_def"
59.30 + "bitwise_eor" > "bitwise_eor_def"
59.31 + "bitwise_and" > "bitwise_and_def"
59.32 + "WL" > "WL_primdef"
59.33 + "TWO_COMP" > "TWO_COMP_primdef"
59.34 + "TOw" > "TOw_primdef"
59.35 + "SLICEw" > "SLICEw_primdef"
59.36 + "RRXn" > "RRXn_primdef"
59.37 + "RRX" > "RRX_primdef"
59.38 + "ROR_ONE" > "ROR_ONE_primdef"
59.39 + "OR" > "OR_primdef"
59.40 + "ONE_COMP" > "ONE_COMP_primdef"
59.41 + "MSBn" > "MSBn_primdef"
59.42 + "MSB" > "MSB_primdef"
59.43 + "MODw" > "MODw_primdef"
59.44 + "LSR_ONE" > "LSR_ONE_primdef"
59.45 + "LSB" > "LSB_primdef"
59.46 + "INw" > "INw_primdef"
59.47 + "HB" > "HB_primdef"
59.48 + "EQUIV" > "EQUIV_primdef"
59.49 + "EOR" > "EOR_primdef"
59.50 + "COMP0" > "COMP0_primdef"
59.51 + "BITw" > "BITw_primdef"
59.52 + "BITSw" > "BITSw_primdef"
59.53 + "ASR_ONE" > "ASR_ONE_primdef"
59.54 + "AONE" > "AONE_primdef"
59.55 + "AND" > "AND_primdef"
59.56 +
59.57 +type_maps
59.58 + "word32" > "HOL4Word32.word32.word32"
59.59 +
59.60 +const_maps
59.61 + "word_suc" > "HOL4Word32.word32.word_suc"
59.62 + "word_sub" > "HOL4Word32.word32.word_sub"
59.63 + "word_ror1" > "HOL4Word32.word32.word_ror1"
59.64 + "word_ror" > "HOL4Word32.word32.word_ror"
59.65 + "word_mul" > "HOL4Word32.word32.word_mul"
59.66 + "word_lsr1" > "HOL4Word32.word32.word_lsr1"
59.67 + "word_lsr" > "HOL4Word32.word32.word_lsr"
59.68 + "word_lsl" > "HOL4Word32.word32.word_lsl"
59.69 + "word_asr1" > "HOL4Word32.word32.word_asr1"
59.70 + "word_asr" > "HOL4Word32.word32.word_asr"
59.71 + "word_add" > "HOL4Word32.word32.word_add"
59.72 + "word_2comp" > "HOL4Word32.word32.word_2comp"
59.73 + "word_1comp" > "HOL4Word32.word32.word_1comp"
59.74 + "w_T" > "HOL4Word32.word32.w_T"
59.75 + "w_1" > "HOL4Word32.word32.w_1"
59.76 + "w_0" > "HOL4Word32.word32.w_0"
59.77 + "w2n" > "HOL4Word32.word32.w2n"
59.78 + "n2w" > "HOL4Word32.word32.n2w"
59.79 + "bitwise_or" > "HOL4Word32.word32.bitwise_or"
59.80 + "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
59.81 + "bitwise_and" > "HOL4Word32.word32.bitwise_and"
59.82 + "WL" > "HOL4Word32.word32.WL"
59.83 + "TWO_COMP" > "HOL4Word32.word32.TWO_COMP"
59.84 + "TOw" > "HOL4Word32.word32.TOw"
59.85 + "SLICEw" > "HOL4Word32.word32.SLICEw"
59.86 + "RRXn" > "HOL4Word32.word32.RRXn"
59.87 + "RRX" > "HOL4Word32.word32.RRX"
59.88 + "ROR_ONE" > "HOL4Word32.word32.ROR_ONE"
59.89 + "OR" > "HOL4Word32.word32.OR"
59.90 + "ONE_COMP" > "HOL4Word32.word32.ONE_COMP"
59.91 + "MSBn" > "HOL4Word32.word32.MSBn"
59.92 + "MSB" > "HOL4Word32.word32.MSB"
59.93 + "MODw" > "HOL4Word32.word32.MODw"
59.94 + "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
59.95 + "LSB" > "HOL4Word32.word32.LSB"
59.96 + "INw" > "HOL4Word32.word32.INw"
59.97 + "HB" > "HOL4Word32.word32.HB"
59.98 + "EQUIV" > "HOL4Word32.word32.EQUIV"
59.99 + "EOR" > "HOL4Word32.word32.EOR"
59.100 + "COMP0" > "HOL4Word32.word32.COMP0"
59.101 + "BITw" > "HOL4Word32.word32.BITw"
59.102 + "BITSw" > "HOL4Word32.word32.BITSw"
59.103 + "ASR_ONE" > "HOL4Word32.word32.ASR_ONE"
59.104 + "AONE" > "HOL4Word32.word32.AONE"
59.105 + "AND" > "HOL4Word32.word32.AND"
59.106 +
59.107 +const_renames
59.108 + "==" > "EQUIV"
59.109 +
59.110 +thm_maps
59.111 + "word_suc_def" > "HOL4Word32.word32.word_suc_def"
59.112 + "word_suc" > "HOL4Word32.word32.word_suc"
59.113 + "word_sub_def" > "HOL4Word32.word32.word_sub_def"
59.114 + "word_sub" > "HOL4Word32.word32.word_sub"
59.115 + "word_ror_def" > "HOL4Word32.word32.word_ror_def"
59.116 + "word_ror1_def" > "HOL4Word32.word32.word_ror1_def"
59.117 + "word_ror1" > "HOL4Word32.word32.word_ror1"
59.118 + "word_ror" > "HOL4Word32.word32.word_ror"
59.119 + "word_nchotomy" > "HOL4Word32.word32.word_nchotomy"
59.120 + "word_mul_def" > "HOL4Word32.word32.word_mul_def"
59.121 + "word_mul" > "HOL4Word32.word32.word_mul"
59.122 + "word_lsr_def" > "HOL4Word32.word32.word_lsr_def"
59.123 + "word_lsr1_def" > "HOL4Word32.word32.word_lsr1_def"
59.124 + "word_lsr1" > "HOL4Word32.word32.word_lsr1"
59.125 + "word_lsr" > "HOL4Word32.word32.word_lsr"
59.126 + "word_lsl_def" > "HOL4Word32.word32.word_lsl_def"
59.127 + "word_lsl" > "HOL4Word32.word32.word_lsl"
59.128 + "word_asr_def" > "HOL4Word32.word32.word_asr_def"
59.129 + "word_asr1_def" > "HOL4Word32.word32.word_asr1_def"
59.130 + "word_asr1" > "HOL4Word32.word32.word_asr1"
59.131 + "word_asr" > "HOL4Word32.word32.word_asr"
59.132 + "word_add_def" > "HOL4Word32.word32.word_add_def"
59.133 + "word_add" > "HOL4Word32.word32.word_add"
59.134 + "word_2comp_def" > "HOL4Word32.word32.word_2comp_def"
59.135 + "word_2comp" > "HOL4Word32.word32.word_2comp"
59.136 + "word_1comp_def" > "HOL4Word32.word32.word_1comp_def"
59.137 + "word_1comp" > "HOL4Word32.word32.word_1comp"
59.138 + "word32_tybij" > "HOL4Word32.word32.word32_tybij"
59.139 + "word32_TY_DEF" > "HOL4Word32.word32.word32_TY_DEF"
59.140 + "w_T_primdef" > "HOL4Word32.word32.w_T_primdef"
59.141 + "w_T_def" > "HOL4Word32.word32.w_T_def"
59.142 + "w_T" > "HOL4Word32.word32.w_T"
59.143 + "w_1_primdef" > "HOL4Word32.word32.w_1_primdef"
59.144 + "w_1_def" > "HOL4Word32.word32.w_1_def"
59.145 + "w_1" > "HOL4Word32.word32.w_1"
59.146 + "w_0_primdef" > "HOL4Word32.word32.w_0_primdef"
59.147 + "w_0_def" > "HOL4Word32.word32.w_0_def"
59.148 + "w_0" > "HOL4Word32.word32.w_0"
59.149 + "w2n_primdef" > "HOL4Word32.word32.w2n_primdef"
59.150 + "w2n_def" > "HOL4Word32.word32.w2n_def"
59.151 + "w2n_EVAL" > "HOL4Word32.word32.w2n_EVAL"
59.152 + "w2n_ELIM" > "HOL4Word32.word32.w2n_ELIM"
59.153 + "n2w_primdef" > "HOL4Word32.word32.n2w_primdef"
59.154 + "n2w_def" > "HOL4Word32.word32.n2w_def"
59.155 + "n2w_11" > "HOL4Word32.word32.n2w_11"
59.156 + "dest_word_mk_word_eq3" > "HOL4Word32.word32.dest_word_mk_word_eq3"
59.157 + "bitwise_or_def" > "HOL4Word32.word32.bitwise_or_def"
59.158 + "bitwise_or" > "HOL4Word32.word32.bitwise_or"
59.159 + "bitwise_eor_def" > "HOL4Word32.word32.bitwise_eor_def"
59.160 + "bitwise_eor" > "HOL4Word32.word32.bitwise_eor"
59.161 + "bitwise_and_def" > "HOL4Word32.word32.bitwise_and_def"
59.162 + "bitwise_and" > "HOL4Word32.word32.bitwise_and"
59.163 + "ZERO_SHIFT2" > "HOL4Word32.word32.ZERO_SHIFT2"
59.164 + "ZERO_SHIFT" > "HOL4Word32.word32.ZERO_SHIFT"
59.165 + "WL_primdef" > "HOL4Word32.word32.WL_primdef"
59.166 + "WL_def" > "HOL4Word32.word32.WL_def"
59.167 + "TWO_COMP_primdef" > "HOL4Word32.word32.TWO_COMP_primdef"
59.168 + "TWO_COMP_def" > "HOL4Word32.word32.TWO_COMP_def"
59.169 + "TWO_COMP_WELLDEF" > "HOL4Word32.word32.TWO_COMP_WELLDEF"
59.170 + "TWO_COMP_ONE_COMP_QT" > "HOL4Word32.word32.TWO_COMP_ONE_COMP_QT"
59.171 + "TWO_COMP_ONE_COMP" > "HOL4Word32.word32.TWO_COMP_ONE_COMP"
59.172 + "TWO_COMP_EVAL2" > "HOL4Word32.word32.TWO_COMP_EVAL2"
59.173 + "TWO_COMP_EVAL" > "HOL4Word32.word32.TWO_COMP_EVAL"
59.174 + "TWO_COMP_ELIM" > "HOL4Word32.word32.TWO_COMP_ELIM"
59.175 + "TWO_COMP_ADD" > "HOL4Word32.word32.TWO_COMP_ADD"
59.176 + "TOw_primdef" > "HOL4Word32.word32.TOw_primdef"
59.177 + "TOw_def" > "HOL4Word32.word32.TOw_def"
59.178 + "TOw_WELLDEF" > "HOL4Word32.word32.TOw_WELLDEF"
59.179 + "TOw_QT" > "HOL4Word32.word32.TOw_QT"
59.180 + "TOw_IDEM" > "HOL4Word32.word32.TOw_IDEM"
59.181 + "SUC_WELLDEF" > "HOL4Word32.word32.SUC_WELLDEF"
59.182 + "SUC_EQUIV_COMP" > "HOL4Word32.word32.SUC_EQUIV_COMP"
59.183 + "SUBw" > "HOL4Word32.word32.SUBw"
59.184 + "SUB_SUBw" > "HOL4Word32.word32.SUB_SUBw"
59.185 + "SUB_PLUSw" > "HOL4Word32.word32.SUB_PLUSw"
59.186 + "SUB_EQUALw" > "HOL4Word32.word32.SUB_EQUALw"
59.187 + "SLICEw_primdef" > "HOL4Word32.word32.SLICEw_primdef"
59.188 + "SLICEw_def" > "HOL4Word32.word32.SLICEw_def"
59.189 + "SLICEw_ZERO_THM" > "HOL4Word32.word32.SLICEw_ZERO_THM"
59.190 + "SLICEw_ZERO" > "HOL4Word32.word32.SLICEw_ZERO"
59.191 + "SLICEw_THM" > "HOL4Word32.word32.SLICEw_THM"
59.192 + "SLICEw_COMP_THM" > "HOL4Word32.word32.SLICEw_COMP_THM"
59.193 + "SLICE_EVAL" > "HOL4Word32.word32.SLICE_EVAL"
59.194 + "RRXn_primdef" > "HOL4Word32.word32.RRXn_primdef"
59.195 + "RRXn_def" > "HOL4Word32.word32.RRXn_def"
59.196 + "RRX_primdef" > "HOL4Word32.word32.RRX_primdef"
59.197 + "RRX_def" > "HOL4Word32.word32.RRX_def"
59.198 + "RRX_WELLDEF" > "HOL4Word32.word32.RRX_WELLDEF"
59.199 + "RRX_EVAL2" > "HOL4Word32.word32.RRX_EVAL2"
59.200 + "RRX_EVAL" > "HOL4Word32.word32.RRX_EVAL"
59.201 + "ROR_w_T" > "HOL4Word32.word32.ROR_w_T"
59.202 + "ROR_THM" > "HOL4Word32.word32.ROR_THM"
59.203 + "ROR_ONE_primdef" > "HOL4Word32.word32.ROR_ONE_primdef"
59.204 + "ROR_ONE_def" > "HOL4Word32.word32.ROR_ONE_def"
59.205 + "ROR_ONE_WELLDEF" > "HOL4Word32.word32.ROR_ONE_WELLDEF"
59.206 + "ROR_ONE_EVAL2" > "HOL4Word32.word32.ROR_ONE_EVAL2"
59.207 + "ROR_ONE_EVAL" > "HOL4Word32.word32.ROR_ONE_EVAL"
59.208 + "ROR_CYCLE" > "HOL4Word32.word32.ROR_CYCLE"
59.209 + "ROR_ADD" > "HOL4Word32.word32.ROR_ADD"
59.210 + "RIGHT_OR_OVER_ANDw" > "HOL4Word32.word32.RIGHT_OR_OVER_ANDw"
59.211 + "RIGHT_OR_OVER_AND_QT" > "HOL4Word32.word32.RIGHT_OR_OVER_AND_QT"
59.212 + "RIGHT_AND_OVER_ORw" > "HOL4Word32.word32.RIGHT_AND_OVER_ORw"
59.213 + "RIGHT_AND_OVER_OR_QT" > "HOL4Word32.word32.RIGHT_AND_OVER_OR_QT"
59.214 + "OR_primdef" > "HOL4Word32.word32.OR_primdef"
59.215 + "OR_def" > "HOL4Word32.word32.OR_def"
59.216 + "OR_IDEMw" > "HOL4Word32.word32.OR_IDEMw"
59.217 + "OR_IDEM_QT" > "HOL4Word32.word32.OR_IDEM_QT"
59.218 + "OR_EVAL2" > "HOL4Word32.word32.OR_EVAL2"
59.219 + "OR_EVAL" > "HOL4Word32.word32.OR_EVAL"
59.220 + "OR_COMP_QT" > "HOL4Word32.word32.OR_COMP_QT"
59.221 + "OR_COMMw" > "HOL4Word32.word32.OR_COMMw"
59.222 + "OR_COMM_QT" > "HOL4Word32.word32.OR_COMM_QT"
59.223 + "OR_ASSOCw" > "HOL4Word32.word32.OR_ASSOCw"
59.224 + "OR_ASSOC_QT" > "HOL4Word32.word32.OR_ASSOC_QT"
59.225 + "OR_ABSORBw" > "HOL4Word32.word32.OR_ABSORBw"
59.226 + "OR_ABSORB_QT" > "HOL4Word32.word32.OR_ABSORB_QT"
59.227 + "ONE_COMPw" > "HOL4Word32.word32.ONE_COMPw"
59.228 + "ONE_COMP_primdef" > "HOL4Word32.word32.ONE_COMP_primdef"
59.229 + "ONE_COMP_def" > "HOL4Word32.word32.ONE_COMP_def"
59.230 + "ONE_COMP_WELLDEF" > "HOL4Word32.word32.ONE_COMP_WELLDEF"
59.231 + "ONE_COMP_TWO_COMP" > "HOL4Word32.word32.ONE_COMP_TWO_COMP"
59.232 + "ONE_COMP_THM" > "HOL4Word32.word32.ONE_COMP_THM"
59.233 + "ONE_COMP_QT" > "HOL4Word32.word32.ONE_COMP_QT"
59.234 + "ONE_COMP_EVAL2" > "HOL4Word32.word32.ONE_COMP_EVAL2"
59.235 + "ONE_COMP_EVAL" > "HOL4Word32.word32.ONE_COMP_EVAL"
59.236 + "MUL_WELLDEF" > "HOL4Word32.word32.MUL_WELLDEF"
59.237 + "MUL_EVAL2" > "HOL4Word32.word32.MUL_EVAL2"
59.238 + "MUL_EVAL" > "HOL4Word32.word32.MUL_EVAL"
59.239 + "MULT_QT" > "HOL4Word32.word32.MULT_QT"
59.240 + "MULT_COMMw" > "HOL4Word32.word32.MULT_COMMw"
59.241 + "MULT_COMM_QT" > "HOL4Word32.word32.MULT_COMM_QT"
59.242 + "MULT_CLAUSESw" > "HOL4Word32.word32.MULT_CLAUSESw"
59.243 + "MULT_CLAUSES_QT" > "HOL4Word32.word32.MULT_CLAUSES_QT"
59.244 + "MULT_ASSOCw" > "HOL4Word32.word32.MULT_ASSOCw"
59.245 + "MULT_ASSOC_QT" > "HOL4Word32.word32.MULT_ASSOC_QT"
59.246 + "MSBn_primdef" > "HOL4Word32.word32.MSBn_primdef"
59.247 + "MSBn_def" > "HOL4Word32.word32.MSBn_def"
59.248 + "MSB_primdef" > "HOL4Word32.word32.MSB_primdef"
59.249 + "MSB_def" > "HOL4Word32.word32.MSB_def"
59.250 + "MSB_WELLDEF" > "HOL4Word32.word32.MSB_WELLDEF"
59.251 + "MSB_EVAL2" > "HOL4Word32.word32.MSB_EVAL2"
59.252 + "MSB_EVAL" > "HOL4Word32.word32.MSB_EVAL"
59.253 + "MODw_primdef" > "HOL4Word32.word32.MODw_primdef"
59.254 + "MODw_def" > "HOL4Word32.word32.MODw_def"
59.255 + "MODw_THM" > "HOL4Word32.word32.MODw_THM"
59.256 + "MODw_MULT" > "HOL4Word32.word32.MODw_MULT"
59.257 + "MODw_IDEM2" > "HOL4Word32.word32.MODw_IDEM2"
59.258 + "MODw_EVAL" > "HOL4Word32.word32.MODw_EVAL"
59.259 + "MODw_ELIM" > "HOL4Word32.word32.MODw_ELIM"
59.260 + "MOD_MOD_DIV_2EXP" > "HOL4Word32.word32.MOD_MOD_DIV_2EXP"
59.261 + "MOD_MOD_DIV" > "HOL4Word32.word32.MOD_MOD_DIV"
59.262 + "MOD_ADD" > "HOL4Word32.word32.MOD_ADD"
59.263 + "LSR_THM" > "HOL4Word32.word32.LSR_THM"
59.264 + "LSR_ONE_primdef" > "HOL4Word32.word32.LSR_ONE_primdef"
59.265 + "LSR_ONE_def" > "HOL4Word32.word32.LSR_ONE_def"
59.266 + "LSR_ONE_WELLDEF" > "HOL4Word32.word32.LSR_ONE_WELLDEF"
59.267 + "LSR_ONE_EVAL2" > "HOL4Word32.word32.LSR_ONE_EVAL2"
59.268 + "LSR_ONE_EVAL" > "HOL4Word32.word32.LSR_ONE_EVAL"
59.269 + "LSR_ONE" > "HOL4Word32.word32.LSR_ONE"
59.270 + "LSR_LIMIT" > "HOL4Word32.word32.LSR_LIMIT"
59.271 + "LSR_EVAL" > "HOL4Word32.word32.LSR_EVAL"
59.272 + "LSR_ADD" > "HOL4Word32.word32.LSR_ADD"
59.273 + "LSL_LIMIT" > "HOL4Word32.word32.LSL_LIMIT"
59.274 + "LSL_ADD" > "HOL4Word32.word32.LSL_ADD"
59.275 + "LSB_primdef" > "HOL4Word32.word32.LSB_primdef"
59.276 + "LSB_def" > "HOL4Word32.word32.LSB_def"
59.277 + "LSB_WELLDEF" > "HOL4Word32.word32.LSB_WELLDEF"
59.278 + "LSB_EVAL2" > "HOL4Word32.word32.LSB_EVAL2"
59.279 + "LSB_EVAL" > "HOL4Word32.word32.LSB_EVAL"
59.280 + "LEFT_SHIFT_LESS" > "HOL4Word32.word32.LEFT_SHIFT_LESS"
59.281 + "LEFT_ADD_DISTRIBw" > "HOL4Word32.word32.LEFT_ADD_DISTRIBw"
59.282 + "LEFT_ADD_DISTRIB_QT" > "HOL4Word32.word32.LEFT_ADD_DISTRIB_QT"
59.283 + "INw_primdef" > "HOL4Word32.word32.INw_primdef"
59.284 + "INw_def" > "HOL4Word32.word32.INw_def"
59.285 + "INw_MODw" > "HOL4Word32.word32.INw_MODw"
59.286 + "INV_SUC_EQ_QT" > "HOL4Word32.word32.INV_SUC_EQ_QT"
59.287 + "HB_primdef" > "HOL4Word32.word32.HB_primdef"
59.288 + "HB_def" > "HOL4Word32.word32.HB_def"
59.289 + "FUNPOW_THM2" > "HOL4Word32.word32.FUNPOW_THM2"
59.290 + "FUNPOW_THM" > "HOL4Word32.word32.FUNPOW_THM"
59.291 + "FUNPOW_COMP" > "HOL4Word32.word32.FUNPOW_COMP"
59.292 + "EQ_ADD_RCANCELw" > "HOL4Word32.word32.EQ_ADD_RCANCELw"
59.293 + "EQ_ADD_RCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_RCANCEL_QT"
59.294 + "EQ_ADD_LCANCELw" > "HOL4Word32.word32.EQ_ADD_LCANCELw"
59.295 + "EQ_ADD_LCANCEL_QT" > "HOL4Word32.word32.EQ_ADD_LCANCEL_QT"
59.296 + "EQUIV_primdef" > "HOL4Word32.word32.EQUIV_primdef"
59.297 + "EQUIV_def" > "HOL4Word32.word32.EQUIV_def"
59.298 + "EQUIV_QT" > "HOL4Word32.word32.EQUIV_QT"
59.299 + "EOR_primdef" > "HOL4Word32.word32.EOR_primdef"
59.300 + "EOR_def" > "HOL4Word32.word32.EOR_def"
59.301 + "EOR_EVAL2" > "HOL4Word32.word32.EOR_EVAL2"
59.302 + "EOR_EVAL" > "HOL4Word32.word32.EOR_EVAL"
59.303 + "DE_MORGAN_THMw" > "HOL4Word32.word32.DE_MORGAN_THMw"
59.304 + "DE_MORGAN_THM_QT" > "HOL4Word32.word32.DE_MORGAN_THM_QT"
59.305 + "COMP0_primdef" > "HOL4Word32.word32.COMP0_primdef"
59.306 + "COMP0_def" > "HOL4Word32.word32.COMP0_def"
59.307 + "CANCEL_SUBw" > "HOL4Word32.word32.CANCEL_SUBw"
59.308 + "BITw_primdef" > "HOL4Word32.word32.BITw_primdef"
59.309 + "BITw_def" > "HOL4Word32.word32.BITw_def"
59.310 + "BITw_THM" > "HOL4Word32.word32.BITw_THM"
59.311 + "BIT_EVAL" > "HOL4Word32.word32.BIT_EVAL"
59.312 + "BIT_EQUIV_THM" > "HOL4Word32.word32.BIT_EQUIV_THM"
59.313 + "BIT_EQUIV" > "HOL4Word32.word32.BIT_EQUIV"
59.314 + "BITWISEw_WELLDEF" > "HOL4Word32.word32.BITWISEw_WELLDEF"
59.315 + "BITWISE_WELLDEF" > "HOL4Word32.word32.BITWISE_WELLDEF"
59.316 + "BITWISE_THM2" > "HOL4Word32.word32.BITWISE_THM2"
59.317 + "BITWISE_ONE_COMP_THM" > "HOL4Word32.word32.BITWISE_ONE_COMP_THM"
59.318 + "BITWISE_ISTEP" > "HOL4Word32.word32.BITWISE_ISTEP"
59.319 + "BITWISE_EVAL2" > "HOL4Word32.word32.BITWISE_EVAL2"
59.320 + "BITWISE_EVAL" > "HOL4Word32.word32.BITWISE_EVAL"
59.321 + "BITSw_primdef" > "HOL4Word32.word32.BITSw_primdef"
59.322 + "BITSw_def" > "HOL4Word32.word32.BITSw_def"
59.323 + "BITSw_ZERO" > "HOL4Word32.word32.BITSw_ZERO"
59.324 + "BITSw_DIV_THM" > "HOL4Word32.word32.BITSw_DIV_THM"
59.325 + "BITSw_COMP_THM" > "HOL4Word32.word32.BITSw_COMP_THM"
59.326 + "BITSwLT_THM" > "HOL4Word32.word32.BITSwLT_THM"
59.327 + "BITS_SUC2" > "HOL4Word32.word32.BITS_SUC2"
59.328 + "BITS_SLICEw_THM" > "HOL4Word32.word32.BITS_SLICEw_THM"
59.329 + "BITS_EVAL" > "HOL4Word32.word32.BITS_EVAL"
59.330 + "ASR_w_T" > "HOL4Word32.word32.ASR_w_T"
59.331 + "ASR_THM" > "HOL4Word32.word32.ASR_THM"
59.332 + "ASR_ONE_primdef" > "HOL4Word32.word32.ASR_ONE_primdef"
59.333 + "ASR_ONE_def" > "HOL4Word32.word32.ASR_ONE_def"
59.334 + "ASR_ONE_WELLDEF" > "HOL4Word32.word32.ASR_ONE_WELLDEF"
59.335 + "ASR_ONE_EVAL2" > "HOL4Word32.word32.ASR_ONE_EVAL2"
59.336 + "ASR_ONE_EVAL" > "HOL4Word32.word32.ASR_ONE_EVAL"
59.337 + "ASR_LIMIT" > "HOL4Word32.word32.ASR_LIMIT"
59.338 + "ASR_ADD" > "HOL4Word32.word32.ASR_ADD"
59.339 + "AONE_primdef" > "HOL4Word32.word32.AONE_primdef"
59.340 + "AONE_def" > "HOL4Word32.word32.AONE_def"
59.341 + "AND_primdef" > "HOL4Word32.word32.AND_primdef"
59.342 + "AND_def" > "HOL4Word32.word32.AND_def"
59.343 + "AND_IDEMw" > "HOL4Word32.word32.AND_IDEMw"
59.344 + "AND_IDEM_QT" > "HOL4Word32.word32.AND_IDEM_QT"
59.345 + "AND_EVAL2" > "HOL4Word32.word32.AND_EVAL2"
59.346 + "AND_EVAL" > "HOL4Word32.word32.AND_EVAL"
59.347 + "AND_COMP_QT" > "HOL4Word32.word32.AND_COMP_QT"
59.348 + "AND_COMMw" > "HOL4Word32.word32.AND_COMMw"
59.349 + "AND_COMM_QT" > "HOL4Word32.word32.AND_COMM_QT"
59.350 + "AND_ASSOCw" > "HOL4Word32.word32.AND_ASSOCw"
59.351 + "AND_ASSOC_QT" > "HOL4Word32.word32.AND_ASSOC_QT"
59.352 + "AND_ABSORBw" > "HOL4Word32.word32.AND_ABSORBw"
59.353 + "AND_ABSORB_QT" > "HOL4Word32.word32.AND_ABSORB_QT"
59.354 + "ADDw" > "HOL4Word32.word32.ADDw"
59.355 + "ADD_WELLDEF" > "HOL4Word32.word32.ADD_WELLDEF"
59.356 + "ADD_TWO_COMP_QT" > "HOL4Word32.word32.ADD_TWO_COMP_QT"
59.357 + "ADD_TWO_COMP2" > "HOL4Word32.word32.ADD_TWO_COMP2"
59.358 + "ADD_TWO_COMP" > "HOL4Word32.word32.ADD_TWO_COMP"
59.359 + "ADD_SUBw" > "HOL4Word32.word32.ADD_SUBw"
59.360 + "ADD_SUB_SYM" > "HOL4Word32.word32.ADD_SUB_SYM"
59.361 + "ADD_SUB_ASSOC" > "HOL4Word32.word32.ADD_SUB_ASSOC"
59.362 + "ADD_QT" > "HOL4Word32.word32.ADD_QT"
59.363 + "ADD_INV_0_QT" > "HOL4Word32.word32.ADD_INV_0_QT"
59.364 + "ADD_INV_0_EQw" > "HOL4Word32.word32.ADD_INV_0_EQw"
59.365 + "ADD_INV_0_EQ_QT" > "HOL4Word32.word32.ADD_INV_0_EQ_QT"
59.366 + "ADD_EVAL2" > "HOL4Word32.word32.ADD_EVAL2"
59.367 + "ADD_EVAL" > "HOL4Word32.word32.ADD_EVAL"
59.368 + "ADD_EQ_SUBw" > "HOL4Word32.word32.ADD_EQ_SUBw"
59.369 + "ADD_COMMw" > "HOL4Word32.word32.ADD_COMMw"
59.370 + "ADD_COMM_QT" > "HOL4Word32.word32.ADD_COMM_QT"
59.371 + "ADD_CLAUSESw" > "HOL4Word32.word32.ADD_CLAUSESw"
59.372 + "ADD_CLAUSES_QT" > "HOL4Word32.word32.ADD_CLAUSES_QT"
59.373 + "ADD_ASSOCw" > "HOL4Word32.word32.ADD_ASSOCw"
59.374 + "ADD_ASSOC_QT" > "HOL4Word32.word32.ADD_ASSOC_QT"
59.375 + "ADD_0w" > "HOL4Word32.word32.ADD_0w"
59.376 + "ADD_0_QT" > "HOL4Word32.word32.ADD_0_QT"
59.377 + "ADD1w" > "HOL4Word32.word32.ADD1w"
59.378 + "ADD1_QT" > "HOL4Word32.word32.ADD1_QT"
59.379 +
59.380 +end
60.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
60.2 +++ b/src/HOL/Import/HOL/word_base.imp Fri Apr 02 17:37:45 2004 +0200
60.3 @@ -0,0 +1,102 @@
60.4 +import
60.5 +
60.6 +import_segment "hol4"
60.7 +
60.8 +def_maps
60.9 + "word_size" > "word_size_primdef"
60.10 + "word_case" > "word_case_primdef"
60.11 + "word_base0" > "word_base0_primdef"
60.12 + "mk_word" > "mk_word_def"
60.13 + "dest_word" > "dest_word_def"
60.14 + "bit" > "bit_def"
60.15 + "WSPLIT" > "WSPLIT_def"
60.16 + "WSEG" > "WSEG_def"
60.17 + "WORDLEN" > "WORDLEN_def"
60.18 + "WORD" > "WORD_def"
60.19 + "WCAT" > "WCAT_def"
60.20 + "PWORDLEN" > "PWORDLEN_primdef"
60.21 + "MSB" > "MSB_def"
60.22 + "LSB" > "LSB_def"
60.23 +
60.24 +type_maps
60.25 + "word" > "HOL4Vec.word_base.word"
60.26 +
60.27 +const_maps
60.28 + "word_base0" > "HOL4Vec.word_base.word_base0"
60.29 + "WORD" > "HOL4Vec.word_base.WORD"
60.30 + "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
60.31 +
60.32 +const_renames
60.33 + "BIT" > "bit"
60.34 +
60.35 +thm_maps
60.36 + "word_size_def" > "HOL4Vec.word_base.word_size_def"
60.37 + "word_repfns" > "HOL4Vec.word_base.word_repfns"
60.38 + "word_nchotomy" > "HOL4Vec.word_base.word_nchotomy"
60.39 + "word_induction" > "HOL4Vec.word_base.word_induction"
60.40 + "word_induct" > "HOL4Vec.word_base.word_induct"
60.41 + "word_cases" > "HOL4Vec.word_base.word_cases"
60.42 + "word_case_def" > "HOL4Vec.word_base.word_case_def"
60.43 + "word_case_cong" > "HOL4Vec.word_base.word_case_cong"
60.44 + "word_base0_primdef" > "HOL4Vec.word_base.word_base0_primdef"
60.45 + "word_base0_def" > "HOL4Vec.word_base.word_base0_def"
60.46 + "word_TY_DEF" > "HOL4Vec.word_base.word_TY_DEF"
60.47 + "word_Axiom" > "HOL4Vec.word_base.word_Axiom"
60.48 + "word_Ax" > "HOL4Vec.word_base.word_Ax"
60.49 + "word_11" > "HOL4Vec.word_base.word_11"
60.50 + "WSPLIT_WSEG2" > "HOL4Vec.word_base.WSPLIT_WSEG2"
60.51 + "WSPLIT_WSEG1" > "HOL4Vec.word_base.WSPLIT_WSEG1"
60.52 + "WSPLIT_WSEG" > "HOL4Vec.word_base.WSPLIT_WSEG"
60.53 + "WSPLIT_PWORDLEN" > "HOL4Vec.word_base.WSPLIT_PWORDLEN"
60.54 + "WSPLIT_DEF" > "HOL4Vec.word_base.WSPLIT_DEF"
60.55 + "WSEG_WSEG" > "HOL4Vec.word_base.WSEG_WSEG"
60.56 + "WSEG_WORD_LENGTH" > "HOL4Vec.word_base.WSEG_WORD_LENGTH"
60.57 + "WSEG_WORDLEN" > "HOL4Vec.word_base.WSEG_WORDLEN"
60.58 + "WSEG_WCAT_WSEG2" > "HOL4Vec.word_base.WSEG_WCAT_WSEG2"
60.59 + "WSEG_WCAT_WSEG1" > "HOL4Vec.word_base.WSEG_WCAT_WSEG1"
60.60 + "WSEG_WCAT_WSEG" > "HOL4Vec.word_base.WSEG_WCAT_WSEG"
60.61 + "WSEG_WCAT2" > "HOL4Vec.word_base.WSEG_WCAT2"
60.62 + "WSEG_WCAT1" > "HOL4Vec.word_base.WSEG_WCAT1"
60.63 + "WSEG_SUC" > "HOL4Vec.word_base.WSEG_SUC"
60.64 + "WSEG_PWORDLEN" > "HOL4Vec.word_base.WSEG_PWORDLEN"
60.65 + "WSEG_DEF" > "HOL4Vec.word_base.WSEG_DEF"
60.66 + "WSEG_BIT" > "HOL4Vec.word_base.WSEG_BIT"
60.67 + "WSEG0" > "HOL4Vec.word_base.WSEG0"
60.68 + "WORD_def" > "HOL4Vec.word_base.WORD_def"
60.69 + "WORD_SPLIT" > "HOL4Vec.word_base.WORD_SPLIT"
60.70 + "WORD_SNOC_WCAT" > "HOL4Vec.word_base.WORD_SNOC_WCAT"
60.71 + "WORD_PARTITION" > "HOL4Vec.word_base.WORD_PARTITION"
60.72 + "WORD_CONS_WCAT" > "HOL4Vec.word_base.WORD_CONS_WCAT"
60.73 + "WORD_11" > "HOL4Vec.word_base.WORD_11"
60.74 + "WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG_RIGHT"
60.75 + "WORDLEN_SUC_WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_WSEG_WSEG"
60.76 + "WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG_RIGHT"
60.77 + "WORDLEN_SUC_WCAT_BIT_WSEG" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT_BIT_WSEG"
60.78 + "WORDLEN_SUC_WCAT" > "HOL4Vec.word_base.WORDLEN_SUC_WCAT"
60.79 + "WORDLEN_DEF" > "HOL4Vec.word_base.WORDLEN_DEF"
60.80 + "WORD" > "HOL4Vec.word_base.WORD"
60.81 + "WCAT_WSEG_WSEG" > "HOL4Vec.word_base.WCAT_WSEG_WSEG"
60.82 + "WCAT_PWORDLEN" > "HOL4Vec.word_base.WCAT_PWORDLEN"
60.83 + "WCAT_DEF" > "HOL4Vec.word_base.WCAT_DEF"
60.84 + "WCAT_ASSOC" > "HOL4Vec.word_base.WCAT_ASSOC"
60.85 + "WCAT_11" > "HOL4Vec.word_base.WCAT_11"
60.86 + "WCAT0" > "HOL4Vec.word_base.WCAT0"
60.87 + "PWORDLEN_primdef" > "HOL4Vec.word_base.PWORDLEN_primdef"
60.88 + "PWORDLEN_def" > "HOL4Vec.word_base.PWORDLEN_def"
60.89 + "PWORDLEN1" > "HOL4Vec.word_base.PWORDLEN1"
60.90 + "PWORDLEN0" > "HOL4Vec.word_base.PWORDLEN0"
60.91 + "PWORDLEN" > "HOL4Vec.word_base.PWORDLEN"
60.92 + "MSB_DEF" > "HOL4Vec.word_base.MSB_DEF"
60.93 + "MSB" > "HOL4Vec.word_base.MSB"
60.94 + "LSB_DEF" > "HOL4Vec.word_base.LSB_DEF"
60.95 + "LSB" > "HOL4Vec.word_base.LSB"
60.96 + "IN_PWORDLEN" > "HOL4Vec.word_base.IN_PWORDLEN"
60.97 + "BIT_WSEG" > "HOL4Vec.word_base.BIT_WSEG"
60.98 + "BIT_WCAT_SND" > "HOL4Vec.word_base.BIT_WCAT_SND"
60.99 + "BIT_WCAT_FST" > "HOL4Vec.word_base.BIT_WCAT_FST"
60.100 + "BIT_WCAT1" > "HOL4Vec.word_base.BIT_WCAT1"
60.101 + "BIT_EQ_IMP_WORD_EQ" > "HOL4Vec.word_base.BIT_EQ_IMP_WORD_EQ"
60.102 + "BIT_DEF" > "HOL4Vec.word_base.BIT_DEF"
60.103 + "BIT0" > "HOL4Vec.word_base.BIT0"
60.104 +
60.105 +end
61.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
61.2 +++ b/src/HOL/Import/HOL/word_bitop.imp Fri Apr 02 17:37:45 2004 +0200
61.3 @@ -0,0 +1,64 @@
61.4 +import
61.5 +
61.6 +import_segment "hol4"
61.7 +
61.8 +def_maps
61.9 + "WMAP" > "WMAP_def"
61.10 + "SHR" > "SHR_def"
61.11 + "SHL" > "SHL_def"
61.12 + "PBITOP" > "PBITOP_primdef"
61.13 + "PBITBOP" > "PBITBOP_primdef"
61.14 + "FORALLBITS" > "FORALLBITS_def"
61.15 + "EXISTSABIT" > "EXISTSABIT_def"
61.16 +
61.17 +const_maps
61.18 + "SHR" > "HOL4Vec.word_bitop.SHR"
61.19 + "SHL" > "HOL4Vec.word_bitop.SHL"
61.20 + "PBITOP" > "HOL4Vec.word_bitop.PBITOP"
61.21 + "PBITBOP" > "HOL4Vec.word_bitop.PBITBOP"
61.22 +
61.23 +thm_maps
61.24 + "WSEG_SHL_0" > "HOL4Vec.word_bitop.WSEG_SHL_0"
61.25 + "WSEG_SHL" > "HOL4Vec.word_bitop.WSEG_SHL"
61.26 + "WMAP_o" > "HOL4Vec.word_bitop.WMAP_o"
61.27 + "WMAP_WSEG" > "HOL4Vec.word_bitop.WMAP_WSEG"
61.28 + "WMAP_WCAT" > "HOL4Vec.word_bitop.WMAP_WCAT"
61.29 + "WMAP_PWORDLEN" > "HOL4Vec.word_bitop.WMAP_PWORDLEN"
61.30 + "WMAP_PBITOP" > "HOL4Vec.word_bitop.WMAP_PBITOP"
61.31 + "WMAP_DEF" > "HOL4Vec.word_bitop.WMAP_DEF"
61.32 + "WMAP_BIT" > "HOL4Vec.word_bitop.WMAP_BIT"
61.33 + "WMAP_0" > "HOL4Vec.word_bitop.WMAP_0"
61.34 + "SHR_def" > "HOL4Vec.word_bitop.SHR_def"
61.35 + "SHR_WSEG_NF" > "HOL4Vec.word_bitop.SHR_WSEG_NF"
61.36 + "SHR_WSEG_1F" > "HOL4Vec.word_bitop.SHR_WSEG_1F"
61.37 + "SHR_WSEG" > "HOL4Vec.word_bitop.SHR_WSEG"
61.38 + "SHR_DEF" > "HOL4Vec.word_bitop.SHR_DEF"
61.39 + "SHL_def" > "HOL4Vec.word_bitop.SHL_def"
61.40 + "SHL_WSEG_NF" > "HOL4Vec.word_bitop.SHL_WSEG_NF"
61.41 + "SHL_WSEG_1F" > "HOL4Vec.word_bitop.SHL_WSEG_1F"
61.42 + "SHL_WSEG" > "HOL4Vec.word_bitop.SHL_WSEG"
61.43 + "SHL_DEF" > "HOL4Vec.word_bitop.SHL_DEF"
61.44 + "PBITOP_primdef" > "HOL4Vec.word_bitop.PBITOP_primdef"
61.45 + "PBITOP_def" > "HOL4Vec.word_bitop.PBITOP_def"
61.46 + "PBITOP_WSEG" > "HOL4Vec.word_bitop.PBITOP_WSEG"
61.47 + "PBITOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITOP_PWORDLEN"
61.48 + "PBITOP_BIT" > "HOL4Vec.word_bitop.PBITOP_BIT"
61.49 + "PBITBOP_primdef" > "HOL4Vec.word_bitop.PBITBOP_primdef"
61.50 + "PBITBOP_def" > "HOL4Vec.word_bitop.PBITBOP_def"
61.51 + "PBITBOP_WSEG" > "HOL4Vec.word_bitop.PBITBOP_WSEG"
61.52 + "PBITBOP_PWORDLEN" > "HOL4Vec.word_bitop.PBITBOP_PWORDLEN"
61.53 + "PBITBOP_EXISTS" > "HOL4Vec.word_bitop.PBITBOP_EXISTS"
61.54 + "NOT_FORALLBITS" > "HOL4Vec.word_bitop.NOT_FORALLBITS"
61.55 + "NOT_EXISTSABIT" > "HOL4Vec.word_bitop.NOT_EXISTSABIT"
61.56 + "IN_PBITOP" > "HOL4Vec.word_bitop.IN_PBITOP"
61.57 + "IN_PBITBOP" > "HOL4Vec.word_bitop.IN_PBITBOP"
61.58 + "FORALLBITS_WSEG" > "HOL4Vec.word_bitop.FORALLBITS_WSEG"
61.59 + "FORALLBITS_WCAT" > "HOL4Vec.word_bitop.FORALLBITS_WCAT"
61.60 + "FORALLBITS_DEF" > "HOL4Vec.word_bitop.FORALLBITS_DEF"
61.61 + "FORALLBITS" > "HOL4Vec.word_bitop.FORALLBITS"
61.62 + "EXISTSABIT_WSEG" > "HOL4Vec.word_bitop.EXISTSABIT_WSEG"
61.63 + "EXISTSABIT_WCAT" > "HOL4Vec.word_bitop.EXISTSABIT_WCAT"
61.64 + "EXISTSABIT_DEF" > "HOL4Vec.word_bitop.EXISTSABIT_DEF"
61.65 + "EXISTSABIT" > "HOL4Vec.word_bitop.EXISTSABIT"
61.66 +
61.67 +end
62.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
62.2 +++ b/src/HOL/Import/HOL/word_num.imp Fri Apr 02 17:37:45 2004 +0200
62.3 @@ -0,0 +1,35 @@
62.4 +import
62.5 +
62.6 +import_segment "hol4"
62.7 +
62.8 +def_maps
62.9 + "NWORD" > "NWORD_def"
62.10 + "NVAL" > "NVAL_def"
62.11 + "NLIST" > "NLIST_def"
62.12 + "LVAL" > "LVAL_def"
62.13 +
62.14 +const_maps
62.15 + "NWORD" > "HOL4Vec.word_num.NWORD"
62.16 + "LVAL" > "HOL4Vec.word_num.LVAL"
62.17 +
62.18 +thm_maps
62.19 + "NWORD_def" > "HOL4Vec.word_num.NWORD_def"
62.20 + "NWORD_PWORDLEN" > "HOL4Vec.word_num.NWORD_PWORDLEN"
62.21 + "NWORD_LENGTH" > "HOL4Vec.word_num.NWORD_LENGTH"
62.22 + "NWORD_DEF" > "HOL4Vec.word_num.NWORD_DEF"
62.23 + "NVAL_WORDLEN_0" > "HOL4Vec.word_num.NVAL_WORDLEN_0"
62.24 + "NVAL_WCAT2" > "HOL4Vec.word_num.NVAL_WCAT2"
62.25 + "NVAL_WCAT1" > "HOL4Vec.word_num.NVAL_WCAT1"
62.26 + "NVAL_WCAT" > "HOL4Vec.word_num.NVAL_WCAT"
62.27 + "NVAL_MAX" > "HOL4Vec.word_num.NVAL_MAX"
62.28 + "NVAL_DEF" > "HOL4Vec.word_num.NVAL_DEF"
62.29 + "NVAL1" > "HOL4Vec.word_num.NVAL1"
62.30 + "NVAL0" > "HOL4Vec.word_num.NVAL0"
62.31 + "NLIST_DEF" > "HOL4Vec.word_num.NLIST_DEF"
62.32 + "LVAL_def" > "HOL4Vec.word_num.LVAL_def"
62.33 + "LVAL_SNOC" > "HOL4Vec.word_num.LVAL_SNOC"
62.34 + "LVAL_MAX" > "HOL4Vec.word_num.LVAL_MAX"
62.35 + "LVAL_DEF" > "HOL4Vec.word_num.LVAL_DEF"
62.36 + "LVAL" > "HOL4Vec.word_num.LVAL"
62.37 +
62.38 +end
63.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
63.2 +++ b/src/HOL/Import/HOL4Compat.thy Fri Apr 02 17:37:45 2004 +0200
63.3 @@ -0,0 +1,533 @@
63.4 +theory HOL4Compat = HOL4Setup + Divides + Primes + Real:
63.5 +
63.6 +lemma EXISTS_UNIQUE_DEF: "(Ex1 P) = (Ex P & (ALL x y. P x & P y --> (x = y)))"
63.7 + by auto
63.8 +
63.9 +lemma COND_DEF:"(If b t f) = (@x. ((b = True) --> (x = t)) & ((b = False) --> (x = f)))"
63.10 + by auto
63.11 +
63.12 +constdefs
63.13 + LET :: "['a \<Rightarrow> 'b,'a] \<Rightarrow> 'b"
63.14 + "LET f s == f s"
63.15 +
63.16 +lemma [hol4rew]: "LET f s = Let s f"
63.17 + by (simp add: LET_def Let_def)
63.18 +
63.19 +lemmas [hol4rew] = ONE_ONE_rew
63.20 +
63.21 +lemma bool_case_DEF: "(bool_case x y b) = (if b then x else y)"
63.22 + by simp;
63.23 +
63.24 +lemma INR_INL_11: "(ALL y x. (Inl x = Inl y) = (x = y)) & (ALL y x. (Inr x = Inr y) = (x = y))"
63.25 + by safe
63.26 +
63.27 +consts
63.28 + ISL :: "'a + 'b => bool"
63.29 + ISR :: "'a + 'b => bool"
63.30 +
63.31 +primrec ISL_def:
63.32 + "ISL (Inl x) = True"
63.33 + "ISL (Inr x) = False"
63.34 +
63.35 +primrec ISR_def:
63.36 + "ISR (Inl x) = False"
63.37 + "ISR (Inr x) = True"
63.38 +
63.39 +lemma ISL: "(ALL x. ISL (Inl x)) & (ALL y. ~ISL (Inr y))"
63.40 + by simp
63.41 +
63.42 +lemma ISR: "(ALL x. ISR (Inr x)) & (ALL y. ~ISR (Inl y))"
63.43 + by simp
63.44 +
63.45 +consts
63.46 + OUTL :: "'a + 'b => 'a"
63.47 + OUTR :: "'a + 'b => 'b"
63.48 +
63.49 +primrec OUTL_def:
63.50 + "OUTL (Inl x) = x"
63.51 +
63.52 +primrec OUTR_def:
63.53 + "OUTR (Inr x) = x"
63.54 +
63.55 +lemma OUTL: "OUTL (Inl x) = x"
63.56 + by simp
63.57 +
63.58 +lemma OUTR: "OUTR (Inr x) = x"
63.59 + by simp
63.60 +
63.61 +lemma sum_case_def: "(ALL f g x. sum_case f g (Inl x) = f x) & (ALL f g y. sum_case f g (Inr y) = g y)"
63.62 + by simp;
63.63 +
63.64 +lemma one: "ALL v. v = ()"
63.65 + by simp;
63.66 +
63.67 +lemma option_case_def: "(!u f. option_case u f None = u) & (!u f x. option_case u f (Some x) = f x)"
63.68 + by simp
63.69 +
63.70 +lemma OPTION_MAP_DEF: "(!f x. option_map f (Some x) = Some (f x)) & (!f. option_map f None = None)"
63.71 + by simp
63.72 +
63.73 +consts
63.74 + IS_SOME :: "'a option => bool"
63.75 + IS_NONE :: "'a option => bool"
63.76 +
63.77 +primrec IS_SOME_def:
63.78 + "IS_SOME (Some x) = True"
63.79 + "IS_SOME None = False"
63.80 +
63.81 +primrec IS_NONE_def:
63.82 + "IS_NONE (Some x) = False"
63.83 + "IS_NONE None = True"
63.84 +
63.85 +lemma IS_NONE_DEF: "(!x. IS_NONE (Some x) = False) & (IS_NONE None = True)"
63.86 + by simp
63.87 +
63.88 +lemma IS_SOME_DEF: "(!x. IS_SOME (Some x) = True) & (IS_SOME None = False)"
63.89 + by simp
63.90 +
63.91 +consts
63.92 + OPTION_JOIN :: "'a option option => 'a option"
63.93 +
63.94 +primrec OPTION_JOIN_def:
63.95 + "OPTION_JOIN None = None"
63.96 + "OPTION_JOIN (Some x) = x"
63.97 +
63.98 +lemma OPTION_JOIN_DEF: "(OPTION_JOIN None = None) & (ALL x. OPTION_JOIN (Some x) = x)"
63.99 + by simp;
63.100 +
63.101 +lemma PAIR: "(fst x,snd x) = x"
63.102 + by simp
63.103 +
63.104 +lemma PAIR_MAP: "prod_fun f g p = (f (fst p),g (snd p))"
63.105 + by (simp add: prod_fun_def split_def)
63.106 +
63.107 +lemma pair_case_def: "split = split"
63.108 + ..;
63.109 +
63.110 +lemma LESS_OR_EQ: "m <= (n::nat) = (m < n | m = n)"
63.111 + by auto
63.112 +
63.113 +constdefs
63.114 + nat_gt :: "nat => nat => bool"
63.115 + "nat_gt == %m n. n < m"
63.116 + nat_ge :: "nat => nat => bool"
63.117 + "nat_ge == %m n. nat_gt m n | m = n"
63.118 +
63.119 +lemma [hol4rew]: "nat_gt m n = (n < m)"
63.120 + by (simp add: nat_gt_def)
63.121 +
63.122 +lemma [hol4rew]: "nat_ge m n = (n <= m)"
63.123 + by (auto simp add: nat_ge_def nat_gt_def)
63.124 +
63.125 +lemma GREATER_DEF: "ALL m n. (n < m) = (n < m)"
63.126 + by simp
63.127 +
63.128 +lemma GREATER_OR_EQ: "ALL m n. n <= (m::nat) = (n < m | m = n)"
63.129 + by auto
63.130 +
63.131 +lemma LESS_DEF: "m < n = (? P. (!n. P (Suc n) --> P n) & P m & ~P n)"
63.132 +proof safe
63.133 + assume "m < n"
63.134 + def P == "%n. n <= m"
63.135 + have "(!n. P (Suc n) \<longrightarrow> P n) & P m & ~P n"
63.136 + proof (auto simp add: P_def)
63.137 + assume "n <= m"
63.138 + from prems
63.139 + show False
63.140 + by auto
63.141 + qed
63.142 + thus "? P. (!n. P (Suc n) \<longrightarrow> P n) & P m & ~P n"
63.143 + by auto
63.144 +next
63.145 + fix P
63.146 + assume alln: "!n. P (Suc n) \<longrightarrow> P n"
63.147 + assume pm: "P m"
63.148 + assume npn: "~P n"
63.149 + have "!k q. q + k = m \<longrightarrow> P q"
63.150 + proof
63.151 + fix k
63.152 + show "!q. q + k = m \<longrightarrow> P q"
63.153 + proof (induct k,simp_all)
63.154 + show "P m" .
63.155 + next
63.156 + fix k
63.157 + assume ind: "!q. q + k = m \<longrightarrow> P q"
63.158 + show "!q. Suc (q + k) = m \<longrightarrow> P q"
63.159 + proof (rule+)
63.160 + fix q
63.161 + assume "Suc (q + k) = m"
63.162 + hence "(Suc q) + k = m"
63.163 + by simp
63.164 + with ind
63.165 + have psq: "P (Suc q)"
63.166 + by simp
63.167 + from alln
63.168 + have "P (Suc q) --> P q"
63.169 + ..
63.170 + with psq
63.171 + show "P q"
63.172 + by simp
63.173 + qed
63.174 + qed
63.175 + qed
63.176 + hence "!q. q + (m - n) = m \<longrightarrow> P q"
63.177 + ..
63.178 + hence hehe: "n + (m - n) = m \<longrightarrow> P n"
63.179 + ..
63.180 + show "m < n"
63.181 + proof (rule classical)
63.182 + assume "~(m<n)"
63.183 + hence "n <= m"
63.184 + by simp
63.185 + with hehe
63.186 + have "P n"
63.187 + by simp
63.188 + with npn
63.189 + show "m < n"
63.190 + ..
63.191 + qed
63.192 +qed;
63.193 +
63.194 +constdefs
63.195 + FUNPOW :: "('a => 'a) => nat => 'a => 'a"
63.196 + "FUNPOW f n == f ^ n"
63.197 +
63.198 +lemma FUNPOW: "(ALL f x. (f ^ 0) x = x) &
63.199 + (ALL f n x. (f ^ Suc n) x = (f ^ n) (f x))"
63.200 +proof auto
63.201 + fix f n x
63.202 + have "ALL x. f ((f ^ n) x) = (f ^ n) (f x)"
63.203 + by (induct n,auto)
63.204 + thus "f ((f ^ n) x) = (f ^ n) (f x)"
63.205 + ..
63.206 +qed
63.207 +
63.208 +lemma [hol4rew]: "FUNPOW f n = f ^ n"
63.209 + by (simp add: FUNPOW_def)
63.210 +
63.211 +lemma ADD: "(!n. (0::nat) + n = n) & (!m n. Suc m + n = Suc (m + n))"
63.212 + by simp
63.213 +
63.214 +lemma MULT: "(!n. (0::nat) * n = 0) & (!m n. Suc m * n = m * n + n)"
63.215 + by simp
63.216 +
63.217 +lemma SUB: "(!m. (0::nat) - m = 0) & (!m n. (Suc m) - n = (if m < n then 0 else Suc (m - n)))"
63.218 + apply simp
63.219 + apply arith
63.220 + done
63.221 +
63.222 +lemma MAX_DEF: "max (m::nat) n = (if m < n then n else m)"
63.223 + by (simp add: max_def)
63.224 +
63.225 +lemma MIN_DEF: "min (m::nat) n = (if m < n then m else n)"
63.226 + by (simp add: min_def)
63.227 +
63.228 +lemma DIVISION: "(0::nat) < n --> (!k. (k = k div n * n + k mod n) & k mod n < n)"
63.229 + by simp
63.230 +
63.231 +constdefs
63.232 + ALT_ZERO :: nat
63.233 + "ALT_ZERO == 0"
63.234 + NUMERAL_BIT1 :: "nat \<Rightarrow> nat"
63.235 + "NUMERAL_BIT1 n == n + (n + Suc 0)"
63.236 + NUMERAL_BIT2 :: "nat \<Rightarrow> nat"
63.237 + "NUMERAL_BIT2 n == n + (n + Suc (Suc 0))"
63.238 + NUMERAL :: "nat \<Rightarrow> nat"
63.239 + "NUMERAL x == x"
63.240 +
63.241 +lemma [hol4rew]: "NUMERAL ALT_ZERO = 0"
63.242 + by (simp add: ALT_ZERO_def NUMERAL_def)
63.243 +
63.244 +lemma [hol4rew]: "NUMERAL (NUMERAL_BIT1 ALT_ZERO) = 1"
63.245 + by (simp add: ALT_ZERO_def NUMERAL_BIT1_def NUMERAL_def)
63.246 +
63.247 +lemma [hol4rew]: "NUMERAL (NUMERAL_BIT2 ALT_ZERO) = 2"
63.248 + by (simp add: ALT_ZERO_def NUMERAL_BIT2_def NUMERAL_def)
63.249 +
63.250 +lemma EXP: "(!m. m ^ 0 = (1::nat)) & (!m n. m ^ Suc n = m * (m::nat) ^ n)"
63.251 + by auto
63.252 +
63.253 +lemma num_case_def: "(!b f. nat_case b f 0 = b) & (!b f n. nat_case b f (Suc n) = f n)"
63.254 + by simp;
63.255 +
63.256 +lemma divides_def: "(a::nat) dvd b = (? q. b = q * a)"
63.257 + by (auto simp add: dvd_def);
63.258 +
63.259 +lemma list_case_def: "(!v f. list_case v f [] = v) & (!v f a0 a1. list_case v f (a0#a1) = f a0 a1)"
63.260 + by simp
63.261 +
63.262 +consts
63.263 + list_size :: "('a \<Rightarrow> nat) \<Rightarrow> 'a list \<Rightarrow> nat"
63.264 +
63.265 +primrec
63.266 + "list_size f [] = 0"
63.267 + "list_size f (a0#a1) = 1 + (f a0 + list_size f a1)"
63.268 +
63.269 +lemma list_size_def: "(!f. list_size f [] = 0) &
63.270 + (!f a0 a1. list_size f (a0#a1) = 1 + (f a0 + list_size f a1))"
63.271 + by simp
63.272 +
63.273 +lemma list_case_cong: "! M M' v f. M = M' & (M' = [] \<longrightarrow> v = v') &
63.274 + (!a0 a1. (M' = a0#a1) \<longrightarrow> (f a0 a1 = f' a0 a1)) -->
63.275 + (list_case v f M = list_case v' f' M')"
63.276 +proof clarify
63.277 + fix M M' v f
63.278 + assume "M' = [] \<longrightarrow> v = v'"
63.279 + and "!a0 a1. M' = a0 # a1 \<longrightarrow> f a0 a1 = f' a0 a1"
63.280 + show "list_case v f M' = list_case v' f' M'"
63.281 + proof (rule List.list.case_cong)
63.282 + show "M' = M'"
63.283 + ..
63.284 + next
63.285 + assume "M' = []"
63.286 + with prems
63.287 + show "v = v'"
63.288 + by auto
63.289 + next
63.290 + fix a0 a1
63.291 + assume "M' = a0 # a1"
63.292 + with prems
63.293 + show "f a0 a1 = f' a0 a1"
63.294 + by auto
63.295 + qed
63.296 +qed
63.297 +
63.298 +lemma list_Axiom: "ALL f0 f1. EX fn. (fn [] = f0) & (ALL a0 a1. fn (a0#a1) = f1 a0 a1 (fn a1))"
63.299 +proof safe
63.300 + fix f0 f1
63.301 + def fn == "list_rec f0 f1"
63.302 + have "fn [] = f0 & (ALL a0 a1. fn (a0 # a1) = f1 a0 a1 (fn a1))"
63.303 + by (simp add: fn_def)
63.304 + thus "EX fn. fn [] = f0 & (ALL a0 a1. fn (a0 # a1) = f1 a0 a1 (fn a1))"
63.305 + by auto
63.306 +qed
63.307 +
63.308 +lemma list_Axiom_old: "EX! fn. (fn [] = x) & (ALL h t. fn (h#t) = f (fn t) h t)"
63.309 +proof safe
63.310 + def fn == "list_rec x (%h t r. f r h t)"
63.311 + have "fn [] = x & (ALL h t. fn (h # t) = f (fn t) h t)"
63.312 + by (simp add: fn_def)
63.313 + thus "EX fn. fn [] = x & (ALL h t. fn (h # t) = f (fn t) h t)"
63.314 + by auto
63.315 +next
63.316 + fix fn1 fn2
63.317 + assume "ALL h t. fn1 (h # t) = f (fn1 t) h t"
63.318 + assume "ALL h t. fn2 (h # t) = f (fn2 t) h t"
63.319 + assume "fn2 [] = fn1 []"
63.320 + show "fn1 = fn2"
63.321 + proof
63.322 + fix xs
63.323 + show "fn1 xs = fn2 xs"
63.324 + by (induct xs,simp_all add: prems)
63.325 + qed
63.326 +qed
63.327 +
63.328 +lemma NULL_DEF: "(null [] = True) & (!h t. null (h # t) = False)"
63.329 + by simp
63.330 +
63.331 +constdefs
63.332 + sum :: "nat list \<Rightarrow> nat"
63.333 + "sum l == foldr (op +) l 0"
63.334 +
63.335 +lemma SUM: "(sum [] = 0) & (!h t. sum (h#t) = h + sum t)"
63.336 + by (simp add: sum_def)
63.337 +
63.338 +lemma APPEND: "(!l. [] @ l = l) & (!l1 l2 h. (h#l1) @ l2 = h# l1 @ l2)"
63.339 + by simp
63.340 +
63.341 +lemma FLAT: "(concat [] = []) & (!h t. concat (h#t) = h @ (concat t))"
63.342 + by simp
63.343 +
63.344 +lemma LENGTH: "(length [] = 0) & (!h t. length (h#t) = Suc (length t))"
63.345 + by simp
63.346 +
63.347 +lemma MAP: "(!f. map f [] = []) & (!f h t. map f (h#t) = f h#map f t)"
63.348 + by simp
63.349 +
63.350 +lemma MEM: "(!x. x mem [] = False) & (!x h t. x mem (h#t) = ((x = h) | x mem t))"
63.351 + by auto
63.352 +
63.353 +lemma FILTER: "(!P. filter P [] = []) & (!P h t.
63.354 + filter P (h#t) = (if P h then h#filter P t else filter P t))"
63.355 + by simp
63.356 +
63.357 +lemma REPLICATE: "(ALL x. replicate 0 x = []) &
63.358 + (ALL n x. replicate (Suc n) x = x # replicate n x)"
63.359 + by simp
63.360 +
63.361 +constdefs
63.362 + FOLDR :: "[['a,'b]\<Rightarrow>'b,'b,'a list] \<Rightarrow> 'b"
63.363 + "FOLDR f e l == foldr f l e"
63.364 +
63.365 +lemma [hol4rew]: "FOLDR f e l = foldr f l e"
63.366 + by (simp add: FOLDR_def)
63.367 +
63.368 +lemma FOLDR: "(!f e. foldr f [] e = e) & (!f e x l. foldr f (x#l) e = f x (foldr f l e))"
63.369 + by simp
63.370 +
63.371 +lemma FOLDL: "(!f e. foldl f e [] = e) & (!f e x l. foldl f e (x#l) = foldl f (f e x) l)"
63.372 + by simp
63.373 +
63.374 +lemma EVERY_DEF: "(!P. list_all P [] = True) & (!P h t. list_all P (h#t) = (P h & list_all P t))"
63.375 + by simp
63.376 +
63.377 +consts
63.378 + list_exists :: "['a \<Rightarrow> bool,'a list] \<Rightarrow> bool"
63.379 +
63.380 +primrec
63.381 + list_exists_Nil: "list_exists P Nil = False"
63.382 + list_exists_Cons: "list_exists P (x#xs) = (if P x then True else list_exists P xs)"
63.383 +
63.384 +lemma list_exists_DEF: "(!P. list_exists P [] = False) &
63.385 + (!P h t. list_exists P (h#t) = (P h | list_exists P t))"
63.386 + by simp
63.387 +
63.388 +consts
63.389 + map2 :: "[['a,'b]\<Rightarrow>'c,'a list,'b list] \<Rightarrow> 'c list"
63.390 +
63.391 +primrec
63.392 + map2_Nil: "map2 f [] l2 = []"
63.393 + map2_Cons: "map2 f (x#xs) l2 = f x (hd l2) # map2 f xs (tl l2)"
63.394 +
63.395 +lemma MAP2: "(!f. map2 f [] [] = []) & (!f h1 t1 h2 t2. map2 f (h1#t1) (h2#t2) = f h1 h2#map2 f t1 t2)"
63.396 + by simp
63.397 +
63.398 +lemma list_INDUCT: "\<lbrakk> P [] ; !t. P t \<longrightarrow> (!h. P (h#t)) \<rbrakk> \<Longrightarrow> !l. P l"
63.399 +proof
63.400 + fix l
63.401 + assume "P []"
63.402 + assume allt: "!t. P t \<longrightarrow> (!h. P (h # t))"
63.403 + show "P l"
63.404 + proof (induct l)
63.405 + show "P []" .
63.406 + next
63.407 + fix h t
63.408 + assume "P t"
63.409 + with allt
63.410 + have "!h. P (h # t)"
63.411 + by auto
63.412 + thus "P (h # t)"
63.413 + ..
63.414 + qed
63.415 +qed
63.416 +
63.417 +lemma list_CASES: "(l = []) | (? t h. l = h#t)"
63.418 + by (induct l,auto)
63.419 +
63.420 +constdefs
63.421 + ZIP :: "'a list * 'b list \<Rightarrow> ('a * 'b) list"
63.422 + "ZIP == %(a,b). zip a b"
63.423 +
63.424 +lemma ZIP: "(zip [] [] = []) &
63.425 + (!x1 l1 x2 l2. zip (x1#l1) (x2#l2) = (x1,x2)#zip l1 l2)"
63.426 + by simp
63.427 +
63.428 +lemma [hol4rew]: "ZIP (a,b) = zip a b"
63.429 + by (simp add: ZIP_def)
63.430 +
63.431 +consts
63.432 + unzip :: "('a * 'b) list \<Rightarrow> 'a list * 'b list"
63.433 +
63.434 +primrec
63.435 + unzip_Nil: "unzip [] = ([],[])"
63.436 + unzip_Cons: "unzip (xy#xys) = (let zs = unzip xys in (fst xy # fst zs,snd xy # snd zs))"
63.437 +
63.438 +lemma UNZIP: "(unzip [] = ([],[])) &
63.439 + (!x l. unzip (x#l) = (fst x#fst (unzip l),snd x#snd (unzip l)))"
63.440 + by (simp add: Let_def)
63.441 +
63.442 +lemma REVERSE: "(rev [] = []) & (!h t. rev (h#t) = (rev t) @ [h])"
63.443 + by simp;
63.444 +
63.445 +lemma REAL_SUP_ALLPOS: "\<lbrakk> ALL x. P (x::real) \<longrightarrow> 0 < x ; EX x. P x; EX z. ALL x. P x \<longrightarrow> x < z \<rbrakk> \<Longrightarrow> EX s. ALL y. (EX x. P x & y < x) = (y < s)"
63.446 +proof safe
63.447 + fix x z
63.448 + assume allx: "ALL x. P x \<longrightarrow> 0 < x"
63.449 + assume px: "P x"
63.450 + assume allx': "ALL x. P x \<longrightarrow> x < z"
63.451 + have "EX s. ALL y. (EX x : Collect P. y < x) = (y < s)"
63.452 + proof (rule posreal_complete)
63.453 + show "ALL x : Collect P. 0 < x"
63.454 + proof safe
63.455 + fix x
63.456 + assume "P x"
63.457 + from allx
63.458 + have "P x \<longrightarrow> 0 < x"
63.459 + ..
63.460 + thus "0 < x"
63.461 + by (simp add: prems)
63.462 + qed
63.463 + next
63.464 + from px
63.465 + show "EX x. x : Collect P"
63.466 + by auto
63.467 + next
63.468 + from allx'
63.469 + show "EX y. ALL x : Collect P. x < y"
63.470 + apply simp
63.471 + ..
63.472 + qed
63.473 + thus "EX s. ALL y. (EX x. P x & y < x) = (y < s)"
63.474 + by simp
63.475 +qed
63.476 +
63.477 +lemma REAL_10: "~((1::real) = 0)"
63.478 + by simp
63.479 +
63.480 +lemma REAL_ADD_ASSOC: "(x::real) + (y + z) = x + y + z"
63.481 + by simp
63.482 +
63.483 +lemma REAL_MUL_ASSOC: "(x::real) * (y * z) = x * y * z"
63.484 + by simp
63.485 +
63.486 +lemma REAL_ADD_LINV: "-x + x = (0::real)"
63.487 + by simp
63.488 +
63.489 +lemma REAL_MUL_LINV: "x ~= (0::real) ==> inverse x * x = 1"
63.490 + by simp
63.491 +
63.492 +lemma REAL_LT_TOTAL: "((x::real) = y) | x < y | y < x"
63.493 + by auto;
63.494 +
63.495 +lemma [hol4rew]: "real (0::nat) = 0"
63.496 + by simp
63.497 +
63.498 +lemma [hol4rew]: "real (1::nat) = 1"
63.499 + by simp
63.500 +
63.501 +lemma [hol4rew]: "real (2::nat) = 2"
63.502 + by simp
63.503 +
63.504 +lemma real_lte: "((x::real) <= y) = (~(y < x))"
63.505 + by auto
63.506 +
63.507 +lemma real_of_num: "((0::real) = 0) & (!n. real (Suc n) = real n + 1)"
63.508 + by (simp add: real_of_nat_Suc)
63.509 +
63.510 +lemma abs: "abs (x::real) = (if 0 <= x then x else -x)"
63.511 + by (simp add: real_abs_def)
63.512 +
63.513 +lemma pow: "(!x::real. x ^ 0 = 1) & (!x::real. ALL n. x ^ (Suc n) = x * x ^ n)"
63.514 + by simp;
63.515 +
63.516 +constdefs
63.517 + real_gt :: "real => real => bool"
63.518 + "real_gt == %x y. y < x"
63.519 +
63.520 +lemma [hol4rew]: "real_gt x y = (y < x)"
63.521 + by (simp add: real_gt_def)
63.522 +
63.523 +lemma real_gt: "ALL x (y::real). (y < x) = (y < x)"
63.524 + by simp
63.525 +
63.526 +constdefs
63.527 + real_ge :: "real => real => bool"
63.528 + "real_ge x y == y <= x"
63.529 +
63.530 +lemma [hol4rew]: "real_ge x y = (y <= x)"
63.531 + by (simp add: real_ge_def)
63.532 +
63.533 +lemma real_ge: "ALL x y. (y <= x) = (y <= x)"
63.534 + by simp
63.535 +
63.536 +end
64.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
64.2 +++ b/src/HOL/Import/HOL4Setup.thy Fri Apr 02 17:37:45 2004 +0200
64.3 @@ -0,0 +1,166 @@
64.4 +theory HOL4Setup = MakeEqual
64.5 + files ("proof_kernel.ML") ("replay.ML") ("hol4rews.ML") ("import_package.ML"):
64.6 +
64.7 +section {* General Setup *}
64.8 +
64.9 +lemma eq_imp: "P = Q \<Longrightarrow> P \<longrightarrow> Q"
64.10 + by auto
64.11 +
64.12 +lemma HOLallI: "(!! bogus. P bogus) \<Longrightarrow> (ALL bogus. P bogus)"
64.13 +proof -
64.14 + assume "!! bogus. P bogus"
64.15 + thus "ALL x. P x"
64.16 + ..
64.17 +qed
64.18 +
64.19 +consts
64.20 + ONE_ONE :: "('a => 'b) => bool"
64.21 + ONTO :: "('a => 'b) => bool"
64.22 +
64.23 +defs
64.24 + ONE_ONE_DEF: "ONE_ONE f == ALL x y. f x = f y --> x = y"
64.25 + ONTO_DEF : "ONTO f == ALL y. EX x. y = f x"
64.26 +
64.27 +lemma ONE_ONE_rew: "ONE_ONE f = inj_on f UNIV"
64.28 + by (simp add: ONE_ONE_DEF inj_on_def)
64.29 +
64.30 +lemma INFINITY_AX: "EX (f::ind \<Rightarrow> ind). (inj f & ~(ONTO f))"
64.31 +proof (rule exI,safe)
64.32 + show "inj Suc_Rep"
64.33 + by (rule inj_Suc_Rep)
64.34 +next
64.35 + assume "ONTO Suc_Rep"
64.36 + hence "ALL y. EX x. y = Suc_Rep x"
64.37 + by (simp add: ONTO_DEF surj_def)
64.38 + hence "EX x. Zero_Rep = Suc_Rep x"
64.39 + by (rule spec)
64.40 + thus False
64.41 + proof (rule exE)
64.42 + fix x
64.43 + assume "Zero_Rep = Suc_Rep x"
64.44 + hence "Suc_Rep x = Zero_Rep"
64.45 + ..
64.46 + with Suc_Rep_not_Zero_Rep
64.47 + show False
64.48 + ..
64.49 + qed
64.50 +qed
64.51 +
64.52 +lemma EXISTS_DEF: "Ex P = P (Eps P)"
64.53 +proof (rule iffI)
64.54 + assume "Ex P"
64.55 + thus "P (Eps P)"
64.56 + ..
64.57 +next
64.58 + assume "P (Eps P)"
64.59 + thus "Ex P"
64.60 + ..
64.61 +qed
64.62 +
64.63 +consts
64.64 + TYPE_DEFINITION :: "('a => bool) => ('b => 'a) => bool"
64.65 +
64.66 +defs
64.67 + TYPE_DEFINITION: "TYPE_DEFINITION p rep == ((ALL x y. (rep x = rep y) --> (x = y)) & (ALL x. (p x = (EX y. x = rep y))))"
64.68 +
64.69 +lemma ex_imp_nonempty: "Ex P ==> EX x. x : (Collect P)"
64.70 + by simp
64.71 +
64.72 +lemma light_ex_imp_nonempty: "P t ==> EX x. x : (Collect P)"
64.73 +proof -
64.74 + assume "P t"
64.75 + hence "EX x. P x"
64.76 + ..
64.77 + thus ?thesis
64.78 + by (rule ex_imp_nonempty)
64.79 +qed
64.80 +
64.81 +lemma light_imp_as: "[| Q --> P; P --> Q |] ==> P = Q"
64.82 + by blast
64.83 +
64.84 +lemma typedef_hol2hol4:
64.85 + assumes a: "type_definition (Rep::'a=>'b) Abs (Collect P)"
64.86 + shows "EX rep. TYPE_DEFINITION P (rep::'a=>'b)"
64.87 +proof -
64.88 + from a
64.89 + have td: "(ALL x. P (Rep x)) & (ALL x. Abs (Rep x) = x) & (ALL y. P y \<longrightarrow> Rep (Abs y) = y)"
64.90 + by (simp add: type_definition_def)
64.91 + have ed: "TYPE_DEFINITION P Rep"
64.92 + proof (auto simp add: TYPE_DEFINITION)
64.93 + fix x y
64.94 + assume "Rep x = Rep y"
64.95 + from td have "x = Abs (Rep x)"
64.96 + by auto
64.97 + also have "Abs (Rep x) = Abs (Rep y)"
64.98 + by (simp add: prems)
64.99 + also from td have "Abs (Rep y) = y"
64.100 + by auto
64.101 + finally show "x = y" .
64.102 + next
64.103 + fix x
64.104 + assume "P x"
64.105 + with td
64.106 + have "Rep (Abs x) = x"
64.107 + by auto
64.108 + hence "x = Rep (Abs x)"
64.109 + ..
64.110 + thus "EX y. x = Rep y"
64.111 + ..
64.112 + next
64.113 + fix y
64.114 + from td
64.115 + show "P (Rep y)"
64.116 + by auto
64.117 + qed
64.118 + show ?thesis
64.119 + apply (rule exI [of _ Rep])
64.120 + apply (rule ed)
64.121 + .
64.122 +qed
64.123 +
64.124 +lemma typedef_hol2hollight:
64.125 + assumes a: "type_definition (Rep::'a=>'b) Abs (Collect P)"
64.126 + shows "(Abs (Rep a) = a) & (P r = (Rep (Abs r) = r))"
64.127 +proof
64.128 + from a
64.129 + show "Abs (Rep a) = a"
64.130 + by (rule type_definition.Rep_inverse)
64.131 +next
64.132 + show "P r = (Rep (Abs r) = r)"
64.133 + proof
64.134 + assume "P r"
64.135 + hence "r \<in> (Collect P)"
64.136 + by simp
64.137 + with a
64.138 + show "Rep (Abs r) = r"
64.139 + by (rule type_definition.Abs_inverse)
64.140 + next
64.141 + assume ra: "Rep (Abs r) = r"
64.142 + from a
64.143 + have "Rep (Abs r) \<in> (Collect P)"
64.144 + by (rule type_definition.Rep)
64.145 + thus "P r"
64.146 + by (simp add: ra)
64.147 + qed
64.148 +qed
64.149 +
64.150 +lemma termspec_help: "[| Ex P ; c == Eps P |] ==> P c"
64.151 + apply simp
64.152 + apply (rule someI_ex)
64.153 + .
64.154 +
64.155 +lemma typedef_helper: "EX x. P x \<Longrightarrow> EX x. x \<in> (Collect P)"
64.156 + by simp
64.157 +
64.158 +use "hol4rews.ML"
64.159 +
64.160 +setup hol4_setup
64.161 +parse_ast_translation smarter_trueprop_parsing
64.162 +
64.163 +use "proof_kernel.ML"
64.164 +use "replay.ML"
64.165 +use "import_package.ML"
64.166 +
64.167 +setup ImportPackage.setup
64.168 +
64.169 +end
65.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
65.2 +++ b/src/HOL/Import/HOL4Syntax.thy Fri Apr 02 17:37:45 2004 +0200
65.3 @@ -0,0 +1,6 @@
65.4 +theory HOL4Syntax = HOL4Setup
65.5 + files "import_syntax.ML":
65.6 +
65.7 +ML {* HOL4ImportSyntax.setup() *}
65.8 +
65.9 +end
65.10 \ No newline at end of file
66.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
66.2 +++ b/src/HOL/Import/MakeEqual.thy Fri Apr 02 17:37:45 2004 +0200
66.3 @@ -0,0 +1,68 @@
66.4 +theory MakeEqual = Main
66.5 + files "shuffler.ML":
66.6 +
66.7 +setup Shuffler.setup
66.8 +
66.9 +lemma conj_norm [shuffle_rule]: "(A & B ==> PROP C) == ([| A ; B |] ==> PROP C)"
66.10 +proof
66.11 + assume "A & B ==> PROP C" A B
66.12 + thus "PROP C"
66.13 + by auto
66.14 +next
66.15 + assume "[| A; B |] ==> PROP C" "A & B"
66.16 + thus "PROP C"
66.17 + by auto
66.18 +qed
66.19 +
66.20 +lemma imp_norm [shuffle_rule]: "(Trueprop (A --> B)) == (A ==> B)"
66.21 +proof
66.22 + assume "A --> B" A
66.23 + thus B ..
66.24 +next
66.25 + assume "A ==> B"
66.26 + thus "A --> B"
66.27 + by auto
66.28 +qed
66.29 +
66.30 +lemma all_norm [shuffle_rule]: "(Trueprop (ALL x. P x)) == (!!x. P x)"
66.31 +proof
66.32 + fix x
66.33 + assume "ALL x. P x"
66.34 + thus "P x" ..
66.35 +next
66.36 + assume "!!x. P x"
66.37 + thus "ALL x. P x"
66.38 + ..
66.39 +qed
66.40 +
66.41 +lemma ex_norm [shuffle_rule]: "(EX x. P x ==> PROP Q) == (!!x. P x ==> PROP Q)"
66.42 +proof
66.43 + fix x
66.44 + assume ex: "EX x. P x ==> PROP Q"
66.45 + assume "P x"
66.46 + hence "EX x. P x" ..
66.47 + with ex show "PROP Q" .
66.48 +next
66.49 + assume allx: "!!x. P x ==> PROP Q"
66.50 + assume "EX x. P x"
66.51 + hence p: "P (SOME x. P x)"
66.52 + ..
66.53 + from allx
66.54 + have "P (SOME x. P x) ==> PROP Q"
66.55 + .
66.56 + with p
66.57 + show "PROP Q"
66.58 + by auto
66.59 +qed
66.60 +
66.61 +lemma eq_norm [shuffle_rule]: "Trueprop (t = u) == (t == u)"
66.62 +proof
66.63 + assume "t = u"
66.64 + thus "t == u" by simp
66.65 +next
66.66 + assume "t == u"
66.67 + thus "t = u"
66.68 + by simp
66.69 +qed
66.70 +
66.71 +end
67.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
67.2 +++ b/src/HOL/Import/ROOT.ML Fri Apr 02 17:37:45 2004 +0200
67.3 @@ -0,0 +1,2 @@
67.4 +use_thy "HOL4Compat";
67.5 +use_thy "HOL4Syntax";
68.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
68.2 +++ b/src/HOL/Import/hol4rews.ML Fri Apr 02 17:37:45 2004 +0200
68.3 @@ -0,0 +1,773 @@
68.4 +structure StringPair = TableFun(type key = string * string val ord = prod_ord string_ord string_ord);
68.5 +
68.6 +type holthm = (term * term) list * thm
68.7 +
68.8 +datatype ImportStatus =
68.9 + NoImport
68.10 + | Generating of string
68.11 + | Replaying of string
68.12 +
68.13 +structure HOL4DefThyArgs: THEORY_DATA_ARGS =
68.14 +struct
68.15 +val name = "HOL4/import_status"
68.16 +type T = ImportStatus
68.17 +val empty = NoImport
68.18 +val copy = I
68.19 +val prep_ext = I
68.20 +fun merge (NoImport,NoImport) = NoImport
68.21 + | merge _ = (warning "Import status set during merge"; NoImport)
68.22 +fun print sg import_status =
68.23 + Pretty.writeln (Pretty.str (case import_status of NoImport => "No current import" | Generating thyname => ("Generating " ^ thyname) | Replaying thyname => ("Replaying " ^ thyname)))
68.24 +end;
68.25 +
68.26 +structure HOL4DefThy = TheoryDataFun(HOL4DefThyArgs);
68.27 +
68.28 +structure ImportSegmentArgs: THEORY_DATA_ARGS =
68.29 +struct
68.30 +val name = "HOL4/import"
68.31 +type T = string
68.32 +val empty = ""
68.33 +val copy = I
68.34 +val prep_ext = I
68.35 +fun merge ("",arg) = arg
68.36 + | merge (arg,"") = arg
68.37 + | merge (s1,s2) =
68.38 + if s1 = s2
68.39 + then s1
68.40 + else error "Trying to merge two different import segments"
68.41 +fun print sg import_segment =
68.42 + Pretty.writeln (Pretty.str ("Import segment: " ^ import_segment))
68.43 +end;
68.44 +
68.45 +structure ImportSegment = TheoryDataFun(ImportSegmentArgs);
68.46 +
68.47 +val get_import_segment = ImportSegment.get
68.48 +val set_import_segment = ImportSegment.put
68.49 +
68.50 +structure HOL4UNamesArgs: THEORY_DATA_ARGS =
68.51 +struct
68.52 +val name = "HOL4/used_names"
68.53 +type T = string list
68.54 +val empty = []
68.55 +val copy = I
68.56 +val prep_ext = I
68.57 +fun merge ([],[]) = []
68.58 + | merge _ = error "Used names not empty during merge"
68.59 +fun print sg used_names =
68.60 + Pretty.writeln (Pretty.str "Printing of HOL4/used_names Not implemented")
68.61 +end;
68.62 +
68.63 +structure HOL4UNames = TheoryDataFun(HOL4UNamesArgs);
68.64 +
68.65 +structure HOL4DumpArgs: THEORY_DATA_ARGS =
68.66 +struct
68.67 +val name = "HOL4/dump_data"
68.68 +type T = string * string * string list
68.69 +val empty = ("","",[])
68.70 +val copy = I
68.71 +val prep_ext = I
68.72 +fun merge (("","",[]),("","",[])) = ("","",[])
68.73 + | merge _ = error "Dump data not empty during merge"
68.74 +fun print sg dump_data =
68.75 + Pretty.writeln (Pretty.str "Printing of HOL4/dump_data Not implemented")
68.76 +end;
68.77 +
68.78 +structure HOL4Dump = TheoryDataFun(HOL4DumpArgs);
68.79 +
68.80 +structure HOL4MovesArgs: THEORY_DATA_ARGS =
68.81 +struct
68.82 +val name = "HOL4/moves"
68.83 +type T = string Symtab.table
68.84 +val empty = Symtab.empty
68.85 +val copy = I
68.86 +val prep_ext = I
68.87 +val merge = Symtab.merge (K true)
68.88 +fun print sg tab =
68.89 + Pretty.writeln (Pretty.big_list "HOL4 moves:"
68.90 + (Symtab.foldl (fn (xl,(bef,aft)) => (Pretty.str (bef ^ " --> " ^ aft)::xl)) ([],tab)))
68.91 +end;
68.92 +
68.93 +structure HOL4Moves = TheoryDataFun(HOL4MovesArgs);
68.94 +
68.95 +structure HOL4ImportsArgs: THEORY_DATA_ARGS =
68.96 +struct
68.97 +val name = "HOL4/imports"
68.98 +type T = string Symtab.table
68.99 +val empty = Symtab.empty
68.100 +val copy = I
68.101 +val prep_ext = I
68.102 +val merge = Symtab.merge (K true)
68.103 +fun print sg tab =
68.104 + Pretty.writeln (Pretty.big_list "HOL4 imports:"
68.105 + (Symtab.foldl (fn (xl,(thyname,segname)) => (Pretty.str (thyname ^ " imported from segment " ^ segname)::xl)) ([],tab)))
68.106 +end;
68.107 +
68.108 +structure HOL4Imports = TheoryDataFun(HOL4ImportsArgs);
68.109 +
68.110 +fun get_segment2 thyname thy =
68.111 + let
68.112 + val imps = HOL4Imports.get thy
68.113 + in
68.114 + Symtab.lookup(imps,thyname)
68.115 + end
68.116 +
68.117 +fun set_segment thyname segname thy =
68.118 + let
68.119 + val imps = HOL4Imports.get thy
68.120 + val imps' = Symtab.update_new((thyname,segname),imps)
68.121 + in
68.122 + HOL4Imports.put imps' thy
68.123 + end
68.124 +
68.125 +structure HOL4CMovesArgs: THEORY_DATA_ARGS =
68.126 +struct
68.127 +val name = "HOL4/constant_moves"
68.128 +type T = string Symtab.table
68.129 +val empty = Symtab.empty
68.130 +val copy = I
68.131 +val prep_ext = I
68.132 +val merge = Symtab.merge (K true)
68.133 +fun print sg tab =
68.134 + Pretty.writeln (Pretty.big_list "HOL4 constant moves:"
68.135 + (Symtab.foldl (fn (xl,(bef,aft)) => (Pretty.str (bef ^ " --> " ^ aft)::xl)) ([],tab)))
68.136 +end;
68.137 +
68.138 +structure HOL4CMoves = TheoryDataFun(HOL4CMovesArgs);
68.139 +
68.140 +structure HOL4MapsArgs: THEORY_DATA_ARGS =
68.141 +struct
68.142 +val name = "HOL4/mappings"
68.143 +type T = (string option) StringPair.table
68.144 +val empty = StringPair.empty
68.145 +val copy = I
68.146 +val prep_ext = I
68.147 +val merge = StringPair.merge (K true)
68.148 +fun print sg tab =
68.149 + Pretty.writeln (Pretty.big_list "HOL4 mappings:"
68.150 + (StringPair.foldl (fn (xl,((bthy,bthm),isathm)) => (Pretty.str (bthy ^ "." ^ bthm ^ (case isathm of Some th => " --> " ^ th | None => "IGNORED"))::xl)) ([],tab)))
68.151 +end;
68.152 +
68.153 +structure HOL4Maps = TheoryDataFun(HOL4MapsArgs);
68.154 +
68.155 +structure HOL4ThmsArgs: THEORY_DATA_ARGS =
68.156 +struct
68.157 +val name = "HOL4/theorems"
68.158 +type T = holthm StringPair.table
68.159 +val empty = StringPair.empty
68.160 +val copy = I
68.161 +val prep_ext = I
68.162 +val merge = StringPair.merge (K true)
68.163 +fun print sg tab =
68.164 + Pretty.writeln (Pretty.big_list "HOL4 mappings:"
68.165 + (StringPair.foldl (fn (xl,((bthy,bthm),(_,thm))) => (Pretty.str (bthy ^ "." ^ bthm ^ ":")::(Display.pretty_thm thm)::xl)) ([],tab)))
68.166 +end;
68.167 +
68.168 +structure HOL4Thms = TheoryDataFun(HOL4ThmsArgs);
68.169 +
68.170 +structure HOL4ConstMapsArgs: THEORY_DATA_ARGS =
68.171 +struct
68.172 +val name = "HOL4/constmappings"
68.173 +type T = (bool * string * typ option) StringPair.table
68.174 +val empty = StringPair.empty
68.175 +val copy = I
68.176 +val prep_ext = I
68.177 +val merge = StringPair.merge (K true)
68.178 +fun print sg tab =
68.179 + Pretty.writeln (Pretty.big_list "HOL4 constant mappings:"
68.180 + (StringPair.foldl (fn (xl,((bthy,bconst),(internal,isaconst,_))) => (Pretty.str (bthy ^ "." ^ bconst ^ " --> " ^ isaconst ^ (if internal then " (*)" else ""))::xl)) ([],tab)))
68.181 +end;
68.182 +
68.183 +structure HOL4ConstMaps = TheoryDataFun(HOL4ConstMapsArgs);
68.184 +
68.185 +structure HOL4RenameArgs: THEORY_DATA_ARGS =
68.186 +struct
68.187 +val name = "HOL4/renamings"
68.188 +type T = string StringPair.table
68.189 +val empty = StringPair.empty
68.190 +val copy = I
68.191 +val prep_ext = I
68.192 +val merge = StringPair.merge (K true)
68.193 +fun print sg tab =
68.194 + Pretty.writeln (Pretty.big_list "HOL4 constant renamings:"
68.195 + (StringPair.foldl (fn (xl,((bthy,bconst),newname)) => (Pretty.str (bthy ^ "." ^ bconst ^ " --> " ^ newname)::xl)) ([],tab)))
68.196 +end;
68.197 +
68.198 +structure HOL4Rename = TheoryDataFun(HOL4RenameArgs);
68.199 +
68.200 +structure HOL4DefMapsArgs: THEORY_DATA_ARGS =
68.201 +struct
68.202 +val name = "HOL4/def_maps"
68.203 +type T = string StringPair.table
68.204 +val empty = StringPair.empty
68.205 +val copy = I
68.206 +val prep_ext = I
68.207 +val merge = StringPair.merge (K true)
68.208 +fun print sg tab =
68.209 + Pretty.writeln (Pretty.big_list "HOL4 constant definitions:"
68.210 + (StringPair.foldl (fn (xl,((bthy,bconst),newname)) => (Pretty.str (bthy ^ "." ^ bconst ^ ": " ^ newname)::xl)) ([],tab)))
68.211 +end;
68.212 +
68.213 +structure HOL4DefMaps = TheoryDataFun(HOL4DefMapsArgs);
68.214 +
68.215 +structure HOL4TypeMapsArgs: THEORY_DATA_ARGS =
68.216 +struct
68.217 +val name = "HOL4/typemappings"
68.218 +type T = (bool * string) StringPair.table
68.219 +val empty = StringPair.empty
68.220 +val copy = I
68.221 +val prep_ext = I
68.222 +val merge = StringPair.merge (K true)
68.223 +fun print sg tab =
68.224 + Pretty.writeln (Pretty.big_list "HOL4 type mappings:"
68.225 + (StringPair.foldl (fn (xl,((bthy,bconst),(internal,isaconst))) => (Pretty.str (bthy ^ "." ^ bconst ^ " --> " ^ isaconst ^ (if internal then " (*)" else ""))::xl)) ([],tab)))
68.226 +end;
68.227 +
68.228 +structure HOL4TypeMaps = TheoryDataFun(HOL4TypeMapsArgs);
68.229 +
68.230 +structure HOL4PendingArgs: THEORY_DATA_ARGS =
68.231 +struct
68.232 +val name = "HOL4/pending"
68.233 +type T = ((term * term) list * thm) StringPair.table
68.234 +val empty = StringPair.empty
68.235 +val copy = I
68.236 +val prep_ext = I
68.237 +val merge = StringPair.merge (K true)
68.238 +fun print sg tab =
68.239 + Pretty.writeln (Pretty.big_list "HOL4 pending theorems:"
68.240 + (StringPair.foldl (fn (xl,((bthy,bthm),(_,th))) => (Pretty.chunks [Pretty.str (bthy ^ "." ^ bthm ^ ":"),Display.pretty_thm th]::xl)) ([],tab)))
68.241 +end;
68.242 +
68.243 +structure HOL4Pending = TheoryDataFun(HOL4PendingArgs);
68.244 +
68.245 +structure HOL4RewritesArgs: THEORY_DATA_ARGS =
68.246 +struct
68.247 +val name = "HOL4/rewrites"
68.248 +type T = thm list
68.249 +val empty = []
68.250 +val copy = I
68.251 +val prep_ext = I
68.252 +val merge = Library.gen_union Thm.eq_thm
68.253 +fun print sg thms =
68.254 + Pretty.writeln (Pretty.big_list "HOL4 rewrite rules:"
68.255 + (map Display.pretty_thm thms))
68.256 +end;
68.257 +
68.258 +structure HOL4Rewrites = TheoryDataFun(HOL4RewritesArgs);
68.259 +
68.260 +val hol4_debug = ref false
68.261 +fun message s = if !hol4_debug then writeln s else ()
68.262 +
68.263 +fun add_hol4_rewrite (thy,th) =
68.264 + let
68.265 + val _ = message "Adding HOL4 rewrite"
68.266 + val th1 = th RS eq_reflection
68.267 + val current_rews = HOL4Rewrites.get thy
68.268 + val new_rews = gen_ins Thm.eq_thm (th1,current_rews)
68.269 + val updated_thy = HOL4Rewrites.put new_rews thy
68.270 + in
68.271 + (updated_thy,th1)
68.272 + end;
68.273 +
68.274 +fun ignore_hol4 bthy bthm thy =
68.275 + let
68.276 + val _ = message ("Ignoring " ^ bthy ^ "." ^ bthm)
68.277 + val curmaps = HOL4Maps.get thy
68.278 + val newmaps = StringPair.update_new(((bthy,bthm),None),curmaps)
68.279 + val upd_thy = HOL4Maps.put newmaps thy
68.280 + in
68.281 + upd_thy
68.282 + end
68.283 +
68.284 +val opt_get_output_thy = #2 o HOL4Dump.get
68.285 +
68.286 +fun get_output_thy thy =
68.287 + case #2 (HOL4Dump.get thy) of
68.288 + "" => error "No theory file being output"
68.289 + | thyname => thyname
68.290 +
68.291 +val get_output_dir = #1 o HOL4Dump.get
68.292 +
68.293 +fun add_hol4_move bef aft thy =
68.294 + let
68.295 + val curmoves = HOL4Moves.get thy
68.296 + val newmoves = Symtab.update_new((bef,aft),curmoves)
68.297 + in
68.298 + HOL4Moves.put newmoves thy
68.299 + end
68.300 +
68.301 +fun get_hol4_move bef thy =
68.302 + let
68.303 + val moves = HOL4Moves.get thy
68.304 + in
68.305 + Symtab.lookup(moves,bef)
68.306 + end
68.307 +
68.308 +fun follow_name thmname thy =
68.309 + let
68.310 + val moves = HOL4Moves.get thy
68.311 + fun F thmname =
68.312 + case Symtab.lookup(moves,thmname) of
68.313 + Some name => F name
68.314 + | None => thmname
68.315 + in
68.316 + F thmname
68.317 + end
68.318 +
68.319 +fun add_hol4_cmove bef aft thy =
68.320 + let
68.321 + val curmoves = HOL4CMoves.get thy
68.322 + val newmoves = Symtab.update_new((bef,aft),curmoves)
68.323 + in
68.324 + HOL4CMoves.put newmoves thy
68.325 + end
68.326 +
68.327 +fun get_hol4_cmove bef thy =
68.328 + let
68.329 + val moves = HOL4CMoves.get thy
68.330 + in
68.331 + Symtab.lookup(moves,bef)
68.332 + end
68.333 +
68.334 +fun follow_cname thmname thy =
68.335 + let
68.336 + val moves = HOL4CMoves.get thy
68.337 + fun F thmname =
68.338 + case Symtab.lookup(moves,thmname) of
68.339 + Some name => F name
68.340 + | None => thmname
68.341 + in
68.342 + F thmname
68.343 + end
68.344 +
68.345 +fun add_hol4_mapping bthy bthm isathm thy =
68.346 + let
68.347 + val isathm = follow_name isathm thy
68.348 + val _ = message ("Adding theorem map: " ^ bthy ^ "." ^ bthm ^ " --> " ^ isathm)
68.349 + val curmaps = HOL4Maps.get thy
68.350 + val newmaps = StringPair.update_new(((bthy,bthm),Some isathm),curmaps)
68.351 + val upd_thy = HOL4Maps.put newmaps thy
68.352 + in
68.353 + upd_thy
68.354 + end;
68.355 +
68.356 +fun get_hol4_type_mapping bthy tycon thy =
68.357 + let
68.358 + val maps = HOL4TypeMaps.get thy
68.359 + in
68.360 + StringPair.lookup(maps,(bthy,tycon))
68.361 + end
68.362 +
68.363 +fun get_hol4_mapping bthy bthm thy =
68.364 + let
68.365 + val curmaps = HOL4Maps.get thy
68.366 + in
68.367 + StringPair.lookup(curmaps,(bthy,bthm))
68.368 + end;
68.369 +
68.370 +fun add_hol4_const_mapping bthy bconst internal isaconst thy =
68.371 + let
68.372 + val thy = case opt_get_output_thy thy of
68.373 + "" => thy
68.374 + | output_thy => if internal
68.375 + then add_hol4_cmove (Sign.full_name (sign_of thy) bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
68.376 + else thy
68.377 + val _ = message ("Adding cmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
68.378 + val curmaps = HOL4ConstMaps.get thy
68.379 + val newmaps = StringPair.update_new(((bthy,bconst),(internal,isaconst,None)),curmaps)
68.380 + val upd_thy = HOL4ConstMaps.put newmaps thy
68.381 + in
68.382 + upd_thy
68.383 + end;
68.384 +
68.385 +fun add_hol4_const_renaming bthy bconst newname thy =
68.386 + let
68.387 + val currens = HOL4Rename.get thy
68.388 + val _ = message ("Adding renaming " ^ bthy ^ "." ^ bconst ^ " -> " ^ newname)
68.389 + val newrens = StringPair.update_new(((bthy,bconst),newname),currens)
68.390 + val upd_thy = HOL4Rename.put newrens thy
68.391 + in
68.392 + upd_thy
68.393 + end;
68.394 +
68.395 +fun get_hol4_const_renaming bthy bconst thy =
68.396 + let
68.397 + val currens = HOL4Rename.get thy
68.398 + in
68.399 + StringPair.lookup(currens,(bthy,bconst))
68.400 + end;
68.401 +
68.402 +fun get_hol4_const_mapping bthy bconst thy =
68.403 + let
68.404 + val bconst = case get_hol4_const_renaming bthy bconst thy of
68.405 + Some name => name
68.406 + | None => bconst
68.407 + val maps = HOL4ConstMaps.get thy
68.408 + in
68.409 + StringPair.lookup(maps,(bthy,bconst))
68.410 + end
68.411 +
68.412 +fun add_hol4_const_wt_mapping bthy bconst internal isaconst typ thy =
68.413 + let
68.414 + val thy = case opt_get_output_thy thy of
68.415 + "" => thy
68.416 + | output_thy => if internal
68.417 + then add_hol4_cmove (Sign.full_name (sign_of thy) bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
68.418 + else thy
68.419 + val _ = message ("Adding cmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
68.420 + val curmaps = HOL4ConstMaps.get thy
68.421 + val newmaps = StringPair.update_new(((bthy,bconst),(internal,isaconst,Some typ)),curmaps)
68.422 + val upd_thy = HOL4ConstMaps.put newmaps thy
68.423 + in
68.424 + upd_thy
68.425 + end;
68.426 +
68.427 +fun add_hol4_type_mapping bthy bconst internal isaconst thy =
68.428 + let
68.429 + val curmaps = HOL4TypeMaps.get thy
68.430 + val _ = message ("Adding tmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
68.431 + val newmaps = StringPair.update_new(((bthy,bconst),(internal,isaconst)),curmaps)
68.432 + val upd_thy = HOL4TypeMaps.put newmaps thy
68.433 + in
68.434 + upd_thy
68.435 + end;
68.436 +
68.437 +fun add_hol4_pending bthy bthm hth thy =
68.438 + let
68.439 + val thmname = Sign.full_name (sign_of thy) bthm
68.440 + val _ = message ("Add pending " ^ bthy ^ "." ^ bthm)
68.441 + val curpend = HOL4Pending.get thy
68.442 + val newpend = StringPair.update_new(((bthy,bthm),hth),curpend)
68.443 + val upd_thy = HOL4Pending.put newpend thy
68.444 + val thy' = case opt_get_output_thy upd_thy of
68.445 + "" => add_hol4_mapping bthy bthm thmname upd_thy
68.446 + | output_thy =>
68.447 + let
68.448 + val new_thmname = output_thy ^ "." ^ bthy ^ "." ^ bthm
68.449 + in
68.450 + upd_thy |> add_hol4_move thmname new_thmname
68.451 + |> add_hol4_mapping bthy bthm new_thmname
68.452 + end
68.453 + in
68.454 + thy'
68.455 + end;
68.456 +
68.457 +fun get_hol4_theorem thyname thmname thy =
68.458 + let
68.459 + val isathms = HOL4Thms.get thy
68.460 + in
68.461 + StringPair.lookup (isathms,(thyname,thmname))
68.462 + end
68.463 +
68.464 +fun add_hol4_theorem thyname thmname hth thy =
68.465 + let
68.466 + val _ = message ("Adding HOL4 theorem " ^ thyname ^ "." ^ thmname)
68.467 + val isathms = HOL4Thms.get thy
68.468 + val isathms' = StringPair.update_new (((thyname,thmname),hth),isathms)
68.469 + val thy' = HOL4Thms.put isathms' thy
68.470 + in
68.471 + thy'
68.472 + end
68.473 +
68.474 +fun export_hol4_pending thy =
68.475 + let
68.476 + val rews = HOL4Rewrites.get thy
68.477 + val outthy = get_output_thy thy
68.478 + fun process (thy,((bthy,bthm),hth as (_,thm))) =
68.479 + let
68.480 + val sg = sign_of thy
68.481 + val thm1 = rewrite_rule (map (transfer_sg sg) rews) (transfer_sg sg thm)
68.482 + val thm2 = standard thm1
68.483 + val (thy2,_) = PureThy.store_thm((bthm,thm2),[]) thy
68.484 + val thy5 = add_hol4_theorem bthy bthm hth thy2
68.485 + in
68.486 + thy5
68.487 + end
68.488 +
68.489 + val pending = HOL4Pending.get thy
68.490 + val thy1 = StringPair.foldl process (thy,pending)
68.491 + val thy2 = HOL4Pending.put (StringPair.empty) thy1
68.492 + in
68.493 + thy2
68.494 + end;
68.495 +
68.496 +fun setup_dump (dir,thyname) thy =
68.497 + HOL4Dump.put (dir,thyname,[]) thy
68.498 +
68.499 +fun add_dump str thy =
68.500 + let
68.501 + val (dir,thyname,curdump) = HOL4Dump.get thy
68.502 + in
68.503 + HOL4Dump.put (dir,thyname,str::curdump) thy
68.504 + end
68.505 +
68.506 +fun flush_dump thy =
68.507 + let
68.508 + val (dir,thyname,dumpdata) = HOL4Dump.get thy
68.509 + val os = TextIO.openOut (OS.Path.joinDirFile {dir=dir,
68.510 + file=thyname ^ ".thy"})
68.511 + val _ = app (fn s => TextIO.output(os,s ^ "\n\n")) (rev dumpdata)
68.512 + val _ = TextIO.closeOut os
68.513 + in
68.514 + HOL4Dump.put ("","",[]) thy
68.515 + end
68.516 +
68.517 +fun set_generating_thy thyname thy =
68.518 + case HOL4DefThy.get thy of
68.519 + NoImport => HOL4DefThy.put (Generating thyname) thy
68.520 + | _ => error "Import already in progess"
68.521 +
68.522 +fun set_replaying_thy thyname thy =
68.523 + case HOL4DefThy.get thy of
68.524 + NoImport => HOL4DefThy.put (Replaying thyname) thy
68.525 + | _ => error "Import already in progess"
68.526 +
68.527 +fun clear_import_thy thy =
68.528 + case HOL4DefThy.get thy of
68.529 + NoImport => error "No import in progress"
68.530 + | _ => HOL4DefThy.put NoImport thy
68.531 +
68.532 +fun get_generating_thy thy =
68.533 + case HOL4DefThy.get thy of
68.534 + Generating thyname => thyname
68.535 + | _ => error "No theory being generated"
68.536 +
68.537 +fun get_replaying_thy thy =
68.538 + case HOL4DefThy.get thy of
68.539 + Replaying thyname => thyname
68.540 + | _ => error "No theory being replayed"
68.541 +
68.542 +fun get_import_thy thy =
68.543 + case HOL4DefThy.get thy of
68.544 + Replaying thyname => thyname
68.545 + | Generating thyname => thyname
68.546 + | _ => error "No theory being imported"
68.547 +
68.548 +fun should_ignore thyname thy thmname =
68.549 + case get_hol4_mapping thyname thmname thy of
68.550 + Some None => true
68.551 + | _ => false
68.552 +
68.553 +val trans_string =
68.554 + let
68.555 + fun quote s = "\"" ^ s ^ "\""
68.556 + fun F [] = []
68.557 + | F (#"\\" :: cs) = patch #"\\" cs
68.558 + | F (#"\"" :: cs) = patch #"\"" cs
68.559 + | F (c :: cs) = c :: F cs
68.560 + and patch c rest = #"\\" :: c :: F rest
68.561 + in
68.562 + quote o String.implode o F o String.explode
68.563 + end
68.564 +
68.565 +fun dump_import_thy thyname thy =
68.566 + let
68.567 + val output_dir = get_output_dir thy
68.568 + val output_thy = get_output_thy thy
68.569 + val import_segment = get_import_segment thy
68.570 + val sg = sign_of thy
68.571 + val os = TextIO.openOut (OS.Path.joinDirFile {dir=output_dir,
68.572 + file=thyname ^ ".imp"})
68.573 + fun out s = TextIO.output(os,s)
68.574 + val (ignored,mapped) =
68.575 + StringPair.foldl (fn ((ign,map),((bthy,bthm),v)) =>
68.576 + if bthy = thyname
68.577 + then (case v of
68.578 + None => (bthm::ign,map)
68.579 + | Some w => (ign,(bthm,w)::map))
68.580 + else (ign,map))
68.581 + (([],[]),HOL4Maps.get thy)
68.582 + val constmaps =
68.583 + StringPair.foldl (fn (map,((bthy,bthm),v)) =>
68.584 + if bthy = thyname
68.585 + then (bthm,v)::map
68.586 + else map)
68.587 + ([],HOL4ConstMaps.get thy)
68.588 +
68.589 + val constrenames =
68.590 + StringPair.foldl (fn (map,((bthy,bthm),v)) =>
68.591 + if bthy = thyname
68.592 + then (bthm,v)::map
68.593 + else map)
68.594 + ([],HOL4Rename.get thy)
68.595 +
68.596 + val typemaps =
68.597 + StringPair.foldl (fn (map,((bthy,bthm),v)) =>
68.598 + if bthy = thyname
68.599 + then (bthm,v)::map
68.600 + else map)
68.601 + ([],HOL4TypeMaps.get thy)
68.602 +
68.603 + val defmaps =
68.604 + StringPair.foldl (fn (map,((bthy,bthm),v)) =>
68.605 + if bthy = thyname
68.606 + then (bthm,v)::map
68.607 + else map)
68.608 + ([],HOL4DefMaps.get thy)
68.609 +
68.610 + fun new_name internal isa =
68.611 + if internal
68.612 + then
68.613 + let
68.614 + val paths = NameSpace.unpack isa
68.615 + val i = drop(length paths - 2,paths)
68.616 + in
68.617 + case i of
68.618 + [seg,con] => output_thy ^ "." ^ seg ^ "." ^ con
68.619 + | _ => error "hol4rews.dump internal error"
68.620 + end
68.621 + else
68.622 + isa
68.623 +
68.624 + val _ = out "import\n\n"
68.625 +
68.626 + val _ = out ("import_segment " ^ trans_string import_segment ^ "\n\n")
68.627 + val _ = if null defmaps
68.628 + then ()
68.629 + else out "def_maps"
68.630 + val _ = app (fn (hol,isa) =>
68.631 + out ("\n " ^ (trans_string hol) ^ " > " ^ (trans_string isa))) defmaps
68.632 + val _ = if null defmaps
68.633 + then ()
68.634 + else out "\n\n"
68.635 +
68.636 + val _ = if null typemaps
68.637 + then ()
68.638 + else out "type_maps"
68.639 + val _ = app (fn (hol,(internal,isa)) =>
68.640 + out ("\n " ^ (trans_string hol) ^ " > " ^ (trans_string (new_name internal isa)))) typemaps
68.641 + val _ = if null typemaps
68.642 + then ()
68.643 + else out "\n\n"
68.644 +
68.645 + val _ = if null constmaps
68.646 + then ()
68.647 + else out "const_maps"
68.648 + val _ = app (fn (hol,(internal,isa,opt_ty)) =>
68.649 + (out ("\n " ^ (trans_string hol) ^ " > " ^ (trans_string (follow_cname isa thy)));
68.650 + case opt_ty of
68.651 + Some ty => out (" :: \"" ^ (string_of_ctyp (ctyp_of sg ty)) ^ "\"")
68.652 + | None => ())) constmaps
68.653 + val _ = if null constmaps
68.654 + then ()
68.655 + else out "\n\n"
68.656 +
68.657 + val _ = if null constrenames
68.658 + then ()
68.659 + else out "const_renames"
68.660 + val _ = app (fn (old,new) =>
68.661 + out ("\n " ^ (trans_string old) ^ " > " ^ (trans_string new))) constrenames
68.662 + val _ = if null constrenames
68.663 + then ()
68.664 + else out "\n\n"
68.665 +
68.666 + val _ = if null mapped
68.667 + then ()
68.668 + else out "thm_maps"
68.669 + val _ = app (fn (hol,isa) => out ("\n " ^ (trans_string hol) ^ " > " ^ (trans_string isa))) mapped
68.670 + val _ = if null mapped
68.671 + then ()
68.672 + else out "\n\n"
68.673 +
68.674 + val _ = if null ignored
68.675 + then ()
68.676 + else out "ignore_thms"
68.677 + val _ = app (fn ign => out ("\n " ^ (trans_string ign))) ignored
68.678 + val _ = if null ignored
68.679 + then ()
68.680 + else out "\n\n"
68.681 +
68.682 + val _ = out "end\n"
68.683 + val _ = TextIO.closeOut os
68.684 + in
68.685 + thy
68.686 + end
68.687 +
68.688 +fun set_used_names names thy =
68.689 + let
68.690 + val unames = HOL4UNames.get thy
68.691 + in
68.692 + case unames of
68.693 + [] => HOL4UNames.put names thy
68.694 + | _ => error "hol4rews.set_used_names called on initialized data!"
68.695 + end
68.696 +
68.697 +val clear_used_names = HOL4UNames.put HOL4UNamesArgs.empty
68.698 +
68.699 +fun get_defmap thyname const thy =
68.700 + let
68.701 + val maps = HOL4DefMaps.get thy
68.702 + in
68.703 + StringPair.lookup(maps,(thyname,const))
68.704 + end
68.705 +
68.706 +fun add_defmap thyname const defname thy =
68.707 + let
68.708 + val _ = message ("Adding defmap " ^ thyname ^ "." ^ const ^ " --> " ^ defname)
68.709 + val maps = HOL4DefMaps.get thy
68.710 + val maps' = StringPair.update_new(((thyname,const),defname),maps)
68.711 + val thy' = HOL4DefMaps.put maps' thy
68.712 + in
68.713 + thy'
68.714 + end
68.715 +
68.716 +fun get_defname thyname name thy =
68.717 + let
68.718 + val maps = HOL4DefMaps.get thy
68.719 + fun F dname = (dname,add_defmap thyname name dname thy)
68.720 + in
68.721 + case StringPair.lookup(maps,(thyname,name)) of
68.722 + Some thmname => (thmname,thy)
68.723 + | None =>
68.724 + let
68.725 + val used = HOL4UNames.get thy
68.726 + val defname = def_name name
68.727 + val pdefname = name ^ "_primdef"
68.728 + in
68.729 + if not (defname mem used)
68.730 + then F defname (* name_def *)
68.731 + else if not (pdefname mem used)
68.732 + then F pdefname (* name_primdef *)
68.733 + else F (variant used pdefname) (* last resort *)
68.734 + end
68.735 + end
68.736 +
68.737 +local
68.738 + fun handle_meta [x as Appl[Appl[Constant "_constrain", Constant "==", _],_,_]] = x
68.739 + | handle_meta [x as Appl[Appl[Constant "_constrain", Constant "all", _],_]] = x
68.740 + | handle_meta [x as Appl[Appl[Constant "_constrain", Constant "==>", _],_,_]] = x
68.741 + | handle_meta [x] = Appl[Constant "Trueprop",x]
68.742 +in
68.743 +val smarter_trueprop_parsing = [("Trueprop",handle_meta)]
68.744 +end
68.745 +
68.746 +local
68.747 + fun initial_maps thy =
68.748 + thy |> add_hol4_type_mapping "min" "bool" false "bool"
68.749 + |> add_hol4_type_mapping "min" "fun" false "fun"
68.750 + |> add_hol4_type_mapping "min" "ind" false "Nat.ind"
68.751 + |> add_hol4_const_mapping "min" "=" false "op ="
68.752 + |> add_hol4_const_mapping "min" "==>" false "op -->"
68.753 + |> add_hol4_const_mapping "min" "@" false "Hilbert_Choice.Eps"
68.754 +in
68.755 +val hol4_setup =
68.756 + [HOL4Rewrites.init,
68.757 + HOL4Maps.init,
68.758 + HOL4UNames.init,
68.759 + HOL4DefMaps.init,
68.760 + HOL4Moves.init,
68.761 + HOL4CMoves.init,
68.762 + HOL4ConstMaps.init,
68.763 + HOL4Rename.init,
68.764 + HOL4TypeMaps.init,
68.765 + HOL4Pending.init,
68.766 + HOL4Thms.init,
68.767 + HOL4Dump.init,
68.768 + HOL4DefThy.init,
68.769 + HOL4Imports.init,
68.770 + ImportSegment.init,
68.771 + initial_maps,
68.772 + Attrib.add_attributes [("hol4rew",
68.773 + (Attrib.no_args add_hol4_rewrite,
68.774 + Attrib.no_args Attrib.undef_local_attribute),
68.775 + "HOL4 rewrite rule")]]
68.776 +end
69.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
69.2 +++ b/src/HOL/Import/import_package.ML Fri Apr 02 17:37:45 2004 +0200
69.3 @@ -0,0 +1,61 @@
69.4 +signature IMPORT_PACKAGE =
69.5 +sig
69.6 + val import_meth: Args.src -> Proof.context -> Proof.method
69.7 + val setup : (theory -> theory) list
69.8 + val debug : bool ref
69.9 +end
69.10 +
69.11 +structure ImportPackage :> IMPORT_PACKAGE =
69.12 +struct
69.13 +
69.14 +val debug = ref false
69.15 +fun message s = if !debug then writeln s else ()
69.16 +
69.17 +val string_of_thm = Library.setmp print_mode [] string_of_thm
69.18 +val string_of_cterm = Library.setmp print_mode [] string_of_cterm
69.19 +
69.20 +fun import_tac (thyname,thmname) =
69.21 + if !SkipProof.quick_and_dirty
69.22 + then SkipProof.cheat_tac
69.23 + else
69.24 + fn thy =>
69.25 + fn th =>
69.26 + let
69.27 + val sg = sign_of_thm th
69.28 + val prem = hd (prems_of th)
69.29 + val _ = message ("Import trying to prove " ^ (string_of_cterm (cterm_of sg prem)))
69.30 + val int_thms = fst (Replay.setup_int_thms thyname thy)
69.31 + val proof = snd (ProofKernel.import_proof thyname thmname thy) thy
69.32 + val hol4thm = snd (Replay.replay_proof int_thms thyname thmname proof thy)
69.33 + val thm = snd (ProofKernel.to_isa_thm hol4thm)
69.34 + val rew = ProofKernel.rewrite_hol4_term (concl_of thm) thy
69.35 + val thm = equal_elim rew thm
69.36 + val prew = ProofKernel.rewrite_hol4_term prem thy
69.37 + val prem' = #2 (Logic.dest_equals (prop_of prew))
69.38 + val _ = message ("Import proved " ^ (string_of_thm thm))
69.39 + in
69.40 + case Shuffler.set_prop thy prem' [("",thm)] of
69.41 + Some (_,thm) =>
69.42 + let
69.43 + val _ = if prem' aconv (prop_of thm)
69.44 + then message "import: Terms match up"
69.45 + else message "import: Terms DO NOT match up"
69.46 + val thm' = equal_elim (symmetric prew) thm
69.47 + val res = bicompose true (false,thm',0) 1 th
69.48 + in
69.49 + res
69.50 + end
69.51 + | None => (message "import: set_prop didn't succeed"; no_tac th)
69.52 + end
69.53 +
69.54 +val import_meth = Method.simple_args (Args.name -- Args.name)
69.55 + (fn arg =>
69.56 + fn ctxt =>
69.57 + let
69.58 + val thy = ProofContext.theory_of ctxt
69.59 + in
69.60 + Method.SIMPLE_METHOD (import_tac arg thy)
69.61 + end)
69.62 +
69.63 +val setup = [Method.add_method("import",import_meth,"Import HOL4 theorem")]
69.64 +end
70.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
70.2 +++ b/src/HOL/Import/import_syntax.ML Fri Apr 02 17:37:45 2004 +0200
70.3 @@ -0,0 +1,227 @@
70.4 +signature HOL4_IMPORT_SYNTAX =
70.5 +sig
70.6 + type token = OuterSyntax.token
70.7 +
70.8 + val import_segment: token list -> (theory -> theory) * token list
70.9 + val import_theory : token list -> (theory -> theory) * token list
70.10 + val end_import : token list -> (theory -> theory) * token list
70.11 +
70.12 + val setup_theory : token list -> (theory -> theory) * token list
70.13 + val end_setup : token list -> (theory -> theory) * token list
70.14 +
70.15 + val thm_maps : token list -> (theory -> theory) * token list
70.16 + val ignore_thms : token list -> (theory -> theory) * token list
70.17 + val type_maps : token list -> (theory -> theory) * token list
70.18 + val def_maps : token list -> (theory -> theory) * token list
70.19 + val const_maps : token list -> (theory -> theory) * token list
70.20 + val const_moves : token list -> (theory -> theory) * token list
70.21 + val const_renames : token list -> (theory -> theory) * token list
70.22 +
70.23 + val setup : unit -> unit
70.24 +end
70.25 +
70.26 +structure HOL4ImportSyntax :> HOL4_IMPORT_SYNTAX =
70.27 +struct
70.28 +
70.29 +type token = OuterSyntax.token
70.30 +
70.31 +local structure P = OuterParse and K = OuterSyntax.Keyword in
70.32 +
70.33 +(* Parsers *)
70.34 +
70.35 +val import_segment = P.name >> set_import_segment
70.36 +
70.37 +val import_theory = P.name >> (fn thyname =>
70.38 + fn thy =>
70.39 + thy |> set_generating_thy thyname
70.40 + |> Theory.add_path thyname
70.41 + |> add_dump (";setup_theory " ^ thyname))
70.42 +
70.43 +val end_import = Scan.succeed
70.44 + (fn thy =>
70.45 + let
70.46 + val thyname = get_generating_thy thy
70.47 + val segname = get_import_segment thy
70.48 + val (int_thms,facts) = Replay.setup_int_thms thyname thy
70.49 + val thmnames = filter (not o should_ignore thyname thy) facts
70.50 + in
70.51 + thy |> clear_import_thy
70.52 + |> set_segment thyname segname
70.53 + |> set_used_names facts
70.54 + |> Replay.import_thms thyname int_thms thmnames
70.55 + |> clear_used_names
70.56 + |> export_hol4_pending
70.57 + |> Theory.parent_path
70.58 + |> dump_import_thy thyname
70.59 + |> add_dump ";end_setup"
70.60 + end)
70.61 +
70.62 +val ignore_thms = Scan.repeat1 P.name
70.63 + >> (fn ignored =>
70.64 + fn thy =>
70.65 + let
70.66 + val thyname = get_import_thy thy
70.67 + in
70.68 + foldl (fn (thy,thmname) => ignore_hol4 thyname thmname thy) (thy,ignored)
70.69 + end)
70.70 +
70.71 +val thm_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
70.72 + >> (fn thmmaps =>
70.73 + fn thy =>
70.74 + let
70.75 + val thyname = get_import_thy thy
70.76 + in
70.77 + foldl (fn (thy,(hol,isa)) => add_hol4_mapping thyname hol isa thy) (thy,thmmaps)
70.78 + end)
70.79 +
70.80 +val type_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
70.81 + >> (fn typmaps =>
70.82 + fn thy =>
70.83 + let
70.84 + val thyname = get_import_thy thy
70.85 + in
70.86 + foldl (fn (thy,(hol,isa)) => add_hol4_type_mapping thyname hol false isa thy) (thy,typmaps)
70.87 + end)
70.88 +
70.89 +val def_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
70.90 + >> (fn defmaps =>
70.91 + fn thy =>
70.92 + let
70.93 + val thyname = get_import_thy thy
70.94 + in
70.95 + foldl (fn (thy,(hol,isa)) => add_defmap thyname hol isa thy) (thy,defmaps)
70.96 + end)
70.97 +
70.98 +val const_renames = Scan.repeat1 (P.name --| P.$$$ ">" -- P.name)
70.99 + >> (fn renames =>
70.100 + fn thy =>
70.101 + let
70.102 + val thyname = get_import_thy thy
70.103 + in
70.104 + foldl (fn (thy,(hol,isa)) => add_hol4_const_renaming thyname hol isa thy) (thy,renames)
70.105 + end)
70.106 +
70.107 +val const_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname -- Scan.option (P.$$$ "::" |-- P.typ))
70.108 + >> (fn constmaps =>
70.109 + fn thy =>
70.110 + let
70.111 + val thyname = get_import_thy thy
70.112 + in
70.113 + foldl (fn (thy,((hol,isa),None)) => add_hol4_const_mapping thyname hol false isa thy
70.114 + | (thy,((hol,isa),Some ty)) => add_hol4_const_wt_mapping thyname hol false isa (typ_of (read_ctyp (sign_of thy) ty)) thy) (thy,constmaps)
70.115 + end)
70.116 +
70.117 +val const_moves = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname -- Scan.option (P.$$$ "::" |-- P.typ))
70.118 + >> (fn constmaps =>
70.119 + fn thy =>
70.120 + let
70.121 + val thyname = get_import_thy thy
70.122 + in
70.123 + foldl (fn (thy,((hol,isa),None)) => add_hol4_const_mapping thyname hol true isa thy
70.124 + | (thy,((hol,isa),Some ty)) => add_hol4_const_wt_mapping thyname hol true isa (typ_of (read_ctyp (sign_of thy) ty)) thy) (thy,constmaps)
70.125 + end)
70.126 +
70.127 +fun import_thy s =
70.128 + let
70.129 + val is = TextIO.openIn(s ^ ".imp")
70.130 + val inp = TextIO.inputAll is
70.131 + val _ = TextIO.closeIn is
70.132 + val orig_source = Source.of_string inp
70.133 + val symb_source = Symbol.source false orig_source
70.134 + val lexes = ref (OuterLex.make_lexicon ["import_segment","ignore_thms","import","end",">","::","const_maps","const_moves","thm_maps","const_renames","type_maps","def_maps"],
70.135 + Scan.empty_lexicon)
70.136 + val get_lexes = fn () => !lexes
70.137 + val token_source = OuterLex.source false get_lexes (Position.line 1) symb_source
70.138 + val token_list = filter (not o (OuterLex.is_kind OuterLex.Space)) (Source.exhaust token_source)
70.139 + val import_segmentP = OuterParse.$$$ "import_segment" |-- import_segment
70.140 + val type_mapsP = OuterParse.$$$ "type_maps" |-- type_maps
70.141 + val def_mapsP = OuterParse.$$$ "def_maps" |-- def_maps
70.142 + val const_mapsP = OuterParse.$$$ "const_maps" |-- const_maps
70.143 + val const_movesP = OuterParse.$$$ "const_moves" |-- const_moves
70.144 + val const_renamesP = OuterParse.$$$ "const_renames" |-- const_renames
70.145 + val ignore_thmsP = OuterParse.$$$ "ignore_thms" |-- ignore_thms
70.146 + val thm_mapsP = OuterParse.$$$ "thm_maps" |-- thm_maps
70.147 + val parser = type_mapsP || def_mapsP || const_mapsP || const_movesP || const_renamesP || thm_mapsP || ignore_thmsP || import_segmentP
70.148 + val importP = OuterParse.$$$ "import" |-- Scan.repeat parser --| OuterParse.$$$ "end"
70.149 + fun apply [] thy = thy
70.150 + | apply (f::fs) thy = apply fs (f thy)
70.151 + in
70.152 + apply (set_replaying_thy s::Theory.add_path s::(fst (importP token_list)))
70.153 + end
70.154 +
70.155 +val setup_theory = P.name
70.156 + >>
70.157 + (fn thyname =>
70.158 + fn thy =>
70.159 + case HOL4DefThy.get thy of
70.160 + NoImport => thy |> import_thy thyname
70.161 + | Generating _ => error "Currently generating a theory!"
70.162 + | Replaying _ => thy |> clear_import_thy |> import_thy thyname)
70.163 +
70.164 +val end_setup = Scan.succeed (fn thy =>
70.165 + let
70.166 + val thyname = get_import_thy thy
70.167 + val segname = get_import_segment thy
70.168 + in
70.169 + thy |> set_segment thyname segname
70.170 + |> clear_import_thy
70.171 + |> Theory.parent_path
70.172 + end)
70.173 +
70.174 +val set_dump = P.string -- P.string >> setup_dump
70.175 +val fl_dump = Scan.succeed flush_dump
70.176 +val append_dump = (P.verbatim || P.string) >> add_dump
70.177 +
70.178 +val parsers =
70.179 + [OuterSyntax.command "import_segment"
70.180 + "Set import segment name"
70.181 + K.thy_decl (import_segment >> Toplevel.theory),
70.182 + OuterSyntax.command "import_theory"
70.183 + "Set default HOL4 theory name"
70.184 + K.thy_decl (import_theory >> Toplevel.theory),
70.185 + OuterSyntax.command "end_import"
70.186 + "End HOL4 import"
70.187 + K.thy_decl (end_import >> Toplevel.theory),
70.188 + OuterSyntax.command "setup_theory"
70.189 + "Setup HOL4 theory replaying"
70.190 + K.thy_decl (setup_theory >> Toplevel.theory),
70.191 + OuterSyntax.command "end_setup"
70.192 + "End HOL4 setup"
70.193 + K.thy_decl (end_setup >> Toplevel.theory),
70.194 + OuterSyntax.command "setup_dump"
70.195 + "Setup the dump file name"
70.196 + K.thy_decl (set_dump >> Toplevel.theory),
70.197 + OuterSyntax.command "append_dump"
70.198 + "Add text to dump file"
70.199 + K.thy_decl (append_dump >> Toplevel.theory),
70.200 + OuterSyntax.command "flush_dump"
70.201 + "Write the dump to file"
70.202 + K.thy_decl (fl_dump >> Toplevel.theory),
70.203 + OuterSyntax.command "ignore_thms"
70.204 + "Theorems to ignore in next HOL4 theory import"
70.205 + K.thy_decl (ignore_thms >> Toplevel.theory),
70.206 + OuterSyntax.command "type_maps"
70.207 + "Map HOL4 type names to existing Isabelle/HOL type names"
70.208 + K.thy_decl (type_maps >> Toplevel.theory),
70.209 + OuterSyntax.command "def_maps"
70.210 + "Map HOL4 constant names to their primitive definitions"
70.211 + K.thy_decl (def_maps >> Toplevel.theory),
70.212 + OuterSyntax.command "thm_maps"
70.213 + "Map HOL4 theorem names to existing Isabelle/HOL theorem names"
70.214 + K.thy_decl (thm_maps >> Toplevel.theory),
70.215 + OuterSyntax.command "const_renames"
70.216 + "Rename HOL4 const names"
70.217 + K.thy_decl (const_renames >> Toplevel.theory),
70.218 + OuterSyntax.command "const_moves"
70.219 + "Rename HOL4 const names to other HOL4 constants"
70.220 + K.thy_decl (const_moves >> Toplevel.theory),
70.221 + OuterSyntax.command "const_maps"
70.222 + "Map HOL4 const names to existing Isabelle/HOL const names"
70.223 + K.thy_decl (const_maps >> Toplevel.theory)]
70.224 +
70.225 +fun setup () = (OuterSyntax.add_keywords[">"];
70.226 + OuterSyntax.add_parsers parsers)
70.227 +
70.228 +end
70.229 +
70.230 +end
71.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
71.2 +++ b/src/HOL/Import/proof_kernel.ML Fri Apr 02 17:37:45 2004 +0200
71.3 @@ -0,0 +1,2142 @@
71.4 +signature ProofKernel =
71.5 +sig
71.6 + type hol_type
71.7 + type tag
71.8 + type term
71.9 + type thm
71.10 + type ('a,'b) subst
71.11 +
71.12 + type proof_info
71.13 + datatype proof = Proof of proof_info * proof_content
71.14 + and proof_content
71.15 + = PRefl of term
71.16 + | PInstT of proof * (hol_type,hol_type) subst
71.17 + | PSubst of proof list * term * proof
71.18 + | PAbs of proof * term
71.19 + | PDisch of proof * term
71.20 + | PMp of proof * proof
71.21 + | PHyp of term
71.22 + | PAxm of string * term
71.23 + | PDef of string * string * term
71.24 + | PTmSpec of string * string list * proof
71.25 + | PTyDef of string * string * proof
71.26 + | PTyIntro of string * string * string * string * term * term * proof
71.27 + | POracle of tag * term list * term
71.28 + | PDisk
71.29 + | PSpec of proof * term
71.30 + | PInst of proof * (term,term) subst
71.31 + | PGen of proof * term
71.32 + | PGenAbs of proof * term option * term list
71.33 + | PImpAS of proof * proof
71.34 + | PSym of proof
71.35 + | PTrans of proof * proof
71.36 + | PComb of proof * proof
71.37 + | PEqMp of proof * proof
71.38 + | PEqImp of proof
71.39 + | PExists of proof * term * term
71.40 + | PChoose of term * proof * proof
71.41 + | PConj of proof * proof
71.42 + | PConjunct1 of proof
71.43 + | PConjunct2 of proof
71.44 + | PDisj1 of proof * term
71.45 + | PDisj2 of proof * term
71.46 + | PDisjCases of proof * proof * proof
71.47 + | PNotI of proof
71.48 + | PNotE of proof
71.49 + | PContr of proof * term
71.50 +
71.51 + exception PK of string * string
71.52 +
71.53 + val get_proof_dir: string -> theory -> string
71.54 + val debug : bool ref
71.55 + val disk_info_of : proof -> (string * string) option
71.56 + val set_disk_info_of : proof -> string -> string -> unit
71.57 + val mk_proof : proof_content -> proof
71.58 + val content_of : proof -> proof_content
71.59 + val import_proof : string -> string -> theory -> (theory -> term) option * (theory -> proof)
71.60 +
71.61 + val rewrite_hol4_term: Term.term -> theory -> Thm.thm
71.62 +
71.63 + val type_of : term -> hol_type
71.64 +
71.65 + val get_thm : string -> string -> theory -> (theory * thm option)
71.66 + val get_def : string -> string -> term -> theory -> (theory * thm option)
71.67 + val get_axiom: string -> string -> theory -> (theory * thm option)
71.68 +
71.69 + val store_thm : string -> string -> thm -> theory -> theory * thm
71.70 +
71.71 + val to_isa_thm : thm -> (term * term) list * Thm.thm
71.72 + val to_isa_term: term -> Term.term
71.73 +
71.74 + val REFL : term -> theory -> theory * thm
71.75 + val ASSUME : term -> theory -> theory * thm
71.76 + val INST_TYPE : (hol_type,hol_type) subst -> thm -> theory -> theory * thm
71.77 + val INST : (term,term)subst -> thm -> theory -> theory * thm
71.78 + val EQ_MP : thm -> thm -> theory -> theory * thm
71.79 + val EQ_IMP_RULE : thm -> theory -> theory * thm
71.80 + val SUBST : thm list -> term -> thm -> theory -> theory * thm
71.81 + val DISJ_CASES : thm -> thm -> thm -> theory -> theory * thm
71.82 + val DISJ1: thm -> term -> theory -> theory * thm
71.83 + val DISJ2: term -> thm -> theory -> theory * thm
71.84 + val IMP_ANTISYM: thm -> thm -> theory -> theory * thm
71.85 + val SYM : thm -> theory -> theory * thm
71.86 + val MP : thm -> thm -> theory -> theory * thm
71.87 + val GEN : term -> thm -> theory -> theory * thm
71.88 + val CHOOSE : term -> thm -> thm -> theory -> theory * thm
71.89 + val EXISTS : term -> term -> thm -> theory -> theory * thm
71.90 + val ABS : term -> thm -> theory -> theory * thm
71.91 + val GEN_ABS : term option -> term list -> thm -> theory -> theory * thm
71.92 + val TRANS : thm -> thm -> theory -> theory * thm
71.93 + val CCONTR : term -> thm -> theory -> theory * thm
71.94 + val CONJ : thm -> thm -> theory -> theory * thm
71.95 + val CONJUNCT1: thm -> theory -> theory * thm
71.96 + val CONJUNCT2: thm -> theory -> theory * thm
71.97 + val NOT_INTRO: thm -> theory -> theory * thm
71.98 + val NOT_ELIM : thm -> theory -> theory * thm
71.99 + val SPEC : term -> thm -> theory -> theory * thm
71.100 + val COMB : thm -> thm -> theory -> theory * thm
71.101 + val DISCH: term -> thm -> theory -> theory * thm
71.102 +
71.103 + val type_introduction: string -> string -> string -> string -> string -> term * term -> thm -> theory -> theory * thm
71.104 +
71.105 + val new_definition : string -> string -> term -> theory -> theory * thm
71.106 + val new_specification : string -> string -> string list -> thm -> theory -> theory * thm
71.107 + val new_type_definition : string -> string -> string -> thm -> theory -> theory * thm
71.108 + val new_axiom : string -> term -> theory -> theory * thm
71.109 +
71.110 +end
71.111 +
71.112 +structure ProofKernel :> ProofKernel =
71.113 +struct
71.114 +type hol_type = Term.typ
71.115 +type term = Term.term
71.116 +datatype tag = Tag of string list
71.117 +type ('a,'b) subst = ('a * 'b) list
71.118 +datatype thm = HOLThm of (Term.term * Term.term) list * Thm.thm
71.119 +
71.120 +datatype proof_info
71.121 + = Info of {disk_info: (string * string) option ref}
71.122 +
71.123 +datatype proof = Proof of proof_info * proof_content
71.124 + and proof_content
71.125 + = PRefl of term
71.126 + | PInstT of proof * (hol_type,hol_type) subst
71.127 + | PSubst of proof list * term * proof
71.128 + | PAbs of proof * term
71.129 + | PDisch of proof * term
71.130 + | PMp of proof * proof
71.131 + | PHyp of term
71.132 + | PAxm of string * term
71.133 + | PDef of string * string * term
71.134 + | PTmSpec of string * string list * proof
71.135 + | PTyDef of string * string * proof
71.136 + | PTyIntro of string * string * string * string * term * term * proof
71.137 + | POracle of tag * term list * term
71.138 + | PDisk
71.139 + | PSpec of proof * term
71.140 + | PInst of proof * (term,term) subst
71.141 + | PGen of proof * term
71.142 + | PGenAbs of proof * term option * term list
71.143 + | PImpAS of proof * proof
71.144 + | PSym of proof
71.145 + | PTrans of proof * proof
71.146 + | PComb of proof * proof
71.147 + | PEqMp of proof * proof
71.148 + | PEqImp of proof
71.149 + | PExists of proof * term * term
71.150 + | PChoose of term * proof * proof
71.151 + | PConj of proof * proof
71.152 + | PConjunct1 of proof
71.153 + | PConjunct2 of proof
71.154 + | PDisj1 of proof * term
71.155 + | PDisj2 of proof * term
71.156 + | PDisjCases of proof * proof * proof
71.157 + | PNotI of proof
71.158 + | PNotE of proof
71.159 + | PContr of proof * term
71.160 +
71.161 +exception PK of string * string
71.162 +fun ERR f mesg = PK (f,mesg)
71.163 +
71.164 +fun print_exn e =
71.165 + case e of
71.166 + PK (m,s) => (writeln ("PK (" ^ m ^ "): " ^ s); raise e)
71.167 + | _ => Goals.print_exn e
71.168 +
71.169 +(* Compatibility. *)
71.170 +
71.171 +fun quote s = "\"" ^ s ^ "\""
71.172 +
71.173 +fun alphanum str = case String.explode str of
71.174 + first::rest => Char.isAlpha first andalso forall (fn c => Char.isAlphaNum c orelse c = #"_") rest
71.175 + | _ => error "ProofKernel.alphanum: Empty constname??"
71.176 +
71.177 +fun mk_syn c = if alphanum c then NoSyn else Syntax.literal c
71.178 +
71.179 +val keywords = ["open"]
71.180 +fun quotename c = if alphanum c andalso not (c mem keywords) then c else quote c
71.181 +
71.182 +fun smart_string_of_cterm ct =
71.183 + let
71.184 + val {sign,t,T,...} = rep_cterm ct
71.185 + (* Hack to avoid parse errors with Trueprop *)
71.186 + val ct = (cterm_of sign (HOLogic.dest_Trueprop t)
71.187 + handle TERM _ => ct)
71.188 + fun match cu = t aconv (term_of cu)
71.189 + fun G 0 = I
71.190 + | G 1 = Library.setmp show_types true
71.191 + | G 2 = Library.setmp show_all_types true
71.192 + | G _ = error ("ProofKernel.smart_string_of_cterm internal error: " ^ (G 2 string_of_cterm ct))
71.193 + fun F sh_br n =
71.194 + let
71.195 + val str = Library.setmp show_brackets sh_br (G n string_of_cterm) ct
71.196 + val cu = transform_error (read_cterm sign) (str,T)
71.197 + in
71.198 + if match cu
71.199 + then quote str
71.200 + else F false (n+1)
71.201 + end
71.202 + handle ERROR_MESSAGE mesg =>
71.203 + if String.isPrefix "Ambiguous" mesg andalso
71.204 + not sh_br
71.205 + then F true n
71.206 + else F false (n+1)
71.207 + in
71.208 + transform_error (Library.setmp Syntax.ambiguity_is_error true (F false)) 0
71.209 + end
71.210 + handle ERROR_MESSAGE mesg =>
71.211 + (writeln "Exception in smart_string_of_cterm!";
71.212 + writeln mesg;
71.213 + quote (string_of_cterm ct))
71.214 +
71.215 +val smart_string_of_thm = smart_string_of_cterm o cprop_of
71.216 +
71.217 +fun prth th = writeln ((Library.setmp print_mode [] string_of_thm) th)
71.218 +fun prc ct = writeln ((Library.setmp print_mode [] string_of_cterm) ct)
71.219 +val prin = Library.setmp print_mode [] prin
71.220 +fun pth (HOLThm(ren,thm)) =
71.221 + let
71.222 + val _ = writeln "Renaming:"
71.223 + val _ = app (fn(v,w) => (prin v; writeln " -->"; prin w)) ren
71.224 + val _ = prth thm
71.225 + in
71.226 + ()
71.227 + end
71.228 +
71.229 +fun disk_info_of (Proof(Info{disk_info,...},_)) = !disk_info
71.230 +fun mk_proof p = Proof(Info{disk_info = ref None},p)
71.231 +fun content_of (Proof(_,p)) = p
71.232 +
71.233 +fun set_disk_info_of (Proof(Info{disk_info,...},_)) thyname thmname =
71.234 + disk_info := Some(thyname,thmname)
71.235 +
71.236 +structure Lib =
71.237 +struct
71.238 +fun wrap b e s = String.concat[b,s,e]
71.239 +
71.240 +fun assoc x =
71.241 + let
71.242 + fun F [] = raise PK("Lib.assoc","Not found")
71.243 + | F ((x',y)::rest) = if x = x'
71.244 + then y
71.245 + else F rest
71.246 + in
71.247 + F
71.248 + end
71.249 +fun i mem L =
71.250 + let fun itr [] = false
71.251 + | itr (a::rst) = i=a orelse itr rst
71.252 + in itr L end;
71.253 +
71.254 +fun insert i L = if i mem L then L else i::L
71.255 +
71.256 +fun mk_set [] = []
71.257 + | mk_set (a::rst) = insert a (mk_set rst)
71.258 +
71.259 +fun [] union S = S
71.260 + | S union [] = S
71.261 + | (a::rst) union S2 = rst union (insert a S2)
71.262 +
71.263 +fun implode_subst [] = []
71.264 + | implode_subst (x::r::rest) = ((x,r)::(implode_subst rest))
71.265 + | implode_subst _ = raise ERR "implode_subst" "malformed substitution list"
71.266 +
71.267 +fun apboth f (x,y) = (f x,f y)
71.268 +end
71.269 +open Lib
71.270 +
71.271 +structure Tag =
71.272 +struct
71.273 +val empty_tag = Tag []
71.274 +fun read name = Tag [name]
71.275 +fun merge (Tag tag1) (Tag tag2) = Tag (Lib.union(tag1,tag2))
71.276 +end
71.277 +
71.278 +(* Acutal code. *)
71.279 +
71.280 +fun get_segment thyname l = (Lib.assoc "s" l
71.281 + handle PK _ => thyname)
71.282 +val get_name = Lib.assoc "n"
71.283 +
71.284 +local
71.285 + open LazyScan
71.286 + infix 7 |-- --|
71.287 + infix 5 :-- -- ^^
71.288 + infix 3 >>
71.289 + infix 0 ||
71.290 +in
71.291 +exception XML of string
71.292 +
71.293 +datatype xml = Elem of string * (string * string) list * xml list
71.294 +datatype XMLtype = XMLty of xml | FullType of hol_type
71.295 +datatype XMLterm = XMLtm of xml | FullTerm of term
71.296 +
71.297 +fun pair x y = (x,y)
71.298 +
71.299 +fun scan_id toks =
71.300 + let
71.301 + val (x,toks2) = one Char.isAlpha toks
71.302 + val (xs,toks3) = any Char.isAlphaNum toks2
71.303 + in
71.304 + (String.implode (x::xs),toks3)
71.305 + end
71.306 +
71.307 +fun scan_string str c =
71.308 + let
71.309 + fun F [] toks = (c,toks)
71.310 + | F (c::cs) toks =
71.311 + case LazySeq.getItem toks of
71.312 + Some(c',toks') =>
71.313 + if c = c'
71.314 + then F cs toks'
71.315 + else raise SyntaxError
71.316 + | None => raise SyntaxError
71.317 + in
71.318 + F (String.explode str)
71.319 + end
71.320 +
71.321 +local
71.322 + val scan_entity =
71.323 + (scan_string "amp;" #"&")
71.324 + || scan_string "quot;" #"\""
71.325 + || scan_string "gt;" #">"
71.326 + || scan_string "lt;" #"<"
71.327 +in
71.328 +fun scan_nonquote toks =
71.329 + case LazySeq.getItem toks of
71.330 + Some (c,toks') =>
71.331 + (case c of
71.332 + #"\"" => raise SyntaxError
71.333 + | #"&" => scan_entity toks'
71.334 + | c => (c,toks'))
71.335 + | None => raise SyntaxError
71.336 +end
71.337 +
71.338 +val scan_string = $$ #"\"" |-- repeat scan_nonquote --| $$ #"\"" >>
71.339 + String.implode
71.340 +
71.341 +val scan_attribute = scan_id -- $$ #"=" |-- scan_string
71.342 +
71.343 +val scan_start_of_tag = $$ #"<" |-- scan_id --
71.344 + repeat ($$ #" " |-- scan_attribute)
71.345 +
71.346 +val scan_end_of_tag = $$ #"/" |-- $$ #">" |-- succeed []
71.347 +val scan_end_tag = $$ #"<" |-- $$ #"/" |-- scan_id --| $$ #">"
71.348 +
71.349 +fun scan_children id = $$ #">" |-- repeat scan_tag -- scan_end_tag >>
71.350 + (fn (chldr,id') => if id = id'
71.351 + then chldr
71.352 + else raise XML "Tag mismatch")
71.353 +and scan_tag toks =
71.354 + let
71.355 + val ((id,atts),toks2) = scan_start_of_tag toks
71.356 + val (chldr,toks3) = (scan_children id || scan_end_of_tag) toks2
71.357 + in
71.358 + (Elem (id,atts,chldr),toks3)
71.359 + end
71.360 +end
71.361 +
71.362 +val type_of = Term.type_of
71.363 +
71.364 +val boolT = Type("bool",[])
71.365 +val propT = Type("prop",[])
71.366 +
71.367 +fun mk_defeq name rhs thy =
71.368 + let
71.369 + val ty = type_of rhs
71.370 + in
71.371 + Logic.mk_equals (Const(Sign.intern_const (sign_of thy) name,ty),rhs)
71.372 + end
71.373 +
71.374 +fun mk_teq name rhs thy =
71.375 + let
71.376 + val ty = type_of rhs
71.377 + in
71.378 + HOLogic.mk_eq (Const(Sign.intern_const (sign_of thy) name,ty),rhs)
71.379 + end
71.380 +
71.381 +fun intern_const_name thyname const thy =
71.382 + case get_hol4_const_mapping thyname const thy of
71.383 + Some (_,cname,_) => cname
71.384 + | None => (case get_hol4_const_renaming thyname const thy of
71.385 + Some cname => Sign.intern_const (sign_of thy) (thyname ^ "." ^ cname)
71.386 + | None => Sign.intern_const (sign_of thy) (thyname ^ "." ^ const))
71.387 +
71.388 +fun intern_type_name thyname const thy =
71.389 + case get_hol4_type_mapping thyname const thy of
71.390 + Some (_,cname) => cname
71.391 + | None => Sign.intern_const (sign_of thy) (thyname ^ "." ^ const)
71.392 +
71.393 +fun mk_vartype name = TFree(name,["HOL.type"])
71.394 +fun mk_thy_type thy Thy Tyop Args = Type(intern_type_name Thy Tyop thy,Args)
71.395 +
71.396 +val mk_var = Free
71.397 +
71.398 +fun dom_rng (Type("fun",[dom,rng])) = (dom,rng)
71.399 + | dom_rng _ = raise ERR "dom_rng" "Not a functional type"
71.400 +
71.401 +fun mk_thy_const thy Thy Name Ty = Const(intern_const_name Thy Name thy,Ty)
71.402 +
71.403 +local
71.404 + fun get_type sg thyname name =
71.405 + case Sign.const_type sg name of
71.406 + Some ty => ty
71.407 + | None => raise ERR "get_type" (name ^ ": No such constant")
71.408 +in
71.409 +fun prim_mk_const thy Thy Name =
71.410 + let
71.411 + val name = intern_const_name Thy Name thy
71.412 + val cmaps = HOL4ConstMaps.get thy
71.413 + in
71.414 + case StringPair.lookup(cmaps,(Thy,Name)) of
71.415 + Some(_,_,Some ty) => Const(name,ty)
71.416 + | _ => Const(name,get_type (sign_of thy) Thy name)
71.417 + end
71.418 +end
71.419 +
71.420 +fun mk_comb(f,a) = f $ a
71.421 +fun mk_abs(x,a) = Term.lambda x a
71.422 +
71.423 +(* Needed for HOL Light *)
71.424 +fun protect_tyvarname s =
71.425 + let
71.426 + fun no_quest s =
71.427 + if Char.contains s #"?"
71.428 + then String.translate (fn #"?" => "q_" | c => Char.toString c) s
71.429 + else s
71.430 + fun beg_prime s =
71.431 + if String.isPrefix "'" s
71.432 + then s
71.433 + else "'" ^ s
71.434 + in
71.435 + s |> no_quest |> beg_prime
71.436 + end
71.437 +fun protect_varname s =
71.438 + let
71.439 + fun no_beg_underscore s =
71.440 + if String.isPrefix "_" s
71.441 + then "dummy" ^ s
71.442 + else s
71.443 + in
71.444 + s |> no_beg_underscore
71.445 + end
71.446 +
71.447 +structure TypeNet =
71.448 +struct
71.449 +fun get_type_from_index thy thyname types is =
71.450 + case Int.fromString is of
71.451 + SOME i => (case Array.sub(types,i) of
71.452 + FullType ty => ty
71.453 + | XMLty xty =>
71.454 + let
71.455 + val ty = get_type_from_xml thy thyname types xty
71.456 + val _ = Array.update(types,i,FullType ty)
71.457 + in
71.458 + ty
71.459 + end)
71.460 + | NONE => raise ERR "get_type_from_index" "Bad index"
71.461 +and get_type_from_xml thy thyname types =
71.462 + let
71.463 + fun gtfx (Elem("tyi",[("i",iS)],[])) =
71.464 + get_type_from_index thy thyname types iS
71.465 + | gtfx (Elem("tyc",atts,[])) =
71.466 + mk_thy_type thy
71.467 + (get_segment thyname atts)
71.468 + (get_name atts)
71.469 + []
71.470 + | gtfx (Elem("tyv",[("n",s)],[])) = mk_vartype (protect_tyvarname s)
71.471 + | gtfx (Elem("tya",[],(Elem("tyc",atts,[]))::tys)) =
71.472 + mk_thy_type thy
71.473 + (get_segment thyname atts)
71.474 + (get_name atts)
71.475 + (map gtfx tys)
71.476 + | gtfx _ = raise ERR "get_type" "Bad type"
71.477 + in
71.478 + gtfx
71.479 + end
71.480 +
71.481 +fun input_types thyname (Elem("tylist",[("i",i)],xtys)) =
71.482 + let
71.483 + val types = Array.array(valOf (Int.fromString i),XMLty (Elem("",[],[])))
71.484 + fun IT _ [] = ()
71.485 + | IT n (xty::xtys) =
71.486 + (Array.update(types,n,XMLty xty);
71.487 + IT (n+1) xtys)
71.488 + val _ = IT 0 xtys
71.489 + in
71.490 + types
71.491 + end
71.492 + | input_types _ _ = raise ERR "input_types" "Bad type list"
71.493 +end
71.494 +
71.495 +structure TermNet =
71.496 +struct
71.497 +fun get_term_from_index thy thyname types terms is =
71.498 + case Int.fromString is of
71.499 + SOME i => (case Array.sub(terms,i) of
71.500 + FullTerm tm => tm
71.501 + | XMLtm xtm =>
71.502 + let
71.503 + val tm = get_term_from_xml thy thyname types terms xtm
71.504 + val _ = Array.update(terms,i,FullTerm tm)
71.505 + in
71.506 + tm
71.507 + end)
71.508 + | NONE => raise ERR "get_term_from_index" "Bad index"
71.509 +and get_term_from_xml thy thyname types terms =
71.510 + let
71.511 + fun get_type [] = None
71.512 + | get_type [ty] = Some (TypeNet.get_type_from_xml thy thyname types ty)
71.513 + | get_type _ = raise ERR "get_term" "Bad type"
71.514 +
71.515 + fun gtfx (Elem("tmv",[("n",name),("t",tyi)],[])) =
71.516 + mk_var(protect_varname name,TypeNet.get_type_from_index thy thyname types tyi)
71.517 + | gtfx (Elem("tmc",atts,[])) =
71.518 + let
71.519 + val segment = get_segment thyname atts
71.520 + val name = get_name atts
71.521 + in
71.522 + mk_thy_const thy segment name (TypeNet.get_type_from_index thy thyname types (Lib.assoc "t" atts))
71.523 + handle PK _ => prim_mk_const thy segment name
71.524 + end
71.525 + | gtfx (Elem("tma",[("f",tmf),("a",tma)],[])) =
71.526 + let
71.527 + val f = get_term_from_index thy thyname types terms tmf
71.528 + val a = get_term_from_index thy thyname types terms tma
71.529 + in
71.530 + mk_comb(f,a)
71.531 + end
71.532 + | gtfx (Elem("tml",[("x",tmx),("a",tma)],[])) =
71.533 + let
71.534 + val x = get_term_from_index thy thyname types terms tmx
71.535 + val a = get_term_from_index thy thyname types terms tma
71.536 + in
71.537 + mk_abs(x,a)
71.538 + end
71.539 + | gtfx (Elem("tmi",[("i",iS)],[])) =
71.540 + get_term_from_index thy thyname types terms iS
71.541 + | gtfx (Elem(tag,_,_)) =
71.542 + raise ERR "get_term" ("Not a term: "^tag)
71.543 + in
71.544 + gtfx
71.545 + end
71.546 +
71.547 +fun input_terms thyname types (Elem("tmlist",[("i",i)],xtms)) =
71.548 + let
71.549 + val terms = Array.array(valOf(Int.fromString i),XMLtm (Elem("",[],[])))
71.550 +
71.551 + fun IT _ [] = ()
71.552 + | IT n (xtm::xtms) =
71.553 + (Array.update(terms,n,XMLtm xtm);
71.554 + IT (n+1) xtms)
71.555 + val _ = IT 0 xtms
71.556 + in
71.557 + terms
71.558 + end
71.559 + | input_terms _ _ _ = raise ERR "input_terms" "Bad term list"
71.560 +end
71.561 +
71.562 +fun get_proof_dir (thyname:string) thy =
71.563 + let
71.564 + val import_segment =
71.565 + case get_segment2 thyname thy of
71.566 + Some seg => seg
71.567 + | None => get_import_segment thy
71.568 + val defpath = [(getenv "ISABELLE_HOME_USER") ^ "/proofs"]
71.569 + val path =
71.570 + case getenv "PROOF_DIRS" of
71.571 + "" => defpath
71.572 + | path => (space_explode ":" path) @ defpath
71.573 + fun find [] = error ("Unable to find import segment " ^ import_segment)
71.574 + | find (p::ps) = (let
71.575 + val dir = p ^ "/" ^ import_segment
71.576 + in
71.577 + if OS.FileSys.isDir dir
71.578 + then dir
71.579 + else find ps
71.580 + end) handle OS.SysErr _ => find ps
71.581 + in
71.582 + find path ^ "/" ^ thyname
71.583 + end
71.584 +
71.585 +fun proof_file_name thyname thmname thy =
71.586 + let
71.587 + val path = get_proof_dir thyname thy
71.588 + val _ = OS.FileSys.mkDir path handle OS.SysErr _ => ()
71.589 + in
71.590 + String.concat[path,"/",thmname,".prf"]
71.591 + end
71.592 +
71.593 +fun xml_to_proof thyname types terms prf thy =
71.594 + let
71.595 + val xml_to_hol_type = TypeNet.get_type_from_xml thy thyname types
71.596 + val xml_to_term = TermNet.get_term_from_xml thy thyname types terms
71.597 +
71.598 + fun index_to_term is =
71.599 + TermNet.get_term_from_index thy thyname types terms is
71.600 +
71.601 + fun x2p (Elem("prefl",[("i",is)],[])) = mk_proof (PRefl (index_to_term is))
71.602 + | x2p (Elem("pinstt",[],p::lambda)) =
71.603 + let
71.604 + val p = x2p p
71.605 + val lambda = implode_subst (map xml_to_hol_type lambda)
71.606 + in
71.607 + mk_proof (PInstT(p,lambda))
71.608 + end
71.609 + | x2p (Elem("psubst",[("i",is)],prf::prfs)) =
71.610 + let
71.611 + val tm = index_to_term is
71.612 + val prf = x2p prf
71.613 + val prfs = map x2p prfs
71.614 + in
71.615 + mk_proof (PSubst(prfs,tm,prf))
71.616 + end
71.617 + | x2p (Elem("pabs",[("i",is)],[prf])) =
71.618 + let
71.619 + val p = x2p prf
71.620 + val t = index_to_term is
71.621 + in
71.622 + mk_proof (PAbs (p,t))
71.623 + end
71.624 + | x2p (Elem("pdisch",[("i",is)],[prf])) =
71.625 + let
71.626 + val p = x2p prf
71.627 + val t = index_to_term is
71.628 + in
71.629 + mk_proof (PDisch (p,t))
71.630 + end
71.631 + | x2p (Elem("pmp",[],[prf1,prf2])) =
71.632 + let
71.633 + val p1 = x2p prf1
71.634 + val p2 = x2p prf2
71.635 + in
71.636 + mk_proof (PMp(p1,p2))
71.637 + end
71.638 + | x2p (Elem("phyp",[("i",is)],[])) = mk_proof (PHyp (index_to_term is))
71.639 + | x2p (Elem("paxiom",[("n",n),("i",is)],[])) =
71.640 + mk_proof (PAxm(n,index_to_term is))
71.641 + | x2p (Elem("pfact",atts,[])) =
71.642 + let
71.643 + val thyname = get_segment thyname atts
71.644 + val thmname = get_name atts
71.645 + val p = mk_proof PDisk
71.646 + val _ = set_disk_info_of p thyname thmname
71.647 + in
71.648 + p
71.649 + end
71.650 + | x2p (Elem("pdef",[("s",seg),("n",name),("i",is)],[])) =
71.651 + mk_proof (PDef(seg,name,index_to_term is))
71.652 + | x2p (Elem("ptmspec",[("s",seg)],p::names)) =
71.653 + let
71.654 + val names = map (fn Elem("name",[("n",name)],[]) => name
71.655 + | _ => raise ERR "x2p" "Bad proof (ptmspec)") names
71.656 + in
71.657 + mk_proof (PTmSpec(seg,names,x2p p))
71.658 + end
71.659 + | x2p (Elem("ptyintro",[("s",seg),("n",name),("a",abs_name),("r",rep_name)],[xP,xt,p])) =
71.660 + let
71.661 + val P = xml_to_term xP
71.662 + val t = xml_to_term xt
71.663 + in
71.664 + mk_proof (PTyIntro(seg,name,abs_name,rep_name,P,t,x2p p))
71.665 + end
71.666 + | x2p (Elem("ptydef",[("s",seg),("n",name)],[p])) =
71.667 + mk_proof (PTyDef(seg,name,x2p p))
71.668 + | x2p (xml as Elem("poracle",[],chldr)) =
71.669 + let
71.670 + val (oracles,terms) = Library.partition (fn (Elem("oracle",_,_)) => true | _ => false) chldr
71.671 + val ors = map (fn (Elem("oracle",[("n",name)],[])) => name | xml => raise ERR "x2p" "bad oracle") oracles
71.672 + val (c,asl) = case terms of
71.673 + [] => raise ERR "x2p" "Bad oracle description"
71.674 + | (hd::tl) => (hd,tl)
71.675 + val tg = foldr (fn (oracle,tg) => Tag.merge (Tag.read oracle) tg) (ors,Tag.empty_tag)
71.676 + in
71.677 + mk_proof (POracle(tg,map xml_to_term asl,xml_to_term c))
71.678 + end
71.679 + | x2p (Elem("pspec",[("i",is)],[prf])) =
71.680 + let
71.681 + val p = x2p prf
71.682 + val tm = index_to_term is
71.683 + in
71.684 + mk_proof (PSpec(p,tm))
71.685 + end
71.686 + | x2p (Elem("pinst",[],p::theta)) =
71.687 + let
71.688 + val p = x2p p
71.689 + val theta = implode_subst (map xml_to_term theta)
71.690 + in
71.691 + mk_proof (PInst(p,theta))
71.692 + end
71.693 + | x2p (Elem("pgen",[("i",is)],[prf])) =
71.694 + let
71.695 + val p = x2p prf
71.696 + val tm = index_to_term is
71.697 + in
71.698 + mk_proof (PGen(p,tm))
71.699 + end
71.700 + | x2p (Elem("pgenabs",[],prf::tms)) =
71.701 + let
71.702 + val p = x2p prf
71.703 + val tml = map xml_to_term tms
71.704 + in
71.705 + mk_proof (PGenAbs(p,None,tml))
71.706 + end
71.707 + | x2p (Elem("pgenabs",[("i",is)],prf::tms)) =
71.708 + let
71.709 + val p = x2p prf
71.710 + val tml = map xml_to_term tms
71.711 + in
71.712 + mk_proof (PGenAbs(p,Some (index_to_term is),tml))
71.713 + end
71.714 + | x2p (Elem("pimpas",[],[prf1,prf2])) =
71.715 + let
71.716 + val p1 = x2p prf1
71.717 + val p2 = x2p prf2
71.718 + in
71.719 + mk_proof (PImpAS(p1,p2))
71.720 + end
71.721 + | x2p (Elem("psym",[],[prf])) =
71.722 + let
71.723 + val p = x2p prf
71.724 + in
71.725 + mk_proof (PSym p)
71.726 + end
71.727 + | x2p (Elem("ptrans",[],[prf1,prf2])) =
71.728 + let
71.729 + val p1 = x2p prf1
71.730 + val p2 = x2p prf2
71.731 + in
71.732 + mk_proof (PTrans(p1,p2))
71.733 + end
71.734 + | x2p (Elem("pcomb",[],[prf1,prf2])) =
71.735 + let
71.736 + val p1 = x2p prf1
71.737 + val p2 = x2p prf2
71.738 + in
71.739 + mk_proof (PComb(p1,p2))
71.740 + end
71.741 + | x2p (Elem("peqmp",[],[prf1,prf2])) =
71.742 + let
71.743 + val p1 = x2p prf1
71.744 + val p2 = x2p prf2
71.745 + in
71.746 + mk_proof (PEqMp(p1,p2))
71.747 + end
71.748 + | x2p (Elem("peqimp",[],[prf])) =
71.749 + let
71.750 + val p = x2p prf
71.751 + in
71.752 + mk_proof (PEqImp p)
71.753 + end
71.754 + | x2p (Elem("pexists",[("e",ise),("w",isw)],[prf])) =
71.755 + let
71.756 + val p = x2p prf
71.757 + val ex = index_to_term ise
71.758 + val w = index_to_term isw
71.759 + in
71.760 + mk_proof (PExists(p,ex,w))
71.761 + end
71.762 + | x2p (Elem("pchoose",[("i",is)],[prf1,prf2])) =
71.763 + let
71.764 + val v = index_to_term is
71.765 + val p1 = x2p prf1
71.766 + val p2 = x2p prf2
71.767 + in
71.768 + mk_proof (PChoose(v,p1,p2))
71.769 + end
71.770 + | x2p (Elem("pconj",[],[prf1,prf2])) =
71.771 + let
71.772 + val p1 = x2p prf1
71.773 + val p2 = x2p prf2
71.774 + in
71.775 + mk_proof (PConj(p1,p2))
71.776 + end
71.777 + | x2p (Elem("pconjunct1",[],[prf])) =
71.778 + let
71.779 + val p = x2p prf
71.780 + in
71.781 + mk_proof (PConjunct1 p)
71.782 + end
71.783 + | x2p (Elem("pconjunct2",[],[prf])) =
71.784 + let
71.785 + val p = x2p prf
71.786 + in
71.787 + mk_proof (PConjunct2 p)
71.788 + end
71.789 + | x2p (Elem("pdisj1",[("i",is)],[prf])) =
71.790 + let
71.791 + val p = x2p prf
71.792 + val t = index_to_term is
71.793 + in
71.794 + mk_proof (PDisj1 (p,t))
71.795 + end
71.796 + | x2p (Elem("pdisj2",[("i",is)],[prf])) =
71.797 + let
71.798 + val p = x2p prf
71.799 + val t = index_to_term is
71.800 + in
71.801 + mk_proof (PDisj2 (p,t))
71.802 + end
71.803 + | x2p (Elem("pdisjcases",[],[prf1,prf2,prf3])) =
71.804 + let
71.805 + val p1 = x2p prf1
71.806 + val p2 = x2p prf2
71.807 + val p3 = x2p prf3
71.808 + in
71.809 + mk_proof (PDisjCases(p1,p2,p3))
71.810 + end
71.811 + | x2p (Elem("pnoti",[],[prf])) =
71.812 + let
71.813 + val p = x2p prf
71.814 + in
71.815 + mk_proof (PNotI p)
71.816 + end
71.817 + | x2p (Elem("pnote",[],[prf])) =
71.818 + let
71.819 + val p = x2p prf
71.820 + in
71.821 + mk_proof (PNotE p)
71.822 + end
71.823 + | x2p (Elem("pcontr",[("i",is)],[prf])) =
71.824 + let
71.825 + val p = x2p prf
71.826 + val t = index_to_term is
71.827 + in
71.828 + mk_proof (PContr (p,t))
71.829 + end
71.830 + | x2p xml = raise ERR "x2p" "Bad proof"
71.831 + in
71.832 + x2p prf
71.833 + end
71.834 +
71.835 +fun import_proof thyname thmname thy =
71.836 + let
71.837 + val is = TextIO.openIn(proof_file_name thyname thmname thy)
71.838 + val (proof_xml,_) = scan_tag (LazySeq.of_instream is)
71.839 + val _ = TextIO.closeIn is
71.840 + in
71.841 + case proof_xml of
71.842 + Elem("proof",[],xtypes::xterms::prf::rest) =>
71.843 + let
71.844 + val types = TypeNet.input_types thyname xtypes
71.845 + val terms = TermNet.input_terms thyname types xterms
71.846 + in
71.847 + (case rest of
71.848 + [] => None
71.849 + | [xtm] => Some (fn thy => TermNet.get_term_from_xml thy thyname types terms xtm)
71.850 + | _ => raise ERR "import_proof" "Bad argument list",
71.851 + xml_to_proof thyname types terms prf)
71.852 + end
71.853 + | _ => raise ERR "import_proof" "Bad proof"
71.854 + end
71.855 +
71.856 +fun uniq_compose m th i st =
71.857 + let
71.858 + val res = bicompose false (false,th,m) i st
71.859 + in
71.860 + case Seq.pull res of
71.861 + Some (th,rest) => (case Seq.pull rest of
71.862 + Some _ => raise ERR "uniq_compose" "Not unique!"
71.863 + | None => th)
71.864 + | None => raise ERR "uniq_compose" "No result"
71.865 + end
71.866 +
71.867 +val reflexivity_thm = thm "refl"
71.868 +val substitution_thm = thm "subst"
71.869 +val mp_thm = thm "mp"
71.870 +val imp_antisym_thm = thm "light_imp_as"
71.871 +val disch_thm = thm "impI"
71.872 +val ccontr_thm = thm "ccontr"
71.873 +
71.874 +val meta_eq_to_obj_eq_thm = thm "meta_eq_to_obj_eq"
71.875 +
71.876 +val gen_thm = thm "HOLallI"
71.877 +val choose_thm = thm "exE"
71.878 +val exists_thm = thm "exI"
71.879 +val conj_thm = thm "conjI"
71.880 +val conjunct1_thm = thm "conjunct1"
71.881 +val conjunct2_thm = thm "conjunct2"
71.882 +val spec_thm = thm "spec"
71.883 +val disj_cases_thm = thm "disjE"
71.884 +val disj1_thm = thm "disjI1"
71.885 +val disj2_thm = thm "disjI2"
71.886 +
71.887 +local
71.888 + val th = thm "not_def"
71.889 + val sg = sign_of_thm th
71.890 + val pp = reflexive (cterm_of sg (Const("Trueprop",boolT-->propT)))
71.891 +in
71.892 +val not_elim_thm = combination pp th
71.893 +end
71.894 +
71.895 +val not_intro_thm = symmetric not_elim_thm
71.896 +val abs_thm = thm "ext"
71.897 +val trans_thm = thm "trans"
71.898 +val symmetry_thm = thm "sym"
71.899 +val transitivity_thm = thm "trans"
71.900 +val eqmp_thm = thm "iffD1"
71.901 +val eqimp_thm = thm "HOL4Setup.eq_imp"
71.902 +val comb_thm = thm "cong"
71.903 +
71.904 +(* Beta-eta normalizes a theorem (only the conclusion, not the *
71.905 +hypotheses!) *)
71.906 +
71.907 +fun beta_eta_thm th =
71.908 + let
71.909 + val th1 = Thm.equal_elim (Thm.beta_conversion true (cprop_of th)) th
71.910 + val th2 = Thm.equal_elim (Thm.eta_conversion (cprop_of th1)) th1
71.911 + in
71.912 + th2
71.913 + end
71.914 +
71.915 +fun implies_elim_all th =
71.916 + foldl (fn (th,p) => implies_elim th (assume p)) (th,cprems_of th)
71.917 +
71.918 +fun norm_hyps th =
71.919 + th |> beta_eta_thm
71.920 + |> implies_elim_all
71.921 + |> implies_intr_hyps
71.922 +
71.923 +fun mk_GEN v th sg =
71.924 + let
71.925 + val c = HOLogic.dest_Trueprop (concl_of th)
71.926 + val cv = cterm_of sg v
71.927 + val lc = Term.lambda v c
71.928 + val clc = Thm.cterm_of sg lc
71.929 + val cvty = ctyp_of_term cv
71.930 + val th1 = implies_elim_all th
71.931 + val th2 = beta_eta_thm (forall_intr cv th1)
71.932 + val th3 = th2 COMP (beta_eta_thm (Drule.instantiate' [Some cvty] [Some clc] gen_thm))
71.933 + val c = prop_of th3
71.934 + val vname = fst(dest_Free v)
71.935 + val (cold,cnew) = case c of
71.936 + tpc $ (Const("All",allT) $ Abs(oldname,ty,body)) =>
71.937 + (Abs(oldname,dummyT,Bound 0),Abs(vname,dummyT,Bound 0))
71.938 + | tpc $ (Const("All",allT) $ rest) => (tpc,tpc)
71.939 + | _ => raise ERR "mk_GEN" "Unknown conclusion"
71.940 + val th4 = Thm.rename_boundvars cold cnew th3
71.941 + val res = implies_intr_hyps th4
71.942 + in
71.943 + res
71.944 + end
71.945 +
71.946 +(* rotate left k places, leaving the first j and last l premises alone
71.947 +*)
71.948 +
71.949 +fun permute_prems j k 0 th = Thm.permute_prems j k th
71.950 + | permute_prems j k l th =
71.951 + th |> Thm.permute_prems 0 (~l)
71.952 + |> Thm.permute_prems (j+l) k
71.953 + |> Thm.permute_prems 0 l
71.954 +
71.955 +fun rearrange sg tm th =
71.956 + let
71.957 + val tm' = Pattern.beta_eta_contract tm
71.958 + fun find [] n = permute_prems 0 1 0 (implies_intr (Thm.cterm_of sg tm) th)
71.959 + | find (p::ps) n = if tm' aconv (Pattern.beta_eta_contract p)
71.960 + then permute_prems n 1 0 th
71.961 + else find ps (n+1)
71.962 + in
71.963 + find (prems_of th) 0
71.964 + end
71.965 +
71.966 +fun zip (x::xs) (y::ys) = (x,y)::(zip xs ys)
71.967 + | zip [] [] = []
71.968 + | zip _ _ = raise ERR "zip" "arguments not of same length"
71.969 +
71.970 +fun mk_INST dom rng th =
71.971 + th |> forall_intr_list dom
71.972 + |> forall_elim_list rng
71.973 +
71.974 +fun apply_tyinst_typ tyinst =
71.975 + let
71.976 + fun G (ty as TFree _) =
71.977 + (case try (Lib.assoc ty) tyinst of
71.978 + Some ty' => ty'
71.979 + | None => ty)
71.980 + | G (Type(tyname,tys)) = Type(tyname,map G tys)
71.981 + | G (TVar _) = raise ERR "apply_tyinst_typ" "Scematic variable found"
71.982 + in
71.983 + G
71.984 + end
71.985 +
71.986 +fun apply_tyinst_term tyinst =
71.987 + let
71.988 + val G = apply_tyinst_typ tyinst
71.989 + fun F (tm as Bound _) = tm
71.990 + | F (tm as Free(vname,ty)) = Free(vname,G ty)
71.991 + | F (tm as Const(vname,ty)) = Const(vname,G ty)
71.992 + | F (tm1 $ tm2) = (F tm1) $ (F tm2)
71.993 + | F (Abs(vname,ty,body)) = Abs(vname,G ty,F body)
71.994 + | F (Var _) = raise ERR "apply_tyinst_term" "Schematic variable found"
71.995 + in
71.996 + F
71.997 + end
71.998 +
71.999 +fun apply_inst_term tminst =
71.1000 + let
71.1001 + fun F (tm as Bound _) = tm
71.1002 + | F (tm as Free _) =
71.1003 + (case try (Lib.assoc tm) tminst of
71.1004 + Some tm' => tm'
71.1005 + | None => tm)
71.1006 + | F (tm as Const _) = tm
71.1007 + | F (tm1 $ tm2) = (F tm1) $ (F tm2)
71.1008 + | F (Abs(vname,ty,body)) = Abs(vname,ty,F body)
71.1009 + | F (Var _) = raise ERR "apply_inst_term" "Schematic variable found"
71.1010 + in
71.1011 + F
71.1012 + end
71.1013 +
71.1014 +val collect_vars =
71.1015 + let
71.1016 + fun F vars (Bound _) = vars
71.1017 + | F vars (tm as Free _) =
71.1018 + if tm mem vars
71.1019 + then vars
71.1020 + else (tm::vars)
71.1021 + | F vars (Const _) = vars
71.1022 + | F vars (tm1 $ tm2) = F (F vars tm1) tm2
71.1023 + | F vars (Abs(_,_,body)) = F vars body
71.1024 + | F vars (Var _) = raise ERR "collect_vars" "Schematic variable found"
71.1025 + in
71.1026 + F []
71.1027 + end
71.1028 +
71.1029 +(* Code for disambiguating variablenames (wrt. types) *)
71.1030 +
71.1031 +val disamb_info_empty = {vars=[],rens=[]}
71.1032 +
71.1033 +fun rens_of {vars,rens} = rens
71.1034 +
71.1035 +fun name_of_var (Free(vname,_)) = vname
71.1036 + | name_of_var _ = raise ERR "name_of_var" "Not a variable"
71.1037 +
71.1038 +fun disamb_helper {vars,rens} tm =
71.1039 + let
71.1040 + val varstm = collect_vars tm
71.1041 + fun process (v as Free(vname,ty),(vars,rens,inst)) =
71.1042 + if v mem vars
71.1043 + then (vars,rens,inst)
71.1044 + else (case try (Lib.assoc v) rens of
71.1045 + Some vnew => (vars,rens,(v,vnew)::inst)
71.1046 + | None => if exists (fn Free(vname',_) => vname = vname' | _ => raise ERR "disamb_helper" "Bad varlist") vars
71.1047 + then
71.1048 + let
71.1049 + val tmnames = map name_of_var varstm
71.1050 + val varnames = map name_of_var vars
71.1051 + val (dom,rng) = ListPair.unzip rens
71.1052 + val rensnames = (map name_of_var dom) @ (map name_of_var rng)
71.1053 + val instnames = map name_of_var (snd (ListPair.unzip inst))
71.1054 + val allnames = tmnames @ varnames @ rensnames @ instnames
71.1055 + val vnewname = Term.variant allnames vname
71.1056 + val vnew = Free(vnewname,ty)
71.1057 + in
71.1058 + (vars,(v,vnew)::rens,(v,vnew)::inst)
71.1059 + end
71.1060 + else (v::vars,rens,inst))
71.1061 + | process _ = raise ERR "disamb_helper" "Internal error"
71.1062 +
71.1063 + val (vars',rens',inst) =
71.1064 + foldr process (varstm,(vars,rens,[]))
71.1065 + in
71.1066 + ({vars=vars',rens=rens'},inst)
71.1067 + end
71.1068 +
71.1069 +fun disamb_term_from info tm =
71.1070 + let
71.1071 + val (info',inst) = disamb_helper info tm
71.1072 + in
71.1073 + (info',apply_inst_term inst tm)
71.1074 + end
71.1075 +
71.1076 +fun swap (x,y) = (y,x)
71.1077 +
71.1078 +fun has_ren (HOLThm([],_)) = false
71.1079 + | has_ren _ = true
71.1080 +
71.1081 +fun prinfo {vars,rens} = (writeln "Vars:";
71.1082 + app prin vars;
71.1083 + writeln "Renaming:";
71.1084 + app (fn(x,y)=>(prin x; writeln " -->"; prin y)) rens)
71.1085 +
71.1086 +fun disamb_thm_from info (hth as HOLThm(rens,thm)) =
71.1087 + let
71.1088 + val inv_rens = map swap rens
71.1089 + val orig_thm = apply_inst_term inv_rens (prop_of thm)
71.1090 + val (info',inst) = disamb_helper info orig_thm
71.1091 + val rens' = map (apsnd (apply_inst_term inst)) inv_rens
71.1092 + val (dom,rng) = ListPair.unzip (rens' @ inst)
71.1093 + val sg = sign_of_thm thm
71.1094 + val thm' = mk_INST (map (cterm_of sg) dom) (map (cterm_of sg) rng) thm
71.1095 + in
71.1096 + (info',thm')
71.1097 + end
71.1098 +
71.1099 +fun disamb_terms_from info tms =
71.1100 + foldr (fn (tm,(info,tms)) =>
71.1101 + let
71.1102 + val (info',tm') = disamb_term_from info tm
71.1103 + in
71.1104 + (info',tm'::tms)
71.1105 + end)
71.1106 + (tms,(info,[]))
71.1107 +
71.1108 +fun disamb_thms_from info hthms =
71.1109 + foldr (fn (hthm,(info,thms)) =>
71.1110 + let
71.1111 + val (info',tm') = disamb_thm_from info hthm
71.1112 + in
71.1113 + (info',tm'::thms)
71.1114 + end)
71.1115 + (hthms,(info,[]))
71.1116 +
71.1117 +fun disamb_term tm = disamb_term_from disamb_info_empty tm
71.1118 +fun disamb_terms tms = disamb_terms_from disamb_info_empty tms
71.1119 +fun disamb_thm thm = disamb_thm_from disamb_info_empty thm
71.1120 +fun disamb_thms thms = disamb_thms_from disamb_info_empty thms
71.1121 +
71.1122 +fun norm_hthm sg (hth as HOLThm([],_)) = hth
71.1123 + | norm_hthm sg (hth as HOLThm(rens,th)) =
71.1124 + let
71.1125 + val vars = collect_vars (prop_of th)
71.1126 + val (rens',inst,_) =
71.1127 + foldr (fn((ren as (vold as Free(vname,_),vnew)),
71.1128 + (rens,inst,vars)) =>
71.1129 + (case Library.find_first (fn Free(v,_) => v = vname | _ => false) vars of
71.1130 + Some v' => if v' = vold
71.1131 + then (rens,(vnew,vold)::inst,vold::vars)
71.1132 + else (ren::rens,(vold,vnew)::inst,vnew::vars)
71.1133 + | None => (rens,(vnew,vold)::inst,vold::vars))
71.1134 + | _ => raise ERR "norm_hthm" "Internal error")
71.1135 + (rens,([],[],vars))
71.1136 + val (dom,rng) = ListPair.unzip inst
71.1137 + val th' = mk_INST (map (cterm_of sg) dom) (map (cterm_of sg) rng) th
71.1138 + val nvars = collect_vars (prop_of th')
71.1139 + val rens' = filter (fn(_,v) => v mem nvars) rens
71.1140 + val res = HOLThm(rens',th')
71.1141 + in
71.1142 + res
71.1143 + end
71.1144 +
71.1145 +(* End of disambiguating code *)
71.1146 +
71.1147 +val debug = ref false
71.1148 +
71.1149 +fun if_debug f x = if !debug then f x else ()
71.1150 +val message = if_debug writeln
71.1151 +
71.1152 +val conjE_helper = Thm.permute_prems 0 1 conjE
71.1153 +
71.1154 +fun get_hol4_thm thyname thmname thy =
71.1155 + case get_hol4_theorem thyname thmname thy of
71.1156 + Some hth => Some (HOLThm hth)
71.1157 + | None =>
71.1158 + let
71.1159 + val pending = HOL4Pending.get thy
71.1160 + in
71.1161 + case StringPair.lookup (pending,(thyname,thmname)) of
71.1162 + Some hth => Some (HOLThm hth)
71.1163 + | None => None
71.1164 + end
71.1165 +
71.1166 +fun non_trivial_term_consts tm =
71.1167 + filter (fn c => not (c = "Trueprop" orelse
71.1168 + c = "All" orelse
71.1169 + c = "op -->" orelse
71.1170 + c = "op &" orelse
71.1171 + c = "op =")) (Term.term_consts tm)
71.1172 +
71.1173 +fun match_consts t (* th *) =
71.1174 + let
71.1175 + fun add_consts (Const (c, _), cs) =
71.1176 + (case c of
71.1177 + "op =" => "==" ins_string cs
71.1178 + | "op -->" => "==>" ins_string cs
71.1179 + | "All" => cs
71.1180 + | "all" => cs
71.1181 + | "op &" => cs
71.1182 + | "Trueprop" => cs
71.1183 + | _ => c ins_string cs)
71.1184 + | add_consts (t $ u, cs) = add_consts (t, add_consts (u, cs))
71.1185 + | add_consts (Abs (_, _, t), cs) = add_consts (t, cs)
71.1186 + | add_consts (_, cs) = cs
71.1187 + val t_consts = add_consts(t,[])
71.1188 + in
71.1189 + fn th => eq_set(t_consts,add_consts(prop_of th,[]))
71.1190 + end
71.1191 +
71.1192 +fun split_name str =
71.1193 + let
71.1194 + val sub = Substring.all str
71.1195 + val (f,idx) = apsnd Substring.string (Substring.splitr Char.isDigit sub)
71.1196 + val (newstr,u) = apboth Substring.string (Substring.splitr (fn c => c = #"_") f)
71.1197 + in
71.1198 + if not (idx = "") andalso u = "_"
71.1199 + then Some (newstr,valOf(Int.fromString idx))
71.1200 + else None
71.1201 + end
71.1202 + handle _ => None
71.1203 +
71.1204 +fun rewrite_hol4_term t thy =
71.1205 + let
71.1206 + val sg = sign_of thy
71.1207 +
71.1208 + val hol4rews1 = map (transfer_sg sg) (HOL4Rewrites.get thy)
71.1209 + val hol4ss = empty_ss setmksimps single addsimps hol4rews1
71.1210 + in
71.1211 + transfer_sg sg (Simplifier.full_rewrite hol4ss (cterm_of sg t))
71.1212 + end
71.1213 +
71.1214 +
71.1215 +fun get_isabelle_thm thyname thmname hol4conc thy =
71.1216 + let
71.1217 + val sg = sign_of thy
71.1218 +
71.1219 + val (info,hol4conc') = disamb_term hol4conc
71.1220 + val i2h_conc = symmetric (rewrite_hol4_term (HOLogic.mk_Trueprop hol4conc') thy)
71.1221 + val isaconc =
71.1222 + case concl_of i2h_conc of
71.1223 + Const("==",_) $ lhs $ _ => lhs
71.1224 + | _ => error "get_isabelle_thm" "Bad rewrite rule"
71.1225 + val _ = (message "Original conclusion:";
71.1226 + if_debug prin hol4conc';
71.1227 + message "Modified conclusion:";
71.1228 + if_debug prin isaconc)
71.1229 +
71.1230 + fun mk_res th = HOLThm(rens_of info,equal_elim i2h_conc th)
71.1231 + in
71.1232 + case get_hol4_mapping thyname thmname thy of
71.1233 + Some (Some thmname) =>
71.1234 + let
71.1235 + val _ = message ("Looking for " ^ thmname)
71.1236 + val th1 = (Some (transform_error (PureThy.get_thm thy) thmname)
71.1237 + handle ERROR_MESSAGE _ =>
71.1238 + (case split_name thmname of
71.1239 + Some (listname,idx) => (Some (nth_elem(idx-1,PureThy.get_thms thy listname))
71.1240 + handle _ => None)
71.1241 + | None => None))
71.1242 + in
71.1243 + case th1 of
71.1244 + Some th2 =>
71.1245 + (case Shuffler.set_prop thy isaconc [(thmname,th2)] of
71.1246 + Some (_,th) => (message "YES";(thy, Some (mk_res th)))
71.1247 + | None => (message "NO2";error "get_isabelle_thm" "Bad mapping"))
71.1248 + | None => (message "NO1";error "get_isabelle_thm" "Bad mapping")
71.1249 + end
71.1250 + | Some None => error ("Trying to access ignored theorem " ^ thmname)
71.1251 + | None =>
71.1252 + let
71.1253 + val _ = (message "Looking for conclusion:";
71.1254 + if_debug prin isaconc)
71.1255 + val cs = non_trivial_term_consts isaconc
71.1256 + val _ = (message "Looking for consts:";
71.1257 + message (String.concat cs))
71.1258 + val pot_thms = Shuffler.find_potential thy isaconc
71.1259 + val _ = message ((Int.toString (length pot_thms)) ^ " potential theorems")
71.1260 + in
71.1261 + case Shuffler.set_prop thy isaconc pot_thms of
71.1262 + Some (isaname,th) =>
71.1263 + let
71.1264 + val hth as HOLThm args = mk_res th
71.1265 + val thy' = thy |> add_hol4_theorem thyname thmname args
71.1266 + |> add_hol4_mapping thyname thmname isaname
71.1267 + in
71.1268 + (thy',Some hth)
71.1269 + end
71.1270 + | None => (thy,None)
71.1271 + end
71.1272 + end
71.1273 + handle _ => (thy,None)
71.1274 +
71.1275 +fun get_thm thyname thmname thy =
71.1276 + case get_hol4_thm thyname thmname thy of
71.1277 + Some hth => (thy,Some hth)
71.1278 + | None => ((case fst (import_proof thyname thmname thy) of
71.1279 + Some f => get_isabelle_thm thyname thmname (f thy) thy
71.1280 + | None => (thy,None))
71.1281 + handle e as IO.Io _ => (thy,None)
71.1282 + | e as PK _ => (thy,None))
71.1283 +
71.1284 +fun rename_const thyname thy name =
71.1285 + case get_hol4_const_renaming thyname name thy of
71.1286 + Some cname => cname
71.1287 + | None => name
71.1288 +
71.1289 +fun get_def thyname constname rhs thy =
71.1290 + let
71.1291 + val constname = rename_const thyname thy constname
71.1292 + val (thmname,thy') = get_defname thyname constname thy
71.1293 + val _ = message ("Looking for definition " ^ thyname ^ "." ^ thmname)
71.1294 + in
71.1295 + get_isabelle_thm thyname thmname (mk_teq (thyname ^ "." ^ constname) rhs thy') thy'
71.1296 + end
71.1297 +
71.1298 +fun get_axiom thyname axname thy =
71.1299 + case get_thm thyname axname thy of
71.1300 + arg as (_,Some _) => arg
71.1301 + | _ => raise ERR "get_axiom" ("Trying to retrieve axiom (" ^ axname ^ ")")
71.1302 +
71.1303 +fun intern_store_thm gen_output thyname thmname hth thy =
71.1304 + let
71.1305 + val sg = sign_of thy
71.1306 + val (hth' as HOLThm (args as (_,th))) = norm_hthm sg hth
71.1307 + val _ = if has_ren hth' then warning ("Theorem " ^ thmname ^ " needs variable-disambiguating")
71.1308 + else ()
71.1309 + val rew = rewrite_hol4_term (concl_of th) thy
71.1310 + val th = equal_elim rew th
71.1311 + val thy' = add_hol4_pending thyname thmname args thy
71.1312 + val thy2 = if gen_output
71.1313 + then add_dump ("lemma " ^ thmname ^ ": " ^ (smart_string_of_thm th) ^ "\n by (import " ^ thyname ^ " " ^ thmname ^ ")") thy'
71.1314 + else thy'
71.1315 + in
71.1316 + (thy2,hth')
71.1317 + end
71.1318 +
71.1319 +val store_thm = intern_store_thm true
71.1320 +
71.1321 +fun mk_REFL ctm =
71.1322 + let
71.1323 + val cty = Thm.ctyp_of_term ctm
71.1324 + in
71.1325 + Drule.instantiate' [Some cty] [Some ctm] reflexivity_thm
71.1326 + end
71.1327 +
71.1328 +fun REFL tm thy =
71.1329 + let
71.1330 + val _ = message "REFL:"
71.1331 + val (info,tm') = disamb_term tm
71.1332 + val sg = sign_of thy
71.1333 + val ctm = Thm.cterm_of sg tm'
71.1334 + val res = HOLThm(rens_of info,mk_REFL ctm)
71.1335 + val _ = if_debug pth res
71.1336 + in
71.1337 + (thy,res)
71.1338 + end
71.1339 +
71.1340 +fun ASSUME tm thy =
71.1341 + let
71.1342 + val _ = message "ASSUME:"
71.1343 + val (info,tm') = disamb_term tm
71.1344 + val sg = sign_of thy
71.1345 + val ctm = Thm.cterm_of sg (HOLogic.mk_Trueprop tm')
71.1346 + val th = Thm.trivial ctm
71.1347 + val res = HOLThm(rens_of info,th)
71.1348 + val _ = if_debug pth res
71.1349 + in
71.1350 + (thy,res)
71.1351 + end
71.1352 +
71.1353 +fun INST_TYPE lambda (hth as HOLThm(rens,th)) thy =
71.1354 + let
71.1355 + val _ = message "INST_TYPE:"
71.1356 + val _ = if_debug pth hth
71.1357 + val sg = sign_of thy
71.1358 + val tys_before = add_term_tfrees (prop_of th,[])
71.1359 + val th1 = varifyT th
71.1360 + val tys_after = add_term_tvars (prop_of th1,[])
71.1361 + val tyinst = map (fn (bef,(i,_)) =>
71.1362 + (case try (Lib.assoc (TFree bef)) lambda of
71.1363 + Some ty => (i,ctyp_of sg ty)
71.1364 + | None => (i,ctyp_of sg (TFree bef))
71.1365 + ))
71.1366 + (zip tys_before tys_after)
71.1367 + val res = Drule.instantiate (tyinst,[]) th1
71.1368 + val appty = apboth (apply_tyinst_term lambda)
71.1369 + val hth = HOLThm(map appty rens,res)
71.1370 + val res = norm_hthm sg hth
71.1371 + val _ = message "RESULT:"
71.1372 + val _ = if_debug pth res
71.1373 + in
71.1374 + (thy,res)
71.1375 + end
71.1376 +
71.1377 +fun INST sigma hth thy =
71.1378 + let
71.1379 + val _ = message "INST:"
71.1380 + val _ = if_debug (app (fn (x,y) => (prin x; prin y))) sigma
71.1381 + val _ = if_debug pth hth
71.1382 + val sg = sign_of thy
71.1383 + val (sdom,srng) = ListPair.unzip sigma
71.1384 + val (info,th) = disamb_thm hth
71.1385 + val (info',srng') = disamb_terms_from info srng
71.1386 + val rens = rens_of info'
71.1387 + val sdom' = map (apply_inst_term rens) sdom
71.1388 + val th1 = mk_INST (map (cterm_of sg) sdom') (map (cterm_of sg) srng') th
71.1389 + val res = HOLThm(rens,th1)
71.1390 + val _ = message "RESULT:"
71.1391 + val _ = if_debug pth res
71.1392 + in
71.1393 + (thy,res)
71.1394 + end
71.1395 +
71.1396 +fun EQ_IMP_RULE (hth as HOLThm(rens,th)) thy =
71.1397 + let
71.1398 + val _ = message "EQ_IMP_RULE:"
71.1399 + val _ = if_debug pth hth
71.1400 + val res = HOLThm(rens,th RS eqimp_thm)
71.1401 + val _ = message "RESULT:"
71.1402 + val _ = if_debug pth res
71.1403 + in
71.1404 + (thy,res)
71.1405 + end
71.1406 +
71.1407 +fun mk_EQ_MP th1 th2 = [beta_eta_thm th1,beta_eta_thm th2] MRS eqmp_thm
71.1408 +
71.1409 +fun EQ_MP hth1 hth2 thy =
71.1410 + let
71.1411 + val _ = message "EQ_MP:"
71.1412 + val _ = if_debug pth hth1
71.1413 + val _ = if_debug pth hth2
71.1414 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1415 + val res = HOLThm(rens_of info,mk_EQ_MP th1 th2)
71.1416 + val _ = message "RESULT:"
71.1417 + val _ = if_debug pth res
71.1418 + in
71.1419 + (thy,res)
71.1420 + end
71.1421 +
71.1422 +fun mk_COMB th1 th2 sg =
71.1423 + let
71.1424 + val (f,g) = case concl_of th1 of
71.1425 + _ $ (Const("op =",_) $ f $ g) => (f,g)
71.1426 + | _ => raise ERR "mk_COMB" "First theorem not an equality"
71.1427 + val (x,y) = case concl_of th2 of
71.1428 + _ $ (Const("op =",_) $ x $ y) => (x,y)
71.1429 + | _ => raise ERR "mk_COMB" "Second theorem not an equality"
71.1430 + val fty = type_of f
71.1431 + val (fd,fr) = dom_rng fty
71.1432 + val comb_thm' = Drule.instantiate'
71.1433 + [Some (ctyp_of sg fd),Some (ctyp_of sg fr)]
71.1434 + [Some (cterm_of sg f),Some (cterm_of sg g),
71.1435 + Some (cterm_of sg x),Some (cterm_of sg y)] comb_thm
71.1436 + in
71.1437 + [th1,th2] MRS comb_thm'
71.1438 + end
71.1439 +
71.1440 +fun SUBST rews ctxt hth thy =
71.1441 + let
71.1442 + val _ = message "SUBST:"
71.1443 + val _ = if_debug (app pth) rews
71.1444 + val _ = if_debug prin ctxt
71.1445 + val _ = if_debug pth hth
71.1446 + val (info,th) = disamb_thm hth
71.1447 + val (info1,ctxt') = disamb_term_from info ctxt
71.1448 + val (info2,rews') = disamb_thms_from info1 rews
71.1449 +
71.1450 + val sg = sign_of thy
71.1451 + val cctxt = cterm_of sg ctxt'
71.1452 + fun subst th [] = th
71.1453 + | subst th (rew::rews) = subst (mk_COMB th rew sg) rews
71.1454 + val res = HOLThm(rens_of info2,mk_EQ_MP (subst (mk_REFL cctxt) rews') th)
71.1455 + val _ = message "RESULT:"
71.1456 + val _ = if_debug pth res
71.1457 + in
71.1458 + (thy,res)
71.1459 + end
71.1460 +
71.1461 +fun DISJ_CASES hth hth1 hth2 thy =
71.1462 + let
71.1463 + val _ = message "DISJ_CASES:"
71.1464 + val _ = if_debug (app pth) [hth,hth1,hth2]
71.1465 + val (info,th) = disamb_thm hth
71.1466 + val (info1,th1) = disamb_thm_from info hth1
71.1467 + val (info2,th2) = disamb_thm_from info1 hth2
71.1468 + val sg = sign_of thy
71.1469 + val th1 = norm_hyps th1
71.1470 + val th2 = norm_hyps th2
71.1471 + val (l,r) = case concl_of th of
71.1472 + _ $ (Const("op |",_) $ l $ r) => (l,r)
71.1473 + | _ => raise ERR "DISJ_CASES" "Conclusion not a disjunction"
71.1474 + val th1' = rearrange sg (HOLogic.mk_Trueprop l) th1
71.1475 + val th2' = rearrange sg (HOLogic.mk_Trueprop r) th2
71.1476 + val res1 = th RS disj_cases_thm
71.1477 + val res2 = uniq_compose ((nprems_of th1')-1) th1' ((nprems_of th)+1) res1
71.1478 + val res3 = uniq_compose ((nprems_of th2')-1) th2' (nprems_of res2) res2
71.1479 + val res = HOLThm(rens_of info2,res3)
71.1480 + val _ = message "RESULT:"
71.1481 + val _ = if_debug pth res
71.1482 + in
71.1483 + (thy,res)
71.1484 + end
71.1485 +
71.1486 +fun DISJ1 hth tm thy =
71.1487 + let
71.1488 + val _ = message "DISJ1:"
71.1489 + val _ = if_debug pth hth
71.1490 + val _ = if_debug prin tm
71.1491 + val (info,th) = disamb_thm hth
71.1492 + val (info',tm') = disamb_term_from info tm
71.1493 + val sg = sign_of thy
71.1494 + val ct = Thm.cterm_of sg tm'
71.1495 + val disj1_thm' = Drule.instantiate' [] [None,Some ct] disj1_thm
71.1496 + val res = HOLThm(rens_of info',th RS disj1_thm')
71.1497 + val _ = message "RESULT:"
71.1498 + val _ = if_debug pth res
71.1499 + in
71.1500 + (thy,res)
71.1501 + end
71.1502 +
71.1503 +fun DISJ2 tm hth thy =
71.1504 + let
71.1505 + val _ = message "DISJ1:"
71.1506 + val _ = if_debug prin tm
71.1507 + val _ = if_debug pth hth
71.1508 + val (info,th) = disamb_thm hth
71.1509 + val (info',tm') = disamb_term_from info tm
71.1510 + val sg = sign_of thy
71.1511 + val ct = Thm.cterm_of sg tm'
71.1512 + val disj2_thm' = Drule.instantiate' [] [None,Some ct] disj2_thm
71.1513 + val res = HOLThm(rens_of info',th RS disj2_thm')
71.1514 + val _ = message "RESULT:"
71.1515 + val _ = if_debug pth res
71.1516 + in
71.1517 + (thy,res)
71.1518 + end
71.1519 +
71.1520 +fun IMP_ANTISYM hth1 hth2 thy =
71.1521 + let
71.1522 + val _ = message "IMP_ANTISYM:"
71.1523 + val _ = if_debug pth hth1
71.1524 + val _ = if_debug pth hth2
71.1525 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1526 + val th = [beta_eta_thm th1,beta_eta_thm th2] MRS imp_antisym_thm
71.1527 + val res = HOLThm(rens_of info,th)
71.1528 + val _ = message "RESULT:"
71.1529 + val _ = if_debug pth res
71.1530 + in
71.1531 + (thy,res)
71.1532 + end
71.1533 +
71.1534 +fun SYM (hth as HOLThm(rens,th)) thy =
71.1535 + let
71.1536 + val _ = message "SYM:"
71.1537 + val _ = if_debug pth hth
71.1538 + val th = th RS symmetry_thm
71.1539 + val res = HOLThm(rens,th)
71.1540 + val _ = message "RESULT:"
71.1541 + val _ = if_debug pth res
71.1542 + in
71.1543 + (thy,res)
71.1544 + end
71.1545 +
71.1546 +fun MP hth1 hth2 thy =
71.1547 + let
71.1548 + val _ = message "MP:"
71.1549 + val _ = if_debug pth hth1
71.1550 + val _ = if_debug pth hth2
71.1551 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1552 + val th = [beta_eta_thm th1,beta_eta_thm th2] MRS mp_thm
71.1553 + val res = HOLThm(rens_of info,th)
71.1554 + val _ = message "RESULT:"
71.1555 + val _ = if_debug pth res
71.1556 + in
71.1557 + (thy,res)
71.1558 + end
71.1559 +
71.1560 +fun CONJ hth1 hth2 thy =
71.1561 + let
71.1562 + val _ = message "CONJ:"
71.1563 + val _ = if_debug pth hth1
71.1564 + val _ = if_debug pth hth2
71.1565 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1566 + val th = [th1,th2] MRS conj_thm
71.1567 + val res = HOLThm(rens_of info,th)
71.1568 + val _ = message "RESULT:"
71.1569 + val _ = if_debug pth res
71.1570 + in
71.1571 + (thy,res)
71.1572 + end
71.1573 +
71.1574 +fun CONJUNCT1 (hth as HOLThm(rens,th)) thy =
71.1575 + let
71.1576 + val _ = message "CONJUNCT1:"
71.1577 + val _ = if_debug pth hth
71.1578 + val res = HOLThm(rens,th RS conjunct1_thm)
71.1579 + val _ = message "RESULT:"
71.1580 + val _ = if_debug pth res
71.1581 + in
71.1582 + (thy,res)
71.1583 + end
71.1584 +
71.1585 +fun CONJUNCT2 (hth as HOLThm(rens,th)) thy =
71.1586 + let
71.1587 + val _ = message "CONJUNCT1:"
71.1588 + val _ = if_debug pth hth
71.1589 + val res = HOLThm(rens,th RS conjunct2_thm)
71.1590 + val _ = message "RESULT:"
71.1591 + val _ = if_debug pth res
71.1592 + in
71.1593 + (thy,res)
71.1594 + end
71.1595 +
71.1596 +fun EXISTS ex wit hth thy =
71.1597 + let
71.1598 + val _ = message "EXISTS:"
71.1599 + val _ = if_debug prin ex
71.1600 + val _ = if_debug prin wit
71.1601 + val _ = if_debug pth hth
71.1602 + val (info,th) = disamb_thm hth
71.1603 + val (info',[ex',wit']) = disamb_terms_from info [ex,wit]
71.1604 + val sg = sign_of thy
71.1605 + val cwit = cterm_of sg wit'
71.1606 + val cty = ctyp_of_term cwit
71.1607 + val a = case ex' of
71.1608 + (Const("Ex",_) $ a) => a
71.1609 + | _ => raise ERR "EXISTS" "Argument not existential"
71.1610 + val ca = cterm_of sg a
71.1611 + val exists_thm' = beta_eta_thm (Drule.instantiate' [Some cty] [Some ca,Some cwit] exists_thm)
71.1612 + val th1 = beta_eta_thm th
71.1613 + val th2 = implies_elim_all th1
71.1614 + val th3 = th2 COMP exists_thm'
71.1615 + val th = implies_intr_hyps th3
71.1616 + val res = HOLThm(rens_of info',th)
71.1617 + val _ = message "RESULT:"
71.1618 + val _ = if_debug pth res
71.1619 + in
71.1620 + (thy,res)
71.1621 + end
71.1622 +
71.1623 +fun CHOOSE v hth1 hth2 thy =
71.1624 + let
71.1625 + val _ = message "CHOOSE:"
71.1626 + val _ = if_debug prin v
71.1627 + val _ = if_debug pth hth1
71.1628 + val _ = if_debug pth hth2
71.1629 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1630 + val (info',v') = disamb_term_from info v
71.1631 + fun strip 0 _ th = th
71.1632 + | strip n (p::ps) th =
71.1633 + strip (n-1) ps (implies_elim th (assume p))
71.1634 + | strip _ _ _ = raise ERR "CHOOSE" "strip error"
71.1635 + val sg = sign_of thy
71.1636 + val cv = cterm_of sg v'
71.1637 + val th2 = norm_hyps th2
71.1638 + val cvty = ctyp_of_term cv
71.1639 + val _$c = concl_of th2
71.1640 + val cc = cterm_of sg c
71.1641 + val a = case concl_of th1 of
71.1642 + _ $ (Const("Ex",_) $ a) => a
71.1643 + | _ => raise ERR "CHOOSE" "Conclusion not existential"
71.1644 + val ca = cterm_of (sign_of_thm th1) a
71.1645 + val choose_thm' = beta_eta_thm (Drule.instantiate' [Some cvty] [Some ca,Some cc] choose_thm)
71.1646 + val th21 = rearrange sg (HOLogic.mk_Trueprop (a $ v')) th2
71.1647 + val th22 = strip ((nprems_of th21)-1) (cprems_of th21) th21
71.1648 + val th23 = beta_eta_thm (forall_intr cv th22)
71.1649 + val th11 = implies_elim_all (beta_eta_thm th1)
71.1650 + val th' = th23 COMP (th11 COMP choose_thm')
71.1651 + val th = implies_intr_hyps th'
71.1652 + val res = HOLThm(rens_of info',th)
71.1653 + val _ = message "RESULT:"
71.1654 + val _ = if_debug pth res
71.1655 + in
71.1656 + (thy,res)
71.1657 + end
71.1658 +
71.1659 +fun GEN v hth thy =
71.1660 + let
71.1661 + val _ = message "GEN:"
71.1662 + val _ = if_debug prin v
71.1663 + val _ = if_debug pth hth
71.1664 + val (info,th) = disamb_thm hth
71.1665 + val (info',v') = disamb_term_from info v
71.1666 + val res = HOLThm(rens_of info',mk_GEN v' th (sign_of thy))
71.1667 + val _ = message "RESULT:"
71.1668 + val _ = if_debug pth res
71.1669 + in
71.1670 + (thy,res)
71.1671 + end
71.1672 +
71.1673 +fun SPEC tm hth thy =
71.1674 + let
71.1675 + val _ = message "SPEC:"
71.1676 + val _ = if_debug prin tm
71.1677 + val _ = if_debug pth hth
71.1678 + val (info,th) = disamb_thm hth
71.1679 + val (info',tm') = disamb_term_from info tm
71.1680 + val sg = sign_of thy
71.1681 + val ctm = Thm.cterm_of sg tm'
71.1682 + val cty = Thm.ctyp_of_term ctm
71.1683 + val spec' = Drule.instantiate' [Some cty] [None,Some ctm] spec_thm
71.1684 + val th = th RS spec'
71.1685 + val res = HOLThm(rens_of info',th)
71.1686 + val _ = message "RESULT:"
71.1687 + val _ = if_debug pth res
71.1688 + in
71.1689 + (thy,res)
71.1690 + end
71.1691 +
71.1692 +fun COMB hth1 hth2 thy =
71.1693 + let
71.1694 + val _ = message "COMB:"
71.1695 + val _ = if_debug pth hth1
71.1696 + val _ = if_debug pth hth2
71.1697 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1698 + val sg = sign_of thy
71.1699 + val res = HOLThm(rens_of info,mk_COMB th1 th2 sg)
71.1700 + val _ = message "RESULT:"
71.1701 + val _ = if_debug pth res
71.1702 + in
71.1703 + (thy,res)
71.1704 + end
71.1705 +
71.1706 +fun TRANS hth1 hth2 thy =
71.1707 + let
71.1708 + val _ = message "TRANS:"
71.1709 + val _ = if_debug pth hth1
71.1710 + val _ = if_debug pth hth2
71.1711 + val (info,[th1,th2]) = disamb_thms [hth1,hth2]
71.1712 + val th = [th1,th2] MRS trans_thm
71.1713 + val res = HOLThm(rens_of info,th)
71.1714 + val _ = message "RESULT:"
71.1715 + val _ = if_debug pth res
71.1716 + in
71.1717 + (thy,res)
71.1718 + end
71.1719 +
71.1720 +
71.1721 +fun CCONTR tm hth thy =
71.1722 + let
71.1723 + val _ = message "SPEC:"
71.1724 + val _ = if_debug prin tm
71.1725 + val _ = if_debug pth hth
71.1726 + val (info,th) = disamb_thm hth
71.1727 + val (info',tm') = disamb_term_from info tm
71.1728 + val th = norm_hyps th
71.1729 + val sg = sign_of thy
71.1730 + val ct = cterm_of sg tm'
71.1731 + val th1 = rearrange sg (HOLogic.mk_Trueprop (Const("Not",boolT-->boolT) $ tm')) th
71.1732 + val ccontr_thm' = Drule.instantiate' [] [Some ct] ccontr_thm
71.1733 + val res1 = uniq_compose ((nprems_of th1) - 1) th1 1 ccontr_thm'
71.1734 + val res = HOLThm(rens_of info',res1)
71.1735 + val _ = message "RESULT:"
71.1736 + val _ = if_debug pth res
71.1737 + in
71.1738 + (thy,res)
71.1739 + end
71.1740 +
71.1741 +fun mk_ABS v th sg =
71.1742 + let
71.1743 + val cv = cterm_of sg v
71.1744 + val th1 = implies_elim_all (beta_eta_thm th)
71.1745 + val (f,g) = case concl_of th1 of
71.1746 + _ $ (Const("op =",_) $ f $ g) => (Term.lambda v f,Term.lambda v g)
71.1747 + | _ => raise ERR "mk_ABS" "Bad conclusion"
71.1748 + val (fd,fr) = dom_rng (type_of f)
71.1749 + val abs_thm' = Drule.instantiate' [Some (ctyp_of sg fd), Some (ctyp_of sg fr)] [Some (cterm_of sg f), Some (cterm_of sg g)] abs_thm
71.1750 + val th2 = forall_intr cv th1
71.1751 + val th3 = th2 COMP abs_thm'
71.1752 + val res = implies_intr_hyps th3
71.1753 + in
71.1754 + res
71.1755 + end
71.1756 +
71.1757 +fun ABS v hth thy =
71.1758 + let
71.1759 + val _ = message "ABS:"
71.1760 + val _ = if_debug prin v
71.1761 + val _ = if_debug pth hth
71.1762 + val (info,th) = disamb_thm hth
71.1763 + val (info',v') = disamb_term_from info v
71.1764 + val sg = sign_of thy
71.1765 + val res = HOLThm(rens_of info',mk_ABS v' th sg)
71.1766 + val _ = message "RESULT:"
71.1767 + val _ = if_debug pth res
71.1768 + in
71.1769 + (thy,res)
71.1770 + end
71.1771 +
71.1772 +fun GEN_ABS copt vlist hth thy =
71.1773 + let
71.1774 + val _ = message "GEN_ABS:"
71.1775 + val _ = case copt of
71.1776 + Some c => if_debug prin c
71.1777 + | None => ()
71.1778 + val _ = if_debug (app prin) vlist
71.1779 + val _ = if_debug pth hth
71.1780 + val (info,th) = disamb_thm hth
71.1781 + val (info',vlist') = disamb_terms_from info vlist
71.1782 + val sg = sign_of thy
71.1783 + val th1 =
71.1784 + case copt of
71.1785 + Some (c as Const(cname,cty)) =>
71.1786 + let
71.1787 + fun inst_type ty1 ty2 (TVar _) = raise ERR "GEN_ABS" "Type variable found!"
71.1788 + | inst_type ty1 ty2 (ty as TFree _) = if ty1 = ty
71.1789 + then ty2
71.1790 + else ty
71.1791 + | inst_type ty1 ty2 (ty as Type(name,tys)) =
71.1792 + Type(name,map (inst_type ty1 ty2) tys)
71.1793 + in
71.1794 + foldr (fn (v,th) =>
71.1795 + let
71.1796 + val cdom = fst (dom_rng (fst (dom_rng cty)))
71.1797 + val vty = type_of v
71.1798 + val newcty = inst_type cdom vty cty
71.1799 + val cc = cterm_of sg (Const(cname,newcty))
71.1800 + in
71.1801 + mk_COMB (mk_REFL cc) (mk_ABS v th sg) sg
71.1802 + end) (vlist',th)
71.1803 + end
71.1804 + | Some _ => raise ERR "GEN_ABS" "Bad constant"
71.1805 + | None =>
71.1806 + foldr (fn (v,th) => mk_ABS v th sg) (vlist',th)
71.1807 + val res = HOLThm(rens_of info',th1)
71.1808 + val _ = message "RESULT:"
71.1809 + val _ = if_debug pth res
71.1810 + in
71.1811 + (thy,res)
71.1812 + end
71.1813 +
71.1814 +fun NOT_INTRO (hth as HOLThm(rens,th)) thy =
71.1815 + let
71.1816 + val _ = message "NOT_INTRO:"
71.1817 + val _ = if_debug pth hth
71.1818 + val sg = sign_of thy
71.1819 + val th1 = implies_elim_all (beta_eta_thm th)
71.1820 + val a = case concl_of th1 of
71.1821 + _ $ (Const("op -->",_) $ a $ Const("False",_)) => a
71.1822 + | _ => raise ERR "NOT_INTRO" "Conclusion of bad form"
71.1823 + val ca = cterm_of sg a
71.1824 + val th2 = equal_elim (Drule.instantiate' [] [Some ca] not_intro_thm) th1
71.1825 + val res = HOLThm(rens,implies_intr_hyps th2)
71.1826 + val _ = message "RESULT:"
71.1827 + val _ = if_debug pth res
71.1828 + in
71.1829 + (thy,res)
71.1830 + end
71.1831 +
71.1832 +fun NOT_ELIM (hth as HOLThm(rens,th)) thy =
71.1833 + let
71.1834 + val _ = message "NOT_INTRO:"
71.1835 + val _ = if_debug pth hth
71.1836 + val sg = sign_of thy
71.1837 + val th1 = implies_elim_all (beta_eta_thm th)
71.1838 + val a = case concl_of th1 of
71.1839 + _ $ (Const("Not",_) $ a) => a
71.1840 + | _ => raise ERR "NOT_ELIM" "Conclusion of bad form"
71.1841 + val ca = cterm_of sg a
71.1842 + val th2 = equal_elim (Drule.instantiate' [] [Some ca] not_elim_thm) th1
71.1843 + val res = HOLThm(rens,implies_intr_hyps th2)
71.1844 + val _ = message "RESULT:"
71.1845 + val _ = if_debug pth res
71.1846 + in
71.1847 + (thy,res)
71.1848 + end
71.1849 +
71.1850 +fun DISCH tm hth thy =
71.1851 + let
71.1852 + val _ = message "DISCH:"
71.1853 + val _ = if_debug prin tm
71.1854 + val _ = if_debug pth hth
71.1855 + val (info,th) = disamb_thm hth
71.1856 + val (info',tm') = disamb_term_from info tm
71.1857 + val prems = prems_of th
71.1858 + val sg = sign_of thy
71.1859 + val th1 = beta_eta_thm th
71.1860 + val th2 = implies_elim_all th1
71.1861 + val th3 = implies_intr (cterm_of sg (HOLogic.mk_Trueprop tm')) th2
71.1862 + val th4 = th3 COMP disch_thm
71.1863 + val res = HOLThm(rens_of info',implies_intr_hyps th4)
71.1864 + val _ = message "RESULT:"
71.1865 + val _ = if_debug pth res
71.1866 + in
71.1867 + (thy,res)
71.1868 + end
71.1869 +
71.1870 +val spaces = String.concat o separate " "
71.1871 +
71.1872 +fun new_definition thyname constname rhs thy =
71.1873 + let
71.1874 + val constname = rename_const thyname thy constname
71.1875 + val _ = warning ("Introducing constant " ^ constname)
71.1876 + val (thmname,thy) = get_defname thyname constname thy
71.1877 + val (info,rhs') = disamb_term rhs
71.1878 + val ctype = type_of rhs'
71.1879 + val csyn = mk_syn constname
71.1880 + val thy1 = case HOL4DefThy.get thy of
71.1881 + Replaying _ => thy
71.1882 + | _ => Theory.add_consts_i [(constname,ctype,csyn)] thy
71.1883 + val eq = mk_defeq constname rhs' thy1
71.1884 + val (thy2,thms) = PureThy.add_defs_i false [((thmname,eq),[])] thy1
71.1885 + val def_thm = hd thms
71.1886 + val thm' = def_thm RS meta_eq_to_obj_eq_thm
71.1887 + val (thy',th) = (thy2, thm')
71.1888 + val fullcname = Sign.intern_const (sign_of thy') constname
71.1889 + val thy'' = add_hol4_const_mapping thyname constname true fullcname thy'
71.1890 + val (linfo,tm24) = disamb_term (mk_teq constname rhs' thy'')
71.1891 + val sg = sign_of thy''
71.1892 + val rew = rewrite_hol4_term eq thy''
71.1893 + val crhs = cterm_of sg (#2 (Logic.dest_equals (prop_of rew)))
71.1894 + val thy22 = if (def_name constname) = thmname
71.1895 + then
71.1896 + add_dump ("constdefs\n " ^ (quotename constname) ^ " :: \"" ^ (string_of_ctyp (ctyp_of sg ctype)) ^ "\" " ^ (Syntax.string_of_mixfix csyn) ^ "\n " ^ (smart_string_of_cterm crhs)) thy''
71.1897 + else
71.1898 + add_dump ("consts\n " ^ (quotename constname) ^ " :: \"" ^ (string_of_ctyp (ctyp_of sg ctype)) ^
71.1899 + "\" " ^ (Syntax.string_of_mixfix csyn) ^ "\n\ndefs\n " ^ (quotename thmname) ^ ": " ^ (smart_string_of_cterm crhs))
71.1900 + thy''
71.1901 +
71.1902 + val hth = case Shuffler.set_prop thy22 (HOLogic.mk_Trueprop tm24) [("",th)] of
71.1903 + Some (_,res) => HOLThm(rens_of linfo,res)
71.1904 + | None => raise ERR "new_definition" "Bad conclusion"
71.1905 + val fullname = Sign.full_name sg thmname
71.1906 + val thy22' = case opt_get_output_thy thy22 of
71.1907 + "" => add_hol4_mapping thyname thmname fullname thy22
71.1908 + | output_thy =>
71.1909 + let
71.1910 + val moved_thmname = output_thy ^ "." ^ thyname ^ "." ^ thmname
71.1911 + in
71.1912 + thy22 |> add_hol4_move fullname moved_thmname
71.1913 + |> add_hol4_mapping thyname thmname moved_thmname
71.1914 + end
71.1915 + val _ = message "new_definition:"
71.1916 + val _ = if_debug pth hth
71.1917 + in
71.1918 + (thy22',hth)
71.1919 + end
71.1920 + handle e => (message "exception in new_definition"; print_exn e)
71.1921 +
71.1922 +val commafy = String.concat o separate ", "
71.1923 +
71.1924 +local
71.1925 + val helper = thm "termspec_help"
71.1926 +in
71.1927 +fun new_specification thyname thmname names hth thy =
71.1928 + case HOL4DefThy.get thy of
71.1929 + Replaying _ => (thy,hth)
71.1930 + | _ =>
71.1931 + let
71.1932 + val _ = message "NEW_SPEC:"
71.1933 + val _ = if_debug pth hth
71.1934 + val names = map (rename_const thyname thy) names
71.1935 + val _ = warning ("Introducing constants " ^ (commafy names))
71.1936 + val (HOLThm(rens,th)) = norm_hthm (sign_of thy) hth
71.1937 + val thy1 = case HOL4DefThy.get thy of
71.1938 + Replaying _ => thy
71.1939 + | _ =>
71.1940 + let
71.1941 + fun dest_eta_abs (Abs(x,xT,body)) = (x,xT,body)
71.1942 + | dest_eta_abs body =
71.1943 + let
71.1944 + val (dT,rT) = dom_rng (type_of body)
71.1945 + in
71.1946 + ("x",dT,body $ Bound 0)
71.1947 + end
71.1948 + handle TYPE _ => raise ERR "new_specification" "not an abstraction type"
71.1949 + fun dest_exists (Const("Ex",_) $ abody) =
71.1950 + dest_eta_abs abody
71.1951 + | dest_exists tm =
71.1952 + raise ERR "new_specification" "Bad existential formula"
71.1953 +
71.1954 + val (consts,_) = foldl (fn ((cs,ex),cname) =>
71.1955 + let
71.1956 + val (_,cT,p) = dest_exists ex
71.1957 + in
71.1958 + ((cname,cT,mk_syn cname)::cs,p)
71.1959 + end) (([],HOLogic.dest_Trueprop (concl_of th)),names)
71.1960 + val sg = sign_of thy
71.1961 + val str = foldl (fn (acc,(c,T,csyn)) =>
71.1962 + acc ^ "\n " ^ (quotename c) ^ " :: \"" ^ (string_of_ctyp (ctyp_of sg T)) ^ "\" " ^ (Syntax.string_of_mixfix csyn)) ("consts",consts)
71.1963 + val thy' = add_dump str thy
71.1964 + in
71.1965 + Theory.add_consts_i consts thy'
71.1966 + end
71.1967 +
71.1968 + val thy1 = foldr (fn(name,thy)=>
71.1969 + snd (get_defname thyname name thy)) (names,thy1)
71.1970 + fun new_name name = fst (get_defname thyname name thy1)
71.1971 + val (thy',res) = SpecificationPackage.add_specification_i None
71.1972 + (map (fn name => (new_name name,name,false)) names)
71.1973 + (thy1,th)
71.1974 + val res' = Drule.freeze_all res
71.1975 + val hth = HOLThm(rens,res')
71.1976 + val rew = rewrite_hol4_term (concl_of res') thy'
71.1977 + val th = equal_elim rew res'
71.1978 + fun handle_const (name,thy) =
71.1979 + let
71.1980 + val defname = def_name name
71.1981 + val (newname,thy') = get_defname thyname name thy
71.1982 + in
71.1983 + (if defname = newname
71.1984 + then quotename name
71.1985 + else (quotename newname) ^ ": " ^ (quotename name),thy')
71.1986 + end
71.1987 + val (new_names,thy') = foldr (fn(name,(names,thy)) =>
71.1988 + let
71.1989 + val (name',thy') = handle_const (name,thy)
71.1990 + in
71.1991 + (name'::names,thy')
71.1992 + end) (names,([],thy'))
71.1993 + val thy'' = add_dump ("specification (" ^ (spaces new_names) ^ ") " ^ thmname ^ ": " ^ (smart_string_of_thm th) ^
71.1994 + "\n by (import " ^ thyname ^ " " ^ thmname ^ ")")
71.1995 + thy'
71.1996 + val _ = message "RESULT:"
71.1997 + val _ = if_debug pth hth
71.1998 + in
71.1999 + intern_store_thm false thyname thmname hth thy''
71.2000 + end
71.2001 + handle e => (message "exception in new_specification"; print_exn e)
71.2002 +
71.2003 +end
71.2004 +
71.2005 +fun new_axiom name tm thy = raise ERR "new_axiom" ("Oh, no you don't! (" ^ name ^ ")")
71.2006 +
71.2007 +fun to_isa_thm (hth as HOLThm(_,th)) =
71.2008 + let
71.2009 + val (HOLThm args) = norm_hthm (sign_of_thm th) hth
71.2010 + in
71.2011 + apsnd strip_shyps args
71.2012 + end
71.2013 +
71.2014 +fun to_isa_term tm = tm
71.2015 +
71.2016 +local
71.2017 + val light_nonempty = thm "light_ex_imp_nonempty"
71.2018 + val ex_imp_nonempty = thm "ex_imp_nonempty"
71.2019 + val typedef_hol2hol4 = thm "typedef_hol2hol4"
71.2020 + val typedef_hol2hollight = thm "typedef_hol2hollight"
71.2021 +in
71.2022 +fun new_type_definition thyname thmname tycname hth thy =
71.2023 + case HOL4DefThy.get thy of
71.2024 + Replaying _ => (thy,hth)
71.2025 + | _ =>
71.2026 + let
71.2027 + val _ = message "TYPE_DEF:"
71.2028 + val _ = if_debug pth hth
71.2029 + val _ = warning ("Introducing type " ^ tycname)
71.2030 + val (HOLThm(rens,td_th)) = norm_hthm (sign_of thy) hth
71.2031 + val th2 = beta_eta_thm (td_th RS ex_imp_nonempty)
71.2032 + val c = case concl_of th2 of
71.2033 + _ $ (Const("Ex",_) $ Abs(_,_,Const("op :",_) $ _ $ c)) => c
71.2034 + | _ => raise ERR "new_type_definition" "Bad type definition theorem"
71.2035 + val tfrees = term_tfrees c
71.2036 + val tnames = map fst tfrees
71.2037 + val tsyn = mk_syn tycname
71.2038 + val typ = (tycname,tnames,tsyn)
71.2039 + val (thy',typedef_info) = TypedefPackage.add_typedef_i false (Some thmname) typ c None (rtac th2 1) thy
71.2040 +
71.2041 + val th3 = (#type_definition typedef_info) RS typedef_hol2hol4
71.2042 +
71.2043 + val fulltyname = Sign.intern_tycon (sign_of thy') tycname
71.2044 + val thy'' = add_hol4_type_mapping thyname tycname true fulltyname thy'
71.2045 +
71.2046 + val sg = sign_of thy''
71.2047 + val (hth' as HOLThm args) = norm_hthm sg (HOLThm(rens,th3))
71.2048 + val _ = if has_ren hth' then warning ("Theorem " ^ thmname ^ " needs variable-disambiguating")
71.2049 + else ()
71.2050 + val thy4 = add_hol4_pending thyname thmname args thy''
71.2051 +
71.2052 + val sg = sign_of thy4
71.2053 + val rew = rewrite_hol4_term (concl_of td_th) thy4
71.2054 + val th = equal_elim rew (transfer_sg sg td_th)
71.2055 + val c = case HOLogic.dest_Trueprop (prop_of th) of
71.2056 + Const("Ex",exT) $ P =>
71.2057 + let
71.2058 + val PT = domain_type exT
71.2059 + in
71.2060 + Const("Collect",PT-->HOLogic.mk_setT (domain_type PT)) $ P
71.2061 + end
71.2062 + | _ => error "Internal error in ProofKernel.new_typedefinition"
71.2063 + val tnames_string = if null tnames
71.2064 + then ""
71.2065 + else "(" ^ (commafy tnames) ^ ") "
71.2066 + val proc_prop = if null tnames
71.2067 + then smart_string_of_cterm
71.2068 + else Library.setmp show_all_types true smart_string_of_cterm
71.2069 + val thy5 = add_dump ("typedef (open) " ^ tnames_string ^ (quotename tycname) ^ " = " ^ (proc_prop (cterm_of sg c)) ^ " " ^ (Syntax.string_of_mixfix tsyn) ^ "\n by (rule typedef_helper,import " ^ thyname ^ " " ^ thmname ^ ")") thy4
71.2070 + val thy6 = add_dump ("lemmas " ^ thmname ^ " = typedef_hol2hol4 [OF type_definition_" ^ tycname ^ "]")
71.2071 + thy5
71.2072 + val _ = message "RESULT:"
71.2073 + val _ = if_debug pth hth'
71.2074 + in
71.2075 + (thy6,hth')
71.2076 + end
71.2077 + handle e => (message "exception in new_type_definition"; print_exn e)
71.2078 +
71.2079 +fun type_introduction thyname thmname tycname abs_name rep_name (P,t) hth thy =
71.2080 + case HOL4DefThy.get thy of
71.2081 + Replaying _ => (thy,hth)
71.2082 + | _ =>
71.2083 + let
71.2084 + val _ = message "TYPE_INTRO:"
71.2085 + val _ = if_debug pth hth
71.2086 + val _ = warning ("Introducing type " ^ tycname ^ " (with morphisms " ^ abs_name ^ " and " ^ rep_name ^ ")")
71.2087 + val (HOLThm(rens,td_th)) = norm_hthm (sign_of thy) hth
71.2088 + val sg = sign_of thy
71.2089 + val tT = type_of t
71.2090 + val light_nonempty' =
71.2091 + Drule.instantiate' [Some (ctyp_of sg tT)]
71.2092 + [Some (cterm_of sg P),
71.2093 + Some (cterm_of sg t)] light_nonempty
71.2094 + val th2 = beta_eta_thm (td_th RS (beta_eta_thm light_nonempty'))
71.2095 + val c = case concl_of th2 of
71.2096 + _ $ (Const("Ex",_) $ Abs(_,_,Const("op :",_) $ _ $ c)) => c
71.2097 + | _ => raise ERR "type_introduction" "Bad type definition theorem"
71.2098 + val tfrees = term_tfrees c
71.2099 + val tnames = map fst tfrees
71.2100 + val tsyn = mk_syn tycname
71.2101 + val typ = (tycname,tnames,tsyn)
71.2102 + val (thy',typedef_info) = TypedefPackage.add_typedef_i false (Some thmname) typ c (Some(rep_name,abs_name)) (rtac th2 1) thy
71.2103 +
71.2104 + val th3 = (#type_definition typedef_info) RS typedef_hol2hollight
71.2105 +
71.2106 + val th4 = Drule.freeze_all th3
71.2107 + val fulltyname = Sign.intern_tycon (sign_of thy') tycname
71.2108 + val thy'' = add_hol4_type_mapping thyname tycname true fulltyname thy'
71.2109 +
71.2110 + val sg = sign_of thy''
71.2111 + val (hth' as HOLThm args) = norm_hthm sg (HOLThm(rens,th4))
71.2112 + val _ = if #maxidx (rep_thm th4) <> ~1
71.2113 + then (Library.setmp show_types true pth hth' ; error "SCHEME!")
71.2114 + else ()
71.2115 + val _ = if has_ren hth' then warning ("Theorem " ^ thmname ^ " needs variable-disambiguating")
71.2116 + else ()
71.2117 + val thy4 = add_hol4_pending thyname thmname args thy''
71.2118 +
71.2119 + val sg = sign_of thy4
71.2120 + val P' = #2 (Logic.dest_equals (concl_of (rewrite_hol4_term P thy4)))
71.2121 + val c =
71.2122 + let
71.2123 + val PT = type_of P'
71.2124 + in
71.2125 + Const("Collect",PT-->HOLogic.mk_setT (domain_type PT)) $ P'
71.2126 + end
71.2127 +
71.2128 + val tnames_string = if null tnames
71.2129 + then ""
71.2130 + else "(" ^ (commafy tnames) ^ ") "
71.2131 + val proc_prop = if null tnames
71.2132 + then smart_string_of_cterm
71.2133 + else Library.setmp show_all_types true smart_string_of_cterm
71.2134 + val thy5 = add_dump ("typedef (open) " ^ tnames_string ^ (quotename tycname) ^ " = " ^ (proc_prop (cterm_of sg c)) ^ " " ^ (Syntax.string_of_mixfix tsyn) ^ "\n by (rule light_ex_imp_nonempty,import " ^ thyname ^ " " ^ thmname ^ ")") thy4
71.2135 + val thy6 = add_dump ("lemmas " ^ thmname ^ " = typedef_hol2hollight [OF type_definition_" ^ tycname ^ "]")
71.2136 + thy5
71.2137 + val _ = message "RESULT:"
71.2138 + val _ = if_debug pth hth'
71.2139 + in
71.2140 + (thy6,hth')
71.2141 + end
71.2142 + handle e => (message "exception in type_introduction"; print_exn e)
71.2143 +end
71.2144 +
71.2145 +end
72.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
72.2 +++ b/src/HOL/Import/replay.ML Fri Apr 02 17:37:45 2004 +0200
72.3 @@ -0,0 +1,333 @@
72.4 +structure Replay =
72.5 +struct
72.6 +
72.7 +structure P = ProofKernel
72.8 +
72.9 +open ProofKernel
72.10 +
72.11 +exception REPLAY of string * string
72.12 +fun ERR f mesg = REPLAY (f,mesg)
72.13 +fun NY f = raise ERR f "NOT YET!"
72.14 +
72.15 +fun replay_proof int_thms thyname thmname prf thy =
72.16 + let
72.17 + fun rp (PRefl tm) thy = P.REFL tm thy
72.18 + | rp (PInstT(p,lambda)) thy =
72.19 + let
72.20 + val (thy',th) = rp' p thy
72.21 + in
72.22 + P.INST_TYPE lambda th thy'
72.23 + end
72.24 + | rp (PSubst(prfs,ctxt,prf)) thy =
72.25 + let
72.26 + val (thy',ths) = foldr (fn (p,(thy,ths)) =>
72.27 + let
72.28 + val (thy',th) = rp' p thy
72.29 + in
72.30 + (thy',th::ths)
72.31 + end) (prfs,(thy,[]))
72.32 + val (thy'',th) = rp' prf thy'
72.33 + in
72.34 + P.SUBST ths ctxt th thy''
72.35 + end
72.36 + | rp (PAbs(prf,v)) thy =
72.37 + let
72.38 + val (thy',th) = rp' prf thy
72.39 + in
72.40 + P.ABS v th thy'
72.41 + end
72.42 + | rp (PDisch(prf,tm)) thy =
72.43 + let
72.44 + val (thy',th) = rp' prf thy
72.45 + in
72.46 + P.DISCH tm th thy'
72.47 + end
72.48 + | rp (PMp(prf1,prf2)) thy =
72.49 + let
72.50 + val (thy1,th1) = rp' prf1 thy
72.51 + val (thy2,th2) = rp' prf2 thy1
72.52 + in
72.53 + P.MP th1 th2 thy2
72.54 + end
72.55 + | rp (PHyp tm) thy = P.ASSUME tm thy
72.56 + | rp (PDef(seg,name,rhs)) thy =
72.57 + (case P.get_def seg name rhs thy of
72.58 + (thy',Some res) => (thy',res)
72.59 + | (thy',None) =>
72.60 + if seg = thyname
72.61 + then P.new_definition seg name rhs thy'
72.62 + else raise ERR "replay_proof" "Too late for term definition")
72.63 + | rp (POracle(tg,asl,c)) thy = (*P.mk_oracle_thm tg (map be_contract asl,c)*) NY "ORACLE"
72.64 + | rp (PSpec(prf,tm)) thy =
72.65 + let
72.66 + val (thy',th) = rp' prf thy
72.67 + in
72.68 + P.SPEC tm th thy'
72.69 + end
72.70 + | rp (PInst(prf,theta)) thy =
72.71 + let
72.72 + val (thy',th) = rp' prf thy
72.73 + in
72.74 + P.INST theta th thy'
72.75 + end
72.76 + | rp (PGen(prf,v)) thy =
72.77 + let
72.78 + val (thy',th) = rp' prf thy
72.79 + in
72.80 + P.GEN v th thy'
72.81 + end
72.82 + | rp (PGenAbs(prf,opt,vl)) thy =
72.83 + let
72.84 + val (thy',th) = rp' prf thy
72.85 + in
72.86 + P.GEN_ABS opt vl th thy'
72.87 + end
72.88 + | rp (PImpAS(prf1,prf2)) thy =
72.89 + let
72.90 + val (thy1,th1) = rp' prf1 thy
72.91 + val (thy2,th2) = rp' prf2 thy1
72.92 + in
72.93 + P.IMP_ANTISYM th1 th2 thy2
72.94 + end
72.95 + | rp (PSym prf) thy =
72.96 + let
72.97 + val (thy1,th) = rp' prf thy
72.98 + in
72.99 + P.SYM th thy1
72.100 + end
72.101 + | rp (PTrans(prf1,prf2)) thy =
72.102 + let
72.103 + val (thy1,th1) = rp' prf1 thy
72.104 + val (thy2,th2) = rp' prf2 thy1
72.105 + in
72.106 + P.TRANS th1 th2 thy2
72.107 + end
72.108 + | rp (PComb(prf1,prf2)) thy =
72.109 + let
72.110 + val (thy1,th1) = rp' prf1 thy
72.111 + val (thy2,th2) = rp' prf2 thy1
72.112 + in
72.113 + P.COMB th1 th2 thy2
72.114 + end
72.115 + | rp (PEqMp(prf1,prf2)) thy =
72.116 + let
72.117 + val (thy1,th1) = rp' prf1 thy
72.118 + val (thy2,th2) = rp' prf2 thy1
72.119 + in
72.120 + P.EQ_MP th1 th2 thy2
72.121 + end
72.122 + | rp (PEqImp prf) thy =
72.123 + let
72.124 + val (thy',th) = rp' prf thy
72.125 + in
72.126 + P.EQ_IMP_RULE th thy'
72.127 + end
72.128 + | rp (PExists(prf,ex,wit)) thy =
72.129 + let
72.130 + val (thy',th) = rp' prf thy
72.131 + in
72.132 + P.EXISTS ex wit th thy'
72.133 + end
72.134 + | rp (PChoose(v,prf1,prf2)) thy =
72.135 + let
72.136 + val (thy1,th1) = rp' prf1 thy
72.137 + val (thy2,th2) = rp' prf2 thy1
72.138 + in
72.139 + P.CHOOSE v th1 th2 thy2
72.140 + end
72.141 + | rp (PConj(prf1,prf2)) thy =
72.142 + let
72.143 + val (thy1,th1) = rp' prf1 thy
72.144 + val (thy2,th2) = rp' prf2 thy1
72.145 + in
72.146 + P.CONJ th1 th2 thy2
72.147 + end
72.148 + | rp (PConjunct1 prf) thy =
72.149 + let
72.150 + val (thy',th) = rp' prf thy
72.151 + in
72.152 + P.CONJUNCT1 th thy'
72.153 + end
72.154 + | rp (PConjunct2 prf) thy =
72.155 + let
72.156 + val (thy',th) = rp' prf thy
72.157 + in
72.158 + P.CONJUNCT2 th thy'
72.159 + end
72.160 + | rp (PDisj1(prf,tm)) thy =
72.161 + let
72.162 + val (thy',th) = rp' prf thy
72.163 + in
72.164 + P.DISJ1 th tm thy'
72.165 + end
72.166 + | rp (PDisj2(prf,tm)) thy =
72.167 + let
72.168 + val (thy',th) = rp' prf thy
72.169 + in
72.170 + P.DISJ2 tm th thy'
72.171 + end
72.172 + | rp (PDisjCases(prf,prf1,prf2)) thy =
72.173 + let
72.174 + val (thy',th) = rp' prf thy
72.175 + val (thy1,th1) = rp' prf1 thy'
72.176 + val (thy2,th2) = rp' prf2 thy1
72.177 + in
72.178 + P.DISJ_CASES th th1 th2 thy2
72.179 + end
72.180 + | rp (PNotI prf) thy =
72.181 + let
72.182 + val (thy',th) = rp' prf thy
72.183 + in
72.184 + P.NOT_INTRO th thy'
72.185 + end
72.186 + | rp (PNotE prf) thy =
72.187 + let
72.188 + val (thy',th) = rp' prf thy
72.189 + in
72.190 + P.NOT_ELIM th thy'
72.191 + end
72.192 + | rp (PContr(prf,tm)) thy =
72.193 + let
72.194 + val (thy',th) = rp' prf thy
72.195 + in
72.196 + P.CCONTR tm th thy'
72.197 + end
72.198 + | rp (PTmSpec _) _ = raise ERR "rp" "Shouldn't reach here (PTmSpec)"
72.199 + | rp (PTyDef _) _ = raise ERR "rp" "Shouldn't reach here (PTyDef)"
72.200 + | rp (PTyIntro _) _ = raise ERR "rp" "Shouldn't reach here (PTyIntro)"
72.201 + | rp PDisk _ = raise ERR "rp" "Shouldn't reach here (PDisk)"
72.202 + | rp _ _ = raise ERR "rp" "What the hell is this? Which case did I forget?"
72.203 + and rp' p thy =
72.204 + let
72.205 + val pc = content_of p
72.206 + in
72.207 + case pc of
72.208 + PDisk => (case disk_info_of p of
72.209 + Some(thyname',thmname) =>
72.210 + (case Int.fromString thmname of
72.211 + SOME i =>
72.212 + if thyname' = thyname
72.213 + then
72.214 + (case Array.sub(int_thms,i-1) of
72.215 + None =>
72.216 + let
72.217 + val (thy',th) = rp' (snd (import_proof thyname' thmname thy) thy) thy
72.218 + val _ = Array.update(int_thms,i-1,Some th)
72.219 + in
72.220 + (thy',th)
72.221 + end
72.222 + | Some th => (thy,th))
72.223 + else raise ERR "replay_proof" ("Library " ^ thyname' ^ " should be built before " ^ thyname ^ " (" ^ thmname ^ ")")
72.224 + | NONE =>
72.225 + (case P.get_thm thyname' thmname thy of
72.226 + (thy',Some res) => (thy',res)
72.227 + | (thy',None) =>
72.228 + if thyname' = thyname
72.229 + then
72.230 + let
72.231 + val _ = writeln ("Found no " ^ thmname ^ " theorem, replaying...")
72.232 + val (f_opt,prf) = import_proof thyname' thmname thy'
72.233 + val prf = prf thy'
72.234 + val (thy',th) = replay_proof int_thms thyname' thmname prf thy'
72.235 + in
72.236 + case content_of prf of
72.237 + PTmSpec _ => (thy',th)
72.238 + | PTyDef _ => (thy',th)
72.239 + | PTyIntro _ => (thy',th)
72.240 + | _ => P.store_thm thyname' thmname th thy'
72.241 + end
72.242 + else raise ERR "replay_proof" ("Library " ^ thyname' ^ " should be built before " ^ thyname ^ " (" ^ thmname ^ ")")))
72.243 + | None => raise ERR "rp'.PDisk" "Not enough information")
72.244 + | PAxm(name,c) =>
72.245 + (case P.get_axiom thyname name thy of
72.246 + (thy',Some res) => (thy',res)
72.247 + | (thy',None) => P.new_axiom name c thy')
72.248 + | PTmSpec(seg,names,prf') =>
72.249 + let
72.250 + val (thy',th) = rp' prf' thy
72.251 + in
72.252 + P.new_specification seg thmname names th thy'
72.253 + end
72.254 + | PTyDef(seg,name,prf') =>
72.255 + let
72.256 + val (thy',th) = rp' prf' thy
72.257 + in
72.258 + P.new_type_definition seg thmname name th thy'
72.259 + end
72.260 + | PTyIntro(seg,name,abs_name,rep_name,P,t,prf') =>
72.261 + let
72.262 + val (thy',th) = rp' prf' thy
72.263 + in
72.264 + P.type_introduction seg thmname name abs_name rep_name (P,t) th thy'
72.265 + end
72.266 + | _ => rp pc thy
72.267 + end
72.268 + in
72.269 + rp' prf thy handle e => (writeln "Exception in replay_proof"; print_exn e)
72.270 + end
72.271 +
72.272 +fun setup_int_thms thyname thy =
72.273 + let
72.274 + val is = TextIO.openIn(P.get_proof_dir thyname thy ^"/facts.lst")
72.275 + val (num_int_thms,facts) =
72.276 + let
72.277 + fun get_facts facts =
72.278 + case TextIO.inputLine is of
72.279 + "" => (case facts of
72.280 + i::facts => (valOf (Int.fromString i),rev facts)
72.281 + | _ => raise ERR "replay_thm" "Bad facts.lst file")
72.282 + | fact => get_facts ((String.substring(fact,0,String.size fact -1 ))::facts)
72.283 + in
72.284 + get_facts []
72.285 + end
72.286 + val _ = TextIO.closeIn is
72.287 + val int_thms = Array.array(num_int_thms,None:thm option)
72.288 + in
72.289 + (int_thms,facts)
72.290 + end
72.291 +
72.292 +fun import_single_thm thyname int_thms thmname thy =
72.293 + let
72.294 + fun replay_fact (thmname,thy) =
72.295 + let
72.296 + val _ = writeln ("Replaying " ^ thmname)
72.297 + val prf = mk_proof PDisk
72.298 + val _ = set_disk_info_of prf thyname thmname
72.299 + in
72.300 + fst (replay_proof int_thms thyname thmname prf thy)
72.301 + end
72.302 + in
72.303 + replay_fact (thmname,thy)
72.304 + end
72.305 +
72.306 +fun import_thms thyname int_thms thmnames thy =
72.307 + let
72.308 + fun replay_fact (thy,thmname) =
72.309 + let
72.310 + val _ = writeln ("Replaying " ^ thmname)
72.311 + val prf = mk_proof PDisk
72.312 + val _ = set_disk_info_of prf thyname thmname
72.313 + in
72.314 + fst (replay_proof int_thms thyname thmname prf thy)
72.315 + end
72.316 + val res_thy = foldl replay_fact (thy,thmnames)
72.317 + in
72.318 + res_thy
72.319 + end
72.320 +
72.321 +fun import_thm thyname thmname thy =
72.322 + let
72.323 + val int_thms = fst (setup_int_thms thyname thy)
72.324 + fun replay_fact (thmname,thy) =
72.325 + let
72.326 + val _ = writeln ("Replaying " ^ thmname)
72.327 + val prf = mk_proof PDisk
72.328 + val _ = set_disk_info_of prf thyname thmname
72.329 + in
72.330 + fst (replay_proof int_thms thyname thmname prf thy)
72.331 + end
72.332 + in
72.333 + replay_fact (thmname,thy)
72.334 + end
72.335 +
72.336 +end
73.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
73.2 +++ b/src/HOL/Import/shuffler.ML Fri Apr 02 17:37:45 2004 +0200
73.3 @@ -0,0 +1,685 @@
73.4 +(* Title: Provers/shuffler.ML
73.5 + ID: $Id$
73.6 + Author: Sebastian Skalberg, TU Muenchen
73.7 + License: GPL (GNU GENERAL PUBLIC LICENSE)
73.8 +
73.9 +Package for proving two terms equal by normalizing (hence the
73.10 +"shuffler" name). Uses the simplifier for the normalization.
73.11 +*)
73.12 +
73.13 +signature Shuffler =
73.14 +sig
73.15 + val debug : bool ref
73.16 +
73.17 + val norm_term : theory -> term -> thm
73.18 + val make_equal : theory -> term -> term -> thm option
73.19 + val set_prop : theory -> term -> (string * thm) list -> (string * thm) option
73.20 +
73.21 + val find_potential: theory -> term -> (string * thm) list
73.22 +
73.23 + val gen_shuffle_tac: theory -> bool -> (string * thm) list -> int -> tactic
73.24 +
73.25 + val shuffle_tac: (string * thm) list -> int -> tactic
73.26 + val search_tac : (string * thm) list -> int -> tactic
73.27 +
73.28 + val print_shuffles: theory -> unit
73.29 +
73.30 + val add_shuffle_rule: thm -> theory -> theory
73.31 + val shuffle_attr: theory attribute
73.32 +
73.33 + val setup : (theory -> theory) list
73.34 +end
73.35 +
73.36 +structure Shuffler :> Shuffler =
73.37 +struct
73.38 +
73.39 +val debug = ref false
73.40 +
73.41 +fun if_debug f x = if !debug then f x else ()
73.42 +val message = if_debug writeln
73.43 +
73.44 +(*Prints exceptions readably to users*)
73.45 +fun print_sign_exn_unit sign e =
73.46 + case e of
73.47 + THM (msg,i,thms) =>
73.48 + (writeln ("Exception THM " ^ string_of_int i ^ " raised:\n" ^ msg);
73.49 + seq print_thm thms)
73.50 + | THEORY (msg,thys) =>
73.51 + (writeln ("Exception THEORY raised:\n" ^ msg);
73.52 + seq (Pretty.writeln o Display.pretty_theory) thys)
73.53 + | TERM (msg,ts) =>
73.54 + (writeln ("Exception TERM raised:\n" ^ msg);
73.55 + seq (writeln o Sign.string_of_term sign) ts)
73.56 + | TYPE (msg,Ts,ts) =>
73.57 + (writeln ("Exception TYPE raised:\n" ^ msg);
73.58 + seq (writeln o Sign.string_of_typ sign) Ts;
73.59 + seq (writeln o Sign.string_of_term sign) ts)
73.60 + | e => raise e
73.61 +
73.62 +(*Prints an exception, then fails*)
73.63 +fun print_sign_exn sign e = (print_sign_exn_unit sign e; raise e)
73.64 +
73.65 +val string_of_thm = Library.setmp print_mode [] string_of_thm
73.66 +val string_of_cterm = Library.setmp print_mode [] string_of_cterm
73.67 +
73.68 +val commafy = String.concat o separate ", "
73.69 +
73.70 +fun mk_meta_eq th =
73.71 + (case concl_of th of
73.72 + Const("Trueprop",_) $ (Const("op =",_) $ _ $ _) => th RS eq_reflection
73.73 + | Const("==",_) $ _ $ _ => th
73.74 + | _ => raise THM("Not an equality",0,[th]))
73.75 + handle _ => raise THM("Couldn't make meta equality",0,[th])
73.76 +
73.77 +fun mk_obj_eq th =
73.78 + (case concl_of th of
73.79 + Const("Trueprop",_) $ (Const("op =",_) $ _ $ _) => th
73.80 + | Const("==",_) $ _ $ _ => th RS meta_eq_to_obj_eq
73.81 + | _ => raise THM("Not an equality",0,[th]))
73.82 + handle _ => raise THM("Couldn't make object equality",0,[th])
73.83 +
73.84 +structure ShuffleDataArgs: THEORY_DATA_ARGS =
73.85 +struct
73.86 +val name = "HOL/shuffles"
73.87 +type T = thm list
73.88 +val empty = []
73.89 +val copy = I
73.90 +val prep_ext = I
73.91 +val merge = Library.gen_union Thm.eq_thm
73.92 +fun print sg thms =
73.93 + Pretty.writeln (Pretty.big_list "Shuffle theorems:"
73.94 + (map Display.pretty_thm thms))
73.95 +end
73.96 +
73.97 +structure ShuffleData = TheoryDataFun(ShuffleDataArgs)
73.98 +
73.99 +val weaken =
73.100 + let
73.101 + val cert = cterm_of (sign_of ProtoPure.thy)
73.102 + val P = Free("P",propT)
73.103 + val Q = Free("Q",propT)
73.104 + val PQ = Logic.mk_implies(P,Q)
73.105 + val PPQ = Logic.mk_implies(P,PQ)
73.106 + val cP = cert P
73.107 + val cQ = cert Q
73.108 + val cPQ = cert PQ
73.109 + val cPPQ = cert PPQ
73.110 + val th1 = assume cPQ |> implies_intr_list [cPQ,cP]
73.111 + val th3 = assume cP
73.112 + val th4 = implies_elim_list (assume cPPQ) [th3,th3]
73.113 + |> implies_intr_list [cPPQ,cP]
73.114 + in
73.115 + equal_intr th4 th1 |> standard
73.116 + end
73.117 +
73.118 +val imp_comm =
73.119 + let
73.120 + val cert = cterm_of (sign_of ProtoPure.thy)
73.121 + val P = Free("P",propT)
73.122 + val Q = Free("Q",propT)
73.123 + val R = Free("R",propT)
73.124 + val PQR = Logic.mk_implies(P,Logic.mk_implies(Q,R))
73.125 + val QPR = Logic.mk_implies(Q,Logic.mk_implies(P,R))
73.126 + val cP = cert P
73.127 + val cQ = cert Q
73.128 + val cPQR = cert PQR
73.129 + val cQPR = cert QPR
73.130 + val th1 = implies_elim_list (assume cPQR) [assume cP,assume cQ]
73.131 + |> implies_intr_list [cPQR,cQ,cP]
73.132 + val th2 = implies_elim_list (assume cQPR) [assume cQ,assume cP]
73.133 + |> implies_intr_list [cQPR,cP,cQ]
73.134 + in
73.135 + equal_intr th1 th2 |> standard
73.136 + end
73.137 +
73.138 +val def_norm =
73.139 + let
73.140 + val cert = cterm_of (sign_of ProtoPure.thy)
73.141 + val aT = TFree("'a",logicS)
73.142 + val bT = TFree("'b",logicS)
73.143 + val v = Free("v",aT)
73.144 + val P = Free("P",aT-->bT)
73.145 + val Q = Free("Q",aT-->bT)
73.146 + val cvPQ = cert (list_all ([("v",aT)],Logic.mk_equals(P $ Bound 0,Q $ Bound 0)))
73.147 + val cPQ = cert (Logic.mk_equals(P,Q))
73.148 + val cv = cert v
73.149 + val rew = assume cvPQ
73.150 + |> forall_elim cv
73.151 + |> abstract_rule "v" cv
73.152 + val (lhs,rhs) = Logic.dest_equals(concl_of rew)
73.153 + val th1 = transitive (transitive
73.154 + (eta_conversion (cert lhs) |> symmetric)
73.155 + rew)
73.156 + (eta_conversion (cert rhs))
73.157 + |> implies_intr cvPQ
73.158 + val th2 = combination (assume cPQ) (reflexive cv)
73.159 + |> forall_intr cv
73.160 + |> implies_intr cPQ
73.161 + in
73.162 + equal_intr th1 th2 |> standard
73.163 + end
73.164 +
73.165 +val all_comm =
73.166 + let
73.167 + val cert = cterm_of (sign_of ProtoPure.thy)
73.168 + val xT = TFree("'a",logicS)
73.169 + val yT = TFree("'b",logicS)
73.170 + val P = Free("P",xT-->yT-->propT)
73.171 + val lhs = all xT $ (Abs("x",xT,all yT $ (Abs("y",yT,P $ Bound 1 $ Bound 0))))
73.172 + val rhs = all yT $ (Abs("y",yT,all xT $ (Abs("x",xT,P $ Bound 0 $ Bound 1))))
73.173 + val cl = cert lhs
73.174 + val cr = cert rhs
73.175 + val cx = cert (Free("x",xT))
73.176 + val cy = cert (Free("y",yT))
73.177 + val th1 = assume cr
73.178 + |> forall_elim_list [cy,cx]
73.179 + |> forall_intr_list [cx,cy]
73.180 + |> implies_intr cr
73.181 + val th2 = assume cl
73.182 + |> forall_elim_list [cx,cy]
73.183 + |> forall_intr_list [cy,cx]
73.184 + |> implies_intr cl
73.185 + in
73.186 + equal_intr th1 th2 |> standard
73.187 + end
73.188 +
73.189 +val equiv_comm =
73.190 + let
73.191 + val cert = cterm_of (sign_of ProtoPure.thy)
73.192 + val T = TFree("'a",[])
73.193 + val t = Free("t",T)
73.194 + val u = Free("u",T)
73.195 + val ctu = cert (Logic.mk_equals(t,u))
73.196 + val cut = cert (Logic.mk_equals(u,t))
73.197 + val th1 = assume ctu |> symmetric |> implies_intr ctu
73.198 + val th2 = assume cut |> symmetric |> implies_intr cut
73.199 + in
73.200 + equal_intr th1 th2 |> standard
73.201 + end
73.202 +
73.203 +(* This simplification procedure rewrites !!x y. P x y
73.204 +deterministicly, in order for the normalization function, defined
73.205 +below, to handle nested quantifiers robustly *)
73.206 +
73.207 +local
73.208 +
73.209 +exception RESULT of int
73.210 +
73.211 +fun find_bound n (Bound i) = if i = n then raise RESULT 0
73.212 + else if i = n+1 then raise RESULT 1
73.213 + else ()
73.214 + | find_bound n (t $ u) = (find_bound n t; find_bound n u)
73.215 + | find_bound n (Abs(_,_,t)) = find_bound (n+1) t
73.216 + | find_bound _ _ = ()
73.217 +
73.218 +fun swap_bound n (Bound i) = if i = n then Bound (n+1)
73.219 + else if i = n+1 then Bound n
73.220 + else Bound i
73.221 + | swap_bound n (t $ u) = (swap_bound n t $ swap_bound n u)
73.222 + | swap_bound n (Abs(x,xT,t)) = Abs(x,xT,swap_bound (n+1) t)
73.223 + | swap_bound n t = t
73.224 +
73.225 +fun rew_th sg (xv as (x,xT)) (yv as (y,yT)) t =
73.226 + let
73.227 + val lhs = list_all ([xv,yv],t)
73.228 + val rhs = list_all ([yv,xv],swap_bound 0 t)
73.229 + val rew = Logic.mk_equals (lhs,rhs)
73.230 + val init = trivial (cterm_of sg rew)
73.231 + in
73.232 + (all_comm RS init handle e => (message "rew_th"; print_exn e))
73.233 + end
73.234 +
73.235 +fun quant_rewrite sg assumes (t as Const("all",T1) $ (Abs(x,xT,Const("all",T2) $ Abs(y,yT,body)))) =
73.236 + let
73.237 + val res = (find_bound 0 body;2) handle RESULT i => i
73.238 + in
73.239 + case res of
73.240 + 0 => Some (rew_th sg (x,xT) (y,yT) body)
73.241 + | 1 => if string_ord(y,x) = LESS
73.242 + then
73.243 + let
73.244 + val newt = Const("all",T1) $ (Abs(y,xT,Const("all",T2) $ Abs(x,yT,body)))
73.245 + val t_th = reflexive (cterm_of sg t)
73.246 + val newt_th = reflexive (cterm_of sg newt)
73.247 + in
73.248 + Some (transitive t_th newt_th)
73.249 + end
73.250 + else None
73.251 + | _ => error "norm_term (quant_rewrite) internal error"
73.252 + end
73.253 + | quant_rewrite _ _ _ = (warning "quant_rewrite: Unknown lhs"; None)
73.254 +
73.255 +fun freeze_thaw_term t =
73.256 + let
73.257 + val tvars = term_tvars t
73.258 + val tfree_names = add_term_tfree_names(t,[])
73.259 + val (type_inst,_) =
73.260 + foldl (fn ((inst,used),(w as (v,_),S)) =>
73.261 + let
73.262 + val v' = variant used v
73.263 + in
73.264 + ((w,TFree(v',S))::inst,v'::used)
73.265 + end)
73.266 + (([],tfree_names),tvars)
73.267 + val t' = subst_TVars type_inst t
73.268 + in
73.269 + (t',map (fn (w,TFree(v,S)) => (v,TVar(w,S))) type_inst)
73.270 + end
73.271 +
73.272 +fun inst_tfrees sg [] thm = thm
73.273 + | inst_tfrees sg ((name,U)::rest) thm =
73.274 + let
73.275 + val cU = ctyp_of sg U
73.276 + val tfree_names = add_term_tfree_names (prop_of thm,[])
73.277 + val (thm',rens) = varifyT' (tfree_names \ name) thm
73.278 + val mid =
73.279 + case rens of
73.280 + [] => thm'
73.281 + | [(_,idx)] => instantiate ([(idx,cU)],[]) thm'
73.282 + | _ => error "Shuffler.inst_tfrees internal error"
73.283 + in
73.284 + inst_tfrees sg rest mid
73.285 + end
73.286 +
73.287 +fun is_Abs (Abs _) = true
73.288 + | is_Abs _ = false
73.289 +
73.290 +fun eta_redex (t $ Bound 0) =
73.291 + let
73.292 + fun free n (Bound i) = i = n
73.293 + | free n (t $ u) = free n t orelse free n u
73.294 + | free n (Abs(_,_,t)) = free (n+1) t
73.295 + | free n _ = false
73.296 + in
73.297 + not (free 0 t)
73.298 + end
73.299 + | eta_redex _ = false
73.300 +
73.301 +fun eta_contract sg assumes origt =
73.302 + let
73.303 + val (typet,Tinst) = freeze_thaw_term origt
73.304 + val (init,thaw) = freeze_thaw (reflexive (cterm_of sg typet))
73.305 + val final = inst_tfrees sg Tinst o thaw
73.306 + val t = #1 (Logic.dest_equals (prop_of init))
73.307 + val _ =
73.308 + let
73.309 + val lhs = #1 (Logic.dest_equals (prop_of (final init)))
73.310 + in
73.311 + if not (lhs aconv origt)
73.312 + then (writeln "Something is utterly wrong: (orig,lhs,frozen type,t,tinst)";
73.313 + writeln (string_of_cterm (cterm_of sg origt));
73.314 + writeln (string_of_cterm (cterm_of sg lhs));
73.315 + writeln (string_of_cterm (cterm_of sg typet));
73.316 + writeln (string_of_cterm (cterm_of sg t));
73.317 + app (fn (n,T) => writeln (n ^ ": " ^ (string_of_ctyp (ctyp_of sg T)))) Tinst;
73.318 + writeln "done")
73.319 + else ()
73.320 + end
73.321 + in
73.322 + case t of
73.323 + Const("all",_) $ (Abs(x,xT,Const("==",eqT) $ P $ Q)) =>
73.324 + ((if eta_redex P andalso eta_redex Q
73.325 + then
73.326 + let
73.327 + val cert = cterm_of sg
73.328 + val v = Free(variant (add_term_free_names(t,[])) "v",xT)
73.329 + val cv = cert v
73.330 + val ct = cert t
73.331 + val th = (assume ct)
73.332 + |> forall_elim cv
73.333 + |> abstract_rule x cv
73.334 + val ext_th = eta_conversion (cert (Abs(x,xT,P)))
73.335 + val th' = transitive (symmetric ext_th) th
73.336 + val cu = cert (prop_of th')
73.337 + val uth = combination (assume cu) (reflexive cv)
73.338 + val uth' = (beta_conversion false (cert (Abs(x,xT,Q) $ v)))
73.339 + |> transitive uth
73.340 + |> forall_intr cv
73.341 + |> implies_intr cu
73.342 + val rew_th = equal_intr (th' |> implies_intr ct) uth'
73.343 + val res = final rew_th
73.344 + val lhs = (#1 (Logic.dest_equals (prop_of res)))
73.345 + in
73.346 + Some res
73.347 + end
73.348 + else None)
73.349 + handle e => (writeln "eta_contract:";print_exn e))
73.350 + | _ => (error ("Bad eta_contract argument" ^ (string_of_cterm (cterm_of sg t))); None)
73.351 + end
73.352 +
73.353 +fun beta_fun sg assume t =
73.354 + Some (beta_conversion true (cterm_of sg t))
73.355 +
73.356 +fun eta_expand sg assumes origt =
73.357 + let
73.358 + val (typet,Tinst) = freeze_thaw_term origt
73.359 + val (init,thaw) = freeze_thaw (reflexive (cterm_of sg typet))
73.360 + val final = inst_tfrees sg Tinst o thaw
73.361 + val t = #1 (Logic.dest_equals (prop_of init))
73.362 + val _ =
73.363 + let
73.364 + val lhs = #1 (Logic.dest_equals (prop_of (final init)))
73.365 + in
73.366 + if not (lhs aconv origt)
73.367 + then (writeln "Something is utterly wrong: (orig,lhs,frozen type,t,tinst)";
73.368 + writeln (string_of_cterm (cterm_of sg origt));
73.369 + writeln (string_of_cterm (cterm_of sg lhs));
73.370 + writeln (string_of_cterm (cterm_of sg typet));
73.371 + writeln (string_of_cterm (cterm_of sg t));
73.372 + app (fn (n,T) => writeln (n ^ ": " ^ (string_of_ctyp (ctyp_of sg T)))) Tinst;
73.373 + writeln "done")
73.374 + else ()
73.375 + end
73.376 + in
73.377 + case t of
73.378 + Const("==",T) $ P $ Q =>
73.379 + if is_Abs P orelse is_Abs Q
73.380 + then (case domain_type T of
73.381 + Type("fun",[aT,bT]) =>
73.382 + let
73.383 + val cert = cterm_of sg
73.384 + val vname = variant (add_term_free_names(t,[])) "v"
73.385 + val v = Free(vname,aT)
73.386 + val cv = cert v
73.387 + val ct = cert t
73.388 + val th1 = (combination (assume ct) (reflexive cv))
73.389 + |> forall_intr cv
73.390 + |> implies_intr ct
73.391 + val concl = cert (concl_of th1)
73.392 + val th2 = (assume concl)
73.393 + |> forall_elim cv
73.394 + |> abstract_rule vname cv
73.395 + val (lhs,rhs) = Logic.dest_equals (prop_of th2)
73.396 + val elhs = eta_conversion (cert lhs)
73.397 + val erhs = eta_conversion (cert rhs)
73.398 + val th2' = transitive
73.399 + (transitive (symmetric elhs) th2)
73.400 + erhs
73.401 + val res = equal_intr th1 (th2' |> implies_intr concl)
73.402 + val res' = final res
73.403 + in
73.404 + Some res'
73.405 + end
73.406 + | _ => None)
73.407 + else None
73.408 + | _ => (error ("Bad eta_expand argument" ^ (string_of_cterm (cterm_of sg t))); None)
73.409 + end
73.410 + handle e => (writeln "eta_expand internal error";print_exn e)
73.411 +
73.412 +fun mk_tfree s = TFree("'"^s,logicS)
73.413 +val xT = mk_tfree "a"
73.414 +val yT = mk_tfree "b"
73.415 +val P = Var(("P",0),xT-->yT-->propT)
73.416 +val Q = Var(("Q",0),xT-->yT)
73.417 +val R = Var(("R",0),xT-->yT)
73.418 +val S = Var(("S",0),xT)
73.419 +in
73.420 +fun beta_simproc sg = Simplifier.simproc_i
73.421 + sg
73.422 + "Beta-contraction"
73.423 + [Abs("x",xT,Q) $ S]
73.424 + beta_fun
73.425 +
73.426 +fun quant_simproc sg = Simplifier.simproc_i
73.427 + sg
73.428 + "Ordered rewriting of nested quantifiers"
73.429 + [all xT $ (Abs("x",xT,all yT $ (Abs("y",yT,P $ Bound 1 $ Bound 0))))]
73.430 + quant_rewrite
73.431 +fun eta_expand_simproc sg = Simplifier.simproc_i
73.432 + sg
73.433 + "Smart eta-expansion by equivalences"
73.434 + [Logic.mk_equals(Q,R)]
73.435 + eta_expand
73.436 +fun eta_contract_simproc sg = Simplifier.simproc_i
73.437 + sg
73.438 + "Smart handling of eta-contractions"
73.439 + [all xT $ (Abs("x",xT,Logic.mk_equals(Q $ Bound 0,R $ Bound 0)))]
73.440 + eta_contract
73.441 +end
73.442 +
73.443 +(* Disambiguates the names of bound variables in a term, returning t
73.444 +== t' where all the names of bound variables in t' are unique *)
73.445 +
73.446 +fun disamb_bound sg t =
73.447 + let
73.448 +
73.449 + fun F (t $ u,idx) =
73.450 + let
73.451 + val (t',idx') = F (t,idx)
73.452 + val (u',idx'') = F (u,idx')
73.453 + in
73.454 + (t' $ u',idx'')
73.455 + end
73.456 + | F (Abs(x,xT,t),idx) =
73.457 + let
73.458 + val x' = "x" ^ (LargeInt.toString idx) (* amazing *)
73.459 + val (t',idx') = F (t,idx+1)
73.460 + in
73.461 + (Abs(x',xT,t'),idx')
73.462 + end
73.463 + | F arg = arg
73.464 + val (t',_) = F (t,0)
73.465 + val ct = cterm_of sg t
73.466 + val ct' = cterm_of sg t'
73.467 + val res = transitive (reflexive ct) (reflexive ct')
73.468 + val _ = message ("disamb_term: " ^ (string_of_thm res))
73.469 + in
73.470 + res
73.471 + end
73.472 +
73.473 +(* Transforms a term t to some normal form t', returning the theorem t
73.474 +== t'. This is originally a help function for make_equal, but might
73.475 +be handy in its own right, for example for indexing terms. *)
73.476 +
73.477 +fun norm_term thy t =
73.478 + let
73.479 + val sg = sign_of thy
73.480 +
73.481 + val norms = ShuffleData.get thy
73.482 + val ss = empty_ss setmksimps single
73.483 + addsimps (map (transfer_sg sg) norms)
73.484 + fun chain f th =
73.485 + let
73.486 + val rhs = snd (dest_equals (cprop_of th))
73.487 + in
73.488 + transitive th (f rhs)
73.489 + end
73.490 +
73.491 + val th =
73.492 + t |> disamb_bound sg
73.493 + |> chain (Simplifier.full_rewrite
73.494 + (ss addsimprocs [quant_simproc sg,eta_expand_simproc sg,eta_contract_simproc sg]))
73.495 + |> chain eta_conversion
73.496 + |> strip_shyps
73.497 + val _ = message ("norm_term: " ^ (string_of_thm th))
73.498 + in
73.499 + th
73.500 + end
73.501 + handle e => (writeln "norm_term internal error"; print_sign_exn (sign_of thy) e)
73.502 +
73.503 +fun is_logic_var sg v =
73.504 + Type.of_sort (Sign.tsig_of sg) (type_of v,logicS)
73.505 +
73.506 +(* Closes a theorem with respect to free and schematic variables (does
73.507 +not touch type variables, though). *)
73.508 +
73.509 +fun close_thm th =
73.510 + let
73.511 + val sg = sign_of_thm th
73.512 + val c = prop_of th
73.513 + val all_vars = add_term_frees (c,add_term_vars(c,[]))
73.514 + val all_rel_vars = filter (is_logic_var sg) all_vars
73.515 + in
73.516 + Drule.forall_intr_list (map (cterm_of sg) all_rel_vars) th
73.517 + end
73.518 + handle e => (writeln "close_thm internal error"; print_exn e)
73.519 +
73.520 +(* Normalizes a theorem's conclusion using norm_term. *)
73.521 +
73.522 +fun norm_thm thy th =
73.523 + let
73.524 + val c = prop_of th
73.525 + in
73.526 + equal_elim (norm_term thy c) th
73.527 + end
73.528 +
73.529 +(* make_equal sg t u tries to construct the theorem t == u under the
73.530 +signature sg. If it succeeds, Some (t == u) is returned, otherwise
73.531 +None is returned. *)
73.532 +
73.533 +fun make_equal sg t u =
73.534 + let
73.535 + val t_is_t' = norm_term sg t
73.536 + val u_is_u' = norm_term sg u
73.537 + val th = transitive t_is_t' (symmetric u_is_u')
73.538 + val _ = message ("make_equal: Some " ^ (string_of_thm th))
73.539 + in
73.540 + Some th
73.541 + end
73.542 + handle e as THM _ => (message "make_equal: None";None)
73.543 +
73.544 +fun match_consts ignore t (* th *) =
73.545 + let
73.546 + fun add_consts (Const (c, _), cs) =
73.547 + if c mem_string ignore
73.548 + then cs
73.549 + else c ins_string cs
73.550 + | add_consts (t $ u, cs) = add_consts (t, add_consts (u, cs))
73.551 + | add_consts (Abs (_, _, t), cs) = add_consts (t, cs)
73.552 + | add_consts (_, cs) = cs
73.553 + val t_consts = add_consts(t,[])
73.554 + in
73.555 + fn (name,th) =>
73.556 + let
73.557 + val th_consts = add_consts(prop_of th,[])
73.558 + in
73.559 + eq_set(t_consts,th_consts)
73.560 + end
73.561 + end
73.562 +
73.563 +val collect_ignored =
73.564 + foldr (fn (thm,cs) =>
73.565 + let
73.566 + val (lhs,rhs) = Logic.dest_equals (prop_of thm)
73.567 + val ignore_lhs = term_consts lhs \\ term_consts rhs
73.568 + val ignore_rhs = term_consts rhs \\ term_consts lhs
73.569 + in
73.570 + foldr (op ins_string) (ignore_lhs @ ignore_rhs,cs)
73.571 + end)
73.572 +
73.573 +(* set_prop t thms tries to make a theorem with the proposition t from
73.574 +one of the theorems thms, by shuffling the propositions around. If it
73.575 +succeeds, Some theorem is returned, otherwise None. *)
73.576 +
73.577 +fun set_prop thy t =
73.578 + let
73.579 + val sg = sign_of thy
73.580 + val all_vars = add_term_frees (t,add_term_vars (t,[]))
73.581 + val all_rel_vars = filter (is_logic_var sg) all_vars
73.582 + val closed_t = foldr (fn (v,body) => let val vT = type_of v
73.583 + in all vT $ (Abs("x",vT,abstract_over(v,body))) end) (all_rel_vars,t)
73.584 + val rew_th = norm_term thy closed_t
73.585 + val rhs = snd (dest_equals (cprop_of rew_th))
73.586 +
73.587 + val shuffles = ShuffleData.get thy
73.588 + fun process [] = None
73.589 + | process ((name,th)::thms) =
73.590 + let
73.591 + val norm_th = varifyT (norm_thm thy (close_thm (transfer_sg sg th)))
73.592 + val triv_th = trivial rhs
73.593 + val _ = message ("Shuffler.set_prop: Gluing together " ^ (string_of_thm norm_th) ^ " and " ^ (string_of_thm triv_th))
73.594 + val mod_th = case Seq.pull (bicompose true (false,norm_th,0) 1 triv_th) of
73.595 + Some(th,_) => Some th
73.596 + | None => None
73.597 + in
73.598 + case mod_th of
73.599 + Some mod_th =>
73.600 + let
73.601 + val closed_th = equal_elim (symmetric rew_th) mod_th
73.602 + in
73.603 + message ("Shuffler.set_prop succeeded by " ^ name);
73.604 + Some (name,forall_elim_list (map (cterm_of sg) all_rel_vars) closed_th)
73.605 + end
73.606 + | None => process thms
73.607 + end
73.608 + handle e as THM _ => process thms
73.609 + in
73.610 + fn thms =>
73.611 + case process thms of
73.612 + res as Some (name,th) => if (prop_of th) aconv t
73.613 + then res
73.614 + else error "Internal error in set_prop"
73.615 + | None => None
73.616 + end
73.617 + handle e => (writeln "set_prop internal error"; print_exn e)
73.618 +
73.619 +fun find_potential thy t =
73.620 + let
73.621 + val shuffles = ShuffleData.get thy
73.622 + val ignored = collect_ignored(shuffles,[])
73.623 + val rel_consts = term_consts t \\ ignored
73.624 + val pot_thms = PureThy.thms_containing_consts thy rel_consts
73.625 + in
73.626 + filter (match_consts ignored t) pot_thms
73.627 + end
73.628 +
73.629 +fun gen_shuffle_tac thy search thms i st =
73.630 + let
73.631 + val _ = message ("Shuffling " ^ (string_of_thm st))
73.632 + val t = nth_elem(i-1,prems_of st)
73.633 + val set = set_prop thy t
73.634 + fun process_tac thms st =
73.635 + case set thms of
73.636 + Some (_,th) => Seq.of_list (compose (th,i,st))
73.637 + | None => Seq.empty
73.638 + in
73.639 + (process_tac thms APPEND (if search
73.640 + then process_tac (find_potential thy t)
73.641 + else no_tac)) st
73.642 + end
73.643 +
73.644 +fun shuffle_tac thms i st =
73.645 + gen_shuffle_tac (the_context()) false thms i st
73.646 +
73.647 +fun search_tac thms i st =
73.648 + gen_shuffle_tac (the_context()) true thms i st
73.649 +
73.650 +fun shuffle_meth (thms:thm list) ctxt =
73.651 + let
73.652 + val thy = ProofContext.theory_of ctxt
73.653 + in
73.654 + Method.SIMPLE_METHOD' HEADGOAL (gen_shuffle_tac thy false (map (pair "") thms))
73.655 + end
73.656 +
73.657 +fun search_meth ctxt =
73.658 + let
73.659 + val thy = ProofContext.theory_of ctxt
73.660 + val prems = ProofContext.prems_of ctxt
73.661 + in
73.662 + Method.SIMPLE_METHOD' HEADGOAL (gen_shuffle_tac thy true (map (pair "premise") prems))
73.663 + end
73.664 +
73.665 +val print_shuffles = ShuffleData.print
73.666 +
73.667 +fun add_shuffle_rule thm thy =
73.668 + let
73.669 + val shuffles = ShuffleData.get thy
73.670 + in
73.671 + if exists (curry Thm.eq_thm thm) shuffles
73.672 + then (warning ((string_of_thm thm) ^ " already known to the shuffler");
73.673 + thy)
73.674 + else ShuffleData.put (thm::shuffles) thy
73.675 + end
73.676 +
73.677 +fun shuffle_attr (thy,thm) = (add_shuffle_rule thm thy,thm)
73.678 +
73.679 +val setup = [Method.add_method ("shuffle_tac",Method.thms_ctxt_args shuffle_meth,"solve goal by shuffling terms around"),
73.680 + Method.add_method ("search_tac",Method.ctxt_args search_meth,"search for suitable theorems"),
73.681 + ShuffleData.init,
73.682 + add_shuffle_rule weaken,
73.683 + add_shuffle_rule equiv_comm,
73.684 + add_shuffle_rule imp_comm,
73.685 + add_shuffle_rule Drule.norm_hhf_eq,
73.686 + add_shuffle_rule Drule.triv_forall_equality,
73.687 + Attrib.add_attributes [("shuffle_rule",(Attrib.no_args shuffle_attr,K Attrib.undef_local_attribute),"tell the shuffler about the theorem")]]
73.688 +end
74.1 --- a/src/HOL/IsaMakefile Fri Apr 02 17:36:01 2004 +0200
74.2 +++ b/src/HOL/IsaMakefile Fri Apr 02 17:37:45 2004 +0200
74.3 @@ -19,6 +19,7 @@
74.4 HOL-CTL \
74.5 HOL-Extraction \
74.6 HOL-Complex-HahnBanach \
74.7 + HOL-Complex-Import \
74.8 HOL-Hoare \
74.9 HOL-HoareParallel \
74.10 HOL-IMP \
74.11 @@ -236,6 +237,51 @@
74.12 @$(ISATOOL) usedir $(OUT)/HOL IMPP
74.13
74.14
74.15 +## HOL-Complex-Import
74.16 +
74.17 +IMPORTER_FILES = Import/proof_kernel.ML Import/replay.ML \
74.18 + Import/shuffler.ML Import/MakeEqual.thy Import/HOL4Setup.thy \
74.19 + Import/HOL4Syntax.thy Import/HOL4Compat.thy Import/import_syntax.ML \
74.20 + Import/hol4rews.ML Import/import_package.ML Import/ROOT.ML
74.21 +
74.22 +HOL-Complex-Import: HOL-Complex $(LOG)/HOL-Complex-Import.gz
74.23 +
74.24 +$(LOG)/HOL-Complex-Import.gz: $(OUT)/HOL-Complex $(IMPORTER_FILES)
74.25 + @$(ISATOOL) usedir $(OUT)/HOL-Complex Import
74.26 +
74.27 +
74.28 +## HOL-Complex-Generate-HOL
74.29 +
74.30 +HOL-Complex-Generate-HOL: HOL-Complex $(LOG)/HOL-Complex-Generate-HOL.gz
74.31 +
74.32 +$(LOG)/HOL-Complex-Generate-HOL.gz: $(OUT)/HOL-Complex $(IMPORTER_FILES) \
74.33 + Import/Generate-HOL/GenHOL4Base.thy Import/Generate-HOL/GenHOL4Prob.thy \
74.34 + Import/Generate-HOL/GenHOL4Real.thy Import/Generate-HOL/GenHOL4Vec.thy \
74.35 + Import/Generate-HOL/GenHOL4Word32.thy Import/Generate-HOL/ROOT.ML
74.36 + @cd Import; $(ISATOOL) usedir $(OUT)/HOL-Complex Generate-HOL
74.37 +
74.38 +
74.39 +## HOL-Import-HOL
74.40 +
74.41 +HOL-Import-HOL: HOL-Complex $(LOG)/HOL-Import-HOL.gz
74.42 +
74.43 +HOL_IMPORT_FILES = arithmetic.imp bits.imp boolean_sequence.imp bool.imp \
74.44 + bword_arith.imp bword_bitop.imp bword_num.imp combin.imp divides.imp \
74.45 + hrat.imp hreal.imp ind_type.imp lim.imp list.imp marker.imp nets.imp \
74.46 + numeral.imp num.imp one.imp operator.imp option.imp pair.imp poly.imp \
74.47 + powser.imp pred_set.imp prime.imp prim_rec.imp prob_algebra.imp \
74.48 + prob_canon.imp prob_extra.imp prob.imp prob_indep.imp prob_pseudo.imp \
74.49 + prob_uniform.imp realax.imp real.imp relation.imp res_quan.imp rich_list.imp \
74.50 + seq.imp state_transformer.imp sum.imp topology.imp transc.imp word32.imp \
74.51 + word_base.imp word_bitop.imp word_num.imp
74.52 +
74.53 +$(LOG)/HOL-Import-HOL.gz: $(OUT)/HOL-Complex $(IMPORTER_FILES) \
74.54 + $(HOL_IMPORT_FILES:%=Import/HOL/%) Import/HOL/HOL4Base.thy \
74.55 + Import/HOL/HOL4Prob.thy Import/HOL/HOL4Real.thy Import/HOL/HOL4Vec.thy \
74.56 + Import/HOL/HOL4Word32.thy Import/HOL/HOL4.thy Import/HOL/ROOT.ML
74.57 + @cd Import/HOL; $(ISATOOL) usedir -b $(OUT)/HOL-Complex HOL-Import-HOL
74.58 +
74.59 +
74.60 ## HOL-NumberTheory
74.61
74.62 HOL-NumberTheory: HOL $(LOG)/HOL-NumberTheory.gz