
theorem Th27:
  for n being Ordinal, L being Abelian add-associative
  right_zeroed right_complementable right_unital distributive associative non
empty doubleLoopStr, p, q, r being Series of n, L holds (p*'q)*'r = p*'(q*'r)
proof
  let n be Ordinal, L be Abelian add-associative right_zeroed
  right_complementable right_unital distributive associative non empty
  doubleLoopStr, p, q, r be Series of n, L;
  set cL = the carrier of L;
  reconsider pqra = (p*'q)*'r, pqrb = p*'(q*'r) as Function of Bags n, cL;
  set pq = p*'q, qr = q*'r;
  now
    let b be Element of Bags n;
    set db = decomp b;
    deffunc F(Nat) = ((decomp (((db/.$1)/.1) qua Element of Bags n))) ^^ ((len
    (decomp (((db/.$1)/.1) qua Element of Bags n)))|-> <*(db/.$1)/.2*>);
    consider dbl being FinSequence such that
A1: len dbl = len db and
A2: for k being Nat st k in dom dbl holds dbl.k = F(k) from FINSEQ_1:
    sch 2;
A3: rng dbl c= (3-tuples_on Bags n)*
    proof
      let y be object;
      assume y in rng dbl;
      then consider k being object such that
A4:   k in dom dbl and
A5:   y = dbl.k by FUNCT_1:def 3;
       reconsider k as set by TARSKI:1;
      set dbk2 = (db/.k)/.2;
      set ddbk1 = decomp (((db/.k)/.1) qua Element of Bags n);
      reconsider k as Nat by A4;
      set dblk = ddbk1 ^^ ((len ddbk1) |-> <*dbk2*>);
A6:   dom dblk = dom ddbk1 /\ dom ((len ddbk1) |-> <*dbk2*>) by PRE_POLY:def 4
        .= dom ddbk1 /\ Seg len ddbk1
        .= dom ddbk1 /\ dom ddbk1 by FINSEQ_1:def 3
        .= dom ddbk1;
A7:   dom ddbk1 = Seg len ddbk1 by FINSEQ_1:def 3;
      rng dblk c= 3-tuples_on Bags n
      proof
        reconsider Gi = <*dbk2*> as Element of 1-tuples_on Bags n
             by FINSEQ_2:98;
        let y be object;
        assume y in rng dblk;
        then consider i being object such that
A8:     i in dom dblk and
A9:     dblk.i = y by FUNCT_1:def 3;
        ddbk1.i in rng ddbk1 by A6,A8,FUNCT_1:def 3;
        then reconsider Fi = ddbk1.i as Element of 2-tuples_on Bags n;
        reconsider i9 = i as Element of NAT by A8;
        ((len ddbk1) |-> <*dbk2*>).i9 = <*dbk2*> by A6,A7,A8,FUNCOP_1:7;
        then y = Fi^Gi by A8,A9,PRE_POLY:def 4;
        hence thesis by FINSEQ_2:131;
      end;
      then
A10:  dblk is FinSequence of 3-tuples_on Bags n by FINSEQ_1:def 4;
      dbl.k = ddbk1 ^^ ((len ddbk1) |-> <*dbk2*>) by A2,A4;
      hence thesis by A5,A10,FINSEQ_1:def 11;
    end;
    deffunc F(Element of 3-tuples_on Bags n) = p.($1/.1)*q.($1/.2)*r.($1/.3);
    consider v being Function of (3-tuples_on Bags n), cL such that
A11: for b being Element of 3-tuples_on Bags n holds v.b = F(b) from
    FUNCT_2:sch 4;
    deffunc G(Nat) = ((len (decomp (((db/.$1)/.2) qua Element of Bags n))) |->
    <*(db/.$1)/.1*>) ^^ ((decomp (((db/.$1)/.2) qua Element of Bags n)));
    consider dbr being FinSequence such that
A12: len dbr = len db and
A13: for k being Nat st k in dom dbr holds dbr.k = G(k) from FINSEQ_1:
    sch 2;
    rng dbr c= (3-tuples_on Bags n)*
    proof
      let y be object;
      assume y in rng dbr;
      then consider k being object such that
A14:  k in dom dbr and
A15:  y = dbr.k by FUNCT_1:def 3;
      reconsider k as Nat by A14;
      set ddbk1 = decomp (((db/.k)/.2) qua Element of Bags n);
      set dbk2 = (db/.k)/.1;
      set dbrk = ((len ddbk1) |-> <*dbk2*>) ^^ ddbk1;
A16:  dom dbrk = dom ddbk1 /\ dom ((len ddbk1) |-> <*dbk2*>) by PRE_POLY:def 4
        .= dom ddbk1 /\ Seg len ddbk1
        .= dom ddbk1 /\ dom ddbk1 by FINSEQ_1:def 3
        .= dom ddbk1;
A17:  dom ddbk1 = Seg len ddbk1 by FINSEQ_1:def 3;
      rng dbrk c= 3-tuples_on Bags n
      proof
        reconsider Gi = <*dbk2*> as Element of 1-tuples_on Bags n
             by FINSEQ_2:98;
        let y be object;
        assume y in rng dbrk;
        then consider i being object such that
A18:    i in dom dbrk and
A19:    dbrk.i = y by FUNCT_1:def 3;
        ddbk1.i in rng ddbk1 by A16,A18,FUNCT_1:def 3;
        then reconsider Fi = ddbk1.i as Element of 2-tuples_on Bags n;
        reconsider i9 = i as Element of NAT by A18;
        ((len ddbk1) |-> <*dbk2*>).i9 = <*dbk2*> by A16,A17,A18,FUNCOP_1:7;
        then y = Gi^Fi by A18,A19,PRE_POLY:def 4;
        hence thesis by FINSEQ_2:131;
      end;
      then
A20:  dbrk is FinSequence of 3-tuples_on Bags n by FINSEQ_1:def 4;
      dbr.k = ((len ddbk1) |-> <*dbk2*>) ^^ ddbk1 by A13,A14;
      hence thesis by A15,A20,FINSEQ_1:def 11;
    end;
    then reconsider dbl, dbr as FinSequence of (3-tuples_on Bags n)* by A3,
FINSEQ_1:def 4;
    set fdbl = FlattenSeq dbl, fdbr = FlattenSeq dbr;
    consider ls being FinSequence of cL such that
A21: pqra.b = Sum ls and
A22: len ls = len decomp b and
A23: for k being Element of NAT st k in dom ls ex b1,b2 being bag of n
    st db/.k = <*b1,b2*> & ls/.k = pq.b1*r.b2 by Def10;
A24: dom dbr = dom db by A12,FINSEQ_3:29;
    reconsider vfdbl = v*fdbl,vfdbr = v*fdbr as FinSequence of cL by
FINSEQ_2:32;
    consider vdbl being FinSequence of cL* such that
A25: vdbl = ((dom dbl --> v)**dbl) and
A26: vfdbl = FlattenSeq vdbl by PRE_POLY:32;
A27: dom v = 3-tuples_on Bags n by FUNCT_2:def 1;
    now
      set f = Sum vdbl;
A28:  dom vdbl = dom (dom dbl --> v) /\ dom dbl by A25,PBOOLE:def 19
        .= dom dbl /\ dom dbl
        .= dom dbl;
A29:  dom f = dom vdbl by Th2;
      hence len Sum vdbl = len ls by A22,A1,A28,FINSEQ_3:29;
      let k be Nat such that
A30:  1 <= k & k <= len ls;
A31:  k in dom f by A22,A1,A29,A28,A30,FINSEQ_3:25;
A32:  f/.k = f.k by A22,A1,A29,A28,A30,FINSEQ_3:25,PARTFUN1:def 6;
A33:  dom ls = dom f by A22,A1,A29,A28,FINSEQ_3:29;
      then
A34:  ls/.k = ls.k by A30,FINSEQ_3:25,PARTFUN1:def 6;
      consider b1,b2 being bag of n such that
A35:  db/.k = <*b1,b2*> and
A36:  ls/.k = pq.b1*r.b2 by A23,A33,A31;
A37:  len <*b1,b2*> = 2 by FINSEQ_1:44;
      then 1 in dom <*b1,b2*> by FINSEQ_3:25;
      then
A38:  (db/.k)/.1 = <*b1,b2*>.1 by A35,PARTFUN1:def 6
        .= b1;
      set dblk = dbl.k;
      set dbk2 = (db/.k)/.2;
      set ddbk1 = decomp (((db/.k)/.1) qua Element of Bags n);
A39:  k in dom vdbl by A22,A1,A28,A30,FINSEQ_3:25;
      then
A40:  dbl.k = ddbk1 ^^ ((len ddbk1) |-> <*dbk2*>) by A2,A28;
      then
A41:  dom dblk = dom ddbk1 /\ dom ((len ddbk1) |-> <*dbk2*>) by PRE_POLY:def 4
        .= dom ddbk1 /\ Seg len ddbk1
        .= dom ddbk1 /\ dom ddbk1 by FINSEQ_1:def 3
        .= dom ddbk1;
      set vdblk = v*(dbl.k);
      k in dom dbl by A22,A1,A30,FINSEQ_3:25;
      then dblk in rng dbl by FUNCT_1:def 3;
      then dblk is Element of (3-tuples_on Bags n)*;
      then reconsider dblk as FinSequence of 3-tuples_on Bags n;
      rng dblk c= 3-tuples_on Bags n;
      then
A42:  dom vdblk = dom dblk by A27,RELAT_1:27;
      then
A43:  dom vdblk = Seg len ddbk1 by A41,FINSEQ_1:def 3;
      reconsider b29 = b2 as Element of Bags n by PRE_POLY:def 12;
      consider pqs being FinSequence of the carrier of L such that
A44:  pq.b1 = Sum pqs and
A45:  len pqs = len decomp b1 and
A46:  for i being Element of NAT st i in dom pqs ex b11, b12 being
bag of n st (decomp b1)/.i = <*b11, b12*> & pqs/.i = p.b11*q.b12 by Def10;
A47:  dom pqs = dom (pqs*r.b2) by Def2;
      2 in dom <*b1,b2*> by A37,FINSEQ_3:25;
      then
A48:  dbk2 = <*b1,b2*>.2 by A35,PARTFUN1:def 6
        .= b2;
      reconsider vdblk as FinSequence by A43,FINSEQ_1:def 2;
A49:  Sum (pqs*r.b2) = (Sum pqs)*r.b2 by Th13;
A50:  dom ddbk1 = Seg len ddbk1 by FINSEQ_1:def 3;
      now
A51:    dom pqs = dom (pqs*r.b2) by Def2;
        thus len vdblk = len pqs by A45,A38,A41,A42,FINSEQ_3:29
          .= len (pqs*r.b2) by A47,FINSEQ_3:29;
        then
A52:    dom vdblk = dom (pqs*r.b2) by FINSEQ_3:29;
        let i be Nat;
        reconsider i9 = i as Element of NAT by ORDINAL1:def 12;
        assume
A53:    1 <= i & i <= len (pqs*r.b2);
        then
A54:    i in dom (pqs*r.b2) by FINSEQ_3:25;
        then consider b11, b12 being bag of n such that
A55:    (decomp b1)/.i = <*b11, b12*> and
A56:    pqs/.i = p.b11*q.b12 by A46,A47;
        ((len ddbk1) |-> <*dbk2*>).i9 = <*dbk2*> & (decomp b1)/.i = (
        decomp b1).i by A38,A41,A50,A42,A52,A54,FUNCOP_1:7,PARTFUN1:def 6;
        then
A57:    dblk.i = <*b11,b12*>^<*b2*> by A48,A38,A40,A42,A52,A54,A55,
PRE_POLY:def 4
          .= <*b11,b12,b2*> by FINSEQ_1:43;
        reconsider b119 = b11, b129 = b12 as Element of Bags n
         by PRE_POLY:def 12;
        reconsider B = <*b119,b129,b29*> as Element of 3-tuples_on Bags n by
FINSEQ_2:104;
A58:    i in dom pqs by A47,A53,FINSEQ_3:25;
        thus (v*(dbl.k)).i = v.(dblk.i) by A52,A54,FUNCT_1:12
          .= p.(B/.1)*q.(B/.2)*r.(B/.3) by A11,A57
          .= p.b119*q.(B/.2)*r.(B/.3) by FINSEQ_4:18
          .= p.b11*q.b12*r.(B/.3) by FINSEQ_4:18
          .= (pqs/.i)*r.b2 by A56,FINSEQ_4:18
          .= (pqs*r.b2)/.i by A58,Def2
          .= (pqs*r.b2).i by A58,A51,PARTFUN1:def 6;
      end;
      then
A59:  vdblk = pqs*r.b2 by FINSEQ_1:14;
      vdbl/.k = vdbl.k by A39,PARTFUN1:def 6
        .= ((dom dbl --> v).k)*(dbl.k) by A25,A39,PBOOLE:def 19
        .= pqs*r.b2 by A28,A39,A59,FUNCOP_1:7;
      hence (Sum vdbl).k = ls.k by A31,A36,A44,A49,A34,A32,MATRLIN:def 6;
    end;
    then
A60: Sum vdbl = ls by FINSEQ_1:14;
    consider vdbr being FinSequence of cL* such that
A61: vdbr = ((dom dbr --> v)**dbr) and
A62: vfdbr = FlattenSeq vdbr by PRE_POLY:32;
A63: Sum vfdbr = Sum Sum vdbr by A62,Th14;
    consider rs being FinSequence of cL such that
A64: pqrb.b = Sum rs and
A65: len rs = len decomp b and
A66: for k being Element of NAT st k in dom rs ex b1,b2 being bag of n
    st db/.k = <*b1,b2*> & rs/.k = p.b1*qr.b2 by Def10;
    now
      set f = Sum vdbr;
A67:  dom vdbr = dom (dom dbr --> v) /\ dom dbr by A61,PBOOLE:def 19
        .= dom dbr /\ dom dbr
        .= dom dbr;
A68:  dom f = dom vdbr by Th2;
      hence len Sum vdbr = len rs by A65,A12,A67,FINSEQ_3:29;
      let k be Nat such that
A69:  1 <= k & k <= len rs;
A70:  k in dom f by A65,A12,A68,A67,A69,FINSEQ_3:25;
      then
A71:  f/.k = f.k by PARTFUN1:def 6;
      set dbrk = dbr.k;
      set dbk2 = (db/.k)/.1;
      set ddbk1 = decomp (((db/.k)/.2) qua Element of Bags n);
A72:  k in dom vdbr by A65,A12,A67,A69,FINSEQ_3:25;
      then
A73:  dbr.k = ((len ddbk1) |-> <*dbk2*>) ^^ ddbk1 by A13,A67;
      then
A74:  dom dbrk = dom ddbk1 /\ dom ((len ddbk1) |-> <*dbk2*>) by PRE_POLY:def 4
        .= dom ddbk1 /\ Seg len ddbk1
        .= dom ddbk1 /\ dom ddbk1 by FINSEQ_1:def 3
        .= dom ddbk1;
      k in dom dbr by A65,A12,A69,FINSEQ_3:25;
      then dbrk in rng dbr by FUNCT_1:def 3;
      then
A75:  dbrk is Element of (3-tuples_on Bags n)*;
      set vdbrk = v*(dbr.k);
A76:  dom ddbk1 = Seg len ddbk1 by FINSEQ_1:def 3;
      reconsider dbrk as FinSequence of 3-tuples_on Bags n by A75;
      rng dbrk c= 3-tuples_on Bags n;
      then
A77:  dom vdbrk = dom dbrk by A27,RELAT_1:27;
      then
A78:  dom vdbrk = Seg len ddbk1 by A74,FINSEQ_1:def 3;
A79:  dom rs = dom f by A65,A12,A68,A67,FINSEQ_3:29;
      then
A80:  rs/.k = rs.k by A70,PARTFUN1:def 6;
      consider b1,b2 being bag of n such that
A81:  db/.k = <*b1,b2*> and
A82:  rs/.k = p.b1*qr.b2 by A66,A79,A70;
      reconsider b19 = b1 as Element of Bags n by PRE_POLY:def 12;
      consider qrs being FinSequence of the carrier of L such that
A83:  qr.b2 = Sum qrs and
A84:  len qrs = len decomp b2 and
A85:  for i being Element of NAT st i in dom qrs ex b11, b12 being
bag of n st (decomp b2)/.i = <*b11, b12*> & qrs/.i = q.b11*r.b12 by Def10;
A86:  dom qrs = dom (p.b1*qrs) by Def1;
      then
A87:  len qrs = len (p.b1*qrs) by FINSEQ_3:29;
A88:  len <*b1,b2*> = 2 by FINSEQ_1:44;
      then 1 in dom <*b1,b2*> by FINSEQ_3:25;
      then
A89:  dbk2 = <*b1,b2*>.1 by A81,PARTFUN1:def 6
        .= b1;
      reconsider vdbrk as FinSequence by A78,FINSEQ_1:def 2;
A90:  Sum (p.b1*qrs) = p.b1*(Sum qrs) by Th12;
      2 in dom <*b1,b2*> by A88,FINSEQ_3:25;
      then
A91:  (db/.k)/.2 = <*b1,b2*>.2 by A81,PARTFUN1:def 6
        .= b2;
      then
A92:  dom vdbrk = dom (p.b1*qrs) by A84,A74,A77,A86,FINSEQ_3:29;
A93:  now
        let i be Nat;
        reconsider i9 = i as Element of NAT by ORDINAL1:def 12;
        assume
A94:    1 <= i & i <= len (p.b1*qrs);
        then
A95:    i in dom qrs by A86,FINSEQ_3:25;
A96:    i in dom dbrk by A84,A91,A74,A87,A94,FINSEQ_3:25;
        then consider b11, b12 being bag of n such that
A97:    (decomp b2)/.i = <*b11, b12*> and
A98:    qrs/.i = q.b11*r.b12 by A85,A77,A86,A92;
        ((len ddbk1) |-> <*dbk2*>).i9 = <*dbk2*> & (decomp b2)/.i = (
        decomp b2).i by A91,A74,A76,A96,FUNCOP_1:7,PARTFUN1:def 6;
        then
A99:    dbrk.i = <*b1*>^<*b11,b12*> by A89,A91,A73,A96,A97,PRE_POLY:def 4
          .= <*b1,b11,b12*> by FINSEQ_1:43;
        reconsider b119 = b11, b129 = b12 as Element of Bags n
         by PRE_POLY:def 12;
        reconsider B = <*b19,b119,b129*> as Element of 3-tuples_on Bags n by
FINSEQ_2:104;
        thus (v*(dbr.k)).i = v.(dbrk.i) by A77,A96,FUNCT_1:12
          .= p.(B/.1)*q.(B/.2)*r.(B/.3) by A11,A99
          .= p.b1*q.(B/.2)*r.(B/.3) by FINSEQ_4:18
          .= p.b1*q.b11*r.(B/.3) by FINSEQ_4:18
          .= p.b1*q.b11*r.b12 by FINSEQ_4:18
          .= p.b1*(qrs/.i) by A98,GROUP_1:def 3
          .= (p.b1*qrs)/.i by A95,Def1
          .= (p.b1*qrs).i by A86,A95,PARTFUN1:def 6;
      end;
      len vdbrk = len (p.b1*qrs) by A84,A91,A74,A77,A87,FINSEQ_3:29;
      then
A100: vdbrk = p.b1*qrs by A93,FINSEQ_1:14;
      vdbr/.k = vdbr.k by A72,PARTFUN1:def 6
        .= ((dom dbr --> v).k)*(dbr.k) by A61,A72,PBOOLE:def 19
        .= p.b1*qrs by A67,A72,A100,FUNCOP_1:7;
      hence (Sum vdbr).k = rs.k by A70,A82,A83,A90,A80,A71,MATRLIN:def 6;
    end;
    then
A101: Sum vdbr = rs by FINSEQ_1:14;
    dom dbl = dom db by A1,FINSEQ_3:29;
    then consider P being Permutation of dom fdbl such that
A102: fdbr = fdbl*P by A2,A13,A24,PRE_POLY:74;
    rng fdbl c= 3-tuples_on Bags n;
    then dom vfdbl = dom fdbl by A27,RELAT_1:27;
    then reconsider P as Permutation of dom (vfdbl);
A103: vfdbr = vfdbl*P by A102,RELAT_1:36;
    Sum vfdbl = Sum Sum vdbl by A26,Th14;
    hence pqra.b = pqrb.b by A21,A64,A60,A63,A101,A103,RLVECT_2:7;
  end;
  hence thesis;
end;
