reserve C for CategoryStr;
reserve f,f1,f2,f3 for morphism of C;
reserve g1,g2 for morphism of C opp;

theorem Th6:
  C is with_left_identities iff C opp is with_right_identities
  proof
    hereby
      assume
A1:   C is with_left_identities;
      for g1 being morphism of C opp st g1 in the carrier of C opp holds
      ex g being morphism of C opp st g1 |> g & g is right_identity
      proof
        let g1 be morphism of C opp;
        assume
A2:     g1 in the carrier of C opp;
        reconsider f1 = g1 as morphism of C;
        consider f be morphism of C such that
A3:    f |> f1 & f is left_identity by A1,A2;
        reconsider g = f as morphism of C opp;
        take g;
        thus g1 |> g by A3,FUNCT_4:42;
        for g2 being morphism of C opp st g2 |> g holds g2 (*) g = g2
        proof
          let g2 be morphism of C opp;
          reconsider f2 = g2 as morphism of C;
          assume g2 |> g;
          then
A4:      f |> f2 by FUNCT_4:42;
          then f (*) f2 = f2 by A3;
          hence g2 (*) g = g2 by A4,Th3;
        end;
        hence g is right_identity;
      end;
      hence C opp is with_right_identities;
    end;
    assume
A5: C opp is with_right_identities;
    for f1 being morphism of C st f1 in the carrier of C holds
    ex f being morphism of C st f |> f1 & f is left_identity
    proof
      let f1 be morphism of C;
      assume
A6:   f1 in the carrier of C;
      reconsider g1 = f1 as morphism of C opp;
      consider g be morphism of C opp such that
A7:  g1 |> g & g is right_identity by A5,A6;
      reconsider f = g as morphism of C;
      take f;
      thus f |> f1 by A7,FUNCT_4:42;
      for f2 being morphism of C st f |> f2 holds f (*) f2 = f2
      proof
        let f2 be morphism of C;
        reconsider g2 = f2 as morphism of C opp;
        assume
A8:    f |> f2;
        then g2 |> g by FUNCT_4:42;
        then g2 (*) g = g2 by A7;
        hence f (*) f2 = f2 by A8,Th3;
      end;
      hence f is left_identity;
    end;
    hence C is with_left_identities;
  end;
