reserve X,Y for set;
reserve Z for non empty set;

theorem Th7:
  for C1 being non empty AltGraph, C2,C3 being non empty reflexive
AltGraph, F being feasible FunctorStr over C1,C2, G being FunctorStr over C2,C3
  st F is faithful & G is faithful holds G*F is faithful
proof
  let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph, F be
  feasible FunctorStr over C1,C2, G be FunctorStr over C2,C3 such that
A1: F is faithful and
A2: G is faithful;
  set MMG = the MorphMap of G;
A3: MMG is "1-1" by A2;
  set MMF = the MorphMap of F;
  set CC2 = [:the carrier of C2,the carrier of C2:];
  set CC1 = [:the carrier of C1,the carrier of C1:];
  reconsider MMGF = the MorphMap of G*F as ManySortedFunction of CC1;
  reconsider OMF = the ObjectMap of F as Function of CC1,CC2;
A4: MMGF = (MMG*OMF)**MMF by FUNCTOR0:def 36;
A5: MMF is "1-1" by A1;
  for i be set st i in CC1 holds (MMGF.i) is one-to-one
  proof
    let i be set;
    assume
A6: i in CC1;
    then i in dom ((MMG*OMF)**MMF) by PARTFUN1:def 2;
    then
A7: MMGF.i = ((MMG*OMF).i)*(MMF.i) by A4,PBOOLE:def 19
      .= (MMG.(OMF.i))*(MMF.i) by A6,FUNCT_2:15;
    OMF.i in CC2 by A6,FUNCT_2:5;
    then
A8: MMG.(OMF.i) is one-to-one by A3,MSUALG_3:1;
    MMF.i is one-to-one by A5,A6,MSUALG_3:1;
    hence thesis by A7,A8;
  end;
  hence the MorphMap of G*F is "1-1" by MSUALG_3:1;
end;
