reserve n,m,k,i for Nat,
  g,s,t,p for Real,
  x,y,z for object, X,Y,Z for set,
  A1 for SetSequence of X,
  F1 for FinSequence of bool X,
  RFin for real-valued FinSequence,
  Si for SigmaField of X,
  XSeq,YSeq for SetSequence of Si,
  Omega for non empty set,
  Sigma for SigmaField of Omega,
  ASeq,BSeq for SetSequence of Sigma,
  P for Probability of Sigma;
reserve FSeq for FinSequence of Sigma;

theorem Th64:
  for FSeq being FinSequence of Sigma, ASeq being SetSequence of
  Sigma st (for k st k in dom FSeq holds ASeq.k = FSeq.k) & (for k st not k in
dom FSeq holds ASeq.k = {}) holds Partial_Sums(P * ASeq) is convergent & Sum(P
* ASeq) = Partial_Sums(P * ASeq).(len FSeq) & P.(Union ASeq) <= Sum(P * ASeq) &
  Sum(P * FSeq) = Sum(P * ASeq)
proof
  let FSeq be FinSequence of Sigma, ASeq be SetSequence of Sigma such that
A1: for k st k in dom FSeq holds ASeq.k = FSeq.k and
A2: for k st not k in dom FSeq holds ASeq.k = {};
    reconsider XSeq = ASeq as SetSequence of Omega;
    (for k st k in dom FSeq holds XSeq.k = FSeq.k) &
    for k st not k in dom FSeq holds XSeq.k = {} by A1,A2;
    then
A3: ASeq.0 ={} by Th55;
A4: (P * ASeq).0 = P.(ASeq.0) by FUNCT_2:15
    .= 0 by A3,VALUED_0:def 19;
A5: for k st k in dom FSeq holds (P * ASeq).k = (P * FSeq).k
  proof
    let k such that
A6: k in dom FSeq;
    k in NAT by ORDINAL1:def 12;
    hence (P * ASeq).k = P.(ASeq.k) by FUNCT_2:15
      .= P.(FSeq.k) by A1,A6
      .= (P * FSeq).k by A6,FUNCT_1:13;
  end;
  1 = 0+1;
  then
A7: Partial_Sums(P * ASeq).1 = Partial_Sums(P * ASeq).0 + (P*ASeq).1 by
SERIES_1:def 1
    .= (P*ASeq).0 + (P*ASeq).1 by SERIES_1:def 1
    .= (P * ASeq).1 by A4;
A8: len FSeq >= 1 implies Partial_Sums(P * ASeq).1=(P * FSeq).1 & for m st
m <> 0 & m < len FSeq holds Partial_Sums(P*ASeq).(m+1)=Partial_Sums(P*ASeq).m+(
  P*FSeq).(m+1)
  proof
    assume len FSeq >= 1;
    then 1 in dom FSeq by Th2;
    hence Partial_Sums(P * ASeq).1 = (P * FSeq).1 by A5,A7;
    thus for m st m <> 0 & m < len FSeq holds Partial_Sums(P*ASeq).(m+1)=
    Partial_Sums(P*ASeq).m+(P*FSeq).(m+1)
    proof
      let m;
      assume that
      m <> 0 and
A9:   m < len FSeq;
      reconsider m1 = m as Element of NAT by ORDINAL1:def 12;
      m+1 in Seg len FSeq by A9,FINSEQ_3:11;
      then
A10:  m+1 in dom FSeq by FINSEQ_1:def 3;
      thus Partial_Sums(P*ASeq).(m+1) = Partial_Sums(P*ASeq).m1+(P*ASeq).(m1+1
      ) by SERIES_1:def 1
        .= Partial_Sums(P*ASeq).m+(P*FSeq).(m+1) by A5,A10;
    end;
  end;
  defpred P[Nat] means Partial_Sums(P * ASeq).((len FSeq + 1) + $1) =
  Partial_Sums(P * ASeq).(len FSeq);
A11: for m being Nat holds (P * ASeq).((len FSeq + 1) + m)=0
  proof
    set k=len FSeq + 1;
    let m be Nat;
    reconsider m1=m as Element of NAT by ORDINAL1:def 12;
    k + m >= k by NAT_1:11;
    then len FSeq + 1 + m > len FSeq by Lm1;
    then not len FSeq + 1 + m in dom FSeq by FINSEQ_3:25;
    then
A12: ASeq.((len FSeq + 1) + m) = {} by A2;
    thus (P * ASeq).((len FSeq + 1) + m) = P.(ASeq.((len FSeq + 1) + m1)) by
FUNCT_2:15
      .= 0 by A12,VALUED_0:def 19;
  end;
A13: for k st P[k] holds P[k+1]
  proof
    let k such that
A14: Partial_Sums(P * ASeq).((len FSeq + 1) + k) = Partial_Sums(P *
    ASeq).(len FSeq);
    reconsider k1 = k as Element of NAT by ORDINAL1:def 12;
    Partial_Sums(P * ASeq).((len FSeq + 1 + k)+1) = Partial_Sums(P * ASeq
).(len FSeq + 1 + k1) + (P * ASeq).((len FSeq + 1) + (k1+1)) by SERIES_1:def 1
      .= Partial_Sums(P * ASeq).(len FSeq + 1 + k) + 0 by A11;
    hence thesis by A14;
  end;
  now
    let n be Nat;
    (Partial_Diff_Union ASeq).n c= ASeq.n by Th17;
    hence (P * Partial_Diff_Union ASeq).n <= (P * ASeq).n by Th5;
  end;
  then
A15: for n being Nat holds (Partial_Sums(P * Partial_Diff_Union
  ASeq)).n <= (Partial_Sums(P * ASeq)).n by SERIES_1:14;
A16: Partial_Sums(P * Partial_Diff_Union ASeq) is convergent by Th45;
  Partial_Sums(P * ASeq).((len FSeq + 1) + 0) = Partial_Sums(P * ASeq).(
  len FSeq) + (P * ASeq).((len FSeq + 1) + 0) by SERIES_1:def 1
    .= Partial_Sums(P * ASeq).(len FSeq) + 0 by A11;
  then
A17: P[0];
A18: for k holds P[k] from NAT_1:sch 2(A17,A13);
A19: for m st len FSeq + 1 <= m holds Partial_Sums(P * ASeq).m =
  Partial_Sums(P * ASeq).(len FSeq)
  proof
    let m;
    assume len FSeq + 1 <= m;
    then ex k being Nat st m = (len FSeq + 1) + k by NAT_1:10;
    hence thesis by A18;
  end;
  then
A20: lim Partial_Sums(P * ASeq) = Partial_Sums(P * ASeq).(len FSeq) by Th3;
  then
A21: Sum(P * ASeq) = Partial_Sums(P * ASeq).(len FSeq) by SERIES_1:def 3;
A22: Sum(P * FSeq) = Sum(P * ASeq)
  proof
    now
      per cases;
      suppose
        len FSeq = 0;
        then len (P * FSeq) = 0 & Sum(P * ASeq) = 0 by A4,A21,Th61,
SERIES_1:def 1;
        hence thesis by Th62;
      end;
      suppose
A23:    len FSeq <> 0;
        then 1 <= len FSeq by NAT_1:14;
        then
A24:    1 <= len (P * FSeq) by Th61;
        then consider seq1 being Real_Sequence such that
A25:    seq1.1 = (P * FSeq).1 and
A26:    for n st 0 <> n & n < len (P * FSeq) holds seq1.(n+1) = seq1.
        n+(P * FSeq).(n+1) and
A27:    Sum(P * FSeq) = seq1.(len (P * FSeq)) by Th63;
        defpred P[object,object] means
ex n st (n=$1 & (n = 0 implies $2=0) & (n <>
0 & n <= len (P * FSeq) implies $2=seq1.n) & (n <> 0 & n > len (P * FSeq)
        implies $2=Partial_Sums(P*ASeq).(len(P * FSeq))));
        ex seq being Real_Sequence st for n holds (n=0 implies seq.n=0) &
(n<>0 & n <= len (P * FSeq) implies seq.n=seq1.n) & (n<>0 & n > len (P * FSeq)
        implies seq.n=Partial_Sums(P*ASeq).(len (P * FSeq)))
        proof
A28:      for x being object st x in NAT ex y being object st P[x,y]
          proof
            let x be object;
            assume x in NAT;
            then reconsider n=x as Element of NAT;
            now
              per cases;
              case
                n=0;
                hence P[x,0];
              end;
              case
                n <> 0 & n <= len (P * FSeq);
                hence P[x,(seq1.n)];
              end;
              case
                n <> 0 & not n <= len (P * FSeq);
                hence P[x,Partial_Sums(P*ASeq).(len(P * FSeq))];
              end;
            end;
            hence thesis;
          end;
          consider f being Function such that
A29:      dom f=NAT & for x being object st x in NAT holds P[x,f.x]
              from CLASSES1:
          sch 1(A28);
          now
            let x;
            assume x in NAT;
            then
            ex n st n=x & (n = 0 implies f.x=0) & (n <> 0 & n <= len (P *
FSeq) implies f.x=seq1.n) & (n <> 0 & n > len (P * FSeq) implies f.x=
            Partial_Sums(P*ASeq).(len(P * FSeq))) by A29;
            hence f.x is real;
          end;
          then reconsider f as Real_Sequence by A29,SEQ_1:1;
          take seq=f;
          let n;
          n in NAT by ORDINAL1:def 12;
          then ex k st k=n & (k=0 implies seq.n=0) & (k<>0 & k <= len (P *
FSeq) implies seq.n=seq1.k) & (k<>0 & k > len (P * FSeq) implies seq.n=
          Partial_Sums(P*ASeq).(len (P * FSeq))) by A29;
          hence thesis;
        end;
        then consider seq2 being Real_Sequence such that
A30:    for n holds (n=0 implies seq2.n=0) & (n<>0 & n <= len (P *
FSeq) implies seq2.n=seq1.n) & (n<>0 & n > len (P * FSeq) implies seq2.n=
        Partial_Sums(P*ASeq).(len (P * FSeq)));
        defpred P[Nat] means seq2.$1 = Partial_Sums(P * ASeq).$1;
A31:    for k st P[k] holds P[k+1]
        proof
          let k such that
A32:      P[k];
          now
            per cases;
            case
              k = 0;
              thus seq2.1 = Partial_Sums(P * ASeq).1 by A8,A23,A24,A25,A30,
NAT_1:14;
            end;
            case
A33:          k <> 0 & k <= len (P * FSeq) -1;
              then
A34:          k + 0 < (len (P * FSeq) - 1) + 1 by XREAL_1:8;
              then
A35:          k < len FSeq by Th61;
              k+1 <= len (P * FSeq) -1 +1 by A33,XREAL_1:7;
              hence seq2.(k+1) = seq1.(k+1) by A30
                .= seq1.k + (P * FSeq).(k+1) by A26,A33,A34
                .= Partial_Sums(P * ASeq).k + (P * FSeq).(k+1) by A30,A32,A33
,A34
                .= Partial_Sums(P * ASeq).(k+1) by A8,A33,A35,NAT_1:14;
            end;
            case
              k <> 0 & not k <= len (P * FSeq) - 1;
              then
A36:          k+1 > len (P * FSeq) - 1 + 1 by XREAL_1:8;
              then k+1 >= len (P * FSeq) + 1 by NAT_1:13;
              then consider i being Nat such that
A37:          k+1 = len (P * FSeq) + 1 + i by NAT_1:10;
              thus seq2.(k+1) = Partial_Sums(P * ASeq).(len (P * FSeq)) by A30
,A36
                .= Partial_Sums(P * ASeq).(len FSeq) by Th61
                .= Partial_Sums(P * ASeq).((len FSeq + 1) + i) by A18
                .= Partial_Sums(P * ASeq).(k+1) by A37,Th61;
            end;
          end;
          hence thesis;
        end;
        seq2.0 = (P * ASeq).0 by A4,A30
          .= Partial_Sums(P * ASeq).0 by SERIES_1:def 1;
        then
A38:    P[0];
A39:    for k holds P[k] from NAT_1:sch 2(A38,A31);
        len (P * FSeq) <> 0 by A23,Th61;
        then seq2.(len (P * FSeq)) = Sum(P * FSeq) by A27,A30;
        hence Sum(P * FSeq) = Partial_Sums(P * ASeq).(len (P * FSeq)) by A39
          .= Sum(P * ASeq) by A21,Th61;
      end;
    end;
    hence thesis;
  end;
  Partial_Sums(P * ASeq) is convergent by A19,Th3;
  then lim Partial_Sums(P * Partial_Diff_Union ASeq) <= lim Partial_Sums(P *
  ASeq) by A16,A15,SEQ_2:18;
  then Sum (P * Partial_Diff_Union ASeq) <= lim Partial_Sums(P * ASeq) by
SERIES_1:def 3;
  then Sum (P * Partial_Diff_Union ASeq) <= Sum(P * ASeq) by SERIES_1:def 3;
  then P.(Union Partial_Diff_Union ASeq) <= Sum(P * ASeq) by Th46;
  hence thesis by A19,A20,A22,Th3,Th20,SERIES_1:def 3;
end;
