reserve i,j,n,k,m for Nat,
     a,b,x,y,z for object,
     F,G for FinSequence-yielding FinSequence,
     f,g,p,q for FinSequence,
     X,Y for set,
     D for non empty set;
reserve
  B,A,M for BinOp of D,
  F,G for D* -valued FinSequence,
  f for FinSequence of D,
  d,d1,d2 for Element of D;
reserve
  F,G for non-empty non empty FinSequence of D*,
  f for non empty FinSequence of D;

theorem Th64:
  A is commutative associative
implies
  for f,g be non empty FinSequence
    for F be Function of dom f,D, G be Function of dom g,D,
        FG be Function of dom (f^g),D st f=F & g=G & f^g = FG
    holds
  A$$ ([#]dom (f^g),FG) = A.(A$$([#]dom f,F),A$$([#]dom g,G))
proof
  assume
A1: A is commutative associative;
  defpred P[Nat] means
    for f,g be non empty FinSequence st $1=len g
      for F be Function of dom f,D, G be Function of dom g,D,
          FG be Function of dom (f^g),D st f=F & g=G & f^g = FG
    holds
  A$$ ([#]dom (f^g),FG) = A.(A$$([#]dom f,F),A$$([#]dom g,G));
A2: P[1]
  proof
    let f,g be non empty FinSequence such that
A3:   1=len g;
    let F be Function of dom f,D,G be Function of dom g,D,
      FG be Function of dom (f^g),D such that
A4:   f=F & g=G & f^g = FG;
    len (f^g) = len f+1 by FINSEQ_1:22,A3;
    then dom (f^g) = Seg (len f+1) by FINSEQ_1:def 3;
    then
A5:   dom (f^g) = Seg (len f)\/{len f + 1} &
    Seg (len f) = dom f by FINSEQ_1:9,def 3;
    len f + 1 in {len f + 1} by TARSKI:def 1;
    then reconsider L1=len f+1 as Element of dom (f^g) by A5,XBOOLE_0:def 3;
    dom f c= dom (f^g) by FINSEQ_1:26;
    then reconsider Df = dom f as Element of Fin dom (f^g) by FINSUB_1:def 5;
    len f < len f+1 by NAT_1:13;
    then
A6:   not L1 in Df by A5,FINSEQ_1:1;
A7:   g = <*g.1*> by A3,FINSEQ_1:40;
A8:   dom g ={1} & 1 in {1} by FINSEQ_1:2,A3,FINSEQ_1:def 3;
A9:   FG|Df = F|(dom f) by A4;
    A$$ ([#]dom (f^g),FG) = A.(A$$ (Df,FG),FG.L1) by SETWOP_2:2,A1,A6,A5
    .= A.(A$$ (Df,FG),A$$([#]dom g,G)) by A4,A7,A8,A1,SETWISEO:17
    .= A.(A$$([#]dom f,F),A$$([#]dom g,G)) by A9,A1,Th1;
    hence thesis;
  end;
A10: for n st 1<=n holds P[n] implies P[n+1]
  proof
    let n such that
A11:  1<=n and
A12:  P[n];
    set n1=n+1;
    let f,g be non empty FinSequence such that
A13:  n1=len g;
    let F be Function of dom f,D, G be Function of dom g,D,
        FG be Function of dom (f^g),D such that
A14:  f=F & g=G & f^g = FG;
    rng f c= D & rng g c= D by A14,RELAT_1:def 19;
    then reconsider f1=f, g1=g as FinSequence of D by FINSEQ_1:def 4;
    n <n1 by NAT_1:13;
    then
A15:  len (g|n)=n by FINSEQ_1:59,A13;
    reconsider gn=g1|n as non empty FinSequence of D by A11;
    rng (gn) c= D;
    then reconsider Gn = gn as Function of dom (gn),D by FUNCT_2:2;
    f1^(g1|n) = f^gn;
    then rng (f^gn) c= D by FINSEQ_1:def 4;
    then reconsider fgn= f^gn as Function of dom (f^gn),D by FUNCT_2:2;
A16:  g = gn^<*g.n1*> by A13,FINSEQ_3:55;
    <*g.n1*> is FinSequence of D by A16,FINSEQ_1:36;
    then rng <*g.n1*> c= D by FINSEQ_1:def 4;
    then reconsider gn1=<*g.n1*> as Function of dom (<*g.n1*>),D by FUNCT_2:2;
A17:  len <*g.n1*>=1 by FINSEQ_1:40;
    g = gn^<*g.n1*> by A13,FINSEQ_3:55;
    then f^g = (f^gn)^<*g.n1*> by FINSEQ_1:32;
    hence A $$ ([#]dom (f^g),FG)
      = A.(A$$ ([#]dom (f^gn),fgn),A $$([#]dom (<*g.n1*>),gn1)) by A14,A17,A2
     .= A.(A.(A$$([#]dom (f),F),A$$ ([#]dom(gn),Gn)),
           A $$([#]dom (<*g.n1*>),gn1)) by A14,A12,A15
     .= A.(A$$([#]dom (f),F), A.(A$$ ([#]dom(gn),Gn),
           A $$([#]dom (<*g.n1*>),gn1))) by A1, BINOP_1:def 3
     .= A.(A$$([#]dom (f),F),A$$([#]dom(g),G)) by A16,A14,A17,A2;
  end;
A18: for n st 1<=n holds P[n] from NAT_1:sch 8(A2,A10);
  let f,g be non empty FinSequence;
  len g >=1 by NAT_1:14;
  hence thesis by A18;
end;
