reserve U1,U2,U3 for Universal_Algebra,
  m,n for Nat,
  a for set,
  A for non empty set,
  h for Function of U1,U2;

theorem Th4:
  for I be set, C be Subset of I, M be ManySortedSet of I holds (M|
  C)# = M#|(C*)
proof
  let I be set, C be Subset of I, M be ManySortedSet of I;
  dom (M# ) = I* by PARTFUN1:def 2;
  then dom (M#|(C*)) = C* by Th2,RELAT_1:62;
  then reconsider D = M#|(C*) as ManySortedSet of C* by PARTFUN1:def 2;
A1: C* c= I* by Th2;
  for i being Element of C* holds (M#|(C*)).i = product((M|C)*i)
  proof
    let i be Element of C*;
A2: rng i c= C;
    i in C*;
    then
A3: i in dom D by PARTFUN1:def 2;
A4: i in I* by A1;
    for a being object holds
    a in (D.i) iff ex g be Function st a = g & dom g = dom ((M|C)*i) &  for
    a being object st a in dom ((M|C)*i) holds g.a in ((M|C)*i).a
    proof let a be object;
      hereby
        assume a in (D.i);
        then a in M#.i by A3,FUNCT_1:47;
        then a in product(M*i) by A4,FINSEQ_2:def 5;
        then consider g be Function such that
A5:     a = g and
A6:     dom g = dom (M*i) and
A7:     for x be object st x in dom (M*i) holds g.x in (M*i).x
          by CARD_3:def 5;
        take g;
        thus a = g by A5;
        rng i c= C;
        hence dom g = dom ((M|C)*i) by A6,Th1;
        thus for a being object st a in dom ((M|C)*i) holds g.a in ((M|C)*i).a
        proof
A8:       rng i c= C;
          let a be object;
          assume a in dom ((M|C)*i);
          then a in dom (M*i) by A8,Th1;
          then g.a in (M*i).a by A7;
          hence thesis by A8,Th1;
        end;
      end;
      given g be Function such that
A9:   a = g and
A10:  dom g = dom ((M|C)*i) and
A11:  for a being object st a in dom ((M|C)*i) holds g.a in ((M|C)*i).a;
A12:  for a being object st a in dom (M*i) holds g.a in (M*i).a
      proof
        let a be object;
        assume a in dom (M*i);
        then a in dom ((M|C)*i) by A2,Th1;
        then g.a in ((M|C)*i).a by A11;
        hence thesis by A2,Th1;
      end;
      dom g = dom (M*i) by A2,A10,Th1;
      then a in product(M*i) by A9,A12,CARD_3:def 5;
      then a in M#.i by A4,FINSEQ_2:def 5;
      hence thesis by A3,FUNCT_1:47;
    end;
    hence thesis by CARD_3:def 5;
  end;
  hence (M|C)# = D by FINSEQ_2:def 5
    .= M#|(C*);
end;
