reserve a,b for object, I,J for set;

theorem Th22:
  for p being Bags I-valued FinSequence, b being bag of I holds
  Sum (p^<*b*>) = Sum p + b
  proof
    let p be Bags I-valued FinSequence;
    let b be bag of I;
    set f = p^<*b*>;
    consider F being Function of NAT, Bags I such that
A1: Sum f = F.len f and
A2: F.0 = EmptyBag I and
A3: for i being Nat
    for b being bag of I
    st i < len f & b = f.(i + 1)
    holds F.(i + 1) = F.i + b by SUM;
    consider F1 being Function of NAT, Bags I such that
A4: Sum p = F1.len p and
A5: F1.0 = EmptyBag I and
A6: for i being Nat
    for b being bag of I
    st i < len p & b = p.(i + 1)
    holds F1.(i + 1) = F1.i + b by SUM;
    defpred P[Nat] means $1 <= len p implies F.$1 = F1.$1;
A7: P[0] by A2,A5;
A8: for i being Nat st P[i] holds P[i+1]
    proof
      let i be Nat;
      assume
A9:   P[i] & i+1 <= len p;
      then
      i < len p < len p+1 = len f by FINSEQ_2:16,NAT_1:13;
      then
A11:  i < len f by XXREAL_0:2;
A12:  i+1 in dom p by A9,NAT_1:11,FINSEQ_3:25;
      then reconsider b = p.(i+1) as Element of Bags I by FUNCT_1:102;
      f.(i+1) = b by A12,FINSEQ_1:def 7;
      hence F.(i+1) = F.i + b by A3,A11
      .= F1.i + b by A9,NAT_1:13
      .= F1.(i+1) by A6,A9,NAT_1:13;
    end;
    for i being Nat holds P[i] from NAT_1:sch 2(A7,A8);
    then Sum p = F.len p & len p < len p+1 = len f & f.(len p+1) = b
    by A4,NAT_1:13,FINSEQ_2:16,FINSEQ_1:42;
    hence Sum (p^<*b*>) = Sum p + b by A1,A3;
  end;
