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
  for X, Y being non empty set, f being FinSequence of X*, v being
  Function of X, Y ex F being FinSequence of Y* st F = (dom f --> v)**f & v*
  FlattenSeq f = FlattenSeq F
proof
  let X, Y be non empty set, f be FinSequence of X*, v be Function of X, Y;
  reconsider F = (dom f --> v)**f as FinSequence of Y* by Th30;
  take F;
  thus F = (dom f --> v)**f;
  set Fl = FlattenSeq F;
  set fl = FlattenSeq f;
  reconsider vfl = v*fl as FinSequence of Y;
  now
    len fl = len vfl by FINSEQ_2:33;
    hence
A1: dom fl = dom vfl by FINSEQ_3:29;
A2: dom F = dom (dom f --> v) /\ dom f by PBOOLE:def 19
      .= dom f /\ dom f
      .= dom f;
A3: now
      let k be object;
      assume
A4:   k in dom f;
      then reconsider k1=k as Element of NAT;
A5:   F.k = ((dom f --> v).k)*(f.k) by A2,A4,PBOOLE:def 19
        .= v*(f.k) by A4,FUNCOP_1:7;
      f.k1 in X* by A4,FINSEQ_2:11;
      then reconsider fk = f.k as FinSequence of X by FINSEQ_1:def 11;
      thus (Card f).k = len fk by A4,CARD_3:def 2
        .= len (F.k1) by A5,FINSEQ_2:33
        .= (Card F).k by A2,A4,CARD_3:def 2;
    end;
A6: dom f = dom Card f & dom f = dom Card F by A2,CARD_3:def 2;
    then
A7: Card f = Card F by A3;
    len fl = len Fl by A6,A3,Th27,FUNCT_1:2;
    hence dom fl = dom Fl by FINSEQ_3:29;
    let k be Nat;
    assume
A8: k in dom fl;
    then consider i, j being Nat such that
A9: i in dom f and
A10: j in dom (f.i) and
A11: k = (Sum Card (f|(i-'1))) + j and
A12: (f.i).j = fl.k by Th28;
    f.i in X* by A9,FINSEQ_2:11;
    then reconsider fi = f.i as FinSequence of X by FINSEQ_1:def 11;
    F.i = ((dom f --> v).i)*(f.i) by A2,A9,PBOOLE:def 19
      .= v*(f.i) by A9,FUNCOP_1:7;
    then len fi = len (F.i) by FINSEQ_2:33;
    then
A13: j in dom (F.i) by A10,FINSEQ_3:29;
    f.i in X* by A9,FINSEQ_2:11;
    then dom v = X & f.i is FinSequence of X by FINSEQ_1:def 11,FUNCT_2:def 1;
    then rng (f.i) c= dom v by FINSEQ_1:def 4;
    then
A14: j in dom (v*(f.i)) by A10,RELAT_1:27;
    Card (F|(i-'1)) = Card (F|Seg (i-'1)) by FINSEQ_1:def 16
      .= (Card f)|Seg (i-'1) by A7,Th22
      .= Card (f|Seg(i-'1)) by Th22
      .= Card (f|(i-'1)) by FINSEQ_1:def 16;
    then Fl.k = (F.i).j by A2,A9,A11,A13,Th29
      .= (((dom f --> v).i)*(f.i)).j by A2,A9,PBOOLE:def 19
      .= (v*(f.i)).j by A9,FUNCOP_1:7
      .= v.((f.i).j) by A14,FUNCT_1:12;
    hence vfl.k = Fl.k by A1,A8,A12,FUNCT_1:12;
  end;
  hence thesis;
end;
