:: Double Series and Sums
:: by Noboru Endou
::
:: Received March 31, 2014
:: Copyright (c) 2014-2021 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies NUMBERS, SUBSET_1, FUNCT_1, RELAT_1, XBOOLE_0, ARYTM_3, ARYTM_1,
XXREAL_0, CARD_1, TARSKI, NAT_1, ZFMISC_1, VALUED_0, ORDINAL2, SEQ_2,
ORDINAL1, XREAL_0, COMPLEX1, XXREAL_2, FINSET_1, MEMBERED, MESFUNC9,
SEQ_1, VALUED_1, DBLSEQ_1, QC_LANG1, FUNCT_2, SERIES_1, DBLSEQ_2,
FINSEQ_1, FUNCOP_1, SUPINF_2, CLASSES1, CARD_3, ORDINAL4, REAL_1,
PARTFUN1, MATRIX_1, MCART_1, MATRIXC1, INCSP_1, TREES_1, PARTFUN3;
notations VALUED_1, TARSKI, XBOOLE_0, XTUPLE_0, ZFMISC_1, SUBSET_1, RELAT_1,
FUNCT_1, RELSET_1, PARTFUN1, ORDINAL1, XXREAL_2, NUMBERS, BINOP_1,
XCMPLX_0, FUNCOP_1, MEMBERED, COMPLEX1, XXREAL_0, XREAL_0, SEQ_1, NAT_1,
FUNCT_4, MESFUNC9, FUNCT_2, SEQ_2, FINSET_1, DBLSEQ_1, SERIES_1,
PARTFUN3, RINFSUP1, CLASSES1, FINSEQ_1, GLIB_003, RVSUM_1, MATRIX_0,
MATRPROB;
constructors TOPMETR, NAT_D, MESFUNC9, SEQ_2, COMSEQ_2, SEQ_4, DBLSEQ_1,
SERIES_1, CLASSES1, PARTFUN3, GLIB_003, RVSUM_1, FUNCT_4, MATRPROB;
registrations ORDINAL1, XXREAL_0, XREAL_0, XBOOLE_0, NUMBERS, XCMPLX_0,
FINSET_1, MEMBERED, VALUED_0, XXREAL_2, RELSET_1, SEQ_4, FUNCT_1,
FUNCT_2, VALUED_1, BINOP_2, NAT_1, CARD_1, RELAT_1, DBLSEQ_1, XTUPLE_0;
requirements SUBSET, REAL, BOOLE, NUMERALS, ARITHM;
begin :: Double series and its convergence
reserve Rseq, Rseq1, Rseq2 for Function of [:NAT,NAT:],REAL;
definition let f be Function of [:NAT,NAT:],REAL;
redefine attr f is nonnegative-yielding means
:: DBLSEQ_2:def 1
for i, j being Nat holds f.(i,j) >= 0;
end;
theorem :: DBLSEQ_2:1
Rseq is non-decreasing implies
(for m being Element of NAT holds ProjMap1(Rseq,m) is non-decreasing) &
(for n being Element of NAT holds ProjMap2(Rseq,n) is non-decreasing);
theorem :: DBLSEQ_2:2
Rseq is non-decreasing & Rseq is convergent_in_cod1 implies
lim_in_cod1 Rseq is non-decreasing;
theorem :: DBLSEQ_2:3
Rseq is non-decreasing & Rseq is convergent_in_cod2 implies
lim_in_cod2 Rseq is non-decreasing;
theorem :: DBLSEQ_2:4
Rseq is non-decreasing & Rseq is P-convergent implies
(for n,m being Nat holds Rseq.(n,m) <= P-lim Rseq);
theorem :: DBLSEQ_2:5
dom (Rseq1+Rseq2) = [:NAT,NAT:] & dom (Rseq1-Rseq2) = [:NAT,NAT:] &
(for n,m being Nat holds
(Rseq1+Rseq2).(n,m) = Rseq1.(n,m) + Rseq2.(n,m)) &
(for n,m being Nat holds
(Rseq1-Rseq2).(n,m) = Rseq1.(n,m) - Rseq2.(n,m));
theorem :: DBLSEQ_2:6
for C,D,E being non empty set, f being Function of [:C,D:],E holds
ex g being Function of [:D,C:],E st
for d being Element of D, c being Element of C holds g.(d,c) = f.(c,d);
theorem :: DBLSEQ_2:7
for C,D,E being set, f being Function of [:C,D:],E holds f = ~~f;
scheme :: DBLSEQ_2:sch 1
RecEx2D1{C() -> non empty set, D() -> non empty set,
H() -> Function of C(),D(), F(set,set,Nat) -> Element of D()}:
ex g being Function of [:C(),NAT:],D() st
for a being Element of C() holds
g.(a,0) = H().a & for n being Nat holds g.(a,n+1) = F(g.(a,n), a, n);
scheme :: DBLSEQ_2:sch 2
RecEx2D1R{C() -> non empty set,
H() -> Function of C(),REAL, F(set,set,Nat) -> real number}:
ex g being Function of [:C(),NAT:],REAL st
for a being Element of C() holds
g.(a,0) = H().a & for n being natural number holds
g.(a,n+1) = F(g.(a,n), a, n);
scheme :: DBLSEQ_2:sch 3
RecEx2D2{C() -> non empty set, D() -> non empty set,
H() -> Function of C(),D(), F(set,set,Nat) -> Element of D()}:
ex g being Function of [:NAT,C():],D() st
for a being Element of C() holds
g.(0,a) = H().a & for n being Nat holds
g.(n+1,a) = F(g.(n,a), a, n);
scheme :: DBLSEQ_2:sch 4
RecEx2D2R{C() -> non empty set,
H() -> Function of C(),REAL, F(set,set,Nat) -> real number}:
ex g being Function of [:NAT,C():],REAL st
for a being Element of C() holds
g.(0,a) = H().a & for n being Nat holds
g.(n+1,a) = F(g.(n,a), a, n);
definition
let Rseq be Function of [:NAT,NAT:],REAL;
func Partial_Sums_in_cod2(Rseq) -> Function of [:NAT,NAT:],REAL means
:: DBLSEQ_2:def 2
for n,m being Nat holds
it.(n,0) = Rseq.(n,0) & it.(n,m+1) = it.(n,m) + Rseq.(n,m+1);
end;
definition
let Rseq be Function of [:NAT,NAT:],REAL;
func Partial_Sums_in_cod1(Rseq) -> Function of [:NAT,NAT:],REAL means
:: DBLSEQ_2:def 3
for n,m being Nat holds
it.(0,m) = Rseq.(0,m) & it.(n+1,m) = it.(n,m) + Rseq.(n+1,m);
end;
theorem :: DBLSEQ_2:8
Partial_Sums_in_cod2(Rseq1+Rseq2)
= Partial_Sums_in_cod2(Rseq1) + Partial_Sums_in_cod2(Rseq2) &
Partial_Sums_in_cod1(Rseq1+Rseq2)
= Partial_Sums_in_cod1(Rseq1) + Partial_Sums_in_cod1(Rseq2);
theorem :: DBLSEQ_2:9
for n,m being Nat holds
(Partial_Sums_in_cod2 Rseq).(n,m) = (Partial_Sums_in_cod1 ~Rseq).(m,n)
& (Partial_Sums_in_cod1 Rseq).(n,m) = (Partial_Sums_in_cod2 ~Rseq).(m,n);
theorem :: DBLSEQ_2:10
Partial_Sums_in_cod2 Rseq = ~(Partial_Sums_in_cod1 ~Rseq)
& Partial_Sums_in_cod2 ~Rseq = ~(Partial_Sums_in_cod1 Rseq)
& ~(Partial_Sums_in_cod2 Rseq) = Partial_Sums_in_cod1 ~Rseq
& ~(Partial_Sums_in_cod2 ~Rseq) = Partial_Sums_in_cod1 Rseq;
definition
let Rseq be Function of [:NAT,NAT:],REAL;
func Partial_Sums(Rseq) -> Function of [:NAT,NAT:],REAL equals
:: DBLSEQ_2:def 4
Partial_Sums_in_cod2( Partial_Sums_in_cod1 Rseq );
end;
theorem :: DBLSEQ_2:11
for n,m being Nat holds
(Partial_Sums Rseq).(n+1,m)
= (Partial_Sums_in_cod2 Rseq).(n+1,m) + (Partial_Sums Rseq).(n,m) &
(Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n,m+1)
= (Partial_Sums_in_cod1 Rseq).(n,m+1)
+ (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n,m);
theorem :: DBLSEQ_2:12
Partial_Sums Rseq = Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq);
theorem :: DBLSEQ_2:13
for n,m being Nat holds
Rseq.(n+1,m+1) = (Partial_Sums Rseq).(n+1,m+1)
- (Partial_Sums Rseq).(n,m+1)
- (Partial_Sums Rseq).(n+1,m)
+ (Partial_Sums Rseq).(n,m);
theorem :: DBLSEQ_2:14
for n,m being Nat holds
Rseq.(n+1,m+1) = (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n+1,m+1)
- (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n+1,m)
- (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n,m+1)
+ (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n,m);
theorem :: DBLSEQ_2:15
Partial_Sums Rseq is P-convergent implies
Rseq is P-convergent & P-lim Rseq = 0;
theorem :: DBLSEQ_2:16
Partial_Sums(Rseq1 + Rseq2) = Partial_Sums(Rseq1) + Partial_Sums(Rseq2);
theorem :: DBLSEQ_2:17
Partial_Sums Rseq1 is P-convergent & Partial_Sums Rseq2 is P-convergent
implies Partial_Sums(Rseq1+Rseq2) is P-convergent;
theorem :: DBLSEQ_2:18
for m,n being Element of NAT holds
(Partial_Sums_in_cod1(Rseq)).(m,n) = Partial_Sums(ProjMap2(Rseq,n)).m &
(Partial_Sums_in_cod2(Rseq)).(m,n) = Partial_Sums(ProjMap1(Rseq,m)).n;
theorem :: DBLSEQ_2:19
ProjMap1(Partial_Sums Rseq,0) = ProjMap1(Partial_Sums_in_cod2 Rseq,0)
& ProjMap2(Partial_Sums Rseq,0) = ProjMap2(Partial_Sums_in_cod1 Rseq,0);
theorem :: DBLSEQ_2:20
for C,D being non empty set, F1,F2 being Function of [:C,D:],REAL,
c being Element of C holds
ProjMap1(F1+F2,c) = ProjMap1(F1,c) + ProjMap1(F2,c);
theorem :: DBLSEQ_2:21
for C,D being non empty set, F1,F2 being Function of [:C,D:],REAL,
d being Element of D holds
ProjMap2(F1+F2,d) = ProjMap2(F1,d) + ProjMap2(F2,d);
theorem :: DBLSEQ_2:22
Partial_Sums Rseq is convergent_in_cod1 iff
Partial_Sums_in_cod1 Rseq is convergent_in_cod1;
theorem :: DBLSEQ_2:23
Partial_Sums Rseq is convergent_in_cod2 iff
Partial_Sums_in_cod2 Rseq is convergent_in_cod2;
theorem :: DBLSEQ_2:24
Partial_Sums Rseq is convergent_in_cod1 implies
for k being Nat holds
(lim_in_cod1(Partial_Sums Rseq)).(k+1)
= (lim_in_cod1(Partial_Sums Rseq)).k
+ (lim_in_cod1(Partial_Sums_in_cod1 Rseq)).(k+1);
theorem :: DBLSEQ_2:25
Partial_Sums Rseq is convergent_in_cod2 implies
for k being Nat holds
(lim_in_cod2(Partial_Sums Rseq)).(k+1)
= (lim_in_cod2(Partial_Sums Rseq)).k
+ (lim_in_cod2(Partial_Sums_in_cod2 Rseq)).(k+1);
theorem :: DBLSEQ_2:26
Partial_Sums Rseq is convergent_in_cod1 implies
lim_in_cod1(Partial_Sums Rseq)
= Partial_Sums(lim_in_cod1(Partial_Sums_in_cod1 Rseq));
theorem :: DBLSEQ_2:27
Partial_Sums Rseq is convergent_in_cod2 implies
lim_in_cod2(Partial_Sums Rseq)
= Partial_Sums(lim_in_cod2(Partial_Sums_in_cod2 Rseq));
begin :: Double series of non-negative double sequence
theorem :: DBLSEQ_2:28
Rseq is nonnegative-yielding implies
Partial_Sums_in_cod2 Rseq is nonnegative-yielding &
Partial_Sums_in_cod1 Rseq is nonnegative-yielding;
theorem :: DBLSEQ_2:29
Rseq is nonnegative-yielding implies
Partial_Sums Rseq is non-decreasing;
theorem :: DBLSEQ_2:30
Rseq is nonnegative-yielding implies
(Partial_Sums Rseq is P-convergent
iff Partial_Sums Rseq is bounded_below bounded_above);
theorem :: DBLSEQ_2:31
(for n,m being Nat holds Rseq1.(n,m) <= Rseq2.(n,m)) implies
for i,j being Nat holds
(Partial_Sums_in_cod1 Rseq1).(i,j) <= (Partial_Sums_in_cod1 Rseq2).(i,j)
& (Partial_Sums_in_cod2 Rseq1).(i,j) <= (Partial_Sums_in_cod2 Rseq2).(i,j);
theorem :: DBLSEQ_2:32
Rseq1 is nonnegative-yielding &
(for n,m being Nat holds Rseq1.(n,m) <= Rseq2.(n,m)) implies
for i,j being Nat holds
(Partial_Sums Rseq1).(i,j) <= (Partial_Sums Rseq2).(i,j);
theorem :: DBLSEQ_2:33
Rseq1 is nonnegative-yielding &
(for n,m being Nat holds Rseq1.(n,m) <= Rseq2.(n,m))
& Partial_Sums Rseq2 is P-convergent
implies Partial_Sums Rseq1 is P-convergent;
theorem :: DBLSEQ_2:34
for rseq being Real_Sequence, m being Nat st
rseq is nonnegative holds
rseq.m <= (Partial_Sums rseq).m;
theorem :: DBLSEQ_2:35
Rseq is nonnegative-yielding implies
(for m,n being Nat holds
Rseq.(m,n) <= (Partial_Sums_in_cod1 Rseq).(m,n) &
Rseq.(m,n) <= (Partial_Sums_in_cod2 Rseq).(m,n));
theorem :: DBLSEQ_2:36
Rseq is nonnegative-yielding implies
( for i1,i2,j being Nat st i1 <= i2 holds
(Partial_Sums_in_cod1 Rseq).(i1,j) <= (Partial_Sums_in_cod1 Rseq).(i2,j) )
& ( for i,j1,j2 being Nat st j1 <= j2 holds
(Partial_Sums_in_cod2 Rseq).(i,j1) <= (Partial_Sums_in_cod2 Rseq).(i,j2) )
;
theorem :: DBLSEQ_2:37
Rseq is nonnegative-yielding implies
( for i1,i2,j be Nat st i1 <= i2 holds
(Partial_Sums Rseq).(i1,j) <= (Partial_Sums Rseq).(i2,j) )
& ( for i,j1,j2 be Nat st j1 <= j2 holds
(Partial_Sums Rseq).(i,j1) <= (Partial_Sums Rseq).(i,j2) );
theorem :: DBLSEQ_2:38
Rseq is nonnegative-yielding implies
(for i1,i2,j1,j2 being Nat st i1 <= i2 & j1 <= j2 holds
(Partial_Sums Rseq).(i1,j1) <= (Partial_Sums Rseq).(i2,j2));
theorem :: DBLSEQ_2:39
Rseq is nonnegative-yielding implies
for k being Element of NAT holds
ProjMap2(Partial_Sums_in_cod1 Rseq,k) is non-decreasing
& ProjMap1(Partial_Sums_in_cod2 Rseq,k) is non-decreasing
& ProjMap2(Partial_Sums_in_cod1 Rseq,k) is nonnegative
& ProjMap1(Partial_Sums_in_cod2 Rseq,k) is nonnegative
& ProjMap2(Partial_Sums_in_cod2 Rseq,k) is nonnegative
& ProjMap1(Partial_Sums_in_cod1 Rseq,k) is nonnegative;
theorem :: DBLSEQ_2:40
Rseq is nonnegative-yielding &
Partial_Sums Rseq is P-convergent implies
Partial_Sums_in_cod1 Rseq is convergent_in_cod1
& Partial_Sums_in_cod2 Rseq is convergent_in_cod2;
theorem :: DBLSEQ_2:41
Rseq is nonnegative-yielding & Partial_Sums Rseq is P-convergent implies
Partial_Sums Rseq is convergent_in_cod1
& Partial_Sums Rseq is convergent_in_cod2;
theorem :: DBLSEQ_2:42
Rseq is nonnegative-yielding &
Partial_Sums Rseq is P-convergent implies
lim_in_cod1(Partial_Sums_in_cod1 Rseq) is summable
& lim_in_cod2(Partial_Sums_in_cod2 Rseq) is summable;
theorem :: DBLSEQ_2:43
Rseq is nonnegative-yielding & Partial_Sums Rseq is P-convergent implies
P-lim(Partial_Sums Rseq) = Sum(lim_in_cod1(Partial_Sums_in_cod1 Rseq))
& P-lim(Partial_Sums Rseq) = Sum(lim_in_cod2(Partial_Sums_in_cod2 Rseq));
begin :: Summability for rearrangements of non-negative real sequence
theorem :: DBLSEQ_2:44
for s1,s2 be Real_Sequence
st s1 is nonnegative & s1,s2 are_fiberwise_equipotent
holds s2 is nonnegative;
theorem :: DBLSEQ_2:45
for X being non empty set, s being sequence of X, n being Nat
holds dom(Shift(s|(Segm n),1)) = Seg n;
registration
let X be non empty set;
let s be sequence of X;
let n be Nat;
cluster Shift(s|(Segm n),1) -> FinSequence-like;
end;
theorem :: DBLSEQ_2:46
for X being non empty set, s being sequence of X, n being Nat
holds Shift(s|(Segm n),1) is FinSequence of X;
theorem :: DBLSEQ_2:47
for X being non empty set, s being sequence of X, n,m being Nat
st m+1 in dom Shift(s|Segm n, 1) holds Shift(s|Segm n,1).(m+1) = s.m;
theorem :: DBLSEQ_2:48
for X being non empty set, s being sequence of X holds
Shift(s|(Segm 0),1) = {} & Shift(s|(Segm 1),1) = <*s.0*>
& Shift(s|(Segm 2),1) = <*s.0,s.1*>
& for n being Nat holds Shift(s|(Segm(n+1)),1) =
Shift(s|(Segm n),1)^<*s.n*>;
theorem :: DBLSEQ_2:49
for s being Real_Sequence, n being Nat holds
(Partial_Sums s).n = Sum(Shift(s|Segm(n+1),1));
theorem :: DBLSEQ_2:50
for X being non empty set, s1,s2 being sequence of X, n being Nat
st s1,s2 are_fiberwise_equipotent holds
ex m being Nat, fs2 being Subset of Shift(s2|Segm m,1) st
Shift(s1|Segm(n+1),1),fs2 are_fiberwise_equipotent;
theorem :: DBLSEQ_2:51
for X being non empty set, fs being FinSequence of X,
fss being Subset of fs
holds Seq fss,fss are_fiberwise_equipotent;
theorem :: DBLSEQ_2:52
for s1,s2 being Real_Sequence, n being Nat
st s1,s2 are_fiberwise_equipotent & s1 is nonnegative
ex m being Nat st (Partial_Sums s1).n <= (Partial_Sums s2).m;
theorem :: DBLSEQ_2:53
for s1,s2 being Real_Sequence st
s1,s2 are_fiberwise_equipotent & s1 is nonnegative & s1 is summable
holds s2 is summable & Sum s1 = Sum s2;
begin :: Basic relations between double sequence and matrix
theorem :: DBLSEQ_2:54
for D being non empty set, Rseq being Function of [:NAT,NAT:],D,
n,m being Nat holds
ex M be Matrix of n+1,m+1,D st
for i,j being Nat st i <= n & j <= m holds Rseq.(i,j) = M*(i+1,j+1);
theorem :: DBLSEQ_2:55
for n,m being Nat, Rseq being Function of [:NAT,NAT:],REAL,
M being Matrix of n+1,m+1,REAL st
( for i,j being Nat st i<=n & j<=m holds Rseq.(i,j) = M*(i+1,j+1) )
holds (Partial_Sums Rseq).(n,m) = SumAll M;