src/HOL/Import/HOLLight/HOLLight.thy
changeset 19093 6d584f9d2021
parent 17915 e38947f9ba5e
child 19233 77ca20b0ed77
     1.1 --- a/src/HOL/Import/HOLLight/HOLLight.thy	Fri Feb 17 01:46:38 2006 +0100
     1.2 +++ b/src/HOL/Import/HOLLight/HOLLight.thy	Fri Feb 17 03:30:50 2006 +0100
     1.3 @@ -1,6 +1,6 @@
     1.4  (* AUTOMATICALLY GENERATED, DO NOT EDIT! *)
     1.5  
     1.6 -theory HOLLight imports "../HOLLightCompat" "../HOL4Syntax" begin
     1.7 +theory HOLLight = "../HOLLightCompat" + "../HOL4Syntax":
     1.8  
     1.9  ;setup_theory hollight
    1.10  
    1.11 @@ -923,25 +923,25 @@
    1.12         Ex P --> (EX x::'A::type. P x & (ALL y::'A::type. u y x --> ~ P y)))"
    1.13    by (import hollight DEF_WF)
    1.14  
    1.15 -lemma WF_EQ: "WF (u_354::'A::type => 'A::type => bool) =
    1.16 +lemma WF_EQ: "WF (u_353::'A::type => 'A::type => bool) =
    1.17  (ALL P::'A::type => bool.
    1.18 -    Ex P = (EX x::'A::type. P x & (ALL y::'A::type. u_354 y x --> ~ P y)))"
    1.19 +    Ex P = (EX x::'A::type. P x & (ALL y::'A::type. u_353 y x --> ~ P y)))"
    1.20    by (import hollight WF_EQ)
    1.21  
    1.22 -lemma WF_IND: "WF (u_354::'A::type => 'A::type => bool) =
    1.23 +lemma WF_IND: "WF (u_353::'A::type => 'A::type => bool) =
    1.24  (ALL P::'A::type => bool.
    1.25 -    (ALL x::'A::type. (ALL y::'A::type. u_354 y x --> P y) --> P x) -->
    1.26 +    (ALL x::'A::type. (ALL y::'A::type. u_353 y x --> P y) --> P x) -->
    1.27      All P)"
    1.28    by (import hollight WF_IND)
    1.29  
    1.30 -lemma WF_DCHAIN: "WF (u_354::'A::type => 'A::type => bool) =
    1.31 -(~ (EX s::nat => 'A::type. ALL n::nat. u_354 (s (Suc n)) (s n)))"
    1.32 +lemma WF_DCHAIN: "WF (u_353::'A::type => 'A::type => bool) =
    1.33 +(~ (EX s::nat => 'A::type. ALL n::nat. u_353 (s (Suc n)) (s n)))"
    1.34    by (import hollight WF_DCHAIN)
    1.35  
    1.36 -lemma WF_UREC: "WF (u_354::'A::type => 'A::type => bool) -->
    1.37 +lemma WF_UREC: "WF (u_353::'A::type => 'A::type => bool) -->
    1.38  (ALL H::('A::type => 'B::type) => 'A::type => 'B::type.
    1.39      (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type) x::'A::type.
    1.40 -        (ALL z::'A::type. u_354 z x --> f z = g z) --> H f x = H g x) -->
    1.41 +        (ALL z::'A::type. u_353 z x --> f z = g z) --> H f x = H g x) -->
    1.42      (ALL (f::'A::type => 'B::type) g::'A::type => 'B::type.
    1.43          (ALL x::'A::type. f x = H f x) & (ALL x::'A::type. g x = H g x) -->
    1.44          f = g))"
    1.45 @@ -950,56 +950,56 @@
    1.46  lemma WF_UREC_WF: "(ALL H::('A::type => bool) => 'A::type => bool.
    1.47      (ALL (f::'A::type => bool) (g::'A::type => bool) x::'A::type.
    1.48          (ALL z::'A::type.
    1.49 -            (u_354::'A::type => 'A::type => bool) z x --> f z = g z) -->
    1.50 +            (u_353::'A::type => 'A::type => bool) z x --> f z = g z) -->
    1.51          H f x = H g x) -->
    1.52      (ALL (f::'A::type => bool) g::'A::type => bool.
    1.53          (ALL x::'A::type. f x = H f x) & (ALL x::'A::type. g x = H g x) -->
    1.54          f = g)) -->
    1.55 -WF u_354"
    1.56 +WF u_353"
    1.57    by (import hollight WF_UREC_WF)
    1.58  
    1.59 -lemma WF_REC_INVARIANT: "WF (u_354::'A::type => 'A::type => bool) -->
    1.60 +lemma WF_REC_INVARIANT: "WF (u_353::'A::type => 'A::type => bool) -->
    1.61  (ALL (H::('A::type => 'B::type) => 'A::type => 'B::type)
    1.62      S::'A::type => 'B::type => bool.
    1.63      (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type) x::'A::type.
    1.64 -        (ALL z::'A::type. u_354 z x --> f z = g z & S z (f z)) -->
    1.65 +        (ALL z::'A::type. u_353 z x --> f z = g z & S z (f z)) -->
    1.66          H f x = H g x & S x (H f x)) -->
    1.67      (EX f::'A::type => 'B::type. ALL x::'A::type. f x = H f x))"
    1.68    by (import hollight WF_REC_INVARIANT)
    1.69  
    1.70 -lemma WF_REC: "WF (u_354::'A::type => 'A::type => bool) -->
    1.71 +lemma WF_REC: "WF (u_353::'A::type => 'A::type => bool) -->
    1.72  (ALL H::('A::type => 'B::type) => 'A::type => 'B::type.
    1.73      (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type) x::'A::type.
    1.74 -        (ALL z::'A::type. u_354 z x --> f z = g z) --> H f x = H g x) -->
    1.75 +        (ALL z::'A::type. u_353 z x --> f z = g z) --> H f x = H g x) -->
    1.76      (EX f::'A::type => 'B::type. ALL x::'A::type. f x = H f x))"
    1.77    by (import hollight WF_REC)
    1.78  
    1.79  lemma WF_REC_WF: "(ALL H::('A::type => nat) => 'A::type => nat.
    1.80      (ALL (f::'A::type => nat) (g::'A::type => nat) x::'A::type.
    1.81          (ALL z::'A::type.
    1.82 -            (u_354::'A::type => 'A::type => bool) z x --> f z = g z) -->
    1.83 +            (u_353::'A::type => 'A::type => bool) z x --> f z = g z) -->
    1.84          H f x = H g x) -->
    1.85      (EX f::'A::type => nat. ALL x::'A::type. f x = H f x)) -->
    1.86 -WF u_354"
    1.87 +WF u_353"
    1.88    by (import hollight WF_REC_WF)
    1.89  
    1.90 -lemma WF_EREC: "WF (u_354::'A::type => 'A::type => bool) -->
    1.91 +lemma WF_EREC: "WF (u_353::'A::type => 'A::type => bool) -->
    1.92  (ALL H::('A::type => 'B::type) => 'A::type => 'B::type.
    1.93      (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type) x::'A::type.
    1.94 -        (ALL z::'A::type. u_354 z x --> f z = g z) --> H f x = H g x) -->
    1.95 +        (ALL z::'A::type. u_353 z x --> f z = g z) --> H f x = H g x) -->
    1.96      (EX! f::'A::type => 'B::type. ALL x::'A::type. f x = H f x))"
    1.97    by (import hollight WF_EREC)
    1.98  
    1.99  lemma WF_SUBSET: "(ALL (x::'A::type) y::'A::type.
   1.100 -    (u_354::'A::type => 'A::type => bool) x y -->
   1.101 -    (u_473::'A::type => 'A::type => bool) x y) &
   1.102 -WF u_473 -->
   1.103 -WF u_354"
   1.104 +    (u_353::'A::type => 'A::type => bool) x y -->
   1.105 +    (u_472::'A::type => 'A::type => bool) x y) &
   1.106 +WF u_472 -->
   1.107 +WF u_353"
   1.108    by (import hollight WF_SUBSET)
   1.109  
   1.110  lemma WF_MEASURE_GEN: "ALL m::'A::type => 'B::type.
   1.111 -   WF (u_354::'B::type => 'B::type => bool) -->
   1.112 -   WF (%(x::'A::type) x'::'A::type. u_354 (m x) (m x'))"
   1.113 +   WF (u_353::'B::type => 'B::type => bool) -->
   1.114 +   WF (%(x::'A::type) x'::'A::type. u_353 (m x) (m x'))"
   1.115    by (import hollight WF_MEASURE_GEN)
   1.116  
   1.117  lemma WF_LEX_DEPENDENT: "ALL (R::'A::type => 'A::type => bool)
   1.118 @@ -1028,8 +1028,8 @@
   1.119                           GEQ (f (r2, s2)) (x r1 r2 | r1 = r2 & xa s1 s2)))))"
   1.120    by (import hollight WF_LEX)
   1.121  
   1.122 -lemma WF_POINTWISE: "WF (u_354::'A::type => 'A::type => bool) &
   1.123 -WF (u_473::'B::type => 'B::type => bool) -->
   1.124 +lemma WF_POINTWISE: "WF (u_353::'A::type => 'A::type => bool) &
   1.125 +WF (u_472::'B::type => 'B::type => bool) -->
   1.126  WF (GABS
   1.127       (%f::'A::type * 'B::type => 'A::type * 'B::type => bool.
   1.128           ALL (x1::'A::type) y1::'B::type.
   1.129 @@ -1037,7 +1037,7 @@
   1.130               (GABS
   1.131                 (%f::'A::type * 'B::type => bool.
   1.132                     ALL (x2::'A::type) y2::'B::type.
   1.133 -                      GEQ (f (x2, y2)) (u_354 x1 x2 & u_473 y1 y2)))))"
   1.134 +                      GEQ (f (x2, y2)) (u_353 x1 x2 & u_472 y1 y2)))))"
   1.135    by (import hollight WF_POINTWISE)
   1.136  
   1.137  lemma WF_num: "WF <"
   1.138 @@ -1071,7 +1071,7 @@
   1.139  <= (m a) (m b)"
   1.140    by (import hollight MEASURE_LE)
   1.141  
   1.142 -lemma WF_REFL: "ALL x::'A::type. WF (u_354::'A::type => 'A::type => bool) --> ~ u_354 x x"
   1.143 +lemma WF_REFL: "ALL x::'A::type. WF (u_353::'A::type => 'A::type => bool) --> ~ u_353 x x"
   1.144    by (import hollight WF_REFL)
   1.145  
   1.146  lemma WF_FALSE: "WF (%(x::'A::type) y::'A::type. False)"
   1.147 @@ -1085,14 +1085,14 @@
   1.148  lemma WF_REC_TAIL_GENERAL: "ALL (P::('A::type => 'B::type) => 'A::type => bool)
   1.149     (G::('A::type => 'B::type) => 'A::type => 'A::type)
   1.150     H::('A::type => 'B::type) => 'A::type => 'B::type.
   1.151 -   WF (u_354::'A::type => 'A::type => bool) &
   1.152 +   WF (u_353::'A::type => 'A::type => bool) &
   1.153     (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type) x::'A::type.
   1.154 -       (ALL z::'A::type. u_354 z x --> f z = g z) -->
   1.155 +       (ALL z::'A::type. u_353 z x --> f z = g z) -->
   1.156         P f x = P g x & G f x = G g x & H f x = H g x) &
   1.157     (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type) x::'A::type.
   1.158 -       (ALL z::'A::type. u_354 z x --> f z = g z) --> H f x = H g x) &
   1.159 +       (ALL z::'A::type. u_353 z x --> f z = g z) --> H f x = H g x) &
   1.160     (ALL (f::'A::type => 'B::type) (x::'A::type) y::'A::type.
   1.161 -       P f x & u_354 y (G f x) --> u_354 y x) -->
   1.162 +       P f x & u_353 y (G f x) --> u_353 y x) -->
   1.163     (EX f::'A::type => 'B::type.
   1.164         ALL x::'A::type. f x = COND (P f x) (f (G f x)) (H f x))"
   1.165    by (import hollight WF_REC_TAIL_GENERAL)
   1.166 @@ -1924,162 +1924,30 @@
   1.167  lemma DEF_FNIL: "FNIL = (%u::nat. SOME x::'A::type. True)"
   1.168    by (import hollight DEF_FNIL)
   1.169  
   1.170 -typedef (open) ('A, 'B) sum = "(Collect::(('A::type * 'B::type) recspace => bool)
   1.171 -          => ('A::type * 'B::type) recspace set)
   1.172 - (%a::('A::type * 'B::type) recspace.
   1.173 -     (All::((('A::type * 'B::type) recspace => bool) => bool) => bool)
   1.174 -      (%sum'::('A::type * 'B::type) recspace => bool.
   1.175 -          (op -->::bool => bool => bool)
   1.176 -           ((All::(('A::type * 'B::type) recspace => bool) => bool)
   1.177 -             (%a::('A::type * 'B::type) recspace.
   1.178 -                 (op -->::bool => bool => bool)
   1.179 -                  ((op |::bool => bool => bool)
   1.180 -                    ((Ex::('A::type => bool) => bool)
   1.181 -                      (%aa::'A::type.
   1.182 -                          (op =::('A::type * 'B::type) recspace
   1.183 -                                 => ('A::type * 'B::type) recspace => bool)
   1.184 -                           a ((CONSTR::nat
   1.185 - => 'A::type * 'B::type
   1.186 -    => (nat => ('A::type * 'B::type) recspace)
   1.187 -       => ('A::type * 'B::type) recspace)
   1.188 -                               ((NUMERAL::nat => nat) (0::nat))
   1.189 -                               ((Pair::'A::type
   1.190 - => 'B::type => 'A::type * 'B::type)
   1.191 -                                 aa ((Eps::('B::type => bool) => 'B::type)
   1.192 -(%v::'B::type. True::bool)))
   1.193 -                               (%n::nat.
   1.194 -                                   BOTTOM::('A::type *
   1.195 -      'B::type) recspace))))
   1.196 -                    ((Ex::('B::type => bool) => bool)
   1.197 -                      (%aa::'B::type.
   1.198 -                          (op =::('A::type * 'B::type) recspace
   1.199 -                                 => ('A::type * 'B::type) recspace => bool)
   1.200 -                           a ((CONSTR::nat
   1.201 - => 'A::type * 'B::type
   1.202 -    => (nat => ('A::type * 'B::type) recspace)
   1.203 -       => ('A::type * 'B::type) recspace)
   1.204 -                               ((Suc::nat => nat)
   1.205 -                                 ((NUMERAL::nat => nat) (0::nat)))
   1.206 -                               ((Pair::'A::type
   1.207 - => 'B::type => 'A::type * 'B::type)
   1.208 -                                 ((Eps::('A::type => bool) => 'A::type)
   1.209 -                                   (%v::'A::type. True::bool))
   1.210 -                                 aa)
   1.211 -                               (%n::nat.
   1.212 -                                   BOTTOM::('A::type *
   1.213 -      'B::type) recspace)))))
   1.214 -                  (sum' a)))
   1.215 -           (sum' a)))"  morphisms "_dest_sum" "_mk_sum"
   1.216 -  apply (rule light_ex_imp_nonempty[where t="(CONSTR::nat
   1.217 -         => 'A::type * 'B::type
   1.218 -            => (nat => ('A::type * 'B::type) recspace)
   1.219 -               => ('A::type * 'B::type) recspace)
   1.220 - ((NUMERAL::nat => nat) (0::nat))
   1.221 - ((Pair::'A::type => 'B::type => 'A::type * 'B::type) (a::'A::type)
   1.222 -   ((Eps::('B::type => bool) => 'B::type) (%v::'B::type. True::bool)))
   1.223 - (%n::nat. BOTTOM::('A::type * 'B::type) recspace)"])
   1.224 -  by (import hollight TYDEF_sum)
   1.225 -
   1.226 -syntax
   1.227 -  "_dest_sum" :: _ ("'_dest'_sum")
   1.228 -
   1.229 -syntax
   1.230 -  "_mk_sum" :: _ ("'_mk'_sum")
   1.231 -
   1.232 -lemmas "TYDEF_sum_@intern" = typedef_hol2hollight 
   1.233 -  [where a="a :: ('A, 'B) sum" and r=r ,
   1.234 -   OF type_definition_sum]
   1.235 -
   1.236 -constdefs
   1.237 -  INL :: "'A => ('A, 'B) sum" 
   1.238 -  "(op ==::('A::type => ('A::type, 'B::type) sum)
   1.239 -        => ('A::type => ('A::type, 'B::type) sum) => prop)
   1.240 - (INL::'A::type => ('A::type, 'B::type) sum)
   1.241 - (%a::'A::type.
   1.242 -     (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum)
   1.243 -      ((CONSTR::nat
   1.244 -                => 'A::type * 'B::type
   1.245 -                   => (nat => ('A::type * 'B::type) recspace)
   1.246 -                      => ('A::type * 'B::type) recspace)
   1.247 -        (0::nat)
   1.248 -        ((Pair::'A::type => 'B::type => 'A::type * 'B::type) a
   1.249 -          ((Eps::('B::type => bool) => 'B::type)
   1.250 -            (%v::'B::type. True::bool)))
   1.251 -        (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))"
   1.252 -
   1.253 -lemma DEF_INL: "(op =::('A::type => ('A::type, 'B::type) sum)
   1.254 -       => ('A::type => ('A::type, 'B::type) sum) => bool)
   1.255 - (INL::'A::type => ('A::type, 'B::type) sum)
   1.256 - (%a::'A::type.
   1.257 -     (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum)
   1.258 -      ((CONSTR::nat
   1.259 -                => 'A::type * 'B::type
   1.260 -                   => (nat => ('A::type * 'B::type) recspace)
   1.261 -                      => ('A::type * 'B::type) recspace)
   1.262 -        (0::nat)
   1.263 -        ((Pair::'A::type => 'B::type => 'A::type * 'B::type) a
   1.264 -          ((Eps::('B::type => bool) => 'B::type)
   1.265 -            (%v::'B::type. True::bool)))
   1.266 -        (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))"
   1.267 -  by (import hollight DEF_INL)
   1.268 -
   1.269 -constdefs
   1.270 -  INR :: "'B => ('A, 'B) sum" 
   1.271 -  "(op ==::('B::type => ('A::type, 'B::type) sum)
   1.272 -        => ('B::type => ('A::type, 'B::type) sum) => prop)
   1.273 - (INR::'B::type => ('A::type, 'B::type) sum)
   1.274 - (%a::'B::type.
   1.275 -     (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum)
   1.276 -      ((CONSTR::nat
   1.277 -                => 'A::type * 'B::type
   1.278 -                   => (nat => ('A::type * 'B::type) recspace)
   1.279 -                      => ('A::type * 'B::type) recspace)
   1.280 -        ((Suc::nat => nat) (0::nat))
   1.281 -        ((Pair::'A::type => 'B::type => 'A::type * 'B::type)
   1.282 -          ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool))
   1.283 -          a)
   1.284 -        (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))"
   1.285 -
   1.286 -lemma DEF_INR: "(op =::('B::type => ('A::type, 'B::type) sum)
   1.287 -       => ('B::type => ('A::type, 'B::type) sum) => bool)
   1.288 - (INR::'B::type => ('A::type, 'B::type) sum)
   1.289 - (%a::'B::type.
   1.290 -     (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum)
   1.291 -      ((CONSTR::nat
   1.292 -                => 'A::type * 'B::type
   1.293 -                   => (nat => ('A::type * 'B::type) recspace)
   1.294 -                      => ('A::type * 'B::type) recspace)
   1.295 -        ((Suc::nat => nat) (0::nat))
   1.296 -        ((Pair::'A::type => 'B::type => 'A::type * 'B::type)
   1.297 -          ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool))
   1.298 -          a)
   1.299 -        (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))"
   1.300 -  by (import hollight DEF_INR)
   1.301 -
   1.302  consts
   1.303 -  OUTL :: "('A, 'B) sum => 'A" 
   1.304 +  OUTL :: "'A + 'B => 'A" 
   1.305  
   1.306  defs
   1.307    OUTL_def: "hollight.OUTL ==
   1.308 -SOME OUTL::('A::type, 'B::type) sum => 'A::type.
   1.309 -   ALL x::'A::type. OUTL (INL x) = x"
   1.310 +SOME OUTL::'A::type + 'B::type => 'A::type.
   1.311 +   ALL x::'A::type. OUTL (Inl x) = x"
   1.312  
   1.313  lemma DEF_OUTL: "hollight.OUTL =
   1.314 -(SOME OUTL::('A::type, 'B::type) sum => 'A::type.
   1.315 -    ALL x::'A::type. OUTL (INL x) = x)"
   1.316 +(SOME OUTL::'A::type + 'B::type => 'A::type.
   1.317 +    ALL x::'A::type. OUTL (Inl x) = x)"
   1.318    by (import hollight DEF_OUTL)
   1.319  
   1.320  consts
   1.321 -  OUTR :: "('A, 'B) sum => 'B" 
   1.322 +  OUTR :: "'A + 'B => 'B" 
   1.323  
   1.324  defs
   1.325    OUTR_def: "hollight.OUTR ==
   1.326 -SOME OUTR::('A::type, 'B::type) sum => 'B::type.
   1.327 -   ALL y::'B::type. OUTR (INR y) = y"
   1.328 +SOME OUTR::'A::type + 'B::type => 'B::type.
   1.329 +   ALL y::'B::type. OUTR (Inr y) = y"
   1.330  
   1.331  lemma DEF_OUTR: "hollight.OUTR =
   1.332 -(SOME OUTR::('A::type, 'B::type) sum => 'B::type.
   1.333 -    ALL y::'B::type. OUTR (INR y) = y)"
   1.334 +(SOME OUTR::'A::type + 'B::type => 'B::type.
   1.335 +    ALL y::'B::type. OUTR (Inr y) = y)"
   1.336    by (import hollight DEF_OUTR)
   1.337  
   1.338  typedef (open) ('A) option = "(Collect::('A::type recspace => bool) => 'A::type recspace set)
   1.339 @@ -2288,6 +2156,10 @@
   1.340     EX fn::nat => 'Z::type. fn 0 = e & (ALL n::nat. fn (Suc n) = f n (fn n))"
   1.341    by (import hollight num_RECURSION_STD)
   1.342  
   1.343 +lemma bool_RECURSION: "ALL (a::'A::type) b::'A::type.
   1.344 +   EX x::bool => 'A::type. x False = a & x True = b"
   1.345 +  by (import hollight bool_RECURSION)
   1.346 +
   1.347  constdefs
   1.348    ISO :: "('A => 'B) => ('B => 'A) => bool" 
   1.349    "ISO ==
   1.350 @@ -2308,11 +2180,11 @@
   1.351   (%(h::'A'::type => 'B'::type) a::'A::type. g' (h (f a)))"
   1.352    by (import hollight ISO_FUN)
   1.353  
   1.354 -lemma ISO_USAGE: "ISO (f::'q_16585::type => 'q_16582::type)
   1.355 - (g::'q_16582::type => 'q_16585::type) -->
   1.356 -(ALL P::'q_16585::type => bool. All P = (ALL x::'q_16582::type. P (g x))) &
   1.357 -(ALL P::'q_16585::type => bool. Ex P = (EX x::'q_16582::type. P (g x))) &
   1.358 -(ALL (a::'q_16585::type) b::'q_16582::type. (a = g b) = (f a = b))"
   1.359 +lemma ISO_USAGE: "ISO (f::'q_16636::type => 'q_16633::type)
   1.360 + (g::'q_16633::type => 'q_16636::type) -->
   1.361 +(ALL P::'q_16636::type => bool. All P = (ALL x::'q_16633::type. P (g x))) &
   1.362 +(ALL P::'q_16636::type => bool. Ex P = (EX x::'q_16633::type. P (g x))) &
   1.363 +(ALL (a::'q_16636::type) b::'q_16633::type. (a = g b) = (f a = b))"
   1.364    by (import hollight ISO_USAGE)
   1.365  
   1.366  typedef (open) N_2 = "{a::bool recspace.
   1.367 @@ -2337,53 +2209,53 @@
   1.368     OF type_definition_N_2]
   1.369  
   1.370  consts
   1.371 -  "_10288" :: "N_2" ("'_10288")
   1.372 +  "_10302" :: "N_2" ("'_10302")
   1.373  
   1.374  defs
   1.375 -  "_10288_def": "(op ==::N_2 => N_2 => prop) (_10288::N_2)
   1.376 +  "_10302_def": "(op ==::N_2 => N_2 => prop) (_10302::N_2)
   1.377   ((_mk_2::bool recspace => N_2)
   1.378     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.379       (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.380       (%n::nat. BOTTOM::bool recspace)))"
   1.381  
   1.382 -lemma DEF__10288: "(op =::N_2 => N_2 => bool) (_10288::N_2)
   1.383 +lemma DEF__10302: "(op =::N_2 => N_2 => bool) (_10302::N_2)
   1.384   ((_mk_2::bool recspace => N_2)
   1.385     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.386       (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.387       (%n::nat. BOTTOM::bool recspace)))"
   1.388 -  by (import hollight DEF__10288)
   1.389 +  by (import hollight DEF__10302)
   1.390  
   1.391  consts
   1.392 -  "_10289" :: "N_2" ("'_10289")
   1.393 +  "_10303" :: "N_2" ("'_10303")
   1.394  
   1.395  defs
   1.396 -  "_10289_def": "(op ==::N_2 => N_2 => prop) (_10289::N_2)
   1.397 +  "_10303_def": "(op ==::N_2 => N_2 => prop) (_10303::N_2)
   1.398   ((_mk_2::bool recspace => N_2)
   1.399     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.400       ((Suc::nat => nat) (0::nat))
   1.401       ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.402       (%n::nat. BOTTOM::bool recspace)))"
   1.403  
   1.404 -lemma DEF__10289: "(op =::N_2 => N_2 => bool) (_10289::N_2)
   1.405 +lemma DEF__10303: "(op =::N_2 => N_2 => bool) (_10303::N_2)
   1.406   ((_mk_2::bool recspace => N_2)
   1.407     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.408       ((Suc::nat => nat) (0::nat))
   1.409       ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.410       (%n::nat. BOTTOM::bool recspace)))"
   1.411 -  by (import hollight DEF__10289)
   1.412 +  by (import hollight DEF__10303)
   1.413  
   1.414  constdefs
   1.415    two_1 :: "N_2" 
   1.416 -  "two_1 == _10288"
   1.417 -
   1.418 -lemma DEF_two_1: "two_1 = _10288"
   1.419 +  "two_1 == _10302"
   1.420 +
   1.421 +lemma DEF_two_1: "two_1 = _10302"
   1.422    by (import hollight DEF_two_1)
   1.423  
   1.424  constdefs
   1.425    two_2 :: "N_2" 
   1.426 -  "two_2 == _10289"
   1.427 -
   1.428 -lemma DEF_two_2: "two_2 = _10289"
   1.429 +  "two_2 == _10303"
   1.430 +
   1.431 +lemma DEF_two_2: "two_2 = _10303"
   1.432    by (import hollight DEF_two_2)
   1.433  
   1.434  typedef (open) N_3 = "{a::bool recspace.
   1.435 @@ -2411,79 +2283,79 @@
   1.436     OF type_definition_N_3]
   1.437  
   1.438  consts
   1.439 -  "_10312" :: "N_3" ("'_10312")
   1.440 +  "_10326" :: "N_3" ("'_10326")
   1.441  
   1.442  defs
   1.443 -  "_10312_def": "(op ==::N_3 => N_3 => prop) (_10312::N_3)
   1.444 +  "_10326_def": "(op ==::N_3 => N_3 => prop) (_10326::N_3)
   1.445   ((_mk_3::bool recspace => N_3)
   1.446     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.447       (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.448       (%n::nat. BOTTOM::bool recspace)))"
   1.449  
   1.450 -lemma DEF__10312: "(op =::N_3 => N_3 => bool) (_10312::N_3)
   1.451 +lemma DEF__10326: "(op =::N_3 => N_3 => bool) (_10326::N_3)
   1.452   ((_mk_3::bool recspace => N_3)
   1.453     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.454       (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.455       (%n::nat. BOTTOM::bool recspace)))"
   1.456 -  by (import hollight DEF__10312)
   1.457 +  by (import hollight DEF__10326)
   1.458  
   1.459  consts
   1.460 -  "_10313" :: "N_3" ("'_10313")
   1.461 +  "_10327" :: "N_3" ("'_10327")
   1.462  
   1.463  defs
   1.464 -  "_10313_def": "(op ==::N_3 => N_3 => prop) (_10313::N_3)
   1.465 +  "_10327_def": "(op ==::N_3 => N_3 => prop) (_10327::N_3)
   1.466   ((_mk_3::bool recspace => N_3)
   1.467     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.468       ((Suc::nat => nat) (0::nat))
   1.469       ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.470       (%n::nat. BOTTOM::bool recspace)))"
   1.471  
   1.472 -lemma DEF__10313: "(op =::N_3 => N_3 => bool) (_10313::N_3)
   1.473 +lemma DEF__10327: "(op =::N_3 => N_3 => bool) (_10327::N_3)
   1.474   ((_mk_3::bool recspace => N_3)
   1.475     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.476       ((Suc::nat => nat) (0::nat))
   1.477       ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.478       (%n::nat. BOTTOM::bool recspace)))"
   1.479 -  by (import hollight DEF__10313)
   1.480 +  by (import hollight DEF__10327)
   1.481  
   1.482  consts
   1.483 -  "_10314" :: "N_3" ("'_10314")
   1.484 +  "_10328" :: "N_3" ("'_10328")
   1.485  
   1.486  defs
   1.487 -  "_10314_def": "(op ==::N_3 => N_3 => prop) (_10314::N_3)
   1.488 +  "_10328_def": "(op ==::N_3 => N_3 => prop) (_10328::N_3)
   1.489   ((_mk_3::bool recspace => N_3)
   1.490     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.491       ((Suc::nat => nat) ((Suc::nat => nat) (0::nat)))
   1.492       ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.493       (%n::nat. BOTTOM::bool recspace)))"
   1.494  
   1.495 -lemma DEF__10314: "(op =::N_3 => N_3 => bool) (_10314::N_3)
   1.496 +lemma DEF__10328: "(op =::N_3 => N_3 => bool) (_10328::N_3)
   1.497   ((_mk_3::bool recspace => N_3)
   1.498     ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace)
   1.499       ((Suc::nat => nat) ((Suc::nat => nat) (0::nat)))
   1.500       ((Eps::(bool => bool) => bool) (%x::bool. True::bool))
   1.501       (%n::nat. BOTTOM::bool recspace)))"
   1.502 -  by (import hollight DEF__10314)
   1.503 +  by (import hollight DEF__10328)
   1.504  
   1.505  constdefs
   1.506    three_1 :: "N_3" 
   1.507 -  "three_1 == _10312"
   1.508 -
   1.509 -lemma DEF_three_1: "three_1 = _10312"
   1.510 +  "three_1 == _10326"
   1.511 +
   1.512 +lemma DEF_three_1: "three_1 = _10326"
   1.513    by (import hollight DEF_three_1)
   1.514  
   1.515  constdefs
   1.516    three_2 :: "N_3" 
   1.517 -  "three_2 == _10313"
   1.518 -
   1.519 -lemma DEF_three_2: "three_2 = _10313"
   1.520 +  "three_2 == _10327"
   1.521 +
   1.522 +lemma DEF_three_2: "three_2 = _10327"
   1.523    by (import hollight DEF_three_2)
   1.524  
   1.525  constdefs
   1.526    three_3 :: "N_3" 
   1.527 -  "three_3 == _10314"
   1.528 -
   1.529 -lemma DEF_three_3: "three_3 = _10314"
   1.530 +  "three_3 == _10328"
   1.531 +
   1.532 +lemma DEF_three_3: "three_3 = _10328"
   1.533    by (import hollight DEF_three_3)
   1.534  
   1.535  lemma list_INDUCT: "ALL P::'A::type hollight.list => bool.
   1.536 @@ -2594,338 +2466,338 @@
   1.537    by (import hollight DEF_LAST)
   1.538  
   1.539  constdefs
   1.540 -  REPLICATE :: "nat => 'q_16809 => 'q_16809 hollight.list" 
   1.541 +  REPLICATE :: "nat => 'q_16860 => 'q_16860 hollight.list" 
   1.542    "REPLICATE ==
   1.543 -SOME REPLICATE::nat => 'q_16809::type => 'q_16809::type hollight.list.
   1.544 -   (ALL x::'q_16809::type. REPLICATE 0 x = NIL) &
   1.545 -   (ALL (n::nat) x::'q_16809::type.
   1.546 +SOME REPLICATE::nat => 'q_16860::type => 'q_16860::type hollight.list.
   1.547 +   (ALL x::'q_16860::type. REPLICATE 0 x = NIL) &
   1.548 +   (ALL (n::nat) x::'q_16860::type.
   1.549         REPLICATE (Suc n) x = CONS x (REPLICATE n x))"
   1.550  
   1.551  lemma DEF_REPLICATE: "REPLICATE =
   1.552 -(SOME REPLICATE::nat => 'q_16809::type => 'q_16809::type hollight.list.
   1.553 -    (ALL x::'q_16809::type. REPLICATE 0 x = NIL) &
   1.554 -    (ALL (n::nat) x::'q_16809::type.
   1.555 +(SOME REPLICATE::nat => 'q_16860::type => 'q_16860::type hollight.list.
   1.556 +    (ALL x::'q_16860::type. REPLICATE 0 x = NIL) &
   1.557 +    (ALL (n::nat) x::'q_16860::type.
   1.558          REPLICATE (Suc n) x = CONS x (REPLICATE n x)))"
   1.559    by (import hollight DEF_REPLICATE)
   1.560  
   1.561  constdefs
   1.562 -  NULL :: "'q_16824 hollight.list => bool" 
   1.563 +  NULL :: "'q_16875 hollight.list => bool" 
   1.564    "NULL ==
   1.565 -SOME NULL::'q_16824::type hollight.list => bool.
   1.566 +SOME NULL::'q_16875::type hollight.list => bool.
   1.567     NULL NIL = True &
   1.568 -   (ALL (h::'q_16824::type) t::'q_16824::type hollight.list.
   1.569 +   (ALL (h::'q_16875::type) t::'q_16875::type hollight.list.
   1.570         NULL (CONS h t) = False)"
   1.571  
   1.572  lemma DEF_NULL: "NULL =
   1.573 -(SOME NULL::'q_16824::type hollight.list => bool.
   1.574 +(SOME NULL::'q_16875::type hollight.list => bool.
   1.575      NULL NIL = True &
   1.576 -    (ALL (h::'q_16824::type) t::'q_16824::type hollight.list.
   1.577 +    (ALL (h::'q_16875::type) t::'q_16875::type hollight.list.
   1.578          NULL (CONS h t) = False))"
   1.579    by (import hollight DEF_NULL)
   1.580  
   1.581  constdefs
   1.582 -  ALL_list :: "('q_16844 => bool) => 'q_16844 hollight.list => bool" 
   1.583 +  ALL_list :: "('q_16895 => bool) => 'q_16895 hollight.list => bool" 
   1.584    "ALL_list ==
   1.585 -SOME u::('q_16844::type => bool) => 'q_16844::type hollight.list => bool.
   1.586 -   (ALL P::'q_16844::type => bool. u P NIL = True) &
   1.587 -   (ALL (h::'q_16844::type) (P::'q_16844::type => bool)
   1.588 -       t::'q_16844::type hollight.list. u P (CONS h t) = (P h & u P t))"
   1.589 +SOME u::('q_16895::type => bool) => 'q_16895::type hollight.list => bool.
   1.590 +   (ALL P::'q_16895::type => bool. u P NIL = True) &
   1.591 +   (ALL (h::'q_16895::type) (P::'q_16895::type => bool)
   1.592 +       t::'q_16895::type hollight.list. u P (CONS h t) = (P h & u P t))"
   1.593  
   1.594  lemma DEF_ALL: "ALL_list =
   1.595 -(SOME u::('q_16844::type => bool) => 'q_16844::type hollight.list => bool.
   1.596 -    (ALL P::'q_16844::type => bool. u P NIL = True) &
   1.597 -    (ALL (h::'q_16844::type) (P::'q_16844::type => bool)
   1.598 -        t::'q_16844::type hollight.list. u P (CONS h t) = (P h & u P t)))"
   1.599 +(SOME u::('q_16895::type => bool) => 'q_16895::type hollight.list => bool.
   1.600 +    (ALL P::'q_16895::type => bool. u P NIL = True) &
   1.601 +    (ALL (h::'q_16895::type) (P::'q_16895::type => bool)
   1.602 +        t::'q_16895::type hollight.list. u P (CONS h t) = (P h & u P t)))"
   1.603    by (import hollight DEF_ALL)
   1.604  
   1.605  consts
   1.606 -  EX :: "('q_16865 => bool) => 'q_16865 hollight.list => bool" ("EX")
   1.607 +  EX :: "('q_16916 => bool) => 'q_16916 hollight.list => bool" ("EX")
   1.608  
   1.609  defs
   1.610    EX_def: "EX ==
   1.611 -SOME u::('q_16865::type => bool) => 'q_16865::type hollight.list => bool.
   1.612 -   (ALL P::'q_16865::type => bool. u P NIL = False) &
   1.613 -   (ALL (h::'q_16865::type) (P::'q_16865::type => bool)
   1.614 -       t::'q_16865::type hollight.list. u P (CONS h t) = (P h | u P t))"
   1.615 +SOME u::('q_16916::type => bool) => 'q_16916::type hollight.list => bool.
   1.616 +   (ALL P::'q_16916::type => bool. u P NIL = False) &
   1.617 +   (ALL (h::'q_16916::type) (P::'q_16916::type => bool)
   1.618 +       t::'q_16916::type hollight.list. u P (CONS h t) = (P h | u P t))"
   1.619  
   1.620  lemma DEF_EX: "EX =
   1.621 -(SOME u::('q_16865::type => bool) => 'q_16865::type hollight.list => bool.
   1.622 -    (ALL P::'q_16865::type => bool. u P NIL = False) &
   1.623 -    (ALL (h::'q_16865::type) (P::'q_16865::type => bool)
   1.624 -        t::'q_16865::type hollight.list. u P (CONS h t) = (P h | u P t)))"
   1.625 +(SOME u::('q_16916::type => bool) => 'q_16916::type hollight.list => bool.
   1.626 +    (ALL P::'q_16916::type => bool. u P NIL = False) &
   1.627 +    (ALL (h::'q_16916::type) (P::'q_16916::type => bool)
   1.628 +        t::'q_16916::type hollight.list. u P (CONS h t) = (P h | u P t)))"
   1.629    by (import hollight DEF_EX)
   1.630  
   1.631  constdefs
   1.632 -  ITLIST :: "('q_16888 => 'q_16887 => 'q_16887)
   1.633 -=> 'q_16888 hollight.list => 'q_16887 => 'q_16887" 
   1.634 +  ITLIST :: "('q_16939 => 'q_16938 => 'q_16938)
   1.635 +=> 'q_16939 hollight.list => 'q_16938 => 'q_16938" 
   1.636    "ITLIST ==
   1.637 -SOME ITLIST::('q_16888::type => 'q_16887::type => 'q_16887::type)
   1.638 -             => 'q_16888::type hollight.list
   1.639 -                => 'q_16887::type => 'q_16887::type.
   1.640 -   (ALL (f::'q_16888::type => 'q_16887::type => 'q_16887::type)
   1.641 -       b::'q_16887::type. ITLIST f NIL b = b) &
   1.642 -   (ALL (h::'q_16888::type)
   1.643 -       (f::'q_16888::type => 'q_16887::type => 'q_16887::type)
   1.644 -       (t::'q_16888::type hollight.list) b::'q_16887::type.
   1.645 +SOME ITLIST::('q_16939::type => 'q_16938::type => 'q_16938::type)
   1.646 +             => 'q_16939::type hollight.list
   1.647 +                => 'q_16938::type => 'q_16938::type.
   1.648 +   (ALL (f::'q_16939::type => 'q_16938::type => 'q_16938::type)
   1.649 +       b::'q_16938::type. ITLIST f NIL b = b) &
   1.650 +   (ALL (h::'q_16939::type)
   1.651 +       (f::'q_16939::type => 'q_16938::type => 'q_16938::type)
   1.652 +       (t::'q_16939::type hollight.list) b::'q_16938::type.
   1.653         ITLIST f (CONS h t) b = f h (ITLIST f t b))"
   1.654  
   1.655  lemma DEF_ITLIST: "ITLIST =
   1.656 -(SOME ITLIST::('q_16888::type => 'q_16887::type => 'q_16887::type)
   1.657 -              => 'q_16888::type hollight.list
   1.658 -                 => 'q_16887::type => 'q_16887::type.
   1.659 -    (ALL (f::'q_16888::type => 'q_16887::type => 'q_16887::type)
   1.660 -        b::'q_16887::type. ITLIST f NIL b = b) &
   1.661 -    (ALL (h::'q_16888::type)
   1.662 -        (f::'q_16888::type => 'q_16887::type => 'q_16887::type)
   1.663 -        (t::'q_16888::type hollight.list) b::'q_16887::type.
   1.664 +(SOME ITLIST::('q_16939::type => 'q_16938::type => 'q_16938::type)
   1.665 +              => 'q_16939::type hollight.list
   1.666 +                 => 'q_16938::type => 'q_16938::type.
   1.667 +    (ALL (f::'q_16939::type => 'q_16938::type => 'q_16938::type)
   1.668 +        b::'q_16938::type. ITLIST f NIL b = b) &
   1.669 +    (ALL (h::'q_16939::type)
   1.670 +        (f::'q_16939::type => 'q_16938::type => 'q_16938::type)
   1.671 +        (t::'q_16939::type hollight.list) b::'q_16938::type.
   1.672          ITLIST f (CONS h t) b = f h (ITLIST f t b)))"
   1.673    by (import hollight DEF_ITLIST)
   1.674  
   1.675  constdefs
   1.676 -  MEM :: "'q_16913 => 'q_16913 hollight.list => bool" 
   1.677 +  MEM :: "'q_16964 => 'q_16964 hollight.list => bool" 
   1.678    "MEM ==
   1.679 -SOME MEM::'q_16913::type => 'q_16913::type hollight.list => bool.
   1.680 -   (ALL x::'q_16913::type. MEM x NIL = False) &
   1.681 -   (ALL (h::'q_16913::type) (x::'q_16913::type)
   1.682 -       t::'q_16913::type hollight.list.
   1.683 +SOME MEM::'q_16964::type => 'q_16964::type hollight.list => bool.
   1.684 +   (ALL x::'q_16964::type. MEM x NIL = False) &
   1.685 +   (ALL (h::'q_16964::type) (x::'q_16964::type)
   1.686 +       t::'q_16964::type hollight.list.
   1.687         MEM x (CONS h t) = (x = h | MEM x t))"
   1.688  
   1.689  lemma DEF_MEM: "MEM =
   1.690 -(SOME MEM::'q_16913::type => 'q_16913::type hollight.list => bool.
   1.691 -    (ALL x::'q_16913::type. MEM x NIL = False) &
   1.692 -    (ALL (h::'q_16913::type) (x::'q_16913::type)
   1.693 -        t::'q_16913::type hollight.list.
   1.694 +(SOME MEM::'q_16964::type => 'q_16964::type hollight.list => bool.
   1.695 +    (ALL x::'q_16964::type. MEM x NIL = False) &
   1.696 +    (ALL (h::'q_16964::type) (x::'q_16964::type)
   1.697 +        t::'q_16964::type hollight.list.
   1.698          MEM x (CONS h t) = (x = h | MEM x t)))"
   1.699    by (import hollight DEF_MEM)
   1.700  
   1.701  constdefs
   1.702 -  ALL2 :: "('q_16946 => 'q_16953 => bool)
   1.703 -=> 'q_16946 hollight.list => 'q_16953 hollight.list => bool" 
   1.704 +  ALL2 :: "('q_16997 => 'q_17004 => bool)
   1.705 +=> 'q_16997 hollight.list => 'q_17004 hollight.list => bool" 
   1.706    "ALL2 ==
   1.707 -SOME ALL2::('q_16946::type => 'q_16953::type => bool)
   1.708 -           => 'q_16946::type hollight.list
   1.709 -              => 'q_16953::type hollight.list => bool.
   1.710 -   (ALL (P::'q_16946::type => 'q_16953::type => bool)
   1.711 -       l2::'q_16953::type hollight.list. ALL2 P NIL l2 = (l2 = NIL)) &
   1.712 -   (ALL (h1::'q_16946::type) (P::'q_16946::type => 'q_16953::type => bool)
   1.713 -       (t1::'q_16946::type hollight.list) l2::'q_16953::type hollight.list.
   1.714 +SOME ALL2::('q_16997::type => 'q_17004::type => bool)
   1.715 +           => 'q_16997::type hollight.list
   1.716 +              => 'q_17004::type hollight.list => bool.
   1.717 +   (ALL (P::'q_16997::type => 'q_17004::type => bool)
   1.718 +       l2::'q_17004::type hollight.list. ALL2 P NIL l2 = (l2 = NIL)) &
   1.719 +   (ALL (h1::'q_16997::type) (P::'q_16997::type => 'q_17004::type => bool)
   1.720 +       (t1::'q_16997::type hollight.list) l2::'q_17004::type hollight.list.
   1.721         ALL2 P (CONS h1 t1) l2 =
   1.722         COND (l2 = NIL) False (P h1 (HD l2) & ALL2 P t1 (TL l2)))"
   1.723  
   1.724  lemma DEF_ALL2: "ALL2 =
   1.725 -(SOME ALL2::('q_16946::type => 'q_16953::type => bool)
   1.726 -            => 'q_16946::type hollight.list
   1.727 -               => 'q_16953::type hollight.list => bool.
   1.728 -    (ALL (P::'q_16946::type => 'q_16953::type => bool)
   1.729 -        l2::'q_16953::type hollight.list. ALL2 P NIL l2 = (l2 = NIL)) &
   1.730 -    (ALL (h1::'q_16946::type) (P::'q_16946::type => 'q_16953::type => bool)
   1.731 -        (t1::'q_16946::type hollight.list) l2::'q_16953::type hollight.list.
   1.732 +(SOME ALL2::('q_16997::type => 'q_17004::type => bool)
   1.733 +            => 'q_16997::type hollight.list
   1.734 +               => 'q_17004::type hollight.list => bool.
   1.735 +    (ALL (P::'q_16997::type => 'q_17004::type => bool)
   1.736 +        l2::'q_17004::type hollight.list. ALL2 P NIL l2 = (l2 = NIL)) &
   1.737 +    (ALL (h1::'q_16997::type) (P::'q_16997::type => 'q_17004::type => bool)
   1.738 +        (t1::'q_16997::type hollight.list) l2::'q_17004::type hollight.list.
   1.739          ALL2 P (CONS h1 t1) l2 =
   1.740          COND (l2 = NIL) False (P h1 (HD l2) & ALL2 P t1 (TL l2))))"
   1.741    by (import hollight DEF_ALL2)
   1.742  
   1.743 -lemma ALL2: "ALL2 (P::'q_17008::type => 'q_17007::type => bool) NIL NIL = True &
   1.744 -ALL2 P (CONS (h1::'q_17008::type) (t1::'q_17008::type hollight.list)) NIL =
   1.745 +lemma ALL2: "ALL2 (P::'q_17059::type => 'q_17058::type => bool) NIL NIL = True &
   1.746 +ALL2 P (CONS (h1::'q_17059::type) (t1::'q_17059::type hollight.list)) NIL =
   1.747  False &
   1.748 -ALL2 P NIL (CONS (h2::'q_17007::type) (t2::'q_17007::type hollight.list)) =
   1.749 +ALL2 P NIL (CONS (h2::'q_17058::type) (t2::'q_17058::type hollight.list)) =
   1.750  False &
   1.751  ALL2 P (CONS h1 t1) (CONS h2 t2) = (P h1 h2 & ALL2 P t1 t2)"
   1.752    by (import hollight ALL2)
   1.753  
   1.754  constdefs
   1.755 -  MAP2 :: "('q_17038 => 'q_17045 => 'q_17035)
   1.756 -=> 'q_17038 hollight.list
   1.757 -   => 'q_17045 hollight.list => 'q_17035 hollight.list" 
   1.758 +  MAP2 :: "('q_17089 => 'q_17096 => 'q_17086)
   1.759 +=> 'q_17089 hollight.list
   1.760 +   => 'q_17096 hollight.list => 'q_17086 hollight.list" 
   1.761    "MAP2 ==
   1.762 -SOME MAP2::('q_17038::type => 'q_17045::type => 'q_17035::type)
   1.763 -           => 'q_17038::type hollight.list
   1.764 -              => 'q_17045::type hollight.list
   1.765 -                 => 'q_17035::type hollight.list.
   1.766 -   (ALL (f::'q_17038::type => 'q_17045::type => 'q_17035::type)
   1.767 -       l::'q_17045::type hollight.list. MAP2 f NIL l = NIL) &
   1.768 -   (ALL (h1::'q_17038::type)
   1.769 -       (f::'q_17038::type => 'q_17045::type => 'q_17035::type)
   1.770 -       (t1::'q_17038::type hollight.list) l::'q_17045::type hollight.list.
   1.771 +SOME MAP2::('q_17089::type => 'q_17096::type => 'q_17086::type)
   1.772 +           => 'q_17089::type hollight.list
   1.773 +              => 'q_17096::type hollight.list
   1.774 +                 => 'q_17086::type hollight.list.
   1.775 +   (ALL (f::'q_17089::type => 'q_17096::type => 'q_17086::type)
   1.776 +       l::'q_17096::type hollight.list. MAP2 f NIL l = NIL) &
   1.777 +   (ALL (h1::'q_17089::type)
   1.778 +       (f::'q_17089::type => 'q_17096::type => 'q_17086::type)
   1.779 +       (t1::'q_17089::type hollight.list) l::'q_17096::type hollight.list.
   1.780         MAP2 f (CONS h1 t1) l = CONS (f h1 (HD l)) (MAP2 f t1 (TL l)))"
   1.781  
   1.782  lemma DEF_MAP2: "MAP2 =
   1.783 -(SOME MAP2::('q_17038::type => 'q_17045::type => 'q_17035::type)
   1.784 -            => 'q_17038::type hollight.list
   1.785 -               => 'q_17045::type hollight.list
   1.786 -                  => 'q_17035::type hollight.list.
   1.787 -    (ALL (f::'q_17038::type => 'q_17045::type => 'q_17035::type)
   1.788 -        l::'q_17045::type hollight.list. MAP2 f NIL l = NIL) &
   1.789 -    (ALL (h1::'q_17038::type)
   1.790 -        (f::'q_17038::type => 'q_17045::type => 'q_17035::type)
   1.791 -        (t1::'q_17038::type hollight.list) l::'q_17045::type hollight.list.
   1.792 +(SOME MAP2::('q_17089::type => 'q_17096::type => 'q_17086::type)
   1.793 +            => 'q_17089::type hollight.list
   1.794 +               => 'q_17096::type hollight.list
   1.795 +                  => 'q_17086::type hollight.list.
   1.796 +    (ALL (f::'q_17089::type => 'q_17096::type => 'q_17086::type)
   1.797 +        l::'q_17096::type hollight.list. MAP2 f NIL l = NIL) &
   1.798 +    (ALL (h1::'q_17089::type)
   1.799 +        (f::'q_17089::type => 'q_17096::type => 'q_17086::type)
   1.800 +        (t1::'q_17089::type hollight.list) l::'q_17096::type hollight.list.
   1.801          MAP2 f (CONS h1 t1) l = CONS (f h1 (HD l)) (MAP2 f t1 (TL l))))"
   1.802    by (import hollight DEF_MAP2)
   1.803  
   1.804 -lemma MAP2: "MAP2 (f::'q_17080::type => 'q_17079::type => 'q_17086::type) NIL NIL = NIL &
   1.805 -MAP2 f (CONS (h1::'q_17080::type) (t1::'q_17080::type hollight.list))
   1.806 - (CONS (h2::'q_17079::type) (t2::'q_17079::type hollight.list)) =
   1.807 +lemma MAP2: "MAP2 (f::'q_17131::type => 'q_17130::type => 'q_17137::type) NIL NIL = NIL &
   1.808 +MAP2 f (CONS (h1::'q_17131::type) (t1::'q_17131::type hollight.list))
   1.809 + (CONS (h2::'q_17130::type) (t2::'q_17130::type hollight.list)) =
   1.810  CONS (f h1 h2) (MAP2 f t1 t2)"
   1.811    by (import hollight MAP2)
   1.812  
   1.813  constdefs
   1.814 -  EL :: "nat => 'q_17106 hollight.list => 'q_17106" 
   1.815 +  EL :: "nat => 'q_17157 hollight.list => 'q_17157" 
   1.816    "EL ==
   1.817 -SOME EL::nat => 'q_17106::type hollight.list => 'q_17106::type.
   1.818 -   (ALL l::'q_17106::type hollight.list. EL 0 l = HD l) &
   1.819 -   (ALL (n::nat) l::'q_17106::type hollight.list.
   1.820 +SOME EL::nat => 'q_17157::type hollight.list => 'q_17157::type.
   1.821 +   (ALL l::'q_17157::type hollight.list. EL 0 l = HD l) &
   1.822 +   (ALL (n::nat) l::'q_17157::type hollight.list.
   1.823         EL (Suc n) l = EL n (TL l))"
   1.824  
   1.825  lemma DEF_EL: "EL =
   1.826 -(SOME EL::nat => 'q_17106::type hollight.list => 'q_17106::type.
   1.827 -    (ALL l::'q_17106::type hollight.list. EL 0 l = HD l) &
   1.828 -    (ALL (n::nat) l::'q_17106::type hollight.list.
   1.829 +(SOME EL::nat => 'q_17157::type hollight.list => 'q_17157::type.
   1.830 +    (ALL l::'q_17157::type hollight.list. EL 0 l = HD l) &
   1.831 +    (ALL (n::nat) l::'q_17157::type hollight.list.
   1.832          EL (Suc n) l = EL n (TL l)))"
   1.833    by (import hollight DEF_EL)
   1.834  
   1.835  constdefs
   1.836 -  FILTER :: "('q_17131 => bool) => 'q_17131 hollight.list => 'q_17131 hollight.list" 
   1.837 +  FILTER :: "('q_17182 => bool) => 'q_17182 hollight.list => 'q_17182 hollight.list" 
   1.838    "FILTER ==
   1.839 -SOME FILTER::('q_17131::type => bool)
   1.840 -             => 'q_17131::type hollight.list
   1.841 -                => 'q_17131::type hollight.list.
   1.842 -   (ALL P::'q_17131::type => bool. FILTER P NIL = NIL) &
   1.843 -   (ALL (h::'q_17131::type) (P::'q_17131::type => bool)
   1.844 -       t::'q_17131::type hollight.list.
   1.845 +SOME FILTER::('q_17182::type => bool)
   1.846 +             => 'q_17182::type hollight.list
   1.847 +                => 'q_17182::type hollight.list.
   1.848 +   (ALL P::'q_17182::type => bool. FILTER P NIL = NIL) &
   1.849 +   (ALL (h::'q_17182::type) (P::'q_17182::type => bool)
   1.850 +       t::'q_17182::type hollight.list.
   1.851         FILTER P (CONS h t) = COND (P h) (CONS h (FILTER P t)) (FILTER P t))"
   1.852  
   1.853  lemma DEF_FILTER: "FILTER =
   1.854 -(SOME FILTER::('q_17131::type => bool)
   1.855 -              => 'q_17131::type hollight.list
   1.856 -                 => 'q_17131::type hollight.list.
   1.857 -    (ALL P::'q_17131::type => bool. FILTER P NIL = NIL) &
   1.858 -    (ALL (h::'q_17131::type) (P::'q_17131::type => bool)
   1.859 -        t::'q_17131::type hollight.list.
   1.860 +(SOME FILTER::('q_17182::type => bool)
   1.861 +              => 'q_17182::type hollight.list
   1.862 +                 => 'q_17182::type hollight.list.
   1.863 +    (ALL P::'q_17182::type => bool. FILTER P NIL = NIL) &
   1.864 +    (ALL (h::'q_17182::type) (P::'q_17182::type => bool)
   1.865 +        t::'q_17182::type hollight.list.
   1.866          FILTER P (CONS h t) =
   1.867          COND (P h) (CONS h (FILTER P t)) (FILTER P t)))"
   1.868    by (import hollight DEF_FILTER)
   1.869  
   1.870  constdefs
   1.871 -  ASSOC :: "'q_17160 => ('q_17160 * 'q_17154) hollight.list => 'q_17154" 
   1.872 +  ASSOC :: "'q_17211 => ('q_17211 * 'q_17205) hollight.list => 'q_17205" 
   1.873    "ASSOC ==
   1.874 -SOME ASSOC::'q_17160::type
   1.875 -            => ('q_17160::type * 'q_17154::type) hollight.list
   1.876 -               => 'q_17154::type.
   1.877 -   ALL (h::'q_17160::type * 'q_17154::type) (a::'q_17160::type)
   1.878 -      t::('q_17160::type * 'q_17154::type) hollight.list.
   1.879 +SOME ASSOC::'q_17211::type
   1.880 +            => ('q_17211::type * 'q_17205::type) hollight.list
   1.881 +               => 'q_17205::type.
   1.882 +   ALL (h::'q_17211::type * 'q_17205::type) (a::'q_17211::type)
   1.883 +      t::('q_17211::type * 'q_17205::type) hollight.list.
   1.884        ASSOC a (CONS h t) = COND (fst h = a) (snd h) (ASSOC a t)"
   1.885  
   1.886  lemma DEF_ASSOC: "ASSOC =
   1.887 -(SOME ASSOC::'q_17160::type
   1.888 -             => ('q_17160::type * 'q_17154::type) hollight.list
   1.889 -                => 'q_17154::type.
   1.890 -    ALL (h::'q_17160::type * 'q_17154::type) (a::'q_17160::type)
   1.891 -       t::('q_17160::type * 'q_17154::type) hollight.list.
   1.892 +(SOME ASSOC::'q_17211::type
   1.893 +             => ('q_17211::type * 'q_17205::type) hollight.list
   1.894 +                => 'q_17205::type.
   1.895 +    ALL (h::'q_17211::type * 'q_17205::type) (a::'q_17211::type)
   1.896 +       t::('q_17211::type * 'q_17205::type) hollight.list.
   1.897         ASSOC a (CONS h t) = COND (fst h = a) (snd h) (ASSOC a t))"
   1.898    by (import hollight DEF_ASSOC)
   1.899  
   1.900  constdefs
   1.901 -  ITLIST2 :: "('q_17184 => 'q_17192 => 'q_17182 => 'q_17182)
   1.902 -=> 'q_17184 hollight.list => 'q_17192 hollight.list => 'q_17182 => 'q_17182" 
   1.903 +  ITLIST2 :: "('q_17235 => 'q_17243 => 'q_17233 => 'q_17233)
   1.904 +=> 'q_17235 hollight.list => 'q_17243 hollight.list => 'q_17233 => 'q_17233" 
   1.905    "ITLIST2 ==
   1.906 -SOME ITLIST2::('q_17184::type
   1.907 -               => 'q_17192::type => 'q_17182::type => 'q_17182::type)
   1.908 -              => 'q_17184::type hollight.list
   1.909 -                 => 'q_17192::type hollight.list
   1.910 -                    => 'q_17182::type => 'q_17182::type.
   1.911 -   (ALL (f::'q_17184::type
   1.912 -            => 'q_17192::type => 'q_17182::type => 'q_17182::type)
   1.913 -       (l2::'q_17192::type hollight.list) b::'q_17182::type.
   1.914 +SOME ITLIST2::('q_17235::type
   1.915 +               => 'q_17243::type => 'q_17233::type => 'q_17233::type)
   1.916 +              => 'q_17235::type hollight.list
   1.917 +                 => 'q_17243::type hollight.list
   1.918 +                    => 'q_17233::type => 'q_17233::type.
   1.919 +   (ALL (f::'q_17235::type
   1.920 +            => 'q_17243::type => 'q_17233::type => 'q_17233::type)
   1.921 +       (l2::'q_17243::type hollight.list) b::'q_17233::type.
   1.922         ITLIST2 f NIL l2 b = b) &
   1.923 -   (ALL (h1::'q_17184::type)
   1.924 -       (f::'q_17184::type
   1.925 -           => 'q_17192::type => 'q_17182::type => 'q_17182::type)
   1.926 -       (t1::'q_17184::type hollight.list) (l2::'q_17192::type hollight.list)
   1.927 -       b::'q_17182::type.
   1.928 +   (ALL (h1::'q_17235::type)
   1.929 +       (f::'q_17235::type
   1.930 +           => 'q_17243::type => 'q_17233::type => 'q_17233::type)
   1.931 +       (t1::'q_17235::type hollight.list) (l2::'q_17243::type hollight.list)
   1.932 +       b::'q_17233::type.
   1.933         ITLIST2 f (CONS h1 t1) l2 b = f h1 (HD l2) (ITLIST2 f t1 (TL l2) b))"
   1.934  
   1.935  lemma DEF_ITLIST2: "ITLIST2 =
   1.936 -(SOME ITLIST2::('q_17184::type
   1.937 -                => 'q_17192::type => 'q_17182::type => 'q_17182::type)
   1.938 -               => 'q_17184::type hollight.list
   1.939 -                  => 'q_17192::type hollight.list
   1.940 -                     => 'q_17182::type => 'q_17182::type.
   1.941 -    (ALL (f::'q_17184::type
   1.942 -             => 'q_17192::type => 'q_17182::type => 'q_17182::type)
   1.943 -        (l2::'q_17192::type hollight.list) b::'q_17182::type.
   1.944 +(SOME ITLIST2::('q_17235::type
   1.945 +                => 'q_17243::type => 'q_17233::type => 'q_17233::type)
   1.946 +               => 'q_17235::type hollight.list
   1.947 +                  => 'q_17243::type hollight.list
   1.948 +                     => 'q_17233::type => 'q_17233::type.
   1.949 +    (ALL (f::'q_17235::type
   1.950 +             => 'q_17243::type => 'q_17233::type => 'q_17233::type)
   1.951 +        (l2::'q_17243::type hollight.list) b::'q_17233::type.
   1.952          ITLIST2 f NIL l2 b = b) &
   1.953 -    (ALL (h1::'q_17184::type)
   1.954 -        (f::'q_17184::type
   1.955 -            => 'q_17192::type => 'q_17182::type => 'q_17182::type)
   1.956 -        (t1::'q_17184::type hollight.list)
   1.957 -        (l2::'q_17192::type hollight.list) b::'q_17182::type.
   1.958 +    (ALL (h1::'q_17235::type)
   1.959 +        (f::'q_17235::type
   1.960 +            => 'q_17243::type => 'q_17233::type => 'q_17233::type)
   1.961 +        (t1::'q_17235::type hollight.list)
   1.962 +        (l2::'q_17243::type hollight.list) b::'q_17233::type.
   1.963          ITLIST2 f (CONS h1 t1) l2 b =
   1.964          f h1 (HD l2) (ITLIST2 f t1 (TL l2) b)))"
   1.965    by (import hollight DEF_ITLIST2)
   1.966  
   1.967  lemma ITLIST2: "ITLIST2
   1.968 - (f::'q_17226::type => 'q_17225::type => 'q_17224::type => 'q_17224::type)
   1.969 - NIL NIL (b::'q_17224::type) =
   1.970 + (f::'q_17277::type => 'q_17276::type => 'q_17275::type => 'q_17275::type)
   1.971 + NIL NIL (b::'q_17275::type) =
   1.972  b &
   1.973 -ITLIST2 f (CONS (h1::'q_17226::type) (t1::'q_17226::type hollight.list))
   1.974 - (CONS (h2::'q_17225::type) (t2::'q_17225::type hollight.list)) b =
   1.975 +ITLIST2 f (CONS (h1::'q_17277::type) (t1::'q_17277::type hollight.list))
   1.976 + (CONS (h2::'q_17276::type) (t2::'q_17276::type hollight.list)) b =
   1.977  f h1 h2 (ITLIST2 f t1 t2 b)"
   1.978    by (import hollight ITLIST2)
   1.979  
   1.980  consts
   1.981 -  ZIP :: "'q_17256 hollight.list
   1.982 -=> 'q_17264 hollight.list => ('q_17256 * 'q_17264) hollight.list" 
   1.983 +  ZIP :: "'q_17307 hollight.list
   1.984 +=> 'q_17315 hollight.list => ('q_17307 * 'q_17315) hollight.list" 
   1.985  
   1.986  defs
   1.987    ZIP_def: "hollight.ZIP ==
   1.988 -SOME ZIP::'q_17256::type hollight.list
   1.989 -          => 'q_17264::type hollight.list
   1.990 -             => ('q_17256::type * 'q_17264::type) hollight.list.
   1.991 -   (ALL l2::'q_17264::type hollight.list. ZIP NIL l2 = NIL) &
   1.992 -   (ALL (h1::'q_17256::type) (t1::'q_17256::type hollight.list)
   1.993 -       l2::'q_17264::type hollight.list.
   1.994 +SOME ZIP::'q_17307::type hollight.list
   1.995 +          => 'q_17315::type hollight.list
   1.996 +             => ('q_17307::type * 'q_17315::type) hollight.list.
   1.997 +   (ALL l2::'q_17315::type hollight.list. ZIP NIL l2 = NIL) &
   1.998 +   (ALL (h1::'q_17307::type) (t1::'q_17307::type hollight.list)
   1.999 +       l2::'q_17315::type hollight.list.
  1.1000         ZIP (CONS h1 t1) l2 = CONS (h1, HD l2) (ZIP t1 (TL l2)))"
  1.1001  
  1.1002  lemma DEF_ZIP: "hollight.ZIP =
  1.1003 -(SOME ZIP::'q_17256::type hollight.list
  1.1004 -           => 'q_17264::type hollight.list
  1.1005 -              => ('q_17256::type * 'q_17264::type) hollight.list.
  1.1006 -    (ALL l2::'q_17264::type hollight.list. ZIP NIL l2 = NIL) &
  1.1007 -    (ALL (h1::'q_17256::type) (t1::'q_17256::type hollight.list)
  1.1008 -        l2::'q_17264::type hollight.list.
  1.1009 +(SOME ZIP::'q_17307::type hollight.list
  1.1010 +           => 'q_17315::type hollight.list
  1.1011 +              => ('q_17307::type * 'q_17315::type) hollight.list.
  1.1012 +    (ALL l2::'q_17315::type hollight.list. ZIP NIL l2 = NIL) &
  1.1013 +    (ALL (h1::'q_17307::type) (t1::'q_17307::type hollight.list)
  1.1014 +        l2::'q_17315::type hollight.list.
  1.1015          ZIP (CONS h1 t1) l2 = CONS (h1, HD l2) (ZIP t1 (TL l2))))"
  1.1016    by (import hollight DEF_ZIP)
  1.1017  
  1.1018  lemma ZIP: "(op &::bool => bool => bool)
  1.1019 - ((op =::('q_17275::type * 'q_17276::type) hollight.list
  1.1020 -         => ('q_17275::type * 'q_17276::type) hollight.list => bool)
  1.1021 -   ((hollight.ZIP::'q_17275::type hollight.list
  1.1022 -                   => 'q_17276::type hollight.list
  1.1023 -                      => ('q_17275::type * 'q_17276::type) hollight.list)
  1.1024 -     (NIL::'q_17275::type hollight.list)
  1.1025 -     (NIL::'q_17276::type hollight.list))
  1.1026 -   (NIL::('q_17275::type * 'q_17276::type) hollight.list))
  1.1027 - ((op =::('q_17300::type * 'q_17301::type) hollight.list
  1.1028 -         => ('q_17300::type * 'q_17301::type) hollight.list => bool)
  1.1029 -   ((hollight.ZIP::'q_17300::type hollight.list
  1.1030 -                   => 'q_17301::type hollight.list
  1.1031 -                      => ('q_17300::type * 'q_17301::type) hollight.list)
  1.1032 -     ((CONS::'q_17300::type
  1.1033 -             => 'q_17300::type hollight.list
  1.1034 -                => 'q_17300::type hollight.list)
  1.1035 -       (h1::'q_17300::type) (t1::'q_17300::type hollight.list))
  1.1036 -     ((CONS::'q_17301::type
  1.1037 -             => 'q_17301::type hollight.list
  1.1038 -                => 'q_17301::type hollight.list)
  1.1039 -       (h2::'q_17301::type) (t2::'q_17301::type hollight.list)))
  1.1040 -   ((CONS::'q_17300::type * 'q_17301::type
  1.1041 -           => ('q_17300::type * 'q_17301::type) hollight.list
  1.1042 -              => ('q_17300::type * 'q_17301::type) hollight.list)
  1.1043 -     ((Pair::'q_17300::type
  1.1044 -             => 'q_17301::type => 'q_17300::type * 'q_17301::type)
  1.1045 + ((op =::('q_17326::type * 'q_17327::type) hollight.list
  1.1046 +         => ('q_17326::type * 'q_17327::type) hollight.list => bool)
  1.1047 +   ((hollight.ZIP::'q_17326::type hollight.list
  1.1048 +                   => 'q_17327::type hollight.list
  1.1049 +                      => ('q_17326::type * 'q_17327::type) hollight.list)
  1.1050 +     (NIL::'q_17326::type hollight.list)
  1.1051 +     (NIL::'q_17327::type hollight.list))
  1.1052 +   (NIL::('q_17326::type * 'q_17327::type) hollight.list))
  1.1053 + ((op =::('q_17351::type * 'q_17352::type) hollight.list
  1.1054 +         => ('q_17351::type * 'q_17352::type) hollight.list => bool)
  1.1055 +   ((hollight.ZIP::'q_17351::type hollight.list
  1.1056 +                   => 'q_17352::type hollight.list
  1.1057 +                      => ('q_17351::type * 'q_17352::type) hollight.list)
  1.1058 +     ((CONS::'q_17351::type
  1.1059 +             => 'q_17351::type hollight.list
  1.1060 +                => 'q_17351::type hollight.list)
  1.1061 +       (h1::'q_17351::type) (t1::'q_17351::type hollight.list))
  1.1062 +     ((CONS::'q_17352::type
  1.1063 +             => 'q_17352::type hollight.list
  1.1064 +                => 'q_17352::type hollight.list)
  1.1065 +       (h2::'q_17352::type) (t2::'q_17352::type hollight.list)))
  1.1066 +   ((CONS::'q_17351::type * 'q_17352::type
  1.1067 +           => ('q_17351::type * 'q_17352::type) hollight.list
  1.1068 +              => ('q_17351::type * 'q_17352::type) hollight.list)
  1.1069 +     ((Pair::'q_17351::type
  1.1070 +             => 'q_17352::type => 'q_17351::type * 'q_17352::type)
  1.1071         h1 h2)
  1.1072 -     ((hollight.ZIP::'q_17300::type hollight.list
  1.1073 -                     => 'q_17301::type hollight.list
  1.1074 -                        => ('q_17300::type * 'q_17301::type) hollight.list)
  1.1075 +     ((hollight.ZIP::'q_17351::type hollight.list
  1.1076 +                     => 'q_17352::type hollight.list
  1.1077 +                        => ('q_17351::type * 'q_17352::type) hollight.list)
  1.1078         t1 t2)))"
  1.1079    by (import hollight ZIP)
  1.1080  
  1.1081 @@ -2975,9 +2847,9 @@
  1.1082  lemma LENGTH_EQ_NIL: "ALL l::'A::type hollight.list. (LENGTH l = 0) = (l = NIL)"
  1.1083    by (import hollight LENGTH_EQ_NIL)
  1.1084  
  1.1085 -lemma LENGTH_EQ_CONS: "ALL (l::'q_17608::type hollight.list) n::nat.
  1.1086 +lemma LENGTH_EQ_CONS: "ALL (l::'q_17659::type hollight.list) n::nat.
  1.1087     (LENGTH l = Suc n) =
  1.1088 -   (EX (h::'q_17608::type) t::'q_17608::type hollight.list.
  1.1089 +   (EX (h::'q_17659::type) t::'q_17659::type hollight.list.
  1.1090         l = CONS h t & LENGTH t = n)"
  1.1091    by (import hollight LENGTH_EQ_CONS)
  1.1092  
  1.1093 @@ -2985,176 +2857,176 @@
  1.1094     l::'A::type hollight.list. MAP (g o f) l = MAP g (MAP f l)"
  1.1095    by (import hollight MAP_o)
  1.1096  
  1.1097 -lemma MAP_EQ: "ALL (f::'q_17672::type => 'q_17683::type)
  1.1098 -   (g::'q_17672::type => 'q_17683::type) l::'q_17672::type hollight.list.
  1.1099 -   ALL_list (%x::'q_17672::type. f x = g x) l --> MAP f l = MAP g l"
  1.1100 +lemma MAP_EQ: "ALL (f::'q_17723::type => 'q_17734::type)
  1.1101 +   (g::'q_17723::type => 'q_17734::type) l::'q_17723::type hollight.list.
  1.1102 +   ALL_list (%x::'q_17723::type. f x = g x) l --> MAP f l = MAP g l"
  1.1103    by (import hollight MAP_EQ)
  1.1104  
  1.1105 -lemma ALL_IMP: "ALL (P::'q_17713::type => bool) (Q::'q_17713::type => bool)
  1.1106 -   l::'q_17713::type hollight.list.
  1.1107 -   (ALL x::'q_17713::type. MEM x l & P x --> Q x) & ALL_list P l -->
  1.1108 +lemma ALL_IMP: "ALL (P::'q_17764::type => bool) (Q::'q_17764::type => bool)
  1.1109 +   l::'q_17764::type hollight.list.
  1.1110 +   (ALL x::'q_17764::type. MEM x l & P x --> Q x) & ALL_list P l -->
  1.1111     ALL_list Q l"
  1.1112    by (import hollight ALL_IMP)
  1.1113  
  1.1114 -lemma NOT_EX: "ALL (P::'q_17741::type => bool) l::'q_17741::type hollight.list.
  1.1115 -   (~ EX P l) = ALL_list (%x::'q_17741::type. ~ P x) l"
  1.1116 +lemma NOT_EX: "ALL (P::'q_17792::type => bool) l::'q_17792::type hollight.list.
  1.1117 +   (~ EX P l) = ALL_list (%x::'q_17792::type. ~ P x) l"
  1.1118    by (import hollight NOT_EX)
  1.1119  
  1.1120 -lemma NOT_ALL: "ALL (P::'q_17763::type => bool) l::'q_17763::type hollight.list.
  1.1121 -   (~ ALL_list P l) = EX (%x::'q_17763::type. ~ P x) l"
  1.1122 +lemma NOT_ALL: "ALL (P::'q_17814::type => bool) l::'q_17814::type hollight.list.
  1.1123 +   (~ ALL_list P l) = EX (%x::'q_17814::type. ~ P x) l"
  1.1124    by (import hollight NOT_ALL)
  1.1125  
  1.1126 -lemma ALL_MAP: "ALL (P::'q_17785::type => bool) (f::'q_17784::type => 'q_17785::type)
  1.1127 -   l::'q_17784::type hollight.list.
  1.1128 +lemma ALL_MAP: "ALL (P::'q_17836::type => bool) (f::'q_17835::type => 'q_17836::type)
  1.1129 +   l::'q_17835::type hollight.list.
  1.1130     ALL_list P (MAP f l) = ALL_list (P o f) l"
  1.1131    by (import hollight ALL_MAP)
  1.1132  
  1.1133 -lemma ALL_T: "All (ALL_list (%x::'q_17803::type. True))"
  1.1134 +lemma ALL_T: "All (ALL_list (%x::'q_17854::type. True))"
  1.1135    by (import hollight ALL_T)
  1.1136  
  1.1137 -lemma MAP_EQ_ALL2: "ALL (l::'q_17828::type hollight.list) m::'q_17828::type hollight.list.
  1.1138 +lemma MAP_EQ_ALL2: "ALL (l::'q_17879::type hollight.list) m::'q_17879::type hollight.list.
  1.1139     ALL2
  1.1140 -    (%(x::'q_17828::type) y::'q_17828::type.
  1.1141 -        (f::'q_17828::type => 'q_17839::type) x = f y)
  1.1142 +    (%(x::'q_17879::type) y::'q_17879::type.
  1.1143 +        (f::'q_17879::type => 'q_17890::type) x = f y)
  1.1144      l m -->
  1.1145     MAP f l = MAP f m"
  1.1146    by (import hollight MAP_EQ_ALL2)
  1.1147  
  1.1148 -lemma ALL2_MAP: "ALL (P::'q_17870::type => 'q_17871::type => bool)
  1.1149 -   (f::'q_17871::type => 'q_17870::type) l::'q_17871::type hollight.list.
  1.1150 -   ALL2 P (MAP f l) l = ALL_list (%a::'q_17871::type. P (f a) a) l"
  1.1151 +lemma ALL2_MAP: "ALL (P::'q_17921::type => 'q_17922::type => bool)
  1.1152 +   (f::'q_17922::type => 'q_17921::type) l::'q_17922::type hollight.list.
  1.1153 +   ALL2 P (MAP f l) l = ALL_list (%a::'q_17922::type. P (f a) a) l"
  1.1154    by (import hollight ALL2_MAP)
  1.1155  
  1.1156 -lemma MAP_EQ_DEGEN: "ALL (l::'q_17888::type hollight.list) f::'q_17888::type => 'q_17888::type.
  1.1157 -   ALL_list (%x::'q_17888::type. f x = x) l --> MAP f l = l"
  1.1158 +lemma MAP_EQ_DEGEN: "ALL (l::'q_17939::type hollight.list) f::'q_17939::type => 'q_17939::type.
  1.1159 +   ALL_list (%x::'q_17939::type. f x = x) l --> MAP f l = l"
  1.1160    by (import hollight MAP_EQ_DEGEN)
  1.1161  
  1.1162 -lemma ALL2_AND_RIGHT: "ALL (l::'q_17931::type hollight.list) (m::'q_17930::type hollight.list)
  1.1163 -   (P::'q_17931::type => bool) Q::'q_17931::type => 'q_17930::type => bool.
  1.1164 -   ALL2 (%(x::'q_17931::type) y::'q_17930::type. P x & Q x y) l m =
  1.1165 +lemma ALL2_AND_RIGHT: "ALL (l::'q_17982::type hollight.list) (m::'q_17981::type hollight.list)
  1.1166 +   (P::'q_17982::type => bool) Q::'q_17982::type => 'q_17981::type => bool.
  1.1167 +   ALL2 (%(x::'q_17982::type) y::'q_17981::type. P x & Q x y) l m =
  1.1168     (ALL_list P l & ALL2 Q l m)"
  1.1169    by (import hollight ALL2_AND_RIGHT)
  1.1170  
  1.1171 -lemma ITLIST_EXTRA: "ALL l::'q_17968::type hollight.list.
  1.1172 -   ITLIST (f::'q_17968::type => 'q_17967::type => 'q_17967::type)
  1.1173 -    (APPEND l (CONS (a::'q_17968::type) NIL)) (b::'q_17967::type) =
  1.1174 +lemma ITLIST_EXTRA: "ALL l::'q_18019::type hollight.list.
  1.1175 +   ITLIST (f::'q_18019::type => 'q_18018::type => 'q_18018::type)
  1.1176 +    (APPEND l (CONS (a::'q_18019::type) NIL)) (b::'q_18018::type) =
  1.1177     ITLIST f l (f a b)"
  1.1178    by (import hollight ITLIST_EXTRA)
  1.1179  
  1.1180 -lemma ALL_MP: "ALL (P::'q_17994::type => bool) (Q::'q_17994::type => bool)
  1.1181 -   l::'q_17994::type hollight.list.
  1.1182 -   ALL_list (%x::'q_17994::type. P x --> Q x) l & ALL_list P l -->
  1.1183 +lemma ALL_MP: "ALL (P::'q_18045::type => bool) (Q::'q_18045::type => bool)
  1.1184 +   l::'q_18045::type hollight.list.
  1.1185 +   ALL_list (%x::'q_18045::type. P x --> Q x) l & ALL_list P l -->
  1.1186     ALL_list Q l"
  1.1187    by (import hollight ALL_MP)
  1.1188  
  1.1189 -lemma AND_ALL: "ALL x::'q_18024::type hollight.list.
  1.1190 -   (ALL_list (P::'q_18024::type => bool) x &
  1.1191 -    ALL_list (Q::'q_18024::type => bool) x) =
  1.1192 -   ALL_list (%x::'q_18024::type. P x & Q x) x"
  1.1193 +lemma AND_ALL: "ALL x::'q_18075::type hollight.list.
  1.1194 +   (ALL_list (P::'q_18075::type => bool) x &
  1.1195 +    ALL_list (Q::'q_18075::type => bool) x) =
  1.1196 +   ALL_list (%x::'q_18075::type. P x & Q x) x"
  1.1197    by (import hollight AND_ALL)
  1.1198  
  1.1199 -lemma EX_IMP: "ALL (P::'q_18054::type => bool) (Q::'q_18054::type => bool)
  1.1200 -   l::'q_18054::type hollight.list.
  1.1201 -   (ALL x::'q_18054::type. MEM x l & P x --> Q x) & EX P l --> EX Q l"
  1.1202 +lemma EX_IMP: "ALL (P::'q_18105::type => bool) (Q::'q_18105::type => bool)
  1.1203 +   l::'q_18105::type hollight.list.
  1.1204 +   (ALL x::'q_18105::type. MEM x l & P x --> Q x) & EX P l --> EX Q l"
  1.1205    by (import hollight EX_IMP)
  1.1206  
  1.1207 -lemma ALL_MEM: "ALL (P::'q_18081::type => bool) l::'q_18081::type hollight.list.
  1.1208 -   (ALL x::'q_18081::type. MEM x l --> P x) = ALL_list P l"
  1.1209 +lemma ALL_MEM: "ALL (P::'q_18132::type => bool) l::'q_18132::type hollight.list.
  1.1210 +   (ALL x::'q_18132::type. MEM x l --> P x) = ALL_list P l"
  1.1211    by (import hollight ALL_MEM)
  1.1212  
  1.1213 -lemma LENGTH_REPLICATE: "ALL (n::nat) x::'q_18099::type. LENGTH (REPLICATE n x) = n"
  1.1214 +lemma LENGTH_REPLICATE: "ALL (n::nat) x::'q_18150::type. LENGTH (REPLICATE n x) = n"
  1.1215    by (import hollight LENGTH_REPLICATE)
  1.1216  
  1.1217 -lemma EX_MAP: "ALL (P::'q_18123::type => bool) (f::'q_18122::type => 'q_18123::type)
  1.1218 -   l::'q_18122::type hollight.list. EX P (MAP f l) = EX (P o f) l"
  1.1219 +lemma EX_MAP: "ALL (P::'q_18174::type => bool) (f::'q_18173::type => 'q_18174::type)
  1.1220 +   l::'q_18173::type hollight.list. EX P (MAP f l) = EX (P o f) l"
  1.1221    by (import hollight EX_MAP)
  1.1222  
  1.1223 -lemma EXISTS_EX: "ALL (P::'q_18161::type => 'q_18160::type => bool)
  1.1224 -   l::'q_18160::type hollight.list.
  1.1225 -   (EX x::'q_18161::type. EX (P x) l) =
  1.1226 -   EX (%s::'q_18160::type. EX x::'q_18161::type. P x s) l"
  1.1227 +lemma EXISTS_EX: "ALL (P::'q_18212::type => 'q_18211::type => bool)
  1.1228 +   l::'q_18211::type hollight.list.
  1.1229 +   (EX x::'q_18212::type. EX (P x) l) =
  1.1230 +   EX (%s::'q_18211::type. EX x::'q_18212::type. P x s) l"
  1.1231    by (import hollight EXISTS_EX)
  1.1232  
  1.1233 -lemma FORALL_ALL: "ALL (P::'q_18191::type => 'q_18190::type => bool)
  1.1234 -   l::'q_18190::type hollight.list.
  1.1235 -   (ALL x::'q_18191::type. ALL_list (P x) l) =
  1.1236 -   ALL_list (%s::'q_18190::type. ALL x::'q_18191::type. P x s) l"
  1.1237 +lemma FORALL_ALL: "ALL (P::'q_18242::type => 'q_18241::type => bool)
  1.1238 +   l::'q_18241::type hollight.list.
  1.1239 +   (ALL x::'q_18242::type. ALL_list (P x) l) =
  1.1240 +   ALL_list (%s::'q_18241::type. ALL x::'q_18242::type. P x s) l"
  1.1241    by (import hollight FORALL_ALL)
  1.1242  
  1.1243 -lemma MEM_APPEND: "ALL (x::'q_18219::type) (l1::'q_18219::type hollight.list)
  1.1244 -   l2::'q_18219::type hollight.list.
  1.1245 +lemma MEM_APPEND: "ALL (x::'q_18270::type) (l1::'q_18270::type hollight.list)
  1.1246 +   l2::'q_18270::type hollight.list.
  1.1247     MEM x (APPEND l1 l2) = (MEM x l1 | MEM x l2)"
  1.1248    by (import hollight MEM_APPEND)
  1.1249  
  1.1250 -lemma MEM_MAP: "ALL (f::'q_18255::type => 'q_18252::type) (y::'q_18252::type)
  1.1251 -   l::'q_18255::type hollight.list.
  1.1252 -   MEM y (MAP f l) = (EX x::'q_18255::type. MEM x l & y = f x)"
  1.1253 +lemma MEM_MAP: "ALL (f::'q_18306::type => 'q_18303::type) (y::'q_18303::type)
  1.1254 +   l::'q_18306::type hollight.list.
  1.1255 +   MEM y (MAP f l) = (EX x::'q_18306::type. MEM x l & y = f x)"
  1.1256    by (import hollight MEM_MAP)
  1.1257  
  1.1258 -lemma FILTER_APPEND: "ALL (P::'q_18286::type => bool) (l1::'q_18286::type hollight.list)
  1.1259 -   l2::'q_18286::type hollight.list.
  1.1260 +lemma FILTER_APPEND: "ALL (P::'q_18337::type => bool) (l1::'q_18337::type hollight.list)
  1.1261 +   l2::'q_18337::type hollight.list.
  1.1262     FILTER P (APPEND l1 l2) = APPEND (FILTER P l1) (FILTER P l2)"
  1.1263    by (import hollight FILTER_APPEND)
  1.1264  
  1.1265 -lemma FILTER_MAP: "ALL (P::'q_18313::type => bool) (f::'q_18320::type => 'q_18313::type)
  1.1266 -   l::'q_18320::type hollight.list.
  1.1267 +lemma FILTER_MAP: "ALL (P::'q_18364::type => bool) (f::'q_18371::type => 'q_18364::type)
  1.1268 +   l::'q_18371::type hollight.list.
  1.1269     FILTER P (MAP f l) = MAP f (FILTER (P o f) l)"
  1.1270    by (import hollight FILTER_MAP)
  1.1271  
  1.1272 -lemma MEM_FILTER: "ALL (P::'q_18347::type => bool) (l::'q_18347::type hollight.list)
  1.1273 -   x::'q_18347::type. MEM x (FILTER P l) = (P x & MEM x l)"
  1.1274 +lemma MEM_FILTER: "ALL (P::'q_18398::type => bool) (l::'q_18398::type hollight.list)
  1.1275 +   x::'q_18398::type. MEM x (FILTER P l) = (P x & MEM x l)"
  1.1276    by (import hollight MEM_FILTER)
  1.1277  
  1.1278 -lemma EX_MEM: "ALL (P::'q_18368::type => bool) l::'q_18368::type hollight.list.
  1.1279 -   (EX x::'q_18368::type. P x & MEM x l) = EX P l"
  1.1280 +lemma EX_MEM: "ALL (P::'q_18419::type => bool) l::'q_18419::type hollight.list.
  1.1281 +   (EX x::'q_18419::type. P x & MEM x l) = EX P l"
  1.1282    by (import hollight EX_MEM)
  1.1283  
  1.1284 -lemma MAP_FST_ZIP: "ALL (l1::'q_18388::type hollight.list) l2::'q_18390::type hollight.list.
  1.1285 +lemma MAP_FST_ZIP: "ALL (l1::'q_18439::type hollight.list) l2::'q_18441::type hollight.list.
  1.1286     LENGTH l1 = LENGTH l2 --> MAP fst (hollight.ZIP l1 l2) = l1"
  1.1287    by (import hollight MAP_FST_ZIP)
  1.1288  
  1.1289 -lemma MAP_SND_ZIP: "ALL (l1::'q_18419::type hollight.list) l2::'q_18421::type hollight.list.
  1.1290 +lemma MAP_SND_ZIP: "ALL (l1::'q_18470::type hollight.list) l2::'q_18472::type hollight.list.
  1.1291     LENGTH l1 = LENGTH l2 --> MAP snd (hollight.ZIP l1 l2) = l2"
  1.1292    by (import hollight MAP_SND_ZIP)
  1.1293  
  1.1294 -lemma MEM_ASSOC: "ALL (l::('q_18465::type * 'q_18449::type) hollight.list) x::'q_18465::type.
  1.1295 +lemma MEM_ASSOC: "ALL (l::('q_18516::type * 'q_18500::type) hollight.list) x::'q_18516::type.
  1.1296     MEM (x, ASSOC x l) l = MEM x (MAP fst l)"
  1.1297    by (import hollight MEM_ASSOC)
  1.1298  
  1.1299 -lemma ALL_APPEND: "ALL (P::'q_18486::type => bool) (l1::'q_18486::type hollight.list)
  1.1300 -   l2::'q_18486::type hollight.list.
  1.1301 +lemma ALL_APPEND: "ALL (P::'q_18537::type => bool) (l1::'q_18537::type hollight.list)
  1.1302 +   l2::'q_18537::type hollight.list.
  1.1303     ALL_list P (APPEND l1 l2) = (ALL_list P l1 & ALL_list P l2)"
  1.1304    by (import hollight ALL_APPEND)
  1.1305  
  1.1306 -lemma MEM_EL: "ALL (l::'q_18509::type hollight.list) n::nat.
  1.1307 +lemma MEM_EL: "ALL (l::'q_18560::type hollight.list) n::nat.
  1.1308     < n (LENGTH l) --> MEM (EL n l) l"
  1.1309    by (import hollight MEM_EL)
  1.1310  
  1.1311 -lemma ALL2_MAP2: "ALL (l::'q_18552::type hollight.list) m::'q_18553::type hollight.list.
  1.1312 -   ALL2 (P::'q_18551::type => 'q_18550::type => bool)
  1.1313 -    (MAP (f::'q_18552::type => 'q_18551::type) l)
  1.1314 -    (MAP (g::'q_18553::type => 'q_18550::type) m) =
  1.1315 -   ALL2 (%(x::'q_18552::type) y::'q_18553::type. P (f x) (g y)) l m"
  1.1316 +lemma ALL2_MAP2: "ALL (l::'q_18603::type hollight.list) m::'q_18604::type hollight.list.
  1.1317 +   ALL2 (P::'q_18602::type => 'q_18601::type => bool)
  1.1318 +    (MAP (f::'q_18603::type => 'q_18602::type) l)
  1.1319 +    (MAP (g::'q_18604::type => 'q_18601::type) m) =
  1.1320 +   ALL2 (%(x::'q_18603::type) y::'q_18604::type. P (f x) (g y)) l m"
  1.1321    by (import hollight ALL2_MAP2)
  1.1322  
  1.1323 -lemma AND_ALL2: "ALL (P::'q_18599::type => 'q_18598::type => bool)
  1.1324 -   (Q::'q_18599::type => 'q_18598::type => bool)
  1.1325 -   (x::'q_18599::type hollight.list) xa::'q_18598::type hollight.list.
  1.1326 +lemma AND_ALL2: "ALL (P::'q_18650::type => 'q_18649::type => bool)
  1.1327 +   (Q::'q_18650::type => 'q_18649::type => bool)
  1.1328 +   (x::'q_18650::type hollight.list) xa::'q_18649::type hollight.list.
  1.1329     (ALL2 P x xa & ALL2 Q x xa) =
  1.1330 -   ALL2 (%(x::'q_18599::type) y::'q_18598::type. P x y & Q x y) x xa"
  1.1331 +   ALL2 (%(x::'q_18650::type) y::'q_18649::type. P x y & Q x y) x xa"
  1.1332    by (import hollight AND_ALL2)
  1.1333  
  1.1334 -lemma ALL2_ALL: "ALL (P::'q_18621::type => 'q_18621::type => bool)
  1.1335 -   l::'q_18621::type hollight.list.
  1.1336 -   ALL2 P l l = ALL_list (%x::'q_18621::type. P x x) l"
  1.1337 +lemma ALL2_ALL: "ALL (P::'q_18672::type => 'q_18672::type => bool)
  1.1338 +   l::'q_18672::type hollight.list.
  1.1339 +   ALL2 P l l = ALL_list (%x::'q_18672::type. P x x) l"
  1.1340    by (import hollight ALL2_ALL)
  1.1341  
  1.1342 -lemma APPEND_EQ_NIL: "ALL (x::'q_18650::type hollight.list) xa::'q_18650::type hollight.list.
  1.1343 +lemma APPEND_EQ_NIL: "ALL (x::'q_18701::type hollight.list) xa::'q_18701::type hollight.list.
  1.1344     (APPEND x xa = NIL) = (x = NIL & xa = NIL)"
  1.1345    by (import hollight APPEND_EQ_NIL)
  1.1346  
  1.1347 -lemma LENGTH_MAP2: "ALL (f::'q_18670::type => 'q_18672::type => 'q_18683::type)
  1.1348 -   (l::'q_18670::type hollight.list) m::'q_18672::type hollight.list.
  1.1349 +lemma LENGTH_MAP2: "ALL (f::'q_18721::type => 'q_18723::type => 'q_18734::type)
  1.1350 +   (l::'q_18721::type hollight.list) m::'q_18723::type hollight.list.
  1.1351     LENGTH l = LENGTH m --> LENGTH (MAP2 f l m) = LENGTH m"
  1.1352    by (import hollight LENGTH_MAP2)
  1.1353  
  1.1354 @@ -4260,6 +4132,12 @@
  1.1355     (real_add x z = real_add y z) = (x = y)"
  1.1356    by (import hollight REAL_EQ_ADD_RCANCEL)
  1.1357  
  1.1358 +lemma REAL_MUL_RZERO: "ALL x::hollight.real. real_mul x (real_of_num 0) = real_of_num 0"
  1.1359 +  by (import hollight REAL_MUL_RZERO)
  1.1360 +
  1.1361 +lemma REAL_MUL_LZERO: "ALL x::hollight.real. real_mul (real_of_num 0) x = real_of_num 0"
  1.1362 +  by (import hollight REAL_MUL_LZERO)
  1.1363 +
  1.1364  lemma REAL_NEG_NEG: "ALL x::hollight.real. real_neg (real_neg x) = x"
  1.1365    by (import hollight REAL_NEG_NEG)
  1.1366  
  1.1367 @@ -4271,9 +4149,16 @@
  1.1368     real_mul (real_neg x) y = real_neg (real_mul x y)"
  1.1369    by (import hollight REAL_MUL_LNEG)
  1.1370  
  1.1371 +lemma REAL_NEG_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.1372 +   real_neg (real_add x y) = real_add (real_neg x) (real_neg y)"
  1.1373 +  by (import hollight REAL_NEG_ADD)
  1.1374 +
  1.1375  lemma REAL_ADD_RID: "ALL x::hollight.real. real_add x (real_of_num 0) = x"
  1.1376    by (import hollight REAL_ADD_RID)
  1.1377  
  1.1378 +lemma REAL_NEG_0: "real_neg (real_of_num 0) = real_of_num 0"
  1.1379 +  by (import hollight REAL_NEG_0)
  1.1380 +
  1.1381  lemma REAL_LE_LNEG: "ALL (x::hollight.real) y::hollight.real.
  1.1382     real_le (real_neg x) y = real_le (real_of_num 0) (real_add x y)"
  1.1383    by (import hollight REAL_LE_LNEG)
  1.1384 @@ -4306,6 +4191,13 @@
  1.1385  lemma REAL_LET_TOTAL: "ALL (x::hollight.real) xa::hollight.real. real_le x xa | real_lt xa x"
  1.1386    by (import hollight REAL_LET_TOTAL)
  1.1387  
  1.1388 +lemma REAL_LT_IMP_LE: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> real_le x y"
  1.1389 +  by (import hollight REAL_LT_IMP_LE)
  1.1390 +
  1.1391 +lemma REAL_LTE_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1392 +   real_lt x y & real_le y z --> real_lt x z"
  1.1393 +  by (import hollight REAL_LTE_TRANS)
  1.1394 +
  1.1395  lemma REAL_LET_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1396     real_le x y & real_lt y z --> real_lt x z"
  1.1397    by (import hollight REAL_LET_TRANS)
  1.1398 @@ -4322,18 +4214,65 @@
  1.1399  lemma REAL_LTE_ANTISYM: "ALL (x::hollight.real) y::hollight.real. ~ (real_lt x y & real_le y x)"
  1.1400    by (import hollight REAL_LTE_ANTISYM)
  1.1401  
  1.1402 +lemma REAL_SUB_LE: "ALL (x::hollight.real) xa::hollight.real.
  1.1403 +   real_le (real_of_num 0) (real_sub x xa) = real_le xa x"
  1.1404 +  by (import hollight REAL_SUB_LE)
  1.1405 +
  1.1406 +lemma REAL_NEG_SUB: "ALL (x::hollight.real) xa::hollight.real.
  1.1407 +   real_neg (real_sub x xa) = real_sub xa x"
  1.1408 +  by (import hollight REAL_NEG_SUB)
  1.1409 +
  1.1410 +lemma REAL_LE_LT: "ALL (x::hollight.real) xa::hollight.real.
  1.1411 +   real_le x xa = (real_lt x xa | x = xa)"
  1.1412 +  by (import hollight REAL_LE_LT)
  1.1413 +
  1.1414 +lemma REAL_SUB_LT: "ALL (x::hollight.real) xa::hollight.real.
  1.1415 +   real_lt (real_of_num 0) (real_sub x xa) = real_lt xa x"
  1.1416 +  by (import hollight REAL_SUB_LT)
  1.1417 +
  1.1418 +lemma REAL_NOT_LT: "ALL (x::hollight.real) xa::hollight.real. (~ real_lt x xa) = real_le xa x"
  1.1419 +  by (import hollight REAL_NOT_LT)
  1.1420 +
  1.1421 +lemma REAL_SUB_0: "ALL (x::hollight.real) y::hollight.real.
  1.1422 +   (real_sub x y = real_of_num 0) = (x = y)"
  1.1423 +  by (import hollight REAL_SUB_0)
  1.1424 +
  1.1425 +lemma REAL_LT_LE: "ALL (x::hollight.real) y::hollight.real.
  1.1426 +   real_lt x y = (real_le x y & x ~= y)"
  1.1427 +  by (import hollight REAL_LT_LE)
  1.1428 +
  1.1429  lemma REAL_LT_REFL: "ALL x::hollight.real. ~ real_lt x x"
  1.1430    by (import hollight REAL_LT_REFL)
  1.1431  
  1.1432 +lemma REAL_LTE_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.1433 +   real_lt (real_of_num 0) x & real_le (real_of_num 0) y -->
  1.1434 +   real_lt (real_of_num 0) (real_add x y)"
  1.1435 +  by (import hollight REAL_LTE_ADD)
  1.1436 +
  1.1437  lemma REAL_LET_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.1438     real_le (real_of_num 0) x & real_lt (real_of_num 0) y -->
  1.1439     real_lt (real_of_num 0) (real_add x y)"
  1.1440    by (import hollight REAL_LET_ADD)
  1.1441  
  1.1442 +lemma REAL_LT_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.1443 +   real_lt (real_of_num 0) x & real_lt (real_of_num 0) y -->
  1.1444 +   real_lt (real_of_num 0) (real_add x y)"
  1.1445 +  by (import hollight REAL_LT_ADD)
  1.1446 +
  1.1447  lemma REAL_ENTIRE: "ALL (x::hollight.real) y::hollight.real.
  1.1448     (real_mul x y = real_of_num 0) = (x = real_of_num 0 | y = real_of_num 0)"
  1.1449    by (import hollight REAL_ENTIRE)
  1.1450  
  1.1451 +lemma REAL_LE_NEGTOTAL: "ALL x::hollight.real.
  1.1452 +   real_le (real_of_num 0) x | real_le (real_of_num 0) (real_neg x)"
  1.1453 +  by (import hollight REAL_LE_NEGTOTAL)
  1.1454 +
  1.1455 +lemma REAL_LE_SQUARE: "ALL x::hollight.real. real_le (real_of_num 0) (real_mul x x)"
  1.1456 +  by (import hollight REAL_LE_SQUARE)
  1.1457 +
  1.1458 +lemma REAL_MUL_RID: "ALL x::hollight.real. real_mul x (real_of_num (NUMERAL_BIT1 0)) = x"
  1.1459 +  by (import hollight REAL_MUL_RID)
  1.1460 +
  1.1461  lemma REAL_POW_2: "ALL x::hollight.real.
  1.1462     real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = real_mul x x"
  1.1463    by (import hollight REAL_POW_2)
  1.1464 @@ -4362,6 +4301,9 @@
  1.1465      real_add x (real_mul (real_neg (real_of_num (NUMERAL_BIT1 0))) xa))"
  1.1466    by (import hollight REAL_POLY_NEG_CLAUSES)
  1.1467  
  1.1468 +lemma REAL_POS: "ALL x::nat. real_le (real_of_num 0) (real_of_num x)"
  1.1469 +  by (import hollight REAL_POS)
  1.1470 +
  1.1471  lemma REAL_OF_NUM_LT: "ALL (x::nat) xa::nat. real_lt (real_of_num x) (real_of_num xa) = < x xa"
  1.1472    by (import hollight REAL_OF_NUM_LT)
  1.1473  
  1.1474 @@ -4408,10 +4350,53 @@
  1.1475     (real_add x y = y) = (x = real_of_num 0)"
  1.1476    by (import hollight REAL_EQ_ADD_RCANCEL_0)
  1.1477  
  1.1478 +lemma REAL_LNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.1479 +   (real_add x y = real_of_num 0) = (x = real_neg y)"
  1.1480 +  by (import hollight REAL_LNEG_UNIQ)
  1.1481 +
  1.1482 +lemma REAL_RNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.1483 +   (real_add x y = real_of_num 0) = (y = real_neg x)"
  1.1484 +  by (import hollight REAL_RNEG_UNIQ)
  1.1485 +
  1.1486 +lemma REAL_NEG_LMUL: "ALL (x::hollight.real) y::hollight.real.
  1.1487 +   real_neg (real_mul x y) = real_mul (real_neg x) y"
  1.1488 +  by (import hollight REAL_NEG_LMUL)
  1.1489 +
  1.1490 +lemma REAL_NEG_RMUL: "ALL (x::hollight.real) y::hollight.real.
  1.1491 +   real_neg (real_mul x y) = real_mul x (real_neg y)"
  1.1492 +  by (import hollight REAL_NEG_RMUL)
  1.1493 +
  1.1494 +lemma REAL_NEGNEG: "ALL x::hollight.real. real_neg (real_neg x) = x"
  1.1495 +  by (import hollight REAL_NEGNEG)
  1.1496 +
  1.1497 +lemma REAL_NEG_MUL2: "ALL (x::hollight.real) y::hollight.real.
  1.1498 +   real_mul (real_neg x) (real_neg y) = real_mul x y"
  1.1499 +  by (import hollight REAL_NEG_MUL2)
  1.1500 +
  1.1501 +lemma REAL_LT_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1502 +   real_lt (real_add x y) (real_add x z) = real_lt y z"
  1.1503 +  by (import hollight REAL_LT_LADD)
  1.1504 +
  1.1505 +lemma REAL_LT_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1506 +   real_lt (real_add x z) (real_add y z) = real_lt x y"
  1.1507 +  by (import hollight REAL_LT_RADD)
  1.1508 +
  1.1509 +lemma REAL_LT_ANTISYM: "ALL (x::hollight.real) y::hollight.real. ~ (real_lt x y & real_lt y x)"
  1.1510 +  by (import hollight REAL_LT_ANTISYM)
  1.1511 +
  1.1512 +lemma REAL_LT_GT: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> ~ real_lt y x"
  1.1513 +  by (import hollight REAL_LT_GT)
  1.1514 +
  1.1515  lemma REAL_NOT_EQ: "ALL (x::hollight.real) y::hollight.real.
  1.1516     (x ~= y) = (real_lt x y | real_lt y x)"
  1.1517    by (import hollight REAL_NOT_EQ)
  1.1518  
  1.1519 +lemma REAL_LE_TOTAL: "ALL (x::hollight.real) y::hollight.real. real_le x y | real_le y x"
  1.1520 +  by (import hollight REAL_LE_TOTAL)
  1.1521 +
  1.1522 +lemma REAL_LE_REFL: "ALL x::hollight.real. real_le x x"
  1.1523 +  by (import hollight REAL_LE_REFL)
  1.1524 +
  1.1525  lemma REAL_LE_ANTISYM: "ALL (x::hollight.real) y::hollight.real.
  1.1526     (real_le x y & real_le y x) = (x = y)"
  1.1527    by (import hollight REAL_LE_ANTISYM)
  1.1528 @@ -4419,12 +4404,49 @@
  1.1529  lemma REAL_LET_ANTISYM: "ALL (x::hollight.real) y::hollight.real. ~ (real_le x y & real_lt y x)"
  1.1530    by (import hollight REAL_LET_ANTISYM)
  1.1531  
  1.1532 +lemma REAL_NEG_LT0: "ALL x::hollight.real.
  1.1533 +   real_lt (real_neg x) (real_of_num 0) = real_lt (real_of_num 0) x"
  1.1534 +  by (import hollight REAL_NEG_LT0)
  1.1535 +
  1.1536 +lemma REAL_NEG_GT0: "ALL x::hollight.real.
  1.1537 +   real_lt (real_of_num 0) (real_neg x) = real_lt x (real_of_num 0)"
  1.1538 +  by (import hollight REAL_NEG_GT0)
  1.1539 +
  1.1540 +lemma REAL_NEG_LE0: "ALL x::hollight.real.
  1.1541 +   real_le (real_neg x) (real_of_num 0) = real_le (real_of_num 0) x"
  1.1542 +  by (import hollight REAL_NEG_LE0)
  1.1543 +
  1.1544 +lemma REAL_NEG_GE0: "ALL x::hollight.real.
  1.1545 +   real_le (real_of_num 0) (real_neg x) = real_le x (real_of_num 0)"
  1.1546 +  by (import hollight REAL_NEG_GE0)
  1.1547 +
  1.1548  lemma REAL_LT_TOTAL: "ALL (x::hollight.real) y::hollight.real. x = y | real_lt x y | real_lt y x"
  1.1549    by (import hollight REAL_LT_TOTAL)
  1.1550  
  1.1551 +lemma REAL_LT_NEGTOTAL: "ALL x::hollight.real.
  1.1552 +   x = real_of_num 0 |
  1.1553 +   real_lt (real_of_num 0) x | real_lt (real_of_num 0) (real_neg x)"
  1.1554 +  by (import hollight REAL_LT_NEGTOTAL)
  1.1555 +
  1.1556  lemma REAL_LE_01: "real_le (real_of_num 0) (real_of_num (NUMERAL_BIT1 0))"
  1.1557    by (import hollight REAL_LE_01)
  1.1558  
  1.1559 +lemma REAL_LT_01: "real_lt (real_of_num 0) (real_of_num (NUMERAL_BIT1 0))"
  1.1560 +  by (import hollight REAL_LT_01)
  1.1561 +
  1.1562 +lemma REAL_LE_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1563 +   real_le (real_add x y) (real_add x z) = real_le y z"
  1.1564 +  by (import hollight REAL_LE_LADD)
  1.1565 +
  1.1566 +lemma REAL_LE_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1567 +   real_le (real_add x z) (real_add y z) = real_le x y"
  1.1568 +  by (import hollight REAL_LE_RADD)
  1.1569 +
  1.1570 +lemma REAL_LT_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.1571 +   z::hollight.real.
  1.1572 +   real_lt w x & real_lt y z --> real_lt (real_add w y) (real_add x z)"
  1.1573 +  by (import hollight REAL_LT_ADD2)
  1.1574 +
  1.1575  lemma REAL_LE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.1576     z::hollight.real.
  1.1577     real_le w x & real_le y z --> real_le (real_add w y) (real_add x z)"
  1.1578 @@ -4438,12 +4460,53 @@
  1.1579     real_lt x (real_neg xa) = real_lt (real_add x xa) (real_of_num 0)"
  1.1580    by (import hollight REAL_LT_RNEG)
  1.1581  
  1.1582 +lemma REAL_LT_ADDNEG: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1583 +   real_lt y (real_add x (real_neg z)) = real_lt (real_add y z) x"
  1.1584 +  by (import hollight REAL_LT_ADDNEG)
  1.1585 +
  1.1586 +lemma REAL_LT_ADDNEG2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1587 +   real_lt (real_add x (real_neg y)) z = real_lt x (real_add z y)"
  1.1588 +  by (import hollight REAL_LT_ADDNEG2)
  1.1589 +
  1.1590 +lemma REAL_LT_ADD1: "ALL (x::hollight.real) y::hollight.real.
  1.1591 +   real_le x y --> real_lt x (real_add y (real_of_num (NUMERAL_BIT1 0)))"
  1.1592 +  by (import hollight REAL_LT_ADD1)
  1.1593 +
  1.1594 +lemma REAL_SUB_ADD: "ALL (x::hollight.real) y::hollight.real. real_add (real_sub x y) y = x"
  1.1595 +  by (import hollight REAL_SUB_ADD)
  1.1596 +
  1.1597 +lemma REAL_SUB_ADD2: "ALL (x::hollight.real) y::hollight.real. real_add y (real_sub x y) = x"
  1.1598 +  by (import hollight REAL_SUB_ADD2)
  1.1599 +
  1.1600 +lemma REAL_SUB_REFL: "ALL x::hollight.real. real_sub x x = real_of_num 0"
  1.1601 +  by (import hollight REAL_SUB_REFL)
  1.1602 +
  1.1603 +lemma REAL_LE_DOUBLE: "ALL x::hollight.real.
  1.1604 +   real_le (real_of_num 0) (real_add x x) = real_le (real_of_num 0) x"
  1.1605 +  by (import hollight REAL_LE_DOUBLE)
  1.1606 +
  1.1607 +lemma REAL_LE_NEGL: "ALL x::hollight.real. real_le (real_neg x) x = real_le (real_of_num 0) x"
  1.1608 +  by (import hollight REAL_LE_NEGL)
  1.1609 +
  1.1610 +lemma REAL_LE_NEGR: "ALL x::hollight.real. real_le x (real_neg x) = real_le x (real_of_num 0)"
  1.1611 +  by (import hollight REAL_LE_NEGR)
  1.1612 +
  1.1613  lemma REAL_NEG_EQ_0: "ALL x::hollight.real. (real_neg x = real_of_num 0) = (x = real_of_num 0)"
  1.1614    by (import hollight REAL_NEG_EQ_0)
  1.1615  
  1.1616  lemma REAL_ADD_SUB: "ALL (x::hollight.real) y::hollight.real. real_sub (real_add x y) x = y"
  1.1617    by (import hollight REAL_ADD_SUB)
  1.1618  
  1.1619 +lemma REAL_NEG_EQ: "ALL (x::hollight.real) y::hollight.real. (real_neg x = y) = (x = real_neg y)"
  1.1620 +  by (import hollight REAL_NEG_EQ)
  1.1621 +
  1.1622 +lemma REAL_NEG_MINUS1: "ALL x::hollight.real.
  1.1623 +   real_neg x = real_mul (real_neg (real_of_num (NUMERAL_BIT1 0))) x"
  1.1624 +  by (import hollight REAL_NEG_MINUS1)
  1.1625 +
  1.1626 +lemma REAL_LT_IMP_NE: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> x ~= y"
  1.1627 +  by (import hollight REAL_LT_IMP_NE)
  1.1628 +
  1.1629  lemma REAL_LE_ADDR: "ALL (x::hollight.real) y::hollight.real.
  1.1630     real_le x (real_add x y) = real_le (real_of_num 0) y"
  1.1631    by (import hollight REAL_LE_ADDR)
  1.1632 @@ -4460,17 +4523,76 @@
  1.1633     real_lt y (real_add x y) = real_lt (real_of_num 0) x"
  1.1634    by (import hollight REAL_LT_ADDL)
  1.1635  
  1.1636 +lemma REAL_SUB_SUB: "ALL (x::hollight.real) y::hollight.real.
  1.1637 +   real_sub (real_sub x y) x = real_neg y"
  1.1638 +  by (import hollight REAL_SUB_SUB)
  1.1639 +
  1.1640 +lemma REAL_LT_ADD_SUB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1641 +   real_lt (real_add x y) z = real_lt x (real_sub z y)"
  1.1642 +  by (import hollight REAL_LT_ADD_SUB)
  1.1643 +
  1.1644 +lemma REAL_LT_SUB_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1645 +   real_lt (real_sub x y) z = real_lt x (real_add z y)"
  1.1646 +  by (import hollight REAL_LT_SUB_RADD)
  1.1647 +
  1.1648 +lemma REAL_LT_SUB_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1649 +   real_lt x (real_sub y z) = real_lt (real_add x z) y"
  1.1650 +  by (import hollight REAL_LT_SUB_LADD)
  1.1651 +
  1.1652 +lemma REAL_LE_SUB_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1653 +   real_le x (real_sub y z) = real_le (real_add x z) y"
  1.1654 +  by (import hollight REAL_LE_SUB_LADD)
  1.1655 +
  1.1656 +lemma REAL_LE_SUB_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1657 +   real_le (real_sub x y) z = real_le x (real_add z y)"
  1.1658 +  by (import hollight REAL_LE_SUB_RADD)
  1.1659 +
  1.1660 +lemma REAL_LT_NEG: "ALL (x::hollight.real) y::hollight.real.
  1.1661 +   real_lt (real_neg x) (real_neg y) = real_lt y x"
  1.1662 +  by (import hollight REAL_LT_NEG)
  1.1663 +
  1.1664 +lemma REAL_LE_NEG: "ALL (x::hollight.real) y::hollight.real.
  1.1665 +   real_le (real_neg x) (real_neg y) = real_le y x"
  1.1666 +  by (import hollight REAL_LE_NEG)
  1.1667 +
  1.1668  lemma REAL_ADD2_SUB2: "ALL (a::hollight.real) (b::hollight.real) (c::hollight.real)
  1.1669     d::hollight.real.
  1.1670     real_sub (real_add a b) (real_add c d) =
  1.1671     real_add (real_sub a c) (real_sub b d)"
  1.1672    by (import hollight REAL_ADD2_SUB2)
  1.1673  
  1.1674 +lemma REAL_SUB_LZERO: "ALL x::hollight.real. real_sub (real_of_num 0) x = real_neg x"
  1.1675 +  by (import hollight REAL_SUB_LZERO)
  1.1676 +
  1.1677 +lemma REAL_SUB_RZERO: "ALL x::hollight.real. real_sub x (real_of_num 0) = x"
  1.1678 +  by (import hollight REAL_SUB_RZERO)
  1.1679 +
  1.1680  lemma REAL_LET_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.1681     z::hollight.real.
  1.1682     real_le w x & real_lt y z --> real_lt (real_add w y) (real_add x z)"
  1.1683    by (import hollight REAL_LET_ADD2)
  1.1684  
  1.1685 +lemma REAL_LTE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.1686 +   z::hollight.real.
  1.1687 +   real_lt w x & real_le y z --> real_lt (real_add w y) (real_add x z)"
  1.1688 +  by (import hollight REAL_LTE_ADD2)
  1.1689 +
  1.1690 +lemma REAL_SUB_LNEG: "ALL (x::hollight.real) y::hollight.real.
  1.1691 +   real_sub (real_neg x) y = real_neg (real_add x y)"
  1.1692 +  by (import hollight REAL_SUB_LNEG)
  1.1693 +
  1.1694 +lemma REAL_SUB_RNEG: "ALL (x::hollight.real) y::hollight.real.
  1.1695 +   real_sub x (real_neg y) = real_add x y"
  1.1696 +  by (import hollight REAL_SUB_RNEG)
  1.1697 +
  1.1698 +lemma REAL_SUB_NEG2: "ALL (x::hollight.real) y::hollight.real.
  1.1699 +   real_sub (real_neg x) (real_neg y) = real_sub y x"
  1.1700 +  by (import hollight REAL_SUB_NEG2)
  1.1701 +
  1.1702 +lemma REAL_SUB_TRIANGLE: "ALL (a::hollight.real) (b::hollight.real) c::hollight.real.
  1.1703 +   real_add (real_sub a b) (real_sub b c) = real_sub a c"
  1.1704 +  by (import hollight REAL_SUB_TRIANGLE)
  1.1705 +
  1.1706  lemma REAL_EQ_SUB_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1707     (x = real_sub y z) = (real_add x z = y)"
  1.1708    by (import hollight REAL_EQ_SUB_LADD)
  1.1709 @@ -4479,6 +4601,9 @@
  1.1710     (real_sub x y = z) = (x = real_add z y)"
  1.1711    by (import hollight REAL_EQ_SUB_RADD)
  1.1712  
  1.1713 +lemma REAL_SUB_SUB2: "ALL (x::hollight.real) y::hollight.real. real_sub x (real_sub x y) = y"
  1.1714 +  by (import hollight REAL_SUB_SUB2)
  1.1715 +
  1.1716  lemma REAL_ADD_SUB2: "ALL (x::hollight.real) y::hollight.real.
  1.1717     real_sub x (real_add x y) = real_neg y"
  1.1718    by (import hollight REAL_ADD_SUB2)
  1.1719 @@ -4486,6 +4611,9 @@
  1.1720  lemma REAL_EQ_IMP_LE: "ALL (x::hollight.real) y::hollight.real. x = y --> real_le x y"
  1.1721    by (import hollight REAL_EQ_IMP_LE)
  1.1722  
  1.1723 +lemma REAL_POS_NZ: "ALL x::hollight.real. real_lt (real_of_num 0) x --> x ~= real_of_num 0"
  1.1724 +  by (import hollight REAL_POS_NZ)
  1.1725 +
  1.1726  lemma REAL_DIFFSQ: "ALL (x::hollight.real) y::hollight.real.
  1.1727     real_mul (real_add x y) (real_sub x y) =
  1.1728     real_sub (real_mul x x) (real_mul y y)"
  1.1729 @@ -4498,6 +4626,14 @@
  1.1730     real_lt (real_neg x) (real_neg y) = real_lt y x"
  1.1731    by (import hollight REAL_LT_NEG2)
  1.1732  
  1.1733 +lemma REAL_SUB_LDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1734 +   real_mul x (real_sub y z) = real_sub (real_mul x y) (real_mul x z)"
  1.1735 +  by (import hollight REAL_SUB_LDISTRIB)
  1.1736 +
  1.1737 +lemma REAL_SUB_RDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1738 +   real_mul (real_sub x y) z = real_sub (real_mul x z) (real_mul y z)"
  1.1739 +  by (import hollight REAL_SUB_RDISTRIB)
  1.1740 +
  1.1741  lemma REAL_ABS_ZERO: "ALL x::hollight.real. (real_abs x = real_of_num 0) = (x = real_of_num 0)"
  1.1742    by (import hollight REAL_ABS_ZERO)
  1.1743  
  1.1744 @@ -4578,6 +4714,10 @@
  1.1745     real_lt (real_abs (real_add x h)) (real_abs y)"
  1.1746    by (import hollight REAL_ABS_CIRCLE)
  1.1747  
  1.1748 +lemma REAL_SUB_ABS: "ALL (x::hollight.real) y::hollight.real.
  1.1749 +   real_le (real_sub (real_abs x) (real_abs y)) (real_abs (real_sub x y))"
  1.1750 +  by (import hollight REAL_SUB_ABS)
  1.1751 +
  1.1752  lemma REAL_ABS_SUB_ABS: "ALL (x::hollight.real) y::hollight.real.
  1.1753     real_le (real_abs (real_sub (real_abs x) (real_abs y)))
  1.1754      (real_abs (real_sub x y))"
  1.1755 @@ -4752,6 +4892,11 @@
  1.1756     real_le (real_of_num 0) x --> real_le (real_of_num 0) (real_inv x)"
  1.1757    by (import hollight REAL_LE_INV)
  1.1758  
  1.1759 +lemma REAL_MUL_RINV: "ALL x::hollight.real.
  1.1760 +   x ~= real_of_num 0 -->
  1.1761 +   real_mul x (real_inv x) = real_of_num (NUMERAL_BIT1 0)"
  1.1762 +  by (import hollight REAL_MUL_RINV)
  1.1763 +
  1.1764  lemma REAL_INV_1: "real_inv (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)"
  1.1765    by (import hollight REAL_INV_1)
  1.1766  
  1.1767 @@ -4833,11 +4978,26 @@
  1.1768     real_le x xa"
  1.1769    by (import hollight REAL_LE_RCANCEL_IMP)
  1.1770  
  1.1771 +lemma REAL_LE_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1772 +   real_lt (real_of_num 0) z -->
  1.1773 +   real_le (real_mul x z) (real_mul y z) = real_le x y"
  1.1774 +  by (import hollight REAL_LE_RMUL_EQ)
  1.1775 +
  1.1776  lemma REAL_LE_LMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1777     real_lt (real_of_num 0) z -->
  1.1778     real_le (real_mul z x) (real_mul z y) = real_le x y"
  1.1779    by (import hollight REAL_LE_LMUL_EQ)
  1.1780  
  1.1781 +lemma REAL_LT_RMUL_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real.
  1.1782 +   real_lt (real_of_num 0) xb -->
  1.1783 +   real_lt (real_mul x xb) (real_mul xa xb) = real_lt x xa"
  1.1784 +  by (import hollight REAL_LT_RMUL_EQ)
  1.1785 +
  1.1786 +lemma REAL_LT_LMUL_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real.
  1.1787 +   real_lt (real_of_num 0) xb -->
  1.1788 +   real_lt (real_mul xb x) (real_mul xb xa) = real_lt x xa"
  1.1789 +  by (import hollight REAL_LT_LMUL_EQ)
  1.1790 +
  1.1791  lemma REAL_LE_RDIV_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.1792     real_lt (real_of_num 0) z -->
  1.1793     real_le x (real_div y z) = real_le (real_mul x z) y"
  1.1794 @@ -5033,6 +5193,13 @@
  1.1795      (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"
  1.1796    by (import hollight REAL_LE_SQUARE_ABS)
  1.1797  
  1.1798 +lemma REAL_SOS_EQ_0: "ALL (x::hollight.real) y::hollight.real.
  1.1799 +   (real_add (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))
  1.1800 +     (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0))) =
  1.1801 +    real_of_num 0) =
  1.1802 +   (x = real_of_num 0 & y = real_of_num 0)"
  1.1803 +  by (import hollight REAL_SOS_EQ_0)
  1.1804 +
  1.1805  lemma REAL_WLOG_LE: "(ALL (x::hollight.real) y::hollight.real.
  1.1806      (P::hollight.real => hollight.real => bool) x y = P y x) &
  1.1807  (ALL (x::hollight.real) y::hollight.real. real_le x y --> P x y) -->
  1.1808 @@ -5359,26 +5526,26 @@
  1.1809    by (import hollight DEF_GSPEC)
  1.1810  
  1.1811  constdefs
  1.1812 -  SETSPEC :: "'q_36941 => bool => 'q_36941 => bool" 
  1.1813 -  "SETSPEC == %(u::'q_36941::type) (ua::bool) ub::'q_36941::type. ua & u = ub"
  1.1814 -
  1.1815 -lemma DEF_SETSPEC: "SETSPEC = (%(u::'q_36941::type) (ua::bool) ub::'q_36941::type. ua & u = ub)"
  1.1816 +  SETSPEC :: "'q_37056 => bool => 'q_37056 => bool" 
  1.1817 +  "SETSPEC == %(u::'q_37056::type) (ua::bool) ub::'q_37056::type. ua & u = ub"
  1.1818 +
  1.1819 +lemma DEF_SETSPEC: "SETSPEC = (%(u::'q_37056::type) (ua::bool) ub::'q_37056::type. ua & u = ub)"
  1.1820    by (import hollight DEF_SETSPEC)
  1.1821  
  1.1822 -lemma IN_ELIM_THM: "(ALL (P::(bool => 'q_36974::type => bool) => bool) x::'q_36974::type.
  1.1823 -    IN x (GSPEC (%v::'q_36974::type. P (SETSPEC v))) =
  1.1824 -    P (%(p::bool) t::'q_36974::type. p & x = t)) &
  1.1825 -(ALL (p::'q_37005::type => bool) x::'q_37005::type.
  1.1826 +lemma IN_ELIM_THM: "(ALL (P::(bool => 'q_37089::type => bool) => bool) x::'q_37089::type.
  1.1827 +    IN x (GSPEC (%v::'q_37089::type. P (SETSPEC v))) =
  1.1828 +    P (%(p::bool) t::'q_37089::type. p & x = t)) &
  1.1829 +(ALL (p::'q_37120::type => bool) x::'q_37120::type.
  1.1830      IN x
  1.1831 -     (GSPEC (%v::'q_37005::type. EX y::'q_37005::type. SETSPEC v (p y) y)) =
  1.1832 +     (GSPEC (%v::'q_37120::type. EX y::'q_37120::type. SETSPEC v (p y) y)) =
  1.1833      p x) &
  1.1834 -(ALL (P::(bool => 'q_37033::type => bool) => bool) x::'q_37033::type.
  1.1835 -    GSPEC (%v::'q_37033::type. P (SETSPEC v)) x =
  1.1836 -    P (%(p::bool) t::'q_37033::type. p & x = t)) &
  1.1837 -(ALL (p::'q_37062::type => bool) x::'q_37062::type.
  1.1838 -    GSPEC (%v::'q_37062::type. EX y::'q_37062::type. SETSPEC v (p y) y) x =
  1.1839 +(ALL (P::(bool => 'q_37148::type => bool) => bool) x::'q_37148::type.
  1.1840 +    GSPEC (%v::'q_37148::type. P (SETSPEC v)) x =
  1.1841 +    P (%(p::bool) t::'q_37148::type. p & x = t)) &
  1.1842 +(ALL (p::'q_37177::type => bool) x::'q_37177::type.
  1.1843 +    GSPEC (%v::'q_37177::type. EX y::'q_37177::type. SETSPEC v (p y) y) x =
  1.1844      p x) &
  1.1845 -(ALL (p::'q_37079::type => bool) x::'q_37079::type. IN x p = p x)"
  1.1846 +(ALL (p::'q_37194::type => bool) x::'q_37194::type. IN x p = p x)"
  1.1847    by (import hollight IN_ELIM_THM)
  1.1848  
  1.1849  constdefs
  1.1850 @@ -5626,74 +5793,74 @@
  1.1851    by (import hollight DEF_REST)
  1.1852  
  1.1853  constdefs
  1.1854 -  CARD_GE :: "('q_37578 => bool) => ('q_37575 => bool) => bool" 
  1.1855 +  CARD_GE :: "('q_37693 => bool) => ('q_37690 => bool) => bool" 
  1.1856    "CARD_GE ==
  1.1857 -%(u::'q_37578::type => bool) ua::'q_37575::type => bool.
  1.1858 -   EX f::'q_37578::type => 'q_37575::type.
  1.1859 -      ALL y::'q_37575::type.
  1.1860 -         IN y ua --> (EX x::'q_37578::type. IN x u & y = f x)"
  1.1861 +%(u::'q_37693::type => bool) ua::'q_37690::type => bool.
  1.1862 +   EX f::'q_37693::type => 'q_37690::type.
  1.1863 +      ALL y::'q_37690::type.
  1.1864 +         IN y ua --> (EX x::'q_37693::type. IN x u & y = f x)"
  1.1865  
  1.1866  lemma DEF_CARD_GE: "CARD_GE =
  1.1867 -(%(u::'q_37578::type => bool) ua::'q_37575::type => bool.
  1.1868 -    EX f::'q_37578::type => 'q_37575::type.
  1.1869 -       ALL y::'q_37575::type.
  1.1870 -          IN y ua --> (EX x::'q_37578::type. IN x u & y = f x))"
  1.1871 +(%(u::'q_37693::type => bool) ua::'q_37690::type => bool.
  1.1872 +    EX f::'q_37693::type => 'q_37690::type.
  1.1873 +       ALL y::'q_37690::type.
  1.1874 +          IN y ua --> (EX x::'q_37693::type. IN x u & y = f x))"
  1.1875    by (import hollight DEF_CARD_GE)
  1.1876  
  1.1877  constdefs
  1.1878 -  CARD_LE :: "('q_37587 => bool) => ('q_37586 => bool) => bool" 
  1.1879 +  CARD_LE :: "('q_37702 => bool) => ('q_37701 => bool) => bool" 
  1.1880    "CARD_LE ==
  1.1881 -%(u::'q_37587::type => bool) ua::'q_37586::type => bool. CARD_GE ua u"
  1.1882 +%(u::'q_37702::type => bool) ua::'q_37701::type => bool. CARD_GE ua u"
  1.1883  
  1.1884  lemma DEF_CARD_LE: "CARD_LE =
  1.1885 -(%(u::'q_37587::type => bool) ua::'q_37586::type => bool. CARD_GE ua u)"
  1.1886 +(%(u::'q_37702::type => bool) ua::'q_37701::type => bool. CARD_GE ua u)"
  1.1887    by (import hollight DEF_CARD_LE)
  1.1888  
  1.1889  constdefs
  1.1890 -  CARD_EQ :: "('q_37597 => bool) => ('q_37598 => bool) => bool" 
  1.1891 +  CARD_EQ :: "('q_37712 => bool) => ('q_37713 => bool) => bool" 
  1.1892    "CARD_EQ ==
  1.1893 -%(u::'q_37597::type => bool) ua::'q_37598::type => bool.
  1.1894 +%(u::'q_37712::type => bool) ua::'q_37713::type => bool.
  1.1895     CARD_LE u ua & CARD_LE ua u"
  1.1896  
  1.1897  lemma DEF_CARD_EQ: "CARD_EQ =
  1.1898 -(%(u::'q_37597::type => bool) ua::'q_37598::type => bool.
  1.1899 +(%(u::'q_37712::type => bool) ua::'q_37713::type => bool.
  1.1900      CARD_LE u ua & CARD_LE ua u)"
  1.1901    by (import hollight DEF_CARD_EQ)
  1.1902  
  1.1903  constdefs
  1.1904 -  CARD_GT :: "('q_37612 => bool) => ('q_37613 => bool) => bool" 
  1.1905 +  CARD_GT :: "('q_37727 => bool) => ('q_37728 => bool) => bool" 
  1.1906    "CARD_GT ==
  1.1907 -%(u::'q_37612::type => bool) ua::'q_37613::type => bool.
  1.1908 +%(u::'q_37727::type => bool) ua::'q_37728::type => bool.
  1.1909     CARD_GE u ua & ~ CARD_GE ua u"
  1.1910  
  1.1911  lemma DEF_CARD_GT: "CARD_GT =
  1.1912 -(%(u::'q_37612::type => bool) ua::'q_37613::type => bool.
  1.1913 +(%(u::'q_37727::type => bool) ua::'q_37728::type => bool.
  1.1914      CARD_GE u ua & ~ CARD_GE ua u)"
  1.1915    by (import hollight DEF_CARD_GT)
  1.1916  
  1.1917  constdefs
  1.1918 -  CARD_LT :: "('q_37628 => bool) => ('q_37629 => bool) => bool" 
  1.1919 +  CARD_LT :: "('q_37743 => bool) => ('q_37744 => bool) => bool" 
  1.1920    "CARD_LT ==
  1.1921 -%(u::'q_37628::type => bool) ua::'q_37629::type => bool.
  1.1922 +%(u::'q_37743::type => bool) ua::'q_37744::type => bool.
  1.1923     CARD_LE u ua & ~ CARD_LE ua u"
  1.1924  
  1.1925  lemma DEF_CARD_LT: "CARD_LT =
  1.1926 -(%(u::'q_37628::type => bool) ua::'q_37629::type => bool.
  1.1927 +(%(u::'q_37743::type => bool) ua::'q_37744::type => bool.
  1.1928      CARD_LE u ua & ~ CARD_LE ua u)"
  1.1929    by (import hollight DEF_CARD_LT)
  1.1930  
  1.1931  constdefs
  1.1932 -  COUNTABLE :: "('q_37642 => bool) => bool" 
  1.1933 -  "(op ==::(('q_37642::type => bool) => bool)
  1.1934 -        => (('q_37642::type => bool) => bool) => prop)
  1.1935 - (COUNTABLE::('q_37642::type => bool) => bool)
  1.1936 - ((CARD_GE::(nat => bool) => ('q_37642::type => bool) => bool)
  1.1937 +  COUNTABLE :: "('q_37757 => bool) => bool" 
  1.1938 +  "(op ==::(('q_37757::type => bool) => bool)
  1.1939 +        => (('q_37757::type => bool) => bool) => prop)
  1.1940 + (COUNTABLE::('q_37757::type => bool) => bool)
  1.1941 + ((CARD_GE::(nat => bool) => ('q_37757::type => bool) => bool)
  1.1942     (hollight.UNIV::nat => bool))"
  1.1943  
  1.1944 -lemma DEF_COUNTABLE: "(op =::(('q_37642::type => bool) => bool)
  1.1945 -       => (('q_37642::type => bool) => bool) => bool)
  1.1946 - (COUNTABLE::('q_37642::type => bool) => bool)
  1.1947 - ((CARD_GE::(nat => bool) => ('q_37642::type => bool) => bool)
  1.1948 +lemma DEF_COUNTABLE: "(op =::(('q_37757::type => bool) => bool)
  1.1949 +       => (('q_37757::type => bool) => bool) => bool)
  1.1950 + (COUNTABLE::('q_37757::type => bool) => bool)
  1.1951 + ((CARD_GE::(nat => bool) => ('q_37757::type => bool) => bool)
  1.1952     (hollight.UNIV::nat => bool))"
  1.1953    by (import hollight DEF_COUNTABLE)
  1.1954  
  1.1955 @@ -5849,8 +6016,8 @@
  1.1956     (hollight.UNION x xa = EMPTY) = (x = EMPTY & xa = EMPTY)"
  1.1957    by (import hollight EMPTY_UNION)
  1.1958  
  1.1959 -lemma UNION_SUBSET: "ALL (x::'q_38479::type => bool) (xa::'q_38479::type => bool)
  1.1960 -   xb::'q_38479::type => bool.
  1.1961 +lemma UNION_SUBSET: "ALL (x::'q_38594::type => bool) (xa::'q_38594::type => bool)
  1.1962 +   xb::'q_38594::type => bool.
  1.1963     SUBSET (hollight.UNION x xa) xb = (SUBSET x xb & SUBSET xa xb)"
  1.1964    by (import hollight UNION_SUBSET)
  1.1965  
  1.1966 @@ -5928,7 +6095,7 @@
  1.1967  lemma DIFF_EQ_EMPTY: "ALL x::'A::type => bool. DIFF x x = EMPTY"
  1.1968    by (import hollight DIFF_EQ_EMPTY)
  1.1969  
  1.1970 -lemma SUBSET_DIFF: "ALL (x::'q_38897::type => bool) xa::'q_38897::type => bool.
  1.1971 +lemma SUBSET_DIFF: "ALL (x::'q_39012::type => bool) xa::'q_39012::type => bool.
  1.1972     SUBSET (DIFF x xa) x"
  1.1973    by (import hollight SUBSET_DIFF)
  1.1974  
  1.1975 @@ -5994,15 +6161,15 @@
  1.1976     DIFF (INSERT x s) t = COND (IN x t) (DIFF s t) (INSERT x (DIFF s t))"
  1.1977    by (import hollight INSERT_DIFF)
  1.1978  
  1.1979 -lemma INSERT_AC: "INSERT (x::'q_39353::type)
  1.1980 - (INSERT (y::'q_39353::type) (s::'q_39353::type => bool)) =
  1.1981 +lemma INSERT_AC: "INSERT (x::'q_39468::type)
  1.1982 + (INSERT (y::'q_39468::type) (s::'q_39468::type => bool)) =
  1.1983  INSERT y (INSERT x s) &
  1.1984  INSERT x (INSERT x s) = INSERT x s"
  1.1985    by (import hollight INSERT_AC)
  1.1986  
  1.1987 -lemma INTER_ACI: "hollight.INTER (p::'q_39420::type => bool) (q::'q_39420::type => bool) =
  1.1988 +lemma INTER_ACI: "hollight.INTER (p::'q_39535::type => bool) (q::'q_39535::type => bool) =
  1.1989  hollight.INTER q p &
  1.1990 -hollight.INTER (hollight.INTER p q) (r::'q_39420::type => bool) =
  1.1991 +hollight.INTER (hollight.INTER p q) (r::'q_39535::type => bool) =
  1.1992  hollight.INTER p (hollight.INTER q r) &
  1.1993  hollight.INTER p (hollight.INTER q r) =
  1.1994  hollight.INTER q (hollight.INTER p r) &
  1.1995 @@ -6010,9 +6177,9 @@
  1.1996  hollight.INTER p (hollight.INTER p q) = hollight.INTER p q"
  1.1997    by (import hollight INTER_ACI)
  1.1998  
  1.1999 -lemma UNION_ACI: "hollight.UNION (p::'q_39486::type => bool) (q::'q_39486::type => bool) =
  1.2000 +lemma UNION_ACI: "hollight.UNION (p::'q_39601::type => bool) (q::'q_39601::type => bool) =
  1.2001  hollight.UNION q p &
  1.2002 -hollight.UNION (hollight.UNION p q) (r::'q_39486::type => bool) =
  1.2003 +hollight.UNION (hollight.UNION p q) (r::'q_39601::type => bool) =
  1.2004  hollight.UNION p (hollight.UNION q r) &
  1.2005  hollight.UNION p (hollight.UNION q r) =
  1.2006  hollight.UNION q (hollight.UNION p r) &
  1.2007 @@ -6076,84 +6243,105 @@
  1.2008     DISJOINT (DELETE x xb) xa = DISJOINT (DELETE xa xb) x"
  1.2009    by (import hollight DISJOINT_DELETE_SYM)
  1.2010  
  1.2011 -lemma UNIONS_0: "(op =::('q_39893::type => bool) => ('q_39893::type => bool) => bool)
  1.2012 - ((UNIONS::(('q_39893::type => bool) => bool) => 'q_39893::type => bool)
  1.2013 -   (EMPTY::('q_39893::type => bool) => bool))
  1.2014 - (EMPTY::'q_39893::type => bool)"
  1.2015 +lemma UNIONS_0: "(op =::('q_40008::type => bool) => ('q_40008::type => bool) => bool)
  1.2016 + ((UNIONS::(('q_40008::type => bool) => bool) => 'q_40008::type => bool)
  1.2017 +   (EMPTY::('q_40008::type => bool) => bool))
  1.2018 + (EMPTY::'q_40008::type => bool)"
  1.2019    by (import hollight UNIONS_0)
  1.2020  
  1.2021 -lemma UNIONS_1: "UNIONS (INSERT (s::'q_39899::type => bool) EMPTY) = s"
  1.2022 +lemma UNIONS_1: "UNIONS (INSERT (s::'q_40014::type => bool) EMPTY) = s"
  1.2023    by (import hollight UNIONS_1)
  1.2024  
  1.2025  lemma UNIONS_2: "UNIONS
  1.2026 - (INSERT (s::'q_39919::type => bool)
  1.2027 -   (INSERT (t::'q_39919::type => bool) EMPTY)) =
  1.2028 + (INSERT (s::'q_40034::type => bool)
  1.2029 +   (INSERT (t::'q_40034::type => bool) EMPTY)) =
  1.2030  hollight.UNION s t"
  1.2031    by (import hollight UNIONS_2)
  1.2032  
  1.2033  lemma UNIONS_INSERT: "UNIONS
  1.2034 - (INSERT (s::'q_39933::type => bool)
  1.2035 -   (u::('q_39933::type => bool) => bool)) =
  1.2036 + (INSERT (s::'q_40048::type => bool)
  1.2037 +   (u::('q_40048::type => bool) => bool)) =
  1.2038  hollight.UNION s (UNIONS u)"
  1.2039    by (import hollight UNIONS_INSERT)
  1.2040  
  1.2041 -lemma FORALL_IN_UNIONS: "ALL (x::'q_39975::type => bool) xa::('q_39975::type => bool) => bool.
  1.2042 -   (ALL xb::'q_39975::type. IN xb (UNIONS xa) --> x xb) =
  1.2043 -   (ALL (t::'q_39975::type => bool) xb::'q_39975::type.
  1.2044 +lemma FORALL_IN_UNIONS: "ALL (x::'q_40090::type => bool) xa::('q_40090::type => bool) => bool.
  1.2045 +   (ALL xb::'q_40090::type. IN xb (UNIONS xa) --> x xb) =
  1.2046 +   (ALL (t::'q_40090::type => bool) xb::'q_40090::type.
  1.2047         IN t xa & IN xb t --> x xb)"
  1.2048    by (import hollight FORALL_IN_UNIONS)
  1.2049  
  1.2050 -lemma EMPTY_UNIONS: "ALL x::('q_40001::type => bool) => bool.
  1.2051 +lemma EMPTY_UNIONS: "ALL x::('q_40116::type => bool) => bool.
  1.2052     (UNIONS x = EMPTY) =
  1.2053 -   (ALL xa::'q_40001::type => bool. IN xa x --> xa = EMPTY)"
  1.2054 +   (ALL xa::'q_40116::type => bool. IN xa x --> xa = EMPTY)"
  1.2055    by (import hollight EMPTY_UNIONS)
  1.2056  
  1.2057 -lemma IMAGE_CLAUSES: "IMAGE (f::'q_40027::type => 'q_40031::type) EMPTY = EMPTY &
  1.2058 -IMAGE f (INSERT (x::'q_40027::type) (s::'q_40027::type => bool)) =
  1.2059 +lemma INTERS_0: "(op =::('q_40124::type => bool) => ('q_40124::type => bool) => bool)
  1.2060 + ((INTERS::(('q_40124::type => bool) => bool) => 'q_40124::type => bool)
  1.2061 +   (EMPTY::('q_40124::type => bool) => bool))
  1.2062 + (hollight.UNIV::'q_40124::type => bool)"
  1.2063 +  by (import hollight INTERS_0)
  1.2064 +
  1.2065 +lemma INTERS_1: "INTERS (INSERT (s::'q_40130::type => bool) EMPTY) = s"
  1.2066 +  by (import hollight INTERS_1)
  1.2067 +
  1.2068 +lemma INTERS_2: "INTERS
  1.2069 + (INSERT (s::'q_40150::type => bool)
  1.2070 +   (INSERT (t::'q_40150::type => bool) EMPTY)) =
  1.2071 +hollight.INTER s t"
  1.2072 +  by (import hollight INTERS_2)
  1.2073 +
  1.2074 +lemma INTERS_INSERT: "INTERS
  1.2075 + (INSERT (s::'q_40164::type => bool)
  1.2076 +   (u::('q_40164::type => bool) => bool)) =
  1.2077 +hollight.INTER s (INTERS u)"
  1.2078 +  by (import hollight INTERS_INSERT)
  1.2079 +
  1.2080 +lemma IMAGE_CLAUSES: "IMAGE (f::'q_40190::type => 'q_40194::type) EMPTY = EMPTY &
  1.2081 +IMAGE f (INSERT (x::'q_40190::type) (s::'q_40190::type => bool)) =
  1.2082  INSERT (f x) (IMAGE f s)"
  1.2083    by (import hollight IMAGE_CLAUSES)
  1.2084  
  1.2085 -lemma IMAGE_UNION: "ALL (x::'q_40054::type => 'q_40065::type) (xa::'q_40054::type => bool)
  1.2086 -   xb::'q_40054::type => bool.
  1.2087 +lemma IMAGE_UNION: "ALL (x::'q_40217::type => 'q_40228::type) (xa::'q_40217::type => bool)
  1.2088 +   xb::'q_40217::type => bool.
  1.2089     IMAGE x (hollight.UNION xa xb) = hollight.UNION (IMAGE x xa) (IMAGE x xb)"
  1.2090    by (import hollight IMAGE_UNION)
  1.2091  
  1.2092 -lemma IMAGE_o: "ALL (x::'q_40098::type => 'q_40094::type)
  1.2093 -   (xa::'q_40089::type => 'q_40098::type) xb::'q_40089::type => bool.
  1.2094 +lemma IMAGE_o: "ALL (x::'q_40261::type => 'q_40257::type)
  1.2095 +   (xa::'q_40252::type => 'q_40261::type) xb::'q_40252::type => bool.
  1.2096     IMAGE (x o xa) xb = IMAGE x (IMAGE xa xb)"
  1.2097    by (import hollight IMAGE_o)
  1.2098  
  1.2099 -lemma IMAGE_SUBSET: "ALL (x::'q_40116::type => 'q_40127::type) (xa::'q_40116::type => bool)
  1.2100 -   xb::'q_40116::type => bool.
  1.2101 +lemma IMAGE_SUBSET: "ALL (x::'q_40279::type => 'q_40290::type) (xa::'q_40279::type => bool)
  1.2102 +   xb::'q_40279::type => bool.
  1.2103     SUBSET xa xb --> SUBSET (IMAGE x xa) (IMAGE x xb)"
  1.2104    by (import hollight IMAGE_SUBSET)
  1.2105  
  1.2106 -lemma IMAGE_DIFF_INJ: "(ALL (x::'q_40158::type) y::'q_40158::type.
  1.2107 -    (f::'q_40158::type => 'q_40169::type) x = f y --> x = y) -->
  1.2108 -IMAGE f (DIFF (s::'q_40158::type => bool) (t::'q_40158::type => bool)) =
  1.2109 +lemma IMAGE_DIFF_INJ: "(ALL (x::'q_40321::type) y::'q_40321::type.
  1.2110 +    (f::'q_40321::type => 'q_40332::type) x = f y --> x = y) -->
  1.2111 +IMAGE f (DIFF (s::'q_40321::type => bool) (t::'q_40321::type => bool)) =
  1.2112  DIFF (IMAGE f s) (IMAGE f t)"
  1.2113    by (import hollight IMAGE_DIFF_INJ)
  1.2114  
  1.2115 -lemma IMAGE_DELETE_INJ: "(ALL x::'q_40204::type.
  1.2116 -    (f::'q_40204::type => 'q_40203::type) x = f (a::'q_40204::type) -->
  1.2117 +lemma IMAGE_DELETE_INJ: "(ALL x::'q_40367::type.
  1.2118 +    (f::'q_40367::type => 'q_40366::type) x = f (a::'q_40367::type) -->
  1.2119      x = a) -->
  1.2120 -IMAGE f (DELETE (s::'q_40204::type => bool) a) = DELETE (IMAGE f s) (f a)"
  1.2121 +IMAGE f (DELETE (s::'q_40367::type => bool) a) = DELETE (IMAGE f s) (f a)"
  1.2122    by (import hollight IMAGE_DELETE_INJ)
  1.2123  
  1.2124 -lemma IMAGE_EQ_EMPTY: "ALL (x::'q_40227::type => 'q_40223::type) xa::'q_40227::type => bool.
  1.2125 +lemma IMAGE_EQ_EMPTY: "ALL (x::'q_40390::type => 'q_40386::type) xa::'q_40390::type => bool.
  1.2126     (IMAGE x xa = EMPTY) = (xa = EMPTY)"
  1.2127    by (import hollight IMAGE_EQ_EMPTY)
  1.2128  
  1.2129 -lemma FORALL_IN_IMAGE: "ALL (x::'q_40263::type => 'q_40262::type) xa::'q_40263::type => bool.
  1.2130 -   (ALL xb::'q_40262::type.
  1.2131 -       IN xb (IMAGE x xa) --> (P::'q_40262::type => bool) xb) =
  1.2132 -   (ALL xb::'q_40263::type. IN xb xa --> P (x xb))"
  1.2133 +lemma FORALL_IN_IMAGE: "ALL (x::'q_40426::type => 'q_40425::type) xa::'q_40426::type => bool.
  1.2134 +   (ALL xb::'q_40425::type.
  1.2135 +       IN xb (IMAGE x xa) --> (P::'q_40425::type => bool) xb) =
  1.2136 +   (ALL xb::'q_40426::type. IN xb xa --> P (x xb))"
  1.2137    by (import hollight FORALL_IN_IMAGE)
  1.2138  
  1.2139 -lemma EXISTS_IN_IMAGE: "ALL (x::'q_40299::type => 'q_40298::type) xa::'q_40299::type => bool.
  1.2140 -   (EX xb::'q_40298::type.
  1.2141 -       IN xb (IMAGE x xa) & (P::'q_40298::type => bool) xb) =
  1.2142 -   (EX xb::'q_40299::type. IN xb xa & P (x xb))"
  1.2143 +lemma EXISTS_IN_IMAGE: "ALL (x::'q_40462::type => 'q_40461::type) xa::'q_40462::type => bool.
  1.2144 +   (EX xb::'q_40461::type.
  1.2145 +       IN xb (IMAGE x xa) & (P::'q_40461::type => bool) xb) =
  1.2146 +   (EX xb::'q_40462::type. IN xb xa & P (x xb))"
  1.2147    by (import hollight EXISTS_IN_IMAGE)
  1.2148  
  1.2149  lemma SUBSET_IMAGE: "ALL (f::'A::type => 'B::type) (s::'B::type => bool) t::'A::type => bool.
  1.2150 @@ -6161,20 +6349,30 @@
  1.2151     (EX x::'A::type => bool. SUBSET x t & s = IMAGE f x)"
  1.2152    by (import hollight SUBSET_IMAGE)
  1.2153  
  1.2154 -lemma IMAGE_CONST: "ALL (s::'q_40385::type => bool) c::'q_40390::type.
  1.2155 -   IMAGE (%x::'q_40385::type. c) s = COND (s = EMPTY) EMPTY (INSERT c EMPTY)"
  1.2156 +lemma IMAGE_CONST: "ALL (s::'q_40548::type => bool) c::'q_40553::type.
  1.2157 +   IMAGE (%x::'q_40548::type. c) s = COND (s = EMPTY) EMPTY (INSERT c EMPTY)"
  1.2158    by (import hollight IMAGE_CONST)
  1.2159  
  1.2160 -lemma SIMPLE_IMAGE: "ALL (x::'q_40418::type => 'q_40422::type) xa::'q_40418::type => bool.
  1.2161 +lemma SIMPLE_IMAGE: "ALL (x::'q_40581::type => 'q_40585::type) xa::'q_40581::type => bool.
  1.2162     GSPEC
  1.2163 -    (%u::'q_40422::type.
  1.2164 -        EX xb::'q_40418::type. SETSPEC u (IN xb xa) (x xb)) =
  1.2165 +    (%u::'q_40585::type.
  1.2166 +        EX xb::'q_40581::type. SETSPEC u (IN xb xa) (x xb)) =
  1.2167     IMAGE x xa"
  1.2168    by (import hollight SIMPLE_IMAGE)
  1.2169  
  1.2170 -lemma EMPTY_GSPEC: "GSPEC (%u::'q_40439::type. Ex (SETSPEC u False)) = EMPTY"
  1.2171 +lemma EMPTY_GSPEC: "GSPEC (%u::'q_40602::type. Ex (SETSPEC u False)) = EMPTY"
  1.2172    by (import hollight EMPTY_GSPEC)
  1.2173  
  1.2174 +lemma IN_ELIM_PAIR_THM: "ALL (x::'q_40648::type => 'q_40647::type => bool) (xa::'q_40648::type)
  1.2175 +   xb::'q_40647::type.
  1.2176 +   IN (xa, xb)
  1.2177 +    (GSPEC
  1.2178 +      (%xa::'q_40648::type * 'q_40647::type.
  1.2179 +          EX (xb::'q_40648::type) y::'q_40647::type.
  1.2180 +             SETSPEC xa (x xb y) (xb, y))) =
  1.2181 +   x xa xb"
  1.2182 +  by (import hollight IN_ELIM_PAIR_THM)
  1.2183 +
  1.2184  lemma FINITE_INDUCT_STRONG: "ALL P::('A::type => bool) => bool.
  1.2185     P EMPTY &
  1.2186     (ALL (x::'A::type) s::'A::type => bool.
  1.2187 @@ -6207,9 +6405,9 @@
  1.2188  lemma FINITE_DELETE: "ALL (s::'A::type => bool) x::'A::type. FINITE (DELETE s x) = FINITE s"
  1.2189    by (import hollight FINITE_DELETE)
  1.2190  
  1.2191 -lemma FINITE_UNIONS: "ALL s::('q_40774::type => bool) => bool.
  1.2192 +lemma FINITE_UNIONS: "ALL s::('q_40983::type => bool) => bool.
  1.2193     FINITE s -->
  1.2194 -   FINITE (UNIONS s) = (ALL t::'q_40774::type => bool. IN t s --> FINITE t)"
  1.2195 +   FINITE (UNIONS s) = (ALL t::'q_40983::type => bool. IN t s --> FINITE t)"
  1.2196    by (import hollight FINITE_UNIONS)
  1.2197  
  1.2198  lemma FINITE_IMAGE_EXPAND: "ALL (f::'A::type => 'B::type) s::'A::type => bool.
  1.2199 @@ -6242,7 +6440,7 @@
  1.2200     (ALL s::'A::type => bool. INFINITE s --> INFINITE (IMAGE f s))"
  1.2201    by (import hollight INFINITE_IMAGE_INJ)
  1.2202  
  1.2203 -lemma INFINITE_NONEMPTY: "ALL s::'q_41257::type => bool. INFINITE s --> s ~= EMPTY"
  1.2204 +lemma INFINITE_NONEMPTY: "ALL s::'q_41466::type => bool. INFINITE s --> s ~= EMPTY"
  1.2205    by (import hollight INFINITE_NONEMPTY)
  1.2206  
  1.2207  lemma INFINITE_DIFF_FINITE: "ALL (s::'A::type => bool) t::'A::type => bool.
  1.2208 @@ -6268,48 +6466,48 @@
  1.2209            EX t::'A::type => bool. SETSPEC u (SUBSET t s) t))"
  1.2210    by (import hollight FINITE_SUBSETS)
  1.2211  
  1.2212 -lemma FINITE_DIFF: "ALL (s::'q_41555::type => bool) t::'q_41555::type => bool.
  1.2213 +lemma FINITE_DIFF: "ALL (s::'q_41764::type => bool) t::'q_41764::type => bool.
  1.2214     FINITE s --> FINITE (DIFF s t)"
  1.2215    by (import hollight FINITE_DIFF)
  1.2216  
  1.2217  constdefs
  1.2218 -  FINREC :: "('q_41615 => 'q_41614 => 'q_41614)
  1.2219 -=> 'q_41614 => ('q_41615 => bool) => 'q_41614 => nat => bool" 
  1.2220 +  FINREC :: "('q_41824 => 'q_41823 => 'q_41823)
  1.2221 +=> 'q_41823 => ('q_41824 => bool) => 'q_41823 => nat => bool" 
  1.2222    "FINREC ==
  1.2223 -SOME FINREC::('q_41615::type => 'q_41614::type => 'q_41614::type)
  1.2224 -             => 'q_41614::type
  1.2225 -                => ('q_41615::type => bool)
  1.2226 -                   => 'q_41614::type => nat => bool.
  1.2227 -   (ALL (f::'q_41615::type => 'q_41614::type => 'q_41614::type)
  1.2228 -       (s::'q_41615::type => bool) (a::'q_41614::type) b::'q_41614::type.
  1.2229 +SOME FINREC::('q_41824::type => 'q_41823::type => 'q_41823::type)
  1.2230 +             => 'q_41823::type
  1.2231 +                => ('q_41824::type => bool)
  1.2232 +                   => 'q_41823::type => nat => bool.
  1.2233 +   (ALL (f::'q_41824::type => 'q_41823::type => 'q_41823::type)
  1.2234 +       (s::'q_41824::type => bool) (a::'q_41823::type) b::'q_41823::type.
  1.2235         FINREC f b s a 0 = (s = EMPTY & a = b)) &
  1.2236 -   (ALL (b::'q_41614::type) (s::'q_41615::type => bool) (n::nat)
  1.2237 -       (a::'q_41614::type)
  1.2238 -       f::'q_41615::type => 'q_41614::type => 'q_41614::type.
  1.2239 +   (ALL (b::'q_41823::type) (s::'q_41824::type => bool) (n::nat)
  1.2240 +       (a::'q_41823::type)
  1.2241 +       f::'q_41824::type => 'q_41823::type => 'q_41823::type.
  1.2242         FINREC f b s a (Suc n) =
  1.2243 -       (EX (x::'q_41615::type) c::'q_41614::type.
  1.2244 +       (EX (x::'q_41824::type) c::'q_41823::type.
  1.2245             IN x s & FINREC f b (DELETE s x) c n & a = f x c))"
  1.2246  
  1.2247  lemma DEF_FINREC: "FINREC =
  1.2248 -(SOME FINREC::('q_41615::type => 'q_41614::type => 'q_41614::type)
  1.2249 -              => 'q_41614::type
  1.2250 -                 => ('q_41615::type => bool)
  1.2251 -                    => 'q_41614::type => nat => bool.
  1.2252 -    (ALL (f::'q_41615::type => 'q_41614::type => 'q_41614::type)
  1.2253 -        (s::'q_41615::type => bool) (a::'q_41614::type) b::'q_41614::type.
  1.2254 +(SOME FINREC::('q_41824::type => 'q_41823::type => 'q_41823::type)
  1.2255 +              => 'q_41823::type
  1.2256 +                 => ('q_41824::type => bool)
  1.2257 +                    => 'q_41823::type => nat => bool.
  1.2258 +    (ALL (f::'q_41824::type => 'q_41823::type => 'q_41823::type)
  1.2259 +        (s::'q_41824::type => bool) (a::'q_41823::type) b::'q_41823::type.
  1.2260          FINREC f b s a 0 = (s = EMPTY & a = b)) &
  1.2261 -    (ALL (b::'q_41614::type) (s::'q_41615::type => bool) (n::nat)
  1.2262 -        (a::'q_41614::type)
  1.2263 -        f::'q_41615::type => 'q_41614::type => 'q_41614::type.
  1.2264 +    (ALL (b::'q_41823::type) (s::'q_41824::type => bool) (n::nat)
  1.2265 +        (a::'q_41823::type)
  1.2266 +        f::'q_41824::type => 'q_41823::type => 'q_41823::type.
  1.2267          FINREC f b s a (Suc n) =
  1.2268 -        (EX (x::'q_41615::type) c::'q_41614::type.
  1.2269 +        (EX (x::'q_41824::type) c::'q_41823::type.
  1.2270              IN x s & FINREC f b (DELETE s x) c n & a = f x c)))"
  1.2271    by (import hollight DEF_FINREC)
  1.2272  
  1.2273 -lemma FINREC_1_LEMMA: "ALL (x::'q_41660::type => 'q_41659::type => 'q_41659::type)
  1.2274 -   (xa::'q_41659::type) (xb::'q_41660::type => bool) xc::'q_41659::type.
  1.2275 +lemma FINREC_1_LEMMA: "ALL (x::'q_41869::type => 'q_41868::type => 'q_41868::type)
  1.2276 +   (xa::'q_41868::type) (xb::'q_41869::type => bool) xc::'q_41868::type.
  1.2277     FINREC x xa xb xc (Suc 0) =
  1.2278 -   (EX xd::'q_41660::type. xb = INSERT xd EMPTY & xc = x xd xa)"
  1.2279 +   (EX xd::'q_41869::type. xb = INSERT xd EMPTY & xc = x xd xa)"
  1.2280    by (import hollight FINREC_1_LEMMA)
  1.2281  
  1.2282  lemma FINREC_SUC_LEMMA: "ALL (f::'A::type => 'B::type => 'B::type) b::'B::type.
  1.2283 @@ -6361,23 +6559,23 @@
  1.2284    by (import hollight SET_RECURSION_LEMMA)
  1.2285  
  1.2286  constdefs
  1.2287 -  ITSET :: "('q_42316 => 'q_42315 => 'q_42315)
  1.2288 -=> ('q_42316 => bool) => 'q_42315 => 'q_42315" 
  1.2289 +  ITSET :: "('q_42525 => 'q_42524 => 'q_42524)
  1.2290 +=> ('q_42525 => bool) => 'q_42524 => 'q_42524" 
  1.2291    "ITSET ==
  1.2292 -%(u::'q_42316::type => 'q_42315::type => 'q_42315::type)
  1.2293 -   (ua::'q_42316::type => bool) ub::'q_42315::type.
  1.2294 -   (SOME g::('q_42316::type => bool) => 'q_42315::type.
  1.2295 +%(u::'q_42525::type => 'q_42524::type => 'q_42524::type)
  1.2296 +   (ua::'q_42525::type => bool) ub::'q_42524::type.
  1.2297 +   (SOME g::('q_42525::type => bool) => 'q_42524::type.
  1.2298         g EMPTY = ub &
  1.2299 -       (ALL (x::'q_42316::type) s::'q_42316::type => bool.
  1.2300 +       (ALL (x::'q_42525::type) s::'q_42525::type => bool.
  1.2301             FINITE s --> g (INSERT x s) = COND (IN x s) (g s) (u x (g s))))
  1.2302      ua"
  1.2303  
  1.2304  lemma DEF_ITSET: "ITSET =
  1.2305 -(%(u::'q_42316::type => 'q_42315::type => 'q_42315::type)
  1.2306 -    (ua::'q_42316::type => bool) ub::'q_42315::type.
  1.2307 -    (SOME g::('q_42316::type => bool) => 'q_42315::type.
  1.2308 +(%(u::'q_42525::type => 'q_42524::type => 'q_42524::type)
  1.2309 +    (ua::'q_42525::type => bool) ub::'q_42524::type.
  1.2310 +    (SOME g::('q_42525::type => bool) => 'q_42524::type.
  1.2311          g EMPTY = ub &
  1.2312 -        (ALL (x::'q_42316::type) s::'q_42316::type => bool.
  1.2313 +        (ALL (x::'q_42525::type) s::'q_42525::type => bool.
  1.2314              FINITE s --> g (INSERT x s) = COND (IN x s) (g s) (u x (g s))))
  1.2315       ua)"
  1.2316    by (import hollight DEF_ITSET)
  1.2317 @@ -6403,28 +6601,28 @@
  1.2318          (ITSET f (DELETE s x) b))"
  1.2319    by (import hollight FINITE_RECURSION_DELETE)
  1.2320  
  1.2321 -lemma ITSET_EQ: "ALL (x::'q_42621::type => bool)
  1.2322 -   (xa::'q_42621::type => 'q_42622::type => 'q_42622::type)
  1.2323 -   (xb::'q_42621::type => 'q_42622::type => 'q_42622::type)
  1.2324 -   xc::'q_42622::type.
  1.2325 +lemma ITSET_EQ: "ALL (x::'q_42830::type => bool)
  1.2326 +   (xa::'q_42830::type => 'q_42831::type => 'q_42831::type)
  1.2327 +   (xb::'q_42830::type => 'q_42831::type => 'q_42831::type)
  1.2328 +   xc::'q_42831::type.
  1.2329     FINITE x &
  1.2330 -   (ALL xc::'q_42621::type. IN xc x --> xa xc = xb xc) &
  1.2331 -   (ALL (x::'q_42621::type) (y::'q_42621::type) s::'q_42622::type.
  1.2332 +   (ALL xc::'q_42830::type. IN xc x --> xa xc = xb xc) &
  1.2333 +   (ALL (x::'q_42830::type) (y::'q_42830::type) s::'q_42831::type.
  1.2334         x ~= y --> xa x (xa y s) = xa y (xa x s)) &
  1.2335 -   (ALL (x::'q_42621::type) (y::'q_42621::type) s::'q_42622::type.
  1.2336 +   (ALL (x::'q_42830::type) (y::'q_42830::type) s::'q_42831::type.
  1.2337         x ~= y --> xb x (xb y s) = xb y (xb x s)) -->
  1.2338     ITSET xa x xc = ITSET xb x xc"
  1.2339    by (import hollight ITSET_EQ)
  1.2340  
  1.2341 -lemma SUBSET_RESTRICT: "ALL (x::'q_42655::type => bool) xa::'q_42655::type => bool.
  1.2342 +lemma SUBSET_RESTRICT: "ALL (x::'q_42864::type => bool) xa::'q_42864::type => bool.
  1.2343     SUBSET
  1.2344      (GSPEC
  1.2345 -      (%u::'q_42655::type.
  1.2346 -          EX xb::'q_42655::type. SETSPEC u (IN xb x & xa xb) xb))
  1.2347 +      (%u::'q_42864::type.
  1.2348 +          EX xb::'q_42864::type. SETSPEC u (IN xb x & xa xb) xb))
  1.2349      x"
  1.2350    by (import hollight SUBSET_RESTRICT)
  1.2351  
  1.2352 -lemma FINITE_RESTRICT: "ALL (s::'A::type => bool) p::'q_42673::type.
  1.2353 +lemma FINITE_RESTRICT: "ALL (s::'A::type => bool) p::'q_42882::type.
  1.2354     FINITE s -->
  1.2355     FINITE
  1.2356      (GSPEC
  1.2357 @@ -6433,10 +6631,10 @@
  1.2358    by (import hollight FINITE_RESTRICT)
  1.2359  
  1.2360  constdefs
  1.2361 -  CARD :: "('q_42709 => bool) => nat" 
  1.2362 -  "CARD == %u::'q_42709::type => bool. ITSET (%x::'q_42709::type. Suc) u 0"
  1.2363 -
  1.2364 -lemma DEF_CARD: "CARD = (%u::'q_42709::type => bool. ITSET (%x::'q_42709::type. Suc) u 0)"
  1.2365 +  CARD :: "('q_42918 => bool) => nat" 
  1.2366 +  "CARD == %u::'q_42918::type => bool. ITSET (%x::'q_42918::type. Suc) u 0"
  1.2367 +
  1.2368 +lemma DEF_CARD: "CARD = (%u::'q_42918::type => bool. ITSET (%x::'q_42918::type. Suc) u 0)"
  1.2369    by (import hollight DEF_CARD)
  1.2370  
  1.2371  lemma CARD_CLAUSES: "(op &::bool => bool => bool)
  1.2372 @@ -6470,23 +6668,23 @@
  1.2373     CARD (DELETE s x) = COND (IN x s) (CARD s - NUMERAL_BIT1 0) (CARD s)"
  1.2374    by (import hollight CARD_DELETE)
  1.2375  
  1.2376 -lemma CARD_UNION_EQ: "ALL (s::'q_42954::type => bool) (t::'q_42954::type => bool)
  1.2377 -   u::'q_42954::type => bool.
  1.2378 +lemma CARD_UNION_EQ: "ALL (s::'q_43163::type => bool) (t::'q_43163::type => bool)
  1.2379 +   u::'q_43163::type => bool.
  1.2380     FINITE u & hollight.INTER s t = EMPTY & hollight.UNION s t = u -->
  1.2381     CARD s + CARD t = CARD u"
  1.2382    by (import hollight CARD_UNION_EQ)
  1.2383  
  1.2384  constdefs
  1.2385 -  HAS_SIZE :: "('q_42990 => bool) => nat => bool" 
  1.2386 -  "HAS_SIZE == %(u::'q_42990::type => bool) ua::nat. FINITE u & CARD u = ua"
  1.2387 -
  1.2388 -lemma DEF_HAS_SIZE: "HAS_SIZE = (%(u::'q_42990::type => bool) ua::nat. FINITE u & CARD u = ua)"
  1.2389 +  HAS_SIZE :: "('q_43199 => bool) => nat => bool" 
  1.2390 +  "HAS_SIZE == %(u::'q_43199::type => bool) ua::nat. FINITE u & CARD u = ua"
  1.2391 +
  1.2392 +lemma DEF_HAS_SIZE: "HAS_SIZE = (%(u::'q_43199::type => bool) ua::nat. FINITE u & CARD u = ua)"
  1.2393    by (import hollight DEF_HAS_SIZE)
  1.2394  
  1.2395 -lemma HAS_SIZE_CARD: "ALL (x::'q_43009::type => bool) xa::nat. HAS_SIZE x xa --> CARD x = xa"
  1.2396 +lemma HAS_SIZE_CARD: "ALL (x::'q_43218::type => bool) xa::nat. HAS_SIZE x xa --> CARD x = xa"
  1.2397    by (import hollight HAS_SIZE_CARD)
  1.2398  
  1.2399 -lemma HAS_SIZE_0: "ALL (s::'A::type => bool) n::'q_43025::type. HAS_SIZE s 0 = (s = EMPTY)"
  1.2400 +lemma HAS_SIZE_0: "ALL (s::'A::type => bool) n::'q_43234::type. HAS_SIZE s 0 = (s = EMPTY)"
  1.2401    by (import hollight HAS_SIZE_0)
  1.2402  
  1.2403  lemma HAS_SIZE_SUC: "ALL (s::'A::type => bool) n::nat.
  1.2404 @@ -6494,7 +6692,7 @@
  1.2405     (s ~= EMPTY & (ALL x::'A::type. IN x s --> HAS_SIZE (DELETE s x) n))"
  1.2406    by (import hollight HAS_SIZE_SUC)
  1.2407  
  1.2408 -lemma HAS_SIZE_UNION: "ALL (x::'q_43147::type => bool) (xa::'q_43147::type => bool) (xb::nat)
  1.2409 +lemma HAS_SIZE_UNION: "ALL (x::'q_43356::type => bool) (xa::'q_43356::type => bool) (xb::nat)
  1.2410     xc::nat.
  1.2411     HAS_SIZE x xb & HAS_SIZE xa xc & DISJOINT x xa -->
  1.2412     HAS_SIZE (hollight.UNION x xa) (xb + xc)"
  1.2413 @@ -6514,9 +6712,9 @@
  1.2414      (xb * xc)"
  1.2415    by (import hollight HAS_SIZE_UNIONS)
  1.2416  
  1.2417 -lemma HAS_SIZE_CLAUSES: "HAS_SIZE (s::'q_43395::type => bool) 0 = (s = EMPTY) &
  1.2418 +lemma HAS_SIZE_CLAUSES: "HAS_SIZE (s::'q_43604::type => bool) 0 = (s = EMPTY) &
  1.2419  HAS_SIZE s (Suc (n::nat)) =
  1.2420 -(EX (a::'q_43395::type) t::'q_43395::type => bool.
  1.2421 +(EX (a::'q_43604::type) t::'q_43604::type => bool.
  1.2422      HAS_SIZE t n & ~ IN a t & s = INSERT a t)"
  1.2423    by (import hollight HAS_SIZE_CLAUSES)
  1.2424  
  1.2425 @@ -6532,7 +6730,7 @@
  1.2426     FINITE b & SUBSET a b & <= (CARD b) (CARD a) --> a = b"
  1.2427    by (import hollight CARD_SUBSET_LE)
  1.2428  
  1.2429 -lemma CARD_EQ_0: "ALL s::'q_43711::type => bool. FINITE s --> (CARD s = 0) = (s = EMPTY)"
  1.2430 +lemma CARD_EQ_0: "ALL s::'q_43920::type => bool. FINITE s --> (CARD s = 0) = (s = EMPTY)"
  1.2431    by (import hollight CARD_EQ_0)
  1.2432  
  1.2433  lemma CARD_PSUBSET: "ALL (a::'A::type => bool) b::'A::type => bool.
  1.2434 @@ -6643,30 +6841,30 @@
  1.2435      (EXP n m)"
  1.2436    by (import hollight HAS_SIZE_FUNSPACE)
  1.2437  
  1.2438 -lemma CARD_FUNSPACE: "ALL (s::'q_45066::type => bool) t::'q_45063::type => bool.
  1.2439 +lemma CARD_FUNSPACE: "ALL (s::'q_45275::type => bool) t::'q_45272::type => bool.
  1.2440     FINITE s & FINITE t -->
  1.2441     CARD
  1.2442      (GSPEC
  1.2443 -      (%u::'q_45066::type => 'q_45063::type.
  1.2444 -          EX f::'q_45066::type => 'q_45063::type.
  1.2445 +      (%u::'q_45275::type => 'q_45272::type.
  1.2446 +          EX f::'q_45275::type => 'q_45272::type.
  1.2447               SETSPEC u
  1.2448 -              ((ALL x::'q_45066::type. IN x s --> IN (f x) t) &
  1.2449 -               (ALL x::'q_45066::type.
  1.2450 -                   ~ IN x s --> f x = (d::'q_45063::type)))
  1.2451 +              ((ALL x::'q_45275::type. IN x s --> IN (f x) t) &
  1.2452 +               (ALL x::'q_45275::type.
  1.2453 +                   ~ IN x s --> f x = (d::'q_45272::type)))
  1.2454                f)) =
  1.2455     EXP (CARD t) (CARD s)"
  1.2456    by (import hollight CARD_FUNSPACE)
  1.2457  
  1.2458 -lemma FINITE_FUNSPACE: "ALL (s::'q_45132::type => bool) t::'q_45129::type => bool.
  1.2459 +lemma FINITE_FUNSPACE: "ALL (s::'q_45341::type => bool) t::'q_45338::type => bool.
  1.2460     FINITE s & FINITE t -->
  1.2461     FINITE
  1.2462      (GSPEC
  1.2463 -      (%u::'q_45132::type => 'q_45129::type.
  1.2464 -          EX f::'q_45132::type => 'q_45129::type.
  1.2465 +      (%u::'q_45341::type => 'q_45338::type.
  1.2466 +          EX f::'q_45341::type => 'q_45338::type.
  1.2467               SETSPEC u
  1.2468 -              ((ALL x::'q_45132::type. IN x s --> IN (f x) t) &
  1.2469 -               (ALL x::'q_45132::type.
  1.2470 -                   ~ IN x s --> f x = (d::'q_45129::type)))
  1.2471 +              ((ALL x::'q_45341::type. IN x s --> IN (f x) t) &
  1.2472 +               (ALL x::'q_45341::type.
  1.2473 +                   ~ IN x s --> f x = (d::'q_45338::type)))
  1.2474                f))"
  1.2475    by (import hollight FINITE_FUNSPACE)
  1.2476  
  1.2477 @@ -6747,30 +6945,30 @@
  1.2478    by (import hollight HAS_SIZE_INDEX)
  1.2479  
  1.2480  constdefs
  1.2481 -  set_of_list :: "'q_45759 hollight.list => 'q_45759 => bool" 
  1.2482 +  set_of_list :: "'q_45968 hollight.list => 'q_45968 => bool" 
  1.2483    "set_of_list ==
  1.2484 -SOME set_of_list::'q_45759::type hollight.list => 'q_45759::type => bool.
  1.2485 +SOME set_of_list::'q_45968::type hollight.list => 'q_45968::type => bool.
  1.2486     set_of_list NIL = EMPTY &
  1.2487 -   (ALL (h::'q_45759::type) t::'q_45759::type hollight.list.
  1.2488 +   (ALL (h::'q_45968::type) t::'q_45968::type hollight.list.
  1.2489         set_of_list (CONS h t) = INSERT h (set_of_list t))"
  1.2490  
  1.2491  lemma DEF_set_of_list: "set_of_list =
  1.2492 -(SOME set_of_list::'q_45759::type hollight.list => 'q_45759::type => bool.
  1.2493 +(SOME set_of_list::'q_45968::type hollight.list => 'q_45968::type => bool.
  1.2494      set_of_list NIL = EMPTY &
  1.2495 -    (ALL (h::'q_45759::type) t::'q_45759::type hollight.list.
  1.2496 +    (ALL (h::'q_45968::type) t::'q_45968::type hollight.list.
  1.2497          set_of_list (CONS h t) = INSERT h (set_of_list t)))"
  1.2498    by (import hollight DEF_set_of_list)
  1.2499  
  1.2500  constdefs
  1.2501 -  list_of_set :: "('q_45777 => bool) => 'q_45777 hollight.list" 
  1.2502 +  list_of_set :: "('q_45986 => bool) => 'q_45986 hollight.list" 
  1.2503    "list_of_set ==
  1.2504 -%u::'q_45777::type => bool.
  1.2505 -   SOME l::'q_45777::type hollight.list.
  1.2506 +%u::'q_45986::type => bool.
  1.2507 +   SOME l::'q_45986::type hollight.list.
  1.2508        set_of_list l = u & LENGTH l = CARD u"
  1.2509  
  1.2510  lemma DEF_list_of_set: "list_of_set =
  1.2511 -(%u::'q_45777::type => bool.
  1.2512 -    SOME l::'q_45777::type hollight.list.
  1.2513 +(%u::'q_45986::type => bool.
  1.2514 +    SOME l::'q_45986::type hollight.list.
  1.2515         set_of_list l = u & LENGTH l = CARD u)"
  1.2516    by (import hollight DEF_list_of_set)
  1.2517  
  1.2518 @@ -6779,59 +6977,59 @@
  1.2519     set_of_list (list_of_set x) = x & LENGTH (list_of_set x) = CARD x"
  1.2520    by (import hollight LIST_OF_SET_PROPERTIES)
  1.2521  
  1.2522 -lemma SET_OF_LIST_OF_SET: "ALL s::'q_45826::type => bool. FINITE s --> set_of_list (list_of_set s) = s"
  1.2523 +lemma SET_OF_LIST_OF_SET: "ALL s::'q_46035::type => bool. FINITE s --> set_of_list (list_of_set s) = s"
  1.2524    by (import hollight SET_OF_LIST_OF_SET)
  1.2525  
  1.2526 -lemma LENGTH_LIST_OF_SET: "ALL s::'q_45842::type => bool. FINITE s --> LENGTH (list_of_set s) = CARD s"
  1.2527 +lemma LENGTH_LIST_OF_SET: "ALL s::'q_46051::type => bool. FINITE s --> LENGTH (list_of_set s) = CARD s"
  1.2528    by (import hollight LENGTH_LIST_OF_SET)
  1.2529  
  1.2530  lemma MEM_LIST_OF_SET: "ALL s::'A::type => bool.
  1.2531     FINITE s --> (ALL x::'A::type. MEM x (list_of_set s) = IN x s)"
  1.2532    by (import hollight MEM_LIST_OF_SET)
  1.2533  
  1.2534 -lemma FINITE_SET_OF_LIST: "ALL l::'q_45887::type hollight.list. FINITE (set_of_list l)"
  1.2535 +lemma FINITE_SET_OF_LIST: "ALL l::'q_46096::type hollight.list. FINITE (set_of_list l)"
  1.2536    by (import hollight FINITE_SET_OF_LIST)
  1.2537  
  1.2538 -lemma IN_SET_OF_LIST: "ALL (x::'q_45905::type) l::'q_45905::type hollight.list.
  1.2539 +lemma IN_SET_OF_LIST: "ALL (x::'q_46114::type) l::'q_46114::type hollight.list.
  1.2540     IN x (set_of_list l) = MEM x l"
  1.2541    by (import hollight IN_SET_OF_LIST)
  1.2542  
  1.2543 -lemma SET_OF_LIST_APPEND: "ALL (x::'q_45930::type hollight.list) xa::'q_45930::type hollight.list.
  1.2544 +lemma SET_OF_LIST_APPEND: "ALL (x::'q_46139::type hollight.list) xa::'q_46139::type hollight.list.
  1.2545     set_of_list (APPEND x xa) =
  1.2546     hollight.UNION (set_of_list x) (set_of_list xa)"
  1.2547    by (import hollight SET_OF_LIST_APPEND)
  1.2548  
  1.2549  constdefs
  1.2550 -  pairwise :: "('q_45989 => 'q_45989 => bool) => ('q_45989 => bool) => bool" 
  1.2551 +  pairwise :: "('q_46198 => 'q_46198 => bool) => ('q_46198 => bool) => bool" 
  1.2552    "pairwise ==
  1.2553 -%(u::'q_45989::type => 'q_45989::type => bool) ua::'q_45989::type => bool.
  1.2554 -   ALL (x::'q_45989::type) y::'q_45989::type.
  1.2555 +%(u::'q_46198::type => 'q_46198::type => bool) ua::'q_46198::type => bool.
  1.2556 +   ALL (x::'q_46198::type) y::'q_46198::type.
  1.2557        IN x ua & IN y ua & x ~= y --> u x y"
  1.2558  
  1.2559  lemma DEF_pairwise: "pairwise =
  1.2560 -(%(u::'q_45989::type => 'q_45989::type => bool) ua::'q_45989::type => bool.
  1.2561 -    ALL (x::'q_45989::type) y::'q_45989::type.
  1.2562 +(%(u::'q_46198::type => 'q_46198::type => bool) ua::'q_46198::type => bool.
  1.2563 +    ALL (x::'q_46198::type) y::'q_46198::type.
  1.2564         IN x ua & IN y ua & x ~= y --> u x y)"
  1.2565    by (import hollight DEF_pairwise)
  1.2566  
  1.2567  constdefs
  1.2568 -  PAIRWISE :: "('q_46011 => 'q_46011 => bool) => 'q_46011 hollight.list => bool" 
  1.2569 +  PAIRWISE :: "('q_46220 => 'q_46220 => bool) => 'q_46220 hollight.list => bool" 
  1.2570    "PAIRWISE ==
  1.2571 -SOME PAIRWISE::('q_46011::type => 'q_46011::type => bool)
  1.2572 -               => 'q_46011::type hollight.list => bool.
  1.2573 -   (ALL r::'q_46011::type => 'q_46011::type => bool.
  1.2574 +SOME PAIRWISE::('q_46220::type => 'q_46220::type => bool)
  1.2575 +               => 'q_46220::type hollight.list => bool.
  1.2576 +   (ALL r::'q_46220::type => 'q_46220::type => bool.
  1.2577         PAIRWISE r NIL = True) &
  1.2578 -   (ALL (h::'q_46011::type) (r::'q_46011::type => 'q_46011::type => bool)
  1.2579 -       t::'q_46011::type hollight.list.
  1.2580 +   (ALL (h::'q_46220::type) (r::'q_46220::type => 'q_46220::type => bool)
  1.2581 +       t::'q_46220::type hollight.list.
  1.2582         PAIRWISE r (CONS h t) = (ALL_list (r h) t & PAIRWISE r t))"
  1.2583  
  1.2584  lemma DEF_PAIRWISE: "PAIRWISE =
  1.2585 -(SOME PAIRWISE::('q_46011::type => 'q_46011::type => bool)
  1.2586 -                => 'q_46011::type hollight.list => bool.
  1.2587 -    (ALL r::'q_46011::type => 'q_46011::type => bool.
  1.2588 +(SOME PAIRWISE::('q_46220::type => 'q_46220::type => bool)
  1.2589 +                => 'q_46220::type hollight.list => bool.
  1.2590 +    (ALL r::'q_46220::type => 'q_46220::type => bool.
  1.2591          PAIRWISE r NIL = True) &
  1.2592 -    (ALL (h::'q_46011::type) (r::'q_46011::type => 'q_46011::type => bool)
  1.2593 -        t::'q_46011::type hollight.list.
  1.2594 +    (ALL (h::'q_46220::type) (r::'q_46220::type => 'q_46220::type => bool)
  1.2595 +        t::'q_46220::type hollight.list.
  1.2596          PAIRWISE r (CONS h t) = (ALL_list (r h) t & PAIRWISE r t)))"
  1.2597    by (import hollight DEF_PAIRWISE)
  1.2598  
  1.2599 @@ -7054,15 +7252,15 @@
  1.2600     OF type_definition_cart]
  1.2601  
  1.2602  consts
  1.2603 -  "$" :: "('q_46418, 'q_46425) cart => nat => 'q_46418" ("$")
  1.2604 +  "$" :: "('q_46627, 'q_46634) cart => nat => 'q_46627" ("$")
  1.2605  
  1.2606  defs
  1.2607    "$_def": "$ ==
  1.2608 -%(u::('q_46418::type, 'q_46425::type) cart) ua::nat.
  1.2609 +%(u::('q_46627::type, 'q_46634::type) cart) ua::nat.
  1.2610     dest_cart u (finite_index ua)"
  1.2611  
  1.2612  lemma "DEF_$": "$ =
  1.2613 -(%(u::('q_46418::type, 'q_46425::type) cart) ua::nat.
  1.2614 +(%(u::('q_46627::type, 'q_46634::type) cart) ua::nat.
  1.2615      dest_cart u (finite_index ua))"
  1.2616    by (import hollight "DEF_$")
  1.2617  
  1.2618 @@ -7169,15 +7367,15 @@
  1.2619               x)))"
  1.2620    by (import hollight LAMBDA_UNIQUE)
  1.2621  
  1.2622 -lemma LAMBDA_ETA: "ALL x::('q_46616::type, 'q_46620::type) cart. lambda ($ x) = x"
  1.2623 +lemma LAMBDA_ETA: "ALL x::('q_46825::type, 'q_46829::type) cart. lambda ($ x) = x"
  1.2624    by (import hollight LAMBDA_ETA)
  1.2625  
  1.2626 -typedef (open) ('A, 'B) finite_sum = "(Collect::(('A::type finite_image, 'B::type finite_image) sum => bool)
  1.2627 -          => ('A::type finite_image, 'B::type finite_image) sum set)
  1.2628 - (%x::('A::type finite_image, 'B::type finite_image) sum. True::bool)"  morphisms "dest_finite_sum" "mk_finite_sum"
  1.2629 -  apply (rule light_ex_imp_nonempty[where t="(Eps::(('A::type finite_image, 'B::type finite_image) sum => bool)
  1.2630 -      => ('A::type finite_image, 'B::type finite_image) sum)
  1.2631 - (%x::('A::type finite_image, 'B::type finite_image) sum. True::bool)"])
  1.2632 +typedef (open) ('A, 'B) finite_sum = "(Collect::('A::type finite_image + 'B::type finite_image => bool)
  1.2633 +          => ('A::type finite_image + 'B::type finite_image) set)
  1.2634 + (%x::'A::type finite_image + 'B::type finite_image. True::bool)"  morphisms "dest_finite_sum" "mk_finite_sum"
  1.2635 +  apply (rule light_ex_imp_nonempty[where t="(Eps::('A::type finite_image + 'B::type finite_image => bool)
  1.2636 +      => 'A::type finite_image + 'B::type finite_image)
  1.2637 + (%x::'A::type finite_image + 'B::type finite_image. True::bool)"])
  1.2638    by (import hollight TYDEF_finite_sum)
  1.2639  
  1.2640  syntax
  1.2641 @@ -7310,25 +7508,25 @@
  1.2642     sndcart (pastecart x xa) = xa"
  1.2643    by (import hollight SNDCART_PASTECART)
  1.2644  
  1.2645 -lemma PASTECART_FST_SND: "ALL x::('q_46940::type, ('q_46937::type, 'q_46935::type) finite_sum) cart.
  1.2646 +lemma PASTECART_FST_SND: "ALL x::('q_47149::type, ('q_47146::type, 'q_47144::type) finite_sum) cart.
  1.2647     pastecart (fstcart x) (sndcart x) = x"
  1.2648    by (import hollight PASTECART_FST_SND)
  1.2649  
  1.2650 -lemma PASTECART_EQ: "ALL (x::('q_46978::type, ('q_46968::type, 'q_46979::type) finite_sum) cart)
  1.2651 -   y::('q_46978::type, ('q_46968::type, 'q_46979::type) finite_sum) cart.
  1.2652 +lemma PASTECART_EQ: "ALL (x::('q_47187::type, ('q_47177::type, 'q_47188::type) finite_sum) cart)
  1.2653 +   y::('q_47187::type, ('q_47177::type, 'q_47188::type) finite_sum) cart.
  1.2654     (x = y) = (fstcart x = fstcart y & sndcart x = sndcart y)"
  1.2655    by (import hollight PASTECART_EQ)
  1.2656  
  1.2657 -lemma FORALL_PASTECART: "All (P::('q_46999::type, ('q_47000::type, 'q_47001::type) finite_sum) cart
  1.2658 +lemma FORALL_PASTECART: "All (P::('q_47208::type, ('q_47209::type, 'q_47210::type) finite_sum) cart
  1.2659          => bool) =
  1.2660 -(ALL (x::('q_46999::type, 'q_47000::type) cart)
  1.2661 -    y::('q_46999::type, 'q_47001::type) cart. P (pastecart x y))"
  1.2662 +(ALL (x::('q_47208::type, 'q_47209::type) cart)
  1.2663 +    y::('q_47208::type, 'q_47210::type) cart. P (pastecart x y))"
  1.2664    by (import hollight FORALL_PASTECART)
  1.2665  
  1.2666 -lemma EXISTS_PASTECART: "Ex (P::('q_47021::type, ('q_47022::type, 'q_47023::type) finite_sum) cart
  1.2667 +lemma EXISTS_PASTECART: "Ex (P::('q_47230::type, ('q_47231::type, 'q_47232::type) finite_sum) cart
  1.2668         => bool) =
  1.2669 -(EX (x::('q_47021::type, 'q_47022::type) cart)
  1.2670 -    y::('q_47021::type, 'q_47023::type) cart. P (pastecart x y))"
  1.2671 +(EX (x::('q_47230::type, 'q_47231::type) cart)
  1.2672 +    y::('q_47230::type, 'q_47232::type) cart. P (pastecart x y))"
  1.2673    by (import hollight EXISTS_PASTECART)
  1.2674  
  1.2675  lemma SURJECTIVE_IFF_INJECTIVE_GEN: "ALL (s::'A::type => bool) (t::'B::type => bool) f::'A::type => 'B::type.
  1.2676 @@ -7349,9 +7547,9 @@
  1.2677     (ALL (x::'A::type) y::'A::type. IN x s & IN y s & f x = f y --> x = y)"
  1.2678    by (import hollight IMAGE_IMP_INJECTIVE_GEN)
  1.2679  
  1.2680 -lemma IMAGE_IMP_INJECTIVE: "ALL (s::'q_47348::type => bool) f::'q_47348::type => 'q_47348::type.
  1.2681 +lemma IMAGE_IMP_INJECTIVE: "ALL (s::'q_47557::type => bool) f::'q_47557::type => 'q_47557::type.
  1.2682     FINITE s & IMAGE f s = s -->
  1.2683 -   (ALL (x::'q_47348::type) y::'q_47348::type.
  1.2684 +   (ALL (x::'q_47557::type) y::'q_47557::type.
  1.2685         IN x s & IN y s & f x = f y --> x = y)"
  1.2686    by (import hollight IMAGE_IMP_INJECTIVE)
  1.2687  
  1.2688 @@ -7363,59 +7561,59 @@
  1.2689             IN xa x & IN y x & f xa = f y --> xa = y))"
  1.2690    by (import hollight CARD_LE_INJ)
  1.2691  
  1.2692 -lemma FORALL_IN_CLAUSES: "(ALL x::'q_47454::type => bool.
  1.2693 -    (ALL xa::'q_47454::type. IN xa EMPTY --> x xa) = True) &
  1.2694 -(ALL (x::'q_47494::type => bool) (xa::'q_47494::type)
  1.2695 -    xb::'q_47494::type => bool.
  1.2696 -    (ALL xc::'q_47494::type. IN xc (INSERT xa xb) --> x xc) =
  1.2697 -    (x xa & (ALL xa::'q_47494::type. IN xa xb --> x xa)))"
  1.2698 +lemma FORALL_IN_CLAUSES: "(ALL x::'q_47663::type => bool.
  1.2699 +    (ALL xa::'q_47663::type. IN xa EMPTY --> x xa) = True) &
  1.2700 +(ALL (x::'q_47703::type => bool) (xa::'q_47703::type)
  1.2701 +    xb::'q_47703::type => bool.
  1.2702 +    (ALL xc::'q_47703::type. IN xc (INSERT xa xb) --> x xc) =
  1.2703 +    (x xa & (ALL xa::'q_47703::type. IN xa xb --> x xa)))"
  1.2704    by (import hollight FORALL_IN_CLAUSES)
  1.2705  
  1.2706 -lemma EXISTS_IN_CLAUSES: "(ALL x::'q_47514::type => bool.
  1.2707 -    (EX xa::'q_47514::type. IN xa EMPTY & x xa) = False) &
  1.2708 -(ALL (x::'q_47554::type => bool) (xa::'q_47554::type)
  1.2709 -    xb::'q_47554::type => bool.
  1.2710 -    (EX xc::'q_47554::type. IN xc (INSERT xa xb) & x xc) =
  1.2711 -    (x xa | (EX xa::'q_47554::type. IN xa xb & x xa)))"
  1.2712 +lemma EXISTS_IN_CLAUSES: "(ALL x::'q_47723::type => bool.
  1.2713 +    (EX xa::'q_47723::type. IN xa EMPTY & x xa) = False) &
  1.2714 +(ALL (x::'q_47763::type => bool) (xa::'q_47763::type)
  1.2715 +    xb::'q_47763::type => bool.
  1.2716 +    (EX xc::'q_47763::type. IN xc (INSERT xa xb) & x xc) =
  1.2717 +    (x xa | (EX xa::'q_47763::type. IN xa xb & x xa)))"
  1.2718    by (import hollight EXISTS_IN_CLAUSES)
  1.2719  
  1.2720 -lemma SURJECTIVE_ON_RIGHT_INVERSE: "ALL (x::'q_47610::type => 'q_47611::type) xa::'q_47611::type => bool.
  1.2721 -   (ALL xb::'q_47611::type.
  1.2722 +lemma SURJECTIVE_ON_RIGHT_INVERSE: "ALL (x::'q_47819::type => 'q_47820::type) xa::'q_47820::type => bool.
  1.2723 +   (ALL xb::'q_47820::type.
  1.2724         IN xb xa -->
  1.2725 -       (EX xa::'q_47610::type.
  1.2726 -           IN xa (s::'q_47610::type => bool) & x xa = xb)) =
  1.2727 -   (EX g::'q_47611::type => 'q_47610::type.
  1.2728 -       ALL y::'q_47611::type. IN y xa --> IN (g y) s & x (g y) = y)"
  1.2729 +       (EX xa::'q_47819::type.
  1.2730 +           IN xa (s::'q_47819::type => bool) & x xa = xb)) =
  1.2731 +   (EX g::'q_47820::type => 'q_47819::type.
  1.2732 +       ALL y::'q_47820::type. IN y xa --> IN (g y) s & x (g y) = y)"
  1.2733    by (import hollight SURJECTIVE_ON_RIGHT_INVERSE)
  1.2734  
  1.2735 -lemma INJECTIVE_ON_LEFT_INVERSE: "ALL (x::'q_47704::type => 'q_47707::type) xa::'q_47704::type => bool.
  1.2736 -   (ALL (xb::'q_47704::type) y::'q_47704::type.
  1.2737 +lemma INJECTIVE_ON_LEFT_INVERSE: "ALL (x::'q_47913::type => 'q_47916::type) xa::'q_47913::type => bool.
  1.2738 +   (ALL (xb::'q_47913::type) y::'q_47913::type.
  1.2739         IN xb xa & IN y xa & x xb = x y --> xb = y) =
  1.2740 -   (EX xb::'q_47707::type => 'q_47704::type.
  1.2741 -       ALL xc::'q_47704::type. IN xc xa --> xb (x xc) = xc)"
  1.2742 +   (EX xb::'q_47916::type => 'q_47913::type.
  1.2743 +       ALL xc::'q_47913::type. IN xc xa --> xb (x xc) = xc)"
  1.2744    by (import hollight INJECTIVE_ON_LEFT_INVERSE)
  1.2745  
  1.2746 -lemma SURJECTIVE_RIGHT_INVERSE: "(ALL y::'q_47732::type.
  1.2747 -    EX x::'q_47735::type. (f::'q_47735::type => 'q_47732::type) x = y) =
  1.2748 -(EX g::'q_47732::type => 'q_47735::type. ALL y::'q_47732::type. f (g y) = y)"
  1.2749 +lemma SURJECTIVE_RIGHT_INVERSE: "(ALL y::'q_47941::type.
  1.2750 +    EX x::'q_47944::type. (f::'q_47944::type => 'q_47941::type) x = y) =
  1.2751 +(EX g::'q_47941::type => 'q_47944::type. ALL y::'q_47941::type. f (g y) = y)"
  1.2752    by (import hollight SURJECTIVE_RIGHT_INVERSE)
  1.2753  
  1.2754 -lemma INJECTIVE_LEFT_INVERSE: "(ALL (x::'q_47769::type) xa::'q_47769::type.
  1.2755 -    (f::'q_47769::type => 'q_47772::type) x = f xa --> x = xa) =
  1.2756 -(EX g::'q_47772::type => 'q_47769::type. ALL x::'q_47769::type. g (f x) = x)"
  1.2757 +lemma INJECTIVE_LEFT_INVERSE: "(ALL (x::'q_47978::type) xa::'q_47978::type.
  1.2758 +    (f::'q_47978::type => 'q_47981::type) x = f xa --> x = xa) =
  1.2759 +(EX g::'q_47981::type => 'q_47978::type. ALL x::'q_47978::type. g (f x) = x)"
  1.2760    by (import hollight INJECTIVE_LEFT_INVERSE)
  1.2761  
  1.2762 -lemma FUNCTION_FACTORS_RIGHT: "ALL (x::'q_47808::type => 'q_47809::type)
  1.2763 -   xa::'q_47796::type => 'q_47809::type.
  1.2764 -   (ALL xb::'q_47808::type. EX y::'q_47796::type. xa y = x xb) =
  1.2765 -   (EX xb::'q_47808::type => 'q_47796::type. x = xa o xb)"
  1.2766 +lemma FUNCTION_FACTORS_RIGHT: "ALL (x::'q_48017::type => 'q_48018::type)
  1.2767 +   xa::'q_48005::type => 'q_48018::type.
  1.2768 +   (ALL xb::'q_48017::type. EX y::'q_48005::type. xa y = x xb) =
  1.2769 +   (EX xb::'q_48017::type => 'q_48005::type. x = xa o xb)"
  1.2770    by (import hollight FUNCTION_FACTORS_RIGHT)
  1.2771  
  1.2772 -lemma FUNCTION_FACTORS_LEFT: "ALL (x::'q_47881::type => 'q_47882::type)
  1.2773 -   xa::'q_47881::type => 'q_47861::type.
  1.2774 -   (ALL (xb::'q_47881::type) y::'q_47881::type.
  1.2775 +lemma FUNCTION_FACTORS_LEFT: "ALL (x::'q_48090::type => 'q_48091::type)
  1.2776 +   xa::'q_48090::type => 'q_48070::type.
  1.2777 +   (ALL (xb::'q_48090::type) y::'q_48090::type.
  1.2778         xa xb = xa y --> x xb = x y) =
  1.2779 -   (EX xb::'q_47861::type => 'q_47882::type. x = xb o xa)"
  1.2780 +   (EX xb::'q_48070::type => 'q_48091::type. x = xb o xa)"
  1.2781    by (import hollight FUNCTION_FACTORS_LEFT)
  1.2782  
  1.2783  constdefs
  1.2784 @@ -7432,12 +7630,12 @@
  1.2785  lemma FINITE_NUMSEG: "ALL (m::nat) n::nat. FINITE (dotdot m n)"
  1.2786    by (import hollight FINITE_NUMSEG)
  1.2787  
  1.2788 -lemma NUMSEG_COMBINE_R: "ALL (x::'q_47957::type) (p::nat) m::nat.
  1.2789 +lemma NUMSEG_COMBINE_R: "ALL (x::'q_48166::type) (p::nat) m::nat.
  1.2790     <= m p & <= p (n::nat) -->
  1.2791     hollight.UNION (dotdot m p) (dotdot (p + NUMERAL_BIT1 0) n) = dotdot m n"
  1.2792    by (import hollight NUMSEG_COMBINE_R)
  1.2793  
  1.2794 -lemma NUMSEG_COMBINE_L: "ALL (x::'q_47995::type) (p::nat) m::nat.
  1.2795 +lemma NUMSEG_COMBINE_L: "ALL (x::'q_48204::type) (p::nat) m::nat.
  1.2796     <= m p & <= p (n::nat) -->
  1.2797     hollight.UNION (dotdot m (p - NUMERAL_BIT1 0)) (dotdot p n) = dotdot m n"
  1.2798    by (import hollight NUMSEG_COMBINE_L)
  1.2799 @@ -7521,14 +7719,14 @@
  1.2800    by (import hollight SUBSET_NUMSEG)
  1.2801  
  1.2802  constdefs
  1.2803 -  neutral :: "('q_48776 => 'q_48776 => 'q_48776) => 'q_48776" 
  1.2804 +  neutral :: "('q_48985 => 'q_48985 => 'q_48985) => 'q_48985" 
  1.2805    "neutral ==
  1.2806 -%u::'q_48776::type => 'q_48776::type => 'q_48776::type.
  1.2807 -   SOME x::'q_48776::type. ALL y::'q_48776::type. u x y = y & u y x = y"
  1.2808 +%u::'q_48985::type => 'q_48985::type => 'q_48985::type.
  1.2809 +   SOME x::'q_48985::type. ALL y::'q_48985::type. u x y = y & u y x = y"
  1.2810  
  1.2811  lemma DEF_neutral: "neutral =
  1.2812 -(%u::'q_48776::type => 'q_48776::type => 'q_48776::type.
  1.2813 -    SOME x::'q_48776::type. ALL y::'q_48776::type. u x y = y & u y x = y)"
  1.2814 +(%u::'q_48985::type => 'q_48985::type => 'q_48985::type.
  1.2815 +    SOME x::'q_48985::type. ALL y::'q_48985::type. u x y = y & u y x = y)"
  1.2816    by (import hollight DEF_neutral)
  1.2817  
  1.2818  constdefs
  1.2819 @@ -7566,187 +7764,187 @@
  1.2820    by (import hollight DEF_support)
  1.2821  
  1.2822  constdefs
  1.2823 -  iterate :: "('q_48881 => 'q_48881 => 'q_48881)
  1.2824 -=> ('A => bool) => ('A => 'q_48881) => 'q_48881" 
  1.2825 +  iterate :: "('q_49090 => 'q_49090 => 'q_49090)
  1.2826 +=> ('A => bool) => ('A => 'q_49090) => 'q_49090" 
  1.2827    "iterate ==
  1.2828 -%(u::'q_48881::type => 'q_48881::type => 'q_48881::type)
  1.2829 -   (ua::'A::type => bool) ub::'A::type => 'q_48881::type.
  1.2830 +%(u::'q_49090::type => 'q_49090::type => 'q_49090::type)
  1.2831 +   (ua::'A::type => bool) ub::'A::type => 'q_49090::type.
  1.2832     ITSET (%x::'A::type. u (ub x)) (support u ub ua) (neutral u)"
  1.2833  
  1.2834  lemma DEF_iterate: "iterate =
  1.2835 -(%(u::'q_48881::type => 'q_48881::type => 'q_48881::type)
  1.2836 -    (ua::'A::type => bool) ub::'A::type => 'q_48881::type.
  1.2837 +(%(u::'q_49090::type => 'q_49090::type => 'q_49090::type)
  1.2838 +    (ua::'A::type => bool) ub::'A::type => 'q_49090::type.
  1.2839      ITSET (%x::'A::type. u (ub x)) (support u ub ua) (neutral u))"
  1.2840    by (import hollight DEF_iterate)
  1.2841  
  1.2842 -lemma IN_SUPPORT: "ALL (x::'q_48924::type => 'q_48924::type => 'q_48924::type)
  1.2843 -   (xa::'q_48927::type => 'q_48924::type) (xb::'q_48927::type)
  1.2844 -   xc::'q_48927::type => bool.
  1.2845 +lemma IN_SUPPORT: "ALL (x::'q_49133::type => 'q_49133::type => 'q_49133::type)
  1.2846 +   (xa::'q_49136::type => 'q_49133::type) (xb::'q_49136::type)
  1.2847 +   xc::'q_49136::type => bool.
  1.2848     IN xb (support x xa xc) = (IN xb xc & xa xb ~= neutral x)"
  1.2849    by (import hollight IN_SUPPORT)
  1.2850  
  1.2851 -lemma SUPPORT_SUPPORT: "ALL (x::'q_48949::type => 'q_48949::type => 'q_48949::type)
  1.2852 -   (xa::'q_48960::type => 'q_48949::type) xb::'q_48960::type => bool.
  1.2853 +lemma SUPPORT_SUPPORT: "ALL (x::'q_49158::type => 'q_49158::type => 'q_49158::type)
  1.2854 +   (xa::'q_49169::type => 'q_49158::type) xb::'q_49169::type => bool.
  1.2855     support x xa (support x xa xb) = support x xa xb"
  1.2856    by (import hollight SUPPORT_SUPPORT)
  1.2857  
  1.2858 -lemma SUPPORT_EMPTY: "ALL (x::'q_48985::type => 'q_48985::type => 'q_48985::type)
  1.2859 -   (xa::'q_48999::type => 'q_48985::type) xb::'q_48999::type => bool.
  1.2860 -   (ALL xc::'q_48999::type. IN xc xb --> xa xc = neutral x) =
  1.2861 +lemma SUPPORT_EMPTY: "ALL (x::'q_49194::type => 'q_49194::type => 'q_49194::type)
  1.2862 +   (xa::'q_49208::type => 'q_49194::type) xb::'q_49208::type => bool.
  1.2863 +   (ALL xc::'q_49208::type. IN xc xb --> xa xc = neutral x) =
  1.2864     (support x xa xb = EMPTY)"
  1.2865    by (import hollight SUPPORT_EMPTY)
  1.2866  
  1.2867 -lemma SUPPORT_SUBSET: "ALL (x::'q_49019::type => 'q_49019::type => 'q_49019::type)
  1.2868 -   (xa::'q_49020::type => 'q_49019::type) xb::'q_49020::type => bool.
  1.2869 +lemma SUPPORT_SUBSET: "ALL (x::'q_49228::type => 'q_49228::type => 'q_49228::type)
  1.2870 +   (xa::'q_49229::type => 'q_49228::type) xb::'q_49229::type => bool.
  1.2871     SUBSET (support x xa xb) xb"
  1.2872    by (import hollight SUPPORT_SUBSET)
  1.2873  
  1.2874 -lemma FINITE_SUPPORT: "ALL (u::'q_49043::type => 'q_49043::type => 'q_49043::type)
  1.2875 -   (f::'q_49037::type => 'q_49043::type) s::'q_49037::type => bool.
  1.2876 +lemma FINITE_SUPPORT: "ALL (u::'q_49252::type => 'q_49252::type => 'q_49252::type)
  1.2877 +   (f::'q_49246::type => 'q_49252::type) s::'q_49246::type => bool.
  1.2878     FINITE s --> FINITE (support u f s)"
  1.2879    by (import hollight FINITE_SUPPORT)
  1.2880  
  1.2881 -lemma SUPPORT_CLAUSES: "(ALL x::'q_49061::type => 'q_49091::type.
  1.2882 -    support (u_4215::'q_49091::type => 'q_49091::type => 'q_49091::type) x
  1.2883 +lemma SUPPORT_CLAUSES: "(ALL x::'q_49270::type => 'q_49300::type.
  1.2884 +    support (u_4247::'q_49300::type => 'q_49300::type => 'q_49300::type) x
  1.2885       EMPTY =
  1.2886      EMPTY) &
  1.2887 -(ALL (x::'q_49109::type => 'q_49091::type) (xa::'q_49109::type)
  1.2888 -    xb::'q_49109::type => bool.
  1.2889 -    support u_4215 x (INSERT xa xb) =
  1.2890 -    COND (x xa = neutral u_4215) (support u_4215 x xb)
  1.2891 -     (INSERT xa (support u_4215 x xb))) &
  1.2892 -(ALL (x::'q_49142::type => 'q_49091::type) (xa::'q_49142::type)
  1.2893 -    xb::'q_49142::type => bool.
  1.2894 -    support u_4215 x (DELETE xb xa) = DELETE (support u_4215 x xb) xa) &
  1.2895 -(ALL (x::'q_49180::type => 'q_49091::type) (xa::'q_49180::type => bool)
  1.2896 -    xb::'q_49180::type => bool.
  1.2897 -    support u_4215 x (hollight.UNION xa xb) =
  1.2898 -    hollight.UNION (support u_4215 x xa) (support u_4215 x xb)) &
  1.2899 -(ALL (x::'q_49218::type => 'q_49091::type) (xa::'q_49218::type => bool)
  1.2900 -    xb::'q_49218::type => bool.
  1.2901 -    support u_4215 x (hollight.INTER xa xb) =
  1.2902 -    hollight.INTER (support u_4215 x xa) (support u_4215 x xb)) &
  1.2903 -(ALL (x::'q_49254::type => 'q_49091::type) (xa::'q_49254::type => bool)
  1.2904 -    xb::'q_49254::type => bool.
  1.2905 -    support u_4215 x (DIFF xa xb) =
  1.2906 -    DIFF (support u_4215 x xa) (support u_4215 x xb))"
  1.2907 +(ALL (x::'q_49318::type => 'q_49300::type) (xa::'q_49318::type)
  1.2908 +    xb::'q_49318::type => bool.
  1.2909 +    support u_4247 x (INSERT xa xb) =
  1.2910 +    COND (x xa = neutral u_4247) (support u_4247 x xb)
  1.2911 +     (INSERT xa (support u_4247 x xb))) &
  1.2912 +(ALL (x::'q_49351::type => 'q_49300::type) (xa::'q_49351::type)
  1.2913 +    xb::'q_49351::type => bool.
  1.2914 +    support u_4247 x (DELETE xb xa) = DELETE (support u_4247 x xb) xa) &
  1.2915 +(ALL (x::'q_49389::type => 'q_49300::type) (xa::'q_49389::type => bool)
  1.2916 +    xb::'q_49389::type => bool.
  1.2917 +    support u_4247 x (hollight.UNION xa xb) =
  1.2918 +    hollight.UNION (support u_4247 x xa) (support u_4247 x xb)) &
  1.2919 +(ALL (x::'q_49427::type => 'q_49300::type) (xa::'q_49427::type => bool)
  1.2920 +    xb::'q_49427::type => bool.
  1.2921 +    support u_4247 x (hollight.INTER xa xb) =
  1.2922 +    hollight.INTER (support u_4247 x xa) (support u_4247 x xb)) &
  1.2923 +(ALL (x::'q_49463::type => 'q_49300::type) (xa::'q_49463::type => bool)
  1.2924 +    xb::'q_49463::type => bool.
  1.2925 +    support u_4247 x (DIFF xa xb) =
  1.2926 +    DIFF (support u_4247 x xa) (support u_4247 x xb))"
  1.2927    by (import hollight SUPPORT_CLAUSES)
  1.2928  
  1.2929 -lemma ITERATE_SUPPORT: "ALL (x::'q_49275::type => 'q_49275::type => 'q_49275::type)
  1.2930 -   (xa::'q_49276::type => 'q_49275::type) xb::'q_49276::type => bool.
  1.2931 +lemma ITERATE_SUPPORT: "ALL (x::'q_49484::type => 'q_49484::type => 'q_49484::type)
  1.2932 +   (xa::'q_49485::type => 'q_49484::type) xb::'q_49485::type => bool.
  1.2933     FINITE (support x xa xb) -->
  1.2934     iterate x (support x xa xb) xa = iterate x xb xa"
  1.2935    by (import hollight ITERATE_SUPPORT)
  1.2936  
  1.2937 -lemma SUPPORT_DELTA: "ALL (x::'q_49320::type => 'q_49320::type => 'q_49320::type)
  1.2938 -   (xa::'q_49348::type => bool) (xb::'q_49348::type => 'q_49320::type)
  1.2939 -   xc::'q_49348::type.
  1.2940 -   support x (%xa::'q_49348::type. COND (xa = xc) (xb xa) (neutral x)) xa =
  1.2941 +lemma SUPPORT_DELTA: "ALL (x::'q_49529::type => 'q_49529::type => 'q_49529::type)
  1.2942 +   (xa::'q_49557::type => bool) (xb::'q_49557::type => 'q_49529::type)
  1.2943 +   xc::'q_49557::type.
  1.2944 +   support x (%xa::'q_49557::type. COND (xa = xc) (xb xa) (neutral x)) xa =
  1.2945     COND (IN xc xa) (support x xb (INSERT xc EMPTY)) EMPTY"
  1.2946    by (import hollight SUPPORT_DELTA)
  1.2947  
  1.2948 -lemma FINITE_SUPPORT_DELTA: "ALL (x::'q_49369::type => 'q_49369::type => 'q_49369::type)
  1.2949 -   (xa::'q_49378::type => 'q_49369::type) xb::'q_49378::type.
  1.2950 +lemma FINITE_SUPPORT_DELTA: "ALL (x::'q_49578::type => 'q_49578::type => 'q_49578::type)
  1.2951 +   (xa::'q_49587::type => 'q_49578::type) xb::'q_49587::type.
  1.2952     FINITE
  1.2953 -    (support x (%xc::'q_49378::type. COND (xc = xb) (xa xc) (neutral x))
  1.2954 -      (s::'q_49378::type => bool))"
  1.2955 +    (support x (%xc::'q_49587::type. COND (xc = xb) (xa xc) (neutral x))
  1.2956 +      (s::'q_49587::type => bool))"
  1.2957    by (import hollight FINITE_SUPPORT_DELTA)
  1.2958  
  1.2959 -lemma ITERATE_CLAUSES_GEN: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.2960 -   monoidal u_4215 -->
  1.2961 -   (ALL f::'A::type => 'B::type. iterate u_4215 EMPTY f = neutral u_4215) &
  1.2962 +lemma ITERATE_CLAUSES_GEN: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.2963 +   monoidal u_4247 -->
  1.2964 +   (ALL f::'A::type => 'B::type. iterate u_4247 EMPTY f = neutral u_4247) &
  1.2965     (ALL (f::'A::type => 'B::type) (x::'A::type) s::'A::type => bool.
  1.2966 -       monoidal u_4215 & FINITE (support u_4215 f s) -->
  1.2967 -       iterate u_4215 (INSERT x s) f =
  1.2968 -       COND (IN x s) (iterate u_4215 s f)
  1.2969 -        (u_4215 (f x) (iterate u_4215 s f)))"
  1.2970 +       monoidal u_4247 & FINITE (support u_4247 f s) -->
  1.2971 +       iterate u_4247 (INSERT x s) f =
  1.2972 +       COND (IN x s) (iterate u_4247 s f)
  1.2973 +        (u_4247 (f x) (iterate u_4247 s f)))"
  1.2974    by (import hollight ITERATE_CLAUSES_GEN)
  1.2975  
  1.2976 -lemma ITERATE_CLAUSES: "ALL x::'q_49546::type => 'q_49546::type => 'q_49546::type.
  1.2977 +lemma ITERATE_CLAUSES: "ALL x::'q_49755::type => 'q_49755::type => 'q_49755::type.
  1.2978     monoidal x -->
  1.2979 -   (ALL f::'q_49504::type => 'q_49546::type.
  1.2980 +   (ALL f::'q_49713::type => 'q_49755::type.
  1.2981         iterate x EMPTY f = neutral x) &
  1.2982 -   (ALL (f::'q_49548::type => 'q_49546::type) (xa::'q_49548::type)
  1.2983 -       s::'q_49548::type => bool.
  1.2984 +   (ALL (f::'q_49757::type => 'q_49755::type) (xa::'q_49757::type)
  1.2985 +       s::'q_49757::type => bool.
  1.2986         FINITE s -->
  1.2987         iterate x (INSERT xa s) f =
  1.2988         COND (IN xa s) (iterate x s f) (x (f xa) (iterate x s f)))"
  1.2989    by (import hollight ITERATE_CLAUSES)
  1.2990  
  1.2991 -lemma ITERATE_UNION: "ALL u_4215::'q_49634::type => 'q_49634::type => 'q_49634::type.
  1.2992 -   monoidal u_4215 -->
  1.2993 -   (ALL (f::'q_49619::type => 'q_49634::type) (s::'q_49619::type => bool)
  1.2994 -       x::'q_49619::type => bool.
  1.2995 +lemma ITERATE_UNION: "ALL u_4247::'q_49843::type => 'q_49843::type => 'q_49843::type.
  1.2996 +   monoidal u_4247 -->
  1.2997 +   (ALL (f::'q_49828::type => 'q_49843::type) (s::'q_49828::type => bool)
  1.2998 +       x::'q_49828::type => bool.
  1.2999         FINITE s & FINITE x & DISJOINT s x -->
  1.3000 -       iterate u_4215 (hollight.UNION s x) f =
  1.3001 -       u_4215 (iterate u_4215 s f) (iterate u_4215 x f))"
  1.3002 +       iterate u_4247 (hollight.UNION s x) f =
  1.3003 +       u_4247 (iterate u_4247 s f) (iterate u_4247 x f))"
  1.3004    by (import hollight ITERATE_UNION)
  1.3005  
  1.3006 -lemma ITERATE_UNION_GEN: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.3007 -   monoidal u_4215 -->
  1.3008 +lemma ITERATE_UNION_GEN: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3009 +   monoidal u_4247 -->
  1.3010     (ALL (f::'A::type => 'B::type) (s::'A::type => bool) t::'A::type => bool.
  1.3011 -       FINITE (support u_4215 f s) &
  1.3012 -       FINITE (support u_4215 f t) &
  1.3013 -       DISJOINT (support u_4215 f s) (support u_4215 f t) -->
  1.3014 -       iterate u_4215 (hollight.UNION s t) f =
  1.3015 -       u_4215 (iterate u_4215 s f) (iterate u_4215 t f))"
  1.3016 +       FINITE (support u_4247 f s) &
  1.3017 +       FINITE (support u_4247 f t) &
  1.3018 +       DISJOINT (support u_4247 f s) (support u_4247 f t) -->
  1.3019 +       iterate u_4247 (hollight.UNION s t) f =
  1.3020 +       u_4247 (iterate u_4247 s f) (iterate u_4247 t f))"
  1.3021    by (import hollight ITERATE_UNION_GEN)
  1.3022  
  1.3023 -lemma ITERATE_DIFF: "ALL u::'q_49777::type => 'q_49777::type => 'q_49777::type.
  1.3024 +lemma ITERATE_DIFF: "ALL u::'q_49986::type => 'q_49986::type => 'q_49986::type.
  1.3025     monoidal u -->
  1.3026 -   (ALL (f::'q_49773::type => 'q_49777::type) (s::'q_49773::type => bool)
  1.3027 -       t::'q_49773::type => bool.
  1.3028 +   (ALL (f::'q_49982::type => 'q_49986::type) (s::'q_49982::type => bool)
  1.3029 +       t::'q_49982::type => bool.
  1.3030         FINITE s & SUBSET t s -->
  1.3031         u (iterate u (DIFF s t) f) (iterate u t f) = iterate u s f)"
  1.3032    by (import hollight ITERATE_DIFF)
  1.3033  
  1.3034 -lemma ITERATE_DIFF_GEN: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.3035 -   monoidal u_4215 -->
  1.3036 +lemma ITERATE_DIFF_GEN: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3037 +   monoidal u_4247 -->
  1.3038     (ALL (f::'A::type => 'B::type) (s::'A::type => bool) t::'A::type => bool.
  1.3039 -       FINITE (support u_4215 f s) &
  1.3040 -       SUBSET (support u_4215 f t) (support u_4215 f s) -->
  1.3041 -       u_4215 (iterate u_4215 (DIFF s t) f) (iterate u_4215 t f) =
  1.3042 -       iterate u_4215 s f)"
  1.3043 +       FINITE (support u_4247 f s) &
  1.3044 +       SUBSET (support u_4247 f t) (support u_4247 f s) -->
  1.3045 +       u_4247 (iterate u_4247 (DIFF s t) f) (iterate u_4247 t f) =
  1.3046 +       iterate u_4247 s f)"
  1.3047    by (import hollight ITERATE_DIFF_GEN)
  1.3048  
  1.3049 -lemma ITERATE_CLOSED: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.3050 -   monoidal u_4215 -->
  1.3051 +lemma ITERATE_CLOSED: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3052 +   monoidal u_4247 -->
  1.3053     (ALL P::'B::type => bool.
  1.3054 -       P (neutral u_4215) &
  1.3055 -       (ALL (x::'B::type) y::'B::type. P x & P y --> P (u_4215 x y)) -->
  1.3056 +       P (neutral u_4247) &
  1.3057 +       (ALL (x::'B::type) y::'B::type. P x & P y --> P (u_4247 x y)) -->
  1.3058         (ALL (f::'A::type => 'B::type) x::'A::type => bool.
  1.3059             FINITE x & (ALL xa::'A::type. IN xa x --> P (f xa)) -->
  1.3060 -           P (iterate u_4215 x f)))"
  1.3061 +           P (iterate u_4247 x f)))"
  1.3062    by (import hollight ITERATE_CLOSED)
  1.3063  
  1.3064 -lemma ITERATE_CLOSED_GEN: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.3065 -   monoidal u_4215 -->
  1.3066 +lemma ITERATE_CLOSED_GEN: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3067 +   monoidal u_4247 -->
  1.3068     (ALL P::'B::type => bool.
  1.3069 -       P (neutral u_4215) &
  1.3070 -       (ALL (x::'B::type) y::'B::type. P x & P y --> P (u_4215 x y)) -->
  1.3071 +       P (neutral u_4247) &
  1.3072 +       (ALL (x::'B::type) y::'B::type. P x & P y --> P (u_4247 x y)) -->
  1.3073         (ALL (f::'A::type => 'B::type) s::'A::type => bool.
  1.3074 -           FINITE (support u_4215 f s) &
  1.3075 -           (ALL x::'A::type. IN x s & f x ~= neutral u_4215 --> P (f x)) -->
  1.3076 -           P (iterate u_4215 s f)))"
  1.3077 +           FINITE (support u_4247 f s) &
  1.3078 +           (ALL x::'A::type. IN x s & f x ~= neutral u_4247 --> P (f x)) -->
  1.3079 +           P (iterate u_4247 s f)))"
  1.3080    by (import hollight ITERATE_CLOSED_GEN)
  1.3081  
  1.3082 -lemma ITERATE_RELATED: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.3083 -   monoidal u_4215 -->
  1.3084 +lemma ITERATE_RELATED: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3085 +   monoidal u_4247 -->
  1.3086     (ALL R::'B::type => 'B::type => bool.
  1.3087 -       R (neutral u_4215) (neutral u_4215) &
  1.3088 +       R (neutral u_4247) (neutral u_4247) &
  1.3089         (ALL (x1::'B::type) (y1::'B::type) (x2::'B::type) y2::'B::type.
  1.3090 -           R x1 x2 & R y1 y2 --> R (u_4215 x1 y1) (u_4215 x2 y2)) -->
  1.3091 +           R x1 x2 & R y1 y2 --> R (u_4247 x1 y1) (u_4247 x2 y2)) -->
  1.3092         (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type)
  1.3093             x::'A::type => bool.
  1.3094             FINITE x & (ALL xa::'A::type. IN xa x --> R (f xa) (g xa)) -->
  1.3095 -           R (iterate u_4215 x f) (iterate u_4215 x g)))"
  1.3096 +           R (iterate u_4247 x f) (iterate u_4247 x g)))"
  1.3097    by (import hollight ITERATE_RELATED)
  1.3098  
  1.3099 -lemma ITERATE_EQ_NEUTRAL: "ALL u_4215::'B::type => 'B::type => 'B::type.
  1.3100 -   monoidal u_4215 -->
  1.3101 +lemma ITERATE_EQ_NEUTRAL: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3102 +   monoidal u_4247 -->
  1.3103     (ALL (f::'A::type => 'B::type) s::'A::type => bool.
  1.3104 -       (ALL x::'A::type. IN x s --> f x = neutral u_4215) -->
  1.3105 -       iterate u_4215 s f = neutral u_4215)"
  1.3106 +       (ALL x::'A::type. IN x s --> f x = neutral u_4247) -->
  1.3107 +       iterate u_4247 s f = neutral u_4247)"
  1.3108    by (import hollight ITERATE_EQ_NEUTRAL)
  1.3109  
  1.3110  lemma ITERATE_SING: "ALL x::'B::type => 'B::type => 'B::type.
  1.3111 @@ -7755,41 +7953,86 @@
  1.3112         iterate x (INSERT xa EMPTY) f = f xa)"
  1.3113    by (import hollight ITERATE_SING)
  1.3114  
  1.3115 -lemma ITERATE_DELTA: "ALL u_4215::'q_50229::type => 'q_50229::type => 'q_50229::type.
  1.3116 -   monoidal u_4215 -->
  1.3117 -   (ALL (x::'q_50248::type => 'q_50229::type) (xa::'q_50248::type)
  1.3118 -       xb::'q_50248::type => bool.
  1.3119 -       iterate u_4215 xb
  1.3120 -        (%xb::'q_50248::type. COND (xb = xa) (x xb) (neutral u_4215)) =
  1.3121 -       COND (IN xa xb) (x xa) (neutral u_4215))"
  1.3122 +lemma ITERATE_DELTA: "ALL u_4247::'q_50438::type => 'q_50438::type => 'q_50438::type.
  1.3123 +   monoidal u_4247 -->
  1.3124 +   (ALL (x::'q_50457::type => 'q_50438::type) (xa::'q_50457::type)
  1.3125 +       xb::'q_50457::type => bool.
  1.3126 +       iterate u_4247 xb
  1.3127 +        (%xb::'q_50457::type. COND (xb = xa) (x xb) (neutral u_4247)) =
  1.3128 +       COND (IN xa xb) (x xa) (neutral u_4247))"
  1.3129    by (import hollight ITERATE_DELTA)
  1.3130  
  1.3131 -lemma ITERATE_IMAGE: "ALL u_4215::'q_50327::type => 'q_50327::type => 'q_50327::type.
  1.3132 -   monoidal u_4215 -->
  1.3133 -   (ALL (f::'q_50326::type => 'q_50298::type)
  1.3134 -       (g::'q_50298::type => 'q_50327::type) x::'q_50326::type => bool.
  1.3135 +lemma ITERATE_IMAGE: "ALL u_4247::'q_50536::type => 'q_50536::type => 'q_50536::type.
  1.3136 +   monoidal u_4247 -->
  1.3137 +   (ALL (f::'q_50535::type => 'q_50507::type)
  1.3138 +       (g::'q_50507::type => 'q_50536::type) x::'q_50535::type => bool.
  1.3139         FINITE x &
  1.3140 -       (ALL (xa::'q_50326::type) y::'q_50326::type.
  1.3141 +       (ALL (xa::'q_50535::type) y::'q_50535::type.
  1.3142             IN xa x & IN y x & f xa = f y --> xa = y) -->
  1.3143 -       iterate u_4215 (IMAGE f x) g = iterate u_4215 x (g o f))"
  1.3144 +       iterate u_4247 (IMAGE f x) g = iterate u_4247 x (g o f))"
  1.3145    by (import hollight ITERATE_IMAGE)
  1.3146  
  1.3147 -constdefs
  1.3148 -  nsum :: "('q_50348 => bool) => ('q_50348 => nat) => nat" 
  1.3149 -  "(op ==::(('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3150 -        => (('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3151 +lemma ITERATE_BIJECTION: "ALL u_4247::'B::type => 'B::type => 'B::type.
  1.3152 +   monoidal u_4247 -->
  1.3153 +   (ALL (f::'A::type => 'B::type) (p::'A::type => 'A::type)
  1.3154 +       s::'A::type => bool.
  1.3155 +       FINITE s &
  1.3156 +       (ALL x::'A::type. IN x s --> IN (p x) s) &
  1.3157 +       (ALL y::'A::type. IN y s --> (EX! x::'A::type. IN x s & p x = y)) -->
  1.3158 +       iterate u_4247 s f = iterate u_4247 s (f o p))"
  1.3159 +  by (import hollight ITERATE_BIJECTION)
  1.3160 +
  1.3161 +lemma ITERATE_ITERATE_PRODUCT: "ALL u_4247::'C::type => 'C::type => 'C::type.
  1.3162 +   monoidal u_4247 -->
  1.3163 +   (ALL (x::'A::type => bool) (xa::'A::type => 'B::type => bool)
  1.3164 +       xb::'A::type => 'B::type => 'C::type.
  1.3165 +       FINITE x & (ALL i::'A::type. IN i x --> FINITE (xa i)) -->
  1.3166 +       iterate u_4247 x (%i::'A::type. iterate u_4247 (xa i) (xb i)) =
  1.3167 +       iterate u_4247
  1.3168 +        (GSPEC
  1.3169 +          (%u::'A::type * 'B::type.
  1.3170 +              EX (i::'A::type) j::'B::type.
  1.3171 +                 SETSPEC u (IN i x & IN j (xa i)) (i, j)))
  1.3172 +        (GABS
  1.3173 +          (%f::'A::type * 'B::type => 'C::type.
  1.3174 +              ALL (i::'A::type) j::'B::type. GEQ (f (i, j)) (xb i j))))"
  1.3175 +  by (import hollight ITERATE_ITERATE_PRODUCT)
  1.3176 +
  1.3177 +lemma ITERATE_EQ: "ALL u_4247::'q_50867::type => 'q_50867::type => 'q_50867::type.
  1.3178 +   monoidal u_4247 -->
  1.3179 +   (ALL (f::'q_50871::type => 'q_50867::type)
  1.3180 +       (g::'q_50871::type => 'q_50867::type) x::'q_50871::type => bool.
  1.3181 +       FINITE x & (ALL xa::'q_50871::type. IN xa x --> f xa = g xa) -->
  1.3182 +       iterate u_4247 x f = iterate u_4247 x g)"
  1.3183 +  by (import hollight ITERATE_EQ)
  1.3184 +
  1.3185 +lemma ITERATE_EQ_GENERAL: "ALL u_4247::'C::type => 'C::type => 'C::type.
  1.3186 +   monoidal u_4247 -->
  1.3187 +   (ALL (s::'A::type => bool) (t::'B::type => bool)
  1.3188 +       (f::'A::type => 'C::type) (g::'B::type => 'C::type)
  1.3189 +       h::'A::type => 'B::type.
  1.3190 +       FINITE s &
  1.3191 +       (ALL y::'B::type. IN y t --> (EX! x::'A::type. IN x s & h x = y)) &
  1.3192 +       (ALL x::'A::type. IN x s --> IN (h x) t & g (h x) = f x) -->
  1.3193 +       iterate u_4247 s f = iterate u_4247 t g)"
  1.3194 +  by (import hollight ITERATE_EQ_GENERAL)
  1.3195 +
  1.3196 +constdefs
  1.3197 +  nsum :: "('q_51017 => bool) => ('q_51017 => nat) => nat" 
  1.3198 +  "(op ==::(('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3199 +        => (('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3200             => prop)
  1.3201 - (nsum::('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3202 + (nsum::('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3203   ((iterate::(nat => nat => nat)
  1.3204 -            => ('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3205 +            => ('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3206     (op +::nat => nat => nat))"
  1.3207  
  1.3208 -lemma DEF_nsum: "(op =::(('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3209 -       => (('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3210 +lemma DEF_nsum: "(op =::(('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3211 +       => (('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3212            => bool)
  1.3213 - (nsum::('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3214 + (nsum::('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3215   ((iterate::(nat => nat => nat)
  1.3216 -            => ('q_50348::type => bool) => ('q_50348::type => nat) => nat)
  1.3217 +            => ('q_51017::type => bool) => ('q_51017::type => nat) => nat)
  1.3218     (op +::nat => nat => nat))"
  1.3219    by (import hollight DEF_nsum)
  1.3220  
  1.3221 @@ -7806,40 +8049,40 @@
  1.3222  lemma MONOIDAL_MUL: "(monoidal::(nat => nat => nat) => bool) (op *::nat => nat => nat)"
  1.3223    by (import hollight MONOIDAL_MUL)
  1.3224  
  1.3225 -lemma NSUM_CLAUSES: "(ALL x::'q_50386::type => nat. nsum EMPTY x = 0) &
  1.3226 -(ALL (x::'q_50425::type) (xa::'q_50425::type => nat)
  1.3227 -    xb::'q_50425::type => bool.
  1.3228 +lemma NSUM_CLAUSES: "(ALL x::'q_51055::type => nat. nsum EMPTY x = 0) &
  1.3229 +(ALL (x::'q_51094::type) (xa::'q_51094::type => nat)
  1.3230 +    xb::'q_51094::type => bool.
  1.3231      FINITE xb -->
  1.3232      nsum (INSERT x xb) xa = COND (IN x xb) (nsum xb xa) (xa x + nsum xb xa))"
  1.3233    by (import hollight NSUM_CLAUSES)
  1.3234  
  1.3235 -lemma NSUM_UNION: "ALL (x::'q_50451::type => nat) (xa::'q_50451::type => bool)
  1.3236 -   xb::'q_50451::type => bool.
  1.3237 +lemma NSUM_UNION: "ALL (x::'q_51120::type => nat) (xa::'q_51120::type => bool)
  1.3238 +   xb::'q_51120::type => bool.
  1.3239     FINITE xa & FINITE xb & DISJOINT xa xb -->
  1.3240     nsum (hollight.UNION xa xb) x = nsum xa x + nsum xb x"
  1.3241    by (import hollight NSUM_UNION)
  1.3242  
  1.3243 -lemma NSUM_DIFF: "ALL (f::'q_50506::type => nat) (s::'q_50506::type => bool)
  1.3244 -   t::'q_50506::type => bool.
  1.3245 +lemma NSUM_DIFF: "ALL (f::'q_51175::type => nat) (s::'q_51175::type => bool)
  1.3246 +   t::'q_51175::type => bool.
  1.3247     FINITE s & SUBSET t s --> nsum (DIFF s t) f = nsum s f - nsum t f"
  1.3248    by (import hollight NSUM_DIFF)
  1.3249  
  1.3250 -lemma NSUM_SUPPORT: "ALL (x::'q_50545::type => nat) xa::'q_50545::type => bool.
  1.3251 +lemma NSUM_SUPPORT: "ALL (x::'q_51214::type => nat) xa::'q_51214::type => bool.
  1.3252     FINITE (support op + x xa) --> nsum (support op + x xa) x = nsum xa x"
  1.3253    by (import hollight NSUM_SUPPORT)
  1.3254  
  1.3255 -lemma NSUM_ADD: "ALL (f::'q_50591::type => nat) (g::'q_50591::type => nat)
  1.3256 -   s::'q_50591::type => bool.
  1.3257 -   FINITE s --> nsum s (%x::'q_50591::type. f x + g x) = nsum s f + nsum s g"
  1.3258 +lemma NSUM_ADD: "ALL (f::'q_51260::type => nat) (g::'q_51260::type => nat)
  1.3259 +   s::'q_51260::type => bool.
  1.3260 +   FINITE s --> nsum s (%x::'q_51260::type. f x + g x) = nsum s f + nsum s g"
  1.3261    by (import hollight NSUM_ADD)
  1.3262  
  1.3263 -lemma NSUM_CMUL: "ALL (f::'q_50629::type => nat) (c::nat) s::'q_50629::type => bool.
  1.3264 -   FINITE s --> nsum s (%x::'q_50629::type. c * f x) = c * nsum s f"
  1.3265 +lemma NSUM_CMUL: "ALL (f::'q_51298::type => nat) (c::nat) s::'q_51298::type => bool.
  1.3266 +   FINITE s --> nsum s (%x::'q_51298::type. c * f x) = c * nsum s f"
  1.3267    by (import hollight NSUM_CMUL)
  1.3268  
  1.3269 -lemma NSUM_LE: "ALL (x::'q_50668::type => nat) (xa::'q_50668::type => nat)
  1.3270 -   xb::'q_50668::type => bool.
  1.3271 -   FINITE xb & (ALL xc::'q_50668::type. IN xc xb --> <= (x xc) (xa xc)) -->
  1.3272 +lemma NSUM_LE: "ALL (x::'q_51337::type => nat) (xa::'q_51337::type => nat)
  1.3273 +   xb::'q_51337::type => bool.
  1.3274 +   FINITE xb & (ALL xc::'q_51337::type. IN xc xb --> <= (x xc) (xa xc)) -->
  1.3275     <= (nsum xb x) (nsum xb xa)"
  1.3276    by (import hollight NSUM_LE)
  1.3277  
  1.3278 @@ -7850,21 +8093,21 @@
  1.3279     < (nsum s f) (nsum s g)"
  1.3280    by (import hollight NSUM_LT)
  1.3281  
  1.3282 -lemma NSUM_LT_ALL: "ALL (f::'q_50790::type => nat) (g::'q_50790::type => nat)
  1.3283 -   s::'q_50790::type => bool.
  1.3284 +lemma NSUM_LT_ALL: "ALL (f::'q_51459::type => nat) (g::'q_51459::type => nat)
  1.3285 +   s::'q_51459::type => bool.
  1.3286     FINITE s &
  1.3287 -   s ~= EMPTY & (ALL x::'q_50790::type. IN x s --> < (f x) (g x)) -->
  1.3288 +   s ~= EMPTY & (ALL x::'q_51459::type. IN x s --> < (f x) (g x)) -->
  1.3289     < (nsum s f) (nsum s g)"
  1.3290    by (import hollight NSUM_LT_ALL)
  1.3291  
  1.3292 -lemma NSUM_EQ: "ALL (x::'q_50832::type => nat) (xa::'q_50832::type => nat)
  1.3293 -   xb::'q_50832::type => bool.
  1.3294 -   FINITE xb & (ALL xc::'q_50832::type. IN xc xb --> x xc = xa xc) -->
  1.3295 +lemma NSUM_EQ: "ALL (x::'q_51501::type => nat) (xa::'q_51501::type => nat)
  1.3296 +   xb::'q_51501::type => bool.
  1.3297 +   FINITE xb & (ALL xc::'q_51501::type. IN xc xb --> x xc = xa xc) -->
  1.3298     nsum xb x = nsum xb xa"
  1.3299    by (import hollight NSUM_EQ)
  1.3300  
  1.3301 -lemma NSUM_CONST: "ALL (c::nat) s::'q_50862::type => bool.
  1.3302 -   FINITE s --> nsum s (%n::'q_50862::type. c) = CARD s * c"
  1.3303 +lemma NSUM_CONST: "ALL (c::nat) s::'q_51531::type => bool.
  1.3304 +   FINITE s --> nsum s (%n::'q_51531::type. c) = CARD s * c"
  1.3305    by (import hollight NSUM_CONST)
  1.3306  
  1.3307  lemma NSUM_EQ_0: "ALL (x::'A::type => nat) xa::'A::type => bool.
  1.3308 @@ -7874,8 +8117,8 @@
  1.3309  lemma NSUM_0: "ALL x::'A::type => bool. nsum x (%n::'A::type. 0) = 0"
  1.3310    by (import hollight NSUM_0)
  1.3311  
  1.3312 -lemma NSUM_POS_LE: "ALL (x::'q_50941::type => nat) xa::'q_50941::type => bool.
  1.3313 -   FINITE xa & (ALL xb::'q_50941::type. IN xb xa --> <= 0 (x xb)) -->
  1.3314 +lemma NSUM_POS_LE: "ALL (x::'q_51610::type => nat) xa::'q_51610::type => bool.
  1.3315 +   FINITE xa & (ALL xb::'q_51610::type. IN xb xa --> <= 0 (x xb)) -->
  1.3316     <= 0 (nsum xa x)"
  1.3317    by (import hollight NSUM_POS_LE)
  1.3318  
  1.3319 @@ -7885,13 +8128,13 @@
  1.3320     (ALL xa::'A::type. IN xa x --> <= (f xa) b)"
  1.3321    by (import hollight NSUM_POS_BOUND)
  1.3322  
  1.3323 -lemma NSUM_POS_EQ_0: "ALL (x::'q_51076::type => nat) xa::'q_51076::type => bool.
  1.3324 +lemma NSUM_POS_EQ_0: "ALL (x::'q_51745::type => nat) xa::'q_51745::type => bool.
  1.3325     FINITE xa &
  1.3326 -   (ALL xb::'q_51076::type. IN xb xa --> <= 0 (x xb)) & nsum xa x = 0 -->
  1.3327 -   (ALL xb::'q_51076::type. IN xb xa --> x xb = 0)"
  1.3328 +   (ALL xb::'q_51745::type. IN xb xa --> <= 0 (x xb)) & nsum xa x = 0 -->
  1.3329 +   (ALL xb::'q_51745::type. IN xb xa --> x xb = 0)"
  1.3330    by (import hollight NSUM_POS_EQ_0)
  1.3331  
  1.3332 -lemma NSUM_SING: "ALL (x::'q_51096::type => nat) xa::'q_51096::type.
  1.3333 +lemma NSUM_SING: "ALL (x::'q_51765::type => nat) xa::'q_51765::type.
  1.3334     nsum (INSERT xa EMPTY) x = x xa"
  1.3335    by (import hollight NSUM_SING)
  1.3336  
  1.3337 @@ -7906,10 +8149,10 @@
  1.3338     nsum xa (%j::'B::type. nsum x (%i::'A::type. f i j))"
  1.3339    by (import hollight NSUM_SWAP)
  1.3340  
  1.3341 -lemma NSUM_IMAGE: "ALL (x::'q_51236::type => 'q_51212::type) (xa::'q_51212::type => nat)
  1.3342 -   xb::'q_51236::type => bool.
  1.3343 +lemma NSUM_IMAGE: "ALL (x::'q_51905::type => 'q_51881::type) (xa::'q_51881::type => nat)
  1.3344 +   xb::'q_51905::type => bool.
  1.3345     FINITE xb &
  1.3346 -   (ALL (xa::'q_51236::type) y::'q_51236::type.
  1.3347 +   (ALL (xa::'q_51905::type) y::'q_51905::type.
  1.3348         IN xa xb & IN y xb & x xa = x y --> xa = y) -->
  1.3349     nsum (IMAGE x xb) xa = nsum xb (xa o x)"
  1.3350    by (import hollight NSUM_IMAGE)
  1.3351 @@ -7930,9 +8173,9 @@
  1.3352     nsum (hollight.UNION u v) f = nsum v f"
  1.3353    by (import hollight NSUM_UNION_LZERO)
  1.3354  
  1.3355 -lemma NSUM_RESTRICT: "ALL (f::'q_51457::type => nat) s::'q_51457::type => bool.
  1.3356 +lemma NSUM_RESTRICT: "ALL (f::'q_52126::type => nat) s::'q_52126::type => bool.
  1.3357     FINITE s -->
  1.3358 -   nsum s (%x::'q_51457::type. COND (IN x s) (f x) 0) = nsum s f"
  1.3359 +   nsum s (%x::'q_52126::type. COND (IN x s) (f x) 0) = nsum s f"
  1.3360    by (import hollight NSUM_RESTRICT)
  1.3361  
  1.3362  lemma NSUM_BOUND: "ALL (x::'A::type => bool) (xa::'A::type => nat) xb::nat.
  1.3363 @@ -7940,7 +8183,7 @@
  1.3364     <= (nsum x xa) (CARD x * xb)"
  1.3365    by (import hollight NSUM_BOUND)
  1.3366  
  1.3367 -lemma NSUM_BOUND_GEN: "ALL (x::'A::type => bool) (xa::'q_51532::type) b::nat.
  1.3368 +lemma NSUM_BOUND_GEN: "ALL (x::'A::type => bool) (xa::'q_52201::type) b::nat.
  1.3369     FINITE x &
  1.3370     x ~= EMPTY &
  1.3371     (ALL xa::'A::type.
  1.3372 @@ -7955,12 +8198,12 @@
  1.3373     < (nsum s f) (CARD s * b)"
  1.3374    by (import hollight NSUM_BOUND_LT)
  1.3375  
  1.3376 -lemma NSUM_BOUND_LT_ALL: "ALL (s::'q_51675::type => bool) (f::'q_51675::type => nat) b::nat.
  1.3377 -   FINITE s & s ~= EMPTY & (ALL x::'q_51675::type. IN x s --> < (f x) b) -->
  1.3378 +lemma NSUM_BOUND_LT_ALL: "ALL (s::'q_52344::type => bool) (f::'q_52344::type => nat) b::nat.
  1.3379 +   FINITE s & s ~= EMPTY & (ALL x::'q_52344::type. IN x s --> < (f x) b) -->
  1.3380     < (nsum s f) (CARD s * b)"
  1.3381    by (import hollight NSUM_BOUND_LT_ALL)
  1.3382  
  1.3383 -lemma NSUM_BOUND_LT_GEN: "ALL (s::'A::type => bool) (t::'q_51717::type) b::nat.
  1.3384 +lemma NSUM_BOUND_LT_GEN: "ALL (s::'A::type => bool) (t::'q_52386::type) b::nat.
  1.3385     FINITE s &
  1.3386     s ~= EMPTY &
  1.3387     (ALL x::'A::type.
  1.3388 @@ -7968,10 +8211,10 @@
  1.3389     < (nsum s f) b"
  1.3390    by (import hollight NSUM_BOUND_LT_GEN)
  1.3391  
  1.3392 -lemma NSUM_UNION_EQ: "ALL (s::'q_51776::type => bool) (t::'q_51776::type => bool)
  1.3393 -   u::'q_51776::type => bool.
  1.3394 +lemma NSUM_UNION_EQ: "ALL (s::'q_52445::type => bool) (t::'q_52445::type => bool)
  1.3395 +   u::'q_52445::type => bool.
  1.3396     FINITE u & hollight.INTER s t = EMPTY & hollight.UNION s t = u -->
  1.3397 -   nsum s (f::'q_51776::type => nat) + nsum t f = nsum u f"
  1.3398 +   nsum s (f::'q_52445::type => nat) + nsum t f = nsum u f"
  1.3399    by (import hollight NSUM_UNION_EQ)
  1.3400  
  1.3401  lemma NSUM_EQ_SUPERSET: "ALL (f::'A::type => nat) (s::'A::type => bool) t::'A::type => bool.
  1.3402 @@ -7982,7 +8225,7 @@
  1.3403     nsum s f = nsum t g"
  1.3404    by (import hollight NSUM_EQ_SUPERSET)
  1.3405  
  1.3406 -lemma NSUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => nat) r::'q_51887::type.
  1.3407 +lemma NSUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => nat) r::'q_52556::type.
  1.3408     FINITE s -->
  1.3409     nsum
  1.3410      (GSPEC
  1.3411 @@ -7992,28 +8235,28 @@
  1.3412     nsum s (%x::'A::type. COND (P x) (f x) 0)"
  1.3413    by (import hollight NSUM_RESTRICT_SET)
  1.3414  
  1.3415 -lemma NSUM_NSUM_RESTRICT: "ALL (R::'q_52016::type => 'q_52015::type => bool)
  1.3416 -   (f::'q_52016::type => 'q_52015::type => nat) (s::'q_52016::type => bool)
  1.3417 -   t::'q_52015::type => bool.
  1.3418 +lemma NSUM_NSUM_RESTRICT: "ALL (R::'q_52685::type => 'q_52684::type => bool)
  1.3419 +   (f::'q_52685::type => 'q_52684::type => nat) (s::'q_52685::type => bool)
  1.3420 +   t::'q_52684::type => bool.
  1.3421     FINITE s & FINITE t -->
  1.3422     nsum s
  1.3423 -    (%x::'q_52016::type.
  1.3424 +    (%x::'q_52685::type.
  1.3425          nsum
  1.3426           (GSPEC
  1.3427 -           (%u::'q_52015::type.
  1.3428 -               EX y::'q_52015::type. SETSPEC u (IN y t & R x y) y))
  1.3429 +           (%u::'q_52684::type.
  1.3430 +               EX y::'q_52684::type. SETSPEC u (IN y t & R x y) y))
  1.3431           (f x)) =
  1.3432     nsum t
  1.3433 -    (%y::'q_52015::type.
  1.3434 +    (%y::'q_52684::type.
  1.3435          nsum
  1.3436           (GSPEC
  1.3437 -           (%u::'q_52016::type.
  1.3438 -               EX x::'q_52016::type. SETSPEC u (IN x s & R x y) x))
  1.3439 -         (%x::'q_52016::type. f x y))"
  1.3440 +           (%u::'q_52685::type.
  1.3441 +               EX x::'q_52685::type. SETSPEC u (IN x s & R x y) x))
  1.3442 +         (%x::'q_52685::type. f x y))"
  1.3443    by (import hollight NSUM_NSUM_RESTRICT)
  1.3444  
  1.3445 -lemma CARD_EQ_NSUM: "ALL x::'q_52035::type => bool.
  1.3446 -   FINITE x --> CARD x = nsum x (%x::'q_52035::type. NUMERAL_BIT1 0)"
  1.3447 +lemma CARD_EQ_NSUM: "ALL x::'q_52704::type => bool.
  1.3448 +   FINITE x --> CARD x = nsum x (%x::'q_52704::type. NUMERAL_BIT1 0)"
  1.3449    by (import hollight CARD_EQ_NSUM)
  1.3450  
  1.3451  lemma NSUM_MULTICOUNT_GEN: "ALL (R::'A::type => 'B::type => bool) (s::'A::type => bool)
  1.3452 @@ -8068,8 +8311,8 @@
  1.3453     <= (nsum u f) (nsum v f)"
  1.3454    by (import hollight NSUM_SUBSET)
  1.3455  
  1.3456 -lemma NSUM_SUBSET_SIMPLE: "ALL (u::'q_52495::type => bool) (v::'q_52495::type => bool)
  1.3457 -   f::'q_52495::type => nat.
  1.3458 +lemma NSUM_SUBSET_SIMPLE: "ALL (u::'q_53164::type => bool) (v::'q_53164::type => bool)
  1.3459 +   f::'q_53164::type => nat.
  1.3460     FINITE v & SUBSET u v --> <= (nsum u f) (nsum v f)"
  1.3461    by (import hollight NSUM_SUBSET_SIMPLE)
  1.3462  
  1.3463 @@ -8096,7 +8339,7 @@
  1.3464     nsum (dotdot xa xb) (%n::nat. x) = (xb + NUMERAL_BIT1 0 - xa) * x"
  1.3465    by (import hollight NSUM_CONST_NUMSEG)
  1.3466  
  1.3467 -lemma NSUM_EQ_0_NUMSEG: "ALL (x::nat => nat) xa::'q_52734::type.
  1.3468 +lemma NSUM_EQ_0_NUMSEG: "ALL (x::nat => nat) xa::'q_53403::type.
  1.3469     (ALL i::nat. <= (m::nat) i & <= i (n::nat) --> x i = 0) -->
  1.3470     nsum (dotdot m n) x = 0"
  1.3471    by (import hollight NSUM_EQ_0_NUMSEG)
  1.3472 @@ -8156,32 +8399,61 @@
  1.3473     nsum (dotdot m n) f = nsum (dotdot m (n - NUMERAL_BIT1 0)) f + f n"
  1.3474    by (import hollight NSUM_CLAUSES_RIGHT)
  1.3475  
  1.3476 +lemma NSUM_BIJECTION: "ALL (x::'A::type => nat) (xa::'A::type => 'A::type) xb::'A::type => bool.
  1.3477 +   FINITE xb &
  1.3478 +   (ALL x::'A::type. IN x xb --> IN (xa x) xb) &
  1.3479 +   (ALL y::'A::type. IN y xb --> (EX! x::'A::type. IN x xb & xa x = y)) -->
  1.3480 +   nsum xb x = nsum xb (x o xa)"
  1.3481 +  by (import hollight NSUM_BIJECTION)
  1.3482 +
  1.3483 +lemma NSUM_NSUM_PRODUCT: "ALL (x::'A::type => bool) (xa::'A::type => 'B::type => bool)
  1.3484 +   xb::'A::type => 'B::type => nat.
  1.3485 +   FINITE x & (ALL i::'A::type. IN i x --> FINITE (xa i)) -->
  1.3486 +   nsum x (%x::'A::type. nsum (xa x) (xb x)) =
  1.3487 +   nsum
  1.3488 +    (GSPEC
  1.3489 +      (%u::'A::type * 'B::type.
  1.3490 +          EX (i::'A::type) j::'B::type.
  1.3491 +             SETSPEC u (IN i x & IN j (xa i)) (i, j)))
  1.3492 +    (GABS
  1.3493 +      (%f::'A::type * 'B::type => nat.
  1.3494 +          ALL (i::'A::type) j::'B::type. GEQ (f (i, j)) (xb i j)))"
  1.3495 +  by (import hollight NSUM_NSUM_PRODUCT)
  1.3496 +
  1.3497 +lemma NSUM_EQ_GENERAL: "ALL (x::'A::type => bool) (xa::'B::type => bool) (xb::'A::type => nat)
  1.3498 +   (xc::'B::type => nat) xd::'A::type => 'B::type.
  1.3499 +   FINITE x &
  1.3500 +   (ALL y::'B::type. IN y xa --> (EX! xa::'A::type. IN xa x & xd xa = y)) &
  1.3501 +   (ALL xe::'A::type. IN xe x --> IN (xd xe) xa & xc (xd xe) = xb xe) -->
  1.3502 +   nsum x xb = nsum xa xc"
  1.3503 +  by (import hollight NSUM_EQ_GENERAL)
  1.3504 +
  1.3505  consts
  1.3506 -  sum :: "('q_53311 => bool) => ('q_53311 => hollight.real) => hollight.real" 
  1.3507 +  sum :: "('q_54215 => bool) => ('q_54215 => hollight.real) => hollight.real" 
  1.3508  
  1.3509  defs
  1.3510 -  sum_def: "(op ==::(('q_53311::type => bool)
  1.3511 -         => ('q_53311::type => hollight.real) => hollight.real)
  1.3512 -        => (('q_53311::type => bool)
  1.3513 -            => ('q_53311::type => hollight.real) => hollight.real)
  1.3514 +  sum_def: "(op ==::(('q_54215::type => bool)
  1.3515 +         => ('q_54215::type => hollight.real) => hollight.real)
  1.3516 +        => (('q_54215::type => bool)
  1.3517 +            => ('q_54215::type => hollight.real) => hollight.real)
  1.3518             => prop)
  1.3519 - (hollight.sum::('q_53311::type => bool)
  1.3520 -                => ('q_53311::type => hollight.real) => hollight.real)
  1.3521 + (hollight.sum::('q_54215::type => bool)
  1.3522 +                => ('q_54215::type => hollight.real) => hollight.real)
  1.3523   ((iterate::(hollight.real => hollight.real => hollight.real)
  1.3524 -            => ('q_53311::type => bool)
  1.3525 -               => ('q_53311::type => hollight.real) => hollight.real)
  1.3526 +            => ('q_54215::type => bool)
  1.3527 +               => ('q_54215::type => hollight.real) => hollight.real)
  1.3528     (real_add::hollight.real => hollight.real => hollight.real))"
  1.3529  
  1.3530 -lemma DEF_sum: "(op =::(('q_53311::type => bool)
  1.3531 -        => ('q_53311::type => hollight.real) => hollight.real)
  1.3532 -       => (('q_53311::type => bool)
  1.3533 -           => ('q_53311::type => hollight.real) => hollight.real)
  1.3534 +lemma DEF_sum: "(op =::(('q_54215::type => bool)
  1.3535 +        => ('q_54215::type => hollight.real) => hollight.real)
  1.3536 +       => (('q_54215::type => bool)
  1.3537 +           => ('q_54215::type => hollight.real) => hollight.real)
  1.3538            => bool)
  1.3539 - (hollight.sum::('q_53311::type => bool)
  1.3540 -                => ('q_53311::type => hollight.real) => hollight.real)
  1.3541 + (hollight.sum::('q_54215::type => bool)
  1.3542 +                => ('q_54215::type => hollight.real) => hollight.real)
  1.3543   ((iterate::(hollight.real => hollight.real => hollight.real)
  1.3544 -            => ('q_53311::type => bool)
  1.3545 -               => ('q_53311::type => hollight.real) => hollight.real)
  1.3546 +            => ('q_54215::type => bool)
  1.3547 +               => ('q_54215::type => hollight.real) => hollight.real)
  1.3548     (real_add::hollight.real => hollight.real => hollight.real))"
  1.3549    by (import hollight DEF_sum)
  1.3550  
  1.3551 @@ -8197,28 +8469,69 @@
  1.3552  lemma MONOIDAL_REAL_MUL: "monoidal real_mul"
  1.3553    by (import hollight MONOIDAL_REAL_MUL)
  1.3554  
  1.3555 -lemma SUM_CLAUSES: "(ALL x::'q_53353::type => hollight.real.
  1.3556 +lemma SUM_CLAUSES: "(ALL x::'q_54257::type => hollight.real.
  1.3557      hollight.sum EMPTY x = real_of_num 0) &
  1.3558 -(ALL (x::'q_53394::type) (xa::'q_53394::type => hollight.real)
  1.3559 -    xb::'q_53394::type => bool.
  1.3560 +(ALL (x::'q_54298::type) (xa::'q_54298::type => hollight.real)
  1.3561 +    xb::'q_54298::type => bool.
  1.3562      FINITE xb -->
  1.3563      hollight.sum (INSERT x xb) xa =
  1.3564      COND (IN x xb) (hollight.sum xb xa)
  1.3565       (real_add (xa x) (hollight.sum xb xa)))"
  1.3566    by (import hollight SUM_CLAUSES)
  1.3567  
  1.3568 -lemma SUM_UNION: "ALL (x::'q_53420::type => hollight.real) (xa::'q_53420::type => bool)
  1.3569 -   xb::'q_53420::type => bool.
  1.3570 +lemma SUM_UNION: "ALL (x::'q_54324::type => hollight.real) (xa::'q_54324::type => bool)
  1.3571 +   xb::'q_54324::type => bool.
  1.3572     FINITE xa & FINITE xb & DISJOINT xa xb -->
  1.3573     hollight.sum (hollight.UNION xa xb) x =
  1.3574     real_add (hollight.sum xa x) (hollight.sum xb x)"
  1.3575    by (import hollight SUM_UNION)
  1.3576  
  1.3577 -lemma SUM_SUPPORT: "ALL (x::'q_53499::type => hollight.real) xa::'q_53499::type => bool.
  1.3578 +lemma SUM_DIFF: "ALL (x::'q_54364::type => hollight.real) (xa::'q_54364::type => bool)
  1.3579 +   xb::'q_54364::type => bool.
  1.3580 +   FINITE xa & SUBSET xb xa -->
  1.3581 +   hollight.sum (DIFF xa xb) x =
  1.3582 +   real_sub (hollight.sum xa x) (hollight.sum xb x)"
  1.3583 +  by (import hollight SUM_DIFF)
  1.3584 +
  1.3585 +lemma SUM_SUPPORT: "ALL (x::'q_54403::type => hollight.real) xa::'q_54403::type => bool.
  1.3586     FINITE (support real_add x xa) -->
  1.3587     hollight.sum (support real_add x xa) x = hollight.sum xa x"
  1.3588    by (import hollight SUM_SUPPORT)
  1.3589  
  1.3590 +lemma SUM_ADD: "ALL (f::'q_54449::type => hollight.real)
  1.3591 +   (g::'q_54449::type => hollight.real) s::'q_54449::type => bool.
  1.3592 +   FINITE s -->
  1.3593 +   hollight.sum s (%x::'q_54449::type. real_add (f x) (g x)) =
  1.3594 +   real_add (hollight.sum s f) (hollight.sum s g)"
  1.3595 +  by (import hollight SUM_ADD)
  1.3596 +
  1.3597 +lemma SUM_CMUL: "ALL (f::'q_54487::type => hollight.real) (c::hollight.real)
  1.3598 +   s::'q_54487::type => bool.
  1.3599 +   FINITE s -->
  1.3600 +   hollight.sum s (%x::'q_54487::type. real_mul c (f x)) =
  1.3601 +   real_mul c (hollight.sum s f)"
  1.3602 +  by (import hollight SUM_CMUL)
  1.3603 +
  1.3604 +lemma SUM_NEG: "ALL (x::'q_54530::type => hollight.real) xa::'q_54530::type => bool.
  1.3605 +   FINITE xa -->
  1.3606 +   hollight.sum xa (%xa::'q_54530::type. real_neg (x xa)) =
  1.3607 +   real_neg (hollight.sum xa x)"
  1.3608 +  by (import hollight SUM_NEG)
  1.3609 +
  1.3610 +lemma SUM_SUB: "ALL (x::'q_54565::type => hollight.real)
  1.3611 +   (xa::'q_54565::type => hollight.real) xb::'q_54565::type => bool.
  1.3612 +   FINITE xb -->
  1.3613 +   hollight.sum xb (%xb::'q_54565::type. real_sub (x xb) (xa xb)) =
  1.3614 +   real_sub (hollight.sum xb x) (hollight.sum xb xa)"
  1.3615 +  by (import hollight SUM_SUB)
  1.3616 +
  1.3617 +lemma SUM_LE: "ALL (x::'q_54607::type => hollight.real)
  1.3618 +   (xa::'q_54607::type => hollight.real) xb::'q_54607::type => bool.
  1.3619 +   FINITE xb &
  1.3620 +   (ALL xc::'q_54607::type. IN xc xb --> real_le (x xc) (xa xc)) -->
  1.3621 +   real_le (hollight.sum xb x) (hollight.sum xb xa)"
  1.3622 +  by (import hollight SUM_LE)
  1.3623 +
  1.3624  lemma SUM_LT: "ALL (f::'A::type => hollight.real) (g::'A::type => hollight.real)
  1.3625     s::'A::type => bool.
  1.3626     FINITE s &
  1.3627 @@ -8227,16 +8540,43 @@
  1.3628     real_lt (hollight.sum s f) (hollight.sum s g)"
  1.3629    by (import hollight SUM_LT)
  1.3630  
  1.3631 -lemma SUM_LT_ALL: "ALL (f::'q_53825::type => hollight.real)
  1.3632 -   (g::'q_53825::type => hollight.real) s::'q_53825::type => bool.
  1.3633 +lemma SUM_LT_ALL: "ALL (f::'q_54729::type => hollight.real)
  1.3634 +   (g::'q_54729::type => hollight.real) s::'q_54729::type => bool.
  1.3635     FINITE s &
  1.3636 -   s ~= EMPTY & (ALL x::'q_53825::type. IN x s --> real_lt (f x) (g x)) -->
  1.3637 +   s ~= EMPTY & (ALL x::'q_54729::type. IN x s --> real_lt (f x) (g x)) -->
  1.3638     real_lt (hollight.sum s f) (hollight.sum s g)"
  1.3639    by (import hollight SUM_LT_ALL)
  1.3640  
  1.3641 -lemma SUM_POS_LE: "ALL (x::'q_54040::type => hollight.real) xa::'q_54040::type => bool.
  1.3642 +lemma SUM_EQ: "ALL (x::'q_54771::type => hollight.real)
  1.3643 +   (xa::'q_54771::type => hollight.real) xb::'q_54771::type => bool.
  1.3644 +   FINITE xb & (ALL xc::'q_54771::type. IN xc xb --> x xc = xa xc) -->
  1.3645 +   hollight.sum xb x = hollight.sum xb xa"
  1.3646 +  by (import hollight SUM_EQ)
  1.3647 +
  1.3648 +lemma SUM_ABS: "ALL (f::'q_54830::type => hollight.real) s::'q_54830::type => bool.
  1.3649 +   FINITE s -->
  1.3650 +   real_le (real_abs (hollight.sum s f))
  1.3651 +    (hollight.sum s (%x::'q_54830::type. real_abs (f x)))"
  1.3652 +  by (import hollight SUM_ABS)
  1.3653 +
  1.3654 +lemma SUM_CONST: "ALL (c::hollight.real) s::'q_54851::type => bool.
  1.3655 +   FINITE s -->
  1.3656 +   hollight.sum s (%n::'q_54851::type. c) =
  1.3657 +   real_mul (real_of_num (CARD s)) c"
  1.3658 +  by (import hollight SUM_CONST)
  1.3659 +
  1.3660 +lemma SUM_EQ_0: "ALL (x::'A::type => hollight.real) xa::'A::type => bool.
  1.3661 +   (ALL xb::'A::type. IN xb xa --> x xb = real_of_num 0) -->
  1.3662 +   hollight.sum xa x = real_of_num 0"
  1.3663 +  by (import hollight SUM_EQ_0)
  1.3664 +
  1.3665 +lemma SUM_0: "ALL x::'A::type => bool.
  1.3666 +   hollight.sum x (%n::'A::type. real_of_num 0) = real_of_num 0"
  1.3667 +  by (import hollight SUM_0)
  1.3668 +
  1.3669 +lemma SUM_POS_LE: "ALL (x::'q_54944::type => hollight.real) xa::'q_54944::type => bool.
  1.3670     FINITE xa &
  1.3671 -   (ALL xb::'q_54040::type. IN xb xa --> real_le (real_of_num 0) (x xb)) -->
  1.3672 +   (ALL xb::'q_54944::type. IN xb xa --> real_le (real_of_num 0) (x xb)) -->
  1.3673     real_le (real_of_num 0) (hollight.sum xa x)"
  1.3674    by (import hollight SUM_POS_LE)
  1.3675  
  1.3676 @@ -8247,14 +8587,14 @@
  1.3677     (ALL xa::'A::type. IN xa x --> real_le (f xa) b)"
  1.3678    by (import hollight SUM_POS_BOUND)
  1.3679  
  1.3680 -lemma SUM_POS_EQ_0: "ALL (x::'q_54187::type => hollight.real) xa::'q_54187::type => bool.
  1.3681 +lemma SUM_POS_EQ_0: "ALL (x::'q_55091::type => hollight.real) xa::'q_55091::type => bool.
  1.3682     FINITE xa &
  1.3683 -   (ALL xb::'q_54187::type. IN xb xa --> real_le (real_of_num 0) (x xb)) &
  1.3684 +   (ALL xb::'q_55091::type. IN xb xa --> real_le (real_of_num 0) (x xb)) &
  1.3685     hollight.sum xa x = real_of_num 0 -->
  1.3686 -   (ALL xb::'q_54187::type. IN xb xa --> x xb = real_of_num 0)"
  1.3687 +   (ALL xb::'q_55091::type. IN xb xa --> x xb = real_of_num 0)"
  1.3688    by (import hollight SUM_POS_EQ_0)
  1.3689  
  1.3690 -lemma SUM_SING: "ALL (x::'q_54209::type => hollight.real) xa::'q_54209::type.
  1.3691 +lemma SUM_SING: "ALL (x::'q_55113::type => hollight.real) xa::'q_55113::type.
  1.3692     hollight.sum (INSERT xa EMPTY) x = x xa"
  1.3693    by (import hollight SUM_SING)
  1.3694  
  1.3695 @@ -8264,10 +8604,17 @@
  1.3696     COND (IN xa x) b (real_of_num 0)"
  1.3697    by (import hollight SUM_DELTA)
  1.3698  
  1.3699 -lemma SUM_IMAGE: "ALL (x::'q_54353::type => 'q_54329::type)
  1.3700 -   (xa::'q_54329::type => hollight.real) xb::'q_54353::type => bool.
  1.3701 +lemma SUM_SWAP: "ALL (f::'A::type => 'B::type => hollight.real) (x::'A::type => bool)
  1.3702 +   xa::'B::type => bool.
  1.3703 +   FINITE x & FINITE xa -->
  1.3704 +   hollight.sum x (%i::'A::type. hollight.sum xa (f i)) =
  1.3705 +   hollight.sum xa (%j::'B::type. hollight.sum x (%i::'A::type. f i j))"
  1.3706 +  by (import hollight SUM_SWAP)
  1.3707 +
  1.3708 +lemma SUM_IMAGE: "ALL (x::'q_55257::type => 'q_55233::type)
  1.3709 +   (xa::'q_55233::type => hollight.real) xb::'q_55257::type => bool.
  1.3710     FINITE xb &
  1.3711 -   (ALL (xa::'q_54353::type) y::'q_54353::type.
  1.3712 +   (ALL (xa::'q_55257::type) y::'q_55257::type.
  1.3713         IN xa xb & IN y xb & x xa = x y --> xa = y) -->
  1.3714     hollight.sum (IMAGE x xb) xa = hollight.sum xb (xa o x)"
  1.3715    by (import hollight SUM_IMAGE)
  1.3716 @@ -8294,14 +8641,19 @@
  1.3717     hollight.sum (hollight.UNION u v) f = hollight.sum v f"
  1.3718    by (import hollight SUM_UNION_LZERO)
  1.3719  
  1.3720 -lemma SUM_RESTRICT: "ALL (f::'q_54580::type => hollight.real) s::'q_54580::type => bool.
  1.3721 +lemma SUM_RESTRICT: "ALL (f::'q_55484::type => hollight.real) s::'q_55484::type => bool.
  1.3722     FINITE s -->
  1.3723     hollight.sum s
  1.3724 -    (%x::'q_54580::type. COND (IN x s) (f x) (real_of_num 0)) =
  1.3725 +    (%x::'q_55484::type. COND (IN x s) (f x) (real_of_num 0)) =
  1.3726     hollight.sum s f"
  1.3727    by (import hollight SUM_RESTRICT)
  1.3728  
  1.3729 -lemma SUM_BOUND_GEN: "ALL (s::'A::type => bool) (t::'q_54639::type) b::hollight.real.
  1.3730 +lemma SUM_BOUND: "ALL (x::'A::type => bool) (xa::'A::type => hollight.real) xb::hollight.real.
  1.3731 +   FINITE x & (ALL xc::'A::type. IN xc x --> real_le (xa xc) xb) -->
  1.3732 +   real_le (hollight.sum x xa) (real_mul (real_of_num (CARD x)) xb)"
  1.3733 +  by (import hollight SUM_BOUND)
  1.3734 +
  1.3735 +lemma SUM_BOUND_GEN: "ALL (s::'A::type => bool) (t::'q_55543::type) b::hollight.real.
  1.3736     FINITE s &
  1.3737     s ~= EMPTY &
  1.3738     (ALL x::'A::type.
  1.3739 @@ -8323,14 +8675,14 @@
  1.3740     real_lt (hollight.sum s f) (real_mul (real_of_num (CARD s)) b)"
  1.3741    by (import hollight SUM_BOUND_LT)
  1.3742  
  1.3743 -lemma SUM_BOUND_LT_ALL: "ALL (s::'q_54844::type => bool) (f::'q_54844::type => hollight.real)
  1.3744 +lemma SUM_BOUND_LT_ALL: "ALL (s::'q_55748::type => bool) (f::'q_55748::type => hollight.real)
  1.3745     b::hollight.real.
  1.3746     FINITE s &
  1.3747 -   s ~= EMPTY & (ALL x::'q_54844::type. IN x s --> real_lt (f x) b) -->
  1.3748 +   s ~= EMPTY & (ALL x::'q_55748::type. IN x s --> real_lt (f x) b) -->
  1.3749     real_lt (hollight.sum s f) (real_mul (real_of_num (CARD s)) b)"
  1.3750    by (import hollight SUM_BOUND_LT_ALL)
  1.3751  
  1.3752 -lemma SUM_BOUND_LT_GEN: "ALL (s::'A::type => bool) (t::'q_54866::type) b::hollight.real.
  1.3753 +lemma SUM_BOUND_LT_GEN: "ALL (s::'A::type => bool) (t::'q_55770::type) b::hollight.real.
  1.3754     FINITE s &
  1.3755     s ~= EMPTY &
  1.3756     (ALL x::'A::type.
  1.3757 @@ -8340,10 +8692,10 @@
  1.3758     real_lt (hollight.sum s f) b"
  1.3759    by (import hollight SUM_BOUND_LT_GEN)
  1.3760  
  1.3761 -lemma SUM_UNION_EQ: "ALL (s::'q_54927::type => bool) (t::'q_54927::type => bool)
  1.3762 -   u::'q_54927::type => bool.
  1.3763 +lemma SUM_UNION_EQ: "ALL (s::'q_55831::type => bool) (t::'q_55831::type => bool)
  1.3764 +   u::'q_55831::type => bool.
  1.3765     FINITE u & hollight.INTER s t = EMPTY & hollight.UNION s t = u -->
  1.3766 -   real_add (hollight.sum s (f::'q_54927::type => hollight.real))
  1.3767 +   real_add (hollight.sum s (f::'q_55831::type => hollight.real))
  1.3768      (hollight.sum t f) =
  1.3769     hollight.sum u f"
  1.3770    by (import hollight SUM_UNION_EQ)
  1.3771 @@ -8357,7 +8709,7 @@
  1.3772     hollight.sum s f = hollight.sum t g"
  1.3773    by (import hollight SUM_EQ_SUPERSET)
  1.3774  
  1.3775 -lemma SUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => hollight.real) r::'q_55040::type.
  1.3776 +lemma SUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => hollight.real) r::'q_55944::type.
  1.3777     FINITE s -->
  1.3778     hollight.sum
  1.3779      (GSPEC
  1.3780 @@ -8367,30 +8719,30 @@
  1.3781     hollight.sum s (%x::'A::type. COND (P x) (f x) (real_of_num 0))"
  1.3782    by (import hollight SUM_RESTRICT_SET)
  1.3783  
  1.3784 -lemma SUM_SUM_RESTRICT: "ALL (R::'q_55171::type => 'q_55170::type => bool)
  1.3785 -   (f::'q_55171::type => 'q_55170::type => hollight.real)
  1.3786 -   (s::'q_55171::type => bool) t::'q_55170::type => bool.
  1.3787 +lemma SUM_SUM_RESTRICT: "ALL (R::'q_56075::type => 'q_56074::type => bool)
  1.3788 +   (f::'q_56075::type => 'q_56074::type => hollight.real)
  1.3789 +   (s::'q_56075::type => bool) t::'q_56074::type => bool.
  1.3790     FINITE s & FINITE t -->
  1.3791     hollight.sum s
  1.3792 -    (%x::'q_55171::type.
  1.3793 +    (%x::'q_56075::type.
  1.3794          hollight.sum
  1.3795           (GSPEC
  1.3796 -           (%u::'q_55170::type.
  1.3797 -               EX y::'q_55170::type. SETSPEC u (IN y t & R x y) y))
  1.3798 +           (%u::'q_56074::type.
  1.3799 +               EX y::'q_56074::type. SETSPEC u (IN y t & R x y) y))
  1.3800           (f x)) =
  1.3801     hollight.sum t
  1.3802 -    (%y::'q_55170::type.
  1.3803 +    (%y::'q_56074::type.
  1.3804          hollight.sum
  1.3805           (GSPEC
  1.3806 -           (%u::'q_55171::type.
  1.3807 -               EX x::'q_55171::type. SETSPEC u (IN x s & R x y) x))
  1.3808 -         (%x::'q_55171::type. f x y))"
  1.3809 +           (%u::'q_56075::type.
  1.3810 +               EX x::'q_56075::type. SETSPEC u (IN x s & R x y) x))
  1.3811 +         (%x::'q_56075::type. f x y))"
  1.3812    by (import hollight SUM_SUM_RESTRICT)
  1.3813  
  1.3814 -lemma CARD_EQ_SUM: "ALL x::'q_55192::type => bool.
  1.3815 +lemma CARD_EQ_SUM: "ALL x::'q_56096::type => bool.
  1.3816     FINITE x -->
  1.3817     real_of_num (CARD x) =
  1.3818 -   hollight.sum x (%x::'q_55192::type. real_of_num (NUMERAL_BIT1 0))"
  1.3819 +   hollight.sum x (%x::'q_56096::type. real_of_num (NUMERAL_BIT1 0))"
  1.3820    by (import hollight CARD_EQ_SUM)
  1.3821  
  1.3822  lemma SUM_MULTICOUNT_GEN: "ALL (R::'A::type => 'B::type => bool) (s::'A::type => bool)
  1.3823 @@ -8445,10 +8797,10 @@
  1.3824           g)"
  1.3825    by (import hollight SUM_IMAGE_GEN)
  1.3826  
  1.3827 -lemma REAL_OF_NUM_SUM: "ALL (f::'q_55589::type => nat) s::'q_55589::type => bool.
  1.3828 +lemma REAL_OF_NUM_SUM: "ALL (f::'q_56493::type => nat) s::'q_56493::type => bool.
  1.3829     FINITE s -->
  1.3830     real_of_num (nsum s f) =
  1.3831 -   hollight.sum s (%x::'q_55589::type. real_of_num (f x))"
  1.3832 +   hollight.sum s (%x::'q_56493::type. real_of_num (f x))"
  1.3833    by (import hollight REAL_OF_NUM_SUM)
  1.3834  
  1.3835  lemma SUM_SUBSET: "ALL (u::'A::type => bool) (v::'A::type => bool)
  1.3836 @@ -8508,7 +8860,7 @@
  1.3837     real_mul (real_of_num (xb + NUMERAL_BIT1 0 - xa)) x"
  1.3838    by (import hollight SUM_CONST_NUMSEG)
  1.3839  
  1.3840 -lemma SUM_EQ_0_NUMSEG: "ALL (x::nat => hollight.real) xa::'q_56115::type.
  1.3841 +lemma SUM_EQ_0_NUMSEG: "ALL (x::nat => hollight.real) xa::'q_57019::type.
  1.3842     (ALL i::nat. <= (m::nat) i & <= i (n::nat) --> x i = real_of_num 0) -->
  1.3843     hollight.sum (dotdot m n) x = real_of_num 0"
  1.3844    by (import hollight SUM_EQ_0_NUMSEG)
  1.3845 @@ -8554,6 +8906,11 @@
  1.3846      (hollight.sum (dotdot (xb + NUMERAL_BIT1 0) (xb + xc)) x)"
  1.3847    by (import hollight SUM_ADD_SPLIT)
  1.3848  
  1.3849 +lemma SUM_OFFSET: "ALL (x::nat => hollight.real) (xa::nat) xb::nat.
  1.3850 +   hollight.sum (dotdot (xa + xb) ((n::nat) + xb)) x =
  1.3851 +   hollight.sum (dotdot xa n) (%i::nat. x (i + xb))"
  1.3852 +  by (import hollight SUM_OFFSET)
  1.3853 +
  1.3854  lemma SUM_OFFSET_0: "ALL (x::nat => hollight.real) (xa::nat) xb::nat.
  1.3855     <= xa xb -->
  1.3856     hollight.sum (dotdot xa xb) x =
  1.3857 @@ -8577,105 +8934,136 @@
  1.3858     hollight.sum (dotdot xa xb) (%i::nat. real_of_num (x i))"
  1.3859    by (import hollight REAL_OF_NUM_SUM_NUMSEG)
  1.3860  
  1.3861 -constdefs
  1.3862 -  CASEWISE :: "(('q_56787 => 'q_56791) * ('q_56792 => 'q_56787 => 'q_56751)) hollight.list
  1.3863 -=> 'q_56792 => 'q_56791 => 'q_56751" 
  1.3864 +lemma SUM_BIJECTION: "ALL (x::'A::type => hollight.real) (xa::'A::type => 'A::type)
  1.3865 +   xb::'A::type => bool.
  1.3866 +   FINITE xb &
  1.3867 +   (ALL x::'A::type. IN x xb --> IN (xa x) xb) &
  1.3868 +   (ALL y::'A::type. IN y xb --> (EX! x::'A::type. IN x xb & xa x = y)) -->
  1.3869 +   hollight.sum xb x = hollight.sum xb (x o xa)"
  1.3870 +  by (import hollight SUM_BIJECTION)
  1.3871 +
  1.3872 +lemma SUM_SUM_PRODUCT: "ALL (x::'A::type => bool) (xa::'A::type => 'B::type => bool)
  1.3873 +   xb::'A::type => 'B::type => hollight.real.
  1.3874 +   FINITE x & (ALL i::'A::type. IN i x --> FINITE (xa i)) -->
  1.3875 +   hollight.sum x (%x::'A::type. hollight.sum (xa x) (xb x)) =
  1.3876 +   hollight.sum
  1.3877 +    (GSPEC
  1.3878 +      (%u::'A::type * 'B::type.
  1.3879 +          EX (i::'A::type) j::'B::type.
  1.3880 +             SETSPEC u (IN i x & IN j (xa i)) (i, j)))
  1.3881 +    (GABS
  1.3882 +      (%f::'A::type * 'B::type => hollight.real.
  1.3883 +          ALL (i::'A::type) j::'B::type. GEQ (f (i, j)) (xb i j)))"
  1.3884 +  by (import hollight SUM_SUM_PRODUCT)
  1.3885 +
  1.3886 +lemma SUM_EQ_GENERAL: "ALL (x::'A::type => bool) (xa::'B::type => bool)
  1.3887 +   (xb::'A::type => hollight.real) (xc::'B::type => hollight.real)
  1.3888 +   xd::'A::type => 'B::type.
  1.3889 +   FINITE x &
  1.3890 +   (ALL y::'B::type. IN y xa --> (EX! xa::'A::type. IN xa x & xd xa = y)) &
  1.3891 +   (ALL xe::'A::type. IN xe x --> IN (xd xe) xa & xc (xd xe) = xb xe) -->
  1.3892 +   hollight.sum x xb = hollight.sum xa xc"
  1.3893 +  by (import hollight SUM_EQ_GENERAL)
  1.3894 +
  1.3895 +constdefs
  1.3896 +  CASEWISE :: "(('q_57926 => 'q_57930) * ('q_57931 => 'q_57926 => 'q_57890)) hollight.list
  1.3897 +=> 'q_57931 => 'q_57930 => 'q_57890" 
  1.3898    "CASEWISE ==
  1.3899 -SOME CASEWISE::(('q_56787::type => 'q_56791::type) *
  1.3900 -                ('q_56792::type
  1.3901 -                 => 'q_56787::type => 'q_56751::type)) hollight.list
  1.3902 -               => 'q_56792::type => 'q_56791::type => 'q_56751::type.
  1.3903 -   (ALL (f::'q_56792::type) x::'q_56791::type.
  1.3904 -       CASEWISE NIL f x = (SOME y::'q_56751::type. True)) &
  1.3905 -   (ALL (h::('q_56787::type => 'q_56791::type) *
  1.3906 -            ('q_56792::type => 'q_56787::type => 'q_56751::type))
  1.3907 -       (t::(('q_56787::type => 'q_56791::type) *
  1.3908 -            ('q_56792::type
  1.3909 -             => 'q_56787::type => 'q_56751::type)) hollight.list)
  1.3910 -       (f::'q_56792::type) x::'q_56791::type.
  1.3911 +SOME CASEWISE::(('q_57926::type => 'q_57930::type) *
  1.3912 +                ('q_57931::type
  1.3913 +                 => 'q_57926::type => 'q_57890::type)) hollight.list
  1.3914 +               => 'q_57931::type => 'q_57930::type => 'q_57890::type.
  1.3915 +   (ALL (f::'q_57931::type) x::'q_57930::type.
  1.3916 +       CASEWISE NIL f x = (SOME y::'q_57890::type. True)) &
  1.3917 +   (ALL (h::('q_57926::type => 'q_57930::type) *
  1.3918 +            ('q_57931::type => 'q_57926::type => 'q_57890::type))
  1.3919 +       (t::(('q_57926::type => 'q_57930::type) *
  1.3920 +            ('q_57931::type
  1.3921 +             => 'q_57926::type => 'q_57890::type)) hollight.list)
  1.3922 +       (f::'q_57931::type) x::'q_57930::type.
  1.3923         CASEWISE (CONS h t) f x =
  1.3924 -       COND (EX y::'q_56787::type. fst h y = x)
  1.3925 -        (snd h f (SOME y::'q_56787::type. fst h y = x)) (CASEWISE t f x))"
  1.3926 +       COND (EX y::'q_57926::type. fst h y = x)
  1.3927 +        (snd h f (SOME y::'q_57926::type. fst h y = x)) (CASEWISE t f x))"
  1.3928  
  1.3929  lemma DEF_CASEWISE: "CASEWISE =
  1.3930 -(SOME CASEWISE::(('q_56787::type => 'q_56791::type) *
  1.3931 -                 ('q_56792::type
  1.3932 -                  => 'q_56787::type => 'q_56751::type)) hollight.list
  1.3933 -                => 'q_56792::type => 'q_56791::type => 'q_56751::type.
  1.3934 -    (ALL (f::'q_56792::type) x::'q_56791::type.
  1.3935 -        CASEWISE NIL f x = (SOME y::'q_56751::type. True)) &
  1.3936 -    (ALL (h::('q_56787::type => 'q_56791::type) *
  1.3937 -             ('q_56792::type => 'q_56787::type => 'q_56751::type))
  1.3938 -        (t::(('q_56787::type => 'q_56791::type) *
  1.3939 -             ('q_56792::type
  1.3940 -              => 'q_56787::type => 'q_56751::type)) hollight.list)
  1.3941 -        (f::'q_56792::type) x::'q_56791::type.
  1.3942 +(SOME CASEWISE::(('q_57926::type => 'q_57930::type) *
  1.3943 +                 ('q_57931::type
  1.3944 +                  => 'q_57926::type => 'q_57890::type)) hollight.list
  1.3945 +                => 'q_57931::type => 'q_57930::type => 'q_57890::type.
  1.3946 +    (ALL (f::'q_57931::type) x::'q_57930::type.
  1.3947 +        CASEWISE NIL f x = (SOME y::'q_57890::type. True)) &
  1.3948 +    (ALL (h::('q_57926::type => 'q_57930::type) *
  1.3949 +             ('q_57931::type => 'q_57926::type => 'q_57890::type))
  1.3950 +        (t::(('q_57926::type => 'q_57930::type) *
  1.3951 +             ('q_57931::type
  1.3952 +              => 'q_57926::type => 'q_57890::type)) hollight.list)
  1.3953 +        (f::'q_57931::type) x::'q_57930::type.
  1.3954          CASEWISE (CONS h t) f x =
  1.3955 -        COND (EX y::'q_56787::type. fst h y = x)
  1.3956 -         (snd h f (SOME y::'q_56787::type. fst h y = x)) (CASEWISE t f x)))"
  1.3957 +        COND (EX y::'q_57926::type. fst h y = x)
  1.3958 +         (snd h f (SOME y::'q_57926::type. fst h y = x)) (CASEWISE t f x)))"
  1.3959    by (import hollight DEF_CASEWISE)
  1.3960  
  1.3961  lemma CASEWISE: "(op &::bool => bool => bool)
  1.3962 - ((op =::'q_56811::type => 'q_56811::type => bool)
  1.3963 -   ((CASEWISE::(('q_56803::type => 'q_56851::type) *
  1.3964 -                ('q_56852::type
  1.3965 -                 => 'q_56803::type => 'q_56811::type)) hollight.list
  1.3966 -               => 'q_56852::type => 'q_56851::type => 'q_56811::type)
  1.3967 -     (NIL::(('q_56803::type => 'q_56851::type) *
  1.3968 -            ('q_56852::type
  1.3969 -             => 'q_56803::type => 'q_56811::type)) hollight.list)
  1.3970 -     (f::'q_56852::type) (x::'q_56851::type))
  1.3971 -   ((Eps::('q_56811::type => bool) => 'q_56811::type)
  1.3972 -     (%y::'q_56811::type. True::bool)))
  1.3973 - ((op =::'q_56812::type => 'q_56812::type => bool)
  1.3974 -   ((CASEWISE::(('q_56854::type => 'q_56851::type) *
  1.3975 -                ('q_56852::type
  1.3976 -                 => 'q_56854::type => 'q_56812::type)) hollight.list
  1.3977 -               => 'q_56852::type => 'q_56851::type => 'q_56812::type)
  1.3978 -     ((CONS::('q_56854::type => 'q_56851::type) *
  1.3979 -             ('q_56852::type => 'q_56854::type => 'q_56812::type)
  1.3980 -             => (('q_56854::type => 'q_56851::type) *
  1.3981 -                 ('q_56852::type
  1.3982 -                  => 'q_56854::type => 'q_56812::type)) hollight.list
  1.3983 -                => (('q_56854::type => 'q_56851::type) *
  1.3984 -                    ('q_56852::type
  1.3985 -                     => 'q_56854::type => 'q_56812::type)) hollight.list)
  1.3986 -       ((Pair::('q_56854::type => 'q_56851::type)
  1.3987 -               => ('q_56852::type => 'q_56854::type => 'q_56812::type)
  1.3988 -                  => ('q_56854::type => 'q_56851::type) *
  1.3989 -                     ('q_56852::type => 'q_56854::type => 'q_56812::type))
  1.3990 -         (s::'q_56854::type => 'q_56851::type)
  1.3991 -         (t::'q_56852::type => 'q_56854::type => 'q_56812::type))
  1.3992 -       (clauses::(('q_56854::type => 'q_56851::type) *
  1.3993 -                  ('q_56852::type
  1.3994 -                   => 'q_56854::type => 'q_56812::type)) hollight.list))
  1.3995 + ((op =::'q_57950::type => 'q_57950::type => bool)
  1.3996 +   ((CASEWISE::(('q_57942::type => 'q_57990::type) *
  1.3997 +                ('q_57991::type
  1.3998 +                 => 'q_57942::type => 'q_57950::type)) hollight.list
  1.3999 +               => 'q_57991::type => 'q_57990::type => 'q_57950::type)
  1.4000 +     (NIL::(('q_57942::type => 'q_57990::type) *
  1.4001 +            ('q_57991::type
  1.4002 +             => 'q_57942::type => 'q_57950::type)) hollight.list)
  1.4003 +     (f::'q_57991::type) (x::'q_57990::type))
  1.4004 +   ((Eps::('q_57950::type => bool) => 'q_57950::type)
  1.4005 +     (%y::'q_57950::type. True::bool)))
  1.4006 + ((op =::'q_57951::type => 'q_57951::type => bool)
  1.4007 +   ((CASEWISE::(('q_57993::type => 'q_57990::type) *
  1.4008 +                ('q_57991::type
  1.4009 +                 => 'q_57993::type => 'q_57951::type)) hollight.list
  1.4010 +               => 'q_57991::type => 'q_57990::type => 'q_57951::type)
  1.4011 +     ((CONS::('q_57993::type => 'q_57990::type) *
  1.4012 +             ('q_57991::type => 'q_57993::type => 'q_57951::type)
  1.4013 +             => (('q_57993::type => 'q_57990::type) *
  1.4014 +                 ('q_57991::type
  1.4015 +                  => 'q_57993::type => 'q_57951::type)) hollight.list
  1.4016 +                => (('q_57993::type => 'q_57990::type) *
  1.4017 +                    ('q_57991::type
  1.4018 +                     => 'q_57993::type => 'q_57951::type)) hollight.list)
  1.4019 +       ((Pair::('q_57993::type => 'q_57990::type)
  1.4020 +               => ('q_57991::type => 'q_57993::type => 'q_57951::type)
  1.4021 +                  => ('q_57993::type => 'q_57990::type) *
  1.4022 +                     ('q_57991::type => 'q_57993::type => 'q_57951::type))
  1.4023 +         (s::'q_57993::type => 'q_57990::type)
  1.4024 +         (t::'q_57991::type => 'q_57993::type => 'q_57951::type))
  1.4025 +       (clauses::(('q_57993::type => 'q_57990::type) *
  1.4026 +                  ('q_57991::type
  1.4027 +                   => 'q_57993::type => 'q_57951::type)) hollight.list))
  1.4028       f x)
  1.4029 -   ((COND::bool => 'q_56812::type => 'q_56812::type => 'q_56812::type)
  1.4030 -     ((Ex::('q_56854::type => bool) => bool)
  1.4031 -       (%y::'q_56854::type.
  1.4032 -           (op =::'q_56851::type => 'q_56851::type => bool) (s y) x))
  1.4033 -     (t f ((Eps::('q_56854::type => bool) => 'q_56854::type)
  1.4034 -            (%y::'q_56854::type.
  1.4035 -                (op =::'q_56851::type => 'q_56851::type => bool) (s y) x)))
  1.4036 -     ((CASEWISE::(('q_56854::type => 'q_56851::type) *
  1.4037 -                  ('q_56852::type
  1.4038 -                   => 'q_56854::type => 'q_56812::type)) hollight.list
  1.4039 -                 => 'q_56852::type => 'q_56851::type => 'q_56812::type)
  1.4040 +   ((COND::bool => 'q_57951::type => 'q_57951::type => 'q_57951::type)
  1.4041 +     ((Ex::('q_57993::type => bool) => bool)
  1.4042 +       (%y::'q_57993::type.
  1.4043 +           (op =::'q_57990::type => 'q_57990::type => bool) (s y) x))
  1.4044 +     (t f ((Eps::('q_57993::type => bool) => 'q_57993::type)
  1.4045 +            (%y::'q_57993::type.
  1.4046 +                (op =::'q_57990::type => 'q_57990::type => bool) (s y) x)))
  1.4047 +     ((CASEWISE::(('q_57993::type => 'q_57990::type) *
  1.4048 +                  ('q_57991::type
  1.4049 +                   => 'q_57993::type => 'q_57951::type)) hollight.list
  1.4050 +                 => 'q_57991::type => 'q_57990::type => 'q_57951::type)
  1.4051         clauses f x)))"
  1.4052    by (import hollight CASEWISE)
  1.4053  
  1.4054 -lemma CASEWISE_CASES: "ALL (clauses::(('q_56946::type => 'q_56943::type) *
  1.4055 -               ('q_56944::type
  1.4056 -                => 'q_56946::type => 'q_56953::type)) hollight.list)
  1.4057 -   (c::'q_56944::type) x::'q_56943::type.
  1.4058 -   (EX (s::'q_56946::type => 'q_56943::type)
  1.4059 -       (t::'q_56944::type => 'q_56946::type => 'q_56953::type)
  1.4060 -       a::'q_56946::type.
  1.4061 +lemma CASEWISE_CASES: "ALL (clauses::(('q_58085::type => 'q_58082::type) *
  1.4062 +               ('q_58083::type
  1.4063 +                => 'q_58085::type => 'q_58092::type)) hollight.list)
  1.4064 +   (c::'q_58083::type) x::'q_58082::type.
  1.4065 +   (EX (s::'q_58085::type => 'q_58082::type)
  1.4066 +       (t::'q_58083::type => 'q_58085::type => 'q_58092::type)
  1.4067 +       a::'q_58085::type.
  1.4068         MEM (s, t) clauses & s a = x & CASEWISE clauses c x = t c a) |
  1.4069 -   ~ (EX (s::'q_56946::type => 'q_56943::type)
  1.4070 -         (t::'q_56944::type => 'q_56946::type => 'q_56953::type)
  1.4071 -         a::'q_56946::type. MEM (s, t) clauses & s a = x) &
  1.4072 -   CASEWISE clauses c x = (SOME y::'q_56953::type. True)"
  1.4073 +   ~ (EX (s::'q_58085::type => 'q_58082::type)
  1.4074 +         (t::'q_58083::type => 'q_58085::type => 'q_58092::type)
  1.4075 +         a::'q_58085::type. MEM (s, t) clauses & s a = x) &
  1.4076 +   CASEWISE clauses c x = (SOME y::'q_58092::type. True)"
  1.4077    by (import hollight CASEWISE_CASES)
  1.4078  
  1.4079  lemma CASEWISE_WORKS: "ALL (x::(('P::type => 'A::type) *
  1.4080 @@ -8697,32 +9085,32 @@
  1.4081    by (import hollight CASEWISE_WORKS)
  1.4082  
  1.4083  constdefs
  1.4084 -  admissible :: "('q_57089 => 'q_57082 => bool)
  1.4085 -=> (('q_57089 => 'q_57085) => 'q_57095 => bool)
  1.4086 -   => ('q_57095 => 'q_57082)
  1.4087 -      => (('q_57089 => 'q_57085) => 'q_57095 => 'q_57090) => bool" 
  1.4088 +  admissible :: "('q_58228 => 'q_58221 => bool)
  1.4089 +=> (('q_58228 => 'q_58224) => 'q_58234 => bool)
  1.4090 +   => ('q_58234 => 'q_58221)
  1.4091 +      => (('q_58228 => 'q_58224) => 'q_58234 => 'q_58229) => bool" 
  1.4092    "admissible ==
  1.4093 -%(u::'q_57089::type => 'q_57082::type => bool)
  1.4094 -   (ua::('q_57089::type => 'q_57085::type) => 'q_57095::type => bool)
  1.4095 -   (ub::'q_57095::type => 'q_57082::type)
  1.4096 -   uc::('q_57089::type => 'q_57085::type)
  1.4097 -       => 'q_57095::type => 'q_57090::type.
  1.4098 -   ALL (f::'q_57089::type => 'q_57085::type)
  1.4099 -      (g::'q_57089::type => 'q_57085::type) a::'q_57095::type.
  1.4100 +%(u::'q_58228::type => 'q_58221::type => bool)
  1.4101 +   (ua::('q_58228::type => 'q_58224::type) => 'q_58234::type => bool)
  1.4102 +   (ub::'q_58234::type => 'q_58221::type)
  1.4103 +   uc::('q_58228::type => 'q_58224::type)
  1.4104 +       => 'q_58234::type => 'q_58229::type.
  1.4105 +   ALL (f::'q_58228::type => 'q_58224::type)
  1.4106 +      (g::'q_58228::type => 'q_58224::type) a::'q_58234::type.
  1.4107        ua f a &
  1.4108 -      ua g a & (ALL z::'q_57089::type. u z (ub a) --> f z = g z) -->
  1.4109 +      ua g a & (ALL z::'q_58228::type. u z (ub a) --> f z = g z) -->
  1.4110        uc f a = uc g a"
  1.4111  
  1.4112  lemma DEF_admissible: "admissible =
  1.4113 -(%(u::'q_57089::type => 'q_57082::type => bool)
  1.4114 -    (ua::('q_57089::type => 'q_57085::type) => 'q_57095::type => bool)
  1.4115 -    (ub::'q_57095::type => 'q_57082::type)
  1.4116 -    uc::('q_57089::type => 'q_57085::type)
  1.4117 -        => 'q_57095::type => 'q_57090::type.
  1.4118 -    ALL (f::'q_57089::type => 'q_57085::type)
  1.4119 -       (g::'q_57089::type => 'q_57085::type) a::'q_57095::type.
  1.4120 +(%(u::'q_58228::type => 'q_58221::type => bool)
  1.4121 +    (ua::('q_58228::type => 'q_58224::type) => 'q_58234::type => bool)
  1.4122 +    (ub::'q_58234::type => 'q_58221::type)
  1.4123 +    uc::('q_58228::type => 'q_58224::type)
  1.4124 +        => 'q_58234::type => 'q_58229::type.
  1.4125 +    ALL (f::'q_58228::type => 'q_58224::type)
  1.4126 +       (g::'q_58228::type => 'q_58224::type) a::'q_58234::type.
  1.4127         ua f a &
  1.4128 -       ua g a & (ALL z::'q_57089::type. u z (ub a) --> f z = g z) -->
  1.4129 +       ua g a & (ALL z::'q_58228::type. u z (ub a) --> f z = g z) -->
  1.4130         uc f a = uc g a)"
  1.4131    by (import hollight DEF_admissible)
  1.4132  
  1.4133 @@ -8764,29 +9152,29 @@
  1.4134    by (import hollight DEF_tailadmissible)
  1.4135  
  1.4136  constdefs
  1.4137 -  superadmissible :: "('q_57239 => 'q_57239 => bool)
  1.4138 -=> (('q_57239 => 'q_57241) => 'q_57247 => bool)
  1.4139 -   => ('q_57247 => 'q_57239)
  1.4140 -      => (('q_57239 => 'q_57241) => 'q_57247 => 'q_57241) => bool" 
  1.4141 +  superadmissible :: "('q_58378 => 'q_58378 => bool)
  1.4142 +=> (('q_58378 => 'q_58380) => 'q_58386 => bool)
  1.4143 +   => ('q_58386 => 'q_58378)
  1.4144 +      => (('q_58378 => 'q_58380) => 'q_58386 => 'q_58380) => bool" 
  1.4145    "superadmissible ==
  1.4146 -%(u::'q_57239::type => 'q_57239::type => bool)
  1.4147 -   (ua::('q_57239::type => 'q_57241::type) => 'q_57247::type => bool)
  1.4148 -   (ub::'q_57247::type => 'q_57239::type)
  1.4149 -   uc::('q_57239::type => 'q_57241::type)
  1.4150 -       => 'q_57247::type => 'q_57241::type.
  1.4151 +%(u::'q_58378::type => 'q_58378::type => bool)
  1.4152 +   (ua::('q_58378::type => 'q_58380::type) => 'q_58386::type => bool)
  1.4153 +   (ub::'q_58386::type => 'q_58378::type)
  1.4154 +   uc::('q_58378::type => 'q_58380::type)
  1.4155 +       => 'q_58386::type => 'q_58380::type.
  1.4156     admissible u
  1.4157 -    (%(f::'q_57239::type => 'q_57241::type) a::'q_57247::type. True) ub
  1.4158 +    (%(f::'q_58378::type => 'q_58380::type) a::'q_58386::type. True) ub
  1.4159      ua -->
  1.4160     tailadmissible u ua ub uc"
  1.4161  
  1.4162  lemma DEF_superadmissible: "superadmissible =
  1.4163 -(%(u::'q_57239::type => 'q_57239::type => bool)
  1.4164 -    (ua::('q_57239::type => 'q_57241::type) => 'q_57247::type => bool)
  1.4165 -    (ub::'q_57247::type => 'q_57239::type)
  1.4166 -    uc::('q_57239::type => 'q_57241::type)
  1.4167 -        => 'q_57247::type => 'q_57241::type.
  1.4168 +(%(u::'q_58378::type => 'q_58378::type => bool)
  1.4169 +    (ua::('q_58378::type => 'q_58380::type) => 'q_58386::type => bool)
  1.4170 +    (ub::'q_58386::type => 'q_58378::type)
  1.4171 +    uc::('q_58378::type => 'q_58380::type)
  1.4172 +        => 'q_58386::type => 'q_58380::type.
  1.4173      admissible u
  1.4174 -     (%(f::'q_57239::type => 'q_57241::type) a::'q_57247::type. True) ub
  1.4175 +     (%(f::'q_58378::type => 'q_58380::type) a::'q_58386::type. True) ub
  1.4176       ua -->
  1.4177      tailadmissible u ua ub uc)"
  1.4178    by (import hollight DEF_superadmissible)
  1.4179 @@ -8825,25 +9213,25 @@
  1.4180      (%(f::'A::type => 'B::type) x::'P::type. f (xc f x))"
  1.4181    by (import hollight TAIL_IMP_SUPERADMISSIBLE)
  1.4182  
  1.4183 -lemma ADMISSIBLE_COND: "ALL (u_354::'A::type => 'q_57627::type => bool)
  1.4184 +lemma ADMISSIBLE_COND: "ALL (u_353::'A::type => 'q_58766::type => bool)
  1.4185     (p::('A::type => 'B::type) => 'P::type => bool)
  1.4186     (P::('A::type => 'B::type) => 'P::type => bool)
  1.4187 -   (s::'P::type => 'q_57627::type)
  1.4188 +   (s::'P::type => 'q_58766::type)
  1.4189     (h::('A::type => 'B::type) => 'P::type => 'B::type)
  1.4190     k::('A::type => 'B::type) => 'P::type => 'B::type.
  1.4191 -   admissible u_354 p s P &
  1.4192 -   admissible u_354 (%(f::'A::type => 'B::type) x::'P::type. p f x & P f x)
  1.4193 +   admissible u_353 p s P &
  1.4194 +   admissible u_353 (%(f::'A::type => 'B::type) x::'P::type. p f x & P f x)
  1.4195      s h &
  1.4196 -   admissible u_354
  1.4197 +   admissible u_353
  1.4198      (%(f::'A::type => 'B::type) x::'P::type. p f x & ~ P f x) s k -->
  1.4199 -   admissible u_354 p s
  1.4200 +   admissible u_353 p s
  1.4201      (%(f::'A::type => 'B::type) x::'P::type. COND (P f x) (h f x) (k f x))"
  1.4202    by (import hollight ADMISSIBLE_COND)
  1.4203  
  1.4204 -lemma ADMISSIBLE_CONST: "admissible (u_354::'q_57702::type => 'q_57701::type => bool)
  1.4205 - (p::('q_57702::type => 'q_57703::type) => 'q_57704::type => bool)
  1.4206 - (s::'q_57704::type => 'q_57701::type)
  1.4207 - (%f::'q_57702::type => 'q_57703::type. c::'q_57704::type => 'q_57705::type)"
  1.4208 +lemma ADMISSIBLE_CONST: "admissible (u_353::'q_58841::type => 'q_58840::type => bool)
  1.4209 + (p::('q_58841::type => 'q_58842::type) => 'q_58843::type => bool)
  1.4210 + (s::'q_58843::type => 'q_58840::type)
  1.4211 + (%f::'q_58841::type => 'q_58842::type. c::'q_58843::type => 'q_58844::type)"
  1.4212    by (import hollight ADMISSIBLE_CONST)
  1.4213  
  1.4214  lemma ADMISSIBLE_COMB: "ALL (x::'A::type => 'A::type => bool)
  1.4215 @@ -8883,11 +9271,41 @@
  1.4216      (%(f::'A::type => 'B::type) (x::'P::type) u::'C::type. xc u f x)"
  1.4217    by (import hollight ADMISSIBLE_LAMBDA)
  1.4218  
  1.4219 -lemma WF_REC_CASES: "ALL (u_354::'A::type => 'A::type => bool)
  1.4220 +lemma ADMISSIBLE_NSUM: "ALL (x::'B::type => 'A::type => bool)
  1.4221 +   (xa::('B::type => 'C::type) => 'P::type => bool)
  1.4222 +   (xb::'P::type => 'A::type)
  1.4223 +   (xc::('B::type => 'C::type) => 'P::type => nat => nat)
  1.4224 +   (xd::'P::type => nat) xe::'P::type => nat.
  1.4225 +   (ALL xf::nat.
  1.4226 +       admissible x
  1.4227 +        (%(f::'B::type => 'C::type) x::'P::type.
  1.4228 +            <= (xd x) xf & <= xf (xe x) & xa f x)
  1.4229 +        xb (%(f::'B::type => 'C::type) x::'P::type. xc f x xf)) -->
  1.4230 +   admissible x xa xb
  1.4231 +    (%(f::'B::type => 'C::type) x::'P::type.
  1.4232 +        nsum (dotdot (xd x) (xe x)) (xc f x))"
  1.4233 +  by (import hollight ADMISSIBLE_NSUM)
  1.4234 +
  1.4235 +lemma ADMISSIBLE_SUM: "ALL (x::'B::type => 'A::type => bool)
  1.4236 +   (xa::('B::type => 'C::type) => 'P::type => bool)
  1.4237 +   (xb::'P::type => 'A::type)
  1.4238 +   (xc::('B::type => 'C::type) => 'P::type => nat => hollight.real)
  1.4239 +   (xd::'P::type => nat) xe::'P::type => nat.
  1.4240 +   (ALL xf::nat.
  1.4241 +       admissible x
  1.4242 +        (%(f::'B::type => 'C::type) x::'P::type.
  1.4243 +            <= (xd x) xf & <= xf (xe x) & xa f x)
  1.4244 +        xb (%(f::'B::type => 'C::type) x::'P::type. xc f x xf)) -->
  1.4245 +   admissible x xa xb
  1.4246 +    (%(f::'B::type => 'C::type) x::'P::type.
  1.4247 +        hollight.sum (dotdot (xd x) (xe x)) (xc f x))"
  1.4248 +  by (import hollight ADMISSIBLE_SUM)
  1.4249 +
  1.4250 +lemma WF_REC_CASES: "ALL (u_353::'A::type => 'A::type => bool)
  1.4251     clauses::(('P::type => 'A::type) *
  1.4252               (('A::type => 'B::type)
  1.4253                => 'P::type => 'B::type)) hollight.list.
  1.4254 -   WF u_354 &
  1.4255 +   WF u_353 &
  1.4256     ALL_list
  1.4257      (GABS
  1.4258        (%f::('P::type => 'A::type) *
  1.4259 @@ -8900,10 +9318,10 @@
  1.4260                    (G::('A::type => 'B::type) => 'P::type => 'A::type)
  1.4261                    H::('A::type => 'B::type) => 'P::type => 'B::type.
  1.4262                    (ALL (f::'A::type => 'B::type) (a::'P::type) y::'A::type.
  1.4263 -                      P f a & u_354 y (G f a) --> u_354 y (s a)) &
  1.4264 +                      P f a & u_353 y (G f a) --> u_353 y (s a)) &
  1.4265                    (ALL (f::'A::type => 'B::type) (g::'A::type => 'B::type)
  1.4266                        a::'P::type.
  1.4267 -                      (ALL z::'A::type. u_354 z (s a) --> f z = g z) -->
  1.4268 +                      (ALL z::'A::type. u_353 z (s a) --> f z = g z) -->
  1.4269                        P f a = P g a & G f a = G g a & H f a = H g a) &
  1.4270                    (ALL (f::'A::type => 'B::type) a::'P::type.
  1.4271                        t f a = COND (P f a) (f (G f a)) (H f a)))))
  1.4272 @@ -8946,5084 +9364,98 @@
  1.4273          clauses)"
  1.4274    by (import hollight RECURSION_CASEWISE)
  1.4275  
  1.4276 -lemma cth: "ALL (p1::'A::type => 'q_58634::type)
  1.4277 -   (p2::'q_58645::type => 'A::type => 'q_58639::type)
  1.4278 -   (p1'::'A::type => 'q_58634::type)
  1.4279 -   p2'::'q_58645::type => 'A::type => 'q_58639::type.
  1.4280 -   (ALL (c::'q_58645::type) (x::'A::type) y::'A::type.
  1.4281 +lemma cth: "ALL (p1::'A::type => 'q_59947::type)
  1.4282 +   (p2::'q_59958::type => 'A::type => 'q_59952::type)
  1.4283 +   (p1'::'A::type => 'q_59947::type)
  1.4284 +   p2'::'q_59958::type => 'A::type => 'q_59952::type.
  1.4285 +   (ALL (c::'q_59958::type) (x::'A::type) y::'A::type.
  1.4286         p1 x = p1' y --> p2 c x = p2' c y) -->
  1.4287 -   (ALL (c::'q_58645::type) (x::'A::type) y::'A::type.
  1.4288 +   (ALL (c::'q_59958::type) (x::'A::type) y::'A::type.
  1.4289         p1' x = p1 y --> p2' c x = p2 c y)"
  1.4290    by (import hollight cth)
  1.4291  
  1.4292 -lemma RECURSION_CASEWISE_PAIRWISE: "ALL x::(('q_58682::type => 'q_58662::type) *
  1.4293 -        (('q_58662::type => 'q_58678::type)
  1.4294 -         => 'q_58682::type => 'q_58678::type)) hollight.list.
  1.4295 -   (EX u::'q_58662::type => 'q_58662::type => bool.
  1.4296 +lemma RECURSION_CASEWISE_PAIRWISE: "ALL x::(('q_59995::type => 'q_59975::type) *
  1.4297 +        (('q_59975::type => 'q_59991::type)
  1.4298 +         => 'q_59995::type => 'q_59991::type)) hollight.list.
  1.4299 +   (EX u::'q_59975::type => 'q_59975::type => bool.
  1.4300         WF u &
  1.4301         ALL_list
  1.4302          (GABS
  1.4303 -          (%f::('q_58682::type => 'q_58662::type) *
  1.4304 -               (('q_58662::type => 'q_58678::type)
  1.4305 -                => 'q_58682::type => 'q_58678::type)
  1.4306 +          (%f::('q_59995::type => 'q_59975::type) *
  1.4307 +               (('q_59975::type => 'q_59991::type)
  1.4308 +                => 'q_59995::type => 'q_59991::type)
  1.4309                 => bool.
  1.4310 -              ALL (s::'q_58682::type => 'q_58662::type)
  1.4311 -                 t::('q_58662::type => 'q_58678::type)
  1.4312 -                    => 'q_58682::type => 'q_58678::type.
  1.4313 +              ALL (s::'q_59995::type => 'q_59975::type)
  1.4314 +                 t::('q_59975::type => 'q_59991::type)
  1.4315 +                    => 'q_59995::type => 'q_59991::type.
  1.4316                   GEQ (f (s, t))
  1.4317                    (tailadmissible u
  1.4318 -                    (%(f::'q_58662::type => 'q_58678::type)
  1.4319 -                        a::'q_58682::type. True)
  1.4320 +                    (%(f::'q_59975::type => 'q_59991::type)
  1.4321 +                        a::'q_59995::type. True)
  1.4322                      s t)))
  1.4323          x) &
  1.4324     ALL_list
  1.4325      (GABS
  1.4326 -      (%f::('q_58682::type => 'q_58662::type) *
  1.4327 -           (('q_58662::type => 'q_58678::type)
  1.4328 -            => 'q_58682::type => 'q_58678::type)
  1.4329 +      (%f::('q_59995::type => 'q_59975::type) *
  1.4330 +           (('q_59975::type => 'q_59991::type)
  1.4331 +            => 'q_59995::type => 'q_59991::type)
  1.4332             => bool.
  1.4333 -          ALL (a::'q_58682::type => 'q_58662::type)
  1.4334 -             b::('q_58662::type => 'q_58678::type)
  1.4335 -                => 'q_58682::type => 'q_58678::type.
  1.4336 +          ALL (a::'q_59995::type => 'q_59975::type)
  1.4337 +             b::('q_59975::type => 'q_59991::type)
  1.4338 +                => 'q_59995::type => 'q_59991::type.
  1.4339               GEQ (f (a, b))
  1.4340 -              (ALL (c::'q_58662::type => 'q_58678::type) (x::'q_58682::type)
  1.4341 -                  y::'q_58682::type. a x = a y --> b c x = b c y)))
  1.4342 +              (ALL (c::'q_59975::type => 'q_59991::type) (x::'q_59995::type)
  1.4343 +                  y::'q_59995::type. a x = a y --> b c x = b c y)))
  1.4344      x &
  1.4345     PAIRWISE
  1.4346      (GABS
  1.4347 -      (%f::('q_58682::type => 'q_58662::type) *
  1.4348 -           (('q_58662::type => 'q_58678::type)
  1.4349 -            => 'q_58682::type => 'q_58678::type)
  1.4350 -           => ('q_58682::type => 'q_58662::type) *
  1.4351 -              (('q_58662::type => 'q_58678::type)
  1.4352 -               => 'q_58682::type => 'q_58678::type)
  1.4353 +      (%f::('q_59995::type => 'q_59975::type) *
  1.4354 +           (('q_59975::type => 'q_59991::type)
  1.4355 +            => 'q_59995::type => 'q_59991::type)
  1.4356 +           => ('q_59995::type => 'q_59975::type) *
  1.4357 +              (('q_59975::type => 'q_59991::type)
  1.4358 +               => 'q_59995::type => 'q_59991::type)
  1.4359                => bool.
  1.4360 -          ALL (s::'q_58682::type => 'q_58662::type)
  1.4361 -             t::('q_58662::type => 'q_58678::type)
  1.4362 -                => 'q_58682::type => 'q_58678::type.
  1.4363 +          ALL (s::'q_59995::type => 'q_59975::type)
  1.4364 +             t::('q_59975::type => 'q_59991::type)
  1.4365 +                => 'q_59995::type => 'q_59991::type.
  1.4366               GEQ (f (s, t))
  1.4367                (GABS
  1.4368 -                (%f::('q_58682::type => 'q_58662::type) *
  1.4369 -                     (('q_58662::type => 'q_58678::type)
  1.4370 -                      => 'q_58682::type => 'q_58678::type)
  1.4371 +                (%f::('q_59995::type => 'q_59975::type) *
  1.4372 +                     (('q_59975::type => 'q_59991::type)
  1.4373 +                      => 'q_59995::type => 'q_59991::type)
  1.4374                       => bool.
  1.4375 -                    ALL (s'::'q_58682::type => 'q_58662::type)
  1.4376 -                       t'::('q_58662::type => 'q_58678::type)
  1.4377 -                           => 'q_58682::type => 'q_58678::type.
  1.4378 +                    ALL (s'::'q_59995::type => 'q_59975::type)
  1.4379 +                       t'::('q_59975::type => 'q_59991::type)
  1.4380 +                           => 'q_59995::type => 'q_59991::type.
  1.4381                         GEQ (f (s', t'))
  1.4382 -                        (ALL (c::'q_58662::type => 'q_58678::type)
  1.4383 -                            (x::'q_58682::type) y::'q_58682::type.
  1.4384 +                        (ALL (c::'q_59975::type => 'q_59991::type)
  1.4385 +                            (x::'q_59995::type) y::'q_59995::type.
  1.4386                              s x = s' y --> t c x = t' c y)))))
  1.4387      x -->
  1.4388 -   (EX f::'q_58662::type => 'q_58678::type.
  1.4389 +   (EX f::'q_59975::type => 'q_59991::type.
  1.4390         ALL_list
  1.4391          (GABS
  1.4392 -          (%fa::('q_58682::type => 'q_58662::type) *
  1.4393 -                (('q_58662::type => 'q_58678::type)
  1.4394 -                 => 'q_58682::type => 'q_58678::type)
  1.4395 +          (%fa::('q_59995::type => 'q_59975::type) *
  1.4396 +                (('q_59975::type => 'q_59991::type)
  1.4397 +                 => 'q_59995::type => 'q_59991::type)
  1.4398                  => bool.
  1.4399 -              ALL (s::'q_58682::type => 'q_58662::type)
  1.4400 -                 t::('q_58662::type => 'q_58678::type)
  1.4401 -                    => 'q_58682::type => 'q_58678::type.
  1.4402 -                 GEQ (fa (s, t)) (ALL x::'q_58682::type. f (s x) = t f x)))
  1.4403 +              ALL (s::'q_59995::type => 'q_59975::type)
  1.4404 +                 t::('q_59975::type => 'q_59991::type)
  1.4405 +                    => 'q_59995::type => 'q_59991::type.
  1.4406 +                 GEQ (fa (s, t)) (ALL x::'q_59995::type. f (s x) = t f x)))
  1.4407          x)"
  1.4408    by (import hollight RECURSION_CASEWISE_PAIRWISE)
  1.4409  
  1.4410 -lemma SUPERADMISSIBLE_T: "superadmissible (u_354::'q_58792::type => 'q_58792::type => bool)
  1.4411 - (%(f::'q_58792::type => 'q_58794::type) x::'q_58798::type. True)
  1.4412 - (s::'q_58798::type => 'q_58792::type)
  1.4413 - (t::('q_58792::type => 'q_58794::type)
  1.4414 -     => 'q_58798::type => 'q_58794::type) =
  1.4415 -tailadmissible u_354
  1.4416 - (%(f::'q_58792::type => 'q_58794::type) x::'q_58798::type. True) s t"
  1.4417 +lemma SUPERADMISSIBLE_T: "superadmissible (u_353::'q_60105::type => 'q_60105::type => bool)
  1.4418 + (%(f::'q_60105::type => 'q_60107::type) x::'q_60111::type. True)
  1.4419 + (s::'q_60111::type => 'q_60105::type)
  1.4420 + (t::('q_60105::type => 'q_60107::type)
  1.4421 +     => 'q_60111::type => 'q_60107::type) =
  1.4422 +tailadmissible u_353
  1.4423 + (%(f::'q_60105::type => 'q_60107::type) x::'q_60111::type. True) s t"
  1.4424    by (import hollight SUPERADMISSIBLE_T)
  1.4425  
  1.4426 -lemma SUB_SUB: "ALL (x::nat) xa::nat. <= xa x --> (ALL a::nat. a - (x - xa) = a + xa - x)"
  1.4427 -  by (import hollight SUB_SUB)
  1.4428 -
  1.4429 -lemma SUB_OLD: "(ALL m::nat. 0 - m = 0) &
  1.4430 -(ALL (m::nat) n::nat. Suc m - n = COND (< m n) 0 (Suc (m - n)))"
  1.4431 -  by (import hollight SUB_OLD)
  1.4432 -
  1.4433 -lemma real_le: "ALL (x::hollight.real) xa::hollight.real. real_le x xa = (~ real_lt xa x)"
  1.4434 -  by (import hollight real_le)
  1.4435 -
  1.4436 -lemma REAL_MUL_RID: "ALL x::hollight.real. real_mul x (real_of_num (NUMERAL_BIT1 0)) = x"
  1.4437 -  by (import hollight REAL_MUL_RID)
  1.4438 -
  1.4439 -lemma REAL_MUL_RINV: "ALL x::hollight.real.
  1.4440 -   x ~= real_of_num 0 -->
  1.4441 -   real_mul x (real_inv x) = real_of_num (NUMERAL_BIT1 0)"
  1.4442 -  by (import hollight REAL_MUL_RINV)
  1.4443 -
  1.4444 -lemma REAL_RDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4445 -   real_mul (real_add x y) z = real_add (real_mul x z) (real_mul y z)"
  1.4446 -  by (import hollight REAL_RDISTRIB)
  1.4447 -
  1.4448 -lemma REAL_EQ_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4449 -   (real_add x y = real_add x z) = (y = z)"
  1.4450 -  by (import hollight REAL_EQ_LADD)
  1.4451 -
  1.4452 -lemma REAL_EQ_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4453 -   (real_add x z = real_add y z) = (x = y)"
  1.4454 -  by (import hollight REAL_EQ_RADD)
  1.4455 -
  1.4456 -lemma REAL_ADD_LID_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.4457 -   (real_add x y = y) = (x = real_of_num 0)"
  1.4458 -  by (import hollight REAL_ADD_LID_UNIQ)
  1.4459 -
  1.4460 -lemma REAL_ADD_RID_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.4461 -   (real_add x y = x) = (y = real_of_num 0)"
  1.4462 -  by (import hollight REAL_ADD_RID_UNIQ)
  1.4463 -
  1.4464 -lemma REAL_LNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.4465 -   (real_add x y = real_of_num 0) = (x = real_neg y)"
  1.4466 -  by (import hollight REAL_LNEG_UNIQ)
  1.4467 -
  1.4468 -lemma REAL_RNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.4469 -   (real_add x y = real_of_num 0) = (y = real_neg x)"
  1.4470 -  by (import hollight REAL_RNEG_UNIQ)
  1.4471 -
  1.4472 -lemma REAL_NEG_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.4473 -   real_neg (real_add x y) = real_add (real_neg x) (real_neg y)"
  1.4474 -  by (import hollight REAL_NEG_ADD)
  1.4475 -
  1.4476 -lemma REAL_MUL_LZERO: "ALL x::hollight.real. real_mul (real_of_num 0) x = real_of_num 0"
  1.4477 -  by (import hollight REAL_MUL_LZERO)
  1.4478 -
  1.4479 -lemma REAL_MUL_RZERO: "ALL x::hollight.real. real_mul x (real_of_num 0) = real_of_num 0"
  1.4480 -  by (import hollight REAL_MUL_RZERO)
  1.4481 -
  1.4482 -lemma REAL_NEG_LMUL: "ALL (x::hollight.real) y::hollight.real.
  1.4483 -   real_neg (real_mul x y) = real_mul (real_neg x) y"
  1.4484 -  by (import hollight REAL_NEG_LMUL)
  1.4485 -
  1.4486 -lemma REAL_NEG_RMUL: "ALL (x::hollight.real) y::hollight.real.
  1.4487 -   real_neg (real_mul x y) = real_mul x (real_neg y)"
  1.4488 -  by (import hollight REAL_NEG_RMUL)
  1.4489 -
  1.4490 -lemma REAL_NEGNEG: "ALL x::hollight.real. real_neg (real_neg x) = x"
  1.4491 -  by (import hollight REAL_NEGNEG)
  1.4492 -
  1.4493 -lemma REAL_NEG_MUL2: "ALL (x::hollight.real) xa::hollight.real.
  1.4494 -   real_mul (real_neg x) (real_neg xa) = real_mul x xa"
  1.4495 -  by (import hollight REAL_NEG_MUL2)
  1.4496 -
  1.4497 -lemma REAL_LT_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4498 -   real_lt (real_add x y) (real_add x z) = real_lt y z"
  1.4499 -  by (import hollight REAL_LT_LADD)
  1.4500 -
  1.4501 -lemma REAL_LT_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4502 -   real_lt (real_add x z) (real_add y z) = real_lt x y"
  1.4503 -  by (import hollight REAL_LT_RADD)
  1.4504 -
  1.4505 -lemma REAL_NOT_LT: "ALL (x::hollight.real) y::hollight.real. (~ real_lt x y) = real_le y x"
  1.4506 -  by (import hollight REAL_NOT_LT)
  1.4507 -
  1.4508 -lemma REAL_LT_ANTISYM: "ALL (x::hollight.real) y::hollight.real. ~ (real_lt x y & real_lt y x)"
  1.4509 -  by (import hollight REAL_LT_ANTISYM)
  1.4510 -
  1.4511 -lemma REAL_LT_GT: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> ~ real_lt y x"
  1.4512 -  by (import hollight REAL_LT_GT)
  1.4513 -
  1.4514 -lemma REAL_LE_TOTAL: "ALL (x::hollight.real) y::hollight.real. real_le x y | real_le y x"
  1.4515 -  by (import hollight REAL_LE_TOTAL)
  1.4516 -
  1.4517 -lemma REAL_LE_REFL: "ALL x::hollight.real. real_le x x"
  1.4518 -  by (import hollight REAL_LE_REFL)
  1.4519 -
  1.4520 -lemma REAL_LE_LT: "ALL (x::hollight.real) y::hollight.real. real_le x y = (real_lt x y | x = y)"
  1.4521 -  by (import hollight REAL_LE_LT)
  1.4522 -
  1.4523 -lemma REAL_LT_LE: "ALL (x::hollight.real) y::hollight.real.
  1.4524 -   real_lt x y = (real_le x y & x ~= y)"
  1.4525 -  by (import hollight REAL_LT_LE)
  1.4526 -
  1.4527 -lemma REAL_LT_IMP_LE: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> real_le x y"
  1.4528 -  by (import hollight REAL_LT_IMP_LE)
  1.4529 -
  1.4530 -lemma REAL_LTE_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4531 -   real_lt x y & real_le y z --> real_lt x z"
  1.4532 -  by (import hollight REAL_LTE_TRANS)
  1.4533 -
  1.4534 -lemma REAL_LE_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4535 -   real_le x y & real_le y z --> real_le x z"
  1.4536 -  by (import hollight REAL_LE_TRANS)
  1.4537 -
  1.4538 -lemma REAL_NEG_LT0: "ALL x::hollight.real.
  1.4539 -   real_lt (real_neg x) (real_of_num 0) = real_lt (real_of_num 0) x"
  1.4540 -  by (import hollight REAL_NEG_LT0)
  1.4541 -
  1.4542 -lemma REAL_NEG_GT0: "ALL x::hollight.real.
  1.4543 -   real_lt (real_of_num 0) (real_neg x) = real_lt x (real_of_num 0)"
  1.4544 -  by (import hollight REAL_NEG_GT0)
  1.4545 -
  1.4546 -lemma REAL_NEG_LE0: "ALL x::hollight.real.
  1.4547 -   real_le (real_neg x) (real_of_num 0) = real_le (real_of_num 0) x"
  1.4548 -  by (import hollight REAL_NEG_LE0)
  1.4549 -
  1.4550 -lemma REAL_NEG_GE0: "ALL x::hollight.real.
  1.4551 -   real_le (real_of_num 0) (real_neg x) = real_le x (real_of_num 0)"
  1.4552 -  by (import hollight REAL_NEG_GE0)
  1.4553 -
  1.4554 -lemma REAL_LT_NEGTOTAL: "ALL x::hollight.real.
  1.4555 -   x = real_of_num 0 |
  1.4556 -   real_lt (real_of_num 0) x | real_lt (real_of_num 0) (real_neg x)"
  1.4557 -  by (import hollight REAL_LT_NEGTOTAL)
  1.4558 -
  1.4559 -lemma REAL_LE_NEGTOTAL: "ALL x::hollight.real.
  1.4560 -   real_le (real_of_num 0) x | real_le (real_of_num 0) (real_neg x)"
  1.4561 -  by (import hollight REAL_LE_NEGTOTAL)
  1.4562 -
  1.4563 -lemma REAL_LE_MUL: "ALL (x::hollight.real) y::hollight.real.
  1.4564 -   real_le (real_of_num 0) x & real_le (real_of_num 0) y -->
  1.4565 -   real_le (real_of_num 0) (real_mul x y)"
  1.4566 -  by (import hollight REAL_LE_MUL)
  1.4567 -
  1.4568 -lemma REAL_LE_SQUARE: "ALL x::hollight.real. real_le (real_of_num 0) (real_mul x x)"
  1.4569 -  by (import hollight REAL_LE_SQUARE)
  1.4570 -
  1.4571 -lemma REAL_LT_01: "real_lt (real_of_num 0) (real_of_num (NUMERAL_BIT1 0))"
  1.4572 -  by (import hollight REAL_LT_01)
  1.4573 -
  1.4574 -lemma REAL_LE_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4575 -   real_le (real_add x y) (real_add x z) = real_le y z"
  1.4576 -  by (import hollight REAL_LE_LADD)
  1.4577 -
  1.4578 -lemma REAL_LE_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4579 -   real_le (real_add x z) (real_add y z) = real_le x y"
  1.4580 -  by (import hollight REAL_LE_RADD)
  1.4581 -
  1.4582 -lemma REAL_LT_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.4583 -   z::hollight.real.
  1.4584 -   real_lt w x & real_lt y z --> real_lt (real_add w y) (real_add x z)"
  1.4585 -  by (import hollight REAL_LT_ADD2)
  1.4586 -
  1.4587 -lemma REAL_LT_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.4588 -   real_lt (real_of_num 0) x & real_lt (real_of_num 0) y -->
  1.4589 -   real_lt (real_of_num 0) (real_add x y)"
  1.4590 -  by (import hollight REAL_LT_ADD)
  1.4591 -
  1.4592 -lemma REAL_LT_ADDNEG: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4593 -   real_lt y (real_add x (real_neg z)) = real_lt (real_add y z) x"
  1.4594 -  by (import hollight REAL_LT_ADDNEG)
  1.4595 -
  1.4596 -lemma REAL_LT_ADDNEG2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4597 -   real_lt (real_add x (real_neg y)) z = real_lt x (real_add z y)"
  1.4598 -  by (import hollight REAL_LT_ADDNEG2)
  1.4599 -
  1.4600 -lemma REAL_LT_ADD1: "ALL (x::hollight.real) y::hollight.real.
  1.4601 -   real_le x y --> real_lt x (real_add y (real_of_num (NUMERAL_BIT1 0)))"
  1.4602 -  by (import hollight REAL_LT_ADD1)
  1.4603 -
  1.4604 -lemma REAL_SUB_ADD: "ALL (x::hollight.real) y::hollight.real. real_add (real_sub x y) y = x"
  1.4605 -  by (import hollight REAL_SUB_ADD)
  1.4606 -
  1.4607 -lemma REAL_SUB_ADD2: "ALL (x::hollight.real) y::hollight.real. real_add y (real_sub x y) = x"
  1.4608 -  by (import hollight REAL_SUB_ADD2)
  1.4609 -
  1.4610 -lemma REAL_SUB_REFL: "ALL x::hollight.real. real_sub x x = real_of_num 0"
  1.4611 -  by (import hollight REAL_SUB_REFL)
  1.4612 -
  1.4613 -lemma REAL_SUB_0: "ALL (x::hollight.real) y::hollight.real.
  1.4614 -   (real_sub x y = real_of_num 0) = (x = y)"
  1.4615 -  by (import hollight REAL_SUB_0)
  1.4616 -
  1.4617 -lemma REAL_LE_DOUBLE: "ALL x::hollight.real.
  1.4618 -   real_le (real_of_num 0) (real_add x x) = real_le (real_of_num 0) x"
  1.4619 -  by (import hollight REAL_LE_DOUBLE)
  1.4620 -
  1.4621 -lemma REAL_LE_NEGL: "ALL x::hollight.real. real_le (real_neg x) x = real_le (real_of_num 0) x"
  1.4622 -  by (import hollight REAL_LE_NEGL)
  1.4623 -
  1.4624 -lemma REAL_LE_NEGR: "ALL x::hollight.real. real_le x (real_neg x) = real_le x (real_of_num 0)"
  1.4625 -  by (import hollight REAL_LE_NEGR)
  1.4626 -
  1.4627 -lemma REAL_NEG_EQ0: "ALL x::hollight.real. (real_neg x = real_of_num 0) = (x = real_of_num 0)"
  1.4628 -  by (import hollight REAL_NEG_EQ0)
  1.4629 -
  1.4630 -lemma REAL_NEG_0: "real_neg (real_of_num 0) = real_of_num 0"
  1.4631 -  by (import hollight REAL_NEG_0)
  1.4632 -
  1.4633 -lemma REAL_NEG_SUB: "ALL (x::hollight.real) y::hollight.real.
  1.4634 -   real_neg (real_sub x y) = real_sub y x"
  1.4635 -  by (import hollight REAL_NEG_SUB)
  1.4636 -
  1.4637 -lemma REAL_SUB_LT: "ALL (x::hollight.real) y::hollight.real.
  1.4638 -   real_lt (real_of_num 0) (real_sub x y) = real_lt y x"
  1.4639 -  by (import hollight REAL_SUB_LT)
  1.4640 -
  1.4641 -lemma REAL_SUB_LE: "ALL (x::hollight.real) y::hollight.real.
  1.4642 -   real_le (real_of_num 0) (real_sub x y) = real_le y x"
  1.4643 -  by (import hollight REAL_SUB_LE)
  1.4644 -
  1.4645 -lemma REAL_EQ_LMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4646 -   (real_mul x y = real_mul x z) = (x = real_of_num 0 | y = z)"
  1.4647 -  by (import hollight REAL_EQ_LMUL)
  1.4648 -
  1.4649 -lemma REAL_EQ_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4650 -   (real_mul x z = real_mul y z) = (z = real_of_num 0 | x = y)"
  1.4651 -  by (import hollight REAL_EQ_RMUL)
  1.4652 -
  1.4653 -lemma REAL_SUB_LDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4654 -   real_mul x (real_sub y z) = real_sub (real_mul x y) (real_mul x z)"
  1.4655 -  by (import hollight REAL_SUB_LDISTRIB)
  1.4656 -
  1.4657 -lemma REAL_SUB_RDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4658 -   real_mul (real_sub x y) z = real_sub (real_mul x z) (real_mul y z)"
  1.4659 -  by (import hollight REAL_SUB_RDISTRIB)
  1.4660 -
  1.4661 -lemma REAL_NEG_EQ: "ALL (x::hollight.real) y::hollight.real. (real_neg x = y) = (x = real_neg y)"
  1.4662 -  by (import hollight REAL_NEG_EQ)
  1.4663 -
  1.4664 -lemma REAL_NEG_MINUS1: "ALL x::hollight.real.
  1.4665 -   real_neg x = real_mul (real_neg (real_of_num (NUMERAL_BIT1 0))) x"
  1.4666 -  by (import hollight REAL_NEG_MINUS1)
  1.4667 -
  1.4668 -lemma REAL_INV_NZ: "ALL x::hollight.real. x ~= real_of_num 0 --> real_inv x ~= real_of_num 0"
  1.4669 -  by (import hollight REAL_INV_NZ)
  1.4670 -
  1.4671 -lemma REAL_INVINV: "ALL x::hollight.real. x ~= real_of_num 0 --> real_inv (real_inv x) = x"
  1.4672 -  by (import hollight REAL_INVINV)
  1.4673 -
  1.4674 -lemma REAL_LT_IMP_NE: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> x ~= y"
  1.4675 -  by (import hollight REAL_LT_IMP_NE)
  1.4676 -
  1.4677 -lemma REAL_INV_POS: "ALL x::hollight.real.
  1.4678 -   real_lt (real_of_num 0) x --> real_lt (real_of_num 0) (real_inv x)"
  1.4679 -  by (import hollight REAL_INV_POS)
  1.4680 -
  1.4681 -lemma REAL_LT_LMUL_0: "ALL (x::hollight.real) y::hollight.real.
  1.4682 -   real_lt (real_of_num 0) x -->
  1.4683 -   real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) y"
  1.4684 -  by (import hollight REAL_LT_LMUL_0)
  1.4685 -
  1.4686 -lemma REAL_LT_RMUL_0: "ALL (x::hollight.real) y::hollight.real.
  1.4687 -   real_lt (real_of_num 0) y -->
  1.4688 -   real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) x"
  1.4689 -  by (import hollight REAL_LT_RMUL_0)
  1.4690 -
  1.4691 -lemma REAL_LT_LMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4692 -   real_lt (real_of_num 0) x -->
  1.4693 -   real_lt (real_mul x y) (real_mul x z) = real_lt y z"
  1.4694 -  by (import hollight REAL_LT_LMUL_EQ)
  1.4695 -
  1.4696 -lemma REAL_LT_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4697 -   real_lt (real_of_num 0) z -->
  1.4698 -   real_lt (real_mul x z) (real_mul y z) = real_lt x y"
  1.4699 -  by (import hollight REAL_LT_RMUL_EQ)
  1.4700 -
  1.4701 -lemma REAL_LT_RMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4702 -   real_lt x y & real_lt (real_of_num 0) z -->
  1.4703 -   real_lt (real_mul x z) (real_mul y z)"
  1.4704 -  by (import hollight REAL_LT_RMUL_IMP)
  1.4705 -
  1.4706 -lemma REAL_LT_LMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4707 -   real_lt y z & real_lt (real_of_num 0) x -->
  1.4708 -   real_lt (real_mul x y) (real_mul x z)"
  1.4709 -  by (import hollight REAL_LT_LMUL_IMP)
  1.4710 -
  1.4711 -lemma REAL_LINV_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.4712 -   real_mul x y = real_of_num (NUMERAL_BIT1 0) --> x = real_inv y"
  1.4713 -  by (import hollight REAL_LINV_UNIQ)
  1.4714 -
  1.4715 -lemma REAL_RINV_UNIQ: "ALL (x::hollight.real) y::hollight.real.
  1.4716 -   real_mul x y = real_of_num (NUMERAL_BIT1 0) --> y = real_inv x"
  1.4717 -  by (import hollight REAL_RINV_UNIQ)
  1.4718 -
  1.4719 -lemma REAL_NEG_INV: "ALL x::hollight.real.
  1.4720 -   x ~= real_of_num 0 --> real_neg (real_inv x) = real_inv (real_neg x)"
  1.4721 -  by (import hollight REAL_NEG_INV)
  1.4722 -
  1.4723 -lemma REAL_INV_1OVER: "ALL x::hollight.real. real_inv x = real_div (real_of_num (NUMERAL_BIT1 0)) x"
  1.4724 -  by (import hollight REAL_INV_1OVER)
  1.4725 -
  1.4726 -lemma REAL: "ALL x::nat.
  1.4727 -   real_of_num (Suc x) =
  1.4728 -   real_add (real_of_num x) (real_of_num (NUMERAL_BIT1 0))"
  1.4729 -  by (import hollight REAL)
  1.4730 -
  1.4731 -lemma REAL_POS: "ALL n::nat. real_le (real_of_num 0) (real_of_num n)"
  1.4732 -  by (import hollight REAL_POS)
  1.4733 -
  1.4734 -lemma REAL_LE: "ALL (m::nat) n::nat. real_le (real_of_num m) (real_of_num n) = <= m n"
  1.4735 -  by (import hollight REAL_LE)
  1.4736 -
  1.4737 -lemma REAL_LT: "ALL (m::nat) n::nat. real_lt (real_of_num m) (real_of_num n) = < m n"
  1.4738 -  by (import hollight REAL_LT)
  1.4739 -
  1.4740 -lemma th: "((m::nat) = (n::nat)) = (<= m n & <= n m)"
  1.4741 -  by (import hollight th)
  1.4742 -
  1.4743 -lemma REAL_INJ: "ALL (m::nat) n::nat. (real_of_num m = real_of_num n) = (m = n)"
  1.4744 -  by (import hollight REAL_INJ)
  1.4745 -
  1.4746 -lemma REAL_ADD: "ALL (m::nat) n::nat.
  1.4747 -   real_add (real_of_num m) (real_of_num n) = real_of_num (m + n)"
  1.4748 -  by (import hollight REAL_ADD)
  1.4749 -
  1.4750 -lemma REAL_MUL: "ALL (m::nat) n::nat.
  1.4751 -   real_mul (real_of_num m) (real_of_num n) = real_of_num (m * n)"
  1.4752 -  by (import hollight REAL_MUL)
  1.4753 -
  1.4754 -lemma REAL_INV1: "real_inv (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)"
  1.4755 -  by (import hollight REAL_INV1)
  1.4756 -
  1.4757 -lemma REAL_DIV_LZERO: "ALL x::hollight.real. real_div (real_of_num 0) x = real_of_num 0"
  1.4758 -  by (import hollight REAL_DIV_LZERO)
  1.4759 -
  1.4760 -lemma REAL_LT_NZ: "ALL n::nat.
  1.4761 -   (real_of_num n ~= real_of_num 0) =
  1.4762 -   real_lt (real_of_num 0) (real_of_num n)"
  1.4763 -  by (import hollight REAL_LT_NZ)
  1.4764 -
  1.4765 -lemma REAL_NZ_IMP_LT: "ALL n::nat. n ~= 0 --> real_lt (real_of_num 0) (real_of_num n)"
  1.4766 -  by (import hollight REAL_NZ_IMP_LT)
  1.4767 -
  1.4768 -lemma REAL_LT_RDIV_0: "ALL (y::hollight.real) z::hollight.real.
  1.4769 -   real_lt (real_of_num 0) z -->
  1.4770 -   real_lt (real_of_num 0) (real_div y z) = real_lt (real_of_num 0) y"
  1.4771 -  by (import hollight REAL_LT_RDIV_0)
  1.4772 -
  1.4773 -lemma REAL_LT_RDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4774 -   real_lt (real_of_num 0) z -->
  1.4775 -   real_lt (real_div x z) (real_div y z) = real_lt x y"
  1.4776 -  by (import hollight REAL_LT_RDIV)
  1.4777 -
  1.4778 -lemma REAL_LT_FRACTION_0: "ALL (n::nat) d::hollight.real.
  1.4779 -   n ~= 0 -->
  1.4780 -   real_lt (real_of_num 0) (real_div d (real_of_num n)) =
  1.4781 -   real_lt (real_of_num 0) d"
  1.4782 -  by (import hollight REAL_LT_FRACTION_0)
  1.4783 -
  1.4784 -lemma REAL_LT_MULTIPLE: "ALL (x::nat) xa::hollight.real.
  1.4785 -   < (NUMERAL_BIT1 0) x -->
  1.4786 -   real_lt xa (real_mul (real_of_num x) xa) = real_lt (real_of_num 0) xa"
  1.4787 -  by (import hollight REAL_LT_MULTIPLE)
  1.4788 -
  1.4789 -lemma REAL_LT_FRACTION: "ALL (n::nat) d::hollight.real.
  1.4790 -   < (NUMERAL_BIT1 0) n -->
  1.4791 -   real_lt (real_div d (real_of_num n)) d = real_lt (real_of_num 0) d"
  1.4792 -  by (import hollight REAL_LT_FRACTION)
  1.4793 -
  1.4794 -lemma REAL_LT_HALF1: "ALL d::hollight.real.
  1.4795 -   real_lt (real_of_num 0)
  1.4796 -    (real_div d (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) =
  1.4797 -   real_lt (real_of_num 0) d"
  1.4798 -  by (import hollight REAL_LT_HALF1)
  1.4799 -
  1.4800 -lemma REAL_LT_HALF2: "ALL d::hollight.real.
  1.4801 -   real_lt (real_div d (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) d =
  1.4802 -   real_lt (real_of_num 0) d"
  1.4803 -  by (import hollight REAL_LT_HALF2)
  1.4804 -
  1.4805 -lemma REAL_DOUBLE: "ALL x::hollight.real.
  1.4806 -   real_add x x = real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x"
  1.4807 -  by (import hollight REAL_DOUBLE)
  1.4808 -
  1.4809 -lemma REAL_HALF_DOUBLE: "ALL x::hollight.real.
  1.4810 -   real_add (real_div x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.4811 -    (real_div x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) =
  1.4812 -   x"
  1.4813 -  by (import hollight REAL_HALF_DOUBLE)
  1.4814 -
  1.4815 -lemma REAL_SUB_SUB: "ALL (x::hollight.real) y::hollight.real.
  1.4816 -   real_sub (real_sub x y) x = real_neg y"
  1.4817 -  by (import hollight REAL_SUB_SUB)
  1.4818 -
  1.4819 -lemma REAL_LT_ADD_SUB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4820 -   real_lt (real_add x y) z = real_lt x (real_sub z y)"
  1.4821 -  by (import hollight REAL_LT_ADD_SUB)
  1.4822 -
  1.4823 -lemma REAL_LT_SUB_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4824 -   real_lt (real_sub x y) z = real_lt x (real_add z y)"
  1.4825 -  by (import hollight REAL_LT_SUB_RADD)
  1.4826 -
  1.4827 -lemma REAL_LT_SUB_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4828 -   real_lt x (real_sub y z) = real_lt (real_add x z) y"
  1.4829 -  by (import hollight REAL_LT_SUB_LADD)
  1.4830 -
  1.4831 -lemma REAL_LE_SUB_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4832 -   real_le x (real_sub y z) = real_le (real_add x z) y"
  1.4833 -  by (import hollight REAL_LE_SUB_LADD)
  1.4834 -
  1.4835 -lemma REAL_LE_SUB_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4836 -   real_le (real_sub x y) z = real_le x (real_add z y)"
  1.4837 -  by (import hollight REAL_LE_SUB_RADD)
  1.4838 -
  1.4839 -lemma REAL_LT_NEG: "ALL (x::hollight.real) y::hollight.real.
  1.4840 -   real_lt (real_neg x) (real_neg y) = real_lt y x"
  1.4841 -  by (import hollight REAL_LT_NEG)
  1.4842 -
  1.4843 -lemma REAL_LE_NEG: "ALL (x::hollight.real) y::hollight.real.
  1.4844 -   real_le (real_neg x) (real_neg y) = real_le y x"
  1.4845 -  by (import hollight REAL_LE_NEG)
  1.4846 -
  1.4847 -lemma REAL_SUB_LZERO: "ALL x::hollight.real. real_sub (real_of_num 0) x = real_neg x"
  1.4848 -  by (import hollight REAL_SUB_LZERO)
  1.4849 -
  1.4850 -lemma REAL_SUB_RZERO: "ALL x::hollight.real. real_sub x (real_of_num 0) = x"
  1.4851 -  by (import hollight REAL_SUB_RZERO)
  1.4852 -
  1.4853 -lemma REAL_LTE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.4854 -   z::hollight.real.
  1.4855 -   real_lt w x & real_le y z --> real_lt (real_add w y) (real_add x z)"
  1.4856 -  by (import hollight REAL_LTE_ADD2)
  1.4857 -
  1.4858 -lemma REAL_LTE_ADD: "ALL (x::hollight.real) y::hollight.real.
  1.4859 -   real_lt (real_of_num 0) x & real_le (real_of_num 0) y -->
  1.4860 -   real_lt (real_of_num 0) (real_add x y)"
  1.4861 -  by (import hollight REAL_LTE_ADD)
  1.4862 -
  1.4863 -lemma REAL_LT_MUL2_ALT: "ALL (x1::hollight.real) (x2::hollight.real) (y1::hollight.real)
  1.4864 -   y2::hollight.real.
  1.4865 -   real_le (real_of_num 0) x1 &
  1.4866 -   real_le (real_of_num 0) y1 & real_lt x1 x2 & real_lt y1 y2 -->
  1.4867 -   real_lt (real_mul x1 y1) (real_mul x2 y2)"
  1.4868 -  by (import hollight REAL_LT_MUL2_ALT)
  1.4869 -
  1.4870 -lemma REAL_SUB_LNEG: "ALL (x::hollight.real) y::hollight.real.
  1.4871 -   real_sub (real_neg x) y = real_neg (real_add x y)"
  1.4872 -  by (import hollight REAL_SUB_LNEG)
  1.4873 -
  1.4874 -lemma REAL_SUB_RNEG: "ALL (x::hollight.real) y::hollight.real.
  1.4875 -   real_sub x (real_neg y) = real_add x y"
  1.4876 -  by (import hollight REAL_SUB_RNEG)
  1.4877 -
  1.4878 -lemma REAL_SUB_NEG2: "ALL (x::hollight.real) y::hollight.real.
  1.4879 -   real_sub (real_neg x) (real_neg y) = real_sub y x"
  1.4880 -  by (import hollight REAL_SUB_NEG2)
  1.4881 -
  1.4882 -lemma REAL_SUB_TRIANGLE: "ALL (a::hollight.real) (b::hollight.real) c::hollight.real.
  1.4883 -   real_add (real_sub a b) (real_sub b c) = real_sub a c"
  1.4884 -  by (import hollight REAL_SUB_TRIANGLE)
  1.4885 -
  1.4886 -lemma REAL_INV_MUL_WEAK: "ALL (x::hollight.real) xa::hollight.real.
  1.4887 -   x ~= real_of_num 0 & xa ~= real_of_num 0 -->
  1.4888 -   real_inv (real_mul x xa) = real_mul (real_inv x) (real_inv xa)"
  1.4889 -  by (import hollight REAL_INV_MUL_WEAK)
  1.4890 -
  1.4891 -lemma REAL_LE_LMUL_LOCAL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4892 -   real_lt (real_of_num 0) x -->
  1.4893 -   real_le (real_mul x y) (real_mul x z) = real_le y z"
  1.4894 -  by (import hollight REAL_LE_LMUL_LOCAL)
  1.4895 -
  1.4896 -lemma REAL_LE_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4897 -   real_lt (real_of_num 0) z -->
  1.4898 -   real_le (real_mul x z) (real_mul y z) = real_le x y"
  1.4899 -  by (import hollight REAL_LE_RMUL_EQ)
  1.4900 -
  1.4901 -lemma REAL_SUB_INV2: "ALL (x::hollight.real) y::hollight.real.
  1.4902 -   x ~= real_of_num 0 & y ~= real_of_num 0 -->
  1.4903 -   real_sub (real_inv x) (real_inv y) =
  1.4904 -   real_div (real_sub y x) (real_mul x y)"
  1.4905 -  by (import hollight REAL_SUB_INV2)
  1.4906 -
  1.4907 -lemma REAL_SUB_SUB2: "ALL (x::hollight.real) y::hollight.real. real_sub x (real_sub x y) = y"
  1.4908 -  by (import hollight REAL_SUB_SUB2)
  1.4909 -
  1.4910 -lemma REAL_MEAN: "ALL (x::hollight.real) y::hollight.real.
  1.4911 -   real_lt x y --> (EX z::hollight.real. real_lt x z & real_lt z y)"
  1.4912 -  by (import hollight REAL_MEAN)
  1.4913 -
  1.4914 -lemma REAL_EQ_LMUL2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4915 -   x ~= real_of_num 0 --> (y = z) = (real_mul x y = real_mul x z)"
  1.4916 -  by (import hollight REAL_EQ_LMUL2)
  1.4917 -
  1.4918 -lemma REAL_LE_MUL2V: "ALL (x1::hollight.real) (x2::hollight.real) (y1::hollight.real)
  1.4919 -   y2::hollight.real.
  1.4920 -   real_le (real_of_num 0) x1 &
  1.4921 -   real_le (real_of_num 0) y1 & real_le x1 x2 & real_le y1 y2 -->
  1.4922 -   real_le (real_mul x1 y1) (real_mul x2 y2)"
  1.4923 -  by (import hollight REAL_LE_MUL2V)
  1.4924 -
  1.4925 -lemma REAL_LE_LDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4926 -   real_lt (real_of_num 0) x & real_le y (real_mul z x) -->
  1.4927 -   real_le (real_div y x) z"
  1.4928 -  by (import hollight REAL_LE_LDIV)
  1.4929 -
  1.4930 -lemma REAL_LE_RDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4931 -   real_lt (real_of_num 0) x & real_le (real_mul y x) z -->
  1.4932 -   real_le y (real_div z x)"
  1.4933 -  by (import hollight REAL_LE_RDIV)
  1.4934 -
  1.4935 -lemma REAL_LT_1: "ALL (x::hollight.real) y::hollight.real.
  1.4936 -   real_le (real_of_num 0) x & real_lt x y -->
  1.4937 -   real_lt (real_div x y) (real_of_num (NUMERAL_BIT1 0))"
  1.4938 -  by (import hollight REAL_LT_1)
  1.4939 -
  1.4940 -lemma REAL_LE_LMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4941 -   real_le (real_of_num 0) x & real_le y z -->
  1.4942 -   real_le (real_mul x y) (real_mul x z)"
  1.4943 -  by (import hollight REAL_LE_LMUL_IMP)
  1.4944 -
  1.4945 -lemma REAL_LE_RMUL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real.
  1.4946 -   real_le (real_of_num 0) x & real_le xa xb -->
  1.4947 -   real_le (real_mul xa x) (real_mul xb x)"
  1.4948 -  by (import hollight REAL_LE_RMUL_IMP)
  1.4949 -
  1.4950 -lemma REAL_INV_LT1: "ALL x::hollight.real.
  1.4951 -   real_lt (real_of_num 0) x & real_lt x (real_of_num (NUMERAL_BIT1 0)) -->
  1.4952 -   real_lt (real_of_num (NUMERAL_BIT1 0)) (real_inv x)"
  1.4953 -  by (import hollight REAL_INV_LT1)
  1.4954 -
  1.4955 -lemma REAL_POS_NZ: "ALL x::hollight.real. real_lt (real_of_num 0) x --> x ~= real_of_num 0"
  1.4956 -  by (import hollight REAL_POS_NZ)
  1.4957 -
  1.4958 -lemma REAL_EQ_RMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.4959 -   z ~= real_of_num 0 & real_mul x z = real_mul y z --> x = y"
  1.4960 -  by (import hollight REAL_EQ_RMUL_IMP)
  1.4961 -
  1.4962 -lemma REAL_EQ_LMUL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real.
  1.4963 -   x ~= real_of_num 0 & real_mul x xa = real_mul x xb --> xa = xb"
  1.4964 -  by (import hollight REAL_EQ_LMUL_IMP)
  1.4965 -
  1.4966 -lemma REAL_FACT_NZ: "ALL n::nat. real_of_num (FACT n) ~= real_of_num 0"
  1.4967 -  by (import hollight REAL_FACT_NZ)
  1.4968 -
  1.4969 -lemma REAL_POSSQ: "ALL x::hollight.real.
  1.4970 -   real_lt (real_of_num 0) (real_mul x x) = (x ~= real_of_num 0)"
  1.4971 -  by (import hollight REAL_POSSQ)
  1.4972 -
  1.4973 -lemma REAL_SUMSQ: "ALL (x::hollight.real) y::hollight.real.
  1.4974 -   (real_add (real_mul x x) (real_mul y y) = real_of_num 0) =
  1.4975 -   (x = real_of_num 0 & y = real_of_num 0)"
  1.4976 -  by (import hollight REAL_SUMSQ)
  1.4977 -
  1.4978 -lemma REAL_EQ_NEG: "ALL (x::hollight.real) y::hollight.real. (real_neg x = real_neg y) = (x = y)"
  1.4979 -  by (import hollight REAL_EQ_NEG)
  1.4980 -
  1.4981 -lemma REAL_DIV_MUL2: "ALL (x::hollight.real) z::hollight.real.
  1.4982 -   x ~= real_of_num 0 & z ~= real_of_num 0 -->
  1.4983 -   (ALL y::hollight.real.
  1.4984 -       real_div y z = real_div (real_mul x y) (real_mul x z))"
  1.4985 -  by (import hollight REAL_DIV_MUL2)
  1.4986 -
  1.4987 -lemma REAL_MIDDLE1: "ALL (a::hollight.real) b::hollight.real.
  1.4988 -   real_le a b -->
  1.4989 -   real_le a
  1.4990 -    (real_div (real_add a b) (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))"
  1.4991 -  by (import hollight REAL_MIDDLE1)
  1.4992 -
  1.4993 -lemma REAL_MIDDLE2: "ALL (a::hollight.real) b::hollight.real.
  1.4994 -   real_le a b -->
  1.4995 -   real_le
  1.4996 -    (real_div (real_add a b) (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.4997 -    b"
  1.4998 -  by (import hollight REAL_MIDDLE2)
  1.4999 -
  1.5000 -lemma ABS_ZERO: "ALL x::hollight.real. (real_abs x = real_of_num 0) = (x = real_of_num 0)"
  1.5001 -  by (import hollight ABS_ZERO)
  1.5002 -
  1.5003 -lemma ABS_0: "real_abs (real_of_num 0) = real_of_num 0"
  1.5004 -  by (import hollight ABS_0)
  1.5005 -
  1.5006 -lemma ABS_1: "real_abs (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)"
  1.5007 -  by (import hollight ABS_1)
  1.5008 -
  1.5009 -lemma ABS_NEG: "ALL x::hollight.real. real_abs (real_neg x) = real_abs x"
  1.5010 -  by (import hollight ABS_NEG)
  1.5011 -
  1.5012 -lemma ABS_TRIANGLE: "ALL (x::hollight.real) y::hollight.real.
  1.5013 -   real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))"
  1.5014 -  by (import hollight ABS_TRIANGLE)
  1.5015 -
  1.5016 -lemma ABS_POS: "ALL x::hollight.real. real_le (real_of_num 0) (real_abs x)"
  1.5017 -  by (import hollight ABS_POS)
  1.5018 -
  1.5019 -lemma ABS_MUL: "ALL (x::hollight.real) y::hollight.real.
  1.5020 -   real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)"
  1.5021 -  by (import hollight ABS_MUL)
  1.5022 -
  1.5023 -lemma ABS_LT_MUL2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real)
  1.5024 -   z::hollight.real.
  1.5025 -   real_lt (real_abs w) y & real_lt (real_abs x) z -->
  1.5026 -   real_lt (real_abs (real_mul w x)) (real_mul y z)"
  1.5027 -  by (import hollight ABS_LT_MUL2)
  1.5028 -
  1.5029 -lemma ABS_SUB: "ALL (x::hollight.real) y::hollight.real.
  1.5030 -   real_abs (real_sub x y) = real_abs (real_sub y x)"
  1.5031 -  by (import hollight ABS_SUB)
  1.5032 -
  1.5033 -lemma ABS_NZ: "ALL x::hollight.real.
  1.5034 -   (x ~= real_of_num 0) = real_lt (real_of_num 0) (real_abs x)"
  1.5035 -  by (import hollight ABS_NZ)
  1.5036 -
  1.5037 -lemma ABS_INV: "ALL x::hollight.real.
  1.5038 -   x ~= real_of_num 0 --> real_abs (real_inv x) = real_inv (real_abs x)"
  1.5039 -  by (import hollight ABS_INV)
  1.5040 -
  1.5041 -lemma ABS_ABS: "ALL x::hollight.real. real_abs (real_abs x) = real_abs x"
  1.5042 -  by (import hollight ABS_ABS)
  1.5043 -
  1.5044 -lemma ABS_LE: "ALL x::hollight.real. real_le x (real_abs x)"
  1.5045 -  by (import hollight ABS_LE)
  1.5046 -
  1.5047 -lemma ABS_REFL: "ALL x::hollight.real. (real_abs x = x) = real_le (real_of_num 0) x"
  1.5048 -  by (import hollight ABS_REFL)
  1.5049 -
  1.5050 -lemma ABS_N: "ALL n::nat. real_abs (real_of_num n) = real_of_num n"
  1.5051 -  by (import hollight ABS_N)
  1.5052 -
  1.5053 -lemma ABS_BETWEEN: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real.
  1.5054 -   (real_lt (real_of_num 0) d &
  1.5055 -    real_lt (real_sub x d) y & real_lt y (real_add x d)) =
  1.5056 -   real_lt (real_abs (real_sub y x)) d"
  1.5057 -  by (import hollight ABS_BETWEEN)
  1.5058 -
  1.5059 -lemma ABS_BOUND: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real.
  1.5060 -   real_lt (real_abs (real_sub x y)) d --> real_lt y (real_add x d)"
  1.5061 -  by (import hollight ABS_BOUND)
  1.5062 -
  1.5063 -lemma ABS_STILLNZ: "ALL (x::hollight.real) y::hollight.real.
  1.5064 -   real_lt (real_abs (real_sub x y)) (real_abs y) --> x ~= real_of_num 0"
  1.5065 -  by (import hollight ABS_STILLNZ)
  1.5066 -
  1.5067 -lemma ABS_CASES: "ALL x::hollight.real.
  1.5068 -   x = real_of_num 0 | real_lt (real_of_num 0) (real_abs x)"
  1.5069 -  by (import hollight ABS_CASES)
  1.5070 -
  1.5071 -lemma ABS_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.5072 -   real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x) -->
  1.5073 -   real_lt y z"
  1.5074 -  by (import hollight ABS_BETWEEN1)
  1.5075 -
  1.5076 -lemma ABS_SIGN: "ALL (x::hollight.real) y::hollight.real.
  1.5077 -   real_lt (real_abs (real_sub x y)) y --> real_lt (real_of_num 0) x"
  1.5078 -  by (import hollight ABS_SIGN)
  1.5079 -
  1.5080 -lemma ABS_SIGN2: "ALL (x::hollight.real) y::hollight.real.
  1.5081 -   real_lt (real_abs (real_sub x y)) (real_neg y) -->
  1.5082 -   real_lt x (real_of_num 0)"
  1.5083 -  by (import hollight ABS_SIGN2)
  1.5084 -
  1.5085 -lemma ABS_DIV: "ALL y::hollight.real.
  1.5086 -   y ~= real_of_num 0 -->
  1.5087 -   (ALL x::hollight.real.
  1.5088 -       real_abs (real_div x y) = real_div (real_abs x) (real_abs y))"
  1.5089 -  by (import hollight ABS_DIV)
  1.5090 -
  1.5091 -lemma ABS_CIRCLE: "ALL (x::hollight.real) (y::hollight.real) h::hollight.real.
  1.5092 -   real_lt (real_abs h) (real_sub (real_abs y) (real_abs x)) -->
  1.5093 -   real_lt (real_abs (real_add x h)) (real_abs y)"
  1.5094 -  by (import hollight ABS_CIRCLE)
  1.5095 -
  1.5096 -lemma REAL_SUB_ABS: "ALL (x::hollight.real) y::hollight.real.
  1.5097 -   real_le (real_sub (real_abs x) (real_abs y)) (real_abs (real_sub x y))"
  1.5098 -  by (import hollight REAL_SUB_ABS)
  1.5099 -
  1.5100 -lemma ABS_SUB_ABS: "ALL (x::hollight.real) y::hollight.real.
  1.5101 -   real_le (real_abs (real_sub (real_abs x) (real_abs y)))
  1.5102 -    (real_abs (real_sub x y))"
  1.5103 -  by (import hollight ABS_SUB_ABS)
  1.5104 -
  1.5105 -lemma ABS_BETWEEN2: "ALL (x0::hollight.real) (x::hollight.real) (y0::hollight.real)
  1.5106 -   y::hollight.real.
  1.5107 -   real_lt x0 y0 &
  1.5108 -   real_lt (real_abs (real_sub x x0))
  1.5109 -    (real_div (real_sub y0 x0)
  1.5110 -      (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) &
  1.5111 -   real_lt (real_abs (real_sub y y0))
  1.5112 -    (real_div (real_sub y0 x0)
  1.5113 -      (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) -->
  1.5114 -   real_lt x y"
  1.5115 -  by (import hollight ABS_BETWEEN2)
  1.5116 -
  1.5117 -lemma ABS_BOUNDS: "ALL (x::hollight.real) k::hollight.real.
  1.5118 -   real_le (real_abs x) k = (real_le (real_neg k) x & real_le x k)"
  1.5119 -  by (import hollight ABS_BOUNDS)
  1.5120 -
  1.5121 -lemma POW_0: "ALL n::nat. real_pow (real_of_num 0) (Suc n) = real_of_num 0"
  1.5122 -  by (import hollight POW_0)
  1.5123 -
  1.5124 -lemma POW_NZ: "ALL (c::hollight.real) n::nat.
  1.5125 -   c ~= real_of_num 0 --> real_pow c n ~= real_of_num 0"
  1.5126 -  by (import hollight POW_NZ)
  1.5127 -
  1.5128 -lemma POW_INV: "ALL (c::hollight.real) x::nat.
  1.5129 -   c ~= real_of_num 0 --> real_inv (real_pow c x) = real_pow (real_inv c) x"
  1.5130 -  by (import hollight POW_INV)
  1.5131 -
  1.5132 -lemma POW_ABS: "ALL (c::hollight.real) n::nat.
  1.5133 -   real_pow (real_abs c) n = real_abs (real_pow c n)"
  1.5134 -  by (import hollight POW_ABS)
  1.5135 -
  1.5136 -lemma POW_PLUS1: "ALL (e::hollight.real) x::nat.
  1.5137 -   real_lt (real_of_num 0) e -->
  1.5138 -   real_le
  1.5139 -    (real_add (real_of_num (NUMERAL_BIT1 0)) (real_mul (real_of_num x) e))
  1.5140 -    (real_pow (real_add (real_of_num (NUMERAL_BIT1 0)) e) x)"
  1.5141 -  by (import hollight POW_PLUS1)
  1.5142 -
  1.5143 -lemma POW_ADD: "ALL (c::hollight.real) (m::nat) n::nat.
  1.5144 -   real_pow c (m + n) = real_mul (real_pow c m) (real_pow c n)"
  1.5145 -  by (import hollight POW_ADD)
  1.5146 -
  1.5147 -lemma POW_1: "ALL x::hollight.real. real_pow x (NUMERAL_BIT1 0) = x"
  1.5148 -  by (import hollight POW_1)
  1.5149 -
  1.5150 -lemma POW_2: "ALL x::hollight.real.
  1.5151 -   real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = real_mul x x"
  1.5152 -  by (import hollight POW_2)
  1.5153 -
  1.5154 -lemma POW_POS: "ALL (x::hollight.real) xa::nat.
  1.5155 -   real_le (real_of_num 0) x --> real_le (real_of_num 0) (real_pow x xa)"
  1.5156 -  by (import hollight POW_POS)
  1.5157 -
  1.5158 -lemma POW_LE: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.5159 -   real_le (real_of_num 0) x & real_le x y -->
  1.5160 -   real_le (real_pow x n) (real_pow y n)"
  1.5161 -  by (import hollight POW_LE)
  1.5162 -
  1.5163 -lemma POW_M1: "ALL n::nat.
  1.5164 -   real_abs (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) n) =
  1.5165 -   real_of_num (NUMERAL_BIT1 0)"
  1.5166 -  by (import hollight POW_M1)
  1.5167 -
  1.5168 -lemma POW_MUL: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.5169 -   real_pow (real_mul x y) n = real_mul (real_pow x n) (real_pow y n)"
  1.5170 -  by (import hollight POW_MUL)
  1.5171 -
  1.5172 -lemma REAL_LE_SQUARE_POW: "ALL x::hollight.real.
  1.5173 -   real_le (real_of_num 0) (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"
  1.5174 -  by (import hollight REAL_LE_SQUARE_POW)
  1.5175 -
  1.5176 -lemma ABS_POW2: "ALL x::hollight.real.
  1.5177 -   real_abs (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) =
  1.5178 -   real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))"
  1.5179 -  by (import hollight ABS_POW2)
  1.5180 -
  1.5181 -lemma REAL_LE1_POW2: "ALL x::hollight.real.
  1.5182 -   real_le (real_of_num (NUMERAL_BIT1 0)) x -->
  1.5183 -   real_le (real_of_num (NUMERAL_BIT1 0))
  1.5184 -    (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"
  1.5185 -  by (import hollight REAL_LE1_POW2)
  1.5186 -
  1.5187 -lemma REAL_LT1_POW2: "ALL x::hollight.real.
  1.5188 -   real_lt (real_of_num (NUMERAL_BIT1 0)) x -->
  1.5189 -   real_lt (real_of_num (NUMERAL_BIT1 0))
  1.5190 -    (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"
  1.5191 -  by (import hollight REAL_LT1_POW2)
  1.5192 -
  1.5193 -lemma POW_POS_LT: "ALL (x::hollight.real) n::nat.
  1.5194 -   real_lt (real_of_num 0) x -->
  1.5195 -   real_lt (real_of_num 0) (real_pow x (Suc n))"
  1.5196 -  by (import hollight POW_POS_LT)
  1.5197 -
  1.5198 -lemma POW_2_LE1: "ALL n::nat.
  1.5199 -   real_le (real_of_num (NUMERAL_BIT1 0))
  1.5200 -    (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) n)"
  1.5201 -  by (import hollight POW_2_LE1)
  1.5202 -
  1.5203 -lemma POW_2_LT: "ALL n::nat.
  1.5204 -   real_lt (real_of_num n)
  1.5205 -    (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) n)"
  1.5206 -  by (import hollight POW_2_LT)
  1.5207 -
  1.5208 -lemma POW_MINUS1: "ALL n::nat.
  1.5209 -   real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.5210 -    (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n) =
  1.5211 -   real_of_num (NUMERAL_BIT1 0)"
  1.5212 -  by (import hollight POW_MINUS1)
  1.5213 -
  1.5214 -lemma REAL_SUP_EXISTS: "ALL P::hollight.real => bool.
  1.5215 -   Ex P &
  1.5216 -   (EX z::hollight.real. ALL x::hollight.real. P x --> real_lt x z) -->
  1.5217 -   (EX s::hollight.real.
  1.5218 -       ALL y::hollight.real.
  1.5219 -          (EX x::hollight.real. P x & real_lt y x) = real_lt y s)"
  1.5220 -  by (import hollight REAL_SUP_EXISTS)
  1.5221 -
  1.5222 -constdefs
  1.5223 -  sup :: "(hollight.real => bool) => hollight.real" 
  1.5224 -  "sup ==
  1.5225 -%u::hollight.real => bool.
  1.5226 -   SOME a::hollight.real.
  1.5227 -      (ALL x::hollight.real. IN x u --> real_le x a) &
  1.5228 -      (ALL b::hollight.real.
  1.5229 -          (ALL x::hollight.real. IN x u --> real_le x b) --> real_le a b)"
  1.5230 -
  1.5231 -lemma DEF_sup: "sup =
  1.5232 -(%u::hollight.real => bool.
  1.5233 -    SOME a::hollight.real.
  1.5234 -       (ALL x::hollight.real. IN x u --> real_le x a) &
  1.5235 -       (ALL b::hollight.real.
  1.5236 -           (ALL x::hollight.real. IN x u --> real_le x b) --> real_le a b))"
  1.5237 -  by (import hollight DEF_sup)
  1.5238 -
  1.5239 -lemma sup: "sup (P::hollight.real => bool) =
  1.5240 -(SOME s::hollight.real.
  1.5241 -    ALL y::hollight.real.
  1.5242 -       (EX x::hollight.real. P x & real_lt y x) = real_lt y s)"
  1.5243 -  by (import hollight sup)
  1.5244 -
  1.5245 -lemma REAL_SUP: "ALL P::hollight.real => bool.
  1.5246 -   Ex P &
  1.5247 -   (EX z::hollight.real. ALL x::hollight.real. P x --> real_lt x z) -->
  1.5248 -   (ALL y::hollight.real.
  1.5249 -       (EX x::hollight.real. P x & real_lt y x) = real_lt y (sup P))"
  1.5250 -  by (import hollight REAL_SUP)
  1.5251 -
  1.5252 -lemma REAL_SUP_UBOUND: "ALL P::hollight.real => bool.
  1.5253 -   Ex P &
  1.5254 -   (EX z::hollight.real. ALL x::hollight.real. P x --> real_lt x z) -->
  1.5255 -   (ALL y::hollight.real. P y --> real_le y (sup P))"
  1.5256 -  by (import hollight REAL_SUP_UBOUND)
  1.5257 -
  1.5258 -lemma SETOK_LE_LT: "ALL P::hollight.real => bool.
  1.5259 -   (Ex P &
  1.5260 -    (EX z::hollight.real. ALL x::hollight.real. P x --> real_le x z)) =
  1.5261 -   (Ex P &
  1.5262 -    (EX x::hollight.real. ALL xa::hollight.real. P xa --> real_lt xa x))"
  1.5263 -  by (import hollight SETOK_LE_LT)
  1.5264 -
  1.5265 -lemma REAL_SUP_LE: "ALL P::hollight.real => bool.
  1.5266 -   Ex P &
  1.5267 -   (EX z::hollight.real. ALL x::hollight.real. P x --> real_le x z) -->
  1.5268 -   (ALL y::hollight.real.
  1.5269 -       (EX x::hollight.real. P x & real_lt y x) = real_lt y (sup P))"
  1.5270 -  by (import hollight REAL_SUP_LE)
  1.5271 -
  1.5272 -lemma REAL_SUP_UBOUND_LE: "ALL P::hollight.real => bool.
  1.5273 -   Ex P &
  1.5274 -   (EX z::hollight.real. ALL x::hollight.real. P x --> real_le x z) -->
  1.5275 -   (ALL y::hollight.real. P y --> real_le y (sup P))"
  1.5276 -  by (import hollight REAL_SUP_UBOUND_LE)
  1.5277 -
  1.5278 -lemma REAL_ARCH_SIMPLE: "ALL x::hollight.real. EX n::nat. real_le x (real_of_num n)"
  1.5279 -  by (import hollight REAL_ARCH_SIMPLE)
  1.5280 -
  1.5281 -lemma REAL_ARCH: "ALL x::hollight.real.
  1.5282 -   real_lt (real_of_num 0) x -->
  1.5283 -   (ALL y::hollight.real. EX n::nat. real_lt y (real_mul (real_of_num n) x))"
  1.5284 -  by (import hollight REAL_ARCH)
  1.5285 -
  1.5286 -lemma REAL_ARCH_LEAST: "ALL y::hollight.real.
  1.5287 -   real_lt (real_of_num 0) y -->
  1.5288 -   (ALL x::hollight.real.
  1.5289 -       real_le (real_of_num 0) x -->
  1.5290 -       (EX n::nat.
  1.5291 -           real_le (real_mul (real_of_num n) y) x &
  1.5292 -           real_lt x (real_mul (real_of_num (Suc n)) y)))"
  1.5293 -  by (import hollight REAL_ARCH_LEAST)
  1.5294 -
  1.5295 -lemma sum_EXISTS: "EX x::nat * nat => (nat => hollight.real) => hollight.real.
  1.5296 -   (ALL (f::nat => hollight.real) n::nat. x (n, 0) f = real_of_num 0) &
  1.5297 -   (ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5298 -       x (n, Suc m) f = real_add (x (n, m) f) (f (n + m)))"
  1.5299 -  by (import hollight sum_EXISTS)
  1.5300 -
  1.5301 -constdefs
  1.5302 -  psum :: "nat * nat => (nat => hollight.real) => hollight.real" 
  1.5303 -  "psum ==
  1.5304 -SOME sum::nat * nat => (nat => hollight.real) => hollight.real.
  1.5305 -   (ALL (f::nat => hollight.real) n::nat. sum (n, 0) f = real_of_num 0) &
  1.5306 -   (ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5307 -       sum (n, Suc m) f = real_add (sum (n, m) f) (f (n + m)))"
  1.5308 -
  1.5309 -lemma DEF_psum: "psum =
  1.5310 -(SOME sum::nat * nat => (nat => hollight.real) => hollight.real.
  1.5311 -    (ALL (f::nat => hollight.real) n::nat. sum (n, 0) f = real_of_num 0) &
  1.5312 -    (ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5313 -        sum (n, Suc m) f = real_add (sum (n, m) f) (f (n + m))))"
  1.5314 -  by (import hollight DEF_psum)
  1.5315 -
  1.5316 -lemma sum: "psum (n::nat, 0) (f::nat => hollight.real) = real_of_num 0 &
  1.5317 -psum (n, Suc (m::nat)) f = real_add (psum (n, m) f) (f (n + m))"
  1.5318 -  by (import hollight sum)
  1.5319 -
  1.5320 -lemma PSUM_SUM: "ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5321 -   psum (m, n) f =
  1.5322 -   hollight.sum
  1.5323 -    (GSPEC (%u::nat. EX i::nat. SETSPEC u (<= m i & < i (m + n)) i)) f"
  1.5324 -  by (import hollight PSUM_SUM)
  1.5325 -
  1.5326 -lemma PSUM_SUM_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5327 -   ~ (m = 0 & n = 0) -->
  1.5328 -   psum (m, n) f = hollight.sum (dotdot m (m + n - NUMERAL_BIT1 0)) f"
  1.5329 -  by (import hollight PSUM_SUM_NUMSEG)
  1.5330 -
  1.5331 -lemma SUM_TWO: "ALL (f::nat => hollight.real) (n::nat) p::nat.
  1.5332 -   real_add (psum (0, n) f) (psum (n, p) f) = psum (0, n + p) f"
  1.5333 -  by (import hollight SUM_TWO)
  1.5334 -
  1.5335 -lemma SUM_DIFF: "ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5336 -   psum (m, n) f = real_sub (psum (0, m + n) f) (psum (0, m) f)"
  1.5337 -  by (import hollight SUM_DIFF)
  1.5338 -
  1.5339 -lemma ABS_SUM: "ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5340 -   real_le (real_abs (psum (m, n) f))
  1.5341 -    (psum (m, n) (%n::nat. real_abs (f n)))"
  1.5342 -  by (import hollight ABS_SUM)
  1.5343 -
  1.5344 -lemma SUM_LE: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat.
  1.5345 -   (ALL r::nat. <= m r & < r (n + m) --> real_le (f r) (g r)) -->
  1.5346 -   real_le (psum (m, n) f) (psum (m, n) g)"
  1.5347 -  by (import hollight SUM_LE)
  1.5348 -
  1.5349 -lemma SUM_EQ: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat.
  1.5350 -   (ALL r::nat. <= m r & < r (n + m) --> f r = g r) -->
  1.5351 -   psum (m, n) f = psum (m, n) g"
  1.5352 -  by (import hollight SUM_EQ)
  1.5353 -
  1.5354 -lemma SUM_POS: "ALL f::nat => hollight.real.
  1.5355 -   (ALL n::nat. real_le (real_of_num 0) (f n)) -->
  1.5356 -   (ALL (m::nat) n::nat. real_le (real_of_num 0) (psum (m, n) f))"
  1.5357 -  by (import hollight SUM_POS)
  1.5358 -
  1.5359 -lemma SUM_POS_GEN: "ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5360 -   (ALL n::nat. <= m n --> real_le (real_of_num 0) (f n)) -->
  1.5361 -   real_le (real_of_num 0) (psum (m, n) f)"
  1.5362 -  by (import hollight SUM_POS_GEN)
  1.5363 -
  1.5364 -lemma SUM_ABS: "ALL (f::nat => hollight.real) (m::nat) x::nat.
  1.5365 -   real_abs (psum (m, x) (%m::nat. real_abs (f m))) =
  1.5366 -   psum (m, x) (%m::nat. real_abs (f m))"
  1.5367 -  by (import hollight SUM_ABS)
  1.5368 -
  1.5369 -lemma SUM_ABS_LE: "ALL (f::nat => hollight.real) (m::nat) n::nat.
  1.5370 -   real_le (real_abs (psum (m, n) f))
  1.5371 -    (psum (m, n) (%n::nat. real_abs (f n)))"
  1.5372 -  by (import hollight SUM_ABS_LE)
  1.5373 -
  1.5374 -lemma SUM_ZERO: "ALL (f::nat => hollight.real) N::nat.
  1.5375 -   (ALL n::nat. >= n N --> f n = real_of_num 0) -->
  1.5376 -   (ALL (m::nat) n::nat. >= m N --> psum (m, n) f = real_of_num 0)"
  1.5377 -  by (import hollight SUM_ZERO)
  1.5378 -
  1.5379 -lemma SUM_ADD: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat.
  1.5380 -   psum (m, n) (%n::nat. real_add (f n) (g n)) =
  1.5381 -   real_add (psum (m, n) f) (psum (m, n) g)"
  1.5382 -  by (import hollight SUM_ADD)
  1.5383 -
  1.5384 -lemma SUM_CMUL: "ALL (f::nat => hollight.real) (c::hollight.real) (m::nat) n::nat.
  1.5385 -   psum (m, n) (%n::nat. real_mul c (f n)) = real_mul c (psum (m, n) f)"
  1.5386 -  by (import hollight SUM_CMUL)
  1.5387 -
  1.5388 -lemma SUM_NEG: "ALL (f::nat => hollight.real) (n::nat) d::nat.
  1.5389 -   psum (n, d) (%n::nat. real_neg (f n)) = real_neg (psum (n, d) f)"
  1.5390 -  by (import hollight SUM_NEG)
  1.5391 -
  1.5392 -lemma SUM_SUB: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat.
  1.5393 -   psum (m, n) (%x::nat. real_sub (f x) (g x)) =
  1.5394 -   real_sub (psum (m, n) f) (psum (m, n) g)"
  1.5395 -  by (import hollight SUM_SUB)
  1.5396 -
  1.5397 -lemma SUM_SUBST: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat.
  1.5398 -   (ALL p::nat. <= m p & < p (m + n) --> f p = g p) -->
  1.5399 -   psum (m, n) f = psum (m, n) g"
  1.5400 -  by (import hollight SUM_SUBST)
  1.5401 -
  1.5402 -lemma SUM_NSUB: "ALL (n::nat) (f::nat => hollight.real) c::hollight.real.
  1.5403 -   real_sub (psum (0, n) f) (real_mul (real_of_num n) c) =
  1.5404 -   psum (0, n) (%p::nat. real_sub (f p) c)"
  1.5405 -  by (import hollight SUM_NSUB)
  1.5406 -
  1.5407 -lemma SUM_BOUND: "ALL (f::nat => hollight.real) (K::hollight.real) (m::nat) n::nat.
  1.5408 -   (ALL p::nat. <= m p & < p (m + n) --> real_le (f p) K) -->
  1.5409 -   real_le (psum (m, n) f) (real_mul (real_of_num n) K)"
  1.5410 -  by (import hollight SUM_BOUND)
  1.5411 -
  1.5412 -lemma SUM_GROUP: "ALL (n::nat) (k::nat) f::nat => hollight.real.
  1.5413 -   psum (0, n) (%m::nat. psum (m * k, k) f) = psum (0, n * k) f"
  1.5414 -  by (import hollight SUM_GROUP)
  1.5415 -
  1.5416 -lemma SUM_1: "ALL (f::nat => hollight.real) n::nat. psum (n, NUMERAL_BIT1 0) f = f n"
  1.5417 -  by (import hollight SUM_1)
  1.5418 -
  1.5419 -lemma SUM_2: "ALL (f::nat => hollight.real) n::nat.
  1.5420 -   psum (n, NUMERAL_BIT0 (NUMERAL_BIT1 0)) f =
  1.5421 -   real_add (f n) (f (n + NUMERAL_BIT1 0))"
  1.5422 -  by (import hollight SUM_2)
  1.5423 -
  1.5424 -lemma SUM_OFFSET: "ALL (f::nat => hollight.real) (n::nat) k::nat.
  1.5425 -   psum (0, n) (%m::nat. f (m + k)) =
  1.5426 -   real_sub (psum (0, n + k) f) (psum (0, k) f)"
  1.5427 -  by (import hollight SUM_OFFSET)
  1.5428 -
  1.5429 -lemma SUM_REINDEX: "ALL (f::nat => hollight.real) (m::nat) (k::nat) n::nat.
  1.5430 -   psum (m + k, n) f = psum (m, n) (%r::nat. f (r + k))"
  1.5431 -  by (import hollight SUM_REINDEX)
  1.5432 -
  1.5433 -lemma SUM_0: "ALL (m::nat) n::nat. psum (m, n) (%r::nat. real_of_num 0) = real_of_num 0"
  1.5434 -  by (import hollight SUM_0)
  1.5435 -
  1.5436 -lemma SUM_CANCEL: "ALL (f::nat => hollight.real) (n::nat) d::nat.
  1.5437 -   psum (n, d) (%n::nat. real_sub (f (Suc n)) (f n)) =
  1.5438 -   real_sub (f (n + d)) (f n)"
  1.5439 -  by (import hollight SUM_CANCEL)
  1.5440 -
  1.5441 -lemma SUM_HORNER: "ALL (f::nat => hollight.real) (n::nat) x::hollight.real.
  1.5442 -   psum (0, Suc n) (%i::nat. real_mul (f i) (real_pow x i)) =
  1.5443 -   real_add (f 0)
  1.5444 -    (real_mul x
  1.5445 -      (psum (0, n) (%i::nat. real_mul (f (Suc i)) (real_pow x i))))"
  1.5446 -  by (import hollight SUM_HORNER)
  1.5447 -
  1.5448 -lemma SUM_CONST: "ALL (c::hollight.real) n::nat.
  1.5449 -   psum (0, n) (%m::nat. c) = real_mul (real_of_num n) c"
  1.5450 -  by (import hollight SUM_CONST)
  1.5451 -
  1.5452 -lemma SUM_SPLIT: "ALL (f::nat => hollight.real) (n::nat) p::nat.
  1.5453 -   real_add (psum (m::nat, n) f) (psum (m + n, p) f) = psum (m, n + p) f"
  1.5454 -  by (import hollight SUM_SPLIT)
  1.5455 -
  1.5456 -lemma SUM_SWAP: "ALL (f::nat => nat => hollight.real) (m1::nat) (n1::nat) (m2::nat) n2::nat.
  1.5457 -   psum (m1, n1) (%a::nat. psum (m2, n2) (f a)) =
  1.5458 -   psum (m2, n2) (%b::nat. psum (m1, n1) (%a::nat. f a b))"
  1.5459 -  by (import hollight SUM_SWAP)
  1.5460 -
  1.5461 -lemma SUM_EQ_0: "(ALL r::nat.
  1.5462 -    <= (m::nat) r & < r (m + (n::nat)) -->
  1.5463 -    (f::nat => hollight.real) r = real_of_num 0) -->
  1.5464 -psum (m, n) f = real_of_num 0"
  1.5465 -  by (import hollight SUM_EQ_0)
  1.5466 -
  1.5467 -lemma SUM_MORETERMS_EQ: "ALL (m::nat) (n::nat) p::nat.
  1.5468 -   <= n p &
  1.5469 -   (ALL r::nat.
  1.5470 -       <= (m + n) r & < r (m + p) -->
  1.5471 -       (f::nat => hollight.real) r = real_of_num 0) -->
  1.5472 -   psum (m, p) f = psum (m, n) f"
  1.5473 -  by (import hollight SUM_MORETERMS_EQ)
  1.5474 -
  1.5475 -lemma SUM_DIFFERENCES_EQ: "ALL (x::nat) (xa::nat) xb::nat.
  1.5476 -   <= xa xb &
  1.5477 -   (ALL r::nat.
  1.5478 -       <= (x + xa) r & < r (x + xb) -->
  1.5479 -       (f::nat => hollight.real) r = (g::nat => hollight.real) r) -->
  1.5480 -   real_sub (psum (x, xb) f) (psum (x, xa) f) =
  1.5481 -   real_sub (psum (x, xb) g) (psum (x, xa) g)"
  1.5482 -  by (import hollight SUM_DIFFERENCES_EQ)
  1.5483 -
  1.5484 -constdefs
  1.5485 -  re_Union :: "(('A => bool) => bool) => 'A => bool" 
  1.5486 -  "re_Union ==
  1.5487 -%(u::('A::type => bool) => bool) x::'A::type.
  1.5488 -   EX s::'A::type => bool. u s & s x"
  1.5489 -
  1.5490 -lemma DEF_re_Union: "re_Union =
  1.5491 -(%(u::('A::type => bool) => bool) x::'A::type.
  1.5492 -    EX s::'A::type => bool. u s & s x)"
  1.5493 -  by (import hollight DEF_re_Union)
  1.5494 -
  1.5495 -constdefs
  1.5496 -  re_union :: "('A => bool) => ('A => bool) => 'A => bool" 
  1.5497 -  "re_union ==
  1.5498 -%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x | ua x"
  1.5499 -
  1.5500 -lemma DEF_re_union: "re_union =
  1.5501 -(%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x | ua x)"
  1.5502 -  by (import hollight DEF_re_union)
  1.5503 -
  1.5504 -constdefs
  1.5505 -  re_intersect :: "('A => bool) => ('A => bool) => 'A => bool" 
  1.5506 -  "re_intersect ==
  1.5507 -%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x & ua x"
  1.5508 -
  1.5509 -lemma DEF_re_intersect: "re_intersect =
  1.5510 -(%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x & ua x)"
  1.5511 -  by (import hollight DEF_re_intersect)
  1.5512 -
  1.5513 -constdefs
  1.5514 -  re_null :: "'A => bool" 
  1.5515 -  "re_null == %x::'A::type. False"
  1.5516 -
  1.5517 -lemma DEF_re_null: "re_null = (%x::'A::type. False)"
  1.5518 -  by (import hollight DEF_re_null)
  1.5519 -
  1.5520 -constdefs
  1.5521 -  re_universe :: "'A => bool" 
  1.5522 -  "re_universe == %x::'A::type. True"
  1.5523 -
  1.5524 -lemma DEF_re_universe: "re_universe = (%x::'A::type. True)"
  1.5525 -  by (import hollight DEF_re_universe)
  1.5526 -
  1.5527 -constdefs
  1.5528 -  re_subset :: "('A => bool) => ('A => bool) => bool" 
  1.5529 -  "re_subset ==
  1.5530 -%(u::'A::type => bool) ua::'A::type => bool. ALL x::'A::type. u x --> ua x"
  1.5531 -
  1.5532 -lemma DEF_re_subset: "re_subset =
  1.5533 -(%(u::'A::type => bool) ua::'A::type => bool. ALL x::'A::type. u x --> ua x)"
  1.5534 -  by (import hollight DEF_re_subset)
  1.5535 -
  1.5536 -constdefs
  1.5537 -  re_compl :: "('A => bool) => 'A => bool" 
  1.5538 -  "re_compl == %(u::'A::type => bool) x::'A::type. ~ u x"
  1.5539 -
  1.5540 -lemma DEF_re_compl: "re_compl = (%(u::'A::type => bool) x::'A::type. ~ u x)"
  1.5541 -  by (import hollight DEF_re_compl)
  1.5542 -
  1.5543 -lemma SUBSETA_REFL: "ALL S::'A::type => bool. re_subset S S"
  1.5544 -  by (import hollight SUBSETA_REFL)
  1.5545 -
  1.5546 -lemma COMPL_MEM: "ALL (S::'A::type => bool) x::'A::type. S x = (~ re_compl S x)"
  1.5547 -  by (import hollight COMPL_MEM)
  1.5548 -
  1.5549 -lemma SUBSETA_ANTISYM: "ALL (P::'A::type => bool) Q::'A::type => bool.
  1.5550 -   (re_subset P Q & re_subset Q P) = (P = Q)"
  1.5551 -  by (import hollight SUBSETA_ANTISYM)
  1.5552 -
  1.5553 -lemma SUBSETA_TRANS: "ALL (P::'A::type => bool) (Q::'A::type => bool) R::'A::type => bool.
  1.5554 -   re_subset P Q & re_subset Q R --> re_subset P R"
  1.5555 -  by (import hollight SUBSETA_TRANS)
  1.5556 -
  1.5557 -constdefs
  1.5558 -  istopology :: "(('A => bool) => bool) => bool" 
  1.5559 -  "istopology ==
  1.5560 -%u::('A::type => bool) => bool.
  1.5561 -   u re_null &
  1.5562 -   u re_universe &
  1.5563 -   (ALL (a::'A::type => bool) b::'A::type => bool.
  1.5564 -       u a & u b --> u (re_intersect a b)) &
  1.5565 -   (ALL P::('A::type => bool) => bool. re_subset P u --> u (re_Union P))"
  1.5566 -
  1.5567 -lemma DEF_istopology: "istopology =
  1.5568 -(%u::('A::type => bool) => bool.
  1.5569 -    u re_null &
  1.5570 -    u re_universe &
  1.5571 -    (ALL (a::'A::type => bool) b::'A::type => bool.
  1.5572 -        u a & u b --> u (re_intersect a b)) &
  1.5573 -    (ALL P::('A::type => bool) => bool. re_subset P u --> u (re_Union P)))"
  1.5574 -  by (import hollight DEF_istopology)
  1.5575 -
  1.5576 -typedef (open) ('A) topology = "(Collect::((('A::type => bool) => bool) => bool)
  1.5577 -          => (('A::type => bool) => bool) set)
  1.5578 - (istopology::(('A::type => bool) => bool) => bool)"  morphisms "open" "topology"
  1.5579 -  apply (rule light_ex_imp_nonempty[where t="(Eps::((('A::type => bool) => bool) => bool) => ('A::type => bool) => bool)
  1.5580 - (istopology::(('A::type => bool) => bool) => bool)"])
  1.5581 -  by (import hollight TYDEF_topology)
  1.5582 -
  1.5583 -syntax
  1.5584 -  "open" :: _ 
  1.5585 -
  1.5586 -syntax
  1.5587 -  topology :: _ 
  1.5588 -
  1.5589 -lemmas "TYDEF_topology_@intern" = typedef_hol2hollight 
  1.5590 -  [where a="a :: 'A topology" and r=r ,
  1.5591 -   OF type_definition_topology]
  1.5592 -
  1.5593 -lemma TOPOLOGY: "ALL L::'A::type topology.
  1.5594 -   open L re_null &
  1.5595 -   open L re_universe &
  1.5596 -   (ALL (a::'A::type => bool) b::'A::type => bool.
  1.5597 -       open L a & open L b --> open L (re_intersect a b)) &
  1.5598 -   (ALL P::('A::type => bool) => bool.
  1.5599 -       re_subset P (open L) --> open L (re_Union P))"
  1.5600 -  by (import hollight TOPOLOGY)
  1.5601 -
  1.5602 -lemma TOPOLOGY_UNION: "ALL (x::'A::type topology) xa::('A::type => bool) => bool.
  1.5603 -   re_subset xa (open x) --> open x (re_Union xa)"
  1.5604 -  by (import hollight TOPOLOGY_UNION)
  1.5605 -
  1.5606 -constdefs
  1.5607 -  neigh :: "'A topology => ('A => bool) * 'A => bool" 
  1.5608 -  "neigh ==
  1.5609 -%(u::'A::type topology) ua::('A::type => bool) * 'A::type.
  1.5610 -   EX P::'A::type => bool. open u P & re_subset P (fst ua) & P (snd ua)"
  1.5611 -
  1.5612 -lemma DEF_neigh: "neigh =
  1.5613 -(%(u::'A::type topology) ua::('A::type => bool) * 'A::type.
  1.5614 -    EX P::'A::type => bool. open u P & re_subset P (fst ua) & P (snd ua))"
  1.5615 -  by (import hollight DEF_neigh)
  1.5616 -
  1.5617 -lemma OPEN_OWN_NEIGH: "ALL (S::'A::type => bool) (top::'A::type topology) x::'A::type.
  1.5618 -   open top S & S x --> neigh top (S, x)"
  1.5619 -  by (import hollight OPEN_OWN_NEIGH)
  1.5620 -
  1.5621 -lemma OPEN_UNOPEN: "ALL (S::'A::type => bool) top::'A::type topology.
  1.5622 -   open top S =
  1.5623 -   (re_Union (%P::'A::type => bool. open top P & re_subset P S) = S)"
  1.5624 -  by (import hollight OPEN_UNOPEN)
  1.5625 -
  1.5626 -lemma OPEN_SUBOPEN: "ALL (S::'A::type => bool) top::'A::type topology.
  1.5627 -   open top S =
  1.5628 -   (ALL x::'A::type.
  1.5629 -       S x -->
  1.5630 -       (EX xa::'A::type => bool. xa x & open top xa & re_subset xa S))"
  1.5631 -  by (import hollight OPEN_SUBOPEN)
  1.5632 -
  1.5633 -lemma OPEN_NEIGH: "ALL (S::'A::type => bool) top::'A::type topology.
  1.5634 -   open top S =
  1.5635 -   (ALL x::'A::type.
  1.5636 -       S x -->
  1.5637 -       (EX xa::'A::type => bool. neigh top (xa, x) & re_subset xa S))"
  1.5638 -  by (import hollight OPEN_NEIGH)
  1.5639 -
  1.5640 -constdefs
  1.5641 -  closed :: "'A topology => ('A => bool) => bool" 
  1.5642 -  "closed == %(u::'A::type topology) ua::'A::type => bool. open u (re_compl ua)"
  1.5643 -
  1.5644 -lemma DEF_closed: "closed =
  1.5645 -(%(u::'A::type topology) ua::'A::type => bool. open u (re_compl ua))"
  1.5646 -  by (import hollight DEF_closed)
  1.5647 -
  1.5648 -constdefs
  1.5649 -  limpt :: "'A topology => 'A => ('A => bool) => bool" 
  1.5650 -  "limpt ==
  1.5651 -%(u::'A::type topology) (ua::'A::type) ub::'A::type => bool.
  1.5652 -   ALL N::'A::type => bool.
  1.5653 -      neigh u (N, ua) --> (EX y::'A::type. ua ~= y & ub y & N y)"
  1.5654 -
  1.5655 -lemma DEF_limpt: "limpt =
  1.5656 -(%(u::'A::type topology) (ua::'A::type) ub::'A::type => bool.
  1.5657 -    ALL N::'A::type => bool.
  1.5658 -       neigh u (N, ua) --> (EX y::'A::type. ua ~= y & ub y & N y))"
  1.5659 -  by (import hollight DEF_limpt)
  1.5660 -
  1.5661 -lemma CLOSED_LIMPT: "ALL (top::'A::type topology) S::'A::type => bool.
  1.5662 -   closed top S = (ALL x::'A::type. limpt top x S --> S x)"
  1.5663 -  by (import hollight CLOSED_LIMPT)
  1.5664 -
  1.5665 -constdefs
  1.5666 -  ismet :: "('A * 'A => hollight.real) => bool" 
  1.5667 -  "ismet ==
  1.5668 -%u::'A::type * 'A::type => hollight.real.
  1.5669 -   (ALL (x::'A::type) y::'A::type. (u (x, y) = real_of_num 0) = (x = y)) &
  1.5670 -   (ALL (x::'A::type) (y::'A::type) z::'A::type.
  1.5671 -       real_le (u (y, z)) (real_add (u (x, y)) (u (x, z))))"
  1.5672 -
  1.5673 -lemma DEF_ismet: "ismet =
  1.5674 -(%u::'A::type * 'A::type => hollight.real.
  1.5675 -    (ALL (x::'A::type) y::'A::type. (u (x, y) = real_of_num 0) = (x = y)) &
  1.5676 -    (ALL (x::'A::type) (y::'A::type) z::'A::type.
  1.5677 -        real_le (u (y, z)) (real_add (u (x, y)) (u (x, z)))))"
  1.5678 -  by (import hollight DEF_ismet)
  1.5679 -
  1.5680 -typedef (open) ('A) metric = "(Collect::(('A::type * 'A::type => hollight.real) => bool)
  1.5681 -          => ('A::type * 'A::type => hollight.real) set)
  1.5682 - (ismet::('A::type * 'A::type => hollight.real) => bool)"  morphisms "mdist" "metric"
  1.5683 -  apply (rule light_ex_imp_nonempty[where t="(Eps::(('A::type * 'A::type => hollight.real) => bool)
  1.5684 -      => 'A::type * 'A::type => hollight.real)
  1.5685 - (ismet::('A::type * 'A::type => hollight.real) => bool)"])
  1.5686 -  by (import hollight TYDEF_metric)
  1.5687 -
  1.5688 -syntax
  1.5689 -  mdist :: _ 
  1.5690 -
  1.5691 -syntax
  1.5692 -  metric :: _ 
  1.5693 -
  1.5694 -lemmas "TYDEF_metric_@intern" = typedef_hol2hollight 
  1.5695 -  [where a="a :: 'A metric" and r=r ,
  1.5696 -   OF type_definition_metric]
  1.5697 -
  1.5698 -lemma METRIC_ISMET: "ALL m::'A::type metric. ismet (mdist m)"
  1.5699 -  by (import hollight METRIC_ISMET)
  1.5700 -
  1.5701 -lemma METRIC_ZERO: "ALL (m::'A::type metric) (x::'A::type) y::'A::type.
  1.5702 -   (mdist m (x, y) = real_of_num 0) = (x = y)"
  1.5703 -  by (import hollight METRIC_ZERO)
  1.5704 -
  1.5705 -lemma METRIC_SAME: "ALL (m::'A::type metric) x::'A::type. mdist m (x, x) = real_of_num 0"
  1.5706 -  by (import hollight METRIC_SAME)
  1.5707 -
  1.5708 -lemma METRIC_POS: "ALL (m::'A::type metric) (x::'A::type) y::'A::type.
  1.5709 -   real_le (real_of_num 0) (mdist m (x, y))"
  1.5710 -  by (import hollight METRIC_POS)
  1.5711 -
  1.5712 -lemma METRIC_SYM: "ALL (m::'A::type metric) (x::'A::type) y::'A::type.
  1.5713 -   mdist m (x, y) = mdist m (y, x)"
  1.5714 -  by (import hollight METRIC_SYM)
  1.5715 -
  1.5716 -lemma METRIC_TRIANGLE: "ALL (m::'A::type metric) (x::'A::type) (y::'A::type) z::'A::type.
  1.5717 -   real_le (mdist m (x, z)) (real_add (mdist m (x, y)) (mdist m (y, z)))"
  1.5718 -  by (import hollight METRIC_TRIANGLE)
  1.5719 -
  1.5720 -lemma METRIC_NZ: "ALL (m::'A::type metric) (x::'A::type) y::'A::type.
  1.5721 -   x ~= y --> real_lt (real_of_num 0) (mdist m (x, y))"
  1.5722 -  by (import hollight METRIC_NZ)
  1.5723 -
  1.5724 -constdefs
  1.5725 -  mtop :: "'A metric => 'A topology" 
  1.5726 -  "mtop ==
  1.5727 -%u::'A::type metric.
  1.5728 -   topology
  1.5729 -    (%S::'A::type => bool.
  1.5730 -        ALL x::'A::type.
  1.5731 -           S x -->
  1.5732 -           (EX e::hollight.real.
  1.5733 -               real_lt (real_of_num 0) e &
  1.5734 -               (ALL y::'A::type. real_lt (mdist u (x, y)) e --> S y)))"
  1.5735 -
  1.5736 -lemma DEF_mtop: "mtop =
  1.5737 -(%u::'A::type metric.
  1.5738 -    topology
  1.5739 -     (%S::'A::type => bool.
  1.5740 -         ALL x::'A::type.
  1.5741 -            S x -->
  1.5742 -            (EX e::hollight.real.
  1.5743 -                real_lt (real_of_num 0) e &
  1.5744 -                (ALL y::'A::type. real_lt (mdist u (x, y)) e --> S y))))"
  1.5745 -  by (import hollight DEF_mtop)
  1.5746 -
  1.5747 -lemma mtop_istopology: "ALL m::'A::type metric.
  1.5748 -   istopology
  1.5749 -    (%S::'A::type => bool.
  1.5750 -        ALL x::'A::type.
  1.5751 -           S x -->
  1.5752 -           (EX e::hollight.real.
  1.5753 -               real_lt (real_of_num 0) e &
  1.5754 -               (ALL y::'A::type. real_lt (mdist m (x, y)) e --> S y)))"
  1.5755 -  by (import hollight mtop_istopology)
  1.5756 -
  1.5757 -lemma MTOP_OPEN: "ALL m::'A::type metric.
  1.5758 -   open (mtop m) (S::'A::type => bool) =
  1.5759 -   (ALL x::'A::type.
  1.5760 -       S x -->
  1.5761 -       (EX e::hollight.real.
  1.5762 -           real_lt (real_of_num 0) e &
  1.5763 -           (ALL y::'A::type. real_lt (mdist m (x, y)) e --> S y)))"
  1.5764 -  by (import hollight MTOP_OPEN)
  1.5765 -
  1.5766 -constdefs
  1.5767 -  ball :: "'A metric => 'A * hollight.real => 'A => bool" 
  1.5768 -  "ball ==
  1.5769 -%(u::'A::type metric) (ua::'A::type * hollight.real) y::'A::type.
  1.5770 -   real_lt (mdist u (fst ua, y)) (snd ua)"
  1.5771 -
  1.5772 -lemma DEF_ball: "ball =
  1.5773 -(%(u::'A::type metric) (ua::'A::type * hollight.real) y::'A::type.
  1.5774 -    real_lt (mdist u (fst ua, y)) (snd ua))"
  1.5775 -  by (import hollight DEF_ball)
  1.5776 -
  1.5777 -lemma BALL_OPEN: "ALL (m::'A::type metric) (x::'A::type) e::hollight.real.
  1.5778 -   real_lt (real_of_num 0) e --> open (mtop m) (ball m (x, e))"
  1.5779 -  by (import hollight BALL_OPEN)
  1.5780 -
  1.5781 -lemma BALL_NEIGH: "ALL (m::'A::type metric) (x::'A::type) e::hollight.real.
  1.5782 -   real_lt (real_of_num 0) e --> neigh (mtop m) (ball m (x, e), x)"
  1.5783 -  by (import hollight BALL_NEIGH)
  1.5784 -
  1.5785 -lemma MTOP_LIMPT: "ALL (m::'A::type metric) (x::'A::type) S::'A::type => bool.
  1.5786 -   limpt (mtop m) x S =
  1.5787 -   (ALL e::hollight.real.
  1.5788 -       real_lt (real_of_num 0) e -->
  1.5789 -       (EX y::'A::type. x ~= y & S y & real_lt (mdist m (x, y)) e))"
  1.5790 -  by (import hollight MTOP_LIMPT)
  1.5791 -
  1.5792 -lemma ISMET_R1: "ismet
  1.5793 - (GABS
  1.5794 -   (%f::hollight.real * hollight.real => hollight.real.
  1.5795 -       ALL (x::hollight.real) y::hollight.real.
  1.5796 -          GEQ (f (x, y)) (real_abs (real_sub y x))))"
  1.5797 -  by (import hollight ISMET_R1)
  1.5798 -
  1.5799 -constdefs
  1.5800 -  mr1 :: "hollight.real metric" 
  1.5801 -  "mr1 ==
  1.5802 -metric
  1.5803 - (GABS
  1.5804 -   (%f::hollight.real * hollight.real => hollight.real.
  1.5805 -       ALL (x::hollight.real) y::hollight.real.
  1.5806 -          GEQ (f (x, y)) (real_abs (real_sub y x))))"
  1.5807 -
  1.5808 -lemma DEF_mr1: "mr1 =
  1.5809 -metric
  1.5810 - (GABS
  1.5811 -   (%f::hollight.real * hollight.real => hollight.real.
  1.5812 -       ALL (x::hollight.real) y::hollight.real.
  1.5813 -          GEQ (f (x, y)) (real_abs (real_sub y x))))"
  1.5814 -  by (import hollight DEF_mr1)
  1.5815 -
  1.5816 -lemma MR1_DEF: "ALL (x::hollight.real) y::hollight.real.
  1.5817 -   mdist mr1 (x, y) = real_abs (real_sub y x)"
  1.5818 -  by (import hollight MR1_DEF)
  1.5819 -
  1.5820 -lemma MR1_ADD: "ALL (x::hollight.real) d::hollight.real.
  1.5821 -   mdist mr1 (x, real_add x d) = real_abs d"
  1.5822 -  by (import hollight MR1_ADD)
  1.5823 -
  1.5824 -lemma MR1_SUB: "ALL (x::hollight.real) d::hollight.real.
  1.5825 -   mdist mr1 (x, real_sub x d) = real_abs d"
  1.5826 -  by (import hollight MR1_SUB)
  1.5827 -
  1.5828 -lemma MR1_ADD_LE: "ALL (x::hollight.real) d::hollight.real.
  1.5829 -   real_le (real_of_num 0) d --> mdist mr1 (x, real_add x d) = d"
  1.5830 -  by (import hollight MR1_ADD_LE)
  1.5831 -
  1.5832 -lemma MR1_SUB_LE: "ALL (x::hollight.real) d::hollight.real.
  1.5833 -   real_le (real_of_num 0) d --> mdist mr1 (x, real_sub x d) = d"
  1.5834 -  by (import hollight MR1_SUB_LE)
  1.5835 -
  1.5836 -lemma MR1_ADD_LT: "ALL (x::hollight.real) d::hollight.real.
  1.5837 -   real_lt (real_of_num 0) d --> mdist mr1 (x, real_add x d) = d"
  1.5838 -  by (import hollight MR1_ADD_LT)
  1.5839 -
  1.5840 -lemma MR1_SUB_LT: "ALL (x::hollight.real) d::hollight.real.
  1.5841 -   real_lt (real_of_num 0) d --> mdist mr1 (x, real_sub x d) = d"
  1.5842 -  by (import hollight MR1_SUB_LT)
  1.5843 -
  1.5844 -lemma MR1_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real.
  1.5845 -   real_lt x z & real_lt (mdist mr1 (x, y)) (real_sub z x) --> real_lt y z"
  1.5846 -  by (import hollight MR1_BETWEEN1)
  1.5847 -
  1.5848 -lemma MR1_LIMPT: "ALL x::hollight.real. limpt (mtop mr1) x re_universe"
  1.5849 -  by (import hollight MR1_LIMPT)
  1.5850 -
  1.5851 -constdefs
  1.5852 -  dorder :: "('A => 'A => bool) => bool" 
  1.5853 -  "dorder ==
  1.5854 -%u::'A::type => 'A::type => bool.
  1.5855 -   ALL (x::'A::type) y::'A::type.
  1.5856 -      u x x & u y y -->
  1.5857 -      (EX z::'A::type. u z z & (ALL w::'A::type. u w z --> u w x & u w y))"
  1.5858 -
  1.5859 -lemma DEF_dorder: "dorder =
  1.5860 -(%u::'A::type => 'A::type => bool.
  1.5861 -    ALL (x::'A::type) y::'A::type.
  1.5862 -       u x x & u y y -->
  1.5863 -       (EX z::'A::type. u z z & (ALL w::'A::type. u w z --> u w x & u w y)))"
  1.5864 -  by (import hollight DEF_dorder)
  1.5865 -
  1.5866 -constdefs
  1.5867 -  tends :: "('B => 'A) => 'A => 'A topology * ('B => 'B => bool) => bool" 
  1.5868 -  "tends ==
  1.5869 -%(u::'B::type => 'A::type) (ua::'A::type)
  1.5870 -   ub::'A::type topology * ('B::type => 'B::type => bool).
  1.5871 -   ALL N::'A::type => bool.
  1.5872 -      neigh (fst ub) (N, ua) -->
  1.5873 -      (EX n::'B::type.
  1.5874 -          snd ub n n & (ALL m::'B::type. snd ub m n --> N (u m)))"
  1.5875 -
  1.5876 -lemma DEF_tends: "tends =
  1.5877 -(%(u::'B::type => 'A::type) (ua::'A::type)
  1.5878 -    ub::'A::type topology * ('B::type => 'B::type => bool).
  1.5879 -    ALL N::'A::type => bool.
  1.5880 -       neigh (fst ub) (N, ua) -->
  1.5881 -       (EX n::'B::type.
  1.5882 -           snd ub n n & (ALL m::'B::type. snd ub m n --> N (u m))))"
  1.5883 -  by (import hollight DEF_tends)
  1.5884 -
  1.5885 -constdefs
  1.5886 -  bounded :: "'A metric * ('B => 'B => bool) => ('B => 'A) => bool" 
  1.5887 -  "bounded ==
  1.5888 -%(u::'A::type metric * ('B::type => 'B::type => bool))
  1.5889 -   ua::'B::type => 'A::type.
  1.5890 -   EX (k::hollight.real) (x::'A::type) N::'B::type.
  1.5891 -      snd u N N &
  1.5892 -      (ALL n::'B::type. snd u n N --> real_lt (mdist (fst u) (ua n, x)) k)"
  1.5893 -
  1.5894 -lemma DEF_bounded: "bounded =
  1.5895 -(%(u::'A::type metric * ('B::type => 'B::type => bool))
  1.5896 -    ua::'B::type => 'A::type.
  1.5897 -    EX (k::hollight.real) (x::'A::type) N::'B::type.
  1.5898 -       snd u N N &
  1.5899 -       (ALL n::'B::type. snd u n N --> real_lt (mdist (fst u) (ua n, x)) k))"
  1.5900 -  by (import hollight DEF_bounded)
  1.5901 -
  1.5902 -constdefs
  1.5903 -  tendsto :: "'A metric * 'A => 'A => 'A => bool" 
  1.5904 -  "tendsto ==
  1.5905 -%(u::'A::type metric * 'A::type) (ua::'A::type) ub::'A::type.
  1.5906 -   real_lt (real_of_num 0) (mdist (fst u) (snd u, ua)) &
  1.5907 -   real_le (mdist (fst u) (snd u, ua)) (mdist (fst u) (snd u, ub))"
  1.5908 -
  1.5909 -lemma DEF_tendsto: "tendsto =
  1.5910 -(%(u::'A::type metric * 'A::type) (ua::'A::type) ub::'A::type.
  1.5911 -    real_lt (real_of_num 0) (mdist (fst u) (snd u, ua)) &
  1.5912 -    real_le (mdist (fst u) (snd u, ua)) (mdist (fst u) (snd u, ub)))"
  1.5913 -  by (import hollight DEF_tendsto)
  1.5914 -
  1.5915 -lemma DORDER_LEMMA: "ALL g::'A::type => 'A::type => bool.
  1.5916 -   dorder g -->
  1.5917 -   (ALL (P::'A::type => bool) Q::'A::type => bool.
  1.5918 -       (EX n::'A::type. g n n & (ALL m::'A::type. g m n --> P m)) &
  1.5919 -       (EX n::'A::type. g n n & (ALL m::'A::type. g m n --> Q m)) -->
  1.5920 -       (EX n::'A::type. g n n & (ALL m::'A::type. g m n --> P m & Q m)))"
  1.5921 -  by (import hollight DORDER_LEMMA)
  1.5922 -
  1.5923 -lemma DORDER_NGE: "dorder >="
  1.5924 -  by (import hollight DORDER_NGE)
  1.5925 -
  1.5926 -lemma DORDER_TENDSTO: "ALL (m::'A::type metric) x::'A::type. dorder (tendsto (m, x))"
  1.5927 -  by (import hollight DORDER_TENDSTO)
  1.5928 -
  1.5929 -lemma MTOP_TENDS: "ALL (d::'A::type metric) (g::'B::type => 'B::type => bool)
  1.5930 -   (x::'B::type => 'A::type) x0::'A::type.
  1.5931 -   tends x x0 (mtop d, g) =
  1.5932 -   (ALL e::hollight.real.
  1.5933 -       real_lt (real_of_num 0) e -->
  1.5934 -       (EX n::'B::type.
  1.5935 -           g n n &
  1.5936 -           (ALL m::'B::type. g m n --> real_lt (mdist d (x m, x0)) e)))"
  1.5937 -  by (import hollight MTOP_TENDS)
  1.5938 -
  1.5939 -lemma MTOP_TENDS_UNIQ: "ALL (g::'B::type => 'B::type => bool) d::'A::type metric.
  1.5940 -   dorder g -->
  1.5941 -   tends (x::'B::type => 'A::type) (x0::'A::type) (mtop d, g) &
  1.5942 -   tends x (x1::'A::type) (mtop d, g) -->
  1.5943 -   x0 = x1"
  1.5944 -  by (import hollight MTOP_TENDS_UNIQ)
  1.5945 -
  1.5946 -lemma SEQ_TENDS: "ALL (d::'A::type metric) (x::nat => 'A::type) x0::'A::type.
  1.5947 -   tends x x0 (mtop d, >=) =
  1.5948 -   (ALL xa::hollight.real.
  1.5949 -       real_lt (real_of_num 0) xa -->
  1.5950 -       (EX xb::nat.
  1.5951 -           ALL xc::nat. >= xc xb --> real_lt (mdist d (x xc, x0)) xa))"
  1.5952 -  by (import hollight SEQ_TENDS)
  1.5953 -
  1.5954 -lemma LIM_TENDS: "ALL (m1::'A::type metric) (m2::'B::type metric) (f::'A::type => 'B::type)
  1.5955 -   (x0::'A::type) y0::'B::type.
  1.5956 -   limpt (mtop m1) x0 re_universe -->
  1.5957 -   tends f y0 (mtop m2, tendsto (m1, x0)) =
  1.5958 -   (ALL e::hollight.real.
  1.5959 -       real_lt (real_of_num 0) e -->
  1.5960 -       (EX d::hollight.real.
  1.5961 -           real_lt (real_of_num 0) d &
  1.5962 -           (ALL x::'A::type.
  1.5963 -               real_lt (real_of_num 0) (mdist m1 (x, x0)) &
  1.5964 -               real_le (mdist m1 (x, x0)) d -->
  1.5965 -               real_lt (mdist m2 (f x, y0)) e)))"
  1.5966 -  by (import hollight LIM_TENDS)
  1.5967 -
  1.5968 -lemma LIM_TENDS2: "ALL (m1::'A::type metric) (m2::'B::type metric) (f::'A::type => 'B::type)
  1.5969 -   (x0::'A::type) y0::'B::type.
  1.5970 -   limpt (mtop m1) x0 re_universe -->
  1.5971 -   tends f y0 (mtop m2, tendsto (m1, x0)) =
  1.5972 -   (ALL e::hollight.real.
  1.5973 -       real_lt (real_of_num 0) e -->
  1.5974 -       (EX d::hollight.real.
  1.5975 -           real_lt (real_of_num 0) d &
  1.5976 -           (ALL x::'A::type.
  1.5977 -               real_lt (real_of_num 0) (mdist m1 (x, x0)) &
  1.5978 -               real_lt (mdist m1 (x, x0)) d -->
  1.5979 -               real_lt (mdist m2 (f x, y0)) e)))"
  1.5980 -  by (import hollight LIM_TENDS2)
  1.5981 -
  1.5982 -lemma MR1_BOUNDED: "ALL (g::'A::type => 'A::type => bool) f::'A::type => hollight.real.
  1.5983 -   bounded (mr1, g) f =
  1.5984 -   (EX (k::hollight.real) N::'A::type.
  1.5985 -       g N N & (ALL n::'A::type. g n N --> real_lt (real_abs (f n)) k))"
  1.5986 -  by (import hollight MR1_BOUNDED)
  1.5987 -
  1.5988 -lemma NET_NULL: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.5989 -   x0::hollight.real.
  1.5990 -   tends x x0 (mtop mr1, g) =
  1.5991 -   tends (%n::'A::type. real_sub (x n) x0) (real_of_num 0) (mtop mr1, g)"
  1.5992 -  by (import hollight NET_NULL)
  1.5993 -
  1.5994 -lemma NET_CONV_BOUNDED: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.5995 -   x0::hollight.real. tends x x0 (mtop mr1, g) --> bounded (mr1, g) x"
  1.5996 -  by (import hollight NET_CONV_BOUNDED)
  1.5997 -
  1.5998 -lemma NET_CONV_NZ: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.5999 -   x0::hollight.real.
  1.6000 -   tends x x0 (mtop mr1, g) & x0 ~= real_of_num 0 -->
  1.6001 -   (EX N::'A::type.
  1.6002 -       g N N & (ALL n::'A::type. g n N --> x n ~= real_of_num 0))"
  1.6003 -  by (import hollight NET_CONV_NZ)
  1.6004 -
  1.6005 -lemma NET_CONV_IBOUNDED: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6006 -   x0::hollight.real.
  1.6007 -   tends x x0 (mtop mr1, g) & x0 ~= real_of_num 0 -->
  1.6008 -   bounded (mr1, g) (%n::'A::type. real_inv (x n))"
  1.6009 -  by (import hollight NET_CONV_IBOUNDED)
  1.6010 -
  1.6011 -lemma NET_NULL_ADD: "ALL g::'A::type => 'A::type => bool.
  1.6012 -   dorder g -->
  1.6013 -   (ALL (x::'A::type => hollight.real) y::'A::type => hollight.real.
  1.6014 -       tends x (real_of_num 0) (mtop mr1, g) &
  1.6015 -       tends y (real_of_num 0) (mtop mr1, g) -->
  1.6016 -       tends (%n::'A::type. real_add (x n) (y n)) (real_of_num 0)
  1.6017 -        (mtop mr1, g))"
  1.6018 -  by (import hollight NET_NULL_ADD)
  1.6019 -
  1.6020 -lemma NET_NULL_MUL: "ALL g::'A::type => 'A::type => bool.
  1.6021 -   dorder g -->
  1.6022 -   (ALL (x::'A::type => hollight.real) y::'A::type => hollight.real.
  1.6023 -       bounded (mr1, g) x & tends y (real_of_num 0) (mtop mr1, g) -->
  1.6024 -       tends (%n::'A::type. real_mul (x n) (y n)) (real_of_num 0)
  1.6025 -        (mtop mr1, g))"
  1.6026 -  by (import hollight NET_NULL_MUL)
  1.6027 -
  1.6028 -lemma NET_NULL_CMUL: "ALL (g::'A::type => 'A::type => bool) (k::hollight.real)
  1.6029 -   x::'A::type => hollight.real.
  1.6030 -   tends x (real_of_num 0) (mtop mr1, g) -->
  1.6031 -   tends (%n::'A::type. real_mul k (x n)) (real_of_num 0) (mtop mr1, g)"
  1.6032 -  by (import hollight NET_NULL_CMUL)
  1.6033 -
  1.6034 -lemma NET_ADD: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6035 -   (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real.
  1.6036 -   dorder g -->
  1.6037 -   tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
  1.6038 -   tends (%n::'A::type. real_add (x n) (y n)) (real_add x0 y0) (mtop mr1, g)"
  1.6039 -  by (import hollight NET_ADD)
  1.6040 -
  1.6041 -lemma NET_NEG: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6042 -   x0::hollight.real.
  1.6043 -   dorder g -->
  1.6044 -   tends x x0 (mtop mr1, g) =
  1.6045 -   tends (%n::'A::type. real_neg (x n)) (real_neg x0) (mtop mr1, g)"
  1.6046 -  by (import hollight NET_NEG)
  1.6047 -
  1.6048 -lemma NET_SUB: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6049 -   (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real.
  1.6050 -   dorder g -->
  1.6051 -   tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
  1.6052 -   tends (%xa::'A::type. real_sub (x xa) (y xa)) (real_sub x0 y0)
  1.6053 -    (mtop mr1, g)"
  1.6054 -  by (import hollight NET_SUB)
  1.6055 -
  1.6056 -lemma NET_MUL: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6057 -   (y::'A::type => hollight.real) (x0::hollight.real) y0::hollight.real.
  1.6058 -   dorder g -->
  1.6059 -   tends x x0 (mtop mr1, g) & tends y y0 (mtop mr1, g) -->
  1.6060 -   tends (%n::'A::type. real_mul (x n) (y n)) (real_mul x0 y0) (mtop mr1, g)"
  1.6061 -  by (import hollight NET_MUL)
  1.6062 -
  1.6063 -lemma NET_INV: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6064 -   x0::hollight.real.
  1.6065 -   dorder g -->
  1.6066 -   tends x x0 (mtop mr1, g) & x0 ~= real_of_num 0 -->
  1.6067 -   tends (%n::'A::type. real_inv (x n)) (real_inv x0) (mtop mr1, g)"
  1.6068 -  by (import hollight NET_INV)
  1.6069 -
  1.6070 -lemma NET_DIV: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6071 -   (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real.
  1.6072 -   dorder g -->
  1.6073 -   tends x x0 (mtop mr1, g) &
  1.6074 -   tends y y0 (mtop mr1, g) & y0 ~= real_of_num 0 -->
  1.6075 -   tends (%xa::'A::type. real_div (x xa) (y xa)) (real_div x0 y0)
  1.6076 -    (mtop mr1, g)"
  1.6077 -  by (import hollight NET_DIV)
  1.6078 -
  1.6079 -lemma NET_ABS: "ALL (x::'A::type => hollight.real) x0::hollight.real.
  1.6080 -   tends x x0 (mtop mr1, g::'A::type => 'A::type => bool) -->
  1.6081 -   tends (%n::'A::type. real_abs (x n)) (real_abs x0) (mtop mr1, g)"
  1.6082 -  by (import hollight NET_ABS)
  1.6083 -
  1.6084 -lemma NET_SUM: "ALL g::'q_71813::type => 'q_71813::type => bool.
  1.6085 -   dorder g &
  1.6086 -   tends (%x::'q_71813::type. real_of_num 0) (real_of_num 0)
  1.6087 -    (mtop mr1, g) -->
  1.6088 -   (ALL (x::nat) n::nat.
  1.6089 -       (ALL r::nat.
  1.6090 -           <= x r & < r (x + n) -->
  1.6091 -           tends ((f::nat => 'q_71813::type => hollight.real) r)
  1.6092 -            ((l::nat => hollight.real) r) (mtop mr1, g)) -->
  1.6093 -       tends (%xa::'q_71813::type. psum (x, n) (%r::nat. f r xa))
  1.6094 -        (psum (x, n) l) (mtop mr1, g))"
  1.6095 -  by (import hollight NET_SUM)
  1.6096 -
  1.6097 -lemma NET_LE: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real)
  1.6098 -   (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real.
  1.6099 -   dorder g -->
  1.6100 -   tends x x0 (mtop mr1, g) &
  1.6101 -   tends y y0 (mtop mr1, g) &
  1.6102 -   (EX N::'A::type.
  1.6103 -       g N N & (ALL n::'A::type. g n N --> real_le (x n) (y n))) -->
  1.6104 -   real_le x0 y0"
  1.6105 -  by (import hollight NET_LE)
  1.6106 -
  1.6107 -constdefs
  1.6108 -  tends_num_real :: "(nat => hollight.real) => hollight.real => bool" 
  1.6109 -  "tends_num_real ==
  1.6110 -%(u::nat => hollight.real) ua::hollight.real. tends u ua (mtop mr1, >=)"
  1.6111 -
  1.6112 -lemma DEF_tends_num_real: "tends_num_real =
  1.6113 -(%(u::nat => hollight.real) ua::hollight.real. tends u ua (mtop mr1, >=))"
  1.6114 -  by (import hollight DEF_tends_num_real)
  1.6115 -
  1.6116 -lemma SEQ: "ALL (x::nat => hollight.real) x0::hollight.real.
  1.6117 -   tends_num_real x x0 =
  1.6118 -   (ALL e::hollight.real.
  1.6119 -       real_lt (real_of_num 0) e -->
  1.6120 -       (EX N::nat.
  1.6121 -           ALL n::nat. >= n N --> real_lt (real_abs (real_sub (x n) x0)) e))"
  1.6122 -  by (import hollight SEQ)
  1.6123 -
  1.6124 -lemma SEQ_CONST: "ALL k::hollight.real. tends_num_real (%x::nat. k) k"
  1.6125 -  by (import hollight SEQ_CONST)
  1.6126 -
  1.6127 -lemma SEQ_ADD: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real)
  1.6128 -   y0::hollight.real.
  1.6129 -   tends_num_real x x0 & tends_num_real y y0 -->
  1.6130 -   tends_num_real (%n::nat. real_add (x n) (y n)) (real_add x0 y0)"
  1.6131 -  by (import hollight SEQ_ADD)
  1.6132 -
  1.6133 -lemma SEQ_MUL: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real)
  1.6134 -   y0::hollight.real.
  1.6135 -   tends_num_real x x0 & tends_num_real y y0 -->
  1.6136 -   tends_num_real (%n::nat. real_mul (x n) (y n)) (real_mul x0 y0)"
  1.6137 -  by (import hollight SEQ_MUL)
  1.6138 -
  1.6139 -lemma SEQ_NEG: "ALL (x::nat => hollight.real) x0::hollight.real.
  1.6140 -   tends_num_real x x0 =
  1.6141 -   tends_num_real (%n::nat. real_neg (x n)) (real_neg x0)"
  1.6142 -  by (import hollight SEQ_NEG)
  1.6143 -
  1.6144 -lemma SEQ_INV: "ALL (x::nat => hollight.real) x0::hollight.real.
  1.6145 -   tends_num_real x x0 & x0 ~= real_of_num 0 -->
  1.6146 -   tends_num_real (%n::nat. real_inv (x n)) (real_inv x0)"
  1.6147 -  by (import hollight SEQ_INV)
  1.6148 -
  1.6149 -lemma SEQ_SUB: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real)
  1.6150 -   y0::hollight.real.
  1.6151 -   tends_num_real x x0 & tends_num_real y y0 -->
  1.6152 -   tends_num_real (%n::nat. real_sub (x n) (y n)) (real_sub x0 y0)"
  1.6153 -  by (import hollight SEQ_SUB)
  1.6154 -
  1.6155 -lemma SEQ_DIV: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real)
  1.6156 -   y0::hollight.real.
  1.6157 -   tends_num_real x x0 & tends_num_real y y0 & y0 ~= real_of_num 0 -->
  1.6158 -   tends_num_real (%n::nat. real_div (x n) (y n)) (real_div x0 y0)"
  1.6159 -  by (import hollight SEQ_DIV)
  1.6160 -
  1.6161 -lemma SEQ_UNIQ: "ALL (x::nat => hollight.real) (x1::hollight.real) x2::hollight.real.
  1.6162 -   tends_num_real x x1 & tends_num_real x x2 --> x1 = x2"
  1.6163 -  by (import hollight SEQ_UNIQ)
  1.6164 -
  1.6165 -lemma SEQ_NULL: "ALL (s::nat => hollight.real) l::hollight.real.
  1.6166 -   tends_num_real s l =
  1.6167 -   tends_num_real (%n::nat. real_sub (s n) l) (real_of_num 0)"
  1.6168 -  by (import hollight SEQ_NULL)
  1.6169 -
  1.6170 -lemma SEQ_SUM: "ALL (f::nat => nat => hollight.real) (l::nat => hollight.real) (m::nat)
  1.6171 -   n::nat.
  1.6172 -   (ALL x::nat. <= m x & < x (m + n) --> tends_num_real (f x) (l x)) -->
  1.6173 -   tends_num_real (%k::nat. psum (m, n) (%r::nat. f r k)) (psum (m, n) l)"
  1.6174 -  by (import hollight SEQ_SUM)
  1.6175 -
  1.6176 -lemma SEQ_TRANSFORM: "ALL (x::nat => hollight.real) (xa::nat => hollight.real) (xb::hollight.real)
  1.6177 -   xc::nat.
  1.6178 -   (ALL n::nat. <= xc n --> x n = xa n) & tends_num_real x xb -->
  1.6179 -   tends_num_real xa xb"
  1.6180 -  by (import hollight SEQ_TRANSFORM)
  1.6181 -
  1.6182 -constdefs
  1.6183 -  convergent :: "(nat => hollight.real) => bool" 
  1.6184 -  "convergent == %u::nat => hollight.real. Ex (tends_num_real u)"
  1.6185 -
  1.6186 -lemma DEF_convergent: "convergent = (%u::nat => hollight.real. Ex (tends_num_real u))"
  1.6187 -  by (import hollight DEF_convergent)
  1.6188 -
  1.6189 -constdefs
  1.6190 -  cauchy :: "(nat => hollight.real) => bool" 
  1.6191 -  "cauchy ==
  1.6192 -%u::nat => hollight.real.
  1.6193 -   ALL e::hollight.real.
  1.6194 -      real_lt (real_of_num 0) e -->
  1.6195 -      (EX N::nat.
  1.6196 -          ALL (m::nat) n::nat.
  1.6197 -             >= m N & >= n N -->
  1.6198 -             real_lt (real_abs (real_sub (u m) (u n))) e)"
  1.6199 -
  1.6200 -lemma DEF_cauchy: "cauchy =
  1.6201 -(%u::nat => hollight.real.
  1.6202 -    ALL e::hollight.real.
  1.6203 -       real_lt (real_of_num 0) e -->
  1.6204 -       (EX N::nat.
  1.6205 -           ALL (m::nat) n::nat.
  1.6206 -              >= m N & >= n N -->
  1.6207 -              real_lt (real_abs (real_sub (u m) (u n))) e))"
  1.6208 -  by (import hollight DEF_cauchy)
  1.6209 -
  1.6210 -constdefs
  1.6211 -  lim :: "(nat => hollight.real) => hollight.real" 
  1.6212 -  "lim == %u::nat => hollight.real. Eps (tends_num_real u)"
  1.6213 -
  1.6214 -lemma DEF_lim: "lim = (%u::nat => hollight.real. Eps (tends_num_real u))"
  1.6215 -  by (import hollight DEF_lim)
  1.6216 -
  1.6217 -lemma SEQ_LIM: "ALL f::nat => hollight.real. convergent f = tends_num_real f (lim f)"
  1.6218 -  by (import hollight SEQ_LIM)
  1.6219 -
  1.6220 -constdefs
  1.6221 -  subseq :: "(nat => nat) => bool" 
  1.6222 -  "subseq == %u::nat => nat. ALL (m::nat) n::nat. < m n --> < (u m) (u n)"
  1.6223 -
  1.6224 -lemma DEF_subseq: "subseq = (%u::nat => nat. ALL (m::nat) n::nat. < m n --> < (u m) (u n))"
  1.6225 -  by (import hollight DEF_subseq)
  1.6226 -
  1.6227 -lemma SUBSEQ_SUC: "ALL f::nat => nat. subseq f = (ALL n::nat. < (f n) (f (Suc n)))"
  1.6228 -  by (import hollight SUBSEQ_SUC)
  1.6229 -
  1.6230 -consts
  1.6231 -  mono :: "(nat => hollight.real) => bool" 
  1.6232 -
  1.6233 -defs
  1.6234 -  mono_def: "hollight.mono ==
  1.6235 -%u::nat => hollight.real.
  1.6236 -   (ALL (m::nat) n::nat. <= m n --> real_le (u m) (u n)) |
  1.6237 -   (ALL (m::nat) n::nat. <= m n --> hollight.real_ge (u m) (u n))"
  1.6238 -
  1.6239 -lemma DEF_mono: "hollight.mono =
  1.6240 -(%u::nat => hollight.real.
  1.6241 -    (ALL (m::nat) n::nat. <= m n --> real_le (u m) (u n)) |
  1.6242 -    (ALL (m::nat) n::nat. <= m n --> hollight.real_ge (u m) (u n)))"
  1.6243 -  by (import hollight DEF_mono)
  1.6244 -
  1.6245 -lemma MONO_SUC: "ALL f::nat => hollight.real.
  1.6246 -   hollight.mono f =
  1.6247 -   ((ALL x::nat. hollight.real_ge (f (Suc x)) (f x)) |
  1.6248 -    (ALL n::nat. real_le (f (Suc n)) (f n)))"
  1.6249 -  by (import hollight MONO_SUC)
  1.6250 -
  1.6251 -lemma MAX_LEMMA: "ALL (s::nat => hollight.real) N::nat.
  1.6252 -   EX k::hollight.real. ALL n::nat. < n N --> real_lt (real_abs (s n)) k"
  1.6253 -  by (import hollight MAX_LEMMA)
  1.6254 -
  1.6255 -lemma SEQ_BOUNDED: "ALL s::nat => hollight.real.
  1.6256 -   bounded (mr1, >=) s =
  1.6257 -   (EX k::hollight.real. ALL n::nat. real_lt (real_abs (s n)) k)"
  1.6258 -  by (import hollight SEQ_BOUNDED)
  1.6259 -
  1.6260 -lemma SEQ_BOUNDED_2: "ALL (f::nat => hollight.real) (k::hollight.real) K::hollight.real.
  1.6261 -   (ALL n::nat. real_le k (f n) & real_le (f n) K) --> bounded (mr1, >=) f"
  1.6262 -  by (import hollight SEQ_BOUNDED_2)
  1.6263 -
  1.6264 -lemma SEQ_CBOUNDED: "ALL f::nat => hollight.real. cauchy f --> bounded (mr1, >=) f"
  1.6265 -  by (import hollight SEQ_CBOUNDED)
  1.6266 -
  1.6267 -lemma SEQ_ICONV: "ALL f::nat => hollight.real.
  1.6268 -   bounded (mr1, >=) f &
  1.6269 -   (ALL (m::nat) n::nat. >= m n --> hollight.real_ge (f m) (f n)) -->
  1.6270 -   convergent f"
  1.6271 -  by (import hollight SEQ_ICONV)
  1.6272 -
  1.6273 -lemma SEQ_NEG_CONV: "ALL f::nat => hollight.real.
  1.6274 -   convergent f = convergent (%n::nat. real_neg (f n))"
  1.6275 -  by (import hollight SEQ_NEG_CONV)
  1.6276 -
  1.6277 -lemma SEQ_NEG_BOUNDED: "ALL f::nat => hollight.real.
  1.6278 -   bounded (mr1, >=) (%n::nat. real_neg (f n)) = bounded (mr1, >=) f"
  1.6279 -  by (import hollight SEQ_NEG_BOUNDED)
  1.6280 -
  1.6281 -lemma SEQ_BCONV: "ALL f::nat => hollight.real.
  1.6282 -   bounded (mr1, >=) f & hollight.mono f --> convergent f"
  1.6283 -  by (import hollight SEQ_BCONV)
  1.6284 -
  1.6285 -lemma SEQ_MONOSUB: "ALL s::nat => hollight.real.
  1.6286 -   EX f::nat => nat. subseq f & hollight.mono (%n::nat. s (f n))"
  1.6287 -  by (import hollight SEQ_MONOSUB)
  1.6288 -
  1.6289 -lemma SEQ_SBOUNDED: "ALL (s::nat => hollight.real) f::nat => nat.
  1.6290 -   bounded (mr1, >=) s --> bounded (mr1, >=) (%n::nat. s (f n))"
  1.6291 -  by (import hollight SEQ_SBOUNDED)
  1.6292 -
  1.6293 -lemma SEQ_SUBLE: "ALL (f::nat => nat) x::nat. subseq f --> <= x (f x)"
  1.6294 -  by (import hollight SEQ_SUBLE)
  1.6295 -
  1.6296 -lemma SEQ_DIRECT: "ALL f::nat => nat.
  1.6297 -   subseq f --> (ALL (N1::nat) N2::nat. EX x::nat. >= x N1 & >= (f x) N2)"
  1.6298 -  by (import hollight SEQ_DIRECT)
  1.6299 -
  1.6300 -lemma SEQ_CAUCHY: "ALL f::nat => hollight.real. cauchy f = convergent f"
  1.6301 -  by (import hollight SEQ_CAUCHY)
  1.6302 -
  1.6303 -lemma SEQ_LE: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (l::hollight.real)
  1.6304 -   m::hollight.real.
  1.6305 -   tends_num_real f l &
  1.6306 -   tends_num_real g m &
  1.6307 -   (EX N::nat. ALL n::nat. >= n N --> real_le (f n) (g n)) -->
  1.6308 -   real_le l m"
  1.6309 -  by (import hollight SEQ_LE)
  1.6310 -
  1.6311 -lemma SEQ_LE_0: "ALL (x::nat => hollight.real) xa::nat => hollight.real.
  1.6312 -   tends_num_real x (real_of_num 0) &
  1.6313 -   (EX xb::nat.
  1.6314 -       ALL xc::nat.
  1.6315 -          >= xc xb --> real_le (real_abs (xa xc)) (real_abs (x xc))) -->
  1.6316 -   tends_num_real xa (real_of_num 0)"
  1.6317 -  by (import hollight SEQ_LE_0)
  1.6318 -
  1.6319 -lemma SEQ_SUC: "ALL (f::nat => hollight.real) l::hollight.real.
  1.6320 -   tends_num_real f l = tends_num_real (%n::nat. f (Suc n)) l"
  1.6321 -  by (import hollight SEQ_SUC)
  1.6322 -
  1.6323 -lemma SEQ_ABS: "ALL f::nat => hollight.real.
  1.6324 -   tends_num_real (%n::nat. real_abs (f n)) (real_of_num 0) =
  1.6325 -   tends_num_real f (real_of_num 0)"
  1.6326 -  by (import hollight SEQ_ABS)
  1.6327 -
  1.6328 -lemma SEQ_ABS_IMP: "ALL (f::nat => hollight.real) l::hollight.real.
  1.6329 -   tends_num_real f l -->
  1.6330 -   tends_num_real (%n::nat. real_abs (f n)) (real_abs l)"
  1.6331 -  by (import hollight SEQ_ABS_IMP)
  1.6332 -
  1.6333 -lemma SEQ_INV0: "ALL f::nat => hollight.real.
  1.6334 -   (ALL y::hollight.real.
  1.6335 -       EX N::nat. ALL n::nat. >= n N --> hollight.real_gt (f n) y) -->
  1.6336 -   tends_num_real (%n::nat. real_inv (f n)) (real_of_num 0)"
  1.6337 -  by (import hollight SEQ_INV0)
  1.6338 -
  1.6339 -lemma SEQ_POWER_ABS: "ALL c::hollight.real.
  1.6340 -   real_lt (real_abs c) (real_of_num (NUMERAL_BIT1 0)) -->
  1.6341 -   tends_num_real (real_pow (real_abs c)) (real_of_num 0)"
  1.6342 -  by (import hollight SEQ_POWER_ABS)
  1.6343 -
  1.6344 -lemma SEQ_POWER: "ALL c::hollight.real.
  1.6345 -   real_lt (real_abs c) (real_of_num (NUMERAL_BIT1 0)) -->
  1.6346 -   tends_num_real (real_pow c) (real_of_num 0)"
  1.6347 -  by (import hollight SEQ_POWER)
  1.6348 -
  1.6349 -lemma NEST_LEMMA: "ALL (f::nat => hollight.real) g::nat => hollight.real.
  1.6350 -   (ALL n::nat. hollight.real_ge (f (Suc n)) (f n)) &
  1.6351 -   (ALL n::nat. real_le (g (Suc n)) (g n)) &
  1.6352 -   (ALL n::nat. real_le (f n) (g n)) -->
  1.6353 -   (EX (l::hollight.real) m::hollight.real.
  1.6354 -       real_le l m &
  1.6355 -       ((ALL n::nat. real_le (f n) l) & tends_num_real f l) &
  1.6356 -       (ALL n::nat. real_le m (g n)) & tends_num_real g m)"
  1.6357 -  by (import hollight NEST_LEMMA)
  1.6358 -
  1.6359 -lemma NEST_LEMMA_UNIQ: "ALL (f::nat => hollight.real) g::nat => hollight.real.
  1.6360 -   (ALL n::nat. hollight.real_ge (f (Suc n)) (f n)) &
  1.6361 -   (ALL n::nat. real_le (g (Suc n)) (g n)) &
  1.6362 -   (ALL n::nat. real_le (f n) (g n)) &
  1.6363 -   tends_num_real (%n::nat. real_sub (f n) (g n)) (real_of_num 0) -->
  1.6364 -   (EX l::hollight.real.
  1.6365 -       ((ALL n::nat. real_le (f n) l) & tends_num_real f l) &
  1.6366 -       (ALL n::nat. real_le l (g n)) & tends_num_real g l)"
  1.6367 -  by (import hollight NEST_LEMMA_UNIQ)
  1.6368 -
  1.6369 -lemma BOLZANO_LEMMA: "ALL P::hollight.real * hollight.real => bool.
  1.6370 -   (ALL (a::hollight.real) (b::hollight.real) c::hollight.real.
  1.6371 -       real_le a b & real_le b c & P (a, b) & P (b, c) --> P (a, c)) &
  1.6372 -   (ALL x::hollight.real.
  1.6373 -       EX d::hollight.real.
  1.6374 -          real_lt (real_of_num 0) d &
  1.6375 -          (ALL (a::hollight.real) b::hollight.real.
  1.6376 -              real_le a x & real_le x b & real_lt (real_sub b a) d -->
  1.6377 -              P (a, b))) -->
  1.6378 -   (ALL (a::hollight.real) b::hollight.real. real_le a b --> P (a, b))"
  1.6379 -  by (import hollight BOLZANO_LEMMA)
  1.6380 -
  1.6381 -constdefs
  1.6382 -  sums :: "(nat => hollight.real) => hollight.real => bool" 
  1.6383 -  "sums == %u::nat => hollight.real. tends_num_real (%n::nat. psum (0, n) u)"
  1.6384 -
  1.6385 -lemma DEF_sums: "sums = (%u::nat => hollight.real. tends_num_real (%n::nat. psum (0, n) u))"
  1.6386 -  by (import hollight DEF_sums)
  1.6387 -
  1.6388 -constdefs
  1.6389 -  summable :: "(nat => hollight.real) => bool" 
  1.6390 -  "summable == %u::nat => hollight.real. Ex (sums u)"
  1.6391 -
  1.6392 -lemma DEF_summable: "summable = (%u::nat => hollight.real. Ex (sums u))"
  1.6393 -  by (import hollight DEF_summable)
  1.6394 -
  1.6395 -constdefs
  1.6396 -  suminf :: "(nat => hollight.real) => hollight.real" 
  1.6397 -  "suminf == %u::nat => hollight.real. Eps (sums u)"
  1.6398 -
  1.6399 -lemma DEF_suminf: "suminf = (%u::nat => hollight.real. Eps (sums u))"
  1.6400 -  by (import hollight DEF_suminf)
  1.6401 -
  1.6402 -lemma SUM_SUMMABLE: "ALL (f::nat => hollight.real) l::hollight.real. sums f l --> summable f"
  1.6403 -  by (import hollight SUM_SUMMABLE)
  1.6404 -
  1.6405 -lemma SUMMABLE_SUM: "ALL f::nat => hollight.real. summable f --> sums f (suminf f)"
  1.6406 -  by (import hollight SUMMABLE_SUM)
  1.6407 -
  1.6408 -lemma SUM_UNIQ: "ALL (f::nat => hollight.real) x::hollight.real. sums f x --> x = suminf f"
  1.6409 -  by (import hollight SUM_UNIQ)
  1.6410 -
  1.6411 -lemma SER_UNIQ: "ALL (f::nat => hollight.real) (x::hollight.real) y::hollight.real.
  1.6412 -   sums f x & sums f y --> x = y"
  1.6413 -  by (import hollight SER_UNIQ)
  1.6414 -
  1.6415 -lemma SER_0: "ALL (f::nat => hollight.real) n::nat.
  1.6416 -   (ALL m::nat. <= n m --> f m = real_of_num 0) --> sums f (psum (0, n) f)"
  1.6417 -  by (import hollight SER_0)
  1.6418 -
  1.6419 -lemma SER_POS_LE: "ALL (f::nat => hollight.real) n::nat.
  1.6420 -   summable f & (ALL m::nat. <= n m --> real_le (real_of_num 0) (f m)) -->
  1.6421 -   real_le (psum (0, n) f) (suminf f)"
  1.6422 -  by (import hollight SER_POS_LE)
  1.6423 -
  1.6424 -lemma SER_POS_LT: "ALL (f::nat => hollight.real) n::nat.
  1.6425 -   summable f & (ALL m::nat. <= n m --> real_lt (real_of_num 0) (f m)) -->
  1.6426 -   real_lt (psum (0, n) f) (suminf f)"
  1.6427 -  by (import hollight SER_POS_LT)
  1.6428 -
  1.6429 -lemma SER_GROUP: "ALL (f::nat => hollight.real) k::nat.
  1.6430 -   summable f & < 0 k --> sums (%n::nat. psum (n * k, k) f) (suminf f)"
  1.6431 -  by (import hollight SER_GROUP)
  1.6432 -
  1.6433 -lemma SER_PAIR: "ALL f::nat => hollight.real.
  1.6434 -   summable f -->
  1.6435 -   sums
  1.6436 -    (%n::nat.
  1.6437 -        psum
  1.6438 -         (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n, NUMERAL_BIT0 (NUMERAL_BIT1 0))
  1.6439 -         f)
  1.6440 -    (suminf f)"
  1.6441 -  by (import hollight SER_PAIR)
  1.6442 -
  1.6443 -lemma SER_OFFSET: "ALL f::nat => hollight.real.
  1.6444 -   summable f -->
  1.6445 -   (ALL k::nat.
  1.6446 -       sums (%n::nat. f (n + k)) (real_sub (suminf f) (psum (0, k) f)))"
  1.6447 -  by (import hollight SER_OFFSET)
  1.6448 -
  1.6449 -lemma SER_OFFSET_REV: "ALL (f::nat => hollight.real) k::nat.
  1.6450 -   summable (%n::nat. f (n + k)) -->
  1.6451 -   sums f (real_add (psum (0, k) f) (suminf (%n::nat. f (n + k))))"
  1.6452 -  by (import hollight SER_OFFSET_REV)
  1.6453 -
  1.6454 -lemma SER_POS_LT_PAIR: "ALL (f::nat => hollight.real) n::nat.
  1.6455 -   summable f &
  1.6456 -   (ALL d::nat.
  1.6457 -       real_lt (real_of_num 0)
  1.6458 -        (real_add (f (n + NUMERAL_BIT0 (NUMERAL_BIT1 0) * d))
  1.6459 -          (f (n +
  1.6460 -              (NUMERAL_BIT0 (NUMERAL_BIT1 0) * d + NUMERAL_BIT1 0))))) -->
  1.6461 -   real_lt (psum (0, n) f) (suminf f)"
  1.6462 -  by (import hollight SER_POS_LT_PAIR)
  1.6463 -
  1.6464 -lemma SER_ADD: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real)
  1.6465 -   y0::hollight.real.
  1.6466 -   sums x x0 & sums y y0 -->
  1.6467 -   sums (%n::nat. real_add (x n) (y n)) (real_add x0 y0)"
  1.6468 -  by (import hollight SER_ADD)
  1.6469 -
  1.6470 -lemma SER_CMUL: "ALL (x::nat => hollight.real) (x0::hollight.real) c::hollight.real.
  1.6471 -   sums x x0 --> sums (%n::nat. real_mul c (x n)) (real_mul c x0)"
  1.6472 -  by (import hollight SER_CMUL)
  1.6473 -
  1.6474 -lemma SER_NEG: "ALL (x::nat => hollight.real) x0::hollight.real.
  1.6475 -   sums x x0 --> sums (%xa::nat. real_neg (x xa)) (real_neg x0)"
  1.6476 -  by (import hollight SER_NEG)
  1.6477 -
  1.6478 -lemma SER_SUB: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real)
  1.6479 -   y0::hollight.real.
  1.6480 -   sums x x0 & sums y y0 -->
  1.6481 -   sums (%n::nat. real_sub (x n) (y n)) (real_sub x0 y0)"
  1.6482 -  by (import hollight SER_SUB)
  1.6483 -
  1.6484 -lemma SER_CDIV: "ALL (x::nat => hollight.real) (x0::hollight.real) c::hollight.real.
  1.6485 -   sums x x0 --> sums (%xa::nat. real_div (x xa) c) (real_div x0 c)"
  1.6486 -  by (import hollight SER_CDIV)
  1.6487 -
  1.6488 -lemma SER_CAUCHY: "ALL f::nat => hollight.real.
  1.6489 -   summable f =
  1.6490 -   (ALL e::hollight.real.
  1.6491 -       real_lt (real_of_num 0) e -->
  1.6492 -       (EX N::nat.
  1.6493 -           ALL (m::nat) n::nat.
  1.6494 -              >= m N --> real_lt (real_abs (psum (m, n) f)) e))"
  1.6495 -  by (import hollight SER_CAUCHY)
  1.6496 -
  1.6497 -lemma SER_ZERO: "ALL f::nat => hollight.real. summable f --> tends_num_real f (real_of_num 0)"
  1.6498 -  by (import hollight SER_ZERO)
  1.6499 -
  1.6500 -lemma SER_COMPAR: "ALL (f::nat => hollight.real) g::nat => hollight.real.
  1.6501 -   (EX x::nat. ALL xa::nat. >= xa x --> real_le (real_abs (f xa)) (g xa)) &
  1.6502 -   summable g -->
  1.6503 -   summable f"
  1.6504 -  by (import hollight SER_COMPAR)
  1.6505 -
  1.6506 -lemma SER_COMPARA: "ALL (f::nat => hollight.real) g::nat => hollight.real.
  1.6507 -   (EX x::nat. ALL xa::nat. >= xa x --> real_le (real_abs (f xa)) (g xa)) &
  1.6508 -   summable g -->
  1.6509 -   summable (%k::nat. real_abs (f k))"
  1.6510 -  by (import hollight SER_COMPARA)
  1.6511 -
  1.6512 -lemma SER_LE: "ALL (f::nat => hollight.real) g::nat => hollight.real.
  1.6513 -   (ALL n::nat. real_le (f n) (g n)) & summable f & summable g -->
  1.6514 -   real_le (suminf f) (suminf g)"
  1.6515 -  by (import hollight SER_LE)
  1.6516 -
  1.6517 -lemma SER_LE2: "ALL (f::nat => hollight.real) g::nat => hollight.real.
  1.6518 -   (ALL n::nat. real_le (real_abs (f n)) (g n)) & summable g -->
  1.6519 -   summable f & real_le (suminf f) (suminf g)"
  1.6520 -  by (import hollight SER_LE2)
  1.6521 -
  1.6522 -lemma SER_ACONV: "ALL f::nat => hollight.real.
  1.6523 -   summable (%n::nat. real_abs (f n)) --> summable f"
  1.6524 -  by (import hollight SER_ACONV)
  1.6525 -
  1.6526 -lemma SER_ABS: "ALL f::nat => hollight.real.
  1.6527 -   summable (%n::nat. real_abs (f n)) -->
  1.6528 -   real_le (real_abs (suminf f)) (suminf (%n::nat. real_abs (f n)))"
  1.6529 -  by (import hollight SER_ABS)
  1.6530 -
  1.6531 -lemma GP_FINITE: "ALL x::hollight.real.
  1.6532 -   x ~= real_of_num (NUMERAL_BIT1 0) -->
  1.6533 -   (ALL n::nat.
  1.6534 -       psum (0, n) (real_pow x) =
  1.6535 -       real_div (real_sub (real_pow x n) (real_of_num (NUMERAL_BIT1 0)))
  1.6536 -        (real_sub x (real_of_num (NUMERAL_BIT1 0))))"
  1.6537 -  by (import hollight GP_FINITE)
  1.6538 -
  1.6539 -lemma GP: "ALL x::hollight.real.
  1.6540 -   real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) -->
  1.6541 -   sums (real_pow x) (real_inv (real_sub (real_of_num (NUMERAL_BIT1 0)) x))"
  1.6542 -  by (import hollight GP)
  1.6543 -
  1.6544 -lemma ABS_NEG_LEMMA: "ALL (c::hollight.real) (x::hollight.real) y::hollight.real.
  1.6545 -   real_le c (real_of_num 0) -->
  1.6546 -   real_le (real_abs x) (real_mul c (real_abs y)) --> x = real_of_num 0"
  1.6547 -  by (import hollight ABS_NEG_LEMMA)
  1.6548 -
  1.6549 -lemma SER_RATIO: "ALL (f::nat => hollight.real) (c::hollight.real) N::nat.
  1.6550 -   real_lt c (real_of_num (NUMERAL_BIT1 0)) &
  1.6551 -   (ALL n::nat.
  1.6552 -       >= n N -->
  1.6553 -       real_le (real_abs (f (Suc n))) (real_mul c (real_abs (f n)))) -->
  1.6554 -   summable f"
  1.6555 -  by (import hollight SER_RATIO)
  1.6556 -
  1.6557 -lemma SEQ_TRUNCATION: "ALL (f::nat => hollight.real) (l::hollight.real) (n::nat) b::hollight.real.
  1.6558 -   sums f l & (ALL m::nat. real_le (real_abs (psum (n, m) f)) b) -->
  1.6559 -   real_le (real_abs (real_sub l (psum (0, n) f))) b"
  1.6560 -  by (import hollight SEQ_TRUNCATION)
  1.6561 -
  1.6562 -constdefs
  1.6563 -  tends_real_real :: "(hollight.real => hollight.real) => hollight.real => hollight.real => bool" 
  1.6564 -  "tends_real_real ==
  1.6565 -%(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real.
  1.6566 -   tends u ua (mtop mr1, tendsto (mr1, ub))"
  1.6567 -
  1.6568 -lemma DEF_tends_real_real: "tends_real_real =
  1.6569 -(%(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real.
  1.6570 -    tends u ua (mtop mr1, tendsto (mr1, ub)))"
  1.6571 -  by (import hollight DEF_tends_real_real)
  1.6572 -
  1.6573 -lemma LIM: "ALL (f::hollight.real => hollight.real) (y0::hollight.real)
  1.6574 -   x0::hollight.real.
  1.6575 -   tends_real_real f y0 x0 =
  1.6576 -   (ALL e::hollight.real.
  1.6577 -       real_lt (real_of_num 0) e -->
  1.6578 -       (EX d::hollight.real.
  1.6579 -           real_lt (real_of_num 0) d &
  1.6580 -           (ALL x::hollight.real.
  1.6581 -               real_lt (real_of_num 0) (real_abs (real_sub x x0)) &
  1.6582 -               real_lt (real_abs (real_sub x x0)) d -->
  1.6583 -               real_lt (real_abs (real_sub (f x) y0)) e)))"
  1.6584 -  by (import hollight LIM)
  1.6585 -
  1.6586 -lemma LIM_CONST: "ALL k::hollight.real. All (tends_real_real (%x::hollight.real. k) k)"
  1.6587 -  by (import hollight LIM_CONST)
  1.6588 -
  1.6589 -lemma LIM_ADD: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6590 -   (l::hollight.real) m::hollight.real.
  1.6591 -   tends_real_real f l (x::hollight.real) & tends_real_real g m x -->
  1.6592 -   tends_real_real (%x::hollight.real. real_add (f x) (g x)) (real_add l m)
  1.6593 -    x"
  1.6594 -  by (import hollight LIM_ADD)
  1.6595 -
  1.6596 -lemma LIM_MUL: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6597 -   (l::hollight.real) m::hollight.real.
  1.6598 -   tends_real_real f l (x::hollight.real) & tends_real_real g m x -->
  1.6599 -   tends_real_real (%x::hollight.real. real_mul (f x) (g x)) (real_mul l m)
  1.6600 -    x"
  1.6601 -  by (import hollight LIM_MUL)
  1.6602 -
  1.6603 -lemma LIM_NEG: "ALL (f::hollight.real => hollight.real) l::hollight.real.
  1.6604 -   tends_real_real f l (x::hollight.real) =
  1.6605 -   tends_real_real (%x::hollight.real. real_neg (f x)) (real_neg l) x"
  1.6606 -  by (import hollight LIM_NEG)
  1.6607 -
  1.6608 -lemma LIM_INV: "ALL (f::hollight.real => hollight.real) l::hollight.real.
  1.6609 -   tends_real_real f l (x::hollight.real) & l ~= real_of_num 0 -->
  1.6610 -   tends_real_real (%x::hollight.real. real_inv (f x)) (real_inv l) x"
  1.6611 -  by (import hollight LIM_INV)
  1.6612 -
  1.6613 -lemma LIM_SUB: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6614 -   (l::hollight.real) m::hollight.real.
  1.6615 -   tends_real_real f l (x::hollight.real) & tends_real_real g m x -->
  1.6616 -   tends_real_real (%x::hollight.real. real_sub (f x) (g x)) (real_sub l m)
  1.6617 -    x"
  1.6618 -  by (import hollight LIM_SUB)
  1.6619 -
  1.6620 -lemma LIM_DIV: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6621 -   (l::hollight.real) m::hollight.real.
  1.6622 -   tends_real_real f l (x::hollight.real) &
  1.6623 -   tends_real_real g m x & m ~= real_of_num 0 -->
  1.6624 -   tends_real_real (%x::hollight.real. real_div (f x) (g x)) (real_div l m)
  1.6625 -    x"
  1.6626 -  by (import hollight LIM_DIV)
  1.6627 -
  1.6628 -lemma LIM_NULL: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real.
  1.6629 -   tends_real_real f l x =
  1.6630 -   tends_real_real (%x::hollight.real. real_sub (f x) l) (real_of_num 0) x"
  1.6631 -  by (import hollight LIM_NULL)
  1.6632 -
  1.6633 -lemma LIM_SUM: "ALL (f::nat => hollight.real => hollight.real) (l::nat => hollight.real)
  1.6634 -   (m::nat) (n::nat) x::hollight.real.
  1.6635 -   (ALL xa::nat.
  1.6636 -       <= m xa & < xa (m + n) --> tends_real_real (f xa) (l xa) x) -->
  1.6637 -   tends_real_real (%x::hollight.real. psum (m, n) (%r::nat. f r x))
  1.6638 -    (psum (m, n) l) x"
  1.6639 -  by (import hollight LIM_SUM)
  1.6640 -
  1.6641 -lemma LIM_X: "ALL x0::hollight.real. tends_real_real (%x::hollight.real. x) x0 x0"
  1.6642 -  by (import hollight LIM_X)
  1.6643 -
  1.6644 -lemma LIM_UNIQ: "ALL (f::hollight.real => hollight.real) (l::hollight.real)
  1.6645 -   (m::hollight.real) x::hollight.real.
  1.6646 -   tends_real_real f l x & tends_real_real f m x --> l = m"
  1.6647 -  by (import hollight LIM_UNIQ)
  1.6648 -
  1.6649 -lemma LIM_EQUAL: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6650 -   (l::hollight.real) x0::hollight.real.
  1.6651 -   (ALL x::hollight.real. x ~= x0 --> f x = g x) -->
  1.6652 -   tends_real_real f l x0 = tends_real_real g l x0"
  1.6653 -  by (import hollight LIM_EQUAL)
  1.6654 -
  1.6655 -lemma LIM_TRANSFORM: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6656 -   (x0::hollight.real) l::hollight.real.
  1.6657 -   tends_real_real (%x::hollight.real. real_sub (f x) (g x)) (real_of_num 0)
  1.6658 -    x0 &
  1.6659 -   tends_real_real g l x0 -->
  1.6660 -   tends_real_real f l x0"
  1.6661 -  by (import hollight LIM_TRANSFORM)
  1.6662 -
  1.6663 -constdefs
  1.6664 -  diffl :: "(hollight.real => hollight.real) => hollight.real => hollight.real => bool" 
  1.6665 -  "diffl ==
  1.6666 -%(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real.
  1.6667 -   tends_real_real
  1.6668 -    (%h::hollight.real. real_div (real_sub (u (real_add ub h)) (u ub)) h) ua
  1.6669 -    (real_of_num 0)"
  1.6670 -
  1.6671 -lemma DEF_diffl: "diffl =
  1.6672 -(%(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real.
  1.6673 -    tends_real_real
  1.6674 -     (%h::hollight.real. real_div (real_sub (u (real_add ub h)) (u ub)) h)
  1.6675 -     ua (real_of_num 0))"
  1.6676 -  by (import hollight DEF_diffl)
  1.6677 -
  1.6678 -constdefs
  1.6679 -  contl :: "(hollight.real => hollight.real) => hollight.real => bool" 
  1.6680 -  "contl ==
  1.6681 -%(u::hollight.real => hollight.real) ua::hollight.real.
  1.6682 -   tends_real_real (%h::hollight.real. u (real_add ua h)) (u ua)
  1.6683 -    (real_of_num 0)"
  1.6684 -
  1.6685 -lemma DEF_contl: "contl =
  1.6686 -(%(u::hollight.real => hollight.real) ua::hollight.real.
  1.6687 -    tends_real_real (%h::hollight.real. u (real_add ua h)) (u ua)
  1.6688 -     (real_of_num 0))"
  1.6689 -  by (import hollight DEF_contl)
  1.6690 -
  1.6691 -constdefs
  1.6692 -  differentiable :: "(hollight.real => hollight.real) => hollight.real => bool" 
  1.6693 -  "differentiable ==
  1.6694 -%(u::hollight.real => hollight.real) ua::hollight.real.
  1.6695 -   EX l::hollight.real. diffl u l ua"
  1.6696 -
  1.6697 -lemma DEF_differentiable: "differentiable =
  1.6698 -(%(u::hollight.real => hollight.real) ua::hollight.real.
  1.6699 -    EX l::hollight.real. diffl u l ua)"
  1.6700 -  by (import hollight DEF_differentiable)
  1.6701 -
  1.6702 -lemma DIFF_UNIQ: "ALL (f::hollight.real => hollight.real) (l::hollight.real)
  1.6703 -   (m::hollight.real) x::hollight.real. diffl f l x & diffl f m x --> l = m"
  1.6704 -  by (import hollight DIFF_UNIQ)
  1.6705 -
  1.6706 -lemma DIFF_CONT: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real.
  1.6707 -   diffl f l x --> contl f x"
  1.6708 -  by (import hollight DIFF_CONT)
  1.6709 -
  1.6710 -lemma CONTL_LIM: "ALL (f::hollight.real => hollight.real) x::hollight.real.
  1.6711 -   contl f x = tends_real_real f (f x) x"
  1.6712 -  by (import hollight CONTL_LIM)
  1.6713 -
  1.6714 -lemma CONT_X: "All (contl (%x::hollight.real. x))"
  1.6715 -  by (import hollight CONT_X)
  1.6716 -
  1.6717 -lemma CONT_CONST: "All (contl (%x::hollight.real. k::hollight.real))"
  1.6718 -  by (import hollight CONT_CONST)
  1.6719 -
  1.6720 -lemma CONT_ADD: "ALL x::hollight.real.
  1.6721 -   contl (f::hollight.real => hollight.real) x &
  1.6722 -   contl (g::hollight.real => hollight.real) x -->
  1.6723 -   contl (%x::hollight.real. real_add (f x) (g x)) x"
  1.6724 -  by (import hollight CONT_ADD)
  1.6725 -
  1.6726 -lemma CONT_MUL: "ALL x::hollight.real.
  1.6727 -   contl (f::hollight.real => hollight.real) x &
  1.6728 -   contl (g::hollight.real => hollight.real) x -->
  1.6729 -   contl (%x::hollight.real. real_mul (f x) (g x)) x"
  1.6730 -  by (import hollight CONT_MUL)
  1.6731 -
  1.6732 -lemma CONT_NEG: "ALL x::hollight.real.
  1.6733 -   contl (f::hollight.real => hollight.real) x -->
  1.6734 -   contl (%x::hollight.real. real_neg (f x)) x"
  1.6735 -  by (import hollight CONT_NEG)
  1.6736 -
  1.6737 -lemma CONT_INV: "ALL x::hollight.real.
  1.6738 -   contl (f::hollight.real => hollight.real) x & f x ~= real_of_num 0 -->
  1.6739 -   contl (%x::hollight.real. real_inv (f x)) x"
  1.6740 -  by (import hollight CONT_INV)
  1.6741 -
  1.6742 -lemma CONT_SUB: "ALL x::hollight.real.
  1.6743 -   contl (f::hollight.real => hollight.real) x &
  1.6744 -   contl (g::hollight.real => hollight.real) x -->
  1.6745 -   contl (%x::hollight.real. real_sub (f x) (g x)) x"
  1.6746 -  by (import hollight CONT_SUB)
  1.6747 -
  1.6748 -lemma CONT_DIV: "ALL x::hollight.real.
  1.6749 -   contl (f::hollight.real => hollight.real) x &
  1.6750 -   contl (g::hollight.real => hollight.real) x & g x ~= real_of_num 0 -->
  1.6751 -   contl (%x::hollight.real. real_div (f x) (g x)) x"
  1.6752 -  by (import hollight CONT_DIV)
  1.6753 -
  1.6754 -lemma CONT_COMPOSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6755 -   x::hollight.real.
  1.6756 -   contl f x & contl g (f x) --> contl (%x::hollight.real. g (f x)) x"
  1.6757 -  by (import hollight CONT_COMPOSE)
  1.6758 -
  1.6759 -lemma IVT: "ALL (f::hollight.real => hollight.real) (a::hollight.real)
  1.6760 -   (b::hollight.real) y::hollight.real.
  1.6761 -   real_le a b &
  1.6762 -   (real_le (f a) y & real_le y (f b)) &
  1.6763 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6764 -   (EX x::hollight.real. real_le a x & real_le x b & f x = y)"
  1.6765 -  by (import hollight IVT)
  1.6766 -
  1.6767 -lemma IVT2: "ALL (f::hollight.real => hollight.real) (a::hollight.real)
  1.6768 -   (b::hollight.real) y::hollight.real.
  1.6769 -   real_le a b &
  1.6770 -   (real_le (f b) y & real_le y (f a)) &
  1.6771 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6772 -   (EX x::hollight.real. real_le a x & real_le x b & f x = y)"
  1.6773 -  by (import hollight IVT2)
  1.6774 -
  1.6775 -lemma DIFF_CONST: "ALL k::hollight.real. All (diffl (%x::hollight.real. k) (real_of_num 0))"
  1.6776 -  by (import hollight DIFF_CONST)
  1.6777 -
  1.6778 -lemma DIFF_ADD: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6779 -   (l::hollight.real) (m::hollight.real) x::hollight.real.
  1.6780 -   diffl f l x & diffl g m x -->
  1.6781 -   diffl (%x::hollight.real. real_add (f x) (g x)) (real_add l m) x"
  1.6782 -  by (import hollight DIFF_ADD)
  1.6783 -
  1.6784 -lemma DIFF_MUL: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6785 -   (l::hollight.real) (m::hollight.real) x::hollight.real.
  1.6786 -   diffl f l x & diffl g m x -->
  1.6787 -   diffl (%x::hollight.real. real_mul (f x) (g x))
  1.6788 -    (real_add (real_mul l (g x)) (real_mul m (f x))) x"
  1.6789 -  by (import hollight DIFF_MUL)
  1.6790 -
  1.6791 -lemma DIFF_CMUL: "ALL (f::hollight.real => hollight.real) (c::hollight.real)
  1.6792 -   (l::hollight.real) x::hollight.real.
  1.6793 -   diffl f l x -->
  1.6794 -   diffl (%x::hollight.real. real_mul c (f x)) (real_mul c l) x"
  1.6795 -  by (import hollight DIFF_CMUL)
  1.6796 -
  1.6797 -lemma DIFF_NEG: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real.
  1.6798 -   diffl f l x --> diffl (%x::hollight.real. real_neg (f x)) (real_neg l) x"
  1.6799 -  by (import hollight DIFF_NEG)
  1.6800 -
  1.6801 -lemma DIFF_SUB: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6802 -   (l::hollight.real) (m::hollight.real) x::hollight.real.
  1.6803 -   diffl f l x & diffl g m x -->
  1.6804 -   diffl (%x::hollight.real. real_sub (f x) (g x)) (real_sub l m) x"
  1.6805 -  by (import hollight DIFF_SUB)
  1.6806 -
  1.6807 -lemma DIFF_CARAT: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real.
  1.6808 -   diffl f l x =
  1.6809 -   (EX xa::hollight.real => hollight.real.
  1.6810 -       (ALL z::hollight.real.
  1.6811 -           real_sub (f z) (f x) = real_mul (xa z) (real_sub z x)) &
  1.6812 -       contl xa x & xa x = l)"
  1.6813 -  by (import hollight DIFF_CARAT)
  1.6814 -
  1.6815 -lemma DIFF_CHAIN: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6816 -   (l::hollight.real) (m::hollight.real) x::hollight.real.
  1.6817 -   diffl f l (g x) & diffl g m x -->
  1.6818 -   diffl (%x::hollight.real. f (g x)) (real_mul l m) x"
  1.6819 -  by (import hollight DIFF_CHAIN)
  1.6820 -
  1.6821 -lemma DIFF_X: "All (diffl (%x::hollight.real. x) (real_of_num (NUMERAL_BIT1 0)))"
  1.6822 -  by (import hollight DIFF_X)
  1.6823 -
  1.6824 -lemma DIFF_POW: "ALL (n::nat) x::hollight.real.
  1.6825 -   diffl (%x::hollight.real. real_pow x n)
  1.6826 -    (real_mul (real_of_num n) (real_pow x (n - NUMERAL_BIT1 0))) x"
  1.6827 -  by (import hollight DIFF_POW)
  1.6828 -
  1.6829 -lemma DIFF_XM1: "ALL x::hollight.real.
  1.6830 -   x ~= real_of_num 0 -->
  1.6831 -   diffl real_inv
  1.6832 -    (real_neg (real_pow (real_inv x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) x"
  1.6833 -  by (import hollight DIFF_XM1)
  1.6834 -
  1.6835 -lemma DIFF_INV: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real.
  1.6836 -   diffl f l x & f x ~= real_of_num 0 -->
  1.6837 -   diffl (%x::hollight.real. real_inv (f x))
  1.6838 -    (real_neg (real_div l (real_pow (f x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))
  1.6839 -    x"
  1.6840 -  by (import hollight DIFF_INV)
  1.6841 -
  1.6842 -lemma DIFF_DIV: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.6843 -   (l::hollight.real) m::hollight.real.
  1.6844 -   diffl f l (x::hollight.real) & diffl g m x & g x ~= real_of_num 0 -->
  1.6845 -   diffl (%x::hollight.real. real_div (f x) (g x))
  1.6846 -    (real_div (real_sub (real_mul l (g x)) (real_mul m (f x)))
  1.6847 -      (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.6848 -    x"
  1.6849 -  by (import hollight DIFF_DIV)
  1.6850 -
  1.6851 -lemma DIFF_SUM: "ALL (f::nat => hollight.real => hollight.real)
  1.6852 -   (f'::nat => hollight.real => hollight.real) (m::nat) (n::nat)
  1.6853 -   x::hollight.real.
  1.6854 -   (ALL r::nat. <= m r & < r (m + n) --> diffl (f r) (f' r x) x) -->
  1.6855 -   diffl (%x::hollight.real. psum (m, n) (%n::nat. f n x))
  1.6856 -    (psum (m, n) (%r::nat. f' r x)) x"
  1.6857 -  by (import hollight DIFF_SUM)
  1.6858 -
  1.6859 -lemma CONT_BOUNDED: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6860 -   real_le a b &
  1.6861 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6862 -   (EX M::hollight.real.
  1.6863 -       ALL x::hollight.real. real_le a x & real_le x b --> real_le (f x) M)"
  1.6864 -  by (import hollight CONT_BOUNDED)
  1.6865 -
  1.6866 -lemma CONT_BOUNDED_ABS: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6867 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6868 -   (EX M::hollight.real.
  1.6869 -       ALL x::hollight.real.
  1.6870 -          real_le a x & real_le x b --> real_le (real_abs (f x)) M)"
  1.6871 -  by (import hollight CONT_BOUNDED_ABS)
  1.6872 -
  1.6873 -lemma CONT_HASSUP: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6874 -   real_le a b &
  1.6875 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6876 -   (EX M::hollight.real.
  1.6877 -       (ALL x::hollight.real.
  1.6878 -           real_le a x & real_le x b --> real_le (f x) M) &
  1.6879 -       (ALL N::hollight.real.
  1.6880 -           real_lt N M -->
  1.6881 -           (EX x::hollight.real.
  1.6882 -               real_le a x & real_le x b & real_lt N (f x))))"
  1.6883 -  by (import hollight CONT_HASSUP)
  1.6884 -
  1.6885 -lemma CONT_ATTAINS: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6886 -   real_le a b &
  1.6887 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6888 -   (EX x::hollight.real.
  1.6889 -       (ALL xa::hollight.real.
  1.6890 -           real_le a xa & real_le xa b --> real_le (f xa) x) &
  1.6891 -       (EX xa::hollight.real. real_le a xa & real_le xa b & f xa = x))"
  1.6892 -  by (import hollight CONT_ATTAINS)
  1.6893 -
  1.6894 -lemma CONT_ATTAINS2: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6895 -   real_le a b &
  1.6896 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6897 -   (EX M::hollight.real.
  1.6898 -       (ALL x::hollight.real.
  1.6899 -           real_le a x & real_le x b --> real_le M (f x)) &
  1.6900 -       (EX x::hollight.real. real_le a x & real_le x b & f x = M))"
  1.6901 -  by (import hollight CONT_ATTAINS2)
  1.6902 -
  1.6903 -lemma CONT_ATTAINS_ALL: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6904 -   real_le a b &
  1.6905 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) -->
  1.6906 -   (EX (L::hollight.real) M::hollight.real.
  1.6907 -       (ALL x::hollight.real.
  1.6908 -           real_le a x & real_le x b -->
  1.6909 -           real_le L (f x) & real_le (f x) M) &
  1.6910 -       (ALL y::hollight.real.
  1.6911 -           real_le L y & real_le y M -->
  1.6912 -           (EX x::hollight.real. real_le a x & real_le x b & f x = y)))"
  1.6913 -  by (import hollight CONT_ATTAINS_ALL)
  1.6914 -
  1.6915 -lemma DIFF_LINC: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real.
  1.6916 -   diffl f l x & real_lt (real_of_num 0) l -->
  1.6917 -   (EX d::hollight.real.
  1.6918 -       real_lt (real_of_num 0) d &
  1.6919 -       (ALL h::hollight.real.
  1.6920 -           real_lt (real_of_num 0) h & real_lt h d -->
  1.6921 -           real_lt (f x) (f (real_add x h))))"
  1.6922 -  by (import hollight DIFF_LINC)
  1.6923 -
  1.6924 -lemma DIFF_LDEC: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real.
  1.6925 -   diffl f l x & real_lt l (real_of_num 0) -->
  1.6926 -   (EX d::hollight.real.
  1.6927 -       real_lt (real_of_num 0) d &
  1.6928 -       (ALL h::hollight.real.
  1.6929 -           real_lt (real_of_num 0) h & real_lt h d -->
  1.6930 -           real_lt (f x) (f (real_sub x h))))"
  1.6931 -  by (import hollight DIFF_LDEC)
  1.6932 -
  1.6933 -lemma DIFF_LMAX: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real.
  1.6934 -   diffl f l x &
  1.6935 -   (EX d::hollight.real.
  1.6936 -       real_lt (real_of_num 0) d &
  1.6937 -       (ALL y::hollight.real.
  1.6938 -           real_lt (real_abs (real_sub x y)) d --> real_le (f y) (f x))) -->
  1.6939 -   l = real_of_num 0"
  1.6940 -  by (import hollight DIFF_LMAX)
  1.6941 -
  1.6942 -lemma DIFF_LMIN: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real.
  1.6943 -   diffl f l x &
  1.6944 -   (EX d::hollight.real.
  1.6945 -       real_lt (real_of_num 0) d &
  1.6946 -       (ALL y::hollight.real.
  1.6947 -           real_lt (real_abs (real_sub x y)) d --> real_le (f x) (f y))) -->
  1.6948 -   l = real_of_num 0"
  1.6949 -  by (import hollight DIFF_LMIN)
  1.6950 -
  1.6951 -lemma DIFF_LCONST: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real.
  1.6952 -   diffl f l x &
  1.6953 -   (EX d::hollight.real.
  1.6954 -       real_lt (real_of_num 0) d &
  1.6955 -       (ALL y::hollight.real.
  1.6956 -           real_lt (real_abs (real_sub x y)) d --> f y = f x)) -->
  1.6957 -   l = real_of_num 0"
  1.6958 -  by (import hollight DIFF_LCONST)
  1.6959 -
  1.6960 -lemma INTERVAL_LEMMA_LT: "ALL (a::hollight.real) (b::hollight.real) x::hollight.real.
  1.6961 -   real_lt a x & real_lt x b -->
  1.6962 -   (EX xa::hollight.real.
  1.6963 -       real_lt (real_of_num 0) xa &
  1.6964 -       (ALL xb::hollight.real.
  1.6965 -           real_lt (real_abs (real_sub x xb)) xa -->
  1.6966 -           real_lt a xb & real_lt xb b))"
  1.6967 -  by (import hollight INTERVAL_LEMMA_LT)
  1.6968 -
  1.6969 -lemma INTERVAL_LEMMA: "ALL (a::hollight.real) (b::hollight.real) x::hollight.real.
  1.6970 -   real_lt a x & real_lt x b -->
  1.6971 -   (EX xa::hollight.real.
  1.6972 -       real_lt (real_of_num 0) xa &
  1.6973 -       (ALL y::hollight.real.
  1.6974 -           real_lt (real_abs (real_sub x y)) xa -->
  1.6975 -           real_le a y & real_le y b))"
  1.6976 -  by (import hollight INTERVAL_LEMMA)
  1.6977 -
  1.6978 -lemma ROLLE: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6979 -   real_lt a b &
  1.6980 -   f a = f b &
  1.6981 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) &
  1.6982 -   (ALL x::hollight.real.
  1.6983 -       real_lt a x & real_lt x b --> differentiable f x) -->
  1.6984 -   (EX z::hollight.real.
  1.6985 -       real_lt a z & real_lt z b & diffl f (real_of_num 0) z)"
  1.6986 -  by (import hollight ROLLE)
  1.6987 -
  1.6988 -lemma MVT_LEMMA: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6989 -   real_sub (f a)
  1.6990 -    (real_mul (real_div (real_sub (f b) (f a)) (real_sub b a)) a) =
  1.6991 -   real_sub (f b)
  1.6992 -    (real_mul (real_div (real_sub (f b) (f a)) (real_sub b a)) b)"
  1.6993 -  by (import hollight MVT_LEMMA)
  1.6994 -
  1.6995 -lemma MVT: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.6996 -   real_lt a b &
  1.6997 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) &
  1.6998 -   (ALL x::hollight.real.
  1.6999 -       real_lt a x & real_lt x b --> differentiable f x) -->
  1.7000 -   (EX (l::hollight.real) z::hollight.real.
  1.7001 -       real_lt a z &
  1.7002 -       real_lt z b &
  1.7003 -       diffl f l z & real_sub (f b) (f a) = real_mul (real_sub b a) l)"
  1.7004 -  by (import hollight MVT)
  1.7005 -
  1.7006 -lemma MVT_ALT: "ALL (f::hollight.real => hollight.real) (f'::hollight.real => hollight.real)
  1.7007 -   (a::hollight.real) b::hollight.real.
  1.7008 -   real_lt a b &
  1.7009 -   (ALL x::hollight.real.
  1.7010 -       real_le a x & real_le x b --> diffl f (f' x) x) -->
  1.7011 -   (EX z::hollight.real.
  1.7012 -       real_lt a z &
  1.7013 -       real_lt z b & real_sub (f b) (f a) = real_mul (real_sub b a) (f' z))"
  1.7014 -  by (import hollight MVT_ALT)
  1.7015 -
  1.7016 -lemma DIFF_ISCONST_END: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.7017 -   real_lt a b &
  1.7018 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) &
  1.7019 -   (ALL x::hollight.real.
  1.7020 -       real_lt a x & real_lt x b --> diffl f (real_of_num 0) x) -->
  1.7021 -   f b = f a"
  1.7022 -  by (import hollight DIFF_ISCONST_END)
  1.7023 -
  1.7024 -lemma DIFF_ISCONST: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.7025 -   real_lt a b &
  1.7026 -   (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) &
  1.7027 -   (ALL x::hollight.real.
  1.7028 -       real_lt a x & real_lt x b --> diffl f (real_of_num 0) x) -->
  1.7029 -   (ALL x::hollight.real. real_le a x & real_le x b --> f x = f a)"
  1.7030 -  by (import hollight DIFF_ISCONST)
  1.7031 -
  1.7032 -lemma DIFF_ISCONST_END_SIMPLE: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real.
  1.7033 -   real_lt a b &
  1.7034 -   (ALL x::hollight.real.
  1.7035 -       real_le a x & real_le x b --> diffl f (real_of_num 0) x) -->
  1.7036 -   f b = f a"
  1.7037 -  by (import hollight DIFF_ISCONST_END_SIMPLE)
  1.7038 -
  1.7039 -lemma DIFF_ISCONST_ALL: "ALL (x::hollight.real => hollight.real) (xa::hollight.real)
  1.7040 -   xb::hollight.real. All (diffl x (real_of_num 0)) --> x xa = x xb"
  1.7041 -  by (import hollight DIFF_ISCONST_ALL)
  1.7042 -
  1.7043 -lemma INTERVAL_ABS: "ALL (x::hollight.real) (z::hollight.real) d::hollight.real.
  1.7044 -   (real_le (real_sub x d) z & real_le z (real_add x d)) =
  1.7045 -   real_le (real_abs (real_sub z x)) d"
  1.7046 -  by (import hollight INTERVAL_ABS)
  1.7047 -
  1.7048 -lemma CONT_INJ_LEMMA: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.7049 -   (x::hollight.real) d::hollight.real.
  1.7050 -   real_lt (real_of_num 0) d &
  1.7051 -   (ALL z::hollight.real.
  1.7052 -       real_le (real_abs (real_sub z x)) d --> g (f z) = z) &
  1.7053 -   (ALL z::hollight.real.
  1.7054 -       real_le (real_abs (real_sub z x)) d --> contl f z) -->
  1.7055 -   ~ (ALL z::hollight.real.
  1.7056 -         real_le (real_abs (real_sub z x)) d --> real_le (f z) (f x))"
  1.7057 -  by (import hollight CONT_INJ_LEMMA)
  1.7058 -
  1.7059 -lemma CONT_INJ_LEMMA2: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.7060 -   (x::hollight.real) d::hollight.real.
  1.7061 -   real_lt (real_of_num 0) d &
  1.7062 -   (ALL z::hollight.real.
  1.7063 -       real_le (real_abs (real_sub z x)) d --> g (f z) = z) &
  1.7064 -   (ALL z::hollight.real.
  1.7065 -       real_le (real_abs (real_sub z x)) d --> contl f z) -->
  1.7066 -   ~ (ALL z::hollight.real.
  1.7067 -         real_le (real_abs (real_sub z x)) d --> real_le (f x) (f z))"
  1.7068 -  by (import hollight CONT_INJ_LEMMA2)
  1.7069 -
  1.7070 -lemma CONT_INJ_RANGE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.7071 -   (x::hollight.real) d::hollight.real.
  1.7072 -   real_lt (real_of_num 0) d &
  1.7073 -   (ALL z::hollight.real.
  1.7074 -       real_le (real_abs (real_sub z x)) d --> g (f z) = z) &
  1.7075 -   (ALL z::hollight.real.
  1.7076 -       real_le (real_abs (real_sub z x)) d --> contl f z) -->
  1.7077 -   (EX e::hollight.real.
  1.7078 -       real_lt (real_of_num 0) e &
  1.7079 -       (ALL y::hollight.real.
  1.7080 -           real_le (real_abs (real_sub y (f x))) e -->
  1.7081 -           (EX z::hollight.real.
  1.7082 -               real_le (real_abs (real_sub z x)) d & f z = y)))"
  1.7083 -  by (import hollight CONT_INJ_RANGE)
  1.7084 -
  1.7085 -lemma CONT_INVERSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.7086 -   (x::hollight.real) d::hollight.real.
  1.7087 -   real_lt (real_of_num 0) d &
  1.7088 -   (ALL z::hollight.real.
  1.7089 -       real_le (real_abs (real_sub z x)) d --> g (f z) = z) &
  1.7090 -   (ALL z::hollight.real.
  1.7091 -       real_le (real_abs (real_sub z x)) d --> contl f z) -->
  1.7092 -   contl g (f x)"
  1.7093 -  by (import hollight CONT_INVERSE)
  1.7094 -
  1.7095 -lemma DIFF_INVERSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.7096 -   (l::hollight.real) (x::hollight.real) d::hollight.real.
  1.7097 -   real_lt (real_of_num 0) d &
  1.7098 -   (ALL z::hollight.real.
  1.7099 -       real_le (real_abs (real_sub z x)) d --> g (f z) = z) &
  1.7100 -   (ALL z::hollight.real.
  1.7101 -       real_le (real_abs (real_sub z x)) d --> contl f z) &
  1.7102 -   diffl f l x & l ~= real_of_num 0 -->
  1.7103 -   diffl g (real_inv l) (f x)"
  1.7104 -  by (import hollight DIFF_INVERSE)
  1.7105 -
  1.7106 -lemma DIFF_INVERSE_LT: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real)
  1.7107 -   (l::hollight.real) (x::hollight.real) d::hollight.real.
  1.7108 -   real_lt (real_of_num 0) d &
  1.7109 -   (ALL z::hollight.real.
  1.7110 -       real_lt (real_abs (real_sub z x)) d --> g (f z) = z) &
  1.7111 -   (ALL z::hollight.real.
  1.7112 -       real_lt (real_abs (real_sub z x)) d --> contl f z) &
  1.7113 -   diffl f l x & l ~= real_of_num 0 -->
  1.7114 -   diffl g (real_inv l) (f x)"
  1.7115 -  by (import hollight DIFF_INVERSE_LT)
  1.7116 -
  1.7117 -lemma IVT_DERIVATIVE_0: "ALL (f::hollight.real => hollight.real) (f'::hollight.real => hollight.real)
  1.7118 -   (a::hollight.real) b::hollight.real.
  1.7119 -   real_le a b &
  1.7120 -   (ALL x::hollight.real. real_le a x & real_le x b --> diffl f (f' x) x) &
  1.7121 -   hollight.real_gt (f' a) (real_of_num 0) &
  1.7122 -   real_lt (f' b) (real_of_num 0) -->
  1.7123 -   (EX z::hollight.real. real_lt a z & real_lt z b & f' z = real_of_num 0)"
  1.7124 -  by (import hollight IVT_DERIVATIVE_0)
  1.7125 -
  1.7126 -lemma IVT_DERIVATIVE_POS: "ALL (x::hollight.real => hollight.real) (xa::hollight.real => hollight.real)
  1.7127 -   (xb::hollight.real) (xc::hollight.real) xd::hollight.real.
  1.7128 -   real_le xb xc &
  1.7129 -   (ALL xd::hollight.real.
  1.7130 -       real_le xb xd & real_le xd xc --> diffl x (xa xd) xd) &
  1.7131 -   hollight.real_gt (xa xb) xd & real_lt (xa xc) xd -->
  1.7132 -   (EX z::hollight.real. real_lt xb z & real_lt z xc & xa z = xd)"
  1.7133 -  by (import hollight IVT_DERIVATIVE_POS)
  1.7134 -
  1.7135 -lemma IVT_DERIVATIVE_NEG: "ALL (x::hollight.real => hollight.real) (xa::hollight.real => hollight.real)
  1.7136 -   (xb::hollight.real) (xc::hollight.real) xd::hollight.real.
  1.7137 -   real_le xb xc &
  1.7138 -   (ALL xd::hollight.real.
  1.7139 -       real_le xb xd & real_le xd xc --> diffl x (xa xd) xd) &
  1.7140 -   real_lt (xa xb) xd & hollight.real_gt (xa xc) xd -->
  1.7141 -   (EX z::hollight.real. real_lt xb z & real_lt z xc & xa z = xd)"
  1.7142 -  by (import hollight IVT_DERIVATIVE_NEG)
  1.7143 -
  1.7144 -lemma SEQ_CONT_UNIFORM: "ALL (s::nat => hollight.real => hollight.real)
  1.7145 -   (f::hollight.real => hollight.real) x0::hollight.real.
  1.7146 -   (ALL e::hollight.real.
  1.7147 -       real_lt (real_of_num 0) e -->
  1.7148 -       (EX (N::nat) d::hollight.real.
  1.7149 -           real_lt (real_of_num 0) d &
  1.7150 -           (ALL (x::hollight.real) n::nat.
  1.7151 -               real_lt (real_abs (real_sub x x0)) d & >= n N -->
  1.7152 -               real_lt (real_abs (real_sub (s n x) (f x))) e))) &
  1.7153 -   (EX N::nat. ALL n::nat. >= n N --> contl (s n) x0) -->
  1.7154 -   contl f x0"
  1.7155 -  by (import hollight SEQ_CONT_UNIFORM)
  1.7156 -
  1.7157 -lemma SER_COMPARA_UNIFORM: "ALL (s::hollight.real => nat => hollight.real) (x0::hollight.real)
  1.7158 -   g::nat => hollight.real.
  1.7159 -   (EX (N::nat) d::hollight.real.
  1.7160 -       real_lt (real_of_num 0) d &
  1.7161 -       (ALL (n::nat) x::hollight.real.
  1.7162 -           real_lt (real_abs (real_sub x x0)) d & >= n N -->
  1.7163 -           real_le (real_abs (s x n)) (g n))) &
  1.7164 -   summable g -->
  1.7165 -   (EX (f::hollight.real => hollight.real) d::hollight.real.
  1.7166 -       real_lt (real_of_num 0) d &
  1.7167 -       (ALL e::hollight.real.
  1.7168 -           real_lt (real_of_num 0) e -->
  1.7169 -           (EX N::nat.
  1.7170 -               ALL (x::hollight.real) n::nat.
  1.7171 -                  real_lt (real_abs (real_sub x x0)) d & >= n N -->
  1.7172 -                  real_lt (real_abs (real_sub (psum (0, n) (s x)) (f x)))
  1.7173 -                   e)))"
  1.7174 -  by (import hollight SER_COMPARA_UNIFORM)
  1.7175 -
  1.7176 -lemma SER_COMPARA_UNIFORM_WEAK: "ALL (s::hollight.real => nat => hollight.real) (x0::hollight.real)
  1.7177 -   g::nat => hollight.real.
  1.7178 -   (EX (N::nat) d::hollight.real.
  1.7179 -       real_lt (real_of_num 0) d &
  1.7180 -       (ALL (n::nat) x::hollight.real.
  1.7181 -           real_lt (real_abs (real_sub x x0)) d & >= n N -->
  1.7182 -           real_le (real_abs (s x n)) (g n))) &
  1.7183 -   summable g -->
  1.7184 -   (EX f::hollight.real => hollight.real.
  1.7185 -       ALL e::hollight.real.
  1.7186 -          real_lt (real_of_num 0) e -->
  1.7187 -          (EX (N::nat) d::hollight.real.
  1.7188 -              real_lt (real_of_num 0) d &
  1.7189 -              (ALL (x::hollight.real) n::nat.
  1.7190 -                  real_lt (real_abs (real_sub x x0)) d & >= n N -->
  1.7191 -                  real_lt (real_abs (real_sub (psum (0, n) (s x)) (f x)))
  1.7192 -                   e)))"
  1.7193 -  by (import hollight SER_COMPARA_UNIFORM_WEAK)
  1.7194 -
  1.7195 -lemma POWDIFF_LEMMA: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.7196 -   psum (0, Suc n)
  1.7197 -    (%p::nat. real_mul (real_pow x p) (real_pow y (Suc n - p))) =
  1.7198 -   real_mul y
  1.7199 -    (psum (0, Suc n)
  1.7200 -      (%p::nat. real_mul (real_pow x p) (real_pow y (n - p))))"
  1.7201 -  by (import hollight POWDIFF_LEMMA)
  1.7202 -
  1.7203 -lemma POWDIFF: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.7204 -   real_sub (real_pow x (Suc n)) (real_pow y (Suc n)) =
  1.7205 -   real_mul (real_sub x y)
  1.7206 -    (psum (0, Suc n)
  1.7207 -      (%p::nat. real_mul (real_pow x p) (real_pow y (n - p))))"
  1.7208 -  by (import hollight POWDIFF)
  1.7209 -
  1.7210 -lemma POWREV: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.7211 -   psum (0, Suc n)
  1.7212 -    (%xa::nat. real_mul (real_pow x xa) (real_pow y (n - xa))) =
  1.7213 -   psum (0, Suc n)
  1.7214 -    (%xa::nat. real_mul (real_pow x (n - xa)) (real_pow y xa))"
  1.7215 -  by (import hollight POWREV)
  1.7216 -
  1.7217 -lemma POWSER_INSIDEA: "ALL (f::nat => hollight.real) (x::hollight.real) z::hollight.real.
  1.7218 -   summable (%n::nat. real_mul (f n) (real_pow x n)) &
  1.7219 -   real_lt (real_abs z) (real_abs x) -->
  1.7220 -   summable (%n::nat. real_mul (real_abs (f n)) (real_pow z n))"
  1.7221 -  by (import hollight POWSER_INSIDEA)
  1.7222 -
  1.7223 -lemma POWSER_INSIDE: "ALL (f::nat => hollight.real) (x::hollight.real) z::hollight.real.
  1.7224 -   summable (%n::nat. real_mul (f n) (real_pow x n)) &
  1.7225 -   real_lt (real_abs z) (real_abs x) -->
  1.7226 -   summable (%n::nat. real_mul (f n) (real_pow z n))"
  1.7227 -  by (import hollight POWSER_INSIDE)
  1.7228 -
  1.7229 -constdefs
  1.7230 -  diffs :: "(nat => hollight.real) => nat => hollight.real" 
  1.7231 -  "diffs ==
  1.7232 -%(u::nat => hollight.real) n::nat.
  1.7233 -   real_mul (real_of_num (Suc n)) (u (Suc n))"
  1.7234 -
  1.7235 -lemma DEF_diffs: "diffs =
  1.7236 -(%(u::nat => hollight.real) n::nat.
  1.7237 -    real_mul (real_of_num (Suc n)) (u (Suc n)))"
  1.7238 -  by (import hollight DEF_diffs)
  1.7239 -
  1.7240 -lemma DIFFS_NEG: "ALL c::nat => hollight.real.
  1.7241 -   diffs (%n::nat. real_neg (c n)) = (%x::nat. real_neg (diffs c x))"
  1.7242 -  by (import hollight DIFFS_NEG)
  1.7243 -
  1.7244 -lemma DIFFS_LEMMA: "ALL (n::nat) (c::nat => hollight.real) x::hollight.real.
  1.7245 -   psum (0, n) (%n::nat. real_mul (diffs c n) (real_pow x n)) =
  1.7246 -   real_add
  1.7247 -    (psum (0, n)
  1.7248 -      (%n::nat.
  1.7249 -          real_mul (real_of_num n)
  1.7250 -           (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0)))))
  1.7251 -    (real_mul (real_of_num n)
  1.7252 -      (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0))))"
  1.7253 -  by (import hollight DIFFS_LEMMA)
  1.7254 -
  1.7255 -lemma DIFFS_LEMMA2: "ALL (n::nat) (c::nat => hollight.real) x::hollight.real.
  1.7256 -   psum (0, n)
  1.7257 -    (%n::nat.
  1.7258 -        real_mul (real_of_num n)
  1.7259 -         (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0)))) =
  1.7260 -   real_sub (psum (0, n) (%n::nat. real_mul (diffs c n) (real_pow x n)))
  1.7261 -    (real_mul (real_of_num n)
  1.7262 -      (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0))))"
  1.7263 -  by (import hollight DIFFS_LEMMA2)
  1.7264 -
  1.7265 -lemma DIFFS_EQUIV: "ALL (c::nat => hollight.real) x::hollight.real.
  1.7266 -   summable (%n::nat. real_mul (diffs c n) (real_pow x n)) -->
  1.7267 -   sums
  1.7268 -    (%n::nat.
  1.7269 -        real_mul (real_of_num n)
  1.7270 -         (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0))))
  1.7271 -    (suminf (%n::nat. real_mul (diffs c n) (real_pow x n)))"
  1.7272 -  by (import hollight DIFFS_EQUIV)
  1.7273 -
  1.7274 -lemma TERMDIFF_LEMMA1: "ALL (m::nat) (z::hollight.real) h::hollight.real.
  1.7275 -   psum (0, m)
  1.7276 -    (%p::nat.
  1.7277 -        real_sub (real_mul (real_pow (real_add z h) (m - p)) (real_pow z p))
  1.7278 -         (real_pow z m)) =
  1.7279 -   psum (0, m)
  1.7280 -    (%p::nat.
  1.7281 -        real_mul (real_pow z p)
  1.7282 -         (real_sub (real_pow (real_add z h) (m - p)) (real_pow z (m - p))))"
  1.7283 -  by (import hollight TERMDIFF_LEMMA1)
  1.7284 -
  1.7285 -lemma TERMDIFF_LEMMA2: "ALL (z::hollight.real) h::hollight.real.
  1.7286 -   h ~= real_of_num 0 -->
  1.7287 -   real_sub
  1.7288 -    (real_div (real_sub (real_pow (real_add z h) (n::nat)) (real_pow z n))
  1.7289 -      h)
  1.7290 -    (real_mul (real_of_num n) (real_pow z (n - NUMERAL_BIT1 0))) =
  1.7291 -   real_mul h
  1.7292 -    (psum (0, n - NUMERAL_BIT1 0)
  1.7293 -      (%p::nat.
  1.7294 -          real_mul (real_pow z p)
  1.7295 -           (psum (0, n - NUMERAL_BIT1 0 - p)
  1.7296 -             (%q::nat.
  1.7297 -                 real_mul (real_pow (real_add z h) q)
  1.7298 -                  (real_pow z
  1.7299 -                    (n - NUMERAL_BIT0 (NUMERAL_BIT1 0) - p - q))))))"
  1.7300 -  by (import hollight TERMDIFF_LEMMA2)
  1.7301 -
  1.7302 -lemma TERMDIFF_LEMMA3: "ALL (z::hollight.real) (h::hollight.real) (n::nat) K::hollight.real.
  1.7303 -   h ~= real_of_num 0 &
  1.7304 -   real_le (real_abs z) K & real_le (real_abs (real_add z h)) K -->
  1.7305 -   real_le
  1.7306 -    (real_abs
  1.7307 -      (real_sub
  1.7308 -        (real_div (real_sub (real_pow (real_add z h) n) (real_pow z n)) h)
  1.7309 -        (real_mul (real_of_num n) (real_pow z (n - NUMERAL_BIT1 0)))))
  1.7310 -    (real_mul (real_of_num n)
  1.7311 -      (real_mul (real_of_num (n - NUMERAL_BIT1 0))
  1.7312 -        (real_mul (real_pow K (n - NUMERAL_BIT0 (NUMERAL_BIT1 0)))
  1.7313 -          (real_abs h))))"
  1.7314 -  by (import hollight TERMDIFF_LEMMA3)
  1.7315 -
  1.7316 -lemma TERMDIFF_LEMMA4: "ALL (f::hollight.real => hollight.real) (K::hollight.real) k::hollight.real.
  1.7317 -   real_lt (real_of_num 0) k &
  1.7318 -   (ALL h::hollight.real.
  1.7319 -       real_lt (real_of_num 0) (real_abs h) & real_lt (real_abs h) k -->
  1.7320 -       real_le (real_abs (f h)) (real_mul K (real_abs h))) -->
  1.7321 -   tends_real_real f (real_of_num 0) (real_of_num 0)"
  1.7322 -  by (import hollight TERMDIFF_LEMMA4)
  1.7323 -
  1.7324 -lemma TERMDIFF_LEMMA5: "ALL (f::nat => hollight.real) (g::hollight.real => nat => hollight.real)
  1.7325 -   k::hollight.real.
  1.7326 -   real_lt (real_of_num 0) k &
  1.7327 -   summable f &
  1.7328 -   (ALL h::hollight.real.
  1.7329 -       real_lt (real_of_num 0) (real_abs h) & real_lt (real_abs h) k -->
  1.7330 -       (ALL n::nat.
  1.7331 -           real_le (real_abs (g h n)) (real_mul (f n) (real_abs h)))) -->
  1.7332 -   tends_real_real (%h::hollight.real. suminf (g h)) (real_of_num 0)
  1.7333 -    (real_of_num 0)"
  1.7334 -  by (import hollight TERMDIFF_LEMMA5)
  1.7335 -
  1.7336 -lemma TERMDIFF: "ALL (c::nat => hollight.real) K::hollight.real.
  1.7337 -   summable (%n::nat. real_mul (c n) (real_pow K n)) &
  1.7338 -   summable (%n::nat. real_mul (diffs c n) (real_pow K n)) &
  1.7339 -   summable (%n::nat. real_mul (diffs (diffs c) n) (real_pow K n)) &
  1.7340 -   real_lt (real_abs (x::hollight.real)) (real_abs K) -->
  1.7341 -   diffl
  1.7342 -    (%x::hollight.real. suminf (%n::nat. real_mul (c n) (real_pow x n)))
  1.7343 -    (suminf (%n::nat. real_mul (diffs c n) (real_pow x n))) x"
  1.7344 -  by (import hollight TERMDIFF)
  1.7345 -
  1.7346 -lemma SEQ_NPOW: "ALL x::hollight.real.
  1.7347 -   real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) -->
  1.7348 -   tends_num_real (%n::nat. real_mul (real_of_num n) (real_pow x n))
  1.7349 -    (real_of_num 0)"
  1.7350 -  by (import hollight SEQ_NPOW)
  1.7351 -
  1.7352 -lemma TERMDIFF_CONVERGES: "ALL K::hollight.real.
  1.7353 -   (ALL x::hollight.real.
  1.7354 -       real_lt (real_abs x) K -->
  1.7355 -       summable
  1.7356 -        (%n::nat.
  1.7357 -            real_mul ((c::nat => hollight.real) n) (real_pow x n))) -->
  1.7358 -   (ALL x::hollight.real.
  1.7359 -       real_lt (real_abs x) K -->
  1.7360 -       summable (%n::nat. real_mul (diffs c n) (real_pow x n)))"
  1.7361 -  by (import hollight TERMDIFF_CONVERGES)
  1.7362 -
  1.7363 -lemma TERMDIFF_STRONG: "ALL (c::nat => hollight.real) (K::hollight.real) x::hollight.real.
  1.7364 -   summable (%n::nat. real_mul (c n) (real_pow K n)) &
  1.7365 -   real_lt (real_abs x) (real_abs K) -->
  1.7366 -   diffl
  1.7367 -    (%x::hollight.real. suminf (%n::nat. real_mul (c n) (real_pow x n)))
  1.7368 -    (suminf (%n::nat. real_mul (diffs c n) (real_pow x n))) x"
  1.7369 -  by (import hollight TERMDIFF_STRONG)
  1.7370 -
  1.7371 -lemma POWSER_0: "ALL a::nat => hollight.real.
  1.7372 -   sums (%n::nat. real_mul (a n) (real_pow (real_of_num 0) n)) (a 0)"
  1.7373 -  by (import hollight POWSER_0)
  1.7374 -
  1.7375 -lemma POWSER_LIMIT_0: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real)
  1.7376 -   s::hollight.real.
  1.7377 -   real_lt (real_of_num 0) s &
  1.7378 -   (ALL x::hollight.real.
  1.7379 -       real_lt (real_abs x) s -->
  1.7380 -       sums (%n::nat. real_mul (a n) (real_pow x n)) (f x)) -->
  1.7381 -   tends_real_real f (a 0) (real_of_num 0)"
  1.7382 -  by (import hollight POWSER_LIMIT_0)
  1.7383 -
  1.7384 -lemma POWSER_LIMIT_0_STRONG: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real)
  1.7385 -   s::hollight.real.
  1.7386 -   real_lt (real_of_num 0) s &
  1.7387 -   (ALL x::hollight.real.
  1.7388 -       real_lt (real_of_num 0) (real_abs x) & real_lt (real_abs x) s -->
  1.7389 -       sums (%n::nat. real_mul (a n) (real_pow x n)) (f x)) -->
  1.7390 -   tends_real_real f (a 0) (real_of_num 0)"
  1.7391 -  by (import hollight POWSER_LIMIT_0_STRONG)
  1.7392 -
  1.7393 -lemma POWSER_EQUAL_0: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real)
  1.7394 -   (b::nat => hollight.real) P::hollight.real => bool.
  1.7395 -   (ALL e::hollight.real.
  1.7396 -       real_lt (real_of_num 0) e -->
  1.7397 -       (EX x::hollight.real.
  1.7398 -           P x &
  1.7399 -           real_lt (real_of_num 0) (real_abs x) & real_lt (real_abs x) e)) &
  1.7400 -   (ALL x::hollight.real.
  1.7401 -       real_lt (real_of_num 0) (real_abs x) & P x -->
  1.7402 -       sums (%n::nat. real_mul (a n) (real_pow x n)) (f x) &
  1.7403 -       sums (%n::nat. real_mul (b n) (real_pow x n)) (f x)) -->
  1.7404 -   a 0 = b 0"
  1.7405 -  by (import hollight POWSER_EQUAL_0)
  1.7406 -
  1.7407 -lemma POWSER_EQUAL: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real)
  1.7408 -   (b::nat => hollight.real) P::hollight.real => bool.
  1.7409 -   (ALL e::hollight.real.
  1.7410 -       real_lt (real_of_num 0) e -->
  1.7411 -       (EX x::hollight.real.
  1.7412 -           P x &
  1.7413 -           real_lt (real_of_num 0) (real_abs x) & real_lt (real_abs x) e)) &
  1.7414 -   (ALL x::hollight.real.
  1.7415 -       P x -->
  1.7416 -       sums (%n::nat. real_mul (a n) (real_pow x n)) (f x) &
  1.7417 -       sums (%n::nat. real_mul (b n) (real_pow x n)) (f x)) -->
  1.7418 -   a = b"
  1.7419 -  by (import hollight POWSER_EQUAL)
  1.7420 -
  1.7421 -lemma MULT_DIV_2: "ALL n::nat.
  1.7422 -   DIV (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) =
  1.7423 -   n"
  1.7424 -  by (import hollight MULT_DIV_2)
  1.7425 -
  1.7426 -lemma EVEN_DIV2: "ALL n::nat.
  1.7427 -   ~ EVEN n -->
  1.7428 -   DIV (Suc n) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) =
  1.7429 -   Suc (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))"
  1.7430 -  by (import hollight EVEN_DIV2)
  1.7431 -
  1.7432 -lemma POW_ZERO: "ALL (n::nat) x::hollight.real.
  1.7433 -   real_pow x n = real_of_num 0 --> x = real_of_num 0"
  1.7434 -  by (import hollight POW_ZERO)
  1.7435 -
  1.7436 -lemma POW_ZERO_EQ: "ALL (n::nat) x::hollight.real.
  1.7437 -   (real_pow x (Suc n) = real_of_num 0) = (x = real_of_num 0)"
  1.7438 -  by (import hollight POW_ZERO_EQ)
  1.7439 -
  1.7440 -lemma POW_LT: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.7441 -   real_le (real_of_num 0) x & real_lt x y -->
  1.7442 -   real_lt (real_pow x (Suc n)) (real_pow y (Suc n))"
  1.7443 -  by (import hollight POW_LT)
  1.7444 -
  1.7445 -lemma POW_EQ: "ALL (n::nat) (x::hollight.real) y::hollight.real.
  1.7446 -   real_le (real_of_num 0) x &
  1.7447 -   real_le (real_of_num 0) y & real_pow x (Suc n) = real_pow y (Suc n) -->
  1.7448 -   x = y"
  1.7449 -  by (import hollight POW_EQ)
  1.7450 -
  1.7451 -constdefs
  1.7452 -  exp :: "hollight.real => hollight.real" 
  1.7453 -  "exp ==
  1.7454 -%u::hollight.real.
  1.7455 -   suminf
  1.7456 -    (%n::nat. real_mul (real_inv (real_of_num (FACT n))) (real_pow u n))"
  1.7457 -
  1.7458 -lemma DEF_exp: "exp =
  1.7459 -(%u::hollight.real.
  1.7460 -    suminf
  1.7461 -     (%n::nat. real_mul (real_inv (real_of_num (FACT n))) (real_pow u n)))"
  1.7462 -  by (import hollight DEF_exp)
  1.7463 -
  1.7464 -constdefs
  1.7465 -  sin :: "hollight.real => hollight.real" 
  1.7466 -  "sin ==
  1.7467 -%u::hollight.real.
  1.7468 -   suminf
  1.7469 -    (%n::nat.
  1.7470 -        real_mul
  1.7471 -         (COND (EVEN n) (real_of_num 0)
  1.7472 -           (real_div
  1.7473 -             (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.7474 -               (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.7475 -             (real_of_num (FACT n))))
  1.7476 -         (real_pow u n))"
  1.7477 -
  1.7478 -lemma DEF_sin: "sin =
  1.7479 -(%u::hollight.real.
  1.7480 -    suminf
  1.7481 -     (%n::nat.
  1.7482 -         real_mul
  1.7483 -          (COND (EVEN n) (real_of_num 0)
  1.7484 -            (real_div
  1.7485 -              (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.7486 -                (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.7487 -              (real_of_num (FACT n))))
  1.7488 -          (real_pow u n)))"
  1.7489 -  by (import hollight DEF_sin)
  1.7490 -
  1.7491 -constdefs
  1.7492 -  cos :: "hollight.real => hollight.real" 
  1.7493 -  "cos ==
  1.7494 -%u::hollight.real.
  1.7495 -   suminf
  1.7496 -    (%n::nat.
  1.7497 -        real_mul
  1.7498 -         (COND (EVEN n)
  1.7499 -           (real_div
  1.7500 -             (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.7501 -               (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.7502 -             (real_of_num (FACT n)))
  1.7503 -           (real_of_num 0))
  1.7504 -         (real_pow u n))"
  1.7505 -
  1.7506 -lemma DEF_cos: "cos =
  1.7507 -(%u::hollight.real.
  1.7508 -    suminf
  1.7509 -     (%n::nat.
  1.7510 -         real_mul
  1.7511 -          (COND (EVEN n)
  1.7512 -            (real_div
  1.7513 -              (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.7514 -                (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.7515 -              (real_of_num (FACT n)))
  1.7516 -            (real_of_num 0))
  1.7517 -          (real_pow u n)))"
  1.7518 -  by (import hollight DEF_cos)
  1.7519 -
  1.7520 -lemma REAL_EXP_CONVERGES: "ALL x::hollight.real.
  1.7521 -   sums (%n::nat. real_mul (real_inv (real_of_num (FACT n))) (real_pow x n))
  1.7522 -    (exp x)"
  1.7523 -  by (import hollight REAL_EXP_CONVERGES)
  1.7524 -
  1.7525 -lemma SIN_CONVERGES: "ALL x::hollight.real.
  1.7526 -   sums
  1.7527 -    (%n::nat.
  1.7528 -        real_mul
  1.7529 -         (COND (EVEN n) (real_of_num 0)
  1.7530 -           (real_div
  1.7531 -             (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.7532 -               (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.7533 -             (real_of_num (FACT n))))
  1.7534 -         (real_pow x n))
  1.7535 -    (sin x)"
  1.7536 -  by (import hollight SIN_CONVERGES)
  1.7537 -
  1.7538 -lemma COS_CONVERGES: "ALL x::hollight.real.
  1.7539 -   sums
  1.7540 -    (%n::nat.
  1.7541 -        real_mul
  1.7542 -         (COND (EVEN n)
  1.7543 -           (real_div
  1.7544 -             (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0)))
  1.7545 -               (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0))))
  1.7546 -             (real_of_num (FACT n)))
  1.7547 -           (real_of_num 0))
  1.7548 -         (real_pow x n))
  1.7549 -    (cos x)"
  1.7550 -  by (import hollight COS_CONVERGES)
  1.7551 -
  1.7552 -lemma REAL_EXP_FDIFF: "diffs (%n::nat. real_inv (real_of_num (FACT n))) =