Vcsn  2.8
Be Rational
instantiate.hh
Go to the documentation of this file.
1 #pragma once
2 
4 #include <vcsn/algos/add.hh>
5 #include <vcsn/algos/are-equivalent.hh> // difference
7 #include <vcsn/algos/cerny.hh>
9 #include <vcsn/algos/compare.hh>
10 #include <vcsn/algos/complete.hh>
14 #include <vcsn/algos/constant.hh>
15 #include <vcsn/algos/copy.hh>
16 #include <vcsn/algos/de-bruijn.hh>
17 #include <vcsn/algos/derivation.hh>
20 #include <vcsn/algos/divide.hh>
21 #include <vcsn/algos/divkbaseb.hh>
24 #include <vcsn/algos/evaluate.hh>
25 #include <vcsn/algos/expand.hh>
27 #include <vcsn/algos/inductive.hh>
29 #include <vcsn/algos/info.hh>
30 #include <vcsn/algos/is-acyclic.hh>
34 #include <vcsn/algos/is-proper.hh>
36 #include <vcsn/algos/is-valid.hh>
37 #include <vcsn/algos/ladybird.hh>
39 #include <vcsn/algos/minimize.hh>
40 #include <vcsn/algos/multiply.hh>
41 #include <vcsn/algos/normalize.hh>
42 #include <vcsn/algos/num-tapes.hh>
43 #include <vcsn/algos/print.hh>
44 #include <vcsn/algos/proper.hh>
46 #include <vcsn/algos/read.hh>
47 #include <vcsn/algos/shortest.hh>
49 #include <vcsn/algos/sort.hh>
50 #include <vcsn/algos/split.hh>
51 #include <vcsn/algos/standard.hh>
53 #include <vcsn/algos/star.hh>
55 #include <vcsn/algos/thompson.hh>
58 #include <vcsn/algos/transpose.hh>
59 #include <vcsn/algos/u.hh>
60 #include <vcsn/algos/weight.hh>
61 
63 
64 #include <vcsn/dyn/registries.hh>
65 
66 #include <vcsn/weightset/b.hh>
68 
69 #include <vcsn/misc/attributes.hh>
70 #include <vcsn/dyn/name.hh>
71 
72 /* The purpose of this file is manyfold:
73 
74  - *prevent* the instantiation of the algorithms that will be
75  provided by the context library. This is what the INSTANTIATE
76  macros do. In this case MAYBE_EXTERN is "extern".
77 
78  - instantiate them when building the context libraries. In this
79  context, MAYBE_EXTERN is "".
80 
81  - register the dyn functions. This is what the register function
82  templates do.
83 
84 */
85 
86 namespace vcsn
87 {
88 #define VCSN_CTX_INSTANTIATE_PRINT(Format, Aut) \
89  MAYBE_EXTERN template \
90  LIBVCSN_API \
91  std::ostream& Format<Aut>(const Aut& aut, std::ostream& out)
92 
93  /*-------------------------------------------------------.
94  | Instantiate the function that work for every context. |
95  `-------------------------------------------------------*/
96 
97 #define VCSN_CTX_INSTANTIATE_1(Ctx) \
98  MAYBE_EXTERN template \
99  class LIBVCSN_API mutable_automaton<Ctx>; \
100  \
101  /* to_expression. */ \
102  MAYBE_EXTERN template \
103  Ctx::expression_t \
104  to_expression<mutable_automaton<Ctx>> \
105  (const mutable_automaton<Ctx>& aut, \
106  const state_chooser_t<mutable_automaton<Ctx>>& next_state); \
107  \
108  /* dot. */ \
109  VCSN_CTX_INSTANTIATE_PRINT(dot, mutable_automaton<Ctx>); \
110  \
111  /* efsm. */ \
112  VCSN_CTX_INSTANTIATE_PRINT(efsm, mutable_automaton<Ctx>); \
113  \
114  /* print. */ \
115  MAYBE_EXTERN template \
116  std::ostream& \
117  print<expressionset<Ctx>>(const expressionset<Ctx>& rs, \
118  const Ctx::expression_t& e, std::ostream& o, \
119  format fmt); \
120  \
121  /* standard. */ \
122  MAYBE_EXTERN template \
123  class rat::standard_visitor<mutable_automaton<Ctx>, Ctx>; \
124  \
125  /* tikz. */ \
126  VCSN_CTX_INSTANTIATE_PRINT(tikz, mutable_automaton<Ctx>); \
127  \
128  /* transpose. */ \
129  MAYBE_EXTERN template \
130  class LIBVCSN_API detail::transpose_automaton<mutable_automaton<Ctx>>; \
131  MAYBE_EXTERN template \
132  class LIBVCSN_API detail::transposer<expressionset<Ctx>>
133 
134 
135  /*----------------------------------.
136  | Register the abstract functions. |
137  `----------------------------------*/
138 
139 #define REGISTER(Algo, ...) \
140  dyn::detail::Algo ## _register(ssignature<__VA_ARGS__>(), \
141  dyn::detail::Algo<__VA_ARGS__>)
142 
143  namespace ctx
144  {
145  namespace detail
146  {
147 
149  template <Automaton Aut>
150  bool
152  {
153  using aut_t = Aut;
154  using ctx_t = context_t_of<Aut>;
155  // Wordset.
157 
158  REGISTER(compare, aut_t, aut_t);
159  REGISTER(context_of, aut_t);
160  REGISTER(copy, aut_t);
161  REGISTER(determinize, aut_t, const std::string);
162  REGISTER(evaluate, aut_t, wls_t);
163  REGISTER(info, aut_t, std::ostream, bool);
164  REGISTER(minimize, aut_t, const std::string);
165  REGISTER(print, aut_t, std::ostream, const std::string);
166  REGISTER(proper, aut_t, direction, bool, const std::string);
167  REGISTER(to_expression, aut_t, rat::identities, const std::string);
168 
169 #if 2 <= VCSN_INSTANTIATION
170  using ws_t = weightset_t_of<ctx_t>;
171  REGISTER(accessible, aut_t);
172  REGISTER(add, aut_t, aut_t, const std::string);
173  REGISTER(are_isomorphic, aut_t, aut_t);
174  REGISTER(coaccessible, aut_t);
175  REGISTER(complete, aut_t);
176  REGISTER(conjunction, std::tuple<aut_t, aut_t>, bool);
177  REGISTER(conjunction_repeated, aut_t, unsigned);
178  REGISTER(infiltrate, std::tuple<aut_t, aut_t>);
179  REGISTER(is_ambiguous, aut_t);
180  REGISTER(is_complete, aut_t);
181  REGISTER(is_deterministic, aut_t);
182  REGISTER(is_empty, aut_t);
183  REGISTER(is_eps_acyclic, aut_t);
184  REGISTER(is_normalized, aut_t);
185  REGISTER(is_out_sorted, aut_t);
186  REGISTER(is_proper, aut_t);
187  REGISTER(is_standard, aut_t);
188  REGISTER(is_synchronized_by, aut_t, wls_t);
189  REGISTER(is_synchronizing, aut_t);
190  REGISTER(is_trim, aut_t);
191  REGISTER(is_useless, aut_t);
192  REGISTER(is_valid, aut_t);
193  REGISTER(lweight, ws_t, aut_t, const std::string);
194  REGISTER(multiply, aut_t, aut_t, const std::string);
195  REGISTER(multiply_repeated, aut_t, int, int, const std::string);
196  REGISTER(pair, aut_t, bool);
197  REGISTER(push_weights, aut_t);
198  REGISTER(rweight, aut_t, ws_t, const std::string);
199  REGISTER(shortest, aut_t, boost::optional<unsigned>, boost::optional<unsigned>);
200  REGISTER(shuffle, std::tuple<aut_t, aut_t>);
201  REGISTER(sort, aut_t);
202  REGISTER(standard, aut_t);
203  REGISTER(star, aut_t, const std::string);
204  REGISTER(synchronizing_word, aut_t, const std::string);
205  REGISTER(transpose, aut_t);
206  REGISTER(trim, aut_t);
207 #endif
208 
209  return true;
210  }
211 
213  template <typename Ctx>
214  bool
216  {
217  using ctx_t = Ctx;
218 
220  REGISTER(make_context, ctx_t);
221  REGISTER(make_word_context, ctx_t);
222 
223 #if 2 <= VCSN_INSTANTIATION
224  REGISTER(cerny, ctx_t, unsigned);
225  REGISTER(de_bruijn, ctx_t, unsigned);
226  REGISTER(divkbaseb, ctx_t, unsigned, unsigned);
227  REGISTER(double_ring, ctx_t, unsigned, const std::vector<unsigned>);
228  REGISTER(ladybird, ctx_t, unsigned);
229  REGISTER(u, ctx_t, unsigned);
230 #endif
231  return true;
232  }
233 
235  template <typename ExpressionSet>
236  bool
238  {
239  using rs_t = ExpressionSet;
240  using ctx_t = context_t_of<rs_t>;
241  using ws_t = weightset_t_of<ctx_t>;
242 
243  REGISTER(add_expression, rs_t, rs_t);
244  REGISTER(compare_expression, rs_t, rs_t);
245  REGISTER(concatenate_expression, rs_t, rs_t);
246  REGISTER(conjunction_expression, rs_t, rs_t);
251  REGISTER(identities_of, rs_t);
252  REGISTER(infiltrate_expression, rs_t, rs_t);
253  REGISTER(info_expression, rs_t, std::ostream);
254  REGISTER(ldivide_expression, rs_t, rs_t);
255  REGISTER(lweight_expression, ws_t, rs_t);
256  REGISTER(multiply_expression, rs_t, rs_t);
257  REGISTER(multiply_expression_repeated, rs_t, int, int);
258  REGISTER(print_expression, rs_t, std::ostream, const std::string);
259  REGISTER(rdivide_expression, rs_t, rs_t);
260  REGISTER(rweight_expression, rs_t, ws_t);
261  REGISTER(shuffle_expression, rs_t, rs_t);
263  REGISTER(thompson, rs_t);
264 
265 #if 2 <= VCSN_INSTANTIATION
268  REGISTER(constant_term, rs_t);
269  REGISTER(derived_term, rs_t, const std::string);
270  REGISTER(expand, rs_t);
271  REGISTER(inductive, rs_t, const std::string);
272  REGISTER(split, rs_t);
273  REGISTER(star_height, rs_t);
274  REGISTER(to_expansion, rs_t);
277 #endif
278  return true;
279  }
280 
281  template <typename Ctx>
282  bool
284  {
285  return true;
286  }
287 
288  template <typename Ctx>
289  bool
291  {
292 #if 2 <= VCSN_INSTANTIATION
293  using ctx_t = Ctx;
294  using rs_t = expressionset<ctx_t>;
295 
296  // Wordset.
298 
299  // Word polynomialset.
301 
302  // Same labelset, but over Booleans.
303  using b_ctx_t = context<labelset_t_of<Ctx>, b>;
304  using b_rs_t = expressionset<b_ctx_t>;
305 
306  REGISTER(derivation, rs_t, wls_t, bool);
307  REGISTER(difference_expression, rs_t, b_rs_t);
308  REGISTER(list_polynomial, wps_t, std::ostream);
309  REGISTER(multiply_polynomial, wps_t, wps_t);
310  REGISTER(print_polynomial, wps_t, std::ostream, const std::string);
311 #endif
312 
313  return true;
314  }
315 
316  template <typename Ctx>
317  bool
318  register_functions_is_free(std::false_type)
319  {
320  return true;
321  }
322 
323  template <typename Ctx>
324  bool
326  {
327 #if 2 <= VCSN_INSTANTIATION
328  using ctx_t = Ctx;
329  using aut_t = mutable_automaton<ctx_t>;
330 
331  REGISTER(eliminate_state, aut_t, int);
332 #endif
333 
334  return true;
335  }
336 
337  template <typename Ctx>
338  bool
340  {
341  return true;
342  }
343 
344  template <typename Ctx>
345  ATTRIBUTE_CONST
346  bool
348  {
349  return true;
350  }
351 
352  template <typename Ctx>
353  ATTRIBUTE_CONST
354  bool
356  {
357  return true;
358  }
359 
360  template <typename Ctx>
361  bool
363  {
364  return true;
365  }
366 
367  template <typename Ctx>
368  bool
370  {
371  using ctx_t = Ctx;
372  using aut_t = mutable_automaton<ctx_t>;
373  using rs_t = expressionset<ctx_t>;
374  using ls_t = labelset_t_of<ctx_t>;
375  using ws_t = weightset_t_of<ctx_t>;
376 
377  // label polynomialset.
378  using lps_t = polynomialset<ctx_t>;
379 
380  register_automaton_functions<aut_t>();
381  register_context_functions<ctx_t>();
382  register_expression_functions<rs_t>();
383 
384  REGISTER(num_tapes, ctx_t);
385  REGISTER(print_context, ctx_t, std::ostream, const std::string);
386  REGISTER(print_polynomial, lps_t, std::ostream, const std::string);
387  REGISTER(print_weight, ws_t, std::ostream, const std::string);
388  REGISTER(read_label, ctx_t, std::istream, bool);
389  REGISTER(read_polynomial, ctx_t, std::istream);
390  REGISTER(read_weight, ctx_t, std::istream);
393 
394 #if 2 <= VCSN_INSTANTIATION
395  // expression polynomialset.
397  // expansionset.
398  using es_t = rat::expansionset<rs_t>;
399 
400  REGISTER(add_weight, ws_t, ws_t);
401  REGISTER(list_polynomial, rps_t, std::ostream);
402  REGISTER(multiply_weight, ws_t, ws_t);
403  REGISTER(print_expansion, es_t, std::ostream, const std::string);
404  REGISTER(print_label, ls_t, std::ostream, const std::string);
405  REGISTER(print_polynomial, rps_t, std::ostream, const std::string);
406 #endif
408  register_functions_is_free<ctx_t>(is_free_t());
409 
410  return register_kind_functions<ctx_t>(typename ctx_t::kind_t());
411  }
412  }
413  }
414 
415 #undef REGISTER
416 
417 #if VCSN_INSTANTIATION
418 # define VCSN_CTX_INSTANTIATE_2(Ctx) \
419  namespace ctx \
420  { \
421  namespace detail \
422  { \
423  static bool registered ATTRIBUTE_USED \
424  = register_functions<Ctx>(); \
425  } \
426  }
427 #else
428 # define VCSN_CTX_INSTANTIATE_2(Ctx)
429 #endif
430 
431 #define VCSN_CTX_INSTANTIATE(Ctx) \
432  /* VCSN_CTX_INSTANTIATE_1(Ctx);*/ \
433  VCSN_CTX_INSTANTIATE_2(Ctx)
434 
435 #ifndef MAYBE_EXTERN
436 # define MAYBE_EXTERN extern
437 #endif
438 }
std::shared_ptr< detail::mutable_automaton_impl< Context > > mutable_automaton
Definition: fwd.hh:25
Aut transpose(const transpose_automaton< Aut > &aut)
The transpose of a transpose automaton is the original automaton.
Definition: transpose.hh:253
expression expression_zero(const context &ctx, identities ids)
Bridge.
Definition: constant.hh:24
int compare_expression(const expression &lhs, const expression &rhs)
Bridge (compare).
Definition: compare.hh:22
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:190
automaton multiply_repeated(const automaton &a, int min, int max, const std::string &algo)
Bridge (multiply).
Definition: multiply.hh:259
mutable_automaton< Context > de_bruijn(const Context &ctx, unsigned n)
Build a automaton for (a+b)*a(a+b){n}.
Definition: de-bruijn.hh:14
automaton_editor * make_automaton_editor(const context &ctx)
Bridge.
typename detail::weightset_t_of_impl< base_t< ValueSet > >::type weightset_t_of
Definition: traits.hh:67
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:292
expression add_expression(const expression &lhs, const expression &rhs)
Bridge (add).
Definition: add.hh:186
auto read_weight(const Context &ctx, std::istream &is) -> weight_t_of< Context >
Definition: read.hh:76
bool is_valid(const Aut &aut)
Definition: is-valid.hh:139
std::ostream & print_label(const label &label, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:233
std::ostream & print(const Aut &aut, std::ostream &out=std::cout, const std::string &fmt="default")
Definition: print.hh:83
std::ostream & print_polynomial(const polynomial &polynomial, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:288
auto multiply(const Aut1 &lhs, const Aut2 &rhs, Tag tag={}) -> decltype(lhs->null_state(), rhs->null_state(), detail::make_join_automaton(tag, lhs, rhs))
Concatenate two automata, general case.
Definition: multiply.hh:151
Aut inductive(const ExpSet &rs, const typename ExpSet::value_t &r, Tag={})
Build an automaton by induction from an expression.
Definition: inductive.hh:319
auto read_polynomial(const Context &ctx, std::istream &is) -> typename polynomialset< Context >::value_t
Definition: read.hh:46
context make_word_context(const context &ctx)
Bridge.
bool is_proper(const Aut &aut)
Test whether an automaton is proper.
Definition: is-proper.hh:47
bool is_synchronizing(const Aut &aut)
Whether this automaton is synchronizing, i.e., has synchronizing words.
std::ostream & print_weight(const weight &weight, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:308
polynomial multiply_polynomial(const polynomial &lhs, const polynomial &rhs)
Bridge (multiply).
Definition: multiply.hh:464
bool register_functions()
Definition: instantiate.hh:369
expression copy_expression(const expression &exp, const context &ctx, identities ids)
Bridge (copy).
Definition: copy.hh:454
auto push_weights(const Aut &aut) -> decltype(::vcsn::copy(aut))
The algorithm weight pushing.
Definition: push-weights.hh:44
auto read_label(const Context &ctx, std::istream &is, bool quoted=false) -> label_t_of< Context >
Definition: read.hh:16
bool is_standard(const Aut &a)
Whether a is standard.
Definition: standard.hh:28
direction
Orientation.
Definition: direction.hh:11
expression lweight_expression(const weight &weight, const expression &exp)
Bridge (lweight).
Definition: weight.hh:269
bool register_context_functions()
Instantiate the core functions for expressions of type ExpSet.
Definition: instantiate.hh:215
mutable_automaton< Context > u(const Context &ctx, unsigned n)
The Brzozowski universal witness.
Definition: u.hh:15
rat::expression_polynomial_t< ExpSet > split(const ExpSet &rs, const typename ExpSet::value_t &e)
Split an expression.
Definition: split.hh:227
auto sort(const Aut &a) -> permutation_automaton< Aut >
Definition: sort.hh:161
weight multiply_weight(const weight &lhs, const weight &rhs)
Bridge (multiply).
Definition: multiply.hh:485
word_t_of< Aut > synchronizing_word(const Aut &aut, const std::string &algo="greedy")
Return a synchronizing word for aut using algo algo.
Ctx make_context(const std::string &name)
Build a context from its name.
Definition: make-context.hh:21
bool is_out_sorted(const Aut &a)
Whether for each state, the outgoing transitions are sorted by increasing label.
Definition: sort.hh:59
expression difference_expression(const expression &lhs, const expression &rhs)
Bridge (difference).
bool are_isomorphic(const Aut1 &a1, const Aut2 &a2)
ExpansionSet::value_t determinize(const ExpansionSet &xs, const typename ExpansionSet::value_t &x)
Determinize an expansion.
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:244
An expressionset can implement several different sets of identities on expressions.
Definition: identities.hh:20
typename detail::context_t_of_impl< base_t< ValueSet > >::type context_t_of
Definition: traits.hh:61
auto evaluate(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: evaluate.hh:182
Provide a variadic mul on top of a binary mul(), and one().
Definition: fwd.hh:46
expression ldivide_expression(const expression &lhs, const expression &rhs)
Bridge (ldivide).
Definition: divide.hh:41
expression infiltrate_expression(const expression &lhs, const expression &rhs)
Bridge (infiltrate).
filter_automaton< Aut > trim(const Aut &a)
Useful part of an automaton.
Definition: accessible.hh:154
#define REGISTER(Algo,...)
Definition: instantiate.hh:139
auto complete(const Aut &aut) -> decltype(::vcsn::copy(aut))
A complete copy of aut.
Definition: complete.hh:65
ATTRIBUTE_CONST std::enable_if_t< context_t_of< Aut >::has_one(), bool > is_eps_acyclic(const Aut &aut)
Detect epsilon-circuits.
Definition: is-acyclic.hh:114
std::integral_constant< bool, B > bool_constant
Definition: type_traits.hh:12
bool is_synchronized_by(const Aut &aut, const word_t_of< Aut > &w)
Whether w synchronizes automaton aut.
context context_of_expression(const expression &exp)
Bridge (context_of).
Definition: make-context.hh:71
pair_automaton< Aut > pair(const Aut &aut, bool keep_initials=false)
Definition: pair.hh:252
bool is_useless(const Aut &a)
Whether all no state is useful.
Definition: accessible.hh:172
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:322
expression to_expression_class(const context &ctx, identities ids, const letter_class_t &letters, bool accept)
Bridge (to_expression).
typename detail::labelset_t_of_impl< base_t< ValueSet > >::type labelset_t_of
Definition: traits.hh:63
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
expression multiply_expression_repeated(const expression &re, int min, int max)
Bridge (multiply).
Definition: multiply.hh:409
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
bool is_ambiguous(const Aut &aut)
Whether an automaton is ambiguous.
Definition: is-ambiguous.hh:88
Definition: a-star.hh:8
std::ostream & print_context(const context &ctx, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:140
expression rweight_expression(const expression &exp, const weight &weight)
Bridge (rweight).
Definition: weight.hh:430
automaton standard_expression(const expression &exp)
Bridge (standard).
Definition: standard.hh:405
bool is_empty(const Aut &a) ATTRIBUTE_PURE
Whether has no states.
Definition: accessible.hh:196
filter_automaton< Aut > accessible(const Aut &a)
Accessible part of an automaton.
Definition: accessible.hh:138
expression to_expression_label(const context &ctx, identities ids, const label &lbl)
Bridge (to_expression).
std::set< std::pair< std::string, std::string > > letter_class_t
A set of letter ranges.
Definition: fwd.hh:111
filter_automaton< Aut > coaccessible(const Aut &a)
Coaccessible part of an automaton.
Definition: accessible.hh:146
expression rdivide_expression(const expression &lhs, const expression &rhs)
Bridge (rdivide).
Definition: divide.hh:148
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:279
context context_of(const automaton &aut)
Bridge.
Definition: make-context.hh:62
typename law_traits< LabelSet >::type law_t
The smallest wordset that includes LabelSet.
Definition: labelset.hh:254
std::ostream & list_polynomial(const polynomial &polynomial, std::ostream &o)
Bridge (list).
Definition: print.hh:269
expression concatenate_expression(const expression &lhs, const expression &rhs)
Bridge (concatenate).
Definition: multiply.hh:313
ExpSet::value_t to_expression(Aut &a, Profiler &profiler)
Definition: to-automaton.hh:65
expression transposition_expression(const expression &exp)
Bridge (transposition).
Definition: transpose.hh:310
expression complement_expression(const expression &exp)
Bridge (complement).
Definition: complement.hh:102
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.
expression shuffle_expression(const expression &lhs, const expression &rhs)
Bridge (shuffle).
std::ostream & print_expansion(const expansion &expansion, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:172
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.
Definition: to-automaton.hh:17
std::enable_if_t< labelset_t_of< ExpSet >::is_letterized(), 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 letterized labelsets.
identities identities_of(const expression &exp)
Bridge.
mutable_automaton< Context > ladybird(const Context &ctx, unsigned n)
Build the ladybird automaton of n states.
Definition: ladybird.hh:14
std::ostream & print_expression(const expression &exp, std::ostream &o, const std::string &fmt)
Bridge (print).
Definition: print.hh:214
expression transpose_expression(const expression &exp)
Bridge (transpose).
Definition: transpose.hh:292
rat::expansionset< ExpSet >::value_t to_expansion(const ExpSet &rs, const typename ExpSet::value_t &e)
First order expansion.
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:16
bool register_kind_functions(labels_are_letters)
Definition: instantiate.hh:283
bool is_trim(const Aut &a)
Whether all its states are useful.
Definition: accessible.hh:165
auto standard(const Aut &aut)
Definition: standard.hh:116
expression expression_one(const context &ctx, identities ids)
Bridge.
Definition: constant.hh:15
weight_t_of< ExpSet > constant_term(const ExpSet &rs, const typename ExpSet::value_t &e)
The constant term of e.
bool register_expression_functions()
Instantiate the core functions for expressions of type ExpSet.
Definition: instantiate.hh:237
unsigned star_height(const ExpSet &es, const typename ExpSet::value_t &e)
Star height of an expression.
Definition: star-height.hh:146
std::ostream & info_expression(const expression &exp, std::ostream &o)
Bridge (info).
Definition: info.hh:195
expression multiply_expression(const expression &lhs, const expression &rhs)
Bridge (multiply).
Definition: multiply.hh:295
mutable_automaton< Context > double_ring(const Context &ctx, unsigned n, const std::vector< unsigned > &finals)
Definition: double-ring.hh:16
constexpr auto num_tapes() -> size_t
Definition: num-tapes.hh:14
bool is_normalized(const Aut &a)
Whether a is standard and co-standard.
Definition: normalize.hh:16
ExpSet::value_t expand(const ExpSet &rs, const typename ExpSet::value_t &r)
Expand a typed expression, i.e., distribute multiplications over sums.
Definition: expand.hh:13
expression conjunction_expression(const expression &lhs, const expression &rhs)
Bridge (conjunction).
bool register_automaton_functions()
Instantiate the functions for automata of type Aut.
Definition: instantiate.hh:151
int compare(const Lhs &lhs, const Rhs &rhs)
Comparison between lhs and rhs.
automaton conjunction_repeated(const automaton &aut, unsigned n)
Bridge (conjunction).
Definition: conjunction.hh:945
bool register_functions_is_free(std::true_type)
Definition: instantiate.hh:290
weight add_weight(const weight &lhs, const weight &rhs)
Bridge (add).
Definition: add.hh:230
std::ostream & info(const Aut &aut, std::ostream &out=std::cout, unsigned details=2)
Print info about an automaton.
Definition: info.hh:73
bool is_complete(const Aut &aut)
Whether aut is complete.
Definition: is-complete.hh:14
bool is_valid_expression(const expression &exp)
Bridge (is_valid).