inline
 bool MultiIndex<I, DIMENSION>::lex (const MultiIndex<I, DIMENSION>& lambda) const
 {
     return std::lexicographical_compare(FixedArray1D<I, DIMENSION>::begin(),
                                         FixedArray1D<I, DIMENSION>::end(),
                                         lambda.begin(), lambda.end());
 }
 inline
 bool MultiIndex<I, DIMENSION>::operator < (const MultiIndex& lambda) const
 {
        
     unsigned int r1(FixedArray1D<I,DIMENSION>::operator [] (0)),r2(multi_degree(lambda));
     for (unsigned int i(1); i < DIMENSION; i++)
     {
         r1 += FixedArray1D<I,DIMENSION>::operator [] (i);
     }
     return (r1<r2) || ((r1==r2) && (std::lexicographical_compare(FixedArray1D<I, DIMENSION>::begin(),
                                                                  FixedArray1D<I, DIMENSION>::end(),
                                                                  lambda.begin(), lambda.end()) ));
 }