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

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