16 template <
typename... LS1,
typename... LS2,
17 std::size_t... I1, std::size_t... I2>
25 ls2.template set<I2>()...);
29 template <
typename... LS1,
typename... LS2>
37 constexpr
auto in = 0;
41 indices1_t{}, indices2_t{});
49 template <
typename Ctx1,
typename Ctx2>
54 auto ws =
join(*ctx1.weightset(), *ctx2.weightset());
63 template <
typename ContextLhs,
typename ContextRhs>
68 rhs.
as<ContextRhs>());
79 template <
typename ValueSet>
80 typename ValueSet::value_t
81 compose(
const ValueSet& vs,
82 const typename ValueSet::value_t& lhs,
83 const typename ValueSet::value_t& rhs)
85 return vs.compose(lhs, rhs);
98 template <
typename ExpSetLhs,
typename ExpSetRhs>
102 auto join_elts = join<ExpSetLhs, ExpSetRhs>(lhs, rhs);
103 return {std::get<0>(join_elts),
105 std::get<1>(join_elts),
106 std::get<2>(join_elts))};
120 template <
typename ExpSetLhs,
typename ExpSetRhs>
124 auto join_elts = join<ExpSetLhs, ExpSetRhs>(lhs, rhs);
125 return {std::get<0>(join_elts),
127 std::get<1>(join_elts),
128 std::get<2>(join_elts))};
142 template <
typename LabelSetLhs,
typename LabelSetRhs>
146 const auto& l1 = lhs->
as<LabelSetLhs>();
147 const auto& l2 = rhs->
as<LabelSetRhs>();
150 ls.compose(l1.valueset(), l1.value(),
151 l2.valueset(), l2.value())};
160 template <
typename Ctx1,
typename Ctx2>
174 template <
typename PolSetLhs,
typename PolSetRhs>
178 const auto& p1 = lhs->
as<PolSetLhs>();
179 const auto& p2 = rhs->
as<PolSetRhs>();
182 ps.compose(p1.valueset(), p1.value(),
183 p2.valueset(), p2.value())};
value_impl< detail::expansion_tag > expansion
tupleset< ValueSets... > make_tupleset(const ValueSets &... vss)
size_t size(const ExpSet &rs, const typename ExpSet::value_t &r)
expansion compose_expansion(const expansion &lhs, const expansion &rhs)
Bridge (compose).
expression compose_expression(const expression &lhs, const expression &rhs)
Bridge (compose).
auto & as()
Extract wrapped typed value.
auto compose_labelset(const tupleset< LS1... > &ls1, const tupleset< LS2... > &ls2)
polynomialset< Context, Kind > make_polynomialset(const Context &context)
value_impl< detail::polynomial_tag > polynomial
Ctx make_context(const std::string &name)
Build a context from its name.
context compose_context(const context &lhs, const context &rhs)
Bridge (compose).
Provide a variadic mul on top of a binary mul(), and one().
auto join(const ValueSet &vs) -> ValueSet
The join of a single valueset.
Template-less root for contexts.
auto compose_polynomialset(const polynomialset< Ctx1 > &ps1, const polynomialset< Ctx2 > &ps2)
auto in(const Aut &aut, state_t_of< Aut > s)
Indexes of visible transitions arriving to state s.
ValueSet::value_t compose(const ValueSet &vs, const typename ValueSet::value_t &lhs, const typename ValueSet::value_t &rhs)
Composition of values.
auto & as()
Downcast to the exact type.
polynomial compose_polynomial(const polynomial &lhs, const polynomial &rhs)
Bridge (compose).
label compose_label(const label &lhs, const label &rhs)
Bridge (compose).
auto compose_context(const Ctx1 &ctx1, const Ctx2 &ctx2)
value_impl< detail::expression_tag > expression
auto compose_labelset_impl(const tupleset< LS1... > &ls1, const tupleset< LS2... > &ls2, detail::index_sequence< I1... >, detail::index_sequence< I2... >)
auto out(const Aut &aut, state_t_of< Aut > s)
Indexes of visible transitions leaving state s.