reserve x,y,X,Y for set;
reserve C for non empty set;
reserve c for Element of C;
reserve f,f1,f2,f3,g,g1 for PartFunc of C,COMPLEX;
reserve r1,r2,p1 for Real;
reserve r,q,cr1,cr2 for Complex;

theorem Th52:
  (f1(#)f2)|X = f1|X (#) f2|X & (f1(#)f2)|X = f1|X (#) f2 & (f1(#)
  f2)|X = f1 (#) f2|X
proof
A1: now
    let c;
    assume
A2: c in dom ((f1(#)f2)|X);
    then
A3: c in dom (f1(#)f2) /\ X by RELAT_1:61;
    then
A4: c in X by XBOOLE_0:def 4;
A5: c in dom (f1(#)f2) by A3,XBOOLE_0:def 4;
    then
A6: c in dom f1 /\ dom f2 by Th3;
    then c in dom f2 by XBOOLE_0:def 4;
    then c in dom f2 /\ X by A4,XBOOLE_0:def 4;
    then
A7: c in dom (f2|X) by RELAT_1:61;
    c in dom f1 by A6,XBOOLE_0:def 4;
    then c in dom f1 /\ X by A4,XBOOLE_0:def 4;
    then
A8: c in dom (f1|X) by RELAT_1:61;
    then c in dom (f1|X) /\ dom (f2|X) by A7,XBOOLE_0:def 4;
    then
A9: c in dom ((f1|X) (#) (f2|X)) by Th3;
    thus ((f1(#)f2)|X)/.c = (f1(#)f2)/.c by A2,PARTFUN2:15
      .= (((f1/.c))) *(((f2/.c))) by A5,Th3
      .= ((f1|X)/.c) *(((f2/.c))) by A8,PARTFUN2:15
      .= ((f1|X)/.c) *((f2|X)/.c) by A7,PARTFUN2:15
      .= ((f1|X)(#)(f2|X))/.c by A9,Th3;
  end;
  dom ((f1(#)f2)|X) = dom (f1(#)f2) /\ X by RELAT_1:61
    .= dom f1 /\ dom f2 /\ (X /\ X) by Th3
    .= dom f1 /\ (dom f2 /\ (X /\ X)) by XBOOLE_1:16
    .= dom f1 /\ (dom f2 /\ X /\ X) by XBOOLE_1:16
    .= dom f1 /\ (X /\ dom (f2|X)) by RELAT_1:61
    .= dom f1 /\ X /\ dom (f2|X) by XBOOLE_1:16
    .= dom (f1|X) /\ dom (f2|X) by RELAT_1:61
    .= dom ((f1|X)(#)(f2|X)) by Th3;
  hence (f1(#)f2)|X = f1|X (#) f2|X by A1,PARTFUN2:1;
A10: now
    let c;
    assume
A11: c in dom ((f1(#)f2)|X);
    then
A12: c in dom (f1(#)f2) /\ X by RELAT_1:61;
    then
A13: c in X by XBOOLE_0:def 4;
A14: c in dom (f1(#)f2) by A12,XBOOLE_0:def 4;
    then
A15: c in dom f1 /\ dom f2 by Th3;
    then c in dom f1 by XBOOLE_0:def 4;
    then c in dom f1 /\ X by A13,XBOOLE_0:def 4;
    then
A16: c in dom (f1|X) by RELAT_1:61;
    c in dom f2 by A15,XBOOLE_0:def 4;
    then c in dom (f1|X) /\ dom f2 by A16,XBOOLE_0:def 4;
    then
A17: c in dom ((f1|X) (#) f2) by Th3;
    thus ((f1(#)f2)|X)/.c = (f1(#)f2)/.c by A11,PARTFUN2:15
      .= (((f1/.c))) *(((f2/.c))) by A14,Th3
      .= ((f1|X)/.c) *(((f2/.c))) by A16,PARTFUN2:15
      .= ((f1|X)(#)f2)/.c by A17,Th3;
  end;
  dom ((f1(#)f2)|X) = dom (f1(#)f2) /\ X by RELAT_1:61
    .= dom f1 /\ dom f2 /\ X by Th3
    .= dom f1 /\ X /\ dom f2 by XBOOLE_1:16
    .= dom (f1|X) /\ dom f2 by RELAT_1:61
    .= dom ((f1|X)(#) f2) by Th3;
  hence (f1(#)f2)|X = f1|X (#) f2 by A10,PARTFUN2:1;
A18: now
    let c;
    assume
A19: c in dom ((f1(#)f2)|X);
    then
A20: c in dom (f1(#)f2) /\ X by RELAT_1:61;
    then
A21: c in X by XBOOLE_0:def 4;
A22: c in dom (f1(#)f2) by A20,XBOOLE_0:def 4;
    then
A23: c in dom f1 /\ dom f2 by Th3;
    then c in dom f2 by XBOOLE_0:def 4;
    then c in dom f2 /\ X by A21,XBOOLE_0:def 4;
    then
A24: c in dom (f2|X) by RELAT_1:61;
    c in dom f1 by A23,XBOOLE_0:def 4;
    then c in dom f1 /\ dom (f2|X) by A24,XBOOLE_0:def 4;
    then
A25: c in dom (f1 (#) (f2|X)) by Th3;
    thus ((f1(#)f2)|X)/.c = (f1(#)f2)/.c by A19,PARTFUN2:15
      .= (((f1/.c))) *(((f2/.c))) by A22,Th3
      .= (((f1/.c))) *((f2|X)/.c) by A24,PARTFUN2:15
      .= (f1(#)(f2|X))/.c by A25,Th3;
  end;
  dom ((f1(#)f2)|X) = dom (f1(#)f2) /\ X by RELAT_1:61
    .= dom f1 /\ dom f2 /\ X by Th3
    .= dom f1 /\ (dom f2 /\ X) by XBOOLE_1:16
    .= dom f1 /\ dom (f2|X) by RELAT_1:61
    .= dom (f1 (#) (f2|X)) by Th3;
  hence thesis by A18,PARTFUN2:1;
end;
