reserve x for object, X,Y for set;
reserve C for non empty set;
reserve c for Element of C;
reserve f,f1,f2,f3,g,g1 for complex-valued Function;
reserve r,p for Complex;

theorem Th45:
  (f1(#)f2)|X = f1|X (#) f2|X & (f1(#)f2)|X = f1|X (#) f2 & (f1(#)
  f2)|X = f1 (#) f2|X
proof
A1: now
    let c be object;
    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;
    c in dom (f1(#)f2) by A3,XBOOLE_0:def 4;
    then
A5: c in dom f1 /\ dom f2 by VALUED_1:def 4;
    then c in dom f1 by XBOOLE_0:def 4;
    then c in dom f1 /\ X by A4,XBOOLE_0:def 4;
    then
A6: c in dom (f1|X) by RELAT_1:61;
    c in dom f2 by A5,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;
    thus ((f1(#)f2)|X).c = (f1(#)f2).c by A2,FUNCT_1:47
      .= (f1.c) *(f2.c) by VALUED_1:5
      .= ((f1|X).c) *(f2.c) by A6,FUNCT_1:47
      .= ((f1|X).c) *((f2|X).c) by A7,FUNCT_1:47
      .= ((f1|X)(#)(f2|X)).c by VALUED_1:5;
  end;
  dom ((f1(#)f2)|X) = dom (f1(#)f2) /\ X by RELAT_1:61
    .= dom f1 /\ dom f2 /\ (X /\ X) by VALUED_1:def 4
    .= 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 VALUED_1:def 4;
  hence (f1(#)f2)|X = f1|X (#) f2|X by A1,FUNCT_1:2;
A8: now
    let c be object;
    assume
A9: c in dom ((f1(#)f2)|X);
    then
A10: c in dom (f1(#)f2) /\ X by RELAT_1:61;
    then c in dom (f1(#)f2) by XBOOLE_0:def 4;
    then c in dom f1 /\ dom f2 by VALUED_1:def 4;
    then
A11: c in dom f1 by XBOOLE_0:def 4;
    c in X by A10,XBOOLE_0:def 4;
    then c in dom f1 /\ X by A11,XBOOLE_0:def 4;
    then
A12: c in dom (f1|X) by RELAT_1:61;
    thus ((f1(#)f2)|X).c = (f1(#)f2).c by A9,FUNCT_1:47
      .= (f1.c) *(f2.c) by VALUED_1:5
      .= ((f1|X).c) *(f2.c) by A12,FUNCT_1:47
      .= ((f1|X)(#)f2).c by VALUED_1:5;
  end;
  dom ((f1(#)f2)|X) = dom (f1(#)f2) /\ X by RELAT_1:61
    .= dom f1 /\ dom f2 /\ X by VALUED_1:def 4
    .= dom f1 /\ X /\ dom f2 by XBOOLE_1:16
    .= dom (f1|X) /\ dom f2 by RELAT_1:61
    .= dom ((f1|X)(#) f2) by VALUED_1:def 4;
  hence (f1(#)f2)|X = f1|X (#) f2 by A8,FUNCT_1:2;
A13: now
    let c be object;
    assume
A14: c in dom ((f1(#)f2)|X);
    then
A15: c in dom (f1(#)f2) /\ X by RELAT_1:61;
    then c in dom (f1(#)f2) by XBOOLE_0:def 4;
    then c in dom f1 /\ dom f2 by VALUED_1:def 4;
    then
A16: c in dom f2 by XBOOLE_0:def 4;
    c in X by A15,XBOOLE_0:def 4;
    then c in dom f2 /\ X by A16,XBOOLE_0:def 4;
    then
A17: c in dom (f2|X) by RELAT_1:61;
    thus ((f1(#)f2)|X).c = (f1(#)f2).c by A14,FUNCT_1:47
      .= (f1.c) *(f2.c) by VALUED_1:5
      .= (f1.c) *((f2|X).c) by A17,FUNCT_1:47
      .= (f1(#)(f2|X)).c by VALUED_1:5;
  end;
  dom ((f1(#)f2)|X) = dom (f1(#)f2) /\ X by RELAT_1:61
    .= dom f1 /\ dom f2 /\ X by VALUED_1:def 4
    .= dom f1 /\ (dom f2 /\ X) by XBOOLE_1:16
    .= dom f1 /\ dom (f2|X) by RELAT_1:61
    .= dom (f1 (#) (f2|X)) by VALUED_1:def 4;
  hence thesis by A13,FUNCT_1:2;
end;
