reserve k,n,m,l,p for Nat;
reserve n0,m0 for non zero Nat;
reserve f for FinSequence;
reserve x,X,Y for set;
reserve f1,f2,f3 for FinSequence of REAL;
reserve n1,n2,m1,m2 for Nat;
reserve I,j for set;
reserve f,g for Function of I, NAT;
reserve J,K for finite Subset of I;

theorem Th28:
  Sum((multnat*[:f,g:])|[:J,K:]) = Sum(f|J) * Sum(g|K)
proof
  defpred P[Nat] means for I being set, f,g being Function of I, NAT, J,K
being finite Subset of I st $1 = card J holds Sum((multnat*[:f,g:])|[:J,K:]) =
  Sum(f|J) * Sum(g|K);
A1: for k being Nat st for n being Nat st n < k holds P[n] holds P[k]
  proof
    let k be Nat;
    assume
A2: for n being Nat st n < k holds P[n];
    thus P[k]
    proof
      k = 0 or k + 1 > 0 + 1 by XREAL_1:8;
      then
A3:   k = 0 or k >= 1 by NAT_1:13;
      let I be set;
      let f,g be Function of I, NAT;
      let J,K be finite Subset of I;
      assume
A4:   k = card J;
      per cases by A3,XXREAL_0:1;
      suppose
        k = 0;
        then
A5:     J = {} by A4;
        then
A6:     [:J,K:] = {};
A7:     EmptyBag {} = {} --> 0
          .= {};
        then Sum(f|J) = 0 by A5,RELAT_1:81,UPROOTS:11;
        hence Sum((multnat*[:f,g:])|[:J,K:]) = Sum(f|J) * Sum(g|K) by A6,A7,
RELAT_1:81,UPROOTS:11;
      end;
      suppose
A8:     k = 1;
        set x = the set;
        card {x} = card J by A4,A8,CARD_1:30;
        then consider j be object such that
A9:     J = {j} by CARD_1:29;
        Sum((multnat*[:f,g:])|[:J,K:]) = f.j * Sum(g|K) by A9,Lm11;
        hence Sum((multnat*[:f,g:])|[:J,K:]) = Sum(f|J) * Sum(g|K) by A9,Th27;
      end;
      suppose
A10:    k > 1;
        then J <> {} by A4;
        then consider j be object such that
A11:    j in J by XBOOLE_0:def 1;
        set J0 = {j};
        set J1 = J \ J0;
        reconsider J0 as finite Subset of I by A11,ZFMISC_1:31;
A12:    J1 \/ J0 = J \/ {j} by XBOOLE_1:39
          .= J by A11,ZFMISC_1:40;
        then
A13:    Sum(f|J) = Sum(f|J1) + Sum(f|J0) by Th26,XBOOLE_1:79;
        card J0 < k by A10,CARD_1:30;
        then
A14:    -1+k < 0+k & Sum((multnat*[:f,g:])|[:J0,K:]) = Sum(f|J0) * Sum(g|
        K) by A2,XREAL_1:8;
        J1 misses J0 by XBOOLE_1:79;
        then
A15:    [:J1,K:] misses [:J0,K:] by ZFMISC_1:104;
        j in J0 by TARSKI:def 1;
        then not j in J1 by XBOOLE_0:def 5;
        then
A16:    card (J1 \/ J0) = card J1 + 1 by CARD_2:41;
        [:J,K:] = [:J1,K:] \/ [:J0,K:] by A12,ZFMISC_1:97;
        hence Sum((multnat*[:f,g:])|[:J,K:]) = Sum((multnat*[:f,g:])|[:J1,K:])
        + Sum((multnat*[:f,g:])|[:J0,K:]) by A15,Th26
          .= Sum(f|J1) * Sum(g|K) + Sum(f|J0) * Sum(g|K) by A2,A4,A16,A12,A14
          .= Sum(f|J) * Sum(g|K) by A13;
      end;
    end;
  end;
  for k being Nat holds P[k] from NAT_1:sch 4(A1);
  then P[card J];
  hence thesis;
end;
