\begin{ccRefConcept}{PolynomialTraits_d::SubstituteHomogeneous}
\ccDefinition

This \ccc{Functor} substitutes all variables of a given multivariate 
\ccc{PolynomialTraits_d::Polynomial_d} $p$ by the values given in the 
iterator range, where begin refers the value for the innermost variable. 
In contrast to \ccc{PolynomialTraits_d::Substitute} the given polynomial $p$
is interpreted as a homogeneous polynomial. 
Hence the iterator range is required to be of length \ccc{PolynomialTraits_d::d+1}. \\
For instance the polynomial $p(x_0,x_1) = x_0^2x_1^3+x_1^4$ is interpreted as the homogeneous
polynomial  $p(x_0,x_1,w) = x_0^2x_1^3+x_1^4w^1$.

\ccRefines 

Assignable\\
CopyConstructible\\
DefaultConstructible\\

\ccTypes
Note that the \ccc{result_type} is the coercion type of the value type of the 
given iterator range and \ccc{PolynomialTraits_d::Innermost_coefficient_type}. 
In particular \ccc{std::iterator_traits<Input_iterator>::value_type} must be 
\ccc{ExplicitInteroperable} with \ccc{PolynomialTraits_d::Innermost_coefficient_type}. 
Hence, it can not be provided as a public type in advance.
% no public types 

\ccSetThreeColumns{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}{xxx}{}
\ccCreationVariable{fo}

\ccOperations
\ccMethod{
template<class Input_iterator>        
result_type operator()(PolynomialTraits_d::Polynomial_d  p,
                       Input_iterator begin, Input_iterator end);}{ 
Substitutes each variable of $p$ by the values given in the iterator range, 
where $p$ is interpreted as a homogeneous polynomial in all variables. 
The begin iterator refers to the innermost variable $x_0$. 
%The homogeneous degree is considered as equal to the total degree of $p$.
\ccPrecond{(end-begin == \ccc{PolynomialTraits_d::d})+1}  
}
        
%\ccHasModels

\ccSeeAlso

\ccRefIdfierPage{Polynomial_d}\\
\ccRefIdfierPage{PolynomialTraits_d}\\
\ccRefIdfierPage{PolynomialTraits_d::Substitute}\\
\ccRefIdfierPage{CoercionTraits}\\

\end{ccRefConcept}
