reserve A for set, x,y,z for object,
  k for Element of NAT;
reserve n for Nat,
  x for object;
reserve V, C for set;

theorem Th29:
  for D being set, F being FinSequence of D*, i, j being Element
  of NAT st i in dom F & j in dom (F.i) holds (Sum Card (F|(i-'1))) + j in dom
  FlattenSeq F & (F.i).j = (FlattenSeq F).((Sum Card (F|(i-'1))) + j)
proof
  let D be set;
  set F = <*>(D*);
  defpred P[FinSequence of D*] means for i, j be Element of NAT st i in dom $1
& j in dom ($1.i) holds (Sum Card ($1|(i-'1))) + j in dom FlattenSeq $1 & ($1.i
  ).j = (FlattenSeq $1).((Sum Card ($1|(i-'1))) + j);
A1: for F be FinSequence of D*, p be Element of D* st P[F] holds P[F^<*p*>]
  proof
    let F be FinSequence of D*, p be Element of D*;
    assume
A2: for i, j being Element of NAT st i in dom F & j in dom (F.i) holds
(Sum Card (F|(i-'1))) + j in dom FlattenSeq F & (F.i).j = (FlattenSeq F).((Sum
    Card (F|(i-'1))) + j);
    let i, j be Element of NAT;
    assume that
A3: i in dom (F^<*p*>) and
A4: j in dom ((F^<*p*>).i);
A5: FlattenSeq (F^<*p*>) = FlattenSeq F ^ FlattenSeq <*p*> by Th3
      .= FlattenSeq F ^ p by Th1;
    per cases;
    suppose
A6:   not i in dom F;
      1 <= i by A3,FINSEQ_3:25;
      then len F < i by A6,FINSEQ_3:25;
      then
A7:   len F + 1 <= i by NAT_1:13;
A8:   len (F^<*p*>) = len F + len <*p*> by FINSEQ_1:22
        .= len F + 1 by FINSEQ_1:40;
      i <= len (F^<*p*>) by A3,FINSEQ_3:25;
      then
A9:   i = len F + 1 by A8,A7,XXREAL_0:1;
      then i-'1 = len F by NAT_D:34;
      then
A10:  (F^<*p*>)|(i-'1) = F by FINSEQ_5:23;
A11:  Sum Card F = len FlattenSeq F by Th26;
      1 in dom <*p*> by FINSEQ_5:6;
      then
A12:  (F^<*p*>).i = <*p*>.1 by A9,FINSEQ_1:def 7
        .= p;
      hence
      (Sum Card ((F^<*p*>)|(i-'1))) + j in dom FlattenSeq (F^<*p*>) by A4,A5
,A10,A11,FINSEQ_1:28;
      thus thesis by A4,A5,A12,A10,A11,FINSEQ_1:def 7;
    end;
    suppose
A13:  i in dom F;
      then
A14:  j in dom (F.i) by A4,FINSEQ_1:def 7;
      then
A15:  (Sum Card (F|(i-'1))) + j in dom FlattenSeq F by A2,A13;
A16:  i-'1 <= i by NAT_D:35;
      i <= len F by A13,FINSEQ_3:25;
      then
A17:  (F^<*p*>)|(i-'1) = F|(i-'1) by A16,FINSEQ_5:22,XXREAL_0:2;
      dom FlattenSeq F c= dom FlattenSeq (F^<*p*>) by A5,FINSEQ_1:26;
      hence (Sum Card ((F^<*p*>)|(i-'1))) + j in dom FlattenSeq (F^<*p*>) by
A17,A15;
      thus ((F^<*p*>).i).j = (F.i).j by A13,FINSEQ_1:def 7
        .= (FlattenSeq F).((Sum Card (F|(i-'1))) + j) by A2,A13,A14
        .= (FlattenSeq (F^<*p*>)).((Sum Card ((F^<*p*>)|(i-'1)))+j) by A5,A17
,A15,FINSEQ_1:def 7;
    end;
  end;
A18: P[F];
  thus for F being FinSequence of D* holds P[F] from FINSEQ_2:sch 2(A18, A1);
end;
