reserve y for set;
reserve g,r,s,p,t,x,x0,x1,x2 for Real;
reserve n,n1 for Nat;
reserve s1,s2,s3 for Real_Sequence;
reserve f,f1,f2 for PartFunc of REAL,REAL;

theorem Th5:
  for p,g st p<g for f1,f2 st [.p,g.] c= dom f1 & [.p,g.] c= dom f2
  & f1|[.p,g.] is continuous & f1 is_differentiable_on ].p,g.[ & f2|[.p,g.] is
continuous & f2 is_differentiable_on ].p,g.[ ex x0 st x0 in ].p,g.[ & (f1.g-f1.
  p)*diff(f2,x0)=(f2.g-f2.p)*diff(f1,x0)
proof
  let p,g such that
A1: p<g;
  let f1,f2 such that
A2: [.p,g.] c= dom f1 and
A3: [.p,g.] c= dom f2 and
A4: f1|[.p,g.] is continuous and
A5: f1 is_differentiable_on ].p,g.[ and
A6: f2|[.p,g.] is continuous and
A7: f2 is_differentiable_on ].p,g.[;
A8: ].p,g.[ c= [.p,g.] by XXREAL_1:25;
  now
    per cases;
    suppose
A9:   f2.p=f2.g;
      then consider x0 such that
A10:  x0 in ].p,g.[ & diff(f2,x0) = 0 by A1,A3,A6,A7,Th1;
      take x0;
      thus x0 in ].p,g.[ & (f1.g-f1.p)*diff(f2,x0)=(f2.g-f2.p)*diff(f1,x0) by
A9,A10;
    end;
    suppose
      f2.p<>f2.g;
      then
A11:  f2.g-f2.p<>0;
      reconsider Z=].p,g.[ as open Subset of REAL;
      set s=(f1.g-f1.p)/(f2.g-f2.p);
      reconsider fp = f1.p - f2.p*s as Element of REAL by XREAL_0:def 1;
      reconsider f3 = [.p,g.] --> fp as PartFunc of [.p,g.], REAL
      by FUNCOP_1:45;
      reconsider f3 as PartFunc of REAL, REAL;
      set f4 = s(#)f2;
      set f5 = f3+f4;
      set f=f5-f1;
A12:  Z c= dom f3 by A8,FUNCOP_1:13;
A13:  dom f4 = dom f2 by VALUED_1:def 5;
      then
A14:  Z c= dom f4 by A3,A8;
      then Z c= dom f3 /\ dom f4 by A12,XBOOLE_1:19;
      then
A15:  Z c= dom f5 by VALUED_1:def 1;
      reconsider f1pf2p =f1.p - f2.p*s as Element of REAL by XREAL_0:def 1;
A16:  [.p,g.] = dom f3 by FUNCOP_1:13;
      then for x being Element of REAL st x in [.p,g.] /\ dom f3
        holds f3.x=f1pf2p by FUNCOP_1:7;
      then
A17:  f3|[.p,g.] is constant by PARTFUN2:57;
      then
A18:  f3|].p,g.[ is constant by PARTFUN2:38,XXREAL_1:25;
      then
A19:  f3 is_differentiable_on Z by A12,FDIFF_1:22;
A20:  p in [.p,g.] by A1,XXREAL_1:1;
      then p in dom f3 /\ dom f4 by A3,A16,A13,XBOOLE_0:def 4;
      then
A21:  p in dom f5 by VALUED_1:def 1;
      then p in dom f5 /\ dom f1 by A2,A20,XBOOLE_0:def 4;
      then p in dom f by VALUED_1:12;
      then
A22:  f.p = f5.p - f1.p by VALUED_1:13
        .= f3.p + f4.p - f1.p by A21,VALUED_1:def 1
        .= f3.p + s*f2.p - f1.p by A3,A13,A20,VALUED_1:def 5
        .= f1.p - s*f2.p + s*f2.p - f1.p by A20,FUNCOP_1:7
        .= 0;
A23:  g in [.p,g.] by A1,XXREAL_1:1;
      then g in dom f3 /\ dom f4 by A3,A16,A13,XBOOLE_0:def 4;
      then
A24:  g in dom f5 by VALUED_1:def 1;
      then g in dom f5 /\ dom f1 by A2,A23,XBOOLE_0:def 4;
      then g in dom f by VALUED_1:12;
      then
A25:  f.g = f5.g - f1.g by VALUED_1:13
        .= f3.g + f4.g - f1.g by A24,VALUED_1:def 1
        .= f3.g + s*f2.g - f1.g by A3,A13,A23,VALUED_1:def 5
        .= f1.p - s*f2.p + s*f2.g - f1.g by A23,FUNCOP_1:7
        .= -f1.g+(f1.p-(-(f1.g-f1.p))/(f2.g-f2.p)*(f2.g-f2.p))
        .= -f1.g+(f1.p-(f1.p-f1.g)) by A11,XCMPLX_1:87
        .= f.p by A22;
      Z c= dom f1 by A2,A8;
      then Z c= dom f5 /\ dom f1 by A15,XBOOLE_1:19;
      then
A26:  Z c= dom f by VALUED_1:12;
      dom f4 = dom f2 by VALUED_1:def 5;
      then
A27:  [.p,g.] c= dom f3 /\ dom f4 by A3,A16,XBOOLE_1:19;
      then [.p,g.] c= dom f5 by VALUED_1:def 1;
      then
A28:  [.p,g.] c= dom f5 /\ dom f1 by A2,XBOOLE_1:19;
      f4|[.p,g.] is continuous by A3,A6,FCONT_1:20;
      then f5|[.p,g.] is continuous by A17,A27,FCONT_1:18;
      then
A29:  f|[.p,g.] is continuous by A4,A28,FCONT_1:18;
A30:  f4 is_differentiable_on Z by A7,A14,FDIFF_1:20;
      then
A31:  f5 is_differentiable_on Z by A19,A15,FDIFF_1:18;
      [.p,g.] c= dom f by A28,VALUED_1:12;
      then consider x0 such that
A32:  x0 in ].p,g.[ and
A33:  diff(f,x0)=0 by A1,A5,A29,A31,A26,A25,Th1,FDIFF_1:19;
      take x0;
      f is_differentiable_on Z by A5,A31,A26,FDIFF_1:19;
      then diff(f,x0) = (f`|Z).x0 by A32,FDIFF_1:def 7
        .= diff(f5,x0) - diff(f1,x0) by A5,A31,A26,A32,FDIFF_1:19
        .= (f5`|Z).x0 - diff(f1,x0) by A31,A32,FDIFF_1:def 7
        .= diff(f3,x0) + diff(f4,x0) - diff(f1,x0) by A19,A30,A15,A32,
FDIFF_1:18
        .= (f3`|Z).x0 + diff(f4,x0) - diff(f1,x0) by A19,A32,FDIFF_1:def 7
        .= 0 + diff(f4,x0) - diff(f1,x0) by A18,A12,A32,FDIFF_1:22
        .= (f4`|Z).x0 - diff(f1,x0) by A30,A32,FDIFF_1:def 7
        .= s*diff(f2,x0) - diff(f1,x0) by A7,A14,A32,FDIFF_1:20;
      then
      (diff(f2,x0)*(f1.g-f1.p))/(f2.g-f2.p)*(f2.g-f2.p) = diff(f1,x0)*(f2
      .g-f2.p) by A33,XCMPLX_1:15;
      hence x0 in ].p,g.[ & (f1.g-f1.p)*diff(f2,x0) = (f2.g-f2.p)*diff(f1,x0)
      by A11,A32,XCMPLX_1:87;
    end;
  end;
  hence thesis;
end;
