reserve S,T,W,Y for RealNormSpace;
reserve f,f1,f2 for PartFunc of S,T;
reserve Z for Subset of S;
reserve i,n for Nat;

theorem Th11:
  for X,Y,Z be RealNormSpace,
          f be PartFunc of [:X,Y:],Z,
          U be Subset of [:X,Y:],
          I be Function of [:Y,X:],[:X,Y:]
   st ( for y be Point of Y,x be Point of X
        holds I.(y,x) = [x,y] )
  holds
    for a be Point of X, b be Point of Y,
        u be Point of [:X,Y:],
        v be Point of [:Y,X:]
     st u in U & u = [a,b] & v = [b,a]
    holds
      f*reproj1(u) = (f*I)*reproj2(v)
    & f*reproj2(u) = (f*I)*reproj1(v)
  proof
    let X,Y,Z be RealNormSpace,
            f be PartFunc of [:X,Y:],Z,
            U be Subset of [:X,Y:],
            I be Function of [:Y,X:],[:X,Y:];

    assume
    A1: for y be Point of Y,x be Point of X
        holds I.(y,x) = [x,y];

    let a be Point of X, b be Point of Y,
        u be Point of [:X,Y:],
        v be Point of [:Y,X:];

    assume
    A2: u in U & u = [a,b] & v = [b,a];

    A3: for x be object holds
        x in dom(f * reproj1(u)) iff x in dom((f*I) * reproj2(v))
    proof
      let x be object;
      A4: x in dom(f * reproj1(u))
       iff x in dom reproj1(u) & (reproj1(u)).x in dom f by FUNCT_1:11;

      A5: x in dom(f * reproj1(u)) implies x in dom((f*I) * reproj2(v))
      proof
        assume
        A6: x in dom(f * reproj1(u)); then
        A7: x in the carrier of X;
        reconsider x as Point of X by A6;
        A8: x in dom reproj2(v) by A7,FUNCT_2:def 1;

        (reproj2(v)).x = [(v `1),x] by NDIFF_7:def 2
                      .= [b, x] by A2;

        then
        A9: I.((reproj2(v)).x) = I.(b,x)
                              .= [x,(u `2)] by A1,A2
                              .= (reproj1(u)).x by NDIFF_7:def 1;
        (reproj2(v)).x in the carrier of [:Y,X:]; then
        (reproj2(v)).x in dom I by FUNCT_2:def 1; then
        (reproj2(v)).x in dom(f*I) by A4,A6,A9,FUNCT_1:11;
        hence thesis by A8,FUNCT_1:11;
      end;

      x in dom((f*I) * reproj2(v)) implies x in dom(f * reproj1(u))
      proof
        assume
        A10: x in dom ((f*I) * reproj2(v)); then
        A11: x in dom reproj2(v)
          & (reproj2(v)).x in dom(f*I) by FUNCT_1:11;
        reconsider x as Point of X by A10;

        (reproj2(v)).x = [(v `1),x] by NDIFF_7:def 2
                      .= [b, x] by A2;

        then
        I.( (reproj2(v)).x) = I.(b,x)
                           .= [x,(u `2)] by A1,A2
                           .= (reproj1(u)).x by NDIFF_7:def 1;
        then
        A12: (reproj1(u)).x in dom f by A11,FUNCT_1:11;
        dom(reproj1(u)) = the carrier of X by FUNCT_2:def 1;
        hence thesis by A12,FUNCT_1:11;
      end;
      hence thesis by A5;
    end;

    A13: for y be object holds
         y in dom(f * reproj2(u)) iff y in dom((f*I) * reproj1(v))
    proof
      let y be object;
      A14: y in dom(f * reproj2(u))
       iff y in dom reproj2(u) & (reproj2(u)).y in dom f by FUNCT_1:11;
      A15: y in dom(f * reproj2(u)) implies y in dom((f*I) * reproj1(v))
      proof
        assume
        A16: y in dom(f * reproj2(u)); then
        A17: y in the carrier of Y;
        reconsider y as Point of Y by A16;
        A18: y in dom reproj1(v) by A17,FUNCT_2:def 1;

        (reproj1(v)).y = [y,(v `2)] by NDIFF_7:def 1
                      .= [y,a] by A2;
        then
        A19: I.((reproj1(v)).y) = I.(y,a)
                                .= [(u `1),y] by A1,A2
                                .= (reproj2(u)).y by NDIFF_7:def 2;
        (reproj1(v)).y in the carrier of [:Y,X:]; then
        (reproj1(v)).y in dom I by FUNCT_2:def 1; then
        (reproj1(v)).y in dom(f*I) by A14,A16,A19,FUNCT_1:11;

        hence thesis by A18,FUNCT_1:11;
      end;

      y in dom((f*I) * reproj1(v)) implies y in dom(f * reproj2(u))
      proof
        assume
        A20: y in dom((f*I) * reproj1(v)); then
        A21: y in dom reproj1(v) & (reproj1(v)).y in dom (f*I) by FUNCT_1:11;
        reconsider y as Point of Y by A20;

        (reproj1(v)).y = [y,(v `2)] by NDIFF_7:def 1
                       .= [y,a] by A2;
        then
        I.((reproj1(v)).y) = I.(y,a)
                           .= [(u `1),y] by A1,A2
                           .= (reproj2(u)).y by NDIFF_7:def 2;
        then
        A22: (reproj2(u)).y in dom f by A21,FUNCT_1:11;
        dom(reproj2(u)) = the carrier of Y by FUNCT_2:def 1;
        hence thesis by A22,FUNCT_1:11;
      end;
      hence thesis by A15;
    end;

    for x be object st x in dom(f * reproj1(u))
    holds (f * reproj1(u)).x = ((f*I) * reproj2(v)).x
    proof
      let x be object;
      assume
      A23: x in dom(f * reproj1(u)); then
      reconsider x as Point of X;
      A24: (reproj1(u)).x = [x,(u`2)] by NDIFF_7:def 1
                         .= I.(b,x) by A1,A2
                         .= I.[v`1,x] by A2
                         .= I.((reproj2(v)).x) by NDIFF_7:def 2;
      (reproj2(v)).x in the carrier of [:Y,X:]; then
      A25: (reproj2(v)).x in dom I by FUNCT_2:def 1;
      A26: dom(reproj2(v)) = the carrier of X by FUNCT_2:def 1;

      (f * reproj1(u)).x
        = f.(I.((reproj2(v)).x)) by A23,A24,FUNCT_1:12
       .= (f*I).((reproj2(v)).x) by A25,FUNCT_1:13
       .= ((f*I)*reproj2(v)).x by A26,FUNCT_1:13;
      hence thesis;
    end;
    hence f * reproj1(u) = (f*I) * reproj2(v) by A3,FUNCT_1:2,TARSKI:2;

    for y be object st y in dom(f * reproj2(u))
    holds (f * reproj2(u)).y = ((f*I) * reproj1(v)).y
    proof
      let y be object;
      assume
      A27: y in dom(f * reproj2(u)); then
      reconsider y as Point of Y;
      A28: (reproj2(u)).y = [(u`1),y] by NDIFF_7:def 2
                         .= I.(y,a) by A1,A2
                         .= I.[y,v`2] by A2
                         .= I.((reproj1(v)).y) by NDIFF_7:def 1;

      (reproj1(v)).y in the carrier of [:Y,X:]; then
      A29: (reproj1(v)).y in dom I by FUNCT_2:def 1;
      A30: dom(reproj1(v)) = the carrier of Y by FUNCT_2:def 1;

      (f * reproj2(u)).y
        = f.(I.((reproj1(v)).y)) by A27,A28,FUNCT_1:12
       .= (f*I).((reproj1(v)).y) by A29,FUNCT_1:13
       .= ((f*I) * reproj1(v)).y by A30,FUNCT_1:13;
      hence thesis;
    end;
    hence f*reproj2(u) = (f*I)*reproj1(v) by A13,FUNCT_1:2,TARSKI:2;
  end;
