reserve i,j,k,n,m for Nat,
  x,y,z,y1,y2 for object, X,Y,D for set,
  p,q for XFinSequence;
reserve k1,k2 for Nat;
reserve D for non empty set,
  F,G for XFinSequence of D,
  b for BinOp of D,
  d,d1,d2 for Element of D;

theorem Th41: :: STIRL2_1:47
  b is associative & (b is having_a_unity or len F >= 1 & len G >= 1)
  implies b "**" (F ^ G) = b.(b "**" F,b "**" G)
proof
  defpred P[XFinSequence of D] means for F,b st b is associative & (b is
  having_a_unity or len F >= 1 & len $1 >= 1) holds b "**" (F^$1)=b.(b "**" F,b
  "**" $1);
A1: for G,d st P[G] holds P[G ^ <%d%>]
  proof
    let G,d such that
A2: P[G];
    let F,b such that
A3: b is associative and
A4: b is having_a_unity or len F >= 1 & len(G ^ <% d %>) >= 1;
    now
      per cases;
      suppose
A5:     len G<>0;
        then
        b is having_a_unity or len F>=1&len (F^G)=len F+len G & len F+len
        G >len F+zz by A4,AFINSQ_1:17,XREAL_1:8;
        then b.(b "**" (F ^ G),d)=b "**" ((F ^ G)^<%d%>) by Th40;
        then
A6:     b "**" (F ^ (G ^ <% d %>)) = b.(b "**" (F ^ G),d) by AFINSQ_1:27;
        len G>=1 by A5,NAT_1:14;
        then b "**" (F ^ (G ^ <% d %>))=b.(b.(b "**" F,b "**" G),d) by A2,A3,A4
,A6
          .= b.(b "**" F,b.(b "**" G,d)) by A3
          .= b.(b "**" F,b "**" (G ^ <% d %>)) by A5,Th40;
        hence thesis;
      end;
      suppose
        len G=0;
        then
A7:     G = {};
        hence b "**" (F ^(G ^ <% d %>))
           = b "**"(F^({}^<% d %>))
          .= b "**"(F^<% d %>)
          .= b.(b "**" F,d) by A4,Th40
          .= b.(b "**" F,b "**" ({}^<%d%>)) by Th37
          .= b.(b "**" F,b "**" (G ^ <% d %>)) by A7;
      end;
    end;
    hence thesis;
  end;
A8: P[<%>D]
  proof
    let F,b;
    assume that
    b is associative and
A9: b is having_a_unity or len F >= 1 & len <%>D >= 1;
    thus b "**" (F ^ <%>D) = b "**" (F^{})
      .= b.(b "**" F,the_unity_wrt b) by A9,SETWISEO:15
      .= b.(b "**" F,b "**" <%>D) by A9,Def8,CARD_1:27;
  end;
  for G holds P[G] from Sch5(A8,A1);
  hence thesis;
end;
