reserve m,n for Nat;
reserve i,j for Integer;
reserve S for non empty addMagma;
reserve r,r1,r2,s,s1,s2,t,t1,t2 for Element of S;
reserve G for addGroup-like non empty addMagma;
reserve e,h for Element of G;
reserve G for addGroup;
reserve f,g,h for Element of G;
reserve u for UnOp of G;
reserve A for Abelian addGroup;
reserve a,b for Element of A;
reserve x for object;
reserve y,y1,y2,Y,Z for set;
reserve k for Nat;
reserve G for addGroup;
reserve a,g,h for Element of G;
reserve A for Subset of G;
reserve G for non empty addMagma,
  A,B,C for Subset of G;
reserve a,b,g,g1,g2,h,h1,h2 for Element of G;
reserve G for addGroup-like non empty addMagma;
reserve h,g,g1,g2 for Element of G;
reserve A for Subset of G;
reserve H for Subgroup of G;
reserve h,h1,h2 for Element of H;
reserve G,G1,G2,G3 for addGroup;
reserve a,a1,a2,b,b1,b2,g,g1,g2 for Element of G;
reserve A,B for Subset of G;
reserve H,H1,H2,H3 for Subgroup of G;
reserve h,h1,h2 for Element of H;

theorem Th52:
  A <> {} & (for g1,g2 st g1 in A & g2 in A holds g1 + g2 in A) &
(for g st g in A holds -g in A) implies ex H being strict Subgroup of G st the
  carrier of H = A
proof
  assume that
A1: A <> {} and
A2: for g1,g2 st g1 in A & g2 in A holds g1 + g2 in A and
A3: for g st g in A holds -g in A;
  reconsider D = A as non empty set by A1;
  set o = (the addF of G)||A;
A4: dom o = dom(the addF of G) /\ [:A,A:] by RELAT_1:61;
  dom(the addF of G) = [:the carrier of G,the carrier of G:] by FUNCT_2:def 1;
  then
A5: dom o = [:A,A:] by A4,XBOOLE_1:28;
  rng o c= A
  proof
    let x be object;
    assume x in rng o;
    then consider y being object such that
A6: y in dom o and
A7: o.y = x by FUNCT_1:def 3;
    consider y1,y2 being object such that
A8: [y1,y2] = y by A4,A6,RELAT_1:def 1;
A9: y1 in A & y2 in A by A5,A6,A8,ZFMISC_1:87;
    reconsider y1,y2 as Element of G by A4,A6,A8,ZFMISC_1:87;
    x = y1 + y2 by A6,A7,A8,FUNCT_1:47;
    hence thesis by A2,A9;
  end;
  then reconsider o as BinOp of D by A5,FUNCT_2:def 1,RELSET_1:4;
  set H = addMagma (# D,o #);
A10: now
    let g1,g2;
    let h1,h2 be Element of H;
A11: h1 + h2 = ((the addF of G)||A).[h1,h2];
    assume g1 = h1 & g2 = h2;
    hence g1 + g2 = h1 + h2 by A11,FUNCT_1:49;
  end;
  H is addGroup-like
  proof
    set a = the Element of H;
    reconsider x = a as Element of G by Lm1;
    -x in A by A3;
    then x + -x in A by A2;
    then reconsider t = 0_G as Element of H by Def5;
    take t;
    let a be Element of H;
    reconsider x = a as Element of G by Lm1;
    thus a + t = x + 0_G by A10
      .= a by Def4;
    thus t + a = 0_G + x by A10
      .= a by Def4;
    reconsider s = -x as Element of H by A3;
    take s;
    thus a + s = x + -x by A10
      .= t by Def5;
    thus s + a = -x + x by A10
      .= t by Def5;
  end;
  then reconsider H as addGroup-like non empty addMagma;
  reconsider H as strict Subgroup of G by DefA5;
  take H;
  thus thesis;
end;
