function res=verifie_diff_div_symb(X,Y)	

% verifie_diff_div_symb : verification pour le calcul du polynôme interpol. support quelconque en symbolique
%
%
% *********************************************************
%
% res=verifie_diff_div_symb(X,Y)	
%     vérification du calcul du polynôme d'interpolation défini par le nuage de point X,Y
%     pour support quelconque où X et Y sont des vecteurs symboliques.
% Vérification en formel.
%
%
%	variables d'entrées : 
%     * X : contient les valeurs x_i, pour 0 <=i<=n (dans l'ordre croissant)
%     * Y : contient les valeurs f^(r)(x_i), pour 0 <=i<=n, de telle sorte que :
%             si x_k est multiple avec x_{k-1}~=x_k=x_{k+1}=...=x_{k+r}~=x_{k+r+1} alors
%                y_k=f(x_k), y_{k+1}=f'(x_k), ..., y_{k+r}=f^(r)(x_k).
%
%	variables de sortie
%     * res : contient le maximum des valeur absolue de 
%               n-p où p est le degré du polynôme d'interpolation p_n
%                   et n+1 est le nombre de points.
%               maximum sur i dans {0,...,n} maximum sur l dans alpha_i-1
%               de la quantitée p_n^(l)(x_i)-f^(l)(x_i) (dérivée l fois) où alpha_i est 
%               le nombre d'éléments du n=1-uplet(x_0,...,x_n) égaux à x_i.
%
% Le calcul est correct si et seulement si res est nul
%    et incorrect si res est egal à un 
%
%
% 
% ************ Fonctions auxiliaires utilisées ************
%
%     diff_div, eval_horner, val_derivee_multiple 
%
% *********************************************************

D=diff_div(X,Y);
syms x;
R=eval_horner(x,X(1:end-1),D);
er=0;
i=0;
n=length(X)-1;
while (i<=n)
   [alpha,valfder]=val_derivee_multiple(i,X,Y);
   Q=R;
   erloc=~(simplify(subs(R,'x',X(i+1)))==valfder(1));
   er=max(er,erloc);
   for l=1:alpha-1
      Q=diff(Q);
      erloc=~(simplify(subs(Q,'x',X(i+1)))==valfder(l+1));
      er=max(er,erloc);   
   end
   i=i+alpha;
end
res=er;