 reserve x for object;
 reserve G for non empty 1-sorted;
 reserve A for Subset of G;
 reserve y,y1,y2,Y,Z for set;
 reserve k for Nat;
 reserve G for Group;
 reserve a,g,h for Element of G;
 reserve A for Subset of G;
reserve G for non empty multMagma,
  A,B,C for Subset of G;
reserve a,b,g,g1,g2,h,h1,h2 for Element of G;

theorem
  A * (B \/ C) = A * B \/ A * C
proof
  thus A * (B \/ C) c= A * B \/ A * C
  proof
    let x be object;
    assume x in A * (B \/ C);
    then consider g1,g2 such that
A1: x = g1 * g2 & g1 in A and
A2: g2 in B \/ C;
    g2 in B or g2 in C by A2,XBOOLE_0:def 3;
    then x in A * B or x in A * C by A1;
    hence thesis by XBOOLE_0:def 3;
  end;
  let x be object;
  assume
A3: x in A * B \/ A * C;
  now
    per cases by A3,XBOOLE_0:def 3;
    suppose
      x in A * B;
      then consider g1,g2 such that
A4:   x = g1 * g2 & g1 in A and
A5:   g2 in B;
      g2 in B \/ C by A5,XBOOLE_0:def 3;
      hence thesis by A4;
    end;
    suppose
      x in A * C;
      then consider g1,g2 such that
A6:   x = g1 * g2 & g1 in A and
A7:   g2 in C;
      g2 in B \/ C by A7,XBOOLE_0:def 3;
      hence thesis by A6;
    end;
  end;
  hence thesis;
end;
