reserve x,y,z for object, X for set, I for non empty set, i,j for Element of I,
    M0 for multMagma-yielding Function,
    M for non empty multMagma-yielding Function,
    M1, M2, M3 for non empty multMagma,
    G for Group-like multMagma-Family of I,
    H for Group-like associative multMagma-Family of I;

theorem Th21:
  for p being FinSequence of FreeAtoms(G)
  ex q being FinSequence of FreeAtoms(G)
  st len p = len q &
    for k being Nat,i being Element of I, g being Element of G.i st p.k = [i,g]
    ex h being Element of G.i st g*h = 1_(G.i) & (Rev q).k = [i,h]
proof
  let p be FinSequence of FreeAtoms(G);
  defpred P[object,object] means ex i being Element of I,
    g,h being Element of G.i st p.$1 = [i,g] & g*h = 1_(G.i) & $2 = [i,h];
  A1: now
    let k be Nat;
    assume k in Seg len p;
    then k in dom p by FINSEQ_1:def 3;
    then A2: p.k in rng p by FUNCT_1:3;
    then consider i,g being object such that
      A3: p.k = [i,g] by RELAT_1:def 1;
    i in dom G by A2, A3, Th7;
    then reconsider i as Element of I;
    reconsider g as Element of G.i by A2, A3, Th9;
    consider e being Element of G.i such that
      A4: for h0 being Element of G.i holds h0 * e = h0 & e * h0 = h0 &
        ex g0 being Element of G.i st h0*g0 = e & g0*h0 = e by GROUP_1:def 2;
    A5: e = 1_(G.i) by A4, GROUP_1:def 4;
    consider h being Element of G.i such that
      A6: g*h = e & h*g = e by A4;
    reconsider z = [i,h] as Element of FreeAtoms(G) by Th9;
    take z;
    thus P[k,z] by A3, A5, A6;
  end;
  consider q9 being FinSequence of FreeAtoms(G) such that
    A7: dom q9 = Seg len p & for k being Nat st k in Seg len p holds P[k,q9.k]
    from FINSEQ_1:sch 5(A1);
  take Rev q9;
  thus len p = len q9 by A7, FINSEQ_1:def 3
    .= len Rev q9 by FINSEQ_5:def 3;
  let k be Nat, i be Element of I, g be Element of G.i;
  per cases;
  suppose not k in Seg len p;
    then not k in dom p by FINSEQ_1:def 3;
    hence thesis by FUNCT_1:def 2;
  end;
  suppose k in Seg len p;
    then consider i0 being Element of I, g0,h being Element of G.i0 such that
      A8: p.k = [i0,g0] & g0*h = 1_(G.i0) & q9.k = [i0,h] by A7;
    assume p.k = [i,g];
    then A9: i = i0 & g = g0 by A8, XTUPLE_0:1;
    then reconsider h as Element of G.i;
    take h;
    thus g*h = 1_(G.i) by A8, A9;
    thus (Rev Rev q9).k = [i,h] by A8, A9;
  end;
end;
