reserve i, j, k, c, m, n for Nat,
  a, x, y, z, X, Y for set,
  D, E for non empty set,
  R for Relation,
  f, g for Function,
  p, q for FinSequence;

theorem Th44:
  for f being non empty quasi_total Element of HFuncs D,
     F being with_the_same_arity FinSequence of HFuncs D
 st arity f = len F & F is non empty &
 (for h being Element of HFuncs D st h in rng F holds
  h is quasi_total non empty)
  holds f*<:F:> is non empty quasi_total Element of HFuncs D &
  dom (f*<:F:>) = (arity F)-tuples_on D
proof
  set X = D;
  let f being non empty quasi_total Element of HFuncs X, F being
  with_the_same_arity FinSequence of HFuncs X such that
A1: arity f = len F and
A2: F is non empty and
A3: for h being Element of HFuncs X st h in rng F holds h is quasi_total
  non empty;
  set n = arity F;
  set fF = f*<:F:>;
A4: dom fF c= n-tuples_on X by Th41;
A5: n-tuples_on X c= dom fF
  proof
    let x be object;
A6: product rngs F c= (len F)-tuples_on X
    proof
      let p be object;
A7:   dom rngs F = dom F by FUNCT_6:def 3;
      assume p in product rngs F;
      then consider g being Function such that
A8:   p = g and
A9:   dom g = dom rngs F and
A10:  for x being object st x in dom rngs F holds g.x in (rngs F).x by
CARD_3:def 5;
A11:  dom F = Seg len F by FINSEQ_1:def 3;
      then reconsider g as FinSequence by A9,A7,FINSEQ_1:def 2;
      rng g c= X
      proof
        let x be object;
        assume x in rng g;
        then consider d being object such that
A12:    d in dom g and
A13:    g.d = x by FUNCT_1:def 3;
A14:    g.d in (rngs F).d by A9,A10,A12;
        reconsider d as Element of NAT by A12;
        reconsider Fd = F.d as Element of HFuncs X by A9,A7,A12,
FINSEQ_2:11;
A15:    rng Fd c= X by RELAT_1:def 19;
        (rngs F).d = rng Fd by A9,A7,A12,FUNCT_6:def 3;
        hence thesis by A13,A14,A15;
      end;
      then reconsider g as FinSequence of X by FINSEQ_1:def 4;
      len g = len F by A9,A7,A11,FINSEQ_1:def 3;
      then p is Element of (len F)-tuples_on X by A8,FINSEQ_2:92;
      hence thesis;
    end;
    rng <:F:> c= product rngs F by FUNCT_6:29;
    then
A16: rng <:F:> c= (len F)-tuples_on X by A6;
A17: dom f = (arity f)-tuples_on X by Th21;
A18: n-tuples_on X c= dom <:F:>
    proof
      let x be object;
A19:  dom doms F = dom F by FUNCT_6:def 2;
      assume
A20:  x in n-tuples_on X;
A21:  now
        let y be set;
        assume y in rng doms F;
        then consider w being object such that
A22:    w in dom doms F and
A23:    (doms F).w = y by FUNCT_1:def 3;
A24:    w in dom F by A19,A22;
        then reconsider w as Element of NAT;
        reconsider Fw = F.w as Element of HFuncs X by A24,FINSEQ_2:11;
A25:    (doms F).w = dom (Fw) by A19,A22,FUNCT_6:def 2;
A26:    Fw in rng F by A24,FUNCT_1:3;
        then Fw is non empty quasi_total by A3;
        then dom (Fw) = (arity Fw)-tuples_on X by Th21;
        hence x in y by A20,A23,A25,A26,Def4;
      end;
      consider z being object such that
A27:  z in dom F by A2,XBOOLE_0:def 1;
      z in dom doms F by A27,A19;
      then
A28:  rng doms F <> {} by RELAT_1:42;
      dom <:F:> = meet doms F by FUNCT_6:29
        .= meet rng doms F by FUNCT_6:def 4;
      hence thesis by A28,A21,SETFAM_1:def 1;
    end;
    assume
A29: x in n-tuples_on X;
    then <:F:>.x in rng <:F:> by A18,FUNCT_1:3;
    hence thesis by A1,A29,A18,A17,A16,FUNCT_1:11;
  end;
  then
A30: dom fF = n-tuples_on X by A4,XBOOLE_0:def 10;
A31: rng fF c= X by Th41;
  (arity F)-tuples_on X c= X* by FINSEQ_2:142;
  then dom fF c= X* by A4;
  then fF is Relation of X*, X by A31,RELSET_1:4;
  then fF is Element of PFuncs(X*, X) by PARTFUN1:45;
  then fF in HFuncs X;
  then reconsider fF as Element of HFuncs X;
  fF is quasi_total
  proof
    let x, y be FinSequence of X such that
A32: len x = len y and
A33: x in dom fF;
    len x = n by A4,A33,CARD_1:def 7;
    then y is Element of n-tuples_on X by A32,FINSEQ_2:92;
    hence y in dom fF by A30;
  end;
  hence f*<:F:> is non empty quasi_total Element of HFuncs X by A5;
  thus thesis by A4,A5,XBOOLE_0:def 10;
end;
