reserve C for CategoryStr;
reserve f,f1,f2,f3 for morphism of C;
reserve g1,g2 for morphism of C opp;
reserve C,D,E for with_identities CategoryStr;
reserve F for Functor of C,D;
reserve G for Functor of D,E;
reserve f for morphism of C;

theorem
  for C being non empty category holds C ~= alter(Alter(C))
  proof
    let C be non empty category;
    set D = alter(Alter(C));
    reconsider X = the carrier of C as set;
    reconsider I0 = id C as Function of X, X;
A1: I0 = id X by STRUCT_0:def 4;
    reconsider F = id C as Functor of C,D;
    reconsider G = id C as Functor of D,C;
    for f being morphism of C st f is identity holds F.f is identity
    proof
      let f be morphism of C;
      assume
A2:   f is identity;
      F.f = I0.f by Def21
      .= (id X).f by STRUCT_0:def 4
      .= f;
      hence F.f is identity by A2,Th16,Th18;
    end;
    then
A3: F is identity-preserving;
    for f1, f2 being morphism of C st f1 |> f2 holds
    F.f1 |> F.f2 & F.(f1 (*) f2) = (F.f1) (*) (F.f2)
    proof
      let f1, f2 be morphism of C;
      assume
A4:  f1 |> f2;
A5:   F.f1 = I0.f1 by Def21
      .= (id X).f1 by STRUCT_0:def 4
      .= f1;
A6:   F.f2 = I0.f2 by Def21
      .= (id X).f2 by STRUCT_0:def 4
      .= f2;
      hence
A7:  F.f1 |> F.f2 by A4,A5;
      thus F.(f1 (*) f2) = I0.(f1(*)f2) by Def21
      .= (id X).(f1(*)f2) by STRUCT_0:def 4
      .= (the composition of C).(f1,f2) by A4,Def3
      .= (F.f1) (*) (F.f2) by A5,A6,A7,Def3;
    end;
    then F is multiplicative;
    then
A8: F is covariant by A3;
    for f being morphism of D st f is identity holds G.f is identity
    proof
      let f be morphism of D;
      assume
A9:   f is identity;
      G.f = I0.f by Def21
      .= (id X).f by STRUCT_0:def 4
      .= f;
      hence G.f is identity by A9,Th16,Th18;
    end;
    then
A10: G is identity-preserving;
    for f1, f2 being morphism of D st f1 |> f2 holds
    G.f1 |> G.f2 & G.(f1 (*) f2) = (G.f1) (*) (G.f2)
    proof
      let f1, f2 be morphism of D;
      assume
A11:  f1 |> f2;
A12:   G.f1 = I0.f1 by Def21
      .= (id X).f1 by STRUCT_0:def 4
      .= f1;
A13:   G.f2 = I0.f2 by Def21
      .= (id X).f2 by STRUCT_0:def 4
      .= f2;
      hence
A14:  G.f1 |> G.f2 by A11,A12;
      thus G.(f1 (*) f2) = I0.(f1(*)f2) by Def21
      .= (id X).(f1(*)f2) by STRUCT_0:def 4
      .= (the composition of D).(f1,f2) by A11,Def3
      .= (G.f1) (*) (G.f2) by A12,A13,A14,Def3;
    end;
    then G is multiplicative;
    then
A15: G is covariant by A10;
A16: G (*) F = F*G by A8,A15,Def27
    .= id(X /\ X) by A1,FUNCT_1:22
    .= id C by STRUCT_0:def 4;
    F (*) G = G*F by A8,A15,Def27
    .= id(X /\ X) by A1,FUNCT_1:22
    .= id D by STRUCT_0:def 4;
    hence C ~= alter(Alter(C)) by A8,A15,A16;
  end;
