00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef VCSN_ALGORITHMS_SUB_NORMALIZE_HH
00018 # define VCSN_ALGORITHMS_SUB_NORMALIZE_HH
00019 
00020 
00035 # include <vaucanson/algebra/concept/freemonoid_product.hh>
00036 # include <vaucanson/automata/concept/copy.hh>
00037 # include <vaucanson/algorithms/cut_up.hh>
00038 # include <vector>
00039 
00040 namespace vcsn
00041 {
00042 
00052   template <class S, class T>
00053   Element<S, T>
00054   sub_normalize(const Element<S, T>& a);
00055 
00063   template <class S, class T1, class T2>
00064   void
00065   sub_normalize(const Element<S, T1>& a, Element<S, T2>& res);
00066 
00067 
00073   template <class S, class T>
00074   void
00075   sub_normalize_here(Element<S, T>& a);
00076 
00077 
00085   template <class S, class T>
00086   bool is_sub_normalized(const Element<S, T>& a);
00087 
00090 } 
00091 
00092 # if !defined VCSN_USE_INTERFACE_ONLY && !defined VCSN_USE_LIB
00093 #  include <vaucanson/algorithms/sub_normalize.hxx>
00094 # endif // VCSN_USE_INTERFACE_ONLY
00095 
00096 #endif // ! VCSN_ALGORITHMS_SUB_NORMALIZE_HH