changeset 17652 | b1ef33ebfa17 |
parent 17644 | bd59bfd4bf37 |
child 17915 | e38947f9ba5e |
17651:a6499b0c5a40 | 17652:b1ef33ebfa17 |
---|---|
94 |
94 |
95 lemma EXCLUDED_MIDDLE: "ALL t::bool. t | ~ t" |
95 lemma EXCLUDED_MIDDLE: "ALL t::bool. t | ~ t" |
96 by (import hollight EXCLUDED_MIDDLE) |
96 by (import hollight EXCLUDED_MIDDLE) |
97 |
97 |
98 constdefs |
98 constdefs |
99 COND :: "bool => 'A::type => 'A::type => 'A::type" |
99 COND :: "bool => 'A => 'A => 'A" |
100 "COND == |
100 "COND == |
101 %(t::bool) (t1::'A::type) t2::'A::type. |
101 %(t::bool) (t1::'A::type) t2::'A::type. |
102 SOME x::'A::type. (t = True --> x = t1) & (t = False --> x = t2)" |
102 SOME x::'A::type. (t = True --> x = t1) & (t = False --> x = t2)" |
103 |
103 |
104 lemma DEF_COND: "COND = |
104 lemma DEF_COND: "COND = |
172 b = |
172 b = |
173 (b & P x True | ~ b & P y False)" |
173 (b & P x True | ~ b & P y False)" |
174 by (import hollight th_cond) |
174 by (import hollight th_cond) |
175 |
175 |
176 constdefs |
176 constdefs |
177 LET_END :: "'A::type => 'A::type" |
177 LET_END :: "'A => 'A" |
178 "LET_END == %t::'A::type. t" |
178 "LET_END == %t::'A::type. t" |
179 |
179 |
180 lemma DEF_LET_END: "LET_END = (%t::'A::type. t)" |
180 lemma DEF_LET_END: "LET_END = (%t::'A::type. t)" |
181 by (import hollight DEF_LET_END) |
181 by (import hollight DEF_LET_END) |
182 |
182 |
183 constdefs |
183 constdefs |
184 GABS :: "('A::type => bool) => 'A::type" |
184 GABS :: "('A => bool) => 'A" |
185 "(op ==::(('A::type => bool) => 'A::type) |
185 "(op ==::(('A::type => bool) => 'A::type) |
186 => (('A::type => bool) => 'A::type) => prop) |
186 => (('A::type => bool) => 'A::type) => prop) |
187 (GABS::('A::type => bool) => 'A::type) |
187 (GABS::('A::type => bool) => 'A::type) |
188 (Eps::('A::type => bool) => 'A::type)" |
188 (Eps::('A::type => bool) => 'A::type)" |
189 |
189 |
192 (GABS::('A::type => bool) => 'A::type) |
192 (GABS::('A::type => bool) => 'A::type) |
193 (Eps::('A::type => bool) => 'A::type)" |
193 (Eps::('A::type => bool) => 'A::type)" |
194 by (import hollight DEF_GABS) |
194 by (import hollight DEF_GABS) |
195 |
195 |
196 constdefs |
196 constdefs |
197 GEQ :: "'A::type => 'A::type => bool" |
197 GEQ :: "'A => 'A => bool" |
198 "(op ==::('A::type => 'A::type => bool) |
198 "(op ==::('A::type => 'A::type => bool) |
199 => ('A::type => 'A::type => bool) => prop) |
199 => ('A::type => 'A::type => bool) => prop) |
200 (GEQ::'A::type => 'A::type => bool) (op =::'A::type => 'A::type => bool)" |
200 (GEQ::'A::type => 'A::type => bool) (op =::'A::type => 'A::type => bool)" |
201 |
201 |
202 lemma DEF_GEQ: "(op =::('A::type => 'A::type => bool) |
202 lemma DEF_GEQ: "(op =::('A::type => 'A::type => bool) |
207 lemma PAIR_EXISTS_THM: "EX (x::'A::type => 'B::type => bool) (a::'A::type) b::'B::type. |
207 lemma PAIR_EXISTS_THM: "EX (x::'A::type => 'B::type => bool) (a::'A::type) b::'B::type. |
208 x = Pair_Rep a b" |
208 x = Pair_Rep a b" |
209 by (import hollight PAIR_EXISTS_THM) |
209 by (import hollight PAIR_EXISTS_THM) |
210 |
210 |
211 constdefs |
211 constdefs |
212 CURRY :: "('A::type * 'B::type => 'C::type) => 'A::type => 'B::type => 'C::type" |
212 CURRY :: "('A * 'B => 'C) => 'A => 'B => 'C" |
213 "CURRY == |
213 "CURRY == |
214 %(u::'A::type * 'B::type => 'C::type) (ua::'A::type) ub::'B::type. |
214 %(u::'A::type * 'B::type => 'C::type) (ua::'A::type) ub::'B::type. |
215 u (ua, ub)" |
215 u (ua, ub)" |
216 |
216 |
217 lemma DEF_CURRY: "CURRY = |
217 lemma DEF_CURRY: "CURRY = |
218 (%(u::'A::type * 'B::type => 'C::type) (ua::'A::type) ub::'B::type. |
218 (%(u::'A::type * 'B::type => 'C::type) (ua::'A::type) ub::'B::type. |
219 u (ua, ub))" |
219 u (ua, ub))" |
220 by (import hollight DEF_CURRY) |
220 by (import hollight DEF_CURRY) |
221 |
221 |
222 constdefs |
222 constdefs |
223 UNCURRY :: "('A::type => 'B::type => 'C::type) => 'A::type * 'B::type => 'C::type" |
223 UNCURRY :: "('A => 'B => 'C) => 'A * 'B => 'C" |
224 "UNCURRY == |
224 "UNCURRY == |
225 %(u::'A::type => 'B::type => 'C::type) ua::'A::type * 'B::type. |
225 %(u::'A::type => 'B::type => 'C::type) ua::'A::type * 'B::type. |
226 u (fst ua) (snd ua)" |
226 u (fst ua) (snd ua)" |
227 |
227 |
228 lemma DEF_UNCURRY: "UNCURRY = |
228 lemma DEF_UNCURRY: "UNCURRY = |
229 (%(u::'A::type => 'B::type => 'C::type) ua::'A::type * 'B::type. |
229 (%(u::'A::type => 'B::type => 'C::type) ua::'A::type * 'B::type. |
230 u (fst ua) (snd ua))" |
230 u (fst ua) (snd ua))" |
231 by (import hollight DEF_UNCURRY) |
231 by (import hollight DEF_UNCURRY) |
232 |
232 |
233 constdefs |
233 constdefs |
234 PASSOC :: "(('A::type * 'B::type) * 'C::type => 'D::type) |
234 PASSOC :: "(('A * 'B) * 'C => 'D) => 'A * 'B * 'C => 'D" |
235 => 'A::type * 'B::type * 'C::type => 'D::type" |
|
236 "PASSOC == |
235 "PASSOC == |
237 %(u::('A::type * 'B::type) * 'C::type => 'D::type) |
236 %(u::('A::type * 'B::type) * 'C::type => 'D::type) |
238 ua::'A::type * 'B::type * 'C::type. |
237 ua::'A::type * 'B::type * 'C::type. |
239 u ((fst ua, fst (snd ua)), snd (snd ua))" |
238 u ((fst ua, fst (snd ua)), snd (snd ua))" |
240 |
239 |
243 ua::'A::type * 'B::type * 'C::type. |
242 ua::'A::type * 'B::type * 'C::type. |
244 u ((fst ua, fst (snd ua)), snd (snd ua)))" |
243 u ((fst ua, fst (snd ua)), snd (snd ua)))" |
245 by (import hollight DEF_PASSOC) |
244 by (import hollight DEF_PASSOC) |
246 |
245 |
247 lemma num_Axiom: "ALL (e::'A::type) f::'A::type => nat => 'A::type. |
246 lemma num_Axiom: "ALL (e::'A::type) f::'A::type => nat => 'A::type. |
248 EX! fn::nat => 'A::type. |
247 EX! fn::nat => 'A::type. fn 0 = e & (ALL n::nat. fn (Suc n) = f (fn n) n)" |
249 fn (0::nat) = e & (ALL n::nat. fn (Suc n) = f (fn n) n)" |
|
250 by (import hollight num_Axiom) |
248 by (import hollight num_Axiom) |
251 |
249 |
252 lemma ADD_CLAUSES: "(ALL x::nat. (0::nat) + x = x) & |
250 lemma ADD_CLAUSES: "(ALL x::nat. 0 + x = x) & |
253 (ALL x::nat. x + (0::nat) = x) & |
251 (ALL x::nat. x + 0 = x) & |
254 (ALL (x::nat) xa::nat. Suc x + xa = Suc (x + xa)) & |
252 (ALL (x::nat) xa::nat. Suc x + xa = Suc (x + xa)) & |
255 (ALL (x::nat) xa::nat. x + Suc xa = Suc (x + xa))" |
253 (ALL (x::nat) xa::nat. x + Suc xa = Suc (x + xa))" |
256 by (import hollight ADD_CLAUSES) |
254 by (import hollight ADD_CLAUSES) |
257 |
255 |
258 lemma ADD_AC: "(m::nat) + (n::nat) = n + m & |
256 lemma ADD_AC: "(m::nat) + (n::nat) = n + m & |
259 m + n + (p::nat) = m + (n + p) & m + (n + p) = n + (m + p)" |
257 m + n + (p::nat) = m + (n + p) & m + (n + p) = n + (m + p)" |
260 by (import hollight ADD_AC) |
258 by (import hollight ADD_AC) |
261 |
259 |
262 lemma EQ_ADD_LCANCEL_0: "ALL (m::nat) n::nat. (m + n = m) = (n = (0::nat))" |
260 lemma EQ_ADD_LCANCEL_0: "ALL (m::nat) n::nat. (m + n = m) = (n = 0)" |
263 by (import hollight EQ_ADD_LCANCEL_0) |
261 by (import hollight EQ_ADD_LCANCEL_0) |
264 |
262 |
265 lemma EQ_ADD_RCANCEL_0: "ALL (x::nat) xa::nat. (x + xa = xa) = (x = (0::nat))" |
263 lemma EQ_ADD_RCANCEL_0: "ALL (x::nat) xa::nat. (x + xa = xa) = (x = 0)" |
266 by (import hollight EQ_ADD_RCANCEL_0) |
264 by (import hollight EQ_ADD_RCANCEL_0) |
267 |
265 |
268 lemma ONE: "NUMERAL_BIT1 (0::nat) = Suc (0::nat)" |
266 lemma ONE: "NUMERAL_BIT1 0 = Suc 0" |
269 by (import hollight ONE) |
267 by (import hollight ONE) |
270 |
268 |
271 lemma TWO: "NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) = Suc (NUMERAL_BIT1 (0::nat))" |
269 lemma TWO: "NUMERAL_BIT0 (NUMERAL_BIT1 0) = Suc (NUMERAL_BIT1 0)" |
272 by (import hollight TWO) |
270 by (import hollight TWO) |
273 |
271 |
274 lemma ADD1: "ALL x::nat. Suc x = x + NUMERAL_BIT1 (0::nat)" |
272 lemma ADD1: "ALL x::nat. Suc x = x + NUMERAL_BIT1 0" |
275 by (import hollight ADD1) |
273 by (import hollight ADD1) |
276 |
274 |
277 lemma MULT_CLAUSES: "(ALL x::nat. (0::nat) * x = (0::nat)) & |
275 lemma MULT_CLAUSES: "(ALL x::nat. 0 * x = 0) & |
278 (ALL x::nat. x * (0::nat) = (0::nat)) & |
276 (ALL x::nat. x * 0 = 0) & |
279 (ALL x::nat. NUMERAL_BIT1 (0::nat) * x = x) & |
277 (ALL x::nat. NUMERAL_BIT1 0 * x = x) & |
280 (ALL x::nat. x * NUMERAL_BIT1 (0::nat) = x) & |
278 (ALL x::nat. x * NUMERAL_BIT1 0 = x) & |
281 (ALL (x::nat) xa::nat. Suc x * xa = x * xa + xa) & |
279 (ALL (x::nat) xa::nat. Suc x * xa = x * xa + xa) & |
282 (ALL (x::nat) xa::nat. x * Suc xa = x + x * xa)" |
280 (ALL (x::nat) xa::nat. x * Suc xa = x + x * xa)" |
283 by (import hollight MULT_CLAUSES) |
281 by (import hollight MULT_CLAUSES) |
284 |
282 |
285 lemma MULT_AC: "(m::nat) * (n::nat) = n * m & |
283 lemma MULT_AC: "(m::nat) * (n::nat) = n * m & |
286 m * n * (p::nat) = m * (n * p) & m * (n * p) = n * (m * p)" |
284 m * n * (p::nat) = m * (n * p) & m * (n * p) = n * (m * p)" |
287 by (import hollight MULT_AC) |
285 by (import hollight MULT_AC) |
288 |
286 |
289 lemma MULT_2: "ALL n::nat. NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n = n + n" |
287 lemma MULT_2: "ALL n::nat. NUMERAL_BIT0 (NUMERAL_BIT1 0) * n = n + n" |
290 by (import hollight MULT_2) |
288 by (import hollight MULT_2) |
291 |
289 |
292 lemma MULT_EQ_1: "ALL (m::nat) n::nat. |
290 lemma MULT_EQ_1: "ALL (m::nat) n::nat. |
293 (m * n = NUMERAL_BIT1 (0::nat)) = |
291 (m * n = NUMERAL_BIT1 0) = (m = NUMERAL_BIT1 0 & n = NUMERAL_BIT1 0)" |
294 (m = NUMERAL_BIT1 (0::nat) & n = NUMERAL_BIT1 (0::nat))" |
|
295 by (import hollight MULT_EQ_1) |
292 by (import hollight MULT_EQ_1) |
296 |
293 |
297 constdefs |
294 constdefs |
298 EXP :: "nat => nat => nat" |
295 EXP :: "nat => nat => nat" |
299 "EXP == |
296 "EXP == |
300 SOME EXP::nat => nat => nat. |
297 SOME EXP::nat => nat => nat. |
301 (ALL m::nat. EXP m (0::nat) = NUMERAL_BIT1 (0::nat)) & |
298 (ALL m::nat. EXP m 0 = NUMERAL_BIT1 0) & |
302 (ALL (m::nat) n::nat. EXP m (Suc n) = m * EXP m n)" |
299 (ALL (m::nat) n::nat. EXP m (Suc n) = m * EXP m n)" |
303 |
300 |
304 lemma DEF_EXP: "EXP = |
301 lemma DEF_EXP: "EXP = |
305 (SOME EXP::nat => nat => nat. |
302 (SOME EXP::nat => nat => nat. |
306 (ALL m::nat. EXP m (0::nat) = NUMERAL_BIT1 (0::nat)) & |
303 (ALL m::nat. EXP m 0 = NUMERAL_BIT1 0) & |
307 (ALL (m::nat) n::nat. EXP m (Suc n) = m * EXP m n))" |
304 (ALL (m::nat) n::nat. EXP m (Suc n) = m * EXP m n))" |
308 by (import hollight DEF_EXP) |
305 by (import hollight DEF_EXP) |
309 |
306 |
310 lemma EXP_EQ_0: "ALL (m::nat) n::nat. (EXP m n = (0::nat)) = (m = (0::nat) & n ~= (0::nat))" |
307 lemma EXP_EQ_0: "ALL (m::nat) n::nat. (EXP m n = 0) = (m = 0 & n ~= 0)" |
311 by (import hollight EXP_EQ_0) |
308 by (import hollight EXP_EQ_0) |
312 |
309 |
313 lemma EXP_ADD: "ALL (m::nat) (n::nat) p::nat. EXP m (n + p) = EXP m n * EXP m p" |
310 lemma EXP_ADD: "ALL (m::nat) (n::nat) p::nat. EXP m (n + p) = EXP m n * EXP m p" |
314 by (import hollight EXP_ADD) |
311 by (import hollight EXP_ADD) |
315 |
312 |
316 lemma EXP_ONE: "ALL n::nat. EXP (NUMERAL_BIT1 (0::nat)) n = NUMERAL_BIT1 (0::nat)" |
313 lemma EXP_ONE: "ALL n::nat. EXP (NUMERAL_BIT1 0) n = NUMERAL_BIT1 0" |
317 by (import hollight EXP_ONE) |
314 by (import hollight EXP_ONE) |
318 |
315 |
319 lemma EXP_1: "ALL x::nat. EXP x (NUMERAL_BIT1 (0::nat)) = x" |
316 lemma EXP_1: "ALL x::nat. EXP x (NUMERAL_BIT1 0) = x" |
320 by (import hollight EXP_1) |
317 by (import hollight EXP_1) |
321 |
318 |
322 lemma EXP_2: "ALL x::nat. EXP x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = x * x" |
319 lemma EXP_2: "ALL x::nat. EXP x (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = x * x" |
323 by (import hollight EXP_2) |
320 by (import hollight EXP_2) |
324 |
321 |
325 lemma MULT_EXP: "ALL (p::nat) (m::nat) n::nat. EXP (m * n) p = EXP m p * EXP n p" |
322 lemma MULT_EXP: "ALL (p::nat) (m::nat) n::nat. EXP (m * n) p = EXP m p * EXP n p" |
326 by (import hollight MULT_EXP) |
323 by (import hollight MULT_EXP) |
327 |
324 |
332 "<=" :: "nat => nat => bool" ("<=") |
329 "<=" :: "nat => nat => bool" ("<=") |
333 |
330 |
334 defs |
331 defs |
335 "<=_def": "<= == |
332 "<=_def": "<= == |
336 SOME u::nat => nat => bool. |
333 SOME u::nat => nat => bool. |
337 (ALL m::nat. u m (0::nat) = (m = (0::nat))) & |
334 (ALL m::nat. u m 0 = (m = 0)) & |
338 (ALL (m::nat) n::nat. u m (Suc n) = (m = Suc n | u m n))" |
335 (ALL (m::nat) n::nat. u m (Suc n) = (m = Suc n | u m n))" |
339 |
336 |
340 lemma DEF__lessthan__equal_: "<= = |
337 lemma DEF__lessthan__equal_: "<= = |
341 (SOME u::nat => nat => bool. |
338 (SOME u::nat => nat => bool. |
342 (ALL m::nat. u m (0::nat) = (m = (0::nat))) & |
339 (ALL m::nat. u m 0 = (m = 0)) & |
343 (ALL (m::nat) n::nat. u m (Suc n) = (m = Suc n | u m n)))" |
340 (ALL (m::nat) n::nat. u m (Suc n) = (m = Suc n | u m n)))" |
344 by (import hollight DEF__lessthan__equal_) |
341 by (import hollight DEF__lessthan__equal_) |
345 |
342 |
346 consts |
343 consts |
347 "<" :: "nat => nat => bool" ("<") |
344 "<" :: "nat => nat => bool" ("<") |
348 |
345 |
349 defs |
346 defs |
350 "<_def": "< == |
347 "<_def": "< == |
351 SOME u::nat => nat => bool. |
348 SOME u::nat => nat => bool. |
352 (ALL m::nat. u m (0::nat) = False) & |
349 (ALL m::nat. u m 0 = False) & |
353 (ALL (m::nat) n::nat. u m (Suc n) = (m = n | u m n))" |
350 (ALL (m::nat) n::nat. u m (Suc n) = (m = n | u m n))" |
354 |
351 |
355 lemma DEF__lessthan_: "< = |
352 lemma DEF__lessthan_: "< = |
356 (SOME u::nat => nat => bool. |
353 (SOME u::nat => nat => bool. |
357 (ALL m::nat. u m (0::nat) = False) & |
354 (ALL m::nat. u m 0 = False) & |
358 (ALL (m::nat) n::nat. u m (Suc n) = (m = n | u m n)))" |
355 (ALL (m::nat) n::nat. u m (Suc n) = (m = n | u m n)))" |
359 by (import hollight DEF__lessthan_) |
356 by (import hollight DEF__lessthan_) |
360 |
357 |
361 consts |
358 consts |
362 ">=" :: "nat => nat => bool" (">=") |
359 ">=" :: "nat => nat => bool" (">=") |
386 by (import hollight LE_SUC) |
383 by (import hollight LE_SUC) |
387 |
384 |
388 lemma LT_SUC: "ALL (x::nat) xa::nat. < (Suc x) (Suc xa) = < x xa" |
385 lemma LT_SUC: "ALL (x::nat) xa::nat. < (Suc x) (Suc xa) = < x xa" |
389 by (import hollight LT_SUC) |
386 by (import hollight LT_SUC) |
390 |
387 |
391 lemma LE_0: "All (<= (0::nat))" |
388 lemma LE_0: "All (<= 0)" |
392 by (import hollight LE_0) |
389 by (import hollight LE_0) |
393 |
390 |
394 lemma LT_0: "ALL x::nat. < (0::nat) (Suc x)" |
391 lemma LT_0: "ALL x::nat. < 0 (Suc x)" |
395 by (import hollight LT_0) |
392 by (import hollight LT_0) |
396 |
393 |
397 lemma LE_REFL: "ALL n::nat. <= n n" |
394 lemma LE_REFL: "ALL n::nat. <= n n" |
398 by (import hollight LE_REFL) |
395 by (import hollight LE_REFL) |
399 |
396 |
434 by (import hollight LET_CASES) |
431 by (import hollight LET_CASES) |
435 |
432 |
436 lemma LTE_CASES: "ALL (x::nat) xa::nat. < x xa | <= xa x" |
433 lemma LTE_CASES: "ALL (x::nat) xa::nat. < x xa | <= xa x" |
437 by (import hollight LTE_CASES) |
434 by (import hollight LTE_CASES) |
438 |
435 |
439 lemma LT_NZ: "ALL n::nat. < (0::nat) n = (n ~= (0::nat))" |
436 lemma LT_NZ: "ALL n::nat. < 0 n = (n ~= 0)" |
440 by (import hollight LT_NZ) |
437 by (import hollight LT_NZ) |
441 |
438 |
442 lemma LE_LT: "ALL (m::nat) n::nat. <= m n = (< m n | m = n)" |
439 lemma LE_LT: "ALL (m::nat) n::nat. <= m n = (< m n | m = n)" |
443 by (import hollight LE_LT) |
440 by (import hollight LE_LT) |
444 |
441 |
467 by (import hollight LE_ADD) |
464 by (import hollight LE_ADD) |
468 |
465 |
469 lemma LE_ADDR: "ALL (x::nat) xa::nat. <= xa (x + xa)" |
466 lemma LE_ADDR: "ALL (x::nat) xa::nat. <= xa (x + xa)" |
470 by (import hollight LE_ADDR) |
467 by (import hollight LE_ADDR) |
471 |
468 |
472 lemma LT_ADD: "ALL (m::nat) n::nat. < m (m + n) = < (0::nat) n" |
469 lemma LT_ADD: "ALL (m::nat) n::nat. < m (m + n) = < 0 n" |
473 by (import hollight LT_ADD) |
470 by (import hollight LT_ADD) |
474 |
471 |
475 lemma LT_ADDR: "ALL (x::nat) xa::nat. < xa (x + xa) = < (0::nat) x" |
472 lemma LT_ADDR: "ALL (x::nat) xa::nat. < xa (x + xa) = < 0 x" |
476 by (import hollight LT_ADDR) |
473 by (import hollight LT_ADDR) |
477 |
474 |
478 lemma LE_ADD_LCANCEL: "ALL (x::nat) (xa::nat) xb::nat. <= (x + xa) (x + xb) = <= xa xb" |
475 lemma LE_ADD_LCANCEL: "ALL (x::nat) (xa::nat) xb::nat. <= (x + xa) (x + xb) = <= xa xb" |
479 by (import hollight LE_ADD_LCANCEL) |
476 by (import hollight LE_ADD_LCANCEL) |
480 |
477 |
499 by (import hollight LTE_ADD2) |
496 by (import hollight LTE_ADD2) |
500 |
497 |
501 lemma LT_ADD2: "ALL (m::nat) (n::nat) (p::nat) q::nat. < m p & < n q --> < (m + n) (p + q)" |
498 lemma LT_ADD2: "ALL (m::nat) (n::nat) (p::nat) q::nat. < m p & < n q --> < (m + n) (p + q)" |
502 by (import hollight LT_ADD2) |
499 by (import hollight LT_ADD2) |
503 |
500 |
504 lemma LT_MULT: "ALL (m::nat) n::nat. < (0::nat) (m * n) = (< (0::nat) m & < (0::nat) n)" |
501 lemma LT_MULT: "ALL (m::nat) n::nat. < 0 (m * n) = (< 0 m & < 0 n)" |
505 by (import hollight LT_MULT) |
502 by (import hollight LT_MULT) |
506 |
503 |
507 lemma LE_MULT2: "ALL (m::nat) (n::nat) (p::nat) q::nat. |
504 lemma LE_MULT2: "ALL (m::nat) (n::nat) (p::nat) q::nat. |
508 <= m n & <= p q --> <= (m * p) (n * q)" |
505 <= m n & <= p q --> <= (m * p) (n * q)" |
509 by (import hollight LE_MULT2) |
506 by (import hollight LE_MULT2) |
510 |
507 |
511 lemma LT_LMULT: "ALL (m::nat) (n::nat) p::nat. m ~= (0::nat) & < n p --> < (m * n) (m * p)" |
508 lemma LT_LMULT: "ALL (m::nat) (n::nat) p::nat. m ~= 0 & < n p --> < (m * n) (m * p)" |
512 by (import hollight LT_LMULT) |
509 by (import hollight LT_LMULT) |
513 |
510 |
514 lemma LE_MULT_LCANCEL: "ALL (m::nat) (n::nat) p::nat. <= (m * n) (m * p) = (m = (0::nat) | <= n p)" |
511 lemma LE_MULT_LCANCEL: "ALL (m::nat) (n::nat) p::nat. <= (m * n) (m * p) = (m = 0 | <= n p)" |
515 by (import hollight LE_MULT_LCANCEL) |
512 by (import hollight LE_MULT_LCANCEL) |
516 |
513 |
517 lemma LE_MULT_RCANCEL: "ALL (x::nat) (xa::nat) xb::nat. |
514 lemma LE_MULT_RCANCEL: "ALL (x::nat) (xa::nat) xb::nat. <= (x * xb) (xa * xb) = (<= x xa | xb = 0)" |
518 <= (x * xb) (xa * xb) = (<= x xa | xb = (0::nat))" |
|
519 by (import hollight LE_MULT_RCANCEL) |
515 by (import hollight LE_MULT_RCANCEL) |
520 |
516 |
521 lemma LT_MULT_LCANCEL: "ALL (m::nat) (n::nat) p::nat. < (m * n) (m * p) = (m ~= (0::nat) & < n p)" |
517 lemma LT_MULT_LCANCEL: "ALL (m::nat) (n::nat) p::nat. < (m * n) (m * p) = (m ~= 0 & < n p)" |
522 by (import hollight LT_MULT_LCANCEL) |
518 by (import hollight LT_MULT_LCANCEL) |
523 |
519 |
524 lemma LT_MULT_RCANCEL: "ALL (x::nat) (xa::nat) xb::nat. |
520 lemma LT_MULT_RCANCEL: "ALL (x::nat) (xa::nat) xb::nat. < (x * xb) (xa * xb) = (< x xa & xb ~= 0)" |
525 < (x * xb) (xa * xb) = (< x xa & xb ~= (0::nat))" |
|
526 by (import hollight LT_MULT_RCANCEL) |
521 by (import hollight LT_MULT_RCANCEL) |
527 |
522 |
528 lemma LT_MULT2: "ALL (m::nat) (n::nat) (p::nat) q::nat. < m n & < p q --> < (m * p) (n * q)" |
523 lemma LT_MULT2: "ALL (m::nat) (n::nat) (p::nat) q::nat. < m n & < p q --> < (m * p) (n * q)" |
529 by (import hollight LT_MULT2) |
524 by (import hollight LT_MULT2) |
530 |
525 |
556 |
551 |
557 constdefs |
552 constdefs |
558 EVEN :: "nat => bool" |
553 EVEN :: "nat => bool" |
559 "EVEN == |
554 "EVEN == |
560 SOME EVEN::nat => bool. |
555 SOME EVEN::nat => bool. |
561 EVEN (0::nat) = True & (ALL n::nat. EVEN (Suc n) = (~ EVEN n))" |
556 EVEN 0 = True & (ALL n::nat. EVEN (Suc n) = (~ EVEN n))" |
562 |
557 |
563 lemma DEF_EVEN: "EVEN = |
558 lemma DEF_EVEN: "EVEN = |
564 (SOME EVEN::nat => bool. |
559 (SOME EVEN::nat => bool. |
565 EVEN (0::nat) = True & (ALL n::nat. EVEN (Suc n) = (~ EVEN n)))" |
560 EVEN 0 = True & (ALL n::nat. EVEN (Suc n) = (~ EVEN n)))" |
566 by (import hollight DEF_EVEN) |
561 by (import hollight DEF_EVEN) |
567 |
562 |
568 constdefs |
563 constdefs |
569 ODD :: "nat => bool" |
564 ODD :: "nat => bool" |
570 "ODD == |
565 "ODD == |
571 SOME ODD::nat => bool. |
566 SOME ODD::nat => bool. ODD 0 = False & (ALL n::nat. ODD (Suc n) = (~ ODD n))" |
572 ODD (0::nat) = False & (ALL n::nat. ODD (Suc n) = (~ ODD n))" |
|
573 |
567 |
574 lemma DEF_ODD: "ODD = |
568 lemma DEF_ODD: "ODD = |
575 (SOME ODD::nat => bool. |
569 (SOME ODD::nat => bool. |
576 ODD (0::nat) = False & (ALL n::nat. ODD (Suc n) = (~ ODD n)))" |
570 ODD 0 = False & (ALL n::nat. ODD (Suc n) = (~ ODD n)))" |
577 by (import hollight DEF_ODD) |
571 by (import hollight DEF_ODD) |
578 |
572 |
579 lemma NOT_EVEN: "ALL n::nat. (~ EVEN n) = ODD n" |
573 lemma NOT_EVEN: "ALL n::nat. (~ EVEN n) = ODD n" |
580 by (import hollight NOT_EVEN) |
574 by (import hollight NOT_EVEN) |
581 |
575 |
592 by (import hollight EVEN_ADD) |
586 by (import hollight EVEN_ADD) |
593 |
587 |
594 lemma EVEN_MULT: "ALL (m::nat) n::nat. EVEN (m * n) = (EVEN m | EVEN n)" |
588 lemma EVEN_MULT: "ALL (m::nat) n::nat. EVEN (m * n) = (EVEN m | EVEN n)" |
595 by (import hollight EVEN_MULT) |
589 by (import hollight EVEN_MULT) |
596 |
590 |
597 lemma EVEN_EXP: "ALL (m::nat) n::nat. EVEN (EXP m n) = (EVEN m & n ~= (0::nat))" |
591 lemma EVEN_EXP: "ALL (m::nat) n::nat. EVEN (EXP m n) = (EVEN m & n ~= 0)" |
598 by (import hollight EVEN_EXP) |
592 by (import hollight EVEN_EXP) |
599 |
593 |
600 lemma ODD_ADD: "ALL (m::nat) n::nat. ODD (m + n) = (ODD m ~= ODD n)" |
594 lemma ODD_ADD: "ALL (m::nat) n::nat. ODD (m + n) = (ODD m ~= ODD n)" |
601 by (import hollight ODD_ADD) |
595 by (import hollight ODD_ADD) |
602 |
596 |
603 lemma ODD_MULT: "ALL (m::nat) n::nat. ODD (m * n) = (ODD m & ODD n)" |
597 lemma ODD_MULT: "ALL (m::nat) n::nat. ODD (m * n) = (ODD m & ODD n)" |
604 by (import hollight ODD_MULT) |
598 by (import hollight ODD_MULT) |
605 |
599 |
606 lemma ODD_EXP: "ALL (m::nat) n::nat. ODD (EXP m n) = (ODD m | n = (0::nat))" |
600 lemma ODD_EXP: "ALL (m::nat) n::nat. ODD (EXP m n) = (ODD m | n = 0)" |
607 by (import hollight ODD_EXP) |
601 by (import hollight ODD_EXP) |
608 |
602 |
609 lemma EVEN_DOUBLE: "ALL n::nat. EVEN (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n)" |
603 lemma EVEN_DOUBLE: "ALL n::nat. EVEN (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n)" |
610 by (import hollight EVEN_DOUBLE) |
604 by (import hollight EVEN_DOUBLE) |
611 |
605 |
612 lemma ODD_DOUBLE: "ALL x::nat. ODD (Suc (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * x))" |
606 lemma ODD_DOUBLE: "ALL x::nat. ODD (Suc (NUMERAL_BIT0 (NUMERAL_BIT1 0) * x))" |
613 by (import hollight ODD_DOUBLE) |
607 by (import hollight ODD_DOUBLE) |
614 |
608 |
615 lemma EVEN_EXISTS_LEMMA: "ALL n::nat. |
609 lemma EVEN_EXISTS_LEMMA: "ALL n::nat. |
616 (EVEN n --> (EX m::nat. n = NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * m)) & |
610 (EVEN n --> (EX m::nat. n = NUMERAL_BIT0 (NUMERAL_BIT1 0) * m)) & |
617 (~ EVEN n --> |
611 (~ EVEN n --> (EX m::nat. n = Suc (NUMERAL_BIT0 (NUMERAL_BIT1 0) * m)))" |
618 (EX m::nat. n = Suc (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * m)))" |
|
619 by (import hollight EVEN_EXISTS_LEMMA) |
612 by (import hollight EVEN_EXISTS_LEMMA) |
620 |
613 |
621 lemma EVEN_EXISTS: "ALL n::nat. |
614 lemma EVEN_EXISTS: "ALL n::nat. EVEN n = (EX m::nat. n = NUMERAL_BIT0 (NUMERAL_BIT1 0) * m)" |
622 EVEN n = (EX m::nat. n = NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * m)" |
|
623 by (import hollight EVEN_EXISTS) |
615 by (import hollight EVEN_EXISTS) |
624 |
616 |
625 lemma ODD_EXISTS: "ALL n::nat. |
617 lemma ODD_EXISTS: "ALL n::nat. ODD n = (EX m::nat. n = Suc (NUMERAL_BIT0 (NUMERAL_BIT1 0) * m))" |
626 ODD n = (EX m::nat. n = Suc (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * m))" |
|
627 by (import hollight ODD_EXISTS) |
618 by (import hollight ODD_EXISTS) |
628 |
619 |
629 lemma EVEN_ODD_DECOMPOSITION: "ALL n::nat. |
620 lemma EVEN_ODD_DECOMPOSITION: "ALL n::nat. |
630 (EX (k::nat) m::nat. |
621 (EX (k::nat) m::nat. |
631 ODD m & n = EXP (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) k * m) = |
622 ODD m & n = EXP (NUMERAL_BIT0 (NUMERAL_BIT1 0)) k * m) = |
632 (n ~= (0::nat))" |
623 (n ~= 0)" |
633 by (import hollight EVEN_ODD_DECOMPOSITION) |
624 by (import hollight EVEN_ODD_DECOMPOSITION) |
634 |
625 |
635 lemma SUB_0: "ALL x::nat. (0::nat) - x = (0::nat) & x - (0::nat) = x" |
626 lemma SUB_0: "ALL x::nat. 0 - x = 0 & x - 0 = x" |
636 by (import hollight SUB_0) |
627 by (import hollight SUB_0) |
637 |
628 |
638 lemma SUB_PRESUC: "ALL (m::nat) n::nat. Pred (Suc m - n) = m - n" |
629 lemma SUB_PRESUC: "ALL (m::nat) n::nat. Pred (Suc m - n) = m - n" |
639 by (import hollight SUB_PRESUC) |
630 by (import hollight SUB_PRESUC) |
640 |
631 |
641 lemma SUB_EQ_0: "ALL (m::nat) n::nat. (m - n = (0::nat)) = <= m n" |
632 lemma SUB_EQ_0: "ALL (m::nat) n::nat. (m - n = 0) = <= m n" |
642 by (import hollight SUB_EQ_0) |
633 by (import hollight SUB_EQ_0) |
643 |
634 |
644 lemma ADD_SUBR: "ALL (x::nat) xa::nat. xa - (x + xa) = (0::nat)" |
635 lemma ADD_SUBR: "ALL (x::nat) xa::nat. xa - (x + xa) = 0" |
645 by (import hollight ADD_SUBR) |
636 by (import hollight ADD_SUBR) |
646 |
637 |
647 lemma SUB_ADD: "ALL (x::nat) xa::nat. <= xa x --> x - xa + xa = x" |
638 lemma SUB_ADD: "ALL (x::nat) xa::nat. <= xa x --> x - xa + xa = x" |
648 by (import hollight SUB_ADD) |
639 by (import hollight SUB_ADD) |
649 |
640 |
650 lemma SUC_SUB1: "ALL x::nat. Suc x - NUMERAL_BIT1 (0::nat) = x" |
641 lemma SUC_SUB1: "ALL x::nat. Suc x - NUMERAL_BIT1 0 = x" |
651 by (import hollight SUC_SUB1) |
642 by (import hollight SUC_SUB1) |
652 |
643 |
653 constdefs |
644 constdefs |
654 FACT :: "nat => nat" |
645 FACT :: "nat => nat" |
655 "FACT == |
646 "FACT == |
656 SOME FACT::nat => nat. |
647 SOME FACT::nat => nat. |
657 FACT (0::nat) = NUMERAL_BIT1 (0::nat) & |
648 FACT 0 = NUMERAL_BIT1 0 & (ALL n::nat. FACT (Suc n) = Suc n * FACT n)" |
658 (ALL n::nat. FACT (Suc n) = Suc n * FACT n)" |
|
659 |
649 |
660 lemma DEF_FACT: "FACT = |
650 lemma DEF_FACT: "FACT = |
661 (SOME FACT::nat => nat. |
651 (SOME FACT::nat => nat. |
662 FACT (0::nat) = NUMERAL_BIT1 (0::nat) & |
652 FACT 0 = NUMERAL_BIT1 0 & (ALL n::nat. FACT (Suc n) = Suc n * FACT n))" |
663 (ALL n::nat. FACT (Suc n) = Suc n * FACT n))" |
|
664 by (import hollight DEF_FACT) |
653 by (import hollight DEF_FACT) |
665 |
654 |
666 lemma FACT_LT: "ALL n::nat. < (0::nat) (FACT n)" |
655 lemma FACT_LT: "ALL n::nat. < 0 (FACT n)" |
667 by (import hollight FACT_LT) |
656 by (import hollight FACT_LT) |
668 |
657 |
669 lemma FACT_LE: "ALL x::nat. <= (NUMERAL_BIT1 (0::nat)) (FACT x)" |
658 lemma FACT_LE: "ALL x::nat. <= (NUMERAL_BIT1 0) (FACT x)" |
670 by (import hollight FACT_LE) |
659 by (import hollight FACT_LE) |
671 |
660 |
672 lemma FACT_MONO: "ALL (m::nat) n::nat. <= m n --> <= (FACT m) (FACT n)" |
661 lemma FACT_MONO: "ALL (m::nat) n::nat. <= m n --> <= (FACT m) (FACT n)" |
673 by (import hollight FACT_MONO) |
662 by (import hollight FACT_MONO) |
674 |
663 |
675 lemma DIVMOD_EXIST: "ALL (m::nat) n::nat. |
664 lemma DIVMOD_EXIST: "ALL (m::nat) n::nat. n ~= 0 --> (EX (q::nat) r::nat. m = q * n + r & < r n)" |
676 n ~= (0::nat) --> (EX (q::nat) r::nat. m = q * n + r & < r n)" |
|
677 by (import hollight DIVMOD_EXIST) |
665 by (import hollight DIVMOD_EXIST) |
678 |
666 |
679 lemma DIVMOD_EXIST_0: "ALL (m::nat) n::nat. |
667 lemma DIVMOD_EXIST_0: "ALL (m::nat) n::nat. |
680 EX (x::nat) xa::nat. |
668 EX (x::nat) xa::nat. |
681 COND (n = (0::nat)) (x = (0::nat) & xa = (0::nat)) |
669 COND (n = 0) (x = 0 & xa = 0) (m = x * n + xa & < xa n)" |
682 (m = x * n + xa & < xa n)" |
|
683 by (import hollight DIVMOD_EXIST_0) |
670 by (import hollight DIVMOD_EXIST_0) |
684 |
671 |
685 constdefs |
672 constdefs |
686 DIV :: "nat => nat => nat" |
673 DIV :: "nat => nat => nat" |
687 "DIV == |
674 "DIV == |
688 SOME q::nat => nat => nat. |
675 SOME q::nat => nat => nat. |
689 EX r::nat => nat => nat. |
676 EX r::nat => nat => nat. |
690 ALL (m::nat) n::nat. |
677 ALL (m::nat) n::nat. |
691 COND (n = (0::nat)) (q m n = (0::nat) & r m n = (0::nat)) |
678 COND (n = 0) (q m n = 0 & r m n = 0) |
692 (m = q m n * n + r m n & < (r m n) n)" |
679 (m = q m n * n + r m n & < (r m n) n)" |
693 |
680 |
694 lemma DEF_DIV: "DIV = |
681 lemma DEF_DIV: "DIV = |
695 (SOME q::nat => nat => nat. |
682 (SOME q::nat => nat => nat. |
696 EX r::nat => nat => nat. |
683 EX r::nat => nat => nat. |
697 ALL (m::nat) n::nat. |
684 ALL (m::nat) n::nat. |
698 COND (n = (0::nat)) (q m n = (0::nat) & r m n = (0::nat)) |
685 COND (n = 0) (q m n = 0 & r m n = 0) |
699 (m = q m n * n + r m n & < (r m n) n))" |
686 (m = q m n * n + r m n & < (r m n) n))" |
700 by (import hollight DEF_DIV) |
687 by (import hollight DEF_DIV) |
701 |
688 |
702 constdefs |
689 constdefs |
703 MOD :: "nat => nat => nat" |
690 MOD :: "nat => nat => nat" |
704 "MOD == |
691 "MOD == |
705 SOME r::nat => nat => nat. |
692 SOME r::nat => nat => nat. |
706 ALL (m::nat) n::nat. |
693 ALL (m::nat) n::nat. |
707 COND (n = (0::nat)) (DIV m n = (0::nat) & r m n = (0::nat)) |
694 COND (n = 0) (DIV m n = 0 & r m n = 0) |
708 (m = DIV m n * n + r m n & < (r m n) n)" |
695 (m = DIV m n * n + r m n & < (r m n) n)" |
709 |
696 |
710 lemma DEF_MOD: "MOD = |
697 lemma DEF_MOD: "MOD = |
711 (SOME r::nat => nat => nat. |
698 (SOME r::nat => nat => nat. |
712 ALL (m::nat) n::nat. |
699 ALL (m::nat) n::nat. |
713 COND (n = (0::nat)) (DIV m n = (0::nat) & r m n = (0::nat)) |
700 COND (n = 0) (DIV m n = 0 & r m n = 0) |
714 (m = DIV m n * n + r m n & < (r m n) n))" |
701 (m = DIV m n * n + r m n & < (r m n) n))" |
715 by (import hollight DEF_MOD) |
702 by (import hollight DEF_MOD) |
716 |
703 |
717 lemma DIVISION: "ALL (m::nat) n::nat. |
704 lemma DIVISION: "ALL (m::nat) n::nat. n ~= 0 --> m = DIV m n * n + MOD m n & < (MOD m n) n" |
718 n ~= (0::nat) --> m = DIV m n * n + MOD m n & < (MOD m n) n" |
|
719 by (import hollight DIVISION) |
705 by (import hollight DIVISION) |
720 |
706 |
721 lemma DIVMOD_UNIQ_LEMMA: "ALL (m::nat) (n::nat) (q1::nat) (r1::nat) (q2::nat) r2::nat. |
707 lemma DIVMOD_UNIQ_LEMMA: "ALL (m::nat) (n::nat) (q1::nat) (r1::nat) (q2::nat) r2::nat. |
722 (m = q1 * n + r1 & < r1 n) & m = q2 * n + r2 & < r2 n --> |
708 (m = q1 * n + r1 & < r1 n) & m = q2 * n + r2 & < r2 n --> |
723 q1 = q2 & r1 = r2" |
709 q1 = q2 & r1 = r2" |
731 by (import hollight MOD_UNIQ) |
717 by (import hollight MOD_UNIQ) |
732 |
718 |
733 lemma DIV_UNIQ: "ALL (m::nat) (n::nat) (q::nat) r::nat. m = q * n + r & < r n --> DIV m n = q" |
719 lemma DIV_UNIQ: "ALL (m::nat) (n::nat) (q::nat) r::nat. m = q * n + r & < r n --> DIV m n = q" |
734 by (import hollight DIV_UNIQ) |
720 by (import hollight DIV_UNIQ) |
735 |
721 |
736 lemma MOD_MULT: "ALL (x::nat) xa::nat. x ~= (0::nat) --> MOD (x * xa) x = (0::nat)" |
722 lemma MOD_MULT: "ALL (x::nat) xa::nat. x ~= 0 --> MOD (x * xa) x = 0" |
737 by (import hollight MOD_MULT) |
723 by (import hollight MOD_MULT) |
738 |
724 |
739 lemma DIV_MULT: "ALL (x::nat) xa::nat. x ~= (0::nat) --> DIV (x * xa) x = xa" |
725 lemma DIV_MULT: "ALL (x::nat) xa::nat. x ~= 0 --> DIV (x * xa) x = xa" |
740 by (import hollight DIV_MULT) |
726 by (import hollight DIV_MULT) |
741 |
727 |
742 lemma DIV_DIV: "ALL (m::nat) (n::nat) p::nat. |
728 lemma DIV_DIV: "ALL (m::nat) (n::nat) p::nat. n * p ~= 0 --> DIV (DIV m n) p = DIV m (n * p)" |
743 n * p ~= (0::nat) --> DIV (DIV m n) p = DIV m (n * p)" |
|
744 by (import hollight DIV_DIV) |
729 by (import hollight DIV_DIV) |
745 |
730 |
746 lemma MOD_LT: "ALL (m::nat) n::nat. < m n --> MOD m n = m" |
731 lemma MOD_LT: "ALL (m::nat) n::nat. < m n --> MOD m n = m" |
747 by (import hollight MOD_LT) |
732 by (import hollight MOD_LT) |
748 |
733 |
749 lemma MOD_EQ: "ALL (m::nat) (n::nat) (p::nat) q::nat. m = n + q * p --> MOD m p = MOD n p" |
734 lemma MOD_EQ: "ALL (m::nat) (n::nat) (p::nat) q::nat. m = n + q * p --> MOD m p = MOD n p" |
750 by (import hollight MOD_EQ) |
735 by (import hollight MOD_EQ) |
751 |
736 |
752 lemma DIV_MOD: "ALL (m::nat) (n::nat) p::nat. |
737 lemma DIV_MOD: "ALL (m::nat) (n::nat) p::nat. |
753 n * p ~= (0::nat) --> MOD (DIV m n) p = DIV (MOD m (n * p)) n" |
738 n * p ~= 0 --> MOD (DIV m n) p = DIV (MOD m (n * p)) n" |
754 by (import hollight DIV_MOD) |
739 by (import hollight DIV_MOD) |
755 |
740 |
756 lemma DIV_1: "ALL n::nat. DIV n (NUMERAL_BIT1 (0::nat)) = n" |
741 lemma DIV_1: "ALL n::nat. DIV n (NUMERAL_BIT1 0) = n" |
757 by (import hollight DIV_1) |
742 by (import hollight DIV_1) |
758 |
743 |
759 lemma EXP_LT_0: "ALL (x::nat) xa::nat. |
744 lemma EXP_LT_0: "ALL (x::nat) xa::nat. < 0 (EXP xa x) = (xa ~= 0 | x = 0)" |
760 < (0::nat) (EXP xa x) = (xa ~= (0::nat) | x = (0::nat))" |
|
761 by (import hollight EXP_LT_0) |
745 by (import hollight EXP_LT_0) |
762 |
746 |
763 lemma DIV_LE: "ALL (m::nat) n::nat. n ~= (0::nat) --> <= (DIV m n) m" |
747 lemma DIV_LE: "ALL (m::nat) n::nat. n ~= 0 --> <= (DIV m n) m" |
764 by (import hollight DIV_LE) |
748 by (import hollight DIV_LE) |
765 |
749 |
766 lemma DIV_MUL_LE: "ALL (m::nat) n::nat. <= (n * DIV m n) m" |
750 lemma DIV_MUL_LE: "ALL (m::nat) n::nat. <= (n * DIV m n) m" |
767 by (import hollight DIV_MUL_LE) |
751 by (import hollight DIV_MUL_LE) |
768 |
752 |
769 lemma DIV_0: "ALL n::nat. n ~= (0::nat) --> DIV (0::nat) n = (0::nat)" |
753 lemma DIV_0: "ALL n::nat. n ~= 0 --> DIV 0 n = 0" |
770 by (import hollight DIV_0) |
754 by (import hollight DIV_0) |
771 |
755 |
772 lemma MOD_0: "ALL n::nat. n ~= (0::nat) --> MOD (0::nat) n = (0::nat)" |
756 lemma MOD_0: "ALL n::nat. n ~= 0 --> MOD 0 n = 0" |
773 by (import hollight MOD_0) |
757 by (import hollight MOD_0) |
774 |
758 |
775 lemma DIV_LT: "ALL (m::nat) n::nat. < m n --> DIV m n = (0::nat)" |
759 lemma DIV_LT: "ALL (m::nat) n::nat. < m n --> DIV m n = 0" |
776 by (import hollight DIV_LT) |
760 by (import hollight DIV_LT) |
777 |
761 |
778 lemma MOD_MOD: "ALL (m::nat) (n::nat) p::nat. |
762 lemma MOD_MOD: "ALL (m::nat) (n::nat) p::nat. n * p ~= 0 --> MOD (MOD m (n * p)) n = MOD m n" |
779 n * p ~= (0::nat) --> MOD (MOD m (n * p)) n = MOD m n" |
|
780 by (import hollight MOD_MOD) |
763 by (import hollight MOD_MOD) |
781 |
764 |
782 lemma MOD_MOD_REFL: "ALL (m::nat) n::nat. n ~= (0::nat) --> MOD (MOD m n) n = MOD m n" |
765 lemma MOD_MOD_REFL: "ALL (m::nat) n::nat. n ~= 0 --> MOD (MOD m n) n = MOD m n" |
783 by (import hollight MOD_MOD_REFL) |
766 by (import hollight MOD_MOD_REFL) |
784 |
767 |
785 lemma DIV_MULT2: "ALL (x::nat) (xa::nat) xb::nat. |
768 lemma DIV_MULT2: "ALL (x::nat) (xa::nat) xb::nat. |
786 x * xb ~= (0::nat) --> DIV (x * xa) (x * xb) = DIV xa xb" |
769 x * xb ~= 0 --> DIV (x * xa) (x * xb) = DIV xa xb" |
787 by (import hollight DIV_MULT2) |
770 by (import hollight DIV_MULT2) |
788 |
771 |
789 lemma MOD_MULT2: "ALL (x::nat) (xa::nat) xb::nat. |
772 lemma MOD_MULT2: "ALL (x::nat) (xa::nat) xb::nat. |
790 x * xb ~= (0::nat) --> MOD (x * xa) (x * xb) = x * MOD xa xb" |
773 x * xb ~= 0 --> MOD (x * xa) (x * xb) = x * MOD xa xb" |
791 by (import hollight MOD_MULT2) |
774 by (import hollight MOD_MULT2) |
792 |
775 |
793 lemma MOD_1: "ALL n::nat. MOD n (NUMERAL_BIT1 (0::nat)) = (0::nat)" |
776 lemma MOD_1: "ALL n::nat. MOD n (NUMERAL_BIT1 0) = 0" |
794 by (import hollight MOD_1) |
777 by (import hollight MOD_1) |
795 |
778 |
796 lemma MOD_EXISTS: "ALL (m::nat) n::nat. |
779 lemma MOD_EXISTS: "ALL (m::nat) n::nat. |
797 (EX q::nat. m = n * q) = |
780 (EX q::nat. m = n * q) = COND (n = 0) (m = 0) (MOD m n = 0)" |
798 COND (n = (0::nat)) (m = (0::nat)) (MOD m n = (0::nat))" |
|
799 by (import hollight MOD_EXISTS) |
781 by (import hollight MOD_EXISTS) |
800 |
782 |
801 lemma LT_EXP: "ALL (x::nat) (m::nat) n::nat. |
783 lemma LT_EXP: "ALL (x::nat) (m::nat) n::nat. |
802 < (EXP x m) (EXP x n) = |
784 < (EXP x m) (EXP x n) = |
803 (<= (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) x & < m n | |
785 (<= (NUMERAL_BIT0 (NUMERAL_BIT1 0)) x & < m n | x = 0 & m ~= 0 & n = 0)" |
804 x = (0::nat) & m ~= (0::nat) & n = (0::nat))" |
|
805 by (import hollight LT_EXP) |
786 by (import hollight LT_EXP) |
806 |
787 |
807 lemma LE_EXP: "ALL (x::nat) (m::nat) n::nat. |
788 lemma LE_EXP: "ALL (x::nat) (m::nat) n::nat. |
808 <= (EXP x m) (EXP x n) = |
789 <= (EXP x m) (EXP x n) = |
809 COND (x = (0::nat)) (m = (0::nat) --> n = (0::nat)) |
790 COND (x = 0) (m = 0 --> n = 0) (x = NUMERAL_BIT1 0 | <= m n)" |
810 (x = NUMERAL_BIT1 (0::nat) | <= m n)" |
|
811 by (import hollight LE_EXP) |
791 by (import hollight LE_EXP) |
812 |
792 |
813 lemma DIV_MONO: "ALL (m::nat) (n::nat) p::nat. |
793 lemma DIV_MONO: "ALL (m::nat) (n::nat) p::nat. p ~= 0 & <= m n --> <= (DIV m p) (DIV n p)" |
814 p ~= (0::nat) & <= m n --> <= (DIV m p) (DIV n p)" |
|
815 by (import hollight DIV_MONO) |
794 by (import hollight DIV_MONO) |
816 |
795 |
817 lemma DIV_MONO_LT: "ALL (m::nat) (n::nat) p::nat. |
796 lemma DIV_MONO_LT: "ALL (m::nat) (n::nat) p::nat. |
818 p ~= (0::nat) & <= (m + p) n --> < (DIV m p) (DIV n p)" |
797 p ~= 0 & <= (m + p) n --> < (DIV m p) (DIV n p)" |
819 by (import hollight DIV_MONO_LT) |
798 by (import hollight DIV_MONO_LT) |
820 |
799 |
821 lemma LE_LDIV: "ALL (a::nat) (b::nat) n::nat. |
800 lemma LE_LDIV: "ALL (a::nat) (b::nat) n::nat. a ~= 0 & <= b (a * n) --> <= (DIV b a) n" |
822 a ~= (0::nat) & <= b (a * n) --> <= (DIV b a) n" |
|
823 by (import hollight LE_LDIV) |
801 by (import hollight LE_LDIV) |
824 |
802 |
825 lemma LE_RDIV_EQ: "ALL (a::nat) (b::nat) n::nat. |
803 lemma LE_RDIV_EQ: "ALL (a::nat) (b::nat) n::nat. a ~= 0 --> <= n (DIV b a) = <= (a * n) b" |
826 a ~= (0::nat) --> <= n (DIV b a) = <= (a * n) b" |
|
827 by (import hollight LE_RDIV_EQ) |
804 by (import hollight LE_RDIV_EQ) |
828 |
805 |
829 lemma LE_LDIV_EQ: "ALL (a::nat) (b::nat) n::nat. |
806 lemma LE_LDIV_EQ: "ALL (a::nat) (b::nat) n::nat. |
830 a ~= (0::nat) --> <= (DIV b a) n = < b (a * (n + NUMERAL_BIT1 (0::nat)))" |
807 a ~= 0 --> <= (DIV b a) n = < b (a * (n + NUMERAL_BIT1 0))" |
831 by (import hollight LE_LDIV_EQ) |
808 by (import hollight LE_LDIV_EQ) |
832 |
809 |
833 lemma DIV_EQ_0: "ALL (m::nat) n::nat. n ~= (0::nat) --> (DIV m n = (0::nat)) = < m n" |
810 lemma DIV_EQ_0: "ALL (m::nat) n::nat. n ~= 0 --> (DIV m n = 0) = < m n" |
834 by (import hollight DIV_EQ_0) |
811 by (import hollight DIV_EQ_0) |
835 |
812 |
836 lemma MOD_EQ_0: "ALL (m::nat) n::nat. |
813 lemma MOD_EQ_0: "ALL (m::nat) n::nat. n ~= 0 --> (MOD m n = 0) = (EX q::nat. m = q * n)" |
837 n ~= (0::nat) --> (MOD m n = (0::nat)) = (EX q::nat. m = q * n)" |
|
838 by (import hollight MOD_EQ_0) |
814 by (import hollight MOD_EQ_0) |
839 |
815 |
840 lemma EVEN_MOD: "ALL n::nat. |
816 lemma EVEN_MOD: "ALL n::nat. EVEN n = (MOD n (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = 0)" |
841 EVEN n = (MOD n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = (0::nat))" |
|
842 by (import hollight EVEN_MOD) |
817 by (import hollight EVEN_MOD) |
843 |
818 |
844 lemma ODD_MOD: "ALL n::nat. |
819 lemma ODD_MOD: "ALL n::nat. ODD n = (MOD n (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = NUMERAL_BIT1 0)" |
845 ODD n = |
|
846 (MOD n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = NUMERAL_BIT1 (0::nat))" |
|
847 by (import hollight ODD_MOD) |
820 by (import hollight ODD_MOD) |
848 |
821 |
849 lemma MOD_MULT_RMOD: "ALL (m::nat) (n::nat) p::nat. |
822 lemma MOD_MULT_RMOD: "ALL (m::nat) (n::nat) p::nat. n ~= 0 --> MOD (m * MOD p n) n = MOD (m * p) n" |
850 n ~= (0::nat) --> MOD (m * MOD p n) n = MOD (m * p) n" |
|
851 by (import hollight MOD_MULT_RMOD) |
823 by (import hollight MOD_MULT_RMOD) |
852 |
824 |
853 lemma MOD_MULT_LMOD: "ALL (x::nat) (xa::nat) xb::nat. |
825 lemma MOD_MULT_LMOD: "ALL (x::nat) (xa::nat) xb::nat. |
854 xa ~= (0::nat) --> MOD (MOD x xa * xb) xa = MOD (x * xb) xa" |
826 xa ~= 0 --> MOD (MOD x xa * xb) xa = MOD (x * xb) xa" |
855 by (import hollight MOD_MULT_LMOD) |
827 by (import hollight MOD_MULT_LMOD) |
856 |
828 |
857 lemma MOD_MULT_MOD2: "ALL (x::nat) (xa::nat) xb::nat. |
829 lemma MOD_MULT_MOD2: "ALL (x::nat) (xa::nat) xb::nat. |
858 xa ~= (0::nat) --> MOD (MOD x xa * MOD xb xa) xa = MOD (x * xb) xa" |
830 xa ~= 0 --> MOD (MOD x xa * MOD xb xa) xa = MOD (x * xb) xa" |
859 by (import hollight MOD_MULT_MOD2) |
831 by (import hollight MOD_MULT_MOD2) |
860 |
832 |
861 lemma MOD_EXP_MOD: "ALL (m::nat) (n::nat) p::nat. |
833 lemma MOD_EXP_MOD: "ALL (m::nat) (n::nat) p::nat. |
862 n ~= (0::nat) --> MOD (EXP (MOD m n) p) n = MOD (EXP m p) n" |
834 n ~= 0 --> MOD (EXP (MOD m n) p) n = MOD (EXP m p) n" |
863 by (import hollight MOD_EXP_MOD) |
835 by (import hollight MOD_EXP_MOD) |
864 |
836 |
865 lemma MOD_MULT_ADD: "ALL (m::nat) (n::nat) p::nat. MOD (m * n + p) n = MOD p n" |
837 lemma MOD_MULT_ADD: "ALL (m::nat) (n::nat) p::nat. MOD (m * n + p) n = MOD p n" |
866 by (import hollight MOD_MULT_ADD) |
838 by (import hollight MOD_MULT_ADD) |
867 |
839 |
868 lemma MOD_ADD_MOD: "ALL (a::nat) (b::nat) n::nat. |
840 lemma MOD_ADD_MOD: "ALL (a::nat) (b::nat) n::nat. |
869 n ~= (0::nat) --> MOD (MOD a n + MOD b n) n = MOD (a + b) n" |
841 n ~= 0 --> MOD (MOD a n + MOD b n) n = MOD (a + b) n" |
870 by (import hollight MOD_ADD_MOD) |
842 by (import hollight MOD_ADD_MOD) |
871 |
843 |
872 lemma DIV_ADD_MOD: "ALL (a::nat) (b::nat) n::nat. |
844 lemma DIV_ADD_MOD: "ALL (a::nat) (b::nat) n::nat. |
873 n ~= (0::nat) --> |
845 n ~= 0 --> |
874 (MOD (a + b) n = MOD a n + MOD b n) = (DIV (a + b) n = DIV a n + DIV b n)" |
846 (MOD (a + b) n = MOD a n + MOD b n) = (DIV (a + b) n = DIV a n + DIV b n)" |
875 by (import hollight DIV_ADD_MOD) |
847 by (import hollight DIV_ADD_MOD) |
876 |
848 |
877 lemma DIV_REFL: "ALL n::nat. n ~= (0::nat) --> DIV n n = NUMERAL_BIT1 (0::nat)" |
849 lemma DIV_REFL: "ALL n::nat. n ~= 0 --> DIV n n = NUMERAL_BIT1 0" |
878 by (import hollight DIV_REFL) |
850 by (import hollight DIV_REFL) |
879 |
851 |
880 lemma MOD_LE: "ALL (m::nat) n::nat. n ~= (0::nat) --> <= (MOD m n) m" |
852 lemma MOD_LE: "ALL (m::nat) n::nat. n ~= 0 --> <= (MOD m n) m" |
881 by (import hollight MOD_LE) |
853 by (import hollight MOD_LE) |
882 |
854 |
883 lemma DIV_MONO2: "ALL (m::nat) (n::nat) p::nat. |
855 lemma DIV_MONO2: "ALL (m::nat) (n::nat) p::nat. p ~= 0 & <= p m --> <= (DIV n m) (DIV n p)" |
884 p ~= (0::nat) & <= p m --> <= (DIV n m) (DIV n p)" |
|
885 by (import hollight DIV_MONO2) |
856 by (import hollight DIV_MONO2) |
886 |
857 |
887 lemma DIV_LE_EXCLUSION: "ALL (a::nat) (b::nat) (c::nat) d::nat. |
858 lemma DIV_LE_EXCLUSION: "ALL (a::nat) (b::nat) (c::nat) d::nat. |
888 b ~= (0::nat) & < (b * c) ((a + NUMERAL_BIT1 (0::nat)) * d) --> |
859 b ~= 0 & < (b * c) ((a + NUMERAL_BIT1 0) * d) --> <= (DIV c d) (DIV a b)" |
889 <= (DIV c d) (DIV a b)" |
|
890 by (import hollight DIV_LE_EXCLUSION) |
860 by (import hollight DIV_LE_EXCLUSION) |
891 |
861 |
892 lemma DIV_EQ_EXCLUSION: "< ((b::nat) * (c::nat)) (((a::nat) + NUMERAL_BIT1 (0::nat)) * (d::nat)) & |
862 lemma DIV_EQ_EXCLUSION: "< ((b::nat) * (c::nat)) (((a::nat) + NUMERAL_BIT1 0) * (d::nat)) & |
893 < (a * d) ((c + NUMERAL_BIT1 (0::nat)) * b) --> |
863 < (a * d) ((c + NUMERAL_BIT1 0) * b) --> |
894 DIV a b = DIV c d" |
864 DIV a b = DIV c d" |
895 by (import hollight DIV_EQ_EXCLUSION) |
865 by (import hollight DIV_EQ_EXCLUSION) |
896 |
866 |
897 lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) = |
867 lemma SUB_ELIM_THM: "(P::nat => bool) ((a::nat) - (b::nat)) = |
898 (ALL x::nat. (b = a + x --> P (0::nat)) & (a = b + x --> P x))" |
868 (ALL x::nat. (b = a + x --> P 0) & (a = b + x --> P x))" |
899 by (import hollight SUB_ELIM_THM) |
869 by (import hollight SUB_ELIM_THM) |
900 |
870 |
901 lemma PRE_ELIM_THM: "(P::nat => bool) (Pred (n::nat)) = |
871 lemma PRE_ELIM_THM: "(P::nat => bool) (Pred (n::nat)) = |
902 (ALL m::nat. (n = (0::nat) --> P (0::nat)) & (n = Suc m --> P m))" |
872 (ALL m::nat. (n = 0 --> P 0) & (n = Suc m --> P m))" |
903 by (import hollight PRE_ELIM_THM) |
873 by (import hollight PRE_ELIM_THM) |
904 |
874 |
905 lemma DIVMOD_ELIM_THM: "(P::nat => nat => bool) (DIV (m::nat) (n::nat)) (MOD m n) = |
875 lemma DIVMOD_ELIM_THM: "(P::nat => nat => bool) (DIV (m::nat) (n::nat)) (MOD m n) = |
906 (n = (0::nat) & P (0::nat) (0::nat) | |
876 (n = 0 & P 0 0 | |
907 n ~= (0::nat) & (ALL (q::nat) r::nat. m = q * n + r & < r n --> P q r))" |
877 n ~= 0 & (ALL (q::nat) r::nat. m = q * n + r & < r n --> P q r))" |
908 by (import hollight DIVMOD_ELIM_THM) |
878 by (import hollight DIVMOD_ELIM_THM) |
909 |
879 |
910 constdefs |
880 constdefs |
911 eqeq :: "'q_9910::type |
881 eqeq :: "'q_9910 => 'q_9909 => ('q_9910 => 'q_9909 => bool) => bool" |
912 => 'q_9909::type => ('q_9910::type => 'q_9909::type => bool) => bool" |
|
913 "eqeq == |
882 "eqeq == |
914 %(u::'q_9910::type) (ua::'q_9909::type) |
883 %(u::'q_9910::type) (ua::'q_9909::type) |
915 ub::'q_9910::type => 'q_9909::type => bool. ub u ua" |
884 ub::'q_9910::type => 'q_9909::type => bool. ub u ua" |
916 |
885 |
917 lemma DEF__equal__equal_: "eqeq = |
886 lemma DEF__equal__equal_: "eqeq = |
940 lemma MINIMAL: "ALL P::nat => bool. |
909 lemma MINIMAL: "ALL P::nat => bool. |
941 Ex P = (P (minimal P) & (ALL x::nat. < x (minimal P) --> ~ P x))" |
910 Ex P = (P (minimal P) & (ALL x::nat. < x (minimal P) --> ~ P x))" |
942 by (import hollight MINIMAL) |
911 by (import hollight MINIMAL) |
943 |
912 |
944 constdefs |
913 constdefs |
945 WF :: "('A::type => 'A::type => bool) => bool" |
914 WF :: "('A => 'A => bool) => bool" |
946 "WF == |
915 "WF == |
947 %u::'A::type => 'A::type => bool. |
916 %u::'A::type => 'A::type => bool. |
948 ALL P::'A::type => bool. |
917 ALL P::'A::type => bool. |
949 Ex P --> (EX x::'A::type. P x & (ALL y::'A::type. u y x --> ~ P y))" |
918 Ex P --> (EX x::'A::type. P x & (ALL y::'A::type. u y x --> ~ P y))" |
950 |
919 |
1079 (ALL z::nat. < z x --> f z = g z) --> H f x = H g x) --> |
1048 (ALL z::nat. < z x --> f z = g z) --> H f x = H g x) --> |
1080 (EX f::nat => 'A::type. ALL x::nat. f x = H f x)" |
1049 (EX f::nat => 'A::type. ALL x::nat. f x = H f x)" |
1081 by (import hollight WF_REC_num) |
1050 by (import hollight WF_REC_num) |
1082 |
1051 |
1083 consts |
1052 consts |
1084 measure :: "('q_11107::type => nat) => 'q_11107::type => 'q_11107::type => bool" |
1053 measure :: "('q_11107 => nat) => 'q_11107 => 'q_11107 => bool" |
1085 |
1054 |
1086 defs |
1055 defs |
1087 measure_def: "hollight.measure == |
1056 measure_def: "hollight.measure == |
1088 %(u::'q_11107::type => nat) (x::'q_11107::type) y::'q_11107::type. |
1057 %(u::'q_11107::type => nat) (x::'q_11107::type) y::'q_11107::type. |
1089 < (u x) (u y)" |
1058 < (u x) (u y)" |
1126 P f x & u_354 y (G f x) --> u_354 y x) --> |
1095 P f x & u_354 y (G f x) --> u_354 y x) --> |
1127 (EX f::'A::type => 'B::type. |
1096 (EX f::'A::type => 'B::type. |
1128 ALL x::'A::type. f x = COND (P f x) (f (G f x)) (H f x))" |
1097 ALL x::'A::type. f x = COND (P f x) (f (G f x)) (H f x))" |
1129 by (import hollight WF_REC_TAIL_GENERAL) |
1098 by (import hollight WF_REC_TAIL_GENERAL) |
1130 |
1099 |
1131 lemma ARITH_ZERO: "(0::nat) = (0::nat) & NUMERAL_BIT0 (0::nat) = (0::nat)" |
1100 lemma ARITH_ZERO: "(op &::bool => bool => bool) ((op =::nat => nat => bool) (0::nat) (0::nat)) |
1101 ((op =::nat => nat => bool) ((NUMERAL_BIT0::nat => nat) (0::nat)) (0::nat))" |
|
1132 by (import hollight ARITH_ZERO) |
1102 by (import hollight ARITH_ZERO) |
1133 |
1103 |
1134 lemma ARITH_SUC: "(ALL x::nat. Suc x = Suc x) & |
1104 lemma ARITH_SUC: "(ALL x::nat. Suc x = Suc x) & |
1135 Suc (0::nat) = NUMERAL_BIT1 (0::nat) & |
1105 Suc 0 = NUMERAL_BIT1 0 & |
1136 (ALL x::nat. Suc (NUMERAL_BIT0 x) = NUMERAL_BIT1 x) & |
1106 (ALL x::nat. Suc (NUMERAL_BIT0 x) = NUMERAL_BIT1 x) & |
1137 (ALL x::nat. Suc (NUMERAL_BIT1 x) = NUMERAL_BIT0 (Suc x))" |
1107 (ALL x::nat. Suc (NUMERAL_BIT1 x) = NUMERAL_BIT0 (Suc x))" |
1138 by (import hollight ARITH_SUC) |
1108 by (import hollight ARITH_SUC) |
1139 |
1109 |
1140 lemma ARITH_PRE: "(ALL x::nat. Pred x = Pred x) & |
1110 lemma ARITH_PRE: "(ALL x::nat. Pred x = Pred x) & |
1141 Pred (0::nat) = (0::nat) & |
1111 Pred 0 = 0 & |
1142 (ALL x::nat. |
1112 (ALL x::nat. |
1143 Pred (NUMERAL_BIT0 x) = |
1113 Pred (NUMERAL_BIT0 x) = COND (x = 0) 0 (NUMERAL_BIT1 (Pred x))) & |
1144 COND (x = (0::nat)) (0::nat) (NUMERAL_BIT1 (Pred x))) & |
|
1145 (ALL x::nat. Pred (NUMERAL_BIT1 x) = NUMERAL_BIT0 x)" |
1114 (ALL x::nat. Pred (NUMERAL_BIT1 x) = NUMERAL_BIT0 x)" |
1146 by (import hollight ARITH_PRE) |
1115 by (import hollight ARITH_PRE) |
1147 |
1116 |
1148 lemma ARITH_ADD: "(ALL (x::nat) xa::nat. x + xa = x + xa) & |
1117 lemma ARITH_ADD: "(op &::bool => bool => bool) |
1149 (0::nat) + (0::nat) = (0::nat) & |
1118 ((All::(nat => bool) => bool) |
1150 (ALL x::nat. (0::nat) + NUMERAL_BIT0 x = NUMERAL_BIT0 x) & |
1119 (%x::nat. |
1151 (ALL x::nat. (0::nat) + NUMERAL_BIT1 x = NUMERAL_BIT1 x) & |
1120 (All::(nat => bool) => bool) |
1152 (ALL x::nat. NUMERAL_BIT0 x + (0::nat) = NUMERAL_BIT0 x) & |
1121 (%xa::nat. |
1153 (ALL x::nat. NUMERAL_BIT1 x + (0::nat) = NUMERAL_BIT1 x) & |
1122 (op =::nat => nat => bool) ((op +::nat => nat => nat) x xa) |
1154 (ALL (x::nat) xa::nat. |
1123 ((op +::nat => nat => nat) x xa)))) |
1155 NUMERAL_BIT0 x + NUMERAL_BIT0 xa = NUMERAL_BIT0 (x + xa)) & |
1124 ((op &::bool => bool => bool) |
1156 (ALL (x::nat) xa::nat. |
1125 ((op =::nat => nat => bool) ((op +::nat => nat => nat) (0::nat) (0::nat)) |
1157 NUMERAL_BIT0 x + NUMERAL_BIT1 xa = NUMERAL_BIT1 (x + xa)) & |
1126 (0::nat)) |
1158 (ALL (x::nat) xa::nat. |
1127 ((op &::bool => bool => bool) |
1159 NUMERAL_BIT1 x + NUMERAL_BIT0 xa = NUMERAL_BIT1 (x + xa)) & |
1128 ((All::(nat => bool) => bool) |
1160 (ALL (x::nat) xa::nat. |
1129 (%x::nat. |
1161 NUMERAL_BIT1 x + NUMERAL_BIT1 xa = NUMERAL_BIT0 (Suc (x + xa)))" |
1130 (op =::nat => nat => bool) |
1131 ((op +::nat => nat => nat) (0::nat) |
|
1132 ((NUMERAL_BIT0::nat => nat) x)) |
|
1133 ((NUMERAL_BIT0::nat => nat) x))) |
|
1134 ((op &::bool => bool => bool) |
|
1135 ((All::(nat => bool) => bool) |
|
1136 (%x::nat. |
|
1137 (op =::nat => nat => bool) |
|
1138 ((op +::nat => nat => nat) (0::nat) |
|
1139 ((NUMERAL_BIT1::nat => nat) x)) |
|
1140 ((NUMERAL_BIT1::nat => nat) x))) |
|
1141 ((op &::bool => bool => bool) |
|
1142 ((All::(nat => bool) => bool) |
|
1143 (%x::nat. |
|
1144 (op =::nat => nat => bool) |
|
1145 ((op +::nat => nat => nat) ((NUMERAL_BIT0::nat => nat) x) |
|
1146 (0::nat)) |
|
1147 ((NUMERAL_BIT0::nat => nat) x))) |
|
1148 ((op &::bool => bool => bool) |
|
1149 ((All::(nat => bool) => bool) |
|
1150 (%x::nat. |
|
1151 (op =::nat => nat => bool) |
|
1152 ((op +::nat => nat => nat) ((NUMERAL_BIT1::nat => nat) x) |
|
1153 (0::nat)) |
|
1154 ((NUMERAL_BIT1::nat => nat) x))) |
|
1155 ((op &::bool => bool => bool) |
|
1156 ((All::(nat => bool) => bool) |
|
1157 (%x::nat. |
|
1158 (All::(nat => bool) => bool) |
|
1159 (%xa::nat. |
|
1160 (op =::nat => nat => bool) |
|
1161 ((op +::nat => nat => nat) |
|
1162 ((NUMERAL_BIT0::nat => nat) x) |
|
1163 ((NUMERAL_BIT0::nat => nat) xa)) |
|
1164 ((NUMERAL_BIT0::nat => nat) |
|
1165 ((op +::nat => nat => nat) x xa))))) |
|
1166 ((op &::bool => bool => bool) |
|
1167 ((All::(nat => bool) => bool) |
|
1168 (%x::nat. |
|
1169 (All::(nat => bool) => bool) |
|
1170 (%xa::nat. |
|
1171 (op =::nat => nat => bool) |
|
1172 ((op +::nat => nat => nat) |
|
1173 ((NUMERAL_BIT0::nat => nat) x) |
|
1174 ((NUMERAL_BIT1::nat => nat) xa)) |
|
1175 ((NUMERAL_BIT1::nat => nat) |
|
1176 ((op +::nat => nat => nat) x xa))))) |
|
1177 ((op &::bool => bool => bool) |
|
1178 ((All::(nat => bool) => bool) |
|
1179 (%x::nat. |
|
1180 (All::(nat => bool) => bool) |
|
1181 (%xa::nat. |
|
1182 (op =::nat => nat => bool) |
|
1183 ((op +::nat => nat => nat) |
|
1184 ((NUMERAL_BIT1::nat => nat) x) |
|
1185 ((NUMERAL_BIT0::nat => nat) xa)) |
|
1186 ((NUMERAL_BIT1::nat => nat) |
|
1187 ((op +::nat => nat => nat) x xa))))) |
|
1188 ((All::(nat => bool) => bool) |
|
1189 (%x::nat. |
|
1190 (All::(nat => bool) => bool) |
|
1191 (%xa::nat. |
|
1192 (op =::nat => nat => bool) |
|
1193 ((op +::nat => nat => nat) |
|
1194 ((NUMERAL_BIT1::nat => nat) x) |
|
1195 ((NUMERAL_BIT1::nat => nat) xa)) |
|
1196 ((NUMERAL_BIT0::nat => nat) |
|
1197 ((Suc::nat => nat) |
|
1198 ((op +::nat => nat => nat) x |
|
1199 xa))))))))))))))" |
|
1162 by (import hollight ARITH_ADD) |
1200 by (import hollight ARITH_ADD) |
1163 |
1201 |
1164 lemma ARITH_MULT: "(ALL (x::nat) xa::nat. x * xa = x * xa) & |
1202 lemma ARITH_MULT: "(op &::bool => bool => bool) |
1165 (0::nat) * (0::nat) = (0::nat) & |
1203 ((All::(nat => bool) => bool) |
1166 (ALL x::nat. (0::nat) * NUMERAL_BIT0 x = (0::nat)) & |
1204 (%x::nat. |
1167 (ALL x::nat. (0::nat) * NUMERAL_BIT1 x = (0::nat)) & |
1205 (All::(nat => bool) => bool) |
1168 (ALL x::nat. NUMERAL_BIT0 x * (0::nat) = (0::nat)) & |
1206 (%xa::nat. |
1169 (ALL x::nat. NUMERAL_BIT1 x * (0::nat) = (0::nat)) & |
1207 (op =::nat => nat => bool) ((op *::nat => nat => nat) x xa) |
1170 (ALL (x::nat) xa::nat. |
1208 ((op *::nat => nat => nat) x xa)))) |
1171 NUMERAL_BIT0 x * NUMERAL_BIT0 xa = |
1209 ((op &::bool => bool => bool) |
1172 NUMERAL_BIT0 (NUMERAL_BIT0 (x * xa))) & |
1210 ((op =::nat => nat => bool) ((op *::nat => nat => nat) (0::nat) (0::nat)) |
1173 (ALL (x::nat) xa::nat. |
1211 (0::nat)) |
1174 NUMERAL_BIT0 x * NUMERAL_BIT1 xa = |
1212 ((op &::bool => bool => bool) |
1175 NUMERAL_BIT0 x + NUMERAL_BIT0 (NUMERAL_BIT0 (x * xa))) & |
1213 ((All::(nat => bool) => bool) |
1176 (ALL (x::nat) xa::nat. |
1214 (%x::nat. |
1177 NUMERAL_BIT1 x * NUMERAL_BIT0 xa = |
1215 (op =::nat => nat => bool) |
1178 NUMERAL_BIT0 xa + NUMERAL_BIT0 (NUMERAL_BIT0 (x * xa))) & |
1216 ((op *::nat => nat => nat) (0::nat) |
1179 (ALL (x::nat) xa::nat. |
1217 ((NUMERAL_BIT0::nat => nat) x)) |
1180 NUMERAL_BIT1 x * NUMERAL_BIT1 xa = |
1218 (0::nat))) |
1181 NUMERAL_BIT1 x + |
1219 ((op &::bool => bool => bool) |
1182 (NUMERAL_BIT0 xa + NUMERAL_BIT0 (NUMERAL_BIT0 (x * xa))))" |
1220 ((All::(nat => bool) => bool) |
1221 (%x::nat. |
|
1222 (op =::nat => nat => bool) |
|
1223 ((op *::nat => nat => nat) (0::nat) |
|
1224 ((NUMERAL_BIT1::nat => nat) x)) |
|
1225 (0::nat))) |
|
1226 ((op &::bool => bool => bool) |
|
1227 ((All::(nat => bool) => bool) |
|
1228 (%x::nat. |
|
1229 (op =::nat => nat => bool) |
|
1230 ((op *::nat => nat => nat) ((NUMERAL_BIT0::nat => nat) x) |
|
1231 (0::nat)) |
|
1232 (0::nat))) |
|
1233 ((op &::bool => bool => bool) |
|
1234 ((All::(nat => bool) => bool) |
|
1235 (%x::nat. |
|
1236 (op =::nat => nat => bool) |
|
1237 ((op *::nat => nat => nat) ((NUMERAL_BIT1::nat => nat) x) |
|
1238 (0::nat)) |
|
1239 (0::nat))) |
|
1240 ((op &::bool => bool => bool) |
|
1241 ((All::(nat => bool) => bool) |
|
1242 (%x::nat. |
|
1243 (All::(nat => bool) => bool) |
|
1244 (%xa::nat. |
|
1245 (op =::nat => nat => bool) |
|
1246 ((op *::nat => nat => nat) |
|
1247 ((NUMERAL_BIT0::nat => nat) x) |
|
1248 ((NUMERAL_BIT0::nat => nat) xa)) |
|
1249 ((NUMERAL_BIT0::nat => nat) |
|
1250 ((NUMERAL_BIT0::nat => nat) |
|
1251 ((op *::nat => nat => nat) x xa)))))) |
|
1252 ((op &::bool => bool => bool) |
|
1253 ((All::(nat => bool) => bool) |
|
1254 (%x::nat. |
|
1255 (All::(nat => bool) => bool) |
|
1256 (%xa::nat. |
|
1257 (op =::nat => nat => bool) |
|
1258 ((op *::nat => nat => nat) |
|
1259 ((NUMERAL_BIT0::nat => nat) x) |
|
1260 ((NUMERAL_BIT1::nat => nat) xa)) |
|
1261 ((op +::nat => nat => nat) |
|
1262 ((NUMERAL_BIT0::nat => nat) x) |
|
1263 ((NUMERAL_BIT0::nat => nat) |
|
1264 ((NUMERAL_BIT0::nat => nat) |
|
1265 ((op *::nat => nat => nat) x xa))))))) |
|
1266 ((op &::bool => bool => bool) |
|
1267 ((All::(nat => bool) => bool) |
|
1268 (%x::nat. |
|
1269 (All::(nat => bool) => bool) |
|
1270 (%xa::nat. |
|
1271 (op =::nat => nat => bool) |
|
1272 ((op *::nat => nat => nat) |
|
1273 ((NUMERAL_BIT1::nat => nat) x) |
|
1274 ((NUMERAL_BIT0::nat => nat) xa)) |
|
1275 ((op +::nat => nat => nat) |
|
1276 ((NUMERAL_BIT0::nat => nat) xa) |
|
1277 ((NUMERAL_BIT0::nat => nat) |
|
1278 ((NUMERAL_BIT0::nat => nat) |
|
1279 ((op *::nat => nat => nat) x xa))))))) |
|
1280 ((All::(nat => bool) => bool) |
|
1281 (%x::nat. |
|
1282 (All::(nat => bool) => bool) |
|
1283 (%xa::nat. |
|
1284 (op =::nat => nat => bool) |
|
1285 ((op *::nat => nat => nat) |
|
1286 ((NUMERAL_BIT1::nat => nat) x) |
|
1287 ((NUMERAL_BIT1::nat => nat) xa)) |
|
1288 ((op +::nat => nat => nat) |
|
1289 ((NUMERAL_BIT1::nat => nat) x) |
|
1290 ((op +::nat => nat => nat) |
|
1291 ((NUMERAL_BIT0::nat => nat) xa) |
|
1292 ((NUMERAL_BIT0::nat => nat) |
|
1293 ((NUMERAL_BIT0::nat => nat) |
|
1294 ((op *::nat => nat => nat) x |
|
1295 xa))))))))))))))))" |
|
1183 by (import hollight ARITH_MULT) |
1296 by (import hollight ARITH_MULT) |
1184 |
1297 |
1185 lemma ARITH_EXP: "(ALL (x::nat) xa::nat. EXP x xa = EXP x xa) & |
1298 lemma ARITH_EXP: "(ALL (x::nat) xa::nat. EXP x xa = EXP x xa) & |
1186 EXP (0::nat) (0::nat) = NUMERAL_BIT1 (0::nat) & |
1299 EXP 0 0 = NUMERAL_BIT1 0 & |
1187 (ALL m::nat. EXP (NUMERAL_BIT0 m) (0::nat) = NUMERAL_BIT1 (0::nat)) & |
1300 (ALL m::nat. EXP (NUMERAL_BIT0 m) 0 = NUMERAL_BIT1 0) & |
1188 (ALL m::nat. EXP (NUMERAL_BIT1 m) (0::nat) = NUMERAL_BIT1 (0::nat)) & |
1301 (ALL m::nat. EXP (NUMERAL_BIT1 m) 0 = NUMERAL_BIT1 0) & |
1189 (ALL n::nat. |
1302 (ALL n::nat. EXP 0 (NUMERAL_BIT0 n) = EXP 0 n * EXP 0 n) & |
1190 EXP (0::nat) (NUMERAL_BIT0 n) = EXP (0::nat) n * EXP (0::nat) n) & |
|
1191 (ALL (m::nat) n::nat. |
1303 (ALL (m::nat) n::nat. |
1192 EXP (NUMERAL_BIT0 m) (NUMERAL_BIT0 n) = |
1304 EXP (NUMERAL_BIT0 m) (NUMERAL_BIT0 n) = |
1193 EXP (NUMERAL_BIT0 m) n * EXP (NUMERAL_BIT0 m) n) & |
1305 EXP (NUMERAL_BIT0 m) n * EXP (NUMERAL_BIT0 m) n) & |
1194 (ALL (m::nat) n::nat. |
1306 (ALL (m::nat) n::nat. |
1195 EXP (NUMERAL_BIT1 m) (NUMERAL_BIT0 n) = |
1307 EXP (NUMERAL_BIT1 m) (NUMERAL_BIT0 n) = |
1196 EXP (NUMERAL_BIT1 m) n * EXP (NUMERAL_BIT1 m) n) & |
1308 EXP (NUMERAL_BIT1 m) n * EXP (NUMERAL_BIT1 m) n) & |
1197 (ALL n::nat. EXP (0::nat) (NUMERAL_BIT1 n) = (0::nat)) & |
1309 (ALL n::nat. EXP 0 (NUMERAL_BIT1 n) = 0) & |
1198 (ALL (m::nat) n::nat. |
1310 (ALL (m::nat) n::nat. |
1199 EXP (NUMERAL_BIT0 m) (NUMERAL_BIT1 n) = |
1311 EXP (NUMERAL_BIT0 m) (NUMERAL_BIT1 n) = |
1200 NUMERAL_BIT0 m * (EXP (NUMERAL_BIT0 m) n * EXP (NUMERAL_BIT0 m) n)) & |
1312 NUMERAL_BIT0 m * (EXP (NUMERAL_BIT0 m) n * EXP (NUMERAL_BIT0 m) n)) & |
1201 (ALL (m::nat) n::nat. |
1313 (ALL (m::nat) n::nat. |
1202 EXP (NUMERAL_BIT1 m) (NUMERAL_BIT1 n) = |
1314 EXP (NUMERAL_BIT1 m) (NUMERAL_BIT1 n) = |
1203 NUMERAL_BIT1 m * (EXP (NUMERAL_BIT1 m) n * EXP (NUMERAL_BIT1 m) n))" |
1315 NUMERAL_BIT1 m * (EXP (NUMERAL_BIT1 m) n * EXP (NUMERAL_BIT1 m) n))" |
1204 by (import hollight ARITH_EXP) |
1316 by (import hollight ARITH_EXP) |
1205 |
1317 |
1206 lemma ARITH_EVEN: "(ALL x::nat. EVEN x = EVEN x) & |
1318 lemma ARITH_EVEN: "(ALL x::nat. EVEN x = EVEN x) & |
1207 EVEN (0::nat) = True & |
1319 EVEN 0 = True & |
1208 (ALL x::nat. EVEN (NUMERAL_BIT0 x) = True) & |
1320 (ALL x::nat. EVEN (NUMERAL_BIT0 x) = True) & |
1209 (ALL x::nat. EVEN (NUMERAL_BIT1 x) = False)" |
1321 (ALL x::nat. EVEN (NUMERAL_BIT1 x) = False)" |
1210 by (import hollight ARITH_EVEN) |
1322 by (import hollight ARITH_EVEN) |
1211 |
1323 |
1212 lemma ARITH_ODD: "(ALL x::nat. ODD x = ODD x) & |
1324 lemma ARITH_ODD: "(ALL x::nat. ODD x = ODD x) & |
1213 ODD (0::nat) = False & |
1325 ODD 0 = False & |
1214 (ALL x::nat. ODD (NUMERAL_BIT0 x) = False) & |
1326 (ALL x::nat. ODD (NUMERAL_BIT0 x) = False) & |
1215 (ALL x::nat. ODD (NUMERAL_BIT1 x) = True)" |
1327 (ALL x::nat. ODD (NUMERAL_BIT1 x) = True)" |
1216 by (import hollight ARITH_ODD) |
1328 by (import hollight ARITH_ODD) |
1217 |
1329 |
1218 lemma ARITH_LE: "(ALL (x::nat) xa::nat. <= x xa = <= x xa) & |
1330 lemma ARITH_LE: "(ALL (x::nat) xa::nat. <= x xa = <= x xa) & |
1219 <= (0::nat) (0::nat) = True & |
1331 <= 0 0 = True & |
1220 (ALL x::nat. <= (NUMERAL_BIT0 x) (0::nat) = (x = (0::nat))) & |
1332 (ALL x::nat. <= (NUMERAL_BIT0 x) 0 = (x = 0)) & |
1221 (ALL x::nat. <= (NUMERAL_BIT1 x) (0::nat) = False) & |
1333 (ALL x::nat. <= (NUMERAL_BIT1 x) 0 = False) & |
1222 (ALL x::nat. <= (0::nat) (NUMERAL_BIT0 x) = True) & |
1334 (ALL x::nat. <= 0 (NUMERAL_BIT0 x) = True) & |
1223 (ALL x::nat. <= (0::nat) (NUMERAL_BIT1 x) = True) & |
1335 (ALL x::nat. <= 0 (NUMERAL_BIT1 x) = True) & |
1224 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT0 x) (NUMERAL_BIT0 xa) = <= x xa) & |
1336 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT0 x) (NUMERAL_BIT0 xa) = <= x xa) & |
1225 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT0 x) (NUMERAL_BIT1 xa) = <= x xa) & |
1337 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT0 x) (NUMERAL_BIT1 xa) = <= x xa) & |
1226 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT1 x) (NUMERAL_BIT0 xa) = < x xa) & |
1338 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT1 x) (NUMERAL_BIT0 xa) = < x xa) & |
1227 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT1 x) (NUMERAL_BIT1 xa) = <= x xa)" |
1339 (ALL (x::nat) xa::nat. <= (NUMERAL_BIT1 x) (NUMERAL_BIT1 xa) = <= x xa)" |
1228 by (import hollight ARITH_LE) |
1340 by (import hollight ARITH_LE) |
1229 |
1341 |
1230 lemma ARITH_LT: "(ALL (x::nat) xa::nat. < x xa = < x xa) & |
1342 lemma ARITH_LT: "(ALL (x::nat) xa::nat. < x xa = < x xa) & |
1231 < (0::nat) (0::nat) = False & |
1343 < 0 0 = False & |
1232 (ALL x::nat. < (NUMERAL_BIT0 x) (0::nat) = False) & |
1344 (ALL x::nat. < (NUMERAL_BIT0 x) 0 = False) & |
1233 (ALL x::nat. < (NUMERAL_BIT1 x) (0::nat) = False) & |
1345 (ALL x::nat. < (NUMERAL_BIT1 x) 0 = False) & |
1234 (ALL x::nat. < (0::nat) (NUMERAL_BIT0 x) = < (0::nat) x) & |
1346 (ALL x::nat. < 0 (NUMERAL_BIT0 x) = < 0 x) & |
1235 (ALL x::nat. < (0::nat) (NUMERAL_BIT1 x) = True) & |
1347 (ALL x::nat. < 0 (NUMERAL_BIT1 x) = True) & |
1236 (ALL (x::nat) xa::nat. < (NUMERAL_BIT0 x) (NUMERAL_BIT0 xa) = < x xa) & |
1348 (ALL (x::nat) xa::nat. < (NUMERAL_BIT0 x) (NUMERAL_BIT0 xa) = < x xa) & |
1237 (ALL (x::nat) xa::nat. < (NUMERAL_BIT0 x) (NUMERAL_BIT1 xa) = <= x xa) & |
1349 (ALL (x::nat) xa::nat. < (NUMERAL_BIT0 x) (NUMERAL_BIT1 xa) = <= x xa) & |
1238 (ALL (x::nat) xa::nat. < (NUMERAL_BIT1 x) (NUMERAL_BIT0 xa) = < x xa) & |
1350 (ALL (x::nat) xa::nat. < (NUMERAL_BIT1 x) (NUMERAL_BIT0 xa) = < x xa) & |
1239 (ALL (x::nat) xa::nat. < (NUMERAL_BIT1 x) (NUMERAL_BIT1 xa) = < x xa)" |
1351 (ALL (x::nat) xa::nat. < (NUMERAL_BIT1 x) (NUMERAL_BIT1 xa) = < x xa)" |
1240 by (import hollight ARITH_LT) |
1352 by (import hollight ARITH_LT) |
1241 |
1353 |
1242 lemma ARITH_EQ: "(ALL (x::nat) xa::nat. (x = xa) = (x = xa)) & |
1354 lemma ARITH_EQ: "(op &::bool => bool => bool) |
1243 ((0::nat) = (0::nat)) = True & |
1355 ((All::(nat => bool) => bool) |
1244 (ALL x::nat. (NUMERAL_BIT0 x = (0::nat)) = (x = (0::nat))) & |
1356 (%x::nat. |
1245 (ALL x::nat. (NUMERAL_BIT1 x = (0::nat)) = False) & |
1357 (All::(nat => bool) => bool) |
1246 (ALL x::nat. ((0::nat) = NUMERAL_BIT0 x) = ((0::nat) = x)) & |
1358 (%xa::nat. |
1247 (ALL x::nat. ((0::nat) = NUMERAL_BIT1 x) = False) & |
1359 (op =::bool => bool => bool) ((op =::nat => nat => bool) x xa) |
1248 (ALL (x::nat) xa::nat. (NUMERAL_BIT0 x = NUMERAL_BIT0 xa) = (x = xa)) & |
1360 ((op =::nat => nat => bool) x xa)))) |
1249 (ALL (x::nat) xa::nat. (NUMERAL_BIT0 x = NUMERAL_BIT1 xa) = False) & |
1361 ((op &::bool => bool => bool) |
1250 (ALL (x::nat) xa::nat. (NUMERAL_BIT1 x = NUMERAL_BIT0 xa) = False) & |
1362 ((op =::bool => bool => bool) |
1251 (ALL (x::nat) xa::nat. (NUMERAL_BIT1 x = NUMERAL_BIT1 xa) = (x = xa))" |
1363 ((op =::nat => nat => bool) (0::nat) (0::nat)) (True::bool)) |
1364 ((op &::bool => bool => bool) |
|
1365 ((All::(nat => bool) => bool) |
|
1366 (%x::nat. |
|
1367 (op =::bool => bool => bool) |
|
1368 ((op =::nat => nat => bool) ((NUMERAL_BIT0::nat => nat) x) |
|
1369 (0::nat)) |
|
1370 ((op =::nat => nat => bool) x (0::nat)))) |
|
1371 ((op &::bool => bool => bool) |
|
1372 ((All::(nat => bool) => bool) |
|
1373 (%x::nat. |
|
1374 (op =::bool => bool => bool) |
|
1375 ((op =::nat => nat => bool) ((NUMERAL_BIT1::nat => nat) x) |
|
1376 (0::nat)) |
|
1377 (False::bool))) |
|
1378 ((op &::bool => bool => bool) |
|
1379 ((All::(nat => bool) => bool) |
|
1380 (%x::nat. |
|
1381 (op =::bool => bool => bool) |
|
1382 ((op =::nat => nat => bool) (0::nat) |
|
1383 ((NUMERAL_BIT0::nat => nat) x)) |
|
1384 ((op =::nat => nat => bool) (0::nat) x))) |
|
1385 ((op &::bool => bool => bool) |
|
1386 ((All::(nat => bool) => bool) |
|
1387 (%x::nat. |
|
1388 (op =::bool => bool => bool) |
|
1389 ((op =::nat => nat => bool) (0::nat) |
|
1390 ((NUMERAL_BIT1::nat => nat) x)) |
|
1391 (False::bool))) |
|
1392 ((op &::bool => bool => bool) |
|
1393 ((All::(nat => bool) => bool) |
|
1394 (%x::nat. |
|
1395 (All::(nat => bool) => bool) |
|
1396 (%xa::nat. |
|
1397 (op =::bool => bool => bool) |
|
1398 ((op =::nat => nat => bool) |
|
1399 ((NUMERAL_BIT0::nat => nat) x) |
|
1400 ((NUMERAL_BIT0::nat => nat) xa)) |
|
1401 ((op =::nat => nat => bool) x xa)))) |
|
1402 ((op &::bool => bool => bool) |
|
1403 ((All::(nat => bool) => bool) |
|
1404 (%x::nat. |
|
1405 (All::(nat => bool) => bool) |
|
1406 (%xa::nat. |
|
1407 (op =::bool => bool => bool) |
|
1408 ((op =::nat => nat => bool) |
|
1409 ((NUMERAL_BIT0::nat => nat) x) |
|
1410 ((NUMERAL_BIT1::nat => nat) xa)) |
|
1411 (False::bool)))) |
|
1412 ((op &::bool => bool => bool) |
|
1413 ((All::(nat => bool) => bool) |
|
1414 (%x::nat. |
|
1415 (All::(nat => bool) => bool) |
|
1416 (%xa::nat. |
|
1417 (op =::bool => bool => bool) |
|
1418 ((op =::nat => nat => bool) |
|
1419 ((NUMERAL_BIT1::nat => nat) x) |
|
1420 ((NUMERAL_BIT0::nat => nat) xa)) |
|
1421 (False::bool)))) |
|
1422 ((All::(nat => bool) => bool) |
|
1423 (%x::nat. |
|
1424 (All::(nat => bool) => bool) |
|
1425 (%xa::nat. |
|
1426 (op =::bool => bool => bool) |
|
1427 ((op =::nat => nat => bool) |
|
1428 ((NUMERAL_BIT1::nat => nat) x) |
|
1429 ((NUMERAL_BIT1::nat => nat) xa)) |
|
1430 ((op =::nat => nat => bool) x xa))))))))))))" |
|
1252 by (import hollight ARITH_EQ) |
1431 by (import hollight ARITH_EQ) |
1253 |
1432 |
1254 lemma ARITH_SUB: "(ALL (x::nat) xa::nat. x - xa = x - xa) & |
1433 lemma ARITH_SUB: "(op &::bool => bool => bool) |
1255 (0::nat) - (0::nat) = (0::nat) & |
1434 ((All::(nat => bool) => bool) |
1256 (ALL x::nat. (0::nat) - NUMERAL_BIT0 x = (0::nat)) & |
1435 (%x::nat. |
1257 (ALL x::nat. (0::nat) - NUMERAL_BIT1 x = (0::nat)) & |
1436 (All::(nat => bool) => bool) |
1258 (ALL x::nat. NUMERAL_BIT0 x - (0::nat) = NUMERAL_BIT0 x) & |
1437 (%xa::nat. |
1259 (ALL x::nat. NUMERAL_BIT1 x - (0::nat) = NUMERAL_BIT1 x) & |
1438 (op =::nat => nat => bool) ((op -::nat => nat => nat) x xa) |
1260 (ALL (m::nat) n::nat. |
1439 ((op -::nat => nat => nat) x xa)))) |
1261 NUMERAL_BIT0 m - NUMERAL_BIT0 n = NUMERAL_BIT0 (m - n)) & |
1440 ((op &::bool => bool => bool) |
1262 (ALL (m::nat) n::nat. |
1441 ((op =::nat => nat => bool) ((op -::nat => nat => nat) (0::nat) (0::nat)) |
1263 NUMERAL_BIT0 m - NUMERAL_BIT1 n = Pred (NUMERAL_BIT0 (m - n))) & |
1442 (0::nat)) |
1264 (ALL (m::nat) n::nat. |
1443 ((op &::bool => bool => bool) |
1265 NUMERAL_BIT1 m - NUMERAL_BIT0 n = |
1444 ((All::(nat => bool) => bool) |
1266 COND (<= n m) (NUMERAL_BIT1 (m - n)) (0::nat)) & |
1445 (%x::nat. |
1267 (ALL (m::nat) n::nat. |
1446 (op =::nat => nat => bool) |
1268 NUMERAL_BIT1 m - NUMERAL_BIT1 n = NUMERAL_BIT0 (m - n))" |
1447 ((op -::nat => nat => nat) (0::nat) |
1448 ((NUMERAL_BIT0::nat => nat) x)) |
|
1449 (0::nat))) |
|
1450 ((op &::bool => bool => bool) |
|
1451 ((All::(nat => bool) => bool) |
|
1452 (%x::nat. |
|
1453 (op =::nat => nat => bool) |
|
1454 ((op -::nat => nat => nat) (0::nat) |
|
1455 ((NUMERAL_BIT1::nat => nat) x)) |
|
1456 (0::nat))) |
|
1457 ((op &::bool => bool => bool) |
|
1458 ((All::(nat => bool) => bool) |
|
1459 (%x::nat. |
|
1460 (op =::nat => nat => bool) |
|
1461 ((op -::nat => nat => nat) ((NUMERAL_BIT0::nat => nat) x) |
|
1462 (0::nat)) |
|
1463 ((NUMERAL_BIT0::nat => nat) x))) |
|
1464 ((op &::bool => bool => bool) |
|
1465 ((All::(nat => bool) => bool) |
|
1466 (%x::nat. |
|
1467 (op =::nat => nat => bool) |
|
1468 ((op -::nat => nat => nat) ((NUMERAL_BIT1::nat => nat) x) |
|
1469 (0::nat)) |
|
1470 ((NUMERAL_BIT1::nat => nat) x))) |
|
1471 ((op &::bool => bool => bool) |
|
1472 ((All::(nat => bool) => bool) |
|
1473 (%m::nat. |
|
1474 (All::(nat => bool) => bool) |
|
1475 (%n::nat. |
|
1476 (op =::nat => nat => bool) |
|
1477 ((op -::nat => nat => nat) |
|
1478 ((NUMERAL_BIT0::nat => nat) m) |
|
1479 ((NUMERAL_BIT0::nat => nat) n)) |
|
1480 ((NUMERAL_BIT0::nat => nat) |
|
1481 ((op -::nat => nat => nat) m n))))) |
|
1482 ((op &::bool => bool => bool) |
|
1483 ((All::(nat => bool) => bool) |
|
1484 (%m::nat. |
|
1485 (All::(nat => bool) => bool) |
|
1486 (%n::nat. |
|
1487 (op =::nat => nat => bool) |
|
1488 ((op -::nat => nat => nat) |
|
1489 ((NUMERAL_BIT0::nat => nat) m) |
|
1490 ((NUMERAL_BIT1::nat => nat) n)) |
|
1491 ((Pred::nat => nat) |
|
1492 ((NUMERAL_BIT0::nat => nat) |
|
1493 ((op -::nat => nat => nat) m n)))))) |
|
1494 ((op &::bool => bool => bool) |
|
1495 ((All::(nat => bool) => bool) |
|
1496 (%m::nat. |
|
1497 (All::(nat => bool) => bool) |
|
1498 (%n::nat. |
|
1499 (op =::nat => nat => bool) |
|
1500 ((op -::nat => nat => nat) |
|
1501 ((NUMERAL_BIT1::nat => nat) m) |
|
1502 ((NUMERAL_BIT0::nat => nat) n)) |
|
1503 ((COND::bool => nat => nat => nat) |
|
1504 ((<=::nat => nat => bool) n m) |
|
1505 ((NUMERAL_BIT1::nat => nat) |
|
1506 ((op -::nat => nat => nat) m n)) |
|
1507 (0::nat))))) |
|
1508 ((All::(nat => bool) => bool) |
|
1509 (%m::nat. |
|
1510 (All::(nat => bool) => bool) |
|
1511 (%n::nat. |
|
1512 (op =::nat => nat => bool) |
|
1513 ((op -::nat => nat => nat) |
|
1514 ((NUMERAL_BIT1::nat => nat) m) |
|
1515 ((NUMERAL_BIT1::nat => nat) n)) |
|
1516 ((NUMERAL_BIT0::nat => nat) |
|
1517 ((op -::nat => nat => nat) m n)))))))))))))" |
|
1269 by (import hollight ARITH_SUB) |
1518 by (import hollight ARITH_SUB) |
1270 |
1519 |
1271 lemma right_th: "(s::nat) * NUMERAL_BIT1 (x::nat) = s + NUMERAL_BIT0 (s * x)" |
1520 lemma right_th: "(s::nat) * NUMERAL_BIT1 (x::nat) = s + NUMERAL_BIT0 (s * x)" |
1272 by (import hollight right_th) |
1521 by (import hollight right_th) |
1273 |
1522 |
1280 (ALL (x::'A::type) y::'A::type. mul x y = mul y x) & |
1529 (ALL (x::'A::type) y::'A::type. mul x y = mul y x) & |
1281 (ALL x::'A::type. mul (r1::'A::type) x = x) & |
1530 (ALL x::'A::type. mul (r1::'A::type) x = x) & |
1282 (ALL x::'A::type. mul r0 x = r0) & |
1531 (ALL x::'A::type. mul r0 x = r0) & |
1283 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
1532 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
1284 mul x (add y z) = add (mul x y) (mul x z)) & |
1533 mul x (add y z) = add (mul x y) (mul x z)) & |
1285 (ALL x::'A::type. (pwr::'A::type => nat => 'A::type) x (0::nat) = r1) & |
1534 (ALL x::'A::type. (pwr::'A::type => nat => 'A::type) x 0 = r1) & |
1286 (ALL (x::'A::type) n::nat. pwr x (Suc n) = mul x (pwr x n)) --> |
1535 (ALL (x::'A::type) n::nat. pwr x (Suc n) = mul x (pwr x n)) --> |
1287 mul r1 (x::'A::type) = x & |
1536 mul r1 (x::'A::type) = x & |
1288 add (mul (a::'A::type) (m::'A::type)) (mul (b::'A::type) m) = |
1537 add (mul (a::'A::type) (m::'A::type)) (mul (b::'A::type) m) = |
1289 mul (add a b) m & |
1538 mul (add a b) m & |
1290 add (mul a m) m = mul (add a r1) m & |
1539 add (mul a m) m = mul (add a r1) m & |
1316 add a c = add c a & |
1565 add a c = add c a & |
1317 add a (add c d) = add (add a c) d & |
1566 add a (add c d) = add (add a c) d & |
1318 mul (pwr x (p::nat)) (pwr x (q::nat)) = pwr x (p + q) & |
1567 mul (pwr x (p::nat)) (pwr x (q::nat)) = pwr x (p + q) & |
1319 mul x (pwr x q) = pwr x (Suc q) & |
1568 mul x (pwr x q) = pwr x (Suc q) & |
1320 mul (pwr x q) x = pwr x (Suc q) & |
1569 mul (pwr x q) x = pwr x (Suc q) & |
1321 mul x x = pwr x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) & |
1570 mul x x = pwr x (NUMERAL_BIT0 (NUMERAL_BIT1 0)) & |
1322 pwr (mul x (y::'A::type)) q = mul (pwr x q) (pwr y q) & |
1571 pwr (mul x (y::'A::type)) q = mul (pwr x q) (pwr y q) & |
1323 pwr (pwr x p) q = pwr x (p * q) & |
1572 pwr (pwr x p) q = pwr x (p * q) & |
1324 pwr x (0::nat) = r1 & |
1573 pwr x 0 = r1 & |
1325 pwr x (NUMERAL_BIT1 (0::nat)) = x & |
1574 pwr x (NUMERAL_BIT1 0) = x & |
1326 mul x (add y (z::'A::type)) = add (mul x y) (mul x z) & |
1575 mul x (add y (z::'A::type)) = add (mul x y) (mul x z) & |
1327 pwr x (Suc q) = mul x (pwr x q)" |
1576 pwr x (Suc q) = mul x (pwr x q)" |
1328 by (import hollight SEMIRING_PTHS) |
1577 by (import hollight SEMIRING_PTHS) |
1329 |
1578 |
1330 lemma sth: "(ALL (x::nat) (y::nat) z::nat. x + (y + z) = x + y + z) & |
1579 lemma sth: "(ALL (x::nat) (y::nat) z::nat. x + (y + z) = x + y + z) & |
1331 (ALL (x::nat) y::nat. x + y = y + x) & |
1580 (ALL (x::nat) y::nat. x + y = y + x) & |
1332 (ALL x::nat. (0::nat) + x = x) & |
1581 (ALL x::nat. 0 + x = x) & |
1333 (ALL (x::nat) (y::nat) z::nat. x * (y * z) = x * y * z) & |
1582 (ALL (x::nat) (y::nat) z::nat. x * (y * z) = x * y * z) & |
1334 (ALL (x::nat) y::nat. x * y = y * x) & |
1583 (ALL (x::nat) y::nat. x * y = y * x) & |
1335 (ALL x::nat. NUMERAL_BIT1 (0::nat) * x = x) & |
1584 (ALL x::nat. NUMERAL_BIT1 0 * x = x) & |
1336 (ALL x::nat. (0::nat) * x = (0::nat)) & |
1585 (ALL x::nat. 0 * x = 0) & |
1337 (ALL (x::nat) (xa::nat) xb::nat. x * (xa + xb) = x * xa + x * xb) & |
1586 (ALL (x::nat) (xa::nat) xb::nat. x * (xa + xb) = x * xa + x * xb) & |
1338 (ALL x::nat. EXP x (0::nat) = NUMERAL_BIT1 (0::nat)) & |
1587 (ALL x::nat. EXP x 0 = NUMERAL_BIT1 0) & |
1339 (ALL (x::nat) xa::nat. EXP x (Suc xa) = x * EXP x xa)" |
1588 (ALL (x::nat) xa::nat. EXP x (Suc xa) = x * EXP x xa)" |
1340 by (import hollight sth) |
1589 by (import hollight sth) |
1341 |
1590 |
1342 lemma NUM_INTEGRAL_LEMMA: "(w::nat) = (x::nat) + (d::nat) & (y::nat) = (z::nat) + (e::nat) --> |
1591 lemma NUM_INTEGRAL_LEMMA: "(w::nat) = (x::nat) + (d::nat) & (y::nat) = (z::nat) + (e::nat) --> |
1343 (w * y + x * z = w * z + x * y) = (w = x | y = z)" |
1592 (w * y + x * z = w * z + x * y) = (w = x | y = z)" |
1344 by (import hollight NUM_INTEGRAL_LEMMA) |
1593 by (import hollight NUM_INTEGRAL_LEMMA) |
1345 |
1594 |
1346 lemma NUM_INTEGRAL: "(ALL x::nat. (0::nat) * x = (0::nat)) & |
1595 lemma NUM_INTEGRAL: "(ALL x::nat. 0 * x = 0) & |
1347 (ALL (x::nat) (xa::nat) xb::nat. (x + xa = x + xb) = (xa = xb)) & |
1596 (ALL (x::nat) (xa::nat) xb::nat. (x + xa = x + xb) = (xa = xb)) & |
1348 (ALL (w::nat) (x::nat) (y::nat) z::nat. |
1597 (ALL (w::nat) (x::nat) (y::nat) z::nat. |
1349 (w * y + x * z = w * z + x * y) = (w = x | y = z))" |
1598 (w * y + x * z = w * z + x * y) = (w = x | y = z))" |
1350 by (import hollight NUM_INTEGRAL) |
1599 by (import hollight NUM_INTEGRAL) |
1351 |
1600 |
1358 |
1607 |
1359 constdefs |
1608 constdefs |
1360 NUMPAIR :: "nat => nat => nat" |
1609 NUMPAIR :: "nat => nat => nat" |
1361 "NUMPAIR == |
1610 "NUMPAIR == |
1362 %(u::nat) ua::nat. |
1611 %(u::nat) ua::nat. |
1363 EXP (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) u * |
1612 EXP (NUMERAL_BIT0 (NUMERAL_BIT1 0)) u * |
1364 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * ua + NUMERAL_BIT1 (0::nat))" |
1613 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * ua + NUMERAL_BIT1 0)" |
1365 |
1614 |
1366 lemma DEF_NUMPAIR: "NUMPAIR = |
1615 lemma DEF_NUMPAIR: "NUMPAIR = |
1367 (%(u::nat) ua::nat. |
1616 (%(u::nat) ua::nat. |
1368 EXP (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) u * |
1617 EXP (NUMERAL_BIT0 (NUMERAL_BIT1 0)) u * |
1369 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * ua + NUMERAL_BIT1 (0::nat)))" |
1618 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * ua + NUMERAL_BIT1 0))" |
1370 by (import hollight DEF_NUMPAIR) |
1619 by (import hollight DEF_NUMPAIR) |
1371 |
1620 |
1372 lemma NUMPAIR_INJ_LEMMA: "ALL (x::nat) (xa::nat) (xb::nat) xc::nat. |
1621 lemma NUMPAIR_INJ_LEMMA: "ALL (x::nat) (xa::nat) (xb::nat) xc::nat. |
1373 NUMPAIR x xa = NUMPAIR xb xc --> x = xb" |
1622 NUMPAIR x xa = NUMPAIR xb xc --> x = xb" |
1374 by (import hollight NUMPAIR_INJ_LEMMA) |
1623 by (import hollight NUMPAIR_INJ_LEMMA) |
1403 |
1652 |
1404 constdefs |
1653 constdefs |
1405 NUMSUM :: "bool => nat => nat" |
1654 NUMSUM :: "bool => nat => nat" |
1406 "NUMSUM == |
1655 "NUMSUM == |
1407 %(u::bool) ua::nat. |
1656 %(u::bool) ua::nat. |
1408 COND u (Suc (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * ua)) |
1657 COND u (Suc (NUMERAL_BIT0 (NUMERAL_BIT1 0) * ua)) |
1409 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * ua)" |
1658 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * ua)" |
1410 |
1659 |
1411 lemma DEF_NUMSUM: "NUMSUM = |
1660 lemma DEF_NUMSUM: "NUMSUM = |
1412 (%(u::bool) ua::nat. |
1661 (%(u::bool) ua::nat. |
1413 COND u (Suc (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * ua)) |
1662 COND u (Suc (NUMERAL_BIT0 (NUMERAL_BIT1 0) * ua)) |
1414 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * ua))" |
1663 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * ua))" |
1415 by (import hollight DEF_NUMSUM) |
1664 by (import hollight DEF_NUMSUM) |
1416 |
1665 |
1417 lemma NUMSUM_INJ: "ALL (b1::bool) (x1::nat) (b2::bool) x2::nat. |
1666 lemma NUMSUM_INJ: "ALL (b1::bool) (x1::nat) (b2::bool) x2::nat. |
1418 (NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)" |
1667 (NUMSUM b1 x1 = NUMSUM b2 x2) = (b1 = b2 & x1 = x2)" |
1419 by (import hollight NUMSUM_INJ) |
1668 by (import hollight NUMSUM_INJ) |
1441 (SOME Y::nat => nat. |
1690 (SOME Y::nat => nat. |
1442 ALL (x::bool) y::nat. NUMLEFT (NUMSUM x y) = x & Y (NUMSUM x y) = y)" |
1691 ALL (x::bool) y::nat. NUMLEFT (NUMSUM x y) = x & Y (NUMSUM x y) = y)" |
1443 by (import hollight DEF_NUMRIGHT) |
1692 by (import hollight DEF_NUMRIGHT) |
1444 |
1693 |
1445 constdefs |
1694 constdefs |
1446 INJN :: "nat => nat => 'A::type => bool" |
1695 INJN :: "nat => nat => 'A => bool" |
1447 "INJN == %(u::nat) (n::nat) a::'A::type. n = u" |
1696 "INJN == %(u::nat) (n::nat) a::'A::type. n = u" |
1448 |
1697 |
1449 lemma DEF_INJN: "INJN = (%(u::nat) (n::nat) a::'A::type. n = u)" |
1698 lemma DEF_INJN: "INJN = (%(u::nat) (n::nat) a::'A::type. n = u)" |
1450 by (import hollight DEF_INJN) |
1699 by (import hollight DEF_INJN) |
1451 |
1700 |
1460 ((INJN::nat => nat => 'A::type => bool) n2)) |
1709 ((INJN::nat => nat => 'A::type => bool) n2)) |
1461 ((op =::nat => nat => bool) n1 n2)))" |
1710 ((op =::nat => nat => bool) n1 n2)))" |
1462 by (import hollight INJN_INJ) |
1711 by (import hollight INJN_INJ) |
1463 |
1712 |
1464 constdefs |
1713 constdefs |
1465 INJA :: "'A::type => nat => 'A::type => bool" |
1714 INJA :: "'A => nat => 'A => bool" |
1466 "INJA == %(u::'A::type) (n::nat) b::'A::type. b = u" |
1715 "INJA == %(u::'A::type) (n::nat) b::'A::type. b = u" |
1467 |
1716 |
1468 lemma DEF_INJA: "INJA = (%(u::'A::type) (n::nat) b::'A::type. b = u)" |
1717 lemma DEF_INJA: "INJA = (%(u::'A::type) (n::nat) b::'A::type. b = u)" |
1469 by (import hollight DEF_INJA) |
1718 by (import hollight DEF_INJA) |
1470 |
1719 |
1471 lemma INJA_INJ: "ALL (a1::'A::type) a2::'A::type. (INJA a1 = INJA a2) = (a1 = a2)" |
1720 lemma INJA_INJ: "ALL (a1::'A::type) a2::'A::type. (INJA a1 = INJA a2) = (a1 = a2)" |
1472 by (import hollight INJA_INJ) |
1721 by (import hollight INJA_INJ) |
1473 |
1722 |
1474 constdefs |
1723 constdefs |
1475 INJF :: "(nat => nat => 'A::type => bool) => nat => 'A::type => bool" |
1724 INJF :: "(nat => nat => 'A => bool) => nat => 'A => bool" |
1476 "INJF == %(u::nat => nat => 'A::type => bool) n::nat. u (NUMFST n) (NUMSND n)" |
1725 "INJF == %(u::nat => nat => 'A::type => bool) n::nat. u (NUMFST n) (NUMSND n)" |
1477 |
1726 |
1478 lemma DEF_INJF: "INJF = |
1727 lemma DEF_INJF: "INJF = |
1479 (%(u::nat => nat => 'A::type => bool) n::nat. u (NUMFST n) (NUMSND n))" |
1728 (%(u::nat => nat => 'A::type => bool) n::nat. u (NUMFST n) (NUMSND n))" |
1480 by (import hollight DEF_INJF) |
1729 by (import hollight DEF_INJF) |
1482 lemma INJF_INJ: "ALL (f1::nat => nat => 'A::type => bool) f2::nat => nat => 'A::type => bool. |
1731 lemma INJF_INJ: "ALL (f1::nat => nat => 'A::type => bool) f2::nat => nat => 'A::type => bool. |
1483 (INJF f1 = INJF f2) = (f1 = f2)" |
1732 (INJF f1 = INJF f2) = (f1 = f2)" |
1484 by (import hollight INJF_INJ) |
1733 by (import hollight INJF_INJ) |
1485 |
1734 |
1486 constdefs |
1735 constdefs |
1487 INJP :: "(nat => 'A::type => bool) |
1736 INJP :: "(nat => 'A => bool) => (nat => 'A => bool) => nat => 'A => bool" |
1488 => (nat => 'A::type => bool) => nat => 'A::type => bool" |
|
1489 "INJP == |
1737 "INJP == |
1490 %(u::nat => 'A::type => bool) (ua::nat => 'A::type => bool) (n::nat) |
1738 %(u::nat => 'A::type => bool) (ua::nat => 'A::type => bool) (n::nat) |
1491 a::'A::type. COND (NUMLEFT n) (u (NUMRIGHT n) a) (ua (NUMRIGHT n) a)" |
1739 a::'A::type. COND (NUMLEFT n) (u (NUMRIGHT n) a) (ua (NUMRIGHT n) a)" |
1492 |
1740 |
1493 lemma DEF_INJP: "INJP = |
1741 lemma DEF_INJP: "INJP = |
1499 (f2::nat => 'A::type => bool) f2'::nat => 'A::type => bool. |
1747 (f2::nat => 'A::type => bool) f2'::nat => 'A::type => bool. |
1500 (INJP f1 f2 = INJP f1' f2') = (f1 = f1' & f2 = f2')" |
1748 (INJP f1 f2 = INJP f1' f2') = (f1 = f1' & f2 = f2')" |
1501 by (import hollight INJP_INJ) |
1749 by (import hollight INJP_INJ) |
1502 |
1750 |
1503 constdefs |
1751 constdefs |
1504 ZCONSTR :: "nat |
1752 ZCONSTR :: "nat => 'A => (nat => nat => 'A => bool) => nat => 'A => bool" |
1505 => 'A::type => (nat => nat => 'A::type => bool) => nat => 'A::type => bool" |
|
1506 "ZCONSTR == |
1753 "ZCONSTR == |
1507 %(u::nat) (ua::'A::type) ub::nat => nat => 'A::type => bool. |
1754 %(u::nat) (ua::'A::type) ub::nat => nat => 'A::type => bool. |
1508 INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub))" |
1755 INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub))" |
1509 |
1756 |
1510 lemma DEF_ZCONSTR: "ZCONSTR = |
1757 lemma DEF_ZCONSTR: "ZCONSTR = |
1511 (%(u::nat) (ua::'A::type) ub::nat => nat => 'A::type => bool. |
1758 (%(u::nat) (ua::'A::type) ub::nat => nat => 'A::type => bool. |
1512 INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub)))" |
1759 INJP (INJN (Suc u)) (INJP (INJA ua) (INJF ub)))" |
1513 by (import hollight DEF_ZCONSTR) |
1760 by (import hollight DEF_ZCONSTR) |
1514 |
1761 |
1515 constdefs |
1762 constdefs |
1516 ZBOT :: "nat => 'A::type => bool" |
1763 ZBOT :: "nat => 'A => bool" |
1517 "ZBOT == INJP (INJN (0::nat)) (SOME z::nat => 'A::type => bool. True)" |
1764 "ZBOT == INJP (INJN 0) (SOME z::nat => 'A::type => bool. True)" |
1518 |
1765 |
1519 lemma DEF_ZBOT: "ZBOT = INJP (INJN (0::nat)) (SOME z::nat => 'A::type => bool. True)" |
1766 lemma DEF_ZBOT: "ZBOT = INJP (INJN 0) (SOME z::nat => 'A::type => bool. True)" |
1520 by (import hollight DEF_ZBOT) |
1767 by (import hollight DEF_ZBOT) |
1521 |
1768 |
1522 lemma ZCONSTR_ZBOT: "ALL (x::nat) (xa::'A::type) xb::nat => nat => 'A::type => bool. |
1769 lemma ZCONSTR_ZBOT: "ALL (x::nat) (xa::'A::type) xb::nat => nat => 'A::type => bool. |
1523 ZCONSTR x xa xb ~= ZBOT" |
1770 ZCONSTR x xa xb ~= ZBOT" |
1524 by (import hollight ZCONSTR_ZBOT) |
1771 by (import hollight ZCONSTR_ZBOT) |
1525 |
1772 |
1526 constdefs |
1773 constdefs |
1527 ZRECSPACE :: "(nat => 'A::type => bool) => bool" |
1774 ZRECSPACE :: "(nat => 'A => bool) => bool" |
1528 "ZRECSPACE == |
1775 "ZRECSPACE == |
1529 %a::nat => 'A::type => bool. |
1776 %a::nat => 'A::type => bool. |
1530 ALL ZRECSPACE'::(nat => 'A::type => bool) => bool. |
1777 ALL ZRECSPACE'::(nat => 'A::type => bool) => bool. |
1531 (ALL a::nat => 'A::type => bool. |
1778 (ALL a::nat => 'A::type => bool. |
1532 a = ZBOT | |
1779 a = ZBOT | |
1557 |
1804 |
1558 syntax |
1805 syntax |
1559 "_mk_rec" :: _ ("'_mk'_rec") |
1806 "_mk_rec" :: _ ("'_mk'_rec") |
1560 |
1807 |
1561 lemmas "TYDEF_recspace_@intern" = typedef_hol2hollight |
1808 lemmas "TYDEF_recspace_@intern" = typedef_hol2hollight |
1562 [where a="a :: 'A::type recspace" and r=r , |
1809 [where a="a :: 'A recspace" and r=r , |
1563 OF type_definition_recspace] |
1810 OF type_definition_recspace] |
1564 |
1811 |
1565 constdefs |
1812 constdefs |
1566 BOTTOM :: "'A::type recspace" |
1813 BOTTOM :: "'A recspace" |
1567 "BOTTOM == _mk_rec ZBOT" |
1814 "(op ==::'A::type recspace => 'A::type recspace => prop) |
1568 |
1815 (BOTTOM::'A::type recspace) |
1569 lemma DEF_BOTTOM: "BOTTOM = _mk_rec ZBOT" |
1816 ((_mk_rec::(nat => 'A::type => bool) => 'A::type recspace) |
1817 (ZBOT::nat => 'A::type => bool))" |
|
1818 |
|
1819 lemma DEF_BOTTOM: "(op =::'A::type recspace => 'A::type recspace => bool) |
|
1820 (BOTTOM::'A::type recspace) |
|
1821 ((_mk_rec::(nat => 'A::type => bool) => 'A::type recspace) |
|
1822 (ZBOT::nat => 'A::type => bool))" |
|
1570 by (import hollight DEF_BOTTOM) |
1823 by (import hollight DEF_BOTTOM) |
1571 |
1824 |
1572 constdefs |
1825 constdefs |
1573 CONSTR :: "nat => 'A::type => (nat => 'A::type recspace) => 'A::type recspace" |
1826 CONSTR :: "nat => 'A => (nat => 'A recspace) => 'A recspace" |
1574 "CONSTR == |
1827 "(op ==::(nat => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
1575 %(u::nat) (ua::'A::type) ub::nat => 'A::type recspace. |
1828 => (nat |
1576 _mk_rec (ZCONSTR u ua (%n::nat. _dest_rec (ub n)))" |
1829 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
1577 |
1830 => prop) |
1578 lemma DEF_CONSTR: "CONSTR = |
1831 (CONSTR::nat |
1579 (%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace. |
1832 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
1580 _mk_rec (ZCONSTR u ua (%n::nat. _dest_rec (ub n))))" |
1833 (%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace. |
1834 (_mk_rec::(nat => 'A::type => bool) => 'A::type recspace) |
|
1835 ((ZCONSTR::nat |
|
1836 => 'A::type |
|
1837 => (nat => nat => 'A::type => bool) |
|
1838 => nat => 'A::type => bool) |
|
1839 u ua |
|
1840 (%n::nat. |
|
1841 (_dest_rec::'A::type recspace => nat => 'A::type => bool) |
|
1842 (ub n))))" |
|
1843 |
|
1844 lemma DEF_CONSTR: "(op =::(nat => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
|
1845 => (nat |
|
1846 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
|
1847 => bool) |
|
1848 (CONSTR::nat |
|
1849 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
|
1850 (%(u::nat) (ua::'A::type) ub::nat => 'A::type recspace. |
|
1851 (_mk_rec::(nat => 'A::type => bool) => 'A::type recspace) |
|
1852 ((ZCONSTR::nat |
|
1853 => 'A::type |
|
1854 => (nat => nat => 'A::type => bool) |
|
1855 => nat => 'A::type => bool) |
|
1856 u ua |
|
1857 (%n::nat. |
|
1858 (_dest_rec::'A::type recspace => nat => 'A::type => bool) |
|
1859 (ub n))))" |
|
1581 by (import hollight DEF_CONSTR) |
1860 by (import hollight DEF_CONSTR) |
1582 |
1861 |
1583 lemma MK_REC_INJ: "ALL (x::nat => 'A::type => bool) y::nat => 'A::type => bool. |
1862 lemma MK_REC_INJ: "(All::((nat => 'A::type => bool) => bool) => bool) |
1584 _mk_rec x = _mk_rec y --> ZRECSPACE x & ZRECSPACE y --> x = y" |
1863 (%x::nat => 'A::type => bool. |
1864 (All::((nat => 'A::type => bool) => bool) => bool) |
|
1865 (%y::nat => 'A::type => bool. |
|
1866 (op -->::bool => bool => bool) |
|
1867 ((op =::'A::type recspace => 'A::type recspace => bool) |
|
1868 ((_mk_rec::(nat => 'A::type => bool) => 'A::type recspace) x) |
|
1869 ((_mk_rec::(nat => 'A::type => bool) => 'A::type recspace) y)) |
|
1870 ((op -->::bool => bool => bool) |
|
1871 ((op &::bool => bool => bool) |
|
1872 ((ZRECSPACE::(nat => 'A::type => bool) => bool) x) |
|
1873 ((ZRECSPACE::(nat => 'A::type => bool) => bool) y)) |
|
1874 ((op =::(nat => 'A::type => bool) |
|
1875 => (nat => 'A::type => bool) => bool) |
|
1876 x y))))" |
|
1585 by (import hollight MK_REC_INJ) |
1877 by (import hollight MK_REC_INJ) |
1586 |
1878 |
1587 lemma CONSTR_BOT: "ALL (c::nat) (i::'A::type) r::nat => 'A::type recspace. |
1879 lemma CONSTR_BOT: "ALL (c::nat) (i::'A::type) r::nat => 'A::type recspace. |
1588 CONSTR c i r ~= BOTTOM" |
1880 CONSTR c i r ~= BOTTOM" |
1589 by (import hollight CONSTR_BOT) |
1881 by (import hollight CONSTR_BOT) |
1607 ALL (c::nat) (i::'A::type) r::nat => 'A::type recspace. |
1899 ALL (c::nat) (i::'A::type) r::nat => 'A::type recspace. |
1608 f (CONSTR c i r) = Fn c i r (%n::nat. f (r n))" |
1900 f (CONSTR c i r) = Fn c i r (%n::nat. f (r n))" |
1609 by (import hollight CONSTR_REC) |
1901 by (import hollight CONSTR_REC) |
1610 |
1902 |
1611 constdefs |
1903 constdefs |
1612 FCONS :: "'A::type => (nat => 'A::type) => nat => 'A::type" |
1904 FCONS :: "'A => (nat => 'A) => nat => 'A" |
1613 "FCONS == |
1905 "FCONS == |
1614 SOME FCONS::'A::type => (nat => 'A::type) => nat => 'A::type. |
1906 SOME FCONS::'A::type => (nat => 'A::type) => nat => 'A::type. |
1615 (ALL (a::'A::type) f::nat => 'A::type. FCONS a f (0::nat) = a) & |
1907 (ALL (a::'A::type) f::nat => 'A::type. FCONS a f 0 = a) & |
1616 (ALL (a::'A::type) (f::nat => 'A::type) n::nat. FCONS a f (Suc n) = f n)" |
1908 (ALL (a::'A::type) (f::nat => 'A::type) n::nat. FCONS a f (Suc n) = f n)" |
1617 |
1909 |
1618 lemma DEF_FCONS: "FCONS = |
1910 lemma DEF_FCONS: "FCONS = |
1619 (SOME FCONS::'A::type => (nat => 'A::type) => nat => 'A::type. |
1911 (SOME FCONS::'A::type => (nat => 'A::type) => nat => 'A::type. |
1620 (ALL (a::'A::type) f::nat => 'A::type. FCONS a f (0::nat) = a) & |
1912 (ALL (a::'A::type) f::nat => 'A::type. FCONS a f 0 = a) & |
1621 (ALL (a::'A::type) (f::nat => 'A::type) n::nat. |
1913 (ALL (a::'A::type) (f::nat => 'A::type) n::nat. |
1622 FCONS a f (Suc n) = f n))" |
1914 FCONS a f (Suc n) = f n))" |
1623 by (import hollight DEF_FCONS) |
1915 by (import hollight DEF_FCONS) |
1624 |
1916 |
1625 lemma FCONS_UNDO: "ALL f::nat => 'A::type. f = FCONS (f (0::nat)) (f o Suc)" |
1917 lemma FCONS_UNDO: "ALL f::nat => 'A::type. f = FCONS (f 0) (f o Suc)" |
1626 by (import hollight FCONS_UNDO) |
1918 by (import hollight FCONS_UNDO) |
1627 |
1919 |
1628 constdefs |
1920 constdefs |
1629 FNIL :: "nat => 'A::type" |
1921 FNIL :: "nat => 'A" |
1630 "FNIL == %u::nat. SOME x::'A::type. True" |
1922 "FNIL == %u::nat. SOME x::'A::type. True" |
1631 |
1923 |
1632 lemma DEF_FNIL: "FNIL = (%u::nat. SOME x::'A::type. True)" |
1924 lemma DEF_FNIL: "FNIL = (%u::nat. SOME x::'A::type. True)" |
1633 by (import hollight DEF_FNIL) |
1925 by (import hollight DEF_FNIL) |
1634 |
1926 |
1693 |
1985 |
1694 syntax |
1986 syntax |
1695 "_mk_sum" :: _ ("'_mk'_sum") |
1987 "_mk_sum" :: _ ("'_mk'_sum") |
1696 |
1988 |
1697 lemmas "TYDEF_sum_@intern" = typedef_hol2hollight |
1989 lemmas "TYDEF_sum_@intern" = typedef_hol2hollight |
1698 [where a="a :: ('A::type, 'B::type) sum" and r=r , |
1990 [where a="a :: ('A, 'B) sum" and r=r , |
1699 OF type_definition_sum] |
1991 OF type_definition_sum] |
1700 |
1992 |
1701 constdefs |
1993 constdefs |
1702 INL :: "'A::type => ('A::type, 'B::type) sum" |
1994 INL :: "'A => ('A, 'B) sum" |
1703 "INL == |
1995 "(op ==::('A::type => ('A::type, 'B::type) sum) |
1704 %a::'A::type. |
1996 => ('A::type => ('A::type, 'B::type) sum) => prop) |
1705 _mk_sum (CONSTR (0::nat) (a, SOME v::'B::type. True) (%n::nat. BOTTOM))" |
1997 (INL::'A::type => ('A::type, 'B::type) sum) |
1706 |
1998 (%a::'A::type. |
1707 lemma DEF_INL: "INL = |
1999 (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum) |
1708 (%a::'A::type. |
2000 ((CONSTR::nat |
1709 _mk_sum (CONSTR (0::nat) (a, SOME v::'B::type. True) (%n::nat. BOTTOM)))" |
2001 => 'A::type * 'B::type |
2002 => (nat => ('A::type * 'B::type) recspace) |
|
2003 => ('A::type * 'B::type) recspace) |
|
2004 (0::nat) |
|
2005 ((Pair::'A::type => 'B::type => 'A::type * 'B::type) a |
|
2006 ((Eps::('B::type => bool) => 'B::type) |
|
2007 (%v::'B::type. True::bool))) |
|
2008 (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))" |
|
2009 |
|
2010 lemma DEF_INL: "(op =::('A::type => ('A::type, 'B::type) sum) |
|
2011 => ('A::type => ('A::type, 'B::type) sum) => bool) |
|
2012 (INL::'A::type => ('A::type, 'B::type) sum) |
|
2013 (%a::'A::type. |
|
2014 (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum) |
|
2015 ((CONSTR::nat |
|
2016 => 'A::type * 'B::type |
|
2017 => (nat => ('A::type * 'B::type) recspace) |
|
2018 => ('A::type * 'B::type) recspace) |
|
2019 (0::nat) |
|
2020 ((Pair::'A::type => 'B::type => 'A::type * 'B::type) a |
|
2021 ((Eps::('B::type => bool) => 'B::type) |
|
2022 (%v::'B::type. True::bool))) |
|
2023 (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))" |
|
1710 by (import hollight DEF_INL) |
2024 by (import hollight DEF_INL) |
1711 |
2025 |
1712 constdefs |
2026 constdefs |
1713 INR :: "'B::type => ('A::type, 'B::type) sum" |
2027 INR :: "'B => ('A, 'B) sum" |
1714 "INR == |
2028 "(op ==::('B::type => ('A::type, 'B::type) sum) |
1715 %a::'B::type. |
2029 => ('B::type => ('A::type, 'B::type) sum) => prop) |
1716 _mk_sum |
2030 (INR::'B::type => ('A::type, 'B::type) sum) |
1717 (CONSTR (Suc (0::nat)) (SOME v::'A::type. True, a) (%n::nat. BOTTOM))" |
2031 (%a::'B::type. |
1718 |
2032 (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum) |
1719 lemma DEF_INR: "INR = |
2033 ((CONSTR::nat |
1720 (%a::'B::type. |
2034 => 'A::type * 'B::type |
1721 _mk_sum |
2035 => (nat => ('A::type * 'B::type) recspace) |
1722 (CONSTR (Suc (0::nat)) (SOME v::'A::type. True, a) (%n::nat. BOTTOM)))" |
2036 => ('A::type * 'B::type) recspace) |
2037 ((Suc::nat => nat) (0::nat)) |
|
2038 ((Pair::'A::type => 'B::type => 'A::type * 'B::type) |
|
2039 ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool)) |
|
2040 a) |
|
2041 (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))" |
|
2042 |
|
2043 lemma DEF_INR: "(op =::('B::type => ('A::type, 'B::type) sum) |
|
2044 => ('B::type => ('A::type, 'B::type) sum) => bool) |
|
2045 (INR::'B::type => ('A::type, 'B::type) sum) |
|
2046 (%a::'B::type. |
|
2047 (_mk_sum::('A::type * 'B::type) recspace => ('A::type, 'B::type) sum) |
|
2048 ((CONSTR::nat |
|
2049 => 'A::type * 'B::type |
|
2050 => (nat => ('A::type * 'B::type) recspace) |
|
2051 => ('A::type * 'B::type) recspace) |
|
2052 ((Suc::nat => nat) (0::nat)) |
|
2053 ((Pair::'A::type => 'B::type => 'A::type * 'B::type) |
|
2054 ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool)) |
|
2055 a) |
|
2056 (%n::nat. BOTTOM::('A::type * 'B::type) recspace)))" |
|
1723 by (import hollight DEF_INR) |
2057 by (import hollight DEF_INR) |
1724 |
2058 |
1725 consts |
2059 consts |
1726 OUTL :: "('A::type, 'B::type) sum => 'A::type" |
2060 OUTL :: "('A, 'B) sum => 'A" |
1727 |
2061 |
1728 defs |
2062 defs |
1729 OUTL_def: "hollight.OUTL == |
2063 OUTL_def: "hollight.OUTL == |
1730 SOME OUTL::('A::type, 'B::type) sum => 'A::type. |
2064 SOME OUTL::('A::type, 'B::type) sum => 'A::type. |
1731 ALL x::'A::type. OUTL (INL x) = x" |
2065 ALL x::'A::type. OUTL (INL x) = x" |
1734 (SOME OUTL::('A::type, 'B::type) sum => 'A::type. |
2068 (SOME OUTL::('A::type, 'B::type) sum => 'A::type. |
1735 ALL x::'A::type. OUTL (INL x) = x)" |
2069 ALL x::'A::type. OUTL (INL x) = x)" |
1736 by (import hollight DEF_OUTL) |
2070 by (import hollight DEF_OUTL) |
1737 |
2071 |
1738 consts |
2072 consts |
1739 OUTR :: "('A::type, 'B::type) sum => 'B::type" |
2073 OUTR :: "('A, 'B) sum => 'B" |
1740 |
2074 |
1741 defs |
2075 defs |
1742 OUTR_def: "hollight.OUTR == |
2076 OUTR_def: "hollight.OUTR == |
1743 SOME OUTR::('A::type, 'B::type) sum => 'B::type. |
2077 SOME OUTR::('A::type, 'B::type) sum => 'B::type. |
1744 ALL y::'B::type. OUTR (INR y) = y" |
2078 ALL y::'B::type. OUTR (INR y) = y" |
1788 |
2122 |
1789 syntax |
2123 syntax |
1790 "_mk_option" :: _ ("'_mk'_option") |
2124 "_mk_option" :: _ ("'_mk'_option") |
1791 |
2125 |
1792 lemmas "TYDEF_option_@intern" = typedef_hol2hollight |
2126 lemmas "TYDEF_option_@intern" = typedef_hol2hollight |
1793 [where a="a :: 'A::type hollight.option" and r=r , |
2127 [where a="a :: 'A hollight.option" and r=r , |
1794 OF type_definition_option] |
2128 OF type_definition_option] |
1795 |
2129 |
1796 constdefs |
2130 constdefs |
1797 NONE :: "'A::type hollight.option" |
2131 NONE :: "'A hollight.option" |
1798 "NONE == |
2132 "(op ==::'A::type hollight.option => 'A::type hollight.option => prop) |
1799 _mk_option (CONSTR (0::nat) (SOME v::'A::type. True) (%n::nat. BOTTOM))" |
2133 (NONE::'A::type hollight.option) |
1800 |
2134 ((_mk_option::'A::type recspace => 'A::type hollight.option) |
1801 lemma DEF_NONE: "NONE = |
2135 ((CONSTR::nat |
1802 _mk_option (CONSTR (0::nat) (SOME v::'A::type. True) (%n::nat. BOTTOM))" |
2136 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
2137 (0::nat) |
|
2138 ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool)) |
|
2139 (%n::nat. BOTTOM::'A::type recspace)))" |
|
2140 |
|
2141 lemma DEF_NONE: "(op =::'A::type hollight.option => 'A::type hollight.option => bool) |
|
2142 (NONE::'A::type hollight.option) |
|
2143 ((_mk_option::'A::type recspace => 'A::type hollight.option) |
|
2144 ((CONSTR::nat |
|
2145 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
|
2146 (0::nat) |
|
2147 ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool)) |
|
2148 (%n::nat. BOTTOM::'A::type recspace)))" |
|
1803 by (import hollight DEF_NONE) |
2149 by (import hollight DEF_NONE) |
1804 |
2150 |
1805 consts |
2151 consts |
1806 SOME :: "'A::type => 'A::type hollight.option" ("SOME") |
2152 SOME :: "'A => 'A hollight.option" ("SOME") |
1807 |
2153 |
1808 defs |
2154 defs |
1809 SOME_def: "SOME == %a::'A::type. _mk_option (CONSTR (Suc (0::nat)) a (%n::nat. BOTTOM))" |
2155 SOME_def: "(op ==::('A::type => 'A::type hollight.option) |
1810 |
2156 => ('A::type => 'A::type hollight.option) => prop) |
1811 lemma DEF_SOME: "SOME = |
2157 (SOME::'A::type => 'A::type hollight.option) |
1812 (%a::'A::type. _mk_option (CONSTR (Suc (0::nat)) a (%n::nat. BOTTOM)))" |
2158 (%a::'A::type. |
2159 (_mk_option::'A::type recspace => 'A::type hollight.option) |
|
2160 ((CONSTR::nat |
|
2161 => 'A::type |
|
2162 => (nat => 'A::type recspace) => 'A::type recspace) |
|
2163 ((Suc::nat => nat) (0::nat)) a |
|
2164 (%n::nat. BOTTOM::'A::type recspace)))" |
|
2165 |
|
2166 lemma DEF_SOME: "(op =::('A::type => 'A::type hollight.option) |
|
2167 => ('A::type => 'A::type hollight.option) => bool) |
|
2168 (SOME::'A::type => 'A::type hollight.option) |
|
2169 (%a::'A::type. |
|
2170 (_mk_option::'A::type recspace => 'A::type hollight.option) |
|
2171 ((CONSTR::nat |
|
2172 => 'A::type |
|
2173 => (nat => 'A::type recspace) => 'A::type recspace) |
|
2174 ((Suc::nat => nat) (0::nat)) a |
|
2175 (%n::nat. BOTTOM::'A::type recspace)))" |
|
1813 by (import hollight DEF_SOME) |
2176 by (import hollight DEF_SOME) |
1814 |
2177 |
1815 typedef (open) ('A) list = "(Collect::('A::type recspace => bool) => 'A::type recspace set) |
2178 typedef (open) ('A) list = "(Collect::('A::type recspace => bool) => 'A::type recspace set) |
1816 (%a::'A::type recspace. |
2179 (%a::'A::type recspace. |
1817 (All::(('A::type recspace => bool) => bool) => bool) |
2180 (All::(('A::type recspace => bool) => bool) => bool) |
1857 |
2220 |
1858 syntax |
2221 syntax |
1859 "_mk_list" :: _ ("'_mk'_list") |
2222 "_mk_list" :: _ ("'_mk'_list") |
1860 |
2223 |
1861 lemmas "TYDEF_list_@intern" = typedef_hol2hollight |
2224 lemmas "TYDEF_list_@intern" = typedef_hol2hollight |
1862 [where a="a :: 'A::type hollight.list" and r=r , |
2225 [where a="a :: 'A hollight.list" and r=r , |
1863 OF type_definition_list] |
2226 OF type_definition_list] |
1864 |
2227 |
1865 constdefs |
2228 constdefs |
1866 NIL :: "'A::type hollight.list" |
2229 NIL :: "'A hollight.list" |
1867 "NIL == _mk_list (CONSTR (0::nat) (SOME v::'A::type. True) (%n::nat. BOTTOM))" |
2230 "(op ==::'A::type hollight.list => 'A::type hollight.list => prop) |
1868 |
2231 (NIL::'A::type hollight.list) |
1869 lemma DEF_NIL: "NIL = _mk_list (CONSTR (0::nat) (SOME v::'A::type. True) (%n::nat. BOTTOM))" |
2232 ((_mk_list::'A::type recspace => 'A::type hollight.list) |
2233 ((CONSTR::nat |
|
2234 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
|
2235 (0::nat) |
|
2236 ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool)) |
|
2237 (%n::nat. BOTTOM::'A::type recspace)))" |
|
2238 |
|
2239 lemma DEF_NIL: "(op =::'A::type hollight.list => 'A::type hollight.list => bool) |
|
2240 (NIL::'A::type hollight.list) |
|
2241 ((_mk_list::'A::type recspace => 'A::type hollight.list) |
|
2242 ((CONSTR::nat |
|
2243 => 'A::type => (nat => 'A::type recspace) => 'A::type recspace) |
|
2244 (0::nat) |
|
2245 ((Eps::('A::type => bool) => 'A::type) (%v::'A::type. True::bool)) |
|
2246 (%n::nat. BOTTOM::'A::type recspace)))" |
|
1870 by (import hollight DEF_NIL) |
2247 by (import hollight DEF_NIL) |
1871 |
2248 |
1872 constdefs |
2249 constdefs |
1873 CONS :: "'A::type => 'A::type hollight.list => 'A::type hollight.list" |
2250 CONS :: "'A => 'A hollight.list => 'A hollight.list" |
1874 "CONS == |
2251 "(op ==::('A::type => 'A::type hollight.list => 'A::type hollight.list) |
1875 %(a0::'A::type) a1::'A::type hollight.list. |
2252 => ('A::type => 'A::type hollight.list => 'A::type hollight.list) |
1876 _mk_list |
2253 => prop) |
1877 (CONSTR (Suc (0::nat)) a0 (FCONS (_dest_list a1) (%n::nat. BOTTOM)))" |
2254 (CONS::'A::type => 'A::type hollight.list => 'A::type hollight.list) |
1878 |
2255 (%(a0::'A::type) a1::'A::type hollight.list. |
1879 lemma DEF_CONS: "CONS = |
2256 (_mk_list::'A::type recspace => 'A::type hollight.list) |
1880 (%(a0::'A::type) a1::'A::type hollight.list. |
2257 ((CONSTR::nat |
1881 _mk_list |
2258 => 'A::type |
1882 (CONSTR (Suc (0::nat)) a0 (FCONS (_dest_list a1) (%n::nat. BOTTOM))))" |
2259 => (nat => 'A::type recspace) => 'A::type recspace) |
2260 ((Suc::nat => nat) (0::nat)) a0 |
|
2261 ((FCONS::'A::type recspace |
|
2262 => (nat => 'A::type recspace) => nat => 'A::type recspace) |
|
2263 ((_dest_list::'A::type hollight.list => 'A::type recspace) a1) |
|
2264 (%n::nat. BOTTOM::'A::type recspace))))" |
|
2265 |
|
2266 lemma DEF_CONS: "(op =::('A::type => 'A::type hollight.list => 'A::type hollight.list) |
|
2267 => ('A::type => 'A::type hollight.list => 'A::type hollight.list) |
|
2268 => bool) |
|
2269 (CONS::'A::type => 'A::type hollight.list => 'A::type hollight.list) |
|
2270 (%(a0::'A::type) a1::'A::type hollight.list. |
|
2271 (_mk_list::'A::type recspace => 'A::type hollight.list) |
|
2272 ((CONSTR::nat |
|
2273 => 'A::type |
|
2274 => (nat => 'A::type recspace) => 'A::type recspace) |
|
2275 ((Suc::nat => nat) (0::nat)) a0 |
|
2276 ((FCONS::'A::type recspace |
|
2277 => (nat => 'A::type recspace) => nat => 'A::type recspace) |
|
2278 ((_dest_list::'A::type hollight.list => 'A::type recspace) a1) |
|
2279 (%n::nat. BOTTOM::'A::type recspace))))" |
|
1883 by (import hollight DEF_CONS) |
2280 by (import hollight DEF_CONS) |
1884 |
2281 |
1885 lemma pair_RECURSION: "ALL PAIR'::'A::type => 'B::type => 'C::type. |
2282 lemma pair_RECURSION: "ALL PAIR'::'A::type => 'B::type => 'C::type. |
1886 EX x::'A::type * 'B::type => 'C::type. |
2283 EX x::'A::type * 'B::type => 'C::type. |
1887 ALL (a0::'A::type) a1::'B::type. x (a0, a1) = PAIR' a0 a1" |
2284 ALL (a0::'A::type) a1::'B::type. x (a0, a1) = PAIR' a0 a1" |
1888 by (import hollight pair_RECURSION) |
2285 by (import hollight pair_RECURSION) |
1889 |
2286 |
1890 lemma num_RECURSION_STD: "ALL (e::'Z::type) f::nat => 'Z::type => 'Z::type. |
2287 lemma num_RECURSION_STD: "ALL (e::'Z::type) f::nat => 'Z::type => 'Z::type. |
1891 EX fn::nat => 'Z::type. |
2288 EX fn::nat => 'Z::type. fn 0 = e & (ALL n::nat. fn (Suc n) = f n (fn n))" |
1892 fn (0::nat) = e & (ALL n::nat. fn (Suc n) = f n (fn n))" |
|
1893 by (import hollight num_RECURSION_STD) |
2289 by (import hollight num_RECURSION_STD) |
1894 |
2290 |
1895 constdefs |
2291 constdefs |
1896 ISO :: "('A::type => 'B::type) => ('B::type => 'A::type) => bool" |
2292 ISO :: "('A => 'B) => ('B => 'A) => bool" |
1897 "ISO == |
2293 "ISO == |
1898 %(u::'A::type => 'B::type) ua::'B::type => 'A::type. |
2294 %(u::'A::type => 'B::type) ua::'B::type => 'A::type. |
1899 (ALL x::'B::type. u (ua x) = x) & (ALL y::'A::type. ua (u y) = y)" |
2295 (ALL x::'B::type. u (ua x) = x) & (ALL y::'A::type. ua (u y) = y)" |
1900 |
2296 |
1901 lemma DEF_ISO: "ISO = |
2297 lemma DEF_ISO: "ISO = |
1920 by (import hollight ISO_USAGE) |
2316 by (import hollight ISO_USAGE) |
1921 |
2317 |
1922 typedef (open) N_2 = "{a::bool recspace. |
2318 typedef (open) N_2 = "{a::bool recspace. |
1923 ALL u::bool recspace => bool. |
2319 ALL u::bool recspace => bool. |
1924 (ALL a::bool recspace. |
2320 (ALL a::bool recspace. |
2321 a = CONSTR (NUMERAL 0) (SOME x::bool. True) (%n::nat. BOTTOM) | |
|
1925 a = |
2322 a = |
1926 CONSTR (NUMERAL (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM) | |
2323 CONSTR (Suc (NUMERAL 0)) (SOME x::bool. True) (%n::nat. BOTTOM) --> |
1927 a = |
|
1928 CONSTR (Suc (NUMERAL (0::nat))) (SOME x::bool. True) |
|
1929 (%n::nat. BOTTOM) --> |
|
1930 u a) --> |
2324 u a) --> |
1931 u a}" morphisms "_dest_2" "_mk_2" |
2325 u a}" morphisms "_dest_2" "_mk_2" |
1932 apply (rule light_ex_imp_nonempty[where t="CONSTR (NUMERAL (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM)"]) |
2326 apply (rule light_ex_imp_nonempty[where t="CONSTR (NUMERAL 0) (SOME x::bool. True) (%n::nat. BOTTOM)"]) |
1933 by (import hollight TYDEF_2) |
2327 by (import hollight TYDEF_2) |
1934 |
2328 |
1935 syntax |
2329 syntax |
1936 "_dest_2" :: _ ("'_dest'_2") |
2330 "_dest_2" :: _ ("'_dest'_2") |
1937 |
2331 |
1944 |
2338 |
1945 consts |
2339 consts |
1946 "_10288" :: "N_2" ("'_10288") |
2340 "_10288" :: "N_2" ("'_10288") |
1947 |
2341 |
1948 defs |
2342 defs |
1949 "_10288_def": "_10288 == _mk_2 (CONSTR (0::nat) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2343 "_10288_def": "(op ==::N_2 => N_2 => prop) (_10288::N_2) |
1950 |
2344 ((_mk_2::bool recspace => N_2) |
1951 lemma DEF__10288: "_10288 = _mk_2 (CONSTR (0::nat) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2345 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
2346 (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2347 (%n::nat. BOTTOM::bool recspace)))" |
|
2348 |
|
2349 lemma DEF__10288: "(op =::N_2 => N_2 => bool) (_10288::N_2) |
|
2350 ((_mk_2::bool recspace => N_2) |
|
2351 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
|
2352 (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2353 (%n::nat. BOTTOM::bool recspace)))" |
|
1952 by (import hollight DEF__10288) |
2354 by (import hollight DEF__10288) |
1953 |
2355 |
1954 consts |
2356 consts |
1955 "_10289" :: "N_2" ("'_10289") |
2357 "_10289" :: "N_2" ("'_10289") |
1956 |
2358 |
1957 defs |
2359 defs |
1958 "_10289_def": "_10289 == |
2360 "_10289_def": "(op ==::N_2 => N_2 => prop) (_10289::N_2) |
1959 _mk_2 (CONSTR (Suc (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2361 ((_mk_2::bool recspace => N_2) |
1960 |
2362 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
1961 lemma DEF__10289: "_10289 = |
2363 ((Suc::nat => nat) (0::nat)) |
1962 _mk_2 (CONSTR (Suc (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2364 ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
2365 (%n::nat. BOTTOM::bool recspace)))" |
|
2366 |
|
2367 lemma DEF__10289: "(op =::N_2 => N_2 => bool) (_10289::N_2) |
|
2368 ((_mk_2::bool recspace => N_2) |
|
2369 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
|
2370 ((Suc::nat => nat) (0::nat)) |
|
2371 ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2372 (%n::nat. BOTTOM::bool recspace)))" |
|
1963 by (import hollight DEF__10289) |
2373 by (import hollight DEF__10289) |
1964 |
2374 |
1965 constdefs |
2375 constdefs |
1966 two_1 :: "N_2" |
2376 two_1 :: "N_2" |
1967 "two_1 == _10288" |
2377 "two_1 == _10288" |
1977 by (import hollight DEF_two_2) |
2387 by (import hollight DEF_two_2) |
1978 |
2388 |
1979 typedef (open) N_3 = "{a::bool recspace. |
2389 typedef (open) N_3 = "{a::bool recspace. |
1980 ALL u::bool recspace => bool. |
2390 ALL u::bool recspace => bool. |
1981 (ALL a::bool recspace. |
2391 (ALL a::bool recspace. |
2392 a = CONSTR (NUMERAL 0) (SOME x::bool. True) (%n::nat. BOTTOM) | |
|
1982 a = |
2393 a = |
1983 CONSTR (NUMERAL (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM) | |
2394 CONSTR (Suc (NUMERAL 0)) (SOME x::bool. True) (%n::nat. BOTTOM) | |
1984 a = |
2395 a = |
1985 CONSTR (Suc (NUMERAL (0::nat))) (SOME x::bool. True) |
2396 CONSTR (Suc (Suc (NUMERAL 0))) (SOME x::bool. True) |
1986 (%n::nat. BOTTOM) | |
|
1987 a = |
|
1988 CONSTR (Suc (Suc (NUMERAL (0::nat)))) (SOME x::bool. True) |
|
1989 (%n::nat. BOTTOM) --> |
2397 (%n::nat. BOTTOM) --> |
1990 u a) --> |
2398 u a) --> |
1991 u a}" morphisms "_dest_3" "_mk_3" |
2399 u a}" morphisms "_dest_3" "_mk_3" |
1992 apply (rule light_ex_imp_nonempty[where t="CONSTR (NUMERAL (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM)"]) |
2400 apply (rule light_ex_imp_nonempty[where t="CONSTR (NUMERAL 0) (SOME x::bool. True) (%n::nat. BOTTOM)"]) |
1993 by (import hollight TYDEF_3) |
2401 by (import hollight TYDEF_3) |
1994 |
2402 |
1995 syntax |
2403 syntax |
1996 "_dest_3" :: _ ("'_dest'_3") |
2404 "_dest_3" :: _ ("'_dest'_3") |
1997 |
2405 |
2004 |
2412 |
2005 consts |
2413 consts |
2006 "_10312" :: "N_3" ("'_10312") |
2414 "_10312" :: "N_3" ("'_10312") |
2007 |
2415 |
2008 defs |
2416 defs |
2009 "_10312_def": "_10312 == _mk_3 (CONSTR (0::nat) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2417 "_10312_def": "(op ==::N_3 => N_3 => prop) (_10312::N_3) |
2010 |
2418 ((_mk_3::bool recspace => N_3) |
2011 lemma DEF__10312: "_10312 = _mk_3 (CONSTR (0::nat) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2419 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
2420 (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2421 (%n::nat. BOTTOM::bool recspace)))" |
|
2422 |
|
2423 lemma DEF__10312: "(op =::N_3 => N_3 => bool) (_10312::N_3) |
|
2424 ((_mk_3::bool recspace => N_3) |
|
2425 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
|
2426 (0::nat) ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2427 (%n::nat. BOTTOM::bool recspace)))" |
|
2012 by (import hollight DEF__10312) |
2428 by (import hollight DEF__10312) |
2013 |
2429 |
2014 consts |
2430 consts |
2015 "_10313" :: "N_3" ("'_10313") |
2431 "_10313" :: "N_3" ("'_10313") |
2016 |
2432 |
2017 defs |
2433 defs |
2018 "_10313_def": "_10313 == |
2434 "_10313_def": "(op ==::N_3 => N_3 => prop) (_10313::N_3) |
2019 _mk_3 (CONSTR (Suc (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2435 ((_mk_3::bool recspace => N_3) |
2020 |
2436 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
2021 lemma DEF__10313: "_10313 = |
2437 ((Suc::nat => nat) (0::nat)) |
2022 _mk_3 (CONSTR (Suc (0::nat)) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2438 ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
2439 (%n::nat. BOTTOM::bool recspace)))" |
|
2440 |
|
2441 lemma DEF__10313: "(op =::N_3 => N_3 => bool) (_10313::N_3) |
|
2442 ((_mk_3::bool recspace => N_3) |
|
2443 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
|
2444 ((Suc::nat => nat) (0::nat)) |
|
2445 ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2446 (%n::nat. BOTTOM::bool recspace)))" |
|
2023 by (import hollight DEF__10313) |
2447 by (import hollight DEF__10313) |
2024 |
2448 |
2025 consts |
2449 consts |
2026 "_10314" :: "N_3" ("'_10314") |
2450 "_10314" :: "N_3" ("'_10314") |
2027 |
2451 |
2028 defs |
2452 defs |
2029 "_10314_def": "_10314 == |
2453 "_10314_def": "(op ==::N_3 => N_3 => prop) (_10314::N_3) |
2030 _mk_3 (CONSTR (Suc (Suc (0::nat))) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2454 ((_mk_3::bool recspace => N_3) |
2031 |
2455 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
2032 lemma DEF__10314: "_10314 = |
2456 ((Suc::nat => nat) ((Suc::nat => nat) (0::nat))) |
2033 _mk_3 (CONSTR (Suc (Suc (0::nat))) (SOME x::bool. True) (%n::nat. BOTTOM))" |
2457 ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
2458 (%n::nat. BOTTOM::bool recspace)))" |
|
2459 |
|
2460 lemma DEF__10314: "(op =::N_3 => N_3 => bool) (_10314::N_3) |
|
2461 ((_mk_3::bool recspace => N_3) |
|
2462 ((CONSTR::nat => bool => (nat => bool recspace) => bool recspace) |
|
2463 ((Suc::nat => nat) ((Suc::nat => nat) (0::nat))) |
|
2464 ((Eps::(bool => bool) => bool) (%x::bool. True::bool)) |
|
2465 (%n::nat. BOTTOM::bool recspace)))" |
|
2034 by (import hollight DEF__10314) |
2466 by (import hollight DEF__10314) |
2035 |
2467 |
2036 constdefs |
2468 constdefs |
2037 three_1 :: "N_3" |
2469 three_1 :: "N_3" |
2038 "three_1 == _10312" |
2470 "three_1 == _10312" |
2060 P a1 --> P (CONS a0 a1)) --> |
2492 P a1 --> P (CONS a0 a1)) --> |
2061 All P" |
2493 All P" |
2062 by (import hollight list_INDUCT) |
2494 by (import hollight list_INDUCT) |
2063 |
2495 |
2064 constdefs |
2496 constdefs |
2065 HD :: "'A::type hollight.list => 'A::type" |
2497 HD :: "'A hollight.list => 'A" |
2066 "HD == |
2498 "HD == |
2067 SOME HD::'A::type hollight.list => 'A::type. |
2499 SOME HD::'A::type hollight.list => 'A::type. |
2068 ALL (t::'A::type hollight.list) h::'A::type. HD (CONS h t) = h" |
2500 ALL (t::'A::type hollight.list) h::'A::type. HD (CONS h t) = h" |
2069 |
2501 |
2070 lemma DEF_HD: "HD = |
2502 lemma DEF_HD: "HD = |
2071 (SOME HD::'A::type hollight.list => 'A::type. |
2503 (SOME HD::'A::type hollight.list => 'A::type. |
2072 ALL (t::'A::type hollight.list) h::'A::type. HD (CONS h t) = h)" |
2504 ALL (t::'A::type hollight.list) h::'A::type. HD (CONS h t) = h)" |
2073 by (import hollight DEF_HD) |
2505 by (import hollight DEF_HD) |
2074 |
2506 |
2075 constdefs |
2507 constdefs |
2076 TL :: "'A::type hollight.list => 'A::type hollight.list" |
2508 TL :: "'A hollight.list => 'A hollight.list" |
2077 "TL == |
2509 "TL == |
2078 SOME TL::'A::type hollight.list => 'A::type hollight.list. |
2510 SOME TL::'A::type hollight.list => 'A::type hollight.list. |
2079 ALL (h::'A::type) t::'A::type hollight.list. TL (CONS h t) = t" |
2511 ALL (h::'A::type) t::'A::type hollight.list. TL (CONS h t) = t" |
2080 |
2512 |
2081 lemma DEF_TL: "TL = |
2513 lemma DEF_TL: "TL = |
2082 (SOME TL::'A::type hollight.list => 'A::type hollight.list. |
2514 (SOME TL::'A::type hollight.list => 'A::type hollight.list. |
2083 ALL (h::'A::type) t::'A::type hollight.list. TL (CONS h t) = t)" |
2515 ALL (h::'A::type) t::'A::type hollight.list. TL (CONS h t) = t)" |
2084 by (import hollight DEF_TL) |
2516 by (import hollight DEF_TL) |
2085 |
2517 |
2086 constdefs |
2518 constdefs |
2087 APPEND :: "'A::type hollight.list => 'A::type hollight.list => 'A::type hollight.list" |
2519 APPEND :: "'A hollight.list => 'A hollight.list => 'A hollight.list" |
2088 "APPEND == |
2520 "APPEND == |
2089 SOME APPEND::'A::type hollight.list |
2521 SOME APPEND::'A::type hollight.list |
2090 => 'A::type hollight.list => 'A::type hollight.list. |
2522 => 'A::type hollight.list => 'A::type hollight.list. |
2091 (ALL l::'A::type hollight.list. APPEND NIL l = l) & |
2523 (ALL l::'A::type hollight.list. APPEND NIL l = l) & |
2092 (ALL (h::'A::type) (t::'A::type hollight.list) l::'A::type hollight.list. |
2524 (ALL (h::'A::type) (t::'A::type hollight.list) l::'A::type hollight.list. |
2100 l::'A::type hollight.list. |
2532 l::'A::type hollight.list. |
2101 APPEND (CONS h t) l = CONS h (APPEND t l)))" |
2533 APPEND (CONS h t) l = CONS h (APPEND t l)))" |
2102 by (import hollight DEF_APPEND) |
2534 by (import hollight DEF_APPEND) |
2103 |
2535 |
2104 constdefs |
2536 constdefs |
2105 REVERSE :: "'A::type hollight.list => 'A::type hollight.list" |
2537 REVERSE :: "'A hollight.list => 'A hollight.list" |
2106 "REVERSE == |
2538 "REVERSE == |
2107 SOME REVERSE::'A::type hollight.list => 'A::type hollight.list. |
2539 SOME REVERSE::'A::type hollight.list => 'A::type hollight.list. |
2108 REVERSE NIL = NIL & |
2540 REVERSE NIL = NIL & |
2109 (ALL (l::'A::type hollight.list) x::'A::type. |
2541 (ALL (l::'A::type hollight.list) x::'A::type. |
2110 REVERSE (CONS x l) = APPEND (REVERSE l) (CONS x NIL))" |
2542 REVERSE (CONS x l) = APPEND (REVERSE l) (CONS x NIL))" |
2115 (ALL (l::'A::type hollight.list) x::'A::type. |
2547 (ALL (l::'A::type hollight.list) x::'A::type. |
2116 REVERSE (CONS x l) = APPEND (REVERSE l) (CONS x NIL)))" |
2548 REVERSE (CONS x l) = APPEND (REVERSE l) (CONS x NIL)))" |
2117 by (import hollight DEF_REVERSE) |
2549 by (import hollight DEF_REVERSE) |
2118 |
2550 |
2119 constdefs |
2551 constdefs |
2120 LENGTH :: "'A::type hollight.list => nat" |
2552 LENGTH :: "'A hollight.list => nat" |
2121 "LENGTH == |
2553 "LENGTH == |
2122 SOME LENGTH::'A::type hollight.list => nat. |
2554 SOME LENGTH::'A::type hollight.list => nat. |
2123 LENGTH NIL = (0::nat) & |
2555 LENGTH NIL = 0 & |
2124 (ALL (h::'A::type) t::'A::type hollight.list. |
2556 (ALL (h::'A::type) t::'A::type hollight.list. |
2125 LENGTH (CONS h t) = Suc (LENGTH t))" |
2557 LENGTH (CONS h t) = Suc (LENGTH t))" |
2126 |
2558 |
2127 lemma DEF_LENGTH: "LENGTH = |
2559 lemma DEF_LENGTH: "LENGTH = |
2128 (SOME LENGTH::'A::type hollight.list => nat. |
2560 (SOME LENGTH::'A::type hollight.list => nat. |
2129 LENGTH NIL = (0::nat) & |
2561 LENGTH NIL = 0 & |
2130 (ALL (h::'A::type) t::'A::type hollight.list. |
2562 (ALL (h::'A::type) t::'A::type hollight.list. |
2131 LENGTH (CONS h t) = Suc (LENGTH t)))" |
2563 LENGTH (CONS h t) = Suc (LENGTH t)))" |
2132 by (import hollight DEF_LENGTH) |
2564 by (import hollight DEF_LENGTH) |
2133 |
2565 |
2134 constdefs |
2566 constdefs |
2135 MAP :: "('A::type => 'B::type) => 'A::type hollight.list => 'B::type hollight.list" |
2567 MAP :: "('A => 'B) => 'A hollight.list => 'B hollight.list" |
2136 "MAP == |
2568 "MAP == |
2137 SOME MAP::('A::type => 'B::type) |
2569 SOME MAP::('A::type => 'B::type) |
2138 => 'A::type hollight.list => 'B::type hollight.list. |
2570 => 'A::type hollight.list => 'B::type hollight.list. |
2139 (ALL f::'A::type => 'B::type. MAP f NIL = NIL) & |
2571 (ALL f::'A::type => 'B::type. MAP f NIL = NIL) & |
2140 (ALL (f::'A::type => 'B::type) (h::'A::type) t::'A::type hollight.list. |
2572 (ALL (f::'A::type => 'B::type) (h::'A::type) t::'A::type hollight.list. |
2147 (ALL (f::'A::type => 'B::type) (h::'A::type) t::'A::type hollight.list. |
2579 (ALL (f::'A::type => 'B::type) (h::'A::type) t::'A::type hollight.list. |
2148 MAP f (CONS h t) = CONS (f h) (MAP f t)))" |
2580 MAP f (CONS h t) = CONS (f h) (MAP f t)))" |
2149 by (import hollight DEF_MAP) |
2581 by (import hollight DEF_MAP) |
2150 |
2582 |
2151 constdefs |
2583 constdefs |
2152 LAST :: "'A::type hollight.list => 'A::type" |
2584 LAST :: "'A hollight.list => 'A" |
2153 "LAST == |
2585 "LAST == |
2154 SOME LAST::'A::type hollight.list => 'A::type. |
2586 SOME LAST::'A::type hollight.list => 'A::type. |
2155 ALL (h::'A::type) t::'A::type hollight.list. |
2587 ALL (h::'A::type) t::'A::type hollight.list. |
2156 LAST (CONS h t) = COND (t = NIL) h (LAST t)" |
2588 LAST (CONS h t) = COND (t = NIL) h (LAST t)" |
2157 |
2589 |
2160 ALL (h::'A::type) t::'A::type hollight.list. |
2592 ALL (h::'A::type) t::'A::type hollight.list. |
2161 LAST (CONS h t) = COND (t = NIL) h (LAST t))" |
2593 LAST (CONS h t) = COND (t = NIL) h (LAST t))" |
2162 by (import hollight DEF_LAST) |
2594 by (import hollight DEF_LAST) |
2163 |
2595 |
2164 constdefs |
2596 constdefs |
2165 REPLICATE :: "nat => 'q_16809::type => 'q_16809::type hollight.list" |
2597 REPLICATE :: "nat => 'q_16809 => 'q_16809 hollight.list" |
2166 "REPLICATE == |
2598 "REPLICATE == |
2167 SOME REPLICATE::nat => 'q_16809::type => 'q_16809::type hollight.list. |
2599 SOME REPLICATE::nat => 'q_16809::type => 'q_16809::type hollight.list. |
2168 (ALL x::'q_16809::type. REPLICATE (0::nat) x = NIL) & |
2600 (ALL x::'q_16809::type. REPLICATE 0 x = NIL) & |
2169 (ALL (n::nat) x::'q_16809::type. |
2601 (ALL (n::nat) x::'q_16809::type. |
2170 REPLICATE (Suc n) x = CONS x (REPLICATE n x))" |
2602 REPLICATE (Suc n) x = CONS x (REPLICATE n x))" |
2171 |
2603 |
2172 lemma DEF_REPLICATE: "REPLICATE = |
2604 lemma DEF_REPLICATE: "REPLICATE = |
2173 (SOME REPLICATE::nat => 'q_16809::type => 'q_16809::type hollight.list. |
2605 (SOME REPLICATE::nat => 'q_16809::type => 'q_16809::type hollight.list. |
2174 (ALL x::'q_16809::type. REPLICATE (0::nat) x = NIL) & |
2606 (ALL x::'q_16809::type. REPLICATE 0 x = NIL) & |
2175 (ALL (n::nat) x::'q_16809::type. |
2607 (ALL (n::nat) x::'q_16809::type. |
2176 REPLICATE (Suc n) x = CONS x (REPLICATE n x)))" |
2608 REPLICATE (Suc n) x = CONS x (REPLICATE n x)))" |
2177 by (import hollight DEF_REPLICATE) |
2609 by (import hollight DEF_REPLICATE) |
2178 |
2610 |
2179 constdefs |
2611 constdefs |
2180 NULL :: "'q_16824::type hollight.list => bool" |
2612 NULL :: "'q_16824 hollight.list => bool" |
2181 "NULL == |
2613 "NULL == |
2182 SOME NULL::'q_16824::type hollight.list => bool. |
2614 SOME NULL::'q_16824::type hollight.list => bool. |
2183 NULL NIL = True & |
2615 NULL NIL = True & |
2184 (ALL (h::'q_16824::type) t::'q_16824::type hollight.list. |
2616 (ALL (h::'q_16824::type) t::'q_16824::type hollight.list. |
2185 NULL (CONS h t) = False)" |
2617 NULL (CONS h t) = False)" |
2190 (ALL (h::'q_16824::type) t::'q_16824::type hollight.list. |
2622 (ALL (h::'q_16824::type) t::'q_16824::type hollight.list. |
2191 NULL (CONS h t) = False))" |
2623 NULL (CONS h t) = False))" |
2192 by (import hollight DEF_NULL) |
2624 by (import hollight DEF_NULL) |
2193 |
2625 |
2194 constdefs |
2626 constdefs |
2195 ALL_list :: "('q_16844::type => bool) => 'q_16844::type hollight.list => bool" |
2627 ALL_list :: "('q_16844 => bool) => 'q_16844 hollight.list => bool" |
2196 "ALL_list == |
2628 "ALL_list == |
2197 SOME u::('q_16844::type => bool) => 'q_16844::type hollight.list => bool. |
2629 SOME u::('q_16844::type => bool) => 'q_16844::type hollight.list => bool. |
2198 (ALL P::'q_16844::type => bool. u P NIL = True) & |
2630 (ALL P::'q_16844::type => bool. u P NIL = True) & |
2199 (ALL (h::'q_16844::type) (P::'q_16844::type => bool) |
2631 (ALL (h::'q_16844::type) (P::'q_16844::type => bool) |
2200 t::'q_16844::type hollight.list. u P (CONS h t) = (P h & u P t))" |
2632 t::'q_16844::type hollight.list. u P (CONS h t) = (P h & u P t))" |
2205 (ALL (h::'q_16844::type) (P::'q_16844::type => bool) |
2637 (ALL (h::'q_16844::type) (P::'q_16844::type => bool) |
2206 t::'q_16844::type hollight.list. u P (CONS h t) = (P h & u P t)))" |
2638 t::'q_16844::type hollight.list. u P (CONS h t) = (P h & u P t)))" |
2207 by (import hollight DEF_ALL) |
2639 by (import hollight DEF_ALL) |
2208 |
2640 |
2209 consts |
2641 consts |
2210 EX :: "('q_16865::type => bool) => 'q_16865::type hollight.list => bool" ("EX") |
2642 EX :: "('q_16865 => bool) => 'q_16865 hollight.list => bool" ("EX") |
2211 |
2643 |
2212 defs |
2644 defs |
2213 EX_def: "EX == |
2645 EX_def: "EX == |
2214 SOME u::('q_16865::type => bool) => 'q_16865::type hollight.list => bool. |
2646 SOME u::('q_16865::type => bool) => 'q_16865::type hollight.list => bool. |
2215 (ALL P::'q_16865::type => bool. u P NIL = False) & |
2647 (ALL P::'q_16865::type => bool. u P NIL = False) & |
2222 (ALL (h::'q_16865::type) (P::'q_16865::type => bool) |
2654 (ALL (h::'q_16865::type) (P::'q_16865::type => bool) |
2223 t::'q_16865::type hollight.list. u P (CONS h t) = (P h | u P t)))" |
2655 t::'q_16865::type hollight.list. u P (CONS h t) = (P h | u P t)))" |
2224 by (import hollight DEF_EX) |
2656 by (import hollight DEF_EX) |
2225 |
2657 |
2226 constdefs |
2658 constdefs |
2227 ITLIST :: "('q_16888::type => 'q_16887::type => 'q_16887::type) |
2659 ITLIST :: "('q_16888 => 'q_16887 => 'q_16887) |
2228 => 'q_16888::type hollight.list => 'q_16887::type => 'q_16887::type" |
2660 => 'q_16888 hollight.list => 'q_16887 => 'q_16887" |
2229 "ITLIST == |
2661 "ITLIST == |
2230 SOME ITLIST::('q_16888::type => 'q_16887::type => 'q_16887::type) |
2662 SOME ITLIST::('q_16888::type => 'q_16887::type => 'q_16887::type) |
2231 => 'q_16888::type hollight.list |
2663 => 'q_16888::type hollight.list |
2232 => 'q_16887::type => 'q_16887::type. |
2664 => 'q_16887::type => 'q_16887::type. |
2233 (ALL (f::'q_16888::type => 'q_16887::type => 'q_16887::type) |
2665 (ALL (f::'q_16888::type => 'q_16887::type => 'q_16887::type) |
2248 (t::'q_16888::type hollight.list) b::'q_16887::type. |
2680 (t::'q_16888::type hollight.list) b::'q_16887::type. |
2249 ITLIST f (CONS h t) b = f h (ITLIST f t b)))" |
2681 ITLIST f (CONS h t) b = f h (ITLIST f t b)))" |
2250 by (import hollight DEF_ITLIST) |
2682 by (import hollight DEF_ITLIST) |
2251 |
2683 |
2252 constdefs |
2684 constdefs |
2253 MEM :: "'q_16913::type => 'q_16913::type hollight.list => bool" |
2685 MEM :: "'q_16913 => 'q_16913 hollight.list => bool" |
2254 "MEM == |
2686 "MEM == |
2255 SOME MEM::'q_16913::type => 'q_16913::type hollight.list => bool. |
2687 SOME MEM::'q_16913::type => 'q_16913::type hollight.list => bool. |
2256 (ALL x::'q_16913::type. MEM x NIL = False) & |
2688 (ALL x::'q_16913::type. MEM x NIL = False) & |
2257 (ALL (h::'q_16913::type) (x::'q_16913::type) |
2689 (ALL (h::'q_16913::type) (x::'q_16913::type) |
2258 t::'q_16913::type hollight.list. |
2690 t::'q_16913::type hollight.list. |
2265 t::'q_16913::type hollight.list. |
2697 t::'q_16913::type hollight.list. |
2266 MEM x (CONS h t) = (x = h | MEM x t)))" |
2698 MEM x (CONS h t) = (x = h | MEM x t)))" |
2267 by (import hollight DEF_MEM) |
2699 by (import hollight DEF_MEM) |
2268 |
2700 |
2269 constdefs |
2701 constdefs |
2270 ALL2 :: "('q_16946::type => 'q_16953::type => bool) |
2702 ALL2 :: "('q_16946 => 'q_16953 => bool) |
2271 => 'q_16946::type hollight.list => 'q_16953::type hollight.list => bool" |
2703 => 'q_16946 hollight.list => 'q_16953 hollight.list => bool" |
2272 "ALL2 == |
2704 "ALL2 == |
2273 SOME ALL2::('q_16946::type => 'q_16953::type => bool) |
2705 SOME ALL2::('q_16946::type => 'q_16953::type => bool) |
2274 => 'q_16946::type hollight.list |
2706 => 'q_16946::type hollight.list |
2275 => 'q_16953::type hollight.list => bool. |
2707 => 'q_16953::type hollight.list => bool. |
2276 (ALL (P::'q_16946::type => 'q_16953::type => bool) |
2708 (ALL (P::'q_16946::type => 'q_16953::type => bool) |
2299 False & |
2731 False & |
2300 ALL2 P (CONS h1 t1) (CONS h2 t2) = (P h1 h2 & ALL2 P t1 t2)" |
2732 ALL2 P (CONS h1 t1) (CONS h2 t2) = (P h1 h2 & ALL2 P t1 t2)" |
2301 by (import hollight ALL2) |
2733 by (import hollight ALL2) |
2302 |
2734 |
2303 constdefs |
2735 constdefs |
2304 MAP2 :: "('q_17038::type => 'q_17045::type => 'q_17035::type) |
2736 MAP2 :: "('q_17038 => 'q_17045 => 'q_17035) |
2305 => 'q_17038::type hollight.list |
2737 => 'q_17038 hollight.list |
2306 => 'q_17045::type hollight.list => 'q_17035::type hollight.list" |
2738 => 'q_17045 hollight.list => 'q_17035 hollight.list" |
2307 "MAP2 == |
2739 "MAP2 == |
2308 SOME MAP2::('q_17038::type => 'q_17045::type => 'q_17035::type) |
2740 SOME MAP2::('q_17038::type => 'q_17045::type => 'q_17035::type) |
2309 => 'q_17038::type hollight.list |
2741 => 'q_17038::type hollight.list |
2310 => 'q_17045::type hollight.list |
2742 => 'q_17045::type hollight.list |
2311 => 'q_17035::type hollight.list. |
2743 => 'q_17035::type hollight.list. |
2334 (CONS (h2::'q_17079::type) (t2::'q_17079::type hollight.list)) = |
2766 (CONS (h2::'q_17079::type) (t2::'q_17079::type hollight.list)) = |
2335 CONS (f h1 h2) (MAP2 f t1 t2)" |
2767 CONS (f h1 h2) (MAP2 f t1 t2)" |
2336 by (import hollight MAP2) |
2768 by (import hollight MAP2) |
2337 |
2769 |
2338 constdefs |
2770 constdefs |
2339 EL :: "nat => 'q_17106::type hollight.list => 'q_17106::type" |
2771 EL :: "nat => 'q_17106 hollight.list => 'q_17106" |
2340 "EL == |
2772 "EL == |
2341 SOME EL::nat => 'q_17106::type hollight.list => 'q_17106::type. |
2773 SOME EL::nat => 'q_17106::type hollight.list => 'q_17106::type. |
2342 (ALL l::'q_17106::type hollight.list. EL (0::nat) l = HD l) & |
2774 (ALL l::'q_17106::type hollight.list. EL 0 l = HD l) & |
2343 (ALL (n::nat) l::'q_17106::type hollight.list. |
2775 (ALL (n::nat) l::'q_17106::type hollight.list. |
2344 EL (Suc n) l = EL n (TL l))" |
2776 EL (Suc n) l = EL n (TL l))" |
2345 |
2777 |
2346 lemma DEF_EL: "EL = |
2778 lemma DEF_EL: "EL = |
2347 (SOME EL::nat => 'q_17106::type hollight.list => 'q_17106::type. |
2779 (SOME EL::nat => 'q_17106::type hollight.list => 'q_17106::type. |
2348 (ALL l::'q_17106::type hollight.list. EL (0::nat) l = HD l) & |
2780 (ALL l::'q_17106::type hollight.list. EL 0 l = HD l) & |
2349 (ALL (n::nat) l::'q_17106::type hollight.list. |
2781 (ALL (n::nat) l::'q_17106::type hollight.list. |
2350 EL (Suc n) l = EL n (TL l)))" |
2782 EL (Suc n) l = EL n (TL l)))" |
2351 by (import hollight DEF_EL) |
2783 by (import hollight DEF_EL) |
2352 |
2784 |
2353 constdefs |
2785 constdefs |
2354 FILTER :: "('q_17131::type => bool) |
2786 FILTER :: "('q_17131 => bool) => 'q_17131 hollight.list => 'q_17131 hollight.list" |
2355 => 'q_17131::type hollight.list => 'q_17131::type hollight.list" |
|
2356 "FILTER == |
2787 "FILTER == |
2357 SOME FILTER::('q_17131::type => bool) |
2788 SOME FILTER::('q_17131::type => bool) |
2358 => 'q_17131::type hollight.list |
2789 => 'q_17131::type hollight.list |
2359 => 'q_17131::type hollight.list. |
2790 => 'q_17131::type hollight.list. |
2360 (ALL P::'q_17131::type => bool. FILTER P NIL = NIL) & |
2791 (ALL P::'q_17131::type => bool. FILTER P NIL = NIL) & |
2372 FILTER P (CONS h t) = |
2803 FILTER P (CONS h t) = |
2373 COND (P h) (CONS h (FILTER P t)) (FILTER P t)))" |
2804 COND (P h) (CONS h (FILTER P t)) (FILTER P t)))" |
2374 by (import hollight DEF_FILTER) |
2805 by (import hollight DEF_FILTER) |
2375 |
2806 |
2376 constdefs |
2807 constdefs |
2377 ASSOC :: "'q_17160::type |
2808 ASSOC :: "'q_17160 => ('q_17160 * 'q_17154) hollight.list => 'q_17154" |
2378 => ('q_17160::type * 'q_17154::type) hollight.list => 'q_17154::type" |
|
2379 "ASSOC == |
2809 "ASSOC == |
2380 SOME ASSOC::'q_17160::type |
2810 SOME ASSOC::'q_17160::type |
2381 => ('q_17160::type * 'q_17154::type) hollight.list |
2811 => ('q_17160::type * 'q_17154::type) hollight.list |
2382 => 'q_17154::type. |
2812 => 'q_17154::type. |
2383 ALL (h::'q_17160::type * 'q_17154::type) (a::'q_17160::type) |
2813 ALL (h::'q_17160::type * 'q_17154::type) (a::'q_17160::type) |
2392 t::('q_17160::type * 'q_17154::type) hollight.list. |
2822 t::('q_17160::type * 'q_17154::type) hollight.list. |
2393 ASSOC a (CONS h t) = COND (fst h = a) (snd h) (ASSOC a t))" |
2823 ASSOC a (CONS h t) = COND (fst h = a) (snd h) (ASSOC a t))" |
2394 by (import hollight DEF_ASSOC) |
2824 by (import hollight DEF_ASSOC) |
2395 |
2825 |
2396 constdefs |
2826 constdefs |
2397 ITLIST2 :: "('q_17184::type => 'q_17192::type => 'q_17182::type => 'q_17182::type) |
2827 ITLIST2 :: "('q_17184 => 'q_17192 => 'q_17182 => 'q_17182) |
2398 => 'q_17184::type hollight.list |
2828 => 'q_17184 hollight.list => 'q_17192 hollight.list => 'q_17182 => 'q_17182" |
2399 => 'q_17192::type hollight.list => 'q_17182::type => 'q_17182::type" |
|
2400 "ITLIST2 == |
2829 "ITLIST2 == |
2401 SOME ITLIST2::('q_17184::type |
2830 SOME ITLIST2::('q_17184::type |
2402 => 'q_17192::type => 'q_17182::type => 'q_17182::type) |
2831 => 'q_17192::type => 'q_17182::type => 'q_17182::type) |
2403 => 'q_17184::type hollight.list |
2832 => 'q_17184::type hollight.list |
2404 => 'q_17192::type hollight.list |
2833 => 'q_17192::type hollight.list |
2441 (CONS (h2::'q_17225::type) (t2::'q_17225::type hollight.list)) b = |
2870 (CONS (h2::'q_17225::type) (t2::'q_17225::type hollight.list)) b = |
2442 f h1 h2 (ITLIST2 f t1 t2 b)" |
2871 f h1 h2 (ITLIST2 f t1 t2 b)" |
2443 by (import hollight ITLIST2) |
2872 by (import hollight ITLIST2) |
2444 |
2873 |
2445 consts |
2874 consts |
2446 ZIP :: "'q_17256::type hollight.list |
2875 ZIP :: "'q_17256 hollight.list |
2447 => 'q_17264::type hollight.list |
2876 => 'q_17264 hollight.list => ('q_17256 * 'q_17264) hollight.list" |
2448 => ('q_17256::type * 'q_17264::type) hollight.list" |
|
2449 |
2877 |
2450 defs |
2878 defs |
2451 ZIP_def: "hollight.ZIP == |
2879 ZIP_def: "hollight.ZIP == |
2452 SOME ZIP::'q_17256::type hollight.list |
2880 SOME ZIP::'q_17256::type hollight.list |
2453 => 'q_17264::type hollight.list |
2881 => 'q_17264::type hollight.list |
2542 |
2970 |
2543 lemma LENGTH_MAP: "ALL (l::'A::type hollight.list) f::'A::type => 'B::type. |
2971 lemma LENGTH_MAP: "ALL (l::'A::type hollight.list) f::'A::type => 'B::type. |
2544 LENGTH (MAP f l) = LENGTH l" |
2972 LENGTH (MAP f l) = LENGTH l" |
2545 by (import hollight LENGTH_MAP) |
2973 by (import hollight LENGTH_MAP) |
2546 |
2974 |
2547 lemma LENGTH_EQ_NIL: "ALL l::'A::type hollight.list. (LENGTH l = (0::nat)) = (l = NIL)" |
2975 lemma LENGTH_EQ_NIL: "ALL l::'A::type hollight.list. (LENGTH l = 0) = (l = NIL)" |
2548 by (import hollight LENGTH_EQ_NIL) |
2976 by (import hollight LENGTH_EQ_NIL) |
2549 |
2977 |
2550 lemma LENGTH_EQ_CONS: "ALL (l::'q_17608::type hollight.list) n::nat. |
2978 lemma LENGTH_EQ_CONS: "ALL (l::'q_17608::type hollight.list) n::nat. |
2551 (LENGTH l = Suc n) = |
2979 (LENGTH l = Suc n) = |
2552 (EX (h::'q_17608::type) t::'q_17608::type hollight.list. |
2980 (EX (h::'q_17608::type) t::'q_17608::type hollight.list. |
2746 "dist == %u::nat * nat. fst u - snd u + (snd u - fst u)" |
3174 "dist == %u::nat * nat. fst u - snd u + (snd u - fst u)" |
2747 |
3175 |
2748 lemma DEF_dist: "dist = (%u::nat * nat. fst u - snd u + (snd u - fst u))" |
3176 lemma DEF_dist: "dist = (%u::nat * nat. fst u - snd u + (snd u - fst u))" |
2749 by (import hollight DEF_dist) |
3177 by (import hollight DEF_dist) |
2750 |
3178 |
2751 lemma DIST_REFL: "ALL x::nat. dist (x, x) = (0::nat)" |
3179 lemma DIST_REFL: "ALL x::nat. dist (x, x) = 0" |
2752 by (import hollight DIST_REFL) |
3180 by (import hollight DIST_REFL) |
2753 |
3181 |
2754 lemma DIST_LZERO: "ALL x::nat. dist (0::nat, x) = x" |
3182 lemma DIST_LZERO: "ALL x::nat. dist (0, x) = x" |
2755 by (import hollight DIST_LZERO) |
3183 by (import hollight DIST_LZERO) |
2756 |
3184 |
2757 lemma DIST_RZERO: "ALL x::nat. dist (x, 0::nat) = x" |
3185 lemma DIST_RZERO: "ALL x::nat. dist (x, 0) = x" |
2758 by (import hollight DIST_RZERO) |
3186 by (import hollight DIST_RZERO) |
2759 |
3187 |
2760 lemma DIST_SYM: "ALL (x::nat) xa::nat. dist (x, xa) = dist (xa, x)" |
3188 lemma DIST_SYM: "ALL (x::nat) xa::nat. dist (x, xa) = dist (xa, x)" |
2761 by (import hollight DIST_SYM) |
3189 by (import hollight DIST_SYM) |
2762 |
3190 |
2776 by (import hollight DIST_LMUL) |
3204 by (import hollight DIST_LMUL) |
2777 |
3205 |
2778 lemma DIST_RMUL: "ALL (x::nat) (xa::nat) xb::nat. dist (x, xa) * xb = dist (x * xb, xa * xb)" |
3206 lemma DIST_RMUL: "ALL (x::nat) (xa::nat) xb::nat. dist (x, xa) * xb = dist (x * xb, xa * xb)" |
2779 by (import hollight DIST_RMUL) |
3207 by (import hollight DIST_RMUL) |
2780 |
3208 |
2781 lemma DIST_EQ_0: "ALL (x::nat) xa::nat. (dist (x, xa) = (0::nat)) = (x = xa)" |
3209 lemma DIST_EQ_0: "ALL (x::nat) xa::nat. (dist (x, xa) = 0) = (x = xa)" |
2782 by (import hollight DIST_EQ_0) |
3210 by (import hollight DIST_EQ_0) |
2783 |
3211 |
2784 lemma DIST_ELIM_THM: "(P::nat => bool) (dist (x::nat, y::nat)) = |
3212 lemma DIST_ELIM_THM: "(P::nat => bool) (dist (x::nat, y::nat)) = |
2785 (ALL d::nat. (x = y + d --> P d) & (y = x + d --> P d))" |
3213 (ALL d::nat. (x = y + d --> P d) & (y = x + d --> P d))" |
2786 by (import hollight DIST_ELIM_THM) |
3214 by (import hollight DIST_ELIM_THM) |
2813 by (import hollight DIST_TRIANGLES_LE) |
3241 by (import hollight DIST_TRIANGLES_LE) |
2814 |
3242 |
2815 lemma BOUNDS_LINEAR: "ALL (A::nat) (B::nat) C::nat. (ALL n::nat. <= (A * n) (B * n + C)) = <= A B" |
3243 lemma BOUNDS_LINEAR: "ALL (A::nat) (B::nat) C::nat. (ALL n::nat. <= (A * n) (B * n + C)) = <= A B" |
2816 by (import hollight BOUNDS_LINEAR) |
3244 by (import hollight BOUNDS_LINEAR) |
2817 |
3245 |
2818 lemma BOUNDS_LINEAR_0: "ALL (A::nat) B::nat. (ALL n::nat. <= (A * n) B) = (A = (0::nat))" |
3246 lemma BOUNDS_LINEAR_0: "ALL (A::nat) B::nat. (ALL n::nat. <= (A * n) B) = (A = 0)" |
2819 by (import hollight BOUNDS_LINEAR_0) |
3247 by (import hollight BOUNDS_LINEAR_0) |
2820 |
3248 |
2821 lemma BOUNDS_DIVIDED: "ALL P::nat => nat. |
3249 lemma BOUNDS_DIVIDED: "ALL P::nat => nat. |
2822 (EX B::nat. ALL n::nat. <= (P n) B) = |
3250 (EX B::nat. ALL n::nat. <= (P n) B) = |
2823 (EX (x::nat) B::nat. ALL n::nat. <= (n * P n) (x * n + B))" |
3251 (EX (x::nat) B::nat. ALL n::nat. <= (n * P n) (x * n + B))" |
2824 by (import hollight BOUNDS_DIVIDED) |
3252 by (import hollight BOUNDS_DIVIDED) |
2825 |
3253 |
2826 lemma BOUNDS_NOTZERO: "ALL (P::nat => nat => nat) (A::nat) B::nat. |
3254 lemma BOUNDS_NOTZERO: "ALL (P::nat => nat => nat) (A::nat) B::nat. |
2827 P (0::nat) (0::nat) = (0::nat) & |
3255 P 0 0 = 0 & (ALL (m::nat) n::nat. <= (P m n) (A * (m + n) + B)) --> |
2828 (ALL (m::nat) n::nat. <= (P m n) (A * (m + n) + B)) --> |
|
2829 (EX x::nat. ALL (m::nat) n::nat. <= (P m n) (x * (m + n)))" |
3256 (EX x::nat. ALL (m::nat) n::nat. <= (P m n) (x * (m + n)))" |
2830 by (import hollight BOUNDS_NOTZERO) |
3257 by (import hollight BOUNDS_NOTZERO) |
2831 |
3258 |
2832 lemma BOUNDS_IGNORE: "ALL (P::nat => nat) Q::nat => nat. |
3259 lemma BOUNDS_IGNORE: "ALL (P::nat => nat) Q::nat => nat. |
2833 (EX B::nat. ALL i::nat. <= (P i) (Q i + B)) = |
3260 (EX B::nat. ALL i::nat. <= (P i) (Q i + B)) = |
2845 (%u::nat => nat. |
3272 (%u::nat => nat. |
2846 EX B::nat. |
3273 EX B::nat. |
2847 ALL (m::nat) n::nat. <= (dist (m * u n, n * u m)) (B * (m + n)))" |
3274 ALL (m::nat) n::nat. <= (dist (m * u n, n * u m)) (B * (m + n)))" |
2848 by (import hollight DEF_is_nadd) |
3275 by (import hollight DEF_is_nadd) |
2849 |
3276 |
2850 lemma is_nadd_0: "is_nadd (%n::nat. 0::nat)" |
3277 lemma is_nadd_0: "is_nadd (%n::nat. 0)" |
2851 by (import hollight is_nadd_0) |
3278 by (import hollight is_nadd_0) |
2852 |
3279 |
2853 typedef (open) nadd = "Collect is_nadd" morphisms "dest_nadd" "mk_nadd" |
3280 typedef (open) nadd = "Collect is_nadd" morphisms "dest_nadd" "mk_nadd" |
2854 apply (rule light_ex_imp_nonempty[where t="%n::nat. NUMERAL (0::nat)"]) |
3281 apply (rule light_ex_imp_nonempty[where t="%n::nat. NUMERAL 0"]) |
2855 by (import hollight TYDEF_nadd) |
3282 by (import hollight TYDEF_nadd) |
2856 |
3283 |
2857 syntax |
3284 syntax |
2858 dest_nadd :: _ |
3285 dest_nadd :: _ |
2859 |
3286 |
2976 lemma NADD_LE_ANTISYM: "ALL (x::nadd) y::nadd. (nadd_le x y & nadd_le y x) = nadd_eq x y" |
3403 lemma NADD_LE_ANTISYM: "ALL (x::nadd) y::nadd. (nadd_le x y & nadd_le y x) = nadd_eq x y" |
2977 by (import hollight NADD_LE_ANTISYM) |
3404 by (import hollight NADD_LE_ANTISYM) |
2978 |
3405 |
2979 lemma NADD_LE_TOTAL_LEMMA: "ALL (x::nadd) y::nadd. |
3406 lemma NADD_LE_TOTAL_LEMMA: "ALL (x::nadd) y::nadd. |
2980 ~ nadd_le x y --> |
3407 ~ nadd_le x y --> |
2981 (ALL B::nat. |
3408 (ALL B::nat. EX n::nat. n ~= 0 & < (dest_nadd y n + B) (dest_nadd x n))" |
2982 EX n::nat. n ~= (0::nat) & < (dest_nadd y n + B) (dest_nadd x n))" |
|
2983 by (import hollight NADD_LE_TOTAL_LEMMA) |
3409 by (import hollight NADD_LE_TOTAL_LEMMA) |
2984 |
3410 |
2985 lemma NADD_LE_TOTAL: "ALL (x::nadd) y::nadd. nadd_le x y | nadd_le y x" |
3411 lemma NADD_LE_TOTAL: "ALL (x::nadd) y::nadd. nadd_le x y | nadd_le y x" |
2986 by (import hollight NADD_LE_TOTAL) |
3412 by (import hollight NADD_LE_TOTAL) |
2987 |
3413 |
3013 |
3439 |
3014 lemma NADD_ADD_ASSOC: "ALL (x::nadd) (y::nadd) z::nadd. |
3440 lemma NADD_ADD_ASSOC: "ALL (x::nadd) (y::nadd) z::nadd. |
3015 nadd_eq (nadd_add x (nadd_add y z)) (nadd_add (nadd_add x y) z)" |
3441 nadd_eq (nadd_add x (nadd_add y z)) (nadd_add (nadd_add x y) z)" |
3016 by (import hollight NADD_ADD_ASSOC) |
3442 by (import hollight NADD_ADD_ASSOC) |
3017 |
3443 |
3018 lemma NADD_ADD_LID: "ALL x::nadd. nadd_eq (nadd_add (nadd_of_num (0::nat)) x) x" |
3444 lemma NADD_ADD_LID: "ALL x::nadd. nadd_eq (nadd_add (nadd_of_num 0) x) x" |
3019 by (import hollight NADD_ADD_LID) |
3445 by (import hollight NADD_ADD_LID) |
3020 |
3446 |
3021 lemma NADD_ADD_LCANCEL: "ALL (x::nadd) (y::nadd) z::nadd. |
3447 lemma NADD_ADD_LCANCEL: "ALL (x::nadd) (y::nadd) z::nadd. |
3022 nadd_eq (nadd_add x y) (nadd_add x z) --> nadd_eq y z" |
3448 nadd_eq (nadd_add x y) (nadd_add x z) --> nadd_eq y z" |
3023 by (import hollight NADD_ADD_LCANCEL) |
3449 by (import hollight NADD_ADD_LCANCEL) |
3052 |
3478 |
3053 lemma NADD_MUL_ASSOC: "ALL (x::nadd) (y::nadd) z::nadd. |
3479 lemma NADD_MUL_ASSOC: "ALL (x::nadd) (y::nadd) z::nadd. |
3054 nadd_eq (nadd_mul x (nadd_mul y z)) (nadd_mul (nadd_mul x y) z)" |
3480 nadd_eq (nadd_mul x (nadd_mul y z)) (nadd_mul (nadd_mul x y) z)" |
3055 by (import hollight NADD_MUL_ASSOC) |
3481 by (import hollight NADD_MUL_ASSOC) |
3056 |
3482 |
3057 lemma NADD_MUL_LID: "ALL x::nadd. nadd_eq (nadd_mul (nadd_of_num (NUMERAL_BIT1 (0::nat))) x) x" |
3483 lemma NADD_MUL_LID: "ALL x::nadd. nadd_eq (nadd_mul (nadd_of_num (NUMERAL_BIT1 0)) x) x" |
3058 by (import hollight NADD_MUL_LID) |
3484 by (import hollight NADD_MUL_LID) |
3059 |
3485 |
3060 lemma NADD_LDISTRIB: "ALL (x::nadd) (y::nadd) z::nadd. |
3486 lemma NADD_LDISTRIB: "ALL (x::nadd) (y::nadd) z::nadd. |
3061 nadd_eq (nadd_mul x (nadd_add y z)) |
3487 nadd_eq (nadd_mul x (nadd_add y z)) |
3062 (nadd_add (nadd_mul x y) (nadd_mul x z))" |
3488 (nadd_add (nadd_mul x y) (nadd_mul x z))" |
3073 lemma NADD_OF_NUM_MUL: "ALL (x::nat) xa::nat. |
3499 lemma NADD_OF_NUM_MUL: "ALL (x::nat) xa::nat. |
3074 nadd_eq (nadd_mul (nadd_of_num x) (nadd_of_num xa)) |
3500 nadd_eq (nadd_mul (nadd_of_num x) (nadd_of_num xa)) |
3075 (nadd_of_num (x * xa))" |
3501 (nadd_of_num (x * xa))" |
3076 by (import hollight NADD_OF_NUM_MUL) |
3502 by (import hollight NADD_OF_NUM_MUL) |
3077 |
3503 |
3078 lemma NADD_LE_0: "All (nadd_le (nadd_of_num (0::nat)))" |
3504 lemma NADD_LE_0: "All (nadd_le (nadd_of_num 0))" |
3079 by (import hollight NADD_LE_0) |
3505 by (import hollight NADD_LE_0) |
3080 |
3506 |
3081 lemma NADD_EQ_IMP_LE: "ALL (x::nadd) y::nadd. nadd_eq x y --> nadd_le x y" |
3507 lemma NADD_EQ_IMP_LE: "ALL (x::nadd) y::nadd. nadd_eq x y --> nadd_le x y" |
3082 by (import hollight NADD_EQ_IMP_LE) |
3508 by (import hollight NADD_EQ_IMP_LE) |
3083 |
3509 |
3101 nadd_eq (nadd_mul (nadd_add x y) z) |
3527 nadd_eq (nadd_mul (nadd_add x y) z) |
3102 (nadd_add (nadd_mul x z) (nadd_mul y z))" |
3528 (nadd_add (nadd_mul x z) (nadd_mul y z))" |
3103 by (import hollight NADD_RDISTRIB) |
3529 by (import hollight NADD_RDISTRIB) |
3104 |
3530 |
3105 lemma NADD_ARCH_MULT: "ALL (x::nadd) k::nat. |
3531 lemma NADD_ARCH_MULT: "ALL (x::nadd) k::nat. |
3106 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3532 ~ nadd_eq x (nadd_of_num 0) --> |
3107 (EX xa::nat. nadd_le (nadd_of_num k) (nadd_mul (nadd_of_num xa) x))" |
3533 (EX xa::nat. nadd_le (nadd_of_num k) (nadd_mul (nadd_of_num xa) x))" |
3108 by (import hollight NADD_ARCH_MULT) |
3534 by (import hollight NADD_ARCH_MULT) |
3109 |
3535 |
3110 lemma NADD_ARCH_ZERO: "ALL (x::nadd) k::nadd. |
3536 lemma NADD_ARCH_ZERO: "ALL (x::nadd) k::nadd. |
3111 (ALL n::nat. nadd_le (nadd_mul (nadd_of_num n) x) k) --> |
3537 (ALL n::nat. nadd_le (nadd_mul (nadd_of_num n) x) k) --> |
3112 nadd_eq x (nadd_of_num (0::nat))" |
3538 nadd_eq x (nadd_of_num 0)" |
3113 by (import hollight NADD_ARCH_ZERO) |
3539 by (import hollight NADD_ARCH_ZERO) |
3114 |
3540 |
3115 lemma NADD_ARCH_LEMMA: "ALL (x::nadd) (y::nadd) z::nadd. |
3541 lemma NADD_ARCH_LEMMA: "ALL (x::nadd) (y::nadd) z::nadd. |
3116 (ALL n::nat. |
3542 (ALL n::nat. |
3117 nadd_le (nadd_mul (nadd_of_num n) x) |
3543 nadd_le (nadd_mul (nadd_of_num n) x) |
3129 lemma NADD_UBOUND: "ALL x::nadd. |
3555 lemma NADD_UBOUND: "ALL x::nadd. |
3130 EX (xa::nat) N::nat. ALL n::nat. <= N n --> <= (dest_nadd x n) (xa * n)" |
3556 EX (xa::nat) N::nat. ALL n::nat. <= N n --> <= (dest_nadd x n) (xa * n)" |
3131 by (import hollight NADD_UBOUND) |
3557 by (import hollight NADD_UBOUND) |
3132 |
3558 |
3133 lemma NADD_NONZERO: "ALL x::nadd. |
3559 lemma NADD_NONZERO: "ALL x::nadd. |
3134 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3560 ~ nadd_eq x (nadd_of_num 0) --> |
3135 (EX N::nat. ALL n::nat. <= N n --> dest_nadd x n ~= (0::nat))" |
3561 (EX N::nat. ALL n::nat. <= N n --> dest_nadd x n ~= 0)" |
3136 by (import hollight NADD_NONZERO) |
3562 by (import hollight NADD_NONZERO) |
3137 |
3563 |
3138 lemma NADD_LBOUND: "ALL x::nadd. |
3564 lemma NADD_LBOUND: "ALL x::nadd. |
3139 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3565 ~ nadd_eq x (nadd_of_num 0) --> |
3140 (EX (A::nat) N::nat. ALL n::nat. <= N n --> <= n (A * dest_nadd x n))" |
3566 (EX (A::nat) N::nat. ALL n::nat. <= N n --> <= n (A * dest_nadd x n))" |
3141 by (import hollight NADD_LBOUND) |
3567 by (import hollight NADD_LBOUND) |
3142 |
3568 |
3143 constdefs |
3569 constdefs |
3144 nadd_rinv :: "nadd => nat => nat" |
3570 nadd_rinv :: "nadd => nat => nat" |
3146 |
3572 |
3147 lemma DEF_nadd_rinv: "nadd_rinv = (%(u::nadd) n::nat. DIV (n * n) (dest_nadd u n))" |
3573 lemma DEF_nadd_rinv: "nadd_rinv = (%(u::nadd) n::nat. DIV (n * n) (dest_nadd u n))" |
3148 by (import hollight DEF_nadd_rinv) |
3574 by (import hollight DEF_nadd_rinv) |
3149 |
3575 |
3150 lemma NADD_MUL_LINV_LEMMA0: "ALL x::nadd. |
3576 lemma NADD_MUL_LINV_LEMMA0: "ALL x::nadd. |
3151 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3577 ~ nadd_eq x (nadd_of_num 0) --> |
3152 (EX (xa::nat) B::nat. ALL i::nat. <= (nadd_rinv x i) (xa * i + B))" |
3578 (EX (xa::nat) B::nat. ALL i::nat. <= (nadd_rinv x i) (xa * i + B))" |
3153 by (import hollight NADD_MUL_LINV_LEMMA0) |
3579 by (import hollight NADD_MUL_LINV_LEMMA0) |
3154 |
3580 |
3155 lemma NADD_MUL_LINV_LEMMA1: "ALL (x::nadd) n::nat. |
3581 lemma NADD_MUL_LINV_LEMMA1: "ALL (x::nadd) n::nat. |
3156 dest_nadd x n ~= (0::nat) --> |
3582 dest_nadd x n ~= 0 --> |
3157 <= (dist (dest_nadd x n * nadd_rinv x n, n * n)) (dest_nadd x n)" |
3583 <= (dist (dest_nadd x n * nadd_rinv x n, n * n)) (dest_nadd x n)" |
3158 by (import hollight NADD_MUL_LINV_LEMMA1) |
3584 by (import hollight NADD_MUL_LINV_LEMMA1) |
3159 |
3585 |
3160 lemma NADD_MUL_LINV_LEMMA2: "ALL x::nadd. |
3586 lemma NADD_MUL_LINV_LEMMA2: "ALL x::nadd. |
3161 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3587 ~ nadd_eq x (nadd_of_num 0) --> |
3162 (EX N::nat. |
3588 (EX N::nat. |
3163 ALL n::nat. |
3589 ALL n::nat. |
3164 <= N n --> |
3590 <= N n --> |
3165 <= (dist (dest_nadd x n * nadd_rinv x n, n * n)) (dest_nadd x n))" |
3591 <= (dist (dest_nadd x n * nadd_rinv x n, n * n)) (dest_nadd x n))" |
3166 by (import hollight NADD_MUL_LINV_LEMMA2) |
3592 by (import hollight NADD_MUL_LINV_LEMMA2) |
3167 |
3593 |
3168 lemma NADD_MUL_LINV_LEMMA3: "ALL x::nadd. |
3594 lemma NADD_MUL_LINV_LEMMA3: "ALL x::nadd. |
3169 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3595 ~ nadd_eq x (nadd_of_num 0) --> |
3170 (EX N::nat. |
3596 (EX N::nat. |
3171 ALL (m::nat) n::nat. |
3597 ALL (m::nat) n::nat. |
3172 <= N n --> |
3598 <= N n --> |
3173 <= (dist |
3599 <= (dist |
3174 (m * (dest_nadd x m * (dest_nadd x n * nadd_rinv x n)), |
3600 (m * (dest_nadd x m * (dest_nadd x n * nadd_rinv x n)), |
3175 m * (dest_nadd x m * (n * n)))) |
3601 m * (dest_nadd x m * (n * n)))) |
3176 (m * (dest_nadd x m * dest_nadd x n)))" |
3602 (m * (dest_nadd x m * dest_nadd x n)))" |
3177 by (import hollight NADD_MUL_LINV_LEMMA3) |
3603 by (import hollight NADD_MUL_LINV_LEMMA3) |
3178 |
3604 |
3179 lemma NADD_MUL_LINV_LEMMA4: "ALL x::nadd. |
3605 lemma NADD_MUL_LINV_LEMMA4: "ALL x::nadd. |
3180 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3606 ~ nadd_eq x (nadd_of_num 0) --> |
3181 (EX N::nat. |
3607 (EX N::nat. |
3182 ALL (m::nat) n::nat. |
3608 ALL (m::nat) n::nat. |
3183 <= N m & <= N n --> |
3609 <= N m & <= N n --> |
3184 <= (dest_nadd x m * dest_nadd x n * |
3610 <= (dest_nadd x m * dest_nadd x n * |
3185 dist (m * nadd_rinv x n, n * nadd_rinv x m)) |
3611 dist (m * nadd_rinv x n, n * nadd_rinv x m)) |
3186 (m * n * dist (m * dest_nadd x n, n * dest_nadd x m) + |
3612 (m * n * dist (m * dest_nadd x n, n * dest_nadd x m) + |
3187 dest_nadd x m * dest_nadd x n * (m + n)))" |
3613 dest_nadd x m * dest_nadd x n * (m + n)))" |
3188 by (import hollight NADD_MUL_LINV_LEMMA4) |
3614 by (import hollight NADD_MUL_LINV_LEMMA4) |
3189 |
3615 |
3190 lemma NADD_MUL_LINV_LEMMA5: "ALL x::nadd. |
3616 lemma NADD_MUL_LINV_LEMMA5: "ALL x::nadd. |
3191 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3617 ~ nadd_eq x (nadd_of_num 0) --> |
3192 (EX (B::nat) N::nat. |
3618 (EX (B::nat) N::nat. |
3193 ALL (m::nat) n::nat. |
3619 ALL (m::nat) n::nat. |
3194 <= N m & <= N n --> |
3620 <= N m & <= N n --> |
3195 <= (dest_nadd x m * dest_nadd x n * |
3621 <= (dest_nadd x m * dest_nadd x n * |
3196 dist (m * nadd_rinv x n, n * nadd_rinv x m)) |
3622 dist (m * nadd_rinv x n, n * nadd_rinv x m)) |
3197 (B * (m * n * (m + n))))" |
3623 (B * (m * n * (m + n))))" |
3198 by (import hollight NADD_MUL_LINV_LEMMA5) |
3624 by (import hollight NADD_MUL_LINV_LEMMA5) |
3199 |
3625 |
3200 lemma NADD_MUL_LINV_LEMMA6: "ALL x::nadd. |
3626 lemma NADD_MUL_LINV_LEMMA6: "ALL x::nadd. |
3201 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3627 ~ nadd_eq x (nadd_of_num 0) --> |
3202 (EX (B::nat) N::nat. |
3628 (EX (B::nat) N::nat. |
3203 ALL (m::nat) n::nat. |
3629 ALL (m::nat) n::nat. |
3204 <= N m & <= N n --> |
3630 <= N m & <= N n --> |
3205 <= (m * n * dist (m * nadd_rinv x n, n * nadd_rinv x m)) |
3631 <= (m * n * dist (m * nadd_rinv x n, n * nadd_rinv x m)) |
3206 (B * (m * n * (m + n))))" |
3632 (B * (m * n * (m + n))))" |
3207 by (import hollight NADD_MUL_LINV_LEMMA6) |
3633 by (import hollight NADD_MUL_LINV_LEMMA6) |
3208 |
3634 |
3209 lemma NADD_MUL_LINV_LEMMA7: "ALL x::nadd. |
3635 lemma NADD_MUL_LINV_LEMMA7: "ALL x::nadd. |
3210 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3636 ~ nadd_eq x (nadd_of_num 0) --> |
3211 (EX (B::nat) N::nat. |
3637 (EX (B::nat) N::nat. |
3212 ALL (m::nat) n::nat. |
3638 ALL (m::nat) n::nat. |
3213 <= N m & <= N n --> |
3639 <= N m & <= N n --> |
3214 <= (dist (m * nadd_rinv x n, n * nadd_rinv x m)) (B * (m + n)))" |
3640 <= (dist (m * nadd_rinv x n, n * nadd_rinv x m)) (B * (m + n)))" |
3215 by (import hollight NADD_MUL_LINV_LEMMA7) |
3641 by (import hollight NADD_MUL_LINV_LEMMA7) |
3216 |
3642 |
3217 lemma NADD_MUL_LINV_LEMMA7a: "ALL x::nadd. |
3643 lemma NADD_MUL_LINV_LEMMA7a: "ALL x::nadd. |
3218 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3644 ~ nadd_eq x (nadd_of_num 0) --> |
3219 (ALL N::nat. |
3645 (ALL N::nat. |
3220 EX (A::nat) B::nat. |
3646 EX (A::nat) B::nat. |
3221 ALL (m::nat) n::nat. |
3647 ALL (m::nat) n::nat. |
3222 <= m N --> |
3648 <= m N --> |
3223 <= (dist (m * nadd_rinv x n, n * nadd_rinv x m)) (A * n + B))" |
3649 <= (dist (m * nadd_rinv x n, n * nadd_rinv x m)) (A * n + B))" |
3224 by (import hollight NADD_MUL_LINV_LEMMA7a) |
3650 by (import hollight NADD_MUL_LINV_LEMMA7a) |
3225 |
3651 |
3226 lemma NADD_MUL_LINV_LEMMA8: "ALL x::nadd. |
3652 lemma NADD_MUL_LINV_LEMMA8: "ALL x::nadd. |
3227 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3653 ~ nadd_eq x (nadd_of_num 0) --> |
3228 (EX B::nat. |
3654 (EX B::nat. |
3229 ALL (m::nat) n::nat. |
3655 ALL (m::nat) n::nat. |
3230 <= (dist (m * nadd_rinv x n, n * nadd_rinv x m)) (B * (m + n)))" |
3656 <= (dist (m * nadd_rinv x n, n * nadd_rinv x m)) (B * (m + n)))" |
3231 by (import hollight NADD_MUL_LINV_LEMMA8) |
3657 by (import hollight NADD_MUL_LINV_LEMMA8) |
3232 |
3658 |
3233 constdefs |
3659 constdefs |
3234 nadd_inv :: "nadd => nadd" |
3660 nadd_inv :: "nadd => nadd" |
3235 "nadd_inv == |
3661 "nadd_inv == |
3236 %u::nadd. |
3662 %u::nadd. |
3237 COND (nadd_eq u (nadd_of_num (0::nat))) (nadd_of_num (0::nat)) |
3663 COND (nadd_eq u (nadd_of_num 0)) (nadd_of_num 0) (mk_nadd (nadd_rinv u))" |
3238 (mk_nadd (nadd_rinv u))" |
|
3239 |
3664 |
3240 lemma DEF_nadd_inv: "nadd_inv = |
3665 lemma DEF_nadd_inv: "nadd_inv = |
3241 (%u::nadd. |
3666 (%u::nadd. |
3242 COND (nadd_eq u (nadd_of_num (0::nat))) (nadd_of_num (0::nat)) |
3667 COND (nadd_eq u (nadd_of_num 0)) (nadd_of_num 0) |
3243 (mk_nadd (nadd_rinv u)))" |
3668 (mk_nadd (nadd_rinv u)))" |
3244 by (import hollight DEF_nadd_inv) |
3669 by (import hollight DEF_nadd_inv) |
3245 |
3670 |
3246 lemma NADD_INV: "ALL x::nadd. |
3671 lemma NADD_INV: "ALL x::nadd. |
3247 dest_nadd (nadd_inv x) = |
3672 dest_nadd (nadd_inv x) = |
3248 COND (nadd_eq x (nadd_of_num (0::nat))) (%n::nat. 0::nat) (nadd_rinv x)" |
3673 COND (nadd_eq x (nadd_of_num 0)) (%n::nat. 0) (nadd_rinv x)" |
3249 by (import hollight NADD_INV) |
3674 by (import hollight NADD_INV) |
3250 |
3675 |
3251 lemma NADD_MUL_LINV: "ALL x::nadd. |
3676 lemma NADD_MUL_LINV: "ALL x::nadd. |
3252 ~ nadd_eq x (nadd_of_num (0::nat)) --> |
3677 ~ nadd_eq x (nadd_of_num 0) --> |
3253 nadd_eq (nadd_mul (nadd_inv x) x) (nadd_of_num (NUMERAL_BIT1 (0::nat)))" |
3678 nadd_eq (nadd_mul (nadd_inv x) x) (nadd_of_num (NUMERAL_BIT1 0))" |
3254 by (import hollight NADD_MUL_LINV) |
3679 by (import hollight NADD_MUL_LINV) |
3255 |
3680 |
3256 lemma NADD_INV_0: "nadd_eq (nadd_inv (nadd_of_num (0::nat))) (nadd_of_num (0::nat))" |
3681 lemma NADD_INV_0: "nadd_eq (nadd_inv (nadd_of_num 0)) (nadd_of_num 0)" |
3257 by (import hollight NADD_INV_0) |
3682 by (import hollight NADD_INV_0) |
3258 |
3683 |
3259 lemma NADD_INV_WELLDEF: "ALL (x::nadd) y::nadd. nadd_eq x y --> nadd_eq (nadd_inv x) (nadd_inv y)" |
3684 lemma NADD_INV_WELLDEF: "ALL (x::nadd) y::nadd. nadd_eq x y --> nadd_eq (nadd_inv x) (nadd_inv y)" |
3260 by (import hollight NADD_INV_WELLDEF) |
3685 by (import hollight NADD_INV_WELLDEF) |
3261 |
3686 |
3359 |
3784 |
3360 lemma HREAL_LE_ADD_RCANCEL: "ALL (x::hreal) (xa::hreal) xb::hreal. |
3785 lemma HREAL_LE_ADD_RCANCEL: "ALL (x::hreal) (xa::hreal) xb::hreal. |
3361 hreal_le (hreal_add x xb) (hreal_add xa xb) = hreal_le x xa" |
3786 hreal_le (hreal_add x xb) (hreal_add xa xb) = hreal_le x xa" |
3362 by (import hollight HREAL_LE_ADD_RCANCEL) |
3787 by (import hollight HREAL_LE_ADD_RCANCEL) |
3363 |
3788 |
3364 lemma HREAL_ADD_RID: "ALL x::hreal. hreal_add x (hreal_of_num (0::nat)) = x" |
3789 lemma HREAL_ADD_RID: "ALL x::hreal. hreal_add x (hreal_of_num 0) = x" |
3365 by (import hollight HREAL_ADD_RID) |
3790 by (import hollight HREAL_ADD_RID) |
3366 |
3791 |
3367 lemma HREAL_ADD_RDISTRIB: "ALL (x::hreal) (xa::hreal) xb::hreal. |
3792 lemma HREAL_ADD_RDISTRIB: "ALL (x::hreal) (xa::hreal) xb::hreal. |
3368 hreal_mul (hreal_add x xa) xb = |
3793 hreal_mul (hreal_add x xa) xb = |
3369 hreal_add (hreal_mul x xb) (hreal_mul xa xb)" |
3794 hreal_add (hreal_mul x xb) (hreal_mul xa xb)" |
3370 by (import hollight HREAL_ADD_RDISTRIB) |
3795 by (import hollight HREAL_ADD_RDISTRIB) |
3371 |
3796 |
3372 lemma HREAL_MUL_LZERO: "ALL m::hreal. hreal_mul (hreal_of_num (0::nat)) m = hreal_of_num (0::nat)" |
3797 lemma HREAL_MUL_LZERO: "ALL m::hreal. hreal_mul (hreal_of_num 0) m = hreal_of_num 0" |
3373 by (import hollight HREAL_MUL_LZERO) |
3798 by (import hollight HREAL_MUL_LZERO) |
3374 |
3799 |
3375 lemma HREAL_MUL_RZERO: "ALL x::hreal. hreal_mul x (hreal_of_num (0::nat)) = hreal_of_num (0::nat)" |
3800 lemma HREAL_MUL_RZERO: "ALL x::hreal. hreal_mul x (hreal_of_num 0) = hreal_of_num 0" |
3376 by (import hollight HREAL_MUL_RZERO) |
3801 by (import hollight HREAL_MUL_RZERO) |
3377 |
3802 |
3378 lemma HREAL_ADD_AC: "hreal_add (m::hreal) (n::hreal) = hreal_add n m & |
3803 lemma HREAL_ADD_AC: "hreal_add (m::hreal) (n::hreal) = hreal_add n m & |
3379 hreal_add (hreal_add m n) (p::hreal) = hreal_add m (hreal_add n p) & |
3804 hreal_add (hreal_add m n) (p::hreal) = hreal_add m (hreal_add n p) & |
3380 hreal_add m (hreal_add n p) = hreal_add n (hreal_add m p)" |
3805 hreal_add m (hreal_add n p) = hreal_add n (hreal_add m p)" |
3388 hreal_le a b --> hreal_le (hreal_mul a c) (hreal_mul b c)" |
3813 hreal_le a b --> hreal_le (hreal_mul a c) (hreal_mul b c)" |
3389 by (import hollight HREAL_LE_MUL_RCANCEL_IMP) |
3814 by (import hollight HREAL_LE_MUL_RCANCEL_IMP) |
3390 |
3815 |
3391 constdefs |
3816 constdefs |
3392 treal_of_num :: "nat => hreal * hreal" |
3817 treal_of_num :: "nat => hreal * hreal" |
3393 "treal_of_num == %u::nat. (hreal_of_num u, hreal_of_num (0::nat))" |
3818 "treal_of_num == %u::nat. (hreal_of_num u, hreal_of_num 0)" |
3394 |
3819 |
3395 lemma DEF_treal_of_num: "treal_of_num = (%u::nat. (hreal_of_num u, hreal_of_num (0::nat)))" |
3820 lemma DEF_treal_of_num: "treal_of_num = (%u::nat. (hreal_of_num u, hreal_of_num 0))" |
3396 by (import hollight DEF_treal_of_num) |
3821 by (import hollight DEF_treal_of_num) |
3397 |
3822 |
3398 constdefs |
3823 constdefs |
3399 treal_neg :: "hreal * hreal => hreal * hreal" |
3824 treal_neg :: "hreal * hreal => hreal * hreal" |
3400 "treal_neg == %u::hreal * hreal. (snd u, fst u)" |
3825 "treal_neg == %u::hreal * hreal. (snd u, fst u)" |
3439 |
3864 |
3440 constdefs |
3865 constdefs |
3441 treal_inv :: "hreal * hreal => hreal * hreal" |
3866 treal_inv :: "hreal * hreal => hreal * hreal" |
3442 "treal_inv == |
3867 "treal_inv == |
3443 %u::hreal * hreal. |
3868 %u::hreal * hreal. |
3444 COND (fst u = snd u) (hreal_of_num (0::nat), hreal_of_num (0::nat)) |
3869 COND (fst u = snd u) (hreal_of_num 0, hreal_of_num 0) |
3445 (COND (hreal_le (snd u) (fst u)) |
3870 (COND (hreal_le (snd u) (fst u)) |
3446 (hreal_inv (SOME d::hreal. fst u = hreal_add (snd u) d), |
3871 (hreal_inv (SOME d::hreal. fst u = hreal_add (snd u) d), |
3447 hreal_of_num (0::nat)) |
3872 hreal_of_num 0) |
3448 (hreal_of_num (0::nat), |
3873 (hreal_of_num 0, |
3449 hreal_inv (SOME d::hreal. snd u = hreal_add (fst u) d)))" |
3874 hreal_inv (SOME d::hreal. snd u = hreal_add (fst u) d)))" |
3450 |
3875 |
3451 lemma DEF_treal_inv: "treal_inv = |
3876 lemma DEF_treal_inv: "treal_inv = |
3452 (%u::hreal * hreal. |
3877 (%u::hreal * hreal. |
3453 COND (fst u = snd u) (hreal_of_num (0::nat), hreal_of_num (0::nat)) |
3878 COND (fst u = snd u) (hreal_of_num 0, hreal_of_num 0) |
3454 (COND (hreal_le (snd u) (fst u)) |
3879 (COND (hreal_le (snd u) (fst u)) |
3455 (hreal_inv (SOME d::hreal. fst u = hreal_add (snd u) d), |
3880 (hreal_inv (SOME d::hreal. fst u = hreal_add (snd u) d), |
3456 hreal_of_num (0::nat)) |
3881 hreal_of_num 0) |
3457 (hreal_of_num (0::nat), |
3882 (hreal_of_num 0, |
3458 hreal_inv (SOME d::hreal. snd u = hreal_add (fst u) d))))" |
3883 hreal_inv (SOME d::hreal. snd u = hreal_add (fst u) d))))" |
3459 by (import hollight DEF_treal_inv) |
3884 by (import hollight DEF_treal_inv) |
3460 |
3885 |
3461 constdefs |
3886 constdefs |
3462 treal_eq :: "hreal * hreal => hreal * hreal => bool" |
3887 treal_eq :: "hreal * hreal => hreal * hreal => bool" |
3510 |
3935 |
3511 lemma TREAL_ADD_ASSOC: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3936 lemma TREAL_ADD_ASSOC: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3512 treal_eq (treal_add x (treal_add y z)) (treal_add (treal_add x y) z)" |
3937 treal_eq (treal_add x (treal_add y z)) (treal_add (treal_add x y) z)" |
3513 by (import hollight TREAL_ADD_ASSOC) |
3938 by (import hollight TREAL_ADD_ASSOC) |
3514 |
3939 |
3515 lemma TREAL_ADD_LID: "ALL x::hreal * hreal. treal_eq (treal_add (treal_of_num (0::nat)) x) x" |
3940 lemma TREAL_ADD_LID: "ALL x::hreal * hreal. treal_eq (treal_add (treal_of_num 0) x) x" |
3516 by (import hollight TREAL_ADD_LID) |
3941 by (import hollight TREAL_ADD_LID) |
3517 |
3942 |
3518 lemma TREAL_ADD_LINV: "ALL x::hreal * hreal. |
3943 lemma TREAL_ADD_LINV: "ALL x::hreal * hreal. treal_eq (treal_add (treal_neg x) x) (treal_of_num 0)" |
3519 treal_eq (treal_add (treal_neg x) x) (treal_of_num (0::nat))" |
|
3520 by (import hollight TREAL_ADD_LINV) |
3944 by (import hollight TREAL_ADD_LINV) |
3521 |
3945 |
3522 lemma TREAL_MUL_SYM: "ALL (x::hreal * hreal) y::hreal * hreal. |
3946 lemma TREAL_MUL_SYM: "ALL (x::hreal * hreal) y::hreal * hreal. |
3523 treal_eq (treal_mul x y) (treal_mul y x)" |
3947 treal_eq (treal_mul x y) (treal_mul y x)" |
3524 by (import hollight TREAL_MUL_SYM) |
3948 by (import hollight TREAL_MUL_SYM) |
3526 lemma TREAL_MUL_ASSOC: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3950 lemma TREAL_MUL_ASSOC: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3527 treal_eq (treal_mul x (treal_mul y z)) (treal_mul (treal_mul x y) z)" |
3951 treal_eq (treal_mul x (treal_mul y z)) (treal_mul (treal_mul x y) z)" |
3528 by (import hollight TREAL_MUL_ASSOC) |
3952 by (import hollight TREAL_MUL_ASSOC) |
3529 |
3953 |
3530 lemma TREAL_MUL_LID: "ALL x::hreal * hreal. |
3954 lemma TREAL_MUL_LID: "ALL x::hreal * hreal. |
3531 treal_eq (treal_mul (treal_of_num (NUMERAL_BIT1 (0::nat))) x) x" |
3955 treal_eq (treal_mul (treal_of_num (NUMERAL_BIT1 0)) x) x" |
3532 by (import hollight TREAL_MUL_LID) |
3956 by (import hollight TREAL_MUL_LID) |
3533 |
3957 |
3534 lemma TREAL_ADD_LDISTRIB: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3958 lemma TREAL_ADD_LDISTRIB: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3535 treal_eq (treal_mul x (treal_add y z)) |
3959 treal_eq (treal_mul x (treal_add y z)) |
3536 (treal_add (treal_mul x y) (treal_mul x z))" |
3960 (treal_add (treal_mul x y) (treal_mul x z))" |
3553 lemma TREAL_LE_LADD_IMP: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3977 lemma TREAL_LE_LADD_IMP: "ALL (x::hreal * hreal) (y::hreal * hreal) z::hreal * hreal. |
3554 treal_le y z --> treal_le (treal_add x y) (treal_add x z)" |
3978 treal_le y z --> treal_le (treal_add x y) (treal_add x z)" |
3555 by (import hollight TREAL_LE_LADD_IMP) |
3979 by (import hollight TREAL_LE_LADD_IMP) |
3556 |
3980 |
3557 lemma TREAL_LE_MUL: "ALL (x::hreal * hreal) y::hreal * hreal. |
3981 lemma TREAL_LE_MUL: "ALL (x::hreal * hreal) y::hreal * hreal. |
3558 treal_le (treal_of_num (0::nat)) x & |
3982 treal_le (treal_of_num 0) x & treal_le (treal_of_num 0) y --> |
3559 treal_le (treal_of_num (0::nat)) y --> |
3983 treal_le (treal_of_num 0) (treal_mul x y)" |
3560 treal_le (treal_of_num (0::nat)) (treal_mul x y)" |
|
3561 by (import hollight TREAL_LE_MUL) |
3984 by (import hollight TREAL_LE_MUL) |
3562 |
3985 |
3563 lemma TREAL_INV_0: "treal_eq (treal_inv (treal_of_num (0::nat))) (treal_of_num (0::nat))" |
3986 lemma TREAL_INV_0: "treal_eq (treal_inv (treal_of_num 0)) (treal_of_num 0)" |
3564 by (import hollight TREAL_INV_0) |
3987 by (import hollight TREAL_INV_0) |
3565 |
3988 |
3566 lemma TREAL_MUL_LINV: "ALL x::hreal * hreal. |
3989 lemma TREAL_MUL_LINV: "ALL x::hreal * hreal. |
3567 ~ treal_eq x (treal_of_num (0::nat)) --> |
3990 ~ treal_eq x (treal_of_num 0) --> |
3568 treal_eq (treal_mul (treal_inv x) x) |
3991 treal_eq (treal_mul (treal_inv x) x) (treal_of_num (NUMERAL_BIT1 0))" |
3569 (treal_of_num (NUMERAL_BIT1 (0::nat)))" |
|
3570 by (import hollight TREAL_MUL_LINV) |
3992 by (import hollight TREAL_MUL_LINV) |
3571 |
3993 |
3572 lemma TREAL_OF_NUM_WELLDEF: "ALL (m::nat) n::nat. m = n --> treal_eq (treal_of_num m) (treal_of_num n)" |
3994 lemma TREAL_OF_NUM_WELLDEF: "ALL (m::nat) n::nat. m = n --> treal_eq (treal_of_num m) (treal_of_num n)" |
3573 by (import hollight TREAL_OF_NUM_WELLDEF) |
3995 by (import hollight TREAL_OF_NUM_WELLDEF) |
3574 |
3996 |
3747 by (import hollight DEF_real_gt) |
4169 by (import hollight DEF_real_gt) |
3748 |
4170 |
3749 constdefs |
4171 constdefs |
3750 real_abs :: "hollight.real => hollight.real" |
4172 real_abs :: "hollight.real => hollight.real" |
3751 "real_abs == |
4173 "real_abs == |
3752 %u::hollight.real. COND (real_le (real_of_num (0::nat)) u) u (real_neg u)" |
4174 %u::hollight.real. COND (real_le (real_of_num 0) u) u (real_neg u)" |
3753 |
4175 |
3754 lemma DEF_real_abs: "real_abs = |
4176 lemma DEF_real_abs: "real_abs = |
3755 (%u::hollight.real. COND (real_le (real_of_num (0::nat)) u) u (real_neg u))" |
4177 (%u::hollight.real. COND (real_le (real_of_num 0) u) u (real_neg u))" |
3756 by (import hollight DEF_real_abs) |
4178 by (import hollight DEF_real_abs) |
3757 |
4179 |
3758 constdefs |
4180 constdefs |
3759 real_pow :: "hollight.real => nat => hollight.real" |
4181 real_pow :: "hollight.real => nat => hollight.real" |
3760 "real_pow == |
4182 "real_pow == |
3761 SOME real_pow::hollight.real => nat => hollight.real. |
4183 SOME real_pow::hollight.real => nat => hollight.real. |
3762 (ALL x::hollight.real. |
4184 (ALL x::hollight.real. real_pow x 0 = real_of_num (NUMERAL_BIT1 0)) & |
3763 real_pow x (0::nat) = real_of_num (NUMERAL_BIT1 (0::nat))) & |
|
3764 (ALL (x::hollight.real) n::nat. |
4185 (ALL (x::hollight.real) n::nat. |
3765 real_pow x (Suc n) = real_mul x (real_pow x n))" |
4186 real_pow x (Suc n) = real_mul x (real_pow x n))" |
3766 |
4187 |
3767 lemma DEF_real_pow: "real_pow = |
4188 lemma DEF_real_pow: "real_pow = |
3768 (SOME real_pow::hollight.real => nat => hollight.real. |
4189 (SOME real_pow::hollight.real => nat => hollight.real. |
3769 (ALL x::hollight.real. |
4190 (ALL x::hollight.real. real_pow x 0 = real_of_num (NUMERAL_BIT1 0)) & |
3770 real_pow x (0::nat) = real_of_num (NUMERAL_BIT1 (0::nat))) & |
|
3771 (ALL (x::hollight.real) n::nat. |
4191 (ALL (x::hollight.real) n::nat. |
3772 real_pow x (Suc n) = real_mul x (real_pow x n)))" |
4192 real_pow x (Suc n) = real_mul x (real_pow x n)))" |
3773 by (import hollight DEF_real_pow) |
4193 by (import hollight DEF_real_pow) |
3774 |
4194 |
3775 constdefs |
4195 constdefs |
3793 lemma DEF_real_min: "real_min = (%(u::hollight.real) ua::hollight.real. COND (real_le u ua) u ua)" |
4213 lemma DEF_real_min: "real_min = (%(u::hollight.real) ua::hollight.real. COND (real_le u ua) u ua)" |
3794 by (import hollight DEF_real_min) |
4214 by (import hollight DEF_real_min) |
3795 |
4215 |
3796 lemma REAL_HREAL_LEMMA1: "EX x::hreal => hollight.real. |
4216 lemma REAL_HREAL_LEMMA1: "EX x::hreal => hollight.real. |
3797 (ALL xa::hollight.real. |
4217 (ALL xa::hollight.real. |
3798 real_le (real_of_num (0::nat)) xa = (EX y::hreal. xa = x y)) & |
4218 real_le (real_of_num 0) xa = (EX y::hreal. xa = x y)) & |
3799 (ALL (y::hreal) z::hreal. hreal_le y z = real_le (x y) (x z))" |
4219 (ALL (y::hreal) z::hreal. hreal_le y z = real_le (x y) (x z))" |
3800 by (import hollight REAL_HREAL_LEMMA1) |
4220 by (import hollight REAL_HREAL_LEMMA1) |
3801 |
4221 |
3802 lemma REAL_HREAL_LEMMA2: "EX (x::hollight.real => hreal) r::hreal => hollight.real. |
4222 lemma REAL_HREAL_LEMMA2: "EX (x::hollight.real => hreal) r::hreal => hollight.real. |
3803 (ALL xa::hreal. x (r xa) = xa) & |
4223 (ALL xa::hreal. x (r xa) = xa) & |
3804 (ALL xa::hollight.real. |
4224 (ALL xa::hollight.real. real_le (real_of_num 0) xa --> r (x xa) = xa) & |
3805 real_le (real_of_num (0::nat)) xa --> r (x xa) = xa) & |
4225 (ALL x::hreal. real_le (real_of_num 0) (r x)) & |
3806 (ALL x::hreal. real_le (real_of_num (0::nat)) (r x)) & |
|
3807 (ALL (x::hreal) y::hreal. hreal_le x y = real_le (r x) (r y))" |
4226 (ALL (x::hreal) y::hreal. hreal_le x y = real_le (r x) (r y))" |
3808 by (import hollight REAL_HREAL_LEMMA2) |
4227 by (import hollight REAL_HREAL_LEMMA2) |
3809 |
4228 |
3810 lemma REAL_COMPLETE_SOMEPOS: "ALL P::hollight.real => bool. |
4229 lemma REAL_COMPLETE_SOMEPOS: "ALL P::hollight.real => bool. |
3811 (EX x::hollight.real. P x & real_le (real_of_num (0::nat)) x) & |
4230 (EX x::hollight.real. P x & real_le (real_of_num 0) x) & |
3812 (EX M::hollight.real. ALL x::hollight.real. P x --> real_le x M) --> |
4231 (EX M::hollight.real. ALL x::hollight.real. P x --> real_le x M) --> |
3813 (EX M::hollight.real. |
4232 (EX M::hollight.real. |
3814 (ALL x::hollight.real. P x --> real_le x M) & |
4233 (ALL x::hollight.real. P x --> real_le x M) & |
3815 (ALL M'::hollight.real. |
4234 (ALL M'::hollight.real. |
3816 (ALL x::hollight.real. P x --> real_le x M') --> real_le M M'))" |
4235 (ALL x::hollight.real. P x --> real_le x M') --> real_le M M'))" |
3828 lemma REAL_ADD_AC: "real_add (m::hollight.real) (n::hollight.real) = real_add n m & |
4247 lemma REAL_ADD_AC: "real_add (m::hollight.real) (n::hollight.real) = real_add n m & |
3829 real_add (real_add m n) (p::hollight.real) = real_add m (real_add n p) & |
4248 real_add (real_add m n) (p::hollight.real) = real_add m (real_add n p) & |
3830 real_add m (real_add n p) = real_add n (real_add m p)" |
4249 real_add m (real_add n p) = real_add n (real_add m p)" |
3831 by (import hollight REAL_ADD_AC) |
4250 by (import hollight REAL_ADD_AC) |
3832 |
4251 |
3833 lemma REAL_ADD_RINV: "ALL x::hollight.real. real_add x (real_neg x) = real_of_num (0::nat)" |
4252 lemma REAL_ADD_RINV: "ALL x::hollight.real. real_add x (real_neg x) = real_of_num 0" |
3834 by (import hollight REAL_ADD_RINV) |
4253 by (import hollight REAL_ADD_RINV) |
3835 |
4254 |
3836 lemma REAL_EQ_ADD_LCANCEL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4255 lemma REAL_EQ_ADD_LCANCEL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
3837 (real_add x y = real_add x z) = (y = z)" |
4256 (real_add x y = real_add x z) = (y = z)" |
3838 by (import hollight REAL_EQ_ADD_LCANCEL) |
4257 by (import hollight REAL_EQ_ADD_LCANCEL) |
3850 |
4269 |
3851 lemma REAL_MUL_LNEG: "ALL (x::hollight.real) y::hollight.real. |
4270 lemma REAL_MUL_LNEG: "ALL (x::hollight.real) y::hollight.real. |
3852 real_mul (real_neg x) y = real_neg (real_mul x y)" |
4271 real_mul (real_neg x) y = real_neg (real_mul x y)" |
3853 by (import hollight REAL_MUL_LNEG) |
4272 by (import hollight REAL_MUL_LNEG) |
3854 |
4273 |
3855 lemma REAL_ADD_RID: "ALL x::hollight.real. real_add x (real_of_num (0::nat)) = x" |
4274 lemma REAL_ADD_RID: "ALL x::hollight.real. real_add x (real_of_num 0) = x" |
3856 by (import hollight REAL_ADD_RID) |
4275 by (import hollight REAL_ADD_RID) |
3857 |
4276 |
3858 lemma REAL_LE_LNEG: "ALL (x::hollight.real) y::hollight.real. |
4277 lemma REAL_LE_LNEG: "ALL (x::hollight.real) y::hollight.real. |
3859 real_le (real_neg x) y = real_le (real_of_num (0::nat)) (real_add x y)" |
4278 real_le (real_neg x) y = real_le (real_of_num 0) (real_add x y)" |
3860 by (import hollight REAL_LE_LNEG) |
4279 by (import hollight REAL_LE_LNEG) |
3861 |
4280 |
3862 lemma REAL_LE_NEG2: "ALL (x::hollight.real) y::hollight.real. |
4281 lemma REAL_LE_NEG2: "ALL (x::hollight.real) y::hollight.real. |
3863 real_le (real_neg x) (real_neg y) = real_le y x" |
4282 real_le (real_neg x) (real_neg y) = real_le y x" |
3864 by (import hollight REAL_LE_NEG2) |
4283 by (import hollight REAL_LE_NEG2) |
3865 |
4284 |
3866 lemma REAL_LE_RNEG: "ALL (x::hollight.real) y::hollight.real. |
4285 lemma REAL_LE_RNEG: "ALL (x::hollight.real) y::hollight.real. |
3867 real_le x (real_neg y) = real_le (real_add x y) (real_of_num (0::nat))" |
4286 real_le x (real_neg y) = real_le (real_add x y) (real_of_num 0)" |
3868 by (import hollight REAL_LE_RNEG) |
4287 by (import hollight REAL_LE_RNEG) |
3869 |
4288 |
3870 lemma REAL_OF_NUM_POW: "ALL (x::nat) n::nat. real_pow (real_of_num x) n = real_of_num (EXP x n)" |
4289 lemma REAL_OF_NUM_POW: "ALL (x::nat) n::nat. real_pow (real_of_num x) n = real_of_num (EXP x n)" |
3871 by (import hollight REAL_OF_NUM_POW) |
4290 by (import hollight REAL_OF_NUM_POW) |
3872 |
4291 |
3894 lemma REAL_LT_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4313 lemma REAL_LT_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
3895 real_lt x y & real_lt y z --> real_lt x z" |
4314 real_lt x y & real_lt y z --> real_lt x z" |
3896 by (import hollight REAL_LT_TRANS) |
4315 by (import hollight REAL_LT_TRANS) |
3897 |
4316 |
3898 lemma REAL_LE_ADD: "ALL (x::hollight.real) y::hollight.real. |
4317 lemma REAL_LE_ADD: "ALL (x::hollight.real) y::hollight.real. |
3899 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) y --> |
4318 real_le (real_of_num 0) x & real_le (real_of_num 0) y --> |
3900 real_le (real_of_num (0::nat)) (real_add x y)" |
4319 real_le (real_of_num 0) (real_add x y)" |
3901 by (import hollight REAL_LE_ADD) |
4320 by (import hollight REAL_LE_ADD) |
3902 |
4321 |
3903 lemma REAL_LTE_ANTISYM: "ALL (x::hollight.real) y::hollight.real. ~ (real_lt x y & real_le y x)" |
4322 lemma REAL_LTE_ANTISYM: "ALL (x::hollight.real) y::hollight.real. ~ (real_lt x y & real_le y x)" |
3904 by (import hollight REAL_LTE_ANTISYM) |
4323 by (import hollight REAL_LTE_ANTISYM) |
3905 |
4324 |
3906 lemma REAL_LT_REFL: "ALL x::hollight.real. ~ real_lt x x" |
4325 lemma REAL_LT_REFL: "ALL x::hollight.real. ~ real_lt x x" |
3907 by (import hollight REAL_LT_REFL) |
4326 by (import hollight REAL_LT_REFL) |
3908 |
4327 |
3909 lemma REAL_LET_ADD: "ALL (x::hollight.real) y::hollight.real. |
4328 lemma REAL_LET_ADD: "ALL (x::hollight.real) y::hollight.real. |
3910 real_le (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
4329 real_le (real_of_num 0) x & real_lt (real_of_num 0) y --> |
3911 real_lt (real_of_num (0::nat)) (real_add x y)" |
4330 real_lt (real_of_num 0) (real_add x y)" |
3912 by (import hollight REAL_LET_ADD) |
4331 by (import hollight REAL_LET_ADD) |
3913 |
4332 |
3914 lemma REAL_ENTIRE: "ALL (x::hollight.real) y::hollight.real. |
4333 lemma REAL_ENTIRE: "ALL (x::hollight.real) y::hollight.real. |
3915 (real_mul x y = real_of_num (0::nat)) = |
4334 (real_mul x y = real_of_num 0) = (x = real_of_num 0 | y = real_of_num 0)" |
3916 (x = real_of_num (0::nat) | y = real_of_num (0::nat))" |
|
3917 by (import hollight REAL_ENTIRE) |
4335 by (import hollight REAL_ENTIRE) |
3918 |
4336 |
3919 lemma REAL_POW_2: "ALL x::hollight.real. |
4337 lemma REAL_POW_2: "ALL x::hollight.real. |
3920 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = real_mul x x" |
4338 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = real_mul x x" |
3921 by (import hollight REAL_POW_2) |
4339 by (import hollight REAL_POW_2) |
3922 |
4340 |
3923 lemma REAL_POLY_CLAUSES: "(ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4341 lemma REAL_POLY_CLAUSES: "(ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
3924 real_add x (real_add y z) = real_add (real_add x y) z) & |
4342 real_add x (real_add y z) = real_add (real_add x y) z) & |
3925 (ALL (x::hollight.real) y::hollight.real. real_add x y = real_add y x) & |
4343 (ALL (x::hollight.real) y::hollight.real. real_add x y = real_add y x) & |
3926 (ALL x::hollight.real. real_add (real_of_num (0::nat)) x = x) & |
4344 (ALL x::hollight.real. real_add (real_of_num 0) x = x) & |
3927 (ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4345 (ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
3928 real_mul x (real_mul y z) = real_mul (real_mul x y) z) & |
4346 real_mul x (real_mul y z) = real_mul (real_mul x y) z) & |
3929 (ALL (x::hollight.real) y::hollight.real. real_mul x y = real_mul y x) & |
4347 (ALL (x::hollight.real) y::hollight.real. real_mul x y = real_mul y x) & |
3930 (ALL x::hollight.real. |
4348 (ALL x::hollight.real. real_mul (real_of_num (NUMERAL_BIT1 0)) x = x) & |
3931 real_mul (real_of_num (NUMERAL_BIT1 (0::nat))) x = x) & |
4349 (ALL x::hollight.real. real_mul (real_of_num 0) x = real_of_num 0) & |
3932 (ALL x::hollight.real. |
|
3933 real_mul (real_of_num (0::nat)) x = real_of_num (0::nat)) & |
|
3934 (ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4350 (ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
3935 real_mul x (real_add xa xb) = |
4351 real_mul x (real_add xa xb) = |
3936 real_add (real_mul x xa) (real_mul x xb)) & |
4352 real_add (real_mul x xa) (real_mul x xb)) & |
3937 (ALL x::hollight.real. |
4353 (ALL x::hollight.real. real_pow x 0 = real_of_num (NUMERAL_BIT1 0)) & |
3938 real_pow x (0::nat) = real_of_num (NUMERAL_BIT1 (0::nat))) & |
|
3939 (ALL (x::hollight.real) xa::nat. |
4354 (ALL (x::hollight.real) xa::nat. |
3940 real_pow x (Suc xa) = real_mul x (real_pow x xa))" |
4355 real_pow x (Suc xa) = real_mul x (real_pow x xa))" |
3941 by (import hollight REAL_POLY_CLAUSES) |
4356 by (import hollight REAL_POLY_CLAUSES) |
3942 |
4357 |
3943 lemma REAL_POLY_NEG_CLAUSES: "(ALL x::hollight.real. |
4358 lemma REAL_POLY_NEG_CLAUSES: "(ALL x::hollight.real. |
3944 real_neg x = |
4359 real_neg x = real_mul (real_neg (real_of_num (NUMERAL_BIT1 0))) x) & |
3945 real_mul (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x) & |
|
3946 (ALL (x::hollight.real) xa::hollight.real. |
4360 (ALL (x::hollight.real) xa::hollight.real. |
3947 real_sub x xa = |
4361 real_sub x xa = |
3948 real_add x |
4362 real_add x (real_mul (real_neg (real_of_num (NUMERAL_BIT1 0))) xa))" |
3949 (real_mul (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) xa))" |
|
3950 by (import hollight REAL_POLY_NEG_CLAUSES) |
4363 by (import hollight REAL_POLY_NEG_CLAUSES) |
3951 |
4364 |
3952 lemma REAL_OF_NUM_LT: "ALL (x::nat) xa::nat. real_lt (real_of_num x) (real_of_num xa) = < x xa" |
4365 lemma REAL_OF_NUM_LT: "ALL (x::nat) xa::nat. real_lt (real_of_num x) (real_of_num xa) = < x xa" |
3953 by (import hollight REAL_OF_NUM_LT) |
4366 by (import hollight REAL_OF_NUM_LT) |
3954 |
4367 |
3959 lemma REAL_OF_NUM_GT: "ALL (x::nat) xa::nat. |
4372 lemma REAL_OF_NUM_GT: "ALL (x::nat) xa::nat. |
3960 hollight.real_gt (real_of_num x) (real_of_num xa) = > x xa" |
4373 hollight.real_gt (real_of_num x) (real_of_num xa) = > x xa" |
3961 by (import hollight REAL_OF_NUM_GT) |
4374 by (import hollight REAL_OF_NUM_GT) |
3962 |
4375 |
3963 lemma REAL_OF_NUM_SUC: "ALL x::nat. |
4376 lemma REAL_OF_NUM_SUC: "ALL x::nat. |
3964 real_add (real_of_num x) (real_of_num (NUMERAL_BIT1 (0::nat))) = |
4377 real_add (real_of_num x) (real_of_num (NUMERAL_BIT1 0)) = |
3965 real_of_num (Suc x)" |
4378 real_of_num (Suc x)" |
3966 by (import hollight REAL_OF_NUM_SUC) |
4379 by (import hollight REAL_OF_NUM_SUC) |
3967 |
4380 |
3968 lemma REAL_OF_NUM_SUB: "ALL (m::nat) n::nat. |
4381 lemma REAL_OF_NUM_SUB: "ALL (m::nat) n::nat. |
3969 <= m n --> real_sub (real_of_num n) (real_of_num m) = real_of_num (n - m)" |
4382 <= m n --> real_sub (real_of_num n) (real_of_num m) = real_of_num (n - m)" |
3981 lemma REAL_LT_LADD_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4394 lemma REAL_LT_LADD_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
3982 real_lt y z --> real_lt (real_add x y) (real_add x z)" |
4395 real_lt y z --> real_lt (real_add x y) (real_add x z)" |
3983 by (import hollight REAL_LT_LADD_IMP) |
4396 by (import hollight REAL_LT_LADD_IMP) |
3984 |
4397 |
3985 lemma REAL_LT_MUL: "ALL (x::hollight.real) y::hollight.real. |
4398 lemma REAL_LT_MUL: "ALL (x::hollight.real) y::hollight.real. |
3986 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
4399 real_lt (real_of_num 0) x & real_lt (real_of_num 0) y --> |
3987 real_lt (real_of_num (0::nat)) (real_mul x y)" |
4400 real_lt (real_of_num 0) (real_mul x y)" |
3988 by (import hollight REAL_LT_MUL) |
4401 by (import hollight REAL_LT_MUL) |
3989 |
4402 |
3990 lemma REAL_EQ_ADD_LCANCEL_0: "ALL (x::hollight.real) y::hollight.real. |
4403 lemma REAL_EQ_ADD_LCANCEL_0: "ALL (x::hollight.real) y::hollight.real. |
3991 (real_add x y = x) = (y = real_of_num (0::nat))" |
4404 (real_add x y = x) = (y = real_of_num 0)" |
3992 by (import hollight REAL_EQ_ADD_LCANCEL_0) |
4405 by (import hollight REAL_EQ_ADD_LCANCEL_0) |
3993 |
4406 |
3994 lemma REAL_EQ_ADD_RCANCEL_0: "ALL (x::hollight.real) y::hollight.real. |
4407 lemma REAL_EQ_ADD_RCANCEL_0: "ALL (x::hollight.real) y::hollight.real. |
3995 (real_add x y = y) = (x = real_of_num (0::nat))" |
4408 (real_add x y = y) = (x = real_of_num 0)" |
3996 by (import hollight REAL_EQ_ADD_RCANCEL_0) |
4409 by (import hollight REAL_EQ_ADD_RCANCEL_0) |
3997 |
4410 |
3998 lemma REAL_NOT_EQ: "ALL (x::hollight.real) y::hollight.real. |
4411 lemma REAL_NOT_EQ: "ALL (x::hollight.real) y::hollight.real. |
3999 (x ~= y) = (real_lt x y | real_lt y x)" |
4412 (x ~= y) = (real_lt x y | real_lt y x)" |
4000 by (import hollight REAL_NOT_EQ) |
4413 by (import hollight REAL_NOT_EQ) |
4007 by (import hollight REAL_LET_ANTISYM) |
4420 by (import hollight REAL_LET_ANTISYM) |
4008 |
4421 |
4009 lemma REAL_LT_TOTAL: "ALL (x::hollight.real) y::hollight.real. x = y | real_lt x y | real_lt y x" |
4422 lemma REAL_LT_TOTAL: "ALL (x::hollight.real) y::hollight.real. x = y | real_lt x y | real_lt y x" |
4010 by (import hollight REAL_LT_TOTAL) |
4423 by (import hollight REAL_LT_TOTAL) |
4011 |
4424 |
4012 lemma REAL_LE_01: "real_le (real_of_num (0::nat)) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
4425 lemma REAL_LE_01: "real_le (real_of_num 0) (real_of_num (NUMERAL_BIT1 0))" |
4013 by (import hollight REAL_LE_01) |
4426 by (import hollight REAL_LE_01) |
4014 |
4427 |
4015 lemma REAL_LE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
4428 lemma REAL_LE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
4016 z::hollight.real. |
4429 z::hollight.real. |
4017 real_le w x & real_le y z --> real_le (real_add w y) (real_add x z)" |
4430 real_le w x & real_le y z --> real_le (real_add w y) (real_add x z)" |
4018 by (import hollight REAL_LE_ADD2) |
4431 by (import hollight REAL_LE_ADD2) |
4019 |
4432 |
4020 lemma REAL_LT_LNEG: "ALL (x::hollight.real) xa::hollight.real. |
4433 lemma REAL_LT_LNEG: "ALL (x::hollight.real) xa::hollight.real. |
4021 real_lt (real_neg x) xa = real_lt (real_of_num (0::nat)) (real_add x xa)" |
4434 real_lt (real_neg x) xa = real_lt (real_of_num 0) (real_add x xa)" |
4022 by (import hollight REAL_LT_LNEG) |
4435 by (import hollight REAL_LT_LNEG) |
4023 |
4436 |
4024 lemma REAL_LT_RNEG: "ALL (x::hollight.real) xa::hollight.real. |
4437 lemma REAL_LT_RNEG: "ALL (x::hollight.real) xa::hollight.real. |
4025 real_lt x (real_neg xa) = real_lt (real_add x xa) (real_of_num (0::nat))" |
4438 real_lt x (real_neg xa) = real_lt (real_add x xa) (real_of_num 0)" |
4026 by (import hollight REAL_LT_RNEG) |
4439 by (import hollight REAL_LT_RNEG) |
4027 |
4440 |
4028 lemma REAL_NEG_EQ_0: "ALL x::hollight.real. |
4441 lemma REAL_NEG_EQ_0: "ALL x::hollight.real. (real_neg x = real_of_num 0) = (x = real_of_num 0)" |
4029 (real_neg x = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
|
4030 by (import hollight REAL_NEG_EQ_0) |
4442 by (import hollight REAL_NEG_EQ_0) |
4031 |
4443 |
4032 lemma REAL_ADD_SUB: "ALL (x::hollight.real) y::hollight.real. real_sub (real_add x y) x = y" |
4444 lemma REAL_ADD_SUB: "ALL (x::hollight.real) y::hollight.real. real_sub (real_add x y) x = y" |
4033 by (import hollight REAL_ADD_SUB) |
4445 by (import hollight REAL_ADD_SUB) |
4034 |
4446 |
4035 lemma REAL_LE_ADDR: "ALL (x::hollight.real) y::hollight.real. |
4447 lemma REAL_LE_ADDR: "ALL (x::hollight.real) y::hollight.real. |
4036 real_le x (real_add x y) = real_le (real_of_num (0::nat)) y" |
4448 real_le x (real_add x y) = real_le (real_of_num 0) y" |
4037 by (import hollight REAL_LE_ADDR) |
4449 by (import hollight REAL_LE_ADDR) |
4038 |
4450 |
4039 lemma REAL_LE_ADDL: "ALL (x::hollight.real) y::hollight.real. |
4451 lemma REAL_LE_ADDL: "ALL (x::hollight.real) y::hollight.real. |
4040 real_le y (real_add x y) = real_le (real_of_num (0::nat)) x" |
4452 real_le y (real_add x y) = real_le (real_of_num 0) x" |
4041 by (import hollight REAL_LE_ADDL) |
4453 by (import hollight REAL_LE_ADDL) |
4042 |
4454 |
4043 lemma REAL_LT_ADDR: "ALL (x::hollight.real) y::hollight.real. |
4455 lemma REAL_LT_ADDR: "ALL (x::hollight.real) y::hollight.real. |
4044 real_lt x (real_add x y) = real_lt (real_of_num (0::nat)) y" |
4456 real_lt x (real_add x y) = real_lt (real_of_num 0) y" |
4045 by (import hollight REAL_LT_ADDR) |
4457 by (import hollight REAL_LT_ADDR) |
4046 |
4458 |
4047 lemma REAL_LT_ADDL: "ALL (x::hollight.real) y::hollight.real. |
4459 lemma REAL_LT_ADDL: "ALL (x::hollight.real) y::hollight.real. |
4048 real_lt y (real_add x y) = real_lt (real_of_num (0::nat)) x" |
4460 real_lt y (real_add x y) = real_lt (real_of_num 0) x" |
4049 by (import hollight REAL_LT_ADDL) |
4461 by (import hollight REAL_LT_ADDL) |
4050 |
4462 |
4051 lemma REAL_ADD2_SUB2: "ALL (a::hollight.real) (b::hollight.real) (c::hollight.real) |
4463 lemma REAL_ADD2_SUB2: "ALL (a::hollight.real) (b::hollight.real) (c::hollight.real) |
4052 d::hollight.real. |
4464 d::hollight.real. |
4053 real_sub (real_add a b) (real_add c d) = |
4465 real_sub (real_add a b) (real_add c d) = |
4084 |
4496 |
4085 lemma REAL_LT_NEG2: "ALL (x::hollight.real) y::hollight.real. |
4497 lemma REAL_LT_NEG2: "ALL (x::hollight.real) y::hollight.real. |
4086 real_lt (real_neg x) (real_neg y) = real_lt y x" |
4498 real_lt (real_neg x) (real_neg y) = real_lt y x" |
4087 by (import hollight REAL_LT_NEG2) |
4499 by (import hollight REAL_LT_NEG2) |
4088 |
4500 |
4089 lemma REAL_ABS_ZERO: "ALL x::hollight.real. |
4501 lemma REAL_ABS_ZERO: "ALL x::hollight.real. (real_abs x = real_of_num 0) = (x = real_of_num 0)" |
4090 (real_abs x = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
|
4091 by (import hollight REAL_ABS_ZERO) |
4502 by (import hollight REAL_ABS_ZERO) |
4092 |
4503 |
4093 lemma REAL_ABS_0: "real_abs (real_of_num (0::nat)) = real_of_num (0::nat)" |
4504 lemma REAL_ABS_0: "real_abs (real_of_num 0) = real_of_num 0" |
4094 by (import hollight REAL_ABS_0) |
4505 by (import hollight REAL_ABS_0) |
4095 |
4506 |
4096 lemma REAL_ABS_1: "real_abs (real_of_num (NUMERAL_BIT1 (0::nat))) = |
4507 lemma REAL_ABS_1: "real_abs (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)" |
4097 real_of_num (NUMERAL_BIT1 (0::nat))" |
|
4098 by (import hollight REAL_ABS_1) |
4508 by (import hollight REAL_ABS_1) |
4099 |
4509 |
4100 lemma REAL_ABS_TRIANGLE: "ALL (x::hollight.real) y::hollight.real. |
4510 lemma REAL_ABS_TRIANGLE: "ALL (x::hollight.real) y::hollight.real. |
4101 real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))" |
4511 real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))" |
4102 by (import hollight REAL_ABS_TRIANGLE) |
4512 by (import hollight REAL_ABS_TRIANGLE) |
4109 lemma REAL_ABS_TRIANGLE_LT: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4519 lemma REAL_ABS_TRIANGLE_LT: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4110 real_lt (real_add (real_abs x) (real_abs (real_sub y x))) z --> |
4520 real_lt (real_add (real_abs x) (real_abs (real_sub y x))) z --> |
4111 real_lt (real_abs y) z" |
4521 real_lt (real_abs y) z" |
4112 by (import hollight REAL_ABS_TRIANGLE_LT) |
4522 by (import hollight REAL_ABS_TRIANGLE_LT) |
4113 |
4523 |
4114 lemma REAL_ABS_POS: "ALL x::hollight.real. real_le (real_of_num (0::nat)) (real_abs x)" |
4524 lemma REAL_ABS_POS: "ALL x::hollight.real. real_le (real_of_num 0) (real_abs x)" |
4115 by (import hollight REAL_ABS_POS) |
4525 by (import hollight REAL_ABS_POS) |
4116 |
4526 |
4117 lemma REAL_ABS_SUB: "ALL (x::hollight.real) y::hollight.real. |
4527 lemma REAL_ABS_SUB: "ALL (x::hollight.real) y::hollight.real. |
4118 real_abs (real_sub x y) = real_abs (real_sub y x)" |
4528 real_abs (real_sub x y) = real_abs (real_sub y x)" |
4119 by (import hollight REAL_ABS_SUB) |
4529 by (import hollight REAL_ABS_SUB) |
4120 |
4530 |
4121 lemma REAL_ABS_NZ: "ALL x::hollight.real. |
4531 lemma REAL_ABS_NZ: "ALL x::hollight.real. |
4122 (x ~= real_of_num (0::nat)) = real_lt (real_of_num (0::nat)) (real_abs x)" |
4532 (x ~= real_of_num 0) = real_lt (real_of_num 0) (real_abs x)" |
4123 by (import hollight REAL_ABS_NZ) |
4533 by (import hollight REAL_ABS_NZ) |
4124 |
4534 |
4125 lemma REAL_ABS_ABS: "ALL x::hollight.real. real_abs (real_abs x) = real_abs x" |
4535 lemma REAL_ABS_ABS: "ALL x::hollight.real. real_abs (real_abs x) = real_abs x" |
4126 by (import hollight REAL_ABS_ABS) |
4536 by (import hollight REAL_ABS_ABS) |
4127 |
4537 |
4128 lemma REAL_ABS_LE: "ALL x::hollight.real. real_le x (real_abs x)" |
4538 lemma REAL_ABS_LE: "ALL x::hollight.real. real_le x (real_abs x)" |
4129 by (import hollight REAL_ABS_LE) |
4539 by (import hollight REAL_ABS_LE) |
4130 |
4540 |
4131 lemma REAL_ABS_REFL: "ALL x::hollight.real. (real_abs x = x) = real_le (real_of_num (0::nat)) x" |
4541 lemma REAL_ABS_REFL: "ALL x::hollight.real. (real_abs x = x) = real_le (real_of_num 0) x" |
4132 by (import hollight REAL_ABS_REFL) |
4542 by (import hollight REAL_ABS_REFL) |
4133 |
4543 |
4134 lemma REAL_ABS_BETWEEN: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
4544 lemma REAL_ABS_BETWEEN: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
4135 (real_lt (real_of_num (0::nat)) d & |
4545 (real_lt (real_of_num 0) d & |
4136 real_lt (real_sub x d) y & real_lt y (real_add x d)) = |
4546 real_lt (real_sub x d) y & real_lt y (real_add x d)) = |
4137 real_lt (real_abs (real_sub y x)) d" |
4547 real_lt (real_abs (real_sub y x)) d" |
4138 by (import hollight REAL_ABS_BETWEEN) |
4548 by (import hollight REAL_ABS_BETWEEN) |
4139 |
4549 |
4140 lemma REAL_ABS_BOUND: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
4550 lemma REAL_ABS_BOUND: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
4141 real_lt (real_abs (real_sub x y)) d --> real_lt y (real_add x d)" |
4551 real_lt (real_abs (real_sub x y)) d --> real_lt y (real_add x d)" |
4142 by (import hollight REAL_ABS_BOUND) |
4552 by (import hollight REAL_ABS_BOUND) |
4143 |
4553 |
4144 lemma REAL_ABS_STILLNZ: "ALL (x::hollight.real) y::hollight.real. |
4554 lemma REAL_ABS_STILLNZ: "ALL (x::hollight.real) y::hollight.real. |
4145 real_lt (real_abs (real_sub x y)) (real_abs y) --> |
4555 real_lt (real_abs (real_sub x y)) (real_abs y) --> x ~= real_of_num 0" |
4146 x ~= real_of_num (0::nat)" |
|
4147 by (import hollight REAL_ABS_STILLNZ) |
4556 by (import hollight REAL_ABS_STILLNZ) |
4148 |
4557 |
4149 lemma REAL_ABS_CASES: "ALL x::hollight.real. |
4558 lemma REAL_ABS_CASES: "ALL x::hollight.real. |
4150 x = real_of_num (0::nat) | real_lt (real_of_num (0::nat)) (real_abs x)" |
4559 x = real_of_num 0 | real_lt (real_of_num 0) (real_abs x)" |
4151 by (import hollight REAL_ABS_CASES) |
4560 by (import hollight REAL_ABS_CASES) |
4152 |
4561 |
4153 lemma REAL_ABS_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4562 lemma REAL_ABS_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4154 real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x) --> |
4563 real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x) --> |
4155 real_lt y z" |
4564 real_lt y z" |
4156 by (import hollight REAL_ABS_BETWEEN1) |
4565 by (import hollight REAL_ABS_BETWEEN1) |
4157 |
4566 |
4158 lemma REAL_ABS_SIGN: "ALL (x::hollight.real) y::hollight.real. |
4567 lemma REAL_ABS_SIGN: "ALL (x::hollight.real) y::hollight.real. |
4159 real_lt (real_abs (real_sub x y)) y --> real_lt (real_of_num (0::nat)) x" |
4568 real_lt (real_abs (real_sub x y)) y --> real_lt (real_of_num 0) x" |
4160 by (import hollight REAL_ABS_SIGN) |
4569 by (import hollight REAL_ABS_SIGN) |
4161 |
4570 |
4162 lemma REAL_ABS_SIGN2: "ALL (x::hollight.real) y::hollight.real. |
4571 lemma REAL_ABS_SIGN2: "ALL (x::hollight.real) y::hollight.real. |
4163 real_lt (real_abs (real_sub x y)) (real_neg y) --> |
4572 real_lt (real_abs (real_sub x y)) (real_neg y) --> |
4164 real_lt x (real_of_num (0::nat))" |
4573 real_lt x (real_of_num 0)" |
4165 by (import hollight REAL_ABS_SIGN2) |
4574 by (import hollight REAL_ABS_SIGN2) |
4166 |
4575 |
4167 lemma REAL_ABS_CIRCLE: "ALL (x::hollight.real) (y::hollight.real) h::hollight.real. |
4576 lemma REAL_ABS_CIRCLE: "ALL (x::hollight.real) (y::hollight.real) h::hollight.real. |
4168 real_lt (real_abs h) (real_sub (real_abs y) (real_abs x)) --> |
4577 real_lt (real_abs h) (real_sub (real_abs y) (real_abs x)) --> |
4169 real_lt (real_abs (real_add x h)) (real_abs y)" |
4578 real_lt (real_abs (real_add x h)) (real_abs y)" |
4176 |
4585 |
4177 lemma REAL_ABS_BETWEEN2: "ALL (x0::hollight.real) (x::hollight.real) (y0::hollight.real) |
4586 lemma REAL_ABS_BETWEEN2: "ALL (x0::hollight.real) (x::hollight.real) (y0::hollight.real) |
4178 y::hollight.real. |
4587 y::hollight.real. |
4179 real_lt x0 y0 & |
4588 real_lt x0 y0 & |
4180 real_lt |
4589 real_lt |
4181 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
4590 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
4182 (real_abs (real_sub x x0))) |
4591 (real_abs (real_sub x x0))) |
4183 (real_sub y0 x0) & |
4592 (real_sub y0 x0) & |
4184 real_lt |
4593 real_lt |
4185 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
4594 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
4186 (real_abs (real_sub y y0))) |
4595 (real_abs (real_sub y y0))) |
4187 (real_sub y0 x0) --> |
4596 (real_sub y0 x0) --> |
4188 real_lt x y" |
4597 real_lt x y" |
4189 by (import hollight REAL_ABS_BETWEEN2) |
4598 by (import hollight REAL_ABS_BETWEEN2) |
4190 |
4599 |
4269 lemma REAL_ABS_MUL: "ALL (x::hollight.real) y::hollight.real. |
4678 lemma REAL_ABS_MUL: "ALL (x::hollight.real) y::hollight.real. |
4270 real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)" |
4679 real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)" |
4271 by (import hollight REAL_ABS_MUL) |
4680 by (import hollight REAL_ABS_MUL) |
4272 |
4681 |
4273 lemma REAL_POW_LE: "ALL (x::hollight.real) n::nat. |
4682 lemma REAL_POW_LE: "ALL (x::hollight.real) n::nat. |
4274 real_le (real_of_num (0::nat)) x --> |
4683 real_le (real_of_num 0) x --> real_le (real_of_num 0) (real_pow x n)" |
4275 real_le (real_of_num (0::nat)) (real_pow x n)" |
|
4276 by (import hollight REAL_POW_LE) |
4684 by (import hollight REAL_POW_LE) |
4277 |
4685 |
4278 lemma REAL_POW_LT: "ALL (x::hollight.real) n::nat. |
4686 lemma REAL_POW_LT: "ALL (x::hollight.real) n::nat. |
4279 real_lt (real_of_num (0::nat)) x --> |
4687 real_lt (real_of_num 0) x --> real_lt (real_of_num 0) (real_pow x n)" |
4280 real_lt (real_of_num (0::nat)) (real_pow x n)" |
|
4281 by (import hollight REAL_POW_LT) |
4688 by (import hollight REAL_POW_LT) |
4282 |
4689 |
4283 lemma REAL_ABS_POW: "ALL (x::hollight.real) n::nat. |
4690 lemma REAL_ABS_POW: "ALL (x::hollight.real) n::nat. |
4284 real_abs (real_pow x n) = real_pow (real_abs x) n" |
4691 real_abs (real_pow x n) = real_pow (real_abs x) n" |
4285 by (import hollight REAL_ABS_POW) |
4692 by (import hollight REAL_ABS_POW) |
4286 |
4693 |
4287 lemma REAL_LE_LMUL: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4694 lemma REAL_LE_LMUL: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4288 real_le (real_of_num (0::nat)) x & real_le xa xb --> |
4695 real_le (real_of_num 0) x & real_le xa xb --> |
4289 real_le (real_mul x xa) (real_mul x xb)" |
4696 real_le (real_mul x xa) (real_mul x xb)" |
4290 by (import hollight REAL_LE_LMUL) |
4697 by (import hollight REAL_LE_LMUL) |
4291 |
4698 |
4292 lemma REAL_LE_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4699 lemma REAL_LE_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4293 real_le x y & real_le (real_of_num (0::nat)) z --> |
4700 real_le x y & real_le (real_of_num 0) z --> |
4294 real_le (real_mul x z) (real_mul y z)" |
4701 real_le (real_mul x z) (real_mul y z)" |
4295 by (import hollight REAL_LE_RMUL) |
4702 by (import hollight REAL_LE_RMUL) |
4296 |
4703 |
4297 lemma REAL_LT_LMUL: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4704 lemma REAL_LT_LMUL: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4298 real_lt (real_of_num (0::nat)) x & real_lt xa xb --> |
4705 real_lt (real_of_num 0) x & real_lt xa xb --> |
4299 real_lt (real_mul x xa) (real_mul x xb)" |
4706 real_lt (real_mul x xa) (real_mul x xb)" |
4300 by (import hollight REAL_LT_LMUL) |
4707 by (import hollight REAL_LT_LMUL) |
4301 |
4708 |
4302 lemma REAL_LT_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4709 lemma REAL_LT_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4303 real_lt x y & real_lt (real_of_num (0::nat)) z --> |
4710 real_lt x y & real_lt (real_of_num 0) z --> |
4304 real_lt (real_mul x z) (real_mul y z)" |
4711 real_lt (real_mul x z) (real_mul y z)" |
4305 by (import hollight REAL_LT_RMUL) |
4712 by (import hollight REAL_LT_RMUL) |
4306 |
4713 |
4307 lemma REAL_EQ_MUL_LCANCEL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4714 lemma REAL_EQ_MUL_LCANCEL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4308 (real_mul x y = real_mul x z) = (x = real_of_num (0::nat) | y = z)" |
4715 (real_mul x y = real_mul x z) = (x = real_of_num 0 | y = z)" |
4309 by (import hollight REAL_EQ_MUL_LCANCEL) |
4716 by (import hollight REAL_EQ_MUL_LCANCEL) |
4310 |
4717 |
4311 lemma REAL_EQ_MUL_RCANCEL: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4718 lemma REAL_EQ_MUL_RCANCEL: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4312 (real_mul x xb = real_mul xa xb) = (x = xa | xb = real_of_num (0::nat))" |
4719 (real_mul x xb = real_mul xa xb) = (x = xa | xb = real_of_num 0)" |
4313 by (import hollight REAL_EQ_MUL_RCANCEL) |
4720 by (import hollight REAL_EQ_MUL_RCANCEL) |
4314 |
4721 |
4315 lemma REAL_MUL_LINV_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
4722 lemma REAL_MUL_LINV_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
4316 real_mul x y = real_of_num (NUMERAL_BIT1 (0::nat)) --> real_inv y = x" |
4723 real_mul x y = real_of_num (NUMERAL_BIT1 0) --> real_inv y = x" |
4317 by (import hollight REAL_MUL_LINV_UNIQ) |
4724 by (import hollight REAL_MUL_LINV_UNIQ) |
4318 |
4725 |
4319 lemma REAL_MUL_RINV_UNIQ: "ALL (x::hollight.real) xa::hollight.real. |
4726 lemma REAL_MUL_RINV_UNIQ: "ALL (x::hollight.real) xa::hollight.real. |
4320 real_mul x xa = real_of_num (NUMERAL_BIT1 (0::nat)) --> real_inv x = xa" |
4727 real_mul x xa = real_of_num (NUMERAL_BIT1 0) --> real_inv x = xa" |
4321 by (import hollight REAL_MUL_RINV_UNIQ) |
4728 by (import hollight REAL_MUL_RINV_UNIQ) |
4322 |
4729 |
4323 lemma REAL_INV_INV: "ALL x::hollight.real. real_inv (real_inv x) = x" |
4730 lemma REAL_INV_INV: "ALL x::hollight.real. real_inv (real_inv x) = x" |
4324 by (import hollight REAL_INV_INV) |
4731 by (import hollight REAL_INV_INV) |
4325 |
4732 |
4326 lemma REAL_INV_EQ_0: "ALL x::hollight.real. |
4733 lemma REAL_INV_EQ_0: "ALL x::hollight.real. (real_inv x = real_of_num 0) = (x = real_of_num 0)" |
4327 (real_inv x = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
|
4328 by (import hollight REAL_INV_EQ_0) |
4734 by (import hollight REAL_INV_EQ_0) |
4329 |
4735 |
4330 lemma REAL_LT_INV: "ALL x::hollight.real. |
4736 lemma REAL_LT_INV: "ALL x::hollight.real. |
4331 real_lt (real_of_num (0::nat)) x --> |
4737 real_lt (real_of_num 0) x --> real_lt (real_of_num 0) (real_inv x)" |
4332 real_lt (real_of_num (0::nat)) (real_inv x)" |
|
4333 by (import hollight REAL_LT_INV) |
4738 by (import hollight REAL_LT_INV) |
4334 |
4739 |
4335 lemma REAL_LT_INV_EQ: "ALL x::hollight.real. |
4740 lemma REAL_LT_INV_EQ: "ALL x::hollight.real. |
4336 real_lt (real_of_num (0::nat)) (real_inv x) = |
4741 real_lt (real_of_num 0) (real_inv x) = real_lt (real_of_num 0) x" |
4337 real_lt (real_of_num (0::nat)) x" |
|
4338 by (import hollight REAL_LT_INV_EQ) |
4742 by (import hollight REAL_LT_INV_EQ) |
4339 |
4743 |
4340 lemma REAL_INV_NEG: "ALL x::hollight.real. real_inv (real_neg x) = real_neg (real_inv x)" |
4744 lemma REAL_INV_NEG: "ALL x::hollight.real. real_inv (real_neg x) = real_neg (real_inv x)" |
4341 by (import hollight REAL_INV_NEG) |
4745 by (import hollight REAL_INV_NEG) |
4342 |
4746 |
4343 lemma REAL_LE_INV_EQ: "ALL x::hollight.real. |
4747 lemma REAL_LE_INV_EQ: "ALL x::hollight.real. |
4344 real_le (real_of_num (0::nat)) (real_inv x) = |
4748 real_le (real_of_num 0) (real_inv x) = real_le (real_of_num 0) x" |
4345 real_le (real_of_num (0::nat)) x" |
|
4346 by (import hollight REAL_LE_INV_EQ) |
4749 by (import hollight REAL_LE_INV_EQ) |
4347 |
4750 |
4348 lemma REAL_LE_INV: "ALL x::hollight.real. |
4751 lemma REAL_LE_INV: "ALL x::hollight.real. |
4349 real_le (real_of_num (0::nat)) x --> |
4752 real_le (real_of_num 0) x --> real_le (real_of_num 0) (real_inv x)" |
4350 real_le (real_of_num (0::nat)) (real_inv x)" |
|
4351 by (import hollight REAL_LE_INV) |
4753 by (import hollight REAL_LE_INV) |
4352 |
4754 |
4353 lemma REAL_INV_1: "real_inv (real_of_num (NUMERAL_BIT1 (0::nat))) = |
4755 lemma REAL_INV_1: "real_inv (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)" |
4354 real_of_num (NUMERAL_BIT1 (0::nat))" |
|
4355 by (import hollight REAL_INV_1) |
4756 by (import hollight REAL_INV_1) |
4356 |
4757 |
4357 lemma REAL_DIV_1: "ALL x::hollight.real. real_div x (real_of_num (NUMERAL_BIT1 (0::nat))) = x" |
4758 lemma REAL_DIV_1: "ALL x::hollight.real. real_div x (real_of_num (NUMERAL_BIT1 0)) = x" |
4358 by (import hollight REAL_DIV_1) |
4759 by (import hollight REAL_DIV_1) |
4359 |
4760 |
4360 lemma REAL_DIV_REFL: "ALL x::hollight.real. |
4761 lemma REAL_DIV_REFL: "ALL x::hollight.real. |
4361 x ~= real_of_num (0::nat) --> |
4762 x ~= real_of_num 0 --> real_div x x = real_of_num (NUMERAL_BIT1 0)" |
4362 real_div x x = real_of_num (NUMERAL_BIT1 (0::nat))" |
|
4363 by (import hollight REAL_DIV_REFL) |
4763 by (import hollight REAL_DIV_REFL) |
4364 |
4764 |
4365 lemma REAL_DIV_RMUL: "ALL (x::hollight.real) xa::hollight.real. |
4765 lemma REAL_DIV_RMUL: "ALL (x::hollight.real) xa::hollight.real. |
4366 xa ~= real_of_num (0::nat) --> real_mul (real_div x xa) xa = x" |
4766 xa ~= real_of_num 0 --> real_mul (real_div x xa) xa = x" |
4367 by (import hollight REAL_DIV_RMUL) |
4767 by (import hollight REAL_DIV_RMUL) |
4368 |
4768 |
4369 lemma REAL_DIV_LMUL: "ALL (x::hollight.real) xa::hollight.real. |
4769 lemma REAL_DIV_LMUL: "ALL (x::hollight.real) xa::hollight.real. |
4370 xa ~= real_of_num (0::nat) --> real_mul xa (real_div x xa) = x" |
4770 xa ~= real_of_num 0 --> real_mul xa (real_div x xa) = x" |
4371 by (import hollight REAL_DIV_LMUL) |
4771 by (import hollight REAL_DIV_LMUL) |
4372 |
4772 |
4373 lemma REAL_ABS_INV: "ALL x::hollight.real. real_abs (real_inv x) = real_inv (real_abs x)" |
4773 lemma REAL_ABS_INV: "ALL x::hollight.real. real_abs (real_inv x) = real_inv (real_abs x)" |
4374 by (import hollight REAL_ABS_INV) |
4774 by (import hollight REAL_ABS_INV) |
4375 |
4775 |
4400 lemma REAL_POW_ADD: "ALL (x::hollight.real) (m::nat) n::nat. |
4800 lemma REAL_POW_ADD: "ALL (x::hollight.real) (m::nat) n::nat. |
4401 real_pow x (m + n) = real_mul (real_pow x m) (real_pow x n)" |
4801 real_pow x (m + n) = real_mul (real_pow x m) (real_pow x n)" |
4402 by (import hollight REAL_POW_ADD) |
4802 by (import hollight REAL_POW_ADD) |
4403 |
4803 |
4404 lemma REAL_POW_NZ: "ALL (x::hollight.real) n::nat. |
4804 lemma REAL_POW_NZ: "ALL (x::hollight.real) n::nat. |
4405 x ~= real_of_num (0::nat) --> real_pow x n ~= real_of_num (0::nat)" |
4805 x ~= real_of_num 0 --> real_pow x n ~= real_of_num 0" |
4406 by (import hollight REAL_POW_NZ) |
4806 by (import hollight REAL_POW_NZ) |
4407 |
4807 |
4408 lemma REAL_POW_SUB: "ALL (x::hollight.real) (m::nat) n::nat. |
4808 lemma REAL_POW_SUB: "ALL (x::hollight.real) (m::nat) n::nat. |
4409 x ~= real_of_num (0::nat) & <= m n --> |
4809 x ~= real_of_num 0 & <= m n --> |
4410 real_pow x (n - m) = real_div (real_pow x n) (real_pow x m)" |
4810 real_pow x (n - m) = real_div (real_pow x n) (real_pow x m)" |
4411 by (import hollight REAL_POW_SUB) |
4811 by (import hollight REAL_POW_SUB) |
4412 |
4812 |
4413 lemma REAL_LT_IMP_NZ: "ALL x::hollight.real. |
4813 lemma REAL_LT_IMP_NZ: "ALL x::hollight.real. real_lt (real_of_num 0) x --> x ~= real_of_num 0" |
4414 real_lt (real_of_num (0::nat)) x --> x ~= real_of_num (0::nat)" |
|
4415 by (import hollight REAL_LT_IMP_NZ) |
4814 by (import hollight REAL_LT_IMP_NZ) |
4416 |
4815 |
4417 lemma REAL_LT_LCANCEL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4816 lemma REAL_LT_LCANCEL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4418 real_lt (real_of_num (0::nat)) x & |
4817 real_lt (real_of_num 0) x & real_lt (real_mul x y) (real_mul x z) --> |
4419 real_lt (real_mul x y) (real_mul x z) --> |
|
4420 real_lt y z" |
4818 real_lt y z" |
4421 by (import hollight REAL_LT_LCANCEL_IMP) |
4819 by (import hollight REAL_LT_LCANCEL_IMP) |
4422 |
4820 |
4423 lemma REAL_LT_RCANCEL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4821 lemma REAL_LT_RCANCEL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4424 real_lt (real_of_num (0::nat)) xb & |
4822 real_lt (real_of_num 0) xb & real_lt (real_mul x xb) (real_mul xa xb) --> |
4425 real_lt (real_mul x xb) (real_mul xa xb) --> |
|
4426 real_lt x xa" |
4823 real_lt x xa" |
4427 by (import hollight REAL_LT_RCANCEL_IMP) |
4824 by (import hollight REAL_LT_RCANCEL_IMP) |
4428 |
4825 |
4429 lemma REAL_LE_LCANCEL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4826 lemma REAL_LE_LCANCEL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4430 real_lt (real_of_num (0::nat)) x & |
4827 real_lt (real_of_num 0) x & real_le (real_mul x y) (real_mul x z) --> |
4431 real_le (real_mul x y) (real_mul x z) --> |
|
4432 real_le y z" |
4828 real_le y z" |
4433 by (import hollight REAL_LE_LCANCEL_IMP) |
4829 by (import hollight REAL_LE_LCANCEL_IMP) |
4434 |
4830 |
4435 lemma REAL_LE_RCANCEL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4831 lemma REAL_LE_RCANCEL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4436 real_lt (real_of_num (0::nat)) xb & |
4832 real_lt (real_of_num 0) xb & real_le (real_mul x xb) (real_mul xa xb) --> |
4437 real_le (real_mul x xb) (real_mul xa xb) --> |
|
4438 real_le x xa" |
4833 real_le x xa" |
4439 by (import hollight REAL_LE_RCANCEL_IMP) |
4834 by (import hollight REAL_LE_RCANCEL_IMP) |
4440 |
4835 |
4441 lemma REAL_LE_LMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4836 lemma REAL_LE_LMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4442 real_lt (real_of_num (0::nat)) z --> |
4837 real_lt (real_of_num 0) z --> |
4443 real_le (real_mul z x) (real_mul z y) = real_le x y" |
4838 real_le (real_mul z x) (real_mul z y) = real_le x y" |
4444 by (import hollight REAL_LE_LMUL_EQ) |
4839 by (import hollight REAL_LE_LMUL_EQ) |
4445 |
4840 |
4446 lemma REAL_LE_RDIV_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4841 lemma REAL_LE_RDIV_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4447 real_lt (real_of_num (0::nat)) z --> |
4842 real_lt (real_of_num 0) z --> |
4448 real_le x (real_div y z) = real_le (real_mul x z) y" |
4843 real_le x (real_div y z) = real_le (real_mul x z) y" |
4449 by (import hollight REAL_LE_RDIV_EQ) |
4844 by (import hollight REAL_LE_RDIV_EQ) |
4450 |
4845 |
4451 lemma REAL_LE_LDIV_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4846 lemma REAL_LE_LDIV_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4452 real_lt (real_of_num (0::nat)) z --> |
4847 real_lt (real_of_num 0) z --> |
4453 real_le (real_div x z) y = real_le x (real_mul y z)" |
4848 real_le (real_div x z) y = real_le x (real_mul y z)" |
4454 by (import hollight REAL_LE_LDIV_EQ) |
4849 by (import hollight REAL_LE_LDIV_EQ) |
4455 |
4850 |
4456 lemma REAL_LT_RDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4851 lemma REAL_LT_RDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4457 real_lt (real_of_num (0::nat)) xb --> |
4852 real_lt (real_of_num 0) xb --> |
4458 real_lt x (real_div xa xb) = real_lt (real_mul x xb) xa" |
4853 real_lt x (real_div xa xb) = real_lt (real_mul x xb) xa" |
4459 by (import hollight REAL_LT_RDIV_EQ) |
4854 by (import hollight REAL_LT_RDIV_EQ) |
4460 |
4855 |
4461 lemma REAL_LT_LDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4856 lemma REAL_LT_LDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4462 real_lt (real_of_num (0::nat)) xb --> |
4857 real_lt (real_of_num 0) xb --> |
4463 real_lt (real_div x xb) xa = real_lt x (real_mul xa xb)" |
4858 real_lt (real_div x xb) xa = real_lt x (real_mul xa xb)" |
4464 by (import hollight REAL_LT_LDIV_EQ) |
4859 by (import hollight REAL_LT_LDIV_EQ) |
4465 |
4860 |
4466 lemma REAL_EQ_RDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4861 lemma REAL_EQ_RDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4467 real_lt (real_of_num (0::nat)) xb --> |
4862 real_lt (real_of_num 0) xb --> |
4468 (x = real_div xa xb) = (real_mul x xb = xa)" |
4863 (x = real_div xa xb) = (real_mul x xb = xa)" |
4469 by (import hollight REAL_EQ_RDIV_EQ) |
4864 by (import hollight REAL_EQ_RDIV_EQ) |
4470 |
4865 |
4471 lemma REAL_EQ_LDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4866 lemma REAL_EQ_LDIV_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4472 real_lt (real_of_num (0::nat)) xb --> |
4867 real_lt (real_of_num 0) xb --> |
4473 (real_div x xb = xa) = (x = real_mul xa xb)" |
4868 (real_div x xb = xa) = (x = real_mul xa xb)" |
4474 by (import hollight REAL_EQ_LDIV_EQ) |
4869 by (import hollight REAL_EQ_LDIV_EQ) |
4475 |
4870 |
4476 lemma REAL_LT_DIV2_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4871 lemma REAL_LT_DIV2_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4477 real_lt (real_of_num (0::nat)) xb --> |
4872 real_lt (real_of_num 0) xb --> |
4478 real_lt (real_div x xb) (real_div xa xb) = real_lt x xa" |
4873 real_lt (real_div x xb) (real_div xa xb) = real_lt x xa" |
4479 by (import hollight REAL_LT_DIV2_EQ) |
4874 by (import hollight REAL_LT_DIV2_EQ) |
4480 |
4875 |
4481 lemma REAL_LE_DIV2_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4876 lemma REAL_LE_DIV2_EQ: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4482 real_lt (real_of_num (0::nat)) xb --> |
4877 real_lt (real_of_num 0) xb --> |
4483 real_le (real_div x xb) (real_div xa xb) = real_le x xa" |
4878 real_le (real_div x xb) (real_div xa xb) = real_le x xa" |
4484 by (import hollight REAL_LE_DIV2_EQ) |
4879 by (import hollight REAL_LE_DIV2_EQ) |
4485 |
4880 |
4486 lemma REAL_MUL_2: "ALL x::hollight.real. |
4881 lemma REAL_MUL_2: "ALL x::hollight.real. |
4487 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x = |
4882 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x = real_add x x" |
4488 real_add x x" |
|
4489 by (import hollight REAL_MUL_2) |
4883 by (import hollight REAL_MUL_2) |
4490 |
4884 |
4491 lemma REAL_POW_EQ_0: "ALL (x::hollight.real) n::nat. |
4885 lemma REAL_POW_EQ_0: "ALL (x::hollight.real) n::nat. |
4492 (real_pow x n = real_of_num (0::nat)) = |
4886 (real_pow x n = real_of_num 0) = (x = real_of_num 0 & n ~= 0)" |
4493 (x = real_of_num (0::nat) & n ~= (0::nat))" |
|
4494 by (import hollight REAL_POW_EQ_0) |
4887 by (import hollight REAL_POW_EQ_0) |
4495 |
4888 |
4496 lemma REAL_LE_MUL2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
4889 lemma REAL_LE_MUL2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
4497 z::hollight.real. |
4890 z::hollight.real. |
4498 real_le (real_of_num (0::nat)) w & |
4891 real_le (real_of_num 0) w & |
4499 real_le w x & real_le (real_of_num (0::nat)) y & real_le y z --> |
4892 real_le w x & real_le (real_of_num 0) y & real_le y z --> |
4500 real_le (real_mul w y) (real_mul x z)" |
4893 real_le (real_mul w y) (real_mul x z)" |
4501 by (import hollight REAL_LE_MUL2) |
4894 by (import hollight REAL_LE_MUL2) |
4502 |
4895 |
4503 lemma REAL_LT_MUL2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
4896 lemma REAL_LT_MUL2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
4504 z::hollight.real. |
4897 z::hollight.real. |
4505 real_le (real_of_num (0::nat)) w & |
4898 real_le (real_of_num 0) w & |
4506 real_lt w x & real_le (real_of_num (0::nat)) y & real_lt y z --> |
4899 real_lt w x & real_le (real_of_num 0) y & real_lt y z --> |
4507 real_lt (real_mul w y) (real_mul x z)" |
4900 real_lt (real_mul w y) (real_mul x z)" |
4508 by (import hollight REAL_LT_MUL2) |
4901 by (import hollight REAL_LT_MUL2) |
4509 |
4902 |
4510 lemma REAL_LT_SQUARE: "ALL x::hollight.real. |
4903 lemma REAL_LT_SQUARE: "ALL x::hollight.real. |
4511 real_lt (real_of_num (0::nat)) (real_mul x x) = |
4904 real_lt (real_of_num 0) (real_mul x x) = (x ~= real_of_num 0)" |
4512 (x ~= real_of_num (0::nat))" |
|
4513 by (import hollight REAL_LT_SQUARE) |
4905 by (import hollight REAL_LT_SQUARE) |
4514 |
4906 |
4515 lemma REAL_INV_LE_1: "ALL x::hollight.real. |
4907 lemma REAL_INV_LE_1: "ALL x::hollight.real. |
4516 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) x --> |
4908 real_le (real_of_num (NUMERAL_BIT1 0)) x --> |
4517 real_le (real_inv x) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
4909 real_le (real_inv x) (real_of_num (NUMERAL_BIT1 0))" |
4518 by (import hollight REAL_INV_LE_1) |
4910 by (import hollight REAL_INV_LE_1) |
4519 |
4911 |
4520 lemma REAL_POW_LE_1: "ALL (n::nat) x::hollight.real. |
4912 lemma REAL_POW_LE_1: "ALL (n::nat) x::hollight.real. |
4521 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) x --> |
4913 real_le (real_of_num (NUMERAL_BIT1 0)) x --> |
4522 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) (real_pow x n)" |
4914 real_le (real_of_num (NUMERAL_BIT1 0)) (real_pow x n)" |
4523 by (import hollight REAL_POW_LE_1) |
4915 by (import hollight REAL_POW_LE_1) |
4524 |
4916 |
4525 lemma REAL_POW_1_LE: "ALL (n::nat) x::hollight.real. |
4917 lemma REAL_POW_1_LE: "ALL (n::nat) x::hollight.real. |
4526 real_le (real_of_num (0::nat)) x & |
4918 real_le (real_of_num 0) x & real_le x (real_of_num (NUMERAL_BIT1 0)) --> |
4527 real_le x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
4919 real_le (real_pow x n) (real_of_num (NUMERAL_BIT1 0))" |
4528 real_le (real_pow x n) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
|
4529 by (import hollight REAL_POW_1_LE) |
4920 by (import hollight REAL_POW_1_LE) |
4530 |
4921 |
4531 lemma REAL_POW_1: "ALL x::hollight.real. real_pow x (NUMERAL_BIT1 (0::nat)) = x" |
4922 lemma REAL_POW_1: "ALL x::hollight.real. real_pow x (NUMERAL_BIT1 0) = x" |
4532 by (import hollight REAL_POW_1) |
4923 by (import hollight REAL_POW_1) |
4533 |
4924 |
4534 lemma REAL_POW_ONE: "ALL n::nat. |
4925 lemma REAL_POW_ONE: "ALL n::nat. |
4535 real_pow (real_of_num (NUMERAL_BIT1 (0::nat))) n = |
4926 real_pow (real_of_num (NUMERAL_BIT1 0)) n = real_of_num (NUMERAL_BIT1 0)" |
4536 real_of_num (NUMERAL_BIT1 (0::nat))" |
|
4537 by (import hollight REAL_POW_ONE) |
4927 by (import hollight REAL_POW_ONE) |
4538 |
4928 |
4539 lemma REAL_LT_INV2: "ALL (x::hollight.real) y::hollight.real. |
4929 lemma REAL_LT_INV2: "ALL (x::hollight.real) y::hollight.real. |
4540 real_lt (real_of_num (0::nat)) x & real_lt x y --> |
4930 real_lt (real_of_num 0) x & real_lt x y --> |
4541 real_lt (real_inv y) (real_inv x)" |
4931 real_lt (real_inv y) (real_inv x)" |
4542 by (import hollight REAL_LT_INV2) |
4932 by (import hollight REAL_LT_INV2) |
4543 |
4933 |
4544 lemma REAL_LE_INV2: "ALL (x::hollight.real) y::hollight.real. |
4934 lemma REAL_LE_INV2: "ALL (x::hollight.real) y::hollight.real. |
4545 real_lt (real_of_num (0::nat)) x & real_le x y --> |
4935 real_lt (real_of_num 0) x & real_le x y --> |
4546 real_le (real_inv y) (real_inv x)" |
4936 real_le (real_inv y) (real_inv x)" |
4547 by (import hollight REAL_LE_INV2) |
4937 by (import hollight REAL_LE_INV2) |
4548 |
4938 |
4549 lemma REAL_INV_1_LE: "ALL x::hollight.real. |
4939 lemma REAL_INV_1_LE: "ALL x::hollight.real. |
4550 real_lt (real_of_num (0::nat)) x & |
4940 real_lt (real_of_num 0) x & real_le x (real_of_num (NUMERAL_BIT1 0)) --> |
4551 real_le x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
4941 real_le (real_of_num (NUMERAL_BIT1 0)) (real_inv x)" |
4552 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) (real_inv x)" |
|
4553 by (import hollight REAL_INV_1_LE) |
4942 by (import hollight REAL_INV_1_LE) |
4554 |
4943 |
4555 lemma REAL_SUB_INV: "ALL (x::hollight.real) xa::hollight.real. |
4944 lemma REAL_SUB_INV: "ALL (x::hollight.real) xa::hollight.real. |
4556 x ~= real_of_num (0::nat) & xa ~= real_of_num (0::nat) --> |
4945 x ~= real_of_num 0 & xa ~= real_of_num 0 --> |
4557 real_sub (real_inv x) (real_inv xa) = |
4946 real_sub (real_inv x) (real_inv xa) = |
4558 real_div (real_sub xa x) (real_mul x xa)" |
4947 real_div (real_sub xa x) (real_mul x xa)" |
4559 by (import hollight REAL_SUB_INV) |
4948 by (import hollight REAL_SUB_INV) |
4560 |
4949 |
4561 lemma REAL_DOWN: "ALL d::hollight.real. |
4950 lemma REAL_DOWN: "ALL d::hollight.real. |
4562 real_lt (real_of_num (0::nat)) d --> |
4951 real_lt (real_of_num 0) d --> |
4563 (EX x::hollight.real. real_lt (real_of_num (0::nat)) x & real_lt x d)" |
4952 (EX x::hollight.real. real_lt (real_of_num 0) x & real_lt x d)" |
4564 by (import hollight REAL_DOWN) |
4953 by (import hollight REAL_DOWN) |
4565 |
4954 |
4566 lemma REAL_DOWN2: "ALL (d1::hollight.real) d2::hollight.real. |
4955 lemma REAL_DOWN2: "ALL (d1::hollight.real) d2::hollight.real. |
4567 real_lt (real_of_num (0::nat)) d1 & real_lt (real_of_num (0::nat)) d2 --> |
4956 real_lt (real_of_num 0) d1 & real_lt (real_of_num 0) d2 --> |
4568 (EX e::hollight.real. |
4957 (EX e::hollight.real. |
4569 real_lt (real_of_num (0::nat)) e & real_lt e d1 & real_lt e d2)" |
4958 real_lt (real_of_num 0) e & real_lt e d1 & real_lt e d2)" |
4570 by (import hollight REAL_DOWN2) |
4959 by (import hollight REAL_DOWN2) |
4571 |
4960 |
4572 lemma REAL_POW_LE2: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
4961 lemma REAL_POW_LE2: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
4573 real_le (real_of_num (0::nat)) x & real_le x y --> |
4962 real_le (real_of_num 0) x & real_le x y --> |
4574 real_le (real_pow x n) (real_pow y n)" |
4963 real_le (real_pow x n) (real_pow y n)" |
4575 by (import hollight REAL_POW_LE2) |
4964 by (import hollight REAL_POW_LE2) |
4576 |
4965 |
4577 lemma REAL_POW_MONO: "ALL (m::nat) (n::nat) x::hollight.real. |
4966 lemma REAL_POW_MONO: "ALL (m::nat) (n::nat) x::hollight.real. |
4578 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) x & <= m n --> |
4967 real_le (real_of_num (NUMERAL_BIT1 0)) x & <= m n --> |
4579 real_le (real_pow x m) (real_pow x n)" |
4968 real_le (real_pow x m) (real_pow x n)" |
4580 by (import hollight REAL_POW_MONO) |
4969 by (import hollight REAL_POW_MONO) |
4581 |
4970 |
4582 lemma REAL_POW_LT2: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
4971 lemma REAL_POW_LT2: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
4583 n ~= (0::nat) & real_le (real_of_num (0::nat)) x & real_lt x y --> |
4972 n ~= 0 & real_le (real_of_num 0) x & real_lt x y --> |
4584 real_lt (real_pow x n) (real_pow y n)" |
4973 real_lt (real_pow x n) (real_pow y n)" |
4585 by (import hollight REAL_POW_LT2) |
4974 by (import hollight REAL_POW_LT2) |
4586 |
4975 |
4587 lemma REAL_POW_MONO_LT: "ALL (m::nat) (n::nat) x::hollight.real. |
4976 lemma REAL_POW_MONO_LT: "ALL (m::nat) (n::nat) x::hollight.real. |
4588 real_lt (real_of_num (NUMERAL_BIT1 (0::nat))) x & < m n --> |
4977 real_lt (real_of_num (NUMERAL_BIT1 0)) x & < m n --> |
4589 real_lt (real_pow x m) (real_pow x n)" |
4978 real_lt (real_pow x m) (real_pow x n)" |
4590 by (import hollight REAL_POW_MONO_LT) |
4979 by (import hollight REAL_POW_MONO_LT) |
4591 |
4980 |
4592 lemma REAL_POW_POW: "ALL (x::hollight.real) (m::nat) n::nat. |
4981 lemma REAL_POW_POW: "ALL (x::hollight.real) (m::nat) n::nat. |
4593 real_pow (real_pow x m) n = real_pow x (m * n)" |
4982 real_pow (real_pow x m) n = real_pow x (m * n)" |
4594 by (import hollight REAL_POW_POW) |
4983 by (import hollight REAL_POW_POW) |
4595 |
4984 |
4596 lemma REAL_EQ_RCANCEL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4985 lemma REAL_EQ_RCANCEL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
4597 z ~= real_of_num (0::nat) & real_mul x z = real_mul y z --> x = y" |
4986 z ~= real_of_num 0 & real_mul x z = real_mul y z --> x = y" |
4598 by (import hollight REAL_EQ_RCANCEL_IMP) |
4987 by (import hollight REAL_EQ_RCANCEL_IMP) |
4599 |
4988 |
4600 lemma REAL_EQ_LCANCEL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4989 lemma REAL_EQ_LCANCEL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
4601 xb ~= real_of_num (0::nat) & real_mul xb x = real_mul xb xa --> x = xa" |
4990 xb ~= real_of_num 0 & real_mul xb x = real_mul xb xa --> x = xa" |
4602 by (import hollight REAL_EQ_LCANCEL_IMP) |
4991 by (import hollight REAL_EQ_LCANCEL_IMP) |
4603 |
4992 |
4604 lemma REAL_LT_DIV: "ALL (x::hollight.real) xa::hollight.real. |
4993 lemma REAL_LT_DIV: "ALL (x::hollight.real) xa::hollight.real. |
4605 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) xa --> |
4994 real_lt (real_of_num 0) x & real_lt (real_of_num 0) xa --> |
4606 real_lt (real_of_num (0::nat)) (real_div x xa)" |
4995 real_lt (real_of_num 0) (real_div x xa)" |
4607 by (import hollight REAL_LT_DIV) |
4996 by (import hollight REAL_LT_DIV) |
4608 |
4997 |
4609 lemma REAL_LE_DIV: "ALL (x::hollight.real) xa::hollight.real. |
4998 lemma REAL_LE_DIV: "ALL (x::hollight.real) xa::hollight.real. |
4610 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
4999 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
4611 real_le (real_of_num (0::nat)) (real_div x xa)" |
5000 real_le (real_of_num 0) (real_div x xa)" |
4612 by (import hollight REAL_LE_DIV) |
5001 by (import hollight REAL_LE_DIV) |
4613 |
5002 |
4614 lemma REAL_DIV_POW2: "ALL (x::hollight.real) (m::nat) n::nat. |
5003 lemma REAL_DIV_POW2: "ALL (x::hollight.real) (m::nat) n::nat. |
4615 x ~= real_of_num (0::nat) --> |
5004 x ~= real_of_num 0 --> |
4616 real_div (real_pow x m) (real_pow x n) = |
5005 real_div (real_pow x m) (real_pow x n) = |
4617 COND (<= n m) (real_pow x (m - n)) (real_inv (real_pow x (n - m)))" |
5006 COND (<= n m) (real_pow x (m - n)) (real_inv (real_pow x (n - m)))" |
4618 by (import hollight REAL_DIV_POW2) |
5007 by (import hollight REAL_DIV_POW2) |
4619 |
5008 |
4620 lemma REAL_DIV_POW2_ALT: "ALL (x::hollight.real) (m::nat) n::nat. |
5009 lemma REAL_DIV_POW2_ALT: "ALL (x::hollight.real) (m::nat) n::nat. |
4621 x ~= real_of_num (0::nat) --> |
5010 x ~= real_of_num 0 --> |
4622 real_div (real_pow x m) (real_pow x n) = |
5011 real_div (real_pow x m) (real_pow x n) = |
4623 COND (< n m) (real_pow x (m - n)) (real_inv (real_pow x (n - m)))" |
5012 COND (< n m) (real_pow x (m - n)) (real_inv (real_pow x (n - m)))" |
4624 by (import hollight REAL_DIV_POW2_ALT) |
5013 by (import hollight REAL_DIV_POW2_ALT) |
4625 |
5014 |
4626 lemma REAL_LT_POW2: "ALL x::nat. |
5015 lemma REAL_LT_POW2: "ALL x::nat. |
4627 real_lt (real_of_num (0::nat)) |
5016 real_lt (real_of_num 0) |
4628 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x)" |
5017 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x)" |
4629 by (import hollight REAL_LT_POW2) |
5018 by (import hollight REAL_LT_POW2) |
4630 |
5019 |
4631 lemma REAL_LE_POW2: "ALL n::nat. |
5020 lemma REAL_LE_POW2: "ALL n::nat. |
4632 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) |
5021 real_le (real_of_num (NUMERAL_BIT1 0)) |
4633 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) n)" |
5022 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) n)" |
4634 by (import hollight REAL_LE_POW2) |
5023 by (import hollight REAL_LE_POW2) |
4635 |
5024 |
4636 lemma REAL_POW2_ABS: "ALL x::hollight.real. |
5025 lemma REAL_POW2_ABS: "ALL x::hollight.real. |
4637 real_pow (real_abs x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = |
5026 real_pow (real_abs x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = |
4638 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))" |
5027 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))" |
4639 by (import hollight REAL_POW2_ABS) |
5028 by (import hollight REAL_POW2_ABS) |
4640 |
5029 |
4641 lemma REAL_LE_SQUARE_ABS: "ALL (x::hollight.real) y::hollight.real. |
5030 lemma REAL_LE_SQUARE_ABS: "ALL (x::hollight.real) y::hollight.real. |
4642 real_le (real_abs x) (real_abs y) = |
5031 real_le (real_abs x) (real_abs y) = |
4643 real_le (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
5032 real_le (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
4644 (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
5033 (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
4645 by (import hollight REAL_LE_SQUARE_ABS) |
5034 by (import hollight REAL_LE_SQUARE_ABS) |
4646 |
5035 |
4647 lemma REAL_WLOG_LE: "(ALL (x::hollight.real) y::hollight.real. |
5036 lemma REAL_WLOG_LE: "(ALL (x::hollight.real) y::hollight.real. |
4648 (P::hollight.real => hollight.real => bool) x y = P y x) & |
5037 (P::hollight.real => hollight.real => bool) x y = P y x) & |
4649 (ALL (x::hollight.real) y::hollight.real. real_le x y --> P x y) --> |
5038 (ALL (x::hollight.real) y::hollight.real. real_le x y --> P x y) --> |
4672 "DECIMAL == %(u::nat) ua::nat. real_div (real_of_num u) (real_of_num ua)" |
5061 "DECIMAL == %(u::nat) ua::nat. real_div (real_of_num u) (real_of_num ua)" |
4673 |
5062 |
4674 lemma DEF_DECIMAL: "DECIMAL = (%(u::nat) ua::nat. real_div (real_of_num u) (real_of_num ua))" |
5063 lemma DEF_DECIMAL: "DECIMAL = (%(u::nat) ua::nat. real_div (real_of_num u) (real_of_num ua))" |
4675 by (import hollight DEF_DECIMAL) |
5064 by (import hollight DEF_DECIMAL) |
4676 |
5065 |
4677 lemma RAT_LEMMA1: "(y1::hollight.real) ~= real_of_num (0::nat) & |
5066 lemma RAT_LEMMA1: "(y1::hollight.real) ~= real_of_num 0 & |
4678 (y2::hollight.real) ~= real_of_num (0::nat) --> |
5067 (y2::hollight.real) ~= real_of_num 0 --> |
4679 real_add (real_div (x1::hollight.real) y1) |
5068 real_add (real_div (x1::hollight.real) y1) |
4680 (real_div (x2::hollight.real) y2) = |
5069 (real_div (x2::hollight.real) y2) = |
4681 real_mul (real_add (real_mul x1 y2) (real_mul x2 y1)) |
5070 real_mul (real_add (real_mul x1 y2) (real_mul x2 y1)) |
4682 (real_mul (real_inv y1) (real_inv y2))" |
5071 (real_mul (real_inv y1) (real_inv y2))" |
4683 by (import hollight RAT_LEMMA1) |
5072 by (import hollight RAT_LEMMA1) |
4684 |
5073 |
4685 lemma RAT_LEMMA2: "real_lt (real_of_num (0::nat)) (y1::hollight.real) & |
5074 lemma RAT_LEMMA2: "real_lt (real_of_num 0) (y1::hollight.real) & |
4686 real_lt (real_of_num (0::nat)) (y2::hollight.real) --> |
5075 real_lt (real_of_num 0) (y2::hollight.real) --> |
4687 real_add (real_div (x1::hollight.real) y1) |
5076 real_add (real_div (x1::hollight.real) y1) |
4688 (real_div (x2::hollight.real) y2) = |
5077 (real_div (x2::hollight.real) y2) = |
4689 real_mul (real_add (real_mul x1 y2) (real_mul x2 y1)) |
5078 real_mul (real_add (real_mul x1 y2) (real_mul x2 y1)) |
4690 (real_mul (real_inv y1) (real_inv y2))" |
5079 (real_mul (real_inv y1) (real_inv y2))" |
4691 by (import hollight RAT_LEMMA2) |
5080 by (import hollight RAT_LEMMA2) |
4692 |
5081 |
4693 lemma RAT_LEMMA3: "real_lt (real_of_num (0::nat)) (y1::hollight.real) & |
5082 lemma RAT_LEMMA3: "real_lt (real_of_num 0) (y1::hollight.real) & |
4694 real_lt (real_of_num (0::nat)) (y2::hollight.real) --> |
5083 real_lt (real_of_num 0) (y2::hollight.real) --> |
4695 real_sub (real_div (x1::hollight.real) y1) |
5084 real_sub (real_div (x1::hollight.real) y1) |
4696 (real_div (x2::hollight.real) y2) = |
5085 (real_div (x2::hollight.real) y2) = |
4697 real_mul (real_sub (real_mul x1 y2) (real_mul x2 y1)) |
5086 real_mul (real_sub (real_mul x1 y2) (real_mul x2 y1)) |
4698 (real_mul (real_inv y1) (real_inv y2))" |
5087 (real_mul (real_inv y1) (real_inv y2))" |
4699 by (import hollight RAT_LEMMA3) |
5088 by (import hollight RAT_LEMMA3) |
4700 |
5089 |
4701 lemma RAT_LEMMA4: "real_lt (real_of_num (0::nat)) (y1::hollight.real) & |
5090 lemma RAT_LEMMA4: "real_lt (real_of_num 0) (y1::hollight.real) & |
4702 real_lt (real_of_num (0::nat)) (y2::hollight.real) --> |
5091 real_lt (real_of_num 0) (y2::hollight.real) --> |
4703 real_le (real_div (x1::hollight.real) y1) |
5092 real_le (real_div (x1::hollight.real) y1) |
4704 (real_div (x2::hollight.real) y2) = |
5093 (real_div (x2::hollight.real) y2) = |
4705 real_le (real_mul x1 y2) (real_mul x2 y1)" |
5094 real_le (real_mul x1 y2) (real_mul x2 y1)" |
4706 by (import hollight RAT_LEMMA4) |
5095 by (import hollight RAT_LEMMA4) |
4707 |
5096 |
4708 lemma RAT_LEMMA5: "real_lt (real_of_num (0::nat)) (y1::hollight.real) & |
5097 lemma RAT_LEMMA5: "real_lt (real_of_num 0) (y1::hollight.real) & |
4709 real_lt (real_of_num (0::nat)) (y2::hollight.real) --> |
5098 real_lt (real_of_num 0) (y2::hollight.real) --> |
4710 (real_div (x1::hollight.real) y1 = real_div (x2::hollight.real) y2) = |
5099 (real_div (x1::hollight.real) y1 = real_div (x2::hollight.real) y2) = |
4711 (real_mul x1 y2 = real_mul x2 y1)" |
5100 (real_mul x1 y2 = real_mul x2 y1)" |
4712 by (import hollight RAT_LEMMA5) |
5101 by (import hollight RAT_LEMMA5) |
4713 |
5102 |
4714 constdefs |
5103 constdefs |
4721 (%u::hollight.real. |
5110 (%u::hollight.real. |
4722 EX n::nat. u = real_of_num n | u = real_neg (real_of_num n))" |
5111 EX n::nat. u = real_of_num n | u = real_neg (real_of_num n))" |
4723 by (import hollight DEF_is_int) |
5112 by (import hollight DEF_is_int) |
4724 |
5113 |
4725 typedef (open) int = "Collect is_int" morphisms "dest_int" "mk_int" |
5114 typedef (open) int = "Collect is_int" morphisms "dest_int" "mk_int" |
4726 apply (rule light_ex_imp_nonempty[where t="real_of_num (NUMERAL (0::nat))"]) |
5115 apply (rule light_ex_imp_nonempty[where t="real_of_num (NUMERAL 0)"]) |
4727 by (import hollight TYDEF_int) |
5116 by (import hollight TYDEF_int) |
4728 |
5117 |
4729 syntax |
5118 syntax |
4730 dest_int :: _ |
5119 dest_int :: _ |
4731 |
5120 |
4900 lemma INT_IMAGE: "ALL x::hollight.int. |
5289 lemma INT_IMAGE: "ALL x::hollight.int. |
4901 (EX n::nat. x = int_of_num n) | (EX n::nat. x = int_neg (int_of_num n))" |
5290 (EX n::nat. x = int_of_num n) | (EX n::nat. x = int_neg (int_of_num n))" |
4902 by (import hollight INT_IMAGE) |
5291 by (import hollight INT_IMAGE) |
4903 |
5292 |
4904 lemma INT_LT_DISCRETE: "ALL (x::hollight.int) y::hollight.int. |
5293 lemma INT_LT_DISCRETE: "ALL (x::hollight.int) y::hollight.int. |
4905 int_lt x y = int_le (int_add x (int_of_num (NUMERAL_BIT1 (0::nat)))) y" |
5294 int_lt x y = int_le (int_add x (int_of_num (NUMERAL_BIT1 0))) y" |
4906 by (import hollight INT_LT_DISCRETE) |
5295 by (import hollight INT_LT_DISCRETE) |
4907 |
5296 |
4908 lemma INT_GT_DISCRETE: "ALL (x::hollight.int) xa::hollight.int. |
5297 lemma INT_GT_DISCRETE: "ALL (x::hollight.int) xa::hollight.int. |
4909 int_gt x xa = int_ge x (int_add xa (int_of_num (NUMERAL_BIT1 (0::nat))))" |
5298 int_gt x xa = int_ge x (int_add xa (int_of_num (NUMERAL_BIT1 0)))" |
4910 by (import hollight INT_GT_DISCRETE) |
5299 by (import hollight INT_GT_DISCRETE) |
4911 |
5300 |
4912 lemma INT_FORALL_POS: "(ALL n::nat. (P::hollight.int => bool) (int_of_num n)) = |
5301 lemma INT_FORALL_POS: "(ALL n::nat. (P::hollight.int => bool) (int_of_num n)) = |
4913 (ALL i::hollight.int. int_le (int_of_num (0::nat)) i --> P i)" |
5302 (ALL i::hollight.int. int_le (int_of_num 0) i --> P i)" |
4914 by (import hollight INT_FORALL_POS) |
5303 by (import hollight INT_FORALL_POS) |
4915 |
5304 |
4916 lemma INT_ABS_MUL_1: "ALL (x::hollight.int) y::hollight.int. |
5305 lemma INT_ABS_MUL_1: "ALL (x::hollight.int) y::hollight.int. |
4917 (int_abs (int_mul x y) = int_of_num (NUMERAL_BIT1 (0::nat))) = |
5306 (int_abs (int_mul x y) = int_of_num (NUMERAL_BIT1 0)) = |
4918 (int_abs x = int_of_num (NUMERAL_BIT1 (0::nat)) & |
5307 (int_abs x = int_of_num (NUMERAL_BIT1 0) & |
4919 int_abs y = int_of_num (NUMERAL_BIT1 (0::nat)))" |
5308 int_abs y = int_of_num (NUMERAL_BIT1 0))" |
4920 by (import hollight INT_ABS_MUL_1) |
5309 by (import hollight INT_ABS_MUL_1) |
4921 |
5310 |
4922 lemma INT_POW: "int_pow (x::hollight.int) (0::nat) = int_of_num (NUMERAL_BIT1 (0::nat)) & |
5311 lemma INT_POW: "int_pow (x::hollight.int) 0 = int_of_num (NUMERAL_BIT1 0) & |
4923 (ALL xa::nat. int_pow x (Suc xa) = int_mul x (int_pow x xa))" |
5312 (ALL xa::nat. int_pow x (Suc xa) = int_mul x (int_pow x xa))" |
4924 by (import hollight INT_POW) |
5313 by (import hollight INT_POW) |
4925 |
5314 |
4926 lemma INT_ABS: "ALL x::hollight.int. |
5315 lemma INT_ABS: "ALL x::hollight.int. |
4927 int_abs x = COND (int_le (int_of_num (0::nat)) x) x (int_neg x)" |
5316 int_abs x = COND (int_le (int_of_num 0) x) x (int_neg x)" |
4928 by (import hollight INT_ABS) |
5317 by (import hollight INT_ABS) |
4929 |
5318 |
4930 lemma INT_GE: "ALL (x::hollight.int) xa::hollight.int. int_ge x xa = int_le xa x" |
5319 lemma INT_GE: "ALL (x::hollight.int) xa::hollight.int. int_ge x xa = int_le xa x" |
4931 by (import hollight INT_GE) |
5320 by (import hollight INT_GE) |
4932 |
5321 |
4935 |
5324 |
4936 lemma INT_LT: "ALL (x::hollight.int) xa::hollight.int. int_lt x xa = (~ int_le xa x)" |
5325 lemma INT_LT: "ALL (x::hollight.int) xa::hollight.int. int_lt x xa = (~ int_le xa x)" |
4937 by (import hollight INT_LT) |
5326 by (import hollight INT_LT) |
4938 |
5327 |
4939 lemma INT_ARCH: "ALL (x::hollight.int) d::hollight.int. |
5328 lemma INT_ARCH: "ALL (x::hollight.int) d::hollight.int. |
4940 d ~= int_of_num (0::nat) --> (EX c::hollight.int. int_lt x (int_mul c d))" |
5329 d ~= int_of_num 0 --> (EX c::hollight.int. int_lt x (int_mul c d))" |
4941 by (import hollight INT_ARCH) |
5330 by (import hollight INT_ARCH) |
4942 |
5331 |
4943 constdefs |
5332 constdefs |
4944 mod_int :: "hollight.int => hollight.int => hollight.int => bool" |
5333 mod_int :: "hollight.int => hollight.int => hollight.int => bool" |
4945 "mod_int == |
5334 "mod_int == |
4950 (%(u::hollight.int) (ua::hollight.int) ub::hollight.int. |
5339 (%(u::hollight.int) (ua::hollight.int) ub::hollight.int. |
4951 EX q::hollight.int. int_sub ua ub = int_mul q u)" |
5340 EX q::hollight.int. int_sub ua ub = int_mul q u)" |
4952 by (import hollight DEF_mod_int) |
5341 by (import hollight DEF_mod_int) |
4953 |
5342 |
4954 constdefs |
5343 constdefs |
4955 IN :: "'A::type => ('A::type => bool) => bool" |
5344 IN :: "'A => ('A => bool) => bool" |
4956 "IN == %(u::'A::type) ua::'A::type => bool. ua u" |
5345 "IN == %(u::'A::type) ua::'A::type => bool. ua u" |
4957 |
5346 |
4958 lemma DEF_IN: "IN = (%(u::'A::type) ua::'A::type => bool. ua u)" |
5347 lemma DEF_IN: "IN = (%(u::'A::type) ua::'A::type => bool. ua u)" |
4959 by (import hollight DEF_IN) |
5348 by (import hollight DEF_IN) |
4960 |
5349 |
4961 lemma EXTENSION: "ALL (x::'A::type => bool) xa::'A::type => bool. |
5350 lemma EXTENSION: "ALL (x::'A::type => bool) xa::'A::type => bool. |
4962 (x = xa) = (ALL xb::'A::type. IN xb x = IN xb xa)" |
5351 (x = xa) = (ALL xb::'A::type. IN xb x = IN xb xa)" |
4963 by (import hollight EXTENSION) |
5352 by (import hollight EXTENSION) |
4964 |
5353 |
4965 constdefs |
5354 constdefs |
4966 GSPEC :: "('A::type => bool) => 'A::type => bool" |
5355 GSPEC :: "('A => bool) => 'A => bool" |
4967 "GSPEC == %u::'A::type => bool. u" |
5356 "GSPEC == %u::'A::type => bool. u" |
4968 |
5357 |
4969 lemma DEF_GSPEC: "GSPEC = (%u::'A::type => bool. u)" |
5358 lemma DEF_GSPEC: "GSPEC = (%u::'A::type => bool. u)" |
4970 by (import hollight DEF_GSPEC) |
5359 by (import hollight DEF_GSPEC) |
4971 |
5360 |
4972 constdefs |
5361 constdefs |
4973 SETSPEC :: "'q_36941::type => bool => 'q_36941::type => bool" |
5362 SETSPEC :: "'q_36941 => bool => 'q_36941 => bool" |
4974 "SETSPEC == %(u::'q_36941::type) (ua::bool) ub::'q_36941::type. ua & u = ub" |
5363 "SETSPEC == %(u::'q_36941::type) (ua::bool) ub::'q_36941::type. ua & u = ub" |
4975 |
5364 |
4976 lemma DEF_SETSPEC: "SETSPEC = (%(u::'q_36941::type) (ua::bool) ub::'q_36941::type. ua & u = ub)" |
5365 lemma DEF_SETSPEC: "SETSPEC = (%(u::'q_36941::type) (ua::bool) ub::'q_36941::type. ua & u = ub)" |
4977 by (import hollight DEF_SETSPEC) |
5366 by (import hollight DEF_SETSPEC) |
4978 |
5367 |
4991 p x) & |
5380 p x) & |
4992 (ALL (p::'q_37079::type => bool) x::'q_37079::type. IN x p = p x)" |
5381 (ALL (p::'q_37079::type => bool) x::'q_37079::type. IN x p = p x)" |
4993 by (import hollight IN_ELIM_THM) |
5382 by (import hollight IN_ELIM_THM) |
4994 |
5383 |
4995 constdefs |
5384 constdefs |
4996 EMPTY :: "'A::type => bool" |
5385 EMPTY :: "'A => bool" |
4997 "EMPTY == %x::'A::type. False" |
5386 "EMPTY == %x::'A::type. False" |
4998 |
5387 |
4999 lemma DEF_EMPTY: "EMPTY = (%x::'A::type. False)" |
5388 lemma DEF_EMPTY: "EMPTY = (%x::'A::type. False)" |
5000 by (import hollight DEF_EMPTY) |
5389 by (import hollight DEF_EMPTY) |
5001 |
5390 |
5002 constdefs |
5391 constdefs |
5003 INSERT :: "'A::type => ('A::type => bool) => 'A::type => bool" |
5392 INSERT :: "'A => ('A => bool) => 'A => bool" |
5004 "INSERT == %(u::'A::type) (ua::'A::type => bool) y::'A::type. IN y ua | y = u" |
5393 "INSERT == %(u::'A::type) (ua::'A::type => bool) y::'A::type. IN y ua | y = u" |
5005 |
5394 |
5006 lemma DEF_INSERT: "INSERT = |
5395 lemma DEF_INSERT: "INSERT = |
5007 (%(u::'A::type) (ua::'A::type => bool) y::'A::type. IN y ua | y = u)" |
5396 (%(u::'A::type) (ua::'A::type => bool) y::'A::type. IN y ua | y = u)" |
5008 by (import hollight DEF_INSERT) |
5397 by (import hollight DEF_INSERT) |
5009 |
5398 |
5010 consts |
5399 consts |
5011 UNIV :: "'A::type => bool" |
5400 UNIV :: "'A => bool" |
5012 |
5401 |
5013 defs |
5402 defs |
5014 UNIV_def: "hollight.UNIV == %x::'A::type. True" |
5403 UNIV_def: "hollight.UNIV == %x::'A::type. True" |
5015 |
5404 |
5016 lemma DEF_UNIV: "hollight.UNIV = (%x::'A::type. True)" |
5405 lemma DEF_UNIV: "hollight.UNIV = (%x::'A::type. True)" |
5017 by (import hollight DEF_UNIV) |
5406 by (import hollight DEF_UNIV) |
5018 |
5407 |
5019 consts |
5408 consts |
5020 UNION :: "('A::type => bool) => ('A::type => bool) => 'A::type => bool" |
5409 UNION :: "('A => bool) => ('A => bool) => 'A => bool" |
5021 |
5410 |
5022 defs |
5411 defs |
5023 UNION_def: "hollight.UNION == |
5412 UNION_def: "hollight.UNION == |
5024 %(u::'A::type => bool) ua::'A::type => bool. |
5413 %(u::'A::type => bool) ua::'A::type => bool. |
5025 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u | IN x ua) x)" |
5414 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u | IN x ua) x)" |
5028 (%(u::'A::type => bool) ua::'A::type => bool. |
5417 (%(u::'A::type => bool) ua::'A::type => bool. |
5029 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u | IN x ua) x))" |
5418 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u | IN x ua) x))" |
5030 by (import hollight DEF_UNION) |
5419 by (import hollight DEF_UNION) |
5031 |
5420 |
5032 constdefs |
5421 constdefs |
5033 UNIONS :: "(('A::type => bool) => bool) => 'A::type => bool" |
5422 UNIONS :: "(('A => bool) => bool) => 'A => bool" |
5034 "UNIONS == |
5423 "UNIONS == |
5035 %u::('A::type => bool) => bool. |
5424 %u::('A::type => bool) => bool. |
5036 GSPEC |
5425 GSPEC |
5037 (%ua::'A::type. |
5426 (%ua::'A::type. |
5038 EX x::'A::type. |
5427 EX x::'A::type. |
5045 EX x::'A::type. |
5434 EX x::'A::type. |
5046 SETSPEC ua (EX ua::'A::type => bool. IN ua u & IN x ua) x))" |
5435 SETSPEC ua (EX ua::'A::type => bool. IN ua u & IN x ua) x))" |
5047 by (import hollight DEF_UNIONS) |
5436 by (import hollight DEF_UNIONS) |
5048 |
5437 |
5049 consts |
5438 consts |
5050 INTER :: "('A::type => bool) => ('A::type => bool) => 'A::type => bool" |
5439 INTER :: "('A => bool) => ('A => bool) => 'A => bool" |
5051 |
5440 |
5052 defs |
5441 defs |
5053 INTER_def: "hollight.INTER == |
5442 INTER_def: "hollight.INTER == |
5054 %(u::'A::type => bool) ua::'A::type => bool. |
5443 %(u::'A::type => bool) ua::'A::type => bool. |
5055 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u & IN x ua) x)" |
5444 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u & IN x ua) x)" |
5058 (%(u::'A::type => bool) ua::'A::type => bool. |
5447 (%(u::'A::type => bool) ua::'A::type => bool. |
5059 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u & IN x ua) x))" |
5448 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u & IN x ua) x))" |
5060 by (import hollight DEF_INTER) |
5449 by (import hollight DEF_INTER) |
5061 |
5450 |
5062 constdefs |
5451 constdefs |
5063 INTERS :: "(('A::type => bool) => bool) => 'A::type => bool" |
5452 INTERS :: "(('A => bool) => bool) => 'A => bool" |
5064 "INTERS == |
5453 "INTERS == |
5065 %u::('A::type => bool) => bool. |
5454 %u::('A::type => bool) => bool. |
5066 GSPEC |
5455 GSPEC |
5067 (%ua::'A::type. |
5456 (%ua::'A::type. |
5068 EX x::'A::type. |
5457 EX x::'A::type. |
5075 EX x::'A::type. |
5464 EX x::'A::type. |
5076 SETSPEC ua (ALL ua::'A::type => bool. IN ua u --> IN x ua) x))" |
5465 SETSPEC ua (ALL ua::'A::type => bool. IN ua u --> IN x ua) x))" |
5077 by (import hollight DEF_INTERS) |
5466 by (import hollight DEF_INTERS) |
5078 |
5467 |
5079 constdefs |
5468 constdefs |
5080 DIFF :: "('A::type => bool) => ('A::type => bool) => 'A::type => bool" |
5469 DIFF :: "('A => bool) => ('A => bool) => 'A => bool" |
5081 "DIFF == |
5470 "DIFF == |
5082 %(u::'A::type => bool) ua::'A::type => bool. |
5471 %(u::'A::type => bool) ua::'A::type => bool. |
5083 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u & ~ IN x ua) x)" |
5472 GSPEC (%ub::'A::type. EX x::'A::type. SETSPEC ub (IN x u & ~ IN x ua) x)" |
5084 |
5473 |
5085 lemma DEF_DIFF: "DIFF = |
5474 lemma DEF_DIFF: "DIFF = |
5091 lemma INSERT: "INSERT (x::'A::type) (s::'A::type => bool) = |
5480 lemma INSERT: "INSERT (x::'A::type) (s::'A::type => bool) = |
5092 GSPEC (%u::'A::type. EX y::'A::type. SETSPEC u (IN y s | y = x) y)" |
5481 GSPEC (%u::'A::type. EX y::'A::type. SETSPEC u (IN y s | y = x) y)" |
5093 by (import hollight INSERT) |
5482 by (import hollight INSERT) |
5094 |
5483 |
5095 constdefs |
5484 constdefs |
5096 DELETE :: "('A::type => bool) => 'A::type => 'A::type => bool" |
5485 DELETE :: "('A => bool) => 'A => 'A => bool" |
5097 "DELETE == |
5486 "DELETE == |
5098 %(u::'A::type => bool) ua::'A::type. |
5487 %(u::'A::type => bool) ua::'A::type. |
5099 GSPEC (%ub::'A::type. EX y::'A::type. SETSPEC ub (IN y u & y ~= ua) y)" |
5488 GSPEC (%ub::'A::type. EX y::'A::type. SETSPEC ub (IN y u & y ~= ua) y)" |
5100 |
5489 |
5101 lemma DEF_DELETE: "DELETE = |
5490 lemma DEF_DELETE: "DELETE = |
5102 (%(u::'A::type => bool) ua::'A::type. |
5491 (%(u::'A::type => bool) ua::'A::type. |
5103 GSPEC (%ub::'A::type. EX y::'A::type. SETSPEC ub (IN y u & y ~= ua) y))" |
5492 GSPEC (%ub::'A::type. EX y::'A::type. SETSPEC ub (IN y u & y ~= ua) y))" |
5104 by (import hollight DEF_DELETE) |
5493 by (import hollight DEF_DELETE) |
5105 |
5494 |
5106 constdefs |
5495 constdefs |
5107 SUBSET :: "('A::type => bool) => ('A::type => bool) => bool" |
5496 SUBSET :: "('A => bool) => ('A => bool) => bool" |
5108 "SUBSET == |
5497 "SUBSET == |
5109 %(u::'A::type => bool) ua::'A::type => bool. |
5498 %(u::'A::type => bool) ua::'A::type => bool. |
5110 ALL x::'A::type. IN x u --> IN x ua" |
5499 ALL x::'A::type. IN x u --> IN x ua" |
5111 |
5500 |
5112 lemma DEF_SUBSET: "SUBSET = |
5501 lemma DEF_SUBSET: "SUBSET = |
5113 (%(u::'A::type => bool) ua::'A::type => bool. |
5502 (%(u::'A::type => bool) ua::'A::type => bool. |
5114 ALL x::'A::type. IN x u --> IN x ua)" |
5503 ALL x::'A::type. IN x u --> IN x ua)" |
5115 by (import hollight DEF_SUBSET) |
5504 by (import hollight DEF_SUBSET) |
5116 |
5505 |
5117 constdefs |
5506 constdefs |
5118 PSUBSET :: "('A::type => bool) => ('A::type => bool) => bool" |
5507 PSUBSET :: "('A => bool) => ('A => bool) => bool" |
5119 "PSUBSET == |
5508 "PSUBSET == |
5120 %(u::'A::type => bool) ua::'A::type => bool. SUBSET u ua & u ~= ua" |
5509 %(u::'A::type => bool) ua::'A::type => bool. SUBSET u ua & u ~= ua" |
5121 |
5510 |
5122 lemma DEF_PSUBSET: "PSUBSET = |
5511 lemma DEF_PSUBSET: "PSUBSET = |
5123 (%(u::'A::type => bool) ua::'A::type => bool. SUBSET u ua & u ~= ua)" |
5512 (%(u::'A::type => bool) ua::'A::type => bool. SUBSET u ua & u ~= ua)" |
5124 by (import hollight DEF_PSUBSET) |
5513 by (import hollight DEF_PSUBSET) |
5125 |
5514 |
5126 constdefs |
5515 constdefs |
5127 DISJOINT :: "('A::type => bool) => ('A::type => bool) => bool" |
5516 DISJOINT :: "('A => bool) => ('A => bool) => bool" |
5128 "DISJOINT == |
5517 "DISJOINT == |
5129 %(u::'A::type => bool) ua::'A::type => bool. hollight.INTER u ua = EMPTY" |
5518 %(u::'A::type => bool) ua::'A::type => bool. hollight.INTER u ua = EMPTY" |
5130 |
5519 |
5131 lemma DEF_DISJOINT: "DISJOINT = |
5520 lemma DEF_DISJOINT: "DISJOINT = |
5132 (%(u::'A::type => bool) ua::'A::type => bool. hollight.INTER u ua = EMPTY)" |
5521 (%(u::'A::type => bool) ua::'A::type => bool. hollight.INTER u ua = EMPTY)" |
5133 by (import hollight DEF_DISJOINT) |
5522 by (import hollight DEF_DISJOINT) |
5134 |
5523 |
5135 constdefs |
5524 constdefs |
5136 SING :: "('A::type => bool) => bool" |
5525 SING :: "('A => bool) => bool" |
5137 "SING == %u::'A::type => bool. EX x::'A::type. u = INSERT x EMPTY" |
5526 "SING == %u::'A::type => bool. EX x::'A::type. u = INSERT x EMPTY" |
5138 |
5527 |
5139 lemma DEF_SING: "SING = (%u::'A::type => bool. EX x::'A::type. u = INSERT x EMPTY)" |
5528 lemma DEF_SING: "SING = (%u::'A::type => bool. EX x::'A::type. u = INSERT x EMPTY)" |
5140 by (import hollight DEF_SING) |
5529 by (import hollight DEF_SING) |
5141 |
5530 |
5142 constdefs |
5531 constdefs |
5143 FINITE :: "('A::type => bool) => bool" |
5532 FINITE :: "('A => bool) => bool" |
5144 "FINITE == |
5533 "FINITE == |
5145 %a::'A::type => bool. |
5534 %a::'A::type => bool. |
5146 ALL FINITE'::('A::type => bool) => bool. |
5535 ALL FINITE'::('A::type => bool) => bool. |
5147 (ALL a::'A::type => bool. |
5536 (ALL a::'A::type => bool. |
5148 a = EMPTY | |
5537 a = EMPTY | |
5161 FINITE' a) --> |
5550 FINITE' a) --> |
5162 FINITE' a)" |
5551 FINITE' a)" |
5163 by (import hollight DEF_FINITE) |
5552 by (import hollight DEF_FINITE) |
5164 |
5553 |
5165 constdefs |
5554 constdefs |
5166 INFINITE :: "('A::type => bool) => bool" |
5555 INFINITE :: "('A => bool) => bool" |
5167 "INFINITE == %u::'A::type => bool. ~ FINITE u" |
5556 "INFINITE == %u::'A::type => bool. ~ FINITE u" |
5168 |
5557 |
5169 lemma DEF_INFINITE: "INFINITE = (%u::'A::type => bool. ~ FINITE u)" |
5558 lemma DEF_INFINITE: "INFINITE = (%u::'A::type => bool. ~ FINITE u)" |
5170 by (import hollight DEF_INFINITE) |
5559 by (import hollight DEF_INFINITE) |
5171 |
5560 |
5172 constdefs |
5561 constdefs |
5173 IMAGE :: "('A::type => 'B::type) => ('A::type => bool) => 'B::type => bool" |
5562 IMAGE :: "('A => 'B) => ('A => bool) => 'B => bool" |
5174 "IMAGE == |
5563 "IMAGE == |
5175 %(u::'A::type => 'B::type) ua::'A::type => bool. |
5564 %(u::'A::type => 'B::type) ua::'A::type => bool. |
5176 GSPEC |
5565 GSPEC |
5177 (%ub::'B::type. |
5566 (%ub::'B::type. |
5178 EX y::'B::type. SETSPEC ub (EX x::'A::type. IN x ua & y = u x) y)" |
5567 EX y::'B::type. SETSPEC ub (EX x::'A::type. IN x ua & y = u x) y)" |
5183 (%ub::'B::type. |
5572 (%ub::'B::type. |
5184 EX y::'B::type. SETSPEC ub (EX x::'A::type. IN x ua & y = u x) y))" |
5573 EX y::'B::type. SETSPEC ub (EX x::'A::type. IN x ua & y = u x) y))" |
5185 by (import hollight DEF_IMAGE) |
5574 by (import hollight DEF_IMAGE) |
5186 |
5575 |
5187 constdefs |
5576 constdefs |
5188 INJ :: "('A::type => 'B::type) => ('A::type => bool) => ('B::type => bool) => bool" |
5577 INJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool" |
5189 "INJ == |
5578 "INJ == |
5190 %(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5579 %(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5191 (ALL x::'A::type. IN x ua --> IN (u x) ub) & |
5580 (ALL x::'A::type. IN x ua --> IN (u x) ub) & |
5192 (ALL (x::'A::type) y::'A::type. IN x ua & IN y ua & u x = u y --> x = y)" |
5581 (ALL (x::'A::type) y::'A::type. IN x ua & IN y ua & u x = u y --> x = y)" |
5193 |
5582 |
5197 (ALL (x::'A::type) y::'A::type. |
5586 (ALL (x::'A::type) y::'A::type. |
5198 IN x ua & IN y ua & u x = u y --> x = y))" |
5587 IN x ua & IN y ua & u x = u y --> x = y))" |
5199 by (import hollight DEF_INJ) |
5588 by (import hollight DEF_INJ) |
5200 |
5589 |
5201 constdefs |
5590 constdefs |
5202 SURJ :: "('A::type => 'B::type) => ('A::type => bool) => ('B::type => bool) => bool" |
5591 SURJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool" |
5203 "SURJ == |
5592 "SURJ == |
5204 %(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5593 %(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5205 (ALL x::'A::type. IN x ua --> IN (u x) ub) & |
5594 (ALL x::'A::type. IN x ua --> IN (u x) ub) & |
5206 (ALL x::'B::type. IN x ub --> (EX y::'A::type. IN y ua & u y = x))" |
5595 (ALL x::'B::type. IN x ub --> (EX y::'A::type. IN y ua & u y = x))" |
5207 |
5596 |
5210 (ALL x::'A::type. IN x ua --> IN (u x) ub) & |
5599 (ALL x::'A::type. IN x ua --> IN (u x) ub) & |
5211 (ALL x::'B::type. IN x ub --> (EX y::'A::type. IN y ua & u y = x)))" |
5600 (ALL x::'B::type. IN x ub --> (EX y::'A::type. IN y ua & u y = x)))" |
5212 by (import hollight DEF_SURJ) |
5601 by (import hollight DEF_SURJ) |
5213 |
5602 |
5214 constdefs |
5603 constdefs |
5215 BIJ :: "('A::type => 'B::type) => ('A::type => bool) => ('B::type => bool) => bool" |
5604 BIJ :: "('A => 'B) => ('A => bool) => ('B => bool) => bool" |
5216 "BIJ == |
5605 "BIJ == |
5217 %(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5606 %(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5218 INJ u ua ub & SURJ u ua ub" |
5607 INJ u ua ub & SURJ u ua ub" |
5219 |
5608 |
5220 lemma DEF_BIJ: "BIJ = |
5609 lemma DEF_BIJ: "BIJ = |
5221 (%(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5610 (%(u::'A::type => 'B::type) (ua::'A::type => bool) ub::'B::type => bool. |
5222 INJ u ua ub & SURJ u ua ub)" |
5611 INJ u ua ub & SURJ u ua ub)" |
5223 by (import hollight DEF_BIJ) |
5612 by (import hollight DEF_BIJ) |
5224 |
5613 |
5225 constdefs |
5614 constdefs |
5226 CHOICE :: "('A::type => bool) => 'A::type" |
5615 CHOICE :: "('A => bool) => 'A" |
5227 "CHOICE == %u::'A::type => bool. SOME x::'A::type. IN x u" |
5616 "CHOICE == %u::'A::type => bool. SOME x::'A::type. IN x u" |
5228 |
5617 |
5229 lemma DEF_CHOICE: "CHOICE = (%u::'A::type => bool. SOME x::'A::type. IN x u)" |
5618 lemma DEF_CHOICE: "CHOICE = (%u::'A::type => bool. SOME x::'A::type. IN x u)" |
5230 by (import hollight DEF_CHOICE) |
5619 by (import hollight DEF_CHOICE) |
5231 |
5620 |
5232 constdefs |
5621 constdefs |
5233 REST :: "('A::type => bool) => 'A::type => bool" |
5622 REST :: "('A => bool) => 'A => bool" |
5234 "REST == %u::'A::type => bool. DELETE u (CHOICE u)" |
5623 "REST == %u::'A::type => bool. DELETE u (CHOICE u)" |
5235 |
5624 |
5236 lemma DEF_REST: "REST = (%u::'A::type => bool. DELETE u (CHOICE u))" |
5625 lemma DEF_REST: "REST = (%u::'A::type => bool. DELETE u (CHOICE u))" |
5237 by (import hollight DEF_REST) |
5626 by (import hollight DEF_REST) |
5238 |
5627 |
5239 constdefs |
5628 constdefs |
5240 CARD_GE :: "('q_37578::type => bool) => ('q_37575::type => bool) => bool" |
5629 CARD_GE :: "('q_37578 => bool) => ('q_37575 => bool) => bool" |
5241 "CARD_GE == |
5630 "CARD_GE == |
5242 %(u::'q_37578::type => bool) ua::'q_37575::type => bool. |
5631 %(u::'q_37578::type => bool) ua::'q_37575::type => bool. |
5243 EX f::'q_37578::type => 'q_37575::type. |
5632 EX f::'q_37578::type => 'q_37575::type. |
5244 ALL y::'q_37575::type. |
5633 ALL y::'q_37575::type. |
5245 IN y ua --> (EX x::'q_37578::type. IN x u & y = f x)" |
5634 IN y ua --> (EX x::'q_37578::type. IN x u & y = f x)" |
5250 ALL y::'q_37575::type. |
5639 ALL y::'q_37575::type. |
5251 IN y ua --> (EX x::'q_37578::type. IN x u & y = f x))" |
5640 IN y ua --> (EX x::'q_37578::type. IN x u & y = f x))" |
5252 by (import hollight DEF_CARD_GE) |
5641 by (import hollight DEF_CARD_GE) |
5253 |
5642 |
5254 constdefs |
5643 constdefs |
5255 CARD_LE :: "('q_37587::type => bool) => ('q_37586::type => bool) => bool" |
5644 CARD_LE :: "('q_37587 => bool) => ('q_37586 => bool) => bool" |
5256 "CARD_LE == |
5645 "CARD_LE == |
5257 %(u::'q_37587::type => bool) ua::'q_37586::type => bool. CARD_GE ua u" |
5646 %(u::'q_37587::type => bool) ua::'q_37586::type => bool. CARD_GE ua u" |
5258 |
5647 |
5259 lemma DEF_CARD_LE: "CARD_LE = |
5648 lemma DEF_CARD_LE: "CARD_LE = |
5260 (%(u::'q_37587::type => bool) ua::'q_37586::type => bool. CARD_GE ua u)" |
5649 (%(u::'q_37587::type => bool) ua::'q_37586::type => bool. CARD_GE ua u)" |
5261 by (import hollight DEF_CARD_LE) |
5650 by (import hollight DEF_CARD_LE) |
5262 |
5651 |
5263 constdefs |
5652 constdefs |
5264 CARD_EQ :: "('q_37597::type => bool) => ('q_37598::type => bool) => bool" |
5653 CARD_EQ :: "('q_37597 => bool) => ('q_37598 => bool) => bool" |
5265 "CARD_EQ == |
5654 "CARD_EQ == |
5266 %(u::'q_37597::type => bool) ua::'q_37598::type => bool. |
5655 %(u::'q_37597::type => bool) ua::'q_37598::type => bool. |
5267 CARD_LE u ua & CARD_LE ua u" |
5656 CARD_LE u ua & CARD_LE ua u" |
5268 |
5657 |
5269 lemma DEF_CARD_EQ: "CARD_EQ = |
5658 lemma DEF_CARD_EQ: "CARD_EQ = |
5270 (%(u::'q_37597::type => bool) ua::'q_37598::type => bool. |
5659 (%(u::'q_37597::type => bool) ua::'q_37598::type => bool. |
5271 CARD_LE u ua & CARD_LE ua u)" |
5660 CARD_LE u ua & CARD_LE ua u)" |
5272 by (import hollight DEF_CARD_EQ) |
5661 by (import hollight DEF_CARD_EQ) |
5273 |
5662 |
5274 constdefs |
5663 constdefs |
5275 CARD_GT :: "('q_37612::type => bool) => ('q_37613::type => bool) => bool" |
5664 CARD_GT :: "('q_37612 => bool) => ('q_37613 => bool) => bool" |
5276 "CARD_GT == |
5665 "CARD_GT == |
5277 %(u::'q_37612::type => bool) ua::'q_37613::type => bool. |
5666 %(u::'q_37612::type => bool) ua::'q_37613::type => bool. |
5278 CARD_GE u ua & ~ CARD_GE ua u" |
5667 CARD_GE u ua & ~ CARD_GE ua u" |
5279 |
5668 |
5280 lemma DEF_CARD_GT: "CARD_GT = |
5669 lemma DEF_CARD_GT: "CARD_GT = |
5281 (%(u::'q_37612::type => bool) ua::'q_37613::type => bool. |
5670 (%(u::'q_37612::type => bool) ua::'q_37613::type => bool. |
5282 CARD_GE u ua & ~ CARD_GE ua u)" |
5671 CARD_GE u ua & ~ CARD_GE ua u)" |
5283 by (import hollight DEF_CARD_GT) |
5672 by (import hollight DEF_CARD_GT) |
5284 |
5673 |
5285 constdefs |
5674 constdefs |
5286 CARD_LT :: "('q_37628::type => bool) => ('q_37629::type => bool) => bool" |
5675 CARD_LT :: "('q_37628 => bool) => ('q_37629 => bool) => bool" |
5287 "CARD_LT == |
5676 "CARD_LT == |
5288 %(u::'q_37628::type => bool) ua::'q_37629::type => bool. |
5677 %(u::'q_37628::type => bool) ua::'q_37629::type => bool. |
5289 CARD_LE u ua & ~ CARD_LE ua u" |
5678 CARD_LE u ua & ~ CARD_LE ua u" |
5290 |
5679 |
5291 lemma DEF_CARD_LT: "CARD_LT = |
5680 lemma DEF_CARD_LT: "CARD_LT = |
5292 (%(u::'q_37628::type => bool) ua::'q_37629::type => bool. |
5681 (%(u::'q_37628::type => bool) ua::'q_37629::type => bool. |
5293 CARD_LE u ua & ~ CARD_LE ua u)" |
5682 CARD_LE u ua & ~ CARD_LE ua u)" |
5294 by (import hollight DEF_CARD_LT) |
5683 by (import hollight DEF_CARD_LT) |
5295 |
5684 |
5296 constdefs |
5685 constdefs |
5297 COUNTABLE :: "('q_37642::type => bool) => bool" |
5686 COUNTABLE :: "('q_37642 => bool) => bool" |
5298 "(op ==::(('q_37642::type => bool) => bool) |
5687 "(op ==::(('q_37642::type => bool) => bool) |
5299 => (('q_37642::type => bool) => bool) => prop) |
5688 => (('q_37642::type => bool) => bool) => prop) |
5300 (COUNTABLE::('q_37642::type => bool) => bool) |
5689 (COUNTABLE::('q_37642::type => bool) => bool) |
5301 ((CARD_GE::(nat => bool) => ('q_37642::type => bool) => bool) |
5690 ((CARD_GE::(nat => bool) => ('q_37642::type => bool) => bool) |
5302 (hollight.UNIV::nat => bool))" |
5691 (hollight.UNIV::nat => bool))" |
5882 lemma FINITE_DIFF: "ALL (s::'q_41555::type => bool) t::'q_41555::type => bool. |
6271 lemma FINITE_DIFF: "ALL (s::'q_41555::type => bool) t::'q_41555::type => bool. |
5883 FINITE s --> FINITE (DIFF s t)" |
6272 FINITE s --> FINITE (DIFF s t)" |
5884 by (import hollight FINITE_DIFF) |
6273 by (import hollight FINITE_DIFF) |
5885 |
6274 |
5886 constdefs |
6275 constdefs |
5887 FINREC :: "('q_41615::type => 'q_41614::type => 'q_41614::type) |
6276 FINREC :: "('q_41615 => 'q_41614 => 'q_41614) |
5888 => 'q_41614::type |
6277 => 'q_41614 => ('q_41615 => bool) => 'q_41614 => nat => bool" |
5889 => ('q_41615::type => bool) => 'q_41614::type => nat => bool" |
|
5890 "FINREC == |
6278 "FINREC == |
5891 SOME FINREC::('q_41615::type => 'q_41614::type => 'q_41614::type) |
6279 SOME FINREC::('q_41615::type => 'q_41614::type => 'q_41614::type) |
5892 => 'q_41614::type |
6280 => 'q_41614::type |
5893 => ('q_41615::type => bool) |
6281 => ('q_41615::type => bool) |
5894 => 'q_41614::type => nat => bool. |
6282 => 'q_41614::type => nat => bool. |
5895 (ALL (f::'q_41615::type => 'q_41614::type => 'q_41614::type) |
6283 (ALL (f::'q_41615::type => 'q_41614::type => 'q_41614::type) |
5896 (s::'q_41615::type => bool) (a::'q_41614::type) b::'q_41614::type. |
6284 (s::'q_41615::type => bool) (a::'q_41614::type) b::'q_41614::type. |
5897 FINREC f b s a (0::nat) = (s = EMPTY & a = b)) & |
6285 FINREC f b s a 0 = (s = EMPTY & a = b)) & |
5898 (ALL (b::'q_41614::type) (s::'q_41615::type => bool) (n::nat) |
6286 (ALL (b::'q_41614::type) (s::'q_41615::type => bool) (n::nat) |
5899 (a::'q_41614::type) |
6287 (a::'q_41614::type) |
5900 f::'q_41615::type => 'q_41614::type => 'q_41614::type. |
6288 f::'q_41615::type => 'q_41614::type => 'q_41614::type. |
5901 FINREC f b s a (Suc n) = |
6289 FINREC f b s a (Suc n) = |
5902 (EX (x::'q_41615::type) c::'q_41614::type. |
6290 (EX (x::'q_41615::type) c::'q_41614::type. |
5907 => 'q_41614::type |
6295 => 'q_41614::type |
5908 => ('q_41615::type => bool) |
6296 => ('q_41615::type => bool) |
5909 => 'q_41614::type => nat => bool. |
6297 => 'q_41614::type => nat => bool. |
5910 (ALL (f::'q_41615::type => 'q_41614::type => 'q_41614::type) |
6298 (ALL (f::'q_41615::type => 'q_41614::type => 'q_41614::type) |
5911 (s::'q_41615::type => bool) (a::'q_41614::type) b::'q_41614::type. |
6299 (s::'q_41615::type => bool) (a::'q_41614::type) b::'q_41614::type. |
5912 FINREC f b s a (0::nat) = (s = EMPTY & a = b)) & |
6300 FINREC f b s a 0 = (s = EMPTY & a = b)) & |
5913 (ALL (b::'q_41614::type) (s::'q_41615::type => bool) (n::nat) |
6301 (ALL (b::'q_41614::type) (s::'q_41615::type => bool) (n::nat) |
5914 (a::'q_41614::type) |
6302 (a::'q_41614::type) |
5915 f::'q_41615::type => 'q_41614::type => 'q_41614::type. |
6303 f::'q_41615::type => 'q_41614::type => 'q_41614::type. |
5916 FINREC f b s a (Suc n) = |
6304 FINREC f b s a (Suc n) = |
5917 (EX (x::'q_41615::type) c::'q_41614::type. |
6305 (EX (x::'q_41615::type) c::'q_41614::type. |
5918 IN x s & FINREC f b (DELETE s x) c n & a = f x c)))" |
6306 IN x s & FINREC f b (DELETE s x) c n & a = f x c)))" |
5919 by (import hollight DEF_FINREC) |
6307 by (import hollight DEF_FINREC) |
5920 |
6308 |
5921 lemma FINREC_1_LEMMA: "ALL (x::'q_41660::type => 'q_41659::type => 'q_41659::type) |
6309 lemma FINREC_1_LEMMA: "ALL (x::'q_41660::type => 'q_41659::type => 'q_41659::type) |
5922 (xa::'q_41659::type) (xb::'q_41660::type => bool) xc::'q_41659::type. |
6310 (xa::'q_41659::type) (xb::'q_41660::type => bool) xc::'q_41659::type. |
5923 FINREC x xa xb xc (Suc (0::nat)) = |
6311 FINREC x xa xb xc (Suc 0) = |
5924 (EX xd::'q_41660::type. xb = INSERT xd EMPTY & xc = x xd xa)" |
6312 (EX xd::'q_41660::type. xb = INSERT xd EMPTY & xc = x xd xa)" |
5925 by (import hollight FINREC_1_LEMMA) |
6313 by (import hollight FINREC_1_LEMMA) |
5926 |
6314 |
5927 lemma FINREC_SUC_LEMMA: "ALL (f::'A::type => 'B::type => 'B::type) b::'B::type. |
6315 lemma FINREC_SUC_LEMMA: "ALL (f::'A::type => 'B::type => 'B::type) b::'B::type. |
5928 (ALL (x::'A::type) (y::'A::type) s::'B::type. |
6316 (ALL (x::'A::type) (y::'A::type) s::'B::type. |
5971 (ALL (x::'A::type) s::'A::type => bool. |
6359 (ALL (x::'A::type) s::'A::type => bool. |
5972 FINITE s --> g (INSERT x s) = COND (IN x s) (g s) (f x (g s))))" |
6360 FINITE s --> g (INSERT x s) = COND (IN x s) (g s) (f x (g s))))" |
5973 by (import hollight SET_RECURSION_LEMMA) |
6361 by (import hollight SET_RECURSION_LEMMA) |
5974 |
6362 |
5975 constdefs |
6363 constdefs |
5976 ITSET :: "('q_42316::type => 'q_42315::type => 'q_42315::type) |
6364 ITSET :: "('q_42316 => 'q_42315 => 'q_42315) |
5977 => ('q_42316::type => bool) => 'q_42315::type => 'q_42315::type" |
6365 => ('q_42316 => bool) => 'q_42315 => 'q_42315" |
5978 "ITSET == |
6366 "ITSET == |
5979 %(u::'q_42316::type => 'q_42315::type => 'q_42315::type) |
6367 %(u::'q_42316::type => 'q_42315::type => 'q_42315::type) |
5980 (ua::'q_42316::type => bool) ub::'q_42315::type. |
6368 (ua::'q_42316::type => bool) ub::'q_42315::type. |
5981 (SOME g::('q_42316::type => bool) => 'q_42315::type. |
6369 (SOME g::('q_42316::type => bool) => 'q_42315::type. |
5982 g EMPTY = ub & |
6370 g EMPTY = ub & |
6043 (%u::'A::type. |
6431 (%u::'A::type. |
6044 EX x::'A::type. SETSPEC u (IN x s & (P::'A::type => bool) x) x))" |
6432 EX x::'A::type. SETSPEC u (IN x s & (P::'A::type => bool) x) x))" |
6045 by (import hollight FINITE_RESTRICT) |
6433 by (import hollight FINITE_RESTRICT) |
6046 |
6434 |
6047 constdefs |
6435 constdefs |
6048 CARD :: "('q_42709::type => bool) => nat" |
6436 CARD :: "('q_42709 => bool) => nat" |
6049 "CARD == |
6437 "CARD == %u::'q_42709::type => bool. ITSET (%x::'q_42709::type. Suc) u 0" |
6050 %u::'q_42709::type => bool. ITSET (%x::'q_42709::type. Suc) u (0::nat)" |
6438 |
6051 |
6439 lemma DEF_CARD: "CARD = (%u::'q_42709::type => bool. ITSET (%x::'q_42709::type. Suc) u 0)" |
6052 lemma DEF_CARD: "CARD = |
|
6053 (%u::'q_42709::type => bool. ITSET (%x::'q_42709::type. Suc) u (0::nat))" |
|
6054 by (import hollight DEF_CARD) |
6440 by (import hollight DEF_CARD) |
6055 |
6441 |
6056 lemma CARD_CLAUSES: "(op &::bool => bool => bool) |
6442 lemma CARD_CLAUSES: "(op &::bool => bool => bool) |
6057 ((op =::nat => nat => bool) |
6443 ((op =::nat => nat => bool) |
6058 ((CARD::('A::type => bool) => nat) (EMPTY::'A::type => bool)) (0::nat)) |
6444 ((CARD::('A::type => bool) => nat) (EMPTY::'A::type => bool)) (0::nat)) |
6079 CARD (hollight.UNION x xa) = CARD x + CARD xa" |
6465 CARD (hollight.UNION x xa) = CARD x + CARD xa" |
6080 by (import hollight CARD_UNION) |
6466 by (import hollight CARD_UNION) |
6081 |
6467 |
6082 lemma CARD_DELETE: "ALL (x::'A::type) s::'A::type => bool. |
6468 lemma CARD_DELETE: "ALL (x::'A::type) s::'A::type => bool. |
6083 FINITE s --> |
6469 FINITE s --> |
6084 CARD (DELETE s x) = |
6470 CARD (DELETE s x) = COND (IN x s) (CARD s - NUMERAL_BIT1 0) (CARD s)" |
6085 COND (IN x s) (CARD s - NUMERAL_BIT1 (0::nat)) (CARD s)" |
|
6086 by (import hollight CARD_DELETE) |
6471 by (import hollight CARD_DELETE) |
6087 |
6472 |
6088 lemma CARD_UNION_EQ: "ALL (s::'q_42954::type => bool) (t::'q_42954::type => bool) |
6473 lemma CARD_UNION_EQ: "ALL (s::'q_42954::type => bool) (t::'q_42954::type => bool) |
6089 u::'q_42954::type => bool. |
6474 u::'q_42954::type => bool. |
6090 FINITE u & hollight.INTER s t = EMPTY & hollight.UNION s t = u --> |
6475 FINITE u & hollight.INTER s t = EMPTY & hollight.UNION s t = u --> |
6091 CARD s + CARD t = CARD u" |
6476 CARD s + CARD t = CARD u" |
6092 by (import hollight CARD_UNION_EQ) |
6477 by (import hollight CARD_UNION_EQ) |
6093 |
6478 |
6094 constdefs |
6479 constdefs |
6095 HAS_SIZE :: "('q_42990::type => bool) => nat => bool" |
6480 HAS_SIZE :: "('q_42990 => bool) => nat => bool" |
6096 "HAS_SIZE == %(u::'q_42990::type => bool) ua::nat. FINITE u & CARD u = ua" |
6481 "HAS_SIZE == %(u::'q_42990::type => bool) ua::nat. FINITE u & CARD u = ua" |
6097 |
6482 |
6098 lemma DEF_HAS_SIZE: "HAS_SIZE = (%(u::'q_42990::type => bool) ua::nat. FINITE u & CARD u = ua)" |
6483 lemma DEF_HAS_SIZE: "HAS_SIZE = (%(u::'q_42990::type => bool) ua::nat. FINITE u & CARD u = ua)" |
6099 by (import hollight DEF_HAS_SIZE) |
6484 by (import hollight DEF_HAS_SIZE) |
6100 |
6485 |
6101 lemma HAS_SIZE_CARD: "ALL (x::'q_43009::type => bool) xa::nat. HAS_SIZE x xa --> CARD x = xa" |
6486 lemma HAS_SIZE_CARD: "ALL (x::'q_43009::type => bool) xa::nat. HAS_SIZE x xa --> CARD x = xa" |
6102 by (import hollight HAS_SIZE_CARD) |
6487 by (import hollight HAS_SIZE_CARD) |
6103 |
6488 |
6104 lemma HAS_SIZE_0: "ALL (s::'A::type => bool) n::'q_43025::type. |
6489 lemma HAS_SIZE_0: "ALL (s::'A::type => bool) n::'q_43025::type. HAS_SIZE s 0 = (s = EMPTY)" |
6105 HAS_SIZE s (0::nat) = (s = EMPTY)" |
|
6106 by (import hollight HAS_SIZE_0) |
6490 by (import hollight HAS_SIZE_0) |
6107 |
6491 |
6108 lemma HAS_SIZE_SUC: "ALL (s::'A::type => bool) n::nat. |
6492 lemma HAS_SIZE_SUC: "ALL (s::'A::type => bool) n::nat. |
6109 HAS_SIZE s (Suc n) = |
6493 HAS_SIZE s (Suc n) = |
6110 (s ~= EMPTY & (ALL x::'A::type. IN x s --> HAS_SIZE (DELETE s x) n))" |
6494 (s ~= EMPTY & (ALL x::'A::type. IN x s --> HAS_SIZE (DELETE s x) n))" |
6128 (%u::'B::type => bool. |
6512 (%u::'B::type => bool. |
6129 EX xb::'A::type. SETSPEC u (IN xb x) (xa xb)))) |
6513 EX xb::'A::type. SETSPEC u (IN xb x) (xa xb)))) |
6130 (xb * xc)" |
6514 (xb * xc)" |
6131 by (import hollight HAS_SIZE_UNIONS) |
6515 by (import hollight HAS_SIZE_UNIONS) |
6132 |
6516 |
6133 lemma HAS_SIZE_CLAUSES: "HAS_SIZE (s::'q_43395::type => bool) (0::nat) = (s = EMPTY) & |
6517 lemma HAS_SIZE_CLAUSES: "HAS_SIZE (s::'q_43395::type => bool) 0 = (s = EMPTY) & |
6134 HAS_SIZE s (Suc (n::nat)) = |
6518 HAS_SIZE s (Suc (n::nat)) = |
6135 (EX (a::'q_43395::type) t::'q_43395::type => bool. |
6519 (EX (a::'q_43395::type) t::'q_43395::type => bool. |
6136 HAS_SIZE t n & ~ IN a t & s = INSERT a t)" |
6520 HAS_SIZE t n & ~ IN a t & s = INSERT a t)" |
6137 by (import hollight HAS_SIZE_CLAUSES) |
6521 by (import hollight HAS_SIZE_CLAUSES) |
6138 |
6522 |
6146 |
6530 |
6147 lemma CARD_SUBSET_LE: "ALL (a::'A::type => bool) b::'A::type => bool. |
6531 lemma CARD_SUBSET_LE: "ALL (a::'A::type => bool) b::'A::type => bool. |
6148 FINITE b & SUBSET a b & <= (CARD b) (CARD a) --> a = b" |
6532 FINITE b & SUBSET a b & <= (CARD b) (CARD a) --> a = b" |
6149 by (import hollight CARD_SUBSET_LE) |
6533 by (import hollight CARD_SUBSET_LE) |
6150 |
6534 |
6151 lemma CARD_EQ_0: "ALL s::'q_43711::type => bool. |
6535 lemma CARD_EQ_0: "ALL s::'q_43711::type => bool. FINITE s --> (CARD s = 0) = (s = EMPTY)" |
6152 FINITE s --> (CARD s = (0::nat)) = (s = EMPTY)" |
|
6153 by (import hollight CARD_EQ_0) |
6536 by (import hollight CARD_EQ_0) |
6154 |
6537 |
6155 lemma CARD_PSUBSET: "ALL (a::'A::type => bool) b::'A::type => bool. |
6538 lemma CARD_PSUBSET: "ALL (a::'A::type => bool) b::'A::type => bool. |
6156 PSUBSET a b & FINITE b --> < (CARD a) (CARD b)" |
6539 PSUBSET a b & FINITE b --> < (CARD a) (CARD b)" |
6157 by (import hollight CARD_PSUBSET) |
6540 by (import hollight CARD_PSUBSET) |
6291 HAS_SIZE s n --> |
6674 HAS_SIZE s n --> |
6292 HAS_SIZE |
6675 HAS_SIZE |
6293 (GSPEC |
6676 (GSPEC |
6294 (%u::'A::type => bool. |
6677 (%u::'A::type => bool. |
6295 EX t::'A::type => bool. SETSPEC u (SUBSET t s) t)) |
6678 EX t::'A::type => bool. SETSPEC u (SUBSET t s) t)) |
6296 (EXP (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) n)" |
6679 (EXP (NUMERAL_BIT0 (NUMERAL_BIT1 0)) n)" |
6297 by (import hollight HAS_SIZE_POWERSET) |
6680 by (import hollight HAS_SIZE_POWERSET) |
6298 |
6681 |
6299 lemma CARD_POWERSET: "ALL s::'A::type => bool. |
6682 lemma CARD_POWERSET: "ALL s::'A::type => bool. |
6300 FINITE s --> |
6683 FINITE s --> |
6301 CARD |
6684 CARD |
6302 (GSPEC |
6685 (GSPEC |
6303 (%u::'A::type => bool. |
6686 (%u::'A::type => bool. |
6304 EX t::'A::type => bool. SETSPEC u (SUBSET t s) t)) = |
6687 EX t::'A::type => bool. SETSPEC u (SUBSET t s) t)) = |
6305 EXP (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) (CARD s)" |
6688 EXP (NUMERAL_BIT0 (NUMERAL_BIT1 0)) (CARD s)" |
6306 by (import hollight CARD_POWERSET) |
6689 by (import hollight CARD_POWERSET) |
6307 |
6690 |
6308 lemma FINITE_POWERSET: "ALL s::'A::type => bool. |
6691 lemma FINITE_POWERSET: "ALL s::'A::type => bool. |
6309 FINITE s --> |
6692 FINITE s --> |
6310 FINITE |
6693 FINITE |
6334 lemma FINITE_NUMSEG_LT: "ALL x::nat. FINITE (GSPEC (%u::nat. EX m::nat. SETSPEC u (< m x) m))" |
6717 lemma FINITE_NUMSEG_LT: "ALL x::nat. FINITE (GSPEC (%u::nat. EX m::nat. SETSPEC u (< m x) m))" |
6335 by (import hollight FINITE_NUMSEG_LT) |
6718 by (import hollight FINITE_NUMSEG_LT) |
6336 |
6719 |
6337 lemma HAS_SIZE_NUMSEG_LE: "ALL x::nat. |
6720 lemma HAS_SIZE_NUMSEG_LE: "ALL x::nat. |
6338 HAS_SIZE (GSPEC (%xa::nat. EX xb::nat. SETSPEC xa (<= xb x) xb)) |
6721 HAS_SIZE (GSPEC (%xa::nat. EX xb::nat. SETSPEC xa (<= xb x) xb)) |
6339 (x + NUMERAL_BIT1 (0::nat))" |
6722 (x + NUMERAL_BIT1 0)" |
6340 by (import hollight HAS_SIZE_NUMSEG_LE) |
6723 by (import hollight HAS_SIZE_NUMSEG_LE) |
6341 |
6724 |
6342 lemma FINITE_NUMSEG_LE: "ALL x::nat. FINITE (GSPEC (%u::nat. EX m::nat. SETSPEC u (<= m x) m))" |
6725 lemma FINITE_NUMSEG_LE: "ALL x::nat. FINITE (GSPEC (%u::nat. EX m::nat. SETSPEC u (<= m x) m))" |
6343 by (import hollight FINITE_NUMSEG_LE) |
6726 by (import hollight FINITE_NUMSEG_LE) |
6344 |
6727 |
6345 lemma CARD_NUMSEG_LE: "ALL x::nat. |
6728 lemma CARD_NUMSEG_LE: "ALL x::nat. |
6346 CARD (GSPEC (%u::nat. EX m::nat. SETSPEC u (<= m x) m)) = |
6729 CARD (GSPEC (%u::nat. EX m::nat. SETSPEC u (<= m x) m)) = |
6347 x + NUMERAL_BIT1 (0::nat)" |
6730 x + NUMERAL_BIT1 0" |
6348 by (import hollight CARD_NUMSEG_LE) |
6731 by (import hollight CARD_NUMSEG_LE) |
6349 |
6732 |
6350 lemma num_FINITE: "ALL s::nat => bool. FINITE s = (EX a::nat. ALL x::nat. IN x s --> <= x a)" |
6733 lemma num_FINITE: "ALL s::nat => bool. FINITE s = (EX a::nat. ALL x::nat. IN x s --> <= x a)" |
6351 by (import hollight num_FINITE) |
6734 by (import hollight num_FINITE) |
6352 |
6735 |
6362 (ALL m::nat. < m n --> IN (f m) x) & |
6745 (ALL m::nat. < m n --> IN (f m) x) & |
6363 (ALL xa::'A::type. IN xa x --> (EX! m::nat. < m n & f m = xa)))" |
6746 (ALL xa::'A::type. IN xa x --> (EX! m::nat. < m n & f m = xa)))" |
6364 by (import hollight HAS_SIZE_INDEX) |
6747 by (import hollight HAS_SIZE_INDEX) |
6365 |
6748 |
6366 constdefs |
6749 constdefs |
6367 set_of_list :: "'q_45759::type hollight.list => 'q_45759::type => bool" |
6750 set_of_list :: "'q_45759 hollight.list => 'q_45759 => bool" |
6368 "set_of_list == |
6751 "set_of_list == |
6369 SOME set_of_list::'q_45759::type hollight.list => 'q_45759::type => bool. |
6752 SOME set_of_list::'q_45759::type hollight.list => 'q_45759::type => bool. |
6370 set_of_list NIL = EMPTY & |
6753 set_of_list NIL = EMPTY & |
6371 (ALL (h::'q_45759::type) t::'q_45759::type hollight.list. |
6754 (ALL (h::'q_45759::type) t::'q_45759::type hollight.list. |
6372 set_of_list (CONS h t) = INSERT h (set_of_list t))" |
6755 set_of_list (CONS h t) = INSERT h (set_of_list t))" |
6377 (ALL (h::'q_45759::type) t::'q_45759::type hollight.list. |
6760 (ALL (h::'q_45759::type) t::'q_45759::type hollight.list. |
6378 set_of_list (CONS h t) = INSERT h (set_of_list t)))" |
6761 set_of_list (CONS h t) = INSERT h (set_of_list t)))" |
6379 by (import hollight DEF_set_of_list) |
6762 by (import hollight DEF_set_of_list) |
6380 |
6763 |
6381 constdefs |
6764 constdefs |
6382 list_of_set :: "('q_45777::type => bool) => 'q_45777::type hollight.list" |
6765 list_of_set :: "('q_45777 => bool) => 'q_45777 hollight.list" |
6383 "list_of_set == |
6766 "list_of_set == |
6384 %u::'q_45777::type => bool. |
6767 %u::'q_45777::type => bool. |
6385 SOME l::'q_45777::type hollight.list. |
6768 SOME l::'q_45777::type hollight.list. |
6386 set_of_list l = u & LENGTH l = CARD u" |
6769 set_of_list l = u & LENGTH l = CARD u" |
6387 |
6770 |
6417 set_of_list (APPEND x xa) = |
6800 set_of_list (APPEND x xa) = |
6418 hollight.UNION (set_of_list x) (set_of_list xa)" |
6801 hollight.UNION (set_of_list x) (set_of_list xa)" |
6419 by (import hollight SET_OF_LIST_APPEND) |
6802 by (import hollight SET_OF_LIST_APPEND) |
6420 |
6803 |
6421 constdefs |
6804 constdefs |
6422 pairwise :: "('q_45989::type => 'q_45989::type => bool) |
6805 pairwise :: "('q_45989 => 'q_45989 => bool) => ('q_45989 => bool) => bool" |
6423 => ('q_45989::type => bool) => bool" |
|
6424 "pairwise == |
6806 "pairwise == |
6425 %(u::'q_45989::type => 'q_45989::type => bool) ua::'q_45989::type => bool. |
6807 %(u::'q_45989::type => 'q_45989::type => bool) ua::'q_45989::type => bool. |
6426 ALL (x::'q_45989::type) y::'q_45989::type. |
6808 ALL (x::'q_45989::type) y::'q_45989::type. |
6427 IN x ua & IN y ua & x ~= y --> u x y" |
6809 IN x ua & IN y ua & x ~= y --> u x y" |
6428 |
6810 |
6431 ALL (x::'q_45989::type) y::'q_45989::type. |
6813 ALL (x::'q_45989::type) y::'q_45989::type. |
6432 IN x ua & IN y ua & x ~= y --> u x y)" |
6814 IN x ua & IN y ua & x ~= y --> u x y)" |
6433 by (import hollight DEF_pairwise) |
6815 by (import hollight DEF_pairwise) |
6434 |
6816 |
6435 constdefs |
6817 constdefs |
6436 PAIRWISE :: "('q_46011::type => 'q_46011::type => bool) |
6818 PAIRWISE :: "('q_46011 => 'q_46011 => bool) => 'q_46011 hollight.list => bool" |
6437 => 'q_46011::type hollight.list => bool" |
|
6438 "PAIRWISE == |
6819 "PAIRWISE == |
6439 SOME PAIRWISE::('q_46011::type => 'q_46011::type => bool) |
6820 SOME PAIRWISE::('q_46011::type => 'q_46011::type => bool) |
6440 => 'q_46011::type hollight.list => bool. |
6821 => 'q_46011::type hollight.list => bool. |
6441 (ALL r::'q_46011::type => 'q_46011::type => bool. |
6822 (ALL r::'q_46011::type => 'q_46011::type => bool. |
6442 PAIRWISE r NIL = True) & |
6823 PAIRWISE r NIL = True) & |
6475 |
6856 |
6476 syntax |
6857 syntax |
6477 mk_finite_image :: _ |
6858 mk_finite_image :: _ |
6478 |
6859 |
6479 lemmas "TYDEF_finite_image_@intern" = typedef_hol2hollight |
6860 lemmas "TYDEF_finite_image_@intern" = typedef_hol2hollight |
6480 [where a="a :: 'A::type finite_image" and r=r , |
6861 [where a="a :: 'A finite_image" and r=r , |
6481 OF type_definition_finite_image] |
6862 OF type_definition_finite_image] |
6482 |
6863 |
6483 lemma FINITE_IMAGE_IMAGE: "(op =::('A::type finite_image => bool) |
6864 lemma FINITE_IMAGE_IMAGE: "(op =::('A::type finite_image => bool) |
6484 => ('A::type finite_image => bool) => bool) |
6865 => ('A::type finite_image => bool) => bool) |
6485 (hollight.UNIV::'A::type finite_image => bool) |
6866 (hollight.UNIV::'A::type finite_image => bool) |
6495 ((Eps::('A::type => bool) => 'A::type) (%z::'A::type. True::bool)) |
6876 ((Eps::('A::type => bool) => 'A::type) (%z::'A::type. True::bool)) |
6496 (EMPTY::'A::type => bool))))" |
6877 (EMPTY::'A::type => bool))))" |
6497 by (import hollight FINITE_IMAGE_IMAGE) |
6878 by (import hollight FINITE_IMAGE_IMAGE) |
6498 |
6879 |
6499 constdefs |
6880 constdefs |
6500 dimindex :: "('A::type => bool) => nat" |
6881 dimindex :: "('A => bool) => nat" |
6501 "(op ==::(('A::type => bool) => nat) => (('A::type => bool) => nat) => prop) |
6882 "(op ==::(('A::type => bool) => nat) => (('A::type => bool) => nat) => prop) |
6502 (dimindex::('A::type => bool) => nat) |
6883 (dimindex::('A::type => bool) => nat) |
6503 (%u::'A::type => bool. |
6884 (%u::'A::type => bool. |
6504 (COND::bool => nat => nat => nat) |
6885 (COND::bool => nat => nat => nat) |
6505 ((FINITE::('A::type => bool) => bool) |
6886 ((FINITE::('A::type => bool) => bool) |
6534 |
6915 |
6535 lemma FINITE_FINITE_IMAGE: "(FINITE::('A::type finite_image => bool) => bool) |
6916 lemma FINITE_FINITE_IMAGE: "(FINITE::('A::type finite_image => bool) => bool) |
6536 (hollight.UNIV::'A::type finite_image => bool)" |
6917 (hollight.UNIV::'A::type finite_image => bool)" |
6537 by (import hollight FINITE_FINITE_IMAGE) |
6918 by (import hollight FINITE_FINITE_IMAGE) |
6538 |
6919 |
6539 lemma DIMINDEX_NONZERO: "ALL s::'A::type => bool. dimindex s ~= (0::nat)" |
6920 lemma DIMINDEX_NONZERO: "ALL s::'A::type => bool. dimindex s ~= 0" |
6540 by (import hollight DIMINDEX_NONZERO) |
6921 by (import hollight DIMINDEX_NONZERO) |
6541 |
6922 |
6542 lemma DIMINDEX_GE_1: "ALL x::'A::type => bool. <= (NUMERAL_BIT1 (0::nat)) (dimindex x)" |
6923 lemma DIMINDEX_GE_1: "ALL x::'A::type => bool. <= (NUMERAL_BIT1 0) (dimindex x)" |
6543 by (import hollight DIMINDEX_GE_1) |
6924 by (import hollight DIMINDEX_GE_1) |
6544 |
6925 |
6545 lemma DIMINDEX_FINITE_IMAGE: "ALL (s::'A::type finite_image => bool) t::'A::type => bool. |
6926 lemma DIMINDEX_FINITE_IMAGE: "ALL (s::'A::type finite_image => bool) t::'A::type => bool. |
6546 dimindex s = dimindex t" |
6927 dimindex s = dimindex t" |
6547 by (import hollight DIMINDEX_FINITE_IMAGE) |
6928 by (import hollight DIMINDEX_FINITE_IMAGE) |
6548 |
6929 |
6549 constdefs |
6930 constdefs |
6550 finite_index :: "nat => 'A::type" |
6931 finite_index :: "nat => 'A" |
6551 "(op ==::(nat => 'A::type) => (nat => 'A::type) => prop) |
6932 "(op ==::(nat => 'A::type) => (nat => 'A::type) => prop) |
6552 (finite_index::nat => 'A::type) |
6933 (finite_index::nat => 'A::type) |
6553 ((Eps::((nat => 'A::type) => bool) => nat => 'A::type) |
6934 ((Eps::((nat => 'A::type) => bool) => nat => 'A::type) |
6554 (%f::nat => 'A::type. |
6935 (%f::nat => 'A::type. |
6555 (All::('A::type => bool) => bool) |
6936 (All::('A::type => bool) => bool) |
6667 |
7048 |
6668 syntax |
7049 syntax |
6669 mk_cart :: _ |
7050 mk_cart :: _ |
6670 |
7051 |
6671 lemmas "TYDEF_cart_@intern" = typedef_hol2hollight |
7052 lemmas "TYDEF_cart_@intern" = typedef_hol2hollight |
6672 [where a="a :: ('A::type, 'B::type) cart" and r=r , |
7053 [where a="a :: ('A, 'B) cart" and r=r , |
6673 OF type_definition_cart] |
7054 OF type_definition_cart] |
6674 |
7055 |
6675 consts |
7056 consts |
6676 "$" :: "('q_46418::type, 'q_46425::type) cart => nat => 'q_46418::type" ("$") |
7057 "$" :: "('q_46418, 'q_46425) cart => nat => 'q_46418" ("$") |
6677 |
7058 |
6678 defs |
7059 defs |
6679 "$_def": "$ == |
7060 "$_def": "$ == |
6680 %(u::('q_46418::type, 'q_46425::type) cart) ua::nat. |
7061 %(u::('q_46418::type, 'q_46425::type) cart) ua::nat. |
6681 dest_cart u (finite_index ua)" |
7062 dest_cart u (finite_index ua)" |
6707 (($::('A::type, 'B::type) cart => nat => 'A::type) y |
7088 (($::('A::type, 'B::type) cart => nat => 'A::type) y |
6708 xa))))))" |
7089 xa))))))" |
6709 by (import hollight CART_EQ) |
7090 by (import hollight CART_EQ) |
6710 |
7091 |
6711 constdefs |
7092 constdefs |
6712 lambda :: "(nat => 'A::type) => ('A::type, 'B::type) cart" |
7093 lambda :: "(nat => 'A) => ('A, 'B) cart" |
6713 "(op ==::((nat => 'A::type) => ('A::type, 'B::type) cart) |
7094 "(op ==::((nat => 'A::type) => ('A::type, 'B::type) cart) |
6714 => ((nat => 'A::type) => ('A::type, 'B::type) cart) => prop) |
7095 => ((nat => 'A::type) => ('A::type, 'B::type) cart) => prop) |
6715 (lambda::(nat => 'A::type) => ('A::type, 'B::type) cart) |
7096 (lambda::(nat => 'A::type) => ('A::type, 'B::type) cart) |
6716 (%u::nat => 'A::type. |
7097 (%u::nat => 'A::type. |
6717 (Eps::(('A::type, 'B::type) cart => bool) => ('A::type, 'B::type) cart) |
7098 (Eps::(('A::type, 'B::type) cart => bool) => ('A::type, 'B::type) cart) |
6804 |
7185 |
6805 syntax |
7186 syntax |
6806 mk_finite_sum :: _ |
7187 mk_finite_sum :: _ |
6807 |
7188 |
6808 lemmas "TYDEF_finite_sum_@intern" = typedef_hol2hollight |
7189 lemmas "TYDEF_finite_sum_@intern" = typedef_hol2hollight |
6809 [where a="a :: ('A::type, 'B::type) finite_sum" and r=r , |
7190 [where a="a :: ('A, 'B) finite_sum" and r=r , |
6810 OF type_definition_finite_sum] |
7191 OF type_definition_finite_sum] |
6811 |
7192 |
6812 constdefs |
7193 constdefs |
6813 pastecart :: "('A::type, 'M::type) cart |
7194 pastecart :: "('A, 'M) cart => ('A, 'N) cart => ('A, ('M, 'N) finite_sum) cart" |
6814 => ('A::type, 'N::type) cart |
|
6815 => ('A::type, ('M::type, 'N::type) finite_sum) cart" |
|
6816 "(op ==::(('A::type, 'M::type) cart |
7195 "(op ==::(('A::type, 'M::type) cart |
6817 => ('A::type, 'N::type) cart |
7196 => ('A::type, 'N::type) cart |
6818 => ('A::type, ('M::type, 'N::type) finite_sum) cart) |
7197 => ('A::type, ('M::type, 'N::type) finite_sum) cart) |
6819 => (('A::type, 'M::type) cart |
7198 => (('A::type, 'M::type) cart |
6820 => ('A::type, 'N::type) cart |
7199 => ('A::type, 'N::type) cart |
6861 ((dimindex::('M::type => bool) => nat) |
7240 ((dimindex::('M::type => bool) => nat) |
6862 (hollight.UNIV::'M::type => bool))))))" |
7241 (hollight.UNIV::'M::type => bool))))))" |
6863 by (import hollight DEF_pastecart) |
7242 by (import hollight DEF_pastecart) |
6864 |
7243 |
6865 constdefs |
7244 constdefs |
6866 fstcart :: "('A::type, ('M::type, 'N::type) finite_sum) cart |
7245 fstcart :: "('A, ('M, 'N) finite_sum) cart => ('A, 'M) cart" |
6867 => ('A::type, 'M::type) cart" |
|
6868 "fstcart == |
7246 "fstcart == |
6869 %u::('A::type, ('M::type, 'N::type) finite_sum) cart. lambda ($ u)" |
7247 %u::('A::type, ('M::type, 'N::type) finite_sum) cart. lambda ($ u)" |
6870 |
7248 |
6871 lemma DEF_fstcart: "fstcart = |
7249 lemma DEF_fstcart: "fstcart = |
6872 (%u::('A::type, ('M::type, 'N::type) finite_sum) cart. lambda ($ u))" |
7250 (%u::('A::type, ('M::type, 'N::type) finite_sum) cart. lambda ($ u))" |
6873 by (import hollight DEF_fstcart) |
7251 by (import hollight DEF_fstcart) |
6874 |
7252 |
6875 constdefs |
7253 constdefs |
6876 sndcart :: "('A::type, ('M::type, 'N::type) finite_sum) cart |
7254 sndcart :: "('A, ('M, 'N) finite_sum) cart => ('A, 'N) cart" |
6877 => ('A::type, 'N::type) cart" |
|
6878 "(op ==::(('A::type, ('M::type, 'N::type) finite_sum) cart |
7255 "(op ==::(('A::type, ('M::type, 'N::type) finite_sum) cart |
6879 => ('A::type, 'N::type) cart) |
7256 => ('A::type, 'N::type) cart) |
6880 => (('A::type, ('M::type, 'N::type) finite_sum) cart |
7257 => (('A::type, ('M::type, 'N::type) finite_sum) cart |
6881 => ('A::type, 'N::type) cart) |
7258 => ('A::type, 'N::type) cart) |
6882 => prop) |
7259 => prop) |
7055 lemma FINITE_NUMSEG: "ALL (m::nat) n::nat. FINITE (dotdot m n)" |
7432 lemma FINITE_NUMSEG: "ALL (m::nat) n::nat. FINITE (dotdot m n)" |
7056 by (import hollight FINITE_NUMSEG) |
7433 by (import hollight FINITE_NUMSEG) |
7057 |
7434 |
7058 lemma NUMSEG_COMBINE_R: "ALL (x::'q_47957::type) (p::nat) m::nat. |
7435 lemma NUMSEG_COMBINE_R: "ALL (x::'q_47957::type) (p::nat) m::nat. |
7059 <= m p & <= p (n::nat) --> |
7436 <= m p & <= p (n::nat) --> |
7060 hollight.UNION (dotdot m p) (dotdot (p + NUMERAL_BIT1 (0::nat)) n) = |
7437 hollight.UNION (dotdot m p) (dotdot (p + NUMERAL_BIT1 0) n) = dotdot m n" |
7061 dotdot m n" |
|
7062 by (import hollight NUMSEG_COMBINE_R) |
7438 by (import hollight NUMSEG_COMBINE_R) |
7063 |
7439 |
7064 lemma NUMSEG_COMBINE_L: "ALL (x::'q_47995::type) (p::nat) m::nat. |
7440 lemma NUMSEG_COMBINE_L: "ALL (x::'q_47995::type) (p::nat) m::nat. |
7065 <= m p & <= p (n::nat) --> |
7441 <= m p & <= p (n::nat) --> |
7066 hollight.UNION (dotdot m (p - NUMERAL_BIT1 (0::nat))) (dotdot p n) = |
7442 hollight.UNION (dotdot m (p - NUMERAL_BIT1 0)) (dotdot p n) = dotdot m n" |
7067 dotdot m n" |
|
7068 by (import hollight NUMSEG_COMBINE_L) |
7443 by (import hollight NUMSEG_COMBINE_L) |
7069 |
7444 |
7070 lemma NUMSEG_LREC: "ALL (x::nat) xa::nat. |
7445 lemma NUMSEG_LREC: "ALL (x::nat) xa::nat. |
7071 <= x xa --> |
7446 <= x xa --> INSERT x (dotdot (x + NUMERAL_BIT1 0) xa) = dotdot x xa" |
7072 INSERT x (dotdot (x + NUMERAL_BIT1 (0::nat)) xa) = dotdot x xa" |
|
7073 by (import hollight NUMSEG_LREC) |
7447 by (import hollight NUMSEG_LREC) |
7074 |
7448 |
7075 lemma NUMSEG_RREC: "ALL (x::nat) xa::nat. |
7449 lemma NUMSEG_RREC: "ALL (x::nat) xa::nat. |
7076 <= x xa --> |
7450 <= x xa --> INSERT xa (dotdot x (xa - NUMERAL_BIT1 0)) = dotdot x xa" |
7077 INSERT xa (dotdot x (xa - NUMERAL_BIT1 (0::nat))) = dotdot x xa" |
|
7078 by (import hollight NUMSEG_RREC) |
7451 by (import hollight NUMSEG_RREC) |
7079 |
7452 |
7080 lemma NUMSEG_REC: "ALL (x::nat) xa::nat. |
7453 lemma NUMSEG_REC: "ALL (x::nat) xa::nat. |
7081 <= x (Suc xa) --> dotdot x (Suc xa) = INSERT (Suc xa) (dotdot x xa)" |
7454 <= x (Suc xa) --> dotdot x (Suc xa) = INSERT (Suc xa) (dotdot x xa)" |
7082 by (import hollight NUMSEG_REC) |
7455 by (import hollight NUMSEG_REC) |
7088 by (import hollight NUMSEG_SING) |
7461 by (import hollight NUMSEG_SING) |
7089 |
7462 |
7090 lemma NUMSEG_EMPTY: "ALL (x::nat) xa::nat. (dotdot x xa = EMPTY) = < xa x" |
7463 lemma NUMSEG_EMPTY: "ALL (x::nat) xa::nat. (dotdot x xa = EMPTY) = < xa x" |
7091 by (import hollight NUMSEG_EMPTY) |
7464 by (import hollight NUMSEG_EMPTY) |
7092 |
7465 |
7093 lemma CARD_NUMSEG_LEMMA: "ALL (m::nat) d::nat. CARD (dotdot m (m + d)) = d + NUMERAL_BIT1 (0::nat)" |
7466 lemma CARD_NUMSEG_LEMMA: "ALL (m::nat) d::nat. CARD (dotdot m (m + d)) = d + NUMERAL_BIT1 0" |
7094 by (import hollight CARD_NUMSEG_LEMMA) |
7467 by (import hollight CARD_NUMSEG_LEMMA) |
7095 |
7468 |
7096 lemma CARD_NUMSEG: "ALL (m::nat) n::nat. CARD (dotdot m n) = n + NUMERAL_BIT1 (0::nat) - m" |
7469 lemma CARD_NUMSEG: "ALL (m::nat) n::nat. CARD (dotdot m n) = n + NUMERAL_BIT1 0 - m" |
7097 by (import hollight CARD_NUMSEG) |
7470 by (import hollight CARD_NUMSEG) |
7098 |
7471 |
7099 lemma HAS_SIZE_NUMSEG: "ALL (x::nat) xa::nat. |
7472 lemma HAS_SIZE_NUMSEG: "ALL (x::nat) xa::nat. HAS_SIZE (dotdot x xa) (xa + NUMERAL_BIT1 0 - x)" |
7100 HAS_SIZE (dotdot x xa) (xa + NUMERAL_BIT1 (0::nat) - x)" |
|
7101 by (import hollight HAS_SIZE_NUMSEG) |
7473 by (import hollight HAS_SIZE_NUMSEG) |
7102 |
7474 |
7103 lemma CARD_NUMSEG_1: "ALL x::nat. CARD (dotdot (NUMERAL_BIT1 (0::nat)) x) = x" |
7475 lemma CARD_NUMSEG_1: "ALL x::nat. CARD (dotdot (NUMERAL_BIT1 0) x) = x" |
7104 by (import hollight CARD_NUMSEG_1) |
7476 by (import hollight CARD_NUMSEG_1) |
7105 |
7477 |
7106 lemma HAS_SIZE_NUMSEG_1: "ALL x::nat. HAS_SIZE (dotdot (NUMERAL_BIT1 (0::nat)) x) x" |
7478 lemma HAS_SIZE_NUMSEG_1: "ALL x::nat. HAS_SIZE (dotdot (NUMERAL_BIT1 0) x) x" |
7107 by (import hollight HAS_SIZE_NUMSEG_1) |
7479 by (import hollight HAS_SIZE_NUMSEG_1) |
7108 |
7480 |
7109 lemma NUMSEG_CLAUSES: "(ALL m::nat. |
7481 lemma NUMSEG_CLAUSES: "(ALL m::nat. dotdot m 0 = COND (m = 0) (INSERT 0 EMPTY) EMPTY) & |
7110 dotdot m (0::nat) = COND (m = (0::nat)) (INSERT (0::nat) EMPTY) EMPTY) & |
|
7111 (ALL (m::nat) n::nat. |
7482 (ALL (m::nat) n::nat. |
7112 dotdot m (Suc n) = |
7483 dotdot m (Suc n) = |
7113 COND (<= m (Suc n)) (INSERT (Suc n) (dotdot m n)) (dotdot m n))" |
7484 COND (<= m (Suc n)) (INSERT (Suc n) (dotdot m n)) (dotdot m n))" |
7114 by (import hollight NUMSEG_CLAUSES) |
7485 by (import hollight NUMSEG_CLAUSES) |
7115 |
7486 |
7116 lemma FINITE_INDEX_NUMSEG: "ALL s::'A::type => bool. |
7487 lemma FINITE_INDEX_NUMSEG: "ALL s::'A::type => bool. |
7117 FINITE s = |
7488 FINITE s = |
7118 (EX f::nat => 'A::type. |
7489 (EX f::nat => 'A::type. |
7119 (ALL (i::nat) j::nat. |
7490 (ALL (i::nat) j::nat. |
7120 IN i (dotdot (NUMERAL_BIT1 (0::nat)) (CARD s)) & |
7491 IN i (dotdot (NUMERAL_BIT1 0) (CARD s)) & |
7121 IN j (dotdot (NUMERAL_BIT1 (0::nat)) (CARD s)) & f i = f j --> |
7492 IN j (dotdot (NUMERAL_BIT1 0) (CARD s)) & f i = f j --> |
7122 i = j) & |
7493 i = j) & |
7123 s = IMAGE f (dotdot (NUMERAL_BIT1 (0::nat)) (CARD s)))" |
7494 s = IMAGE f (dotdot (NUMERAL_BIT1 0) (CARD s)))" |
7124 by (import hollight FINITE_INDEX_NUMSEG) |
7495 by (import hollight FINITE_INDEX_NUMSEG) |
7125 |
7496 |
7126 lemma FINITE_INDEX_NUMBERS: "ALL s::'A::type => bool. |
7497 lemma FINITE_INDEX_NUMBERS: "ALL s::'A::type => bool. |
7127 FINITE s = |
7498 FINITE s = |
7128 (EX (k::nat => bool) f::nat => 'A::type. |
7499 (EX (k::nat => bool) f::nat => 'A::type. |
7134 DISJOINT (dotdot x xa) (dotdot xb xc) = |
7505 DISJOINT (dotdot x xa) (dotdot xb xc) = |
7135 (< xa xb | < xc x | < xa x | < xc xb)" |
7506 (< xa xb | < xc x | < xa x | < xc xb)" |
7136 by (import hollight DISJOINT_NUMSEG) |
7507 by (import hollight DISJOINT_NUMSEG) |
7137 |
7508 |
7138 lemma NUMSEG_ADD_SPLIT: "ALL (x::nat) (xa::nat) xb::nat. |
7509 lemma NUMSEG_ADD_SPLIT: "ALL (x::nat) (xa::nat) xb::nat. |
7139 <= x (xa + NUMERAL_BIT1 (0::nat)) --> |
7510 <= x (xa + NUMERAL_BIT1 0) --> |
7140 dotdot x (xa + xb) = |
7511 dotdot x (xa + xb) = |
7141 hollight.UNION (dotdot x xa) |
7512 hollight.UNION (dotdot x xa) (dotdot (xa + NUMERAL_BIT1 0) (xa + xb))" |
7142 (dotdot (xa + NUMERAL_BIT1 (0::nat)) (xa + xb))" |
|
7143 by (import hollight NUMSEG_ADD_SPLIT) |
7513 by (import hollight NUMSEG_ADD_SPLIT) |
7144 |
7514 |
7145 lemma NUMSEG_OFFSET_IMAGE: "ALL (x::nat) (xa::nat) xb::nat. |
7515 lemma NUMSEG_OFFSET_IMAGE: "ALL (x::nat) (xa::nat) xb::nat. |
7146 dotdot (x + xb) (xa + xb) = IMAGE (%i::nat. i + xb) (dotdot x xa)" |
7516 dotdot (x + xb) (xa + xb) = IMAGE (%i::nat. i + xb) (dotdot x xa)" |
7147 by (import hollight NUMSEG_OFFSET_IMAGE) |
7517 by (import hollight NUMSEG_OFFSET_IMAGE) |
7149 lemma SUBSET_NUMSEG: "ALL (m::nat) (n::nat) (p::nat) q::nat. |
7519 lemma SUBSET_NUMSEG: "ALL (m::nat) (n::nat) (p::nat) q::nat. |
7150 SUBSET (dotdot m n) (dotdot p q) = (< n m | <= p m & <= n q)" |
7520 SUBSET (dotdot m n) (dotdot p q) = (< n m | <= p m & <= n q)" |
7151 by (import hollight SUBSET_NUMSEG) |
7521 by (import hollight SUBSET_NUMSEG) |
7152 |
7522 |
7153 constdefs |
7523 constdefs |
7154 neutral :: "('q_48776::type => 'q_48776::type => 'q_48776::type) => 'q_48776::type" |
7524 neutral :: "('q_48776 => 'q_48776 => 'q_48776) => 'q_48776" |
7155 "neutral == |
7525 "neutral == |
7156 %u::'q_48776::type => 'q_48776::type => 'q_48776::type. |
7526 %u::'q_48776::type => 'q_48776::type => 'q_48776::type. |
7157 SOME x::'q_48776::type. ALL y::'q_48776::type. u x y = y & u y x = y" |
7527 SOME x::'q_48776::type. ALL y::'q_48776::type. u x y = y & u y x = y" |
7158 |
7528 |
7159 lemma DEF_neutral: "neutral = |
7529 lemma DEF_neutral: "neutral = |
7160 (%u::'q_48776::type => 'q_48776::type => 'q_48776::type. |
7530 (%u::'q_48776::type => 'q_48776::type => 'q_48776::type. |
7161 SOME x::'q_48776::type. ALL y::'q_48776::type. u x y = y & u y x = y)" |
7531 SOME x::'q_48776::type. ALL y::'q_48776::type. u x y = y & u y x = y)" |
7162 by (import hollight DEF_neutral) |
7532 by (import hollight DEF_neutral) |
7163 |
7533 |
7164 constdefs |
7534 constdefs |
7165 monoidal :: "('A::type => 'A::type => 'A::type) => bool" |
7535 monoidal :: "('A => 'A => 'A) => bool" |
7166 "monoidal == |
7536 "monoidal == |
7167 %u::'A::type => 'A::type => 'A::type. |
7537 %u::'A::type => 'A::type => 'A::type. |
7168 (ALL (x::'A::type) y::'A::type. u x y = u y x) & |
7538 (ALL (x::'A::type) y::'A::type. u x y = u y x) & |
7169 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
7539 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
7170 u x (u y z) = u (u x y) z) & |
7540 u x (u y z) = u (u x y) z) & |
7177 u x (u y z) = u (u x y) z) & |
7547 u x (u y z) = u (u x y) z) & |
7178 (ALL x::'A::type. u (neutral u) x = x))" |
7548 (ALL x::'A::type. u (neutral u) x = x))" |
7179 by (import hollight DEF_monoidal) |
7549 by (import hollight DEF_monoidal) |
7180 |
7550 |
7181 constdefs |
7551 constdefs |
7182 support :: "('B::type => 'B::type => 'B::type) |
7552 support :: "('B => 'B => 'B) => ('A => 'B) => ('A => bool) => 'A => bool" |
7183 => ('A::type => 'B::type) => ('A::type => bool) => 'A::type => bool" |
|
7184 "support == |
7553 "support == |
7185 %(u::'B::type => 'B::type => 'B::type) (ua::'A::type => 'B::type) |
7554 %(u::'B::type => 'B::type => 'B::type) (ua::'A::type => 'B::type) |
7186 ub::'A::type => bool. |
7555 ub::'A::type => bool. |
7187 GSPEC |
7556 GSPEC |
7188 (%uc::'A::type. |
7557 (%uc::'A::type. |
7195 (%uc::'A::type. |
7564 (%uc::'A::type. |
7196 EX x::'A::type. SETSPEC uc (IN x ub & ua x ~= neutral u) x))" |
7565 EX x::'A::type. SETSPEC uc (IN x ub & ua x ~= neutral u) x))" |
7197 by (import hollight DEF_support) |
7566 by (import hollight DEF_support) |
7198 |
7567 |
7199 constdefs |
7568 constdefs |
7200 iterate :: "('q_48881::type => 'q_48881::type => 'q_48881::type) |
7569 iterate :: "('q_48881 => 'q_48881 => 'q_48881) |
7201 => ('A::type => bool) => ('A::type => 'q_48881::type) => 'q_48881::type" |
7570 => ('A => bool) => ('A => 'q_48881) => 'q_48881" |
7202 "iterate == |
7571 "iterate == |
7203 %(u::'q_48881::type => 'q_48881::type => 'q_48881::type) |
7572 %(u::'q_48881::type => 'q_48881::type => 'q_48881::type) |
7204 (ua::'A::type => bool) ub::'A::type => 'q_48881::type. |
7573 (ua::'A::type => bool) ub::'A::type => 'q_48881::type. |
7205 ITSET (%x::'A::type. u (ub x)) (support u ub ua) (neutral u)" |
7574 ITSET (%x::'A::type. u (ub x)) (support u ub ua) (neutral u)" |
7206 |
7575 |
7404 IN xa x & IN y x & f xa = f y --> xa = y) --> |
7773 IN xa x & IN y x & f xa = f y --> xa = y) --> |
7405 iterate u_4215 (IMAGE f x) g = iterate u_4215 x (g o f))" |
7774 iterate u_4215 (IMAGE f x) g = iterate u_4215 x (g o f))" |
7406 by (import hollight ITERATE_IMAGE) |
7775 by (import hollight ITERATE_IMAGE) |
7407 |
7776 |
7408 constdefs |
7777 constdefs |
7409 nsum :: "('q_50348::type => bool) => ('q_50348::type => nat) => nat" |
7778 nsum :: "('q_50348 => bool) => ('q_50348 => nat) => nat" |
7410 "(op ==::(('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7779 "(op ==::(('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7411 => (('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7780 => (('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7412 => prop) |
7781 => prop) |
7413 (nsum::('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7782 (nsum::('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7414 ((iterate::(nat => nat => nat) |
7783 ((iterate::(nat => nat => nat) |
7422 ((iterate::(nat => nat => nat) |
7791 ((iterate::(nat => nat => nat) |
7423 => ('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7792 => ('q_50348::type => bool) => ('q_50348::type => nat) => nat) |
7424 (op +::nat => nat => nat))" |
7793 (op +::nat => nat => nat))" |
7425 by (import hollight DEF_nsum) |
7794 by (import hollight DEF_nsum) |
7426 |
7795 |
7427 lemma NEUTRAL_ADD: "neutral op + = (0::nat)" |
7796 lemma NEUTRAL_ADD: "(op =::nat => nat => bool) |
7797 ((neutral::(nat => nat => nat) => nat) (op +::nat => nat => nat)) (0::nat)" |
|
7428 by (import hollight NEUTRAL_ADD) |
7798 by (import hollight NEUTRAL_ADD) |
7429 |
7799 |
7430 lemma NEUTRAL_MUL: "neutral op * = NUMERAL_BIT1 (0::nat)" |
7800 lemma NEUTRAL_MUL: "neutral op * = NUMERAL_BIT1 0" |
7431 by (import hollight NEUTRAL_MUL) |
7801 by (import hollight NEUTRAL_MUL) |
7432 |
7802 |
7433 lemma MONOIDAL_ADD: "(monoidal::(nat => nat => nat) => bool) (op +::nat => nat => nat)" |
7803 lemma MONOIDAL_ADD: "(monoidal::(nat => nat => nat) => bool) (op +::nat => nat => nat)" |
7434 by (import hollight MONOIDAL_ADD) |
7804 by (import hollight MONOIDAL_ADD) |
7435 |
7805 |
7436 lemma MONOIDAL_MUL: "(monoidal::(nat => nat => nat) => bool) (op *::nat => nat => nat)" |
7806 lemma MONOIDAL_MUL: "(monoidal::(nat => nat => nat) => bool) (op *::nat => nat => nat)" |
7437 by (import hollight MONOIDAL_MUL) |
7807 by (import hollight MONOIDAL_MUL) |
7438 |
7808 |
7439 lemma NSUM_CLAUSES: "(ALL x::'q_50386::type => nat. nsum EMPTY x = (0::nat)) & |
7809 lemma NSUM_CLAUSES: "(ALL x::'q_50386::type => nat. nsum EMPTY x = 0) & |
7440 (ALL (x::'q_50425::type) (xa::'q_50425::type => nat) |
7810 (ALL (x::'q_50425::type) (xa::'q_50425::type => nat) |
7441 xb::'q_50425::type => bool. |
7811 xb::'q_50425::type => bool. |
7442 FINITE xb --> |
7812 FINITE xb --> |
7443 nsum (INSERT x xb) xa = COND (IN x xb) (nsum xb xa) (xa x + nsum xb xa))" |
7813 nsum (INSERT x xb) xa = COND (IN x xb) (nsum xb xa) (xa x + nsum xb xa))" |
7444 by (import hollight NSUM_CLAUSES) |
7814 by (import hollight NSUM_CLAUSES) |
7496 lemma NSUM_CONST: "ALL (c::nat) s::'q_50862::type => bool. |
7866 lemma NSUM_CONST: "ALL (c::nat) s::'q_50862::type => bool. |
7497 FINITE s --> nsum s (%n::'q_50862::type. c) = CARD s * c" |
7867 FINITE s --> nsum s (%n::'q_50862::type. c) = CARD s * c" |
7498 by (import hollight NSUM_CONST) |
7868 by (import hollight NSUM_CONST) |
7499 |
7869 |
7500 lemma NSUM_EQ_0: "ALL (x::'A::type => nat) xa::'A::type => bool. |
7870 lemma NSUM_EQ_0: "ALL (x::'A::type => nat) xa::'A::type => bool. |
7501 (ALL xb::'A::type. IN xb xa --> x xb = (0::nat)) --> nsum xa x = (0::nat)" |
7871 (ALL xb::'A::type. IN xb xa --> x xb = 0) --> nsum xa x = 0" |
7502 by (import hollight NSUM_EQ_0) |
7872 by (import hollight NSUM_EQ_0) |
7503 |
7873 |
7504 lemma NSUM_0: "ALL x::'A::type => bool. nsum x (%n::'A::type. 0::nat) = (0::nat)" |
7874 lemma NSUM_0: "ALL x::'A::type => bool. nsum x (%n::'A::type. 0) = 0" |
7505 by (import hollight NSUM_0) |
7875 by (import hollight NSUM_0) |
7506 |
7876 |
7507 lemma NSUM_POS_LE: "ALL (x::'q_50941::type => nat) xa::'q_50941::type => bool. |
7877 lemma NSUM_POS_LE: "ALL (x::'q_50941::type => nat) xa::'q_50941::type => bool. |
7508 FINITE xa & (ALL xb::'q_50941::type. IN xb xa --> <= (0::nat) (x xb)) --> |
7878 FINITE xa & (ALL xb::'q_50941::type. IN xb xa --> <= 0 (x xb)) --> |
7509 <= (0::nat) (nsum xa x)" |
7879 <= 0 (nsum xa x)" |
7510 by (import hollight NSUM_POS_LE) |
7880 by (import hollight NSUM_POS_LE) |
7511 |
7881 |
7512 lemma NSUM_POS_BOUND: "ALL (f::'A::type => nat) (b::nat) x::'A::type => bool. |
7882 lemma NSUM_POS_BOUND: "ALL (f::'A::type => nat) (b::nat) x::'A::type => bool. |
7513 FINITE x & |
7883 FINITE x & |
7514 (ALL xa::'A::type. IN xa x --> <= (0::nat) (f xa)) & <= (nsum x f) b --> |
7884 (ALL xa::'A::type. IN xa x --> <= 0 (f xa)) & <= (nsum x f) b --> |
7515 (ALL xa::'A::type. IN xa x --> <= (f xa) b)" |
7885 (ALL xa::'A::type. IN xa x --> <= (f xa) b)" |
7516 by (import hollight NSUM_POS_BOUND) |
7886 by (import hollight NSUM_POS_BOUND) |
7517 |
7887 |
7518 lemma NSUM_POS_EQ_0: "ALL (x::'q_51076::type => nat) xa::'q_51076::type => bool. |
7888 lemma NSUM_POS_EQ_0: "ALL (x::'q_51076::type => nat) xa::'q_51076::type => bool. |
7519 FINITE xa & |
7889 FINITE xa & |
7520 (ALL xb::'q_51076::type. IN xb xa --> <= (0::nat) (x xb)) & |
7890 (ALL xb::'q_51076::type. IN xb xa --> <= 0 (x xb)) & nsum xa x = 0 --> |
7521 nsum xa x = (0::nat) --> |
7891 (ALL xb::'q_51076::type. IN xb xa --> x xb = 0)" |
7522 (ALL xb::'q_51076::type. IN xb xa --> x xb = (0::nat))" |
|
7523 by (import hollight NSUM_POS_EQ_0) |
7892 by (import hollight NSUM_POS_EQ_0) |
7524 |
7893 |
7525 lemma NSUM_SING: "ALL (x::'q_51096::type => nat) xa::'q_51096::type. |
7894 lemma NSUM_SING: "ALL (x::'q_51096::type => nat) xa::'q_51096::type. |
7526 nsum (INSERT xa EMPTY) x = x xa" |
7895 nsum (INSERT xa EMPTY) x = x xa" |
7527 by (import hollight NSUM_SING) |
7896 by (import hollight NSUM_SING) |
7528 |
7897 |
7529 lemma NSUM_DELTA: "ALL (x::'A::type => bool) xa::'A::type. |
7898 lemma NSUM_DELTA: "ALL (x::'A::type => bool) xa::'A::type. |
7530 nsum x (%x::'A::type. COND (x = xa) (b::nat) (0::nat)) = |
7899 nsum x (%x::'A::type. COND (x = xa) (b::nat) 0) = COND (IN xa x) b 0" |
7531 COND (IN xa x) b (0::nat)" |
|
7532 by (import hollight NSUM_DELTA) |
7900 by (import hollight NSUM_DELTA) |
7533 |
7901 |
7534 lemma NSUM_SWAP: "ALL (f::'A::type => 'B::type => nat) (x::'A::type => bool) |
7902 lemma NSUM_SWAP: "ALL (f::'A::type => 'B::type => nat) (x::'A::type => bool) |
7535 xa::'B::type => bool. |
7903 xa::'B::type => bool. |
7536 FINITE x & FINITE xa --> |
7904 FINITE x & FINITE xa --> |
7546 nsum (IMAGE x xb) xa = nsum xb (xa o x)" |
7914 nsum (IMAGE x xb) xa = nsum xb (xa o x)" |
7547 by (import hollight NSUM_IMAGE) |
7915 by (import hollight NSUM_IMAGE) |
7548 |
7916 |
7549 lemma NSUM_SUPERSET: "ALL (f::'A::type => nat) (u::'A::type => bool) v::'A::type => bool. |
7917 lemma NSUM_SUPERSET: "ALL (f::'A::type => nat) (u::'A::type => bool) v::'A::type => bool. |
7550 FINITE u & |
7918 FINITE u & |
7551 SUBSET u v & (ALL x::'A::type. IN x v & ~ IN x u --> f x = (0::nat)) --> |
7919 SUBSET u v & (ALL x::'A::type. IN x v & ~ IN x u --> f x = 0) --> |
7552 nsum v f = nsum u f" |
7920 nsum v f = nsum u f" |
7553 by (import hollight NSUM_SUPERSET) |
7921 by (import hollight NSUM_SUPERSET) |
7554 |
7922 |
7555 lemma NSUM_UNION_RZERO: "ALL (f::'A::type => nat) (u::'A::type => bool) v::'A::type => bool. |
7923 lemma NSUM_UNION_RZERO: "ALL (f::'A::type => nat) (u::'A::type => bool) v::'A::type => bool. |
7556 FINITE u & (ALL x::'A::type. IN x v & ~ IN x u --> f x = (0::nat)) --> |
7924 FINITE u & (ALL x::'A::type. IN x v & ~ IN x u --> f x = 0) --> |
7557 nsum (hollight.UNION u v) f = nsum u f" |
7925 nsum (hollight.UNION u v) f = nsum u f" |
7558 by (import hollight NSUM_UNION_RZERO) |
7926 by (import hollight NSUM_UNION_RZERO) |
7559 |
7927 |
7560 lemma NSUM_UNION_LZERO: "ALL (f::'A::type => nat) (u::'A::type => bool) v::'A::type => bool. |
7928 lemma NSUM_UNION_LZERO: "ALL (f::'A::type => nat) (u::'A::type => bool) v::'A::type => bool. |
7561 FINITE v & (ALL x::'A::type. IN x u & ~ IN x v --> f x = (0::nat)) --> |
7929 FINITE v & (ALL x::'A::type. IN x u & ~ IN x v --> f x = 0) --> |
7562 nsum (hollight.UNION u v) f = nsum v f" |
7930 nsum (hollight.UNION u v) f = nsum v f" |
7563 by (import hollight NSUM_UNION_LZERO) |
7931 by (import hollight NSUM_UNION_LZERO) |
7564 |
7932 |
7565 lemma NSUM_RESTRICT: "ALL (f::'q_51457::type => nat) s::'q_51457::type => bool. |
7933 lemma NSUM_RESTRICT: "ALL (f::'q_51457::type => nat) s::'q_51457::type => bool. |
7566 FINITE s --> |
7934 FINITE s --> |
7567 nsum s (%x::'q_51457::type. COND (IN x s) (f x) (0::nat)) = nsum s f" |
7935 nsum s (%x::'q_51457::type. COND (IN x s) (f x) 0) = nsum s f" |
7568 by (import hollight NSUM_RESTRICT) |
7936 by (import hollight NSUM_RESTRICT) |
7569 |
7937 |
7570 lemma NSUM_BOUND: "ALL (x::'A::type => bool) (xa::'A::type => nat) xb::nat. |
7938 lemma NSUM_BOUND: "ALL (x::'A::type => bool) (xa::'A::type => nat) xb::nat. |
7571 FINITE x & (ALL xc::'A::type. IN xc x --> <= (xa xc) xb) --> |
7939 FINITE x & (ALL xc::'A::type. IN xc x --> <= (xa xc) xb) --> |
7572 <= (nsum x xa) (CARD x * xb)" |
7940 <= (nsum x xa) (CARD x * xb)" |
7608 |
7976 |
7609 lemma NSUM_EQ_SUPERSET: "ALL (f::'A::type => nat) (s::'A::type => bool) t::'A::type => bool. |
7977 lemma NSUM_EQ_SUPERSET: "ALL (f::'A::type => nat) (s::'A::type => bool) t::'A::type => bool. |
7610 FINITE t & |
7978 FINITE t & |
7611 SUBSET t s & |
7979 SUBSET t s & |
7612 (ALL x::'A::type. IN x t --> f x = (g::'A::type => nat) x) & |
7980 (ALL x::'A::type. IN x t --> f x = (g::'A::type => nat) x) & |
7613 (ALL x::'A::type. IN x s & ~ IN x t --> f x = (0::nat)) --> |
7981 (ALL x::'A::type. IN x s & ~ IN x t --> f x = 0) --> |
7614 nsum s f = nsum t g" |
7982 nsum s f = nsum t g" |
7615 by (import hollight NSUM_EQ_SUPERSET) |
7983 by (import hollight NSUM_EQ_SUPERSET) |
7616 |
7984 |
7617 lemma NSUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => nat) r::'q_51887::type. |
7985 lemma NSUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => nat) r::'q_51887::type. |
7618 FINITE s --> |
7986 FINITE s --> |
7619 nsum |
7987 nsum |
7620 (GSPEC |
7988 (GSPEC |
7621 (%u::'A::type. |
7989 (%u::'A::type. |
7622 EX x::'A::type. SETSPEC u (IN x s & (P::'A::type => bool) x) x)) |
7990 EX x::'A::type. SETSPEC u (IN x s & (P::'A::type => bool) x) x)) |
7623 f = |
7991 f = |
7624 nsum s (%x::'A::type. COND (P x) (f x) (0::nat))" |
7992 nsum s (%x::'A::type. COND (P x) (f x) 0)" |
7625 by (import hollight NSUM_RESTRICT_SET) |
7993 by (import hollight NSUM_RESTRICT_SET) |
7626 |
7994 |
7627 lemma NSUM_NSUM_RESTRICT: "ALL (R::'q_52016::type => 'q_52015::type => bool) |
7995 lemma NSUM_NSUM_RESTRICT: "ALL (R::'q_52016::type => 'q_52015::type => bool) |
7628 (f::'q_52016::type => 'q_52015::type => nat) (s::'q_52016::type => bool) |
7996 (f::'q_52016::type => 'q_52015::type => nat) (s::'q_52016::type => bool) |
7629 t::'q_52015::type => bool. |
7997 t::'q_52015::type => bool. |
7643 EX x::'q_52016::type. SETSPEC u (IN x s & R x y) x)) |
8011 EX x::'q_52016::type. SETSPEC u (IN x s & R x y) x)) |
7644 (%x::'q_52016::type. f x y))" |
8012 (%x::'q_52016::type. f x y))" |
7645 by (import hollight NSUM_NSUM_RESTRICT) |
8013 by (import hollight NSUM_NSUM_RESTRICT) |
7646 |
8014 |
7647 lemma CARD_EQ_NSUM: "ALL x::'q_52035::type => bool. |
8015 lemma CARD_EQ_NSUM: "ALL x::'q_52035::type => bool. |
7648 FINITE x --> CARD x = nsum x (%x::'q_52035::type. NUMERAL_BIT1 (0::nat))" |
8016 FINITE x --> CARD x = nsum x (%x::'q_52035::type. NUMERAL_BIT1 0)" |
7649 by (import hollight CARD_EQ_NSUM) |
8017 by (import hollight CARD_EQ_NSUM) |
7650 |
8018 |
7651 lemma NSUM_MULTICOUNT_GEN: "ALL (R::'A::type => 'B::type => bool) (s::'A::type => bool) |
8019 lemma NSUM_MULTICOUNT_GEN: "ALL (R::'A::type => 'B::type => bool) (s::'A::type => bool) |
7652 (t::'B::type => bool) k::'B::type => nat. |
8020 (t::'B::type => bool) k::'B::type => nat. |
7653 FINITE s & |
8021 FINITE s & |
7694 (%u::'A::type. EX x::'A::type. SETSPEC u (IN x s & f x = y) x)) |
8062 (%u::'A::type. EX x::'A::type. SETSPEC u (IN x s & f x = y) x)) |
7695 g)" |
8063 g)" |
7696 by (import hollight NSUM_IMAGE_GEN) |
8064 by (import hollight NSUM_IMAGE_GEN) |
7697 |
8065 |
7698 lemma NSUM_SUBSET: "ALL (u::'A::type => bool) (v::'A::type => bool) f::'A::type => nat. |
8066 lemma NSUM_SUBSET: "ALL (u::'A::type => bool) (v::'A::type => bool) f::'A::type => nat. |
7699 FINITE u & |
8067 FINITE u & FINITE v & (ALL x::'A::type. IN x (DIFF u v) --> f x = 0) --> |
7700 FINITE v & (ALL x::'A::type. IN x (DIFF u v) --> f x = (0::nat)) --> |
|
7701 <= (nsum u f) (nsum v f)" |
8068 <= (nsum u f) (nsum v f)" |
7702 by (import hollight NSUM_SUBSET) |
8069 by (import hollight NSUM_SUBSET) |
7703 |
8070 |
7704 lemma NSUM_SUBSET_SIMPLE: "ALL (u::'q_52495::type => bool) (v::'q_52495::type => bool) |
8071 lemma NSUM_SUBSET_SIMPLE: "ALL (u::'q_52495::type => bool) (v::'q_52495::type => bool) |
7705 f::'q_52495::type => nat. |
8072 f::'q_52495::type => nat. |
7724 (ALL i::nat. <= m i & <= i n --> f i = g i) --> |
8091 (ALL i::nat. <= m i & <= i n --> f i = g i) --> |
7725 nsum (dotdot m n) f = nsum (dotdot m n) g" |
8092 nsum (dotdot m n) f = nsum (dotdot m n) g" |
7726 by (import hollight NSUM_EQ_NUMSEG) |
8093 by (import hollight NSUM_EQ_NUMSEG) |
7727 |
8094 |
7728 lemma NSUM_CONST_NUMSEG: "ALL (x::nat) (xa::nat) xb::nat. |
8095 lemma NSUM_CONST_NUMSEG: "ALL (x::nat) (xa::nat) xb::nat. |
7729 nsum (dotdot xa xb) (%n::nat. x) = (xb + NUMERAL_BIT1 (0::nat) - xa) * x" |
8096 nsum (dotdot xa xb) (%n::nat. x) = (xb + NUMERAL_BIT1 0 - xa) * x" |
7730 by (import hollight NSUM_CONST_NUMSEG) |
8097 by (import hollight NSUM_CONST_NUMSEG) |
7731 |
8098 |
7732 lemma NSUM_EQ_0_NUMSEG: "ALL (x::nat => nat) xa::'q_52734::type. |
8099 lemma NSUM_EQ_0_NUMSEG: "ALL (x::nat => nat) xa::'q_52734::type. |
7733 (ALL i::nat. <= (m::nat) i & <= i (n::nat) --> x i = (0::nat)) --> |
8100 (ALL i::nat. <= (m::nat) i & <= i (n::nat) --> x i = 0) --> |
7734 nsum (dotdot m n) x = (0::nat)" |
8101 nsum (dotdot m n) x = 0" |
7735 by (import hollight NSUM_EQ_0_NUMSEG) |
8102 by (import hollight NSUM_EQ_0_NUMSEG) |
7736 |
8103 |
7737 lemma NSUM_TRIV_NUMSEG: "ALL (f::nat => nat) (m::nat) n::nat. |
8104 lemma NSUM_TRIV_NUMSEG: "ALL (f::nat => nat) (m::nat) n::nat. < n m --> nsum (dotdot m n) f = 0" |
7738 < n m --> nsum (dotdot m n) f = (0::nat)" |
|
7739 by (import hollight NSUM_TRIV_NUMSEG) |
8105 by (import hollight NSUM_TRIV_NUMSEG) |
7740 |
8106 |
7741 lemma NSUM_POS_LE_NUMSEG: "ALL (x::nat) (xa::nat) xb::nat => nat. |
8107 lemma NSUM_POS_LE_NUMSEG: "ALL (x::nat) (xa::nat) xb::nat => nat. |
7742 (ALL p::nat. <= x p & <= p xa --> <= (0::nat) (xb p)) --> |
8108 (ALL p::nat. <= x p & <= p xa --> <= 0 (xb p)) --> |
7743 <= (0::nat) (nsum (dotdot x xa) xb)" |
8109 <= 0 (nsum (dotdot x xa) xb)" |
7744 by (import hollight NSUM_POS_LE_NUMSEG) |
8110 by (import hollight NSUM_POS_LE_NUMSEG) |
7745 |
8111 |
7746 lemma NSUM_POS_EQ_0_NUMSEG: "ALL (f::nat => nat) (m::nat) n::nat. |
8112 lemma NSUM_POS_EQ_0_NUMSEG: "ALL (f::nat => nat) (m::nat) n::nat. |
7747 (ALL p::nat. <= m p & <= p n --> <= (0::nat) (f p)) & |
8113 (ALL p::nat. <= m p & <= p n --> <= 0 (f p)) & |
7748 nsum (dotdot m n) f = (0::nat) --> |
8114 nsum (dotdot m n) f = 0 --> |
7749 (ALL p::nat. <= m p & <= p n --> f p = (0::nat))" |
8115 (ALL p::nat. <= m p & <= p n --> f p = 0)" |
7750 by (import hollight NSUM_POS_EQ_0_NUMSEG) |
8116 by (import hollight NSUM_POS_EQ_0_NUMSEG) |
7751 |
8117 |
7752 lemma NSUM_SING_NUMSEG: "ALL (x::nat => nat) xa::nat. nsum (dotdot xa xa) x = x xa" |
8118 lemma NSUM_SING_NUMSEG: "ALL (x::nat => nat) xa::nat. nsum (dotdot xa xa) x = x xa" |
7753 by (import hollight NSUM_SING_NUMSEG) |
8119 by (import hollight NSUM_SING_NUMSEG) |
7754 |
8120 |
7755 lemma NSUM_CLAUSES_NUMSEG: "(ALL x::nat. |
8121 lemma NSUM_CLAUSES_NUMSEG: "(ALL x::nat. nsum (dotdot x 0) (f::nat => nat) = COND (x = 0) (f 0) 0) & |
7756 nsum (dotdot x (0::nat)) (f::nat => nat) = |
|
7757 COND (x = (0::nat)) (f (0::nat)) (0::nat)) & |
|
7758 (ALL (x::nat) xa::nat. |
8122 (ALL (x::nat) xa::nat. |
7759 nsum (dotdot x (Suc xa)) f = |
8123 nsum (dotdot x (Suc xa)) f = |
7760 COND (<= x (Suc xa)) (nsum (dotdot x xa) f + f (Suc xa)) |
8124 COND (<= x (Suc xa)) (nsum (dotdot x xa) f + f (Suc xa)) |
7761 (nsum (dotdot x xa) f))" |
8125 (nsum (dotdot x xa) f))" |
7762 by (import hollight NSUM_CLAUSES_NUMSEG) |
8126 by (import hollight NSUM_CLAUSES_NUMSEG) |
7765 nsum (dotdot a b) (%i::nat. nsum (dotdot c d) (f i)) = |
8129 nsum (dotdot a b) (%i::nat. nsum (dotdot c d) (f i)) = |
7766 nsum (dotdot c d) (%j::nat. nsum (dotdot a b) (%i::nat. f i j))" |
8130 nsum (dotdot c d) (%j::nat. nsum (dotdot a b) (%i::nat. f i j))" |
7767 by (import hollight NSUM_SWAP_NUMSEG) |
8131 by (import hollight NSUM_SWAP_NUMSEG) |
7768 |
8132 |
7769 lemma NSUM_ADD_SPLIT: "ALL (x::nat => nat) (xa::nat) (xb::nat) xc::nat. |
8133 lemma NSUM_ADD_SPLIT: "ALL (x::nat => nat) (xa::nat) (xb::nat) xc::nat. |
7770 <= xa (xb + NUMERAL_BIT1 (0::nat)) --> |
8134 <= xa (xb + NUMERAL_BIT1 0) --> |
7771 nsum (dotdot xa (xb + xc)) x = |
8135 nsum (dotdot xa (xb + xc)) x = |
7772 nsum (dotdot xa xb) x + |
8136 nsum (dotdot xa xb) x + nsum (dotdot (xb + NUMERAL_BIT1 0) (xb + xc)) x" |
7773 nsum (dotdot (xb + NUMERAL_BIT1 (0::nat)) (xb + xc)) x" |
|
7774 by (import hollight NSUM_ADD_SPLIT) |
8137 by (import hollight NSUM_ADD_SPLIT) |
7775 |
8138 |
7776 lemma NSUM_OFFSET: "ALL (x::nat => nat) (xa::nat) xb::nat. |
8139 lemma NSUM_OFFSET: "ALL (x::nat => nat) (xa::nat) xb::nat. |
7777 nsum (dotdot (xa + xb) ((n::nat) + xb)) x = |
8140 nsum (dotdot (xa + xb) ((n::nat) + xb)) x = |
7778 nsum (dotdot xa n) (%i::nat. x (i + xb))" |
8141 nsum (dotdot xa n) (%i::nat. x (i + xb))" |
7779 by (import hollight NSUM_OFFSET) |
8142 by (import hollight NSUM_OFFSET) |
7780 |
8143 |
7781 lemma NSUM_OFFSET_0: "ALL (x::nat => nat) (xa::nat) xb::nat. |
8144 lemma NSUM_OFFSET_0: "ALL (x::nat => nat) (xa::nat) xb::nat. |
7782 <= xa xb --> |
8145 <= xa xb --> |
7783 nsum (dotdot xa xb) x = |
8146 nsum (dotdot xa xb) x = nsum (dotdot 0 (xb - xa)) (%i::nat. x (i + xa))" |
7784 nsum (dotdot (0::nat) (xb - xa)) (%i::nat. x (i + xa))" |
|
7785 by (import hollight NSUM_OFFSET_0) |
8147 by (import hollight NSUM_OFFSET_0) |
7786 |
8148 |
7787 lemma NSUM_CLAUSES_LEFT: "ALL (x::nat => nat) (xa::nat) xb::nat. |
8149 lemma NSUM_CLAUSES_LEFT: "ALL (x::nat => nat) (xa::nat) xb::nat. |
7788 <= xa xb --> |
8150 <= xa xb --> |
7789 nsum (dotdot xa xb) x = |
8151 nsum (dotdot xa xb) x = x xa + nsum (dotdot (xa + NUMERAL_BIT1 0) xb) x" |
7790 x xa + nsum (dotdot (xa + NUMERAL_BIT1 (0::nat)) xb) x" |
|
7791 by (import hollight NSUM_CLAUSES_LEFT) |
8152 by (import hollight NSUM_CLAUSES_LEFT) |
7792 |
8153 |
7793 lemma NSUM_CLAUSES_RIGHT: "ALL (f::nat => nat) (m::nat) n::nat. |
8154 lemma NSUM_CLAUSES_RIGHT: "ALL (f::nat => nat) (m::nat) n::nat. |
7794 < (0::nat) n & <= m n --> |
8155 < 0 n & <= m n --> |
7795 nsum (dotdot m n) f = nsum (dotdot m (n - NUMERAL_BIT1 (0::nat))) f + f n" |
8156 nsum (dotdot m n) f = nsum (dotdot m (n - NUMERAL_BIT1 0)) f + f n" |
7796 by (import hollight NSUM_CLAUSES_RIGHT) |
8157 by (import hollight NSUM_CLAUSES_RIGHT) |
7797 |
8158 |
7798 consts |
8159 consts |
7799 sum :: "('q_53311::type => bool) |
8160 sum :: "('q_53311 => bool) => ('q_53311 => hollight.real) => hollight.real" |
7800 => ('q_53311::type => hollight.real) => hollight.real" |
|
7801 |
8161 |
7802 defs |
8162 defs |
7803 sum_def: "(op ==::(('q_53311::type => bool) |
8163 sum_def: "(op ==::(('q_53311::type => bool) |
7804 => ('q_53311::type => hollight.real) => hollight.real) |
8164 => ('q_53311::type => hollight.real) => hollight.real) |
7805 => (('q_53311::type => bool) |
8165 => (('q_53311::type => bool) |
7823 => ('q_53311::type => bool) |
8183 => ('q_53311::type => bool) |
7824 => ('q_53311::type => hollight.real) => hollight.real) |
8184 => ('q_53311::type => hollight.real) => hollight.real) |
7825 (real_add::hollight.real => hollight.real => hollight.real))" |
8185 (real_add::hollight.real => hollight.real => hollight.real))" |
7826 by (import hollight DEF_sum) |
8186 by (import hollight DEF_sum) |
7827 |
8187 |
7828 lemma NEUTRAL_REAL_ADD: "neutral real_add = real_of_num (0::nat)" |
8188 lemma NEUTRAL_REAL_ADD: "neutral real_add = real_of_num 0" |
7829 by (import hollight NEUTRAL_REAL_ADD) |
8189 by (import hollight NEUTRAL_REAL_ADD) |
7830 |
8190 |
7831 lemma NEUTRAL_REAL_MUL: "neutral real_mul = real_of_num (NUMERAL_BIT1 (0::nat))" |
8191 lemma NEUTRAL_REAL_MUL: "neutral real_mul = real_of_num (NUMERAL_BIT1 0)" |
7832 by (import hollight NEUTRAL_REAL_MUL) |
8192 by (import hollight NEUTRAL_REAL_MUL) |
7833 |
8193 |
7834 lemma MONOIDAL_REAL_ADD: "monoidal real_add" |
8194 lemma MONOIDAL_REAL_ADD: "monoidal real_add" |
7835 by (import hollight MONOIDAL_REAL_ADD) |
8195 by (import hollight MONOIDAL_REAL_ADD) |
7836 |
8196 |
7837 lemma MONOIDAL_REAL_MUL: "monoidal real_mul" |
8197 lemma MONOIDAL_REAL_MUL: "monoidal real_mul" |
7838 by (import hollight MONOIDAL_REAL_MUL) |
8198 by (import hollight MONOIDAL_REAL_MUL) |
7839 |
8199 |
7840 lemma SUM_CLAUSES: "(ALL x::'q_53353::type => hollight.real. |
8200 lemma SUM_CLAUSES: "(ALL x::'q_53353::type => hollight.real. |
7841 hollight.sum EMPTY x = real_of_num (0::nat)) & |
8201 hollight.sum EMPTY x = real_of_num 0) & |
7842 (ALL (x::'q_53394::type) (xa::'q_53394::type => hollight.real) |
8202 (ALL (x::'q_53394::type) (xa::'q_53394::type => hollight.real) |
7843 xb::'q_53394::type => bool. |
8203 xb::'q_53394::type => bool. |
7844 FINITE xb --> |
8204 FINITE xb --> |
7845 hollight.sum (INSERT x xb) xa = |
8205 hollight.sum (INSERT x xb) xa = |
7846 COND (IN x xb) (hollight.sum xb xa) |
8206 COND (IN x xb) (hollight.sum xb xa) |
7874 real_lt (hollight.sum s f) (hollight.sum s g)" |
8234 real_lt (hollight.sum s f) (hollight.sum s g)" |
7875 by (import hollight SUM_LT_ALL) |
8235 by (import hollight SUM_LT_ALL) |
7876 |
8236 |
7877 lemma SUM_POS_LE: "ALL (x::'q_54040::type => hollight.real) xa::'q_54040::type => bool. |
8237 lemma SUM_POS_LE: "ALL (x::'q_54040::type => hollight.real) xa::'q_54040::type => bool. |
7878 FINITE xa & |
8238 FINITE xa & |
7879 (ALL xb::'q_54040::type. |
8239 (ALL xb::'q_54040::type. IN xb xa --> real_le (real_of_num 0) (x xb)) --> |
7880 IN xb xa --> real_le (real_of_num (0::nat)) (x xb)) --> |
8240 real_le (real_of_num 0) (hollight.sum xa x)" |
7881 real_le (real_of_num (0::nat)) (hollight.sum xa x)" |
|
7882 by (import hollight SUM_POS_LE) |
8241 by (import hollight SUM_POS_LE) |
7883 |
8242 |
7884 lemma SUM_POS_BOUND: "ALL (f::'A::type => hollight.real) (b::hollight.real) x::'A::type => bool. |
8243 lemma SUM_POS_BOUND: "ALL (f::'A::type => hollight.real) (b::hollight.real) x::'A::type => bool. |
7885 FINITE x & |
8244 FINITE x & |
7886 (ALL xa::'A::type. IN xa x --> real_le (real_of_num (0::nat)) (f xa)) & |
8245 (ALL xa::'A::type. IN xa x --> real_le (real_of_num 0) (f xa)) & |
7887 real_le (hollight.sum x f) b --> |
8246 real_le (hollight.sum x f) b --> |
7888 (ALL xa::'A::type. IN xa x --> real_le (f xa) b)" |
8247 (ALL xa::'A::type. IN xa x --> real_le (f xa) b)" |
7889 by (import hollight SUM_POS_BOUND) |
8248 by (import hollight SUM_POS_BOUND) |
7890 |
8249 |
7891 lemma SUM_POS_EQ_0: "ALL (x::'q_54187::type => hollight.real) xa::'q_54187::type => bool. |
8250 lemma SUM_POS_EQ_0: "ALL (x::'q_54187::type => hollight.real) xa::'q_54187::type => bool. |
7892 FINITE xa & |
8251 FINITE xa & |
7893 (ALL xb::'q_54187::type. |
8252 (ALL xb::'q_54187::type. IN xb xa --> real_le (real_of_num 0) (x xb)) & |
7894 IN xb xa --> real_le (real_of_num (0::nat)) (x xb)) & |
8253 hollight.sum xa x = real_of_num 0 --> |
7895 hollight.sum xa x = real_of_num (0::nat) --> |
8254 (ALL xb::'q_54187::type. IN xb xa --> x xb = real_of_num 0)" |
7896 (ALL xb::'q_54187::type. IN xb xa --> x xb = real_of_num (0::nat))" |
|
7897 by (import hollight SUM_POS_EQ_0) |
8255 by (import hollight SUM_POS_EQ_0) |
7898 |
8256 |
7899 lemma SUM_SING: "ALL (x::'q_54209::type => hollight.real) xa::'q_54209::type. |
8257 lemma SUM_SING: "ALL (x::'q_54209::type => hollight.real) xa::'q_54209::type. |
7900 hollight.sum (INSERT xa EMPTY) x = x xa" |
8258 hollight.sum (INSERT xa EMPTY) x = x xa" |
7901 by (import hollight SUM_SING) |
8259 by (import hollight SUM_SING) |
7902 |
8260 |
7903 lemma SUM_DELTA: "ALL (x::'A::type => bool) xa::'A::type. |
8261 lemma SUM_DELTA: "ALL (x::'A::type => bool) xa::'A::type. |
7904 hollight.sum x |
8262 hollight.sum x |
7905 (%x::'A::type. |
8263 (%x::'A::type. COND (x = xa) (b::hollight.real) (real_of_num 0)) = |
7906 COND (x = xa) (b::hollight.real) (real_of_num (0::nat))) = |
8264 COND (IN xa x) b (real_of_num 0)" |
7907 COND (IN xa x) b (real_of_num (0::nat))" |
|
7908 by (import hollight SUM_DELTA) |
8265 by (import hollight SUM_DELTA) |
7909 |
8266 |
7910 lemma SUM_IMAGE: "ALL (x::'q_54353::type => 'q_54329::type) |
8267 lemma SUM_IMAGE: "ALL (x::'q_54353::type => 'q_54329::type) |
7911 (xa::'q_54329::type => hollight.real) xb::'q_54353::type => bool. |
8268 (xa::'q_54329::type => hollight.real) xb::'q_54353::type => bool. |
7912 FINITE xb & |
8269 FINITE xb & |
7917 |
8274 |
7918 lemma SUM_SUPERSET: "ALL (f::'A::type => hollight.real) (u::'A::type => bool) |
8275 lemma SUM_SUPERSET: "ALL (f::'A::type => hollight.real) (u::'A::type => bool) |
7919 v::'A::type => bool. |
8276 v::'A::type => bool. |
7920 FINITE u & |
8277 FINITE u & |
7921 SUBSET u v & |
8278 SUBSET u v & |
7922 (ALL x::'A::type. IN x v & ~ IN x u --> f x = real_of_num (0::nat)) --> |
8279 (ALL x::'A::type. IN x v & ~ IN x u --> f x = real_of_num 0) --> |
7923 hollight.sum v f = hollight.sum u f" |
8280 hollight.sum v f = hollight.sum u f" |
7924 by (import hollight SUM_SUPERSET) |
8281 by (import hollight SUM_SUPERSET) |
7925 |
8282 |
7926 lemma SUM_UNION_RZERO: "ALL (f::'A::type => hollight.real) (u::'A::type => bool) |
8283 lemma SUM_UNION_RZERO: "ALL (f::'A::type => hollight.real) (u::'A::type => bool) |
7927 v::'A::type => bool. |
8284 v::'A::type => bool. |
7928 FINITE u & |
8285 FINITE u & |
7929 (ALL x::'A::type. IN x v & ~ IN x u --> f x = real_of_num (0::nat)) --> |
8286 (ALL x::'A::type. IN x v & ~ IN x u --> f x = real_of_num 0) --> |
7930 hollight.sum (hollight.UNION u v) f = hollight.sum u f" |
8287 hollight.sum (hollight.UNION u v) f = hollight.sum u f" |
7931 by (import hollight SUM_UNION_RZERO) |
8288 by (import hollight SUM_UNION_RZERO) |
7932 |
8289 |
7933 lemma SUM_UNION_LZERO: "ALL (f::'A::type => hollight.real) (u::'A::type => bool) |
8290 lemma SUM_UNION_LZERO: "ALL (f::'A::type => hollight.real) (u::'A::type => bool) |
7934 v::'A::type => bool. |
8291 v::'A::type => bool. |
7935 FINITE v & |
8292 FINITE v & |
7936 (ALL x::'A::type. IN x u & ~ IN x v --> f x = real_of_num (0::nat)) --> |
8293 (ALL x::'A::type. IN x u & ~ IN x v --> f x = real_of_num 0) --> |
7937 hollight.sum (hollight.UNION u v) f = hollight.sum v f" |
8294 hollight.sum (hollight.UNION u v) f = hollight.sum v f" |
7938 by (import hollight SUM_UNION_LZERO) |
8295 by (import hollight SUM_UNION_LZERO) |
7939 |
8296 |
7940 lemma SUM_RESTRICT: "ALL (f::'q_54580::type => hollight.real) s::'q_54580::type => bool. |
8297 lemma SUM_RESTRICT: "ALL (f::'q_54580::type => hollight.real) s::'q_54580::type => bool. |
7941 FINITE s --> |
8298 FINITE s --> |
7942 hollight.sum s |
8299 hollight.sum s |
7943 (%x::'q_54580::type. COND (IN x s) (f x) (real_of_num (0::nat))) = |
8300 (%x::'q_54580::type. COND (IN x s) (f x) (real_of_num 0)) = |
7944 hollight.sum s f" |
8301 hollight.sum s f" |
7945 by (import hollight SUM_RESTRICT) |
8302 by (import hollight SUM_RESTRICT) |
7946 |
8303 |
7947 lemma SUM_BOUND_GEN: "ALL (s::'A::type => bool) (t::'q_54639::type) b::hollight.real. |
8304 lemma SUM_BOUND_GEN: "ALL (s::'A::type => bool) (t::'q_54639::type) b::hollight.real. |
7948 FINITE s & |
8305 FINITE s & |
7994 lemma SUM_EQ_SUPERSET: "ALL (f::'A::type => hollight.real) (s::'A::type => bool) |
8351 lemma SUM_EQ_SUPERSET: "ALL (f::'A::type => hollight.real) (s::'A::type => bool) |
7995 t::'A::type => bool. |
8352 t::'A::type => bool. |
7996 FINITE t & |
8353 FINITE t & |
7997 SUBSET t s & |
8354 SUBSET t s & |
7998 (ALL x::'A::type. IN x t --> f x = (g::'A::type => hollight.real) x) & |
8355 (ALL x::'A::type. IN x t --> f x = (g::'A::type => hollight.real) x) & |
7999 (ALL x::'A::type. IN x s & ~ IN x t --> f x = real_of_num (0::nat)) --> |
8356 (ALL x::'A::type. IN x s & ~ IN x t --> f x = real_of_num 0) --> |
8000 hollight.sum s f = hollight.sum t g" |
8357 hollight.sum s f = hollight.sum t g" |
8001 by (import hollight SUM_EQ_SUPERSET) |
8358 by (import hollight SUM_EQ_SUPERSET) |
8002 |
8359 |
8003 lemma SUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => hollight.real) r::'q_55040::type. |
8360 lemma SUM_RESTRICT_SET: "ALL (s::'A::type => bool) (f::'A::type => hollight.real) r::'q_55040::type. |
8004 FINITE s --> |
8361 FINITE s --> |
8005 hollight.sum |
8362 hollight.sum |
8006 (GSPEC |
8363 (GSPEC |
8007 (%u::'A::type. |
8364 (%u::'A::type. |
8008 EX x::'A::type. SETSPEC u (IN x s & (P::'A::type => bool) x) x)) |
8365 EX x::'A::type. SETSPEC u (IN x s & (P::'A::type => bool) x) x)) |
8009 f = |
8366 f = |
8010 hollight.sum s (%x::'A::type. COND (P x) (f x) (real_of_num (0::nat)))" |
8367 hollight.sum s (%x::'A::type. COND (P x) (f x) (real_of_num 0))" |
8011 by (import hollight SUM_RESTRICT_SET) |
8368 by (import hollight SUM_RESTRICT_SET) |
8012 |
8369 |
8013 lemma SUM_SUM_RESTRICT: "ALL (R::'q_55171::type => 'q_55170::type => bool) |
8370 lemma SUM_SUM_RESTRICT: "ALL (R::'q_55171::type => 'q_55170::type => bool) |
8014 (f::'q_55171::type => 'q_55170::type => hollight.real) |
8371 (f::'q_55171::type => 'q_55170::type => hollight.real) |
8015 (s::'q_55171::type => bool) t::'q_55170::type => bool. |
8372 (s::'q_55171::type => bool) t::'q_55170::type => bool. |
8031 by (import hollight SUM_SUM_RESTRICT) |
8388 by (import hollight SUM_SUM_RESTRICT) |
8032 |
8389 |
8033 lemma CARD_EQ_SUM: "ALL x::'q_55192::type => bool. |
8390 lemma CARD_EQ_SUM: "ALL x::'q_55192::type => bool. |
8034 FINITE x --> |
8391 FINITE x --> |
8035 real_of_num (CARD x) = |
8392 real_of_num (CARD x) = |
8036 hollight.sum x (%x::'q_55192::type. real_of_num (NUMERAL_BIT1 (0::nat)))" |
8393 hollight.sum x (%x::'q_55192::type. real_of_num (NUMERAL_BIT1 0))" |
8037 by (import hollight CARD_EQ_SUM) |
8394 by (import hollight CARD_EQ_SUM) |
8038 |
8395 |
8039 lemma SUM_MULTICOUNT_GEN: "ALL (R::'A::type => 'B::type => bool) (s::'A::type => bool) |
8396 lemma SUM_MULTICOUNT_GEN: "ALL (R::'A::type => 'B::type => bool) (s::'A::type => bool) |
8040 (t::'B::type => bool) k::'B::type => nat. |
8397 (t::'B::type => bool) k::'B::type => nat. |
8041 FINITE s & |
8398 FINITE s & |
8096 |
8453 |
8097 lemma SUM_SUBSET: "ALL (u::'A::type => bool) (v::'A::type => bool) |
8454 lemma SUM_SUBSET: "ALL (u::'A::type => bool) (v::'A::type => bool) |
8098 f::'A::type => hollight.real. |
8455 f::'A::type => hollight.real. |
8099 FINITE u & |
8456 FINITE u & |
8100 FINITE v & |
8457 FINITE v & |
8101 (ALL x::'A::type. |
8458 (ALL x::'A::type. IN x (DIFF u v) --> real_le (f x) (real_of_num 0)) & |
8102 IN x (DIFF u v) --> real_le (f x) (real_of_num (0::nat))) & |
8459 (ALL x::'A::type. IN x (DIFF v u) --> real_le (real_of_num 0) (f x)) --> |
8103 (ALL x::'A::type. |
|
8104 IN x (DIFF v u) --> real_le (real_of_num (0::nat)) (f x)) --> |
|
8105 real_le (hollight.sum u f) (hollight.sum v f)" |
8460 real_le (hollight.sum u f) (hollight.sum v f)" |
8106 by (import hollight SUM_SUBSET) |
8461 by (import hollight SUM_SUBSET) |
8107 |
8462 |
8108 lemma SUM_SUBSET_SIMPLE: "ALL (u::'A::type => bool) (v::'A::type => bool) |
8463 lemma SUM_SUBSET_SIMPLE: "ALL (u::'A::type => bool) (v::'A::type => bool) |
8109 f::'A::type => hollight.real. |
8464 f::'A::type => hollight.real. |
8110 FINITE v & |
8465 FINITE v & |
8111 SUBSET u v & |
8466 SUBSET u v & |
8112 (ALL x::'A::type. |
8467 (ALL x::'A::type. IN x (DIFF v u) --> real_le (real_of_num 0) (f x)) --> |
8113 IN x (DIFF v u) --> real_le (real_of_num (0::nat)) (f x)) --> |
|
8114 real_le (hollight.sum u f) (hollight.sum v f)" |
8468 real_le (hollight.sum u f) (hollight.sum v f)" |
8115 by (import hollight SUM_SUBSET_SIMPLE) |
8469 by (import hollight SUM_SUBSET_SIMPLE) |
8116 |
8470 |
8117 lemma SUM_ADD_NUMSEG: "ALL (x::nat => hollight.real) (xa::nat => hollight.real) (xb::nat) xc::nat. |
8471 lemma SUM_ADD_NUMSEG: "ALL (x::nat => hollight.real) (xa::nat => hollight.real) (xb::nat) xc::nat. |
8118 hollight.sum (dotdot xb xc) (%i::nat. real_add (x i) (xa i)) = |
8472 hollight.sum (dotdot xb xc) (%i::nat. real_add (x i) (xa i)) = |
8149 (hollight.sum (dotdot xa xb) (%i::nat. real_abs (x i)))" |
8503 (hollight.sum (dotdot xa xb) (%i::nat. real_abs (x i)))" |
8150 by (import hollight SUM_ABS_NUMSEG) |
8504 by (import hollight SUM_ABS_NUMSEG) |
8151 |
8505 |
8152 lemma SUM_CONST_NUMSEG: "ALL (x::hollight.real) (xa::nat) xb::nat. |
8506 lemma SUM_CONST_NUMSEG: "ALL (x::hollight.real) (xa::nat) xb::nat. |
8153 hollight.sum (dotdot xa xb) (%n::nat. x) = |
8507 hollight.sum (dotdot xa xb) (%n::nat. x) = |
8154 real_mul (real_of_num (xb + NUMERAL_BIT1 (0::nat) - xa)) x" |
8508 real_mul (real_of_num (xb + NUMERAL_BIT1 0 - xa)) x" |
8155 by (import hollight SUM_CONST_NUMSEG) |
8509 by (import hollight SUM_CONST_NUMSEG) |
8156 |
8510 |
8157 lemma SUM_EQ_0_NUMSEG: "ALL (x::nat => hollight.real) xa::'q_56115::type. |
8511 lemma SUM_EQ_0_NUMSEG: "ALL (x::nat => hollight.real) xa::'q_56115::type. |
8158 (ALL i::nat. |
8512 (ALL i::nat. <= (m::nat) i & <= i (n::nat) --> x i = real_of_num 0) --> |
8159 <= (m::nat) i & <= i (n::nat) --> x i = real_of_num (0::nat)) --> |
8513 hollight.sum (dotdot m n) x = real_of_num 0" |
8160 hollight.sum (dotdot m n) x = real_of_num (0::nat)" |
|
8161 by (import hollight SUM_EQ_0_NUMSEG) |
8514 by (import hollight SUM_EQ_0_NUMSEG) |
8162 |
8515 |
8163 lemma SUM_TRIV_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
8516 lemma SUM_TRIV_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
8164 < n m --> hollight.sum (dotdot m n) f = real_of_num (0::nat)" |
8517 < n m --> hollight.sum (dotdot m n) f = real_of_num 0" |
8165 by (import hollight SUM_TRIV_NUMSEG) |
8518 by (import hollight SUM_TRIV_NUMSEG) |
8166 |
8519 |
8167 lemma SUM_POS_LE_NUMSEG: "ALL (x::nat) (xa::nat) xb::nat => hollight.real. |
8520 lemma SUM_POS_LE_NUMSEG: "ALL (x::nat) (xa::nat) xb::nat => hollight.real. |
8168 (ALL p::nat. |
8521 (ALL p::nat. <= x p & <= p xa --> real_le (real_of_num 0) (xb p)) --> |
8169 <= x p & <= p xa --> real_le (real_of_num (0::nat)) (xb p)) --> |
8522 real_le (real_of_num 0) (hollight.sum (dotdot x xa) xb)" |
8170 real_le (real_of_num (0::nat)) (hollight.sum (dotdot x xa) xb)" |
|
8171 by (import hollight SUM_POS_LE_NUMSEG) |
8523 by (import hollight SUM_POS_LE_NUMSEG) |
8172 |
8524 |
8173 lemma SUM_POS_EQ_0_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
8525 lemma SUM_POS_EQ_0_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
8174 (ALL p::nat. <= m p & <= p n --> real_le (real_of_num (0::nat)) (f p)) & |
8526 (ALL p::nat. <= m p & <= p n --> real_le (real_of_num 0) (f p)) & |
8175 hollight.sum (dotdot m n) f = real_of_num (0::nat) --> |
8527 hollight.sum (dotdot m n) f = real_of_num 0 --> |
8176 (ALL p::nat. <= m p & <= p n --> f p = real_of_num (0::nat))" |
8528 (ALL p::nat. <= m p & <= p n --> f p = real_of_num 0)" |
8177 by (import hollight SUM_POS_EQ_0_NUMSEG) |
8529 by (import hollight SUM_POS_EQ_0_NUMSEG) |
8178 |
8530 |
8179 lemma SUM_SING_NUMSEG: "ALL (x::nat => hollight.real) xa::nat. hollight.sum (dotdot xa xa) x = x xa" |
8531 lemma SUM_SING_NUMSEG: "ALL (x::nat => hollight.real) xa::nat. hollight.sum (dotdot xa xa) x = x xa" |
8180 by (import hollight SUM_SING_NUMSEG) |
8532 by (import hollight SUM_SING_NUMSEG) |
8181 |
8533 |
8182 lemma SUM_CLAUSES_NUMSEG: "(ALL x::nat. |
8534 lemma SUM_CLAUSES_NUMSEG: "(ALL x::nat. |
8183 hollight.sum (dotdot x (0::nat)) (f::nat => hollight.real) = |
8535 hollight.sum (dotdot x 0) (f::nat => hollight.real) = |
8184 COND (x = (0::nat)) (f (0::nat)) (real_of_num (0::nat))) & |
8536 COND (x = 0) (f 0) (real_of_num 0)) & |
8185 (ALL (x::nat) xa::nat. |
8537 (ALL (x::nat) xa::nat. |
8186 hollight.sum (dotdot x (Suc xa)) f = |
8538 hollight.sum (dotdot x (Suc xa)) f = |
8187 COND (<= x (Suc xa)) |
8539 COND (<= x (Suc xa)) |
8188 (real_add (hollight.sum (dotdot x xa) f) (f (Suc xa))) |
8540 (real_add (hollight.sum (dotdot x xa) f) (f (Suc xa))) |
8189 (hollight.sum (dotdot x xa) f))" |
8541 (hollight.sum (dotdot x xa) f))" |
8194 hollight.sum (dotdot c d) |
8546 hollight.sum (dotdot c d) |
8195 (%j::nat. hollight.sum (dotdot a b) (%i::nat. f i j))" |
8547 (%j::nat. hollight.sum (dotdot a b) (%i::nat. f i j))" |
8196 by (import hollight SUM_SWAP_NUMSEG) |
8548 by (import hollight SUM_SWAP_NUMSEG) |
8197 |
8549 |
8198 lemma SUM_ADD_SPLIT: "ALL (x::nat => hollight.real) (xa::nat) (xb::nat) xc::nat. |
8550 lemma SUM_ADD_SPLIT: "ALL (x::nat => hollight.real) (xa::nat) (xb::nat) xc::nat. |
8199 <= xa (xb + NUMERAL_BIT1 (0::nat)) --> |
8551 <= xa (xb + NUMERAL_BIT1 0) --> |
8200 hollight.sum (dotdot xa (xb + xc)) x = |
8552 hollight.sum (dotdot xa (xb + xc)) x = |
8201 real_add (hollight.sum (dotdot xa xb) x) |
8553 real_add (hollight.sum (dotdot xa xb) x) |
8202 (hollight.sum (dotdot (xb + NUMERAL_BIT1 (0::nat)) (xb + xc)) x)" |
8554 (hollight.sum (dotdot (xb + NUMERAL_BIT1 0) (xb + xc)) x)" |
8203 by (import hollight SUM_ADD_SPLIT) |
8555 by (import hollight SUM_ADD_SPLIT) |
8204 |
8556 |
8205 lemma SUM_OFFSET_0: "ALL (x::nat => hollight.real) (xa::nat) xb::nat. |
8557 lemma SUM_OFFSET_0: "ALL (x::nat => hollight.real) (xa::nat) xb::nat. |
8206 <= xa xb --> |
8558 <= xa xb --> |
8207 hollight.sum (dotdot xa xb) x = |
8559 hollight.sum (dotdot xa xb) x = |
8208 hollight.sum (dotdot (0::nat) (xb - xa)) (%i::nat. x (i + xa))" |
8560 hollight.sum (dotdot 0 (xb - xa)) (%i::nat. x (i + xa))" |
8209 by (import hollight SUM_OFFSET_0) |
8561 by (import hollight SUM_OFFSET_0) |
8210 |
8562 |
8211 lemma SUM_CLAUSES_LEFT: "ALL (x::nat => hollight.real) (xa::nat) xb::nat. |
8563 lemma SUM_CLAUSES_LEFT: "ALL (x::nat => hollight.real) (xa::nat) xb::nat. |
8212 <= xa xb --> |
8564 <= xa xb --> |
8213 hollight.sum (dotdot xa xb) x = |
8565 hollight.sum (dotdot xa xb) x = |
8214 real_add (x xa) (hollight.sum (dotdot (xa + NUMERAL_BIT1 (0::nat)) xb) x)" |
8566 real_add (x xa) (hollight.sum (dotdot (xa + NUMERAL_BIT1 0) xb) x)" |
8215 by (import hollight SUM_CLAUSES_LEFT) |
8567 by (import hollight SUM_CLAUSES_LEFT) |
8216 |
8568 |
8217 lemma SUM_CLAUSES_RIGHT: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
8569 lemma SUM_CLAUSES_RIGHT: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
8218 < (0::nat) n & <= m n --> |
8570 < 0 n & <= m n --> |
8219 hollight.sum (dotdot m n) f = |
8571 hollight.sum (dotdot m n) f = |
8220 real_add (hollight.sum (dotdot m (n - NUMERAL_BIT1 (0::nat))) f) (f n)" |
8572 real_add (hollight.sum (dotdot m (n - NUMERAL_BIT1 0)) f) (f n)" |
8221 by (import hollight SUM_CLAUSES_RIGHT) |
8573 by (import hollight SUM_CLAUSES_RIGHT) |
8222 |
8574 |
8223 lemma REAL_OF_NUM_SUM_NUMSEG: "ALL (x::nat => nat) (xa::nat) xb::nat. |
8575 lemma REAL_OF_NUM_SUM_NUMSEG: "ALL (x::nat => nat) (xa::nat) xb::nat. |
8224 real_of_num (nsum (dotdot xa xb) x) = |
8576 real_of_num (nsum (dotdot xa xb) x) = |
8225 hollight.sum (dotdot xa xb) (%i::nat. real_of_num (x i))" |
8577 hollight.sum (dotdot xa xb) (%i::nat. real_of_num (x i))" |
8226 by (import hollight REAL_OF_NUM_SUM_NUMSEG) |
8578 by (import hollight REAL_OF_NUM_SUM_NUMSEG) |
8227 |
8579 |
8228 constdefs |
8580 constdefs |
8229 CASEWISE :: "(('q_56787::type => 'q_56791::type) * |
8581 CASEWISE :: "(('q_56787 => 'q_56791) * ('q_56792 => 'q_56787 => 'q_56751)) hollight.list |
8230 ('q_56792::type => 'q_56787::type => 'q_56751::type)) hollight.list |
8582 => 'q_56792 => 'q_56791 => 'q_56751" |
8231 => 'q_56792::type => 'q_56791::type => 'q_56751::type" |
|
8232 "CASEWISE == |
8583 "CASEWISE == |
8233 SOME CASEWISE::(('q_56787::type => 'q_56791::type) * |
8584 SOME CASEWISE::(('q_56787::type => 'q_56791::type) * |
8234 ('q_56792::type |
8585 ('q_56792::type |
8235 => 'q_56787::type => 'q_56751::type)) hollight.list |
8586 => 'q_56787::type => 'q_56751::type)) hollight.list |
8236 => 'q_56792::type => 'q_56791::type => 'q_56751::type. |
8587 => 'q_56792::type => 'q_56791::type => 'q_56751::type. |
8344 (ALL xb::'P::type. CASEWISE x xa (s xb) = t xa xb))) |
8695 (ALL xb::'P::type. CASEWISE x xa (s xb) = t xa xb))) |
8345 x" |
8696 x" |
8346 by (import hollight CASEWISE_WORKS) |
8697 by (import hollight CASEWISE_WORKS) |
8347 |
8698 |
8348 constdefs |
8699 constdefs |
8349 admissible :: "('q_57089::type => 'q_57082::type => bool) |
8700 admissible :: "('q_57089 => 'q_57082 => bool) |
8350 => (('q_57089::type => 'q_57085::type) => 'q_57095::type => bool) |
8701 => (('q_57089 => 'q_57085) => 'q_57095 => bool) |
8351 => ('q_57095::type => 'q_57082::type) |
8702 => ('q_57095 => 'q_57082) |
8352 => (('q_57089::type => 'q_57085::type) |
8703 => (('q_57089 => 'q_57085) => 'q_57095 => 'q_57090) => bool" |
8353 => 'q_57095::type => 'q_57090::type) |
|
8354 => bool" |
|
8355 "admissible == |
8704 "admissible == |
8356 %(u::'q_57089::type => 'q_57082::type => bool) |
8705 %(u::'q_57089::type => 'q_57082::type => bool) |
8357 (ua::('q_57089::type => 'q_57085::type) => 'q_57095::type => bool) |
8706 (ua::('q_57089::type => 'q_57085::type) => 'q_57095::type => bool) |
8358 (ub::'q_57095::type => 'q_57082::type) |
8707 (ub::'q_57095::type => 'q_57082::type) |
8359 uc::('q_57089::type => 'q_57085::type) |
8708 uc::('q_57089::type => 'q_57085::type) |
8376 ua g a & (ALL z::'q_57089::type. u z (ub a) --> f z = g z) --> |
8725 ua g a & (ALL z::'q_57089::type. u z (ub a) --> f z = g z) --> |
8377 uc f a = uc g a)" |
8726 uc f a = uc g a)" |
8378 by (import hollight DEF_admissible) |
8727 by (import hollight DEF_admissible) |
8379 |
8728 |
8380 constdefs |
8729 constdefs |
8381 tailadmissible :: "('A::type => 'A::type => bool) |
8730 tailadmissible :: "('A => 'A => bool) |
8382 => (('A::type => 'B::type) => 'P::type => bool) |
8731 => (('A => 'B) => 'P => bool) |
8383 => ('P::type => 'A::type) |
8732 => ('P => 'A) => (('A => 'B) => 'P => 'B) => bool" |
8384 => (('A::type => 'B::type) => 'P::type => 'B::type) => bool" |
|
8385 "tailadmissible == |
8733 "tailadmissible == |
8386 %(u::'A::type => 'A::type => bool) |
8734 %(u::'A::type => 'A::type => bool) |
8387 (ua::('A::type => 'B::type) => 'P::type => bool) |
8735 (ua::('A::type => 'B::type) => 'P::type => bool) |
8388 (ub::'P::type => 'A::type) |
8736 (ub::'P::type => 'A::type) |
8389 uc::('A::type => 'B::type) => 'P::type => 'B::type. |
8737 uc::('A::type => 'B::type) => 'P::type => 'B::type. |
8414 (ALL (f::'A::type => 'B::type) a::'P::type. |
8762 (ALL (f::'A::type => 'B::type) a::'P::type. |
8415 ua f a --> uc f a = COND (P f a) (f (G f a)) (H f a)))" |
8763 ua f a --> uc f a = COND (P f a) (f (G f a)) (H f a)))" |
8416 by (import hollight DEF_tailadmissible) |
8764 by (import hollight DEF_tailadmissible) |
8417 |
8765 |
8418 constdefs |
8766 constdefs |
8419 superadmissible :: "('q_57239::type => 'q_57239::type => bool) |
8767 superadmissible :: "('q_57239 => 'q_57239 => bool) |
8420 => (('q_57239::type => 'q_57241::type) => 'q_57247::type => bool) |
8768 => (('q_57239 => 'q_57241) => 'q_57247 => bool) |
8421 => ('q_57247::type => 'q_57239::type) |
8769 => ('q_57247 => 'q_57239) |
8422 => (('q_57239::type => 'q_57241::type) |
8770 => (('q_57239 => 'q_57241) => 'q_57247 => 'q_57241) => bool" |
8423 => 'q_57247::type => 'q_57241::type) |
|
8424 => bool" |
|
8425 "superadmissible == |
8771 "superadmissible == |
8426 %(u::'q_57239::type => 'q_57239::type => bool) |
8772 %(u::'q_57239::type => 'q_57239::type => bool) |
8427 (ua::('q_57239::type => 'q_57241::type) => 'q_57247::type => bool) |
8773 (ua::('q_57239::type => 'q_57241::type) => 'q_57247::type => bool) |
8428 (ub::'q_57247::type => 'q_57239::type) |
8774 (ub::'q_57247::type => 'q_57239::type) |
8429 uc::('q_57239::type => 'q_57241::type) |
8775 uc::('q_57239::type => 'q_57241::type) |
8693 by (import hollight SUPERADMISSIBLE_T) |
9039 by (import hollight SUPERADMISSIBLE_T) |
8694 |
9040 |
8695 lemma SUB_SUB: "ALL (x::nat) xa::nat. <= xa x --> (ALL a::nat. a - (x - xa) = a + xa - x)" |
9041 lemma SUB_SUB: "ALL (x::nat) xa::nat. <= xa x --> (ALL a::nat. a - (x - xa) = a + xa - x)" |
8696 by (import hollight SUB_SUB) |
9042 by (import hollight SUB_SUB) |
8697 |
9043 |
8698 lemma SUB_OLD: "(ALL m::nat. (0::nat) - m = (0::nat)) & |
9044 lemma SUB_OLD: "(ALL m::nat. 0 - m = 0) & |
8699 (ALL (m::nat) n::nat. Suc m - n = COND (< m n) (0::nat) (Suc (m - n)))" |
9045 (ALL (m::nat) n::nat. Suc m - n = COND (< m n) 0 (Suc (m - n)))" |
8700 by (import hollight SUB_OLD) |
9046 by (import hollight SUB_OLD) |
8701 |
9047 |
8702 lemma real_le: "ALL (x::hollight.real) xa::hollight.real. real_le x xa = (~ real_lt xa x)" |
9048 lemma real_le: "ALL (x::hollight.real) xa::hollight.real. real_le x xa = (~ real_lt xa x)" |
8703 by (import hollight real_le) |
9049 by (import hollight real_le) |
8704 |
9050 |
8705 lemma REAL_MUL_RID: "ALL x::hollight.real. real_mul x (real_of_num (NUMERAL_BIT1 (0::nat))) = x" |
9051 lemma REAL_MUL_RID: "ALL x::hollight.real. real_mul x (real_of_num (NUMERAL_BIT1 0)) = x" |
8706 by (import hollight REAL_MUL_RID) |
9052 by (import hollight REAL_MUL_RID) |
8707 |
9053 |
8708 lemma REAL_MUL_RINV: "ALL x::hollight.real. |
9054 lemma REAL_MUL_RINV: "ALL x::hollight.real. |
8709 x ~= real_of_num (0::nat) --> |
9055 x ~= real_of_num 0 --> |
8710 real_mul x (real_inv x) = real_of_num (NUMERAL_BIT1 (0::nat))" |
9056 real_mul x (real_inv x) = real_of_num (NUMERAL_BIT1 0)" |
8711 by (import hollight REAL_MUL_RINV) |
9057 by (import hollight REAL_MUL_RINV) |
8712 |
9058 |
8713 lemma REAL_RDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9059 lemma REAL_RDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8714 real_mul (real_add x y) z = real_add (real_mul x z) (real_mul y z)" |
9060 real_mul (real_add x y) z = real_add (real_mul x z) (real_mul y z)" |
8715 by (import hollight REAL_RDISTRIB) |
9061 by (import hollight REAL_RDISTRIB) |
8721 lemma REAL_EQ_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9067 lemma REAL_EQ_RADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8722 (real_add x z = real_add y z) = (x = y)" |
9068 (real_add x z = real_add y z) = (x = y)" |
8723 by (import hollight REAL_EQ_RADD) |
9069 by (import hollight REAL_EQ_RADD) |
8724 |
9070 |
8725 lemma REAL_ADD_LID_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9071 lemma REAL_ADD_LID_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
8726 (real_add x y = y) = (x = real_of_num (0::nat))" |
9072 (real_add x y = y) = (x = real_of_num 0)" |
8727 by (import hollight REAL_ADD_LID_UNIQ) |
9073 by (import hollight REAL_ADD_LID_UNIQ) |
8728 |
9074 |
8729 lemma REAL_ADD_RID_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9075 lemma REAL_ADD_RID_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
8730 (real_add x y = x) = (y = real_of_num (0::nat))" |
9076 (real_add x y = x) = (y = real_of_num 0)" |
8731 by (import hollight REAL_ADD_RID_UNIQ) |
9077 by (import hollight REAL_ADD_RID_UNIQ) |
8732 |
9078 |
8733 lemma REAL_LNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9079 lemma REAL_LNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
8734 (real_add x y = real_of_num (0::nat)) = (x = real_neg y)" |
9080 (real_add x y = real_of_num 0) = (x = real_neg y)" |
8735 by (import hollight REAL_LNEG_UNIQ) |
9081 by (import hollight REAL_LNEG_UNIQ) |
8736 |
9082 |
8737 lemma REAL_RNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9083 lemma REAL_RNEG_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
8738 (real_add x y = real_of_num (0::nat)) = (y = real_neg x)" |
9084 (real_add x y = real_of_num 0) = (y = real_neg x)" |
8739 by (import hollight REAL_RNEG_UNIQ) |
9085 by (import hollight REAL_RNEG_UNIQ) |
8740 |
9086 |
8741 lemma REAL_NEG_ADD: "ALL (x::hollight.real) y::hollight.real. |
9087 lemma REAL_NEG_ADD: "ALL (x::hollight.real) y::hollight.real. |
8742 real_neg (real_add x y) = real_add (real_neg x) (real_neg y)" |
9088 real_neg (real_add x y) = real_add (real_neg x) (real_neg y)" |
8743 by (import hollight REAL_NEG_ADD) |
9089 by (import hollight REAL_NEG_ADD) |
8744 |
9090 |
8745 lemma REAL_MUL_LZERO: "ALL x::hollight.real. |
9091 lemma REAL_MUL_LZERO: "ALL x::hollight.real. real_mul (real_of_num 0) x = real_of_num 0" |
8746 real_mul (real_of_num (0::nat)) x = real_of_num (0::nat)" |
|
8747 by (import hollight REAL_MUL_LZERO) |
9092 by (import hollight REAL_MUL_LZERO) |
8748 |
9093 |
8749 lemma REAL_MUL_RZERO: "ALL x::hollight.real. |
9094 lemma REAL_MUL_RZERO: "ALL x::hollight.real. real_mul x (real_of_num 0) = real_of_num 0" |
8750 real_mul x (real_of_num (0::nat)) = real_of_num (0::nat)" |
|
8751 by (import hollight REAL_MUL_RZERO) |
9095 by (import hollight REAL_MUL_RZERO) |
8752 |
9096 |
8753 lemma REAL_NEG_LMUL: "ALL (x::hollight.real) y::hollight.real. |
9097 lemma REAL_NEG_LMUL: "ALL (x::hollight.real) y::hollight.real. |
8754 real_neg (real_mul x y) = real_mul (real_neg x) y" |
9098 real_neg (real_mul x y) = real_mul (real_neg x) y" |
8755 by (import hollight REAL_NEG_LMUL) |
9099 by (import hollight REAL_NEG_LMUL) |
8805 lemma REAL_LE_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9149 lemma REAL_LE_TRANS: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8806 real_le x y & real_le y z --> real_le x z" |
9150 real_le x y & real_le y z --> real_le x z" |
8807 by (import hollight REAL_LE_TRANS) |
9151 by (import hollight REAL_LE_TRANS) |
8808 |
9152 |
8809 lemma REAL_NEG_LT0: "ALL x::hollight.real. |
9153 lemma REAL_NEG_LT0: "ALL x::hollight.real. |
8810 real_lt (real_neg x) (real_of_num (0::nat)) = |
9154 real_lt (real_neg x) (real_of_num 0) = real_lt (real_of_num 0) x" |
8811 real_lt (real_of_num (0::nat)) x" |
|
8812 by (import hollight REAL_NEG_LT0) |
9155 by (import hollight REAL_NEG_LT0) |
8813 |
9156 |
8814 lemma REAL_NEG_GT0: "ALL x::hollight.real. |
9157 lemma REAL_NEG_GT0: "ALL x::hollight.real. |
8815 real_lt (real_of_num (0::nat)) (real_neg x) = |
9158 real_lt (real_of_num 0) (real_neg x) = real_lt x (real_of_num 0)" |
8816 real_lt x (real_of_num (0::nat))" |
|
8817 by (import hollight REAL_NEG_GT0) |
9159 by (import hollight REAL_NEG_GT0) |
8818 |
9160 |
8819 lemma REAL_NEG_LE0: "ALL x::hollight.real. |
9161 lemma REAL_NEG_LE0: "ALL x::hollight.real. |
8820 real_le (real_neg x) (real_of_num (0::nat)) = |
9162 real_le (real_neg x) (real_of_num 0) = real_le (real_of_num 0) x" |
8821 real_le (real_of_num (0::nat)) x" |
|
8822 by (import hollight REAL_NEG_LE0) |
9163 by (import hollight REAL_NEG_LE0) |
8823 |
9164 |
8824 lemma REAL_NEG_GE0: "ALL x::hollight.real. |
9165 lemma REAL_NEG_GE0: "ALL x::hollight.real. |
8825 real_le (real_of_num (0::nat)) (real_neg x) = |
9166 real_le (real_of_num 0) (real_neg x) = real_le x (real_of_num 0)" |
8826 real_le x (real_of_num (0::nat))" |
|
8827 by (import hollight REAL_NEG_GE0) |
9167 by (import hollight REAL_NEG_GE0) |
8828 |
9168 |
8829 lemma REAL_LT_NEGTOTAL: "ALL x::hollight.real. |
9169 lemma REAL_LT_NEGTOTAL: "ALL x::hollight.real. |
8830 x = real_of_num (0::nat) | |
9170 x = real_of_num 0 | |
8831 real_lt (real_of_num (0::nat)) x | |
9171 real_lt (real_of_num 0) x | real_lt (real_of_num 0) (real_neg x)" |
8832 real_lt (real_of_num (0::nat)) (real_neg x)" |
|
8833 by (import hollight REAL_LT_NEGTOTAL) |
9172 by (import hollight REAL_LT_NEGTOTAL) |
8834 |
9173 |
8835 lemma REAL_LE_NEGTOTAL: "ALL x::hollight.real. |
9174 lemma REAL_LE_NEGTOTAL: "ALL x::hollight.real. |
8836 real_le (real_of_num (0::nat)) x | |
9175 real_le (real_of_num 0) x | real_le (real_of_num 0) (real_neg x)" |
8837 real_le (real_of_num (0::nat)) (real_neg x)" |
|
8838 by (import hollight REAL_LE_NEGTOTAL) |
9176 by (import hollight REAL_LE_NEGTOTAL) |
8839 |
9177 |
8840 lemma REAL_LE_MUL: "ALL (x::hollight.real) y::hollight.real. |
9178 lemma REAL_LE_MUL: "ALL (x::hollight.real) y::hollight.real. |
8841 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) y --> |
9179 real_le (real_of_num 0) x & real_le (real_of_num 0) y --> |
8842 real_le (real_of_num (0::nat)) (real_mul x y)" |
9180 real_le (real_of_num 0) (real_mul x y)" |
8843 by (import hollight REAL_LE_MUL) |
9181 by (import hollight REAL_LE_MUL) |
8844 |
9182 |
8845 lemma REAL_LE_SQUARE: "ALL x::hollight.real. real_le (real_of_num (0::nat)) (real_mul x x)" |
9183 lemma REAL_LE_SQUARE: "ALL x::hollight.real. real_le (real_of_num 0) (real_mul x x)" |
8846 by (import hollight REAL_LE_SQUARE) |
9184 by (import hollight REAL_LE_SQUARE) |
8847 |
9185 |
8848 lemma REAL_LT_01: "real_lt (real_of_num (0::nat)) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
9186 lemma REAL_LT_01: "real_lt (real_of_num 0) (real_of_num (NUMERAL_BIT1 0))" |
8849 by (import hollight REAL_LT_01) |
9187 by (import hollight REAL_LT_01) |
8850 |
9188 |
8851 lemma REAL_LE_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9189 lemma REAL_LE_LADD: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8852 real_le (real_add x y) (real_add x z) = real_le y z" |
9190 real_le (real_add x y) (real_add x z) = real_le y z" |
8853 by (import hollight REAL_LE_LADD) |
9191 by (import hollight REAL_LE_LADD) |
8860 z::hollight.real. |
9198 z::hollight.real. |
8861 real_lt w x & real_lt y z --> real_lt (real_add w y) (real_add x z)" |
9199 real_lt w x & real_lt y z --> real_lt (real_add w y) (real_add x z)" |
8862 by (import hollight REAL_LT_ADD2) |
9200 by (import hollight REAL_LT_ADD2) |
8863 |
9201 |
8864 lemma REAL_LT_ADD: "ALL (x::hollight.real) y::hollight.real. |
9202 lemma REAL_LT_ADD: "ALL (x::hollight.real) y::hollight.real. |
8865 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
9203 real_lt (real_of_num 0) x & real_lt (real_of_num 0) y --> |
8866 real_lt (real_of_num (0::nat)) (real_add x y)" |
9204 real_lt (real_of_num 0) (real_add x y)" |
8867 by (import hollight REAL_LT_ADD) |
9205 by (import hollight REAL_LT_ADD) |
8868 |
9206 |
8869 lemma REAL_LT_ADDNEG: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9207 lemma REAL_LT_ADDNEG: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8870 real_lt y (real_add x (real_neg z)) = real_lt (real_add y z) x" |
9208 real_lt y (real_add x (real_neg z)) = real_lt (real_add y z) x" |
8871 by (import hollight REAL_LT_ADDNEG) |
9209 by (import hollight REAL_LT_ADDNEG) |
8873 lemma REAL_LT_ADDNEG2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9211 lemma REAL_LT_ADDNEG2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8874 real_lt (real_add x (real_neg y)) z = real_lt x (real_add z y)" |
9212 real_lt (real_add x (real_neg y)) z = real_lt x (real_add z y)" |
8875 by (import hollight REAL_LT_ADDNEG2) |
9213 by (import hollight REAL_LT_ADDNEG2) |
8876 |
9214 |
8877 lemma REAL_LT_ADD1: "ALL (x::hollight.real) y::hollight.real. |
9215 lemma REAL_LT_ADD1: "ALL (x::hollight.real) y::hollight.real. |
8878 real_le x y --> |
9216 real_le x y --> real_lt x (real_add y (real_of_num (NUMERAL_BIT1 0)))" |
8879 real_lt x (real_add y (real_of_num (NUMERAL_BIT1 (0::nat))))" |
|
8880 by (import hollight REAL_LT_ADD1) |
9217 by (import hollight REAL_LT_ADD1) |
8881 |
9218 |
8882 lemma REAL_SUB_ADD: "ALL (x::hollight.real) y::hollight.real. real_add (real_sub x y) y = x" |
9219 lemma REAL_SUB_ADD: "ALL (x::hollight.real) y::hollight.real. real_add (real_sub x y) y = x" |
8883 by (import hollight REAL_SUB_ADD) |
9220 by (import hollight REAL_SUB_ADD) |
8884 |
9221 |
8885 lemma REAL_SUB_ADD2: "ALL (x::hollight.real) y::hollight.real. real_add y (real_sub x y) = x" |
9222 lemma REAL_SUB_ADD2: "ALL (x::hollight.real) y::hollight.real. real_add y (real_sub x y) = x" |
8886 by (import hollight REAL_SUB_ADD2) |
9223 by (import hollight REAL_SUB_ADD2) |
8887 |
9224 |
8888 lemma REAL_SUB_REFL: "ALL x::hollight.real. real_sub x x = real_of_num (0::nat)" |
9225 lemma REAL_SUB_REFL: "ALL x::hollight.real. real_sub x x = real_of_num 0" |
8889 by (import hollight REAL_SUB_REFL) |
9226 by (import hollight REAL_SUB_REFL) |
8890 |
9227 |
8891 lemma REAL_SUB_0: "ALL (x::hollight.real) y::hollight.real. |
9228 lemma REAL_SUB_0: "ALL (x::hollight.real) y::hollight.real. |
8892 (real_sub x y = real_of_num (0::nat)) = (x = y)" |
9229 (real_sub x y = real_of_num 0) = (x = y)" |
8893 by (import hollight REAL_SUB_0) |
9230 by (import hollight REAL_SUB_0) |
8894 |
9231 |
8895 lemma REAL_LE_DOUBLE: "ALL x::hollight.real. |
9232 lemma REAL_LE_DOUBLE: "ALL x::hollight.real. |
8896 real_le (real_of_num (0::nat)) (real_add x x) = |
9233 real_le (real_of_num 0) (real_add x x) = real_le (real_of_num 0) x" |
8897 real_le (real_of_num (0::nat)) x" |
|
8898 by (import hollight REAL_LE_DOUBLE) |
9234 by (import hollight REAL_LE_DOUBLE) |
8899 |
9235 |
8900 lemma REAL_LE_NEGL: "ALL x::hollight.real. |
9236 lemma REAL_LE_NEGL: "ALL x::hollight.real. real_le (real_neg x) x = real_le (real_of_num 0) x" |
8901 real_le (real_neg x) x = real_le (real_of_num (0::nat)) x" |
|
8902 by (import hollight REAL_LE_NEGL) |
9237 by (import hollight REAL_LE_NEGL) |
8903 |
9238 |
8904 lemma REAL_LE_NEGR: "ALL x::hollight.real. |
9239 lemma REAL_LE_NEGR: "ALL x::hollight.real. real_le x (real_neg x) = real_le x (real_of_num 0)" |
8905 real_le x (real_neg x) = real_le x (real_of_num (0::nat))" |
|
8906 by (import hollight REAL_LE_NEGR) |
9240 by (import hollight REAL_LE_NEGR) |
8907 |
9241 |
8908 lemma REAL_NEG_EQ0: "ALL x::hollight.real. |
9242 lemma REAL_NEG_EQ0: "ALL x::hollight.real. (real_neg x = real_of_num 0) = (x = real_of_num 0)" |
8909 (real_neg x = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
|
8910 by (import hollight REAL_NEG_EQ0) |
9243 by (import hollight REAL_NEG_EQ0) |
8911 |
9244 |
8912 lemma REAL_NEG_0: "real_neg (real_of_num (0::nat)) = real_of_num (0::nat)" |
9245 lemma REAL_NEG_0: "real_neg (real_of_num 0) = real_of_num 0" |
8913 by (import hollight REAL_NEG_0) |
9246 by (import hollight REAL_NEG_0) |
8914 |
9247 |
8915 lemma REAL_NEG_SUB: "ALL (x::hollight.real) y::hollight.real. |
9248 lemma REAL_NEG_SUB: "ALL (x::hollight.real) y::hollight.real. |
8916 real_neg (real_sub x y) = real_sub y x" |
9249 real_neg (real_sub x y) = real_sub y x" |
8917 by (import hollight REAL_NEG_SUB) |
9250 by (import hollight REAL_NEG_SUB) |
8918 |
9251 |
8919 lemma REAL_SUB_LT: "ALL (x::hollight.real) y::hollight.real. |
9252 lemma REAL_SUB_LT: "ALL (x::hollight.real) y::hollight.real. |
8920 real_lt (real_of_num (0::nat)) (real_sub x y) = real_lt y x" |
9253 real_lt (real_of_num 0) (real_sub x y) = real_lt y x" |
8921 by (import hollight REAL_SUB_LT) |
9254 by (import hollight REAL_SUB_LT) |
8922 |
9255 |
8923 lemma REAL_SUB_LE: "ALL (x::hollight.real) y::hollight.real. |
9256 lemma REAL_SUB_LE: "ALL (x::hollight.real) y::hollight.real. |
8924 real_le (real_of_num (0::nat)) (real_sub x y) = real_le y x" |
9257 real_le (real_of_num 0) (real_sub x y) = real_le y x" |
8925 by (import hollight REAL_SUB_LE) |
9258 by (import hollight REAL_SUB_LE) |
8926 |
9259 |
8927 lemma REAL_EQ_LMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9260 lemma REAL_EQ_LMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8928 (real_mul x y = real_mul x z) = (x = real_of_num (0::nat) | y = z)" |
9261 (real_mul x y = real_mul x z) = (x = real_of_num 0 | y = z)" |
8929 by (import hollight REAL_EQ_LMUL) |
9262 by (import hollight REAL_EQ_LMUL) |
8930 |
9263 |
8931 lemma REAL_EQ_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9264 lemma REAL_EQ_RMUL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8932 (real_mul x z = real_mul y z) = (z = real_of_num (0::nat) | x = y)" |
9265 (real_mul x z = real_mul y z) = (z = real_of_num 0 | x = y)" |
8933 by (import hollight REAL_EQ_RMUL) |
9266 by (import hollight REAL_EQ_RMUL) |
8934 |
9267 |
8935 lemma REAL_SUB_LDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9268 lemma REAL_SUB_LDISTRIB: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8936 real_mul x (real_sub y z) = real_sub (real_mul x y) (real_mul x z)" |
9269 real_mul x (real_sub y z) = real_sub (real_mul x y) (real_mul x z)" |
8937 by (import hollight REAL_SUB_LDISTRIB) |
9270 by (import hollight REAL_SUB_LDISTRIB) |
8942 |
9275 |
8943 lemma REAL_NEG_EQ: "ALL (x::hollight.real) y::hollight.real. (real_neg x = y) = (x = real_neg y)" |
9276 lemma REAL_NEG_EQ: "ALL (x::hollight.real) y::hollight.real. (real_neg x = y) = (x = real_neg y)" |
8944 by (import hollight REAL_NEG_EQ) |
9277 by (import hollight REAL_NEG_EQ) |
8945 |
9278 |
8946 lemma REAL_NEG_MINUS1: "ALL x::hollight.real. |
9279 lemma REAL_NEG_MINUS1: "ALL x::hollight.real. |
8947 real_neg x = real_mul (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x" |
9280 real_neg x = real_mul (real_neg (real_of_num (NUMERAL_BIT1 0))) x" |
8948 by (import hollight REAL_NEG_MINUS1) |
9281 by (import hollight REAL_NEG_MINUS1) |
8949 |
9282 |
8950 lemma REAL_INV_NZ: "ALL x::hollight.real. |
9283 lemma REAL_INV_NZ: "ALL x::hollight.real. x ~= real_of_num 0 --> real_inv x ~= real_of_num 0" |
8951 x ~= real_of_num (0::nat) --> real_inv x ~= real_of_num (0::nat)" |
|
8952 by (import hollight REAL_INV_NZ) |
9284 by (import hollight REAL_INV_NZ) |
8953 |
9285 |
8954 lemma REAL_INVINV: "ALL x::hollight.real. |
9286 lemma REAL_INVINV: "ALL x::hollight.real. x ~= real_of_num 0 --> real_inv (real_inv x) = x" |
8955 x ~= real_of_num (0::nat) --> real_inv (real_inv x) = x" |
|
8956 by (import hollight REAL_INVINV) |
9287 by (import hollight REAL_INVINV) |
8957 |
9288 |
8958 lemma REAL_LT_IMP_NE: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> x ~= y" |
9289 lemma REAL_LT_IMP_NE: "ALL (x::hollight.real) y::hollight.real. real_lt x y --> x ~= y" |
8959 by (import hollight REAL_LT_IMP_NE) |
9290 by (import hollight REAL_LT_IMP_NE) |
8960 |
9291 |
8961 lemma REAL_INV_POS: "ALL x::hollight.real. |
9292 lemma REAL_INV_POS: "ALL x::hollight.real. |
8962 real_lt (real_of_num (0::nat)) x --> |
9293 real_lt (real_of_num 0) x --> real_lt (real_of_num 0) (real_inv x)" |
8963 real_lt (real_of_num (0::nat)) (real_inv x)" |
|
8964 by (import hollight REAL_INV_POS) |
9294 by (import hollight REAL_INV_POS) |
8965 |
9295 |
8966 lemma REAL_LT_LMUL_0: "ALL (x::hollight.real) y::hollight.real. |
9296 lemma REAL_LT_LMUL_0: "ALL (x::hollight.real) y::hollight.real. |
8967 real_lt (real_of_num (0::nat)) x --> |
9297 real_lt (real_of_num 0) x --> |
8968 real_lt (real_of_num (0::nat)) (real_mul x y) = |
9298 real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) y" |
8969 real_lt (real_of_num (0::nat)) y" |
|
8970 by (import hollight REAL_LT_LMUL_0) |
9299 by (import hollight REAL_LT_LMUL_0) |
8971 |
9300 |
8972 lemma REAL_LT_RMUL_0: "ALL (x::hollight.real) y::hollight.real. |
9301 lemma REAL_LT_RMUL_0: "ALL (x::hollight.real) y::hollight.real. |
8973 real_lt (real_of_num (0::nat)) y --> |
9302 real_lt (real_of_num 0) y --> |
8974 real_lt (real_of_num (0::nat)) (real_mul x y) = |
9303 real_lt (real_of_num 0) (real_mul x y) = real_lt (real_of_num 0) x" |
8975 real_lt (real_of_num (0::nat)) x" |
|
8976 by (import hollight REAL_LT_RMUL_0) |
9304 by (import hollight REAL_LT_RMUL_0) |
8977 |
9305 |
8978 lemma REAL_LT_LMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9306 lemma REAL_LT_LMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8979 real_lt (real_of_num (0::nat)) x --> |
9307 real_lt (real_of_num 0) x --> |
8980 real_lt (real_mul x y) (real_mul x z) = real_lt y z" |
9308 real_lt (real_mul x y) (real_mul x z) = real_lt y z" |
8981 by (import hollight REAL_LT_LMUL_EQ) |
9309 by (import hollight REAL_LT_LMUL_EQ) |
8982 |
9310 |
8983 lemma REAL_LT_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9311 lemma REAL_LT_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8984 real_lt (real_of_num (0::nat)) z --> |
9312 real_lt (real_of_num 0) z --> |
8985 real_lt (real_mul x z) (real_mul y z) = real_lt x y" |
9313 real_lt (real_mul x z) (real_mul y z) = real_lt x y" |
8986 by (import hollight REAL_LT_RMUL_EQ) |
9314 by (import hollight REAL_LT_RMUL_EQ) |
8987 |
9315 |
8988 lemma REAL_LT_RMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9316 lemma REAL_LT_RMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8989 real_lt x y & real_lt (real_of_num (0::nat)) z --> |
9317 real_lt x y & real_lt (real_of_num 0) z --> |
8990 real_lt (real_mul x z) (real_mul y z)" |
9318 real_lt (real_mul x z) (real_mul y z)" |
8991 by (import hollight REAL_LT_RMUL_IMP) |
9319 by (import hollight REAL_LT_RMUL_IMP) |
8992 |
9320 |
8993 lemma REAL_LT_LMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9321 lemma REAL_LT_LMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
8994 real_lt y z & real_lt (real_of_num (0::nat)) x --> |
9322 real_lt y z & real_lt (real_of_num 0) x --> |
8995 real_lt (real_mul x y) (real_mul x z)" |
9323 real_lt (real_mul x y) (real_mul x z)" |
8996 by (import hollight REAL_LT_LMUL_IMP) |
9324 by (import hollight REAL_LT_LMUL_IMP) |
8997 |
9325 |
8998 lemma REAL_LINV_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9326 lemma REAL_LINV_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
8999 real_mul x y = real_of_num (NUMERAL_BIT1 (0::nat)) --> x = real_inv y" |
9327 real_mul x y = real_of_num (NUMERAL_BIT1 0) --> x = real_inv y" |
9000 by (import hollight REAL_LINV_UNIQ) |
9328 by (import hollight REAL_LINV_UNIQ) |
9001 |
9329 |
9002 lemma REAL_RINV_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9330 lemma REAL_RINV_UNIQ: "ALL (x::hollight.real) y::hollight.real. |
9003 real_mul x y = real_of_num (NUMERAL_BIT1 (0::nat)) --> y = real_inv x" |
9331 real_mul x y = real_of_num (NUMERAL_BIT1 0) --> y = real_inv x" |
9004 by (import hollight REAL_RINV_UNIQ) |
9332 by (import hollight REAL_RINV_UNIQ) |
9005 |
9333 |
9006 lemma REAL_NEG_INV: "ALL x::hollight.real. |
9334 lemma REAL_NEG_INV: "ALL x::hollight.real. |
9007 x ~= real_of_num (0::nat) --> |
9335 x ~= real_of_num 0 --> real_neg (real_inv x) = real_inv (real_neg x)" |
9008 real_neg (real_inv x) = real_inv (real_neg x)" |
|
9009 by (import hollight REAL_NEG_INV) |
9336 by (import hollight REAL_NEG_INV) |
9010 |
9337 |
9011 lemma REAL_INV_1OVER: "ALL x::hollight.real. |
9338 lemma REAL_INV_1OVER: "ALL x::hollight.real. real_inv x = real_div (real_of_num (NUMERAL_BIT1 0)) x" |
9012 real_inv x = real_div (real_of_num (NUMERAL_BIT1 (0::nat))) x" |
|
9013 by (import hollight REAL_INV_1OVER) |
9339 by (import hollight REAL_INV_1OVER) |
9014 |
9340 |
9015 lemma REAL: "ALL x::nat. |
9341 lemma REAL: "ALL x::nat. |
9016 real_of_num (Suc x) = |
9342 real_of_num (Suc x) = |
9017 real_add (real_of_num x) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
9343 real_add (real_of_num x) (real_of_num (NUMERAL_BIT1 0))" |
9018 by (import hollight REAL) |
9344 by (import hollight REAL) |
9019 |
9345 |
9020 lemma REAL_POS: "ALL n::nat. real_le (real_of_num (0::nat)) (real_of_num n)" |
9346 lemma REAL_POS: "ALL n::nat. real_le (real_of_num 0) (real_of_num n)" |
9021 by (import hollight REAL_POS) |
9347 by (import hollight REAL_POS) |
9022 |
9348 |
9023 lemma REAL_LE: "ALL (m::nat) n::nat. real_le (real_of_num m) (real_of_num n) = <= m n" |
9349 lemma REAL_LE: "ALL (m::nat) n::nat. real_le (real_of_num m) (real_of_num n) = <= m n" |
9024 by (import hollight REAL_LE) |
9350 by (import hollight REAL_LE) |
9025 |
9351 |
9038 |
9364 |
9039 lemma REAL_MUL: "ALL (m::nat) n::nat. |
9365 lemma REAL_MUL: "ALL (m::nat) n::nat. |
9040 real_mul (real_of_num m) (real_of_num n) = real_of_num (m * n)" |
9366 real_mul (real_of_num m) (real_of_num n) = real_of_num (m * n)" |
9041 by (import hollight REAL_MUL) |
9367 by (import hollight REAL_MUL) |
9042 |
9368 |
9043 lemma REAL_INV1: "real_inv (real_of_num (NUMERAL_BIT1 (0::nat))) = |
9369 lemma REAL_INV1: "real_inv (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)" |
9044 real_of_num (NUMERAL_BIT1 (0::nat))" |
|
9045 by (import hollight REAL_INV1) |
9370 by (import hollight REAL_INV1) |
9046 |
9371 |
9047 lemma REAL_DIV_LZERO: "ALL x::hollight.real. |
9372 lemma REAL_DIV_LZERO: "ALL x::hollight.real. real_div (real_of_num 0) x = real_of_num 0" |
9048 real_div (real_of_num (0::nat)) x = real_of_num (0::nat)" |
|
9049 by (import hollight REAL_DIV_LZERO) |
9373 by (import hollight REAL_DIV_LZERO) |
9050 |
9374 |
9051 lemma REAL_LT_NZ: "ALL n::nat. |
9375 lemma REAL_LT_NZ: "ALL n::nat. |
9052 (real_of_num n ~= real_of_num (0::nat)) = |
9376 (real_of_num n ~= real_of_num 0) = |
9053 real_lt (real_of_num (0::nat)) (real_of_num n)" |
9377 real_lt (real_of_num 0) (real_of_num n)" |
9054 by (import hollight REAL_LT_NZ) |
9378 by (import hollight REAL_LT_NZ) |
9055 |
9379 |
9056 lemma REAL_NZ_IMP_LT: "ALL n::nat. n ~= (0::nat) --> real_lt (real_of_num (0::nat)) (real_of_num n)" |
9380 lemma REAL_NZ_IMP_LT: "ALL n::nat. n ~= 0 --> real_lt (real_of_num 0) (real_of_num n)" |
9057 by (import hollight REAL_NZ_IMP_LT) |
9381 by (import hollight REAL_NZ_IMP_LT) |
9058 |
9382 |
9059 lemma REAL_LT_RDIV_0: "ALL (y::hollight.real) z::hollight.real. |
9383 lemma REAL_LT_RDIV_0: "ALL (y::hollight.real) z::hollight.real. |
9060 real_lt (real_of_num (0::nat)) z --> |
9384 real_lt (real_of_num 0) z --> |
9061 real_lt (real_of_num (0::nat)) (real_div y z) = |
9385 real_lt (real_of_num 0) (real_div y z) = real_lt (real_of_num 0) y" |
9062 real_lt (real_of_num (0::nat)) y" |
|
9063 by (import hollight REAL_LT_RDIV_0) |
9386 by (import hollight REAL_LT_RDIV_0) |
9064 |
9387 |
9065 lemma REAL_LT_RDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9388 lemma REAL_LT_RDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9066 real_lt (real_of_num (0::nat)) z --> |
9389 real_lt (real_of_num 0) z --> |
9067 real_lt (real_div x z) (real_div y z) = real_lt x y" |
9390 real_lt (real_div x z) (real_div y z) = real_lt x y" |
9068 by (import hollight REAL_LT_RDIV) |
9391 by (import hollight REAL_LT_RDIV) |
9069 |
9392 |
9070 lemma REAL_LT_FRACTION_0: "ALL (n::nat) d::hollight.real. |
9393 lemma REAL_LT_FRACTION_0: "ALL (n::nat) d::hollight.real. |
9071 n ~= (0::nat) --> |
9394 n ~= 0 --> |
9072 real_lt (real_of_num (0::nat)) (real_div d (real_of_num n)) = |
9395 real_lt (real_of_num 0) (real_div d (real_of_num n)) = |
9073 real_lt (real_of_num (0::nat)) d" |
9396 real_lt (real_of_num 0) d" |
9074 by (import hollight REAL_LT_FRACTION_0) |
9397 by (import hollight REAL_LT_FRACTION_0) |
9075 |
9398 |
9076 lemma REAL_LT_MULTIPLE: "ALL (x::nat) xa::hollight.real. |
9399 lemma REAL_LT_MULTIPLE: "ALL (x::nat) xa::hollight.real. |
9077 < (NUMERAL_BIT1 (0::nat)) x --> |
9400 < (NUMERAL_BIT1 0) x --> |
9078 real_lt xa (real_mul (real_of_num x) xa) = |
9401 real_lt xa (real_mul (real_of_num x) xa) = real_lt (real_of_num 0) xa" |
9079 real_lt (real_of_num (0::nat)) xa" |
|
9080 by (import hollight REAL_LT_MULTIPLE) |
9402 by (import hollight REAL_LT_MULTIPLE) |
9081 |
9403 |
9082 lemma REAL_LT_FRACTION: "ALL (n::nat) d::hollight.real. |
9404 lemma REAL_LT_FRACTION: "ALL (n::nat) d::hollight.real. |
9083 < (NUMERAL_BIT1 (0::nat)) n --> |
9405 < (NUMERAL_BIT1 0) n --> |
9084 real_lt (real_div d (real_of_num n)) d = real_lt (real_of_num (0::nat)) d" |
9406 real_lt (real_div d (real_of_num n)) d = real_lt (real_of_num 0) d" |
9085 by (import hollight REAL_LT_FRACTION) |
9407 by (import hollight REAL_LT_FRACTION) |
9086 |
9408 |
9087 lemma REAL_LT_HALF1: "ALL d::hollight.real. |
9409 lemma REAL_LT_HALF1: "ALL d::hollight.real. |
9088 real_lt (real_of_num (0::nat)) |
9410 real_lt (real_of_num 0) |
9089 (real_div d (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) = |
9411 (real_div d (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) = |
9090 real_lt (real_of_num (0::nat)) d" |
9412 real_lt (real_of_num 0) d" |
9091 by (import hollight REAL_LT_HALF1) |
9413 by (import hollight REAL_LT_HALF1) |
9092 |
9414 |
9093 lemma REAL_LT_HALF2: "ALL d::hollight.real. |
9415 lemma REAL_LT_HALF2: "ALL d::hollight.real. |
9094 real_lt (real_div d (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
9416 real_lt (real_div d (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) d = |
9095 d = |
9417 real_lt (real_of_num 0) d" |
9096 real_lt (real_of_num (0::nat)) d" |
|
9097 by (import hollight REAL_LT_HALF2) |
9418 by (import hollight REAL_LT_HALF2) |
9098 |
9419 |
9099 lemma REAL_DOUBLE: "ALL x::hollight.real. |
9420 lemma REAL_DOUBLE: "ALL x::hollight.real. |
9100 real_add x x = |
9421 real_add x x = real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x" |
9101 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x" |
|
9102 by (import hollight REAL_DOUBLE) |
9422 by (import hollight REAL_DOUBLE) |
9103 |
9423 |
9104 lemma REAL_HALF_DOUBLE: "ALL x::hollight.real. |
9424 lemma REAL_HALF_DOUBLE: "ALL x::hollight.real. |
9105 real_add |
9425 real_add (real_div x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
9106 (real_div x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
9426 (real_div x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) = |
9107 (real_div x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) = |
|
9108 x" |
9427 x" |
9109 by (import hollight REAL_HALF_DOUBLE) |
9428 by (import hollight REAL_HALF_DOUBLE) |
9110 |
9429 |
9111 lemma REAL_SUB_SUB: "ALL (x::hollight.real) y::hollight.real. |
9430 lemma REAL_SUB_SUB: "ALL (x::hollight.real) y::hollight.real. |
9112 real_sub (real_sub x y) x = real_neg y" |
9431 real_sub (real_sub x y) x = real_neg y" |
9138 |
9457 |
9139 lemma REAL_LE_NEG: "ALL (x::hollight.real) y::hollight.real. |
9458 lemma REAL_LE_NEG: "ALL (x::hollight.real) y::hollight.real. |
9140 real_le (real_neg x) (real_neg y) = real_le y x" |
9459 real_le (real_neg x) (real_neg y) = real_le y x" |
9141 by (import hollight REAL_LE_NEG) |
9460 by (import hollight REAL_LE_NEG) |
9142 |
9461 |
9143 lemma REAL_SUB_LZERO: "ALL x::hollight.real. real_sub (real_of_num (0::nat)) x = real_neg x" |
9462 lemma REAL_SUB_LZERO: "ALL x::hollight.real. real_sub (real_of_num 0) x = real_neg x" |
9144 by (import hollight REAL_SUB_LZERO) |
9463 by (import hollight REAL_SUB_LZERO) |
9145 |
9464 |
9146 lemma REAL_SUB_RZERO: "ALL x::hollight.real. real_sub x (real_of_num (0::nat)) = x" |
9465 lemma REAL_SUB_RZERO: "ALL x::hollight.real. real_sub x (real_of_num 0) = x" |
9147 by (import hollight REAL_SUB_RZERO) |
9466 by (import hollight REAL_SUB_RZERO) |
9148 |
9467 |
9149 lemma REAL_LTE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
9468 lemma REAL_LTE_ADD2: "ALL (w::hollight.real) (x::hollight.real) (y::hollight.real) |
9150 z::hollight.real. |
9469 z::hollight.real. |
9151 real_lt w x & real_le y z --> real_lt (real_add w y) (real_add x z)" |
9470 real_lt w x & real_le y z --> real_lt (real_add w y) (real_add x z)" |
9152 by (import hollight REAL_LTE_ADD2) |
9471 by (import hollight REAL_LTE_ADD2) |
9153 |
9472 |
9154 lemma REAL_LTE_ADD: "ALL (x::hollight.real) y::hollight.real. |
9473 lemma REAL_LTE_ADD: "ALL (x::hollight.real) y::hollight.real. |
9155 real_lt (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) y --> |
9474 real_lt (real_of_num 0) x & real_le (real_of_num 0) y --> |
9156 real_lt (real_of_num (0::nat)) (real_add x y)" |
9475 real_lt (real_of_num 0) (real_add x y)" |
9157 by (import hollight REAL_LTE_ADD) |
9476 by (import hollight REAL_LTE_ADD) |
9158 |
9477 |
9159 lemma REAL_LT_MUL2_ALT: "ALL (x1::hollight.real) (x2::hollight.real) (y1::hollight.real) |
9478 lemma REAL_LT_MUL2_ALT: "ALL (x1::hollight.real) (x2::hollight.real) (y1::hollight.real) |
9160 y2::hollight.real. |
9479 y2::hollight.real. |
9161 real_le (real_of_num (0::nat)) x1 & |
9480 real_le (real_of_num 0) x1 & |
9162 real_le (real_of_num (0::nat)) y1 & real_lt x1 x2 & real_lt y1 y2 --> |
9481 real_le (real_of_num 0) y1 & real_lt x1 x2 & real_lt y1 y2 --> |
9163 real_lt (real_mul x1 y1) (real_mul x2 y2)" |
9482 real_lt (real_mul x1 y1) (real_mul x2 y2)" |
9164 by (import hollight REAL_LT_MUL2_ALT) |
9483 by (import hollight REAL_LT_MUL2_ALT) |
9165 |
9484 |
9166 lemma REAL_SUB_LNEG: "ALL (x::hollight.real) y::hollight.real. |
9485 lemma REAL_SUB_LNEG: "ALL (x::hollight.real) y::hollight.real. |
9167 real_sub (real_neg x) y = real_neg (real_add x y)" |
9486 real_sub (real_neg x) y = real_neg (real_add x y)" |
9178 lemma REAL_SUB_TRIANGLE: "ALL (a::hollight.real) (b::hollight.real) c::hollight.real. |
9497 lemma REAL_SUB_TRIANGLE: "ALL (a::hollight.real) (b::hollight.real) c::hollight.real. |
9179 real_add (real_sub a b) (real_sub b c) = real_sub a c" |
9498 real_add (real_sub a b) (real_sub b c) = real_sub a c" |
9180 by (import hollight REAL_SUB_TRIANGLE) |
9499 by (import hollight REAL_SUB_TRIANGLE) |
9181 |
9500 |
9182 lemma REAL_INV_MUL_WEAK: "ALL (x::hollight.real) xa::hollight.real. |
9501 lemma REAL_INV_MUL_WEAK: "ALL (x::hollight.real) xa::hollight.real. |
9183 x ~= real_of_num (0::nat) & xa ~= real_of_num (0::nat) --> |
9502 x ~= real_of_num 0 & xa ~= real_of_num 0 --> |
9184 real_inv (real_mul x xa) = real_mul (real_inv x) (real_inv xa)" |
9503 real_inv (real_mul x xa) = real_mul (real_inv x) (real_inv xa)" |
9185 by (import hollight REAL_INV_MUL_WEAK) |
9504 by (import hollight REAL_INV_MUL_WEAK) |
9186 |
9505 |
9187 lemma REAL_LE_LMUL_LOCAL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9506 lemma REAL_LE_LMUL_LOCAL: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9188 real_lt (real_of_num (0::nat)) x --> |
9507 real_lt (real_of_num 0) x --> |
9189 real_le (real_mul x y) (real_mul x z) = real_le y z" |
9508 real_le (real_mul x y) (real_mul x z) = real_le y z" |
9190 by (import hollight REAL_LE_LMUL_LOCAL) |
9509 by (import hollight REAL_LE_LMUL_LOCAL) |
9191 |
9510 |
9192 lemma REAL_LE_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9511 lemma REAL_LE_RMUL_EQ: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9193 real_lt (real_of_num (0::nat)) z --> |
9512 real_lt (real_of_num 0) z --> |
9194 real_le (real_mul x z) (real_mul y z) = real_le x y" |
9513 real_le (real_mul x z) (real_mul y z) = real_le x y" |
9195 by (import hollight REAL_LE_RMUL_EQ) |
9514 by (import hollight REAL_LE_RMUL_EQ) |
9196 |
9515 |
9197 lemma REAL_SUB_INV2: "ALL (x::hollight.real) y::hollight.real. |
9516 lemma REAL_SUB_INV2: "ALL (x::hollight.real) y::hollight.real. |
9198 x ~= real_of_num (0::nat) & y ~= real_of_num (0::nat) --> |
9517 x ~= real_of_num 0 & y ~= real_of_num 0 --> |
9199 real_sub (real_inv x) (real_inv y) = |
9518 real_sub (real_inv x) (real_inv y) = |
9200 real_div (real_sub y x) (real_mul x y)" |
9519 real_div (real_sub y x) (real_mul x y)" |
9201 by (import hollight REAL_SUB_INV2) |
9520 by (import hollight REAL_SUB_INV2) |
9202 |
9521 |
9203 lemma REAL_SUB_SUB2: "ALL (x::hollight.real) y::hollight.real. real_sub x (real_sub x y) = y" |
9522 lemma REAL_SUB_SUB2: "ALL (x::hollight.real) y::hollight.real. real_sub x (real_sub x y) = y" |
9206 lemma REAL_MEAN: "ALL (x::hollight.real) y::hollight.real. |
9525 lemma REAL_MEAN: "ALL (x::hollight.real) y::hollight.real. |
9207 real_lt x y --> (EX z::hollight.real. real_lt x z & real_lt z y)" |
9526 real_lt x y --> (EX z::hollight.real. real_lt x z & real_lt z y)" |
9208 by (import hollight REAL_MEAN) |
9527 by (import hollight REAL_MEAN) |
9209 |
9528 |
9210 lemma REAL_EQ_LMUL2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9529 lemma REAL_EQ_LMUL2: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9211 x ~= real_of_num (0::nat) --> (y = z) = (real_mul x y = real_mul x z)" |
9530 x ~= real_of_num 0 --> (y = z) = (real_mul x y = real_mul x z)" |
9212 by (import hollight REAL_EQ_LMUL2) |
9531 by (import hollight REAL_EQ_LMUL2) |
9213 |
9532 |
9214 lemma REAL_LE_MUL2V: "ALL (x1::hollight.real) (x2::hollight.real) (y1::hollight.real) |
9533 lemma REAL_LE_MUL2V: "ALL (x1::hollight.real) (x2::hollight.real) (y1::hollight.real) |
9215 y2::hollight.real. |
9534 y2::hollight.real. |
9216 real_le (real_of_num (0::nat)) x1 & |
9535 real_le (real_of_num 0) x1 & |
9217 real_le (real_of_num (0::nat)) y1 & real_le x1 x2 & real_le y1 y2 --> |
9536 real_le (real_of_num 0) y1 & real_le x1 x2 & real_le y1 y2 --> |
9218 real_le (real_mul x1 y1) (real_mul x2 y2)" |
9537 real_le (real_mul x1 y1) (real_mul x2 y2)" |
9219 by (import hollight REAL_LE_MUL2V) |
9538 by (import hollight REAL_LE_MUL2V) |
9220 |
9539 |
9221 lemma REAL_LE_LDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9540 lemma REAL_LE_LDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9222 real_lt (real_of_num (0::nat)) x & real_le y (real_mul z x) --> |
9541 real_lt (real_of_num 0) x & real_le y (real_mul z x) --> |
9223 real_le (real_div y x) z" |
9542 real_le (real_div y x) z" |
9224 by (import hollight REAL_LE_LDIV) |
9543 by (import hollight REAL_LE_LDIV) |
9225 |
9544 |
9226 lemma REAL_LE_RDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9545 lemma REAL_LE_RDIV: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9227 real_lt (real_of_num (0::nat)) x & real_le (real_mul y x) z --> |
9546 real_lt (real_of_num 0) x & real_le (real_mul y x) z --> |
9228 real_le y (real_div z x)" |
9547 real_le y (real_div z x)" |
9229 by (import hollight REAL_LE_RDIV) |
9548 by (import hollight REAL_LE_RDIV) |
9230 |
9549 |
9231 lemma REAL_LT_1: "ALL (x::hollight.real) y::hollight.real. |
9550 lemma REAL_LT_1: "ALL (x::hollight.real) y::hollight.real. |
9232 real_le (real_of_num (0::nat)) x & real_lt x y --> |
9551 real_le (real_of_num 0) x & real_lt x y --> |
9233 real_lt (real_div x y) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
9552 real_lt (real_div x y) (real_of_num (NUMERAL_BIT1 0))" |
9234 by (import hollight REAL_LT_1) |
9553 by (import hollight REAL_LT_1) |
9235 |
9554 |
9236 lemma REAL_LE_LMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9555 lemma REAL_LE_LMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9237 real_le (real_of_num (0::nat)) x & real_le y z --> |
9556 real_le (real_of_num 0) x & real_le y z --> |
9238 real_le (real_mul x y) (real_mul x z)" |
9557 real_le (real_mul x y) (real_mul x z)" |
9239 by (import hollight REAL_LE_LMUL_IMP) |
9558 by (import hollight REAL_LE_LMUL_IMP) |
9240 |
9559 |
9241 lemma REAL_LE_RMUL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
9560 lemma REAL_LE_RMUL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
9242 real_le (real_of_num (0::nat)) x & real_le xa xb --> |
9561 real_le (real_of_num 0) x & real_le xa xb --> |
9243 real_le (real_mul xa x) (real_mul xb x)" |
9562 real_le (real_mul xa x) (real_mul xb x)" |
9244 by (import hollight REAL_LE_RMUL_IMP) |
9563 by (import hollight REAL_LE_RMUL_IMP) |
9245 |
9564 |
9246 lemma REAL_INV_LT1: "ALL x::hollight.real. |
9565 lemma REAL_INV_LT1: "ALL x::hollight.real. |
9247 real_lt (real_of_num (0::nat)) x & |
9566 real_lt (real_of_num 0) x & real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
9248 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
9567 real_lt (real_of_num (NUMERAL_BIT1 0)) (real_inv x)" |
9249 real_lt (real_of_num (NUMERAL_BIT1 (0::nat))) (real_inv x)" |
|
9250 by (import hollight REAL_INV_LT1) |
9568 by (import hollight REAL_INV_LT1) |
9251 |
9569 |
9252 lemma REAL_POS_NZ: "ALL x::hollight.real. |
9570 lemma REAL_POS_NZ: "ALL x::hollight.real. real_lt (real_of_num 0) x --> x ~= real_of_num 0" |
9253 real_lt (real_of_num (0::nat)) x --> x ~= real_of_num (0::nat)" |
|
9254 by (import hollight REAL_POS_NZ) |
9571 by (import hollight REAL_POS_NZ) |
9255 |
9572 |
9256 lemma REAL_EQ_RMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9573 lemma REAL_EQ_RMUL_IMP: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9257 z ~= real_of_num (0::nat) & real_mul x z = real_mul y z --> x = y" |
9574 z ~= real_of_num 0 & real_mul x z = real_mul y z --> x = y" |
9258 by (import hollight REAL_EQ_RMUL_IMP) |
9575 by (import hollight REAL_EQ_RMUL_IMP) |
9259 |
9576 |
9260 lemma REAL_EQ_LMUL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
9577 lemma REAL_EQ_LMUL_IMP: "ALL (x::hollight.real) (xa::hollight.real) xb::hollight.real. |
9261 x ~= real_of_num (0::nat) & real_mul x xa = real_mul x xb --> xa = xb" |
9578 x ~= real_of_num 0 & real_mul x xa = real_mul x xb --> xa = xb" |
9262 by (import hollight REAL_EQ_LMUL_IMP) |
9579 by (import hollight REAL_EQ_LMUL_IMP) |
9263 |
9580 |
9264 lemma REAL_FACT_NZ: "ALL n::nat. real_of_num (FACT n) ~= real_of_num (0::nat)" |
9581 lemma REAL_FACT_NZ: "ALL n::nat. real_of_num (FACT n) ~= real_of_num 0" |
9265 by (import hollight REAL_FACT_NZ) |
9582 by (import hollight REAL_FACT_NZ) |
9266 |
9583 |
9267 lemma REAL_POSSQ: "ALL x::hollight.real. |
9584 lemma REAL_POSSQ: "ALL x::hollight.real. |
9268 real_lt (real_of_num (0::nat)) (real_mul x x) = |
9585 real_lt (real_of_num 0) (real_mul x x) = (x ~= real_of_num 0)" |
9269 (x ~= real_of_num (0::nat))" |
|
9270 by (import hollight REAL_POSSQ) |
9586 by (import hollight REAL_POSSQ) |
9271 |
9587 |
9272 lemma REAL_SUMSQ: "ALL (x::hollight.real) y::hollight.real. |
9588 lemma REAL_SUMSQ: "ALL (x::hollight.real) y::hollight.real. |
9273 (real_add (real_mul x x) (real_mul y y) = real_of_num (0::nat)) = |
9589 (real_add (real_mul x x) (real_mul y y) = real_of_num 0) = |
9274 (x = real_of_num (0::nat) & y = real_of_num (0::nat))" |
9590 (x = real_of_num 0 & y = real_of_num 0)" |
9275 by (import hollight REAL_SUMSQ) |
9591 by (import hollight REAL_SUMSQ) |
9276 |
9592 |
9277 lemma REAL_EQ_NEG: "ALL (x::hollight.real) y::hollight.real. (real_neg x = real_neg y) = (x = y)" |
9593 lemma REAL_EQ_NEG: "ALL (x::hollight.real) y::hollight.real. (real_neg x = real_neg y) = (x = y)" |
9278 by (import hollight REAL_EQ_NEG) |
9594 by (import hollight REAL_EQ_NEG) |
9279 |
9595 |
9280 lemma REAL_DIV_MUL2: "ALL (x::hollight.real) z::hollight.real. |
9596 lemma REAL_DIV_MUL2: "ALL (x::hollight.real) z::hollight.real. |
9281 x ~= real_of_num (0::nat) & z ~= real_of_num (0::nat) --> |
9597 x ~= real_of_num 0 & z ~= real_of_num 0 --> |
9282 (ALL y::hollight.real. |
9598 (ALL y::hollight.real. |
9283 real_div y z = real_div (real_mul x y) (real_mul x z))" |
9599 real_div y z = real_div (real_mul x y) (real_mul x z))" |
9284 by (import hollight REAL_DIV_MUL2) |
9600 by (import hollight REAL_DIV_MUL2) |
9285 |
9601 |
9286 lemma REAL_MIDDLE1: "ALL (a::hollight.real) b::hollight.real. |
9602 lemma REAL_MIDDLE1: "ALL (a::hollight.real) b::hollight.real. |
9287 real_le a b --> |
9603 real_le a b --> |
9288 real_le a |
9604 real_le a |
9289 (real_div (real_add a b) |
9605 (real_div (real_add a b) (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
9290 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
|
9291 by (import hollight REAL_MIDDLE1) |
9606 by (import hollight REAL_MIDDLE1) |
9292 |
9607 |
9293 lemma REAL_MIDDLE2: "ALL (a::hollight.real) b::hollight.real. |
9608 lemma REAL_MIDDLE2: "ALL (a::hollight.real) b::hollight.real. |
9294 real_le a b --> |
9609 real_le a b --> |
9295 real_le |
9610 real_le |
9296 (real_div (real_add a b) |
9611 (real_div (real_add a b) (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
9297 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
9298 b" |
9612 b" |
9299 by (import hollight REAL_MIDDLE2) |
9613 by (import hollight REAL_MIDDLE2) |
9300 |
9614 |
9301 lemma ABS_ZERO: "ALL x::hollight.real. |
9615 lemma ABS_ZERO: "ALL x::hollight.real. (real_abs x = real_of_num 0) = (x = real_of_num 0)" |
9302 (real_abs x = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
|
9303 by (import hollight ABS_ZERO) |
9616 by (import hollight ABS_ZERO) |
9304 |
9617 |
9305 lemma ABS_0: "real_abs (real_of_num (0::nat)) = real_of_num (0::nat)" |
9618 lemma ABS_0: "real_abs (real_of_num 0) = real_of_num 0" |
9306 by (import hollight ABS_0) |
9619 by (import hollight ABS_0) |
9307 |
9620 |
9308 lemma ABS_1: "real_abs (real_of_num (NUMERAL_BIT1 (0::nat))) = |
9621 lemma ABS_1: "real_abs (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)" |
9309 real_of_num (NUMERAL_BIT1 (0::nat))" |
|
9310 by (import hollight ABS_1) |
9622 by (import hollight ABS_1) |
9311 |
9623 |
9312 lemma ABS_NEG: "ALL x::hollight.real. real_abs (real_neg x) = real_abs x" |
9624 lemma ABS_NEG: "ALL x::hollight.real. real_abs (real_neg x) = real_abs x" |
9313 by (import hollight ABS_NEG) |
9625 by (import hollight ABS_NEG) |
9314 |
9626 |
9315 lemma ABS_TRIANGLE: "ALL (x::hollight.real) y::hollight.real. |
9627 lemma ABS_TRIANGLE: "ALL (x::hollight.real) y::hollight.real. |
9316 real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))" |
9628 real_le (real_abs (real_add x y)) (real_add (real_abs x) (real_abs y))" |
9317 by (import hollight ABS_TRIANGLE) |
9629 by (import hollight ABS_TRIANGLE) |
9318 |
9630 |
9319 lemma ABS_POS: "ALL x::hollight.real. real_le (real_of_num (0::nat)) (real_abs x)" |
9631 lemma ABS_POS: "ALL x::hollight.real. real_le (real_of_num 0) (real_abs x)" |
9320 by (import hollight ABS_POS) |
9632 by (import hollight ABS_POS) |
9321 |
9633 |
9322 lemma ABS_MUL: "ALL (x::hollight.real) y::hollight.real. |
9634 lemma ABS_MUL: "ALL (x::hollight.real) y::hollight.real. |
9323 real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)" |
9635 real_abs (real_mul x y) = real_mul (real_abs x) (real_abs y)" |
9324 by (import hollight ABS_MUL) |
9636 by (import hollight ABS_MUL) |
9332 lemma ABS_SUB: "ALL (x::hollight.real) y::hollight.real. |
9644 lemma ABS_SUB: "ALL (x::hollight.real) y::hollight.real. |
9333 real_abs (real_sub x y) = real_abs (real_sub y x)" |
9645 real_abs (real_sub x y) = real_abs (real_sub y x)" |
9334 by (import hollight ABS_SUB) |
9646 by (import hollight ABS_SUB) |
9335 |
9647 |
9336 lemma ABS_NZ: "ALL x::hollight.real. |
9648 lemma ABS_NZ: "ALL x::hollight.real. |
9337 (x ~= real_of_num (0::nat)) = real_lt (real_of_num (0::nat)) (real_abs x)" |
9649 (x ~= real_of_num 0) = real_lt (real_of_num 0) (real_abs x)" |
9338 by (import hollight ABS_NZ) |
9650 by (import hollight ABS_NZ) |
9339 |
9651 |
9340 lemma ABS_INV: "ALL x::hollight.real. |
9652 lemma ABS_INV: "ALL x::hollight.real. |
9341 x ~= real_of_num (0::nat) --> |
9653 x ~= real_of_num 0 --> real_abs (real_inv x) = real_inv (real_abs x)" |
9342 real_abs (real_inv x) = real_inv (real_abs x)" |
|
9343 by (import hollight ABS_INV) |
9654 by (import hollight ABS_INV) |
9344 |
9655 |
9345 lemma ABS_ABS: "ALL x::hollight.real. real_abs (real_abs x) = real_abs x" |
9656 lemma ABS_ABS: "ALL x::hollight.real. real_abs (real_abs x) = real_abs x" |
9346 by (import hollight ABS_ABS) |
9657 by (import hollight ABS_ABS) |
9347 |
9658 |
9348 lemma ABS_LE: "ALL x::hollight.real. real_le x (real_abs x)" |
9659 lemma ABS_LE: "ALL x::hollight.real. real_le x (real_abs x)" |
9349 by (import hollight ABS_LE) |
9660 by (import hollight ABS_LE) |
9350 |
9661 |
9351 lemma ABS_REFL: "ALL x::hollight.real. (real_abs x = x) = real_le (real_of_num (0::nat)) x" |
9662 lemma ABS_REFL: "ALL x::hollight.real. (real_abs x = x) = real_le (real_of_num 0) x" |
9352 by (import hollight ABS_REFL) |
9663 by (import hollight ABS_REFL) |
9353 |
9664 |
9354 lemma ABS_N: "ALL n::nat. real_abs (real_of_num n) = real_of_num n" |
9665 lemma ABS_N: "ALL n::nat. real_abs (real_of_num n) = real_of_num n" |
9355 by (import hollight ABS_N) |
9666 by (import hollight ABS_N) |
9356 |
9667 |
9357 lemma ABS_BETWEEN: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
9668 lemma ABS_BETWEEN: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
9358 (real_lt (real_of_num (0::nat)) d & |
9669 (real_lt (real_of_num 0) d & |
9359 real_lt (real_sub x d) y & real_lt y (real_add x d)) = |
9670 real_lt (real_sub x d) y & real_lt y (real_add x d)) = |
9360 real_lt (real_abs (real_sub y x)) d" |
9671 real_lt (real_abs (real_sub y x)) d" |
9361 by (import hollight ABS_BETWEEN) |
9672 by (import hollight ABS_BETWEEN) |
9362 |
9673 |
9363 lemma ABS_BOUND: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
9674 lemma ABS_BOUND: "ALL (x::hollight.real) (y::hollight.real) d::hollight.real. |
9364 real_lt (real_abs (real_sub x y)) d --> real_lt y (real_add x d)" |
9675 real_lt (real_abs (real_sub x y)) d --> real_lt y (real_add x d)" |
9365 by (import hollight ABS_BOUND) |
9676 by (import hollight ABS_BOUND) |
9366 |
9677 |
9367 lemma ABS_STILLNZ: "ALL (x::hollight.real) y::hollight.real. |
9678 lemma ABS_STILLNZ: "ALL (x::hollight.real) y::hollight.real. |
9368 real_lt (real_abs (real_sub x y)) (real_abs y) --> |
9679 real_lt (real_abs (real_sub x y)) (real_abs y) --> x ~= real_of_num 0" |
9369 x ~= real_of_num (0::nat)" |
|
9370 by (import hollight ABS_STILLNZ) |
9680 by (import hollight ABS_STILLNZ) |
9371 |
9681 |
9372 lemma ABS_CASES: "ALL x::hollight.real. |
9682 lemma ABS_CASES: "ALL x::hollight.real. |
9373 x = real_of_num (0::nat) | real_lt (real_of_num (0::nat)) (real_abs x)" |
9683 x = real_of_num 0 | real_lt (real_of_num 0) (real_abs x)" |
9374 by (import hollight ABS_CASES) |
9684 by (import hollight ABS_CASES) |
9375 |
9685 |
9376 lemma ABS_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9686 lemma ABS_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
9377 real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x) --> |
9687 real_lt x z & real_lt (real_abs (real_sub y x)) (real_sub z x) --> |
9378 real_lt y z" |
9688 real_lt y z" |
9379 by (import hollight ABS_BETWEEN1) |
9689 by (import hollight ABS_BETWEEN1) |
9380 |
9690 |
9381 lemma ABS_SIGN: "ALL (x::hollight.real) y::hollight.real. |
9691 lemma ABS_SIGN: "ALL (x::hollight.real) y::hollight.real. |
9382 real_lt (real_abs (real_sub x y)) y --> real_lt (real_of_num (0::nat)) x" |
9692 real_lt (real_abs (real_sub x y)) y --> real_lt (real_of_num 0) x" |
9383 by (import hollight ABS_SIGN) |
9693 by (import hollight ABS_SIGN) |
9384 |
9694 |
9385 lemma ABS_SIGN2: "ALL (x::hollight.real) y::hollight.real. |
9695 lemma ABS_SIGN2: "ALL (x::hollight.real) y::hollight.real. |
9386 real_lt (real_abs (real_sub x y)) (real_neg y) --> |
9696 real_lt (real_abs (real_sub x y)) (real_neg y) --> |
9387 real_lt x (real_of_num (0::nat))" |
9697 real_lt x (real_of_num 0)" |
9388 by (import hollight ABS_SIGN2) |
9698 by (import hollight ABS_SIGN2) |
9389 |
9699 |
9390 lemma ABS_DIV: "ALL y::hollight.real. |
9700 lemma ABS_DIV: "ALL y::hollight.real. |
9391 y ~= real_of_num (0::nat) --> |
9701 y ~= real_of_num 0 --> |
9392 (ALL x::hollight.real. |
9702 (ALL x::hollight.real. |
9393 real_abs (real_div x y) = real_div (real_abs x) (real_abs y))" |
9703 real_abs (real_div x y) = real_div (real_abs x) (real_abs y))" |
9394 by (import hollight ABS_DIV) |
9704 by (import hollight ABS_DIV) |
9395 |
9705 |
9396 lemma ABS_CIRCLE: "ALL (x::hollight.real) (y::hollight.real) h::hollight.real. |
9706 lemma ABS_CIRCLE: "ALL (x::hollight.real) (y::hollight.real) h::hollight.real. |
9410 lemma ABS_BETWEEN2: "ALL (x0::hollight.real) (x::hollight.real) (y0::hollight.real) |
9720 lemma ABS_BETWEEN2: "ALL (x0::hollight.real) (x::hollight.real) (y0::hollight.real) |
9411 y::hollight.real. |
9721 y::hollight.real. |
9412 real_lt x0 y0 & |
9722 real_lt x0 y0 & |
9413 real_lt (real_abs (real_sub x x0)) |
9723 real_lt (real_abs (real_sub x x0)) |
9414 (real_div (real_sub y0 x0) |
9724 (real_div (real_sub y0 x0) |
9415 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
9725 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
9416 real_lt (real_abs (real_sub y y0)) |
9726 real_lt (real_abs (real_sub y y0)) |
9417 (real_div (real_sub y0 x0) |
9727 (real_div (real_sub y0 x0) |
9418 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
9728 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
9419 real_lt x y" |
9729 real_lt x y" |
9420 by (import hollight ABS_BETWEEN2) |
9730 by (import hollight ABS_BETWEEN2) |
9421 |
9731 |
9422 lemma ABS_BOUNDS: "ALL (x::hollight.real) k::hollight.real. |
9732 lemma ABS_BOUNDS: "ALL (x::hollight.real) k::hollight.real. |
9423 real_le (real_abs x) k = (real_le (real_neg k) x & real_le x k)" |
9733 real_le (real_abs x) k = (real_le (real_neg k) x & real_le x k)" |
9424 by (import hollight ABS_BOUNDS) |
9734 by (import hollight ABS_BOUNDS) |
9425 |
9735 |
9426 lemma POW_0: "ALL n::nat. real_pow (real_of_num (0::nat)) (Suc n) = real_of_num (0::nat)" |
9736 lemma POW_0: "ALL n::nat. real_pow (real_of_num 0) (Suc n) = real_of_num 0" |
9427 by (import hollight POW_0) |
9737 by (import hollight POW_0) |
9428 |
9738 |
9429 lemma POW_NZ: "ALL (c::hollight.real) n::nat. |
9739 lemma POW_NZ: "ALL (c::hollight.real) n::nat. |
9430 c ~= real_of_num (0::nat) --> real_pow c n ~= real_of_num (0::nat)" |
9740 c ~= real_of_num 0 --> real_pow c n ~= real_of_num 0" |
9431 by (import hollight POW_NZ) |
9741 by (import hollight POW_NZ) |
9432 |
9742 |
9433 lemma POW_INV: "ALL (c::hollight.real) x::nat. |
9743 lemma POW_INV: "ALL (c::hollight.real) x::nat. |
9434 c ~= real_of_num (0::nat) --> |
9744 c ~= real_of_num 0 --> real_inv (real_pow c x) = real_pow (real_inv c) x" |
9435 real_inv (real_pow c x) = real_pow (real_inv c) x" |
|
9436 by (import hollight POW_INV) |
9745 by (import hollight POW_INV) |
9437 |
9746 |
9438 lemma POW_ABS: "ALL (c::hollight.real) n::nat. |
9747 lemma POW_ABS: "ALL (c::hollight.real) n::nat. |
9439 real_pow (real_abs c) n = real_abs (real_pow c n)" |
9748 real_pow (real_abs c) n = real_abs (real_pow c n)" |
9440 by (import hollight POW_ABS) |
9749 by (import hollight POW_ABS) |
9441 |
9750 |
9442 lemma POW_PLUS1: "ALL (e::hollight.real) x::nat. |
9751 lemma POW_PLUS1: "ALL (e::hollight.real) x::nat. |
9443 real_lt (real_of_num (0::nat)) e --> |
9752 real_lt (real_of_num 0) e --> |
9444 real_le |
9753 real_le |
9445 (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
9754 (real_add (real_of_num (NUMERAL_BIT1 0)) (real_mul (real_of_num x) e)) |
9446 (real_mul (real_of_num x) e)) |
9755 (real_pow (real_add (real_of_num (NUMERAL_BIT1 0)) e) x)" |
9447 (real_pow (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) e) x)" |
|
9448 by (import hollight POW_PLUS1) |
9756 by (import hollight POW_PLUS1) |
9449 |
9757 |
9450 lemma POW_ADD: "ALL (c::hollight.real) (m::nat) n::nat. |
9758 lemma POW_ADD: "ALL (c::hollight.real) (m::nat) n::nat. |
9451 real_pow c (m + n) = real_mul (real_pow c m) (real_pow c n)" |
9759 real_pow c (m + n) = real_mul (real_pow c m) (real_pow c n)" |
9452 by (import hollight POW_ADD) |
9760 by (import hollight POW_ADD) |
9453 |
9761 |
9454 lemma POW_1: "ALL x::hollight.real. real_pow x (NUMERAL_BIT1 (0::nat)) = x" |
9762 lemma POW_1: "ALL x::hollight.real. real_pow x (NUMERAL_BIT1 0) = x" |
9455 by (import hollight POW_1) |
9763 by (import hollight POW_1) |
9456 |
9764 |
9457 lemma POW_2: "ALL x::hollight.real. |
9765 lemma POW_2: "ALL x::hollight.real. |
9458 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = real_mul x x" |
9766 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = real_mul x x" |
9459 by (import hollight POW_2) |
9767 by (import hollight POW_2) |
9460 |
9768 |
9461 lemma POW_POS: "ALL (x::hollight.real) xa::nat. |
9769 lemma POW_POS: "ALL (x::hollight.real) xa::nat. |
9462 real_le (real_of_num (0::nat)) x --> |
9770 real_le (real_of_num 0) x --> real_le (real_of_num 0) (real_pow x xa)" |
9463 real_le (real_of_num (0::nat)) (real_pow x xa)" |
|
9464 by (import hollight POW_POS) |
9771 by (import hollight POW_POS) |
9465 |
9772 |
9466 lemma POW_LE: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
9773 lemma POW_LE: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
9467 real_le (real_of_num (0::nat)) x & real_le x y --> |
9774 real_le (real_of_num 0) x & real_le x y --> |
9468 real_le (real_pow x n) (real_pow y n)" |
9775 real_le (real_pow x n) (real_pow y n)" |
9469 by (import hollight POW_LE) |
9776 by (import hollight POW_LE) |
9470 |
9777 |
9471 lemma POW_M1: "ALL n::nat. |
9778 lemma POW_M1: "ALL n::nat. |
9472 real_abs (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) n) = |
9779 real_abs (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) n) = |
9473 real_of_num (NUMERAL_BIT1 (0::nat))" |
9780 real_of_num (NUMERAL_BIT1 0)" |
9474 by (import hollight POW_M1) |
9781 by (import hollight POW_M1) |
9475 |
9782 |
9476 lemma POW_MUL: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
9783 lemma POW_MUL: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
9477 real_pow (real_mul x y) n = real_mul (real_pow x n) (real_pow y n)" |
9784 real_pow (real_mul x y) n = real_mul (real_pow x n) (real_pow y n)" |
9478 by (import hollight POW_MUL) |
9785 by (import hollight POW_MUL) |
9479 |
9786 |
9480 lemma REAL_LE_SQUARE_POW: "ALL x::hollight.real. |
9787 lemma REAL_LE_SQUARE_POW: "ALL x::hollight.real. |
9481 real_le (real_of_num (0::nat)) |
9788 real_le (real_of_num 0) (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
9482 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
|
9483 by (import hollight REAL_LE_SQUARE_POW) |
9789 by (import hollight REAL_LE_SQUARE_POW) |
9484 |
9790 |
9485 lemma ABS_POW2: "ALL x::hollight.real. |
9791 lemma ABS_POW2: "ALL x::hollight.real. |
9486 real_abs (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
9792 real_abs (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
9487 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))" |
9793 real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))" |
9488 by (import hollight ABS_POW2) |
9794 by (import hollight ABS_POW2) |
9489 |
9795 |
9490 lemma REAL_LE1_POW2: "ALL x::hollight.real. |
9796 lemma REAL_LE1_POW2: "ALL x::hollight.real. |
9491 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) x --> |
9797 real_le (real_of_num (NUMERAL_BIT1 0)) x --> |
9492 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) |
9798 real_le (real_of_num (NUMERAL_BIT1 0)) |
9493 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
9799 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
9494 by (import hollight REAL_LE1_POW2) |
9800 by (import hollight REAL_LE1_POW2) |
9495 |
9801 |
9496 lemma REAL_LT1_POW2: "ALL x::hollight.real. |
9802 lemma REAL_LT1_POW2: "ALL x::hollight.real. |
9497 real_lt (real_of_num (NUMERAL_BIT1 (0::nat))) x --> |
9803 real_lt (real_of_num (NUMERAL_BIT1 0)) x --> |
9498 real_lt (real_of_num (NUMERAL_BIT1 (0::nat))) |
9804 real_lt (real_of_num (NUMERAL_BIT1 0)) |
9499 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
9805 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
9500 by (import hollight REAL_LT1_POW2) |
9806 by (import hollight REAL_LT1_POW2) |
9501 |
9807 |
9502 lemma POW_POS_LT: "ALL (x::hollight.real) n::nat. |
9808 lemma POW_POS_LT: "ALL (x::hollight.real) n::nat. |
9503 real_lt (real_of_num (0::nat)) x --> |
9809 real_lt (real_of_num 0) x --> |
9504 real_lt (real_of_num (0::nat)) (real_pow x (Suc n))" |
9810 real_lt (real_of_num 0) (real_pow x (Suc n))" |
9505 by (import hollight POW_POS_LT) |
9811 by (import hollight POW_POS_LT) |
9506 |
9812 |
9507 lemma POW_2_LE1: "ALL n::nat. |
9813 lemma POW_2_LE1: "ALL n::nat. |
9508 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) |
9814 real_le (real_of_num (NUMERAL_BIT1 0)) |
9509 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) n)" |
9815 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) n)" |
9510 by (import hollight POW_2_LE1) |
9816 by (import hollight POW_2_LE1) |
9511 |
9817 |
9512 lemma POW_2_LT: "ALL n::nat. |
9818 lemma POW_2_LT: "ALL n::nat. |
9513 real_lt (real_of_num n) |
9819 real_lt (real_of_num n) |
9514 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) n)" |
9820 (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) n)" |
9515 by (import hollight POW_2_LT) |
9821 by (import hollight POW_2_LT) |
9516 |
9822 |
9517 lemma POW_MINUS1: "ALL n::nat. |
9823 lemma POW_MINUS1: "ALL n::nat. |
9518 real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
9824 real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
9519 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n) = |
9825 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n) = |
9520 real_of_num (NUMERAL_BIT1 (0::nat))" |
9826 real_of_num (NUMERAL_BIT1 0)" |
9521 by (import hollight POW_MINUS1) |
9827 by (import hollight POW_MINUS1) |
9522 |
9828 |
9523 lemma REAL_SUP_EXISTS: "ALL P::hollight.real => bool. |
9829 lemma REAL_SUP_EXISTS: "ALL P::hollight.real => bool. |
9524 Ex P & |
9830 Ex P & |
9525 (EX z::hollight.real. ALL x::hollight.real. P x --> real_lt x z) --> |
9831 (EX z::hollight.real. ALL x::hollight.real. P x --> real_lt x z) --> |
9586 |
9892 |
9587 lemma REAL_ARCH_SIMPLE: "ALL x::hollight.real. EX n::nat. real_le x (real_of_num n)" |
9893 lemma REAL_ARCH_SIMPLE: "ALL x::hollight.real. EX n::nat. real_le x (real_of_num n)" |
9588 by (import hollight REAL_ARCH_SIMPLE) |
9894 by (import hollight REAL_ARCH_SIMPLE) |
9589 |
9895 |
9590 lemma REAL_ARCH: "ALL x::hollight.real. |
9896 lemma REAL_ARCH: "ALL x::hollight.real. |
9591 real_lt (real_of_num (0::nat)) x --> |
9897 real_lt (real_of_num 0) x --> |
9592 (ALL y::hollight.real. EX n::nat. real_lt y (real_mul (real_of_num n) x))" |
9898 (ALL y::hollight.real. EX n::nat. real_lt y (real_mul (real_of_num n) x))" |
9593 by (import hollight REAL_ARCH) |
9899 by (import hollight REAL_ARCH) |
9594 |
9900 |
9595 lemma REAL_ARCH_LEAST: "ALL y::hollight.real. |
9901 lemma REAL_ARCH_LEAST: "ALL y::hollight.real. |
9596 real_lt (real_of_num (0::nat)) y --> |
9902 real_lt (real_of_num 0) y --> |
9597 (ALL x::hollight.real. |
9903 (ALL x::hollight.real. |
9598 real_le (real_of_num (0::nat)) x --> |
9904 real_le (real_of_num 0) x --> |
9599 (EX n::nat. |
9905 (EX n::nat. |
9600 real_le (real_mul (real_of_num n) y) x & |
9906 real_le (real_mul (real_of_num n) y) x & |
9601 real_lt x (real_mul (real_of_num (Suc n)) y)))" |
9907 real_lt x (real_mul (real_of_num (Suc n)) y)))" |
9602 by (import hollight REAL_ARCH_LEAST) |
9908 by (import hollight REAL_ARCH_LEAST) |
9603 |
9909 |
9604 lemma sum_EXISTS: "EX x::nat * nat => (nat => hollight.real) => hollight.real. |
9910 lemma sum_EXISTS: "EX x::nat * nat => (nat => hollight.real) => hollight.real. |
9605 (ALL (f::nat => hollight.real) n::nat. |
9911 (ALL (f::nat => hollight.real) n::nat. x (n, 0) f = real_of_num 0) & |
9606 x (n, 0::nat) f = real_of_num (0::nat)) & |
|
9607 (ALL (f::nat => hollight.real) (m::nat) n::nat. |
9912 (ALL (f::nat => hollight.real) (m::nat) n::nat. |
9608 x (n, Suc m) f = real_add (x (n, m) f) (f (n + m)))" |
9913 x (n, Suc m) f = real_add (x (n, m) f) (f (n + m)))" |
9609 by (import hollight sum_EXISTS) |
9914 by (import hollight sum_EXISTS) |
9610 |
9915 |
9611 constdefs |
9916 constdefs |
9612 psum :: "nat * nat => (nat => hollight.real) => hollight.real" |
9917 psum :: "nat * nat => (nat => hollight.real) => hollight.real" |
9613 "psum == |
9918 "psum == |
9614 SOME sum::nat * nat => (nat => hollight.real) => hollight.real. |
9919 SOME sum::nat * nat => (nat => hollight.real) => hollight.real. |
9615 (ALL (f::nat => hollight.real) n::nat. |
9920 (ALL (f::nat => hollight.real) n::nat. sum (n, 0) f = real_of_num 0) & |
9616 sum (n, 0::nat) f = real_of_num (0::nat)) & |
|
9617 (ALL (f::nat => hollight.real) (m::nat) n::nat. |
9921 (ALL (f::nat => hollight.real) (m::nat) n::nat. |
9618 sum (n, Suc m) f = real_add (sum (n, m) f) (f (n + m)))" |
9922 sum (n, Suc m) f = real_add (sum (n, m) f) (f (n + m)))" |
9619 |
9923 |
9620 lemma DEF_psum: "psum = |
9924 lemma DEF_psum: "psum = |
9621 (SOME sum::nat * nat => (nat => hollight.real) => hollight.real. |
9925 (SOME sum::nat * nat => (nat => hollight.real) => hollight.real. |
9622 (ALL (f::nat => hollight.real) n::nat. |
9926 (ALL (f::nat => hollight.real) n::nat. sum (n, 0) f = real_of_num 0) & |
9623 sum (n, 0::nat) f = real_of_num (0::nat)) & |
|
9624 (ALL (f::nat => hollight.real) (m::nat) n::nat. |
9927 (ALL (f::nat => hollight.real) (m::nat) n::nat. |
9625 sum (n, Suc m) f = real_add (sum (n, m) f) (f (n + m))))" |
9928 sum (n, Suc m) f = real_add (sum (n, m) f) (f (n + m))))" |
9626 by (import hollight DEF_psum) |
9929 by (import hollight DEF_psum) |
9627 |
9930 |
9628 lemma sum: "psum (n::nat, 0::nat) (f::nat => hollight.real) = real_of_num (0::nat) & |
9931 lemma sum: "psum (n::nat, 0) (f::nat => hollight.real) = real_of_num 0 & |
9629 psum (n, Suc (m::nat)) f = real_add (psum (n, m) f) (f (n + m))" |
9932 psum (n, Suc (m::nat)) f = real_add (psum (n, m) f) (f (n + m))" |
9630 by (import hollight sum) |
9933 by (import hollight sum) |
9631 |
9934 |
9632 lemma PSUM_SUM: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9935 lemma PSUM_SUM: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9633 psum (m, n) f = |
9936 psum (m, n) f = |
9634 hollight.sum |
9937 hollight.sum |
9635 (GSPEC (%u::nat. EX i::nat. SETSPEC u (<= m i & < i (m + n)) i)) f" |
9938 (GSPEC (%u::nat. EX i::nat. SETSPEC u (<= m i & < i (m + n)) i)) f" |
9636 by (import hollight PSUM_SUM) |
9939 by (import hollight PSUM_SUM) |
9637 |
9940 |
9638 lemma PSUM_SUM_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9941 lemma PSUM_SUM_NUMSEG: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9639 ~ (m = (0::nat) & n = (0::nat)) --> |
9942 ~ (m = 0 & n = 0) --> |
9640 psum (m, n) f = hollight.sum (dotdot m (m + n - NUMERAL_BIT1 (0::nat))) f" |
9943 psum (m, n) f = hollight.sum (dotdot m (m + n - NUMERAL_BIT1 0)) f" |
9641 by (import hollight PSUM_SUM_NUMSEG) |
9944 by (import hollight PSUM_SUM_NUMSEG) |
9642 |
9945 |
9643 lemma SUM_TWO: "ALL (f::nat => hollight.real) (n::nat) p::nat. |
9946 lemma SUM_TWO: "ALL (f::nat => hollight.real) (n::nat) p::nat. |
9644 real_add (psum (0::nat, n) f) (psum (n, p) f) = psum (0::nat, n + p) f" |
9947 real_add (psum (0, n) f) (psum (n, p) f) = psum (0, n + p) f" |
9645 by (import hollight SUM_TWO) |
9948 by (import hollight SUM_TWO) |
9646 |
9949 |
9647 lemma SUM_DIFF: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9950 lemma SUM_DIFF: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9648 psum (m, n) f = real_sub (psum (0::nat, m + n) f) (psum (0::nat, m) f)" |
9951 psum (m, n) f = real_sub (psum (0, m + n) f) (psum (0, m) f)" |
9649 by (import hollight SUM_DIFF) |
9952 by (import hollight SUM_DIFF) |
9650 |
9953 |
9651 lemma ABS_SUM: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9954 lemma ABS_SUM: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9652 real_le (real_abs (psum (m, n) f)) |
9955 real_le (real_abs (psum (m, n) f)) |
9653 (psum (m, n) (%n::nat. real_abs (f n)))" |
9956 (psum (m, n) (%n::nat. real_abs (f n)))" |
9662 (ALL r::nat. <= m r & < r (n + m) --> f r = g r) --> |
9965 (ALL r::nat. <= m r & < r (n + m) --> f r = g r) --> |
9663 psum (m, n) f = psum (m, n) g" |
9966 psum (m, n) f = psum (m, n) g" |
9664 by (import hollight SUM_EQ) |
9967 by (import hollight SUM_EQ) |
9665 |
9968 |
9666 lemma SUM_POS: "ALL f::nat => hollight.real. |
9969 lemma SUM_POS: "ALL f::nat => hollight.real. |
9667 (ALL n::nat. real_le (real_of_num (0::nat)) (f n)) --> |
9970 (ALL n::nat. real_le (real_of_num 0) (f n)) --> |
9668 (ALL (m::nat) n::nat. real_le (real_of_num (0::nat)) (psum (m, n) f))" |
9971 (ALL (m::nat) n::nat. real_le (real_of_num 0) (psum (m, n) f))" |
9669 by (import hollight SUM_POS) |
9972 by (import hollight SUM_POS) |
9670 |
9973 |
9671 lemma SUM_POS_GEN: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9974 lemma SUM_POS_GEN: "ALL (f::nat => hollight.real) (m::nat) n::nat. |
9672 (ALL n::nat. <= m n --> real_le (real_of_num (0::nat)) (f n)) --> |
9975 (ALL n::nat. <= m n --> real_le (real_of_num 0) (f n)) --> |
9673 real_le (real_of_num (0::nat)) (psum (m, n) f)" |
9976 real_le (real_of_num 0) (psum (m, n) f)" |
9674 by (import hollight SUM_POS_GEN) |
9977 by (import hollight SUM_POS_GEN) |
9675 |
9978 |
9676 lemma SUM_ABS: "ALL (f::nat => hollight.real) (m::nat) x::nat. |
9979 lemma SUM_ABS: "ALL (f::nat => hollight.real) (m::nat) x::nat. |
9677 real_abs (psum (m, x) (%m::nat. real_abs (f m))) = |
9980 real_abs (psum (m, x) (%m::nat. real_abs (f m))) = |
9678 psum (m, x) (%m::nat. real_abs (f m))" |
9981 psum (m, x) (%m::nat. real_abs (f m))" |
9682 real_le (real_abs (psum (m, n) f)) |
9985 real_le (real_abs (psum (m, n) f)) |
9683 (psum (m, n) (%n::nat. real_abs (f n)))" |
9986 (psum (m, n) (%n::nat. real_abs (f n)))" |
9684 by (import hollight SUM_ABS_LE) |
9987 by (import hollight SUM_ABS_LE) |
9685 |
9988 |
9686 lemma SUM_ZERO: "ALL (f::nat => hollight.real) N::nat. |
9989 lemma SUM_ZERO: "ALL (f::nat => hollight.real) N::nat. |
9687 (ALL n::nat. >= n N --> f n = real_of_num (0::nat)) --> |
9990 (ALL n::nat. >= n N --> f n = real_of_num 0) --> |
9688 (ALL (m::nat) n::nat. >= m N --> psum (m, n) f = real_of_num (0::nat))" |
9991 (ALL (m::nat) n::nat. >= m N --> psum (m, n) f = real_of_num 0)" |
9689 by (import hollight SUM_ZERO) |
9992 by (import hollight SUM_ZERO) |
9690 |
9993 |
9691 lemma SUM_ADD: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat. |
9994 lemma SUM_ADD: "ALL (f::nat => hollight.real) (g::nat => hollight.real) (m::nat) n::nat. |
9692 psum (m, n) (%n::nat. real_add (f n) (g n)) = |
9995 psum (m, n) (%n::nat. real_add (f n) (g n)) = |
9693 real_add (psum (m, n) f) (psum (m, n) g)" |
9996 real_add (psum (m, n) f) (psum (m, n) g)" |
9710 (ALL p::nat. <= m p & < p (m + n) --> f p = g p) --> |
10013 (ALL p::nat. <= m p & < p (m + n) --> f p = g p) --> |
9711 psum (m, n) f = psum (m, n) g" |
10014 psum (m, n) f = psum (m, n) g" |
9712 by (import hollight SUM_SUBST) |
10015 by (import hollight SUM_SUBST) |
9713 |
10016 |
9714 lemma SUM_NSUB: "ALL (n::nat) (f::nat => hollight.real) c::hollight.real. |
10017 lemma SUM_NSUB: "ALL (n::nat) (f::nat => hollight.real) c::hollight.real. |
9715 real_sub (psum (0::nat, n) f) (real_mul (real_of_num n) c) = |
10018 real_sub (psum (0, n) f) (real_mul (real_of_num n) c) = |
9716 psum (0::nat, n) (%p::nat. real_sub (f p) c)" |
10019 psum (0, n) (%p::nat. real_sub (f p) c)" |
9717 by (import hollight SUM_NSUB) |
10020 by (import hollight SUM_NSUB) |
9718 |
10021 |
9719 lemma SUM_BOUND: "ALL (f::nat => hollight.real) (K::hollight.real) (m::nat) n::nat. |
10022 lemma SUM_BOUND: "ALL (f::nat => hollight.real) (K::hollight.real) (m::nat) n::nat. |
9720 (ALL p::nat. <= m p & < p (m + n) --> real_le (f p) K) --> |
10023 (ALL p::nat. <= m p & < p (m + n) --> real_le (f p) K) --> |
9721 real_le (psum (m, n) f) (real_mul (real_of_num n) K)" |
10024 real_le (psum (m, n) f) (real_mul (real_of_num n) K)" |
9722 by (import hollight SUM_BOUND) |
10025 by (import hollight SUM_BOUND) |
9723 |
10026 |
9724 lemma SUM_GROUP: "ALL (n::nat) (k::nat) f::nat => hollight.real. |
10027 lemma SUM_GROUP: "ALL (n::nat) (k::nat) f::nat => hollight.real. |
9725 psum (0::nat, n) (%m::nat. psum (m * k, k) f) = psum (0::nat, n * k) f" |
10028 psum (0, n) (%m::nat. psum (m * k, k) f) = psum (0, n * k) f" |
9726 by (import hollight SUM_GROUP) |
10029 by (import hollight SUM_GROUP) |
9727 |
10030 |
9728 lemma SUM_1: "ALL (f::nat => hollight.real) n::nat. |
10031 lemma SUM_1: "ALL (f::nat => hollight.real) n::nat. psum (n, NUMERAL_BIT1 0) f = f n" |
9729 psum (n, NUMERAL_BIT1 (0::nat)) f = f n" |
|
9730 by (import hollight SUM_1) |
10032 by (import hollight SUM_1) |
9731 |
10033 |
9732 lemma SUM_2: "ALL (f::nat => hollight.real) n::nat. |
10034 lemma SUM_2: "ALL (f::nat => hollight.real) n::nat. |
9733 psum (n, NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) f = |
10035 psum (n, NUMERAL_BIT0 (NUMERAL_BIT1 0)) f = |
9734 real_add (f n) (f (n + NUMERAL_BIT1 (0::nat)))" |
10036 real_add (f n) (f (n + NUMERAL_BIT1 0))" |
9735 by (import hollight SUM_2) |
10037 by (import hollight SUM_2) |
9736 |
10038 |
9737 lemma SUM_OFFSET: "ALL (f::nat => hollight.real) (n::nat) k::nat. |
10039 lemma SUM_OFFSET: "ALL (f::nat => hollight.real) (n::nat) k::nat. |
9738 psum (0::nat, n) (%m::nat. f (m + k)) = |
10040 psum (0, n) (%m::nat. f (m + k)) = |
9739 real_sub (psum (0::nat, n + k) f) (psum (0::nat, k) f)" |
10041 real_sub (psum (0, n + k) f) (psum (0, k) f)" |
9740 by (import hollight SUM_OFFSET) |
10042 by (import hollight SUM_OFFSET) |
9741 |
10043 |
9742 lemma SUM_REINDEX: "ALL (f::nat => hollight.real) (m::nat) (k::nat) n::nat. |
10044 lemma SUM_REINDEX: "ALL (f::nat => hollight.real) (m::nat) (k::nat) n::nat. |
9743 psum (m + k, n) f = psum (m, n) (%r::nat. f (r + k))" |
10045 psum (m + k, n) f = psum (m, n) (%r::nat. f (r + k))" |
9744 by (import hollight SUM_REINDEX) |
10046 by (import hollight SUM_REINDEX) |
9745 |
10047 |
9746 lemma SUM_0: "ALL (m::nat) n::nat. |
10048 lemma SUM_0: "ALL (m::nat) n::nat. psum (m, n) (%r::nat. real_of_num 0) = real_of_num 0" |
9747 psum (m, n) (%r::nat. real_of_num (0::nat)) = real_of_num (0::nat)" |
|
9748 by (import hollight SUM_0) |
10049 by (import hollight SUM_0) |
9749 |
10050 |
9750 lemma SUM_CANCEL: "ALL (f::nat => hollight.real) (n::nat) d::nat. |
10051 lemma SUM_CANCEL: "ALL (f::nat => hollight.real) (n::nat) d::nat. |
9751 psum (n, d) (%n::nat. real_sub (f (Suc n)) (f n)) = |
10052 psum (n, d) (%n::nat. real_sub (f (Suc n)) (f n)) = |
9752 real_sub (f (n + d)) (f n)" |
10053 real_sub (f (n + d)) (f n)" |
9753 by (import hollight SUM_CANCEL) |
10054 by (import hollight SUM_CANCEL) |
9754 |
10055 |
9755 lemma SUM_HORNER: "ALL (f::nat => hollight.real) (n::nat) x::hollight.real. |
10056 lemma SUM_HORNER: "ALL (f::nat => hollight.real) (n::nat) x::hollight.real. |
9756 psum (0::nat, Suc n) (%i::nat. real_mul (f i) (real_pow x i)) = |
10057 psum (0, Suc n) (%i::nat. real_mul (f i) (real_pow x i)) = |
9757 real_add (f (0::nat)) |
10058 real_add (f 0) |
9758 (real_mul x |
10059 (real_mul x |
9759 (psum (0::nat, n) (%i::nat. real_mul (f (Suc i)) (real_pow x i))))" |
10060 (psum (0, n) (%i::nat. real_mul (f (Suc i)) (real_pow x i))))" |
9760 by (import hollight SUM_HORNER) |
10061 by (import hollight SUM_HORNER) |
9761 |
10062 |
9762 lemma SUM_CONST: "ALL (c::hollight.real) n::nat. |
10063 lemma SUM_CONST: "ALL (c::hollight.real) n::nat. |
9763 psum (0::nat, n) (%m::nat. c) = real_mul (real_of_num n) c" |
10064 psum (0, n) (%m::nat. c) = real_mul (real_of_num n) c" |
9764 by (import hollight SUM_CONST) |
10065 by (import hollight SUM_CONST) |
9765 |
10066 |
9766 lemma SUM_SPLIT: "ALL (f::nat => hollight.real) (n::nat) p::nat. |
10067 lemma SUM_SPLIT: "ALL (f::nat => hollight.real) (n::nat) p::nat. |
9767 real_add (psum (m::nat, n) f) (psum (m + n, p) f) = psum (m, n + p) f" |
10068 real_add (psum (m::nat, n) f) (psum (m + n, p) f) = psum (m, n + p) f" |
9768 by (import hollight SUM_SPLIT) |
10069 by (import hollight SUM_SPLIT) |
9772 psum (m2, n2) (%b::nat. psum (m1, n1) (%a::nat. f a b))" |
10073 psum (m2, n2) (%b::nat. psum (m1, n1) (%a::nat. f a b))" |
9773 by (import hollight SUM_SWAP) |
10074 by (import hollight SUM_SWAP) |
9774 |
10075 |
9775 lemma SUM_EQ_0: "(ALL r::nat. |
10076 lemma SUM_EQ_0: "(ALL r::nat. |
9776 <= (m::nat) r & < r (m + (n::nat)) --> |
10077 <= (m::nat) r & < r (m + (n::nat)) --> |
9777 (f::nat => hollight.real) r = real_of_num (0::nat)) --> |
10078 (f::nat => hollight.real) r = real_of_num 0) --> |
9778 psum (m, n) f = real_of_num (0::nat)" |
10079 psum (m, n) f = real_of_num 0" |
9779 by (import hollight SUM_EQ_0) |
10080 by (import hollight SUM_EQ_0) |
9780 |
10081 |
9781 lemma SUM_MORETERMS_EQ: "ALL (m::nat) (n::nat) p::nat. |
10082 lemma SUM_MORETERMS_EQ: "ALL (m::nat) (n::nat) p::nat. |
9782 <= n p & |
10083 <= n p & |
9783 (ALL r::nat. |
10084 (ALL r::nat. |
9784 <= (m + n) r & < r (m + p) --> |
10085 <= (m + n) r & < r (m + p) --> |
9785 (f::nat => hollight.real) r = real_of_num (0::nat)) --> |
10086 (f::nat => hollight.real) r = real_of_num 0) --> |
9786 psum (m, p) f = psum (m, n) f" |
10087 psum (m, p) f = psum (m, n) f" |
9787 by (import hollight SUM_MORETERMS_EQ) |
10088 by (import hollight SUM_MORETERMS_EQ) |
9788 |
10089 |
9789 lemma SUM_DIFFERENCES_EQ: "ALL (x::nat) (xa::nat) xb::nat. |
10090 lemma SUM_DIFFERENCES_EQ: "ALL (x::nat) (xa::nat) xb::nat. |
9790 <= xa xb & |
10091 <= xa xb & |
9794 real_sub (psum (x, xb) f) (psum (x, xa) f) = |
10095 real_sub (psum (x, xb) f) (psum (x, xa) f) = |
9795 real_sub (psum (x, xb) g) (psum (x, xa) g)" |
10096 real_sub (psum (x, xb) g) (psum (x, xa) g)" |
9796 by (import hollight SUM_DIFFERENCES_EQ) |
10097 by (import hollight SUM_DIFFERENCES_EQ) |
9797 |
10098 |
9798 constdefs |
10099 constdefs |
9799 re_Union :: "(('A::type => bool) => bool) => 'A::type => bool" |
10100 re_Union :: "(('A => bool) => bool) => 'A => bool" |
9800 "re_Union == |
10101 "re_Union == |
9801 %(u::('A::type => bool) => bool) x::'A::type. |
10102 %(u::('A::type => bool) => bool) x::'A::type. |
9802 EX s::'A::type => bool. u s & s x" |
10103 EX s::'A::type => bool. u s & s x" |
9803 |
10104 |
9804 lemma DEF_re_Union: "re_Union = |
10105 lemma DEF_re_Union: "re_Union = |
9805 (%(u::('A::type => bool) => bool) x::'A::type. |
10106 (%(u::('A::type => bool) => bool) x::'A::type. |
9806 EX s::'A::type => bool. u s & s x)" |
10107 EX s::'A::type => bool. u s & s x)" |
9807 by (import hollight DEF_re_Union) |
10108 by (import hollight DEF_re_Union) |
9808 |
10109 |
9809 constdefs |
10110 constdefs |
9810 re_union :: "('A::type => bool) => ('A::type => bool) => 'A::type => bool" |
10111 re_union :: "('A => bool) => ('A => bool) => 'A => bool" |
9811 "re_union == |
10112 "re_union == |
9812 %(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x | ua x" |
10113 %(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x | ua x" |
9813 |
10114 |
9814 lemma DEF_re_union: "re_union = |
10115 lemma DEF_re_union: "re_union = |
9815 (%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x | ua x)" |
10116 (%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x | ua x)" |
9816 by (import hollight DEF_re_union) |
10117 by (import hollight DEF_re_union) |
9817 |
10118 |
9818 constdefs |
10119 constdefs |
9819 re_intersect :: "('A::type => bool) => ('A::type => bool) => 'A::type => bool" |
10120 re_intersect :: "('A => bool) => ('A => bool) => 'A => bool" |
9820 "re_intersect == |
10121 "re_intersect == |
9821 %(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x & ua x" |
10122 %(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x & ua x" |
9822 |
10123 |
9823 lemma DEF_re_intersect: "re_intersect = |
10124 lemma DEF_re_intersect: "re_intersect = |
9824 (%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x & ua x)" |
10125 (%(u::'A::type => bool) (ua::'A::type => bool) x::'A::type. u x & ua x)" |
9825 by (import hollight DEF_re_intersect) |
10126 by (import hollight DEF_re_intersect) |
9826 |
10127 |
9827 constdefs |
10128 constdefs |
9828 re_null :: "'A::type => bool" |
10129 re_null :: "'A => bool" |
9829 "re_null == %x::'A::type. False" |
10130 "re_null == %x::'A::type. False" |
9830 |
10131 |
9831 lemma DEF_re_null: "re_null = (%x::'A::type. False)" |
10132 lemma DEF_re_null: "re_null = (%x::'A::type. False)" |
9832 by (import hollight DEF_re_null) |
10133 by (import hollight DEF_re_null) |
9833 |
10134 |
9834 constdefs |
10135 constdefs |
9835 re_universe :: "'A::type => bool" |
10136 re_universe :: "'A => bool" |
9836 "re_universe == %x::'A::type. True" |
10137 "re_universe == %x::'A::type. True" |
9837 |
10138 |
9838 lemma DEF_re_universe: "re_universe = (%x::'A::type. True)" |
10139 lemma DEF_re_universe: "re_universe = (%x::'A::type. True)" |
9839 by (import hollight DEF_re_universe) |
10140 by (import hollight DEF_re_universe) |
9840 |
10141 |
9841 constdefs |
10142 constdefs |
9842 re_subset :: "('A::type => bool) => ('A::type => bool) => bool" |
10143 re_subset :: "('A => bool) => ('A => bool) => bool" |
9843 "re_subset == |
10144 "re_subset == |
9844 %(u::'A::type => bool) ua::'A::type => bool. ALL x::'A::type. u x --> ua x" |
10145 %(u::'A::type => bool) ua::'A::type => bool. ALL x::'A::type. u x --> ua x" |
9845 |
10146 |
9846 lemma DEF_re_subset: "re_subset = |
10147 lemma DEF_re_subset: "re_subset = |
9847 (%(u::'A::type => bool) ua::'A::type => bool. ALL x::'A::type. u x --> ua x)" |
10148 (%(u::'A::type => bool) ua::'A::type => bool. ALL x::'A::type. u x --> ua x)" |
9848 by (import hollight DEF_re_subset) |
10149 by (import hollight DEF_re_subset) |
9849 |
10150 |
9850 constdefs |
10151 constdefs |
9851 re_compl :: "('A::type => bool) => 'A::type => bool" |
10152 re_compl :: "('A => bool) => 'A => bool" |
9852 "re_compl == %(u::'A::type => bool) x::'A::type. ~ u x" |
10153 "re_compl == %(u::'A::type => bool) x::'A::type. ~ u x" |
9853 |
10154 |
9854 lemma DEF_re_compl: "re_compl = (%(u::'A::type => bool) x::'A::type. ~ u x)" |
10155 lemma DEF_re_compl: "re_compl = (%(u::'A::type => bool) x::'A::type. ~ u x)" |
9855 by (import hollight DEF_re_compl) |
10156 by (import hollight DEF_re_compl) |
9856 |
10157 |
9867 lemma SUBSETA_TRANS: "ALL (P::'A::type => bool) (Q::'A::type => bool) R::'A::type => bool. |
10168 lemma SUBSETA_TRANS: "ALL (P::'A::type => bool) (Q::'A::type => bool) R::'A::type => bool. |
9868 re_subset P Q & re_subset Q R --> re_subset P R" |
10169 re_subset P Q & re_subset Q R --> re_subset P R" |
9869 by (import hollight SUBSETA_TRANS) |
10170 by (import hollight SUBSETA_TRANS) |
9870 |
10171 |
9871 constdefs |
10172 constdefs |
9872 istopology :: "(('A::type => bool) => bool) => bool" |
10173 istopology :: "(('A => bool) => bool) => bool" |
9873 "istopology == |
10174 "istopology == |
9874 %u::('A::type => bool) => bool. |
10175 %u::('A::type => bool) => bool. |
9875 u re_null & |
10176 u re_null & |
9876 u re_universe & |
10177 u re_universe & |
9877 (ALL (a::'A::type => bool) b::'A::type => bool. |
10178 (ALL (a::'A::type => bool) b::'A::type => bool. |
9899 |
10200 |
9900 syntax |
10201 syntax |
9901 topology :: _ |
10202 topology :: _ |
9902 |
10203 |
9903 lemmas "TYDEF_topology_@intern" = typedef_hol2hollight |
10204 lemmas "TYDEF_topology_@intern" = typedef_hol2hollight |
9904 [where a="a :: 'A::type topology" and r=r , |
10205 [where a="a :: 'A topology" and r=r , |
9905 OF type_definition_topology] |
10206 OF type_definition_topology] |
9906 |
10207 |
9907 lemma TOPOLOGY: "ALL L::'A::type topology. |
10208 lemma TOPOLOGY: "ALL L::'A::type topology. |
9908 open L re_null & |
10209 open L re_null & |
9909 open L re_universe & |
10210 open L re_universe & |
9916 lemma TOPOLOGY_UNION: "ALL (x::'A::type topology) xa::('A::type => bool) => bool. |
10217 lemma TOPOLOGY_UNION: "ALL (x::'A::type topology) xa::('A::type => bool) => bool. |
9917 re_subset xa (open x) --> open x (re_Union xa)" |
10218 re_subset xa (open x) --> open x (re_Union xa)" |
9918 by (import hollight TOPOLOGY_UNION) |
10219 by (import hollight TOPOLOGY_UNION) |
9919 |
10220 |
9920 constdefs |
10221 constdefs |
9921 neigh :: "'A::type topology => ('A::type => bool) * 'A::type => bool" |
10222 neigh :: "'A topology => ('A => bool) * 'A => bool" |
9922 "neigh == |
10223 "neigh == |
9923 %(u::'A::type topology) ua::('A::type => bool) * 'A::type. |
10224 %(u::'A::type topology) ua::('A::type => bool) * 'A::type. |
9924 EX P::'A::type => bool. open u P & re_subset P (fst ua) & P (snd ua)" |
10225 EX P::'A::type => bool. open u P & re_subset P (fst ua) & P (snd ua)" |
9925 |
10226 |
9926 lemma DEF_neigh: "neigh = |
10227 lemma DEF_neigh: "neigh = |
9950 S x --> |
10251 S x --> |
9951 (EX xa::'A::type => bool. neigh top (xa, x) & re_subset xa S))" |
10252 (EX xa::'A::type => bool. neigh top (xa, x) & re_subset xa S))" |
9952 by (import hollight OPEN_NEIGH) |
10253 by (import hollight OPEN_NEIGH) |
9953 |
10254 |
9954 constdefs |
10255 constdefs |
9955 closed :: "'A::type topology => ('A::type => bool) => bool" |
10256 closed :: "'A topology => ('A => bool) => bool" |
9956 "closed == %(u::'A::type topology) ua::'A::type => bool. open u (re_compl ua)" |
10257 "closed == %(u::'A::type topology) ua::'A::type => bool. open u (re_compl ua)" |
9957 |
10258 |
9958 lemma DEF_closed: "closed = |
10259 lemma DEF_closed: "closed = |
9959 (%(u::'A::type topology) ua::'A::type => bool. open u (re_compl ua))" |
10260 (%(u::'A::type topology) ua::'A::type => bool. open u (re_compl ua))" |
9960 by (import hollight DEF_closed) |
10261 by (import hollight DEF_closed) |
9961 |
10262 |
9962 constdefs |
10263 constdefs |
9963 limpt :: "'A::type topology => 'A::type => ('A::type => bool) => bool" |
10264 limpt :: "'A topology => 'A => ('A => bool) => bool" |
9964 "limpt == |
10265 "limpt == |
9965 %(u::'A::type topology) (ua::'A::type) ub::'A::type => bool. |
10266 %(u::'A::type topology) (ua::'A::type) ub::'A::type => bool. |
9966 ALL N::'A::type => bool. |
10267 ALL N::'A::type => bool. |
9967 neigh u (N, ua) --> (EX y::'A::type. ua ~= y & ub y & N y)" |
10268 neigh u (N, ua) --> (EX y::'A::type. ua ~= y & ub y & N y)" |
9968 |
10269 |
9975 lemma CLOSED_LIMPT: "ALL (top::'A::type topology) S::'A::type => bool. |
10276 lemma CLOSED_LIMPT: "ALL (top::'A::type topology) S::'A::type => bool. |
9976 closed top S = (ALL x::'A::type. limpt top x S --> S x)" |
10277 closed top S = (ALL x::'A::type. limpt top x S --> S x)" |
9977 by (import hollight CLOSED_LIMPT) |
10278 by (import hollight CLOSED_LIMPT) |
9978 |
10279 |
9979 constdefs |
10280 constdefs |
9980 ismet :: "('A::type * 'A::type => hollight.real) => bool" |
10281 ismet :: "('A * 'A => hollight.real) => bool" |
9981 "ismet == |
10282 "ismet == |
9982 %u::'A::type * 'A::type => hollight.real. |
10283 %u::'A::type * 'A::type => hollight.real. |
9983 (ALL (x::'A::type) y::'A::type. |
10284 (ALL (x::'A::type) y::'A::type. (u (x, y) = real_of_num 0) = (x = y)) & |
9984 (u (x, y) = real_of_num (0::nat)) = (x = y)) & |
|
9985 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
10285 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
9986 real_le (u (y, z)) (real_add (u (x, y)) (u (x, z))))" |
10286 real_le (u (y, z)) (real_add (u (x, y)) (u (x, z))))" |
9987 |
10287 |
9988 lemma DEF_ismet: "ismet = |
10288 lemma DEF_ismet: "ismet = |
9989 (%u::'A::type * 'A::type => hollight.real. |
10289 (%u::'A::type * 'A::type => hollight.real. |
9990 (ALL (x::'A::type) y::'A::type. |
10290 (ALL (x::'A::type) y::'A::type. (u (x, y) = real_of_num 0) = (x = y)) & |
9991 (u (x, y) = real_of_num (0::nat)) = (x = y)) & |
|
9992 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
10291 (ALL (x::'A::type) (y::'A::type) z::'A::type. |
9993 real_le (u (y, z)) (real_add (u (x, y)) (u (x, z)))))" |
10292 real_le (u (y, z)) (real_add (u (x, y)) (u (x, z)))))" |
9994 by (import hollight DEF_ismet) |
10293 by (import hollight DEF_ismet) |
9995 |
10294 |
9996 typedef (open) ('A) metric = "(Collect::(('A::type * 'A::type => hollight.real) => bool) |
10295 typedef (open) ('A) metric = "(Collect::(('A::type * 'A::type => hollight.real) => bool) |
10006 |
10305 |
10007 syntax |
10306 syntax |
10008 metric :: _ |
10307 metric :: _ |
10009 |
10308 |
10010 lemmas "TYDEF_metric_@intern" = typedef_hol2hollight |
10309 lemmas "TYDEF_metric_@intern" = typedef_hol2hollight |
10011 [where a="a :: 'A::type metric" and r=r , |
10310 [where a="a :: 'A metric" and r=r , |
10012 OF type_definition_metric] |
10311 OF type_definition_metric] |
10013 |
10312 |
10014 lemma METRIC_ISMET: "ALL m::'A::type metric. ismet (mdist m)" |
10313 lemma METRIC_ISMET: "ALL m::'A::type metric. ismet (mdist m)" |
10015 by (import hollight METRIC_ISMET) |
10314 by (import hollight METRIC_ISMET) |
10016 |
10315 |
10017 lemma METRIC_ZERO: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10316 lemma METRIC_ZERO: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10018 (mdist m (x, y) = real_of_num (0::nat)) = (x = y)" |
10317 (mdist m (x, y) = real_of_num 0) = (x = y)" |
10019 by (import hollight METRIC_ZERO) |
10318 by (import hollight METRIC_ZERO) |
10020 |
10319 |
10021 lemma METRIC_SAME: "ALL (m::'A::type metric) x::'A::type. mdist m (x, x) = real_of_num (0::nat)" |
10320 lemma METRIC_SAME: "ALL (m::'A::type metric) x::'A::type. mdist m (x, x) = real_of_num 0" |
10022 by (import hollight METRIC_SAME) |
10321 by (import hollight METRIC_SAME) |
10023 |
10322 |
10024 lemma METRIC_POS: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10323 lemma METRIC_POS: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10025 real_le (real_of_num (0::nat)) (mdist m (x, y))" |
10324 real_le (real_of_num 0) (mdist m (x, y))" |
10026 by (import hollight METRIC_POS) |
10325 by (import hollight METRIC_POS) |
10027 |
10326 |
10028 lemma METRIC_SYM: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10327 lemma METRIC_SYM: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10029 mdist m (x, y) = mdist m (y, x)" |
10328 mdist m (x, y) = mdist m (y, x)" |
10030 by (import hollight METRIC_SYM) |
10329 by (import hollight METRIC_SYM) |
10032 lemma METRIC_TRIANGLE: "ALL (m::'A::type metric) (x::'A::type) (y::'A::type) z::'A::type. |
10331 lemma METRIC_TRIANGLE: "ALL (m::'A::type metric) (x::'A::type) (y::'A::type) z::'A::type. |
10033 real_le (mdist m (x, z)) (real_add (mdist m (x, y)) (mdist m (y, z)))" |
10332 real_le (mdist m (x, z)) (real_add (mdist m (x, y)) (mdist m (y, z)))" |
10034 by (import hollight METRIC_TRIANGLE) |
10333 by (import hollight METRIC_TRIANGLE) |
10035 |
10334 |
10036 lemma METRIC_NZ: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10335 lemma METRIC_NZ: "ALL (m::'A::type metric) (x::'A::type) y::'A::type. |
10037 x ~= y --> real_lt (real_of_num (0::nat)) (mdist m (x, y))" |
10336 x ~= y --> real_lt (real_of_num 0) (mdist m (x, y))" |
10038 by (import hollight METRIC_NZ) |
10337 by (import hollight METRIC_NZ) |
10039 |
10338 |
10040 constdefs |
10339 constdefs |
10041 mtop :: "'A::type metric => 'A::type topology" |
10340 mtop :: "'A metric => 'A topology" |
10042 "mtop == |
10341 "mtop == |
10043 %u::'A::type metric. |
10342 %u::'A::type metric. |
10044 topology |
10343 topology |
10045 (%S::'A::type => bool. |
10344 (%S::'A::type => bool. |
10046 ALL x::'A::type. |
10345 ALL x::'A::type. |
10047 S x --> |
10346 S x --> |
10048 (EX e::hollight.real. |
10347 (EX e::hollight.real. |
10049 real_lt (real_of_num (0::nat)) e & |
10348 real_lt (real_of_num 0) e & |
10050 (ALL y::'A::type. real_lt (mdist u (x, y)) e --> S y)))" |
10349 (ALL y::'A::type. real_lt (mdist u (x, y)) e --> S y)))" |
10051 |
10350 |
10052 lemma DEF_mtop: "mtop = |
10351 lemma DEF_mtop: "mtop = |
10053 (%u::'A::type metric. |
10352 (%u::'A::type metric. |
10054 topology |
10353 topology |
10055 (%S::'A::type => bool. |
10354 (%S::'A::type => bool. |
10056 ALL x::'A::type. |
10355 ALL x::'A::type. |
10057 S x --> |
10356 S x --> |
10058 (EX e::hollight.real. |
10357 (EX e::hollight.real. |
10059 real_lt (real_of_num (0::nat)) e & |
10358 real_lt (real_of_num 0) e & |
10060 (ALL y::'A::type. real_lt (mdist u (x, y)) e --> S y))))" |
10359 (ALL y::'A::type. real_lt (mdist u (x, y)) e --> S y))))" |
10061 by (import hollight DEF_mtop) |
10360 by (import hollight DEF_mtop) |
10062 |
10361 |
10063 lemma mtop_istopology: "ALL m::'A::type metric. |
10362 lemma mtop_istopology: "ALL m::'A::type metric. |
10064 istopology |
10363 istopology |
10065 (%S::'A::type => bool. |
10364 (%S::'A::type => bool. |
10066 ALL x::'A::type. |
10365 ALL x::'A::type. |
10067 S x --> |
10366 S x --> |
10068 (EX e::hollight.real. |
10367 (EX e::hollight.real. |
10069 real_lt (real_of_num (0::nat)) e & |
10368 real_lt (real_of_num 0) e & |
10070 (ALL y::'A::type. real_lt (mdist m (x, y)) e --> S y)))" |
10369 (ALL y::'A::type. real_lt (mdist m (x, y)) e --> S y)))" |
10071 by (import hollight mtop_istopology) |
10370 by (import hollight mtop_istopology) |
10072 |
10371 |
10073 lemma MTOP_OPEN: "ALL m::'A::type metric. |
10372 lemma MTOP_OPEN: "ALL m::'A::type metric. |
10074 open (mtop m) (S::'A::type => bool) = |
10373 open (mtop m) (S::'A::type => bool) = |
10075 (ALL x::'A::type. |
10374 (ALL x::'A::type. |
10076 S x --> |
10375 S x --> |
10077 (EX e::hollight.real. |
10376 (EX e::hollight.real. |
10078 real_lt (real_of_num (0::nat)) e & |
10377 real_lt (real_of_num 0) e & |
10079 (ALL y::'A::type. real_lt (mdist m (x, y)) e --> S y)))" |
10378 (ALL y::'A::type. real_lt (mdist m (x, y)) e --> S y)))" |
10080 by (import hollight MTOP_OPEN) |
10379 by (import hollight MTOP_OPEN) |
10081 |
10380 |
10082 constdefs |
10381 constdefs |
10083 ball :: "'A::type metric => 'A::type * hollight.real => 'A::type => bool" |
10382 ball :: "'A metric => 'A * hollight.real => 'A => bool" |
10084 "ball == |
10383 "ball == |
10085 %(u::'A::type metric) (ua::'A::type * hollight.real) y::'A::type. |
10384 %(u::'A::type metric) (ua::'A::type * hollight.real) y::'A::type. |
10086 real_lt (mdist u (fst ua, y)) (snd ua)" |
10385 real_lt (mdist u (fst ua, y)) (snd ua)" |
10087 |
10386 |
10088 lemma DEF_ball: "ball = |
10387 lemma DEF_ball: "ball = |
10089 (%(u::'A::type metric) (ua::'A::type * hollight.real) y::'A::type. |
10388 (%(u::'A::type metric) (ua::'A::type * hollight.real) y::'A::type. |
10090 real_lt (mdist u (fst ua, y)) (snd ua))" |
10389 real_lt (mdist u (fst ua, y)) (snd ua))" |
10091 by (import hollight DEF_ball) |
10390 by (import hollight DEF_ball) |
10092 |
10391 |
10093 lemma BALL_OPEN: "ALL (m::'A::type metric) (x::'A::type) e::hollight.real. |
10392 lemma BALL_OPEN: "ALL (m::'A::type metric) (x::'A::type) e::hollight.real. |
10094 real_lt (real_of_num (0::nat)) e --> open (mtop m) (ball m (x, e))" |
10393 real_lt (real_of_num 0) e --> open (mtop m) (ball m (x, e))" |
10095 by (import hollight BALL_OPEN) |
10394 by (import hollight BALL_OPEN) |
10096 |
10395 |
10097 lemma BALL_NEIGH: "ALL (m::'A::type metric) (x::'A::type) e::hollight.real. |
10396 lemma BALL_NEIGH: "ALL (m::'A::type metric) (x::'A::type) e::hollight.real. |
10098 real_lt (real_of_num (0::nat)) e --> neigh (mtop m) (ball m (x, e), x)" |
10397 real_lt (real_of_num 0) e --> neigh (mtop m) (ball m (x, e), x)" |
10099 by (import hollight BALL_NEIGH) |
10398 by (import hollight BALL_NEIGH) |
10100 |
10399 |
10101 lemma MTOP_LIMPT: "ALL (m::'A::type metric) (x::'A::type) S::'A::type => bool. |
10400 lemma MTOP_LIMPT: "ALL (m::'A::type metric) (x::'A::type) S::'A::type => bool. |
10102 limpt (mtop m) x S = |
10401 limpt (mtop m) x S = |
10103 (ALL e::hollight.real. |
10402 (ALL e::hollight.real. |
10104 real_lt (real_of_num (0::nat)) e --> |
10403 real_lt (real_of_num 0) e --> |
10105 (EX y::'A::type. x ~= y & S y & real_lt (mdist m (x, y)) e))" |
10404 (EX y::'A::type. x ~= y & S y & real_lt (mdist m (x, y)) e))" |
10106 by (import hollight MTOP_LIMPT) |
10405 by (import hollight MTOP_LIMPT) |
10107 |
10406 |
10108 lemma ISMET_R1: "ismet |
10407 lemma ISMET_R1: "ismet |
10109 (GABS |
10408 (GABS |
10140 lemma MR1_SUB: "ALL (x::hollight.real) d::hollight.real. |
10439 lemma MR1_SUB: "ALL (x::hollight.real) d::hollight.real. |
10141 mdist mr1 (x, real_sub x d) = real_abs d" |
10440 mdist mr1 (x, real_sub x d) = real_abs d" |
10142 by (import hollight MR1_SUB) |
10441 by (import hollight MR1_SUB) |
10143 |
10442 |
10144 lemma MR1_ADD_LE: "ALL (x::hollight.real) d::hollight.real. |
10443 lemma MR1_ADD_LE: "ALL (x::hollight.real) d::hollight.real. |
10145 real_le (real_of_num (0::nat)) d --> mdist mr1 (x, real_add x d) = d" |
10444 real_le (real_of_num 0) d --> mdist mr1 (x, real_add x d) = d" |
10146 by (import hollight MR1_ADD_LE) |
10445 by (import hollight MR1_ADD_LE) |
10147 |
10446 |
10148 lemma MR1_SUB_LE: "ALL (x::hollight.real) d::hollight.real. |
10447 lemma MR1_SUB_LE: "ALL (x::hollight.real) d::hollight.real. |
10149 real_le (real_of_num (0::nat)) d --> mdist mr1 (x, real_sub x d) = d" |
10448 real_le (real_of_num 0) d --> mdist mr1 (x, real_sub x d) = d" |
10150 by (import hollight MR1_SUB_LE) |
10449 by (import hollight MR1_SUB_LE) |
10151 |
10450 |
10152 lemma MR1_ADD_LT: "ALL (x::hollight.real) d::hollight.real. |
10451 lemma MR1_ADD_LT: "ALL (x::hollight.real) d::hollight.real. |
10153 real_lt (real_of_num (0::nat)) d --> mdist mr1 (x, real_add x d) = d" |
10452 real_lt (real_of_num 0) d --> mdist mr1 (x, real_add x d) = d" |
10154 by (import hollight MR1_ADD_LT) |
10453 by (import hollight MR1_ADD_LT) |
10155 |
10454 |
10156 lemma MR1_SUB_LT: "ALL (x::hollight.real) d::hollight.real. |
10455 lemma MR1_SUB_LT: "ALL (x::hollight.real) d::hollight.real. |
10157 real_lt (real_of_num (0::nat)) d --> mdist mr1 (x, real_sub x d) = d" |
10456 real_lt (real_of_num 0) d --> mdist mr1 (x, real_sub x d) = d" |
10158 by (import hollight MR1_SUB_LT) |
10457 by (import hollight MR1_SUB_LT) |
10159 |
10458 |
10160 lemma MR1_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
10459 lemma MR1_BETWEEN1: "ALL (x::hollight.real) (y::hollight.real) z::hollight.real. |
10161 real_lt x z & real_lt (mdist mr1 (x, y)) (real_sub z x) --> real_lt y z" |
10460 real_lt x z & real_lt (mdist mr1 (x, y)) (real_sub z x) --> real_lt y z" |
10162 by (import hollight MR1_BETWEEN1) |
10461 by (import hollight MR1_BETWEEN1) |
10163 |
10462 |
10164 lemma MR1_LIMPT: "ALL x::hollight.real. limpt (mtop mr1) x re_universe" |
10463 lemma MR1_LIMPT: "ALL x::hollight.real. limpt (mtop mr1) x re_universe" |
10165 by (import hollight MR1_LIMPT) |
10464 by (import hollight MR1_LIMPT) |
10166 |
10465 |
10167 constdefs |
10466 constdefs |
10168 dorder :: "('A::type => 'A::type => bool) => bool" |
10467 dorder :: "('A => 'A => bool) => bool" |
10169 "dorder == |
10468 "dorder == |
10170 %u::'A::type => 'A::type => bool. |
10469 %u::'A::type => 'A::type => bool. |
10171 ALL (x::'A::type) y::'A::type. |
10470 ALL (x::'A::type) y::'A::type. |
10172 u x x & u y y --> |
10471 u x x & u y y --> |
10173 (EX z::'A::type. u z z & (ALL w::'A::type. u w z --> u w x & u w y))" |
10472 (EX z::'A::type. u z z & (ALL w::'A::type. u w z --> u w x & u w y))" |
10178 u x x & u y y --> |
10477 u x x & u y y --> |
10179 (EX z::'A::type. u z z & (ALL w::'A::type. u w z --> u w x & u w y)))" |
10478 (EX z::'A::type. u z z & (ALL w::'A::type. u w z --> u w x & u w y)))" |
10180 by (import hollight DEF_dorder) |
10479 by (import hollight DEF_dorder) |
10181 |
10480 |
10182 constdefs |
10481 constdefs |
10183 tends :: "('B::type => 'A::type) |
10482 tends :: "('B => 'A) => 'A => 'A topology * ('B => 'B => bool) => bool" |
10184 => 'A::type => 'A::type topology * ('B::type => 'B::type => bool) => bool" |
|
10185 "tends == |
10483 "tends == |
10186 %(u::'B::type => 'A::type) (ua::'A::type) |
10484 %(u::'B::type => 'A::type) (ua::'A::type) |
10187 ub::'A::type topology * ('B::type => 'B::type => bool). |
10485 ub::'A::type topology * ('B::type => 'B::type => bool). |
10188 ALL N::'A::type => bool. |
10486 ALL N::'A::type => bool. |
10189 neigh (fst ub) (N, ua) --> |
10487 neigh (fst ub) (N, ua) --> |
10198 (EX n::'B::type. |
10496 (EX n::'B::type. |
10199 snd ub n n & (ALL m::'B::type. snd ub m n --> N (u m))))" |
10497 snd ub n n & (ALL m::'B::type. snd ub m n --> N (u m))))" |
10200 by (import hollight DEF_tends) |
10498 by (import hollight DEF_tends) |
10201 |
10499 |
10202 constdefs |
10500 constdefs |
10203 bounded :: "'A::type metric * ('B::type => 'B::type => bool) |
10501 bounded :: "'A metric * ('B => 'B => bool) => ('B => 'A) => bool" |
10204 => ('B::type => 'A::type) => bool" |
|
10205 "bounded == |
10502 "bounded == |
10206 %(u::'A::type metric * ('B::type => 'B::type => bool)) |
10503 %(u::'A::type metric * ('B::type => 'B::type => bool)) |
10207 ua::'B::type => 'A::type. |
10504 ua::'B::type => 'A::type. |
10208 EX (k::hollight.real) (x::'A::type) N::'B::type. |
10505 EX (k::hollight.real) (x::'A::type) N::'B::type. |
10209 snd u N N & |
10506 snd u N N & |
10216 snd u N N & |
10513 snd u N N & |
10217 (ALL n::'B::type. snd u n N --> real_lt (mdist (fst u) (ua n, x)) k))" |
10514 (ALL n::'B::type. snd u n N --> real_lt (mdist (fst u) (ua n, x)) k))" |
10218 by (import hollight DEF_bounded) |
10515 by (import hollight DEF_bounded) |
10219 |
10516 |
10220 constdefs |
10517 constdefs |
10221 tendsto :: "'A::type metric * 'A::type => 'A::type => 'A::type => bool" |
10518 tendsto :: "'A metric * 'A => 'A => 'A => bool" |
10222 "tendsto == |
10519 "tendsto == |
10223 %(u::'A::type metric * 'A::type) (ua::'A::type) ub::'A::type. |
10520 %(u::'A::type metric * 'A::type) (ua::'A::type) ub::'A::type. |
10224 real_lt (real_of_num (0::nat)) (mdist (fst u) (snd u, ua)) & |
10521 real_lt (real_of_num 0) (mdist (fst u) (snd u, ua)) & |
10225 real_le (mdist (fst u) (snd u, ua)) (mdist (fst u) (snd u, ub))" |
10522 real_le (mdist (fst u) (snd u, ua)) (mdist (fst u) (snd u, ub))" |
10226 |
10523 |
10227 lemma DEF_tendsto: "tendsto = |
10524 lemma DEF_tendsto: "tendsto = |
10228 (%(u::'A::type metric * 'A::type) (ua::'A::type) ub::'A::type. |
10525 (%(u::'A::type metric * 'A::type) (ua::'A::type) ub::'A::type. |
10229 real_lt (real_of_num (0::nat)) (mdist (fst u) (snd u, ua)) & |
10526 real_lt (real_of_num 0) (mdist (fst u) (snd u, ua)) & |
10230 real_le (mdist (fst u) (snd u, ua)) (mdist (fst u) (snd u, ub)))" |
10527 real_le (mdist (fst u) (snd u, ua)) (mdist (fst u) (snd u, ub)))" |
10231 by (import hollight DEF_tendsto) |
10528 by (import hollight DEF_tendsto) |
10232 |
10529 |
10233 lemma DORDER_LEMMA: "ALL g::'A::type => 'A::type => bool. |
10530 lemma DORDER_LEMMA: "ALL g::'A::type => 'A::type => bool. |
10234 dorder g --> |
10531 dorder g --> |
10246 |
10543 |
10247 lemma MTOP_TENDS: "ALL (d::'A::type metric) (g::'B::type => 'B::type => bool) |
10544 lemma MTOP_TENDS: "ALL (d::'A::type metric) (g::'B::type => 'B::type => bool) |
10248 (x::'B::type => 'A::type) x0::'A::type. |
10545 (x::'B::type => 'A::type) x0::'A::type. |
10249 tends x x0 (mtop d, g) = |
10546 tends x x0 (mtop d, g) = |
10250 (ALL e::hollight.real. |
10547 (ALL e::hollight.real. |
10251 real_lt (real_of_num (0::nat)) e --> |
10548 real_lt (real_of_num 0) e --> |
10252 (EX n::'B::type. |
10549 (EX n::'B::type. |
10253 g n n & |
10550 g n n & |
10254 (ALL m::'B::type. g m n --> real_lt (mdist d (x m, x0)) e)))" |
10551 (ALL m::'B::type. g m n --> real_lt (mdist d (x m, x0)) e)))" |
10255 by (import hollight MTOP_TENDS) |
10552 by (import hollight MTOP_TENDS) |
10256 |
10553 |
10262 by (import hollight MTOP_TENDS_UNIQ) |
10559 by (import hollight MTOP_TENDS_UNIQ) |
10263 |
10560 |
10264 lemma SEQ_TENDS: "ALL (d::'A::type metric) (x::nat => 'A::type) x0::'A::type. |
10561 lemma SEQ_TENDS: "ALL (d::'A::type metric) (x::nat => 'A::type) x0::'A::type. |
10265 tends x x0 (mtop d, >=) = |
10562 tends x x0 (mtop d, >=) = |
10266 (ALL xa::hollight.real. |
10563 (ALL xa::hollight.real. |
10267 real_lt (real_of_num (0::nat)) xa --> |
10564 real_lt (real_of_num 0) xa --> |
10268 (EX xb::nat. |
10565 (EX xb::nat. |
10269 ALL xc::nat. >= xc xb --> real_lt (mdist d (x xc, x0)) xa))" |
10566 ALL xc::nat. >= xc xb --> real_lt (mdist d (x xc, x0)) xa))" |
10270 by (import hollight SEQ_TENDS) |
10567 by (import hollight SEQ_TENDS) |
10271 |
10568 |
10272 lemma LIM_TENDS: "ALL (m1::'A::type metric) (m2::'B::type metric) (f::'A::type => 'B::type) |
10569 lemma LIM_TENDS: "ALL (m1::'A::type metric) (m2::'B::type metric) (f::'A::type => 'B::type) |
10273 (x0::'A::type) y0::'B::type. |
10570 (x0::'A::type) y0::'B::type. |
10274 limpt (mtop m1) x0 re_universe --> |
10571 limpt (mtop m1) x0 re_universe --> |
10275 tends f y0 (mtop m2, tendsto (m1, x0)) = |
10572 tends f y0 (mtop m2, tendsto (m1, x0)) = |
10276 (ALL e::hollight.real. |
10573 (ALL e::hollight.real. |
10277 real_lt (real_of_num (0::nat)) e --> |
10574 real_lt (real_of_num 0) e --> |
10278 (EX d::hollight.real. |
10575 (EX d::hollight.real. |
10279 real_lt (real_of_num (0::nat)) d & |
10576 real_lt (real_of_num 0) d & |
10280 (ALL x::'A::type. |
10577 (ALL x::'A::type. |
10281 real_lt (real_of_num (0::nat)) (mdist m1 (x, x0)) & |
10578 real_lt (real_of_num 0) (mdist m1 (x, x0)) & |
10282 real_le (mdist m1 (x, x0)) d --> |
10579 real_le (mdist m1 (x, x0)) d --> |
10283 real_lt (mdist m2 (f x, y0)) e)))" |
10580 real_lt (mdist m2 (f x, y0)) e)))" |
10284 by (import hollight LIM_TENDS) |
10581 by (import hollight LIM_TENDS) |
10285 |
10582 |
10286 lemma LIM_TENDS2: "ALL (m1::'A::type metric) (m2::'B::type metric) (f::'A::type => 'B::type) |
10583 lemma LIM_TENDS2: "ALL (m1::'A::type metric) (m2::'B::type metric) (f::'A::type => 'B::type) |
10287 (x0::'A::type) y0::'B::type. |
10584 (x0::'A::type) y0::'B::type. |
10288 limpt (mtop m1) x0 re_universe --> |
10585 limpt (mtop m1) x0 re_universe --> |
10289 tends f y0 (mtop m2, tendsto (m1, x0)) = |
10586 tends f y0 (mtop m2, tendsto (m1, x0)) = |
10290 (ALL e::hollight.real. |
10587 (ALL e::hollight.real. |
10291 real_lt (real_of_num (0::nat)) e --> |
10588 real_lt (real_of_num 0) e --> |
10292 (EX d::hollight.real. |
10589 (EX d::hollight.real. |
10293 real_lt (real_of_num (0::nat)) d & |
10590 real_lt (real_of_num 0) d & |
10294 (ALL x::'A::type. |
10591 (ALL x::'A::type. |
10295 real_lt (real_of_num (0::nat)) (mdist m1 (x, x0)) & |
10592 real_lt (real_of_num 0) (mdist m1 (x, x0)) & |
10296 real_lt (mdist m1 (x, x0)) d --> |
10593 real_lt (mdist m1 (x, x0)) d --> |
10297 real_lt (mdist m2 (f x, y0)) e)))" |
10594 real_lt (mdist m2 (f x, y0)) e)))" |
10298 by (import hollight LIM_TENDS2) |
10595 by (import hollight LIM_TENDS2) |
10299 |
10596 |
10300 lemma MR1_BOUNDED: "ALL (g::'A::type => 'A::type => bool) f::'A::type => hollight.real. |
10597 lemma MR1_BOUNDED: "ALL (g::'A::type => 'A::type => bool) f::'A::type => hollight.real. |
10304 by (import hollight MR1_BOUNDED) |
10601 by (import hollight MR1_BOUNDED) |
10305 |
10602 |
10306 lemma NET_NULL: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10603 lemma NET_NULL: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10307 x0::hollight.real. |
10604 x0::hollight.real. |
10308 tends x x0 (mtop mr1, g) = |
10605 tends x x0 (mtop mr1, g) = |
10309 tends (%n::'A::type. real_sub (x n) x0) (real_of_num (0::nat)) |
10606 tends (%n::'A::type. real_sub (x n) x0) (real_of_num 0) (mtop mr1, g)" |
10310 (mtop mr1, g)" |
|
10311 by (import hollight NET_NULL) |
10607 by (import hollight NET_NULL) |
10312 |
10608 |
10313 lemma NET_CONV_BOUNDED: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10609 lemma NET_CONV_BOUNDED: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10314 x0::hollight.real. tends x x0 (mtop mr1, g) --> bounded (mr1, g) x" |
10610 x0::hollight.real. tends x x0 (mtop mr1, g) --> bounded (mr1, g) x" |
10315 by (import hollight NET_CONV_BOUNDED) |
10611 by (import hollight NET_CONV_BOUNDED) |
10316 |
10612 |
10317 lemma NET_CONV_NZ: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10613 lemma NET_CONV_NZ: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10318 x0::hollight.real. |
10614 x0::hollight.real. |
10319 tends x x0 (mtop mr1, g) & x0 ~= real_of_num (0::nat) --> |
10615 tends x x0 (mtop mr1, g) & x0 ~= real_of_num 0 --> |
10320 (EX N::'A::type. |
10616 (EX N::'A::type. |
10321 g N N & (ALL n::'A::type. g n N --> x n ~= real_of_num (0::nat)))" |
10617 g N N & (ALL n::'A::type. g n N --> x n ~= real_of_num 0))" |
10322 by (import hollight NET_CONV_NZ) |
10618 by (import hollight NET_CONV_NZ) |
10323 |
10619 |
10324 lemma NET_CONV_IBOUNDED: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10620 lemma NET_CONV_IBOUNDED: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10325 x0::hollight.real. |
10621 x0::hollight.real. |
10326 tends x x0 (mtop mr1, g) & x0 ~= real_of_num (0::nat) --> |
10622 tends x x0 (mtop mr1, g) & x0 ~= real_of_num 0 --> |
10327 bounded (mr1, g) (%n::'A::type. real_inv (x n))" |
10623 bounded (mr1, g) (%n::'A::type. real_inv (x n))" |
10328 by (import hollight NET_CONV_IBOUNDED) |
10624 by (import hollight NET_CONV_IBOUNDED) |
10329 |
10625 |
10330 lemma NET_NULL_ADD: "ALL g::'A::type => 'A::type => bool. |
10626 lemma NET_NULL_ADD: "ALL g::'A::type => 'A::type => bool. |
10331 dorder g --> |
10627 dorder g --> |
10332 (ALL (x::'A::type => hollight.real) y::'A::type => hollight.real. |
10628 (ALL (x::'A::type => hollight.real) y::'A::type => hollight.real. |
10333 tends x (real_of_num (0::nat)) (mtop mr1, g) & |
10629 tends x (real_of_num 0) (mtop mr1, g) & |
10334 tends y (real_of_num (0::nat)) (mtop mr1, g) --> |
10630 tends y (real_of_num 0) (mtop mr1, g) --> |
10335 tends (%n::'A::type. real_add (x n) (y n)) (real_of_num (0::nat)) |
10631 tends (%n::'A::type. real_add (x n) (y n)) (real_of_num 0) |
10336 (mtop mr1, g))" |
10632 (mtop mr1, g))" |
10337 by (import hollight NET_NULL_ADD) |
10633 by (import hollight NET_NULL_ADD) |
10338 |
10634 |
10339 lemma NET_NULL_MUL: "ALL g::'A::type => 'A::type => bool. |
10635 lemma NET_NULL_MUL: "ALL g::'A::type => 'A::type => bool. |
10340 dorder g --> |
10636 dorder g --> |
10341 (ALL (x::'A::type => hollight.real) y::'A::type => hollight.real. |
10637 (ALL (x::'A::type => hollight.real) y::'A::type => hollight.real. |
10342 bounded (mr1, g) x & tends y (real_of_num (0::nat)) (mtop mr1, g) --> |
10638 bounded (mr1, g) x & tends y (real_of_num 0) (mtop mr1, g) --> |
10343 tends (%n::'A::type. real_mul (x n) (y n)) (real_of_num (0::nat)) |
10639 tends (%n::'A::type. real_mul (x n) (y n)) (real_of_num 0) |
10344 (mtop mr1, g))" |
10640 (mtop mr1, g))" |
10345 by (import hollight NET_NULL_MUL) |
10641 by (import hollight NET_NULL_MUL) |
10346 |
10642 |
10347 lemma NET_NULL_CMUL: "ALL (g::'A::type => 'A::type => bool) (k::hollight.real) |
10643 lemma NET_NULL_CMUL: "ALL (g::'A::type => 'A::type => bool) (k::hollight.real) |
10348 x::'A::type => hollight.real. |
10644 x::'A::type => hollight.real. |
10349 tends x (real_of_num (0::nat)) (mtop mr1, g) --> |
10645 tends x (real_of_num 0) (mtop mr1, g) --> |
10350 tends (%n::'A::type. real_mul k (x n)) (real_of_num (0::nat)) |
10646 tends (%n::'A::type. real_mul k (x n)) (real_of_num 0) (mtop mr1, g)" |
10351 (mtop mr1, g)" |
|
10352 by (import hollight NET_NULL_CMUL) |
10647 by (import hollight NET_NULL_CMUL) |
10353 |
10648 |
10354 lemma NET_ADD: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10649 lemma NET_ADD: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10355 (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real. |
10650 (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real. |
10356 dorder g --> |
10651 dorder g --> |
10381 by (import hollight NET_MUL) |
10676 by (import hollight NET_MUL) |
10382 |
10677 |
10383 lemma NET_INV: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10678 lemma NET_INV: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10384 x0::hollight.real. |
10679 x0::hollight.real. |
10385 dorder g --> |
10680 dorder g --> |
10386 tends x x0 (mtop mr1, g) & x0 ~= real_of_num (0::nat) --> |
10681 tends x x0 (mtop mr1, g) & x0 ~= real_of_num 0 --> |
10387 tends (%n::'A::type. real_inv (x n)) (real_inv x0) (mtop mr1, g)" |
10682 tends (%n::'A::type. real_inv (x n)) (real_inv x0) (mtop mr1, g)" |
10388 by (import hollight NET_INV) |
10683 by (import hollight NET_INV) |
10389 |
10684 |
10390 lemma NET_DIV: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10685 lemma NET_DIV: "ALL (g::'A::type => 'A::type => bool) (x::'A::type => hollight.real) |
10391 (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real. |
10686 (x0::hollight.real) (y::'A::type => hollight.real) y0::hollight.real. |
10392 dorder g --> |
10687 dorder g --> |
10393 tends x x0 (mtop mr1, g) & |
10688 tends x x0 (mtop mr1, g) & |
10394 tends y y0 (mtop mr1, g) & y0 ~= real_of_num (0::nat) --> |
10689 tends y y0 (mtop mr1, g) & y0 ~= real_of_num 0 --> |
10395 tends (%xa::'A::type. real_div (x xa) (y xa)) (real_div x0 y0) |
10690 tends (%xa::'A::type. real_div (x xa) (y xa)) (real_div x0 y0) |
10396 (mtop mr1, g)" |
10691 (mtop mr1, g)" |
10397 by (import hollight NET_DIV) |
10692 by (import hollight NET_DIV) |
10398 |
10693 |
10399 lemma NET_ABS: "ALL (x::'A::type => hollight.real) x0::hollight.real. |
10694 lemma NET_ABS: "ALL (x::'A::type => hollight.real) x0::hollight.real. |
10401 tends (%n::'A::type. real_abs (x n)) (real_abs x0) (mtop mr1, g)" |
10696 tends (%n::'A::type. real_abs (x n)) (real_abs x0) (mtop mr1, g)" |
10402 by (import hollight NET_ABS) |
10697 by (import hollight NET_ABS) |
10403 |
10698 |
10404 lemma NET_SUM: "ALL g::'q_71813::type => 'q_71813::type => bool. |
10699 lemma NET_SUM: "ALL g::'q_71813::type => 'q_71813::type => bool. |
10405 dorder g & |
10700 dorder g & |
10406 tends (%x::'q_71813::type. real_of_num (0::nat)) (real_of_num (0::nat)) |
10701 tends (%x::'q_71813::type. real_of_num 0) (real_of_num 0) |
10407 (mtop mr1, g) --> |
10702 (mtop mr1, g) --> |
10408 (ALL (x::nat) n::nat. |
10703 (ALL (x::nat) n::nat. |
10409 (ALL r::nat. |
10704 (ALL r::nat. |
10410 <= x r & < r (x + n) --> |
10705 <= x r & < r (x + n) --> |
10411 tends ((f::nat => 'q_71813::type => hollight.real) r) |
10706 tends ((f::nat => 'q_71813::type => hollight.real) r) |
10434 by (import hollight DEF_tends_num_real) |
10729 by (import hollight DEF_tends_num_real) |
10435 |
10730 |
10436 lemma SEQ: "ALL (x::nat => hollight.real) x0::hollight.real. |
10731 lemma SEQ: "ALL (x::nat => hollight.real) x0::hollight.real. |
10437 tends_num_real x x0 = |
10732 tends_num_real x x0 = |
10438 (ALL e::hollight.real. |
10733 (ALL e::hollight.real. |
10439 real_lt (real_of_num (0::nat)) e --> |
10734 real_lt (real_of_num 0) e --> |
10440 (EX N::nat. |
10735 (EX N::nat. |
10441 ALL n::nat. >= n N --> real_lt (real_abs (real_sub (x n) x0)) e))" |
10736 ALL n::nat. >= n N --> real_lt (real_abs (real_sub (x n) x0)) e))" |
10442 by (import hollight SEQ) |
10737 by (import hollight SEQ) |
10443 |
10738 |
10444 lemma SEQ_CONST: "ALL k::hollight.real. tends_num_real (%x::nat. k) k" |
10739 lemma SEQ_CONST: "ALL k::hollight.real. tends_num_real (%x::nat. k) k" |
10460 tends_num_real x x0 = |
10755 tends_num_real x x0 = |
10461 tends_num_real (%n::nat. real_neg (x n)) (real_neg x0)" |
10756 tends_num_real (%n::nat. real_neg (x n)) (real_neg x0)" |
10462 by (import hollight SEQ_NEG) |
10757 by (import hollight SEQ_NEG) |
10463 |
10758 |
10464 lemma SEQ_INV: "ALL (x::nat => hollight.real) x0::hollight.real. |
10759 lemma SEQ_INV: "ALL (x::nat => hollight.real) x0::hollight.real. |
10465 tends_num_real x x0 & x0 ~= real_of_num (0::nat) --> |
10760 tends_num_real x x0 & x0 ~= real_of_num 0 --> |
10466 tends_num_real (%n::nat. real_inv (x n)) (real_inv x0)" |
10761 tends_num_real (%n::nat. real_inv (x n)) (real_inv x0)" |
10467 by (import hollight SEQ_INV) |
10762 by (import hollight SEQ_INV) |
10468 |
10763 |
10469 lemma SEQ_SUB: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real) |
10764 lemma SEQ_SUB: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real) |
10470 y0::hollight.real. |
10765 y0::hollight.real. |
10472 tends_num_real (%n::nat. real_sub (x n) (y n)) (real_sub x0 y0)" |
10767 tends_num_real (%n::nat. real_sub (x n) (y n)) (real_sub x0 y0)" |
10473 by (import hollight SEQ_SUB) |
10768 by (import hollight SEQ_SUB) |
10474 |
10769 |
10475 lemma SEQ_DIV: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real) |
10770 lemma SEQ_DIV: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real) |
10476 y0::hollight.real. |
10771 y0::hollight.real. |
10477 tends_num_real x x0 & |
10772 tends_num_real x x0 & tends_num_real y y0 & y0 ~= real_of_num 0 --> |
10478 tends_num_real y y0 & y0 ~= real_of_num (0::nat) --> |
|
10479 tends_num_real (%n::nat. real_div (x n) (y n)) (real_div x0 y0)" |
10773 tends_num_real (%n::nat. real_div (x n) (y n)) (real_div x0 y0)" |
10480 by (import hollight SEQ_DIV) |
10774 by (import hollight SEQ_DIV) |
10481 |
10775 |
10482 lemma SEQ_UNIQ: "ALL (x::nat => hollight.real) (x1::hollight.real) x2::hollight.real. |
10776 lemma SEQ_UNIQ: "ALL (x::nat => hollight.real) (x1::hollight.real) x2::hollight.real. |
10483 tends_num_real x x1 & tends_num_real x x2 --> x1 = x2" |
10777 tends_num_real x x1 & tends_num_real x x2 --> x1 = x2" |
10484 by (import hollight SEQ_UNIQ) |
10778 by (import hollight SEQ_UNIQ) |
10485 |
10779 |
10486 lemma SEQ_NULL: "ALL (s::nat => hollight.real) l::hollight.real. |
10780 lemma SEQ_NULL: "ALL (s::nat => hollight.real) l::hollight.real. |
10487 tends_num_real s l = |
10781 tends_num_real s l = |
10488 tends_num_real (%n::nat. real_sub (s n) l) (real_of_num (0::nat))" |
10782 tends_num_real (%n::nat. real_sub (s n) l) (real_of_num 0)" |
10489 by (import hollight SEQ_NULL) |
10783 by (import hollight SEQ_NULL) |
10490 |
10784 |
10491 lemma SEQ_SUM: "ALL (f::nat => nat => hollight.real) (l::nat => hollight.real) (m::nat) |
10785 lemma SEQ_SUM: "ALL (f::nat => nat => hollight.real) (l::nat => hollight.real) (m::nat) |
10492 n::nat. |
10786 n::nat. |
10493 (ALL x::nat. <= m x & < x (m + n) --> tends_num_real (f x) (l x)) --> |
10787 (ALL x::nat. <= m x & < x (m + n) --> tends_num_real (f x) (l x)) --> |
10510 constdefs |
10804 constdefs |
10511 cauchy :: "(nat => hollight.real) => bool" |
10805 cauchy :: "(nat => hollight.real) => bool" |
10512 "cauchy == |
10806 "cauchy == |
10513 %u::nat => hollight.real. |
10807 %u::nat => hollight.real. |
10514 ALL e::hollight.real. |
10808 ALL e::hollight.real. |
10515 real_lt (real_of_num (0::nat)) e --> |
10809 real_lt (real_of_num 0) e --> |
10516 (EX N::nat. |
10810 (EX N::nat. |
10517 ALL (m::nat) n::nat. |
10811 ALL (m::nat) n::nat. |
10518 >= m N & >= n N --> |
10812 >= m N & >= n N --> |
10519 real_lt (real_abs (real_sub (u m) (u n))) e)" |
10813 real_lt (real_abs (real_sub (u m) (u n))) e)" |
10520 |
10814 |
10521 lemma DEF_cauchy: "cauchy = |
10815 lemma DEF_cauchy: "cauchy = |
10522 (%u::nat => hollight.real. |
10816 (%u::nat => hollight.real. |
10523 ALL e::hollight.real. |
10817 ALL e::hollight.real. |
10524 real_lt (real_of_num (0::nat)) e --> |
10818 real_lt (real_of_num 0) e --> |
10525 (EX N::nat. |
10819 (EX N::nat. |
10526 ALL (m::nat) n::nat. |
10820 ALL (m::nat) n::nat. |
10527 >= m N & >= n N --> |
10821 >= m N & >= n N --> |
10528 real_lt (real_abs (real_sub (u m) (u n))) e))" |
10822 real_lt (real_abs (real_sub (u m) (u n))) e))" |
10529 by (import hollight DEF_cauchy) |
10823 by (import hollight DEF_cauchy) |
10628 (EX N::nat. ALL n::nat. >= n N --> real_le (f n) (g n)) --> |
10922 (EX N::nat. ALL n::nat. >= n N --> real_le (f n) (g n)) --> |
10629 real_le l m" |
10923 real_le l m" |
10630 by (import hollight SEQ_LE) |
10924 by (import hollight SEQ_LE) |
10631 |
10925 |
10632 lemma SEQ_LE_0: "ALL (x::nat => hollight.real) xa::nat => hollight.real. |
10926 lemma SEQ_LE_0: "ALL (x::nat => hollight.real) xa::nat => hollight.real. |
10633 tends_num_real x (real_of_num (0::nat)) & |
10927 tends_num_real x (real_of_num 0) & |
10634 (EX xb::nat. |
10928 (EX xb::nat. |
10635 ALL xc::nat. |
10929 ALL xc::nat. |
10636 >= xc xb --> real_le (real_abs (xa xc)) (real_abs (x xc))) --> |
10930 >= xc xb --> real_le (real_abs (xa xc)) (real_abs (x xc))) --> |
10637 tends_num_real xa (real_of_num (0::nat))" |
10931 tends_num_real xa (real_of_num 0)" |
10638 by (import hollight SEQ_LE_0) |
10932 by (import hollight SEQ_LE_0) |
10639 |
10933 |
10640 lemma SEQ_SUC: "ALL (f::nat => hollight.real) l::hollight.real. |
10934 lemma SEQ_SUC: "ALL (f::nat => hollight.real) l::hollight.real. |
10641 tends_num_real f l = tends_num_real (%n::nat. f (Suc n)) l" |
10935 tends_num_real f l = tends_num_real (%n::nat. f (Suc n)) l" |
10642 by (import hollight SEQ_SUC) |
10936 by (import hollight SEQ_SUC) |
10643 |
10937 |
10644 lemma SEQ_ABS: "ALL f::nat => hollight.real. |
10938 lemma SEQ_ABS: "ALL f::nat => hollight.real. |
10645 tends_num_real (%n::nat. real_abs (f n)) (real_of_num (0::nat)) = |
10939 tends_num_real (%n::nat. real_abs (f n)) (real_of_num 0) = |
10646 tends_num_real f (real_of_num (0::nat))" |
10940 tends_num_real f (real_of_num 0)" |
10647 by (import hollight SEQ_ABS) |
10941 by (import hollight SEQ_ABS) |
10648 |
10942 |
10649 lemma SEQ_ABS_IMP: "ALL (f::nat => hollight.real) l::hollight.real. |
10943 lemma SEQ_ABS_IMP: "ALL (f::nat => hollight.real) l::hollight.real. |
10650 tends_num_real f l --> |
10944 tends_num_real f l --> |
10651 tends_num_real (%n::nat. real_abs (f n)) (real_abs l)" |
10945 tends_num_real (%n::nat. real_abs (f n)) (real_abs l)" |
10652 by (import hollight SEQ_ABS_IMP) |
10946 by (import hollight SEQ_ABS_IMP) |
10653 |
10947 |
10654 lemma SEQ_INV0: "ALL f::nat => hollight.real. |
10948 lemma SEQ_INV0: "ALL f::nat => hollight.real. |
10655 (ALL y::hollight.real. |
10949 (ALL y::hollight.real. |
10656 EX N::nat. ALL n::nat. >= n N --> hollight.real_gt (f n) y) --> |
10950 EX N::nat. ALL n::nat. >= n N --> hollight.real_gt (f n) y) --> |
10657 tends_num_real (%n::nat. real_inv (f n)) (real_of_num (0::nat))" |
10951 tends_num_real (%n::nat. real_inv (f n)) (real_of_num 0)" |
10658 by (import hollight SEQ_INV0) |
10952 by (import hollight SEQ_INV0) |
10659 |
10953 |
10660 lemma SEQ_POWER_ABS: "ALL c::hollight.real. |
10954 lemma SEQ_POWER_ABS: "ALL c::hollight.real. |
10661 real_lt (real_abs c) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
10955 real_lt (real_abs c) (real_of_num (NUMERAL_BIT1 0)) --> |
10662 tends_num_real (real_pow (real_abs c)) (real_of_num (0::nat))" |
10956 tends_num_real (real_pow (real_abs c)) (real_of_num 0)" |
10663 by (import hollight SEQ_POWER_ABS) |
10957 by (import hollight SEQ_POWER_ABS) |
10664 |
10958 |
10665 lemma SEQ_POWER: "ALL c::hollight.real. |
10959 lemma SEQ_POWER: "ALL c::hollight.real. |
10666 real_lt (real_abs c) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
10960 real_lt (real_abs c) (real_of_num (NUMERAL_BIT1 0)) --> |
10667 tends_num_real (real_pow c) (real_of_num (0::nat))" |
10961 tends_num_real (real_pow c) (real_of_num 0)" |
10668 by (import hollight SEQ_POWER) |
10962 by (import hollight SEQ_POWER) |
10669 |
10963 |
10670 lemma NEST_LEMMA: "ALL (f::nat => hollight.real) g::nat => hollight.real. |
10964 lemma NEST_LEMMA: "ALL (f::nat => hollight.real) g::nat => hollight.real. |
10671 (ALL n::nat. hollight.real_ge (f (Suc n)) (f n)) & |
10965 (ALL n::nat. hollight.real_ge (f (Suc n)) (f n)) & |
10672 (ALL n::nat. real_le (g (Suc n)) (g n)) & |
10966 (ALL n::nat. real_le (g (Suc n)) (g n)) & |
10679 |
10973 |
10680 lemma NEST_LEMMA_UNIQ: "ALL (f::nat => hollight.real) g::nat => hollight.real. |
10974 lemma NEST_LEMMA_UNIQ: "ALL (f::nat => hollight.real) g::nat => hollight.real. |
10681 (ALL n::nat. hollight.real_ge (f (Suc n)) (f n)) & |
10975 (ALL n::nat. hollight.real_ge (f (Suc n)) (f n)) & |
10682 (ALL n::nat. real_le (g (Suc n)) (g n)) & |
10976 (ALL n::nat. real_le (g (Suc n)) (g n)) & |
10683 (ALL n::nat. real_le (f n) (g n)) & |
10977 (ALL n::nat. real_le (f n) (g n)) & |
10684 tends_num_real (%n::nat. real_sub (f n) (g n)) (real_of_num (0::nat)) --> |
10978 tends_num_real (%n::nat. real_sub (f n) (g n)) (real_of_num 0) --> |
10685 (EX l::hollight.real. |
10979 (EX l::hollight.real. |
10686 ((ALL n::nat. real_le (f n) l) & tends_num_real f l) & |
10980 ((ALL n::nat. real_le (f n) l) & tends_num_real f l) & |
10687 (ALL n::nat. real_le l (g n)) & tends_num_real g l)" |
10981 (ALL n::nat. real_le l (g n)) & tends_num_real g l)" |
10688 by (import hollight NEST_LEMMA_UNIQ) |
10982 by (import hollight NEST_LEMMA_UNIQ) |
10689 |
10983 |
10690 lemma BOLZANO_LEMMA: "ALL P::hollight.real * hollight.real => bool. |
10984 lemma BOLZANO_LEMMA: "ALL P::hollight.real * hollight.real => bool. |
10691 (ALL (a::hollight.real) (b::hollight.real) c::hollight.real. |
10985 (ALL (a::hollight.real) (b::hollight.real) c::hollight.real. |
10692 real_le a b & real_le b c & P (a, b) & P (b, c) --> P (a, c)) & |
10986 real_le a b & real_le b c & P (a, b) & P (b, c) --> P (a, c)) & |
10693 (ALL x::hollight.real. |
10987 (ALL x::hollight.real. |
10694 EX d::hollight.real. |
10988 EX d::hollight.real. |
10695 real_lt (real_of_num (0::nat)) d & |
10989 real_lt (real_of_num 0) d & |
10696 (ALL (a::hollight.real) b::hollight.real. |
10990 (ALL (a::hollight.real) b::hollight.real. |
10697 real_le a x & real_le x b & real_lt (real_sub b a) d --> |
10991 real_le a x & real_le x b & real_lt (real_sub b a) d --> |
10698 P (a, b))) --> |
10992 P (a, b))) --> |
10699 (ALL (a::hollight.real) b::hollight.real. real_le a b --> P (a, b))" |
10993 (ALL (a::hollight.real) b::hollight.real. real_le a b --> P (a, b))" |
10700 by (import hollight BOLZANO_LEMMA) |
10994 by (import hollight BOLZANO_LEMMA) |
10701 |
10995 |
10702 constdefs |
10996 constdefs |
10703 sums :: "(nat => hollight.real) => hollight.real => bool" |
10997 sums :: "(nat => hollight.real) => hollight.real => bool" |
10704 "sums == |
10998 "sums == %u::nat => hollight.real. tends_num_real (%n::nat. psum (0, n) u)" |
10705 %u::nat => hollight.real. tends_num_real (%n::nat. psum (0::nat, n) u)" |
10999 |
10706 |
11000 lemma DEF_sums: "sums = (%u::nat => hollight.real. tends_num_real (%n::nat. psum (0, n) u))" |
10707 lemma DEF_sums: "sums = |
|
10708 (%u::nat => hollight.real. tends_num_real (%n::nat. psum (0::nat, n) u))" |
|
10709 by (import hollight DEF_sums) |
11001 by (import hollight DEF_sums) |
10710 |
11002 |
10711 constdefs |
11003 constdefs |
10712 summable :: "(nat => hollight.real) => bool" |
11004 summable :: "(nat => hollight.real) => bool" |
10713 "summable == %u::nat => hollight.real. Ex (sums u)" |
11005 "summable == %u::nat => hollight.real. Ex (sums u)" |
10734 lemma SER_UNIQ: "ALL (f::nat => hollight.real) (x::hollight.real) y::hollight.real. |
11026 lemma SER_UNIQ: "ALL (f::nat => hollight.real) (x::hollight.real) y::hollight.real. |
10735 sums f x & sums f y --> x = y" |
11027 sums f x & sums f y --> x = y" |
10736 by (import hollight SER_UNIQ) |
11028 by (import hollight SER_UNIQ) |
10737 |
11029 |
10738 lemma SER_0: "ALL (f::nat => hollight.real) n::nat. |
11030 lemma SER_0: "ALL (f::nat => hollight.real) n::nat. |
10739 (ALL m::nat. <= n m --> f m = real_of_num (0::nat)) --> |
11031 (ALL m::nat. <= n m --> f m = real_of_num 0) --> sums f (psum (0, n) f)" |
10740 sums f (psum (0::nat, n) f)" |
|
10741 by (import hollight SER_0) |
11032 by (import hollight SER_0) |
10742 |
11033 |
10743 lemma SER_POS_LE: "ALL (f::nat => hollight.real) n::nat. |
11034 lemma SER_POS_LE: "ALL (f::nat => hollight.real) n::nat. |
10744 summable f & |
11035 summable f & (ALL m::nat. <= n m --> real_le (real_of_num 0) (f m)) --> |
10745 (ALL m::nat. <= n m --> real_le (real_of_num (0::nat)) (f m)) --> |
11036 real_le (psum (0, n) f) (suminf f)" |
10746 real_le (psum (0::nat, n) f) (suminf f)" |
|
10747 by (import hollight SER_POS_LE) |
11037 by (import hollight SER_POS_LE) |
10748 |
11038 |
10749 lemma SER_POS_LT: "ALL (f::nat => hollight.real) n::nat. |
11039 lemma SER_POS_LT: "ALL (f::nat => hollight.real) n::nat. |
10750 summable f & |
11040 summable f & (ALL m::nat. <= n m --> real_lt (real_of_num 0) (f m)) --> |
10751 (ALL m::nat. <= n m --> real_lt (real_of_num (0::nat)) (f m)) --> |
11041 real_lt (psum (0, n) f) (suminf f)" |
10752 real_lt (psum (0::nat, n) f) (suminf f)" |
|
10753 by (import hollight SER_POS_LT) |
11042 by (import hollight SER_POS_LT) |
10754 |
11043 |
10755 lemma SER_GROUP: "ALL (f::nat => hollight.real) k::nat. |
11044 lemma SER_GROUP: "ALL (f::nat => hollight.real) k::nat. |
10756 summable f & < (0::nat) k --> |
11045 summable f & < 0 k --> sums (%n::nat. psum (n * k, k) f) (suminf f)" |
10757 sums (%n::nat. psum (n * k, k) f) (suminf f)" |
|
10758 by (import hollight SER_GROUP) |
11046 by (import hollight SER_GROUP) |
10759 |
11047 |
10760 lemma SER_PAIR: "ALL f::nat => hollight.real. |
11048 lemma SER_PAIR: "ALL f::nat => hollight.real. |
10761 summable f --> |
11049 summable f --> |
10762 sums |
11050 sums |
10763 (%n::nat. |
11051 (%n::nat. |
10764 psum |
11052 psum |
10765 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n, |
11053 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n, NUMERAL_BIT0 (NUMERAL_BIT1 0)) |
10766 NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) |
|
10767 f) |
11054 f) |
10768 (suminf f)" |
11055 (suminf f)" |
10769 by (import hollight SER_PAIR) |
11056 by (import hollight SER_PAIR) |
10770 |
11057 |
10771 lemma SER_OFFSET: "ALL f::nat => hollight.real. |
11058 lemma SER_OFFSET: "ALL f::nat => hollight.real. |
10772 summable f --> |
11059 summable f --> |
10773 (ALL k::nat. |
11060 (ALL k::nat. |
10774 sums (%n::nat. f (n + k)) (real_sub (suminf f) (psum (0::nat, k) f)))" |
11061 sums (%n::nat. f (n + k)) (real_sub (suminf f) (psum (0, k) f)))" |
10775 by (import hollight SER_OFFSET) |
11062 by (import hollight SER_OFFSET) |
10776 |
11063 |
10777 lemma SER_OFFSET_REV: "ALL (f::nat => hollight.real) k::nat. |
11064 lemma SER_OFFSET_REV: "ALL (f::nat => hollight.real) k::nat. |
10778 summable (%n::nat. f (n + k)) --> |
11065 summable (%n::nat. f (n + k)) --> |
10779 sums f (real_add (psum (0::nat, k) f) (suminf (%n::nat. f (n + k))))" |
11066 sums f (real_add (psum (0, k) f) (suminf (%n::nat. f (n + k))))" |
10780 by (import hollight SER_OFFSET_REV) |
11067 by (import hollight SER_OFFSET_REV) |
10781 |
11068 |
10782 lemma SER_POS_LT_PAIR: "ALL (f::nat => hollight.real) n::nat. |
11069 lemma SER_POS_LT_PAIR: "ALL (f::nat => hollight.real) n::nat. |
10783 summable f & |
11070 summable f & |
10784 (ALL d::nat. |
11071 (ALL d::nat. |
10785 real_lt (real_of_num (0::nat)) |
11072 real_lt (real_of_num 0) |
10786 (real_add (f (n + NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * d)) |
11073 (real_add (f (n + NUMERAL_BIT0 (NUMERAL_BIT1 0) * d)) |
10787 (f (n + |
11074 (f (n + |
10788 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * d + |
11075 (NUMERAL_BIT0 (NUMERAL_BIT1 0) * d + NUMERAL_BIT1 0))))) --> |
10789 NUMERAL_BIT1 (0::nat)))))) --> |
11076 real_lt (psum (0, n) f) (suminf f)" |
10790 real_lt (psum (0::nat, n) f) (suminf f)" |
|
10791 by (import hollight SER_POS_LT_PAIR) |
11077 by (import hollight SER_POS_LT_PAIR) |
10792 |
11078 |
10793 lemma SER_ADD: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real) |
11079 lemma SER_ADD: "ALL (x::nat => hollight.real) (x0::hollight.real) (y::nat => hollight.real) |
10794 y0::hollight.real. |
11080 y0::hollight.real. |
10795 sums x x0 & sums y y0 --> |
11081 sums x x0 & sums y y0 --> |
10815 by (import hollight SER_CDIV) |
11101 by (import hollight SER_CDIV) |
10816 |
11102 |
10817 lemma SER_CAUCHY: "ALL f::nat => hollight.real. |
11103 lemma SER_CAUCHY: "ALL f::nat => hollight.real. |
10818 summable f = |
11104 summable f = |
10819 (ALL e::hollight.real. |
11105 (ALL e::hollight.real. |
10820 real_lt (real_of_num (0::nat)) e --> |
11106 real_lt (real_of_num 0) e --> |
10821 (EX N::nat. |
11107 (EX N::nat. |
10822 ALL (m::nat) n::nat. |
11108 ALL (m::nat) n::nat. |
10823 >= m N --> real_lt (real_abs (psum (m, n) f)) e))" |
11109 >= m N --> real_lt (real_abs (psum (m, n) f)) e))" |
10824 by (import hollight SER_CAUCHY) |
11110 by (import hollight SER_CAUCHY) |
10825 |
11111 |
10826 lemma SER_ZERO: "ALL f::nat => hollight.real. |
11112 lemma SER_ZERO: "ALL f::nat => hollight.real. summable f --> tends_num_real f (real_of_num 0)" |
10827 summable f --> tends_num_real f (real_of_num (0::nat))" |
|
10828 by (import hollight SER_ZERO) |
11113 by (import hollight SER_ZERO) |
10829 |
11114 |
10830 lemma SER_COMPAR: "ALL (f::nat => hollight.real) g::nat => hollight.real. |
11115 lemma SER_COMPAR: "ALL (f::nat => hollight.real) g::nat => hollight.real. |
10831 (EX x::nat. ALL xa::nat. >= xa x --> real_le (real_abs (f xa)) (g xa)) & |
11116 (EX x::nat. ALL xa::nat. >= xa x --> real_le (real_abs (f xa)) (g xa)) & |
10832 summable g --> |
11117 summable g --> |
10857 summable (%n::nat. real_abs (f n)) --> |
11142 summable (%n::nat. real_abs (f n)) --> |
10858 real_le (real_abs (suminf f)) (suminf (%n::nat. real_abs (f n)))" |
11143 real_le (real_abs (suminf f)) (suminf (%n::nat. real_abs (f n)))" |
10859 by (import hollight SER_ABS) |
11144 by (import hollight SER_ABS) |
10860 |
11145 |
10861 lemma GP_FINITE: "ALL x::hollight.real. |
11146 lemma GP_FINITE: "ALL x::hollight.real. |
10862 x ~= real_of_num (NUMERAL_BIT1 (0::nat)) --> |
11147 x ~= real_of_num (NUMERAL_BIT1 0) --> |
10863 (ALL n::nat. |
11148 (ALL n::nat. |
10864 psum (0::nat, n) (real_pow x) = |
11149 psum (0, n) (real_pow x) = |
10865 real_div |
11150 real_div (real_sub (real_pow x n) (real_of_num (NUMERAL_BIT1 0))) |
10866 (real_sub (real_pow x n) (real_of_num (NUMERAL_BIT1 (0::nat)))) |
11151 (real_sub x (real_of_num (NUMERAL_BIT1 0))))" |
10867 (real_sub x (real_of_num (NUMERAL_BIT1 (0::nat)))))" |
|
10868 by (import hollight GP_FINITE) |
11152 by (import hollight GP_FINITE) |
10869 |
11153 |
10870 lemma GP: "ALL x::hollight.real. |
11154 lemma GP: "ALL x::hollight.real. |
10871 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
11155 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
10872 sums (real_pow x) |
11156 sums (real_pow x) (real_inv (real_sub (real_of_num (NUMERAL_BIT1 0)) x))" |
10873 (real_inv (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) x))" |
|
10874 by (import hollight GP) |
11157 by (import hollight GP) |
10875 |
11158 |
10876 lemma ABS_NEG_LEMMA: "ALL (c::hollight.real) (x::hollight.real) y::hollight.real. |
11159 lemma ABS_NEG_LEMMA: "ALL (c::hollight.real) (x::hollight.real) y::hollight.real. |
10877 real_le c (real_of_num (0::nat)) --> |
11160 real_le c (real_of_num 0) --> |
10878 real_le (real_abs x) (real_mul c (real_abs y)) --> |
11161 real_le (real_abs x) (real_mul c (real_abs y)) --> x = real_of_num 0" |
10879 x = real_of_num (0::nat)" |
|
10880 by (import hollight ABS_NEG_LEMMA) |
11162 by (import hollight ABS_NEG_LEMMA) |
10881 |
11163 |
10882 lemma SER_RATIO: "ALL (f::nat => hollight.real) (c::hollight.real) N::nat. |
11164 lemma SER_RATIO: "ALL (f::nat => hollight.real) (c::hollight.real) N::nat. |
10883 real_lt c (real_of_num (NUMERAL_BIT1 (0::nat))) & |
11165 real_lt c (real_of_num (NUMERAL_BIT1 0)) & |
10884 (ALL n::nat. |
11166 (ALL n::nat. |
10885 >= n N --> |
11167 >= n N --> |
10886 real_le (real_abs (f (Suc n))) (real_mul c (real_abs (f n)))) --> |
11168 real_le (real_abs (f (Suc n))) (real_mul c (real_abs (f n)))) --> |
10887 summable f" |
11169 summable f" |
10888 by (import hollight SER_RATIO) |
11170 by (import hollight SER_RATIO) |
10889 |
11171 |
10890 lemma SEQ_TRUNCATION: "ALL (f::nat => hollight.real) (l::hollight.real) (n::nat) b::hollight.real. |
11172 lemma SEQ_TRUNCATION: "ALL (f::nat => hollight.real) (l::hollight.real) (n::nat) b::hollight.real. |
10891 sums f l & (ALL m::nat. real_le (real_abs (psum (n, m) f)) b) --> |
11173 sums f l & (ALL m::nat. real_le (real_abs (psum (n, m) f)) b) --> |
10892 real_le (real_abs (real_sub l (psum (0::nat, n) f))) b" |
11174 real_le (real_abs (real_sub l (psum (0, n) f))) b" |
10893 by (import hollight SEQ_TRUNCATION) |
11175 by (import hollight SEQ_TRUNCATION) |
10894 |
11176 |
10895 constdefs |
11177 constdefs |
10896 tends_real_real :: "(hollight.real => hollight.real) => hollight.real => hollight.real => bool" |
11178 tends_real_real :: "(hollight.real => hollight.real) => hollight.real => hollight.real => bool" |
10897 "tends_real_real == |
11179 "tends_real_real == |
10905 |
11187 |
10906 lemma LIM: "ALL (f::hollight.real => hollight.real) (y0::hollight.real) |
11188 lemma LIM: "ALL (f::hollight.real => hollight.real) (y0::hollight.real) |
10907 x0::hollight.real. |
11189 x0::hollight.real. |
10908 tends_real_real f y0 x0 = |
11190 tends_real_real f y0 x0 = |
10909 (ALL e::hollight.real. |
11191 (ALL e::hollight.real. |
10910 real_lt (real_of_num (0::nat)) e --> |
11192 real_lt (real_of_num 0) e --> |
10911 (EX d::hollight.real. |
11193 (EX d::hollight.real. |
10912 real_lt (real_of_num (0::nat)) d & |
11194 real_lt (real_of_num 0) d & |
10913 (ALL x::hollight.real. |
11195 (ALL x::hollight.real. |
10914 real_lt (real_of_num (0::nat)) (real_abs (real_sub x x0)) & |
11196 real_lt (real_of_num 0) (real_abs (real_sub x x0)) & |
10915 real_lt (real_abs (real_sub x x0)) d --> |
11197 real_lt (real_abs (real_sub x x0)) d --> |
10916 real_lt (real_abs (real_sub (f x) y0)) e)))" |
11198 real_lt (real_abs (real_sub (f x) y0)) e)))" |
10917 by (import hollight LIM) |
11199 by (import hollight LIM) |
10918 |
11200 |
10919 lemma LIM_CONST: "ALL k::hollight.real. All (tends_real_real (%x::hollight.real. k) k)" |
11201 lemma LIM_CONST: "ALL k::hollight.real. All (tends_real_real (%x::hollight.real. k) k)" |
10937 tends_real_real f l (x::hollight.real) = |
11219 tends_real_real f l (x::hollight.real) = |
10938 tends_real_real (%x::hollight.real. real_neg (f x)) (real_neg l) x" |
11220 tends_real_real (%x::hollight.real. real_neg (f x)) (real_neg l) x" |
10939 by (import hollight LIM_NEG) |
11221 by (import hollight LIM_NEG) |
10940 |
11222 |
10941 lemma LIM_INV: "ALL (f::hollight.real => hollight.real) l::hollight.real. |
11223 lemma LIM_INV: "ALL (f::hollight.real => hollight.real) l::hollight.real. |
10942 tends_real_real f l (x::hollight.real) & l ~= real_of_num (0::nat) --> |
11224 tends_real_real f l (x::hollight.real) & l ~= real_of_num 0 --> |
10943 tends_real_real (%x::hollight.real. real_inv (f x)) (real_inv l) x" |
11225 tends_real_real (%x::hollight.real. real_inv (f x)) (real_inv l) x" |
10944 by (import hollight LIM_INV) |
11226 by (import hollight LIM_INV) |
10945 |
11227 |
10946 lemma LIM_SUB: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11228 lemma LIM_SUB: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
10947 (l::hollight.real) m::hollight.real. |
11229 (l::hollight.real) m::hollight.real. |
10951 by (import hollight LIM_SUB) |
11233 by (import hollight LIM_SUB) |
10952 |
11234 |
10953 lemma LIM_DIV: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11235 lemma LIM_DIV: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
10954 (l::hollight.real) m::hollight.real. |
11236 (l::hollight.real) m::hollight.real. |
10955 tends_real_real f l (x::hollight.real) & |
11237 tends_real_real f l (x::hollight.real) & |
10956 tends_real_real g m x & m ~= real_of_num (0::nat) --> |
11238 tends_real_real g m x & m ~= real_of_num 0 --> |
10957 tends_real_real (%x::hollight.real. real_div (f x) (g x)) (real_div l m) |
11239 tends_real_real (%x::hollight.real. real_div (f x) (g x)) (real_div l m) |
10958 x" |
11240 x" |
10959 by (import hollight LIM_DIV) |
11241 by (import hollight LIM_DIV) |
10960 |
11242 |
10961 lemma LIM_NULL: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real. |
11243 lemma LIM_NULL: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real. |
10962 tends_real_real f l x = |
11244 tends_real_real f l x = |
10963 tends_real_real (%x::hollight.real. real_sub (f x) l) |
11245 tends_real_real (%x::hollight.real. real_sub (f x) l) (real_of_num 0) x" |
10964 (real_of_num (0::nat)) x" |
|
10965 by (import hollight LIM_NULL) |
11246 by (import hollight LIM_NULL) |
10966 |
11247 |
10967 lemma LIM_SUM: "ALL (f::nat => hollight.real => hollight.real) (l::nat => hollight.real) |
11248 lemma LIM_SUM: "ALL (f::nat => hollight.real => hollight.real) (l::nat => hollight.real) |
10968 (m::nat) (n::nat) x::hollight.real. |
11249 (m::nat) (n::nat) x::hollight.real. |
10969 (ALL xa::nat. |
11250 (ALL xa::nat. |
10986 tends_real_real f l x0 = tends_real_real g l x0" |
11267 tends_real_real f l x0 = tends_real_real g l x0" |
10987 by (import hollight LIM_EQUAL) |
11268 by (import hollight LIM_EQUAL) |
10988 |
11269 |
10989 lemma LIM_TRANSFORM: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11270 lemma LIM_TRANSFORM: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
10990 (x0::hollight.real) l::hollight.real. |
11271 (x0::hollight.real) l::hollight.real. |
10991 tends_real_real (%x::hollight.real. real_sub (f x) (g x)) |
11272 tends_real_real (%x::hollight.real. real_sub (f x) (g x)) (real_of_num 0) |
10992 (real_of_num (0::nat)) x0 & |
11273 x0 & |
10993 tends_real_real g l x0 --> |
11274 tends_real_real g l x0 --> |
10994 tends_real_real f l x0" |
11275 tends_real_real f l x0" |
10995 by (import hollight LIM_TRANSFORM) |
11276 by (import hollight LIM_TRANSFORM) |
10996 |
11277 |
10997 constdefs |
11278 constdefs |
10998 diffl :: "(hollight.real => hollight.real) => hollight.real => hollight.real => bool" |
11279 diffl :: "(hollight.real => hollight.real) => hollight.real => hollight.real => bool" |
10999 "diffl == |
11280 "diffl == |
11000 %(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real. |
11281 %(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real. |
11001 tends_real_real |
11282 tends_real_real |
11002 (%h::hollight.real. real_div (real_sub (u (real_add ub h)) (u ub)) h) ua |
11283 (%h::hollight.real. real_div (real_sub (u (real_add ub h)) (u ub)) h) ua |
11003 (real_of_num (0::nat))" |
11284 (real_of_num 0)" |
11004 |
11285 |
11005 lemma DEF_diffl: "diffl = |
11286 lemma DEF_diffl: "diffl = |
11006 (%(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real. |
11287 (%(u::hollight.real => hollight.real) (ua::hollight.real) ub::hollight.real. |
11007 tends_real_real |
11288 tends_real_real |
11008 (%h::hollight.real. real_div (real_sub (u (real_add ub h)) (u ub)) h) |
11289 (%h::hollight.real. real_div (real_sub (u (real_add ub h)) (u ub)) h) |
11009 ua (real_of_num (0::nat)))" |
11290 ua (real_of_num 0))" |
11010 by (import hollight DEF_diffl) |
11291 by (import hollight DEF_diffl) |
11011 |
11292 |
11012 constdefs |
11293 constdefs |
11013 contl :: "(hollight.real => hollight.real) => hollight.real => bool" |
11294 contl :: "(hollight.real => hollight.real) => hollight.real => bool" |
11014 "contl == |
11295 "contl == |
11015 %(u::hollight.real => hollight.real) ua::hollight.real. |
11296 %(u::hollight.real => hollight.real) ua::hollight.real. |
11016 tends_real_real (%h::hollight.real. u (real_add ua h)) (u ua) |
11297 tends_real_real (%h::hollight.real. u (real_add ua h)) (u ua) |
11017 (real_of_num (0::nat))" |
11298 (real_of_num 0)" |
11018 |
11299 |
11019 lemma DEF_contl: "contl = |
11300 lemma DEF_contl: "contl = |
11020 (%(u::hollight.real => hollight.real) ua::hollight.real. |
11301 (%(u::hollight.real => hollight.real) ua::hollight.real. |
11021 tends_real_real (%h::hollight.real. u (real_add ua h)) (u ua) |
11302 tends_real_real (%h::hollight.real. u (real_add ua h)) (u ua) |
11022 (real_of_num (0::nat)))" |
11303 (real_of_num 0))" |
11023 by (import hollight DEF_contl) |
11304 by (import hollight DEF_contl) |
11024 |
11305 |
11025 constdefs |
11306 constdefs |
11026 differentiable :: "(hollight.real => hollight.real) => hollight.real => bool" |
11307 differentiable :: "(hollight.real => hollight.real) => hollight.real => bool" |
11027 "differentiable == |
11308 "differentiable == |
11067 contl (f::hollight.real => hollight.real) x --> |
11348 contl (f::hollight.real => hollight.real) x --> |
11068 contl (%x::hollight.real. real_neg (f x)) x" |
11349 contl (%x::hollight.real. real_neg (f x)) x" |
11069 by (import hollight CONT_NEG) |
11350 by (import hollight CONT_NEG) |
11070 |
11351 |
11071 lemma CONT_INV: "ALL x::hollight.real. |
11352 lemma CONT_INV: "ALL x::hollight.real. |
11072 contl (f::hollight.real => hollight.real) x & |
11353 contl (f::hollight.real => hollight.real) x & f x ~= real_of_num 0 --> |
11073 f x ~= real_of_num (0::nat) --> |
|
11074 contl (%x::hollight.real. real_inv (f x)) x" |
11354 contl (%x::hollight.real. real_inv (f x)) x" |
11075 by (import hollight CONT_INV) |
11355 by (import hollight CONT_INV) |
11076 |
11356 |
11077 lemma CONT_SUB: "ALL x::hollight.real. |
11357 lemma CONT_SUB: "ALL x::hollight.real. |
11078 contl (f::hollight.real => hollight.real) x & |
11358 contl (f::hollight.real => hollight.real) x & |
11080 contl (%x::hollight.real. real_sub (f x) (g x)) x" |
11360 contl (%x::hollight.real. real_sub (f x) (g x)) x" |
11081 by (import hollight CONT_SUB) |
11361 by (import hollight CONT_SUB) |
11082 |
11362 |
11083 lemma CONT_DIV: "ALL x::hollight.real. |
11363 lemma CONT_DIV: "ALL x::hollight.real. |
11084 contl (f::hollight.real => hollight.real) x & |
11364 contl (f::hollight.real => hollight.real) x & |
11085 contl (g::hollight.real => hollight.real) x & |
11365 contl (g::hollight.real => hollight.real) x & g x ~= real_of_num 0 --> |
11086 g x ~= real_of_num (0::nat) --> |
|
11087 contl (%x::hollight.real. real_div (f x) (g x)) x" |
11366 contl (%x::hollight.real. real_div (f x) (g x)) x" |
11088 by (import hollight CONT_DIV) |
11367 by (import hollight CONT_DIV) |
11089 |
11368 |
11090 lemma CONT_COMPOSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11369 lemma CONT_COMPOSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11091 x::hollight.real. |
11370 x::hollight.real. |
11106 (real_le (f b) y & real_le y (f a)) & |
11385 (real_le (f b) y & real_le y (f a)) & |
11107 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) --> |
11386 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) --> |
11108 (EX x::hollight.real. real_le a x & real_le x b & f x = y)" |
11387 (EX x::hollight.real. real_le a x & real_le x b & f x = y)" |
11109 by (import hollight IVT2) |
11388 by (import hollight IVT2) |
11110 |
11389 |
11111 lemma DIFF_CONST: "ALL k::hollight.real. |
11390 lemma DIFF_CONST: "ALL k::hollight.real. All (diffl (%x::hollight.real. k) (real_of_num 0))" |
11112 All (diffl (%x::hollight.real. k) (real_of_num (0::nat)))" |
|
11113 by (import hollight DIFF_CONST) |
11391 by (import hollight DIFF_CONST) |
11114 |
11392 |
11115 lemma DIFF_ADD: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11393 lemma DIFF_ADD: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11116 (l::hollight.real) (m::hollight.real) x::hollight.real. |
11394 (l::hollight.real) (m::hollight.real) x::hollight.real. |
11117 diffl f l x & diffl g m x --> |
11395 diffl f l x & diffl g m x --> |
11153 (l::hollight.real) (m::hollight.real) x::hollight.real. |
11431 (l::hollight.real) (m::hollight.real) x::hollight.real. |
11154 diffl f l (g x) & diffl g m x --> |
11432 diffl f l (g x) & diffl g m x --> |
11155 diffl (%x::hollight.real. f (g x)) (real_mul l m) x" |
11433 diffl (%x::hollight.real. f (g x)) (real_mul l m) x" |
11156 by (import hollight DIFF_CHAIN) |
11434 by (import hollight DIFF_CHAIN) |
11157 |
11435 |
11158 lemma DIFF_X: "All (diffl (%x::hollight.real. x) (real_of_num (NUMERAL_BIT1 (0::nat))))" |
11436 lemma DIFF_X: "All (diffl (%x::hollight.real. x) (real_of_num (NUMERAL_BIT1 0)))" |
11159 by (import hollight DIFF_X) |
11437 by (import hollight DIFF_X) |
11160 |
11438 |
11161 lemma DIFF_POW: "ALL (n::nat) x::hollight.real. |
11439 lemma DIFF_POW: "ALL (n::nat) x::hollight.real. |
11162 diffl (%x::hollight.real. real_pow x n) |
11440 diffl (%x::hollight.real. real_pow x n) |
11163 (real_mul (real_of_num n) (real_pow x (n - NUMERAL_BIT1 (0::nat)))) x" |
11441 (real_mul (real_of_num n) (real_pow x (n - NUMERAL_BIT1 0))) x" |
11164 by (import hollight DIFF_POW) |
11442 by (import hollight DIFF_POW) |
11165 |
11443 |
11166 lemma DIFF_XM1: "ALL x::hollight.real. |
11444 lemma DIFF_XM1: "ALL x::hollight.real. |
11167 x ~= real_of_num (0::nat) --> |
11445 x ~= real_of_num 0 --> |
11168 diffl real_inv |
11446 diffl real_inv |
11169 (real_neg |
11447 (real_neg (real_pow (real_inv x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) x" |
11170 (real_pow (real_inv x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11171 x" |
|
11172 by (import hollight DIFF_XM1) |
11448 by (import hollight DIFF_XM1) |
11173 |
11449 |
11174 lemma DIFF_INV: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real. |
11450 lemma DIFF_INV: "ALL (f::hollight.real => hollight.real) (l::hollight.real) x::hollight.real. |
11175 diffl f l x & f x ~= real_of_num (0::nat) --> |
11451 diffl f l x & f x ~= real_of_num 0 --> |
11176 diffl (%x::hollight.real. real_inv (f x)) |
11452 diffl (%x::hollight.real. real_inv (f x)) |
11177 (real_neg |
11453 (real_neg (real_div l (real_pow (f x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
11178 (real_div l (real_pow (f x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
11179 x" |
11454 x" |
11180 by (import hollight DIFF_INV) |
11455 by (import hollight DIFF_INV) |
11181 |
11456 |
11182 lemma DIFF_DIV: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11457 lemma DIFF_DIV: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11183 (l::hollight.real) m::hollight.real. |
11458 (l::hollight.real) m::hollight.real. |
11184 diffl f l (x::hollight.real) & |
11459 diffl f l (x::hollight.real) & diffl g m x & g x ~= real_of_num 0 --> |
11185 diffl g m x & g x ~= real_of_num (0::nat) --> |
|
11186 diffl (%x::hollight.real. real_div (f x) (g x)) |
11460 diffl (%x::hollight.real. real_div (f x) (g x)) |
11187 (real_div (real_sub (real_mul l (g x)) (real_mul m (f x))) |
11461 (real_div (real_sub (real_mul l (g x)) (real_mul m (f x))) |
11188 (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
11462 (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11189 x" |
11463 x" |
11190 by (import hollight DIFF_DIV) |
11464 by (import hollight DIFF_DIV) |
11191 |
11465 |
11192 lemma DIFF_SUM: "ALL (f::nat => hollight.real => hollight.real) |
11466 lemma DIFF_SUM: "ALL (f::nat => hollight.real => hollight.real) |
11193 (f'::nat => hollight.real => hollight.real) (m::nat) (n::nat) |
11467 (f'::nat => hollight.real => hollight.real) (m::nat) (n::nat) |
11252 real_le L y & real_le y M --> |
11526 real_le L y & real_le y M --> |
11253 (EX x::hollight.real. real_le a x & real_le x b & f x = y)))" |
11527 (EX x::hollight.real. real_le a x & real_le x b & f x = y)))" |
11254 by (import hollight CONT_ATTAINS_ALL) |
11528 by (import hollight CONT_ATTAINS_ALL) |
11255 |
11529 |
11256 lemma DIFF_LINC: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11530 lemma DIFF_LINC: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11257 diffl f l x & real_lt (real_of_num (0::nat)) l --> |
11531 diffl f l x & real_lt (real_of_num 0) l --> |
11258 (EX d::hollight.real. |
11532 (EX d::hollight.real. |
11259 real_lt (real_of_num (0::nat)) d & |
11533 real_lt (real_of_num 0) d & |
11260 (ALL h::hollight.real. |
11534 (ALL h::hollight.real. |
11261 real_lt (real_of_num (0::nat)) h & real_lt h d --> |
11535 real_lt (real_of_num 0) h & real_lt h d --> |
11262 real_lt (f x) (f (real_add x h))))" |
11536 real_lt (f x) (f (real_add x h))))" |
11263 by (import hollight DIFF_LINC) |
11537 by (import hollight DIFF_LINC) |
11264 |
11538 |
11265 lemma DIFF_LDEC: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11539 lemma DIFF_LDEC: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11266 diffl f l x & real_lt l (real_of_num (0::nat)) --> |
11540 diffl f l x & real_lt l (real_of_num 0) --> |
11267 (EX d::hollight.real. |
11541 (EX d::hollight.real. |
11268 real_lt (real_of_num (0::nat)) d & |
11542 real_lt (real_of_num 0) d & |
11269 (ALL h::hollight.real. |
11543 (ALL h::hollight.real. |
11270 real_lt (real_of_num (0::nat)) h & real_lt h d --> |
11544 real_lt (real_of_num 0) h & real_lt h d --> |
11271 real_lt (f x) (f (real_sub x h))))" |
11545 real_lt (f x) (f (real_sub x h))))" |
11272 by (import hollight DIFF_LDEC) |
11546 by (import hollight DIFF_LDEC) |
11273 |
11547 |
11274 lemma DIFF_LMAX: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11548 lemma DIFF_LMAX: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11275 diffl f l x & |
11549 diffl f l x & |
11276 (EX d::hollight.real. |
11550 (EX d::hollight.real. |
11277 real_lt (real_of_num (0::nat)) d & |
11551 real_lt (real_of_num 0) d & |
11278 (ALL y::hollight.real. |
11552 (ALL y::hollight.real. |
11279 real_lt (real_abs (real_sub x y)) d --> real_le (f y) (f x))) --> |
11553 real_lt (real_abs (real_sub x y)) d --> real_le (f y) (f x))) --> |
11280 l = real_of_num (0::nat)" |
11554 l = real_of_num 0" |
11281 by (import hollight DIFF_LMAX) |
11555 by (import hollight DIFF_LMAX) |
11282 |
11556 |
11283 lemma DIFF_LMIN: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11557 lemma DIFF_LMIN: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11284 diffl f l x & |
11558 diffl f l x & |
11285 (EX d::hollight.real. |
11559 (EX d::hollight.real. |
11286 real_lt (real_of_num (0::nat)) d & |
11560 real_lt (real_of_num 0) d & |
11287 (ALL y::hollight.real. |
11561 (ALL y::hollight.real. |
11288 real_lt (real_abs (real_sub x y)) d --> real_le (f x) (f y))) --> |
11562 real_lt (real_abs (real_sub x y)) d --> real_le (f x) (f y))) --> |
11289 l = real_of_num (0::nat)" |
11563 l = real_of_num 0" |
11290 by (import hollight DIFF_LMIN) |
11564 by (import hollight DIFF_LMIN) |
11291 |
11565 |
11292 lemma DIFF_LCONST: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11566 lemma DIFF_LCONST: "ALL (f::hollight.real => hollight.real) (x::hollight.real) l::hollight.real. |
11293 diffl f l x & |
11567 diffl f l x & |
11294 (EX d::hollight.real. |
11568 (EX d::hollight.real. |
11295 real_lt (real_of_num (0::nat)) d & |
11569 real_lt (real_of_num 0) d & |
11296 (ALL y::hollight.real. |
11570 (ALL y::hollight.real. |
11297 real_lt (real_abs (real_sub x y)) d --> f y = f x)) --> |
11571 real_lt (real_abs (real_sub x y)) d --> f y = f x)) --> |
11298 l = real_of_num (0::nat)" |
11572 l = real_of_num 0" |
11299 by (import hollight DIFF_LCONST) |
11573 by (import hollight DIFF_LCONST) |
11300 |
11574 |
11301 lemma INTERVAL_LEMMA_LT: "ALL (a::hollight.real) (b::hollight.real) x::hollight.real. |
11575 lemma INTERVAL_LEMMA_LT: "ALL (a::hollight.real) (b::hollight.real) x::hollight.real. |
11302 real_lt a x & real_lt x b --> |
11576 real_lt a x & real_lt x b --> |
11303 (EX xa::hollight.real. |
11577 (EX xa::hollight.real. |
11304 real_lt (real_of_num (0::nat)) xa & |
11578 real_lt (real_of_num 0) xa & |
11305 (ALL xb::hollight.real. |
11579 (ALL xb::hollight.real. |
11306 real_lt (real_abs (real_sub x xb)) xa --> |
11580 real_lt (real_abs (real_sub x xb)) xa --> |
11307 real_lt a xb & real_lt xb b))" |
11581 real_lt a xb & real_lt xb b))" |
11308 by (import hollight INTERVAL_LEMMA_LT) |
11582 by (import hollight INTERVAL_LEMMA_LT) |
11309 |
11583 |
11310 lemma INTERVAL_LEMMA: "ALL (a::hollight.real) (b::hollight.real) x::hollight.real. |
11584 lemma INTERVAL_LEMMA: "ALL (a::hollight.real) (b::hollight.real) x::hollight.real. |
11311 real_lt a x & real_lt x b --> |
11585 real_lt a x & real_lt x b --> |
11312 (EX xa::hollight.real. |
11586 (EX xa::hollight.real. |
11313 real_lt (real_of_num (0::nat)) xa & |
11587 real_lt (real_of_num 0) xa & |
11314 (ALL y::hollight.real. |
11588 (ALL y::hollight.real. |
11315 real_lt (real_abs (real_sub x y)) xa --> |
11589 real_lt (real_abs (real_sub x y)) xa --> |
11316 real_le a y & real_le y b))" |
11590 real_le a y & real_le y b))" |
11317 by (import hollight INTERVAL_LEMMA) |
11591 by (import hollight INTERVAL_LEMMA) |
11318 |
11592 |
11321 f a = f b & |
11595 f a = f b & |
11322 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) & |
11596 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) & |
11323 (ALL x::hollight.real. |
11597 (ALL x::hollight.real. |
11324 real_lt a x & real_lt x b --> differentiable f x) --> |
11598 real_lt a x & real_lt x b --> differentiable f x) --> |
11325 (EX z::hollight.real. |
11599 (EX z::hollight.real. |
11326 real_lt a z & real_lt z b & diffl f (real_of_num (0::nat)) z)" |
11600 real_lt a z & real_lt z b & diffl f (real_of_num 0) z)" |
11327 by (import hollight ROLLE) |
11601 by (import hollight ROLLE) |
11328 |
11602 |
11329 lemma MVT_LEMMA: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11603 lemma MVT_LEMMA: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11330 real_sub (f a) |
11604 real_sub (f a) |
11331 (real_mul (real_div (real_sub (f b) (f a)) (real_sub b a)) a) = |
11605 (real_mul (real_div (real_sub (f b) (f a)) (real_sub b a)) a) = |
11356 |
11630 |
11357 lemma DIFF_ISCONST_END: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11631 lemma DIFF_ISCONST_END: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11358 real_lt a b & |
11632 real_lt a b & |
11359 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) & |
11633 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) & |
11360 (ALL x::hollight.real. |
11634 (ALL x::hollight.real. |
11361 real_lt a x & real_lt x b --> diffl f (real_of_num (0::nat)) x) --> |
11635 real_lt a x & real_lt x b --> diffl f (real_of_num 0) x) --> |
11362 f b = f a" |
11636 f b = f a" |
11363 by (import hollight DIFF_ISCONST_END) |
11637 by (import hollight DIFF_ISCONST_END) |
11364 |
11638 |
11365 lemma DIFF_ISCONST: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11639 lemma DIFF_ISCONST: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11366 real_lt a b & |
11640 real_lt a b & |
11367 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) & |
11641 (ALL x::hollight.real. real_le a x & real_le x b --> contl f x) & |
11368 (ALL x::hollight.real. |
11642 (ALL x::hollight.real. |
11369 real_lt a x & real_lt x b --> diffl f (real_of_num (0::nat)) x) --> |
11643 real_lt a x & real_lt x b --> diffl f (real_of_num 0) x) --> |
11370 (ALL x::hollight.real. real_le a x & real_le x b --> f x = f a)" |
11644 (ALL x::hollight.real. real_le a x & real_le x b --> f x = f a)" |
11371 by (import hollight DIFF_ISCONST) |
11645 by (import hollight DIFF_ISCONST) |
11372 |
11646 |
11373 lemma DIFF_ISCONST_END_SIMPLE: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11647 lemma DIFF_ISCONST_END_SIMPLE: "ALL (f::hollight.real => hollight.real) (a::hollight.real) b::hollight.real. |
11374 real_lt a b & |
11648 real_lt a b & |
11375 (ALL x::hollight.real. |
11649 (ALL x::hollight.real. |
11376 real_le a x & real_le x b --> diffl f (real_of_num (0::nat)) x) --> |
11650 real_le a x & real_le x b --> diffl f (real_of_num 0) x) --> |
11377 f b = f a" |
11651 f b = f a" |
11378 by (import hollight DIFF_ISCONST_END_SIMPLE) |
11652 by (import hollight DIFF_ISCONST_END_SIMPLE) |
11379 |
11653 |
11380 lemma DIFF_ISCONST_ALL: "ALL (x::hollight.real => hollight.real) (xa::hollight.real) |
11654 lemma DIFF_ISCONST_ALL: "ALL (x::hollight.real => hollight.real) (xa::hollight.real) |
11381 xb::hollight.real. All (diffl x (real_of_num (0::nat))) --> x xa = x xb" |
11655 xb::hollight.real. All (diffl x (real_of_num 0)) --> x xa = x xb" |
11382 by (import hollight DIFF_ISCONST_ALL) |
11656 by (import hollight DIFF_ISCONST_ALL) |
11383 |
11657 |
11384 lemma INTERVAL_ABS: "ALL (x::hollight.real) (z::hollight.real) d::hollight.real. |
11658 lemma INTERVAL_ABS: "ALL (x::hollight.real) (z::hollight.real) d::hollight.real. |
11385 (real_le (real_sub x d) z & real_le z (real_add x d)) = |
11659 (real_le (real_sub x d) z & real_le z (real_add x d)) = |
11386 real_le (real_abs (real_sub z x)) d" |
11660 real_le (real_abs (real_sub z x)) d" |
11387 by (import hollight INTERVAL_ABS) |
11661 by (import hollight INTERVAL_ABS) |
11388 |
11662 |
11389 lemma CONT_INJ_LEMMA: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11663 lemma CONT_INJ_LEMMA: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11390 (x::hollight.real) d::hollight.real. |
11664 (x::hollight.real) d::hollight.real. |
11391 real_lt (real_of_num (0::nat)) d & |
11665 real_lt (real_of_num 0) d & |
11392 (ALL z::hollight.real. |
11666 (ALL z::hollight.real. |
11393 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11667 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11394 (ALL z::hollight.real. |
11668 (ALL z::hollight.real. |
11395 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11669 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11396 ~ (ALL z::hollight.real. |
11670 ~ (ALL z::hollight.real. |
11397 real_le (real_abs (real_sub z x)) d --> real_le (f z) (f x))" |
11671 real_le (real_abs (real_sub z x)) d --> real_le (f z) (f x))" |
11398 by (import hollight CONT_INJ_LEMMA) |
11672 by (import hollight CONT_INJ_LEMMA) |
11399 |
11673 |
11400 lemma CONT_INJ_LEMMA2: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11674 lemma CONT_INJ_LEMMA2: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11401 (x::hollight.real) d::hollight.real. |
11675 (x::hollight.real) d::hollight.real. |
11402 real_lt (real_of_num (0::nat)) d & |
11676 real_lt (real_of_num 0) d & |
11403 (ALL z::hollight.real. |
11677 (ALL z::hollight.real. |
11404 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11678 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11405 (ALL z::hollight.real. |
11679 (ALL z::hollight.real. |
11406 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11680 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11407 ~ (ALL z::hollight.real. |
11681 ~ (ALL z::hollight.real. |
11408 real_le (real_abs (real_sub z x)) d --> real_le (f x) (f z))" |
11682 real_le (real_abs (real_sub z x)) d --> real_le (f x) (f z))" |
11409 by (import hollight CONT_INJ_LEMMA2) |
11683 by (import hollight CONT_INJ_LEMMA2) |
11410 |
11684 |
11411 lemma CONT_INJ_RANGE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11685 lemma CONT_INJ_RANGE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11412 (x::hollight.real) d::hollight.real. |
11686 (x::hollight.real) d::hollight.real. |
11413 real_lt (real_of_num (0::nat)) d & |
11687 real_lt (real_of_num 0) d & |
11414 (ALL z::hollight.real. |
11688 (ALL z::hollight.real. |
11415 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11689 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11416 (ALL z::hollight.real. |
11690 (ALL z::hollight.real. |
11417 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11691 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11418 (EX e::hollight.real. |
11692 (EX e::hollight.real. |
11419 real_lt (real_of_num (0::nat)) e & |
11693 real_lt (real_of_num 0) e & |
11420 (ALL y::hollight.real. |
11694 (ALL y::hollight.real. |
11421 real_le (real_abs (real_sub y (f x))) e --> |
11695 real_le (real_abs (real_sub y (f x))) e --> |
11422 (EX z::hollight.real. |
11696 (EX z::hollight.real. |
11423 real_le (real_abs (real_sub z x)) d & f z = y)))" |
11697 real_le (real_abs (real_sub z x)) d & f z = y)))" |
11424 by (import hollight CONT_INJ_RANGE) |
11698 by (import hollight CONT_INJ_RANGE) |
11425 |
11699 |
11426 lemma CONT_INVERSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11700 lemma CONT_INVERSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11427 (x::hollight.real) d::hollight.real. |
11701 (x::hollight.real) d::hollight.real. |
11428 real_lt (real_of_num (0::nat)) d & |
11702 real_lt (real_of_num 0) d & |
11429 (ALL z::hollight.real. |
11703 (ALL z::hollight.real. |
11430 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11704 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11431 (ALL z::hollight.real. |
11705 (ALL z::hollight.real. |
11432 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11706 real_le (real_abs (real_sub z x)) d --> contl f z) --> |
11433 contl g (f x)" |
11707 contl g (f x)" |
11434 by (import hollight CONT_INVERSE) |
11708 by (import hollight CONT_INVERSE) |
11435 |
11709 |
11436 lemma DIFF_INVERSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11710 lemma DIFF_INVERSE: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11437 (l::hollight.real) (x::hollight.real) d::hollight.real. |
11711 (l::hollight.real) (x::hollight.real) d::hollight.real. |
11438 real_lt (real_of_num (0::nat)) d & |
11712 real_lt (real_of_num 0) d & |
11439 (ALL z::hollight.real. |
11713 (ALL z::hollight.real. |
11440 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11714 real_le (real_abs (real_sub z x)) d --> g (f z) = z) & |
11441 (ALL z::hollight.real. |
11715 (ALL z::hollight.real. |
11442 real_le (real_abs (real_sub z x)) d --> contl f z) & |
11716 real_le (real_abs (real_sub z x)) d --> contl f z) & |
11443 diffl f l x & l ~= real_of_num (0::nat) --> |
11717 diffl f l x & l ~= real_of_num 0 --> |
11444 diffl g (real_inv l) (f x)" |
11718 diffl g (real_inv l) (f x)" |
11445 by (import hollight DIFF_INVERSE) |
11719 by (import hollight DIFF_INVERSE) |
11446 |
11720 |
11447 lemma DIFF_INVERSE_LT: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11721 lemma DIFF_INVERSE_LT: "ALL (f::hollight.real => hollight.real) (g::hollight.real => hollight.real) |
11448 (l::hollight.real) (x::hollight.real) d::hollight.real. |
11722 (l::hollight.real) (x::hollight.real) d::hollight.real. |
11449 real_lt (real_of_num (0::nat)) d & |
11723 real_lt (real_of_num 0) d & |
11450 (ALL z::hollight.real. |
11724 (ALL z::hollight.real. |
11451 real_lt (real_abs (real_sub z x)) d --> g (f z) = z) & |
11725 real_lt (real_abs (real_sub z x)) d --> g (f z) = z) & |
11452 (ALL z::hollight.real. |
11726 (ALL z::hollight.real. |
11453 real_lt (real_abs (real_sub z x)) d --> contl f z) & |
11727 real_lt (real_abs (real_sub z x)) d --> contl f z) & |
11454 diffl f l x & l ~= real_of_num (0::nat) --> |
11728 diffl f l x & l ~= real_of_num 0 --> |
11455 diffl g (real_inv l) (f x)" |
11729 diffl g (real_inv l) (f x)" |
11456 by (import hollight DIFF_INVERSE_LT) |
11730 by (import hollight DIFF_INVERSE_LT) |
11457 |
11731 |
11458 lemma IVT_DERIVATIVE_0: "ALL (f::hollight.real => hollight.real) (f'::hollight.real => hollight.real) |
11732 lemma IVT_DERIVATIVE_0: "ALL (f::hollight.real => hollight.real) (f'::hollight.real => hollight.real) |
11459 (a::hollight.real) b::hollight.real. |
11733 (a::hollight.real) b::hollight.real. |
11460 real_le a b & |
11734 real_le a b & |
11461 (ALL x::hollight.real. real_le a x & real_le x b --> diffl f (f' x) x) & |
11735 (ALL x::hollight.real. real_le a x & real_le x b --> diffl f (f' x) x) & |
11462 hollight.real_gt (f' a) (real_of_num (0::nat)) & |
11736 hollight.real_gt (f' a) (real_of_num 0) & |
11463 real_lt (f' b) (real_of_num (0::nat)) --> |
11737 real_lt (f' b) (real_of_num 0) --> |
11464 (EX z::hollight.real. |
11738 (EX z::hollight.real. real_lt a z & real_lt z b & f' z = real_of_num 0)" |
11465 real_lt a z & real_lt z b & f' z = real_of_num (0::nat))" |
|
11466 by (import hollight IVT_DERIVATIVE_0) |
11739 by (import hollight IVT_DERIVATIVE_0) |
11467 |
11740 |
11468 lemma IVT_DERIVATIVE_POS: "ALL (x::hollight.real => hollight.real) (xa::hollight.real => hollight.real) |
11741 lemma IVT_DERIVATIVE_POS: "ALL (x::hollight.real => hollight.real) (xa::hollight.real => hollight.real) |
11469 (xb::hollight.real) (xc::hollight.real) xd::hollight.real. |
11742 (xb::hollight.real) (xc::hollight.real) xd::hollight.real. |
11470 real_le xb xc & |
11743 real_le xb xc & |
11484 by (import hollight IVT_DERIVATIVE_NEG) |
11757 by (import hollight IVT_DERIVATIVE_NEG) |
11485 |
11758 |
11486 lemma SEQ_CONT_UNIFORM: "ALL (s::nat => hollight.real => hollight.real) |
11759 lemma SEQ_CONT_UNIFORM: "ALL (s::nat => hollight.real => hollight.real) |
11487 (f::hollight.real => hollight.real) x0::hollight.real. |
11760 (f::hollight.real => hollight.real) x0::hollight.real. |
11488 (ALL e::hollight.real. |
11761 (ALL e::hollight.real. |
11489 real_lt (real_of_num (0::nat)) e --> |
11762 real_lt (real_of_num 0) e --> |
11490 (EX (N::nat) d::hollight.real. |
11763 (EX (N::nat) d::hollight.real. |
11491 real_lt (real_of_num (0::nat)) d & |
11764 real_lt (real_of_num 0) d & |
11492 (ALL (x::hollight.real) n::nat. |
11765 (ALL (x::hollight.real) n::nat. |
11493 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11766 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11494 real_lt (real_abs (real_sub (s n x) (f x))) e))) & |
11767 real_lt (real_abs (real_sub (s n x) (f x))) e))) & |
11495 (EX N::nat. ALL n::nat. >= n N --> contl (s n) x0) --> |
11768 (EX N::nat. ALL n::nat. >= n N --> contl (s n) x0) --> |
11496 contl f x0" |
11769 contl f x0" |
11497 by (import hollight SEQ_CONT_UNIFORM) |
11770 by (import hollight SEQ_CONT_UNIFORM) |
11498 |
11771 |
11499 lemma SER_COMPARA_UNIFORM: "ALL (s::hollight.real => nat => hollight.real) (x0::hollight.real) |
11772 lemma SER_COMPARA_UNIFORM: "ALL (s::hollight.real => nat => hollight.real) (x0::hollight.real) |
11500 g::nat => hollight.real. |
11773 g::nat => hollight.real. |
11501 (EX (N::nat) d::hollight.real. |
11774 (EX (N::nat) d::hollight.real. |
11502 real_lt (real_of_num (0::nat)) d & |
11775 real_lt (real_of_num 0) d & |
11503 (ALL (n::nat) x::hollight.real. |
11776 (ALL (n::nat) x::hollight.real. |
11504 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11777 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11505 real_le (real_abs (s x n)) (g n))) & |
11778 real_le (real_abs (s x n)) (g n))) & |
11506 summable g --> |
11779 summable g --> |
11507 (EX (f::hollight.real => hollight.real) d::hollight.real. |
11780 (EX (f::hollight.real => hollight.real) d::hollight.real. |
11508 real_lt (real_of_num (0::nat)) d & |
11781 real_lt (real_of_num 0) d & |
11509 (ALL e::hollight.real. |
11782 (ALL e::hollight.real. |
11510 real_lt (real_of_num (0::nat)) e --> |
11783 real_lt (real_of_num 0) e --> |
11511 (EX N::nat. |
11784 (EX N::nat. |
11512 ALL (x::hollight.real) n::nat. |
11785 ALL (x::hollight.real) n::nat. |
11513 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11786 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11514 real_lt |
11787 real_lt (real_abs (real_sub (psum (0, n) (s x)) (f x))) |
11515 (real_abs (real_sub (psum (0::nat, n) (s x)) (f x))) e)))" |
11788 e)))" |
11516 by (import hollight SER_COMPARA_UNIFORM) |
11789 by (import hollight SER_COMPARA_UNIFORM) |
11517 |
11790 |
11518 lemma SER_COMPARA_UNIFORM_WEAK: "ALL (s::hollight.real => nat => hollight.real) (x0::hollight.real) |
11791 lemma SER_COMPARA_UNIFORM_WEAK: "ALL (s::hollight.real => nat => hollight.real) (x0::hollight.real) |
11519 g::nat => hollight.real. |
11792 g::nat => hollight.real. |
11520 (EX (N::nat) d::hollight.real. |
11793 (EX (N::nat) d::hollight.real. |
11521 real_lt (real_of_num (0::nat)) d & |
11794 real_lt (real_of_num 0) d & |
11522 (ALL (n::nat) x::hollight.real. |
11795 (ALL (n::nat) x::hollight.real. |
11523 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11796 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11524 real_le (real_abs (s x n)) (g n))) & |
11797 real_le (real_abs (s x n)) (g n))) & |
11525 summable g --> |
11798 summable g --> |
11526 (EX f::hollight.real => hollight.real. |
11799 (EX f::hollight.real => hollight.real. |
11527 ALL e::hollight.real. |
11800 ALL e::hollight.real. |
11528 real_lt (real_of_num (0::nat)) e --> |
11801 real_lt (real_of_num 0) e --> |
11529 (EX (N::nat) d::hollight.real. |
11802 (EX (N::nat) d::hollight.real. |
11530 real_lt (real_of_num (0::nat)) d & |
11803 real_lt (real_of_num 0) d & |
11531 (ALL (x::hollight.real) n::nat. |
11804 (ALL (x::hollight.real) n::nat. |
11532 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11805 real_lt (real_abs (real_sub x x0)) d & >= n N --> |
11533 real_lt |
11806 real_lt (real_abs (real_sub (psum (0, n) (s x)) (f x))) |
11534 (real_abs (real_sub (psum (0::nat, n) (s x)) (f x))) e)))" |
11807 e)))" |
11535 by (import hollight SER_COMPARA_UNIFORM_WEAK) |
11808 by (import hollight SER_COMPARA_UNIFORM_WEAK) |
11536 |
11809 |
11537 lemma POWDIFF_LEMMA: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11810 lemma POWDIFF_LEMMA: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11538 psum (0::nat, Suc n) |
11811 psum (0, Suc n) |
11539 (%p::nat. real_mul (real_pow x p) (real_pow y (Suc n - p))) = |
11812 (%p::nat. real_mul (real_pow x p) (real_pow y (Suc n - p))) = |
11540 real_mul y |
11813 real_mul y |
11541 (psum (0::nat, Suc n) |
11814 (psum (0, Suc n) |
11542 (%p::nat. real_mul (real_pow x p) (real_pow y (n - p))))" |
11815 (%p::nat. real_mul (real_pow x p) (real_pow y (n - p))))" |
11543 by (import hollight POWDIFF_LEMMA) |
11816 by (import hollight POWDIFF_LEMMA) |
11544 |
11817 |
11545 lemma POWDIFF: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11818 lemma POWDIFF: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11546 real_sub (real_pow x (Suc n)) (real_pow y (Suc n)) = |
11819 real_sub (real_pow x (Suc n)) (real_pow y (Suc n)) = |
11547 real_mul (real_sub x y) |
11820 real_mul (real_sub x y) |
11548 (psum (0::nat, Suc n) |
11821 (psum (0, Suc n) |
11549 (%p::nat. real_mul (real_pow x p) (real_pow y (n - p))))" |
11822 (%p::nat. real_mul (real_pow x p) (real_pow y (n - p))))" |
11550 by (import hollight POWDIFF) |
11823 by (import hollight POWDIFF) |
11551 |
11824 |
11552 lemma POWREV: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11825 lemma POWREV: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11553 psum (0::nat, Suc n) |
11826 psum (0, Suc n) |
11554 (%xa::nat. real_mul (real_pow x xa) (real_pow y (n - xa))) = |
11827 (%xa::nat. real_mul (real_pow x xa) (real_pow y (n - xa))) = |
11555 psum (0::nat, Suc n) |
11828 psum (0, Suc n) |
11556 (%xa::nat. real_mul (real_pow x (n - xa)) (real_pow y xa))" |
11829 (%xa::nat. real_mul (real_pow x (n - xa)) (real_pow y xa))" |
11557 by (import hollight POWREV) |
11830 by (import hollight POWREV) |
11558 |
11831 |
11559 lemma POWSER_INSIDEA: "ALL (f::nat => hollight.real) (x::hollight.real) z::hollight.real. |
11832 lemma POWSER_INSIDEA: "ALL (f::nat => hollight.real) (x::hollight.real) z::hollight.real. |
11560 summable (%n::nat. real_mul (f n) (real_pow x n)) & |
11833 summable (%n::nat. real_mul (f n) (real_pow x n)) & |
11582 lemma DIFFS_NEG: "ALL c::nat => hollight.real. |
11855 lemma DIFFS_NEG: "ALL c::nat => hollight.real. |
11583 diffs (%n::nat. real_neg (c n)) = (%x::nat. real_neg (diffs c x))" |
11856 diffs (%n::nat. real_neg (c n)) = (%x::nat. real_neg (diffs c x))" |
11584 by (import hollight DIFFS_NEG) |
11857 by (import hollight DIFFS_NEG) |
11585 |
11858 |
11586 lemma DIFFS_LEMMA: "ALL (n::nat) (c::nat => hollight.real) x::hollight.real. |
11859 lemma DIFFS_LEMMA: "ALL (n::nat) (c::nat => hollight.real) x::hollight.real. |
11587 psum (0::nat, n) (%n::nat. real_mul (diffs c n) (real_pow x n)) = |
11860 psum (0, n) (%n::nat. real_mul (diffs c n) (real_pow x n)) = |
11588 real_add |
11861 real_add |
11589 (psum (0::nat, n) |
11862 (psum (0, n) |
11590 (%n::nat. |
11863 (%n::nat. |
11591 real_mul (real_of_num n) |
11864 real_mul (real_of_num n) |
11592 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 (0::nat)))))) |
11865 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0))))) |
11593 (real_mul (real_of_num n) |
11866 (real_mul (real_of_num n) |
11594 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 (0::nat)))))" |
11867 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0))))" |
11595 by (import hollight DIFFS_LEMMA) |
11868 by (import hollight DIFFS_LEMMA) |
11596 |
11869 |
11597 lemma DIFFS_LEMMA2: "ALL (n::nat) (c::nat => hollight.real) x::hollight.real. |
11870 lemma DIFFS_LEMMA2: "ALL (n::nat) (c::nat => hollight.real) x::hollight.real. |
11598 psum (0::nat, n) |
11871 psum (0, n) |
11599 (%n::nat. |
11872 (%n::nat. |
11600 real_mul (real_of_num n) |
11873 real_mul (real_of_num n) |
11601 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 (0::nat))))) = |
11874 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0)))) = |
11602 real_sub |
11875 real_sub (psum (0, n) (%n::nat. real_mul (diffs c n) (real_pow x n))) |
11603 (psum (0::nat, n) (%n::nat. real_mul (diffs c n) (real_pow x n))) |
|
11604 (real_mul (real_of_num n) |
11876 (real_mul (real_of_num n) |
11605 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 (0::nat)))))" |
11877 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0))))" |
11606 by (import hollight DIFFS_LEMMA2) |
11878 by (import hollight DIFFS_LEMMA2) |
11607 |
11879 |
11608 lemma DIFFS_EQUIV: "ALL (c::nat => hollight.real) x::hollight.real. |
11880 lemma DIFFS_EQUIV: "ALL (c::nat => hollight.real) x::hollight.real. |
11609 summable (%n::nat. real_mul (diffs c n) (real_pow x n)) --> |
11881 summable (%n::nat. real_mul (diffs c n) (real_pow x n)) --> |
11610 sums |
11882 sums |
11611 (%n::nat. |
11883 (%n::nat. |
11612 real_mul (real_of_num n) |
11884 real_mul (real_of_num n) |
11613 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 (0::nat))))) |
11885 (real_mul (c n) (real_pow x (n - NUMERAL_BIT1 0)))) |
11614 (suminf (%n::nat. real_mul (diffs c n) (real_pow x n)))" |
11886 (suminf (%n::nat. real_mul (diffs c n) (real_pow x n)))" |
11615 by (import hollight DIFFS_EQUIV) |
11887 by (import hollight DIFFS_EQUIV) |
11616 |
11888 |
11617 lemma TERMDIFF_LEMMA1: "ALL (m::nat) (z::hollight.real) h::hollight.real. |
11889 lemma TERMDIFF_LEMMA1: "ALL (m::nat) (z::hollight.real) h::hollight.real. |
11618 psum (0::nat, m) |
11890 psum (0, m) |
11619 (%p::nat. |
11891 (%p::nat. |
11620 real_sub (real_mul (real_pow (real_add z h) (m - p)) (real_pow z p)) |
11892 real_sub (real_mul (real_pow (real_add z h) (m - p)) (real_pow z p)) |
11621 (real_pow z m)) = |
11893 (real_pow z m)) = |
11622 psum (0::nat, m) |
11894 psum (0, m) |
11623 (%p::nat. |
11895 (%p::nat. |
11624 real_mul (real_pow z p) |
11896 real_mul (real_pow z p) |
11625 (real_sub (real_pow (real_add z h) (m - p)) (real_pow z (m - p))))" |
11897 (real_sub (real_pow (real_add z h) (m - p)) (real_pow z (m - p))))" |
11626 by (import hollight TERMDIFF_LEMMA1) |
11898 by (import hollight TERMDIFF_LEMMA1) |
11627 |
11899 |
11628 lemma TERMDIFF_LEMMA2: "ALL (z::hollight.real) h::hollight.real. |
11900 lemma TERMDIFF_LEMMA2: "ALL (z::hollight.real) h::hollight.real. |
11629 h ~= real_of_num (0::nat) --> |
11901 h ~= real_of_num 0 --> |
11630 real_sub |
11902 real_sub |
11631 (real_div (real_sub (real_pow (real_add z h) (n::nat)) (real_pow z n)) |
11903 (real_div (real_sub (real_pow (real_add z h) (n::nat)) (real_pow z n)) |
11632 h) |
11904 h) |
11633 (real_mul (real_of_num n) (real_pow z (n - NUMERAL_BIT1 (0::nat)))) = |
11905 (real_mul (real_of_num n) (real_pow z (n - NUMERAL_BIT1 0))) = |
11634 real_mul h |
11906 real_mul h |
11635 (psum (0::nat, n - NUMERAL_BIT1 (0::nat)) |
11907 (psum (0, n - NUMERAL_BIT1 0) |
11636 (%p::nat. |
11908 (%p::nat. |
11637 real_mul (real_pow z p) |
11909 real_mul (real_pow z p) |
11638 (psum (0::nat, n - NUMERAL_BIT1 (0::nat) - p) |
11910 (psum (0, n - NUMERAL_BIT1 0 - p) |
11639 (%q::nat. |
11911 (%q::nat. |
11640 real_mul (real_pow (real_add z h) q) |
11912 real_mul (real_pow (real_add z h) q) |
11641 (real_pow z |
11913 (real_pow z |
11642 (n - NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) - p - q))))))" |
11914 (n - NUMERAL_BIT0 (NUMERAL_BIT1 0) - p - q))))))" |
11643 by (import hollight TERMDIFF_LEMMA2) |
11915 by (import hollight TERMDIFF_LEMMA2) |
11644 |
11916 |
11645 lemma TERMDIFF_LEMMA3: "ALL (z::hollight.real) (h::hollight.real) (n::nat) K::hollight.real. |
11917 lemma TERMDIFF_LEMMA3: "ALL (z::hollight.real) (h::hollight.real) (n::nat) K::hollight.real. |
11646 h ~= real_of_num (0::nat) & |
11918 h ~= real_of_num 0 & |
11647 real_le (real_abs z) K & real_le (real_abs (real_add z h)) K --> |
11919 real_le (real_abs z) K & real_le (real_abs (real_add z h)) K --> |
11648 real_le |
11920 real_le |
11649 (real_abs |
11921 (real_abs |
11650 (real_sub |
11922 (real_sub |
11651 (real_div (real_sub (real_pow (real_add z h) n) (real_pow z n)) h) |
11923 (real_div (real_sub (real_pow (real_add z h) n) (real_pow z n)) h) |
11652 (real_mul (real_of_num n) |
11924 (real_mul (real_of_num n) (real_pow z (n - NUMERAL_BIT1 0))))) |
11653 (real_pow z (n - NUMERAL_BIT1 (0::nat)))))) |
|
11654 (real_mul (real_of_num n) |
11925 (real_mul (real_of_num n) |
11655 (real_mul (real_of_num (n - NUMERAL_BIT1 (0::nat))) |
11926 (real_mul (real_of_num (n - NUMERAL_BIT1 0)) |
11656 (real_mul (real_pow K (n - NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
11927 (real_mul (real_pow K (n - NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
11657 (real_abs h))))" |
11928 (real_abs h))))" |
11658 by (import hollight TERMDIFF_LEMMA3) |
11929 by (import hollight TERMDIFF_LEMMA3) |
11659 |
11930 |
11660 lemma TERMDIFF_LEMMA4: "ALL (f::hollight.real => hollight.real) (K::hollight.real) k::hollight.real. |
11931 lemma TERMDIFF_LEMMA4: "ALL (f::hollight.real => hollight.real) (K::hollight.real) k::hollight.real. |
11661 real_lt (real_of_num (0::nat)) k & |
11932 real_lt (real_of_num 0) k & |
11662 (ALL h::hollight.real. |
11933 (ALL h::hollight.real. |
11663 real_lt (real_of_num (0::nat)) (real_abs h) & |
11934 real_lt (real_of_num 0) (real_abs h) & real_lt (real_abs h) k --> |
11664 real_lt (real_abs h) k --> |
|
11665 real_le (real_abs (f h)) (real_mul K (real_abs h))) --> |
11935 real_le (real_abs (f h)) (real_mul K (real_abs h))) --> |
11666 tends_real_real f (real_of_num (0::nat)) (real_of_num (0::nat))" |
11936 tends_real_real f (real_of_num 0) (real_of_num 0)" |
11667 by (import hollight TERMDIFF_LEMMA4) |
11937 by (import hollight TERMDIFF_LEMMA4) |
11668 |
11938 |
11669 lemma TERMDIFF_LEMMA5: "ALL (f::nat => hollight.real) (g::hollight.real => nat => hollight.real) |
11939 lemma TERMDIFF_LEMMA5: "ALL (f::nat => hollight.real) (g::hollight.real => nat => hollight.real) |
11670 k::hollight.real. |
11940 k::hollight.real. |
11671 real_lt (real_of_num (0::nat)) k & |
11941 real_lt (real_of_num 0) k & |
11672 summable f & |
11942 summable f & |
11673 (ALL h::hollight.real. |
11943 (ALL h::hollight.real. |
11674 real_lt (real_of_num (0::nat)) (real_abs h) & |
11944 real_lt (real_of_num 0) (real_abs h) & real_lt (real_abs h) k --> |
11675 real_lt (real_abs h) k --> |
|
11676 (ALL n::nat. |
11945 (ALL n::nat. |
11677 real_le (real_abs (g h n)) (real_mul (f n) (real_abs h)))) --> |
11946 real_le (real_abs (g h n)) (real_mul (f n) (real_abs h)))) --> |
11678 tends_real_real (%h::hollight.real. suminf (g h)) (real_of_num (0::nat)) |
11947 tends_real_real (%h::hollight.real. suminf (g h)) (real_of_num 0) |
11679 (real_of_num (0::nat))" |
11948 (real_of_num 0)" |
11680 by (import hollight TERMDIFF_LEMMA5) |
11949 by (import hollight TERMDIFF_LEMMA5) |
11681 |
11950 |
11682 lemma TERMDIFF: "ALL (c::nat => hollight.real) K::hollight.real. |
11951 lemma TERMDIFF: "ALL (c::nat => hollight.real) K::hollight.real. |
11683 summable (%n::nat. real_mul (c n) (real_pow K n)) & |
11952 summable (%n::nat. real_mul (c n) (real_pow K n)) & |
11684 summable (%n::nat. real_mul (diffs c n) (real_pow K n)) & |
11953 summable (%n::nat. real_mul (diffs c n) (real_pow K n)) & |
11688 (%x::hollight.real. suminf (%n::nat. real_mul (c n) (real_pow x n))) |
11957 (%x::hollight.real. suminf (%n::nat. real_mul (c n) (real_pow x n))) |
11689 (suminf (%n::nat. real_mul (diffs c n) (real_pow x n))) x" |
11958 (suminf (%n::nat. real_mul (diffs c n) (real_pow x n))) x" |
11690 by (import hollight TERMDIFF) |
11959 by (import hollight TERMDIFF) |
11691 |
11960 |
11692 lemma SEQ_NPOW: "ALL x::hollight.real. |
11961 lemma SEQ_NPOW: "ALL x::hollight.real. |
11693 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
11962 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
11694 tends_num_real (%n::nat. real_mul (real_of_num n) (real_pow x n)) |
11963 tends_num_real (%n::nat. real_mul (real_of_num n) (real_pow x n)) |
11695 (real_of_num (0::nat))" |
11964 (real_of_num 0)" |
11696 by (import hollight SEQ_NPOW) |
11965 by (import hollight SEQ_NPOW) |
11697 |
11966 |
11698 lemma TERMDIFF_CONVERGES: "ALL K::hollight.real. |
11967 lemma TERMDIFF_CONVERGES: "ALL K::hollight.real. |
11699 (ALL x::hollight.real. |
11968 (ALL x::hollight.real. |
11700 real_lt (real_abs x) K --> |
11969 real_lt (real_abs x) K --> |
11713 (%x::hollight.real. suminf (%n::nat. real_mul (c n) (real_pow x n))) |
11982 (%x::hollight.real. suminf (%n::nat. real_mul (c n) (real_pow x n))) |
11714 (suminf (%n::nat. real_mul (diffs c n) (real_pow x n))) x" |
11983 (suminf (%n::nat. real_mul (diffs c n) (real_pow x n))) x" |
11715 by (import hollight TERMDIFF_STRONG) |
11984 by (import hollight TERMDIFF_STRONG) |
11716 |
11985 |
11717 lemma POWSER_0: "ALL a::nat => hollight.real. |
11986 lemma POWSER_0: "ALL a::nat => hollight.real. |
11718 sums (%n::nat. real_mul (a n) (real_pow (real_of_num (0::nat)) n)) |
11987 sums (%n::nat. real_mul (a n) (real_pow (real_of_num 0) n)) (a 0)" |
11719 (a (0::nat))" |
|
11720 by (import hollight POWSER_0) |
11988 by (import hollight POWSER_0) |
11721 |
11989 |
11722 lemma POWSER_LIMIT_0: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
11990 lemma POWSER_LIMIT_0: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
11723 s::hollight.real. |
11991 s::hollight.real. |
11724 real_lt (real_of_num (0::nat)) s & |
11992 real_lt (real_of_num 0) s & |
11725 (ALL x::hollight.real. |
11993 (ALL x::hollight.real. |
11726 real_lt (real_abs x) s --> |
11994 real_lt (real_abs x) s --> |
11727 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x)) --> |
11995 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x)) --> |
11728 tends_real_real f (a (0::nat)) (real_of_num (0::nat))" |
11996 tends_real_real f (a 0) (real_of_num 0)" |
11729 by (import hollight POWSER_LIMIT_0) |
11997 by (import hollight POWSER_LIMIT_0) |
11730 |
11998 |
11731 lemma POWSER_LIMIT_0_STRONG: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
11999 lemma POWSER_LIMIT_0_STRONG: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
11732 s::hollight.real. |
12000 s::hollight.real. |
11733 real_lt (real_of_num (0::nat)) s & |
12001 real_lt (real_of_num 0) s & |
11734 (ALL x::hollight.real. |
12002 (ALL x::hollight.real. |
11735 real_lt (real_of_num (0::nat)) (real_abs x) & |
12003 real_lt (real_of_num 0) (real_abs x) & real_lt (real_abs x) s --> |
11736 real_lt (real_abs x) s --> |
|
11737 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x)) --> |
12004 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x)) --> |
11738 tends_real_real f (a (0::nat)) (real_of_num (0::nat))" |
12005 tends_real_real f (a 0) (real_of_num 0)" |
11739 by (import hollight POWSER_LIMIT_0_STRONG) |
12006 by (import hollight POWSER_LIMIT_0_STRONG) |
11740 |
12007 |
11741 lemma POWSER_EQUAL_0: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
12008 lemma POWSER_EQUAL_0: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
11742 (b::nat => hollight.real) P::hollight.real => bool. |
12009 (b::nat => hollight.real) P::hollight.real => bool. |
11743 (ALL e::hollight.real. |
12010 (ALL e::hollight.real. |
11744 real_lt (real_of_num (0::nat)) e --> |
12011 real_lt (real_of_num 0) e --> |
11745 (EX x::hollight.real. |
12012 (EX x::hollight.real. |
11746 P x & |
12013 P x & |
11747 real_lt (real_of_num (0::nat)) (real_abs x) & |
12014 real_lt (real_of_num 0) (real_abs x) & real_lt (real_abs x) e)) & |
11748 real_lt (real_abs x) e)) & |
|
11749 (ALL x::hollight.real. |
12015 (ALL x::hollight.real. |
11750 real_lt (real_of_num (0::nat)) (real_abs x) & P x --> |
12016 real_lt (real_of_num 0) (real_abs x) & P x --> |
11751 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x) & |
12017 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x) & |
11752 sums (%n::nat. real_mul (b n) (real_pow x n)) (f x)) --> |
12018 sums (%n::nat. real_mul (b n) (real_pow x n)) (f x)) --> |
11753 a (0::nat) = b (0::nat)" |
12019 a 0 = b 0" |
11754 by (import hollight POWSER_EQUAL_0) |
12020 by (import hollight POWSER_EQUAL_0) |
11755 |
12021 |
11756 lemma POWSER_EQUAL: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
12022 lemma POWSER_EQUAL: "ALL (f::hollight.real => hollight.real) (a::nat => hollight.real) |
11757 (b::nat => hollight.real) P::hollight.real => bool. |
12023 (b::nat => hollight.real) P::hollight.real => bool. |
11758 (ALL e::hollight.real. |
12024 (ALL e::hollight.real. |
11759 real_lt (real_of_num (0::nat)) e --> |
12025 real_lt (real_of_num 0) e --> |
11760 (EX x::hollight.real. |
12026 (EX x::hollight.real. |
11761 P x & |
12027 P x & |
11762 real_lt (real_of_num (0::nat)) (real_abs x) & |
12028 real_lt (real_of_num 0) (real_abs x) & real_lt (real_abs x) e)) & |
11763 real_lt (real_abs x) e)) & |
|
11764 (ALL x::hollight.real. |
12029 (ALL x::hollight.real. |
11765 P x --> |
12030 P x --> |
11766 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x) & |
12031 sums (%n::nat. real_mul (a n) (real_pow x n)) (f x) & |
11767 sums (%n::nat. real_mul (b n) (real_pow x n)) (f x)) --> |
12032 sums (%n::nat. real_mul (b n) (real_pow x n)) (f x)) --> |
11768 a = b" |
12033 a = b" |
11769 by (import hollight POWSER_EQUAL) |
12034 by (import hollight POWSER_EQUAL) |
11770 |
12035 |
11771 lemma MULT_DIV_2: "ALL n::nat. |
12036 lemma MULT_DIV_2: "ALL n::nat. |
11772 DIV (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n) |
12037 DIV (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = |
11773 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = |
|
11774 n" |
12038 n" |
11775 by (import hollight MULT_DIV_2) |
12039 by (import hollight MULT_DIV_2) |
11776 |
12040 |
11777 lemma EVEN_DIV2: "ALL n::nat. |
12041 lemma EVEN_DIV2: "ALL n::nat. |
11778 ~ EVEN n --> |
12042 ~ EVEN n --> |
11779 DIV (Suc n) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = |
12043 DIV (Suc n) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = |
11780 Suc (DIV (n - NUMERAL_BIT1 (0::nat)) |
12044 Suc (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
11781 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
|
11782 by (import hollight EVEN_DIV2) |
12045 by (import hollight EVEN_DIV2) |
11783 |
12046 |
11784 lemma POW_ZERO: "ALL (n::nat) x::hollight.real. |
12047 lemma POW_ZERO: "ALL (n::nat) x::hollight.real. |
11785 real_pow x n = real_of_num (0::nat) --> x = real_of_num (0::nat)" |
12048 real_pow x n = real_of_num 0 --> x = real_of_num 0" |
11786 by (import hollight POW_ZERO) |
12049 by (import hollight POW_ZERO) |
11787 |
12050 |
11788 lemma POW_ZERO_EQ: "ALL (n::nat) x::hollight.real. |
12051 lemma POW_ZERO_EQ: "ALL (n::nat) x::hollight.real. |
11789 (real_pow x (Suc n) = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
12052 (real_pow x (Suc n) = real_of_num 0) = (x = real_of_num 0)" |
11790 by (import hollight POW_ZERO_EQ) |
12053 by (import hollight POW_ZERO_EQ) |
11791 |
12054 |
11792 lemma POW_LT: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
12055 lemma POW_LT: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11793 real_le (real_of_num (0::nat)) x & real_lt x y --> |
12056 real_le (real_of_num 0) x & real_lt x y --> |
11794 real_lt (real_pow x (Suc n)) (real_pow y (Suc n))" |
12057 real_lt (real_pow x (Suc n)) (real_pow y (Suc n))" |
11795 by (import hollight POW_LT) |
12058 by (import hollight POW_LT) |
11796 |
12059 |
11797 lemma POW_EQ: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
12060 lemma POW_EQ: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
11798 real_le (real_of_num (0::nat)) x & |
12061 real_le (real_of_num 0) x & |
11799 real_le (real_of_num (0::nat)) y & |
12062 real_le (real_of_num 0) y & real_pow x (Suc n) = real_pow y (Suc n) --> |
11800 real_pow x (Suc n) = real_pow y (Suc n) --> |
|
11801 x = y" |
12063 x = y" |
11802 by (import hollight POW_EQ) |
12064 by (import hollight POW_EQ) |
11803 |
12065 |
11804 constdefs |
12066 constdefs |
11805 exp :: "hollight.real => hollight.real" |
12067 exp :: "hollight.real => hollight.real" |
11819 "sin == |
12081 "sin == |
11820 %u::hollight.real. |
12082 %u::hollight.real. |
11821 suminf |
12083 suminf |
11822 (%n::nat. |
12084 (%n::nat. |
11823 real_mul |
12085 real_mul |
11824 (COND (EVEN n) (real_of_num (0::nat)) |
12086 (COND (EVEN n) (real_of_num 0) |
11825 (real_div |
12087 (real_div |
11826 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12088 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11827 (DIV (n - NUMERAL_BIT1 (0::nat)) |
12089 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11828 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11829 (real_of_num (FACT n)))) |
12090 (real_of_num (FACT n)))) |
11830 (real_pow u n))" |
12091 (real_pow u n))" |
11831 |
12092 |
11832 lemma DEF_sin: "sin = |
12093 lemma DEF_sin: "sin = |
11833 (%u::hollight.real. |
12094 (%u::hollight.real. |
11834 suminf |
12095 suminf |
11835 (%n::nat. |
12096 (%n::nat. |
11836 real_mul |
12097 real_mul |
11837 (COND (EVEN n) (real_of_num (0::nat)) |
12098 (COND (EVEN n) (real_of_num 0) |
11838 (real_div |
12099 (real_div |
11839 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12100 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11840 (DIV (n - NUMERAL_BIT1 (0::nat)) |
12101 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11841 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11842 (real_of_num (FACT n)))) |
12102 (real_of_num (FACT n)))) |
11843 (real_pow u n)))" |
12103 (real_pow u n)))" |
11844 by (import hollight DEF_sin) |
12104 by (import hollight DEF_sin) |
11845 |
12105 |
11846 constdefs |
12106 constdefs |
11850 suminf |
12110 suminf |
11851 (%n::nat. |
12111 (%n::nat. |
11852 real_mul |
12112 real_mul |
11853 (COND (EVEN n) |
12113 (COND (EVEN n) |
11854 (real_div |
12114 (real_div |
11855 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12115 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11856 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12116 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11857 (real_of_num (FACT n))) |
12117 (real_of_num (FACT n))) |
11858 (real_of_num (0::nat))) |
12118 (real_of_num 0)) |
11859 (real_pow u n))" |
12119 (real_pow u n))" |
11860 |
12120 |
11861 lemma DEF_cos: "cos = |
12121 lemma DEF_cos: "cos = |
11862 (%u::hollight.real. |
12122 (%u::hollight.real. |
11863 suminf |
12123 suminf |
11864 (%n::nat. |
12124 (%n::nat. |
11865 real_mul |
12125 real_mul |
11866 (COND (EVEN n) |
12126 (COND (EVEN n) |
11867 (real_div |
12127 (real_div |
11868 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12128 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11869 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12129 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11870 (real_of_num (FACT n))) |
12130 (real_of_num (FACT n))) |
11871 (real_of_num (0::nat))) |
12131 (real_of_num 0)) |
11872 (real_pow u n)))" |
12132 (real_pow u n)))" |
11873 by (import hollight DEF_cos) |
12133 by (import hollight DEF_cos) |
11874 |
12134 |
11875 lemma REAL_EXP_CONVERGES: "ALL x::hollight.real. |
12135 lemma REAL_EXP_CONVERGES: "ALL x::hollight.real. |
11876 sums (%n::nat. real_mul (real_inv (real_of_num (FACT n))) (real_pow x n)) |
12136 sums (%n::nat. real_mul (real_inv (real_of_num (FACT n))) (real_pow x n)) |
11879 |
12139 |
11880 lemma SIN_CONVERGES: "ALL x::hollight.real. |
12140 lemma SIN_CONVERGES: "ALL x::hollight.real. |
11881 sums |
12141 sums |
11882 (%n::nat. |
12142 (%n::nat. |
11883 real_mul |
12143 real_mul |
11884 (COND (EVEN n) (real_of_num (0::nat)) |
12144 (COND (EVEN n) (real_of_num 0) |
11885 (real_div |
12145 (real_div |
11886 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12146 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11887 (DIV (n - NUMERAL_BIT1 (0::nat)) |
12147 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11888 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11889 (real_of_num (FACT n)))) |
12148 (real_of_num (FACT n)))) |
11890 (real_pow x n)) |
12149 (real_pow x n)) |
11891 (sin x)" |
12150 (sin x)" |
11892 by (import hollight SIN_CONVERGES) |
12151 by (import hollight SIN_CONVERGES) |
11893 |
12152 |
11895 sums |
12154 sums |
11896 (%n::nat. |
12155 (%n::nat. |
11897 real_mul |
12156 real_mul |
11898 (COND (EVEN n) |
12157 (COND (EVEN n) |
11899 (real_div |
12158 (real_div |
11900 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12159 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11901 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12160 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11902 (real_of_num (FACT n))) |
12161 (real_of_num (FACT n))) |
11903 (real_of_num (0::nat))) |
12162 (real_of_num 0)) |
11904 (real_pow x n)) |
12163 (real_pow x n)) |
11905 (cos x)" |
12164 (cos x)" |
11906 by (import hollight COS_CONVERGES) |
12165 by (import hollight COS_CONVERGES) |
11907 |
12166 |
11908 lemma REAL_EXP_FDIFF: "diffs (%n::nat. real_inv (real_of_num (FACT n))) = |
12167 lemma REAL_EXP_FDIFF: "diffs (%n::nat. real_inv (real_of_num (FACT n))) = |
11909 (%n::nat. real_inv (real_of_num (FACT n)))" |
12168 (%n::nat. real_inv (real_of_num (FACT n)))" |
11910 by (import hollight REAL_EXP_FDIFF) |
12169 by (import hollight REAL_EXP_FDIFF) |
11911 |
12170 |
11912 lemma SIN_FDIFF: "diffs |
12171 lemma SIN_FDIFF: "diffs |
11913 (%n::nat. |
12172 (%n::nat. |
11914 COND (EVEN n) (real_of_num (0::nat)) |
12173 COND (EVEN n) (real_of_num 0) |
11915 (real_div |
12174 (real_div |
11916 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12175 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11917 (DIV (n - NUMERAL_BIT1 (0::nat)) |
12176 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11918 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11919 (real_of_num (FACT n)))) = |
12177 (real_of_num (FACT n)))) = |
11920 (%n::nat. |
12178 (%n::nat. |
11921 COND (EVEN n) |
12179 COND (EVEN n) |
11922 (real_div |
12180 (real_div |
11923 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12181 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11924 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12182 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11925 (real_of_num (FACT n))) |
12183 (real_of_num (FACT n))) |
11926 (real_of_num (0::nat)))" |
12184 (real_of_num 0))" |
11927 by (import hollight SIN_FDIFF) |
12185 by (import hollight SIN_FDIFF) |
11928 |
12186 |
11929 lemma COS_FDIFF: "diffs |
12187 lemma COS_FDIFF: "diffs |
11930 (%n::nat. |
12188 (%n::nat. |
11931 COND (EVEN n) |
12189 COND (EVEN n) |
11932 (real_div |
12190 (real_div |
11933 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12191 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11934 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12192 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11935 (real_of_num (FACT n))) |
12193 (real_of_num (FACT n))) |
11936 (real_of_num (0::nat))) = |
12194 (real_of_num 0)) = |
11937 (%n::nat. |
12195 (%n::nat. |
11938 real_neg |
12196 real_neg |
11939 (COND (EVEN n) (real_of_num (0::nat)) |
12197 (COND (EVEN n) (real_of_num 0) |
11940 (real_div |
12198 (real_div |
11941 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12199 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11942 (DIV (n - NUMERAL_BIT1 (0::nat)) |
12200 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11943 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11944 (real_of_num (FACT n)))))" |
12201 (real_of_num (FACT n)))))" |
11945 by (import hollight COS_FDIFF) |
12202 by (import hollight COS_FDIFF) |
11946 |
12203 |
11947 lemma SIN_NEGLEMMA: "ALL x::hollight.real. |
12204 lemma SIN_NEGLEMMA: "ALL x::hollight.real. |
11948 real_neg (sin x) = |
12205 real_neg (sin x) = |
11949 suminf |
12206 suminf |
11950 (%n::nat. |
12207 (%n::nat. |
11951 real_neg |
12208 real_neg |
11952 (real_mul |
12209 (real_mul |
11953 (COND (EVEN n) (real_of_num (0::nat)) |
12210 (COND (EVEN n) (real_of_num 0) |
11954 (real_div |
12211 (real_div |
11955 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
12212 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
11956 (DIV (n - NUMERAL_BIT1 (0::nat)) |
12213 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11957 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
11958 (real_of_num (FACT n)))) |
12214 (real_of_num (FACT n)))) |
11959 (real_pow x n)))" |
12215 (real_pow x n)))" |
11960 by (import hollight SIN_NEGLEMMA) |
12216 by (import hollight SIN_NEGLEMMA) |
11961 |
12217 |
11962 lemma DIFF_EXP: "ALL x::hollight.real. diffl exp (exp x) x" |
12218 lemma DIFF_EXP: "ALL x::hollight.real. diffl exp (exp x) x" |
11968 lemma DIFF_COS: "ALL x::hollight.real. diffl cos (real_neg (sin x)) x" |
12224 lemma DIFF_COS: "ALL x::hollight.real. diffl cos (real_neg (sin x)) x" |
11969 by (import hollight DIFF_COS) |
12225 by (import hollight DIFF_COS) |
11970 |
12226 |
11971 lemma DIFF_COMPOSITE: "(diffl (f::hollight.real => hollight.real) (l::hollight.real) |
12227 lemma DIFF_COMPOSITE: "(diffl (f::hollight.real => hollight.real) (l::hollight.real) |
11972 (x::hollight.real) & |
12228 (x::hollight.real) & |
11973 f x ~= real_of_num (0::nat) --> |
12229 f x ~= real_of_num 0 --> |
11974 diffl (%x::hollight.real. real_inv (f x)) |
12230 diffl (%x::hollight.real. real_inv (f x)) |
11975 (real_neg |
12231 (real_neg (real_div l (real_pow (f x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
11976 (real_div l (real_pow (f x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
11977 x) & |
12232 x) & |
11978 (diffl f l x & |
12233 (diffl f l x & |
11979 diffl (g::hollight.real => hollight.real) (m::hollight.real) x & |
12234 diffl (g::hollight.real => hollight.real) (m::hollight.real) x & |
11980 g x ~= real_of_num (0::nat) --> |
12235 g x ~= real_of_num 0 --> |
11981 diffl (%x::hollight.real. real_div (f x) (g x)) |
12236 diffl (%x::hollight.real. real_div (f x) (g x)) |
11982 (real_div (real_sub (real_mul l (g x)) (real_mul m (f x))) |
12237 (real_div (real_sub (real_mul l (g x)) (real_mul m (f x))) |
11983 (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12238 (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
11984 x) & |
12239 x) & |
11985 (diffl f l x & diffl g m x --> |
12240 (diffl f l x & diffl g m x --> |
11986 diffl (%x::hollight.real. real_add (f x) (g x)) (real_add l m) x) & |
12241 diffl (%x::hollight.real. real_add (f x) (g x)) (real_add l m) x) & |
11987 (diffl f l x & diffl g m x --> |
12242 (diffl f l x & diffl g m x --> |
11988 diffl (%x::hollight.real. real_mul (f x) (g x)) |
12243 diffl (%x::hollight.real. real_mul (f x) (g x)) |
11990 (diffl f l x & diffl g m x --> |
12245 (diffl f l x & diffl g m x --> |
11991 diffl (%x::hollight.real. real_sub (f x) (g x)) (real_sub l m) x) & |
12246 diffl (%x::hollight.real. real_sub (f x) (g x)) (real_sub l m) x) & |
11992 (diffl f l x --> diffl (%x::hollight.real. real_neg (f x)) (real_neg l) x) & |
12247 (diffl f l x --> diffl (%x::hollight.real. real_neg (f x)) (real_neg l) x) & |
11993 (diffl g m x --> |
12248 (diffl g m x --> |
11994 diffl (%x::hollight.real. real_pow (g x) (n::nat)) |
12249 diffl (%x::hollight.real. real_pow (g x) (n::nat)) |
11995 (real_mul |
12250 (real_mul (real_mul (real_of_num n) (real_pow (g x) (n - NUMERAL_BIT1 0))) |
11996 (real_mul (real_of_num n) (real_pow (g x) (n - NUMERAL_BIT1 (0::nat)))) |
|
11997 m) |
12251 m) |
11998 x) & |
12252 x) & |
11999 (diffl g m x --> |
12253 (diffl g m x --> |
12000 diffl (%x::hollight.real. exp (g x)) (real_mul (exp (g x)) m) x) & |
12254 diffl (%x::hollight.real. exp (g x)) (real_mul (exp (g x)) m) x) & |
12001 (diffl g m x --> |
12255 (diffl g m x --> |
12002 diffl (%x::hollight.real. sin (g x)) (real_mul (cos (g x)) m) x) & |
12256 diffl (%x::hollight.real. sin (g x)) (real_mul (cos (g x)) m) x) & |
12003 (diffl g m x --> |
12257 (diffl g m x --> |
12004 diffl (%x::hollight.real. cos (g x)) (real_mul (real_neg (sin (g x))) m) x)" |
12258 diffl (%x::hollight.real. cos (g x)) (real_mul (real_neg (sin (g x))) m) x)" |
12005 by (import hollight DIFF_COMPOSITE) |
12259 by (import hollight DIFF_COMPOSITE) |
12006 |
12260 |
12007 lemma REAL_EXP_0: "exp (real_of_num (0::nat)) = real_of_num (NUMERAL_BIT1 (0::nat))" |
12261 lemma REAL_EXP_0: "exp (real_of_num 0) = real_of_num (NUMERAL_BIT1 0)" |
12008 by (import hollight REAL_EXP_0) |
12262 by (import hollight REAL_EXP_0) |
12009 |
12263 |
12010 lemma REAL_EXP_LE_X: "ALL x::hollight.real. |
12264 lemma REAL_EXP_LE_X: "ALL x::hollight.real. |
12011 real_le (real_of_num (0::nat)) x --> |
12265 real_le (real_of_num 0) x --> |
12012 real_le (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) x) (exp x)" |
12266 real_le (real_add (real_of_num (NUMERAL_BIT1 0)) x) (exp x)" |
12013 by (import hollight REAL_EXP_LE_X) |
12267 by (import hollight REAL_EXP_LE_X) |
12014 |
12268 |
12015 lemma REAL_EXP_LT_1: "ALL x::hollight.real. |
12269 lemma REAL_EXP_LT_1: "ALL x::hollight.real. |
12016 real_lt (real_of_num (0::nat)) x --> |
12270 real_lt (real_of_num 0) x --> |
12017 real_lt (real_of_num (NUMERAL_BIT1 (0::nat))) (exp x)" |
12271 real_lt (real_of_num (NUMERAL_BIT1 0)) (exp x)" |
12018 by (import hollight REAL_EXP_LT_1) |
12272 by (import hollight REAL_EXP_LT_1) |
12019 |
12273 |
12020 lemma REAL_EXP_ADD_MUL: "ALL (x::hollight.real) y::hollight.real. |
12274 lemma REAL_EXP_ADD_MUL: "ALL (x::hollight.real) y::hollight.real. |
12021 real_mul (exp (real_add x y)) (exp (real_neg x)) = exp y" |
12275 real_mul (exp (real_add x y)) (exp (real_neg x)) = exp y" |
12022 by (import hollight REAL_EXP_ADD_MUL) |
12276 by (import hollight REAL_EXP_ADD_MUL) |
12023 |
12277 |
12024 lemma REAL_EXP_NEG_MUL: "ALL x::hollight.real. |
12278 lemma REAL_EXP_NEG_MUL: "ALL x::hollight.real. |
12025 real_mul (exp x) (exp (real_neg x)) = real_of_num (NUMERAL_BIT1 (0::nat))" |
12279 real_mul (exp x) (exp (real_neg x)) = real_of_num (NUMERAL_BIT1 0)" |
12026 by (import hollight REAL_EXP_NEG_MUL) |
12280 by (import hollight REAL_EXP_NEG_MUL) |
12027 |
12281 |
12028 lemma REAL_EXP_NEG_MUL2: "ALL x::hollight.real. |
12282 lemma REAL_EXP_NEG_MUL2: "ALL x::hollight.real. |
12029 real_mul (exp (real_neg x)) (exp x) = real_of_num (NUMERAL_BIT1 (0::nat))" |
12283 real_mul (exp (real_neg x)) (exp x) = real_of_num (NUMERAL_BIT1 0)" |
12030 by (import hollight REAL_EXP_NEG_MUL2) |
12284 by (import hollight REAL_EXP_NEG_MUL2) |
12031 |
12285 |
12032 lemma REAL_EXP_NEG: "ALL x::hollight.real. exp (real_neg x) = real_inv (exp x)" |
12286 lemma REAL_EXP_NEG: "ALL x::hollight.real. exp (real_neg x) = real_inv (exp x)" |
12033 by (import hollight REAL_EXP_NEG) |
12287 by (import hollight REAL_EXP_NEG) |
12034 |
12288 |
12035 lemma REAL_EXP_ADD: "ALL (x::hollight.real) y::hollight.real. |
12289 lemma REAL_EXP_ADD: "ALL (x::hollight.real) y::hollight.real. |
12036 exp (real_add x y) = real_mul (exp x) (exp y)" |
12290 exp (real_add x y) = real_mul (exp x) (exp y)" |
12037 by (import hollight REAL_EXP_ADD) |
12291 by (import hollight REAL_EXP_ADD) |
12038 |
12292 |
12039 lemma REAL_EXP_POS_LE: "ALL x::hollight.real. real_le (real_of_num (0::nat)) (exp x)" |
12293 lemma REAL_EXP_POS_LE: "ALL x::hollight.real. real_le (real_of_num 0) (exp x)" |
12040 by (import hollight REAL_EXP_POS_LE) |
12294 by (import hollight REAL_EXP_POS_LE) |
12041 |
12295 |
12042 lemma REAL_EXP_NZ: "ALL x::hollight.real. exp x ~= real_of_num (0::nat)" |
12296 lemma REAL_EXP_NZ: "ALL x::hollight.real. exp x ~= real_of_num 0" |
12043 by (import hollight REAL_EXP_NZ) |
12297 by (import hollight REAL_EXP_NZ) |
12044 |
12298 |
12045 lemma REAL_EXP_POS_LT: "ALL x::hollight.real. real_lt (real_of_num (0::nat)) (exp x)" |
12299 lemma REAL_EXP_POS_LT: "ALL x::hollight.real. real_lt (real_of_num 0) (exp x)" |
12046 by (import hollight REAL_EXP_POS_LT) |
12300 by (import hollight REAL_EXP_POS_LT) |
12047 |
12301 |
12048 lemma REAL_EXP_N: "ALL (n::nat) x::hollight.real. |
12302 lemma REAL_EXP_N: "ALL (n::nat) x::hollight.real. |
12049 exp (real_mul (real_of_num n) x) = real_pow (exp x) n" |
12303 exp (real_mul (real_of_num n) x) = real_pow (exp x) n" |
12050 by (import hollight REAL_EXP_N) |
12304 by (import hollight REAL_EXP_N) |
12067 |
12321 |
12068 lemma REAL_EXP_INJ: "ALL (x::hollight.real) y::hollight.real. (exp x = exp y) = (x = y)" |
12322 lemma REAL_EXP_INJ: "ALL (x::hollight.real) y::hollight.real. (exp x = exp y) = (x = y)" |
12069 by (import hollight REAL_EXP_INJ) |
12323 by (import hollight REAL_EXP_INJ) |
12070 |
12324 |
12071 lemma REAL_EXP_TOTAL_LEMMA: "ALL y::hollight.real. |
12325 lemma REAL_EXP_TOTAL_LEMMA: "ALL y::hollight.real. |
12072 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) y --> |
12326 real_le (real_of_num (NUMERAL_BIT1 0)) y --> |
12073 (EX x::hollight.real. |
12327 (EX x::hollight.real. |
12074 real_le (real_of_num (0::nat)) x & |
12328 real_le (real_of_num 0) x & |
12075 real_le x (real_sub y (real_of_num (NUMERAL_BIT1 (0::nat)))) & |
12329 real_le x (real_sub y (real_of_num (NUMERAL_BIT1 0))) & exp x = y)" |
12076 exp x = y)" |
|
12077 by (import hollight REAL_EXP_TOTAL_LEMMA) |
12330 by (import hollight REAL_EXP_TOTAL_LEMMA) |
12078 |
12331 |
12079 lemma REAL_EXP_TOTAL: "ALL y::hollight.real. |
12332 lemma REAL_EXP_TOTAL: "ALL y::hollight.real. |
12080 real_lt (real_of_num (0::nat)) y --> (EX x::hollight.real. exp x = y)" |
12333 real_lt (real_of_num 0) y --> (EX x::hollight.real. exp x = y)" |
12081 by (import hollight REAL_EXP_TOTAL) |
12334 by (import hollight REAL_EXP_TOTAL) |
12082 |
12335 |
12083 lemma REAL_EXP_BOUND_LEMMA: "ALL x::hollight.real. |
12336 lemma REAL_EXP_BOUND_LEMMA: "ALL x::hollight.real. |
12084 real_le (real_of_num (0::nat)) x & |
12337 real_le (real_of_num 0) x & |
12085 real_le x |
12338 real_le x (real_inv (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12086 (real_inv (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
|
12087 real_le (exp x) |
12339 real_le (exp x) |
12088 (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
12340 (real_add (real_of_num (NUMERAL_BIT1 0)) |
12089 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x))" |
12341 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x))" |
12090 by (import hollight REAL_EXP_BOUND_LEMMA) |
12342 by (import hollight REAL_EXP_BOUND_LEMMA) |
12091 |
12343 |
12092 constdefs |
12344 constdefs |
12093 ln :: "hollight.real => hollight.real" |
12345 ln :: "hollight.real => hollight.real" |
12094 "ln == %u::hollight.real. SOME ua::hollight.real. exp ua = u" |
12346 "ln == %u::hollight.real. SOME ua::hollight.real. exp ua = u" |
12097 by (import hollight DEF_ln) |
12349 by (import hollight DEF_ln) |
12098 |
12350 |
12099 lemma LN_EXP: "ALL x::hollight.real. ln (exp x) = x" |
12351 lemma LN_EXP: "ALL x::hollight.real. ln (exp x) = x" |
12100 by (import hollight LN_EXP) |
12352 by (import hollight LN_EXP) |
12101 |
12353 |
12102 lemma REAL_EXP_LN: "ALL x::hollight.real. (exp (ln x) = x) = real_lt (real_of_num (0::nat)) x" |
12354 lemma REAL_EXP_LN: "ALL x::hollight.real. (exp (ln x) = x) = real_lt (real_of_num 0) x" |
12103 by (import hollight REAL_EXP_LN) |
12355 by (import hollight REAL_EXP_LN) |
12104 |
12356 |
12105 lemma LN_MUL: "ALL (x::hollight.real) y::hollight.real. |
12357 lemma LN_MUL: "ALL (x::hollight.real) y::hollight.real. |
12106 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
12358 real_lt (real_of_num 0) x & real_lt (real_of_num 0) y --> |
12107 ln (real_mul x y) = real_add (ln x) (ln y)" |
12359 ln (real_mul x y) = real_add (ln x) (ln y)" |
12108 by (import hollight LN_MUL) |
12360 by (import hollight LN_MUL) |
12109 |
12361 |
12110 lemma LN_INJ: "ALL (x::hollight.real) y::hollight.real. |
12362 lemma LN_INJ: "ALL (x::hollight.real) y::hollight.real. |
12111 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
12363 real_lt (real_of_num 0) x & real_lt (real_of_num 0) y --> |
12112 (ln x = ln y) = (x = y)" |
12364 (ln x = ln y) = (x = y)" |
12113 by (import hollight LN_INJ) |
12365 by (import hollight LN_INJ) |
12114 |
12366 |
12115 lemma LN_1: "ln (real_of_num (NUMERAL_BIT1 (0::nat))) = real_of_num (0::nat)" |
12367 lemma LN_1: "ln (real_of_num (NUMERAL_BIT1 0)) = real_of_num 0" |
12116 by (import hollight LN_1) |
12368 by (import hollight LN_1) |
12117 |
12369 |
12118 lemma LN_INV: "ALL x::hollight.real. |
12370 lemma LN_INV: "ALL x::hollight.real. |
12119 real_lt (real_of_num (0::nat)) x --> ln (real_inv x) = real_neg (ln x)" |
12371 real_lt (real_of_num 0) x --> ln (real_inv x) = real_neg (ln x)" |
12120 by (import hollight LN_INV) |
12372 by (import hollight LN_INV) |
12121 |
12373 |
12122 lemma LN_DIV: "ALL x::hollight.real. |
12374 lemma LN_DIV: "ALL x::hollight.real. |
12123 real_lt (real_of_num (0::nat)) x & |
12375 real_lt (real_of_num 0) x & |
12124 real_lt (real_of_num (0::nat)) (y::hollight.real) --> |
12376 real_lt (real_of_num 0) (y::hollight.real) --> |
12125 ln (real_div x y) = real_sub (ln x) (ln y)" |
12377 ln (real_div x y) = real_sub (ln x) (ln y)" |
12126 by (import hollight LN_DIV) |
12378 by (import hollight LN_DIV) |
12127 |
12379 |
12128 lemma LN_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
12380 lemma LN_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
12129 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
12381 real_lt (real_of_num 0) x & real_lt (real_of_num 0) y --> |
12130 real_lt (ln x) (ln y) = real_lt x y" |
12382 real_lt (ln x) (ln y) = real_lt x y" |
12131 by (import hollight LN_MONO_LT) |
12383 by (import hollight LN_MONO_LT) |
12132 |
12384 |
12133 lemma LN_MONO_LE: "ALL (x::hollight.real) y::hollight.real. |
12385 lemma LN_MONO_LE: "ALL (x::hollight.real) y::hollight.real. |
12134 real_lt (real_of_num (0::nat)) x & real_lt (real_of_num (0::nat)) y --> |
12386 real_lt (real_of_num 0) x & real_lt (real_of_num 0) y --> |
12135 real_le (ln x) (ln y) = real_le x y" |
12387 real_le (ln x) (ln y) = real_le x y" |
12136 by (import hollight LN_MONO_LE) |
12388 by (import hollight LN_MONO_LE) |
12137 |
12389 |
12138 lemma LN_POW: "ALL (n::nat) x::hollight.real. |
12390 lemma LN_POW: "ALL (n::nat) x::hollight.real. |
12139 real_lt (real_of_num (0::nat)) x --> |
12391 real_lt (real_of_num 0) x --> |
12140 ln (real_pow x n) = real_mul (real_of_num n) (ln x)" |
12392 ln (real_pow x n) = real_mul (real_of_num n) (ln x)" |
12141 by (import hollight LN_POW) |
12393 by (import hollight LN_POW) |
12142 |
12394 |
12143 lemma LN_LE: "ALL x::hollight.real. |
12395 lemma LN_LE: "ALL x::hollight.real. |
12144 real_le (real_of_num (0::nat)) x --> |
12396 real_le (real_of_num 0) x --> |
12145 real_le (ln (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) x)) x" |
12397 real_le (ln (real_add (real_of_num (NUMERAL_BIT1 0)) x)) x" |
12146 by (import hollight LN_LE) |
12398 by (import hollight LN_LE) |
12147 |
12399 |
12148 lemma LN_LT_X: "ALL x::hollight.real. real_lt (real_of_num (0::nat)) x --> real_lt (ln x) x" |
12400 lemma LN_LT_X: "ALL x::hollight.real. real_lt (real_of_num 0) x --> real_lt (ln x) x" |
12149 by (import hollight LN_LT_X) |
12401 by (import hollight LN_LT_X) |
12150 |
12402 |
12151 lemma LN_POS: "ALL x::hollight.real. |
12403 lemma LN_POS: "ALL x::hollight.real. |
12152 real_le (real_of_num (NUMERAL_BIT1 (0::nat))) x --> |
12404 real_le (real_of_num (NUMERAL_BIT1 0)) x --> |
12153 real_le (real_of_num (0::nat)) (ln x)" |
12405 real_le (real_of_num 0) (ln x)" |
12154 by (import hollight LN_POS) |
12406 by (import hollight LN_POS) |
12155 |
12407 |
12156 lemma LN_POS_LT: "ALL x::hollight.real. |
12408 lemma LN_POS_LT: "ALL x::hollight.real. |
12157 real_lt (real_of_num (NUMERAL_BIT1 (0::nat))) x --> |
12409 real_lt (real_of_num (NUMERAL_BIT1 0)) x --> |
12158 real_lt (real_of_num (0::nat)) (ln x)" |
12410 real_lt (real_of_num 0) (ln x)" |
12159 by (import hollight LN_POS_LT) |
12411 by (import hollight LN_POS_LT) |
12160 |
12412 |
12161 lemma DIFF_LN: "ALL x::hollight.real. |
12413 lemma DIFF_LN: "ALL x::hollight.real. real_lt (real_of_num 0) x --> diffl ln (real_inv x) x" |
12162 real_lt (real_of_num (0::nat)) x --> diffl ln (real_inv x) x" |
|
12163 by (import hollight DIFF_LN) |
12414 by (import hollight DIFF_LN) |
12164 |
12415 |
12165 constdefs |
12416 constdefs |
12166 root :: "nat => hollight.real => hollight.real" |
12417 root :: "nat => hollight.real => hollight.real" |
12167 "root == |
12418 "root == |
12168 %(u::nat) ua::hollight.real. |
12419 %(u::nat) ua::hollight.real. |
12169 SOME ub::hollight.real. |
12420 SOME ub::hollight.real. |
12170 (real_lt (real_of_num (0::nat)) ua --> |
12421 (real_lt (real_of_num 0) ua --> real_lt (real_of_num 0) ub) & |
12171 real_lt (real_of_num (0::nat)) ub) & |
|
12172 real_pow ub u = ua" |
12422 real_pow ub u = ua" |
12173 |
12423 |
12174 lemma DEF_root: "root = |
12424 lemma DEF_root: "root = |
12175 (%(u::nat) ua::hollight.real. |
12425 (%(u::nat) ua::hollight.real. |
12176 SOME ub::hollight.real. |
12426 SOME ub::hollight.real. |
12177 (real_lt (real_of_num (0::nat)) ua --> |
12427 (real_lt (real_of_num 0) ua --> real_lt (real_of_num 0) ub) & |
12178 real_lt (real_of_num (0::nat)) ub) & |
|
12179 real_pow ub u = ua)" |
12428 real_pow ub u = ua)" |
12180 by (import hollight DEF_root) |
12429 by (import hollight DEF_root) |
12181 |
12430 |
12182 constdefs |
12431 constdefs |
12183 sqrt :: "hollight.real => hollight.real" |
12432 sqrt :: "hollight.real => hollight.real" |
12184 "sqrt == |
12433 "sqrt == |
12185 %u::hollight.real. |
12434 %u::hollight.real. |
12186 SOME y::hollight.real. |
12435 SOME y::hollight.real. |
12187 real_le (real_of_num (0::nat)) y & |
12436 real_le (real_of_num 0) y & |
12188 real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = u" |
12437 real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = u" |
12189 |
12438 |
12190 lemma DEF_sqrt: "sqrt = |
12439 lemma DEF_sqrt: "sqrt = |
12191 (%u::hollight.real. |
12440 (%u::hollight.real. |
12192 SOME y::hollight.real. |
12441 SOME y::hollight.real. |
12193 real_le (real_of_num (0::nat)) y & |
12442 real_le (real_of_num 0) y & |
12194 real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = u)" |
12443 real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = u)" |
12195 by (import hollight DEF_sqrt) |
12444 by (import hollight DEF_sqrt) |
12196 |
12445 |
12197 lemma sqrt: "sqrt (x::hollight.real) = root (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) x" |
12446 lemma sqrt: "sqrt (x::hollight.real) = root (NUMERAL_BIT0 (NUMERAL_BIT1 0)) x" |
12198 by (import hollight sqrt) |
12447 by (import hollight sqrt) |
12199 |
12448 |
12200 lemma ROOT_LT_LEMMA: "ALL (n::nat) x::hollight.real. |
12449 lemma ROOT_LT_LEMMA: "ALL (n::nat) x::hollight.real. |
12201 real_lt (real_of_num (0::nat)) x --> |
12450 real_lt (real_of_num 0) x --> |
12202 real_pow (exp (real_div (ln x) (real_of_num (Suc n)))) (Suc n) = x" |
12451 real_pow (exp (real_div (ln x) (real_of_num (Suc n)))) (Suc n) = x" |
12203 by (import hollight ROOT_LT_LEMMA) |
12452 by (import hollight ROOT_LT_LEMMA) |
12204 |
12453 |
12205 lemma ROOT_LN: "ALL x::hollight.real. |
12454 lemma ROOT_LN: "ALL x::hollight.real. |
12206 real_lt (real_of_num (0::nat)) x --> |
12455 real_lt (real_of_num 0) x --> |
12207 (ALL n::nat. |
12456 (ALL n::nat. |
12208 root (Suc n) x = exp (real_div (ln x) (real_of_num (Suc n))))" |
12457 root (Suc n) x = exp (real_div (ln x) (real_of_num (Suc n))))" |
12209 by (import hollight ROOT_LN) |
12458 by (import hollight ROOT_LN) |
12210 |
12459 |
12211 lemma ROOT_0: "ALL n::nat. root (Suc n) (real_of_num (0::nat)) = real_of_num (0::nat)" |
12460 lemma ROOT_0: "ALL n::nat. root (Suc n) (real_of_num 0) = real_of_num 0" |
12212 by (import hollight ROOT_0) |
12461 by (import hollight ROOT_0) |
12213 |
12462 |
12214 lemma ROOT_1: "ALL n::nat. |
12463 lemma ROOT_1: "ALL n::nat. |
12215 root (Suc n) (real_of_num (NUMERAL_BIT1 (0::nat))) = |
12464 root (Suc n) (real_of_num (NUMERAL_BIT1 0)) = |
12216 real_of_num (NUMERAL_BIT1 (0::nat))" |
12465 real_of_num (NUMERAL_BIT1 0)" |
12217 by (import hollight ROOT_1) |
12466 by (import hollight ROOT_1) |
12218 |
12467 |
12219 lemma ROOT_POW_POS: "ALL (n::nat) x::hollight.real. |
12468 lemma ROOT_POW_POS: "ALL (n::nat) x::hollight.real. |
12220 real_le (real_of_num (0::nat)) x --> |
12469 real_le (real_of_num 0) x --> real_pow (root (Suc n) x) (Suc n) = x" |
12221 real_pow (root (Suc n) x) (Suc n) = x" |
|
12222 by (import hollight ROOT_POW_POS) |
12470 by (import hollight ROOT_POW_POS) |
12223 |
12471 |
12224 lemma POW_ROOT_POS: "ALL (n::nat) x::hollight.real. |
12472 lemma POW_ROOT_POS: "ALL (n::nat) x::hollight.real. |
12225 real_le (real_of_num (0::nat)) x --> |
12473 real_le (real_of_num 0) x --> root (Suc n) (real_pow x (Suc n)) = x" |
12226 root (Suc n) (real_pow x (Suc n)) = x" |
|
12227 by (import hollight POW_ROOT_POS) |
12474 by (import hollight POW_ROOT_POS) |
12228 |
12475 |
12229 lemma ROOT_POS_POSITIVE: "ALL (x::hollight.real) n::nat. |
12476 lemma ROOT_POS_POSITIVE: "ALL (x::hollight.real) n::nat. |
12230 real_le (real_of_num (0::nat)) x --> |
12477 real_le (real_of_num 0) x --> real_le (real_of_num 0) (root (Suc n) x)" |
12231 real_le (real_of_num (0::nat)) (root (Suc n) x)" |
|
12232 by (import hollight ROOT_POS_POSITIVE) |
12478 by (import hollight ROOT_POS_POSITIVE) |
12233 |
12479 |
12234 lemma ROOT_POS_UNIQ: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
12480 lemma ROOT_POS_UNIQ: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
12235 real_le (real_of_num (0::nat)) x & |
12481 real_le (real_of_num 0) x & |
12236 real_le (real_of_num (0::nat)) y & real_pow y (Suc n) = x --> |
12482 real_le (real_of_num 0) y & real_pow y (Suc n) = x --> |
12237 root (Suc n) x = y" |
12483 root (Suc n) x = y" |
12238 by (import hollight ROOT_POS_UNIQ) |
12484 by (import hollight ROOT_POS_UNIQ) |
12239 |
12485 |
12240 lemma ROOT_MUL: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
12486 lemma ROOT_MUL: "ALL (n::nat) (x::hollight.real) y::hollight.real. |
12241 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) y --> |
12487 real_le (real_of_num 0) x & real_le (real_of_num 0) y --> |
12242 root (Suc n) (real_mul x y) = real_mul (root (Suc n) x) (root (Suc n) y)" |
12488 root (Suc n) (real_mul x y) = real_mul (root (Suc n) x) (root (Suc n) y)" |
12243 by (import hollight ROOT_MUL) |
12489 by (import hollight ROOT_MUL) |
12244 |
12490 |
12245 lemma ROOT_INV: "ALL (n::nat) x::hollight.real. |
12491 lemma ROOT_INV: "ALL (n::nat) x::hollight.real. |
12246 real_le (real_of_num (0::nat)) x --> |
12492 real_le (real_of_num 0) x --> |
12247 root (Suc n) (real_inv x) = real_inv (root (Suc n) x)" |
12493 root (Suc n) (real_inv x) = real_inv (root (Suc n) x)" |
12248 by (import hollight ROOT_INV) |
12494 by (import hollight ROOT_INV) |
12249 |
12495 |
12250 lemma ROOT_DIV: "ALL (x::nat) (xa::hollight.real) xb::hollight.real. |
12496 lemma ROOT_DIV: "ALL (x::nat) (xa::hollight.real) xb::hollight.real. |
12251 real_le (real_of_num (0::nat)) xa & real_le (real_of_num (0::nat)) xb --> |
12497 real_le (real_of_num 0) xa & real_le (real_of_num 0) xb --> |
12252 root (Suc x) (real_div xa xb) = |
12498 root (Suc x) (real_div xa xb) = |
12253 real_div (root (Suc x) xa) (root (Suc x) xb)" |
12499 real_div (root (Suc x) xa) (root (Suc x) xb)" |
12254 by (import hollight ROOT_DIV) |
12500 by (import hollight ROOT_DIV) |
12255 |
12501 |
12256 lemma ROOT_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
12502 lemma ROOT_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
12257 real_le (real_of_num (0::nat)) x & real_lt x y --> |
12503 real_le (real_of_num 0) x & real_lt x y --> |
12258 real_lt (root (Suc (n::nat)) x) (root (Suc n) y)" |
12504 real_lt (root (Suc (n::nat)) x) (root (Suc n) y)" |
12259 by (import hollight ROOT_MONO_LT) |
12505 by (import hollight ROOT_MONO_LT) |
12260 |
12506 |
12261 lemma ROOT_MONO_LE: "ALL (x::hollight.real) y::hollight.real. |
12507 lemma ROOT_MONO_LE: "ALL (x::hollight.real) y::hollight.real. |
12262 real_le (real_of_num (0::nat)) x & real_le x y --> |
12508 real_le (real_of_num 0) x & real_le x y --> |
12263 real_le (root (Suc (n::nat)) x) (root (Suc n) y)" |
12509 real_le (root (Suc (n::nat)) x) (root (Suc n) y)" |
12264 by (import hollight ROOT_MONO_LE) |
12510 by (import hollight ROOT_MONO_LE) |
12265 |
12511 |
12266 lemma ROOT_MONO_LT_EQ: "ALL (x::hollight.real) y::hollight.real. |
12512 lemma ROOT_MONO_LT_EQ: "ALL (x::hollight.real) y::hollight.real. |
12267 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) y --> |
12513 real_le (real_of_num 0) x & real_le (real_of_num 0) y --> |
12268 real_lt (root (Suc (n::nat)) x) (root (Suc n) y) = real_lt x y" |
12514 real_lt (root (Suc (n::nat)) x) (root (Suc n) y) = real_lt x y" |
12269 by (import hollight ROOT_MONO_LT_EQ) |
12515 by (import hollight ROOT_MONO_LT_EQ) |
12270 |
12516 |
12271 lemma ROOT_MONO_LE_EQ: "ALL (x::hollight.real) y::hollight.real. |
12517 lemma ROOT_MONO_LE_EQ: "ALL (x::hollight.real) y::hollight.real. |
12272 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) y --> |
12518 real_le (real_of_num 0) x & real_le (real_of_num 0) y --> |
12273 real_le (root (Suc (n::nat)) x) (root (Suc n) y) = real_le x y" |
12519 real_le (root (Suc (n::nat)) x) (root (Suc n) y) = real_le x y" |
12274 by (import hollight ROOT_MONO_LE_EQ) |
12520 by (import hollight ROOT_MONO_LE_EQ) |
12275 |
12521 |
12276 lemma ROOT_INJ: "ALL (x::hollight.real) xa::hollight.real. |
12522 lemma ROOT_INJ: "ALL (x::hollight.real) xa::hollight.real. |
12277 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
12523 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
12278 (root (Suc (n::nat)) x = root (Suc n) xa) = (x = xa)" |
12524 (root (Suc (n::nat)) x = root (Suc n) xa) = (x = xa)" |
12279 by (import hollight ROOT_INJ) |
12525 by (import hollight ROOT_INJ) |
12280 |
12526 |
12281 lemma SQRT_0: "sqrt (real_of_num (0::nat)) = real_of_num (0::nat)" |
12527 lemma SQRT_0: "sqrt (real_of_num 0) = real_of_num 0" |
12282 by (import hollight SQRT_0) |
12528 by (import hollight SQRT_0) |
12283 |
12529 |
12284 lemma SQRT_1: "sqrt (real_of_num (NUMERAL_BIT1 (0::nat))) = |
12530 lemma SQRT_1: "sqrt (real_of_num (NUMERAL_BIT1 0)) = real_of_num (NUMERAL_BIT1 0)" |
12285 real_of_num (NUMERAL_BIT1 (0::nat))" |
|
12286 by (import hollight SQRT_1) |
12531 by (import hollight SQRT_1) |
12287 |
12532 |
12288 lemma SQRT_POS_LT: "ALL x::hollight.real. |
12533 lemma SQRT_POS_LT: "ALL x::hollight.real. |
12289 real_lt (real_of_num (0::nat)) x --> |
12534 real_lt (real_of_num 0) x --> real_lt (real_of_num 0) (sqrt x)" |
12290 real_lt (real_of_num (0::nat)) (sqrt x)" |
|
12291 by (import hollight SQRT_POS_LT) |
12535 by (import hollight SQRT_POS_LT) |
12292 |
12536 |
12293 lemma SQRT_POS_LE: "ALL x::hollight.real. |
12537 lemma SQRT_POS_LE: "ALL x::hollight.real. |
12294 real_le (real_of_num (0::nat)) x --> |
12538 real_le (real_of_num 0) x --> real_le (real_of_num 0) (sqrt x)" |
12295 real_le (real_of_num (0::nat)) (sqrt x)" |
|
12296 by (import hollight SQRT_POS_LE) |
12539 by (import hollight SQRT_POS_LE) |
12297 |
12540 |
12298 lemma SQRT_POW2: "ALL x::hollight.real. |
12541 lemma SQRT_POW2: "ALL x::hollight.real. |
12299 (real_pow (sqrt x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = x) = |
12542 (real_pow (sqrt x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = x) = |
12300 real_le (real_of_num (0::nat)) x" |
12543 real_le (real_of_num 0) x" |
12301 by (import hollight SQRT_POW2) |
12544 by (import hollight SQRT_POW2) |
12302 |
12545 |
12303 lemma SQRT_POW_2: "ALL x::hollight.real. |
12546 lemma SQRT_POW_2: "ALL x::hollight.real. |
12304 real_le (real_of_num (0::nat)) x --> |
12547 real_le (real_of_num 0) x --> |
12305 real_pow (sqrt x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = x" |
12548 real_pow (sqrt x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = x" |
12306 by (import hollight SQRT_POW_2) |
12549 by (import hollight SQRT_POW_2) |
12307 |
12550 |
12308 lemma POW_2_SQRT: "real_le (real_of_num (0::nat)) (x::hollight.real) --> |
12551 lemma POW_2_SQRT: "real_le (real_of_num 0) (x::hollight.real) --> |
12309 sqrt (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = x" |
12552 sqrt (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = x" |
12310 by (import hollight POW_2_SQRT) |
12553 by (import hollight POW_2_SQRT) |
12311 |
12554 |
12312 lemma SQRT_POS_UNIQ: "ALL (x::hollight.real) xa::hollight.real. |
12555 lemma SQRT_POS_UNIQ: "ALL (x::hollight.real) xa::hollight.real. |
12313 real_le (real_of_num (0::nat)) x & |
12556 real_le (real_of_num 0) x & |
12314 real_le (real_of_num (0::nat)) xa & |
12557 real_le (real_of_num 0) xa & |
12315 real_pow xa (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))) = x --> |
12558 real_pow xa (NUMERAL_BIT0 (NUMERAL_BIT1 0)) = x --> |
12316 sqrt x = xa" |
12559 sqrt x = xa" |
12317 by (import hollight SQRT_POS_UNIQ) |
12560 by (import hollight SQRT_POS_UNIQ) |
12318 |
12561 |
12319 lemma SQRT_MUL: "ALL (x::hollight.real) xa::hollight.real. |
12562 lemma SQRT_MUL: "ALL (x::hollight.real) xa::hollight.real. |
12320 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
12563 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
12321 sqrt (real_mul x xa) = real_mul (sqrt x) (sqrt xa)" |
12564 sqrt (real_mul x xa) = real_mul (sqrt x) (sqrt xa)" |
12322 by (import hollight SQRT_MUL) |
12565 by (import hollight SQRT_MUL) |
12323 |
12566 |
12324 lemma SQRT_INV: "ALL x::hollight.real. |
12567 lemma SQRT_INV: "ALL x::hollight.real. |
12325 real_le (real_of_num (0::nat)) x --> |
12568 real_le (real_of_num 0) x --> sqrt (real_inv x) = real_inv (sqrt x)" |
12326 sqrt (real_inv x) = real_inv (sqrt x)" |
|
12327 by (import hollight SQRT_INV) |
12569 by (import hollight SQRT_INV) |
12328 |
12570 |
12329 lemma SQRT_DIV: "ALL (x::hollight.real) xa::hollight.real. |
12571 lemma SQRT_DIV: "ALL (x::hollight.real) xa::hollight.real. |
12330 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
12572 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
12331 sqrt (real_div x xa) = real_div (sqrt x) (sqrt xa)" |
12573 sqrt (real_div x xa) = real_div (sqrt x) (sqrt xa)" |
12332 by (import hollight SQRT_DIV) |
12574 by (import hollight SQRT_DIV) |
12333 |
12575 |
12334 lemma SQRT_MONO_LT: "ALL (x::hollight.real) xa::hollight.real. |
12576 lemma SQRT_MONO_LT: "ALL (x::hollight.real) xa::hollight.real. |
12335 real_le (real_of_num (0::nat)) x & real_lt x xa --> |
12577 real_le (real_of_num 0) x & real_lt x xa --> real_lt (sqrt x) (sqrt xa)" |
12336 real_lt (sqrt x) (sqrt xa)" |
|
12337 by (import hollight SQRT_MONO_LT) |
12578 by (import hollight SQRT_MONO_LT) |
12338 |
12579 |
12339 lemma SQRT_MONO_LE: "ALL (x::hollight.real) xa::hollight.real. |
12580 lemma SQRT_MONO_LE: "ALL (x::hollight.real) xa::hollight.real. |
12340 real_le (real_of_num (0::nat)) x & real_le x xa --> |
12581 real_le (real_of_num 0) x & real_le x xa --> real_le (sqrt x) (sqrt xa)" |
12341 real_le (sqrt x) (sqrt xa)" |
|
12342 by (import hollight SQRT_MONO_LE) |
12582 by (import hollight SQRT_MONO_LE) |
12343 |
12583 |
12344 lemma SQRT_MONO_LT_EQ: "ALL (x::hollight.real) xa::hollight.real. |
12584 lemma SQRT_MONO_LT_EQ: "ALL (x::hollight.real) xa::hollight.real. |
12345 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
12585 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
12346 real_lt (sqrt x) (sqrt xa) = real_lt x xa" |
12586 real_lt (sqrt x) (sqrt xa) = real_lt x xa" |
12347 by (import hollight SQRT_MONO_LT_EQ) |
12587 by (import hollight SQRT_MONO_LT_EQ) |
12348 |
12588 |
12349 lemma SQRT_MONO_LE_EQ: "ALL (x::hollight.real) xa::hollight.real. |
12589 lemma SQRT_MONO_LE_EQ: "ALL (x::hollight.real) xa::hollight.real. |
12350 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
12590 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
12351 real_le (sqrt x) (sqrt xa) = real_le x xa" |
12591 real_le (sqrt x) (sqrt xa) = real_le x xa" |
12352 by (import hollight SQRT_MONO_LE_EQ) |
12592 by (import hollight SQRT_MONO_LE_EQ) |
12353 |
12593 |
12354 lemma SQRT_INJ: "ALL (x::hollight.real) xa::hollight.real. |
12594 lemma SQRT_INJ: "ALL (x::hollight.real) xa::hollight.real. |
12355 real_le (real_of_num (0::nat)) x & real_le (real_of_num (0::nat)) xa --> |
12595 real_le (real_of_num 0) x & real_le (real_of_num 0) xa --> |
12356 (sqrt x = sqrt xa) = (x = xa)" |
12596 (sqrt x = sqrt xa) = (x = xa)" |
12357 by (import hollight SQRT_INJ) |
12597 by (import hollight SQRT_INJ) |
12358 |
12598 |
12359 lemma SQRT_EVEN_POW2: "ALL n::nat. |
12599 lemma SQRT_EVEN_POW2: "ALL n::nat. |
12360 EVEN n --> |
12600 EVEN n --> |
12361 sqrt (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) n) = |
12601 sqrt (real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) n) = |
12362 real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12602 real_pow (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12363 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
12603 (DIV n (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
12364 by (import hollight SQRT_EVEN_POW2) |
12604 by (import hollight SQRT_EVEN_POW2) |
12365 |
12605 |
12366 lemma REAL_DIV_SQRT: "ALL x::hollight.real. |
12606 lemma REAL_DIV_SQRT: "ALL x::hollight.real. |
12367 real_le (real_of_num (0::nat)) x --> real_div x (sqrt x) = sqrt x" |
12607 real_le (real_of_num 0) x --> real_div x (sqrt x) = sqrt x" |
12368 by (import hollight REAL_DIV_SQRT) |
12608 by (import hollight REAL_DIV_SQRT) |
12369 |
12609 |
12370 lemma POW_2_SQRT_ABS: "ALL x::hollight.real. |
12610 lemma POW_2_SQRT_ABS: "ALL x::hollight.real. |
12371 sqrt (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = real_abs x" |
12611 sqrt (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = real_abs x" |
12372 by (import hollight POW_2_SQRT_ABS) |
12612 by (import hollight POW_2_SQRT_ABS) |
12373 |
12613 |
12374 lemma SQRT_EQ_0: "ALL x::hollight.real. |
12614 lemma SQRT_EQ_0: "ALL x::hollight.real. |
12375 real_le (real_of_num (0::nat)) x --> |
12615 real_le (real_of_num 0) x --> |
12376 (sqrt x = real_of_num (0::nat)) = (x = real_of_num (0::nat))" |
12616 (sqrt x = real_of_num 0) = (x = real_of_num 0)" |
12377 by (import hollight SQRT_EQ_0) |
12617 by (import hollight SQRT_EQ_0) |
12378 |
12618 |
12379 lemma REAL_LE_LSQRT: "ALL (x::hollight.real) y::hollight.real. |
12619 lemma REAL_LE_LSQRT: "ALL (x::hollight.real) y::hollight.real. |
12380 real_le (real_of_num (0::nat)) x & |
12620 real_le (real_of_num 0) x & |
12381 real_le (real_of_num (0::nat)) y & |
12621 real_le (real_of_num 0) y & |
12382 real_le x (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) --> |
12622 real_le x (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0))) --> |
12383 real_le (sqrt x) y" |
12623 real_le (sqrt x) y" |
12384 by (import hollight REAL_LE_LSQRT) |
12624 by (import hollight REAL_LE_LSQRT) |
12385 |
12625 |
12386 lemma REAL_LE_POW_2: "ALL x::hollight.real. |
12626 lemma REAL_LE_POW_2: "ALL x::hollight.real. |
12387 real_le (real_of_num (0::nat)) |
12627 real_le (real_of_num 0) (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
12388 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
|
12389 by (import hollight REAL_LE_POW_2) |
12628 by (import hollight REAL_LE_POW_2) |
12390 |
12629 |
12391 lemma REAL_LE_RSQRT: "ALL (x::hollight.real) y::hollight.real. |
12630 lemma REAL_LE_RSQRT: "ALL (x::hollight.real) y::hollight.real. |
12392 real_le (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) y --> |
12631 real_le (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) y --> |
12393 real_le x (sqrt y)" |
12632 real_le x (sqrt y)" |
12394 by (import hollight REAL_LE_RSQRT) |
12633 by (import hollight REAL_LE_RSQRT) |
12395 |
12634 |
12396 lemma SIN_0: "sin (real_of_num (0::nat)) = real_of_num (0::nat)" |
12635 lemma SIN_0: "sin (real_of_num 0) = real_of_num 0" |
12397 by (import hollight SIN_0) |
12636 by (import hollight SIN_0) |
12398 |
12637 |
12399 lemma COS_0: "cos (real_of_num (0::nat)) = real_of_num (NUMERAL_BIT1 (0::nat))" |
12638 lemma COS_0: "cos (real_of_num 0) = real_of_num (NUMERAL_BIT1 0)" |
12400 by (import hollight COS_0) |
12639 by (import hollight COS_0) |
12401 |
12640 |
12402 lemma SIN_CIRCLE: "ALL x::hollight.real. |
12641 lemma SIN_CIRCLE: "ALL x::hollight.real. |
12403 real_add (real_pow (sin x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12642 real_add (real_pow (sin x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12404 (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
12643 (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
12405 real_of_num (NUMERAL_BIT1 (0::nat))" |
12644 real_of_num (NUMERAL_BIT1 0)" |
12406 by (import hollight SIN_CIRCLE) |
12645 by (import hollight SIN_CIRCLE) |
12407 |
12646 |
12408 lemma SIN_BOUND: "ALL x::hollight.real. |
12647 lemma SIN_BOUND: "ALL x::hollight.real. |
12409 real_le (real_abs (sin x)) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
12648 real_le (real_abs (sin x)) (real_of_num (NUMERAL_BIT1 0))" |
12410 by (import hollight SIN_BOUND) |
12649 by (import hollight SIN_BOUND) |
12411 |
12650 |
12412 lemma SIN_BOUNDS: "ALL x::hollight.real. |
12651 lemma SIN_BOUNDS: "ALL x::hollight.real. |
12413 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) (sin x) & |
12652 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) (sin x) & |
12414 real_le (sin x) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
12653 real_le (sin x) (real_of_num (NUMERAL_BIT1 0))" |
12415 by (import hollight SIN_BOUNDS) |
12654 by (import hollight SIN_BOUNDS) |
12416 |
12655 |
12417 lemma COS_BOUND: "ALL x::hollight.real. |
12656 lemma COS_BOUND: "ALL x::hollight.real. |
12418 real_le (real_abs (cos x)) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
12657 real_le (real_abs (cos x)) (real_of_num (NUMERAL_BIT1 0))" |
12419 by (import hollight COS_BOUND) |
12658 by (import hollight COS_BOUND) |
12420 |
12659 |
12421 lemma COS_BOUNDS: "ALL x::hollight.real. |
12660 lemma COS_BOUNDS: "ALL x::hollight.real. |
12422 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) (cos x) & |
12661 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) (cos x) & |
12423 real_le (cos x) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
12662 real_le (cos x) (real_of_num (NUMERAL_BIT1 0))" |
12424 by (import hollight COS_BOUNDS) |
12663 by (import hollight COS_BOUNDS) |
12425 |
12664 |
12426 lemma SIN_COS_ADD: "ALL (x::hollight.real) y::hollight.real. |
12665 lemma SIN_COS_ADD: "ALL (x::hollight.real) y::hollight.real. |
12427 real_add |
12666 real_add |
12428 (real_pow |
12667 (real_pow |
12429 (real_sub (sin (real_add x y)) |
12668 (real_sub (sin (real_add x y)) |
12430 (real_add (real_mul (sin x) (cos y)) (real_mul (cos x) (sin y)))) |
12669 (real_add (real_mul (sin x) (cos y)) (real_mul (cos x) (sin y)))) |
12431 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12670 (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12432 (real_pow |
12671 (real_pow |
12433 (real_sub (cos (real_add x y)) |
12672 (real_sub (cos (real_add x y)) |
12434 (real_sub (real_mul (cos x) (cos y)) (real_mul (sin x) (sin y)))) |
12673 (real_sub (real_mul (cos x) (cos y)) (real_mul (sin x) (sin y)))) |
12435 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
12674 (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
12436 real_of_num (0::nat)" |
12675 real_of_num 0" |
12437 by (import hollight SIN_COS_ADD) |
12676 by (import hollight SIN_COS_ADD) |
12438 |
12677 |
12439 lemma SIN_COS_NEG: "ALL x::hollight.real. |
12678 lemma SIN_COS_NEG: "ALL x::hollight.real. |
12440 real_add |
12679 real_add |
12441 (real_pow (real_add (sin (real_neg x)) (sin x)) |
12680 (real_pow (real_add (sin (real_neg x)) (sin x)) |
12442 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12681 (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12443 (real_pow (real_sub (cos (real_neg x)) (cos x)) |
12682 (real_pow (real_sub (cos (real_neg x)) (cos x)) |
12444 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
12683 (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
12445 real_of_num (0::nat)" |
12684 real_of_num 0" |
12446 by (import hollight SIN_COS_NEG) |
12685 by (import hollight SIN_COS_NEG) |
12447 |
12686 |
12448 lemma SIN_ADD: "ALL (x::hollight.real) y::hollight.real. |
12687 lemma SIN_ADD: "ALL (x::hollight.real) y::hollight.real. |
12449 sin (real_add x y) = |
12688 sin (real_add x y) = |
12450 real_add (real_mul (sin x) (cos y)) (real_mul (cos x) (sin y))" |
12689 real_add (real_mul (sin x) (cos y)) (real_mul (cos x) (sin y))" |
12460 |
12699 |
12461 lemma COS_NEG: "ALL x::hollight.real. cos (real_neg x) = cos x" |
12700 lemma COS_NEG: "ALL x::hollight.real. cos (real_neg x) = cos x" |
12462 by (import hollight COS_NEG) |
12701 by (import hollight COS_NEG) |
12463 |
12702 |
12464 lemma SIN_DOUBLE: "ALL x::hollight.real. |
12703 lemma SIN_DOUBLE: "ALL x::hollight.real. |
12465 sin (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x) = |
12704 sin (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x) = |
12466 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12705 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12467 (real_mul (sin x) (cos x))" |
12706 (real_mul (sin x) (cos x))" |
12468 by (import hollight SIN_DOUBLE) |
12707 by (import hollight SIN_DOUBLE) |
12469 |
12708 |
12470 lemma COS_DOUBLE: "ALL x::hollight.real. |
12709 lemma COS_DOUBLE: "ALL x::hollight.real. |
12471 cos (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x) = |
12710 cos (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x) = |
12472 real_sub (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12711 real_sub (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12473 (real_pow (sin x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
12712 (real_pow (sin x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
12474 by (import hollight COS_DOUBLE) |
12713 by (import hollight COS_DOUBLE) |
12475 |
12714 |
12476 lemma COS_ABS: "ALL x::hollight.real. cos (real_abs x) = cos x" |
12715 lemma COS_ABS: "ALL x::hollight.real. cos (real_abs x) = cos x" |
12477 by (import hollight COS_ABS) |
12716 by (import hollight COS_ABS) |
12478 |
12717 |
12479 lemma SIN_PAIRED: "ALL x::hollight.real. |
12718 lemma SIN_PAIRED: "ALL x::hollight.real. |
12480 sums |
12719 sums |
12481 (%n::nat. |
12720 (%n::nat. |
12482 real_mul |
12721 real_mul |
12483 (real_div |
12722 (real_div (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) n) |
12484 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) n) |
|
12485 (real_of_num |
12723 (real_of_num |
12486 (FACT |
12724 (FACT (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n + NUMERAL_BIT1 0)))) |
12487 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n + |
12725 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n + NUMERAL_BIT1 0))) |
12488 NUMERAL_BIT1 (0::nat))))) |
|
12489 (real_pow x |
|
12490 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n + |
|
12491 NUMERAL_BIT1 (0::nat)))) |
|
12492 (sin x)" |
12726 (sin x)" |
12493 by (import hollight SIN_PAIRED) |
12727 by (import hollight SIN_PAIRED) |
12494 |
12728 |
12495 lemma SIN_POS: "ALL x::hollight.real. |
12729 lemma SIN_POS: "ALL x::hollight.real. |
12496 real_lt (real_of_num (0::nat)) x & |
12730 real_lt (real_of_num 0) x & |
12497 real_lt x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) --> |
12731 real_lt x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) --> |
12498 real_lt (real_of_num (0::nat)) (sin x)" |
12732 real_lt (real_of_num 0) (sin x)" |
12499 by (import hollight SIN_POS) |
12733 by (import hollight SIN_POS) |
12500 |
12734 |
12501 lemma COS_PAIRED: "ALL x::hollight.real. |
12735 lemma COS_PAIRED: "ALL x::hollight.real. |
12502 sums |
12736 sums |
12503 (%n::nat. |
12737 (%n::nat. |
12504 real_mul |
12738 real_mul |
12505 (real_div |
12739 (real_div (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) n) |
12506 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) n) |
12740 (real_of_num (FACT (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n)))) |
12507 (real_of_num (FACT (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n)))) |
12741 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0) * n))) |
12508 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)) * n))) |
|
12509 (cos x)" |
12742 (cos x)" |
12510 by (import hollight COS_PAIRED) |
12743 by (import hollight COS_PAIRED) |
12511 |
12744 |
12512 lemma COS_2: "real_lt (cos (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12745 lemma COS_2: "real_lt (cos (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) (real_of_num 0)" |
12513 (real_of_num (0::nat))" |
|
12514 by (import hollight COS_2) |
12746 by (import hollight COS_2) |
12515 |
12747 |
12516 lemma COS_ISZERO: "EX! x::hollight.real. |
12748 lemma COS_ISZERO: "EX! x::hollight.real. |
12517 real_le (real_of_num (0::nat)) x & |
12749 real_le (real_of_num 0) x & |
12518 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) & |
12750 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) & |
12519 cos x = real_of_num (0::nat)" |
12751 cos x = real_of_num 0" |
12520 by (import hollight COS_ISZERO) |
12752 by (import hollight COS_ISZERO) |
12521 |
12753 |
12522 constdefs |
12754 constdefs |
12523 pi :: "hollight.real" |
12755 pi :: "hollight.real" |
12524 "pi == |
12756 "pi == |
12525 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12757 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12526 (SOME x::hollight.real. |
12758 (SOME x::hollight.real. |
12527 real_le (real_of_num (0::nat)) x & |
12759 real_le (real_of_num 0) x & |
12528 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) & |
12760 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) & |
12529 cos x = real_of_num (0::nat))" |
12761 cos x = real_of_num 0)" |
12530 |
12762 |
12531 lemma DEF_pi: "pi = |
12763 lemma DEF_pi: "pi = |
12532 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12764 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12533 (SOME x::hollight.real. |
12765 (SOME x::hollight.real. |
12534 real_le (real_of_num (0::nat)) x & |
12766 real_le (real_of_num 0) x & |
12535 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) & |
12767 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) & |
12536 cos x = real_of_num (0::nat))" |
12768 cos x = real_of_num 0)" |
12537 by (import hollight DEF_pi) |
12769 by (import hollight DEF_pi) |
12538 |
12770 |
12539 lemma PI2: "real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
12771 lemma PI2: "real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
12540 (SOME x::hollight.real. |
12772 (SOME x::hollight.real. |
12541 real_le (real_of_num (0::nat)) x & |
12773 real_le (real_of_num 0) x & |
12542 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) & |
12774 real_le x (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) & |
12543 cos x = real_of_num (0::nat))" |
12775 cos x = real_of_num 0)" |
12544 by (import hollight PI2) |
12776 by (import hollight PI2) |
12545 |
12777 |
12546 lemma COS_PI2: "cos (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) = |
12778 lemma COS_PI2: "cos (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) = |
12547 real_of_num (0::nat)" |
12779 real_of_num 0" |
12548 by (import hollight COS_PI2) |
12780 by (import hollight COS_PI2) |
12549 |
12781 |
12550 lemma PI2_BOUNDS: "real_lt (real_of_num (0::nat)) |
12782 lemma PI2_BOUNDS: "real_lt (real_of_num 0) |
12551 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
12783 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12552 real_lt (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
12784 real_lt (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
12553 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))" |
12785 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))" |
12554 by (import hollight PI2_BOUNDS) |
12786 by (import hollight PI2_BOUNDS) |
12555 |
12787 |
12556 lemma PI_POS: "real_lt (real_of_num (0::nat)) pi" |
12788 lemma PI_POS: "real_lt (real_of_num 0) pi" |
12557 by (import hollight PI_POS) |
12789 by (import hollight PI_POS) |
12558 |
12790 |
12559 lemma SIN_PI2: "sin (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) = |
12791 lemma SIN_PI2: "sin (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) = |
12560 real_of_num (NUMERAL_BIT1 (0::nat))" |
12792 real_of_num (NUMERAL_BIT1 0)" |
12561 by (import hollight SIN_PI2) |
12793 by (import hollight SIN_PI2) |
12562 |
12794 |
12563 lemma COS_PI: "cos pi = real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))" |
12795 lemma COS_PI: "cos pi = real_neg (real_of_num (NUMERAL_BIT1 0))" |
12564 by (import hollight COS_PI) |
12796 by (import hollight COS_PI) |
12565 |
12797 |
12566 lemma SIN_PI: "sin pi = real_of_num (0::nat)" |
12798 lemma SIN_PI: "sin pi = real_of_num 0" |
12567 by (import hollight SIN_PI) |
12799 by (import hollight SIN_PI) |
12568 |
12800 |
12569 lemma SIN_COS: "ALL x::hollight.real. |
12801 lemma SIN_COS: "ALL x::hollight.real. |
12570 sin x = |
12802 sin x = |
12571 cos (real_sub |
12803 cos (real_sub (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
12572 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
12573 x)" |
12804 x)" |
12574 by (import hollight SIN_COS) |
12805 by (import hollight SIN_COS) |
12575 |
12806 |
12576 lemma COS_SIN: "ALL x::hollight.real. |
12807 lemma COS_SIN: "ALL x::hollight.real. |
12577 cos x = |
12808 cos x = |
12578 sin (real_sub |
12809 sin (real_sub (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
12579 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
12580 x)" |
12810 x)" |
12581 by (import hollight COS_SIN) |
12811 by (import hollight COS_SIN) |
12582 |
12812 |
12583 lemma SIN_PERIODIC_PI: "ALL x::hollight.real. sin (real_add x pi) = real_neg (sin x)" |
12813 lemma SIN_PERIODIC_PI: "ALL x::hollight.real. sin (real_add x pi) = real_neg (sin x)" |
12584 by (import hollight SIN_PERIODIC_PI) |
12814 by (import hollight SIN_PERIODIC_PI) |
12586 lemma COS_PERIODIC_PI: "ALL x::hollight.real. cos (real_add x pi) = real_neg (cos x)" |
12816 lemma COS_PERIODIC_PI: "ALL x::hollight.real. cos (real_add x pi) = real_neg (cos x)" |
12587 by (import hollight COS_PERIODIC_PI) |
12817 by (import hollight COS_PERIODIC_PI) |
12588 |
12818 |
12589 lemma SIN_PERIODIC: "ALL x::hollight.real. |
12819 lemma SIN_PERIODIC: "ALL x::hollight.real. |
12590 sin (real_add x |
12820 sin (real_add x |
12591 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12821 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) pi)) = |
12592 pi)) = |
|
12593 sin x" |
12822 sin x" |
12594 by (import hollight SIN_PERIODIC) |
12823 by (import hollight SIN_PERIODIC) |
12595 |
12824 |
12596 lemma COS_PERIODIC: "ALL x::hollight.real. |
12825 lemma COS_PERIODIC: "ALL x::hollight.real. |
12597 cos (real_add x |
12826 cos (real_add x |
12598 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12827 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) pi)) = |
12599 pi)) = |
|
12600 cos x" |
12828 cos x" |
12601 by (import hollight COS_PERIODIC) |
12829 by (import hollight COS_PERIODIC) |
12602 |
12830 |
12603 lemma COS_NPI: "ALL n::nat. |
12831 lemma COS_NPI: "ALL n::nat. |
12604 cos (real_mul (real_of_num n) pi) = |
12832 cos (real_mul (real_of_num n) pi) = |
12605 real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) n" |
12833 real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) n" |
12606 by (import hollight COS_NPI) |
12834 by (import hollight COS_NPI) |
12607 |
12835 |
12608 lemma SIN_NPI: "ALL n::nat. sin (real_mul (real_of_num n) pi) = real_of_num (0::nat)" |
12836 lemma SIN_NPI: "ALL n::nat. sin (real_mul (real_of_num n) pi) = real_of_num 0" |
12609 by (import hollight SIN_NPI) |
12837 by (import hollight SIN_NPI) |
12610 |
12838 |
12611 lemma SIN_POS_PI2: "ALL x::hollight.real. |
12839 lemma SIN_POS_PI2: "ALL x::hollight.real. |
12612 real_lt (real_of_num (0::nat)) x & |
12840 real_lt (real_of_num 0) x & |
12613 real_lt x |
12841 real_lt x (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12614 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
12842 real_lt (real_of_num 0) (sin x)" |
12615 real_lt (real_of_num (0::nat)) (sin x)" |
|
12616 by (import hollight SIN_POS_PI2) |
12843 by (import hollight SIN_POS_PI2) |
12617 |
12844 |
12618 lemma COS_POS_PI2: "ALL x::hollight.real. |
12845 lemma COS_POS_PI2: "ALL x::hollight.real. |
12619 real_lt (real_of_num (0::nat)) x & |
12846 real_lt (real_of_num 0) x & |
12620 real_lt x |
12847 real_lt x (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12621 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
12848 real_lt (real_of_num 0) (cos x)" |
12622 real_lt (real_of_num (0::nat)) (cos x)" |
|
12623 by (import hollight COS_POS_PI2) |
12849 by (import hollight COS_POS_PI2) |
12624 |
12850 |
12625 lemma COS_POS_PI: "ALL x::hollight.real. |
12851 lemma COS_POS_PI: "ALL x::hollight.real. |
12626 real_lt |
12852 real_lt |
12627 (real_neg |
12853 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12628 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12629 x & |
12854 x & |
12630 real_lt x |
12855 real_lt x (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12631 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
12856 real_lt (real_of_num 0) (cos x)" |
12632 real_lt (real_of_num (0::nat)) (cos x)" |
|
12633 by (import hollight COS_POS_PI) |
12857 by (import hollight COS_POS_PI) |
12634 |
12858 |
12635 lemma SIN_POS_PI: "ALL x::hollight.real. |
12859 lemma SIN_POS_PI: "ALL x::hollight.real. |
12636 real_lt (real_of_num (0::nat)) x & real_lt x pi --> |
12860 real_lt (real_of_num 0) x & real_lt x pi --> |
12637 real_lt (real_of_num (0::nat)) (sin x)" |
12861 real_lt (real_of_num 0) (sin x)" |
12638 by (import hollight SIN_POS_PI) |
12862 by (import hollight SIN_POS_PI) |
12639 |
12863 |
12640 lemma SIN_POS_PI_LE: "ALL x::hollight.real. |
12864 lemma SIN_POS_PI_LE: "ALL x::hollight.real. |
12641 real_le (real_of_num (0::nat)) x & real_le x pi --> |
12865 real_le (real_of_num 0) x & real_le x pi --> |
12642 real_le (real_of_num (0::nat)) (sin x)" |
12866 real_le (real_of_num 0) (sin x)" |
12643 by (import hollight SIN_POS_PI_LE) |
12867 by (import hollight SIN_POS_PI_LE) |
12644 |
12868 |
12645 lemma COS_TOTAL: "ALL y::hollight.real. |
12869 lemma COS_TOTAL: "ALL y::hollight.real. |
12646 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
12870 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12647 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
12871 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
12648 (EX! x::hollight.real. |
12872 (EX! x::hollight.real. |
12649 real_le (real_of_num (0::nat)) x & real_le x pi & cos x = y)" |
12873 real_le (real_of_num 0) x & real_le x pi & cos x = y)" |
12650 by (import hollight COS_TOTAL) |
12874 by (import hollight COS_TOTAL) |
12651 |
12875 |
12652 lemma SIN_TOTAL: "ALL y::hollight.real. |
12876 lemma SIN_TOTAL: "ALL y::hollight.real. |
12653 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
12877 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12654 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
12878 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
12655 (EX! x::hollight.real. |
12879 (EX! x::hollight.real. |
12656 real_le |
12880 real_le |
12657 (real_neg |
12881 (real_neg |
12658 (real_div pi |
12882 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12659 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12660 x & |
12883 x & |
12661 real_le x |
12884 real_le x |
12662 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
12885 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12663 sin x = y)" |
12886 sin x = y)" |
12664 by (import hollight SIN_TOTAL) |
12887 by (import hollight SIN_TOTAL) |
12665 |
12888 |
12666 lemma COS_ZERO_LEMMA: "ALL x::hollight.real. |
12889 lemma COS_ZERO_LEMMA: "ALL x::hollight.real. |
12667 real_le (real_of_num (0::nat)) x & cos x = real_of_num (0::nat) --> |
12890 real_le (real_of_num 0) x & cos x = real_of_num 0 --> |
12668 (EX n::nat. |
12891 (EX n::nat. |
12669 ~ EVEN n & |
12892 ~ EVEN n & |
12670 x = |
12893 x = |
12671 real_mul (real_of_num n) |
12894 real_mul (real_of_num n) |
12672 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
12895 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
12673 by (import hollight COS_ZERO_LEMMA) |
12896 by (import hollight COS_ZERO_LEMMA) |
12674 |
12897 |
12675 lemma SIN_ZERO_LEMMA: "ALL x::hollight.real. |
12898 lemma SIN_ZERO_LEMMA: "ALL x::hollight.real. |
12676 real_le (real_of_num (0::nat)) x & sin x = real_of_num (0::nat) --> |
12899 real_le (real_of_num 0) x & sin x = real_of_num 0 --> |
12677 (EX n::nat. |
12900 (EX n::nat. |
12678 EVEN n & |
12901 EVEN n & |
12679 x = |
12902 x = |
12680 real_mul (real_of_num n) |
12903 real_mul (real_of_num n) |
12681 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
12904 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
12682 by (import hollight SIN_ZERO_LEMMA) |
12905 by (import hollight SIN_ZERO_LEMMA) |
12683 |
12906 |
12684 lemma COS_ZERO: "ALL x::hollight.real. |
12907 lemma COS_ZERO: "ALL x::hollight.real. |
12685 (cos x = real_of_num (0::nat)) = |
12908 (cos x = real_of_num 0) = |
12686 ((EX n::nat. |
12909 ((EX n::nat. |
12687 ~ EVEN n & |
12910 ~ EVEN n & |
12688 x = |
12911 x = |
12689 real_mul (real_of_num n) |
12912 real_mul (real_of_num n) |
12690 (real_div pi |
12913 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) | |
12691 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) | |
|
12692 (EX n::nat. |
12914 (EX n::nat. |
12693 ~ EVEN n & |
12915 ~ EVEN n & |
12694 x = |
12916 x = |
12695 real_neg |
12917 real_neg |
12696 (real_mul (real_of_num n) |
12918 (real_mul (real_of_num n) |
12697 (real_div pi |
12919 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))))" |
12698 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))))" |
|
12699 by (import hollight COS_ZERO) |
12920 by (import hollight COS_ZERO) |
12700 |
12921 |
12701 lemma SIN_ZERO: "ALL x::hollight.real. |
12922 lemma SIN_ZERO: "ALL x::hollight.real. |
12702 (sin x = real_of_num (0::nat)) = |
12923 (sin x = real_of_num 0) = |
12703 ((EX n::nat. |
12924 ((EX n::nat. |
12704 EVEN n & |
12925 EVEN n & |
12705 x = |
12926 x = |
12706 real_mul (real_of_num n) |
12927 real_mul (real_of_num n) |
12707 (real_div pi |
12928 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) | |
12708 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) | |
|
12709 (EX n::nat. |
12929 (EX n::nat. |
12710 EVEN n & |
12930 EVEN n & |
12711 x = |
12931 x = |
12712 real_neg |
12932 real_neg |
12713 (real_mul (real_of_num n) |
12933 (real_mul (real_of_num n) |
12714 (real_div pi |
12934 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))))" |
12715 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))))" |
|
12716 by (import hollight SIN_ZERO) |
12935 by (import hollight SIN_ZERO) |
12717 |
12936 |
12718 lemma SIN_ZERO_PI: "ALL x::hollight.real. |
12937 lemma SIN_ZERO_PI: "ALL x::hollight.real. |
12719 (sin x = real_of_num (0::nat)) = |
12938 (sin x = real_of_num 0) = |
12720 ((EX n::nat. x = real_mul (real_of_num n) pi) | |
12939 ((EX n::nat. x = real_mul (real_of_num n) pi) | |
12721 (EX n::nat. x = real_neg (real_mul (real_of_num n) pi)))" |
12940 (EX n::nat. x = real_neg (real_mul (real_of_num n) pi)))" |
12722 by (import hollight SIN_ZERO_PI) |
12941 by (import hollight SIN_ZERO_PI) |
12723 |
12942 |
12724 lemma COS_ONE_2PI: "ALL x::hollight.real. |
12943 lemma COS_ONE_2PI: "ALL x::hollight.real. |
12725 (cos x = real_of_num (NUMERAL_BIT1 (0::nat))) = |
12944 (cos x = real_of_num (NUMERAL_BIT1 0)) = |
12726 ((EX n::nat. |
12945 ((EX n::nat. |
12727 x = |
12946 x = |
12728 real_mul (real_of_num n) |
12947 real_mul (real_of_num n) |
12729 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12948 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) pi)) | |
12730 pi)) | |
|
12731 (EX n::nat. |
12949 (EX n::nat. |
12732 x = |
12950 x = |
12733 real_neg |
12951 real_neg |
12734 (real_mul (real_of_num n) |
12952 (real_mul (real_of_num n) |
12735 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12953 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) pi))))" |
12736 pi))))" |
|
12737 by (import hollight COS_ONE_2PI) |
12954 by (import hollight COS_ONE_2PI) |
12738 |
12955 |
12739 constdefs |
12956 constdefs |
12740 tan :: "hollight.real => hollight.real" |
12957 tan :: "hollight.real => hollight.real" |
12741 "tan == %u::hollight.real. real_div (sin u) (cos u)" |
12958 "tan == %u::hollight.real. real_div (sin u) (cos u)" |
12742 |
12959 |
12743 lemma DEF_tan: "tan = (%u::hollight.real. real_div (sin u) (cos u))" |
12960 lemma DEF_tan: "tan = (%u::hollight.real. real_div (sin u) (cos u))" |
12744 by (import hollight DEF_tan) |
12961 by (import hollight DEF_tan) |
12745 |
12962 |
12746 lemma TAN_0: "tan (real_of_num (0::nat)) = real_of_num (0::nat)" |
12963 lemma TAN_0: "tan (real_of_num 0) = real_of_num 0" |
12747 by (import hollight TAN_0) |
12964 by (import hollight TAN_0) |
12748 |
12965 |
12749 lemma TAN_PI: "tan pi = real_of_num (0::nat)" |
12966 lemma TAN_PI: "tan pi = real_of_num 0" |
12750 by (import hollight TAN_PI) |
12967 by (import hollight TAN_PI) |
12751 |
12968 |
12752 lemma TAN_NPI: "ALL n::nat. tan (real_mul (real_of_num n) pi) = real_of_num (0::nat)" |
12969 lemma TAN_NPI: "ALL n::nat. tan (real_mul (real_of_num n) pi) = real_of_num 0" |
12753 by (import hollight TAN_NPI) |
12970 by (import hollight TAN_NPI) |
12754 |
12971 |
12755 lemma TAN_NEG: "ALL x::hollight.real. tan (real_neg x) = real_neg (tan x)" |
12972 lemma TAN_NEG: "ALL x::hollight.real. tan (real_neg x) = real_neg (tan x)" |
12756 by (import hollight TAN_NEG) |
12973 by (import hollight TAN_NEG) |
12757 |
12974 |
12758 lemma TAN_PERIODIC: "ALL x::hollight.real. |
12975 lemma TAN_PERIODIC: "ALL x::hollight.real. |
12759 tan (real_add x |
12976 tan (real_add x |
12760 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
12977 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) pi)) = |
12761 pi)) = |
|
12762 tan x" |
12978 tan x" |
12763 by (import hollight TAN_PERIODIC) |
12979 by (import hollight TAN_PERIODIC) |
12764 |
12980 |
12765 lemma TAN_PERIODIC_PI: "ALL x::hollight.real. tan (real_add x pi) = tan x" |
12981 lemma TAN_PERIODIC_PI: "ALL x::hollight.real. tan (real_add x pi) = tan x" |
12766 by (import hollight TAN_PERIODIC_PI) |
12982 by (import hollight TAN_PERIODIC_PI) |
12768 lemma TAN_PERIODIC_NPI: "ALL (x::hollight.real) n::nat. |
12984 lemma TAN_PERIODIC_NPI: "ALL (x::hollight.real) n::nat. |
12769 tan (real_add x (real_mul (real_of_num n) pi)) = tan x" |
12985 tan (real_add x (real_mul (real_of_num n) pi)) = tan x" |
12770 by (import hollight TAN_PERIODIC_NPI) |
12986 by (import hollight TAN_PERIODIC_NPI) |
12771 |
12987 |
12772 lemma TAN_ADD: "ALL (x::hollight.real) y::hollight.real. |
12988 lemma TAN_ADD: "ALL (x::hollight.real) y::hollight.real. |
12773 cos x ~= real_of_num (0::nat) & |
12989 cos x ~= real_of_num 0 & |
12774 cos y ~= real_of_num (0::nat) & |
12990 cos y ~= real_of_num 0 & cos (real_add x y) ~= real_of_num 0 --> |
12775 cos (real_add x y) ~= real_of_num (0::nat) --> |
|
12776 tan (real_add x y) = |
12991 tan (real_add x y) = |
12777 real_div (real_add (tan x) (tan y)) |
12992 real_div (real_add (tan x) (tan y)) |
12778 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) |
12993 (real_sub (real_of_num (NUMERAL_BIT1 0)) (real_mul (tan x) (tan y)))" |
12779 (real_mul (tan x) (tan y)))" |
|
12780 by (import hollight TAN_ADD) |
12994 by (import hollight TAN_ADD) |
12781 |
12995 |
12782 lemma TAN_DOUBLE: "ALL x::hollight.real. |
12996 lemma TAN_DOUBLE: "ALL x::hollight.real. |
12783 cos x ~= real_of_num (0::nat) & |
12997 cos x ~= real_of_num 0 & |
12784 cos (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x) ~= |
12998 cos (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x) ~= |
12785 real_of_num (0::nat) --> |
12999 real_of_num 0 --> |
12786 tan (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) x) = |
13000 tan (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) x) = |
12787 real_div |
13001 real_div (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) (tan x)) |
12788 (real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) (tan x)) |
13002 (real_sub (real_of_num (NUMERAL_BIT1 0)) |
12789 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) |
13003 (real_pow (tan x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
12790 (real_pow (tan x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
|
12791 by (import hollight TAN_DOUBLE) |
13004 by (import hollight TAN_DOUBLE) |
12792 |
13005 |
12793 lemma TAN_POS_PI2: "ALL x::hollight.real. |
13006 lemma TAN_POS_PI2: "ALL x::hollight.real. |
12794 real_lt (real_of_num (0::nat)) x & |
13007 real_lt (real_of_num 0) x & |
12795 real_lt x |
13008 real_lt x (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12796 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
13009 real_lt (real_of_num 0) (tan x)" |
12797 real_lt (real_of_num (0::nat)) (tan x)" |
|
12798 by (import hollight TAN_POS_PI2) |
13010 by (import hollight TAN_POS_PI2) |
12799 |
13011 |
12800 lemma DIFF_TAN: "ALL x::hollight.real. |
13012 lemma DIFF_TAN: "ALL x::hollight.real. |
12801 cos x ~= real_of_num (0::nat) --> |
13013 cos x ~= real_of_num 0 --> |
12802 diffl tan |
13014 diffl tan (real_inv (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) x" |
12803 (real_inv (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) x" |
|
12804 by (import hollight DIFF_TAN) |
13015 by (import hollight DIFF_TAN) |
12805 |
13016 |
12806 lemma DIFF_TAN_COMPOSITE: "diffl (g::hollight.real => hollight.real) (m::hollight.real) |
13017 lemma DIFF_TAN_COMPOSITE: "diffl (g::hollight.real => hollight.real) (m::hollight.real) |
12807 (x::hollight.real) & |
13018 (x::hollight.real) & |
12808 cos (g x) ~= real_of_num (0::nat) --> |
13019 cos (g x) ~= real_of_num 0 --> |
12809 diffl (%x::hollight.real. tan (g x)) |
13020 diffl (%x::hollight.real. tan (g x)) |
12810 (real_mul |
13021 (real_mul (real_inv (real_pow (cos (g x)) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
12811 (real_inv (real_pow (cos (g x)) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
12812 m) |
13022 m) |
12813 x" |
13023 x" |
12814 by (import hollight DIFF_TAN_COMPOSITE) |
13024 by (import hollight DIFF_TAN_COMPOSITE) |
12815 |
13025 |
12816 lemma TAN_TOTAL_LEMMA: "ALL y::hollight.real. |
13026 lemma TAN_TOTAL_LEMMA: "ALL y::hollight.real. |
12817 real_lt (real_of_num (0::nat)) y --> |
13027 real_lt (real_of_num 0) y --> |
12818 (EX x::hollight.real. |
13028 (EX x::hollight.real. |
12819 real_lt (real_of_num (0::nat)) x & |
13029 real_lt (real_of_num 0) x & |
12820 real_lt x |
13030 real_lt x |
12821 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13031 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12822 real_lt y (tan x))" |
13032 real_lt y (tan x))" |
12823 by (import hollight TAN_TOTAL_LEMMA) |
13033 by (import hollight TAN_TOTAL_LEMMA) |
12824 |
13034 |
12825 lemma TAN_TOTAL_POS: "ALL y::hollight.real. |
13035 lemma TAN_TOTAL_POS: "ALL y::hollight.real. |
12826 real_le (real_of_num (0::nat)) y --> |
13036 real_le (real_of_num 0) y --> |
12827 (EX x::hollight.real. |
13037 (EX x::hollight.real. |
12828 real_le (real_of_num (0::nat)) x & |
13038 real_le (real_of_num 0) x & |
12829 real_lt x |
13039 real_lt x |
12830 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13040 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12831 tan x = y)" |
13041 tan x = y)" |
12832 by (import hollight TAN_TOTAL_POS) |
13042 by (import hollight TAN_TOTAL_POS) |
12833 |
13043 |
12834 lemma TAN_TOTAL: "ALL y::hollight.real. |
13044 lemma TAN_TOTAL: "ALL y::hollight.real. |
12835 EX! x::hollight.real. |
13045 EX! x::hollight.real. |
12836 real_lt |
13046 real_lt |
12837 (real_neg |
13047 (real_neg |
12838 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
13048 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12839 x & |
13049 x & |
12840 real_lt x |
13050 real_lt x |
12841 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13051 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12842 tan x = y" |
13052 tan x = y" |
12843 by (import hollight TAN_TOTAL) |
13053 by (import hollight TAN_TOTAL) |
12844 |
13054 |
12845 lemma PI2_PI4: "real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
13055 lemma PI2_PI4: "real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
12846 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
13056 real_mul (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
12847 (real_div pi |
13057 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
12848 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
|
12849 by (import hollight PI2_PI4) |
13058 by (import hollight PI2_PI4) |
12850 |
13059 |
12851 lemma TAN_PI4: "tan (real_div pi |
13060 lemma TAN_PI4: "tan (real_div pi |
12852 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) = |
13061 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) = |
12853 real_of_num (NUMERAL_BIT1 (0::nat))" |
13062 real_of_num (NUMERAL_BIT1 0)" |
12854 by (import hollight TAN_PI4) |
13063 by (import hollight TAN_PI4) |
12855 |
13064 |
12856 lemma TAN_COT: "ALL x::hollight.real. |
13065 lemma TAN_COT: "ALL x::hollight.real. |
12857 tan (real_sub |
13066 tan (real_sub (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
12858 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
12859 x) = |
13067 x) = |
12860 real_inv (tan x)" |
13068 real_inv (tan x)" |
12861 by (import hollight TAN_COT) |
13069 by (import hollight TAN_COT) |
12862 |
13070 |
12863 lemma TAN_BOUND_PI2: "ALL x::hollight.real. |
13071 lemma TAN_BOUND_PI2: "ALL x::hollight.real. |
12864 real_lt (real_abs x) |
13072 real_lt (real_abs x) |
12865 (real_div pi |
13073 (real_div pi |
12866 (real_of_num |
13074 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) --> |
12867 (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) --> |
13075 real_lt (real_abs (tan x)) (real_of_num (NUMERAL_BIT1 0))" |
12868 real_lt (real_abs (tan x)) (real_of_num (NUMERAL_BIT1 (0::nat)))" |
|
12869 by (import hollight TAN_BOUND_PI2) |
13076 by (import hollight TAN_BOUND_PI2) |
12870 |
13077 |
12871 lemma TAN_ABS_GE_X: "ALL x::hollight.real. |
13078 lemma TAN_ABS_GE_X: "ALL x::hollight.real. |
12872 real_lt (real_abs x) |
13079 real_lt (real_abs x) |
12873 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
13080 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12874 real_le (real_abs x) (real_abs (tan x))" |
13081 real_le (real_abs x) (real_abs (tan x))" |
12875 by (import hollight TAN_ABS_GE_X) |
13082 by (import hollight TAN_ABS_GE_X) |
12876 |
13083 |
12877 constdefs |
13084 constdefs |
12878 asn :: "hollight.real => hollight.real" |
13085 asn :: "hollight.real => hollight.real" |
12879 "asn == |
13086 "asn == |
12880 %u::hollight.real. |
13087 %u::hollight.real. |
12881 SOME x::hollight.real. |
13088 SOME x::hollight.real. |
12882 real_le |
13089 real_le |
12883 (real_neg |
13090 (real_neg |
12884 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
13091 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12885 x & |
13092 x & |
12886 real_le x |
13093 real_le x |
12887 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13094 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12888 sin x = u" |
13095 sin x = u" |
12889 |
13096 |
12890 lemma DEF_asn: "asn = |
13097 lemma DEF_asn: "asn = |
12891 (%u::hollight.real. |
13098 (%u::hollight.real. |
12892 SOME x::hollight.real. |
13099 SOME x::hollight.real. |
12893 real_le |
13100 real_le |
12894 (real_neg |
13101 (real_neg |
12895 (real_div pi |
13102 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12896 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12897 x & |
13103 x & |
12898 real_le x |
13104 real_le x |
12899 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13105 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12900 sin x = u)" |
13106 sin x = u)" |
12901 by (import hollight DEF_asn) |
13107 by (import hollight DEF_asn) |
12902 |
13108 |
12903 constdefs |
13109 constdefs |
12904 acs :: "hollight.real => hollight.real" |
13110 acs :: "hollight.real => hollight.real" |
12905 "acs == |
13111 "acs == |
12906 %u::hollight.real. |
13112 %u::hollight.real. |
12907 SOME x::hollight.real. |
13113 SOME x::hollight.real. |
12908 real_le (real_of_num (0::nat)) x & real_le x pi & cos x = u" |
13114 real_le (real_of_num 0) x & real_le x pi & cos x = u" |
12909 |
13115 |
12910 lemma DEF_acs: "acs = |
13116 lemma DEF_acs: "acs = |
12911 (%u::hollight.real. |
13117 (%u::hollight.real. |
12912 SOME x::hollight.real. |
13118 SOME x::hollight.real. |
12913 real_le (real_of_num (0::nat)) x & real_le x pi & cos x = u)" |
13119 real_le (real_of_num 0) x & real_le x pi & cos x = u)" |
12914 by (import hollight DEF_acs) |
13120 by (import hollight DEF_acs) |
12915 |
13121 |
12916 constdefs |
13122 constdefs |
12917 atn :: "hollight.real => hollight.real" |
13123 atn :: "hollight.real => hollight.real" |
12918 "atn == |
13124 "atn == |
12919 %u::hollight.real. |
13125 %u::hollight.real. |
12920 SOME x::hollight.real. |
13126 SOME x::hollight.real. |
12921 real_lt |
13127 real_lt |
12922 (real_neg |
13128 (real_neg |
12923 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
13129 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12924 x & |
13130 x & |
12925 real_lt x |
13131 real_lt x |
12926 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13132 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12927 tan x = u" |
13133 tan x = u" |
12928 |
13134 |
12929 lemma DEF_atn: "atn = |
13135 lemma DEF_atn: "atn = |
12930 (%u::hollight.real. |
13136 (%u::hollight.real. |
12931 SOME x::hollight.real. |
13137 SOME x::hollight.real. |
12932 real_lt |
13138 real_lt |
12933 (real_neg |
13139 (real_neg |
12934 (real_div pi |
13140 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12935 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12936 x & |
13141 x & |
12937 real_lt x |
13142 real_lt x |
12938 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13143 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12939 tan x = u)" |
13144 tan x = u)" |
12940 by (import hollight DEF_atn) |
13145 by (import hollight DEF_atn) |
12941 |
13146 |
12942 lemma ASN: "ALL y::hollight.real. |
13147 lemma ASN: "ALL y::hollight.real. |
12943 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13148 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12944 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13149 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
12945 real_le |
13150 real_le |
12946 (real_neg |
13151 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12947 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12948 (asn y) & |
13152 (asn y) & |
12949 real_le (asn y) |
13153 real_le (asn y) |
12950 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13154 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
12951 sin (asn y) = y" |
13155 sin (asn y) = y" |
12952 by (import hollight ASN) |
13156 by (import hollight ASN) |
12953 |
13157 |
12954 lemma ASN_SIN: "ALL y::hollight.real. |
13158 lemma ASN_SIN: "ALL y::hollight.real. |
12955 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13159 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12956 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13160 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
12957 sin (asn y) = y" |
13161 sin (asn y) = y" |
12958 by (import hollight ASN_SIN) |
13162 by (import hollight ASN_SIN) |
12959 |
13163 |
12960 lemma ASN_BOUNDS: "ALL y::hollight.real. |
13164 lemma ASN_BOUNDS: "ALL y::hollight.real. |
12961 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13165 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12962 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13166 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
12963 real_le |
13167 real_le |
12964 (real_neg |
13168 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12965 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12966 (asn y) & |
13169 (asn y) & |
12967 real_le (asn y) |
13170 real_le (asn y) |
12968 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
13171 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
12969 by (import hollight ASN_BOUNDS) |
13172 by (import hollight ASN_BOUNDS) |
12970 |
13173 |
12971 lemma ASN_BOUNDS_LT: "ALL y::hollight.real. |
13174 lemma ASN_BOUNDS_LT: "ALL y::hollight.real. |
12972 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13175 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12973 real_lt y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13176 real_lt y (real_of_num (NUMERAL_BIT1 0)) --> |
12974 real_lt |
13177 real_lt |
12975 (real_neg |
13178 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12976 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12977 (asn y) & |
13179 (asn y) & |
12978 real_lt (asn y) |
13180 real_lt (asn y) |
12979 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
13181 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
12980 by (import hollight ASN_BOUNDS_LT) |
13182 by (import hollight ASN_BOUNDS_LT) |
12981 |
13183 |
12982 lemma SIN_ASN: "ALL x::hollight.real. |
13184 lemma SIN_ASN: "ALL x::hollight.real. |
12983 real_le |
13185 real_le |
12984 (real_neg |
13186 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
12985 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
12986 x & |
13187 x & |
12987 real_le x |
13188 real_le x (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
12988 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
|
12989 asn (sin x) = x" |
13189 asn (sin x) = x" |
12990 by (import hollight SIN_ASN) |
13190 by (import hollight SIN_ASN) |
12991 |
13191 |
12992 lemma ACS: "ALL y::hollight.real. |
13192 lemma ACS: "ALL y::hollight.real. |
12993 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13193 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
12994 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13194 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
12995 real_le (real_of_num (0::nat)) (acs y) & |
13195 real_le (real_of_num 0) (acs y) & real_le (acs y) pi & cos (acs y) = y" |
12996 real_le (acs y) pi & cos (acs y) = y" |
|
12997 by (import hollight ACS) |
13196 by (import hollight ACS) |
12998 |
13197 |
12999 lemma ACS_COS: "ALL y::hollight.real. |
13198 lemma ACS_COS: "ALL y::hollight.real. |
13000 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13199 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
13001 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13200 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
13002 cos (acs y) = y" |
13201 cos (acs y) = y" |
13003 by (import hollight ACS_COS) |
13202 by (import hollight ACS_COS) |
13004 |
13203 |
13005 lemma ACS_BOUNDS: "ALL y::hollight.real. |
13204 lemma ACS_BOUNDS: "ALL y::hollight.real. |
13006 real_le (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13205 real_le (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
13007 real_le y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13206 real_le y (real_of_num (NUMERAL_BIT1 0)) --> |
13008 real_le (real_of_num (0::nat)) (acs y) & real_le (acs y) pi" |
13207 real_le (real_of_num 0) (acs y) & real_le (acs y) pi" |
13009 by (import hollight ACS_BOUNDS) |
13208 by (import hollight ACS_BOUNDS) |
13010 |
13209 |
13011 lemma ACS_BOUNDS_LT: "ALL y::hollight.real. |
13210 lemma ACS_BOUNDS_LT: "ALL y::hollight.real. |
13012 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) y & |
13211 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) y & |
13013 real_lt y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13212 real_lt y (real_of_num (NUMERAL_BIT1 0)) --> |
13014 real_lt (real_of_num (0::nat)) (acs y) & real_lt (acs y) pi" |
13213 real_lt (real_of_num 0) (acs y) & real_lt (acs y) pi" |
13015 by (import hollight ACS_BOUNDS_LT) |
13214 by (import hollight ACS_BOUNDS_LT) |
13016 |
13215 |
13017 lemma COS_ACS: "ALL x::hollight.real. |
13216 lemma COS_ACS: "ALL x::hollight.real. |
13018 real_le (real_of_num (0::nat)) x & real_le x pi --> acs (cos x) = x" |
13217 real_le (real_of_num 0) x & real_le x pi --> acs (cos x) = x" |
13019 by (import hollight COS_ACS) |
13218 by (import hollight COS_ACS) |
13020 |
13219 |
13021 lemma ATN: "ALL y::hollight.real. |
13220 lemma ATN: "ALL y::hollight.real. |
13022 real_lt |
13221 real_lt |
13023 (real_neg |
13222 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
13024 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
13025 (atn y) & |
13223 (atn y) & |
13026 real_lt (atn y) |
13224 real_lt (atn y) |
13027 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) & |
13225 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) & |
13028 tan (atn y) = y" |
13226 tan (atn y) = y" |
13029 by (import hollight ATN) |
13227 by (import hollight ATN) |
13030 |
13228 |
13031 lemma ATN_TAN: "ALL x::hollight.real. tan (atn x) = x" |
13229 lemma ATN_TAN: "ALL x::hollight.real. tan (atn x) = x" |
13032 by (import hollight ATN_TAN) |
13230 by (import hollight ATN_TAN) |
13033 |
13231 |
13034 lemma ATN_BOUNDS: "ALL x::hollight.real. |
13232 lemma ATN_BOUNDS: "ALL x::hollight.real. |
13035 real_lt |
13233 real_lt |
13036 (real_neg |
13234 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
13037 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
13038 (atn x) & |
13235 (atn x) & |
13039 real_lt (atn x) |
13236 real_lt (atn x) |
13040 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
13237 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
13041 by (import hollight ATN_BOUNDS) |
13238 by (import hollight ATN_BOUNDS) |
13042 |
13239 |
13043 lemma TAN_ATN: "ALL x::hollight.real. |
13240 lemma TAN_ATN: "ALL x::hollight.real. |
13044 real_lt |
13241 real_lt |
13045 (real_neg |
13242 (real_neg (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
13046 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
|
13047 x & |
13243 x & |
13048 real_lt x |
13244 real_lt x (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) --> |
13049 (real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) --> |
|
13050 atn (tan x) = x" |
13245 atn (tan x) = x" |
13051 by (import hollight TAN_ATN) |
13246 by (import hollight TAN_ATN) |
13052 |
13247 |
13053 lemma ATN_0: "atn (real_of_num (0::nat)) = real_of_num (0::nat)" |
13248 lemma ATN_0: "atn (real_of_num 0) = real_of_num 0" |
13054 by (import hollight ATN_0) |
13249 by (import hollight ATN_0) |
13055 |
13250 |
13056 lemma ATN_1: "atn (real_of_num (NUMERAL_BIT1 (0::nat))) = |
13251 lemma ATN_1: "atn (real_of_num (NUMERAL_BIT1 0)) = |
13057 real_div pi |
13252 real_div pi (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
13058 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
|
13059 by (import hollight ATN_1) |
13253 by (import hollight ATN_1) |
13060 |
13254 |
13061 lemma ATN_NEG: "ALL x::hollight.real. atn (real_neg x) = real_neg (atn x)" |
13255 lemma ATN_NEG: "ALL x::hollight.real. atn (real_neg x) = real_neg (atn x)" |
13062 by (import hollight ATN_NEG) |
13256 by (import hollight ATN_NEG) |
13063 |
13257 |
13064 lemma COS_ATN_NZ: "ALL x::hollight.real. cos (atn x) ~= real_of_num (0::nat)" |
13258 lemma COS_ATN_NZ: "ALL x::hollight.real. cos (atn x) ~= real_of_num 0" |
13065 by (import hollight COS_ATN_NZ) |
13259 by (import hollight COS_ATN_NZ) |
13066 |
13260 |
13067 lemma TAN_SEC: "ALL x::hollight.real. |
13261 lemma TAN_SEC: "ALL x::hollight.real. |
13068 cos x ~= real_of_num (0::nat) --> |
13262 cos x ~= real_of_num 0 --> |
13069 real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
13263 real_add (real_of_num (NUMERAL_BIT1 0)) |
13070 (real_pow (tan x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
13264 (real_pow (tan x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
13071 real_pow (real_inv (cos x)) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))" |
13265 real_pow (real_inv (cos x)) (NUMERAL_BIT0 (NUMERAL_BIT1 0))" |
13072 by (import hollight TAN_SEC) |
13266 by (import hollight TAN_SEC) |
13073 |
13267 |
13074 lemma DIFF_ATN: "ALL x::hollight.real. |
13268 lemma DIFF_ATN: "ALL x::hollight.real. |
13075 diffl atn |
13269 diffl atn |
13076 (real_inv |
13270 (real_inv |
13077 (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
13271 (real_add (real_of_num (NUMERAL_BIT1 0)) |
13078 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
13272 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
13079 x" |
13273 x" |
13080 by (import hollight DIFF_ATN) |
13274 by (import hollight DIFF_ATN) |
13081 |
13275 |
13082 lemma DIFF_ATN_COMPOSITE: "diffl (g::hollight.real => hollight.real) (m::hollight.real) |
13276 lemma DIFF_ATN_COMPOSITE: "diffl (g::hollight.real => hollight.real) (m::hollight.real) |
13083 (x::hollight.real) --> |
13277 (x::hollight.real) --> |
13084 diffl (%x::hollight.real. atn (g x)) |
13278 diffl (%x::hollight.real. atn (g x)) |
13085 (real_mul |
13279 (real_mul |
13086 (real_inv |
13280 (real_inv |
13087 (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
13281 (real_add (real_of_num (NUMERAL_BIT1 0)) |
13088 (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
13282 (real_pow (g x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
13089 m) |
13283 m) |
13090 x" |
13284 x" |
13091 by (import hollight DIFF_ATN_COMPOSITE) |
13285 by (import hollight DIFF_ATN_COMPOSITE) |
13092 |
13286 |
13093 lemma ATN_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
13287 lemma ATN_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
13103 by (import hollight ATN_MONO_LE_EQ) |
13297 by (import hollight ATN_MONO_LE_EQ) |
13104 |
13298 |
13105 lemma ATN_INJ: "ALL (x::hollight.real) xa::hollight.real. (atn x = atn xa) = (x = xa)" |
13299 lemma ATN_INJ: "ALL (x::hollight.real) xa::hollight.real. (atn x = atn xa) = (x = xa)" |
13106 by (import hollight ATN_INJ) |
13300 by (import hollight ATN_INJ) |
13107 |
13301 |
13108 lemma ATN_POS_LT: "real_lt (real_of_num (0::nat)) (atn (x::hollight.real)) = |
13302 lemma ATN_POS_LT: "real_lt (real_of_num 0) (atn (x::hollight.real)) = real_lt (real_of_num 0) x" |
13109 real_lt (real_of_num (0::nat)) x" |
|
13110 by (import hollight ATN_POS_LT) |
13303 by (import hollight ATN_POS_LT) |
13111 |
13304 |
13112 lemma ATN_POS_LE: "real_le (real_of_num (0::nat)) (atn (x::hollight.real)) = |
13305 lemma ATN_POS_LE: "real_le (real_of_num 0) (atn (x::hollight.real)) = real_le (real_of_num 0) x" |
13113 real_le (real_of_num (0::nat)) x" |
|
13114 by (import hollight ATN_POS_LE) |
13306 by (import hollight ATN_POS_LE) |
13115 |
13307 |
13116 lemma ATN_LT_PI4_POS: "ALL x::hollight.real. |
13308 lemma ATN_LT_PI4_POS: "ALL x::hollight.real. |
13117 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13309 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13118 real_lt (atn x) |
13310 real_lt (atn x) |
13119 (real_div pi |
13311 (real_div pi |
13120 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
13312 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
13121 by (import hollight ATN_LT_PI4_POS) |
13313 by (import hollight ATN_LT_PI4_POS) |
13122 |
13314 |
13123 lemma ATN_LT_PI4_NEG: "ALL x::hollight.real. |
13315 lemma ATN_LT_PI4_NEG: "ALL x::hollight.real. |
13124 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x --> |
13316 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x --> |
13125 real_lt |
13317 real_lt |
13126 (real_neg |
13318 (real_neg |
13127 (real_div pi |
13319 (real_div pi |
13128 (real_of_num |
13320 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))) |
13129 (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))) |
|
13130 (atn x)" |
13321 (atn x)" |
13131 by (import hollight ATN_LT_PI4_NEG) |
13322 by (import hollight ATN_LT_PI4_NEG) |
13132 |
13323 |
13133 lemma ATN_LT_PI4: "ALL x::hollight.real. |
13324 lemma ATN_LT_PI4: "ALL x::hollight.real. |
13134 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13325 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13135 real_lt (real_abs (atn x)) |
13326 real_lt (real_abs (atn x)) |
13136 (real_div pi |
13327 (real_div pi |
13137 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
13328 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
13138 by (import hollight ATN_LT_PI4) |
13329 by (import hollight ATN_LT_PI4) |
13139 |
13330 |
13140 lemma ATN_LE_PI4: "ALL x::hollight.real. |
13331 lemma ATN_LE_PI4: "ALL x::hollight.real. |
13141 real_le (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13332 real_le (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13142 real_le (real_abs (atn x)) |
13333 real_le (real_abs (atn x)) |
13143 (real_div pi |
13334 (real_div pi |
13144 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
13335 (real_of_num (NUMERAL_BIT0 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
13145 by (import hollight ATN_LE_PI4) |
13336 by (import hollight ATN_LE_PI4) |
13146 |
13337 |
13147 lemma COS_SIN_SQRT: "ALL x::hollight.real. |
13338 lemma COS_SIN_SQRT: "ALL x::hollight.real. |
13148 real_le (real_of_num (0::nat)) (cos x) --> |
13339 real_le (real_of_num 0) (cos x) --> |
13149 cos x = |
13340 cos x = |
13150 sqrt |
13341 sqrt |
13151 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) |
13342 (real_sub (real_of_num (NUMERAL_BIT1 0)) |
13152 (real_pow (sin x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
13343 (real_pow (sin x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
13153 by (import hollight COS_SIN_SQRT) |
13344 by (import hollight COS_SIN_SQRT) |
13154 |
13345 |
13155 lemma COS_ASN_NZ: "ALL x::hollight.real. |
13346 lemma COS_ASN_NZ: "ALL x::hollight.real. |
13156 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13347 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13157 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13348 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13158 cos (asn x) ~= real_of_num (0::nat)" |
13349 cos (asn x) ~= real_of_num 0" |
13159 by (import hollight COS_ASN_NZ) |
13350 by (import hollight COS_ASN_NZ) |
13160 |
13351 |
13161 lemma DIFF_ASN_COS: "ALL x::hollight.real. |
13352 lemma DIFF_ASN_COS: "ALL x::hollight.real. |
13162 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13353 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13163 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13354 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13164 diffl asn (real_inv (cos (asn x))) x" |
13355 diffl asn (real_inv (cos (asn x))) x" |
13165 by (import hollight DIFF_ASN_COS) |
13356 by (import hollight DIFF_ASN_COS) |
13166 |
13357 |
13167 lemma DIFF_ASN: "ALL x::hollight.real. |
13358 lemma DIFF_ASN: "ALL x::hollight.real. |
13168 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13359 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13169 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13360 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13170 diffl asn |
13361 diffl asn |
13171 (real_inv |
13362 (real_inv |
13172 (sqrt |
13363 (sqrt |
13173 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) |
13364 (real_sub (real_of_num (NUMERAL_BIT1 0)) |
13174 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))) |
13365 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))) |
13175 x" |
13366 x" |
13176 by (import hollight DIFF_ASN) |
13367 by (import hollight DIFF_ASN) |
13177 |
13368 |
13178 lemma SIN_COS_SQRT: "ALL x::hollight.real. |
13369 lemma SIN_COS_SQRT: "ALL x::hollight.real. |
13179 real_le (real_of_num (0::nat)) (sin x) --> |
13370 real_le (real_of_num 0) (sin x) --> |
13180 sin x = |
13371 sin x = |
13181 sqrt |
13372 sqrt |
13182 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) |
13373 (real_sub (real_of_num (NUMERAL_BIT1 0)) |
13183 (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))" |
13374 (real_pow (cos x) (NUMERAL_BIT0 (NUMERAL_BIT1 0))))" |
13184 by (import hollight SIN_COS_SQRT) |
13375 by (import hollight SIN_COS_SQRT) |
13185 |
13376 |
13186 lemma SIN_ACS_NZ: "ALL x::hollight.real. |
13377 lemma SIN_ACS_NZ: "ALL x::hollight.real. |
13187 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13378 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13188 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13379 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13189 sin (acs x) ~= real_of_num (0::nat)" |
13380 sin (acs x) ~= real_of_num 0" |
13190 by (import hollight SIN_ACS_NZ) |
13381 by (import hollight SIN_ACS_NZ) |
13191 |
13382 |
13192 lemma DIFF_ACS_SIN: "ALL x::hollight.real. |
13383 lemma DIFF_ACS_SIN: "ALL x::hollight.real. |
13193 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13384 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13194 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13385 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13195 diffl acs (real_inv (real_neg (sin (acs x)))) x" |
13386 diffl acs (real_inv (real_neg (sin (acs x)))) x" |
13196 by (import hollight DIFF_ACS_SIN) |
13387 by (import hollight DIFF_ACS_SIN) |
13197 |
13388 |
13198 lemma DIFF_ACS: "ALL x::hollight.real. |
13389 lemma DIFF_ACS: "ALL x::hollight.real. |
13199 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13390 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13200 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13391 real_lt x (real_of_num (NUMERAL_BIT1 0)) --> |
13201 diffl acs |
13392 diffl acs |
13202 (real_neg |
13393 (real_neg |
13203 (real_inv |
13394 (real_inv |
13204 (sqrt |
13395 (sqrt |
13205 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) |
13396 (real_sub (real_of_num (NUMERAL_BIT1 0)) |
13206 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))))) |
13397 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))))))) |
13207 x" |
13398 x" |
13208 by (import hollight DIFF_ACS) |
13399 by (import hollight DIFF_ACS) |
13209 |
13400 |
13210 lemma CIRCLE_SINCOS: "ALL (x::hollight.real) y::hollight.real. |
13401 lemma CIRCLE_SINCOS: "ALL (x::hollight.real) y::hollight.real. |
13211 real_add (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) |
13402 real_add (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))) |
13212 (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))) = |
13403 (real_pow y (NUMERAL_BIT0 (NUMERAL_BIT1 0))) = |
13213 real_of_num (NUMERAL_BIT1 (0::nat)) --> |
13404 real_of_num (NUMERAL_BIT1 0) --> |
13214 (EX t::hollight.real. x = cos t & y = sin t)" |
13405 (EX t::hollight.real. x = cos t & y = sin t)" |
13215 by (import hollight CIRCLE_SINCOS) |
13406 by (import hollight CIRCLE_SINCOS) |
13216 |
13407 |
13217 lemma ACS_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
13408 lemma ACS_MONO_LT: "ALL (x::hollight.real) y::hollight.real. |
13218 real_lt (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) x & |
13409 real_lt (real_neg (real_of_num (NUMERAL_BIT1 0))) x & |
13219 real_lt x y & real_lt y (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13410 real_lt x y & real_lt y (real_of_num (NUMERAL_BIT1 0)) --> |
13220 real_lt (acs y) (acs x)" |
13411 real_lt (acs y) (acs x)" |
13221 by (import hollight ACS_MONO_LT) |
13412 by (import hollight ACS_MONO_LT) |
13222 |
13413 |
13223 lemma LESS_SUC_EQ: "ALL (m::nat) n::nat. < m (Suc n) = <= m n" |
13414 lemma LESS_SUC_EQ: "ALL (m::nat) n::nat. < m (Suc n) = <= m n" |
13224 by (import hollight LESS_SUC_EQ) |
13415 by (import hollight LESS_SUC_EQ) |
13225 |
13416 |
13226 lemma LESS_1: "ALL x::nat. < x (NUMERAL_BIT1 (0::nat)) = (x = (0::nat))" |
13417 lemma LESS_1: "ALL x::nat. < x (NUMERAL_BIT1 0) = (x = 0)" |
13227 by (import hollight LESS_1) |
13418 by (import hollight LESS_1) |
13228 |
13419 |
13229 constdefs |
13420 constdefs |
13230 division :: "hollight.real * hollight.real => (nat => hollight.real) => bool" |
13421 division :: "hollight.real * hollight.real => (nat => hollight.real) => bool" |
13231 "division == |
13422 "division == |
13232 %(u::hollight.real * hollight.real) ua::nat => hollight.real. |
13423 %(u::hollight.real * hollight.real) ua::nat => hollight.real. |
13233 ua (0::nat) = fst u & |
13424 ua 0 = fst u & |
13234 (EX N::nat. |
13425 (EX N::nat. |
13235 (ALL n::nat. < n N --> real_lt (ua n) (ua (Suc n))) & |
13426 (ALL n::nat. < n N --> real_lt (ua n) (ua (Suc n))) & |
13236 (ALL n::nat. >= n N --> ua n = snd u))" |
13427 (ALL n::nat. >= n N --> ua n = snd u))" |
13237 |
13428 |
13238 lemma DEF_division: "division = |
13429 lemma DEF_division: "division = |
13239 (%(u::hollight.real * hollight.real) ua::nat => hollight.real. |
13430 (%(u::hollight.real * hollight.real) ua::nat => hollight.real. |
13240 ua (0::nat) = fst u & |
13431 ua 0 = fst u & |
13241 (EX N::nat. |
13432 (EX N::nat. |
13242 (ALL n::nat. < n N --> real_lt (ua n) (ua (Suc n))) & |
13433 (ALL n::nat. < n N --> real_lt (ua n) (ua (Suc n))) & |
13243 (ALL n::nat. >= n N --> ua n = snd u)))" |
13434 (ALL n::nat. >= n N --> ua n = snd u)))" |
13244 by (import hollight DEF_division) |
13435 by (import hollight DEF_division) |
13245 |
13436 |
13279 |
13470 |
13280 constdefs |
13471 constdefs |
13281 gauge :: "(hollight.real => bool) => (hollight.real => hollight.real) => bool" |
13472 gauge :: "(hollight.real => bool) => (hollight.real => hollight.real) => bool" |
13282 "gauge == |
13473 "gauge == |
13283 %(u::hollight.real => bool) ua::hollight.real => hollight.real. |
13474 %(u::hollight.real => bool) ua::hollight.real => hollight.real. |
13284 ALL x::hollight.real. u x --> real_lt (real_of_num (0::nat)) (ua x)" |
13475 ALL x::hollight.real. u x --> real_lt (real_of_num 0) (ua x)" |
13285 |
13476 |
13286 lemma DEF_gauge: "gauge = |
13477 lemma DEF_gauge: "gauge = |
13287 (%(u::hollight.real => bool) ua::hollight.real => hollight.real. |
13478 (%(u::hollight.real => bool) ua::hollight.real => hollight.real. |
13288 ALL x::hollight.real. u x --> real_lt (real_of_num (0::nat)) (ua x))" |
13479 ALL x::hollight.real. u x --> real_lt (real_of_num 0) (ua x))" |
13289 by (import hollight DEF_gauge) |
13480 by (import hollight DEF_gauge) |
13290 |
13481 |
13291 constdefs |
13482 constdefs |
13292 fine :: "(hollight.real => hollight.real) |
13483 fine :: "(hollight.real => hollight.real) |
13293 => (nat => hollight.real) * (nat => hollight.real) => bool" |
13484 => (nat => hollight.real) * (nat => hollight.real) => bool" |
13310 rsum :: "(nat => hollight.real) * (nat => hollight.real) |
13501 rsum :: "(nat => hollight.real) * (nat => hollight.real) |
13311 => (hollight.real => hollight.real) => hollight.real" |
13502 => (hollight.real => hollight.real) => hollight.real" |
13312 "rsum == |
13503 "rsum == |
13313 %(u::(nat => hollight.real) * (nat => hollight.real)) |
13504 %(u::(nat => hollight.real) * (nat => hollight.real)) |
13314 ua::hollight.real => hollight.real. |
13505 ua::hollight.real => hollight.real. |
13315 psum (0::nat, dsize (fst u)) |
13506 psum (0, dsize (fst u)) |
13316 (%n::nat. real_mul (ua (snd u n)) (real_sub (fst u (Suc n)) (fst u n)))" |
13507 (%n::nat. real_mul (ua (snd u n)) (real_sub (fst u (Suc n)) (fst u n)))" |
13317 |
13508 |
13318 lemma DEF_rsum: "rsum = |
13509 lemma DEF_rsum: "rsum = |
13319 (%(u::(nat => hollight.real) * (nat => hollight.real)) |
13510 (%(u::(nat => hollight.real) * (nat => hollight.real)) |
13320 ua::hollight.real => hollight.real. |
13511 ua::hollight.real => hollight.real. |
13321 psum (0::nat, dsize (fst u)) |
13512 psum (0, dsize (fst u)) |
13322 (%n::nat. |
13513 (%n::nat. |
13323 real_mul (ua (snd u n)) (real_sub (fst u (Suc n)) (fst u n))))" |
13514 real_mul (ua (snd u n)) (real_sub (fst u (Suc n)) (fst u n))))" |
13324 by (import hollight DEF_rsum) |
13515 by (import hollight DEF_rsum) |
13325 |
13516 |
13326 constdefs |
13517 constdefs |
13328 => (hollight.real => hollight.real) => hollight.real => bool" |
13519 => (hollight.real => hollight.real) => hollight.real => bool" |
13329 "defint == |
13520 "defint == |
13330 %(u::hollight.real * hollight.real) (ua::hollight.real => hollight.real) |
13521 %(u::hollight.real * hollight.real) (ua::hollight.real => hollight.real) |
13331 ub::hollight.real. |
13522 ub::hollight.real. |
13332 ALL e::hollight.real. |
13523 ALL e::hollight.real. |
13333 real_lt (real_of_num (0::nat)) e --> |
13524 real_lt (real_of_num 0) e --> |
13334 (EX g::hollight.real => hollight.real. |
13525 (EX g::hollight.real => hollight.real. |
13335 gauge (%x::hollight.real. real_le (fst u) x & real_le x (snd u)) |
13526 gauge (%x::hollight.real. real_le (fst u) x & real_le x (snd u)) |
13336 g & |
13527 g & |
13337 (ALL (D::nat => hollight.real) p::nat => hollight.real. |
13528 (ALL (D::nat => hollight.real) p::nat => hollight.real. |
13338 tdiv (fst u, snd u) (D, p) & fine g (D, p) --> |
13529 tdiv (fst u, snd u) (D, p) & fine g (D, p) --> |
13340 |
13531 |
13341 lemma DEF_defint: "defint = |
13532 lemma DEF_defint: "defint = |
13342 (%(u::hollight.real * hollight.real) (ua::hollight.real => hollight.real) |
13533 (%(u::hollight.real * hollight.real) (ua::hollight.real => hollight.real) |
13343 ub::hollight.real. |
13534 ub::hollight.real. |
13344 ALL e::hollight.real. |
13535 ALL e::hollight.real. |
13345 real_lt (real_of_num (0::nat)) e --> |
13536 real_lt (real_of_num 0) e --> |
13346 (EX g::hollight.real => hollight.real. |
13537 (EX g::hollight.real => hollight.real. |
13347 gauge (%x::hollight.real. real_le (fst u) x & real_le x (snd u)) |
13538 gauge (%x::hollight.real. real_le (fst u) x & real_le x (snd u)) |
13348 g & |
13539 g & |
13349 (ALL (D::nat => hollight.real) p::nat => hollight.real. |
13540 (ALL (D::nat => hollight.real) p::nat => hollight.real. |
13350 tdiv (fst u, snd u) (D, p) & fine g (D, p) --> |
13541 tdiv (fst u, snd u) (D, p) & fine g (D, p) --> |
13351 real_lt (real_abs (real_sub (rsum (D, p) ua) ub)) e)))" |
13542 real_lt (real_abs (real_sub (rsum (D, p) ua) ub)) e)))" |
13352 by (import hollight DEF_defint) |
13543 by (import hollight DEF_defint) |
13353 |
13544 |
13354 lemma DIVISION_0: "ALL (a::hollight.real) b::hollight.real. |
13545 lemma DIVISION_0: "ALL (a::hollight.real) b::hollight.real. |
13355 a = b --> dsize (%n::nat. COND (n = (0::nat)) a b) = (0::nat)" |
13546 a = b --> dsize (%n::nat. COND (n = 0) a b) = 0" |
13356 by (import hollight DIVISION_0) |
13547 by (import hollight DIVISION_0) |
13357 |
13548 |
13358 lemma DIVISION_1: "ALL (a::hollight.real) b::hollight.real. |
13549 lemma DIVISION_1: "ALL (a::hollight.real) b::hollight.real. |
13359 real_lt a b --> |
13550 real_lt a b --> dsize (%n::nat. COND (n = 0) a b) = NUMERAL_BIT1 0" |
13360 dsize (%n::nat. COND (n = (0::nat)) a b) = NUMERAL_BIT1 (0::nat)" |
|
13361 by (import hollight DIVISION_1) |
13551 by (import hollight DIVISION_1) |
13362 |
13552 |
13363 lemma DIVISION_SINGLE: "ALL (a::hollight.real) b::hollight.real. |
13553 lemma DIVISION_SINGLE: "ALL (a::hollight.real) b::hollight.real. |
13364 real_le a b --> division (a, b) (%n::nat. COND (n = (0::nat)) a b)" |
13554 real_le a b --> division (a, b) (%n::nat. COND (n = 0) a b)" |
13365 by (import hollight DIVISION_SINGLE) |
13555 by (import hollight DIVISION_SINGLE) |
13366 |
13556 |
13367 lemma DIVISION_LHS: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13557 lemma DIVISION_LHS: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13368 division (a, b) D --> D (0::nat) = a" |
13558 division (a, b) D --> D 0 = a" |
13369 by (import hollight DIVISION_LHS) |
13559 by (import hollight DIVISION_LHS) |
13370 |
13560 |
13371 lemma DIVISION_THM: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13561 lemma DIVISION_THM: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13372 division (a, b) D = |
13562 division (a, b) D = |
13373 (D (0::nat) = a & |
13563 (D 0 = a & |
13374 (ALL n::nat. < n (dsize D) --> real_lt (D n) (D (Suc n))) & |
13564 (ALL n::nat. < n (dsize D) --> real_lt (D n) (D (Suc n))) & |
13375 (ALL n::nat. >= n (dsize D) --> D n = b))" |
13565 (ALL n::nat. >= n (dsize D) --> D n = b))" |
13376 by (import hollight DIVISION_THM) |
13566 by (import hollight DIVISION_THM) |
13377 |
13567 |
13378 lemma DIVISION_RHS: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13568 lemma DIVISION_RHS: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13384 division (a, b) D & < m n & <= n (dsize D) --> real_lt (D m) (D n)" |
13574 division (a, b) D & < m n & <= n (dsize D) --> real_lt (D m) (D n)" |
13385 by (import hollight DIVISION_LT_GEN) |
13575 by (import hollight DIVISION_LT_GEN) |
13386 |
13576 |
13387 lemma DIVISION_LT: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13577 lemma DIVISION_LT: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13388 division (a, b) D --> |
13578 division (a, b) D --> |
13389 (ALL n::nat. < n (dsize D) --> real_lt (D (0::nat)) (D (Suc n)))" |
13579 (ALL n::nat. < n (dsize D) --> real_lt (D 0) (D (Suc n)))" |
13390 by (import hollight DIVISION_LT) |
13580 by (import hollight DIVISION_LT) |
13391 |
13581 |
13392 lemma DIVISION_LE: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13582 lemma DIVISION_LE: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13393 division (a, b) D --> real_le a b" |
13583 division (a, b) D --> real_le a b" |
13394 by (import hollight DIVISION_LE) |
13584 by (import hollight DIVISION_LE) |
13397 division (a, b) D --> |
13587 division (a, b) D --> |
13398 (ALL n::nat. < n (dsize D) --> real_lt (D n) (D (dsize D)))" |
13588 (ALL n::nat. < n (dsize D) --> real_lt (D n) (D (dsize D)))" |
13399 by (import hollight DIVISION_GT) |
13589 by (import hollight DIVISION_GT) |
13400 |
13590 |
13401 lemma DIVISION_EQ: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13591 lemma DIVISION_EQ: "ALL (D::nat => hollight.real) (a::hollight.real) b::hollight.real. |
13402 division (a, b) D --> (a = b) = (dsize D = (0::nat))" |
13592 division (a, b) D --> (a = b) = (dsize D = 0)" |
13403 by (import hollight DIVISION_EQ) |
13593 by (import hollight DIVISION_EQ) |
13404 |
13594 |
13405 lemma DIVISION_LBOUND: "ALL (x::nat => hollight.real) (xa::hollight.real) (xb::hollight.real) |
13595 lemma DIVISION_LBOUND: "ALL (x::nat => hollight.real) (xa::hollight.real) (xb::hollight.real) |
13406 xc::nat. division (xa, xb) x --> real_le xa (x xc)" |
13596 xc::nat. division (xa, xb) x --> real_le xa (x xc)" |
13407 by (import hollight DIVISION_LBOUND) |
13597 by (import hollight DIVISION_LBOUND) |
13408 |
13598 |
13409 lemma DIVISION_LBOUND_LT: "ALL (x::nat => hollight.real) (xa::hollight.real) (xb::hollight.real) |
13599 lemma DIVISION_LBOUND_LT: "ALL (x::nat => hollight.real) (xa::hollight.real) (xb::hollight.real) |
13410 xc::nat. |
13600 xc::nat. division (xa, xb) x & dsize x ~= 0 --> real_lt xa (x (Suc xc))" |
13411 division (xa, xb) x & dsize x ~= (0::nat) --> real_lt xa (x (Suc xc))" |
|
13412 by (import hollight DIVISION_LBOUND_LT) |
13601 by (import hollight DIVISION_LBOUND_LT) |
13413 |
13602 |
13414 lemma DIVISION_UBOUND: "ALL (x::nat => hollight.real) (xa::hollight.real) (xb::hollight.real) |
13603 lemma DIVISION_UBOUND: "ALL (x::nat => hollight.real) (xa::hollight.real) (xb::hollight.real) |
13415 xc::nat. division (xa, xb) x --> real_le (x xc) xb" |
13604 xc::nat. division (xa, xb) x --> real_le (x xc) xb" |
13416 by (import hollight DIVISION_UBOUND) |
13605 by (import hollight DIVISION_UBOUND) |
13476 k2::hollight.real. |
13665 k2::hollight.real. |
13477 real_le a b & defint (a, b) f k1 & defint (a, b) f k2 --> k1 = k2" |
13666 real_le a b & defint (a, b) f k1 & defint (a, b) f k2 --> k1 = k2" |
13478 by (import hollight DINT_UNIQ) |
13667 by (import hollight DINT_UNIQ) |
13479 |
13668 |
13480 lemma INTEGRAL_NULL: "ALL (f::hollight.real => hollight.real) a::hollight.real. |
13669 lemma INTEGRAL_NULL: "ALL (f::hollight.real => hollight.real) a::hollight.real. |
13481 defint (a, a) f (real_of_num (0::nat))" |
13670 defint (a, a) f (real_of_num 0)" |
13482 by (import hollight INTEGRAL_NULL) |
13671 by (import hollight INTEGRAL_NULL) |
13483 |
13672 |
13484 lemma STRADDLE_LEMMA: "ALL (f::hollight.real => hollight.real) (f'::hollight.real => hollight.real) |
13673 lemma STRADDLE_LEMMA: "ALL (f::hollight.real => hollight.real) (f'::hollight.real => hollight.real) |
13485 (a::hollight.real) (b::hollight.real) e::hollight.real. |
13674 (a::hollight.real) (b::hollight.real) e::hollight.real. |
13486 (ALL x::hollight.real. real_le a x & real_le x b --> diffl f (f' x) x) & |
13675 (ALL x::hollight.real. real_le a x & real_le x b --> diffl f (f' x) x) & |
13487 real_lt (real_of_num (0::nat)) e --> |
13676 real_lt (real_of_num 0) e --> |
13488 (EX x::hollight.real => hollight.real. |
13677 (EX x::hollight.real => hollight.real. |
13489 gauge (%x::hollight.real. real_le a x & real_le x b) x & |
13678 gauge (%x::hollight.real. real_le a x & real_le x b) x & |
13490 (ALL (xa::hollight.real) (u::hollight.real) v::hollight.real. |
13679 (ALL (xa::hollight.real) (u::hollight.real) v::hollight.real. |
13491 real_le a u & |
13680 real_le a u & |
13492 real_le u xa & |
13681 real_le u xa & |
13506 defint (a, b) f' (real_sub (f b) (f a))" |
13695 defint (a, b) f' (real_sub (f b) (f a))" |
13507 by (import hollight FTC1) |
13696 by (import hollight FTC1) |
13508 |
13697 |
13509 lemma MCLAURIN: "ALL (f::hollight.real => hollight.real) |
13698 lemma MCLAURIN: "ALL (f::hollight.real => hollight.real) |
13510 (diff::nat => hollight.real => hollight.real) (h::hollight.real) n::nat. |
13699 (diff::nat => hollight.real => hollight.real) (h::hollight.real) n::nat. |
13511 real_lt (real_of_num (0::nat)) h & |
13700 real_lt (real_of_num 0) h & |
13512 < (0::nat) n & |
13701 < 0 n & |
13513 diff (0::nat) = f & |
13702 diff 0 = f & |
13514 (ALL (m::nat) t::hollight.real. |
13703 (ALL (m::nat) t::hollight.real. |
13515 < m n & real_le (real_of_num (0::nat)) t & real_le t h --> |
13704 < m n & real_le (real_of_num 0) t & real_le t h --> |
13516 diffl (diff m) (diff (Suc m) t) t) --> |
13705 diffl (diff m) (diff (Suc m) t) t) --> |
13517 (EX t::hollight.real. |
13706 (EX t::hollight.real. |
13518 real_lt (real_of_num (0::nat)) t & |
13707 real_lt (real_of_num 0) t & |
13519 real_lt t h & |
13708 real_lt t h & |
13520 f h = |
13709 f h = |
13521 real_add |
13710 real_add |
13522 (psum (0::nat, n) |
13711 (psum (0, n) |
13523 (%m::nat. |
13712 (%m::nat. |
13524 real_mul |
13713 real_mul |
13525 (real_div (diff m (real_of_num (0::nat))) |
13714 (real_div (diff m (real_of_num 0)) (real_of_num (FACT m))) |
13526 (real_of_num (FACT m))) |
|
13527 (real_pow h m))) |
13715 (real_pow h m))) |
13528 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13716 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13529 (real_pow h n)))" |
13717 (real_pow h n)))" |
13530 by (import hollight MCLAURIN) |
13718 by (import hollight MCLAURIN) |
13531 |
13719 |
13532 lemma MCLAURIN_NEG: "ALL (f::hollight.real => hollight.real) |
13720 lemma MCLAURIN_NEG: "ALL (f::hollight.real => hollight.real) |
13533 (diff::nat => hollight.real => hollight.real) (h::hollight.real) n::nat. |
13721 (diff::nat => hollight.real => hollight.real) (h::hollight.real) n::nat. |
13534 real_lt h (real_of_num (0::nat)) & |
13722 real_lt h (real_of_num 0) & |
13535 < (0::nat) n & |
13723 < 0 n & |
13536 diff (0::nat) = f & |
13724 diff 0 = f & |
13537 (ALL (m::nat) t::hollight.real. |
13725 (ALL (m::nat) t::hollight.real. |
13538 < m n & real_le h t & real_le t (real_of_num (0::nat)) --> |
13726 < m n & real_le h t & real_le t (real_of_num 0) --> |
13539 diffl (diff m) (diff (Suc m) t) t) --> |
13727 diffl (diff m) (diff (Suc m) t) t) --> |
13540 (EX t::hollight.real. |
13728 (EX t::hollight.real. |
13541 real_lt h t & |
13729 real_lt h t & |
13542 real_lt t (real_of_num (0::nat)) & |
13730 real_lt t (real_of_num 0) & |
13543 f h = |
13731 f h = |
13544 real_add |
13732 real_add |
13545 (psum (0::nat, n) |
13733 (psum (0, n) |
13546 (%m::nat. |
13734 (%m::nat. |
13547 real_mul |
13735 real_mul |
13548 (real_div (diff m (real_of_num (0::nat))) |
13736 (real_div (diff m (real_of_num 0)) (real_of_num (FACT m))) |
13549 (real_of_num (FACT m))) |
|
13550 (real_pow h m))) |
13737 (real_pow h m))) |
13551 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13738 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13552 (real_pow h n)))" |
13739 (real_pow h n)))" |
13553 by (import hollight MCLAURIN_NEG) |
13740 by (import hollight MCLAURIN_NEG) |
13554 |
13741 |
13555 lemma MCLAURIN_BI_LE: "ALL (f::hollight.real => hollight.real) |
13742 lemma MCLAURIN_BI_LE: "ALL (f::hollight.real => hollight.real) |
13556 (diff::nat => hollight.real => hollight.real) (x::hollight.real) n::nat. |
13743 (diff::nat => hollight.real => hollight.real) (x::hollight.real) n::nat. |
13557 diff (0::nat) = f & |
13744 diff 0 = f & |
13558 (ALL (m::nat) t::hollight.real. |
13745 (ALL (m::nat) t::hollight.real. |
13559 < m n & real_le (real_abs t) (real_abs x) --> |
13746 < m n & real_le (real_abs t) (real_abs x) --> |
13560 diffl (diff m) (diff (Suc m) t) t) --> |
13747 diffl (diff m) (diff (Suc m) t) t) --> |
13561 (EX xa::hollight.real. |
13748 (EX xa::hollight.real. |
13562 real_le (real_abs xa) (real_abs x) & |
13749 real_le (real_abs xa) (real_abs x) & |
13563 f x = |
13750 f x = |
13564 real_add |
13751 real_add |
13565 (psum (0::nat, n) |
13752 (psum (0, n) |
13566 (%m::nat. |
13753 (%m::nat. |
13567 real_mul |
13754 real_mul |
13568 (real_div (diff m (real_of_num (0::nat))) |
13755 (real_div (diff m (real_of_num 0)) (real_of_num (FACT m))) |
13569 (real_of_num (FACT m))) |
|
13570 (real_pow x m))) |
13756 (real_pow x m))) |
13571 (real_mul (real_div (diff n xa) (real_of_num (FACT n))) |
13757 (real_mul (real_div (diff n xa) (real_of_num (FACT n))) |
13572 (real_pow x n)))" |
13758 (real_pow x n)))" |
13573 by (import hollight MCLAURIN_BI_LE) |
13759 by (import hollight MCLAURIN_BI_LE) |
13574 |
13760 |
13575 lemma MCLAURIN_ALL_LT: "ALL (f::hollight.real => hollight.real) |
13761 lemma MCLAURIN_ALL_LT: "ALL (f::hollight.real => hollight.real) |
13576 diff::nat => hollight.real => hollight.real. |
13762 diff::nat => hollight.real => hollight.real. |
13577 diff (0::nat) = f & |
13763 diff 0 = f & |
13578 (ALL (m::nat) x::hollight.real. diffl (diff m) (diff (Suc m) x) x) --> |
13764 (ALL (m::nat) x::hollight.real. diffl (diff m) (diff (Suc m) x) x) --> |
13579 (ALL (x::hollight.real) n::nat. |
13765 (ALL (x::hollight.real) n::nat. |
13580 x ~= real_of_num (0::nat) & < (0::nat) n --> |
13766 x ~= real_of_num 0 & < 0 n --> |
13581 (EX t::hollight.real. |
13767 (EX t::hollight.real. |
13582 real_lt (real_of_num (0::nat)) (real_abs t) & |
13768 real_lt (real_of_num 0) (real_abs t) & |
13583 real_lt (real_abs t) (real_abs x) & |
13769 real_lt (real_abs t) (real_abs x) & |
13584 f x = |
13770 f x = |
13585 real_add |
13771 real_add |
13586 (psum (0::nat, n) |
13772 (psum (0, n) |
13587 (%m::nat. |
13773 (%m::nat. |
13588 real_mul |
13774 real_mul |
13589 (real_div (diff m (real_of_num (0::nat))) |
13775 (real_div (diff m (real_of_num 0)) |
13590 (real_of_num (FACT m))) |
13776 (real_of_num (FACT m))) |
13591 (real_pow x m))) |
13777 (real_pow x m))) |
13592 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13778 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13593 (real_pow x n))))" |
13779 (real_pow x n))))" |
13594 by (import hollight MCLAURIN_ALL_LT) |
13780 by (import hollight MCLAURIN_ALL_LT) |
13595 |
13781 |
13596 lemma MCLAURIN_ZERO: "ALL (diff::nat => hollight.real => hollight.real) (n::nat) x::hollight.real. |
13782 lemma MCLAURIN_ZERO: "ALL (diff::nat => hollight.real => hollight.real) (n::nat) x::hollight.real. |
13597 x = real_of_num (0::nat) & < (0::nat) n --> |
13783 x = real_of_num 0 & < 0 n --> |
13598 psum (0::nat, n) |
13784 psum (0, n) |
13599 (%m::nat. |
13785 (%m::nat. |
13600 real_mul |
13786 real_mul (real_div (diff m (real_of_num 0)) (real_of_num (FACT m))) |
13601 (real_div (diff m (real_of_num (0::nat))) (real_of_num (FACT m))) |
|
13602 (real_pow x m)) = |
13787 (real_pow x m)) = |
13603 diff (0::nat) (real_of_num (0::nat))" |
13788 diff 0 (real_of_num 0)" |
13604 by (import hollight MCLAURIN_ZERO) |
13789 by (import hollight MCLAURIN_ZERO) |
13605 |
13790 |
13606 lemma MCLAURIN_ALL_LE: "ALL (f::hollight.real => hollight.real) |
13791 lemma MCLAURIN_ALL_LE: "ALL (f::hollight.real => hollight.real) |
13607 diff::nat => hollight.real => hollight.real. |
13792 diff::nat => hollight.real => hollight.real. |
13608 diff (0::nat) = f & |
13793 diff 0 = f & |
13609 (ALL (m::nat) x::hollight.real. diffl (diff m) (diff (Suc m) x) x) --> |
13794 (ALL (m::nat) x::hollight.real. diffl (diff m) (diff (Suc m) x) x) --> |
13610 (ALL (x::hollight.real) n::nat. |
13795 (ALL (x::hollight.real) n::nat. |
13611 EX t::hollight.real. |
13796 EX t::hollight.real. |
13612 real_le (real_abs t) (real_abs x) & |
13797 real_le (real_abs t) (real_abs x) & |
13613 f x = |
13798 f x = |
13614 real_add |
13799 real_add |
13615 (psum (0::nat, n) |
13800 (psum (0, n) |
13616 (%m::nat. |
13801 (%m::nat. |
13617 real_mul |
13802 real_mul |
13618 (real_div (diff m (real_of_num (0::nat))) |
13803 (real_div (diff m (real_of_num 0)) (real_of_num (FACT m))) |
13619 (real_of_num (FACT m))) |
|
13620 (real_pow x m))) |
13804 (real_pow x m))) |
13621 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13805 (real_mul (real_div (diff n t) (real_of_num (FACT n))) |
13622 (real_pow x n)))" |
13806 (real_pow x n)))" |
13623 by (import hollight MCLAURIN_ALL_LE) |
13807 by (import hollight MCLAURIN_ALL_LE) |
13624 |
13808 |
13625 lemma MCLAURIN_EXP_LEMMA: "exp = exp & (ALL (x::nat) xa::hollight.real. diffl exp (exp xa) xa)" |
13809 lemma MCLAURIN_EXP_LEMMA: "exp = exp & (ALL (x::nat) xa::hollight.real. diffl exp (exp xa) xa)" |
13626 by (import hollight MCLAURIN_EXP_LEMMA) |
13810 by (import hollight MCLAURIN_EXP_LEMMA) |
13627 |
13811 |
13628 lemma MCLAURIN_EXP_LT: "ALL (x::hollight.real) n::nat. |
13812 lemma MCLAURIN_EXP_LT: "ALL (x::hollight.real) n::nat. |
13629 x ~= real_of_num (0::nat) & < (0::nat) n --> |
13813 x ~= real_of_num 0 & < 0 n --> |
13630 (EX t::hollight.real. |
13814 (EX t::hollight.real. |
13631 real_lt (real_of_num (0::nat)) (real_abs t) & |
13815 real_lt (real_of_num 0) (real_abs t) & |
13632 real_lt (real_abs t) (real_abs x) & |
13816 real_lt (real_abs t) (real_abs x) & |
13633 exp x = |
13817 exp x = |
13634 real_add |
13818 real_add |
13635 (psum (0::nat, n) |
13819 (psum (0, n) |
13636 (%m::nat. real_div (real_pow x m) (real_of_num (FACT m)))) |
13820 (%m::nat. real_div (real_pow x m) (real_of_num (FACT m)))) |
13637 (real_mul (real_div (exp t) (real_of_num (FACT n))) (real_pow x n)))" |
13821 (real_mul (real_div (exp t) (real_of_num (FACT n))) (real_pow x n)))" |
13638 by (import hollight MCLAURIN_EXP_LT) |
13822 by (import hollight MCLAURIN_EXP_LT) |
13639 |
13823 |
13640 lemma MCLAURIN_EXP_LE: "ALL (x::hollight.real) n::nat. |
13824 lemma MCLAURIN_EXP_LE: "ALL (x::hollight.real) n::nat. |
13641 EX t::hollight.real. |
13825 EX t::hollight.real. |
13642 real_le (real_abs t) (real_abs x) & |
13826 real_le (real_abs t) (real_abs x) & |
13643 exp x = |
13827 exp x = |
13644 real_add |
13828 real_add |
13645 (psum (0::nat, n) |
13829 (psum (0, n) |
13646 (%m::nat. real_div (real_pow x m) (real_of_num (FACT m)))) |
13830 (%m::nat. real_div (real_pow x m) (real_of_num (FACT m)))) |
13647 (real_mul (real_div (exp t) (real_of_num (FACT n))) (real_pow x n))" |
13831 (real_mul (real_div (exp t) (real_of_num (FACT n))) (real_pow x n))" |
13648 by (import hollight MCLAURIN_EXP_LE) |
13832 by (import hollight MCLAURIN_EXP_LE) |
13649 |
13833 |
13650 lemma DIFF_LN_COMPOSITE: "ALL (g::hollight.real => hollight.real) (m::hollight.real) x::hollight.real. |
13834 lemma DIFF_LN_COMPOSITE: "ALL (g::hollight.real => hollight.real) (m::hollight.real) x::hollight.real. |
13651 diffl g m x & real_lt (real_of_num (0::nat)) (g x) --> |
13835 diffl g m x & real_lt (real_of_num 0) (g x) --> |
13652 diffl (%x::hollight.real. ln (g x)) (real_mul (real_inv (g x)) m) x" |
13836 diffl (%x::hollight.real. ln (g x)) (real_mul (real_inv (g x)) m) x" |
13653 by (import hollight DIFF_LN_COMPOSITE) |
13837 by (import hollight DIFF_LN_COMPOSITE) |
13654 |
13838 |
13655 lemma MCLAURIN_LN_POS: "ALL (x::hollight.real) n::nat. |
13839 lemma MCLAURIN_LN_POS: "ALL (x::hollight.real) n::nat. |
13656 real_lt (real_of_num (0::nat)) x & < (0::nat) n --> |
13840 real_lt (real_of_num 0) x & < 0 n --> |
13657 (EX t::hollight.real. |
13841 (EX t::hollight.real. |
13658 real_lt (real_of_num (0::nat)) t & |
13842 real_lt (real_of_num 0) t & |
13659 real_lt t x & |
13843 real_lt t x & |
13660 ln (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) x) = |
13844 ln (real_add (real_of_num (NUMERAL_BIT1 0)) x) = |
13661 real_add |
13845 real_add |
13662 (psum (0::nat, n) |
13846 (psum (0, n) |
13663 (%m::nat. |
13847 (%m::nat. |
13664 real_mul |
13848 real_mul |
13665 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13849 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) (Suc m)) |
13666 (Suc m)) |
|
13667 (real_div (real_pow x m) (real_of_num m)))) |
13850 (real_div (real_pow x m) (real_of_num m)))) |
13668 (real_mul |
13851 (real_mul |
13669 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13852 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) (Suc n)) |
13670 (Suc n)) |
|
13671 (real_div (real_pow x n) |
13853 (real_div (real_pow x n) |
13672 (real_mul (real_of_num n) |
13854 (real_mul (real_of_num n) |
13673 (real_pow (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) t) |
13855 (real_pow (real_add (real_of_num (NUMERAL_BIT1 0)) t) n)))))" |
13674 n)))))" |
|
13675 by (import hollight MCLAURIN_LN_POS) |
13856 by (import hollight MCLAURIN_LN_POS) |
13676 |
13857 |
13677 lemma MCLAURIN_LN_NEG: "ALL (x::hollight.real) n::nat. |
13858 lemma MCLAURIN_LN_NEG: "ALL (x::hollight.real) n::nat. |
13678 real_lt (real_of_num (0::nat)) x & |
13859 real_lt (real_of_num 0) x & |
13679 real_lt x (real_of_num (NUMERAL_BIT1 (0::nat))) & < (0::nat) n --> |
13860 real_lt x (real_of_num (NUMERAL_BIT1 0)) & < 0 n --> |
13680 (EX t::hollight.real. |
13861 (EX t::hollight.real. |
13681 real_lt (real_of_num (0::nat)) t & |
13862 real_lt (real_of_num 0) t & |
13682 real_lt t x & |
13863 real_lt t x & |
13683 real_neg (ln (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) x)) = |
13864 real_neg (ln (real_sub (real_of_num (NUMERAL_BIT1 0)) x)) = |
13684 real_add |
13865 real_add |
13685 (psum (0::nat, n) |
13866 (psum (0, n) (%m::nat. real_div (real_pow x m) (real_of_num m))) |
13686 (%m::nat. real_div (real_pow x m) (real_of_num m))) |
|
13687 (real_div (real_pow x n) |
13867 (real_div (real_pow x n) |
13688 (real_mul (real_of_num n) |
13868 (real_mul (real_of_num n) |
13689 (real_pow (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) t) |
13869 (real_pow (real_sub (real_of_num (NUMERAL_BIT1 0)) t) n))))" |
13690 n))))" |
|
13691 by (import hollight MCLAURIN_LN_NEG) |
13870 by (import hollight MCLAURIN_LN_NEG) |
13692 |
13871 |
13693 lemma MCLAURIN_SIN: "ALL (x::hollight.real) n::nat. |
13872 lemma MCLAURIN_SIN: "ALL (x::hollight.real) n::nat. |
13694 real_le |
13873 real_le |
13695 (real_abs |
13874 (real_abs |
13696 (real_sub (sin x) |
13875 (real_sub (sin x) |
13697 (psum (0::nat, n) |
13876 (psum (0, n) |
13698 (%m::nat. |
13877 (%m::nat. |
13699 real_mul |
13878 real_mul |
13700 (COND (EVEN m) (real_of_num (0::nat)) |
13879 (COND (EVEN m) (real_of_num 0) |
13701 (real_div |
13880 (real_div |
13702 (real_pow |
13881 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13703 (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13882 (DIV (m - NUMERAL_BIT1 0) |
13704 (DIV (m - NUMERAL_BIT1 (0::nat)) |
13883 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13705 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
13706 (real_of_num (FACT m)))) |
13884 (real_of_num (FACT m)))) |
13707 (real_pow x m))))) |
13885 (real_pow x m))))) |
13708 (real_mul (real_inv (real_of_num (FACT n))) (real_pow (real_abs x) n))" |
13886 (real_mul (real_inv (real_of_num (FACT n))) (real_pow (real_abs x) n))" |
13709 by (import hollight MCLAURIN_SIN) |
13887 by (import hollight MCLAURIN_SIN) |
13710 |
13888 |
13711 lemma MCLAURIN_COS: "ALL (x::hollight.real) n::nat. |
13889 lemma MCLAURIN_COS: "ALL (x::hollight.real) n::nat. |
13712 real_le |
13890 real_le |
13713 (real_abs |
13891 (real_abs |
13714 (real_sub (cos x) |
13892 (real_sub (cos x) |
13715 (psum (0::nat, n) |
13893 (psum (0, n) |
13716 (%m::nat. |
13894 (%m::nat. |
13717 real_mul |
13895 real_mul |
13718 (COND (EVEN m) |
13896 (COND (EVEN m) |
13719 (real_div |
13897 (real_div |
13720 (real_pow |
13898 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13721 (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13899 (DIV m (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13722 (DIV m (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
13723 (real_of_num (FACT m))) |
13900 (real_of_num (FACT m))) |
13724 (real_of_num (0::nat))) |
13901 (real_of_num 0)) |
13725 (real_pow x m))))) |
13902 (real_pow x m))))) |
13726 (real_mul (real_inv (real_of_num (FACT n))) (real_pow (real_abs x) n))" |
13903 (real_mul (real_inv (real_of_num (FACT n))) (real_pow (real_abs x) n))" |
13727 by (import hollight MCLAURIN_COS) |
13904 by (import hollight MCLAURIN_COS) |
13728 |
13905 |
13729 lemma REAL_ATN_POWSER_SUMMABLE: "ALL x::hollight.real. |
13906 lemma REAL_ATN_POWSER_SUMMABLE: "ALL x::hollight.real. |
13730 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13907 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13731 summable |
13908 summable |
13732 (%n::nat. |
13909 (%n::nat. |
13733 real_mul |
13910 real_mul |
13734 (COND (EVEN n) (real_of_num (0::nat)) |
13911 (COND (EVEN n) (real_of_num 0) |
13735 (real_div |
13912 (real_div |
13736 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13913 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13737 (DIV (n - NUMERAL_BIT1 (0::nat)) |
13914 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13738 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
13739 (real_of_num n))) |
13915 (real_of_num n))) |
13740 (real_pow x n))" |
13916 (real_pow x n))" |
13741 by (import hollight REAL_ATN_POWSER_SUMMABLE) |
13917 by (import hollight REAL_ATN_POWSER_SUMMABLE) |
13742 |
13918 |
13743 lemma REAL_ATN_POWSER_DIFFS_SUMMABLE: "ALL x::hollight.real. |
13919 lemma REAL_ATN_POWSER_DIFFS_SUMMABLE: "ALL x::hollight.real. |
13744 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13920 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13745 summable |
13921 summable |
13746 (%xa::nat. |
13922 (%xa::nat. |
13747 real_mul |
13923 real_mul |
13748 (diffs |
13924 (diffs |
13749 (%n::nat. |
13925 (%n::nat. |
13750 COND (EVEN n) (real_of_num (0::nat)) |
13926 COND (EVEN n) (real_of_num 0) |
13751 (real_div |
13927 (real_div |
13752 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13928 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13753 (DIV (n - NUMERAL_BIT1 (0::nat)) |
13929 (DIV (n - NUMERAL_BIT1 0) |
13754 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
13930 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13755 (real_of_num n))) |
13931 (real_of_num n))) |
13756 xa) |
13932 xa) |
13757 (real_pow x xa))" |
13933 (real_pow x xa))" |
13758 by (import hollight REAL_ATN_POWSER_DIFFS_SUMMABLE) |
13934 by (import hollight REAL_ATN_POWSER_DIFFS_SUMMABLE) |
13759 |
13935 |
13760 lemma REAL_ATN_POWSER_DIFFS_SUM: "ALL x::hollight.real. |
13936 lemma REAL_ATN_POWSER_DIFFS_SUM: "ALL x::hollight.real. |
13761 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13937 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13762 sums |
13938 sums |
13763 (%n::nat. |
13939 (%n::nat. |
13764 real_mul |
13940 real_mul |
13765 (diffs |
13941 (diffs |
13766 (%n::nat. |
13942 (%n::nat. |
13767 COND (EVEN n) (real_of_num (0::nat)) |
13943 COND (EVEN n) (real_of_num 0) |
13768 (real_div |
13944 (real_div |
13769 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13945 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13770 (DIV (n - NUMERAL_BIT1 (0::nat)) |
13946 (DIV (n - NUMERAL_BIT1 0) |
13771 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
13947 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13772 (real_of_num n))) |
13948 (real_of_num n))) |
13773 n) |
13949 n) |
13774 (real_pow x n)) |
13950 (real_pow x n)) |
13775 (real_inv |
13951 (real_inv |
13776 (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
13952 (real_add (real_of_num (NUMERAL_BIT1 0)) |
13777 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))))" |
13953 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0)))))" |
13778 by (import hollight REAL_ATN_POWSER_DIFFS_SUM) |
13954 by (import hollight REAL_ATN_POWSER_DIFFS_SUM) |
13779 |
13955 |
13780 lemma REAL_ATN_POWSER_DIFFS_DIFFS_SUMMABLE: "ALL x::hollight.real. |
13956 lemma REAL_ATN_POWSER_DIFFS_DIFFS_SUMMABLE: "ALL x::hollight.real. |
13781 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13957 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13782 summable |
13958 summable |
13783 (%xa::nat. |
13959 (%xa::nat. |
13784 real_mul |
13960 real_mul |
13785 (diffs |
13961 (diffs |
13786 (diffs |
13962 (diffs |
13787 (%n::nat. |
13963 (%n::nat. |
13788 COND (EVEN n) (real_of_num (0::nat)) |
13964 COND (EVEN n) (real_of_num 0) |
13789 (real_div |
13965 (real_div |
13790 (real_pow |
13966 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13791 (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13967 (DIV (n - NUMERAL_BIT1 0) |
13792 (DIV (n - NUMERAL_BIT1 (0::nat)) |
13968 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13793 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
13794 (real_of_num n)))) |
13969 (real_of_num n)))) |
13795 xa) |
13970 xa) |
13796 (real_pow x xa))" |
13971 (real_pow x xa))" |
13797 by (import hollight REAL_ATN_POWSER_DIFFS_DIFFS_SUMMABLE) |
13972 by (import hollight REAL_ATN_POWSER_DIFFS_DIFFS_SUMMABLE) |
13798 |
13973 |
13799 lemma REAL_ATN_POWSER_DIFFL: "ALL x::hollight.real. |
13974 lemma REAL_ATN_POWSER_DIFFL: "ALL x::hollight.real. |
13800 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13975 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13801 diffl |
13976 diffl |
13802 (%x::hollight.real. |
13977 (%x::hollight.real. |
13803 suminf |
13978 suminf |
13804 (%n::nat. |
13979 (%n::nat. |
13805 real_mul |
13980 real_mul |
13806 (COND (EVEN n) (real_of_num (0::nat)) |
13981 (COND (EVEN n) (real_of_num 0) |
13807 (real_div |
13982 (real_div |
13808 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
13983 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13809 (DIV (n - NUMERAL_BIT1 (0::nat)) |
13984 (DIV (n - NUMERAL_BIT1 0) |
13810 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
13985 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13811 (real_of_num n))) |
13986 (real_of_num n))) |
13812 (real_pow x n))) |
13987 (real_pow x n))) |
13813 (real_inv |
13988 (real_inv |
13814 (real_add (real_of_num (NUMERAL_BIT1 (0::nat))) |
13989 (real_add (real_of_num (NUMERAL_BIT1 0)) |
13815 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat)))))) |
13990 (real_pow x (NUMERAL_BIT0 (NUMERAL_BIT1 0))))) |
13816 x" |
13991 x" |
13817 by (import hollight REAL_ATN_POWSER_DIFFL) |
13992 by (import hollight REAL_ATN_POWSER_DIFFL) |
13818 |
13993 |
13819 lemma REAL_ATN_POWSER: "ALL x::hollight.real. |
13994 lemma REAL_ATN_POWSER: "ALL x::hollight.real. |
13820 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
13995 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13821 sums |
13996 sums |
13822 (%n::nat. |
13997 (%n::nat. |
13823 real_mul |
13998 real_mul |
13824 (COND (EVEN n) (real_of_num (0::nat)) |
13999 (COND (EVEN n) (real_of_num 0) |
13825 (real_div |
14000 (real_div |
13826 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
14001 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13827 (DIV (n - NUMERAL_BIT1 (0::nat)) |
14002 (DIV (n - NUMERAL_BIT1 0) (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13828 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
13829 (real_of_num n))) |
14003 (real_of_num n))) |
13830 (real_pow x n)) |
14004 (real_pow x n)) |
13831 (atn x)" |
14005 (atn x)" |
13832 by (import hollight REAL_ATN_POWSER) |
14006 by (import hollight REAL_ATN_POWSER) |
13833 |
14007 |
13834 lemma MCLAURIN_ATN: "ALL (x::hollight.real) n::nat. |
14008 lemma MCLAURIN_ATN: "ALL (x::hollight.real) n::nat. |
13835 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 (0::nat))) --> |
14009 real_lt (real_abs x) (real_of_num (NUMERAL_BIT1 0)) --> |
13836 real_le |
14010 real_le |
13837 (real_abs |
14011 (real_abs |
13838 (real_sub (atn x) |
14012 (real_sub (atn x) |
13839 (psum (0::nat, n) |
14013 (psum (0, n) |
13840 (%m::nat. |
14014 (%m::nat. |
13841 real_mul |
14015 real_mul |
13842 (COND (EVEN m) (real_of_num (0::nat)) |
14016 (COND (EVEN m) (real_of_num 0) |
13843 (real_div |
14017 (real_div |
13844 (real_pow |
14018 (real_pow (real_neg (real_of_num (NUMERAL_BIT1 0))) |
13845 (real_neg (real_of_num (NUMERAL_BIT1 (0::nat)))) |
14019 (DIV (m - NUMERAL_BIT1 0) |
13846 (DIV (m - NUMERAL_BIT1 (0::nat)) |
14020 (NUMERAL_BIT0 (NUMERAL_BIT1 0)))) |
13847 (NUMERAL_BIT0 (NUMERAL_BIT1 (0::nat))))) |
|
13848 (real_of_num m))) |
14021 (real_of_num m))) |
13849 (real_pow x m))))) |
14022 (real_pow x m))))) |
13850 (real_div (real_pow (real_abs x) n) |
14023 (real_div (real_pow (real_abs x) n) |
13851 (real_sub (real_of_num (NUMERAL_BIT1 (0::nat))) (real_abs x)))" |
14024 (real_sub (real_of_num (NUMERAL_BIT1 0)) (real_abs x)))" |
13852 by (import hollight MCLAURIN_ATN) |
14025 by (import hollight MCLAURIN_ATN) |
13853 |
14026 |
13854 ;end_setup |
14027 ;end_setup |
13855 |
14028 |
13856 end |
14029 end |