17 #ifndef VCSN_ALGORITHMS_LTL_TO_PAIR_HH
18 # define VCSN_ALGORITHMS_LTL_TO_PAIR_HH
25 # include <vaucanson/automata/concept/automata.hh>
26 # include <vaucanson/automata/concept/transducer.hh>
27 # include <vaucanson/algebra/concept/freemonoid_product.hh>
28 # include <vaucanson/algebra/implementation/alphabets/alphabet_set.hh>
29 # include <vaucanson/algebra/implementation/monoid/free_monoid.hh>
32 # include <vaucanson/algebra/implementation/letter/couple_letter.hh>
60 template <
typename S,
typename T>
61 struct mute_ltl_to_pair
64 typedef Element<S, T> automaton_t;
67 typedef typename automaton_t::monoid_elt_t::set_t monoid_set_elt_t;
70 typedef typename automaton_t::semiring_t semiring_t;
73 typedef typename monoid_set_elt_t::
74 first_monoid_t::alphabet_t first_alphabet_t;
77 typedef typename monoid_set_elt_t::
78 second_monoid_t::alphabet_t second_alphabet_t;
81 typedef typename first_alphabet_t::set_t::letter_t first_letter_t;
84 typedef typename second_alphabet_t::set_t::letter_t second_letter_t;
87 typedef std::pair<first_letter_t, second_letter_t> ret_letter_t;
92 typedef typename algebra::AlphabetSet<ret_letter_t> ret_alphabet_set_t;
95 typedef std::set<ret_letter_t> ret_alphabet_impl_t;
98 typedef Element<ret_alphabet_set_t, ret_alphabet_impl_t>
101 typedef algebra::FreeMonoid<ret_alphabet_t> ret_monoid_t;
103 typedef Element<ret_monoid_t, std::basic_string<ret_letter_t> >
108 static ret_alphabet_t
109 cartesian_product(
const first_alphabet_t& A,
110 const second_alphabet_t& B);
115 typedef typename algebra::
116 mute_series_traits<
typename automaton_t::series_set_t,
117 typename automaton_t::semiring_t,
118 algebra::FreeMonoid<ret_alphabet_t> >::ret
120 typedef Automata<ret_series_set_t, typename automaton_t::kind_t> ret_set_t;
123 typedef typename mute_graph_impl_monoid_traits<
typename automaton_t::
128 typedef Element<ret_set_t, ret_impl_t> ret;
132 make_automaton(
const ret_alphabet_t& A)
135 ret_monoid_t freemonoid(A);
136 typename ret::series_set_t series(semiring, freemonoid);
137 return ret(Automata<typename ret::series_set_t, typename ret::kind_t>(series));
141 make_automaton(
const automaton_t&);
144 static typename ret::series_set_elt_t
145 series_convert(
const ret_series_set_t&,
146 const typename automaton_t::series_set_elt_t&);
149 template <
typename S,
typename T>
151 ltl_to_pair(
const Element<S, T>& ltl,
152 typename mute_ltl_to_pair<S, T>::ret& res);
154 template <
typename S,
typename T>
155 typename mute_ltl_to_pair<S, T>::ret
156 ltl_to_pair(
const Element<S, T>& ltl);
164 # if !defined VCSN_USE_INTERFACE_ONLY && !defined VCSN_USE_LIB
165 # include <vaucanson/algorithms/ltl_to_pair.hxx>
166 # endif // ! VCSN_USE_INTERFACE_ONLY
168 #endif // ! VCSN_ALGORITHMS_LTL_TO_PAIR_HH