reserve G for Abelian add-associative right_complementable right_zeroed
  non empty addLoopStr;
reserve GS for non empty addLoopStr;
reserve F for Field;
reserve F for Field,
  n for Nat,
  D for non empty set,
  d for Element of D,
  B for BinOp of D,
  C for UnOp of D;
reserve x,y for set;
reserve D for non empty set,
  H,G for BinOp of D,
  d for Element of D,
  t1,t2 for Element of n-tuples_on D;
reserve x,y,z for set,
  A for AbGroup;
reserve a for Domain-Sequence,
  i for Element of dom a,
  p for FinSequence;
reserve i for Element of dom a;

theorem Th20:
  for b being BinOps of a, u being UnOps of a st for i holds
    u.i is_an_inverseOp_wrt b.i & b.i is having_a_unity holds
    Frege u is_an_inverseOp_wrt [:b:]
proof
  let b be BinOps of a, u be UnOps of a such that
A1: for i holds u.i is_an_inverseOp_wrt b.i & b.i is having_a_unity;
  defpred P[object,object] means
    ex i st $1 = i & $2 = the_unity_wrt (b.i);
A2: for x being object st x in dom a ex y being object st P[x,y]
  proof
    let x be object;
    assume x in dom a;
    then reconsider i = x as Element of dom a;
    take the_unity_wrt (b.i);
    thus thesis;
  end;
  consider f being Function such that
A3: dom f = dom a &
for x being object st x in dom a holds P[x,f.x] from CLASSES1:sch 1(A2);
  now
    let x be object;
    assume x in dom a;
    then ex i st x = i & f.x = the_unity_wrt (b.i) by A3;
    hence f.x in a.x;
  end;
  then reconsider f as Element of product a by A3,CARD_3:9;
  let x be Element of product a;
A5: now
    let y be object;
    assume y in dom a;
    then reconsider i = y as Element of dom a;
A6: (Frege u).x.i = (u.i).(x.i) & u.i is_an_inverseOp_wrt b.i by A1,Th15;
    ( ex j being Element of dom a st i = j & f.i = the_unity_wrt (b.j))&
    [:b:].(x, (Frege u).x).i = (b.i).(x.i,(Frege u).x.i) by A3,Def8;
    hence [:b:].(x,(Frege u).x).y = f.y by A6;
  end;
  now
    let i;
    ( ex j being Element of dom a st i = j & f.i = the_unity_wrt (b.j))& b
    .i is having_a_unity by A1,A3;
    hence f.i is_a_unity_wrt b.i by SETWISEO:14;
  end;
  then f is_a_unity_wrt [:b:] by Th19;
  then
A7: f = the_unity_wrt [:b:] by BINOP_1:def 8;
A8: now
    let y be object;
    assume y in dom a;
    then reconsider i = y as Element of dom a;
A9: (Frege u).x.i = (u.i).(x.i) & u.i is_an_inverseOp_wrt b.i by A1,Th15;
    ( ex j being Element of dom a st i = j & f.i = the_unity_wrt (b.j))&
    [:b:].(( Frege u).x,x).i = (b.i).((Frege u).x.i,x.i) by A3,Def8;
    hence [:b:].((Frege u).x,x).y = f.y by A9;
  end;
  dom ([:b:].(x,(Frege u).x)) = dom a by CARD_3:9;
  hence [:b:].(x,(Frege u).x) = the_unity_wrt [:b:] by A7,A5,CARD_3:9;
  dom ([:b:].((Frege u).x,x)) = dom a by CARD_3:9;
  hence [:b:].((Frege u).x,x) = the_unity_wrt [:b:] by A7,A8,CARD_3:9;
end;
