reserve M,N for non empty multMagma,
  f for Function of M, N;
reserve M for multMagma;
reserve N,K for multSubmagma of M;
reserve M,N for non empty multMagma,
  A for Subset of M,
  f,g for Function of M,N,
  X for stable Subset of M,
  Y for stable Subset of N;
reserve X for set;
reserve x,y,Y for set;
reserve n,m,p for Nat;
reserve v,v1,v2,w,w1,w2 for Element of free_magma X;
reserve X,Y,Z for non empty set;

theorem Th36:
  for A being Subset of free_magma X st A = canon_image(X,1) .: X
    holds free_magma X = the_submagma_generated_by A
proof
  let A be Subset of free_magma X;
  set N = the_submagma_generated_by A;
  assume A1: A = canon_image(X,1) .: X;
  per cases;
  suppose A2: A is empty;
    X is empty
    proof
      assume X is non empty;
      consider x being object such that
      A3: x in X by XBOOLE_0:def 1;
      x in dom canon_image(X,1) by Lm3,A3; then
      canon_image(X,1).x in canon_image(X,1) .: X by A3,FUNCT_1:def 6;
      hence contradiction by A2,A1;
    end;
    hence thesis;
  end;
  suppose A4: A is not empty;
    A5: the carrier of N c= the carrier of free_magma X by Def9;
    for x being object
st x in the carrier of free_magma X holds x in the carrier of N
    proof
      let x be object;
      assume A6: x in the carrier of free_magma X;
      defpred P[Nat] means for v being Element of free_magma X st
      length v = $1 holds v in the carrier of N;
      A7: for k being Nat st for n being Nat st n < k holds P[n] holds P[k]
      proof
        let k be Nat;
        assume A8: for n being Nat st n < k holds P[n];
        k = 0 or k + 1 > 0+1 by XREAL_1:6; then
        k = 0 or k >= 1 by NAT_1:13; then
        k = 0 or k = 1 or k > 1 by XXREAL_0:1; then
        A9: k = 0 or k = 1 or k + 1 > 1+1 by XREAL_1:6;
        per cases by A9,NAT_1:13;
        suppose k = 0; hence P[k] by Th32; end;
        suppose A10: k = 1;
          for v being Element of free_magma X st length v = 1
          holds v in the carrier of N
          proof
            let v be Element of free_magma X;
            assume A11: length v = 1;
            A12: v = [v`1,v`2] by Th32
            .= [v`1,1] by A11,Def18;
            v`1 in {w`1 where w is Element of free_magma X: length w = 1}
            by A11; then
             v`1 in X by Th30;
            then v`1 in dom canon_image(X,1) & v`1 in X &
            v = canon_image(X,1).(v`1) by A12,Lm3; then
            A13: v in A by A1,FUNCT_1:def 6;
            A c= the carrier of N by Def12;
            hence thesis by A13;
          end;
          hence P[k] by A10;
        end;
        suppose A14: k >= 2;
          for v being Element of free_magma X st length v = k
          holds v in the carrier of N
          proof
            let v be Element of free_magma X;
            assume A15: length v = k; then
            consider v1,v2 be Element of free_magma X such that
            A16: v = v1*v2 & length v1 < length v & length v2 < length v
            by A14,Th34;
            A17: v1 in the carrier of N by A8,A15,A16;
            reconsider v19=v1 as Element of N by A8,A15,A16;
            A18: v2 in the carrier of N by A8,A15,A16;
            reconsider v29=v2 as Element of N by A8,A15,A16;
            N is non empty by A4,Th14; then
            A19: the carrier of N <> {};
            A20: [v1,v2] in [:the carrier of N,the carrier of N:]
            by A17,A18,ZFMISC_1:87;
            v19*v29 = (the multF of N).[v19,v29] by BINOP_1:def 1
            .= ((the multF of free_magma X)||the carrier of N).[v1,v2] by Def9
            .= ((the multF of free_magma X)|
            [:the carrier of N,the carrier of N:]).[v1,v2] by REALSET1:def 2
            .= (the multF of free_magma X).[v1,v2] by A20,FUNCT_1:49
            .= v1*v2 by BINOP_1:def 1;
            hence v in the carrier of N by A16,A19;
          end;
          hence P[k];
        end;
      end;
      A21: for n being Nat holds P[n] from NAT_1:sch 4(A7);
      reconsider v = x as Element of free_magma X by A6;
      reconsider k = length v as Nat;
      P[k] by A21;
      hence x in the carrier of N;
    end; then
    the carrier of free_magma X c= the carrier of N; then
    the carrier of free_magma X = the carrier of N by A5,XBOOLE_0:def 10;
    hence thesis by Th7;
  end;
end;
