 reserve x,y,X,Y for set;
reserve G for non empty multMagma,
  D for set,
  a,b,c,r,l for Element of G;
reserve M for non empty multLoopStr;
reserve H for non empty SubStr of G,
  N for non empty MonoidalSubStr of G;

theorem
  Y c= X implies GPFuncs Y is SubStr of GPFuncs X
proof
  carr(GPFuncs Y) = PFuncs(Y,Y) by Def37;
  then
A1: dom op(GPFuncs Y) = [:PFuncs(Y,Y),PFuncs(Y,Y):] by FUNCT_2:def 1;
  carr(GPFuncs X) = PFuncs(X,X) by Def37;
  then
A2: dom op(GPFuncs X) = [:PFuncs(X,X),PFuncs(X,X):] by FUNCT_2:def 1;
  assume Y c= X;
  then
A3: PFuncs(Y,Y) c= PFuncs(X,X) by PARTFUN1:50;
A4: now
    let x be object;
    assume
A5: x in [:PFuncs(Y,Y),PFuncs(Y,Y):];
    then
A6: x`1 in PFuncs(Y,Y) & x`2 in PFuncs(Y,Y) by MCART_1:10;
    then reconsider x1 = x`1, x2 = x`2 as Element of GPFuncs Y by Def37;
    reconsider y1 = x`1, y2 = x`2 as Element of GPFuncs X by A3,A6,Def37;
    thus op(GPFuncs Y).x = x1[*]x2 by A5,MCART_1:21
      .= x2(*)x1 by Def37
      .= y1[*]y2 by Def37
      .= op(GPFuncs X).x by A5,MCART_1:21;
  end;
  [:PFuncs(Y,Y),PFuncs(Y,Y):] c= [:PFuncs(X,X),PFuncs(X,X):] by A3,ZFMISC_1:96;
  hence op(GPFuncs Y) c= op(GPFuncs X) by A1,A2,A4,GRFUNC_1:2;
end;
