reserve A,B,C for Ordinal,
  K,L,M,N for Cardinal,
  x,y,y1,y2,z,u for object,X,Y,Z,Z1,Z2 for set,
  n for Nat,
  f,f1,g,h for Function,
  Q,R for Relation;
reserve ff for Cardinal-Function;
reserve F,G for Cardinal-Function;

theorem
  F c= G & not 0 in rng G implies Product F c= Product G
proof
  assume
A1: F c= G;
  then
A2: dom F c= dom G by GRFUNC_1:2;
  assume
A3: not 0 in rng G;
  deffunc f(Function) = $1|dom F;
  consider f such that
A4: dom f = product G & for g st g in product G holds f.g = f(g)
  from FUNCT_5:sch 1;
  product F c= rng f
  proof
    let x be object;
    assume x in product F;
    then consider g such that
A5: x = g and
A6: dom g = dom F and
A7: for x being object st x in dom F holds g.x in F.x by Def5;
A8: product G <> {} by A3,Th26;
    set y = the Element of product G;
    consider h such that
    y = h
    and dom h = dom G and
A9: for x being object st x in dom G holds h.x in G.x by A8,Def5;
    deffunc f(object) = g.$1;
    deffunc g(object) = h.$1;
    defpred C[object] means $1 in dom F;
    consider f1 such that
A10: dom f1 = dom G & for x being object st x in dom G holds
    (C[x] implies f1.x = f(x)) & (not C[x] implies f1.x = g(x))
    from PARTFUN1:sch 1;
    now
      let z be object such that
A11:  z in dom G;
A12:  now
        assume
A13:    z in dom F;
        then
A14:    f1.z = g.z by A10,A11;
        g.z in F.z by A7,A13;
        hence f1.z in G.z by A1,A13,A14,GRFUNC_1:2;
      end;
      not z in dom F implies f1.z = h.z by A10,A11;
      hence f1.z in G.z by A9,A11,A12;
    end;
    then
A15: f1 in product G by A10,Def5;
    then
A16: f.f1 = f1|dom F by A4;
A17: dom(f1|dom F) = dom F by A2,A10,RELAT_1:62;
    now
      let z be object;
      assume
A18:  z in dom F;
      then (f1|dom F).z = f1.z by A17,FUNCT_1:47;
      hence (f1|dom F).z = g.z by A2,A10,A18;
    end;
    then f.f1 = g by A6,A16,A17,FUNCT_1:2;
    hence thesis by A4,A5,A15,FUNCT_1:def 3;
  end;
  hence thesis by A4,CARD_1:12;
end;
