reserve D for set;
reserve x,x0,x1,x2,y,y0,y1,y2,z,z0,z1,z2,r,s,t for Real;
reserve p,a,u,u0 for Element of REAL 3;
reserve n,m,k for Element of NAT;
reserve f,f1,f2,f3,g for PartFunc of REAL 3,REAL;
reserve R,R1,R2 for RestFunc;
reserve L,L1,L2 for LinearFunc;

theorem
  Directiondiff(f,p,a) = |( grad(f,p),unitvector(a) )|
proof
    set p0 = grad(f,p);
    reconsider g1=p0,g2=unitvector(a) as FinSequence of REAL;
A1: len g1 = len <* p0.1,p0.2,p0.3 *> by EUCLID_8:1
    .= 3 by FINSEQ_1:45;
A2: len g2 = 3 by FINSEQ_1:45;
A3: p0 = |[ partdiff(f,p,1),partdiff(f,p,2),partdiff(f,p,3) ]| by Th34;
    |( grad(f,p),unitvector(a) )|
    = Sum <* g1.1*g2.1, g1.2*g2.2, g1.3*g2.3 *> by A1,A2,EUCLID_5:28
   .= p0.1*g2.1+p0.2*g2.2+p0.3*g2.3 by RVSUM_1:78
   .= partdiff(f,p,1)*g2.1+p0.2*g2.2+p0.3*g2.3 by A3
   .= partdiff(f,p,1)*g2.1+partdiff(f,p,2)*g2.2+p0.3*g2.3
      by A3
   .= Directiondiff(f,p,a) by A3;
    hence thesis;
end;
