\begin{ccRefConcept}{PolynomialTraits_d::PrincipalSubresultants}

\textbf{Note:} This functor is optional!

\ccDefinition

Computes the principal subresultant of two polynomials $p$ and $q$ of 
type \ccc{PolynomialTraits_d::Coefficient_type} 
with respect to the outermost variable.
The $i$-th principal subresultant, $\mathrm{sres}_i(p,q)$,
is defined as the coefficient at $t^i$ of the $i$-th polynomial
subresultant $\mathrm{Sres}_i(p,q)$. Thus, it is either the leading
coefficient of $\mathrm{Sres}_i$, or zero in the case where its degree is 
below $i$.

The result is written in an output range, starting with the $0$-th 
principal subresultant $\mathrm{sres}_0(p,q)$
,aka as the resultant of $p$ and $q$.
(Note that $\mathrm{sres}_0(p,q)=\mathrm{Sres}_0(p,q)$ by definition)

\ccRefines 
\ccc{AdaptableBinaryFunction}\\
\ccc{CopyConstructible}\\
\ccc{DefaultConstructible}\\

\ccCreationVariable{fo}

\ccOperations
\ccMethod{template<typename OutputIterator>
        OutputIterator operator()(Polynomial_d   p,
                                  Polynomial_d   q,
                                  OutputIterator out);}
         { computes the principal subresultants of $p$ and $q$, 
           with respect to the outermost variable. Each element is of type
           \ccc{PolynomialTraits_d::Coefficient_type}.}

\ccMethod{template<typename OutputIterator>
        OutputIterator operator()(Polynomial_d   p,
                                  Polynomial_d   q,
                                  OutputIterator out,
                                  int i);}
         { computes the principal subresultants of $p$ and $q$, 
           with respect to the variable $x_i$.}

%\ccHasModels

\ccSeeAlso

\ccRefIdfierPage{Polynomial_d}\\
\ccRefIdfierPage{PolynomialTraits_d}\\
\ccRefIdfierPage{PolynomialTraits_d::Resultant}\\
\ccRefIdfierPage{PolynomialTraits_d::PolynomialSubresultants}\\
\ccRefIdfierPage{PolynomialTraits_d::PrincipalSturmHabichtSequence}\\

\end{ccRefConcept}
