Vcsn  2.2a
Be Rational
instantiate.hh
Go to the documentation of this file.
1 #pragma once
2 
4 #include <vcsn/algos/are-equivalent.hh> // difference
6 #include <vcsn/algos/cerny.hh>
7 #include <vcsn/algos/complete.hh>
10 #include <vcsn/algos/constant.hh>
11 #include <vcsn/algos/copy.hh>
12 #include <vcsn/algos/de-bruijn.hh>
13 #include <vcsn/algos/derivation.hh>
16 #include <vcsn/algos/divide.hh>
17 #include <vcsn/algos/divkbaseb.hh>
20 #include <vcsn/algos/eval.hh>
21 #include <vcsn/algos/expand.hh>
22 #include <vcsn/algos/identities.hh>
23 #include <vcsn/algos/info.hh>
28 #include <vcsn/algos/is-proper.hh>
30 #include <vcsn/algos/is-valid.hh>
31 #include <vcsn/algos/ladybird.hh>
32 #include <vcsn/algos/left-mult.hh>
33 #include <vcsn/algos/less-than.hh>
35 #include <vcsn/algos/minimize.hh>
36 #include <vcsn/algos/multiply.hh>
37 #include <vcsn/algos/normalize.hh>
38 #include <vcsn/algos/print.hh>
39 #include <vcsn/algos/proper.hh>
41 #include <vcsn/algos/random.hh>
42 #include <vcsn/algos/read.hh>
43 #include <vcsn/algos/shortest.hh>
44 #include <vcsn/algos/sort.hh>
45 #include <vcsn/algos/split.hh>
46 #include <vcsn/algos/standard.hh>
48 #include <vcsn/algos/star.hh>
49 #include <vcsn/algos/sum.hh>
51 #include <vcsn/algos/thompson.hh>
54 #include <vcsn/algos/transpose.hh>
55 #include <vcsn/algos/u.hh>
56 
58 
59 #include <vcsn/dyn/registries.hh>
60 
61 #include <vcsn/weightset/b.hh>
63 
64 #include <vcsn/misc/attributes.hh>
65 #include <vcsn/misc/name.hh>
66 
67 /* The purpose of this file is manyfold:
68 
69  - *prevent* the instantiation of the algorithms that we will
70  provided by the context library. This is what the INSTANTIATE
71  macros do. In this case MAYBE_EXTERN is "extern".
72 
73  - instantiate them when building the context libraries. In this
74  context, MAYBE_EXTERN is "".
75 
76  - register the dyn functions. This is what the register function
77  templates do.
78 
79 */
80 
81 namespace vcsn
82 {
83 #define VCSN_CTX_INSTANTIATE_PRINT(Format, Aut) \
84  MAYBE_EXTERN template \
85  LIBVCSN_API \
86  std::ostream& Format<Aut>(const Aut& aut, std::ostream& out)
87 
88  /*-------------------------------------------------------.
89  | Instantiate the function that work for every context. |
90  `-------------------------------------------------------*/
91 
92 #define VCSN_CTX_INSTANTIATE_1(Ctx) \
93  MAYBE_EXTERN template \
94  class LIBVCSN_API mutable_automaton<Ctx>; \
95  \
96  /* to_expression. */ \
97  MAYBE_EXTERN template \
98  Ctx::expression_t \
99  to_expression<mutable_automaton<Ctx>> \
100  (const mutable_automaton<Ctx>& aut, \
101  const state_chooser_t<mutable_automaton<Ctx>>& next_state); \
102  \
103  /* dot. */ \
104  VCSN_CTX_INSTANTIATE_PRINT(dot, mutable_automaton<Ctx>); \
105  \
106  /* efsm. */ \
107  VCSN_CTX_INSTANTIATE_PRINT(efsm, mutable_automaton<Ctx>); \
108  \
109  /* print. */ \
110  MAYBE_EXTERN template \
111  std::ostream& \
112  print<expressionset<Ctx>>(const expressionset<Ctx>& rs, \
113  const Ctx::expression_t& e, std::ostream& o, \
114  format fmt); \
115  \
116  /* standard. */ \
117  MAYBE_EXTERN template \
118  class rat::standard_visitor<mutable_automaton<Ctx>, Ctx>; \
119  \
120  /* tikz. */ \
121  VCSN_CTX_INSTANTIATE_PRINT(tikz, mutable_automaton<Ctx>); \
122  \
123  /* transpose. */ \
124  MAYBE_EXTERN template \
125  class LIBVCSN_API detail::transpose_automaton<mutable_automaton<Ctx>>; \
126  MAYBE_EXTERN template \
127  class LIBVCSN_API detail::transposer<expressionset<Ctx>>
128 
129 
130  /*----------------------------------.
131  | Register the abstract functions. |
132  `----------------------------------*/
133 
134 #define REGISTER(Algo, ...) \
135  Algo ## _register(ssignature<__VA_ARGS__>(), Algo<__VA_ARGS__>)
136 
137  namespace ctx
138  {
139  namespace detail
140  {
141 
143  template <Automaton Aut>
144  bool
146  {
147  using aut_t = Aut;
148  using namespace dyn::detail;
149  REGISTER(copy, aut_t);
150  REGISTER(print, aut_t, std::ostream, const std::string);
151  REGISTER(info, aut_t, std::ostream, bool);
152  REGISTER(proper, aut_t, direction, bool, const std::string);
153  return true;
154  }
155 
156  template <typename Ctx>
157  bool
159  {
160  return true;
161  }
162 
163  template <typename Ctx>
164  bool
166  {
167  using ctx_t = Ctx;
168  using aut_t = mutable_automaton<ctx_t>;
169  using rs_t = expressionset<ctx_t>;
170 
171  // Wordset.
173 
174  // Word polynomialset.
176 
177  // Same labelset, but over Booleans.
178  using b_ctx_t = context<labelset_t_of<Ctx>, b>;
179  using b_rs_t = expressionset<b_ctx_t>;
180 
181  using namespace dyn::detail;
182  REGISTER(cerny, ctx_t, unsigned);
183  REGISTER(complete, aut_t);
184  REGISTER(conjunction, std::tuple<aut_t, aut_t>, bool);
185  REGISTER(conjunction_repeated, aut_t, unsigned);
186  REGISTER(de_bruijn, ctx_t, unsigned);
187  REGISTER(derivation, rs_t, wls_t, bool);
188  REGISTER(determinize, aut_t, const std::string);
189  REGISTER(difference_expression, rs_t, b_rs_t);
190  REGISTER(divkbaseb, ctx_t, unsigned, unsigned);
191  REGISTER(double_ring, ctx_t, unsigned, const std::vector<unsigned>);
192  REGISTER(eval, aut_t, wls_t);
193  REGISTER(infiltration, std::tuple<aut_t, aut_t>);
194  REGISTER(is_ambiguous, aut_t);
195  REGISTER(is_complete, aut_t);
196  REGISTER(is_deterministic, aut_t);
197  REGISTER(is_synchronized_by, aut_t, wls_t);
198  REGISTER(is_synchronizing, aut_t);
199  REGISTER(ladybird, ctx_t, unsigned);
200  REGISTER(list_polynomial, wps_t, std::ostream);
201  REGISTER(multiply_polynomial, wps_t, wps_t);
202  REGISTER(pair, aut_t, bool);
203  REGISTER(print_polynomial, wps_t, std::ostream, const std::string);
204  REGISTER(random_automaton_deterministic, ctx_t, unsigned);
205  REGISTER(shortest, aut_t, boost::optional<unsigned>, boost::optional<unsigned>);
206  REGISTER(shuffle, std::tuple<aut_t, aut_t>);
207  REGISTER(synchronizing_word, aut_t, const std::string);
208  REGISTER(u, ctx_t, unsigned);
209 
210  return true;
211  }
212 
213  template <typename Ctx>
214  bool
215  register_functions_is_free(std::false_type)
216  {
217  return true;
218  }
219 
220  template <typename Ctx>
221  bool
223  {
224  using ctx_t = Ctx;
225  using aut_t = mutable_automaton<ctx_t>;
226 
227  using namespace dyn::detail;
228 
229  REGISTER(eliminate_state, aut_t, int);
230 
231  return true;
232  }
233 
234  template <typename Ctx>
235  bool
237  {
238  using ctx_t = Ctx;
239 
240  using namespace dyn::detail;
241 
242  REGISTER(de_bruijn, ctx_t, unsigned);
243  REGISTER(divkbaseb, ctx_t, unsigned, unsigned);
244  REGISTER(double_ring, ctx_t, unsigned, const std::vector<unsigned>);
245  REGISTER(ladybird, ctx_t, unsigned);
246  REGISTER(u, ctx_t, unsigned);
247 
248  return true;
249  }
250 
251  template <typename Ctx>
252  ATTRIBUTE_CONST
253  bool
255  {
256  return true;
257  }
258 
259  template <typename Ctx>
260  ATTRIBUTE_CONST
261  bool
263  {
264  return true;
265  }
266 
267  template <typename Ctx>
268  bool
270  {
271  return true;
272  }
273 
274  template <typename Ctx>
275  bool
277  {
278  using ctx_t = Ctx;
279  using aut_t = mutable_automaton<ctx_t>;
280  using rs_t = expressionset<ctx_t>;
281  using ls_t = labelset_t_of<ctx_t>;
282  using ws_t = weightset_t_of<ctx_t>;
283 
284  // label polynomialset.
285  using lps_t = polynomialset<ctx_t>;
286  // expression polynomialset.
288  // expansionset.
289  using es_t = rat::expansionset<rs_t>;
290 
291 
292  using namespace dyn::detail;
293 
294  register_automaton_functions<aut_t>();
295 
296  REGISTER(accessible, aut_t);
297  REGISTER(are_isomorphic, aut_t, aut_t);
298  REGISTER(coaccessible, aut_t);
300  REGISTER(concatenate_expression, rs_t, rs_t);
301  REGISTER(conjunction_expression, rs_t, rs_t);
302  REGISTER(constant_term, rs_t);
303  REGISTER(context_of, aut_t);
305  REGISTER(derived_term, rs_t, const std::string);
306  REGISTER(expand, rs_t);
309  REGISTER(identities, rs_t);
310  REGISTER(info_expression, rs_t, std::ostream);
311  REGISTER(is_empty, aut_t);
312  REGISTER(is_eps_acyclic, aut_t);
313  REGISTER(is_normalized, aut_t);
314  REGISTER(is_out_sorted, aut_t);
315  REGISTER(is_proper, aut_t);
316  REGISTER(is_standard, aut_t);
317  REGISTER(is_trim, aut_t);
318  REGISTER(is_useless, aut_t);
319  REGISTER(is_valid, aut_t);
321  REGISTER(ldiv_expression, rs_t, rs_t);
322  REGISTER(left_mult, ws_t, aut_t, const std::string);
323  REGISTER(left_mult_expression, ws_t, rs_t);
324  REGISTER(less_than_expression, rs_t, rs_t);
325  REGISTER(list_polynomial, rps_t, std::ostream);
327  REGISTER(make_context, ctx_t);
328  REGISTER(make_word_context, ctx_t);
329  REGISTER(minimize, aut_t, const std::string);
330  REGISTER(multiply, aut_t, aut_t, const std::string);
331  REGISTER(multiply_expression, rs_t, rs_t);
332  REGISTER(multiply_expression_repeated, rs_t, int, int);
333  REGISTER(multiply_repeated, aut_t, int, int, const std::string);
334  REGISTER(multiply_weight, ws_t, ws_t);
335  REGISTER(num_tapes, ctx_t);
336  REGISTER(print_context, ctx_t, std::ostream, const std::string);
337  REGISTER(print_expansion, es_t, std::ostream, const std::string);
338  REGISTER(print_expression, rs_t, std::ostream, const std::string);
339  REGISTER(print_label, ls_t, std::ostream, const std::string);
340  REGISTER(print_polynomial, lps_t, std::ostream, const std::string);
341  REGISTER(print_polynomial, rps_t, std::ostream, const std::string);
342  REGISTER(print_weight, ws_t, std::ostream, const std::string);
343  REGISTER(push_weights, aut_t);
344  REGISTER(random_automaton, ctx_t, unsigned, float, unsigned, unsigned, float);
345  REGISTER(rdiv_expression, rs_t, rs_t);
346  REGISTER(read_label, ctx_t, std::istream, bool);
347  REGISTER(read_polynomial, ctx_t, std::istream);
348  REGISTER(read_weight, ctx_t, std::istream);
349  REGISTER(right_mult, aut_t, ws_t, const std::string);
350  REGISTER(right_mult_expression, rs_t, ws_t);
351  REGISTER(shuffle_expression, rs_t, rs_t);
352  REGISTER(sort, aut_t);
353  REGISTER(split, rs_t);
354  REGISTER(standard, aut_t);
356  REGISTER(star, aut_t, const std::string);
357  REGISTER(star_height, rs_t);
358  REGISTER(sum, aut_t, aut_t, const std::string);
359  REGISTER(sum_expression, rs_t, rs_t);
360  REGISTER(sum_weight, ws_t, ws_t);
361  REGISTER(thompson, rs_t);
362  REGISTER(to_expansion, rs_t);
363  REGISTER(to_expression, aut_t, rat::identities, const std::string);
366  REGISTER(transpose, aut_t);
369  REGISTER(trim, aut_t);
370 
372  register_functions_is_free<ctx_t>(is_free_t());
373 
374  return register_kind_functions<ctx_t>(typename ctx_t::kind_t());
375  }
376  }
377  }
378 
379 #undef REGISTER
380 
381 #if VCSN_INSTANTIATION
382 # define VCSN_CTX_INSTANTIATE_2(Ctx) \
383  namespace ctx \
384  { \
385  namespace detail \
386  { \
387  static bool registered ATTRIBUTE_USED \
388  = register_functions<Ctx>(); \
389  } \
390  }
391 #else
392 # define VCSN_CTX_INSTANTIATE_2(Ctx)
393 #endif
394 
395 #define VCSN_CTX_INSTANTIATE(Ctx) \
396  /* VCSN_CTX_INSTANTIATE_1(Ctx);*/ \
397  VCSN_CTX_INSTANTIATE_2(Ctx)
398 
399 #ifndef MAYBE_EXTERN
400 # define MAYBE_EXTERN extern
401 #endif
402 
403 }
expression to_expression_label(const context &ctx, rat::identities ids, const label &lbl)
Bridge (to_expression).
Provide a variadic mul on top of a binary mul(), and one().
Definition: fwd.hh:46
expression transposition_expression(const expression &exp)
Bridge (transposition).
Definition: transpose.hh:287
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
expression complement_expression(const expression &exp)
Bridge (complement).
Definition: complement.hh:103
mutable_automaton< Ctx > random_automaton_deterministic(const Ctx &ctx, unsigned num_states)
Definition: random.hh:279
expression expression_zero(const context &ctx, rat::identities ids)
Bridge.
Definition: constant.hh:24
typename law_traits< LabelSet >::type law_t
The smallest wordset that includes LabelSet.
Definition: labelset.hh:264
bool register_functions()
Definition: instantiate.hh:276
bool register_functions_is_free(std::true_type)
Definition: instantiate.hh:165
bool are_isomorphic(const Aut1 &a1, const Aut2 &a2)
context context_of_expression(const expression &exp)
Bridge (context_of).
Definition: make-context.hh:73
bool is_valid(const Aut &aut)
Definition: is-valid.hh:141
bool is_out_sorted(const Aut &a)
Whether for each state, the outgoing transitions are sorted by increasing label.
Definition: sort.hh:60
auto eval(const Aut &a, const word_t_of< Aut > &w) -> std::enable_if_t<!context_t_of< Aut >::is_lao, weight_t_of< Aut >>
General case of evaluation.
Definition: eval.hh:101
rat::identities identities(const expression &exp)
Bridge.
Definition: identities.hh:19
auto minimize(const Aut &a, brzozowski_tag) -> std::enable_if_t< is_free_boolean< Aut >(), determinized_automaton< codeterminized_automaton< Aut >, wet_kind_t::bitset >>
Brzozowski-based minimization.
auto sort(const Aut &a) -> permutation_automaton< Aut >
Definition: sort.hh:163
bool is_useless(const Aut &a)
Whether all no state is useful.
Definition: accessible.hh:168
bool is_valid_expression(const expression &exp)
Bridge (is_valid).
automaton multiply_repeated(const automaton &a, int min, int max, const std::string &algo)
Bridge (multiply).
Definition: multiply.hh:259
rat::expression_polynomial_t< ExpSet > derivation(const ExpSet &rs, const typename ExpSet::value_t &e, label_t_of< ExpSet > a, bool breaking=false)
Derive an expression wrt to a letter.
Definition: derivation.hh:267
bool is_complete(const Aut &aut)
Whether aut is complete.
Definition: is-complete.hh:13
std::ostream & print_polynomial(const polynomial &polynomial, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:279
auto eliminate_state(const Aut &aut, state_t_of< Aut > s=Aut::element_type::null_state()) -> fresh_automaton_t_of< Aut >
A copy of automaton res without the state s.
fresh_automaton_t_of< Aut > right_mult(const Aut &aut, const weight_t_of< Aut > &w, Tag tag={})
Right-multiplication of an automaton by a weight.
Definition: left-mult.hh:301
std::ostream & info(const Aut &aut, std::ostream &out, bool detailed=false)
Definition: info.hh:72
auto proper(const Aut &aut, direction dir=direction::backward, bool prune=true, const std::string &algo="auto") -> fresh_automaton_t_of< Aut, detail::proper_context< context_t_of< Aut >>>
Eliminate spontaneous transitions.
Definition: proper.hh:236
std::ostream & print(const Aut &aut, std::ostream &out, const std::string &fmt)
Definition: print.hh:78
auto push_weights(const Aut &aut) -> decltype(::vcsn::copy(aut))
The algorithm weight pushing.
Definition: push-weights.hh:44
auto read_weight(const Context &ctx, std::istream &is) -> weight_t_of< Context >
Definition: read.hh:82
expression left_mult_expression(const weight &weight, const expression &exp)
Bridge (left_mult).
Definition: left-mult.hh:272
bool register_automaton_functions()
Instantiate the core functions for automata of type Aut.
Definition: instantiate.hh:145
word_t_of< Aut > synchronizing_word(const Aut &aut, const std::string &algo="greedy")
Return a synchronizing word for aut using algo algo.
bool is_synchronized_by(const Aut &aut, const word_t_of< Aut > &w)
Whether w synchronizes automaton aut.
expression right_mult_expression(const expression &exp, const weight &weight)
Bridge (right_mult).
Definition: left-mult.hh:403
#define REGISTER(Algo,...)
Definition: instantiate.hh:134
auto copy(const AutIn &input, KeepState keep_state, KeepTrans keep_trans) -> decltype(keep_state(input->null_state()), keep_trans(input->null_transition()), make_fresh_automaton< AutIn, AutOut >(input))
A copy of input keeping only its states that are accepted by keep_state, and transitions accepted by ...
Definition: copy.hh:308
rat::expression_polynomial_t< ExpSet > split(const ExpSet &rs, const typename ExpSet::value_t &e)
Split an expression.
Definition: split.hh:264
auto multiply(const Aut1 &lhs, const Aut2 &rhs, Tag tag={}) -> decltype(lhs->null_state(), detail::make_join_automaton(tag, lhs, rhs))
Concatenate two automata, general case.
Definition: multiply.hh:151
expression rdiv_expression(const expression &lhs, const expression &rhs)
Bridge (rdiv).
Definition: divide.hh:108
expression expression_one(const context &ctx, rat::identities ids)
Bridge.
Definition: constant.hh:15
bool is_proper(const Aut &aut)
Test whether an automaton is proper.
Definition: is-proper.hh:48
context context_of(const automaton &aut)
Bridge.
Definition: make-context.hh:64
bool is_ambiguous(const Aut &aut)
Definition: is-ambiguous.hh:41
std::integral_constant< bool, B > bool_constant
Definition: type_traits.hh:12
detail::enumerater< Aut >::polynomial_t shortest(const Aut &aut, boost::optional< unsigned > num={}, boost::optional< unsigned > len={})
The approximated behavior of an automaton.
Definition: shortest.hh:267
pair_automaton< Aut > pair(const Aut &aut, bool keep_initials=false)
Definition: pair.hh:251
rat::expansionset< ExpSet >::value_t to_expansion(const ExpSet &rs, const typename ExpSet::value_t &e)
First order expansion.
mutable_automaton< Ctx > cerny(const Ctx &ctx, unsigned num_states)
Cerny automata are automata whose synchronizing word length is always (n - 1)^2, the upper bound of t...
Definition: cerny.hh:25
mutable_automaton< Ctx > random_automaton(const Ctx &ctx, unsigned num_states, float density=0.1, unsigned num_initial=1, unsigned num_final=1, float loop_chance=0.0)
Definition: random.hh:118
bool is_standard(const Aut &a)
Whether a is standard.
Definition: standard.hh:28
unsigned star_height(const typename ExpSet::value_t &e)
Star height of an expression.
Definition: star-height.hh:100
mutable_automaton< Context > double_ring(const Context &ctx, unsigned n, const std::vector< unsigned > &finals)
Definition: double-ring.hh:18
expression to_expression_class(const context &ctx, rat::identities ids, const letter_class_t &letters, bool accept)
Bridge (to_expression).
bool register_kind_functions(labels_are_letters)
Definition: instantiate.hh:158
expression multiply_expression(const expression &lhs, const expression &rhs)
Bridge (multiply).
Definition: multiply.hh:295
expression transpose_expression(const expression &exp)
Bridge (transpose).
Definition: transpose.hh:266
std::ostream & print_context(const context &ctx, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:129
automaton standard_expression(const expression &exp)
Bridge (standard).
Definition: standard.hh:388
direction
Orientation.
Definition: direction.hh:9
mutable_automaton< Context > divkbaseb(const Context &ctx, unsigned divisor, unsigned base)
Build the Boolean automaton which accepts a word n representing a number in base "base" if and only i...
Definition: divkbaseb.hh:18
auto read_polynomial(const Context &ctx, std::istream &is) -> typename polynomialset< Context >::value_t
Definition: read.hh:51
expression difference_expression(const expression &lhs, const expression &rhs)
Bridge (difference).
std::ostream & info_expression(const expression &exp, std::ostream &o)
Bridge (info).
Definition: info.hh:183
auto left_mult(const weight_t_of< Aut > &w, const Aut &aut, Tag tag={}) -> fresh_automaton_t_of< Aut >
Left-multiplication of an automaton by a weight.
Definition: left-mult.hh:128
Ctx make_context(const std::string &name)
Definition: make-context.hh:21
auto complete(const Aut &aut) -> decltype(::vcsn::copy(aut))
Definition: complete.hh:61
auto read_label(const Context &ctx, std::istream &is, bool quoted=false) -> label_t_of< Context >
Definition: read.hh:20
std::ostream & list_polynomial(const polynomial &polynomial, std::ostream &o)
Bridge (list).
Definition: print.hh:260
std::ostream & print_expression(const expression &exp, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:206
filter_automaton< Aut > coaccessible(const Aut &a)
Coaccessible part of an automaton.
Definition: accessible.hh:142
automaton conjunction_repeated(const automaton &aut, unsigned n)
Bridge (conjunction).
Definition: conjunction.hh:854
mutable_automaton< Context > de_bruijn(const Context &ctx, unsigned n)
Definition: de-bruijn.hh:19
filter_automaton< Aut > trim(const Aut &a)
Useful part of an automaton.
Definition: accessible.hh:150
mutable_automaton< Context > ladybird(const Context &ctx, unsigned n)
Definition: ladybird.hh:16
std::ostream & print_weight(const weight &weight, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:310
expression concatenate_expression(const expression &lhs, const expression &rhs)
Bridge (concatenate).
Definition: multiply.hh:313
typename detail::weightset_t_of_impl< base_t< ValueSet >>::type weightset_t_of
Definition: traits.hh:59
constexpr auto num_tapes(const Ctx &) -> std::enable_if_t< Ctx::is_lat, size_t >
std::shared_ptr< detail::mutable_automaton_impl< Context >> mutable_automaton
Definition: fwd.hh:25
auto standard(const Aut &aut)
Definition: standard.hh:115
filter_automaton< Aut > accessible(const Aut &a)
Accessible part of an automaton.
Definition: accessible.hh:134
mutable_automaton< Context > u(const Context &ctx, unsigned n)
The Brzozowski universal witness.
Definition: u.hh:17
automaton_editor * make_automaton_editor(const context &ctx)
Bridge.
context make_word_context(const context &ctx)
Bridge.
weight_t_of< ExpSet > constant_term(const ExpSet &rs, const typename ExpSet::value_t &e)
The constant term of e.
bool is_synchronizing(const Aut &aut)
Whether this automaton is synchronizing, i.e., has synchronizing words.
Aut thompson(const context_t_of< Aut > &ctx, const ExpSet &rs, const typename ExpSet::value_t &r)
Build a Thompson automaton from an expression.
Definition: thompson.hh:176
std::ostream & print_label(const label &label, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:225
std::ostream & print_expansion(const expansion &expansion, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:160
auto determinize(const Aut &a, Tag={}, bool_constant< Lazy >={})
Definition: determinize.hh:246
bool is_empty(const Aut &a) ATTRIBUTE_PURE
Whether has no states.
Definition: accessible.hh:192
std::enable_if_t< labelset_t_of< ExpSet >::is_free(), expression_automaton< mutable_automaton< typename ExpSet::context_t > > > derived_term(const ExpSet &rs, const typename ExpSet::value_t &r, const std::string &algo="auto")
The derived-term automaton, for free labelsets.
weight sum_weight(const weight &lhs, const weight &rhs)
Bridge (sum).
Definition: sum.hh:217
bool is_normalized(const Aut &a)
Whether a is standard and co-standard.
Definition: normalize.hh:12
bool less_than_expression(const expression &lhs, const expression &rhs)
Bridge (less_than).
Definition: less-than.hh:31
static dyn::context ctx(const driver &d)
Get the context of the driver.
Definition: parse.cc:82
bool is_trim(const Aut &a)
Whether all its states are useful.
Definition: accessible.hh:161
polynomial multiply_polynomial(const polynomial &lhs, const polynomial &rhs)
Bridge (multiply).
Definition: multiply.hh:412
expression sum_expression(const expression &lhs, const expression &rhs)
Bridge (sum).
Definition: sum.hh:194
std::set< std::pair< std::string, std::string >> letter_class_t
A set of letter ranges.
Definition: fwd.hh:111
typename detail::labelset_t_of_impl< base_t< ValueSet >>::type labelset_t_of
Definition: traits.hh:55
ExpSet::value_t to_expression(Aut &a, Profiler &profiler)
weight multiply_weight(const weight &lhs, const weight &rhs)
Bridge (multiply).
Definition: multiply.hh:434
expression multiply_expression_repeated(const expression &re, int min, int max)
Bridge (multiply).
Definition: multiply.hh:365
Aut transpose(const transpose_automaton< Aut > &aut)
Definition: transpose.hh:227
An expressionset can implement several different sets of identities on expressions.
Definition: identities.hh:21
expression ldiv_expression(const expression &lhs, const expression &rhs)
Bridge (ldiv).
Definition: divide.hh:32
ExpSet::value_t expand(const ExpSet &rs, const typename ExpSet::value_t &e)
Expand a typed expression.
Definition: expand.hh:151
ATTRIBUTE_CONST bool is_eps_acyclic(const Aut &aut)
expression shuffle_expression(const expression &lhs, const expression &rhs)
Bridge (shuffle).
Definition: conjunction.hh:705
Definition: a-star.hh:8
expression conjunction_expression(const expression &lhs, const expression &rhs)
Bridge (conjunction).
Definition: conjunction.hh:887