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

theorem
  for A being transitive with_units non empty AltCatStr holds (id A)" = id A
proof
  let A be transitive with_units non empty AltCatStr;
  set CCA = [:the carrier of A, the carrier of A:];
  consider f being ManySortedFunction of (the Arrows of A), (the Arrows of A)*
  the ObjectMap of (id A) such that
A1: f = the MorphMap of (id A) and
A2: the MorphMap of (id A)" = f""*(the ObjectMap of (id A))" by FUNCTOR0:def 38
;
A3: for i be set st i in CCA holds (id (the Arrows of A)).i is one-to-one
  proof
    let i be set such that
A4: i in CCA;
    id ((the Arrows of A).i) is one-to-one;
    hence thesis by A4,MSUALG_3:def 1;
  end;
  the MorphMap of (id A) = id (the Arrows of A) by FUNCTOR0:def 29;
  then
A5: the MorphMap of (id A) is "1-1" by A3,MSUALG_3:1;
  for i be set st i in CCA holds rng(f.i) = ((the Arrows of A)*the
  ObjectMap of (id A)).i
  proof
    dom (the Arrows of A) = CCA by PARTFUN1:def 2;
    then
A6: (dom (the Arrows of A)) /\ CCA = CCA;
    let i be set such that
A7: i in CCA;
    rng(f.i) = rng ((id (the Arrows of A)).i) by A1,FUNCTOR0:def 29
      .= rng (id ((the Arrows of A).i)) by A7,MSUALG_3:def 1
      .= (the Arrows of A).i
      .= ((the Arrows of A)*(id CCA)).i by A7,A6,FUNCT_1:20
      .= ((the Arrows of A)*the ObjectMap of (id A)).i by FUNCTOR0:def 29;
    hence thesis;
  end;
  then
A8: f is "onto";
  for i being object st i in CCA holds (f"").i = f.i
  proof
    let i be object;
    assume
A9: i in CCA;
    then (f"").i = ((the MorphMap of (id A)).i)" by A1,A5,A8,MSUALG_3:def 4
      .= ((id (the Arrows of A)).i)" by FUNCTOR0:def 29
      .= ((id ((the Arrows of A).i)))" by A9,MSUALG_3:def 1
      .= id ((the Arrows of A).i) by FUNCT_1:45
      .= ((id (the Arrows of A)).i) by A9,MSUALG_3:def 1
      .= f.i by A1,FUNCTOR0:def 29;
    hence thesis;
  end;
  then
A10: f"" = f;
  for i being object st i in CCA holds ((the MorphMap of (id A))*(id CCA)).i
  = (the MorphMap of (id A)).i
  proof
    dom (the MorphMap of (id A)) = CCA by PARTFUN1:def 2;
    then
A11: (dom (the MorphMap of (id A))) /\ CCA = CCA;
    let i be object;
    assume i in CCA;
    hence thesis by A11,FUNCT_1:20;
  end;
  then
A12: (the MorphMap of (id A))*(id CCA) = the MorphMap of (id A);
A13: the ObjectMap of (id A)" = (the ObjectMap of (id A))" by FUNCTOR0:def 38;
  then the ObjectMap of (id A)" = (id CCA)" by FUNCTOR0:def 29
    .= (id CCA) by FUNCT_1:45
    .= the ObjectMap of (id A) by FUNCTOR0:def 29;
  hence thesis by A13,A1,A2,A10,A12,FUNCTOR0:def 29;
end;
