# HG changeset patch # User obua # Date 1127906243 -7200 # Node ID b7870c2bd7dfe2ecec4ee38ec883c745e66a34db # Parent 541f6367a431523f8eebd982edde6fd7b9f28124 mapped "-->" to "hol4-->" diff -r 541f6367a431 -r b7870c2bd7df src/HOL/Import/Generate-HOL/GenHOL4Real.thy --- a/src/HOL/Import/Generate-HOL/GenHOL4Real.thy Wed Sep 28 11:50:15 2005 +0200 +++ b/src/HOL/Import/Generate-HOL/GenHOL4Real.thy Wed Sep 28 13:17:23 2005 +0200 @@ -67,6 +67,9 @@ end_import; import_theory seq; +const_renames +"-->" > "hol4-->"; + end_import; import_theory lim; diff -r 541f6367a431 -r b7870c2bd7df src/HOL/Import/HOL/HOL4Prob.thy --- a/src/HOL/Import/HOL/HOL4Prob.thy Wed Sep 28 11:50:15 2005 +0200 +++ b/src/HOL/Import/HOL/HOL4Prob.thy Wed Sep 28 13:17:23 2005 +0200 @@ -19,42 +19,8 @@ lemma DIV_THEN_MULT: "ALL (p::nat) q::nat. Suc q * (p div Suc q) <= p" by (import prob_extra DIV_THEN_MULT) -lemma DIV_TWO_UNIQUE: "(All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%q::nat. - (All::(nat => bool) => bool) - (%r::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::nat => nat => bool) n - ((op +::nat => nat => nat) - ((op *::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - q) - r)) - ((op |::bool => bool => bool) - ((op =::nat => nat => bool) r (0::nat)) - ((op =::nat => nat => bool) r (1::nat)))) - ((op &::bool => bool => bool) - ((op =::nat => nat => bool) q - ((op div::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((op =::nat => nat => bool) r - ((op mod::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))))" +lemma DIV_TWO_UNIQUE: "ALL (n::nat) (q::nat) r::nat. + n = 2 * q + r & (r = 0 | r = 1) --> q = n div 2 & r = n mod 2" by (import prob_extra DIV_TWO_UNIQUE) lemma DIVISION_TWO: "ALL n::nat. n = 2 * (n div 2) + n mod 2 & (n mod 2 = 0 | n mod 2 = 1)" @@ -95,47 +61,10 @@ (1::nat)))" by (import prob_extra DIV_TWO_BASIC) -lemma DIV_TWO_MONO: "(All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <::nat => nat => bool) - ((op div::nat => nat => nat) m - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - ((op div::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((op <::nat => nat => bool) m n)))" +lemma DIV_TWO_MONO: "ALL (m::nat) n::nat. m div 2 < n div 2 --> m < n" by (import prob_extra DIV_TWO_MONO) -lemma DIV_TWO_MONO_EVEN: "(All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) ((EVEN::nat => bool) n) - ((op =::bool => bool => bool) - ((op <::nat => nat => bool) - ((op div::nat => nat => nat) m - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - ((op div::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((op <::nat => nat => bool) m n))))" +lemma DIV_TWO_MONO_EVEN: "ALL (m::nat) n::nat. EVEN n --> (m div 2 < n div 2) = (m < n)" by (import prob_extra DIV_TWO_MONO_EVEN) lemma DIV_TWO_CANCEL: "ALL n::nat. 2 * n div 2 = n & Suc (2 * n) div 2 = n" @@ -181,54 +110,17 @@ lemma INF_DEF_ALT: "ALL P::real => bool. inf P = - sup (%r::real. P (- r))" by (import prob_extra INF_DEF_ALT) -lemma REAL_SUP_EXISTS_UNIQUE: "(All::((real => bool) => bool) => bool) - (%P::real => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P) - ((Ex::(real => bool) => bool) - (%z::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) (P x) - ((op <=::real => real => bool) x z))))) - ((Ex1::(real => bool) => bool) - (%s::real. - (All::(real => bool) => bool) - (%y::real. - (op =::bool => bool => bool) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) (P x) - ((op <::real => real => bool) y x))) - ((op <::real => real => bool) y s)))))" +lemma REAL_SUP_EXISTS_UNIQUE: "ALL P::real => bool. + Ex P & (EX z::real. ALL x::real. P x --> x <= z) --> + (EX! s::real. ALL y::real. (EX x::real. P x & y < x) = (y < s))" by (import prob_extra REAL_SUP_EXISTS_UNIQUE) -lemma REAL_SUP_MAX: "(All::((real => bool) => bool) => bool) - (%P::real => bool. - (All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) (P z) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) (P x) - ((op <=::real => real => bool) x z)))) - ((op =::real => real => bool) ((sup::(real => bool) => real) P) - z)))" +lemma REAL_SUP_MAX: "ALL (P::real => bool) z::real. + P z & (ALL x::real. P x --> x <= z) --> sup P = z" by (import prob_extra REAL_SUP_MAX) -lemma REAL_INF_MIN: "(All::((real => bool) => bool) => bool) - (%P::real => bool. - (All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) (P z) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) (P x) - ((op <=::real => real => bool) z x)))) - ((op =::real => real => bool) ((inf::(real => bool) => real) P) - z)))" +lemma REAL_INF_MIN: "ALL (P::real => bool) z::real. + P z & (ALL x::real. P x --> z <= x) --> inf P = z" by (import prob_extra REAL_INF_MIN) lemma HALF_POS: "(op <::real => real => bool) (0::real) @@ -317,39 +209,15 @@ lemma X_HALF_HALF: "ALL x::real. 1 / 2 * x + 1 / 2 * x = x" by (import prob_extra X_HALF_HALF) -lemma REAL_SUP_LE_X: "(All::((real => bool) => bool) => bool) - (%P::real => bool. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P) - ((All::(real => bool) => bool) - (%r::real. - (op -->::bool => bool => bool) (P r) - ((op <=::real => real => bool) r x)))) - ((op <=::real => real => bool) ((sup::(real => bool) => real) P) - x)))" +lemma REAL_SUP_LE_X: "ALL (P::real => bool) x::real. + Ex P & (ALL r::real. P r --> r <= x) --> sup P <= x" by (import prob_extra REAL_SUP_LE_X) -lemma REAL_X_LE_SUP: "(All::((real => bool) => bool) => bool) - (%P::real => bool. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((Ex::(real => bool) => bool) P) - ((op &::bool => bool => bool) - ((Ex::(real => bool) => bool) - (%z::real. - (All::(real => bool) => bool) - (%r::real. - (op -->::bool => bool => bool) (P r) - ((op <=::real => real => bool) r z)))) - ((Ex::(real => bool) => bool) - (%r::real. - (op &::bool => bool => bool) (P r) - ((op <=::real => real => bool) x r))))) - ((op <=::real => real => bool) x - ((sup::(real => bool) => real) P))))" +lemma REAL_X_LE_SUP: "ALL (P::real => bool) x::real. + Ex P & + (EX z::real. ALL r::real. P r --> r <= z) & + (EX r::real. P r & x <= r) --> + x <= sup P" by (import prob_extra REAL_X_LE_SUP) lemma ABS_BETWEEN_LE: "ALL (x::real) (y::real) d::real. @@ -409,21 +277,8 @@ lemma INV_SUC: "ALL n::nat. 0 < 1 / real (Suc n) & 1 / real (Suc n) <= 1" by (import prob_extra INV_SUC) -lemma ABS_UNIT_INTERVAL: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x (1::real)) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) y) - ((op <=::real => real => bool) y (1::real))))) - ((op <=::real => real => bool) - ((abs::real => real) ((op -::real => real => real) x y)) - (1::real))))" +lemma ABS_UNIT_INTERVAL: "ALL (x::real) y::real. + 0 <= x & x <= 1 & 0 <= y & y <= 1 --> abs (x - y) <= 1" by (import prob_extra ABS_UNIT_INTERVAL) lemma MEM_NIL: "ALL l::'a::type list. (ALL x::'a::type. ~ x mem l) = (l = [])" @@ -442,32 +297,12 @@ lemma FILTER_FALSE: "ALL l::'a::type list. [x::'a::type:l. False] = []" by (import prob_extra FILTER_FALSE) -lemma FILTER_MEM: "(All::(('a::type => bool) => bool) => bool) - (%P::'a::type => bool. - (All::('a::type => bool) => bool) - (%x::'a::type. - (All::('a::type list => bool) => bool) - (%l::'a::type list. - (op -->::bool => bool => bool) - ((op mem::'a::type => 'a::type list => bool) x - ((filter::('a::type => bool) - => 'a::type list => 'a::type list) - P l)) - (P x))))" +lemma FILTER_MEM: "ALL (P::'a::type => bool) (x::'a::type) l::'a::type list. + x mem filter P l --> P x" by (import prob_extra FILTER_MEM) -lemma MEM_FILTER: "(All::(('a::type => bool) => bool) => bool) - (%P::'a::type => bool. - (All::('a::type list => bool) => bool) - (%l::'a::type list. - (All::('a::type => bool) => bool) - (%x::'a::type. - (op -->::bool => bool => bool) - ((op mem::'a::type => 'a::type list => bool) x - ((filter::('a::type => bool) - => 'a::type list => 'a::type list) - P l)) - ((op mem::'a::type => 'a::type list => bool) x l))))" +lemma MEM_FILTER: "ALL (P::'a::type => bool) (l::'a::type list) x::'a::type. + x mem filter P l --> x mem l" by (import prob_extra MEM_FILTER) lemma FILTER_OUT_ELT: "ALL (x::'a::type) l::'a::type list. x mem l | [y::'a::type:l. y ~= x] = l" @@ -479,53 +314,23 @@ lemma IS_PREFIX_REFL: "ALL x::'a::type list. IS_PREFIX x x" by (import prob_extra IS_PREFIX_REFL) -lemma IS_PREFIX_ANTISYM: "(All::('a::type list => bool) => bool) - (%x::'a::type list. - (All::('a::type list => bool) => bool) - (%y::'a::type list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((IS_PREFIX::'a::type list => 'a::type list => bool) y x) - ((IS_PREFIX::'a::type list => 'a::type list => bool) x y)) - ((op =::'a::type list => 'a::type list => bool) x y)))" +lemma IS_PREFIX_ANTISYM: "ALL (x::'a::type list) y::'a::type list. + IS_PREFIX y x & IS_PREFIX x y --> x = y" by (import prob_extra IS_PREFIX_ANTISYM) -lemma IS_PREFIX_TRANS: "(All::('a::type list => bool) => bool) - (%x::'a::type list. - (All::('a::type list => bool) => bool) - (%y::'a::type list. - (All::('a::type list => bool) => bool) - (%z::'a::type list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((IS_PREFIX::'a::type list => 'a::type list => bool) x y) - ((IS_PREFIX::'a::type list => 'a::type list => bool) y z)) - ((IS_PREFIX::'a::type list => 'a::type list => bool) x z))))" +lemma IS_PREFIX_TRANS: "ALL (x::'a::type list) (y::'a::type list) z::'a::type list. + IS_PREFIX x y & IS_PREFIX y z --> IS_PREFIX x z" by (import prob_extra IS_PREFIX_TRANS) lemma IS_PREFIX_BUTLAST: "ALL (x::'a::type) y::'a::type list. IS_PREFIX (x # y) (butlast (x # y))" by (import prob_extra IS_PREFIX_BUTLAST) -lemma IS_PREFIX_LENGTH: "(All::('a::type list => bool) => bool) - (%x::'a::type list. - (All::('a::type list => bool) => bool) - (%y::'a::type list. - (op -->::bool => bool => bool) - ((IS_PREFIX::'a::type list => 'a::type list => bool) y x) - ((op <=::nat => nat => bool) ((size::'a::type list => nat) x) - ((size::'a::type list => nat) y))))" +lemma IS_PREFIX_LENGTH: "ALL (x::'a::type list) y::'a::type list. + IS_PREFIX y x --> length x <= length y" by (import prob_extra IS_PREFIX_LENGTH) -lemma IS_PREFIX_LENGTH_ANTI: "(All::('a::type list => bool) => bool) - (%x::'a::type list. - (All::('a::type list => bool) => bool) - (%y::'a::type list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((IS_PREFIX::'a::type list => 'a::type list => bool) y x) - ((op =::nat => nat => bool) ((size::'a::type list => nat) x) - ((size::'a::type list => nat) y))) - ((op =::'a::type list => 'a::type list => bool) x y)))" +lemma IS_PREFIX_LENGTH_ANTI: "ALL (x::'a::type list) y::'a::type list. + IS_PREFIX y x & length x = length y --> x = y" by (import prob_extra IS_PREFIX_LENGTH_ANTI) lemma IS_PREFIX_SNOC: "ALL (x::'a::type) (y::'a::type list) z::'a::type list. @@ -544,29 +349,10 @@ EX x::bool list. last (map (op # b) (h # t)) = b # x" by (import prob_extra LAST_MAP_CONS) -lemma EXISTS_LONGEST: "(All::('a::type list => bool) => bool) - (%x::'a::type list. - (All::('a::type list list => bool) => bool) - (%y::'a::type list list. - (Ex::('a::type list => bool) => bool) - (%z::'a::type list. - (op &::bool => bool => bool) - ((op mem::'a::type list => 'a::type list list => bool) z - ((op #::'a::type list - => 'a::type list list => 'a::type list list) - x y)) - ((All::('a::type list => bool) => bool) - (%w::'a::type list. - (op -->::bool => bool => bool) - ((op mem::'a::type list - => 'a::type list list => bool) - w ((op #::'a::type list - => 'a::type list list -=> 'a::type list list) - x y)) - ((op <=::nat => nat => bool) - ((size::'a::type list => nat) w) - ((size::'a::type list => nat) z)))))))" +lemma EXISTS_LONGEST: "ALL (x::'a::type list) y::'a::type list list. + EX z::'a::type list. + z mem x # y & + (ALL w::'a::type list. w mem x # y --> length w <= length z)" by (import prob_extra EXISTS_LONGEST) lemma UNION_DEF_ALT: "ALL (s::'a::type => bool) t::'a::type => bool. @@ -586,36 +372,10 @@ (pred_set.INTER s t = EMPTY) = (ALL x::'a::type. ~ s x | ~ t x)" by (import prob_extra INTER_IS_EMPTY) -lemma UNION_DISJOINT_SPLIT: "(All::(('a::type => bool) => bool) => bool) - (%s::'a::type => bool. - (All::(('a::type => bool) => bool) => bool) - (%t::'a::type => bool. - (All::(('a::type => bool) => bool) => bool) - (%u::'a::type => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::('a::type => bool) => ('a::type => bool) => bool) - ((pred_set.UNION::('a::type => bool) -=> ('a::type => bool) => 'a::type => bool) - s t) - ((pred_set.UNION::('a::type => bool) -=> ('a::type => bool) => 'a::type => bool) - s u)) - ((op &::bool => bool => bool) - ((op =::('a::type => bool) - => ('a::type => bool) => bool) - ((pred_set.INTER::('a::type => bool) - => ('a::type => bool) => 'a::type => bool) - s t) - (EMPTY::'a::type => bool)) - ((op =::('a::type => bool) - => ('a::type => bool) => bool) - ((pred_set.INTER::('a::type => bool) - => ('a::type => bool) => 'a::type => bool) - s u) - (EMPTY::'a::type => bool)))) - ((op =::('a::type => bool) => ('a::type => bool) => bool) t - u))))" +lemma UNION_DISJOINT_SPLIT: "ALL (s::'a::type => bool) (t::'a::type => bool) u::'a::type => bool. + pred_set.UNION s t = pred_set.UNION s u & + pred_set.INTER s t = EMPTY & pred_set.INTER s u = EMPTY --> + t = u" by (import prob_extra UNION_DISJOINT_SPLIT) lemma GSPEC_DEF_ALT: "ALL f::'a::type => 'b::type * bool. @@ -770,39 +530,13 @@ lemma alg_order_curried_def: "ALL (x::bool list) x1::bool list. alg_order x x1 = alg_order_tupled (x, x1)" by (import prob_canon alg_order_curried_def) -lemma alg_order_ind: "(All::((bool list => bool list => bool) => bool) => bool) - (%P::bool list => bool list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(bool => bool) => bool) - (%x::bool. - (All::(bool list => bool) => bool) - (%xa::bool list. - P ([]::bool list) - ((op #::bool => bool list => bool list) x xa)))) - ((op &::bool => bool => bool) (P ([]::bool list) ([]::bool list)) - ((op &::bool => bool => bool) - ((All::(bool => bool) => bool) - (%x::bool. - (All::(bool list => bool) => bool) - (%xa::bool list. - P ((op #::bool => bool list => bool list) x xa) - ([]::bool list)))) - ((All::(bool => bool) => bool) - (%x::bool. - (All::(bool list => bool) => bool) - (%xa::bool list. - (All::(bool => bool) => bool) - (%xb::bool. - (All::(bool list => bool) => bool) - (%xc::bool list. - (op -->::bool => bool => bool) (P xa xc) - (P ((op #::bool => bool list => bool list) - x xa) - ((op #::bool => bool list => bool list) -xb xc)))))))))) - ((All::(bool list => bool) => bool) - (%x::bool list. (All::(bool list => bool) => bool) (P x))))" +lemma alg_order_ind: "ALL P::bool list => bool list => bool. + (ALL (x::bool) xa::bool list. P [] (x # xa)) & + P [] [] & + (ALL (x::bool) xa::bool list. P (x # xa) []) & + (ALL (x::bool) (xa::bool list) (xb::bool) xc::bool list. + P xa xc --> P (x # xa) (xb # xc)) --> + (ALL x::bool list. All (P x))" by (import prob_canon alg_order_ind) lemma alg_order_def: "alg_order [] ((v6::bool) # (v7::bool list)) = True & @@ -843,32 +577,11 @@ alg_order v2 v6 & alg_sorted (v6 # v7))))" by (import prob_canon alg_sorted_primitive_def) -lemma alg_sorted_ind: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list list => bool) => bool) - (%z::bool list list. - (op -->::bool => bool => bool) - (P ((op #::bool list - => bool list list => bool list list) - y z)) - (P ((op #::bool list - => bool list list => bool list list) - x ((op #::bool list - => bool list list => bool list list) - y z))))))) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%v::bool list. - P ((op #::bool list => bool list list => bool list list) v - ([]::bool list list)))) - (P ([]::bool list list)))) - ((All::(bool list list => bool) => bool) P))" +lemma alg_sorted_ind: "ALL P::bool list list => bool. + (ALL (x::bool list) (y::bool list) z::bool list list. + P (y # z) --> P (x # y # z)) & + (ALL v::bool list. P [v]) & P [] --> + All P" by (import prob_canon alg_sorted_ind) lemma alg_sorted_def: "alg_sorted ((x::bool list) # (y::bool list) # (z::bool list list)) = @@ -907,32 +620,11 @@ ~ IS_PREFIX v6 v2 & alg_prefixfree (v6 # v7))))" by (import prob_canon alg_prefixfree_primitive_def) -lemma alg_prefixfree_ind: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list list => bool) => bool) - (%z::bool list list. - (op -->::bool => bool => bool) - (P ((op #::bool list - => bool list list => bool list list) - y z)) - (P ((op #::bool list - => bool list list => bool list list) - x ((op #::bool list - => bool list list => bool list list) - y z))))))) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%v::bool list. - P ((op #::bool list => bool list list => bool list list) v - ([]::bool list list)))) - (P ([]::bool list list)))) - ((All::(bool list list => bool) => bool) P))" +lemma alg_prefixfree_ind: "ALL P::bool list list => bool. + (ALL (x::bool list) (y::bool list) z::bool list list. + P (y # z) --> P (x # y # z)) & + (ALL v::bool list. P [v]) & P [] --> + All P" by (import prob_canon alg_prefixfree_ind) lemma alg_prefixfree_def: "alg_prefixfree ((x::bool list) # (y::bool list) # (z::bool list list)) = @@ -971,32 +663,11 @@ ~ alg_twin v2 v6 & alg_twinfree (v6 # v7))))" by (import prob_canon alg_twinfree_primitive_def) -lemma alg_twinfree_ind: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list list => bool) => bool) - (%z::bool list list. - (op -->::bool => bool => bool) - (P ((op #::bool list - => bool list list => bool list list) - y z)) - (P ((op #::bool list - => bool list list => bool list list) - x ((op #::bool list - => bool list list => bool list list) - y z))))))) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%v::bool list. - P ((op #::bool list => bool list list => bool list list) v - ([]::bool list list)))) - (P ([]::bool list list)))) - ((All::(bool list list => bool) => bool) P))" +lemma alg_twinfree_ind: "ALL P::bool list list => bool. + (ALL (x::bool list) (y::bool list) z::bool list list. + P (y # z) --> P (x # y # z)) & + (ALL v::bool list. P [v]) & P [] --> + All P" by (import prob_canon alg_twinfree_ind) lemma alg_twinfree_def: "alg_twinfree ((x::bool list) # (y::bool list) # (z::bool list list)) = @@ -1097,20 +768,9 @@ alg_twin (h # t) (h # t') = alg_twin t t'" by (import prob_canon ALG_TWIN_REDUCE) -lemma ALG_TWINS_PREFIX: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%l::bool list. - (op -->::bool => bool => bool) - ((IS_PREFIX::bool list => bool list => bool) x l) - ((op |::bool => bool => bool) - ((op =::bool list => bool list => bool) x l) - ((op |::bool => bool => bool) - ((IS_PREFIX::bool list => bool list => bool) x - ((SNOC::bool => bool list => bool list) (True::bool) l)) - ((IS_PREFIX::bool list => bool list => bool) x - ((SNOC::bool => bool list => bool list) (False::bool) - l))))))" +lemma ALG_TWINS_PREFIX: "ALL (x::bool list) l::bool list. + IS_PREFIX x l --> + x = l | IS_PREFIX x (SNOC True l) | IS_PREFIX x (SNOC False l)" by (import prob_canon ALG_TWINS_PREFIX) lemma ALG_ORDER_NIL: "ALL x::bool list. alg_order [] x & alg_order x [] = (x = [])" @@ -1119,140 +779,47 @@ lemma ALG_ORDER_REFL: "ALL x::bool list. alg_order x x" by (import prob_canon ALG_ORDER_REFL) -lemma ALG_ORDER_ANTISYM: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_order::bool list => bool list => bool) x y) - ((alg_order::bool list => bool list => bool) y x)) - ((op =::bool list => bool list => bool) x y)))" +lemma ALG_ORDER_ANTISYM: "ALL (x::bool list) y::bool list. alg_order x y & alg_order y x --> x = y" by (import prob_canon ALG_ORDER_ANTISYM) -lemma ALG_ORDER_TRANS: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list => bool) => bool) - (%z::bool list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_order::bool list => bool list => bool) x y) - ((alg_order::bool list => bool list => bool) y z)) - ((alg_order::bool list => bool list => bool) x z))))" +lemma ALG_ORDER_TRANS: "ALL (x::bool list) (y::bool list) z::bool list. + alg_order x y & alg_order y z --> alg_order x z" by (import prob_canon ALG_ORDER_TRANS) lemma ALG_ORDER_TOTAL: "ALL (x::bool list) y::bool list. alg_order x y | alg_order y x" by (import prob_canon ALG_ORDER_TOTAL) -lemma ALG_ORDER_PREFIX: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (op -->::bool => bool => bool) - ((IS_PREFIX::bool list => bool list => bool) y x) - ((alg_order::bool list => bool list => bool) x y)))" +lemma ALG_ORDER_PREFIX: "ALL (x::bool list) y::bool list. IS_PREFIX y x --> alg_order x y" by (import prob_canon ALG_ORDER_PREFIX) -lemma ALG_ORDER_PREFIX_ANTI: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_order::bool list => bool list => bool) x y) - ((IS_PREFIX::bool list => bool list => bool) x y)) - ((op =::bool list => bool list => bool) x y)))" +lemma ALG_ORDER_PREFIX_ANTI: "ALL (x::bool list) y::bool list. alg_order x y & IS_PREFIX x y --> x = y" by (import prob_canon ALG_ORDER_PREFIX_ANTI) -lemma ALG_ORDER_PREFIX_MONO: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list => bool) => bool) - (%z::bool list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_order::bool list => bool list => bool) x y) - ((op &::bool => bool => bool) - ((alg_order::bool list => bool list => bool) y z) - ((IS_PREFIX::bool list => bool list => bool) z x))) - ((IS_PREFIX::bool list => bool list => bool) y x))))" +lemma ALG_ORDER_PREFIX_MONO: "ALL (x::bool list) (y::bool list) z::bool list. + alg_order x y & alg_order y z & IS_PREFIX z x --> IS_PREFIX y x" by (import prob_canon ALG_ORDER_PREFIX_MONO) -lemma ALG_ORDER_PREFIX_TRANS: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list => bool) => bool) - (%z::bool list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_order::bool list => bool list => bool) x y) - ((IS_PREFIX::bool list => bool list => bool) y z)) - ((op |::bool => bool => bool) - ((alg_order::bool list => bool list => bool) x z) - ((IS_PREFIX::bool list => bool list => bool) x z)))))" +lemma ALG_ORDER_PREFIX_TRANS: "ALL (x::bool list) (y::bool list) z::bool list. + alg_order x y & IS_PREFIX y z --> alg_order x z | IS_PREFIX x z" by (import prob_canon ALG_ORDER_PREFIX_TRANS) lemma ALG_ORDER_SNOC: "ALL (x::bool) l::bool list. ~ alg_order (SNOC x l) l" by (import prob_canon ALG_ORDER_SNOC) -lemma ALG_SORTED_MIN: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op -->::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x t) - ((alg_order::bool list => bool list => bool) h x)))))" +lemma ALG_SORTED_MIN: "ALL (h::bool list) t::bool list list. + alg_sorted (h # t) --> (ALL x::bool list. x mem t --> alg_order h x)" by (import prob_canon ALG_SORTED_MIN) -lemma ALG_SORTED_DEF_ALT: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op =::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x t) - ((alg_order::bool list => bool list => bool) h x))) - ((alg_sorted::bool list list => bool) t))))" +lemma ALG_SORTED_DEF_ALT: "ALL (h::bool list) t::bool list list. + alg_sorted (h # t) = + ((ALL x::bool list. x mem t --> alg_order h x) & alg_sorted t)" by (import prob_canon ALG_SORTED_DEF_ALT) -lemma ALG_SORTED_TL: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op -->::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((alg_sorted::bool list list => bool) t)))" +lemma ALG_SORTED_TL: "ALL (h::bool list) t::bool list list. alg_sorted (h # t) --> alg_sorted t" by (import prob_canon ALG_SORTED_TL) -lemma ALG_SORTED_MONO: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list list => bool) => bool) - (%z::bool list list. - (op -->::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) x - ((op #::bool list => bool list list => bool list list) y - z))) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) x - z)))))" +lemma ALG_SORTED_MONO: "ALL (x::bool list) (y::bool list) z::bool list list. + alg_sorted (x # y # z) --> alg_sorted (x # z)" by (import prob_canon ALG_SORTED_MONO) lemma ALG_SORTED_TLS: "ALL (l::bool list list) b::bool. alg_sorted (map (op # b) l) = alg_sorted l" @@ -1268,69 +835,22 @@ (alg_sorted (h # t) & alg_sorted (h' # t') & alg_order (last (h # t)) h')" by (import prob_canon ALG_SORTED_APPEND) -lemma ALG_SORTED_FILTER: "(All::((bool list => bool) => bool) => bool) - (%P::bool list => bool. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((alg_sorted::bool list list => bool) b) - ((alg_sorted::bool list list => bool) - ((filter::(bool list => bool) - => bool list list => bool list list) - P b))))" +lemma ALG_SORTED_FILTER: "ALL (P::bool list => bool) b::bool list list. + alg_sorted b --> alg_sorted (filter P b)" by (import prob_canon ALG_SORTED_FILTER) -lemma ALG_PREFIXFREE_TL: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op -->::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((alg_prefixfree::bool list list => bool) t)))" +lemma ALG_PREFIXFREE_TL: "ALL (h::bool list) t::bool list list. + alg_prefixfree (h # t) --> alg_prefixfree t" by (import prob_canon ALG_PREFIXFREE_TL) -lemma ALG_PREFIXFREE_MONO: "(All::(bool list => bool) => bool) - (%x::bool list. - (All::(bool list => bool) => bool) - (%y::bool list. - (All::(bool list list => bool) => bool) - (%z::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) x - ((op #::bool list => bool list list => bool list list) - y z))) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) x - ((op #::bool list => bool list list => bool list list) - y z)))) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) x - z)))))" +lemma ALG_PREFIXFREE_MONO: "ALL (x::bool list) (y::bool list) z::bool list list. + alg_sorted (x # y # z) & alg_prefixfree (x # y # z) --> + alg_prefixfree (x # z)" by (import prob_canon ALG_PREFIXFREE_MONO) -lemma ALG_PREFIXFREE_ELT: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t))) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x t) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) x h)) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) h - x)))))))" +lemma ALG_PREFIXFREE_ELT: "ALL (h::bool list) t::bool list list. + alg_sorted (h # t) & alg_prefixfree (h # t) --> + (ALL x::bool list. x mem t --> ~ IS_PREFIX x h & ~ IS_PREFIX h x)" by (import prob_canon ALG_PREFIXFREE_ELT) lemma ALG_PREFIXFREE_TLS: "ALL (l::bool list list) b::bool. @@ -1348,105 +868,32 @@ alg_prefixfree (h' # t') & ~ IS_PREFIX h' (last (h # t)))" by (import prob_canon ALG_PREFIXFREE_APPEND) -lemma ALG_PREFIXFREE_FILTER: "(All::((bool list => bool) => bool) => bool) - (%P::bool list => bool. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) b) - ((alg_prefixfree::bool list list => bool) b)) - ((alg_prefixfree::bool list list => bool) - ((filter::(bool list => bool) - => bool list list => bool list list) - P b))))" +lemma ALG_PREFIXFREE_FILTER: "ALL (P::bool list => bool) b::bool list list. + alg_sorted b & alg_prefixfree b --> alg_prefixfree (filter P b)" by (import prob_canon ALG_PREFIXFREE_FILTER) -lemma ALG_TWINFREE_TL: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op -->::bool => bool => bool) - ((alg_twinfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((alg_twinfree::bool list list => bool) t)))" +lemma ALG_TWINFREE_TL: "ALL (h::bool list) t::bool list list. + alg_twinfree (h # t) --> alg_twinfree t" by (import prob_canon ALG_TWINFREE_TL) lemma ALG_TWINFREE_TLS: "ALL (l::bool list list) b::bool. alg_twinfree (map (op # b) l) = alg_twinfree l" by (import prob_canon ALG_TWINFREE_TLS) -lemma ALG_TWINFREE_STEP1: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((alg_twinfree::bool list list => bool) - ((op @::bool list list => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (True::bool)) l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (False::bool)) - l2))) - ((op &::bool => bool => bool) - ((alg_twinfree::bool list list => bool) l1) - ((alg_twinfree::bool list list => bool) l2))))" +lemma ALG_TWINFREE_STEP1: "ALL (l1::bool list list) l2::bool list list. + alg_twinfree (map (op # True) l1 @ map (op # False) l2) --> + alg_twinfree l1 & alg_twinfree l2" by (import prob_canon ALG_TWINFREE_STEP1) -lemma ALG_TWINFREE_STEP2: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op |::bool => bool => bool) - ((Not::bool => bool) - ((op mem::bool list => bool list list => bool) - ([]::bool list) l1)) - ((Not::bool => bool) - ((op mem::bool list => bool list list => bool) - ([]::bool list) l2))) - ((op &::bool => bool => bool) - ((alg_twinfree::bool list list => bool) l1) - ((alg_twinfree::bool list list => bool) l2))) - ((alg_twinfree::bool list list => bool) - ((op @::bool list list => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (True::bool)) l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (False::bool)) - l2)))))" +lemma ALG_TWINFREE_STEP2: "ALL (l1::bool list list) l2::bool list list. + (~ [] mem l1 | ~ [] mem l2) & alg_twinfree l1 & alg_twinfree l2 --> + alg_twinfree (map (op # True) l1 @ map (op # False) l2)" by (import prob_canon ALG_TWINFREE_STEP2) -lemma ALG_TWINFREE_STEP: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op |::bool => bool => bool) - ((Not::bool => bool) - ((op mem::bool list => bool list list => bool) - ([]::bool list) l1)) - ((Not::bool => bool) - ((op mem::bool list => bool list list => bool) - ([]::bool list) l2))) - ((op =::bool => bool => bool) - ((alg_twinfree::bool list list => bool) - ((op @::bool list list => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (True::bool)) l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (False::bool)) - l2))) - ((op &::bool => bool => bool) - ((alg_twinfree::bool list list => bool) l1) - ((alg_twinfree::bool list list => bool) l2)))))" +lemma ALG_TWINFREE_STEP: "ALL (l1::bool list list) l2::bool list list. + ~ [] mem l1 | ~ [] mem l2 --> + alg_twinfree (map (op # True) l1 @ map (op # False) l2) = + (alg_twinfree l1 & alg_twinfree l2)" by (import prob_canon ALG_TWINFREE_STEP) lemma ALG_LONGEST_HD: "ALL (h::bool list) t::bool list list. length h <= alg_longest (h # t)" @@ -1467,124 +914,41 @@ lemma ALG_CANON_PREFS_HD: "ALL (l::bool list) b::bool list list. hd (alg_canon_prefs l b) = l" by (import prob_canon ALG_CANON_PREFS_HD) -lemma ALG_CANON_PREFS_DELETES: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x - ((alg_canon_prefs::bool list - => bool list list => bool list list) - l b)) - ((op mem::bool list => bool list list => bool) x - ((op #::bool list => bool list list => bool list list) l - b)))))" +lemma ALG_CANON_PREFS_DELETES: "ALL (l::bool list) (b::bool list list) x::bool list. + x mem alg_canon_prefs l b --> x mem l # b" by (import prob_canon ALG_CANON_PREFS_DELETES) -lemma ALG_CANON_PREFS_SORTED: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l b)) - ((alg_sorted::bool list list => bool) - ((alg_canon_prefs::bool list - => bool list list => bool list list) - l b))))" +lemma ALG_CANON_PREFS_SORTED: "ALL (l::bool list) b::bool list list. + alg_sorted (l # b) --> alg_sorted (alg_canon_prefs l b)" by (import prob_canon ALG_CANON_PREFS_SORTED) -lemma ALG_CANON_PREFS_PREFIXFREE: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) b) - ((alg_prefixfree::bool list list => bool) b)) - ((alg_prefixfree::bool list list => bool) - ((alg_canon_prefs::bool list - => bool list list => bool list list) - l b))))" +lemma ALG_CANON_PREFS_PREFIXFREE: "ALL (l::bool list) b::bool list list. + alg_sorted b & alg_prefixfree b --> alg_prefixfree (alg_canon_prefs l b)" by (import prob_canon ALG_CANON_PREFS_PREFIXFREE) -lemma ALG_CANON_PREFS_CONSTANT: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l b)) - ((op =::bool list list => bool list list => bool) - ((alg_canon_prefs::bool list - => bool list list => bool list list) - l b) - ((op #::bool list => bool list list => bool list list) l b))))" +lemma ALG_CANON_PREFS_CONSTANT: "ALL (l::bool list) b::bool list list. + alg_prefixfree (l # b) --> alg_canon_prefs l b = l # b" by (import prob_canon ALG_CANON_PREFS_CONSTANT) lemma ALG_CANON_FIND_HD: "ALL (l::bool list) (h::bool list) t::bool list list. hd (alg_canon_find l (h # t)) = l | hd (alg_canon_find l (h # t)) = h" by (import prob_canon ALG_CANON_FIND_HD) -lemma ALG_CANON_FIND_DELETES: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x - ((alg_canon_find::bool list - => bool list list => bool list list) - l b)) - ((op mem::bool list => bool list list => bool) x - ((op #::bool list => bool list list => bool list list) l - b)))))" +lemma ALG_CANON_FIND_DELETES: "ALL (l::bool list) (b::bool list list) x::bool list. + x mem alg_canon_find l b --> x mem l # b" by (import prob_canon ALG_CANON_FIND_DELETES) -lemma ALG_CANON_FIND_SORTED: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((alg_sorted::bool list list => bool) b) - ((alg_sorted::bool list list => bool) - ((alg_canon_find::bool list - => bool list list => bool list list) - l b))))" +lemma ALG_CANON_FIND_SORTED: "ALL (l::bool list) b::bool list list. + alg_sorted b --> alg_sorted (alg_canon_find l b)" by (import prob_canon ALG_CANON_FIND_SORTED) -lemma ALG_CANON_FIND_PREFIXFREE: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) b) - ((alg_prefixfree::bool list list => bool) b)) - ((alg_prefixfree::bool list list => bool) - ((alg_canon_find::bool list - => bool list list => bool list list) - l b))))" +lemma ALG_CANON_FIND_PREFIXFREE: "ALL (l::bool list) b::bool list list. + alg_sorted b & alg_prefixfree b --> alg_prefixfree (alg_canon_find l b)" by (import prob_canon ALG_CANON_FIND_PREFIXFREE) -lemma ALG_CANON_FIND_CONSTANT: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l b)) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l b))) - ((op =::bool list list => bool list list => bool) - ((alg_canon_find::bool list - => bool list list => bool list list) - l b) - ((op #::bool list => bool list list => bool list list) l b))))" +lemma ALG_CANON_FIND_CONSTANT: "ALL (l::bool list) b::bool list list. + alg_sorted (l # b) & alg_prefixfree (l # b) --> + alg_canon_find l b = l # b" by (import prob_canon ALG_CANON_FIND_CONSTANT) lemma ALG_CANON1_SORTED: "ALL x::bool list list. alg_sorted (alg_canon1 x)" @@ -1593,180 +957,48 @@ lemma ALG_CANON1_PREFIXFREE: "ALL l::bool list list. alg_prefixfree (alg_canon1 l)" by (import prob_canon ALG_CANON1_PREFIXFREE) -lemma ALG_CANON1_CONSTANT: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l) - ((alg_prefixfree::bool list list => bool) l)) - ((op =::bool list list => bool list list => bool) - ((alg_canon1::bool list list => bool list list) l) l))" +lemma ALG_CANON1_CONSTANT: "ALL l::bool list list. alg_sorted l & alg_prefixfree l --> alg_canon1 l = l" by (import prob_canon ALG_CANON1_CONSTANT) -lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l b)) - ((op &::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l - b)) - ((alg_twinfree::bool list list => bool) b))) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((alg_canon_merge::bool list - => bool list list => bool list list) - l b)) - ((op &::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) - ((alg_canon_merge::bool list - => bool list list => bool list list) - l b)) - ((alg_twinfree::bool list list => bool) - ((alg_canon_merge::bool list - => bool list list => bool list list) - l b))))))" +lemma ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE: "ALL (l::bool list) b::bool list list. + alg_sorted (l # b) & alg_prefixfree (l # b) & alg_twinfree b --> + alg_sorted (alg_canon_merge l b) & + alg_prefixfree (alg_canon_merge l b) & alg_twinfree (alg_canon_merge l b)" by (import prob_canon ALG_CANON_MERGE_SORTED_PREFIXFREE_TWINFREE) -lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (All::(bool list => bool) => bool) - (%h::bool list. - (op -->::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x - ((op #::bool list - => bool list list => bool list list) - l b)) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) h - x)) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) x - h))))) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x - ((alg_canon_merge::bool list - => bool list list => bool list list) - l b)) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) h - x)) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) x - h))))))))" +lemma ALG_CANON_MERGE_PREFIXFREE_PRESERVE: "ALL (l::bool list) (b::bool list list) h::bool list. + (ALL x::bool list. x mem l # b --> ~ IS_PREFIX h x & ~ IS_PREFIX x h) --> + (ALL x::bool list. + x mem alg_canon_merge l b --> ~ IS_PREFIX h x & ~ IS_PREFIX x h)" by (import prob_canon ALG_CANON_MERGE_PREFIXFREE_PRESERVE) -lemma ALG_CANON_MERGE_SHORTENS: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x - ((alg_canon_merge::bool list - => bool list list => bool list list) - l b)) - ((Ex::(bool list => bool) => bool) - (%y::bool list. - (op &::bool => bool => bool) - ((op mem::bool list => bool list list => bool) y - ((op #::bool list - => bool list list => bool list list) - l b)) - ((IS_PREFIX::bool list => bool list => bool) y - x))))))" +lemma ALG_CANON_MERGE_SHORTENS: "ALL (l::bool list) (b::bool list list) x::bool list. + x mem alg_canon_merge l b --> + (EX y::bool list. y mem l # b & IS_PREFIX y x)" by (import prob_canon ALG_CANON_MERGE_SHORTENS) -lemma ALG_CANON_MERGE_CONSTANT: "(All::(bool list => bool) => bool) - (%l::bool list. - (All::(bool list list => bool) => bool) - (%b::bool list list. - (op -->::bool => bool => bool) - ((alg_twinfree::bool list list => bool) - ((op #::bool list => bool list list => bool list list) l b)) - ((op =::bool list list => bool list list => bool) - ((alg_canon_merge::bool list - => bool list list => bool list list) - l b) - ((op #::bool list => bool list list => bool list list) l b))))" +lemma ALG_CANON_MERGE_CONSTANT: "ALL (l::bool list) b::bool list list. + alg_twinfree (l # b) --> alg_canon_merge l b = l # b" by (import prob_canon ALG_CANON_MERGE_CONSTANT) -lemma ALG_CANON2_PREFIXFREE_PRESERVE: "(All::(bool list list => bool) => bool) - (%x::bool list list. - (All::(bool list => bool) => bool) - (%xa::bool list. - (op -->::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%xb::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) xb x) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) xa xb)) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) xb - xa))))) - ((All::(bool list => bool) => bool) - (%xb::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) xb - ((alg_canon2::bool list list => bool list list) x)) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) xa xb)) - ((Not::bool => bool) - ((IS_PREFIX::bool list => bool list => bool) xb - xa)))))))" +lemma ALG_CANON2_PREFIXFREE_PRESERVE: "ALL (x::bool list list) xa::bool list. + (ALL xb::bool list. + xb mem x --> ~ IS_PREFIX xa xb & ~ IS_PREFIX xb xa) --> + (ALL xb::bool list. + xb mem alg_canon2 x --> ~ IS_PREFIX xa xb & ~ IS_PREFIX xb xa)" by (import prob_canon ALG_CANON2_PREFIXFREE_PRESERVE) -lemma ALG_CANON2_SHORTENS: "(All::(bool list list => bool) => bool) - (%x::bool list list. - (All::(bool list => bool) => bool) - (%xa::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) xa - ((alg_canon2::bool list list => bool list list) x)) - ((Ex::(bool list => bool) => bool) - (%y::bool list. - (op &::bool => bool => bool) - ((op mem::bool list => bool list list => bool) y x) - ((IS_PREFIX::bool list => bool list => bool) y xa)))))" +lemma ALG_CANON2_SHORTENS: "ALL (x::bool list list) xa::bool list. + xa mem alg_canon2 x --> (EX y::bool list. y mem x & IS_PREFIX y xa)" by (import prob_canon ALG_CANON2_SHORTENS) -lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "(All::(bool list list => bool) => bool) - (%x::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) x) - ((alg_prefixfree::bool list list => bool) x)) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) - ((alg_canon2::bool list list => bool list list) x)) - ((op &::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) - ((alg_canon2::bool list list => bool list list) x)) - ((alg_twinfree::bool list list => bool) - ((alg_canon2::bool list list => bool list list) x)))))" +lemma ALG_CANON2_SORTED_PREFIXFREE_TWINFREE: "ALL x::bool list list. + alg_sorted x & alg_prefixfree x --> + alg_sorted (alg_canon2 x) & + alg_prefixfree (alg_canon2 x) & alg_twinfree (alg_canon2 x)" by (import prob_canon ALG_CANON2_SORTED_PREFIXFREE_TWINFREE) -lemma ALG_CANON2_CONSTANT: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_twinfree::bool list list => bool) l) - ((op =::bool list list => bool list list => bool) - ((alg_canon2::bool list list => bool list list) l) l))" +lemma ALG_CANON2_CONSTANT: "ALL l::bool list list. alg_twinfree l --> alg_canon2 l = l" by (import prob_canon ALG_CANON2_CONSTANT) lemma ALG_CANON_SORTED_PREFIXFREE_TWINFREE: "ALL l::bool list list. @@ -1774,15 +1006,8 @@ alg_prefixfree (alg_canon l) & alg_twinfree (alg_canon l)" by (import prob_canon ALG_CANON_SORTED_PREFIXFREE_TWINFREE) -lemma ALG_CANON_CONSTANT: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((alg_sorted::bool list list => bool) l) - ((op &::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) l) - ((alg_twinfree::bool list list => bool) l))) - ((op =::bool list list => bool list list => bool) - ((alg_canon::bool list list => bool list list) l) l))" +lemma ALG_CANON_CONSTANT: "ALL l::bool list list. + alg_sorted l & alg_prefixfree l & alg_twinfree l --> alg_canon l = l" by (import prob_canon ALG_CANON_CONSTANT) lemma ALG_CANON_IDEMPOT: "ALL l::bool list list. alg_canon (alg_canon l) = alg_canon l" @@ -1800,14 +1025,8 @@ alg_canon [[]] = [[]] & (ALL x::bool list. alg_canon [x] = [x])" by (import prob_canon ALG_CANON_BASIC) -lemma ALGEBRA_CANON_TL: "(All::(bool list => bool) => bool) - (%h::bool list. - (All::(bool list list => bool) => bool) - (%t::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) - ((op #::bool list => bool list list => bool list list) h t)) - ((algebra_canon::bool list list => bool) t)))" +lemma ALGEBRA_CANON_TL: "ALL (h::bool list) t::bool list list. + algebra_canon (h # t) --> algebra_canon t" by (import prob_canon ALGEBRA_CANON_TL) lemma ALGEBRA_CANON_NIL_MEM: "ALL l::bool list list. (algebra_canon l & [] mem l) = (l = [[]])" @@ -1817,211 +1036,52 @@ algebra_canon (map (op # b) l) = algebra_canon l" by (import prob_canon ALGEBRA_CANON_TLS) -lemma ALGEBRA_CANON_STEP1: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) - ((op @::bool list list => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (True::bool)) l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (False::bool)) - l2))) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l1) - ((algebra_canon::bool list list => bool) l2))))" +lemma ALGEBRA_CANON_STEP1: "ALL (l1::bool list list) l2::bool list list. + algebra_canon (map (op # True) l1 @ map (op # False) l2) --> + algebra_canon l1 & algebra_canon l2" by (import prob_canon ALGEBRA_CANON_STEP1) -lemma ALGEBRA_CANON_STEP2: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op |::bool => bool => bool) - ((Not::bool => bool) - ((op =::bool list list => bool list list => bool) l1 - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list)))) - ((Not::bool => bool) - ((op =::bool list list => bool list list => bool) l2 - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))))) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l1) - ((algebra_canon::bool list list => bool) l2))) - ((algebra_canon::bool list list => bool) - ((op @::bool list list => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (True::bool)) l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (False::bool)) - l2)))))" +lemma ALGEBRA_CANON_STEP2: "ALL (l1::bool list list) l2::bool list list. + (l1 ~= [[]] | l2 ~= [[]]) & algebra_canon l1 & algebra_canon l2 --> + algebra_canon (map (op # True) l1 @ map (op # False) l2)" by (import prob_canon ALGEBRA_CANON_STEP2) -lemma ALGEBRA_CANON_STEP: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op |::bool => bool => bool) - ((Not::bool => bool) - ((op =::bool list list => bool list list => bool) l1 - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list)))) - ((Not::bool => bool) - ((op =::bool list list => bool list list => bool) l2 - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))))) - ((op =::bool => bool => bool) - ((algebra_canon::bool list list => bool) - ((op @::bool list list => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (True::bool)) l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) (False::bool)) - l2))) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l1) - ((algebra_canon::bool list list => bool) l2)))))" +lemma ALGEBRA_CANON_STEP: "ALL (l1::bool list list) l2::bool list list. + l1 ~= [[]] | l2 ~= [[]] --> + algebra_canon (map (op # True) l1 @ map (op # False) l2) = + (algebra_canon l1 & algebra_canon l2)" by (import prob_canon ALGEBRA_CANON_STEP) -lemma ALGEBRA_CANON_CASES_THM: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((op |::bool => bool => bool) - ((op =::bool list list => bool list list => bool) l - ([]::bool list list)) - ((op |::bool => bool => bool) - ((op =::bool list list => bool list list => bool) l - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))) - ((Ex::(bool list list => bool) => bool) - (%l1::bool list list. - (Ex::(bool list list => bool) => bool) - (%l2::bool list list. - (op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l1) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l2) - ((op =::bool list list => bool list list => bool) l - ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2))))))))))" +lemma ALGEBRA_CANON_CASES_THM: "ALL l::bool list list. + algebra_canon l --> + l = [] | + l = [[]] | + (EX (l1::bool list list) l2::bool list list. + algebra_canon l1 & + algebra_canon l2 & l = map (op # True) l1 @ map (op # False) l2)" by (import prob_canon ALGEBRA_CANON_CASES_THM) -lemma ALGEBRA_CANON_CASES: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) (P ([]::bool list list)) - ((op &::bool => bool => bool) - (P ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))) - ((All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l1) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l2) - ((algebra_canon::bool list list => bool) - ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2))))) - (P ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2)))))))) - ((All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) (P l))))" +lemma ALGEBRA_CANON_CASES: "ALL P::bool list list => bool. + P [] & + P [[]] & + (ALL (l1::bool list list) l2::bool list list. + algebra_canon l1 & + algebra_canon l2 & + algebra_canon (map (op # True) l1 @ map (op # False) l2) --> + P (map (op # True) l1 @ map (op # False) l2)) --> + (ALL l::bool list list. algebra_canon l --> P l)" by (import prob_canon ALGEBRA_CANON_CASES) -lemma ALGEBRA_CANON_INDUCTION: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) (P ([]::bool list list)) - ((op &::bool => bool => bool) - (P ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))) - ((All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l1) - ((op &::bool => bool => bool) - ((algebra_canon::bool list list => bool) l2) - ((op &::bool => bool => bool) (P l1) - ((op &::bool => bool => bool) (P l2) - ((algebra_canon::bool list list => bool) - ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) -(True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) -(False::bool)) - l2))))))) - (P ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2)))))))) - ((All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) (P l))))" +lemma ALGEBRA_CANON_INDUCTION: "ALL P::bool list list => bool. + P [] & + P [[]] & + (ALL (l1::bool list list) l2::bool list list. + algebra_canon l1 & + algebra_canon l2 & + P l1 & + P l2 & algebra_canon (map (op # True) l1 @ map (op # False) l2) --> + P (map (op # True) l1 @ map (op # False) l2)) --> + (ALL l::bool list list. algebra_canon l --> P l)" by (import prob_canon ALGEBRA_CANON_INDUCTION) lemma MEM_NIL_STEP: "ALL (l1::bool list list) l2::bool list list. @@ -2032,25 +1092,10 @@ (alg_sorted l & alg_prefixfree l & [] mem l) = (l = [[]])" by (import prob_canon ALG_SORTED_PREFIXFREE_MEM_NIL) -lemma ALG_SORTED_PREFIXFREE_EQUALITY: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (All::(bool list list => bool) => bool) - (%l'::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op =::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x l) - ((op mem::bool list => bool list list => bool) x l'))) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) l) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) l') - ((op &::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) l) - ((alg_prefixfree::bool list list => bool) l'))))) - ((op =::bool list list => bool list list => bool) l l')))" +lemma ALG_SORTED_PREFIXFREE_EQUALITY: "ALL (l::bool list list) l'::bool list list. + (ALL x::bool list. x mem l = x mem l') & + alg_sorted l & alg_sorted l' & alg_prefixfree l & alg_prefixfree l' --> + l = l'" by (import prob_canon ALG_SORTED_PREFIXFREE_EQUALITY) ;end_setup @@ -2187,19 +1232,8 @@ lemma ALG_EMBED_POPULATED: "ALL b::bool list. Ex (alg_embed b)" by (import prob_algebra ALG_EMBED_POPULATED) -lemma ALG_EMBED_PREFIX: "(All::(bool list => bool) => bool) - (%b::bool list. - (All::(bool list => bool) => bool) - (%c::bool list. - (All::((nat => bool) => bool) => bool) - (%s::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_embed::bool list => (nat => bool) => bool) b s) - ((alg_embed::bool list => (nat => bool) => bool) c s)) - ((op |::bool => bool => bool) - ((IS_PREFIX::bool list => bool list => bool) b c) - ((IS_PREFIX::bool list => bool list => bool) c b)))))" +lemma ALG_EMBED_PREFIX: "ALL (b::bool list) (c::bool list) s::nat => bool. + alg_embed b s & alg_embed c s --> IS_PREFIX b c | IS_PREFIX c b" by (import prob_algebra ALG_EMBED_PREFIX) lemma ALG_EMBED_PREFIX_SUBSET: "ALL (b::bool list) c::bool list. @@ -2216,17 +1250,8 @@ (ALL b::bool. algebra_embed [[b]] = (%s::nat => bool. SHD s = b))" by (import prob_algebra ALGEBRA_EMBED_BASIC) -lemma ALGEBRA_EMBED_MEM: "(All::(bool list list => bool) => bool) - (%b::bool list list. - (All::((nat => bool) => bool) => bool) - (%x::nat => bool. - (op -->::bool => bool => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) b x) - ((Ex::(bool list => bool) => bool) - (%l::bool list. - (op &::bool => bool => bool) - ((op mem::bool list => bool list list => bool) l b) - ((alg_embed::bool list => (nat => bool) => bool) l x)))))" +lemma ALGEBRA_EMBED_MEM: "ALL (b::bool list list) x::nat => bool. + algebra_embed b x --> (EX l::bool list. l mem b & alg_embed l x)" by (import prob_algebra ALGEBRA_EMBED_MEM) lemma ALGEBRA_EMBED_APPEND: "ALL (l1::bool list list) l2::bool list list. @@ -2260,47 +1285,20 @@ lemma ALG_CANON_EMBED: "ALL l::bool list list. algebra_embed (alg_canon l) = algebra_embed l" by (import prob_algebra ALG_CANON_EMBED) -lemma ALGEBRA_CANON_UNIV: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((op -->::bool => bool => bool) - ((op =::((nat => bool) => bool) => ((nat => bool) => bool) => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) l) - (pred_set.UNIV::(nat => bool) => bool)) - ((op =::bool list list => bool list list => bool) l - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list)))))" +lemma ALGEBRA_CANON_UNIV: "ALL l::bool list list. + algebra_canon l --> algebra_embed l = pred_set.UNIV --> l = [[]]" by (import prob_algebra ALGEBRA_CANON_UNIV) lemma ALG_CANON_REP: "ALL (b::bool list list) c::bool list list. (alg_canon b = alg_canon c) = (algebra_embed b = algebra_embed c)" by (import prob_algebra ALG_CANON_REP) -lemma ALGEBRA_CANON_EMBED_EMPTY: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((op =::bool => bool => bool) - ((All::((nat => bool) => bool) => bool) - (%v::nat => bool. - (Not::bool => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) l - v))) - ((op =::bool list list => bool list list => bool) l - ([]::bool list list))))" +lemma ALGEBRA_CANON_EMBED_EMPTY: "ALL l::bool list list. + algebra_canon l --> (ALL v::nat => bool. ~ algebra_embed l v) = (l = [])" by (import prob_algebra ALGEBRA_CANON_EMBED_EMPTY) -lemma ALGEBRA_CANON_EMBED_UNIV: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((op =::bool => bool => bool) - ((All::((nat => bool) => bool) => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) l)) - ((op =::bool list list => bool list list => bool) l - ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list)))))" +lemma ALGEBRA_CANON_EMBED_UNIV: "ALL l::bool list list. + algebra_canon l --> All (algebra_embed l) = (l = [[]])" by (import prob_algebra ALGEBRA_CANON_EMBED_UNIV) lemma MEASURABLE_ALGEBRA: "ALL b::bool list list. measurable (algebra_embed b)" @@ -2321,34 +1319,12 @@ lemma MEASURABLE_COMPL: "ALL s::(nat => bool) => bool. measurable (COMPL s) = measurable s" by (import prob_algebra MEASURABLE_COMPL) -lemma MEASURABLE_UNION: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%t::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) s) - ((measurable::((nat => bool) => bool) => bool) t)) - ((measurable::((nat => bool) => bool) => bool) - ((pred_set.UNION::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - s t))))" +lemma MEASURABLE_UNION: "ALL (s::(nat => bool) => bool) t::(nat => bool) => bool. + measurable s & measurable t --> measurable (pred_set.UNION s t)" by (import prob_algebra MEASURABLE_UNION) -lemma MEASURABLE_INTER: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%t::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) s) - ((measurable::((nat => bool) => bool) => bool) t)) - ((measurable::((nat => bool) => bool) => bool) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - s t))))" +lemma MEASURABLE_INTER: "ALL (s::(nat => bool) => bool) t::(nat => bool) => bool. + measurable s & measurable t --> measurable (pred_set.INTER s t)" by (import prob_algebra MEASURABLE_INTER) lemma MEASURABLE_STL: "ALL p::(nat => bool) => bool. measurable (p o STL) = measurable p" @@ -2497,97 +1473,35 @@ algebra_measure [[]] = 1 & (ALL b::bool. algebra_measure [[b]] = 1 / 2)" by (import prob ALGEBRA_MEASURE_BASIC) -lemma ALGEBRA_CANON_MEASURE_MAX: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((op <=::real => real => bool) - ((alg_measure::bool list list => real) l) (1::real)))" +lemma ALGEBRA_CANON_MEASURE_MAX: "ALL l::bool list list. algebra_canon l --> alg_measure l <= 1" by (import prob ALGEBRA_CANON_MEASURE_MAX) lemma ALGEBRA_MEASURE_MAX: "ALL l::bool list list. algebra_measure l <= 1" by (import prob ALGEBRA_MEASURE_MAX) -lemma ALGEBRA_MEASURE_MONO_EMBED: "(All::(bool list list => bool) => bool) - (%x::bool list list. - (All::(bool list list => bool) => bool) - (%xa::bool list list. - (op -->::bool => bool => bool) - ((SUBSET::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) x) - ((algebra_embed::bool list list => (nat => bool) => bool) xa)) - ((op <=::real => real => bool) - ((algebra_measure::bool list list => real) x) - ((algebra_measure::bool list list => real) xa))))" +lemma ALGEBRA_MEASURE_MONO_EMBED: "ALL (x::bool list list) xa::bool list list. + SUBSET (algebra_embed x) (algebra_embed xa) --> + algebra_measure x <= algebra_measure xa" by (import prob ALGEBRA_MEASURE_MONO_EMBED) -lemma ALG_MEASURE_COMPL: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((All::(bool list list => bool) => bool) - (%c::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) c) - ((op -->::bool => bool => bool) - ((op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((COMPL::((nat => bool) => bool) => (nat => bool) => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) - l)) - ((algebra_embed::bool list list => (nat => bool) => bool) - c)) - ((op =::real => real => bool) - ((op +::real => real => real) - ((alg_measure::bool list list => real) l) - ((alg_measure::bool list list => real) c)) - (1::real))))))" +lemma ALG_MEASURE_COMPL: "ALL l::bool list list. + algebra_canon l --> + (ALL c::bool list list. + algebra_canon c --> + COMPL (algebra_embed l) = algebra_embed c --> + alg_measure l + alg_measure c = 1)" by (import prob ALG_MEASURE_COMPL) -lemma ALG_MEASURE_ADDITIVE: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) l) - ((All::(bool list list => bool) => bool) - (%c::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) c) - ((All::(bool list list => bool) => bool) - (%d::bool list list. - (op -->::bool => bool => bool) - ((algebra_canon::bool list list => bool) d) - ((op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) => (nat => bool) => bool) - ((algebra_embed::bool list list - => (nat => bool) => bool) - c) - ((algebra_embed::bool list list - => (nat => bool) => bool) - d)) - (EMPTY::(nat => bool) => bool)) - ((op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((algebra_embed::bool list list - => (nat => bool) => bool) - l) - ((pred_set.UNION::((nat => bool) => bool) - => ((nat => bool) => bool) => (nat => bool) => bool) - ((algebra_embed::bool list list - => (nat => bool) => bool) - c) - ((algebra_embed::bool list list - => (nat => bool) => bool) - d)))) - ((op =::real => real => bool) - ((alg_measure::bool list list => real) l) - ((op +::real => real => real) - ((alg_measure::bool list list => real) c) - ((alg_measure::bool list list => real) d)))))))))" +lemma ALG_MEASURE_ADDITIVE: "ALL l::bool list list. + algebra_canon l --> + (ALL c::bool list list. + algebra_canon c --> + (ALL d::bool list list. + algebra_canon d --> + pred_set.INTER (algebra_embed c) (algebra_embed d) = EMPTY & + algebra_embed l = + pred_set.UNION (algebra_embed c) (algebra_embed d) --> + alg_measure l = alg_measure c + alg_measure d))" by (import prob ALG_MEASURE_ADDITIVE) lemma PROB_ALGEBRA: "ALL l::bool list list. prob (algebra_embed l) = algebra_measure l" @@ -2598,42 +1512,12 @@ (ALL b::bool. prob (%s::nat => bool. SHD s = b) = 1 / 2)" by (import prob PROB_BASIC) -lemma PROB_ADDITIVE: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%t::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) s) - ((op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) t) - ((op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) -=> (nat => bool) => bool) - s t) - (EMPTY::(nat => bool) => bool)))) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((pred_set.UNION::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - s t)) - ((op +::real => real => real) - ((prob::((nat => bool) => bool) => real) s) - ((prob::((nat => bool) => bool) => real) t)))))" +lemma PROB_ADDITIVE: "ALL (s::(nat => bool) => bool) t::(nat => bool) => bool. + measurable s & measurable t & pred_set.INTER s t = EMPTY --> + prob (pred_set.UNION s t) = prob s + prob t" by (import prob PROB_ADDITIVE) -lemma PROB_COMPL: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) s) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((COMPL::((nat => bool) => bool) => (nat => bool) => bool) s)) - ((op -::real => real => real) (1::real) - ((prob::((nat => bool) => bool) => real) s))))" +lemma PROB_COMPL: "ALL s::(nat => bool) => bool. measurable s --> prob (COMPL s) = 1 - prob s" by (import prob PROB_COMPL) lemma PROB_SUP_EXISTS1: "ALL s::(nat => bool) => bool. @@ -2641,160 +1525,51 @@ algebra_measure b = x & SUBSET (algebra_embed b) s" by (import prob PROB_SUP_EXISTS1) -lemma PROB_SUP_EXISTS2: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (Ex::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%r::real. - (op -->::bool => bool => bool) - ((Ex::(bool list list => bool) => bool) - (%b::bool list list. - (op &::bool => bool => bool) - ((op =::real => real => bool) - ((algebra_measure::bool list list => real) b) r) - ((SUBSET::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((algebra_embed::bool list list - => (nat => bool) => bool) - b) - s))) - ((op <=::real => real => bool) r x))))" +lemma PROB_SUP_EXISTS2: "ALL s::(nat => bool) => bool. + EX x::real. + ALL r::real. + (EX b::bool list list. + algebra_measure b = r & SUBSET (algebra_embed b) s) --> + r <= x" by (import prob PROB_SUP_EXISTS2) -lemma PROB_LE_X: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((All::(((nat => bool) => bool) => bool) => bool) - (%s'::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) s') - ((SUBSET::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - s' s)) - ((op <=::real => real => bool) - ((prob::((nat => bool) => bool) => real) s') x))) - ((op <=::real => real => bool) - ((prob::((nat => bool) => bool) => real) s) x)))" +lemma PROB_LE_X: "ALL (s::(nat => bool) => bool) x::real. + (ALL s'::(nat => bool) => bool. + measurable s' & SUBSET s' s --> prob s' <= x) --> + prob s <= x" by (import prob PROB_LE_X) -lemma X_LE_PROB: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((Ex::(((nat => bool) => bool) => bool) => bool) - (%s'::(nat => bool) => bool. - (op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) s') - ((op &::bool => bool => bool) - ((SUBSET::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - s' s) - ((op <=::real => real => bool) x - ((prob::((nat => bool) => bool) => real) s'))))) - ((op <=::real => real => bool) x - ((prob::((nat => bool) => bool) => real) s))))" +lemma X_LE_PROB: "ALL (s::(nat => bool) => bool) x::real. + (EX s'::(nat => bool) => bool. + measurable s' & SUBSET s' s & x <= prob s') --> + x <= prob s" by (import prob X_LE_PROB) -lemma PROB_SUBSET_MONO: "(All::(((nat => bool) => bool) => bool) => bool) - (%s::(nat => bool) => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%t::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((SUBSET::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - s t) - ((op <=::real => real => bool) - ((prob::((nat => bool) => bool) => real) s) - ((prob::((nat => bool) => bool) => real) t))))" +lemma PROB_SUBSET_MONO: "ALL (s::(nat => bool) => bool) t::(nat => bool) => bool. + SUBSET s t --> prob s <= prob t" by (import prob PROB_SUBSET_MONO) lemma PROB_ALG: "ALL x::bool list. prob (alg_embed x) = (1 / 2) ^ length x" by (import prob PROB_ALG) -lemma PROB_STL: "(All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) p) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - p (STL::(nat => bool) => nat => bool))) - ((prob::((nat => bool) => bool) => real) p)))" +lemma PROB_STL: "ALL p::(nat => bool) => bool. measurable p --> prob (p o STL) = prob p" by (import prob PROB_STL) -lemma PROB_SDROP: "(All::(nat => bool) => bool) - (%n::nat. - (All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) p) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - p ((SDROP::nat => (nat => bool) => nat => bool) n))) - ((prob::((nat => bool) => bool) => real) p))))" +lemma PROB_SDROP: "ALL (n::nat) p::(nat => bool) => bool. + measurable p --> prob (p o SDROP n) = prob p" by (import prob PROB_SDROP) -lemma PROB_INTER_HALVES: "(All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) p) - ((op =::real => real => bool) - ((op +::real => real => real) - ((prob::((nat => bool) => bool) => real) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - (%x::nat => bool. - (op =::bool => bool => bool) - ((SHD::(nat => bool) => bool) x) (True::bool)) - p)) - ((prob::((nat => bool) => bool) => real) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - (%x::nat => bool. - (op =::bool => bool => bool) - ((SHD::(nat => bool) => bool) x) (False::bool)) - p))) - ((prob::((nat => bool) => bool) => real) p)))" +lemma PROB_INTER_HALVES: "ALL p::(nat => bool) => bool. + measurable p --> + prob (pred_set.INTER (%x::nat => bool. SHD x = True) p) + + prob (pred_set.INTER (%x::nat => bool. SHD x = False) p) = + prob p" by (import prob PROB_INTER_HALVES) -lemma PROB_INTER_SHD: "(All::(bool => bool) => bool) - (%b::bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) p) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - (%x::nat => bool. - (op =::bool => bool => bool) - ((SHD::(nat => bool) => bool) x) b) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - p (STL::(nat => bool) => nat => bool)))) - ((op *::real => real => real) - ((op /::real => real => real) (1::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - ((prob::((nat => bool) => bool) => real) p)))))" +lemma PROB_INTER_SHD: "ALL (b::bool) p::(nat => bool) => bool. + measurable p --> + prob (pred_set.INTER (%x::nat => bool. SHD x = b) (p o STL)) = + 1 / 2 * prob p" by (import prob PROB_INTER_SHD) lemma ALGEBRA_MEASURE_POS: "ALL l::bool list list. 0 <= algebra_measure l" @@ -2818,21 +1593,8 @@ lemma PROB_SHD: "ALL b::bool. prob (%s::nat => bool. SHD s = b) = 1 / 2" by (import prob PROB_SHD) -lemma PROB_COMPL_LE1: "(All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (All::(real => bool) => bool) - (%r::real. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) p) - ((op =::bool => bool => bool) - ((op <=::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((COMPL::((nat => bool) => bool) => (nat => bool) => bool) - p)) - r) - ((op <=::real => real => bool) - ((op -::real => real => real) (1::real) r) - ((prob::((nat => bool) => bool) => real) p)))))" +lemma PROB_COMPL_LE1: "ALL (p::(nat => bool) => bool) r::real. + measurable p --> (prob (COMPL p) <= r) = (1 - r <= prob p)" by (import prob PROB_COMPL_LE1) ;end_setup @@ -2981,103 +1743,34 @@ (let c::bool list = alg_cover l s in (r c, SDROP (length c) s))))" by (import prob_indep indep_def) -lemma INDEP_SET_BASIC: "(All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) p) - ((op &::bool => bool => bool) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - (EMPTY::(nat => bool) => bool) p) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - (pred_set.UNIV::(nat => bool) => bool) p)))" +lemma INDEP_SET_BASIC: "ALL p::(nat => bool) => bool. + measurable p --> indep_set EMPTY p & indep_set pred_set.UNIV p" by (import prob_indep INDEP_SET_BASIC) lemma INDEP_SET_SYM: "ALL (p::(nat => bool) => bool) q::(nat => bool) => bool. indep_set p q = indep_set p q" by (import prob_indep INDEP_SET_SYM) -lemma INDEP_SET_DISJOINT_DECOMP: "(All::(((nat => bool) => bool) => bool) => bool) - (%p::(nat => bool) => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%r::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - p r) - ((op &::bool => bool => bool) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - q r) - ((op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) => (nat => bool) => bool) - p q) - (EMPTY::(nat => bool) => bool)))) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((pred_set.UNION::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - p q) - r))))" +lemma INDEP_SET_DISJOINT_DECOMP: "ALL (p::(nat => bool) => bool) (q::(nat => bool) => bool) + r::(nat => bool) => bool. + indep_set p r & indep_set q r & pred_set.INTER p q = EMPTY --> + indep_set (pred_set.UNION p q) r" by (import prob_indep INDEP_SET_DISJOINT_DECOMP) lemma ALG_COVER_SET_BASIC: "~ alg_cover_set [] & alg_cover_set [[]] & alg_cover_set [[True], [False]]" by (import prob_indep ALG_COVER_SET_BASIC) -lemma ALG_COVER_WELL_DEFINED: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (All::((nat => bool) => bool) => bool) - (%x::nat => bool. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((op &::bool => bool => bool) - ((op mem::bool list => bool list list => bool) - ((alg_cover::bool list list => (nat => bool) => bool list) l - x) - l) - ((alg_embed::bool list => (nat => bool) => bool) - ((alg_cover::bool list list => (nat => bool) => bool list) l - x) - x))))" +lemma ALG_COVER_WELL_DEFINED: "ALL (l::bool list list) x::nat => bool. + alg_cover_set l --> alg_cover l x mem l & alg_embed (alg_cover l x) x" by (import prob_indep ALG_COVER_WELL_DEFINED) lemma ALG_COVER_UNIV: "alg_cover [[]] = K []" by (import prob_indep ALG_COVER_UNIV) -lemma MAP_CONS_TL_FILTER: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (All::(bool => bool) => bool) - (%b::bool. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op mem::bool list => bool list list => bool) ([]::bool list) - l)) - ((op =::bool list list => bool list list => bool) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) b) - ((map::(bool list => bool list) - => bool list list => bool list list) - (tl::bool list => bool list) - ((filter::(bool list => bool) - => bool list list => bool list list) - (%x::bool list. - (op =::bool => bool => bool) - ((hd::bool list => bool) x) b) - l))) - ((filter::(bool list => bool) - => bool list list => bool list list) - (%x::bool list. - (op =::bool => bool => bool) ((hd::bool list => bool) x) - b) - l))))" +lemma MAP_CONS_TL_FILTER: "ALL (l::bool list list) b::bool. + ~ [] mem l --> + map (op # b) (map tl [x::bool list:l. hd x = b]) = + [x::bool list:l. hd x = b]" by (import prob_indep MAP_CONS_TL_FILTER) lemma ALG_COVER_SET_CASES_THM: "ALL l::bool list list. @@ -3088,409 +1781,100 @@ alg_cover_set xa & l = map (op # True) x @ map (op # False) xa))" by (import prob_indep ALG_COVER_SET_CASES_THM) -lemma ALG_COVER_SET_CASES: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - (P ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))) - ((All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l1) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l2) - ((alg_cover_set::bool list list => bool) - ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2))))) - (P ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2))))))) - ((All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) (P l))))" +lemma ALG_COVER_SET_CASES: "ALL P::bool list list => bool. + P [[]] & + (ALL (l1::bool list list) l2::bool list list. + alg_cover_set l1 & + alg_cover_set l2 & + alg_cover_set (map (op # True) l1 @ map (op # False) l2) --> + P (map (op # True) l1 @ map (op # False) l2)) --> + (ALL l::bool list list. alg_cover_set l --> P l)" by (import prob_indep ALG_COVER_SET_CASES) -lemma ALG_COVER_SET_INDUCTION: "(All::((bool list list => bool) => bool) => bool) - (%P::bool list list => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - (P ((op #::bool list => bool list list => bool list list) - ([]::bool list) ([]::bool list list))) - ((All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l1) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l2) - ((op &::bool => bool => bool) (P l1) - ((op &::bool => bool => bool) (P l2) - ((alg_cover_set::bool list list => bool) - ((op @::bool list list -=> bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2))))))) - (P ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2))))))) - ((All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) (P l))))" +lemma ALG_COVER_SET_INDUCTION: "ALL P::bool list list => bool. + P [[]] & + (ALL (l1::bool list list) l2::bool list list. + alg_cover_set l1 & + alg_cover_set l2 & + P l1 & + P l2 & alg_cover_set (map (op # True) l1 @ map (op # False) l2) --> + P (map (op # True) l1 @ map (op # False) l2)) --> + (ALL l::bool list list. alg_cover_set l --> P l)" by (import prob_indep ALG_COVER_SET_INDUCTION) -lemma ALG_COVER_EXISTS_UNIQUE: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((All::((nat => bool) => bool) => bool) - (%s::nat => bool. - (Ex1::(bool list => bool) => bool) - (%x::bool list. - (op &::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x l) - ((alg_embed::bool list => (nat => bool) => bool) x s)))))" +lemma ALG_COVER_EXISTS_UNIQUE: "ALL l::bool list list. + alg_cover_set l --> + (ALL s::nat => bool. EX! x::bool list. x mem l & alg_embed x s)" by (import prob_indep ALG_COVER_EXISTS_UNIQUE) -lemma ALG_COVER_UNIQUE: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (All::(bool list => bool) => bool) - (%x::bool list. - (All::((nat => bool) => bool) => bool) - (%s::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((op &::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x l) - ((alg_embed::bool list => (nat => bool) => bool) x s))) - ((op =::bool list => bool list => bool) - ((alg_cover::bool list list => (nat => bool) => bool list) - l s) - x))))" +lemma ALG_COVER_UNIQUE: "ALL (l::bool list list) (x::bool list) s::nat => bool. + alg_cover_set l & x mem l & alg_embed x s --> alg_cover l s = x" by (import prob_indep ALG_COVER_UNIQUE) -lemma ALG_COVER_STEP: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (All::(bool => bool) => bool) - (%h::bool. - (All::((nat => bool) => bool) => bool) - (%t::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l1) - ((alg_cover_set::bool list list => bool) l2)) - ((op =::bool list => bool list => bool) - ((alg_cover::bool list list - => (nat => bool) => bool list) - ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2)) - ((SCONS::bool => (nat => bool) => nat => bool) h - t)) - ((If::bool => bool list => bool list => bool list) h - ((op #::bool => bool list => bool list) - (True::bool) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l1 t)) - ((op #::bool => bool list => bool list) - (False::bool) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l2 t))))))))" +lemma ALG_COVER_STEP: "ALL (l1::bool list list) (l2::bool list list) (h::bool) t::nat => bool. + alg_cover_set l1 & alg_cover_set l2 --> + alg_cover (map (op # True) l1 @ map (op # False) l2) (SCONS h t) = + (if h then True # alg_cover l1 t else False # alg_cover l2 t)" by (import prob_indep ALG_COVER_STEP) -lemma ALG_COVER_HEAD: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((All::((bool list => bool) => bool) => bool) - (%f::bool list => bool. - (op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((op o::(bool list => bool) - => ((nat => bool) => bool list) - => (nat => bool) => bool) - f ((alg_cover::bool list list => (nat => bool) => bool list) - l)) - ((algebra_embed::bool list list => (nat => bool) => bool) - ((filter::(bool list => bool) - => bool list list => bool list list) - f l)))))" +lemma ALG_COVER_HEAD: "ALL l::bool list list. + alg_cover_set l --> + (ALL f::bool list => bool. f o alg_cover l = algebra_embed (filter f l))" by (import prob_indep ALG_COVER_HEAD) -lemma ALG_COVER_TAIL_STEP: "(All::(bool list list => bool) => bool) - (%l1::bool list list. - (All::(bool list list => bool) => bool) - (%l2::bool list list. - (All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l1) - ((alg_cover_set::bool list list => bool) l2)) - ((op =::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q (%x::nat => bool. - (SDROP::nat => (nat => bool) => nat => bool) - ((size::bool list => nat) - ((alg_cover::bool list list - => (nat => bool) => bool list) - ((op @::bool list list - => bool list list => bool list list) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (True::bool)) - l1) - ((map::(bool list => bool list) - => bool list list => bool list list) - ((op #::bool => bool list => bool list) - (False::bool)) - l2)) - x)) - x)) - ((pred_set.UNION::((nat => bool) => bool) - => ((nat => bool) => bool) - => (nat => bool) => bool) - ((pred_set.INTER::((nat => bool) => bool) -=> ((nat => bool) => bool) => (nat => bool) => bool) - (%x::nat => bool. - (op =::bool => bool => bool) - ((SHD::(nat => bool) => bool) x) (True::bool)) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q ((op o::((nat => bool) => nat => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => nat => bool) - (%x::nat => bool. - (SDROP::nat => (nat => bool) => nat => bool) - ((size::bool list => nat) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l1 x)) - x) - (STL::(nat => bool) => nat => bool)))) - ((pred_set.INTER::((nat => bool) => bool) -=> ((nat => bool) => bool) => (nat => bool) => bool) - (%x::nat => bool. - (op =::bool => bool => bool) - ((SHD::(nat => bool) => bool) x) (False::bool)) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q ((op o::((nat => bool) => nat => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => nat => bool) - (%x::nat => bool. - (SDROP::nat => (nat => bool) => nat => bool) - ((size::bool list => nat) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l2 x)) - x) - (STL::(nat => bool) => nat => bool)))))))))" +lemma ALG_COVER_TAIL_STEP: "ALL (l1::bool list list) (l2::bool list list) q::(nat => bool) => bool. + alg_cover_set l1 & alg_cover_set l2 --> + q o + (%x::nat => bool. + SDROP + (length (alg_cover (map (op # True) l1 @ map (op # False) l2) x)) + x) = + pred_set.UNION + (pred_set.INTER (%x::nat => bool. SHD x = True) + (q o ((%x::nat => bool. SDROP (length (alg_cover l1 x)) x) o STL))) + (pred_set.INTER (%x::nat => bool. SHD x = False) + (q o ((%x::nat => bool. SDROP (length (alg_cover l2 x)) x) o STL)))" by (import prob_indep ALG_COVER_TAIL_STEP) -lemma ALG_COVER_TAIL_MEASURABLE: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op =::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q (%x::nat => bool. - (SDROP::nat => (nat => bool) => nat => bool) - ((size::bool list => nat) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l x)) - x))) - ((measurable::((nat => bool) => bool) => bool) q))))" +lemma ALG_COVER_TAIL_MEASURABLE: "ALL l::bool list list. + alg_cover_set l --> + (ALL q::(nat => bool) => bool. + measurable + (q o (%x::nat => bool. SDROP (length (alg_cover l x)) x)) = + measurable q)" by (import prob_indep ALG_COVER_TAIL_MEASURABLE) -lemma ALG_COVER_TAIL_PROB: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) q) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q (%x::nat => bool. - (SDROP::nat => (nat => bool) => nat => bool) - ((size::bool list => nat) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l x)) - x))) - ((prob::((nat => bool) => bool) => real) q)))))" +lemma ALG_COVER_TAIL_PROB: "ALL l::bool list list. + alg_cover_set l --> + (ALL q::(nat => bool) => bool. + measurable q --> + prob (q o (%x::nat => bool. SDROP (length (alg_cover l x)) x)) = + prob q)" by (import prob_indep ALG_COVER_TAIL_PROB) -lemma INDEP_INDEP_SET_LEMMA: "(All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((alg_cover_set::bool list list => bool) l) - ((All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) q) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x l) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((pred_set.INTER::((nat => bool) => bool) - => ((nat => bool) => bool) => (nat => bool) => bool) - ((alg_embed::bool list => (nat => bool) => bool) - x) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q (%x::nat => bool. - (SDROP::nat - => (nat => bool) => nat => bool) - ((size::bool list => nat) - ((alg_cover::bool list list - => (nat => bool) => bool list) - l x)) - x)))) - ((op *::real => real => real) - ((op ^::real => nat => real) - ((op /::real => real => real) (1::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) - (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit)))) - ((size::bool list => nat) x)) - ((prob::((nat => bool) => bool) => real) q))))))))" +lemma INDEP_INDEP_SET_LEMMA: "ALL l::bool list list. + alg_cover_set l --> + (ALL q::(nat => bool) => bool. + measurable q --> + (ALL x::bool list. + x mem l --> + prob + (pred_set.INTER (alg_embed x) + (q o (%x::nat => bool. SDROP (length (alg_cover l x)) x))) = + (1 / 2) ^ length x * prob q))" by (import prob_indep INDEP_INDEP_SET_LEMMA) -lemma INDEP_SET_LIST: "(All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (All::(bool list list => bool) => bool) - (%l::bool list list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((alg_sorted::bool list list => bool) l) - ((op &::bool => bool => bool) - ((alg_prefixfree::bool list list => bool) l) - ((op &::bool => bool => bool) - ((measurable::((nat => bool) => bool) => bool) q) - ((All::(bool list => bool) => bool) - (%x::bool list. - (op -->::bool => bool => bool) - ((op mem::bool list => bool list list => bool) x l) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((alg_embed::bool list => (nat => bool) => bool) - x) - q)))))) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((algebra_embed::bool list list => (nat => bool) => bool) l) - q)))" +lemma INDEP_SET_LIST: "ALL (q::(nat => bool) => bool) l::bool list list. + alg_sorted l & + alg_prefixfree l & + measurable q & + (ALL x::bool list. x mem l --> indep_set (alg_embed x) q) --> + indep_set (algebra_embed l) q" by (import prob_indep INDEP_SET_LIST) -lemma INDEP_INDEP_SET: "(All::(((nat => bool) => 'a::type * (nat => bool)) => bool) => bool) - (%f::(nat => bool) => 'a::type * (nat => bool). - (All::(('a::type => bool) => bool) => bool) - (%p::'a::type => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((indep::((nat => bool) => 'a::type * (nat => bool)) - => bool) - f) - ((measurable::((nat => bool) => bool) => bool) q)) - ((indep_set::((nat => bool) => bool) - => ((nat => bool) => bool) => bool) - ((op o::('a::type => bool) - => ((nat => bool) => 'a::type) - => (nat => bool) => bool) - p ((op o::('a::type * (nat => bool) => 'a::type) - => ((nat => bool) => 'a::type * (nat => bool)) - => (nat => bool) => 'a::type) - (fst::'a::type * (nat => bool) => 'a::type) f)) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q ((op o::('a::type * (nat => bool) => nat => bool) - => ((nat => bool) => 'a::type * (nat => bool)) - => (nat => bool) => nat => bool) - (snd::'a::type * (nat => bool) => nat => bool) - f))))))" +lemma INDEP_INDEP_SET: "ALL (f::(nat => bool) => 'a::type * (nat => bool)) (p::'a::type => bool) + q::(nat => bool) => bool. + indep f & measurable q --> indep_set (p o (fst o f)) (q o (snd o f))" by (import prob_indep INDEP_INDEP_SET) lemma INDEP_UNIT: "ALL x::'a::type. indep (UNIT x)" @@ -3503,144 +1887,35 @@ BIND SDEST (%k::bool. f o SCONS k) = f" by (import prob_indep BIND_STEP) -lemma INDEP_BIND_SDEST: "(All::((bool => (nat => bool) => 'a::type * (nat => bool)) => bool) => bool) - (%f::bool => (nat => bool) => 'a::type * (nat => bool). - (op -->::bool => bool => bool) - ((All::(bool => bool) => bool) - (%x::bool. - (indep::((nat => bool) => 'a::type * (nat => bool)) => bool) - (f x))) - ((indep::((nat => bool) => 'a::type * (nat => bool)) => bool) - ((BIND::((nat => bool) => bool * (nat => bool)) - => (bool => (nat => bool) => 'a::type * (nat => bool)) - => (nat => bool) => 'a::type * (nat => bool)) - (SDEST::(nat => bool) => bool * (nat => bool)) f)))" +lemma INDEP_BIND_SDEST: "ALL f::bool => (nat => bool) => 'a::type * (nat => bool). + (ALL x::bool. indep (f x)) --> indep (BIND SDEST f)" by (import prob_indep INDEP_BIND_SDEST) -lemma INDEP_BIND: "(All::(((nat => bool) => 'a::type * (nat => bool)) => bool) => bool) - (%f::(nat => bool) => 'a::type * (nat => bool). - (All::(('a::type => (nat => bool) => 'b::type * (nat => bool)) => bool) - => bool) - (%g::'a::type => (nat => bool) => 'b::type * (nat => bool). - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((indep::((nat => bool) => 'a::type * (nat => bool)) => bool) - f) - ((All::('a::type => bool) => bool) - (%x::'a::type. - (indep::((nat => bool) => 'b::type * (nat => bool)) - => bool) - (g x)))) - ((indep::((nat => bool) => 'b::type * (nat => bool)) => bool) - ((BIND::((nat => bool) => 'a::type * (nat => bool)) - => ('a::type - => (nat => bool) => 'b::type * (nat => bool)) - => (nat => bool) => 'b::type * (nat => bool)) - f g))))" +lemma INDEP_BIND: "ALL (f::(nat => bool) => 'a::type * (nat => bool)) + g::'a::type => (nat => bool) => 'b::type * (nat => bool). + indep f & (ALL x::'a::type. indep (g x)) --> indep (BIND f g)" by (import prob_indep INDEP_BIND) -lemma INDEP_PROB: "(All::(((nat => bool) => 'a::type * (nat => bool)) => bool) => bool) - (%f::(nat => bool) => 'a::type * (nat => bool). - (All::(('a::type => bool) => bool) => bool) - (%p::'a::type => bool. - (All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((indep::((nat => bool) => 'a::type * (nat => bool)) - => bool) - f) - ((measurable::((nat => bool) => bool) => bool) q)) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - ((pred_set.INTER::((nat => bool) => bool) -=> ((nat => bool) => bool) => (nat => bool) => bool) - ((op o::('a::type => bool) - => ((nat => bool) => 'a::type) - => (nat => bool) => bool) - p ((op o::('a::type * (nat => bool) => 'a::type) - => ((nat => bool) -=> 'a::type * (nat => bool)) - => (nat => bool) => 'a::type) - (fst::'a::type * (nat => bool) => 'a::type) f)) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q ((op o::('a::type * (nat => bool) => nat => bool) - => ((nat => bool) -=> 'a::type * (nat => bool)) - => (nat => bool) => nat => bool) - (snd::'a::type * (nat => bool) => nat => bool) - f)))) - ((op *::real => real => real) - ((prob::((nat => bool) => bool) => real) - ((op o::('a::type => bool) - => ((nat => bool) => 'a::type) - => (nat => bool) => bool) - p ((op o::('a::type * (nat => bool) => 'a::type) - => ((nat => bool) -=> 'a::type * (nat => bool)) - => (nat => bool) => 'a::type) - (fst::'a::type * (nat => bool) => 'a::type) f))) - ((prob::((nat => bool) => bool) => real) q))))))" +lemma INDEP_PROB: "ALL (f::(nat => bool) => 'a::type * (nat => bool)) (p::'a::type => bool) + q::(nat => bool) => bool. + indep f & measurable q --> + prob (pred_set.INTER (p o (fst o f)) (q o (snd o f))) = + prob (p o (fst o f)) * prob q" by (import prob_indep INDEP_PROB) -lemma INDEP_MEASURABLE1: "(All::(((nat => bool) => 'a::type * (nat => bool)) => bool) => bool) - (%f::(nat => bool) => 'a::type * (nat => bool). - (All::(('a::type => bool) => bool) => bool) - (%p::'a::type => bool. - (op -->::bool => bool => bool) - ((indep::((nat => bool) => 'a::type * (nat => bool)) => bool) f) - ((measurable::((nat => bool) => bool) => bool) - ((op o::('a::type => bool) - => ((nat => bool) => 'a::type) - => (nat => bool) => bool) - p ((op o::('a::type * (nat => bool) => 'a::type) - => ((nat => bool) => 'a::type * (nat => bool)) - => (nat => bool) => 'a::type) - (fst::'a::type * (nat => bool) => 'a::type) f)))))" +lemma INDEP_MEASURABLE1: "ALL (f::(nat => bool) => 'a::type * (nat => bool)) p::'a::type => bool. + indep f --> measurable (p o (fst o f))" by (import prob_indep INDEP_MEASURABLE1) -lemma INDEP_MEASURABLE2: "(All::(((nat => bool) => 'a::type * (nat => bool)) => bool) => bool) - (%f::(nat => bool) => 'a::type * (nat => bool). - (All::(((nat => bool) => bool) => bool) => bool) - (%q::(nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((indep::((nat => bool) => 'a::type * (nat => bool)) => bool) - f) - ((measurable::((nat => bool) => bool) => bool) q)) - ((measurable::((nat => bool) => bool) => bool) - ((op o::((nat => bool) => bool) - => ((nat => bool) => nat => bool) - => (nat => bool) => bool) - q ((op o::('a::type * (nat => bool) => nat => bool) - => ((nat => bool) => 'a::type * (nat => bool)) - => (nat => bool) => nat => bool) - (snd::'a::type * (nat => bool) => nat => bool) f)))))" +lemma INDEP_MEASURABLE2: "ALL (f::(nat => bool) => 'a::type * (nat => bool)) q::(nat => bool) => bool. + indep f & measurable q --> measurable (q o (snd o f))" by (import prob_indep INDEP_MEASURABLE2) -lemma PROB_INDEP_BOUND: "(All::(((nat => bool) => nat * (nat => bool)) => bool) => bool) - (%f::(nat => bool) => nat * (nat => bool). - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((indep::((nat => bool) => nat * (nat => bool)) => bool) f) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op <::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) (f s)) - ((Suc::nat => nat) n))) - ((op +::real => real => real) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op <::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) (f s)) n)) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op =::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) (f s)) n))))))" +lemma PROB_INDEP_BOUND: "ALL (f::(nat => bool) => nat * (nat => bool)) n::nat. + indep f --> + prob (%s::nat => bool. fst (f s) < Suc n) = + prob (%s::nat => bool. fst (f s) < n) + + prob (%s::nat => bool. fst (f s) = n)" by (import prob_indep PROB_INDEP_BOUND) ;end_setup @@ -3668,21 +1943,8 @@ unif_bound (Suc (v::nat)) = Suc (unif_bound (Suc v div 2))" by (import prob_uniform unif_bound_def) -lemma unif_bound_ind: "(All::((nat => bool) => bool) => bool) - (%P::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) (P (0::nat)) - ((All::(nat => bool) => bool) - (%v::nat. - (op -->::bool => bool => bool) - (P ((op div::nat => nat => nat) ((Suc::nat => nat) v) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - (P ((Suc::nat => nat) v))))) - ((All::(nat => bool) => bool) P))" +lemma unif_bound_ind: "ALL P::nat => bool. + P 0 & (ALL v::nat. P (Suc v div 2) --> P (Suc v)) --> All P" by (import prob_uniform unif_bound_ind) constdefs @@ -3725,223 +1987,57 @@ in (if SHD s' then 2 * m + 1 else 2 * m, STL s'))" by (import prob_uniform unif_def) -lemma unif_ind: "(All::((nat => (nat => bool) => bool) => bool) => bool) - (%P::nat => (nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::((nat => bool) => bool) => bool) (P (0::nat))) - ((All::(nat => bool) => bool) - (%v2::nat. - (All::((nat => bool) => bool) => bool) - (%s::nat => bool. - (op -->::bool => bool => bool) - (P ((op div::nat => nat => nat) ((Suc::nat => nat) v2) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - s) - (P ((Suc::nat => nat) v2) s))))) - ((All::(nat => bool) => bool) - (%v::nat. (All::((nat => bool) => bool) => bool) (P v))))" +lemma unif_ind: "ALL P::nat => (nat => bool) => bool. + All (P 0) & + (ALL (v2::nat) s::nat => bool. P (Suc v2 div 2) s --> P (Suc v2) s) --> + (ALL v::nat. All (P v))" by (import prob_uniform unif_ind) constdefs uniform_tupled :: "nat * nat * (nat => bool) => nat * (nat => bool)" - "(op ==::(nat * nat * (nat => bool) => nat * (nat => bool)) - => (nat * nat * (nat => bool) => nat * (nat => bool)) => prop) - (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool)) - ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool) - => ((nat * nat * (nat => bool) => nat * (nat => bool)) - => nat * nat * (nat => bool) => nat * (nat => bool)) - => nat * nat * (nat => bool) => nat * (nat => bool)) - ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool) - => bool) - => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool) - (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool. - (op &::bool => bool => bool) - ((WF::(nat * nat * (nat => bool) - => nat * nat * (nat => bool) => bool) - => bool) - R) - ((All::(nat => bool) => bool) - (%t::nat. - (All::((nat => bool) => bool) => bool) - (%s::nat => bool. - (All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%res::nat. - (All::((nat => bool) => bool) => bool) - (%s'::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::nat * (nat => bool) => nat * (nat => bool) => bool) - ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s') - ((unif::nat => (nat => bool) => nat * (nat => bool)) n s)) - ((Not::bool => bool) - ((op <::nat => nat => bool) res ((Suc::nat => nat) n)))) - (R - ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t - ((Pair::nat => (nat => bool) => nat * (nat => bool)) - ((Suc::nat => nat) n) s')) - ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) - ((Suc::nat => nat) t) - ((Pair::nat => (nat => bool) => nat * (nat => bool)) - ((Suc::nat => nat) n) s))))))))))) - (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool). - (split::(nat => nat * (nat => bool) => nat * (nat => bool)) - => nat * nat * (nat => bool) => nat * (nat => bool)) - (%(v::nat) v1::nat * (nat => bool). - (nat_case::nat * (nat => bool) - => (nat => nat * (nat => bool)) - => nat => nat * (nat => bool)) - ((split::(nat => (nat => bool) => nat * (nat => bool)) - => nat * (nat => bool) => nat * (nat => bool)) - (%(v3::nat) v4::nat => bool. - (nat_case::nat * (nat => bool) - => (nat => nat * (nat => bool)) - => nat => nat * (nat => bool)) - (ARB::nat * (nat => bool)) - (%v5::nat. - (Pair::nat => (nat => bool) => nat * (nat => bool)) - (0::nat) v4) - v3) - v1) - (%v2::nat. - (split::(nat => (nat => bool) => nat * (nat => bool)) - => nat * (nat => bool) => nat * (nat => bool)) - (%(v7::nat) v8::nat => bool. - (nat_case::nat * (nat => bool) - => (nat => nat * (nat => bool)) - => nat => nat * (nat => bool)) - (ARB::nat * (nat => bool)) - (%v9::nat. - (Let::nat * (nat => bool) - => (nat * (nat => bool) - => nat * (nat => bool)) - => nat * (nat => bool)) - ((unif::nat - => (nat => bool) => nat * (nat => bool)) - v9 v8) - ((split::(nat -=> (nat => bool) => nat * (nat => bool)) - => nat * (nat => bool) - => nat * (nat => bool)) - (%(res::nat) s'::nat => bool. - (If::bool - => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool)) - ((op <::nat => nat => bool) res - ((Suc::nat => nat) v9)) - ((Pair::nat - => (nat => bool) => nat * (nat => bool)) - res s') - (uniform_tupled - ((Pair::nat - => nat * (nat => bool) => nat * nat * (nat => bool)) - v2 ((Pair::nat => (nat => bool) => nat * (nat => bool)) - ((Suc::nat => nat) v9) s')))))) - v7) - v1) - v)))" + "uniform_tupled == +WFREC + (SOME R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool. + WF R & + (ALL (t::nat) (s::nat => bool) (n::nat) (res::nat) s'::nat => bool. + (res, s') = unif n s & ~ res < Suc n --> + R (t, Suc n, s') (Suc t, Suc n, s))) + (%(uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool)) + (v::nat, v1::nat * (nat => bool)). + case v of + 0 => (%(v3::nat, v4::nat => bool). + case v3 of 0 => ARB | Suc (v5::nat) => (0, v4)) + v1 + | Suc (v2::nat) => + (%(v7::nat, v8::nat => bool). + case v7 of 0 => ARB + | Suc (v9::nat) => + let (res::nat, s'::nat => bool) = unif v9 v8 + in if res < Suc v9 then (res, s') + else uniform_tupled (v2, Suc v9, s')) + v1)" -lemma uniform_tupled_primitive_def: "(op =::(nat * nat * (nat => bool) => nat * (nat => bool)) - => (nat * nat * (nat => bool) => nat * (nat => bool)) => bool) - (uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool)) - ((WFREC::(nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool) - => ((nat * nat * (nat => bool) => nat * (nat => bool)) - => nat * nat * (nat => bool) => nat * (nat => bool)) - => nat * nat * (nat => bool) => nat * (nat => bool)) - ((Eps::((nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool) - => bool) - => nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool) - (%R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool. - (op &::bool => bool => bool) - ((WF::(nat * nat * (nat => bool) - => nat * nat * (nat => bool) => bool) - => bool) - R) - ((All::(nat => bool) => bool) - (%t::nat. - (All::((nat => bool) => bool) => bool) - (%s::nat => bool. - (All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%res::nat. - (All::((nat => bool) => bool) => bool) - (%s'::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::nat * (nat => bool) => nat * (nat => bool) => bool) - ((Pair::nat => (nat => bool) => nat * (nat => bool)) res s') - ((unif::nat => (nat => bool) => nat * (nat => bool)) n s)) - ((Not::bool => bool) - ((op <::nat => nat => bool) res ((Suc::nat => nat) n)))) - (R - ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) t - ((Pair::nat => (nat => bool) => nat * (nat => bool)) - ((Suc::nat => nat) n) s')) - ((Pair::nat => nat * (nat => bool) => nat * nat * (nat => bool)) - ((Suc::nat => nat) t) - ((Pair::nat => (nat => bool) => nat * (nat => bool)) - ((Suc::nat => nat) n) s))))))))))) - (%uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool). - (split::(nat => nat * (nat => bool) => nat * (nat => bool)) - => nat * nat * (nat => bool) => nat * (nat => bool)) - (%(v::nat) v1::nat * (nat => bool). - (nat_case::nat * (nat => bool) - => (nat => nat * (nat => bool)) - => nat => nat * (nat => bool)) - ((split::(nat => (nat => bool) => nat * (nat => bool)) - => nat * (nat => bool) => nat * (nat => bool)) - (%(v3::nat) v4::nat => bool. - (nat_case::nat * (nat => bool) - => (nat => nat * (nat => bool)) - => nat => nat * (nat => bool)) - (ARB::nat * (nat => bool)) - (%v5::nat. - (Pair::nat => (nat => bool) => nat * (nat => bool)) - (0::nat) v4) - v3) - v1) - (%v2::nat. - (split::(nat => (nat => bool) => nat * (nat => bool)) - => nat * (nat => bool) => nat * (nat => bool)) - (%(v7::nat) v8::nat => bool. - (nat_case::nat * (nat => bool) - => (nat => nat * (nat => bool)) - => nat => nat * (nat => bool)) - (ARB::nat * (nat => bool)) - (%v9::nat. - (Let::nat * (nat => bool) - => (nat * (nat => bool) - => nat * (nat => bool)) - => nat * (nat => bool)) - ((unif::nat - => (nat => bool) => nat * (nat => bool)) - v9 v8) - ((split::(nat -=> (nat => bool) => nat * (nat => bool)) - => nat * (nat => bool) - => nat * (nat => bool)) - (%(res::nat) s'::nat => bool. - (If::bool - => nat * (nat => bool) => nat * (nat => bool) => nat * (nat => bool)) - ((op <::nat => nat => bool) res - ((Suc::nat => nat) v9)) - ((Pair::nat - => (nat => bool) => nat * (nat => bool)) - res s') - (uniform_tupled - ((Pair::nat - => nat * (nat => bool) => nat * nat * (nat => bool)) - v2 ((Pair::nat => (nat => bool) => nat * (nat => bool)) - ((Suc::nat => nat) v9) s')))))) - v7) - v1) - v)))" +lemma uniform_tupled_primitive_def: "uniform_tupled = +WFREC + (SOME R::nat * nat * (nat => bool) => nat * nat * (nat => bool) => bool. + WF R & + (ALL (t::nat) (s::nat => bool) (n::nat) (res::nat) s'::nat => bool. + (res, s') = unif n s & ~ res < Suc n --> + R (t, Suc n, s') (Suc t, Suc n, s))) + (%(uniform_tupled::nat * nat * (nat => bool) => nat * (nat => bool)) + (v::nat, v1::nat * (nat => bool)). + case v of + 0 => (%(v3::nat, v4::nat => bool). + case v3 of 0 => ARB | Suc (v5::nat) => (0, v4)) + v1 + | Suc (v2::nat) => + (%(v7::nat, v8::nat => bool). + case v7 of 0 => ARB + | Suc (v9::nat) => + let (res::nat, s'::nat => bool) = unif v9 v8 + in if res < Suc v9 then (res, s') + else uniform_tupled (v2, Suc v9, s')) + v1)" by (import prob_uniform uniform_tupled_primitive_def) consts @@ -3954,46 +2050,15 @@ uniform x x1 x2 = uniform_tupled (x, x1, x2)" by (import prob_uniform uniform_curried_def) -lemma uniform_ind: "(All::((nat => nat => (nat => bool) => bool) => bool) => bool) - (%P::nat => nat => (nat => bool) => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%x::nat. - (All::((nat => bool) => bool) => bool) - (P ((Suc::nat => nat) x) (0::nat)))) - ((op &::bool => bool => bool) - ((All::((nat => bool) => bool) => bool) (P (0::nat) (0::nat))) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%x::nat. - (All::((nat => bool) => bool) => bool) - (P (0::nat) ((Suc::nat => nat) x)))) - ((All::(nat => bool) => bool) - (%x::nat. - (All::(nat => bool) => bool) - (%xa::nat. - (All::((nat => bool) => bool) => bool) - (%xb::nat => bool. - (op -->::bool => bool => bool) - ((All::(nat => bool) => bool) - (%xc::nat. - (All::((nat => bool) => bool) => bool) - (%xd::nat => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::nat * (nat => bool) => nat * (nat => bool) => bool) - ((Pair::nat => (nat => bool) => nat * (nat => bool)) xc xd) - ((unif::nat => (nat => bool) => nat * (nat => bool)) xa xb)) - ((Not::bool => bool) - ((op <::nat => nat => bool) xc ((Suc::nat => nat) xa)))) - (P x ((Suc::nat => nat) xa) xd)))) - (P ((Suc::nat => nat) x) ((Suc::nat => nat) xa) - xb)))))))) - ((All::(nat => bool) => bool) - (%x::nat. - (All::(nat => bool) => bool) - (%xa::nat. (All::((nat => bool) => bool) => bool) (P x xa)))))" +lemma uniform_ind: "ALL P::nat => nat => (nat => bool) => bool. + (ALL x::nat. All (P (Suc x) 0)) & + All (P 0 0) & + (ALL x::nat. All (P 0 (Suc x))) & + (ALL (x::nat) (xa::nat) xb::nat => bool. + (ALL (xc::nat) xd::nat => bool. + (xc, xd) = unif xa xb & ~ xc < Suc xa --> P x (Suc xa) xd) --> + P (Suc x) (Suc xa) xb) --> + (ALL (x::nat) xa::nat. All (P x xa))" by (import prob_uniform uniform_ind) lemma uniform_def: "uniform 0 (Suc (n::nat)) (s::nat => bool) = (0, s) & @@ -4011,23 +2076,7 @@ lemma UNIF_BOUND_LOWER_SUC: "ALL n::nat. Suc n <= 2 ^ unif_bound n" by (import prob_uniform UNIF_BOUND_LOWER_SUC) -lemma UNIF_BOUND_UPPER: "(All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((Not::bool => bool) ((op =::nat => nat => bool) n (0::nat))) - ((op <=::nat => nat => bool) - ((op ^::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))) - ((unif_bound::nat => nat) n)) - ((op *::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))) - n)))" +lemma UNIF_BOUND_UPPER: "ALL n::nat. n ~= 0 --> 2 ^ unif_bound n <= 2 * n" by (import prob_uniform UNIF_BOUND_UPPER) lemma UNIF_BOUND_UPPER_SUC: "ALL n::nat. 2 ^ unif_bound n <= Suc (2 * n)" @@ -4068,36 +2117,10 @@ ((k < 2 ^ unif_bound n) = (k' < 2 ^ unif_bound n))" by (import prob_uniform PROB_UNIF_PAIR) -lemma PROB_UNIF_BOUND: "(All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%k::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) k - ((op ^::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - ((unif_bound::nat => nat) n))) - ((op =::real => real => bool) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op <::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) - ((unif::nat => (nat => bool) => nat * (nat => bool)) n - s)) - k)) - ((op *::real => real => real) ((real::nat => real) k) - ((op ^::real => nat => real) - ((op /::real => real => real) (1::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - ((unif_bound::nat => nat) n))))))" +lemma PROB_UNIF_BOUND: "ALL (n::nat) k::nat. + k <= 2 ^ unif_bound n --> + prob (%s::nat => bool. fst (unif n s) < k) = + real k * (1 / 2) ^ unif_bound n" by (import prob_uniform PROB_UNIF_BOUND) lemma PROB_UNIF_GOOD: "ALL n::nat. 1 / 2 <= prob (%s::nat => bool. fst (unif n s) < Suc n)" @@ -4177,108 +2200,24 @@ ((Suc::nat => nat) m)))))))" by (import prob_uniform PROB_UNIFORM_UPPER_BOUND) -lemma PROB_UNIFORM_PAIR_SUC: "(All::(nat => bool) => bool) - (%t::nat. - (All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%k::nat. - (All::(nat => bool) => bool) - (%k'::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::nat => nat => bool) k ((Suc::nat => nat) n)) - ((op <::nat => nat => bool) k' - ((Suc::nat => nat) n))) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op =::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) - ((uniform::nat - => nat => (nat => bool) => nat * (nat => bool)) -t ((Suc::nat => nat) n) s)) - k)) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op =::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) - ((uniform::nat - => nat => (nat => bool) => nat * (nat => bool)) -t ((Suc::nat => nat) n) s)) - k')))) - ((op ^::real => nat => real) - ((op /::real => real => real) (1::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) - (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit)))) - t))))))" +lemma PROB_UNIFORM_PAIR_SUC: "ALL (t::nat) (n::nat) (k::nat) k'::nat. + k < Suc n & k' < Suc n --> + abs (prob (%s::nat => bool. fst (uniform t (Suc n) s) = k) - + prob (%s::nat => bool. fst (uniform t (Suc n) s) = k')) + <= (1 / 2) ^ t" by (import prob_uniform PROB_UNIFORM_PAIR_SUC) -lemma PROB_UNIFORM_SUC: "(All::(nat => bool) => bool) - (%t::nat. - (All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%k::nat. - (op -->::bool => bool => bool) - ((op <::nat => nat => bool) k ((Suc::nat => nat) n)) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op =::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) - ((uniform::nat - => nat => (nat => bool) => nat * (nat => bool)) - t ((Suc::nat => nat) n) s)) - k)) - ((op /::real => real => real) (1::real) - ((real::nat => real) ((Suc::nat => nat) n))))) - ((op ^::real => nat => real) - ((op /::real => real => real) (1::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - t)))))" +lemma PROB_UNIFORM_SUC: "ALL (t::nat) (n::nat) k::nat. + k < Suc n --> + abs (prob (%s::nat => bool. fst (uniform t (Suc n) s) = k) - + 1 / real (Suc n)) + <= (1 / 2) ^ t" by (import prob_uniform PROB_UNIFORM_SUC) -lemma PROB_UNIFORM: "(All::(nat => bool) => bool) - (%t::nat. - (All::(nat => bool) => bool) - (%n::nat. - (All::(nat => bool) => bool) - (%k::nat. - (op -->::bool => bool => bool) - ((op <::nat => nat => bool) k n) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) - ((prob::((nat => bool) => bool) => real) - (%s::nat => bool. - (op =::nat => nat => bool) - ((fst::nat * (nat => bool) => nat) - ((uniform::nat - => nat => (nat => bool) => nat * (nat => bool)) - t n s)) - k)) - ((op /::real => real => real) (1::real) - ((real::nat => real) n)))) - ((op ^::real => nat => real) - ((op /::real => real => real) (1::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - t)))))" +lemma PROB_UNIFORM: "ALL (t::nat) (n::nat) k::nat. + k < n --> + abs (prob (%s::nat => bool. fst (uniform t n s) = k) - 1 / real n) + <= (1 / 2) ^ t" by (import prob_uniform PROB_UNIFORM) ;end_setup diff -r 541f6367a431 -r b7870c2bd7df src/HOL/Import/HOL/HOL4Real.thy --- a/src/HOL/Import/HOL/HOL4Real.thy Wed Sep 28 11:50:15 2005 +0200 +++ b/src/HOL/Import/HOL/HOL4Real.thy Wed Sep 28 13:17:23 2005 +0200 @@ -1323,228 +1323,88 @@ ;setup_theory seq consts - "-->" :: "(nat => real) => real => bool" ("-->") + "hol4-->" :: "(nat => real) => real => bool" ("hol4-->") defs - "-->_def": "--> == %(x::nat => real) x0::real. tends x x0 (mtop mr1, nat_ge)" - -lemma tends_num_real: "ALL (x::nat => real) x0::real. --> x x0 = tends x x0 (mtop mr1, nat_ge)" + "hol4-->_def": "hol4--> == %(x::nat => real) x0::real. tends x x0 (mtop mr1, nat_ge)" + +lemma tends_num_real: "ALL (x::nat => real) x0::real. hol4--> x x0 = tends x x0 (mtop mr1, nat_ge)" by (import seq tends_num_real) -lemma SEQ: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (op =::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x0) - ((All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::(nat => bool) => bool) - (%N::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) N n) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) (x n) x0)) - e))))))))" +lemma SEQ: "ALL (x::nat => real) x0::real. + hol4--> x x0 = + (ALL e>0. EX N::nat. ALL n::nat. N <= n --> abs (x n - x0) < e)" by (import seq SEQ) -lemma SEQ_CONST: "ALL k::real. --> (%x::nat. k) k" +lemma SEQ_CONST: "ALL k::real. hol4--> (%x::nat. k) k" by (import seq SEQ_CONST) -lemma SEQ_ADD: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::((nat => real) => bool) => bool) - (%y::nat => real. - (All::(real => bool) => bool) - (%y0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x0) - ((-->::(nat => real) => real => bool) y y0)) - ((-->::(nat => real) => real => bool) - (%n::nat. (op +::real => real => real) (x n) (y n)) - ((op +::real => real => real) x0 y0))))))" +lemma SEQ_ADD: "ALL (x::nat => real) (x0::real) (y::nat => real) y0::real. + hol4--> x x0 & hol4--> y y0 --> hol4--> (%n::nat. x n + y n) (x0 + y0)" by (import seq SEQ_ADD) -lemma SEQ_MUL: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::((nat => real) => bool) => bool) - (%y::nat => real. - (All::(real => bool) => bool) - (%y0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x0) - ((-->::(nat => real) => real => bool) y y0)) - ((-->::(nat => real) => real => bool) - (%n::nat. (op *::real => real => real) (x n) (y n)) - ((op *::real => real => real) x0 y0))))))" +lemma SEQ_MUL: "ALL (x::nat => real) (x0::real) (y::nat => real) y0::real. + hol4--> x x0 & hol4--> y y0 --> hol4--> (%n::nat. x n * y n) (x0 * y0)" by (import seq SEQ_MUL) -lemma SEQ_NEG: "ALL (x::nat => real) x0::real. --> x x0 = --> (%n::nat. - x n) (- x0)" +lemma SEQ_NEG: "ALL (x::nat => real) x0::real. + hol4--> x x0 = hol4--> (%n::nat. - x n) (- x0)" by (import seq SEQ_NEG) -lemma SEQ_INV: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x0) - ((Not::bool => bool) - ((op =::real => real => bool) x0 (0::real)))) - ((-->::(nat => real) => real => bool) - (%n::nat. (inverse::real => real) (x n)) - ((inverse::real => real) x0))))" +lemma SEQ_INV: "ALL (x::nat => real) x0::real. + hol4--> x x0 & x0 ~= 0 --> hol4--> (%n::nat. inverse (x n)) (inverse x0)" by (import seq SEQ_INV) -lemma SEQ_SUB: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::((nat => real) => bool) => bool) - (%y::nat => real. - (All::(real => bool) => bool) - (%y0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x0) - ((-->::(nat => real) => real => bool) y y0)) - ((-->::(nat => real) => real => bool) - (%n::nat. (op -::real => real => real) (x n) (y n)) - ((op -::real => real => real) x0 y0))))))" +lemma SEQ_SUB: "ALL (x::nat => real) (x0::real) (y::nat => real) y0::real. + hol4--> x x0 & hol4--> y y0 --> hol4--> (%n::nat. x n - y n) (x0 - y0)" by (import seq SEQ_SUB) -lemma SEQ_DIV: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::((nat => real) => bool) => bool) - (%y::nat => real. - (All::(real => bool) => bool) - (%y0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x0) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) y y0) - ((Not::bool => bool) - ((op =::real => real => bool) y0 (0::real))))) - ((-->::(nat => real) => real => bool) - (%n::nat. (op /::real => real => real) (x n) (y n)) - ((op /::real => real => real) x0 y0))))))" +lemma SEQ_DIV: "ALL (x::nat => real) (x0::real) (y::nat => real) y0::real. + hol4--> x x0 & hol4--> y y0 & y0 ~= 0 --> + hol4--> (%n::nat. x n / y n) (x0 / y0)" by (import seq SEQ_DIV) -lemma SEQ_UNIQ: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x1::real. - (All::(real => bool) => bool) - (%x2::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) x x1) - ((-->::(nat => real) => real => bool) x x2)) - ((op =::real => real => bool) x1 x2))))" +lemma SEQ_UNIQ: "ALL (x::nat => real) (x1::real) x2::real. + hol4--> x x1 & hol4--> x x2 --> x1 = x2" by (import seq SEQ_UNIQ) constdefs convergent :: "(nat => real) => bool" - "convergent == %f::nat => real. Ex (--> f)" - -lemma convergent: "ALL f::nat => real. convergent f = Ex (--> f)" + "convergent == %f::nat => real. Ex (hol4--> f)" + +lemma convergent: "ALL f::nat => real. convergent f = Ex (hol4--> f)" by (import seq convergent) constdefs cauchy :: "(nat => real) => bool" - "(op ==::((nat => real) => bool) => ((nat => real) => bool) => prop) - (cauchy::(nat => real) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::(nat => bool) => bool) - (%N::nat. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::nat => nat => bool) N m) - ((op <=::nat => nat => bool) N n)) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) (f m) (f n))) - e)))))))" - -lemma cauchy: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op =::bool => bool => bool) ((cauchy::(nat => real) => bool) f) - ((All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::(nat => bool) => bool) - (%N::nat. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::nat => nat => bool) N m) - ((op <=::nat => nat => bool) N n)) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) (f m) - (f n))) - e))))))))" + "cauchy == +%f::nat => real. + ALL e>0. + EX N::nat. + ALL (m::nat) n::nat. N <= m & N <= n --> abs (f m - f n) < e" + +lemma cauchy: "ALL f::nat => real. + cauchy f = + (ALL e>0. + EX N::nat. + ALL (m::nat) n::nat. N <= m & N <= n --> abs (f m - f n) < e)" by (import seq cauchy) constdefs lim :: "(nat => real) => real" - "lim == %f::nat => real. Eps (--> f)" - -lemma lim: "ALL f::nat => real. lim f = Eps (--> f)" + "lim == %f::nat => real. Eps (hol4--> f)" + +lemma lim: "ALL f::nat => real. lim f = Eps (hol4--> f)" by (import seq lim) -lemma SEQ_LIM: "ALL f::nat => real. convergent f = --> f (lim f)" +lemma SEQ_LIM: "ALL f::nat => real. convergent f = hol4--> f (lim f)" by (import seq SEQ_LIM) constdefs subseq :: "(nat => nat) => bool" - "(op ==::((nat => nat) => bool) => ((nat => nat) => bool) => prop) - (subseq::(nat => nat) => bool) - (%f::nat => nat. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <::nat => nat => bool) m n) - ((op <::nat => nat => bool) (f m) (f n)))))" - -lemma subseq: "(All::((nat => nat) => bool) => bool) - (%f::nat => nat. - (op =::bool => bool => bool) ((subseq::(nat => nat) => bool) f) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <::nat => nat => bool) m n) - ((op <::nat => nat => bool) (f m) (f n))))))" + "subseq == %f::nat => nat. ALL (m::nat) n::nat. m < n --> f m < f n" + +lemma subseq: "ALL f::nat => nat. subseq f = (ALL (m::nat) n::nat. m < n --> f m < f n)" by (import seq subseq) lemma SUBSEQ_SUC: "ALL f::nat => nat. subseq f = (ALL n::nat. f n < f (Suc n))" @@ -1554,43 +1414,15 @@ mono :: "(nat => real) => bool" defs - mono_def: "(op ==::((nat => real) => bool) => ((nat => real) => bool) => prop) - (seq.mono::(nat => real) => bool) - (%f::nat => real. - (op |::bool => bool => bool) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) m n) - ((op <=::real => real => bool) (f m) (f n))))) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) m n) - ((op <=::real => real => bool) (f n) (f m))))))" - -lemma mono: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op =::bool => bool => bool) ((seq.mono::(nat => real) => bool) f) - ((op |::bool => bool => bool) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) m n) - ((op <=::real => real => bool) (f m) (f n))))) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) m n) - ((op <=::real => real => bool) (f n) (f m)))))))" + mono_def: "seq.mono == +%f::nat => real. + (ALL (m::nat) n::nat. m <= n --> f m <= f n) | + (ALL (m::nat) n::nat. m <= n --> f n <= f m)" + +lemma mono: "ALL f::nat => real. + seq.mono f = + ((ALL (m::nat) n::nat. m <= n --> f m <= f n) | + (ALL (m::nat) n::nat. m <= n --> f n <= f m))" by (import seq mono) lemma MONO_SUC: "ALL f::nat => real. @@ -1616,58 +1448,17 @@ bounded (mr1, nat_ge) s = (EX k::real. ALL n::nat. abs (s n) < k)" by (import seq SEQ_BOUNDED) -lemma SEQ_BOUNDED_2: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%k::real. - (All::(real => bool) => bool) - (%k'::real. - (op -->::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op &::bool => bool => bool) - ((op <=::real => real => bool) k (f n)) - ((op <=::real => real => bool) (f n) k'))) - ((bounded::real metric * (nat => nat => bool) - => (nat => real) => bool) - ((Pair::real metric - => (nat => nat => bool) - => real metric * (nat => nat => bool)) - (mr1::real metric) (nat_ge::nat => nat => bool)) - f))))" +lemma SEQ_BOUNDED_2: "ALL (f::nat => real) (k::real) k'::real. + (ALL n::nat. k <= f n & f n <= k') --> bounded (mr1, nat_ge) f" by (import seq SEQ_BOUNDED_2) -lemma SEQ_CBOUNDED: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) ((cauchy::(nat => real) => bool) f) - ((bounded::real metric * (nat => nat => bool) - => (nat => real) => bool) - ((Pair::real metric - => (nat => nat => bool) - => real metric * (nat => nat => bool)) - (mr1::real metric) (nat_ge::nat => nat => bool)) - f))" +lemma SEQ_CBOUNDED: "ALL f::nat => real. cauchy f --> bounded (mr1, nat_ge) f" by (import seq SEQ_CBOUNDED) -lemma SEQ_ICONV: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((bounded::real metric * (nat => nat => bool) - => (nat => real) => bool) - ((Pair::real metric - => (nat => nat => bool) - => real metric * (nat => nat => bool)) - (mr1::real metric) (nat_ge::nat => nat => bool)) - f) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) n m) - ((op <=::real => real => bool) (f n) (f m)))))) - ((convergent::(nat => real) => bool) f))" +lemma SEQ_ICONV: "ALL f::nat => real. + bounded (mr1, nat_ge) f & + (ALL (m::nat) n::nat. n <= m --> f n <= f m) --> + convergent f" by (import seq SEQ_ICONV) lemma SEQ_NEG_CONV: "ALL f::nat => real. convergent f = convergent (%n::nat. - f n)" @@ -1677,264 +1468,87 @@ bounded (mr1, nat_ge) (%n::nat. - f n) = bounded (mr1, nat_ge) f" by (import seq SEQ_NEG_BOUNDED) -lemma SEQ_BCONV: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((bounded::real metric * (nat => nat => bool) - => (nat => real) => bool) - ((Pair::real metric - => (nat => nat => bool) - => real metric * (nat => nat => bool)) - (mr1::real metric) (nat_ge::nat => nat => bool)) - f) - ((seq.mono::(nat => real) => bool) f)) - ((convergent::(nat => real) => bool) f))" +lemma SEQ_BCONV: "ALL f::nat => real. bounded (mr1, nat_ge) f & seq.mono f --> convergent f" by (import seq SEQ_BCONV) lemma SEQ_MONOSUB: "ALL s::nat => real. EX f::nat => nat. subseq f & seq.mono (%n::nat. s (f n))" by (import seq SEQ_MONOSUB) -lemma SEQ_SBOUNDED: "(All::((nat => real) => bool) => bool) - (%s::nat => real. - (All::((nat => nat) => bool) => bool) - (%f::nat => nat. - (op -->::bool => bool => bool) - ((bounded::real metric * (nat => nat => bool) - => (nat => real) => bool) - ((Pair::real metric - => (nat => nat => bool) - => real metric * (nat => nat => bool)) - (mr1::real metric) (nat_ge::nat => nat => bool)) - s) - ((bounded::real metric * (nat => nat => bool) - => (nat => real) => bool) - ((Pair::real metric - => (nat => nat => bool) - => real metric * (nat => nat => bool)) - (mr1::real metric) (nat_ge::nat => nat => bool)) - (%n::nat. s (f n)))))" +lemma SEQ_SBOUNDED: "ALL (s::nat => real) f::nat => nat. + bounded (mr1, nat_ge) s --> bounded (mr1, nat_ge) (%n::nat. s (f n))" by (import seq SEQ_SBOUNDED) -lemma SEQ_SUBLE: "(All::((nat => nat) => bool) => bool) - (%f::nat => nat. - (op -->::bool => bool => bool) ((subseq::(nat => nat) => bool) f) - ((All::(nat => bool) => bool) - (%n::nat. (op <=::nat => nat => bool) n (f n))))" +lemma SEQ_SUBLE: "ALL f::nat => nat. subseq f --> (ALL n::nat. n <= f n)" by (import seq SEQ_SUBLE) -lemma SEQ_DIRECT: "(All::((nat => nat) => bool) => bool) - (%f::nat => nat. - (op -->::bool => bool => bool) ((subseq::(nat => nat) => bool) f) - ((All::(nat => bool) => bool) - (%N1::nat. - (All::(nat => bool) => bool) - (%N2::nat. - (Ex::(nat => bool) => bool) - (%x::nat. - (op &::bool => bool => bool) - ((op <=::nat => nat => bool) N1 x) - ((op <=::nat => nat => bool) N2 (f x)))))))" +lemma SEQ_DIRECT: "ALL f::nat => nat. + subseq f --> (ALL (N1::nat) N2::nat. EX x::nat. N1 <= x & N2 <= f x)" by (import seq SEQ_DIRECT) lemma SEQ_CAUCHY: "ALL f::nat => real. cauchy f = convergent f" by (import seq SEQ_CAUCHY) -lemma SEQ_LE: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) f l) - ((op &::bool => bool => bool) - ((-->::(nat => real) => real => bool) g m) - ((Ex::(nat => bool) => bool) - (%x::nat. - (All::(nat => bool) => bool) - (%xa::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) x xa) - ((op <=::real => real => bool) (f xa) - (g xa))))))) - ((op <=::real => real => bool) l m)))))" +lemma SEQ_LE: "ALL (f::nat => real) (g::nat => real) (l::real) m::real. + hol4--> f l & + hol4--> g m & (EX x::nat. ALL xa::nat. x <= xa --> f xa <= g xa) --> + l <= m" by (import seq SEQ_LE) -lemma SEQ_SUC: "ALL (f::nat => real) l::real. --> f l = --> (%n::nat. f (Suc n)) l" +lemma SEQ_SUC: "ALL (f::nat => real) l::real. hol4--> f l = hol4--> (%n::nat. f (Suc n)) l" by (import seq SEQ_SUC) -lemma SEQ_ABS: "ALL f::nat => real. --> (%n::nat. abs (f n)) 0 = --> f 0" +lemma SEQ_ABS: "ALL f::nat => real. hol4--> (%n::nat. abs (f n)) 0 = hol4--> f 0" by (import seq SEQ_ABS) -lemma SEQ_ABS_IMP: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((-->::(nat => real) => real => bool) f l) - ((-->::(nat => real) => real => bool) - (%n::nat. (abs::real => real) (f n)) ((abs::real => real) l))))" +lemma SEQ_ABS_IMP: "ALL (f::nat => real) l::real. + hol4--> f l --> hol4--> (%n::nat. abs (f n)) (abs l)" by (import seq SEQ_ABS_IMP) -lemma SEQ_INV0: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) - ((All::(real => bool) => bool) - (%y::real. - (Ex::(nat => bool) => bool) - (%N::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) N n) - ((op <::real => real => bool) y (f n)))))) - ((-->::(nat => real) => real => bool) - (%n::nat. (inverse::real => real) (f n)) (0::real)))" +lemma SEQ_INV0: "ALL f::nat => real. + (ALL y::real. EX N::nat. ALL n::nat. N <= n --> y < f n) --> + hol4--> (%n::nat. inverse (f n)) 0" by (import seq SEQ_INV0) -lemma SEQ_POWER_ABS: "(All::(real => bool) => bool) - (%c::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) ((abs::real => real) c) (1::real)) - ((-->::(nat => real) => real => bool) - ((op ^::real => nat => real) ((abs::real => real) c)) (0::real)))" +lemma SEQ_POWER_ABS: "ALL c::real. abs c < 1 --> hol4--> (op ^ (abs c)) 0" by (import seq SEQ_POWER_ABS) -lemma SEQ_POWER: "(All::(real => bool) => bool) - (%c::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) ((abs::real => real) c) (1::real)) - ((-->::(nat => real) => real => bool) ((op ^::real => nat => real) c) - (0::real)))" +lemma SEQ_POWER: "ALL c::real. abs c < 1 --> hol4--> (op ^ c) 0" by (import seq SEQ_POWER) -lemma NEST_LEMMA: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) (f n) - (f ((Suc::nat => nat) n)))) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) (g ((Suc::nat => nat) n)) - (g n))) - ((All::(nat => bool) => bool) - (%n::nat. (op <=::real => real => bool) (f n) (g n))))) - ((Ex::(real => bool) => bool) - (%l::real. - (Ex::(real => bool) => bool) - (%m::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) l m) - ((op &::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) (f n) l)) - ((-->::(nat => real) => real => bool) f l)) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) m (g n))) - ((-->::(nat => real) => real => bool) g m))))))))" +lemma NEST_LEMMA: "ALL (f::nat => real) g::nat => real. + (ALL n::nat. f n <= f (Suc n)) & + (ALL n::nat. g (Suc n) <= g n) & (ALL n::nat. f n <= g n) --> + (EX (l::real) m::real. + l <= m & + ((ALL n::nat. f n <= l) & hol4--> f l) & + (ALL n::nat. m <= g n) & hol4--> g m)" by (import seq NEST_LEMMA) -lemma NEST_LEMMA_UNIQ: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) (f n) - (f ((Suc::nat => nat) n)))) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) (g ((Suc::nat => nat) n)) - (g n))) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. (op <=::real => real => bool) (f n) (g n))) - ((-->::(nat => real) => real => bool) - (%n::nat. (op -::real => real => real) (f n) (g n)) - (0::real))))) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. (op <=::real => real => bool) (f n) x)) - ((-->::(nat => real) => real => bool) f x)) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. (op <=::real => real => bool) x (g n))) - ((-->::(nat => real) => real => bool) g x))))))" +lemma NEST_LEMMA_UNIQ: "ALL (f::nat => real) g::nat => real. + (ALL n::nat. f n <= f (Suc n)) & + (ALL n::nat. g (Suc n) <= g n) & + (ALL n::nat. f n <= g n) & hol4--> (%n::nat. f n - g n) 0 --> + (EX x::real. + ((ALL n::nat. f n <= x) & hol4--> f x) & + (ALL n::nat. x <= g n) & hol4--> g x)" by (import seq NEST_LEMMA_UNIQ) -lemma BOLZANO_LEMMA: "(All::((real * real => bool) => bool) => bool) - (%P::real * real => bool. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(real => bool) => bool) - (%c::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) b c) - ((op &::bool => bool => bool) - (P ((Pair::real => real => real * real) a b)) - (P ((Pair::real => real => real * real) b - c))))) - (P ((Pair::real => real => real * real) a c)))))) - ((All::(real => bool) => bool) - (%x::real. - (Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x b) - ((op <::real => real => bool) -((op -::real => real => real) b a) d))) - (P ((Pair::real => real => real * real) a - b))))))))) - ((All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) a b) - (P ((Pair::real => real => real * real) a b))))))" +lemma BOLZANO_LEMMA: "ALL P::real * real => bool. + (ALL (a::real) (b::real) c::real. + a <= b & b <= c & P (a, b) & P (b, c) --> P (a, c)) & + (ALL x::real. + EX d>0. + ALL (a::real) b::real. + a <= x & x <= b & b - a < d --> P (a, b)) --> + (ALL (a::real) b::real. a <= b --> P (a, b))" by (import seq BOLZANO_LEMMA) constdefs sums :: "(nat => real) => real => bool" - "sums == %f::nat => real. --> (%n::nat. real.sum (0, n) f)" - -lemma sums: "ALL (f::nat => real) s::real. sums f s = --> (%n::nat. real.sum (0, n) f) s" + "sums == %f::nat => real. hol4--> (%n::nat. real.sum (0, n) f)" + +lemma sums: "ALL (f::nat => real) s::real. + sums f s = hol4--> (%n::nat. real.sum (0, n) f) s" by (import seq sums) constdefs @@ -1951,386 +1565,109 @@ lemma suminf: "ALL f::nat => real. suminf f = Eps (sums f)" by (import seq suminf) -lemma SUM_SUMMABLE: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((sums::(nat => real) => real => bool) f l) - ((summable::(nat => real) => bool) f)))" +lemma SUM_SUMMABLE: "ALL (f::nat => real) l::real. sums f l --> summable f" by (import seq SUM_SUMMABLE) -lemma SUMMABLE_SUM: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f) - ((sums::(nat => real) => real => bool) f - ((suminf::(nat => real) => real) f)))" +lemma SUMMABLE_SUM: "ALL f::nat => real. summable f --> sums f (suminf f)" by (import seq SUMMABLE_SUM) -lemma SUM_UNIQ: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((sums::(nat => real) => real => bool) f x) - ((op =::real => real => bool) x - ((suminf::(nat => real) => real) f))))" +lemma SUM_UNIQ: "ALL (f::nat => real) x::real. sums f x --> x = suminf f" by (import seq SUM_UNIQ) -lemma SER_0: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((All::(nat => bool) => bool) - (%m::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) n m) - ((op =::real => real => bool) (f m) (0::real)))) - ((sums::(nat => real) => real => bool) f - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) f))))" +lemma SER_0: "ALL (f::nat => real) n::nat. + (ALL m::nat. n <= m --> f m = 0) --> sums f (real.sum (0, n) f)" by (import seq SER_0) -lemma SER_POS_LE: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((All::(nat => bool) => bool) - (%m::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) n m) - ((op <=::real => real => bool) (0::real) (f m))))) - ((op <=::real => real => bool) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) f) - ((suminf::(nat => real) => real) f))))" +lemma SER_POS_LE: "ALL (f::nat => real) n::nat. + summable f & (ALL m::nat. n <= m --> 0 <= f m) --> + real.sum (0, n) f <= suminf f" by (import seq SER_POS_LE) -lemma SER_POS_LT: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((All::(nat => bool) => bool) - (%m::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) n m) - ((op <::real => real => bool) (0::real) (f m))))) - ((op <::real => real => bool) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) f) - ((suminf::(nat => real) => real) f))))" +lemma SER_POS_LT: "ALL (f::nat => real) n::nat. + summable f & (ALL m::nat. n <= m --> 0 < f m) --> + real.sum (0, n) f < suminf f" by (import seq SER_POS_LT) -lemma SER_GROUP: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(nat => bool) => bool) - (%k::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((op <::nat => nat => bool) (0::nat) k)) - ((sums::(nat => real) => real => bool) - (%n::nat. - (real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) - ((op *::nat => nat => nat) n k) k) - f) - ((suminf::(nat => real) => real) f))))" +lemma SER_GROUP: "ALL (f::nat => real) k::nat. + summable f & 0 < k --> sums (%n::nat. real.sum (n * k, k) f) (suminf f)" by (import seq SER_GROUP) -lemma SER_PAIR: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f) - ((sums::(nat => real) => real => bool) - (%n::nat. - (real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) - ((op *::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - n) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - f) - ((suminf::(nat => real) => real) f)))" +lemma SER_PAIR: "ALL f::nat => real. + summable f --> sums (%n::nat. real.sum (2 * n, 2) f) (suminf f)" by (import seq SER_PAIR) -lemma SER_OFFSET: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f) - ((All::(nat => bool) => bool) - (%k::nat. - (sums::(nat => real) => real => bool) - (%n::nat. f ((op +::nat => nat => nat) n k)) - ((op -::real => real => real) - ((suminf::(nat => real) => real) f) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) k) f)))))" +lemma SER_OFFSET: "ALL f::nat => real. + summable f --> + (ALL k::nat. sums (%n::nat. f (n + k)) (suminf f - real.sum (0, k) f))" by (import seq SER_OFFSET) -lemma SER_POS_LT_PAIR: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((All::(nat => bool) => bool) - (%d::nat. - (op <::real => real => bool) (0::real) - ((op +::real => real => real) - (f ((op +::nat => nat => nat) n - ((op *::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) - (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))) - d))) - (f ((op +::nat => nat => nat) n - ((op +::nat => nat => nat) - ((op *::nat => nat => nat) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) - (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))) - d) - (1::nat)))))))) - ((op <::real => real => bool) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) f) - ((suminf::(nat => real) => real) f))))" +lemma SER_POS_LT_PAIR: "ALL (f::nat => real) n::nat. + summable f & (ALL d::nat. 0 < f (n + 2 * d) + f (n + (2 * d + 1))) --> + real.sum (0, n) f < suminf f" by (import seq SER_POS_LT_PAIR) -lemma SER_ADD: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::((nat => real) => bool) => bool) - (%y::nat => real. - (All::(real => bool) => bool) - (%y0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((sums::(nat => real) => real => bool) x x0) - ((sums::(nat => real) => real => bool) y y0)) - ((sums::(nat => real) => real => bool) - (%n::nat. (op +::real => real => real) (x n) (y n)) - ((op +::real => real => real) x0 y0))))))" +lemma SER_ADD: "ALL (x::nat => real) (x0::real) (y::nat => real) y0::real. + sums x x0 & sums y y0 --> sums (%n::nat. x n + y n) (x0 + y0)" by (import seq SER_ADD) -lemma SER_CMUL: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::(real => bool) => bool) - (%c::real. - (op -->::bool => bool => bool) - ((sums::(nat => real) => real => bool) x x0) - ((sums::(nat => real) => real => bool) - (%n::nat. (op *::real => real => real) c (x n)) - ((op *::real => real => real) c x0)))))" +lemma SER_CMUL: "ALL (x::nat => real) (x0::real) c::real. + sums x x0 --> sums (%n::nat. c * x n) (c * x0)" by (import seq SER_CMUL) -lemma SER_NEG: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (op -->::bool => bool => bool) - ((sums::(nat => real) => real => bool) x x0) - ((sums::(nat => real) => real => bool) - (%xa::nat. (uminus::real => real) (x xa)) - ((uminus::real => real) x0))))" +lemma SER_NEG: "ALL (x::nat => real) x0::real. sums x x0 --> sums (%xa::nat. - x xa) (- x0)" by (import seq SER_NEG) -lemma SER_SUB: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::((nat => real) => bool) => bool) - (%y::nat => real. - (All::(real => bool) => bool) - (%y0::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((sums::(nat => real) => real => bool) x x0) - ((sums::(nat => real) => real => bool) y y0)) - ((sums::(nat => real) => real => bool) - (%xa::nat. - (op -::real => real => real) (x xa) (y xa)) - ((op -::real => real => real) x0 y0))))))" +lemma SER_SUB: "ALL (x::nat => real) (x0::real) (y::nat => real) y0::real. + sums x x0 & sums y y0 --> sums (%xa::nat. x xa - y xa) (x0 - y0)" by (import seq SER_SUB) -lemma SER_CDIV: "(All::((nat => real) => bool) => bool) - (%x::nat => real. - (All::(real => bool) => bool) - (%x0::real. - (All::(real => bool) => bool) - (%c::real. - (op -->::bool => bool => bool) - ((sums::(nat => real) => real => bool) x x0) - ((sums::(nat => real) => real => bool) - (%xa::nat. (op /::real => real => real) (x xa) c) - ((op /::real => real => real) x0 c)))))" +lemma SER_CDIV: "ALL (x::nat => real) (x0::real) c::real. + sums x x0 --> sums (%xa::nat. x xa / c) (x0 / c)" by (import seq SER_CDIV) -lemma SER_CAUCHY: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op =::bool => bool => bool) ((summable::(nat => real) => bool) f) - ((All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::(nat => bool) => bool) - (%N::nat. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) N m) - ((op <::real => real => bool) - ((abs::real => real) - ((real.sum::nat * nat - => (nat => real) => real) - ((Pair::nat => nat => nat * nat) m n) - f)) - e))))))))" +lemma SER_CAUCHY: "ALL f::nat => real. + summable f = + (ALL e>0. + EX N::nat. + ALL (m::nat) n::nat. N <= m --> abs (real.sum (m, n) f) < e)" by (import seq SER_CAUCHY) -lemma SER_ZERO: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) ((summable::(nat => real) => bool) f) - ((-->::(nat => real) => real => bool) f (0::real)))" +lemma SER_ZERO: "ALL f::nat => real. summable f --> hol4--> f 0" by (import seq SER_ZERO) -lemma SER_COMPAR: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Ex::(nat => bool) => bool) - (%x::nat. - (All::(nat => bool) => bool) - (%xa::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) x xa) - ((op <=::real => real => bool) - ((abs::real => real) (f xa)) (g xa))))) - ((summable::(nat => real) => bool) g)) - ((summable::(nat => real) => bool) f)))" +lemma SER_COMPAR: "ALL (f::nat => real) g::nat => real. + (EX x::nat. ALL xa::nat. x <= xa --> abs (f xa) <= g xa) & summable g --> + summable f" by (import seq SER_COMPAR) -lemma SER_COMPARA: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Ex::(nat => bool) => bool) - (%x::nat. - (All::(nat => bool) => bool) - (%xa::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) x xa) - ((op <=::real => real => bool) - ((abs::real => real) (f xa)) (g xa))))) - ((summable::(nat => real) => bool) g)) - ((summable::(nat => real) => bool) - (%k::nat. (abs::real => real) (f k)))))" +lemma SER_COMPARA: "ALL (f::nat => real) g::nat => real. + (EX x::nat. ALL xa::nat. x <= xa --> abs (f xa) <= g xa) & summable g --> + summable (%k::nat. abs (f k))" by (import seq SER_COMPARA) -lemma SER_LE: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. (op <=::real => real => bool) (f n) (g n))) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((summable::(nat => real) => bool) g))) - ((op <=::real => real => bool) - ((suminf::(nat => real) => real) f) - ((suminf::(nat => real) => real) g))))" +lemma SER_LE: "ALL (f::nat => real) g::nat => real. + (ALL n::nat. f n <= g n) & summable f & summable g --> + suminf f <= suminf g" by (import seq SER_LE) -lemma SER_LE2: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((nat => real) => bool) => bool) - (%g::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) ((abs::real => real) (f n)) - (g n))) - ((summable::(nat => real) => bool) g)) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((op <=::real => real => bool) - ((suminf::(nat => real) => real) f) - ((suminf::(nat => real) => real) g)))))" +lemma SER_LE2: "ALL (f::nat => real) g::nat => real. + (ALL n::nat. abs (f n) <= g n) & summable g --> + summable f & suminf f <= suminf g" by (import seq SER_LE2) -lemma SER_ACONV: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. (abs::real => real) (f n))) - ((summable::(nat => real) => bool) f))" +lemma SER_ACONV: "ALL f::nat => real. summable (%n::nat. abs (f n)) --> summable f" by (import seq SER_ACONV) -lemma SER_ABS: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (op -->::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. (abs::real => real) (f n))) - ((op <=::real => real => bool) - ((abs::real => real) ((suminf::(nat => real) => real) f)) - ((suminf::(nat => real) => real) - (%n::nat. (abs::real => real) (f n)))))" +lemma SER_ABS: "ALL f::nat => real. + summable (%n::nat. abs (f n)) --> + abs (suminf f) <= suminf (%n::nat. abs (f n))" by (import seq SER_ABS) -lemma GP_FINITE: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) ((op =::real => real => bool) x (1::real))) - ((All::(nat => bool) => bool) - (%n::nat. - (op =::real => real => bool) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) - ((op ^::real => nat => real) x)) - ((op /::real => real => real) - ((op -::real => real => real) - ((op ^::real => nat => real) x n) (1::real)) - ((op -::real => real => real) x (1::real))))))" +lemma GP_FINITE: "ALL x::real. + x ~= 1 --> (ALL n::nat. real.sum (0, n) (op ^ x) = (x ^ n - 1) / (x - 1))" by (import seq GP_FINITE) -lemma GP: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) ((abs::real => real) x) (1::real)) - ((sums::(nat => real) => real => bool) ((op ^::real => nat => real) x) - ((inverse::real => real) - ((op -::real => real => real) (1::real) x))))" +lemma GP: "ALL x::real. abs x < 1 --> sums (op ^ x) (inverse (1 - x))" by (import seq GP) lemma ABS_NEG_LEMMA: "(All::(real => bool) => bool) @@ -2348,24 +1685,9 @@ ((op =::real => real => bool) x (0::real))))))" by (import seq ABS_NEG_LEMMA) -lemma SER_RATIO: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%c::real. - (All::(nat => bool) => bool) - (%N::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) c (1::real)) - ((All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) N n) - ((op <=::real => real => bool) - ((abs::real => real) (f ((Suc::nat => nat) n))) - ((op *::real => real => real) c - ((abs::real => real) (f n))))))) - ((summable::(nat => real) => bool) f))))" +lemma SER_RATIO: "ALL (f::nat => real) (c::real) N::nat. + c < 1 & (ALL n::nat. N <= n --> abs (f (Suc n)) <= c * abs (f n)) --> + summable f" by (import seq SER_RATIO) ;end_setup @@ -2382,161 +1704,44 @@ tends_real_real f l x0 = tends f l (mtop mr1, tendsto (mr1, x0))" by (import lim tends_real_real) -lemma LIM: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%y0::real. - (All::(real => bool) => bool) - (%x0::real. - (op =::bool => bool => bool) - ((tends_real_real::(real => real) => real => real => bool) f - y0 x0) - ((All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) - ((abs::real => real) ((op -::real => real => real) x x0))) - ((op <::real => real => bool) - ((abs::real => real) ((op -::real => real => real) x x0)) d)) - ((op <::real => real => bool) - ((abs::real => real) ((op -::real => real => real) (f x) y0)) e))))))))))" +lemma LIM: "ALL (f::real => real) (y0::real) x0::real. + tends_real_real f y0 x0 = + (ALL e>0. + EX d>0. + ALL x::real. + 0 < abs (x - x0) & abs (x - x0) < d --> abs (f x - y0) < e)" by (import lim LIM) lemma LIM_CONST: "ALL k::real. All (tends_real_real (%x::real. k) k)" by (import lim LIM_CONST) -lemma LIM_ADD: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - f l x) - ((tends_real_real::(real => real) - => real => real => bool) - g m x)) - ((tends_real_real::(real => real) - => real => real => bool) - (%x::real. - (op +::real => real => real) (f x) (g x)) - ((op +::real => real => real) l m) x))))))" +lemma LIM_ADD: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + tends_real_real f l x & tends_real_real g m x --> + tends_real_real (%x::real. f x + g x) (l + m) x" by (import lim LIM_ADD) -lemma LIM_MUL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - f l x) - ((tends_real_real::(real => real) - => real => real => bool) - g m x)) - ((tends_real_real::(real => real) - => real => real => bool) - (%x::real. - (op *::real => real => real) (f x) (g x)) - ((op *::real => real => real) l m) x))))))" +lemma LIM_MUL: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + tends_real_real f l x & tends_real_real g m x --> + tends_real_real (%x::real. f x * g x) (l * m) x" by (import lim LIM_MUL) lemma LIM_NEG: "ALL (f::real => real) (l::real) x::real. tends_real_real f l x = tends_real_real (%x::real. - f x) (- l) x" by (import lim LIM_NEG) -lemma LIM_INV: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) => real => real => bool) - f l x) - ((Not::bool => bool) - ((op =::real => real => bool) l (0::real)))) - ((tends_real_real::(real => real) => real => real => bool) - (%x::real. (inverse::real => real) (f x)) - ((inverse::real => real) l) x))))" +lemma LIM_INV: "ALL (f::real => real) (l::real) x::real. + tends_real_real f l x & l ~= 0 --> + tends_real_real (%x::real. inverse (f x)) (inverse l) x" by (import lim LIM_INV) -lemma LIM_SUB: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - f l x) - ((tends_real_real::(real => real) - => real => real => bool) - g m x)) - ((tends_real_real::(real => real) - => real => real => bool) - (%x::real. - (op -::real => real => real) (f x) (g x)) - ((op -::real => real => real) l m) x))))))" +lemma LIM_SUB: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + tends_real_real f l x & tends_real_real g m x --> + tends_real_real (%x::real. f x - g x) (l - m) x" by (import lim LIM_SUB) -lemma LIM_DIV: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - f l x) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - g m x) - ((Not::bool => bool) - ((op =::real => real => bool) m - (0::real))))) - ((tends_real_real::(real => real) - => real => real => bool) - (%x::real. - (op /::real => real => real) (f x) (g x)) - ((op /::real => real => real) l m) x))))))" +lemma LIM_DIV: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + tends_real_real f l x & tends_real_real g m x & m ~= 0 --> + tends_real_real (%x::real. f x / g x) (l / m) x" by (import lim LIM_DIV) lemma LIM_NULL: "ALL (f::real => real) (l::real) x::real. @@ -2546,70 +1751,18 @@ lemma LIM_X: "ALL x0::real. tends_real_real (%x::real. x) x0 x0" by (import lim LIM_X) -lemma LIM_UNIQ: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - f l x) - ((tends_real_real::(real => real) - => real => real => bool) - f m x)) - ((op =::real => real => bool) l m)))))" +lemma LIM_UNIQ: "ALL (f::real => real) (l::real) (m::real) x::real. + tends_real_real f l x & tends_real_real f m x --> l = m" by (import lim LIM_UNIQ) -lemma LIM_EQUAL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x0::real. - (op -->::bool => bool => bool) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) x x0)) - ((op =::real => real => bool) (f x) (g x)))) - ((op =::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - f l x0) - ((tends_real_real::(real => real) - => real => real => bool) - g l x0))))))" +lemma LIM_EQUAL: "ALL (f::real => real) (g::real => real) (l::real) x0::real. + (ALL x::real. x ~= x0 --> f x = g x) --> + tends_real_real f l x0 = tends_real_real g l x0" by (import lim LIM_EQUAL) -lemma LIM_TRANSFORM: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x0::real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tends_real_real::(real => real) - => real => real => bool) - (%x::real. - (op -::real => real => real) (f x) (g x)) - (0::real) x0) - ((tends_real_real::(real => real) - => real => real => bool) - g l x0)) - ((tends_real_real::(real => real) - => real => real => bool) - f l x0)))))" +lemma LIM_TRANSFORM: "ALL (f::real => real) (g::real => real) (x0::real) l::real. + tends_real_real (%x::real. f x - g x) 0 x0 & tends_real_real g l x0 --> + tends_real_real f l x0" by (import lim LIM_TRANSFORM) constdefs @@ -2639,32 +1792,11 @@ differentiable f x = (EX l::real. diffl f l x)" by (import lim differentiable) -lemma DIFF_UNIQ: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l - x) - ((diffl::(real => real) => real => real => bool) f m - x)) - ((op =::real => real => bool) l m)))))" +lemma DIFF_UNIQ: "ALL (f::real => real) (l::real) (m::real) x::real. + diffl f l x & diffl f m x --> l = m" by (import lim DIFF_UNIQ) -lemma DIFF_CONT: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((contl::(real => real) => real => bool) f x))))" +lemma DIFF_CONT: "ALL (f::real => real) (l::real) x::real. diffl f l x --> contl f x" by (import lim DIFF_CONT) lemma CONTL_LIM: "ALL (f::real => real) x::real. contl f x = tends_real_real f (f x) x" @@ -2679,285 +1811,71 @@ lemma CONT_CONST: "ALL k::real. All (contl (%x::real. k))" by (import lim CONT_CONST) -lemma CONT_ADD: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((contl::(real => real) => real => bool) g x)) - ((contl::(real => real) => real => bool) - (%x::real. (op +::real => real => real) (f x) (g x)) x))))" +lemma CONT_ADD: "ALL (f::real => real) (g::real => real) x::real. + contl f x & contl g x --> contl (%x::real. f x + g x) x" by (import lim CONT_ADD) -lemma CONT_MUL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((contl::(real => real) => real => bool) g x)) - ((contl::(real => real) => real => bool) - (%x::real. (op *::real => real => real) (f x) (g x)) x))))" +lemma CONT_MUL: "ALL (f::real => real) (g::real => real) x::real. + contl f x & contl g x --> contl (%x::real. f x * g x) x" by (import lim CONT_MUL) -lemma CONT_NEG: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((contl::(real => real) => real => bool) - (%x::real. (uminus::real => real) (f x)) x)))" +lemma CONT_NEG: "ALL (f::real => real) x::real. contl f x --> contl (%x::real. - f x) x" by (import lim CONT_NEG) -lemma CONT_INV: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((Not::bool => bool) - ((op =::real => real => bool) (f x) (0::real)))) - ((contl::(real => real) => real => bool) - (%x::real. (inverse::real => real) (f x)) x)))" +lemma CONT_INV: "ALL (f::real => real) x::real. + contl f x & f x ~= 0 --> contl (%x::real. inverse (f x)) x" by (import lim CONT_INV) -lemma CONT_SUB: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((contl::(real => real) => real => bool) g x)) - ((contl::(real => real) => real => bool) - (%x::real. (op -::real => real => real) (f x) (g x)) x))))" +lemma CONT_SUB: "ALL (f::real => real) (g::real => real) x::real. + contl f x & contl g x --> contl (%x::real. f x - g x) x" by (import lim CONT_SUB) -lemma CONT_DIV: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) g x) - ((Not::bool => bool) - ((op =::real => real => bool) (g x) (0::real))))) - ((contl::(real => real) => real => bool) - (%x::real. (op /::real => real => real) (f x) (g x)) x))))" +lemma CONT_DIV: "ALL (f::real => real) (g::real => real) x::real. + contl f x & contl g x & g x ~= 0 --> contl (%x::real. f x / g x) x" by (import lim CONT_DIV) -lemma CONT_COMPOSE: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((contl::(real => real) => real => bool) f x) - ((contl::(real => real) => real => bool) g (f x))) - ((contl::(real => real) => real => bool) (%x::real. g (f x)) - x))))" +lemma CONT_COMPOSE: "ALL (f::real => real) (g::real => real) x::real. + contl f x & contl g (f x) --> contl (%x::real. g (f x)) x" by (import lim CONT_COMPOSE) -lemma IVT: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((op &::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (f a) y) - ((op <=::real => real => bool) y (f b))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f - x))))) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x b) - ((op =::real => real => bool) (f x) y))))))))" +lemma IVT: "ALL (f::real => real) (a::real) (b::real) y::real. + a <= b & + (f a <= y & y <= f b) & (ALL x::real. a <= x & x <= b --> contl f x) --> + (EX x::real. a <= x & x <= b & f x = y)" by (import lim IVT) -lemma IVT2: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((op &::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (f b) y) - ((op <=::real => real => bool) y (f a))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f - x))))) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x b) - ((op =::real => real => bool) (f x) y))))))))" +lemma IVT2: "ALL (f::real => real) (a::real) (b::real) y::real. + a <= b & + (f b <= y & y <= f a) & (ALL x::real. a <= x & x <= b --> contl f x) --> + (EX x::real. a <= x & x <= b & f x = y)" by (import lim IVT2) lemma DIFF_CONST: "ALL k::real. All (diffl (%x::real. k) 0)" by (import lim DIFF_CONST) -lemma DIFF_ADD: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) - f l x) - ((diffl::(real => real) => real => real => bool) - g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. - (op +::real => real => real) (f x) (g x)) - ((op +::real => real => real) l m) x))))))" +lemma DIFF_ADD: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + diffl f l x & diffl g m x --> diffl (%x::real. f x + g x) (l + m) x" by (import lim DIFF_ADD) -lemma DIFF_MUL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) - f l x) - ((diffl::(real => real) => real => real => bool) - g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. - (op *::real => real => real) (f x) (g x)) - ((op +::real => real => real) - ((op *::real => real => real) l (g x)) - ((op *::real => real => real) m (f x))) - x))))))" +lemma DIFF_MUL: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + diffl f l x & diffl g m x --> + diffl (%x::real. f x * g x) (l * g x + m * f x) x" by (import lim DIFF_MUL) -lemma DIFF_CMUL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%c::real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (op *::real => real => real) c (f x)) - ((op *::real => real => real) c l) x)))))" +lemma DIFF_CMUL: "ALL (f::real => real) (c::real) (l::real) x::real. + diffl f l x --> diffl (%x::real. c * f x) (c * l) x" by (import lim DIFF_CMUL) -lemma DIFF_NEG: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (uminus::real => real) (f x)) - ((uminus::real => real) l) x))))" +lemma DIFF_NEG: "ALL (f::real => real) (l::real) x::real. + diffl f l x --> diffl (%x::real. - f x) (- l) x" by (import lim DIFF_NEG) -lemma DIFF_SUB: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) - f l x) - ((diffl::(real => real) => real => real => bool) - g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. - (op -::real => real => real) (f x) (g x)) - ((op -::real => real => real) l m) x))))))" +lemma DIFF_SUB: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + diffl f l x & diffl g m x --> diffl (%x::real. f x - g x) (l - m) x" by (import lim DIFF_SUB) -lemma DIFF_CHAIN: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) - f l (g x)) - ((diffl::(real => real) => real => real => bool) - g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. f (g x)) - ((op *::real => real => real) l m) x))))))" +lemma DIFF_CHAIN: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + diffl f l (g x) & diffl g m x --> diffl (%x::real. f (g x)) (l * m) x" by (import lim DIFF_CHAIN) lemma DIFF_X: "All (diffl (%x::real. x) 1)" @@ -2966,141 +1884,29 @@ lemma DIFF_POW: "ALL (n::nat) x::real. diffl (%x::real. x ^ n) (real n * x ^ (n - 1)) x" by (import lim DIFF_POW) -lemma DIFF_XM1: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) ((op =::real => real => bool) x (0::real))) - ((diffl::(real => real) => real => real => bool) - (inverse::real => real) - ((uminus::real => real) - ((op ^::real => nat => real) ((inverse::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x))" +lemma DIFF_XM1: "ALL x::real. x ~= 0 --> diffl inverse (- (inverse x ^ 2)) x" by (import lim DIFF_XM1) -lemma DIFF_INV: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((Not::bool => bool) - ((op =::real => real => bool) (f x) (0::real)))) - ((diffl::(real => real) => real => real => bool) - (%x::real. (inverse::real => real) (f x)) - ((uminus::real => real) - ((op /::real => real => real) l - ((op ^::real => nat => real) (f x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - x))))" +lemma DIFF_INV: "ALL (f::real => real) (l::real) x::real. + diffl f l x & f x ~= 0 --> + diffl (%x::real. inverse (f x)) (- (l / f x ^ 2)) x" by (import lim DIFF_INV) -lemma DIFF_DIV: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) - f l x) - ((op &::bool => bool => bool) - ((diffl::(real => real) - => real => real => bool) - g m x) - ((Not::bool => bool) - ((op =::real => real => bool) (g x) - (0::real))))) - ((diffl::(real => real) => real => real => bool) - (%x::real. - (op /::real => real => real) (f x) (g x)) - ((op /::real => real => real) - ((op -::real => real => real) - ((op *::real => real => real) l (g x)) - ((op *::real => real => real) m (f x))) - ((op ^::real => nat => real) (g x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) -(Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))))) - x))))))" +lemma DIFF_DIV: "ALL (f::real => real) (g::real => real) (l::real) (m::real) x::real. + diffl f l x & diffl g m x & g x ~= 0 --> + diffl (%x::real. f x / g x) ((l * g x - m * f x) / g x ^ 2) x" by (import lim DIFF_DIV) -lemma DIFF_SUM: "(All::((nat => real => real) => bool) => bool) - (%f::nat => real => real. - (All::((nat => real => real) => bool) => bool) - (%f'::nat => real => real. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((All::(nat => bool) => bool) - (%r::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::nat => nat => bool) m r) - ((op <::nat => nat => bool) r - ((op +::nat => nat => nat) m n))) - ((diffl::(real => real) - => real => real => bool) - (f r) (f' r x) x))) - ((diffl::(real => real) => real => real => bool) - (%x::real. - (real.sum::nat * nat - => (nat => real) => real) - ((Pair::nat => nat => nat * nat) m n) - (%n::nat. f n x)) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) m n) - (%r::nat. f' r x)) - x))))))" +lemma DIFF_SUM: "ALL (f::nat => real => real) (f'::nat => real => real) (m::nat) (n::nat) + x::real. + (ALL r::nat. m <= r & r < m + n --> diffl (f r) (f' r x) x) --> + diffl (%x::real. real.sum (m, n) (%n::nat. f n x)) + (real.sum (m, n) (%r::nat. f' r x)) x" by (import lim DIFF_SUM) -lemma CONT_BOUNDED: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x)))) - ((Ex::(real => bool) => bool) - (%M::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((op <=::real => real => bool) (f x) M)))))))" +lemma CONT_BOUNDED: "ALL (f::real => real) (a::real) b::real. + a <= b & (ALL x::real. a <= x & x <= b --> contl f x) --> + (EX M::real. ALL x::real. a <= x & x <= b --> f x <= M)" by (import lim CONT_BOUNDED) lemma CONT_HASSUP: "(All::((real => real) => bool) => bool) @@ -3142,733 +1948,156 @@ ((op <::real => real => bool) N (f x))))))))))))" by (import lim CONT_HASSUP) -lemma CONT_ATTAINS: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x)))) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a xa) - ((op <=::real => real => bool) xa b)) - ((op <=::real => real => bool) (f xa) x))) - ((Ex::(real => bool) => bool) - (%xa::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) a xa) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) xa b) - ((op =::real => real => bool) (f xa) - x)))))))))" +lemma CONT_ATTAINS: "ALL (f::real => real) (a::real) b::real. + a <= b & (ALL x::real. a <= x & x <= b --> contl f x) --> + (EX x::real. + (ALL xa::real. a <= xa & xa <= b --> f xa <= x) & + (EX xa::real. a <= xa & xa <= b & f xa = x))" by (import lim CONT_ATTAINS) -lemma CONT_ATTAINS2: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x)))) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a xa) - ((op <=::real => real => bool) xa b)) - ((op <=::real => real => bool) x (f xa)))) - ((Ex::(real => bool) => bool) - (%xa::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) a xa) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) xa b) - ((op =::real => real => bool) (f xa) - x)))))))))" +lemma CONT_ATTAINS2: "ALL (f::real => real) (a::real) b::real. + a <= b & (ALL x::real. a <= x & x <= b --> contl f x) --> + (EX x::real. + (ALL xa::real. a <= xa & xa <= b --> x <= f xa) & + (EX xa::real. a <= xa & xa <= b & f xa = x))" by (import lim CONT_ATTAINS2) -lemma CONT_ATTAINS_ALL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x)))) - ((Ex::(real => bool) => bool) - (%x::real. - (Ex::(real => bool) => bool) - (%M::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) x M) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x y) ((op <=::real => real => bool) y M)) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) ((op <=::real => real => bool) a x) - ((op &::bool => bool => bool) ((op <=::real => real => bool) x b) - ((op =::real => real => bool) (f x) y)))))) - ((All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a xa) ((op <=::real => real => bool) xa b)) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x (f xa)) - ((op <=::real => real => bool) (f xa) M)))))))))))" +lemma CONT_ATTAINS_ALL: "ALL (f::real => real) (a::real) b::real. + a <= b & (ALL x::real. a <= x & x <= b --> contl f x) --> + (EX (x::real) M::real. + x <= M & + (ALL y::real. + x <= y & y <= M --> (EX x::real. a <= x & x <= b & f x = y)) & + (ALL xa::real. a <= xa & xa <= b --> x <= f xa & f xa <= M))" by (import lim CONT_ATTAINS_ALL) -lemma DIFF_LINC: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((op <::real => real => bool) (0::real) l)) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%h::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) h) - ((op <::real => real => bool) h d)) - ((op <::real => real => bool) (f x) - (f ((op +::real => real => real) x - h))))))))))" +lemma DIFF_LINC: "ALL (f::real => real) (x::real) l::real. + diffl f l x & 0 < l --> + (EX d>0. ALL h::real. 0 < h & h < d --> f x < f (x + h))" by (import lim DIFF_LINC) -lemma DIFF_LDEC: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((op <::real => real => bool) l (0::real))) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%h::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) h) - ((op <::real => real => bool) h d)) - ((op <::real => real => bool) (f x) - (f ((op -::real => real => real) x - h))))))))))" +lemma DIFF_LDEC: "ALL (f::real => real) (x::real) l::real. + diffl f l x & l < 0 --> + (EX d>0. ALL h::real. 0 < h & h < d --> f x < f (x - h))" by (import lim DIFF_LDEC) -lemma DIFF_LMAX: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) x y)) - d) - ((op <=::real => real => bool) (f y) - (f x))))))) - ((op =::real => real => bool) l (0::real)))))" +lemma DIFF_LMAX: "ALL (f::real => real) (x::real) l::real. + diffl f l x & (EX d>0. ALL y::real. abs (x - y) < d --> f y <= f x) --> + l = 0" by (import lim DIFF_LMAX) -lemma DIFF_LMIN: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) x y)) - d) - ((op <=::real => real => bool) (f x) - (f y))))))) - ((op =::real => real => bool) l (0::real)))))" +lemma DIFF_LMIN: "ALL (f::real => real) (x::real) l::real. + diffl f l x & (EX d>0. ALL y::real. abs (x - y) < d --> f x <= f y) --> + l = 0" by (import lim DIFF_LMIN) -lemma DIFF_LCONST: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%l::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) x y)) - d) - ((op =::real => real => bool) (f y) - (f x))))))) - ((op =::real => real => bool) l (0::real)))))" +lemma DIFF_LCONST: "ALL (f::real => real) (x::real) l::real. + diffl f l x & (EX d>0. ALL y::real. abs (x - y) < d --> f y = f x) --> + l = 0" by (import lim DIFF_LCONST) -lemma INTERVAL_LEMMA: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op <::real => real => bool) x b)) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) x y)) - d) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a y) - ((op <=::real => real => bool) y b)))))))))" +lemma INTERVAL_LEMMA: "ALL (a::real) (b::real) x::real. + a < x & x < b --> + (EX d>0. ALL y::real. abs (x - y) < d --> a <= y & y <= b)" by (import lim INTERVAL_LEMMA) -lemma ROLLE: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a b) - ((op &::bool => bool => bool) - ((op =::real => real => bool) (f a) (f b)) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op <::real => real => bool) x b)) - ((differentiable::(real => real) - => real => bool) - f x)))))) - ((Ex::(real => bool) => bool) - (%z::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) a z) - ((op &::bool => bool => bool) - ((op <::real => real => bool) z b) - ((diffl::(real => real) => real => real => bool) f - (0::real) z)))))))" +lemma ROLLE: "ALL (f::real => real) (a::real) b::real. + a < b & + f a = f b & + (ALL x::real. a <= x & x <= b --> contl f x) & + (ALL x::real. a < x & x < b --> differentiable f x) --> + (EX z::real. a < z & z < b & diffl f 0 z)" by (import lim ROLLE) lemma MVT_LEMMA: "ALL (f::real => real) (a::real) b::real. f a - (f b - f a) / (b - a) * a = f b - (f b - f a) / (b - a) * b" by (import lim MVT_LEMMA) -lemma MVT: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a b) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op <::real => real => bool) x b)) - ((differentiable::(real => real) => real => bool) - f x))))) - ((Ex::(real => bool) => bool) - (%l::real. - (Ex::(real => bool) => bool) - (%z::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) a z) - ((op &::bool => bool => bool) - ((op <::real => real => bool) z b) - ((op &::bool => bool => bool) - ((diffl::(real => real) - => real => real => bool) - f l z) - ((op =::real => real => bool) - ((op -::real => real => real) (f b) (f a)) - ((op *::real => real => real) - ((op -::real => real => real) b a) - l))))))))))" +lemma MVT: "ALL (f::real => real) (a::real) b::real. + a < b & + (ALL x::real. a <= x & x <= b --> contl f x) & + (ALL x::real. a < x & x < b --> differentiable f x) --> + (EX (l::real) z::real. + a < z & z < b & diffl f l z & f b - f a = (b - a) * l)" by (import lim MVT) -lemma DIFF_ISCONST_END: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a b) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op <::real => real => bool) x b)) - ((diffl::(real => real) => real => real => bool) - f (0::real) x))))) - ((op =::real => real => bool) (f b) (f a)))))" +lemma DIFF_ISCONST_END: "ALL (f::real => real) (a::real) b::real. + a < b & + (ALL x::real. a <= x & x <= b --> contl f x) & + (ALL x::real. a < x & x < b --> diffl f 0 x) --> + f b = f a" by (import lim DIFF_ISCONST_END) -lemma DIFF_ISCONST: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a b) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((contl::(real => real) => real => bool) f x))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op <::real => real => bool) x b)) - ((diffl::(real => real) => real => real => bool) - f (0::real) x))))) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((op =::real => real => bool) (f x) (f a)))))))" +lemma DIFF_ISCONST: "ALL (f::real => real) (a::real) b::real. + a < b & + (ALL x::real. a <= x & x <= b --> contl f x) & + (ALL x::real. a < x & x < b --> diffl f 0 x) --> + (ALL x::real. a <= x & x <= b --> f x = f a)" by (import lim DIFF_ISCONST) -lemma DIFF_ISCONST_ALL: "(All::((real => real) => bool) => bool) - (%f::real => real. - (op -->::bool => bool => bool) - ((All::(real => bool) => bool) - ((diffl::(real => real) => real => real => bool) f (0::real))) - ((All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. (op =::real => real => bool) (f x) (f y)))))" +lemma DIFF_ISCONST_ALL: "ALL f::real => real. All (diffl f 0) --> (ALL (x::real) y::real. f x = f y)" by (import lim DIFF_ISCONST_ALL) lemma INTERVAL_ABS: "ALL (x::real) (z::real) d::real. (x - d <= z & z <= x + d) = (abs (z - x) <= d)" by (import lim INTERVAL_ABS) -lemma CONT_INJ_LEMMA: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%d::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((op =::real => real => bool) (g (f z)) z))) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((contl::(real => real) => real => bool) f - z))))) - ((Not::bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((op <=::real => real => bool) (f z) - (f x)))))))))" +lemma CONT_INJ_LEMMA: "ALL (f::real => real) (g::real => real) (x::real) d::real. + 0 < d & + (ALL z::real. abs (z - x) <= d --> g (f z) = z) & + (ALL z::real. abs (z - x) <= d --> contl f z) --> + ~ (ALL z::real. abs (z - x) <= d --> f z <= f x)" by (import lim CONT_INJ_LEMMA) -lemma CONT_INJ_LEMMA2: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%d::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((op =::real => real => bool) (g (f z)) z))) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((contl::(real => real) => real => bool) f - z))))) - ((Not::bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((op <=::real => real => bool) (f x) - (f z)))))))))" +lemma CONT_INJ_LEMMA2: "ALL (f::real => real) (g::real => real) (x::real) d::real. + 0 < d & + (ALL z::real. abs (z - x) <= d --> g (f z) = z) & + (ALL z::real. abs (z - x) <= d --> contl f z) --> + ~ (ALL z::real. abs (z - x) <= d --> f x <= f z)" by (import lim CONT_INJ_LEMMA2) -lemma CONT_INJ_RANGE: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%d::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((op =::real => real => bool) (g (f z)) z))) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((contl::(real => real) => real => bool) f - z))))) - ((Ex::(real => bool) => bool) - (%e::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) y (f x))) - e) - ((Ex::(real => bool) => bool) - (%z::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) ((op -::real => real => real) z x)) d) - ((op =::real => real => bool) (f z) y)))))))))))" +lemma CONT_INJ_RANGE: "ALL (f::real => real) (g::real => real) (x::real) d::real. + 0 < d & + (ALL z::real. abs (z - x) <= d --> g (f z) = z) & + (ALL z::real. abs (z - x) <= d --> contl f z) --> + (EX e>0. + ALL y::real. + abs (y - f x) <= e --> (EX z::real. abs (z - x) <= d & f z = y))" by (import lim CONT_INJ_RANGE) -lemma CONT_INVERSE: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%d::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((op =::real => real => bool) (g (f z)) z))) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) z x)) - d) - ((contl::(real => real) => real => bool) f - z))))) - ((contl::(real => real) => real => bool) g (f x))))))" +lemma CONT_INVERSE: "ALL (f::real => real) (g::real => real) (x::real) d::real. + 0 < d & + (ALL z::real. abs (z - x) <= d --> g (f z) = z) & + (ALL z::real. abs (z - x) <= d --> contl f z) --> + contl g (f x)" by (import lim CONT_INVERSE) -lemma DIFF_INVERSE: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%d::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) ((op -::real => real => real) z x)) d) - ((op =::real => real => bool) (g (f z)) - z))) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. -(op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) ((op -::real => real => real) z x)) d) - ((contl::(real => real) => real => bool) f z))) - ((op &::bool => bool => bool) - ((diffl::(real => real) - => real => real => bool) - f l x) - ((Not::bool => bool) - ((op =::real => real => bool) l -(0::real))))))) - ((diffl::(real => real) => real => real => bool) g - ((inverse::real => real) l) (f x)))))))" +lemma DIFF_INVERSE: "ALL (f::real => real) (g::real => real) (l::real) (x::real) d::real. + 0 < d & + (ALL z::real. abs (z - x) <= d --> g (f z) = z) & + (ALL z::real. abs (z - x) <= d --> contl f z) & diffl f l x & l ~= 0 --> + diffl g (inverse l) (f x)" by (import lim DIFF_INVERSE) -lemma DIFF_INVERSE_LT: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%d::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) ((op -::real => real => real) z x)) d) - ((op =::real => real => bool) (g (f z)) - z))) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. -(op -->::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) ((op -::real => real => real) z x)) d) - ((contl::(real => real) => real => bool) f z))) - ((op &::bool => bool => bool) - ((diffl::(real => real) - => real => real => bool) - f l x) - ((Not::bool => bool) - ((op =::real => real => bool) l -(0::real))))))) - ((diffl::(real => real) => real => real => bool) g - ((inverse::real => real) l) (f x)))))))" +lemma DIFF_INVERSE_LT: "ALL (f::real => real) (g::real => real) (l::real) (x::real) d::real. + 0 < d & + (ALL z::real. abs (z - x) < d --> g (f z) = z) & + (ALL z::real. abs (z - x) < d --> contl f z) & diffl f l x & l ~= 0 --> + diffl g (inverse l) (f x)" by (import lim DIFF_INVERSE_LT) -lemma INTERVAL_CLEMMA: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op <::real => real => bool) x b)) - ((Ex::(real => bool) => bool) - (%d::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) d) - ((All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) y x)) - d) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a y) - ((op <::real => real => bool) y b)))))))))" +lemma INTERVAL_CLEMMA: "ALL (a::real) (b::real) x::real. + a < x & x < b --> + (EX d>0. ALL y::real. abs (y - x) <= d --> a < y & y < b)" by (import lim INTERVAL_CLEMMA) -lemma DIFF_INVERSE_OPEN: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%l::real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op &::bool => bool => bool) - ((op <::real => real => bool) x b) - ((op &::bool => bool => bool) - ((All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((op <::real => real => bool) a z) - ((op <::real => real => bool) z b)) - ((op &::bool => bool => bool) - ((op =::real => real => bool) (g (f z)) z) - ((contl::(real => real) => real => bool) f z)))) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((Not::bool => bool) ((op =::real => real => bool) l (0::real))))))) - ((diffl::(real => real) - => real => real => bool) - g ((inverse::real => real) l) (f x))))))))" +lemma DIFF_INVERSE_OPEN: "ALL (f::real => real) (g::real => real) (l::real) (a::real) (x::real) + b::real. + a < x & + x < b & + (ALL z::real. a < z & z < b --> g (f z) = z & contl f z) & + diffl f l x & l ~= 0 --> + diffl g (inverse l) (f x)" by (import lim DIFF_INVERSE_OPEN) ;end_setup @@ -3890,45 +2119,14 @@ real.sum (0, Suc n) (%xa::nat. x ^ (n - xa) * y ^ xa)" by (import powser POWREV) -lemma POWSER_INSIDEA: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) (f n) - ((op ^::real => nat => real) x n))) - ((op <::real => real => bool) ((abs::real => real) z) - ((abs::real => real) x))) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) - ((abs::real => real) (f n)) - ((op ^::real => nat => real) z n))))))" +lemma POWSER_INSIDEA: "ALL (f::nat => real) (x::real) z::real. + summable (%n::nat. f n * x ^ n) & abs z < abs x --> + summable (%n::nat. abs (f n) * z ^ n)" by (import powser POWSER_INSIDEA) -lemma POWSER_INSIDE: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%z::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) (f n) - ((op ^::real => nat => real) x n))) - ((op <::real => real => bool) ((abs::real => real) z) - ((abs::real => real) x))) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) (f n) - ((op ^::real => nat => real) z n))))))" +lemma POWSER_INSIDE: "ALL (f::nat => real) (x::real) z::real. + summable (%n::nat. f n * x ^ n) & abs z < abs x --> + summable (%n::nat. f n * z ^ n)" by (import powser POWSER_INSIDE) constdefs @@ -3953,27 +2151,10 @@ real n * (c n * x ^ (n - 1))" by (import powser DIFFS_LEMMA2) -lemma DIFFS_EQUIV: "(All::((nat => real) => bool) => bool) - (%c::nat => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) - ((diffs::(nat => real) => nat => real) c n) - ((op ^::real => nat => real) x n))) - ((sums::(nat => real) => real => bool) - (%n::nat. - (op *::real => real => real) ((real::nat => real) n) - ((op *::real => real => real) (c n) - ((op ^::real => nat => real) x - ((op -::nat => nat => nat) n (1::nat))))) - ((suminf::(nat => real) => real) - (%n::nat. - (op *::real => real => real) - ((diffs::(nat => real) => nat => real) c n) - ((op ^::real => nat => real) x n))))))" +lemma DIFFS_EQUIV: "ALL (c::nat => real) x::real. + summable (%n::nat. diffs c n * x ^ n) --> + sums (%n::nat. real n * (c n * x ^ (n - 1))) + (suminf (%n::nat. diffs c n * x ^ n))" by (import powser DIFFS_EQUIV) lemma TERMDIFF_LEMMA1: "ALL (m::nat) (z::real) h::real. @@ -3981,194 +2162,44 @@ real.sum (0, m) (%p::nat. z ^ p * ((z + h) ^ (m - p) - z ^ (m - p)))" by (import powser TERMDIFF_LEMMA1) -lemma TERMDIFF_LEMMA2: "(All::(real => bool) => bool) - (%z::real. - (All::(real => bool) => bool) - (%h::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) h (0::real))) - ((op =::real => real => bool) - ((op -::real => real => real) - ((op /::real => real => real) - ((op -::real => real => real) - ((op ^::real => nat => real) - ((op +::real => real => real) z h) n) - ((op ^::real => nat => real) z n)) - h) - ((op *::real => real => real) ((real::nat => real) n) - ((op ^::real => nat => real) z - ((op -::nat => nat => nat) n (1::nat))))) - ((op *::real => real => real) h - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) - ((op -::nat => nat => nat) n (1::nat))) - (%p::nat. - (op *::real => real => real) - ((op ^::real => nat => real) z p) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) - ((op -::nat => nat => nat) - ((op -::nat => nat => nat) n (1::nat)) p)) - (%q::nat. - (op *::real => real => real) - ((op ^::real => nat => real) - ((op +::real => real => real) z h) q) - ((op ^::real => nat => real) z - ((op -::nat => nat => nat) -((op -::nat => nat => nat) - ((op -::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit)))) - p) -q)))))))))))" +lemma TERMDIFF_LEMMA2: "ALL (z::real) (h::real) n::nat. + h ~= 0 --> + ((z + h) ^ n - z ^ n) / h - real n * z ^ (n - 1) = + h * + real.sum (0, n - 1) + (%p::nat. + z ^ p * + real.sum (0, n - 1 - p) + (%q::nat. (z + h) ^ q * z ^ (n - 2 - p - q)))" by (import powser TERMDIFF_LEMMA2) -lemma TERMDIFF_LEMMA3: "(All::(real => bool) => bool) - (%z::real. - (All::(real => bool) => bool) - (%h::real. - (All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%k'::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) h (0::real))) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) z) k') - ((op <=::real => real => bool) - ((abs::real => real) - ((op +::real => real => real) z h)) - k'))) - ((op <=::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) - ((op /::real => real => real) - ((op -::real => real => real) - ((op ^::real => nat => real) - ((op +::real => real => real) z h) n) - ((op ^::real => nat => real) z n)) - h) - ((op *::real => real => real) - ((real::nat => real) n) - ((op ^::real => nat => real) z - ((op -::nat => nat => nat) n (1::nat)))))) - ((op *::real => real => real) ((real::nat => real) n) - ((op *::real => real => real) - ((real::nat => real) - ((op -::nat => nat => nat) n (1::nat))) - ((op *::real => real => real) - ((op ^::real => nat => real) k' - ((op -::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) - (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))))) - ((abs::real => real) h)))))))))" +lemma TERMDIFF_LEMMA3: "ALL (z::real) (h::real) (n::nat) k'::real. + h ~= 0 & abs z <= k' & abs (z + h) <= k' --> + abs (((z + h) ^ n - z ^ n) / h - real n * z ^ (n - 1)) + <= real n * (real (n - 1) * (k' ^ (n - 2) * abs h))" by (import powser TERMDIFF_LEMMA3) -lemma TERMDIFF_LEMMA4: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%k'::real. - (All::(real => bool) => bool) - (%k::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) k) - ((All::(real => bool) => bool) - (%h::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) - ((abs::real => real) h)) - ((op <::real => real => bool) - ((abs::real => real) h) k)) - ((op <=::real => real => bool) - ((abs::real => real) (f h)) - ((op *::real => real => real) k' - ((abs::real => real) h)))))) - ((tends_real_real::(real => real) => real => real => bool) f - (0::real) (0::real)))))" +lemma TERMDIFF_LEMMA4: "ALL (f::real => real) (k'::real) k::real. + 0 < k & + (ALL h::real. 0 < abs h & abs h < k --> abs (f h) <= k' * abs h) --> + tends_real_real f 0 0" by (import powser TERMDIFF_LEMMA4) -lemma TERMDIFF_LEMMA5: "(All::((nat => real) => bool) => bool) - (%f::nat => real. - (All::((real => nat => real) => bool) => bool) - (%g::real => nat => real. - (All::(real => bool) => bool) - (%k::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) k) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) f) - ((All::(real => bool) => bool) - (%h::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) - ((abs::real => real) h)) - ((op <::real => real => bool) - ((abs::real => real) h) k)) - ((All::(nat => bool) => bool) - (%n::nat. - (op <=::real => real => bool) - ((abs::real => real) (g h n)) - ((op *::real => real => real) (f n) - ((abs::real => real) h)))))))) - ((tends_real_real::(real => real) => real => real => bool) - (%h::real. (suminf::(nat => real) => real) (g h)) - (0::real) (0::real)))))" +lemma TERMDIFF_LEMMA5: "ALL (f::nat => real) (g::real => nat => real) k::real. + 0 < k & + summable f & + (ALL h::real. + 0 < abs h & abs h < k --> + (ALL n::nat. abs (g h n) <= f n * abs h)) --> + tends_real_real (%h::real. suminf (g h)) 0 0" by (import powser TERMDIFF_LEMMA5) -lemma TERMDIFF: "(All::((nat => real) => bool) => bool) - (%c::nat => real. - (All::(real => bool) => bool) - (%k'::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) (c n) - ((op ^::real => nat => real) k' n))) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) - ((diffs::(nat => real) => nat => real) c n) - ((op ^::real => nat => real) k' n))) - ((op &::bool => bool => bool) - ((summable::(nat => real) => bool) - (%n::nat. - (op *::real => real => real) - ((diffs::(nat => real) => nat => real) - ((diffs::(nat => real) => nat => real) c) n) - ((op ^::real => nat => real) k' n))) - ((op <::real => real => bool) ((abs::real => real) x) - ((abs::real => real) k'))))) - ((diffl::(real => real) => real => real => bool) - (%x::real. - (suminf::(nat => real) => real) - (%n::nat. - (op *::real => real => real) (c n) - ((op ^::real => nat => real) x n))) - ((suminf::(nat => real) => real) - (%n::nat. - (op *::real => real => real) - ((diffs::(nat => real) => nat => real) c n) - ((op ^::real => nat => real) x n))) - x))))" +lemma TERMDIFF: "ALL (c::nat => real) (k'::real) x::real. + summable (%n::nat. c n * k' ^ n) & + summable (%n::nat. diffs c n * k' ^ n) & + summable (%n::nat. diffs (diffs c) n * k' ^ n) & abs x < abs k' --> + diffl (%x::real. suminf (%n::nat. c n * x ^ n)) + (suminf (%n::nat. diffs c n * x ^ n)) x" by (import powser TERMDIFF) ;end_setup @@ -4262,113 +2293,20 @@ lemma DIFF_COS: "ALL x::real. diffl cos (- sin x) x" by (import transc DIFF_COS) -lemma DIFF_COMPOSITE: "(op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) (f::real => real) - (l::real) (x::real)) - ((Not::bool => bool) ((op =::real => real => bool) (f x) (0::real)))) - ((diffl::(real => real) => real => real => bool) - (%x::real. (inverse::real => real) (f x)) - ((uminus::real => real) - ((op /::real => real => real) l - ((op ^::real => nat => real) (f x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) (g::real => real) - (m::real) x) - ((Not::bool => bool) - ((op =::real => real => bool) (g x) (0::real))))) - ((diffl::(real => real) => real => real => bool) - (%x::real. (op /::real => real => real) (f x) (g x)) - ((op /::real => real => real) - ((op -::real => real => real) - ((op *::real => real => real) l (g x)) - ((op *::real => real => real) m (f x))) - ((op ^::real => nat => real) (g x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((diffl::(real => real) => real => real => bool) g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. (op +::real => real => real) (f x) (g x)) - ((op +::real => real => real) l m) x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((diffl::(real => real) => real => real => bool) g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. (op *::real => real => real) (f x) (g x)) - ((op +::real => real => real) - ((op *::real => real => real) l (g x)) - ((op *::real => real => real) m (f x))) - x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((diffl::(real => real) => real => real => bool) g m x)) - ((diffl::(real => real) => real => real => bool) - (%x::real. (op -::real => real => real) (f x) (g x)) - ((op -::real => real => real) l m) x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) f l x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (uminus::real => real) (f x)) - ((uminus::real => real) l) x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) g m x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (op ^::real => nat => real) (g x) (n::nat)) - ((op *::real => real => real) - ((op *::real => real => real) ((real::nat => real) n) - ((op ^::real => nat => real) (g x) - ((op -::nat => nat => nat) n (1::nat)))) - m) - x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) g m x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (exp::real => real) (g x)) - ((op *::real => real => real) ((exp::real => real) (g x)) - m) - x)) - ((op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) g m x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (sin::real => real) (g x)) - ((op *::real => real => real) - ((cos::real => real) (g x)) m) - x)) - ((op -->::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) g m x) - ((diffl::(real => real) => real => real => bool) - (%x::real. (cos::real => real) (g x)) - ((op *::real => real => real) - ((uminus::real => real) ((sin::real => real) (g x))) - m) - x))))))))))" +lemma DIFF_COMPOSITE: "(diffl (f::real => real) (l::real) (x::real) & f x ~= 0 --> + diffl (%x::real. inverse (f x)) (- (l / f x ^ 2)) x) & +(diffl f l x & diffl (g::real => real) (m::real) x & g x ~= 0 --> + diffl (%x::real. f x / g x) ((l * g x - m * f x) / g x ^ 2) x) & +(diffl f l x & diffl g m x --> diffl (%x::real. f x + g x) (l + m) x) & +(diffl f l x & diffl g m x --> + diffl (%x::real. f x * g x) (l * g x + m * f x) x) & +(diffl f l x & diffl g m x --> diffl (%x::real. f x - g x) (l - m) x) & +(diffl f l x --> diffl (%x::real. - f x) (- l) x) & +(diffl g m x --> + diffl (%x::real. g x ^ (n::nat)) (real n * g x ^ (n - 1) * m) x) & +(diffl g m x --> diffl (%x::real. exp (g x)) (exp (g x) * m) x) & +(diffl g m x --> diffl (%x::real. sin (g x)) (cos (g x) * m) x) & +(diffl g m x --> diffl (%x::real. cos (g x)) (- sin (g x) * m) x)" by (import transc DIFF_COMPOSITE) lemma EXP_0: "exp 0 = 1" @@ -4410,13 +2348,7 @@ lemma EXP_SUB: "ALL (x::real) y::real. exp (x - y) = exp x / exp y" by (import transc EXP_SUB) -lemma EXP_MONO_IMP: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) ((op <::real => real => bool) x y) - ((op <::real => real => bool) ((exp::real => real) x) - ((exp::real => real) y))))" +lemma EXP_MONO_IMP: "ALL (x::real) y::real. x < y --> exp x < exp y" by (import transc EXP_MONO_IMP) lemma EXP_MONO_LT: "ALL (x::real) y::real. (exp x < exp y) = (x < y)" @@ -4447,32 +2379,10 @@ lemma EXP_LN: "ALL x::real. (exp (ln x) = x) = (0 < x)" by (import transc EXP_LN) -lemma LN_MUL: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) y)) - ((op =::real => real => bool) - ((ln::real => real) ((op *::real => real => real) x y)) - ((op +::real => real => real) ((ln::real => real) x) - ((ln::real => real) y)))))" +lemma LN_MUL: "ALL (x::real) y::real. 0 < x & 0 < y --> ln (x * y) = ln x + ln y" by (import transc LN_MUL) -lemma LN_INJ: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) y)) - ((op =::bool => bool => bool) - ((op =::real => real => bool) ((ln::real => real) x) - ((ln::real => real) y)) - ((op =::real => real => bool) x y))))" +lemma LN_INJ: "ALL (x::real) y::real. 0 < x & 0 < y --> (ln x = ln y) = (x = y)" by (import transc LN_INJ) lemma LN_1: "ln 1 = 0" @@ -4481,58 +2391,16 @@ lemma LN_INV: "ALL x>0. ln (inverse x) = - ln x" by (import transc LN_INV) -lemma LN_DIV: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) y)) - ((op =::real => real => bool) - ((ln::real => real) ((op /::real => real => real) x y)) - ((op -::real => real => real) ((ln::real => real) x) - ((ln::real => real) y)))))" +lemma LN_DIV: "ALL (x::real) y::real. 0 < x & 0 < y --> ln (x / y) = ln x - ln y" by (import transc LN_DIV) -lemma LN_MONO_LT: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) y)) - ((op =::bool => bool => bool) - ((op <::real => real => bool) ((ln::real => real) x) - ((ln::real => real) y)) - ((op <::real => real => bool) x y))))" +lemma LN_MONO_LT: "ALL (x::real) y::real. 0 < x & 0 < y --> (ln x < ln y) = (x < y)" by (import transc LN_MONO_LT) -lemma LN_MONO_LE: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) y)) - ((op =::bool => bool => bool) - ((op <=::real => real => bool) ((ln::real => real) x) - ((ln::real => real) y)) - ((op <=::real => real => bool) x y))))" +lemma LN_MONO_LE: "ALL (x::real) y::real. 0 < x & 0 < y --> (ln x <= ln y) = (x <= y)" by (import transc LN_MONO_LE) -lemma LN_POW: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op =::real => real => bool) - ((ln::real => real) ((op ^::real => nat => real) x n)) - ((op *::real => real => real) ((real::nat => real) n) - ((ln::real => real) x)))))" +lemma LN_POW: "ALL (n::nat) x::real. 0 < x --> ln (x ^ n) = real n * ln x" by (import transc LN_POW) lemma LN_LE: "ALL x>=0. ln (1 + x) <= x" @@ -4546,31 +2414,10 @@ constdefs root :: "nat => real => real" - "(op ==::(nat => real => real) => (nat => real => real) => prop) - (root::nat => real => real) - (%(n::nat) x::real. - (Eps::(real => bool) => real) - (%u::real. - (op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) u)) - ((op =::real => real => bool) ((op ^::real => nat => real) u n) - x)))" - -lemma root: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op =::real => real => bool) ((root::nat => real => real) n x) - ((Eps::(real => bool) => real) - (%u::real. - (op &::bool => bool => bool) - ((op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) u)) - ((op =::real => real => bool) - ((op ^::real => nat => real) u n) x)))))" + "root == %(n::nat) x::real. SOME u::real. (0 < x --> 0 < u) & u ^ n = x" + +lemma root: "ALL (n::nat) x::real. + root n x = (SOME u::real. (0 < x --> 0 < u) & u ^ n = x)" by (import transc root) constdefs @@ -4580,32 +2427,10 @@ lemma sqrt: "ALL x::real. sqrt x = root 2 x" by (import transc sqrt) -lemma ROOT_LT_LEMMA: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op =::real => real => bool) - ((op ^::real => nat => real) - ((exp::real => real) - ((op /::real => real => real) ((ln::real => real) x) - ((real::nat => real) ((Suc::nat => nat) n)))) - ((Suc::nat => nat) n)) - x)))" +lemma ROOT_LT_LEMMA: "ALL (n::nat) x::real. 0 < x --> exp (ln x / real (Suc n)) ^ Suc n = x" by (import transc ROOT_LT_LEMMA) -lemma ROOT_LN: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op =::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) n) x) - ((exp::real => real) - ((op /::real => real => real) ((ln::real => real) x) - ((real::nat => real) ((Suc::nat => nat) n)))))))" +lemma ROOT_LN: "ALL (n::nat) x::real. 0 < x --> root (Suc n) x = exp (ln x / real (Suc n))" by (import transc ROOT_LN) lemma ROOT_0: "ALL n::nat. root (Suc n) 0 = 0" @@ -4614,132 +2439,38 @@ lemma ROOT_1: "ALL n::nat. root (Suc n) 1 = 1" by (import transc ROOT_1) -lemma ROOT_POS_LT: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) (0::real) - ((root::nat => real => real) ((Suc::nat => nat) n) x))))" +lemma ROOT_POS_LT: "ALL (n::nat) x::real. 0 < x --> 0 < root (Suc n) x" by (import transc ROOT_POS_LT) -lemma ROOT_POW_POS: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op =::real => real => bool) - ((op ^::real => nat => real) - ((root::nat => real => real) ((Suc::nat => nat) n) x) - ((Suc::nat => nat) n)) - x)))" +lemma ROOT_POW_POS: "ALL (n::nat) x::real. 0 <= x --> root (Suc n) x ^ Suc n = x" by (import transc ROOT_POW_POS) -lemma POW_ROOT_POS: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op =::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) n) - ((op ^::real => nat => real) x ((Suc::nat => nat) n))) - x)))" +lemma POW_ROOT_POS: "ALL (n::nat) x::real. 0 <= x --> root (Suc n) (x ^ Suc n) = x" by (import transc POW_ROOT_POS) -lemma ROOT_POS: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) (0::real) - ((root::nat => real => real) ((Suc::nat => nat) n) x))))" +lemma ROOT_POS: "ALL (n::nat) x::real. 0 <= x --> 0 <= root (Suc n) x" by (import transc ROOT_POS) -lemma ROOT_POS_UNIQ: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) y) - ((op =::real => real => bool) - ((op ^::real => nat => real) y ((Suc::nat => nat) n)) - x))) - ((op =::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) n) x) - y))))" +lemma ROOT_POS_UNIQ: "ALL (n::nat) (x::real) y::real. + 0 <= x & 0 <= y & y ^ Suc n = x --> root (Suc n) x = y" by (import transc ROOT_POS_UNIQ) -lemma ROOT_MUL: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) (0::real) y)) - ((op =::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) n) - ((op *::real => real => real) x y)) - ((op *::real => real => real) - ((root::nat => real => real) ((Suc::nat => nat) n) x) - ((root::nat => real => real) ((Suc::nat => nat) n) - y))))))" +lemma ROOT_MUL: "ALL (n::nat) (x::real) y::real. + 0 <= x & 0 <= y --> + root (Suc n) (x * y) = root (Suc n) x * root (Suc n) y" by (import transc ROOT_MUL) -lemma ROOT_INV: "(All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op =::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) n) - ((inverse::real => real) x)) - ((inverse::real => real) - ((root::nat => real => real) ((Suc::nat => nat) n) x)))))" +lemma ROOT_INV: "ALL (n::nat) x::real. + 0 <= x --> root (Suc n) (inverse x) = inverse (root (Suc n) x)" by (import transc ROOT_INV) -lemma ROOT_DIV: "(All::(nat => bool) => bool) - (%x::nat. - (All::(real => bool) => bool) - (%xa::real. - (All::(real => bool) => bool) - (%xb::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) xa) - ((op <=::real => real => bool) (0::real) xb)) - ((op =::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) x) - ((op /::real => real => real) xa xb)) - ((op /::real => real => real) - ((root::nat => real => real) ((Suc::nat => nat) x) xa) - ((root::nat => real => real) ((Suc::nat => nat) x) - xb))))))" +lemma ROOT_DIV: "ALL (x::nat) (xa::real) xb::real. + 0 <= xa & 0 <= xb --> + root (Suc x) (xa / xb) = root (Suc x) xa / root (Suc x) xb" by (import transc ROOT_DIV) -lemma ROOT_MONO_LE: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x y)) - ((op <=::real => real => bool) - ((root::nat => real => real) ((Suc::nat => nat) (n::nat)) x) - ((root::nat => real => real) ((Suc::nat => nat) n) y))))" +lemma ROOT_MONO_LE: "ALL (x::real) y::real. + 0 <= x & x <= y --> root (Suc (n::nat)) x <= root (Suc n) y" by (import transc ROOT_MONO_LE) lemma SQRT_0: "sqrt 0 = 0" @@ -4760,125 +2491,33 @@ lemma SQRT_POW_2: "ALL x>=0. sqrt x ^ 2 = x" by (import transc SQRT_POW_2) -lemma POW_2_SQRT: "(op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) (x::real)) - ((op =::real => real => bool) - ((sqrt::real => real) - ((op ^::real => nat => real) x - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))))) - x)" +lemma POW_2_SQRT: "0 <= (x::real) --> sqrt (x ^ 2) = x" by (import transc POW_2_SQRT) -lemma SQRT_POS_UNIQ: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) xa) - ((op =::real => real => bool) - ((op ^::real => nat => real) xa - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - x))) - ((op =::real => real => bool) ((sqrt::real => real) x) xa)))" +lemma SQRT_POS_UNIQ: "ALL (x::real) xa::real. 0 <= x & 0 <= xa & xa ^ 2 = x --> sqrt x = xa" by (import transc SQRT_POS_UNIQ) -lemma SQRT_MUL: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) (0::real) xa)) - ((op =::real => real => bool) - ((sqrt::real => real) ((op *::real => real => real) x xa)) - ((op *::real => real => real) ((sqrt::real => real) x) - ((sqrt::real => real) xa)))))" +lemma SQRT_MUL: "ALL (x::real) xa::real. + 0 <= x & 0 <= xa --> sqrt (x * xa) = sqrt x * sqrt xa" by (import transc SQRT_MUL) lemma SQRT_INV: "ALL x>=0. sqrt (inverse x) = inverse (sqrt x)" by (import transc SQRT_INV) -lemma SQRT_DIV: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) (0::real) xa)) - ((op =::real => real => bool) - ((sqrt::real => real) ((op /::real => real => real) x xa)) - ((op /::real => real => real) ((sqrt::real => real) x) - ((sqrt::real => real) xa)))))" +lemma SQRT_DIV: "ALL (x::real) xa::real. + 0 <= x & 0 <= xa --> sqrt (x / xa) = sqrt x / sqrt xa" by (import transc SQRT_DIV) -lemma SQRT_MONO_LE: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%xa::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x xa)) - ((op <=::real => real => bool) ((sqrt::real => real) x) - ((sqrt::real => real) xa))))" +lemma SQRT_MONO_LE: "ALL (x::real) xa::real. 0 <= x & x <= xa --> sqrt x <= sqrt xa" by (import transc SQRT_MONO_LE) -lemma SQRT_EVEN_POW2: "(All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) ((EVEN::nat => bool) n) - ((op =::real => real => bool) - ((sqrt::real => real) - ((op ^::real => nat => real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - n)) - ((op ^::real => nat => real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))) - ((op div::nat => nat => nat) n - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))" +lemma SQRT_EVEN_POW2: "ALL n::nat. EVEN n --> sqrt (2 ^ n) = 2 ^ (n div 2)" by (import transc SQRT_EVEN_POW2) lemma REAL_DIV_SQRT: "ALL x>=0. x / sqrt x = sqrt x" by (import transc REAL_DIV_SQRT) -lemma SQRT_EQ: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::real => real => bool) - ((op ^::real => nat => real) x - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))) - y) - ((op <=::real => real => bool) (0::real) x)) - ((op =::real => real => bool) x ((sqrt::real => real) y))))" +lemma SQRT_EQ: "ALL (x::real) y::real. x ^ 2 = y & 0 <= x --> x = sqrt y" by (import transc SQRT_EQ) lemma SIN_0: "sin 0 = 0" @@ -4934,17 +2573,7 @@ (sin x)" by (import transc SIN_PAIRED) -lemma SIN_POS: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) x - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))))) - ((op <::real => real => bool) (0::real) ((sin::real => real) x)))" +lemma SIN_POS: "ALL x::real. 0 < x & x < 2 --> 0 < sin x" by (import transc SIN_POS) lemma COS_PAIRED: "ALL x::real. @@ -5009,211 +2638,45 @@ lemma SIN_NPI: "ALL n::nat. sin (real n * pi) = 0" by (import transc SIN_NPI) -lemma SIN_POS_PI2: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <::real => real => bool) (0::real) ((sin::real => real) x)))" +lemma SIN_POS_PI2: "ALL x::real. 0 < x & x < pi / 2 --> 0 < sin x" by (import transc SIN_POS_PI2) -lemma COS_POS_PI2: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <::real => real => bool) (0::real) ((cos::real => real) x)))" +lemma COS_POS_PI2: "ALL x::real. 0 < x & x < pi / 2 --> 0 < cos x" by (import transc COS_POS_PI2) -lemma COS_POS_PI: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x) - ((op <::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <::real => real => bool) (0::real) ((cos::real => real) x)))" +lemma COS_POS_PI: "ALL x::real. - (pi / 2) < x & x < pi / 2 --> 0 < cos x" by (import transc COS_POS_PI) -lemma SIN_POS_PI: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) x (pi::real))) - ((op <::real => real => bool) (0::real) ((sin::real => real) x)))" +lemma SIN_POS_PI: "ALL x::real. 0 < x & x < pi --> 0 < sin x" by (import transc SIN_POS_PI) -lemma COS_POS_PI2_LE: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <=::real => real => bool) (0::real) ((cos::real => real) x)))" +lemma COS_POS_PI2_LE: "ALL x::real. 0 <= x & x <= pi / 2 --> 0 <= cos x" by (import transc COS_POS_PI2_LE) -lemma COS_POS_PI_LE: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x) - ((op <=::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <=::real => real => bool) (0::real) ((cos::real => real) x)))" +lemma COS_POS_PI_LE: "ALL x::real. - (pi / 2) <= x & x <= pi / 2 --> 0 <= cos x" by (import transc COS_POS_PI_LE) -lemma SIN_POS_PI2_LE: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <=::real => real => bool) (0::real) ((sin::real => real) x)))" +lemma SIN_POS_PI2_LE: "ALL x::real. 0 <= x & x <= pi / 2 --> 0 <= sin x" by (import transc SIN_POS_PI2_LE) -lemma SIN_POS_PI_LE: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x (pi::real))) - ((op <=::real => real => bool) (0::real) ((sin::real => real) x)))" +lemma SIN_POS_PI_LE: "ALL x::real. 0 <= x & x <= pi --> 0 <= sin x" by (import transc SIN_POS_PI_LE) -lemma COS_TOTAL: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((Ex1::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x (pi::real)) - ((op =::real => real => bool) ((cos::real => real) x) y)))))" +lemma COS_TOTAL: "ALL y::real. + - 1 <= y & y <= 1 --> (EX! x::real. 0 <= x & x <= pi & cos x = y)" by (import transc COS_TOTAL) -lemma SIN_TOTAL: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((Ex1::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((op =::real => real => bool) ((sin::real => real) x) y)))))" +lemma SIN_TOTAL: "ALL y::real. + - 1 <= y & y <= 1 --> + (EX! x::real. - (pi / 2) <= x & x <= pi / 2 & sin x = y)" by (import transc SIN_TOTAL) -lemma COS_ZERO_LEMMA: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op =::real => real => bool) ((cos::real => real) x) (0::real))) - ((Ex::(nat => bool) => bool) - (%n::nat. - (op &::bool => bool => bool) - ((Not::bool => bool) ((EVEN::nat => bool) n)) - ((op =::real => real => bool) x - ((op *::real => real => real) ((real::nat => real) n) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))))" +lemma COS_ZERO_LEMMA: "ALL x::real. + 0 <= x & cos x = 0 --> (EX n::nat. ~ EVEN n & x = real n * (pi / 2))" by (import transc COS_ZERO_LEMMA) -lemma SIN_ZERO_LEMMA: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op =::real => real => bool) ((sin::real => real) x) (0::real))) - ((Ex::(nat => bool) => bool) - (%n::nat. - (op &::bool => bool => bool) ((EVEN::nat => bool) n) - ((op =::real => real => bool) x - ((op *::real => real => real) ((real::nat => real) n) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))))" +lemma SIN_ZERO_LEMMA: "ALL x::real. + 0 <= x & sin x = 0 --> (EX n::nat. EVEN n & x = real n * (pi / 2))" by (import transc SIN_ZERO_LEMMA) lemma COS_ZERO: "ALL x::real. @@ -5250,105 +2713,20 @@ lemma TAN_PERIODIC: "ALL x::real. tan (x + 2 * pi) = tan x" by (import transc TAN_PERIODIC) -lemma TAN_ADD: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) ((cos::real => real) x) - (0::real))) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) ((cos::real => real) y) - (0::real))) - ((Not::bool => bool) - ((op =::real => real => bool) - ((cos::real => real) ((op +::real => real => real) x y)) - (0::real))))) - ((op =::real => real => bool) - ((tan::real => real) ((op +::real => real => real) x y)) - ((op /::real => real => real) - ((op +::real => real => real) ((tan::real => real) x) - ((tan::real => real) y)) - ((op -::real => real => real) (1::real) - ((op *::real => real => real) ((tan::real => real) x) - ((tan::real => real) y)))))))" +lemma TAN_ADD: "ALL (x::real) y::real. + cos x ~= 0 & cos y ~= 0 & cos (x + y) ~= 0 --> + tan (x + y) = (tan x + tan y) / (1 - tan x * tan y)" by (import transc TAN_ADD) -lemma TAN_DOUBLE: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) ((cos::real => real) x) (0::real))) - ((Not::bool => bool) - ((op =::real => real => bool) - ((cos::real => real) - ((op *::real => real => real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - x)) - (0::real)))) - ((op =::real => real => bool) - ((tan::real => real) - ((op *::real => real => real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - x)) - ((op /::real => real => real) - ((op *::real => real => real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))) - ((tan::real => real) x)) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) ((tan::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))))))" +lemma TAN_DOUBLE: "ALL x::real. + cos x ~= 0 & cos (2 * x) ~= 0 --> + tan (2 * x) = 2 * tan x / (1 - tan x ^ 2)" by (import transc TAN_DOUBLE) -lemma TAN_POS_PI2: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) x) - ((op <::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op <::real => real => bool) (0::real) ((tan::real => real) x)))" +lemma TAN_POS_PI2: "ALL x::real. 0 < x & x < pi / 2 --> 0 < tan x" by (import transc TAN_POS_PI2) -lemma DIFF_TAN: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) ((cos::real => real) x) (0::real))) - ((diffl::(real => real) => real => real => bool) (tan::real => real) - ((inverse::real => real) - ((op ^::real => nat => real) ((cos::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x))" +lemma DIFF_TAN: "ALL x::real. cos x ~= 0 --> diffl tan (inverse (cos x ^ 2)) x" by (import transc DIFF_TAN) lemma TAN_TOTAL_LEMMA: "ALL y>0. EX x>0. x < pi / 2 & y < tan x" @@ -5382,172 +2760,37 @@ lemma atn: "ALL y::real. atn y = (SOME x::real. - (pi / 2) < x & x < pi / 2 & tan x = y)" by (import transc atn) -lemma ASN: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((asn::real => real) y)) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((asn::real => real) y) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((op =::real => real => bool) - ((sin::real => real) ((asn::real => real) y)) y))))" +lemma ASN: "ALL y::real. + - 1 <= y & y <= 1 --> + - (pi / 2) <= asn y & asn y <= pi / 2 & sin (asn y) = y" by (import transc ASN) -lemma ASN_SIN: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((op =::real => real => bool) - ((sin::real => real) ((asn::real => real) y)) y))" +lemma ASN_SIN: "ALL y::real. - 1 <= y & y <= 1 --> sin (asn y) = y" by (import transc ASN_SIN) -lemma ASN_BOUNDS: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((asn::real => real) y)) - ((op <=::real => real => bool) ((asn::real => real) y) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))" +lemma ASN_BOUNDS: "ALL y::real. - 1 <= y & y <= 1 --> - (pi / 2) <= asn y & asn y <= pi / 2" by (import transc ASN_BOUNDS) -lemma ASN_BOUNDS_LT: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <::real => real => bool) y (1::real))) - ((op &::bool => bool => bool) - ((op <::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((asn::real => real) y)) - ((op <::real => real => bool) ((asn::real => real) y) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))" +lemma ASN_BOUNDS_LT: "ALL y::real. - 1 < y & y < 1 --> - (pi / 2) < asn y & asn y < pi / 2" by (import transc ASN_BOUNDS_LT) -lemma SIN_ASN: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x) - ((op <=::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op =::real => real => bool) - ((asn::real => real) ((sin::real => real) x)) x))" +lemma SIN_ASN: "ALL x::real. - (pi / 2) <= x & x <= pi / 2 --> asn (sin x) = x" by (import transc SIN_ASN) -lemma ACS: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) ((acs::real => real) y)) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((acs::real => real) y) (pi::real)) - ((op =::real => real => bool) - ((cos::real => real) ((acs::real => real) y)) y))))" +lemma ACS: "ALL y::real. + - 1 <= y & y <= 1 --> 0 <= acs y & acs y <= pi & cos (acs y) = y" by (import transc ACS) -lemma ACS_COS: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((op =::real => real => bool) - ((cos::real => real) ((acs::real => real) y)) y))" +lemma ACS_COS: "ALL y::real. - 1 <= y & y <= 1 --> cos (acs y) = y" by (import transc ACS_COS) -lemma ACS_BOUNDS: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <=::real => real => bool) y (1::real))) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) ((acs::real => real) y)) - ((op <=::real => real => bool) ((acs::real => real) y) (pi::real))))" +lemma ACS_BOUNDS: "ALL y::real. - 1 <= y & y <= 1 --> 0 <= acs y & acs y <= pi" by (import transc ACS_BOUNDS) -lemma ACS_BOUNDS_LT: "(All::(real => bool) => bool) - (%y::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) y) - ((op <::real => real => bool) y (1::real))) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) ((acs::real => real) y)) - ((op <::real => real => bool) ((acs::real => real) y) (pi::real))))" +lemma ACS_BOUNDS_LT: "ALL y::real. - 1 < y & y < 1 --> 0 < acs y & acs y < pi" by (import transc ACS_BOUNDS_LT) -lemma COS_ACS: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x (pi::real))) - ((op =::real => real => bool) - ((acs::real => real) ((cos::real => real) x)) x))" +lemma COS_ACS: "ALL x::real. 0 <= x & x <= pi --> acs (cos x) = x" by (import transc COS_ACS) lemma ATN: "ALL y::real. - (pi / 2) < atn y & atn y < pi / 2 & tan (atn y) = y" @@ -5559,219 +2802,46 @@ lemma ATN_BOUNDS: "ALL x::real. - (pi / 2) < atn x & atn x < pi / 2" by (import transc ATN_BOUNDS) -lemma TAN_ATN: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x) - ((op <::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op =::real => real => bool) - ((atn::real => real) ((tan::real => real) x)) x))" +lemma TAN_ATN: "ALL x::real. - (pi / 2) < x & x < pi / 2 --> atn (tan x) = x" by (import transc TAN_ATN) -lemma TAN_SEC: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) ((cos::real => real) x) (0::real))) - ((op =::real => real => bool) - ((op +::real => real => real) (1::real) - ((op ^::real => nat => real) ((tan::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - ((op ^::real => nat => real) - ((inverse::real => real) ((cos::real => real) x)) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) (bit.B1::bit)) - (bit.B0::bit))))))" +lemma TAN_SEC: "ALL x::real. cos x ~= 0 --> 1 + tan x ^ 2 = inverse (cos x) ^ 2" by (import transc TAN_SEC) -lemma SIN_COS_SQ: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) (0::real) x) - ((op <=::real => real => bool) x (pi::real))) - ((op =::real => real => bool) ((sin::real => real) x) - ((sqrt::real => real) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) ((cos::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))))))" +lemma SIN_COS_SQ: "ALL x::real. 0 <= x & x <= pi --> sin x = sqrt (1 - cos x ^ 2)" by (import transc SIN_COS_SQ) -lemma COS_SIN_SQ: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) - ((uminus::real => real) - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))) - x) - ((op <=::real => real => bool) x - ((op /::real => real => real) (pi::real) - ((number_of::bin => real) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))) - ((op =::real => real => bool) ((cos::real => real) x) - ((sqrt::real => real) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) ((sin::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))))))" +lemma COS_SIN_SQ: "ALL x::real. - (pi / 2) <= x & x <= pi / 2 --> cos x = sqrt (1 - sin x ^ 2)" by (import transc COS_SIN_SQ) lemma COS_ATN_NZ: "ALL x::real. cos (atn x) ~= 0" by (import transc COS_ATN_NZ) -lemma COS_ASN_NZ: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) x) - ((op <::real => real => bool) x (1::real))) - ((Not::bool => bool) - ((op =::real => real => bool) - ((cos::real => real) ((asn::real => real) x)) (0::real))))" +lemma COS_ASN_NZ: "ALL x::real. - 1 < x & x < 1 --> cos (asn x) ~= 0" by (import transc COS_ASN_NZ) -lemma SIN_ACS_NZ: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) x) - ((op <::real => real => bool) x (1::real))) - ((Not::bool => bool) - ((op =::real => real => bool) - ((sin::real => real) ((acs::real => real) x)) (0::real))))" +lemma SIN_ACS_NZ: "ALL x::real. - 1 < x & x < 1 --> sin (acs x) ~= 0" by (import transc SIN_ACS_NZ) -lemma COS_SIN_SQRT: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) ((cos::real => real) x)) - ((op =::real => real => bool) ((cos::real => real) x) - ((sqrt::real => real) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) ((sin::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))))))" +lemma COS_SIN_SQRT: "ALL x::real. 0 <= cos x --> cos x = sqrt (1 - sin x ^ 2)" by (import transc COS_SIN_SQRT) -lemma SIN_COS_SQRT: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) (0::real) ((sin::real => real) x)) - ((op =::real => real => bool) ((sin::real => real) x) - ((sqrt::real => real) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) ((cos::real => real) x) - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))))))" +lemma SIN_COS_SQRT: "ALL x::real. 0 <= sin x --> sin x = sqrt (1 - cos x ^ 2)" by (import transc SIN_COS_SQRT) lemma DIFF_LN: "ALL x>0. diffl ln (inverse x) x" by (import transc DIFF_LN) -lemma DIFF_ASN_LEMMA: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) x) - ((op <::real => real => bool) x (1::real))) - ((diffl::(real => real) => real => real => bool) (asn::real => real) - ((inverse::real => real) - ((cos::real => real) ((asn::real => real) x))) - x))" +lemma DIFF_ASN_LEMMA: "ALL x::real. - 1 < x & x < 1 --> diffl asn (inverse (cos (asn x))) x" by (import transc DIFF_ASN_LEMMA) -lemma DIFF_ASN: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) x) - ((op <::real => real => bool) x (1::real))) - ((diffl::(real => real) => real => real => bool) (asn::real => real) - ((inverse::real => real) - ((sqrt::real => real) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) x - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit))))))) - x))" +lemma DIFF_ASN: "ALL x::real. - 1 < x & x < 1 --> diffl asn (inverse (sqrt (1 - x ^ 2))) x" by (import transc DIFF_ASN) -lemma DIFF_ACS_LEMMA: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) x) - ((op <::real => real => bool) x (1::real))) - ((diffl::(real => real) => real => real => bool) (acs::real => real) - ((inverse::real => real) - ((uminus::real => real) - ((sin::real => real) ((acs::real => real) x)))) - x))" +lemma DIFF_ACS_LEMMA: "ALL x::real. - 1 < x & x < 1 --> diffl acs (inverse (- sin (acs x))) x" by (import transc DIFF_ACS_LEMMA) -lemma DIFF_ACS: "(All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((uminus::real => real) (1::real)) x) - ((op <::real => real => bool) x (1::real))) - ((diffl::(real => real) => real => real => bool) (acs::real => real) - ((uminus::real => real) - ((inverse::real => real) - ((sqrt::real => real) - ((op -::real => real => real) (1::real) - ((op ^::real => nat => real) x - ((number_of::bin => nat) - ((op BIT::bin => bit => bin) - ((op BIT::bin => bit => bin) (Numeral.Pls::bin) - (bit.B1::bit)) - (bit.B0::bit)))))))) - x))" +lemma DIFF_ACS: "ALL x::real. - 1 < x & x < 1 --> diffl acs (- inverse (sqrt (1 - x ^ 2))) x" by (import transc DIFF_ACS) lemma DIFF_ATN: "ALL x::real. diffl atn (inverse (1 + x ^ 2)) x" @@ -5882,25 +2952,10 @@ constdefs gauge :: "(real => bool) => (real => real) => bool" - "(op ==::((real => bool) => (real => real) => bool) - => ((real => bool) => (real => real) => bool) => prop) - (gauge::(real => bool) => (real => real) => bool) - (%(E::real => bool) g::real => real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) (E x) - ((op <::real => real => bool) (0::real) (g x))))" - -lemma gauge: "(All::((real => bool) => bool) => bool) - (%E::real => bool. - (All::((real => real) => bool) => bool) - (%g::real => real. - (op =::bool => bool => bool) - ((gauge::(real => bool) => (real => real) => bool) E g) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) (E x) - ((op <::real => real => bool) (0::real) (g x))))))" + "gauge == %(E::real => bool) g::real => real. ALL x::real. E x --> 0 < g x" + +lemma gauge: "ALL (E::real => bool) g::real => real. + gauge E g = (ALL x::real. E x --> 0 < g x)" by (import transc gauge) constdefs @@ -5960,153 +3015,36 @@ constdefs Dint :: "real * real => (real => real) => real => bool" - "(op ==::(real * real => (real => real) => real => bool) - => (real * real => (real => real) => real => bool) => prop) - (Dint::real * real => (real => real) => real => bool) - ((split::(real => real => (real => real) => real => bool) - => real * real => (real => real) => real => bool) - (%(a::real) (b::real) (f::real => real) k::real. - (All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::((real => real) => bool) => bool) - (%g::real => real. - (op &::bool => bool => bool) - ((gauge::(real => bool) => (real => real) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - g) - ((All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::((nat => real) => bool) => bool) - (%p::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tdiv::real * real - => (nat => real) * (nat => real) => bool) - ((Pair::real => real => real * real) a -b) - ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) -D p)) - ((fine::(real => real) - => (nat => real) * (nat => real) => bool) - g ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D p))) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) -((rsum::(nat => real) * (nat => real) => (real => real) => real) - ((Pair::(nat => real) => (nat => real) => (nat => real) * (nat => real)) D - p) - f) -k)) - e)))))))))" - -lemma Dint: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%k::real. - (op =::bool => bool => bool) - ((Dint::real * real => (real => real) => real => bool) - ((Pair::real => real => real * real) a b) f k) - ((All::(real => bool) => bool) - (%e::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) (0::real) e) - ((Ex::((real => real) => bool) => bool) - (%g::real => real. - (op &::bool => bool => bool) - ((gauge::(real => bool) - => (real => real) => bool) - (%x::real. - (op &::bool => bool => bool) ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - g) - ((All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::((nat => real) => bool) => bool) - (%p::nat => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((tdiv::real * real => (nat => real) * (nat => real) => bool) - ((Pair::real => real => real * real) a b) - ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D p)) - ((fine::(real => real) => (nat => real) * (nat => real) => bool) - g ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D p))) - ((op <::real => real => bool) - ((abs::real => real) - ((op -::real => real => real) - ((rsum::(nat => real) * (nat => real) - => (real => real) => real) - ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D p) - f) - k)) - e))))))))))))" + "Dint == +%(a::real, b::real) (f::real => real) k::real. + ALL e>0. + EX g::real => real. + gauge (%x::real. a <= x & x <= b) g & + (ALL (D::nat => real) p::nat => real. + tdiv (a, b) (D, p) & fine g (D, p) --> + abs (rsum (D, p) f - k) < e)" + +lemma Dint: "ALL (a::real) (b::real) (f::real => real) k::real. + Dint (a, b) f k = + (ALL e>0. + EX g::real => real. + gauge (%x::real. a <= x & x <= b) g & + (ALL (D::nat => real) p::nat => real. + tdiv (a, b) (D, p) & fine g (D, p) --> + abs (rsum (D, p) f - k) < e))" by (import transc Dint) -lemma DIVISION_0: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) ((op =::real => real => bool) a b) - ((op =::nat => nat => bool) - ((dsize::(nat => real) => nat) - (%n::nat. - (If::bool => real => real => real) - ((op =::nat => nat => bool) n (0::nat)) a b)) - (0::nat))))" +lemma DIVISION_0: "ALL (a::real) b::real. a = b --> dsize (%n::nat. if n = 0 then a else b) = 0" by (import transc DIVISION_0) -lemma DIVISION_1: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) ((op <::real => real => bool) a b) - ((op =::nat => nat => bool) - ((dsize::(nat => real) => nat) - (%n::nat. - (If::bool => real => real => real) - ((op =::nat => nat => bool) n (0::nat)) a b)) - (1::nat))))" +lemma DIVISION_1: "ALL (a::real) b::real. a < b --> dsize (%n::nat. if n = 0 then a else b) = 1" by (import transc DIVISION_1) -lemma DIVISION_SINGLE: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) ((op <=::real => real => bool) a b) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) - (%n::nat. - (If::bool => real => real => real) - ((op =::nat => nat => bool) n (0::nat)) a b))))" +lemma DIVISION_SINGLE: "ALL (a::real) b::real. + a <= b --> division (a, b) (%n::nat. if n = 0 then a else b)" by (import transc DIVISION_SINGLE) -lemma DIVISION_LHS: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((op =::real => real => bool) (D (0::nat)) a))))" +lemma DIVISION_LHS: "ALL (D::nat => real) (a::real) b::real. division (a, b) D --> D 0 = a" by (import transc DIVISION_LHS) lemma DIVISION_THM: "(All::((nat => real) => bool) => bool) @@ -6136,39 +3074,12 @@ ((op =::real => real => bool) (D n) b))))))))" by (import transc DIVISION_THM) -lemma DIVISION_RHS: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((op =::real => real => bool) - (D ((dsize::(nat => real) => nat) D)) b))))" +lemma DIVISION_RHS: "ALL (D::nat => real) (a::real) b::real. + division (a, b) D --> D (dsize D) = b" by (import transc DIVISION_RHS) -lemma DIVISION_LT_GEN: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((division::real * real - => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((op &::bool => bool => bool) - ((op <::nat => nat => bool) m n) - ((op <=::nat => nat => bool) n - ((dsize::(nat => real) => nat) D)))) - ((op <::real => real => bool) (D m) (D n)))))))" +lemma DIVISION_LT_GEN: "ALL (D::nat => real) (a::real) (b::real) (m::nat) n::nat. + division (a, b) D & m < n & n <= dsize D --> D m < D n" by (import transc DIVISION_LT_GEN) lemma DIVISION_LT: "(All::((nat => real) => bool) => bool) @@ -6189,16 +3100,7 @@ (D ((Suc::nat => nat) n))))))))" by (import transc DIVISION_LT) -lemma DIVISION_LE: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((op <=::real => real => bool) a b))))" +lemma DIVISION_LE: "ALL (D::nat => real) (a::real) b::real. division (a, b) D --> a <= b" by (import transc DIVISION_LE) lemma DIVISION_GT: "(All::((nat => real) => bool) => bool) @@ -6219,525 +3121,125 @@ (D ((dsize::(nat => real) => nat) D))))))))" by (import transc DIVISION_GT) -lemma DIVISION_EQ: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((op =::bool => bool => bool) - ((op =::real => real => bool) a b) - ((op =::nat => nat => bool) - ((dsize::(nat => real) => nat) D) (0::nat))))))" +lemma DIVISION_EQ: "ALL (D::nat => real) (a::real) b::real. + division (a, b) D --> (a = b) = (dsize D = 0)" by (import transc DIVISION_EQ) -lemma DIVISION_LBOUND: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((All::(nat => bool) => bool) - (%r::nat. (op <=::real => real => bool) a (D r))))))" +lemma DIVISION_LBOUND: "ALL (D::nat => real) (a::real) b::real. + division (a, b) D --> (ALL r::nat. a <= D r)" by (import transc DIVISION_LBOUND) -lemma DIVISION_LBOUND_LT: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((Not::bool => bool) - ((op =::nat => nat => bool) - ((dsize::(nat => real) => nat) D) (0::nat)))) - ((All::(nat => bool) => bool) - (%n::nat. - (op <::real => real => bool) a - (D ((Suc::nat => nat) n)))))))" +lemma DIVISION_LBOUND_LT: "ALL (D::nat => real) (a::real) b::real. + division (a, b) D & dsize D ~= 0 --> (ALL n::nat. a < D (Suc n))" by (import transc DIVISION_LBOUND_LT) -lemma DIVISION_UBOUND: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((All::(nat => bool) => bool) - (%r::nat. (op <=::real => real => bool) (D r) b)))))" +lemma DIVISION_UBOUND: "ALL (D::nat => real) (a::real) b::real. + division (a, b) D --> (ALL r::nat. D r <= b)" by (import transc DIVISION_UBOUND) -lemma DIVISION_UBOUND_LT: "(All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((division::real * real => (nat => real) => bool) - ((Pair::real => real => real * real) a b) D) - ((op <::nat => nat => bool) n - ((dsize::(nat => real) => nat) D))) - ((op <::real => real => bool) (D n) b)))))" +lemma DIVISION_UBOUND_LT: "ALL (D::nat => real) (a::real) (b::real) n::nat. + division (a, b) D & n < dsize D --> D n < b" by (import transc DIVISION_UBOUND_LT) -lemma DIVISION_APPEND: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::(real => bool) => bool) - (%c::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Ex::((nat => real) => bool) => bool) - (%D1::nat => real. - (Ex::((nat => real) => bool) => bool) - (%p1::nat => real. - (op &::bool => bool => bool) - ((tdiv::real * real -=> (nat => real) * (nat => real) => bool) - ((Pair::real => real => real * real) a b) - ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D1 p1)) - ((fine::(real => real) -=> (nat => real) * (nat => real) => bool) - (g::real => real) - ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D1 p1))))) - ((Ex::((nat => real) => bool) => bool) - (%D2::nat => real. - (Ex::((nat => real) => bool) => bool) - (%p2::nat => real. - (op &::bool => bool => bool) - ((tdiv::real * real -=> (nat => real) * (nat => real) => bool) - ((Pair::real => real => real * real) b c) - ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D2 p2)) - ((fine::(real => real) -=> (nat => real) * (nat => real) => bool) - g ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D2 p2)))))) - ((Ex::((nat => real) => bool) => bool) - (%x::nat => real. - (Ex::((nat => real) => bool) => bool) - (%p::nat => real. - (op &::bool => bool => bool) - ((tdiv::real * real - => (nat => real) * (nat => real) - => bool) - ((Pair::real => real => real * real) a c) - ((Pair::(nat => real) -=> (nat => real) => (nat => real) * (nat => real)) - x p)) - ((fine::(real => real) - => (nat => real) * (nat => real) - => bool) - g ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - x p))))))))" +lemma DIVISION_APPEND: "ALL (a::real) (b::real) c::real. + (EX (D1::nat => real) p1::nat => real. + tdiv (a, b) (D1, p1) & fine (g::real => real) (D1, p1)) & + (EX (D2::nat => real) p2::nat => real. + tdiv (b, c) (D2, p2) & fine g (D2, p2)) --> + (EX (x::nat => real) p::nat => real. tdiv (a, c) (x, p) & fine g (x, p))" by (import transc DIVISION_APPEND) -lemma DIVISION_EXISTS: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::((real => real) => bool) => bool) - (%g::real => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((gauge::(real => bool) => (real => real) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - g)) - ((Ex::((nat => real) => bool) => bool) - (%D::nat => real. - (Ex::((nat => real) => bool) => bool) - (%p::nat => real. - (op &::bool => bool => bool) - ((tdiv::real * real - => (nat => real) * (nat => real) - => bool) - ((Pair::real => real => real * real) a b) - ((Pair::(nat => real) -=> (nat => real) => (nat => real) * (nat => real)) - D p)) - ((fine::(real => real) - => (nat => real) * (nat => real) - => bool) - g ((Pair::(nat => real) - => (nat => real) => (nat => real) * (nat => real)) - D p))))))))" +lemma DIVISION_EXISTS: "ALL (a::real) (b::real) g::real => real. + a <= b & gauge (%x::real. a <= x & x <= b) g --> + (EX (D::nat => real) p::nat => real. tdiv (a, b) (D, p) & fine g (D, p))" by (import transc DIVISION_EXISTS) -lemma GAUGE_MIN: "(All::((real => bool) => bool) => bool) - (%E::real => bool. - (All::((real => real) => bool) => bool) - (%g1::real => real. - (All::((real => real) => bool) => bool) - (%g2::real => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((gauge::(real => bool) => (real => real) => bool) E g1) - ((gauge::(real => bool) => (real => real) => bool) E g2)) - ((gauge::(real => bool) => (real => real) => bool) E - (%x::real. - (If::bool => real => real => real) - ((op <::real => real => bool) (g1 x) (g2 x)) (g1 x) - (g2 x))))))" +lemma GAUGE_MIN: "ALL (E::real => bool) (g1::real => real) g2::real => real. + gauge E g1 & gauge E g2 --> + gauge E (%x::real. if g1 x < g2 x then g1 x else g2 x)" by (import transc GAUGE_MIN) -lemma FINE_MIN: "(All::((real => real) => bool) => bool) - (%g1::real => real. - (All::((real => real) => bool) => bool) - (%g2::real => real. - (All::((nat => real) => bool) => bool) - (%D::nat => real. - (All::((nat => real) => bool) => bool) - (%p::nat => real. - (op -->::bool => bool => bool) - ((fine::(real => real) - => (nat => real) * (nat => real) => bool) - (%x::real. - (If::bool => real => real => real) - ((op <::real => real => bool) (g1 x) (g2 x)) - (g1 x) (g2 x)) - ((Pair::(nat => real) - => (nat => real) - => (nat => real) * (nat => real)) - D p)) - ((op &::bool => bool => bool) - ((fine::(real => real) - => (nat => real) * (nat => real) => bool) - g1 ((Pair::(nat => real) - => (nat => real) - => (nat => real) * (nat => real)) - D p)) - ((fine::(real => real) - => (nat => real) * (nat => real) => bool) - g2 ((Pair::(nat => real) - => (nat => real) - => (nat => real) * (nat => real)) - D p)))))))" +lemma FINE_MIN: "ALL (g1::real => real) (g2::real => real) (D::nat => real) p::nat => real. + fine (%x::real. if g1 x < g2 x then g1 x else g2 x) (D, p) --> + fine g1 (D, p) & fine g2 (D, p)" by (import transc FINE_MIN) -lemma DINT_UNIQ: "(All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (All::((real => real) => bool) => bool) - (%f::real => real. - (All::(real => bool) => bool) - (%k1::real. - (All::(real => bool) => bool) - (%k2::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((op &::bool => bool => bool) - ((Dint::real * real -=> (real => real) => real => bool) - ((Pair::real => real => real * real) a b) f - k1) - ((Dint::real * real -=> (real => real) => real => bool) - ((Pair::real => real => real * real) a b) f - k2))) - ((op =::real => real => bool) k1 k2))))))" +lemma DINT_UNIQ: "ALL (a::real) (b::real) (f::real => real) (k1::real) k2::real. + a <= b & Dint (a, b) f k1 & Dint (a, b) f k2 --> k1 = k2" by (import transc DINT_UNIQ) lemma INTEGRAL_NULL: "ALL (f::real => real) a::real. Dint (a, a) f 0" by (import transc INTEGRAL_NULL) -lemma FTC1: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((real => real) => bool) => bool) - (%f'::real => real. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a b) - ((All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <=::real => real => bool) a x) - ((op <=::real => real => bool) x b)) - ((diffl::(real => real) - => real => real => bool) - f (f' x) x)))) - ((Dint::real * real => (real => real) => real => bool) - ((Pair::real => real => real * real) a b) f' - ((op -::real => real => real) (f b) (f a)))))))" +lemma FTC1: "ALL (f::real => real) (f'::real => real) (a::real) b::real. + a <= b & (ALL x::real. a <= x & x <= b --> diffl f (f' x) x) --> + Dint (a, b) f' (f b - f a)" by (import transc FTC1) -lemma MCLAURIN: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((nat => real => real) => bool) => bool) - (%diff::nat => real => real. - (All::(real => bool) => bool) - (%h::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) h) - ((op &::bool => bool => bool) - ((op <::nat => nat => bool) (0::nat) n) - ((op &::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - (diff (0::nat)) f) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(real => bool) => bool) - (%t::real. -(op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((op <::nat => nat => bool) m n) - ((op &::bool => bool => bool) ((op <=::real => real => bool) (0::real) t) - ((op <=::real => real => bool) t h))) - ((diffl::(real => real) => real => real => bool) (diff m) - (diff ((Suc::nat => nat) m) t) t))))))) - ((Ex::(real => bool) => bool) - (%t::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) t) - ((op &::bool => bool => bool) - ((op <::real => real => bool) t h) - ((op =::real => real => bool) (f h) - ((op +::real => real => real) - ((real.sum::nat * nat - => (nat => real) => real) - ((Pair::nat => nat => nat * nat) -(0::nat) n) - (%m::nat. - (op *::real => real => real) - ((op /::real => real => real) (diff m (0::real)) - ((real::nat => real) ((FACT::nat => nat) m))) - ((op ^::real => nat => real) h m))) - ((op *::real => real => real) - ((op /::real => real => real) (diff n t) -((real::nat => real) ((FACT::nat => nat) n))) - ((op ^::real => nat => real) h -n)))))))))))" +lemma MCLAURIN: "ALL (f::real => real) (diff::nat => real => real) (h::real) n::nat. + 0 < h & + 0 < n & + diff 0 = f & + (ALL (m::nat) t::real. + m < n & 0 <= t & t <= h --> diffl (diff m) (diff (Suc m) t) t) --> + (EX t>0. + t < h & + f h = + real.sum (0, n) (%m::nat. diff m 0 / real (FACT m) * h ^ m) + + diff n t / real (FACT n) * h ^ n)" by (import transc MCLAURIN) -lemma MCLAURIN_NEG: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((nat => real => real) => bool) => bool) - (%diff::nat => real => real. - (All::(real => bool) => bool) - (%h::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) h (0::real)) - ((op &::bool => bool => bool) - ((op <::nat => nat => bool) (0::nat) n) - ((op &::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - (diff (0::nat)) f) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(real => bool) => bool) - (%t::real. -(op -->::bool => bool => bool) - ((op &::bool => bool => bool) ((op <::nat => nat => bool) m n) - ((op &::bool => bool => bool) ((op <=::real => real => bool) h t) - ((op <=::real => real => bool) t (0::real)))) - ((diffl::(real => real) => real => real => bool) (diff m) - (diff ((Suc::nat => nat) m) t) t))))))) - ((Ex::(real => bool) => bool) - (%t::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) h t) - ((op &::bool => bool => bool) - ((op <::real => real => bool) t (0::real)) - ((op =::real => real => bool) (f h) - ((op +::real => real => real) - ((real.sum::nat * nat - => (nat => real) => real) - ((Pair::nat => nat => nat * nat) -(0::nat) n) - (%m::nat. - (op *::real => real => real) - ((op /::real => real => real) (diff m (0::real)) - ((real::nat => real) ((FACT::nat => nat) m))) - ((op ^::real => nat => real) h m))) - ((op *::real => real => real) - ((op /::real => real => real) (diff n t) -((real::nat => real) ((FACT::nat => nat) n))) - ((op ^::real => nat => real) h -n)))))))))))" +lemma MCLAURIN_NEG: "ALL (f::real => real) (diff::nat => real => real) (h::real) n::nat. + h < 0 & + 0 < n & + diff 0 = f & + (ALL (m::nat) t::real. + m < n & h <= t & t <= 0 --> diffl (diff m) (diff (Suc m) t) t) --> + (EX t::real. + h < t & + t < 0 & + f h = + real.sum (0, n) (%m::nat. diff m 0 / real (FACT m) * h ^ m) + + diff n t / real (FACT n) * h ^ n)" by (import transc MCLAURIN_NEG) -lemma MCLAURIN_ALL_LT: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((nat => real => real) => bool) => bool) - (%diff::nat => real => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - (diff (0::nat)) f) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(real => bool) => bool) - (%x::real. - (diffl::(real => real) => real => real => bool) - (diff m) (diff ((Suc::nat => nat) m) x) x)))) - ((All::(real => bool) => bool) - (%x::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) x (0::real))) - ((op <::nat => nat => bool) (0::nat) n)) - ((Ex::(real => bool) => bool) - (%t::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) - ((abs::real => real) t)) - ((op &::bool => bool => bool) - ((op <::real => real => bool) - ((abs::real => real) t) - ((abs::real => real) x)) - ((op =::real => real => bool) (f x) - ((op +::real => real => real) - ((real.sum::nat * nat - => (nat => real) => real) -((Pair::nat => nat => nat * nat) (0::nat) n) -(%m::nat. - (op *::real => real => real) - ((op /::real => real => real) (diff m (0::real)) - ((real::nat => real) ((FACT::nat => nat) m))) - ((op ^::real => nat => real) x m))) - ((op *::real => real => real) -((op /::real => real => real) (diff n t) - ((real::nat => real) ((FACT::nat => nat) n))) -((op ^::real => nat => real) x n))))))))))))" +lemma MCLAURIN_ALL_LT: "ALL (f::real => real) diff::nat => real => real. + diff 0 = f & + (ALL (m::nat) x::real. diffl (diff m) (diff (Suc m) x) x) --> + (ALL (x::real) n::nat. + x ~= 0 & 0 < n --> + (EX t::real. + 0 < abs t & + abs t < abs x & + f x = + real.sum (0, n) (%m::nat. diff m 0 / real (FACT m) * x ^ m) + + diff n t / real (FACT n) * x ^ n))" by (import transc MCLAURIN_ALL_LT) -lemma MCLAURIN_ZERO: "(All::((nat => real => real) => bool) => bool) - (%diff::nat => real => real. - (All::(nat => bool) => bool) - (%n::nat. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::real => real => bool) x (0::real)) - ((op <::nat => nat => bool) (0::nat) n)) - ((op =::real => real => bool) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) - (%m::nat. - (op *::real => real => real) - ((op /::real => real => real) (diff m (0::real)) - ((real::nat => real) ((FACT::nat => nat) m))) - ((op ^::real => nat => real) x m))) - (diff (0::nat) (0::real))))))" +lemma MCLAURIN_ZERO: "ALL (diff::nat => real => real) (n::nat) x::real. + x = 0 & 0 < n --> + real.sum (0, n) (%m::nat. diff m 0 / real (FACT m) * x ^ m) = diff 0 0" by (import transc MCLAURIN_ZERO) -lemma MCLAURIN_ALL_LE: "(All::((real => real) => bool) => bool) - (%f::real => real. - (All::((nat => real => real) => bool) => bool) - (%diff::nat => real => real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - (diff (0::nat)) f) - ((All::(nat => bool) => bool) - (%m::nat. - (All::(real => bool) => bool) - (%x::real. - (diffl::(real => real) => real => real => bool) - (diff m) (diff ((Suc::nat => nat) m) x) x)))) - ((All::(real => bool) => bool) - (%x::real. - (All::(nat => bool) => bool) - (%n::nat. - (Ex::(real => bool) => bool) - (%t::real. - (op &::bool => bool => bool) - ((op <=::real => real => bool) - ((abs::real => real) t) - ((abs::real => real) x)) - ((op =::real => real => bool) (f x) - ((op +::real => real => real) - ((real.sum::nat * nat - => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) - n) - (%m::nat. -(op *::real => real => real) - ((op /::real => real => real) (diff m (0::real)) - ((real::nat => real) ((FACT::nat => nat) m))) - ((op ^::real => nat => real) x m))) - ((op *::real => real => real) - ((op /::real => real => real) (diff n t) - ((real::nat => real) -((FACT::nat => nat) n))) - ((op ^::real => nat => real) x n))))))))))" +lemma MCLAURIN_ALL_LE: "ALL (f::real => real) diff::nat => real => real. + diff 0 = f & + (ALL (m::nat) x::real. diffl (diff m) (diff (Suc m) x) x) --> + (ALL (x::real) n::nat. + EX t::real. + abs t <= abs x & + f x = + real.sum (0, n) (%m::nat. diff m 0 / real (FACT m) * x ^ m) + + diff n t / real (FACT n) * x ^ n)" by (import transc MCLAURIN_ALL_LE) -lemma MCLAURIN_EXP_LT: "(All::(real => bool) => bool) - (%x::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::real => real => bool) x (0::real))) - ((op <::nat => nat => bool) (0::nat) n)) - ((Ex::(real => bool) => bool) - (%xa::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) - ((abs::real => real) xa)) - ((op &::bool => bool => bool) - ((op <::real => real => bool) ((abs::real => real) xa) - ((abs::real => real) x)) - ((op =::real => real => bool) ((exp::real => real) x) - ((op +::real => real => real) - ((real.sum::nat * nat => (nat => real) => real) - ((Pair::nat => nat => nat * nat) (0::nat) n) - (%m::nat. - (op /::real => real => real) - ((op ^::real => nat => real) x m) - ((real::nat => real) - ((FACT::nat => nat) m)))) - ((op *::real => real => real) - ((op /::real => real => real) - ((exp::real => real) xa) - ((real::nat => real) ((FACT::nat => nat) n))) - ((op ^::real => nat => real) x n)))))))))" +lemma MCLAURIN_EXP_LT: "ALL (x::real) n::nat. + x ~= 0 & 0 < n --> + (EX xa::real. + 0 < abs xa & + abs xa < abs x & + exp x = + real.sum (0, n) (%m::nat. x ^ m / real (FACT m)) + + exp xa / real (FACT n) * x ^ n)" by (import transc MCLAURIN_EXP_LT) lemma MCLAURIN_EXP_LE: "ALL (x::real) n::nat. @@ -6748,21 +3250,9 @@ exp xa / real (FACT n) * x ^ n" by (import transc MCLAURIN_EXP_LE) -lemma DIFF_LN_COMPOSITE: "(All::((real => real) => bool) => bool) - (%g::real => real. - (All::(real => bool) => bool) - (%m::real. - (All::(real => bool) => bool) - (%x::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((diffl::(real => real) => real => real => bool) g m x) - ((op <::real => real => bool) (0::real) (g x))) - ((diffl::(real => real) => real => real => bool) - (%x::real. (ln::real => real) (g x)) - ((op *::real => real => real) - ((inverse::real => real) (g x)) m) - x))))" +lemma DIFF_LN_COMPOSITE: "ALL (g::real => real) (m::real) x::real. + diffl g m x & 0 < g x --> + diffl (%x::real. ln (g x)) (inverse (g x) * m) x" by (import transc DIFF_LN_COMPOSITE) ;end_setup @@ -6885,78 +3375,20 @@ lemma POLY_CONT: "ALL l::real list. All (contl (poly l))" by (import poly POLY_CONT) -lemma POLY_IVT_POS: "(All::(real list => bool) => bool) - (%x::real list. - (All::(real => bool) => bool) - (%xa::real. - (All::(real => bool) => bool) - (%xb::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) xa xb) - ((op &::bool => bool => bool) - ((op <::real => real => bool) - ((poly::real list => real => real) x xa) (0::real)) - ((op <::real => real => bool) (0::real) - ((poly::real list => real => real) x xb)))) - ((Ex::(real => bool) => bool) - (%xc::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) xa xc) - ((op &::bool => bool => bool) - ((op <::real => real => bool) xc xb) - ((op =::real => real => bool) - ((poly::real list => real => real) x xc) - (0::real))))))))" +lemma POLY_IVT_POS: "ALL (x::real list) (xa::real) xb::real. + xa < xb & poly x xa < 0 & 0 < poly x xb --> + (EX xc::real. xa < xc & xc < xb & poly x xc = 0)" by (import poly POLY_IVT_POS) -lemma POLY_IVT_NEG: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op <::real => real => bool) a b) - ((op &::bool => bool => bool) - ((op <::real => real => bool) (0::real) - ((poly::real list => real => real) p a)) - ((op <::real => real => bool) - ((poly::real list => real => real) p b) (0::real)))) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op &::bool => bool => bool) - ((op <::real => real => bool) x b) - ((op =::real => real => bool) - ((poly::real list => real => real) p x) - (0::real))))))))" +lemma POLY_IVT_NEG: "ALL (p::real list) (a::real) b::real. + a < b & 0 < poly p a & poly p b < 0 --> + (EX x::real. a < x & x < b & poly p x = 0)" by (import poly POLY_IVT_NEG) -lemma POLY_MVT: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (All::(real => bool) => bool) - (%b::real. - (op -->::bool => bool => bool) - ((op <::real => real => bool) a b) - ((Ex::(real => bool) => bool) - (%x::real. - (op &::bool => bool => bool) - ((op <::real => real => bool) a x) - ((op &::bool => bool => bool) - ((op <::real => real => bool) x b) - ((op =::real => real => bool) - ((op -::real => real => real) - ((poly::real list => real => real) p b) - ((poly::real list => real => real) p a)) - ((op *::real => real => real) - ((op -::real => real => real) b a) - ((poly::real list => real => real) - ((diff::real list => real list) p) x)))))))))" +lemma POLY_MVT: "ALL (p::real list) (a::real) b::real. + a < b --> + (EX x::real. + a < x & x < b & poly p b - poly p a = (b - a) * poly (diff p) x)" by (import poly POLY_MVT) lemma POLY_ADD_RZERO: "ALL x::real list. poly (poly_add x []) = poly x" @@ -7146,25 +3578,8 @@ ((op =::real => real => bool) x (i n)))))))))" by (import poly POLY_ROOTS_FINITE) -lemma POLY_ENTIRE_LEMMA: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list)))) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) q) - ((poly::real list => real => real) ([]::real list))))) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) p q)) - ((poly::real list => real => real) ([]::real list))))))" +lemma POLY_ENTIRE_LEMMA: "ALL (p::real list) q::real list. + poly p ~= poly [] & poly q ~= poly [] --> poly (poly_mul p q) ~= poly []" by (import poly POLY_ENTIRE_LEMMA) lemma POLY_ENTIRE: "ALL (p::real list) q::real list. @@ -7186,20 +3601,8 @@ lemma POLY_EXP_PRIME_EQ_0: "ALL (a::real) n::nat. poly (poly_exp [a, 1] n) ~= poly []" by (import poly POLY_EXP_PRIME_EQ_0) -lemma POLY_ZERO_LEMMA: "(All::(real => bool) => bool) - (%h::real. - (All::(real list => bool) => bool) - (%t::real list. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((op #::real => real list => real list) h t)) - ((poly::real list => real => real) ([]::real list))) - ((op &::bool => bool => bool) - ((op =::real => real => bool) h (0::real)) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) t) - ((poly::real list => real => real) ([]::real list))))))" +lemma POLY_ZERO_LEMMA: "ALL (h::real) t::real list. + poly (h # t) = poly [] --> h = 0 & poly t = poly []" by (import poly POLY_ZERO_LEMMA) lemma POLY_ZERO: "ALL t::real list. (poly t = poly []) = list_all (%c::real. c = 0) t" @@ -7210,47 +3613,15 @@ list_all (%c::real. c = 0) t" by (import poly POLY_DIFF_AUX_ISZERO) -lemma POLY_DIFF_ISZERO: "(All::(real list => bool) => bool) - (%x::real list. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((diff::real list => real list) x)) - ((poly::real list => real => real) ([]::real list))) - ((Ex::(real => bool) => bool) - (%h::real. - (op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) x) - ((poly::real list => real => real) - ((op #::real => real list => real list) h - ([]::real list))))))" +lemma POLY_DIFF_ISZERO: "ALL x::real list. + poly (diff x) = poly [] --> (EX h::real. poly x = poly [h])" by (import poly POLY_DIFF_ISZERO) -lemma POLY_DIFF_ZERO: "(All::(real list => bool) => bool) - (%x::real list. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) x) - ((poly::real list => real => real) ([]::real list))) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((diff::real list => real list) x)) - ((poly::real list => real => real) ([]::real list))))" +lemma POLY_DIFF_ZERO: "ALL x::real list. poly x = poly [] --> poly (diff x) = poly []" by (import poly POLY_DIFF_ZERO) -lemma POLY_DIFF_WELLDEF: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) q)) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((diff::real list => real list) p)) - ((poly::real list => real => real) - ((diff::real list => real list) q)))))" +lemma POLY_DIFF_WELLDEF: "ALL (p::real list) q::real list. + poly p = poly q --> poly (diff p) = poly (diff q)" by (import poly POLY_DIFF_WELLDEF) constdefs @@ -7271,168 +3642,45 @@ lemma POLY_DIVIDES_REFL: "ALL p::real list. poly_divides p p" by (import poly POLY_DIVIDES_REFL) -lemma POLY_DIVIDES_TRANS: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real list => bool) => bool) - (%r::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) p q) - ((poly_divides::real list => real list => bool) q r)) - ((poly_divides::real list => real list => bool) p r))))" +lemma POLY_DIVIDES_TRANS: "ALL (p::real list) (q::real list) r::real list. + poly_divides p q & poly_divides q r --> poly_divides p r" by (import poly POLY_DIVIDES_TRANS) -lemma POLY_DIVIDES_EXP: "(All::(real list => bool) => bool) - (%p::real list. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op <=::nat => nat => bool) m n) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) p m) - ((poly_exp::real list => nat => real list) p n)))))" +lemma POLY_DIVIDES_EXP: "ALL (p::real list) (m::nat) n::nat. + m <= n --> poly_divides (poly_exp p m) (poly_exp p n)" by (import poly POLY_DIVIDES_EXP) -lemma POLY_EXP_DIVIDES: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(nat => bool) => bool) - (%m::nat. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) p n) q) - ((op <=::nat => nat => bool) m n)) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) p m) - q)))))" +lemma POLY_EXP_DIVIDES: "ALL (p::real list) (q::real list) (m::nat) n::nat. + poly_divides (poly_exp p n) q & m <= n --> poly_divides (poly_exp p m) q" by (import poly POLY_EXP_DIVIDES) -lemma POLY_DIVIDES_ADD: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real list => bool) => bool) - (%r::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) p q) - ((poly_divides::real list => real list => bool) p r)) - ((poly_divides::real list => real list => bool) p - ((poly_add::real list => real list => real list) q r)))))" +lemma POLY_DIVIDES_ADD: "ALL (p::real list) (q::real list) r::real list. + poly_divides p q & poly_divides p r --> poly_divides p (poly_add q r)" by (import poly POLY_DIVIDES_ADD) -lemma POLY_DIVIDES_SUB: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real list => bool) => bool) - (%r::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) p q) - ((poly_divides::real list => real list => bool) p - ((poly_add::real list => real list => real list) q r))) - ((poly_divides::real list => real list => bool) p r))))" +lemma POLY_DIVIDES_SUB: "ALL (p::real list) (q::real list) r::real list. + poly_divides p q & poly_divides p (poly_add q r) --> poly_divides p r" by (import poly POLY_DIVIDES_SUB) -lemma POLY_DIVIDES_SUB2: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real list => bool) => bool) - (%r::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) p r) - ((poly_divides::real list => real list => bool) p - ((poly_add::real list => real list => real list) q r))) - ((poly_divides::real list => real list => bool) p q))))" +lemma POLY_DIVIDES_SUB2: "ALL (p::real list) (q::real list) r::real list. + poly_divides p r & poly_divides p (poly_add q r) --> poly_divides p q" by (import poly POLY_DIVIDES_SUB2) -lemma POLY_DIVIDES_ZERO: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list))) - ((poly_divides::real list => real list => bool) q p)))" +lemma POLY_DIVIDES_ZERO: "ALL (p::real list) q::real list. poly p = poly [] --> poly_divides q p" by (import poly POLY_DIVIDES_ZERO) -lemma POLY_ORDER_EXISTS: "(All::(real => bool) => bool) - (%a::real. - (All::(nat => bool) => bool) - (%d::nat. - (All::(real list => bool) => bool) - (%p::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((op =::nat => nat => bool) ((size::real list => nat) p) - d) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list))))) - ((Ex::(nat => bool) => bool) - (%x::nat. - (op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) - (1::real) ([]::real list))) - x) - p) - ((Not::bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) - (1::real) ([]::real list))) - ((Suc::nat => nat) x)) - p)))))))" +lemma POLY_ORDER_EXISTS: "ALL (a::real) (d::nat) p::real list. + length p = d & poly p ~= poly [] --> + (EX x::nat. + poly_divides (poly_exp [- a, 1] x) p & + ~ poly_divides (poly_exp [- a, 1] (Suc x)) p)" by (import poly POLY_ORDER_EXISTS) -lemma POLY_ORDER: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list)))) - ((Ex1::(nat => bool) => bool) - (%n::nat. - (op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - n) - p) - ((Not::bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - ((Suc::nat => nat) n)) - p))))))" +lemma POLY_ORDER: "ALL (p::real list) a::real. + poly p ~= poly [] --> + (EX! n::nat. + poly_divides (poly_exp [- a, 1] n) p & + ~ poly_divides (poly_exp [- a, 1] (Suc n)) p)" by (import poly POLY_ORDER) constdefs @@ -7456,83 +3704,21 @@ (n = poly_order a p & poly p ~= poly [])" by (import poly ORDER) -lemma ORDER_THM: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list)))) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - ((poly_order::real => real list => nat) a p)) - p) - ((Not::bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - ((Suc::nat => nat) - ((poly_order::real => real list => nat) a p))) - p)))))" +lemma ORDER_THM: "ALL (p::real list) a::real. + poly p ~= poly [] --> + poly_divides (poly_exp [- a, 1] (poly_order a p)) p & + ~ poly_divides (poly_exp [- a, 1] (Suc (poly_order a p))) p" by (import poly ORDER_THM) -lemma ORDER_UNIQUE: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (All::(nat => bool) => bool) - (%n::nat. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list)))) - ((op &::bool => bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - n) - p) - ((Not::bool => bool) - ((poly_divides::real list => real list => bool) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) - (1::real) ([]::real list))) - ((Suc::nat => nat) n)) - p)))) - ((op =::nat => nat => bool) n - ((poly_order::real => real list => nat) a p)))))" +lemma ORDER_UNIQUE: "ALL (p::real list) (a::real) n::nat. + poly p ~= poly [] & + poly_divides (poly_exp [- a, 1] n) p & + ~ poly_divides (poly_exp [- a, 1] (Suc n)) p --> + n = poly_order a p" by (import poly ORDER_UNIQUE) -lemma ORDER_POLY: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real => bool) => bool) - (%a::real. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) q)) - ((op =::nat => nat => bool) - ((poly_order::real => real list => nat) a p) - ((poly_order::real => real list => nat) a q)))))" +lemma ORDER_POLY: "ALL (p::real list) (q::real list) a::real. + poly p = poly q --> poly_order a p = poly_order a q" by (import poly ORDER_POLY) lemma ORDER_ROOT: "ALL (p::real list) a::real. @@ -7544,128 +3730,30 @@ (poly p = poly [] | n <= poly_order a p)" by (import poly ORDER_DIVIDES) -lemma ORDER_DECOMP: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list)))) - ((Ex::(real list => bool) => bool) - (%x::real list. - (op &::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) - ((poly_exp::real list => nat => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) - (1::real) ([]::real list))) - ((poly_order::real => real list => nat) a p)) - x))) - ((Not::bool => bool) - ((poly_divides::real list => real list => bool) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - x))))))" +lemma ORDER_DECOMP: "ALL (p::real list) a::real. + poly p ~= poly [] --> + (EX x::real list. + poly p = poly (poly_mul (poly_exp [- a, 1] (poly_order a p)) x) & + ~ poly_divides [- a, 1] x)" by (import poly ORDER_DECOMP) -lemma ORDER_MUL: "(All::(real => bool) => bool) - (%a::real. - (All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) p q)) - ((poly::real list => real => real) ([]::real list)))) - ((op =::nat => nat => bool) - ((poly_order::real => real list => nat) a - ((poly_mul::real list => real list => real list) p q)) - ((op +::nat => nat => nat) - ((poly_order::real => real list => nat) a p) - ((poly_order::real => real list => nat) a q))))))" +lemma ORDER_MUL: "ALL (a::real) (p::real list) q::real list. + poly (poly_mul p q) ~= poly [] --> + poly_order a (poly_mul p q) = poly_order a p + poly_order a q" by (import poly ORDER_MUL) -lemma ORDER_DIFF: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) - ((diff::real list => real list) p)) - ((poly::real list => real => real) ([]::real list)))) - ((Not::bool => bool) - ((op =::nat => nat => bool) - ((poly_order::real => real list => nat) a p) (0::nat)))) - ((op =::nat => nat => bool) - ((poly_order::real => real list => nat) a p) - ((Suc::nat => nat) - ((poly_order::real => real list => nat) a - ((diff::real list => real list) p))))))" +lemma ORDER_DIFF: "ALL (p::real list) a::real. + poly (diff p) ~= poly [] & poly_order a p ~= 0 --> + poly_order a p = Suc (poly_order a (diff p))" by (import poly ORDER_DIFF) -lemma POLY_SQUAREFREE_DECOMP_ORDER: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real list => bool) => bool) - (%d::real list. - (All::(real list => bool) => bool) - (%e::real list. - (All::(real list => bool) => bool) - (%r::real list. - (All::(real list => bool) => bool) - (%s::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) - ((diff::real list => real list) p)) - ((poly::real list => real => real) - ([]::real list)))) - ((op &::bool => bool => bool) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) q d))) - ((op &::bool => bool => bool) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) ((diff::real list => real list) p)) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) e d))) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) d) - ((poly::real list => real => real) - ((poly_add::real list => real list => real list) - ((poly_mul::real list => real list => real list) r p) - ((poly_mul::real list => real list => real list) s - ((diff::real list => real list) p)))))))) - ((All::(real => bool) => bool) - (%a::real. - (op =::nat => nat => bool) -((poly_order::real => real list => nat) a q) -((If::bool => nat => nat => nat) - ((op =::nat => nat => bool) ((poly_order::real => real list => nat) a p) - (0::nat)) - (0::nat) (1::nat))))))))))" +lemma POLY_SQUAREFREE_DECOMP_ORDER: "ALL (p::real list) (q::real list) (d::real list) (e::real list) + (r::real list) s::real list. + poly (diff p) ~= poly [] & + poly p = poly (poly_mul q d) & + poly (diff p) = poly (poly_mul e d) & + poly d = poly (poly_add (poly_mul r p) (poly_mul s (diff p))) --> + (ALL a::real. poly_order a q = (if poly_order a p = 0 then 0 else 1))" by (import poly POLY_SQUAREFREE_DECOMP_ORDER) constdefs @@ -7685,83 +3773,18 @@ rsquarefree p = (ALL a::real. ~ (poly p a = 0 & poly (diff p) a = 0))" by (import poly RSQUAREFREE_ROOTS) -lemma RSQUAREFREE_DECOMP: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real => bool) => bool) - (%a::real. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((rsquarefree::real list => bool) p) - ((op =::real => real => bool) - ((poly::real list => real => real) p a) (0::real))) - ((Ex::(real list => bool) => bool) - (%q::real list. - (op &::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) - ((op #::real => real list => real list) - ((uminus::real => real) a) - ((op #::real => real list => real list) (1::real) - ([]::real list))) - q))) - ((Not::bool => bool) - ((op =::real => real => bool) - ((poly::real list => real => real) q a) - (0::real)))))))" +lemma RSQUAREFREE_DECOMP: "ALL (p::real list) a::real. + rsquarefree p & poly p a = 0 --> + (EX q::real list. poly p = poly (poly_mul [- a, 1] q) & poly q a ~= 0)" by (import poly RSQUAREFREE_DECOMP) -lemma POLY_SQUAREFREE_DECOMP: "(All::(real list => bool) => bool) - (%p::real list. - (All::(real list => bool) => bool) - (%q::real list. - (All::(real list => bool) => bool) - (%d::real list. - (All::(real list => bool) => bool) - (%e::real list. - (All::(real list => bool) => bool) - (%r::real list. - (All::(real list => bool) => bool) - (%s::real list. - (op -->::bool => bool => bool) - ((op &::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) - ((diff::real list => real list) p)) - ((poly::real list => real => real) - ([]::real list)))) - ((op &::bool => bool => bool) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) q d))) - ((op &::bool => bool => bool) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) ((diff::real list => real list) p)) - ((poly::real list => real => real) - ((poly_mul::real list => real list => real list) e d))) - ((op =::(real => real) - => (real => real) => bool) - ((poly::real list => real => real) d) - ((poly::real list => real => real) - ((poly_add::real list => real list => real list) - ((poly_mul::real list => real list => real list) r p) - ((poly_mul::real list => real list => real list) s - ((diff::real list => real list) p)))))))) - ((op &::bool => bool => bool) - ((rsquarefree::real list => bool) q) - ((All::(real => bool) => bool) - (%x::real. - (op =::bool => bool => bool) - ((op =::real => real => bool) ((poly::real list => real => real) q x) - (0::real)) - ((op =::real => real => bool) ((poly::real list => real => real) p x) - (0::real)))))))))))" +lemma POLY_SQUAREFREE_DECOMP: "ALL (p::real list) (q::real list) (d::real list) (e::real list) + (r::real list) s::real list. + poly (diff p) ~= poly [] & + poly p = poly (poly_mul q d) & + poly (diff p) = poly (poly_mul e d) & + poly d = poly (poly_add (poly_mul r p) (poly_mul s (diff p))) --> + rsquarefree q & (ALL x::real. (poly q x = 0) = (poly p x = 0))" by (import poly POLY_SQUAREFREE_DECOMP) consts @@ -7784,45 +3807,15 @@ lemma degree: "ALL p::real list. degree p = PRE (length (normalize p))" by (import poly degree) -lemma DEGREE_ZERO: "(All::(real list => bool) => bool) - (%p::real list. - (op -->::bool => bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list))) - ((op =::nat => nat => bool) ((degree::real list => nat) p) (0::nat)))" +lemma DEGREE_ZERO: "ALL p::real list. poly p = poly [] --> degree p = 0" by (import poly DEGREE_ZERO) -lemma POLY_ROOTS_FINITE_SET: "(All::(real list => bool) => bool) - (%p::real list. - (op -->::bool => bool => bool) - ((Not::bool => bool) - ((op =::(real => real) => (real => real) => bool) - ((poly::real list => real => real) p) - ((poly::real list => real => real) ([]::real list)))) - ((FINITE::(real => bool) => bool) - ((GSPEC::(real => real * bool) => real => bool) - (%x::real. - (Pair::real => bool => real * bool) x - ((op =::real => real => bool) - ((poly::real list => real => real) p x) (0::real))))))" +lemma POLY_ROOTS_FINITE_SET: "ALL p::real list. + poly p ~= poly [] --> FINITE (GSPEC (%x::real. (x, poly p x = 0)))" by (import poly POLY_ROOTS_FINITE_SET) -lemma POLY_MONO: "(All::(real => bool) => bool) - (%x::real. - (All::(real => bool) => bool) - (%k::real. - (All::(real list => bool) => bool) - (%xa::real list. - (op -->::bool => bool => bool) - ((op <=::real => real => bool) ((abs::real => real) x) k) - ((op <=::real => real => bool) - ((abs::real => real) - ((poly::real list => real => real) xa x)) - ((poly::real list => real => real) - ((map::(real => real) => real list => real list) - (abs::real => real) xa) - k)))))" +lemma POLY_MONO: "ALL (x::real) (k::real) xa::real list. + abs x <= k --> abs (poly xa x) <= poly (map abs xa) k" by (import poly POLY_MONO) ;end_setup diff -r 541f6367a431 -r b7870c2bd7df src/HOL/Import/HOL/bool.imp --- a/src/HOL/Import/HOL/bool.imp Wed Sep 28 11:50:15 2005 +0200 +++ b/src/HOL/Import/HOL/bool.imp Wed Sep 28 13:17:23 2005 +0200 @@ -37,7 +37,7 @@ "bool_case_thm" > "HOL4Base.bool.bool_case_thm" "bool_case_ID" > "HOL4Base.bool.bool_case_ID" "bool_case_DEF" > "HOL4Compat.bool_case_DEF" - "bool_INDUCT" > "Datatype.bool.induct_correctness" + "bool_INDUCT" > "Datatype.bool.induct" "boolAxiom" > "HOL4Base.bool.boolAxiom" "UNWIND_THM2" > "HOL.simp_thms_39" "UNWIND_THM1" > "HOL.simp_thms_40" diff -r 541f6367a431 -r b7870c2bd7df src/HOL/Import/HOL/pair.imp --- a/src/HOL/Import/HOL/pair.imp Wed Sep 28 11:50:15 2005 +0200 +++ b/src/HOL/Import/HOL/pair.imp Wed Sep 28 13:17:23 2005 +0200 @@ -21,7 +21,7 @@ "##" > "prod_fun" thm_maps - "pair_induction" > "Datatype.prod.induct_correctness" + "pair_induction" > "Datatype.prod.induct" "pair_case_thm" > "Product_Type.split" "pair_case_def" > "HOL4Compat.pair_case_def" "pair_case_cong" > "HOL4Base.pair.pair_case_cong" diff -r 541f6367a431 -r b7870c2bd7df src/HOL/Import/HOL/seq.imp --- a/src/HOL/Import/HOL/seq.imp Wed Sep 28 11:50:15 2005 +0200 +++ b/src/HOL/Import/HOL/seq.imp Wed Sep 28 13:17:23 2005 +0200 @@ -9,9 +9,9 @@ "subseq" > "subseq_def" "mono" > "mono_def" "lim" > "lim_def" + "hol4-->" > "hol4-->_def" "convergent" > "convergent_def" "cauchy" > "cauchy_def" - "-->" > "-->_def" const_maps "sums" > "HOL4Real.seq.sums" @@ -20,9 +20,12 @@ "subseq" > "HOL4Real.seq.subseq" "mono" > "HOL4Real.seq.mono" "lim" > "HOL4Real.seq.lim" + "hol4-->" > "HOL4Real.seq.hol4-->" "convergent" > "HOL4Real.seq.convergent" "cauchy" > "HOL4Real.seq.cauchy" - "-->" > "HOL4Real.seq.-->" + +const_renames + "-->" > "hol4-->" thm_maps "tends_num_real" > "HOL4Real.seq.tends_num_real" @@ -38,6 +41,7 @@ "mono" > "HOL4Real.seq.mono" "lim_def" > "HOL4Real.seq.lim_def" "lim" > "HOL4Real.seq.lim" + "hol4-->_def" > "HOL4Real.seq.hol4-->_def" "convergent_def" > "HOL4Real.seq.convergent_def" "convergent" > "HOL4Real.seq.convergent" "cauchy_def" > "HOL4Real.seq.cauchy_def" @@ -104,6 +108,5 @@ "GP" > "HOL4Real.seq.GP" "BOLZANO_LEMMA" > "HOL4Real.seq.BOLZANO_LEMMA" "ABS_NEG_LEMMA" > "HOL4Real.seq.ABS_NEG_LEMMA" - "-->_def" > "HOL4Real.seq.-->_def" end