reserve x,y,z, X,Y,Z for set,
  n for Element of NAT;
reserve A for set,
  D for non empty set,
  a,b,c,l,r for Element of D,
  o,o9 for BinOp of D,
  f,g,h for Function of A,D;
reserve G for non empty multMagma;
reserve A for non empty set,
  a for Element of A,
  p for FinSequence of A,
  m1,m2 for Multiset of A;
reserve p,q for FinSequence of A;
reserve fm for Element of finite-MultiSet_over A;
reserve a,b,c for Element of D;

theorem Th47:
  o is commutative implies o.:[:X,Y:] = o.:[:Y,X:]
proof
  assume
A1: o.(a,b) = o.(b,a);
  now
    let X,Y;
    thus o.:[:X,Y:] c= o.:[:Y,X:]
    proof
      let x be object;
      assume x in o.:[:X,Y:];
      then consider y being object such that
A2:   y in dom o and
A3:   y in [:X,Y:] and
A4:   x = o.y by FUNCT_1:def 6;
      reconsider y as Element of [:D,D:] by A2;
      y = [y`1,y`2] by MCART_1:21;
      then y`1 in X & y`2 in Y by A3,ZFMISC_1:87;
      then
A5:   [y`2,y`1] in [:Y,X:] by ZFMISC_1:87;
A6:   dom o = [:D,D:] & o.(y`1,y`2) = o.(y`2,y`1 ) by A1,FUNCT_2:def 1;
      x = o.(y`1,y`2) by A4,MCART_1:21;
      hence thesis by A6,A5,FUNCT_1:def 6;
    end;
  end;
  hence o.:[:X,Y:] c= o.:[:Y,X:] & o.:[:Y,X:] c= o.:[:X,Y:];
end;
