25 template <Automaton Aut1, Automaton Aut2>
28 -> std::enable_if_t<(std::is_same<weightset_t_of<Aut1>,
b>::value
29 && std::is_same<weightset_t_of<Aut2>,
b>::value),
40 template <Automaton Aut1, Automaton Aut2>
43 -> decltype((std::enable_if_t<!std::is_same<weightset_t_of<Aut1>,
b>()>(),
44 a2->weightset()->sub(a2->weightset()->zero(),
45 a2->weightset()->one()),
48 const auto& ws2 = *a2->weightset();
53 lweight(ws2.sub(ws2.zero(), ws2.one()),
64 template <Automaton Aut1, Automaton Aut2>
68 const auto& a1 = aut1->
as<Aut1>();
69 const auto& a2 = aut2->
as<Aut2>();
81 template <
typename ExpSet1,
typename ExpSet2>
84 const typename ExpSet1::value_t r1,
86 const typename ExpSet2::value_t r2)
102 template <
typename ExpSet1,
typename ExpSet2>
106 const auto& l = r1->as<ExpSet1>();
107 const auto&
r = r2->as<ExpSet2>();
109 r.valueset(), r.value());
120 template <Automaton Lhs, Automaton Rhs>
121 fresh_automaton_t_of<Lhs>
138 template <Automaton Lhs, Automaton Rhs>
142 const auto& l = lhs->
as<Lhs>();
143 const auto&
r = rhs->
as<Rhs>();
154 template <
typename ExpSet>
155 typename ExpSet::value_t
157 const typename ExpSet::value_t& lhs,
158 const typename ExpSet::value_t& rhs)
160 return rs.conjunction(lhs, rs.complement(rhs));
168 template <
typename ExpSetLhs,
typename ExpSetRhs>
172 const auto& l = lhs->as<ExpSetLhs>();
173 const auto&
r = rhs->as<ExpSetLhs>();
auto lweight(const weight_t_of< Aut > &w, const Aut &aut, Tag tag={}) -> fresh_automaton_t_of< Aut >
Left-multiplication of an automaton by a weight.
automaton difference(const automaton &lhs, const automaton &rhs)
Bridge.
bool is_deterministic(const Aut &aut, state_t_of< Aut > s)
Whether state s is deterministic in aut.
auto determinize(const Aut &a, Tag={}, bool_constant< Lazy >={})
weightset_mixin< detail::r_impl > r
Provide a variadic mul on top of a binary mul(), and one().
weightset_mixin< detail::b_impl > b
auto complement(const Aut &aut) -> decltype(copy(aut))
auto add(const Aut1 &lhs, const Aut2 &rhs, deterministic_tag)
auto realtime(const Aut &aut) -> decltype(proper(::vcsn::letterize(aut)))
Split the word transitions in the input automaton into letter ones, and remove the spontaneous transi...
auto are_equivalent(const ExpSet1 &rs1, const typename ExpSet1::value_t r1, const ExpSet2 &rs2, const typename ExpSet2::value_t r2) -> bool
Check equivalence between two expressions.
bool is_complete(const Aut &aut)
Whether aut is complete.
auto conjunction(const Aut &aut, to exp) -> fresh_automaton_t_of< Aut >
Repeated conjunction of a automaton.
auto complete(const Aut &aut) -> decltype(::vcsn::copy(aut))
A complete copy of aut.
bool is_useless(const Aut &a)
Whether all no state is useful.
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.
auto are_equivalent(const Aut1 &a1, const Aut2 &a2) -> std::enable_if_t<(std::is_same< weightset_t_of< Aut1 >, b >::value &&std::is_same< weightset_t_of< Aut2 >, b >::value), bool >
Check equivalence between Boolean automata on a free labelset.
auto reduce(const Aut &input) -> decltype(copy(input))
bool is_empty(const Aut &a) ATTRIBUTE_PURE
Whether has no states.
fresh_automaton_t_of< Lhs > difference(const Lhs &lhs, const Rhs &rhs)
An automaton that computes weights of lhs, but not by rhs.
ExpSet::value_t difference(const ExpSet &rs, const typename ExpSet::value_t &lhs, const typename ExpSet::value_t &rhs)
Difference of expressions.
expression difference_expression(const expression &lhs, const expression &rhs)
Bridge (difference).
auto strip(const Aut &aut)
Remove (all) the decorations from a decorated automaton.
value_impl< detail::expression_tag > expression
auto & as()
Extract wrapped typed automaton.
bool are_equivalent_expression(const expression &r1, const expression &r2)
Bridge (are_equivalent).
bool are_equivalent(const automaton &aut1, const automaton &aut2)
Bridge.