reserve G for non empty addLoopStr;
reserve x for Element of G;
reserve M for non empty MidStr;
reserve p,q,r for Point of M;
reserve w for Function of [:the carrier of M,the carrier of M:], the carrier
  of G;
reserve S for non empty set;
reserve a,b,b9,c,c9,d for Element of S;
reserve w for Function of [:S,S:],the carrier of G;
reserve G for add-associative right_zeroed right_complementable non empty
  addLoopStr;
reserve x for Element of G;
reserve w for Function of [:S,S:],the carrier of G;
reserve G for add-associative right_zeroed right_complementable Abelian non
  empty addLoopStr;
reserve x for Element of G;
reserve w for Function of [:S,S:],the carrier of G;
reserve M for MidSp;
reserve p,q,r,s for Point of M;
reserve G for midpoint_operator add-associative right_zeroed
  right_complementable Abelian non empty addLoopStr;
reserve x,y for Element of G;

theorem Th19:
  for M being non empty MidStr, w being Function of [:the carrier
of M,the carrier of M:],the carrier of G holds w is_atlas_of the carrier of M,G
& w is associating implies for a,b,c,d being Point of M holds (a@b)@(c@
  d) = (a@c)@(b@d)
proof
  let M be non empty MidStr, w be Function of [:the carrier of M,the carrier
  of M:],the carrier of G;
  assume that
A1: w is_atlas_of the carrier of M,G and
A2: w is associating;
  let a,b,c,d be Point of M;
A3: w.(b,a@b) = w.(b,b@a) by A1,A2,Th8
    .= w.(b@a,a) by A2
    .= w.(a@b,a) by A1,A2,Th8;
  set p = (a@b)@(c@d);
A4: w.(c,c@d) = w.(c@d,d) by A2;
A5: w.(b,b@d) = w.(b@d,d) by A2;
  w.(c,a@c) = w.(c,c@a) by A1,A2,Th8
    .= w.(c@a,a) by A2
    .= w.(a@c,a) by A1,A2,Th8;
  then Double w.(a@c,c@d) = w.(a,d) by A1,A4,Th14
    .= -w.(d,a) by A1,Th4
    .= -Double w.(b@d,a@b) by A1,A5,A3,Th14
    .= Double -w.(b@d,a@b) by Th12
    .= Double w.(a@b,b@d) by A1,Th4;
  then w.(a@c,c@d) = w.(a@b,b@d) by Th17;
  then
A6: w.(a@c,p) + w.(p,c@d) = w.(a@b,b@d) by A1
    .= w.(p,b@d) + w.(a@b,p) by A1;
  w.(a@b,p) = w.(p,c@d) by A2;
  then w.(a@c,p) = w.(p,b@d) by A6,RLVECT_1:8;
  hence thesis by A2;
end;
