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

theorem
  for A being non empty AltCatStr, B being non empty SubCatStr of A
  holds B is full iff incl B is full
proof
  let A be non empty AltCatStr, B be non empty SubCatStr of A;
  hereby
    ex I29 being non empty set, B9 being ManySortedSet of I29, f9 being
Function of [:the carrier of B,the carrier of B:],I29 st the ObjectMap of incl
B = f9 & (the Arrows of A) = B9 & the MorphMap of incl B is ManySortedFunction
    of (the Arrows of B), B9*f9 by FUNCTOR0:def 3;
    then reconsider
    f = the MorphMap of incl B as ManySortedFunction of (the Arrows
    of B), (the Arrows of A)*the ObjectMap of incl B;
    set I = [:the carrier of B, the carrier of B:];
    the carrier of B c= the carrier of A & dom(the Arrows of A) = [:the
    carrier of A, the carrier of A:] by ALTCAT_2:def 11,PARTFUN1:def 2;
    then
A1: dom(the Arrows of A) /\ I = I by XBOOLE_1:28,ZFMISC_1:96;
    assume
A2: B is full;
    f is "onto"
    proof
      let i be set such that
A3:   i in I;
      (the Arrows of B) = (the Arrows of A)||the carrier of B by A2;
      then
A4:   (the Arrows of B).i = (the Arrows of A).i by A3,FUNCT_1:49;
      rng (f.i) = rng ((id the Arrows of B).i) by FUNCTOR0:def 28
        .= rng (id ((the Arrows of B).i)) by A3,MSUALG_3:def 1
        .= (the Arrows of A).i by A4
        .= ((the Arrows of A)*id I).i by A1,A3,FUNCT_1:20
        .= ((the Arrows of A)*the ObjectMap of incl B).i by FUNCTOR0:def 28;
      hence thesis;
    end;
    hence incl B is full;
  end;
  set I = [:the carrier of B, the carrier of B:];
A5: the carrier of B c= the carrier of A by ALTCAT_2:def 11;
  then
A6: I c= [:the carrier of A, the carrier of A:] by ZFMISC_1:96;
  dom(the Arrows of A) = [:the carrier of A, the carrier of A:] by
PARTFUN1:def 2;
  then
A7: dom(the Arrows of A) /\ I = I by A5,XBOOLE_1:28,ZFMISC_1:96;
  then dom((the Arrows of A)|(I qua set)) = I by RELAT_1:61;
  then reconsider
  XX = ((the Arrows of A)||the carrier of B) as ManySortedSet of I
  by PARTFUN1:def 2;
  assume
A8: incl B is full;
A9: XX c= the Arrows of B
  proof
    let i be object such that
A10: i in I;
    let x be object;
    assume
A11: x in XX.i;
    x in (the Arrows of B).i
    proof
      consider f being ManySortedFunction of (the Arrows of B), (the Arrows of
      A)*the ObjectMap of incl B such that
A12:  f = the MorphMap of incl B and
A13:  f is "onto" by A8;
      f = id the Arrows of B by A12,FUNCTOR0:def 28;
      then
A14:  rng ((id the Arrows of B).i) = ((the Arrows of A)*the ObjectMap of
      incl B).i by A10,A13
        .= ((the Arrows of A)*id I).i by FUNCTOR0:def 28
        .= (the Arrows of A).i by A7,A10,FUNCT_1:20;
      consider y,z being object such that
      y in the carrier of A and
      z in the carrier of A and
A15:  i = [y,z] by A6,A10,ZFMISC_1:84;
      y in (the carrier of B) & z in (the carrier of B) by A10,A15,ZFMISC_1:87;
      then
A16:  XX.(y,z) = (the Arrows of A).(y,z) by A5,ALTCAT_1:5;
      rng ((id the Arrows of B).i) = rng (id ((the Arrows of B).i)) by A10,
MSUALG_3:def 1
        .= (the Arrows of B).i;
      hence thesis by A11,A15,A16,A14;
    end;
    hence thesis;
  end;
  the Arrows of B c= XX
  proof
    let i be object;
    assume
A17: i in I;
    then consider y,z being object such that
    y in the carrier of A and
    z in the carrier of A and
A18: i = [y,z] by A6,ZFMISC_1:84;
    y in the carrier of B & z in the carrier of B by A17,A18,ZFMISC_1:87;
    then
A19: XX.(y,z) = (the Arrows of A).(y,z) by A5,ALTCAT_1:5;
    let x be object;
    assume
A20: x in (the Arrows of B).i;
    the Arrows of B cc= the Arrows of A by ALTCAT_2:def 11;
    then (the Arrows of B).(y,z) c= (the Arrows of A).(y,z) by A17,A18;
    hence thesis by A18,A20,A19;
  end;
  hence the Arrows of B = (the Arrows of A)||the carrier of B by A9,PBOOLE:146;
end;
