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 Th39:
    for C being composable associative with_identities CategoryStr
    for f,g,h being Element of Mor(C)
    st (SourceMap(C)).h = (TargetMap(C)).g &
    (SourceMap(C)).g = (TargetMap(C)).f
    holds (CompMap(C)).(h,(CompMap(C)).(g,f)) =
    (CompMap(C)).((CompMap(C)).(h,g),f)
    proof
      let C be composable associative with_identities CategoryStr;
      let f,g,h be Element of Mor(C);
      assume
A1:   (SourceMap(C)).h = (TargetMap(C)).g &
      (SourceMap(C)).g = (TargetMap(C)).f;
      per cases;
      suppose
A2:     C is empty;
        thus (CompMap(C)).(h,(CompMap(C)).(g,f))
        = (CompMap(C)).[h,(CompMap(C)).(g,f)] by BINOP_1:def 1
        .= {} by A2
        .= (CompMap(C)).[(CompMap(C)).(h,g),f] by A2
        .= (CompMap(C)).((CompMap(C)).(h,g),f) by BINOP_1:def 1;
      end;
      suppose
A3:     not C is empty;
A4:    [h,g] in dom(CompMap(C)) by Th37,A3,A1;
        then
A5:    h |> g;
A6:    [g,f] in dom(CompMap(C)) by Th37,A3,A1;
        then
A7:    g |> f;
A8:     h |> g(*)f by A7,A5,Lm3;
A9:     h(*)g |> f by A7,A5,Lm3;
A10:     (CompMap(C)).(g,f) = (the composition of C).[g,f] by BINOP_1:def 1
        .= g(*)f by A6,Def2,Lm4;
A11:     (CompMap(C)).(h,g) = (the composition of C).[h,g] by BINOP_1:def 1
        .= h(*)g by A4,Def2,Lm4;
        thus (CompMap(C)).(h,(CompMap(C)).(g,f))
        = (CompMap(C)).[h,g(*)f] by A10,BINOP_1:def 1
        .= h(*)(g(*)f) by A8,Lm4
        .= (h(*)g)(*)f by A5,A7,Lm5
        .= (CompMap(C)).[h(*)g,f] by A9,Lm4
        .= (CompMap(C)).((CompMap(C)).(h,g),f) by A11,BINOP_1:def 1;
      end;
    end;
