![]() |
Vcsn
2.8
Be Rational
|
Build the (accessible part of the) product. More...
#include <conjunction.hh>
Public Types | |
using | state_name_t = typename super_t::state_name_t |
using | state_t = typename super_t::state_t |
template<Automaton A> | |
using | transition_map_t = typename super_t::template transition_map_t< A > |
template<size_t... I> | |
using | seq = typename super_t::template seq< I... > |
using | context_t = context_t_of< Aut > |
The context of the result. More... | |
using | labelset_t = labelset_t_of< context_t > |
using | weightset_t = weightset_t_of< context_t > |
using | label_t = typename labelset_t::value_t |
using | weight_t = typename weightset_t::value_t |
using | automata_t = std::tuple< Auts... > |
The type of input automata. More... | |
template<size_t I> | |
using | input_automaton_t = base_t< tuple_element_t< I, automata_t > > |
The type of the Ith input automaton, unqualified. More... | |
![]() | |
using | tuple_automaton_t = tuple_automaton< Aut, Auts... > |
The underlying automaton, output and inputs. More... | |
using | tuple_automaton_impl = typename tuple_automaton_t::element_type |
using | state_name_t = typename tuple_automaton_impl::state_name_t |
using | state_t = typename tuple_automaton_impl::state_t |
using | seq = typename tuple_automaton_impl::template seq< I... > |
using | self_t = lazy_tuple_automaton |
using | super_t = automaton_decorator< tuple_automaton_t > |
using | decorated_t = product_automaton_impl< Lazy, Aut, Auts... > |
The automaton holding the logic. More... | |
using | weightset_t = weightset_t_of< Aut > |
![]() | |
using | automaton_t = Aut |
The type of automaton to wrap. More... | |
using | context_t = context_t_of< Aut > |
using | element_type = typename automaton_t::element_type |
The automaton type, without shared_ptr. More... | |
using | fresh_automaton_t = typename element_type::template fresh_automaton_t< Ctx > |
The (shared pointer) type to use it we have to create an automaton of the same (underlying) type. More... | |
using | kind_t = typename context_t::kind_t |
using | labelset_t = typename context_t::labelset_t |
using | labelset_ptr = typename context_t::labelset_ptr |
using | label_t = typename labelset_t::value_t |
using | weightset_t = typename context_t::weightset_t |
using | weightset_ptr = typename context_t::weightset_ptr |
using | weight_t = typename weightset_t::value_t |
using | state_t = state_t_of< automaton_t > |
using | transition_t = transition_t_of< automaton_t > |
Public Member Functions | |
std::ostream & | print_set (std::ostream &o, format fmt={}) const |
product_automaton_impl (Aut aut, const Auts &... auts) | |
Build a product automaton. More... | |
void | conjunction () |
Compute the (accessible part of the) conjunction. More... | |
template<bool L = Lazy> | |
std::enable_if_t< sizeof...(Auts)==2 &&!L > | ldivide () |
Compute the left quotient. More... | |
template<bool L = Lazy> | |
std::enable_if_t< sizeof...(Auts)==2 &&!L > | add () |
Compute the deterministic sum of two deterministic automata. More... | |
template<bool L = Lazy> | |
std::enable_if_t< sizeof...(Auts)==2 &&!L > | ldivide_here () |
Compute the left quotient in-place. More... | |
void | shuffle () |
Compute the (accessible part of the) shuffle product. More... | |
void | infiltrate () |
Compute the (accessible part of the) infiltration product. More... | |
void | add_transitions (const state_t src, const state_name_t &psrc) |
Tell lazy_tuple_automaton how to add the transitions to a state. More... | |
![]() | |
lazy_tuple_automaton (Aut aut, const Auts &... auts) | |
auto | origins () const -> decltype(aut_->origins()) |
A map from result state to tuple of original states. More... | |
void | complete_ (state_t s) const |
Complete a state: find its outgoing transitions. More... | |
auto | all_out (state_t s) const -> decltype(all_out(aut_, s)) |
All the outgoing transitions. More... | |
![]() | |
automaton_decorator (automaton_t aut) | |
automaton_decorator (const automaton_decorator &aut) | |
automaton_decorator (const context_t &ctx) | |
automaton_decorator (automaton_decorator &&aut) | |
automaton_decorator & | operator= (automaton_decorator &&that) |
automaton_t | strip () |
The automaton we decorate. More... | |
auto | all_in (Args &&... args) const -> decltype(aut_-> all_in(std::forward< Args >(args)...)) |
auto | all_out (Args &&... args) const -> decltype(aut_-> all_out(std::forward< Args >(args)...)) |
auto | all_states (Args &&... args) const -> decltype(aut_-> all_states(std::forward< Args >(args)...)) |
auto | all_transitions (Args &&... args) const -> decltype(aut_-> all_transitions(std::forward< Args >(args)...)) |
auto | context (Args &&... args) const -> decltype(aut_-> context(std::forward< Args >(args)...)) |
auto | dst_of (Args &&... args) const -> decltype(aut_-> dst_of(std::forward< Args >(args)...)) |
auto | get_final_weight (Args &&... args) const -> decltype(aut_-> get_ final _weight(std |
auto | get_initial_weight (Args &&... args) const -> decltype(aut_-> get_initial_weight(std::forward< Args >(args)...)) |
auto | get_transition (Args &&... args) const -> decltype(aut_-> get_transition(std::forward< Args >(args)...)) |
auto | has_state (Args &&... args) const -> decltype(aut_-> has_state(std::forward< Args >(args)...)) |
auto | has_transition (Args &&... args) const -> decltype(aut_-> has_transition(std::forward< Args >(args)...)) |
auto | is_final (Args &&... args) const -> decltype(aut_-> is_ final(std |
auto | is_initial (Args &&... args) const -> decltype(aut_-> is_initial(std::forward< Args >(args)...)) |
auto | label_of (Args &&... args) const -> decltype(aut_-> label_of(std::forward< Args >(args)...)) |
auto | labelset (Args &&... args) const -> decltype(aut_-> labelset(std::forward< Args >(args)...)) |
auto | num_all_states (Args &&... args) const -> decltype(aut_-> num_all_states(std::forward< Args >(args)...)) |
auto | num_finals (Args &&... args) const -> decltype(aut_-> num_ final s(std |
auto | num_initials (Args &&... args) const -> decltype(aut_-> num_initials(std::forward< Args >(args)...)) |
auto | num_states (Args &&... args) const -> decltype(aut_-> num_states(std::forward< Args >(args)...)) |
auto | num_transitions (Args &&... args) const -> decltype(aut_-> num_transitions(std::forward< Args >(args)...)) |
auto | prepost_label (Args &&... args) const -> decltype(aut_-> prepost_label(std::forward< Args >(args)...)) |
auto | print (Args &&... args) const -> decltype(aut_-> print(std::forward< Args >(args)...)) |
auto | print_set (Args &&... args) const -> decltype(aut_-> print_set(std::forward< Args >(args)...)) |
auto | print_state (Args &&... args) const -> decltype(aut_-> print_state(std::forward< Args >(args)...)) |
auto | print_state_name (Args &&... args) const -> decltype(aut_-> print_state_name(std::forward< Args >(args)...)) |
auto | src_of (Args &&... args) const -> decltype(aut_-> src_of(std::forward< Args >(args)...)) |
auto | state_has_name (Args &&... args) const -> decltype(aut_-> state_has_name(std::forward< Args >(args)...)) |
auto | is_lazy (Args &&... args) const -> decltype(aut_-> is_lazy(std::forward< Args >(args)...)) |
auto | is_lazy_in (Args &&... args) const -> decltype(aut_-> is_lazy_in(std::forward< Args >(args)...)) |
auto | states (Args &&... args) const -> decltype(aut_-> states(std::forward< Args >(args)...)) |
auto | weight_of (Args &&... args) const -> decltype(aut_-> weight_of(std::forward< Args >(args)...)) |
auto | weightset (Args &&... args) const -> decltype(aut_-> weightset(std::forward< Args >(args)...)) |
auto | add_final (Args &&... args) -> decltype(aut_-> add_ final(std |
auto | add_initial (Args &&... args) -> decltype(aut_-> add_initial(std::forward< Args >(args)...)) |
auto | add_transition (Args &&... args) -> decltype(aut_-> add_transition(std::forward< Args >(args)...)) |
auto | add_transition_copy (Args &&... args) -> decltype(aut_-> add_transition_copy(std::forward< Args >(args)...)) |
auto | add_weight (Args &&... args) -> decltype(aut_-> add_weight(std::forward< Args >(args)...)) |
auto | del_state (Args &&... args) -> decltype(aut_-> del_state(std::forward< Args >(args)...)) |
auto | del_transition (Args &&... args) -> decltype(aut_-> del_transition(std::forward< Args >(args)...)) |
auto | lweight (Args &&... args) -> decltype(aut_-> lweight(std::forward< Args >(args)...)) |
auto | new_state (Args &&... args) -> decltype(aut_-> new_state(std::forward< Args >(args)...)) |
auto | new_transition (Args &&... args) -> decltype(aut_-> new_transition(std::forward< Args >(args)...)) |
auto | new_transition_copy (Args &&... args) -> decltype(aut_-> new_transition_copy(std::forward< Args >(args)...)) |
auto | rweight (Args &&... args) -> decltype(aut_-> rweight(std::forward< Args >(args)...)) |
auto | set_final (Args &&... args) -> decltype(aut_-> set_ final(std |
auto | set_lazy (Args &&... args) -> decltype(aut_-> set_lazy(std::forward< Args >(args)...)) |
auto | set_lazy_in (Args &&... args) -> decltype(aut_-> set_lazy_in(std::forward< Args >(args)...)) |
auto | set_initial (Args &&... args) -> decltype(aut_-> set_initial(std::forward< Args >(args)...)) |
auto | set_transition (Args &&... args) -> decltype(aut_-> set_transition(std::forward< Args >(args)...)) |
auto | set_weight (Args &&... args) -> decltype(aut_-> set_weight(std::forward< Args >(args)...)) |
auto | unset_final (Args &&... args) -> decltype(aut_-> unset_ final(std |
auto | unset_initial (Args &&... args) -> decltype(aut_-> unset_initial(std::forward< Args >(args)...)) |
Static Public Member Functions | |
static symbol | sname () |
![]() | |
static symbol | sname_ (const T &... t) |
![]() | |
static constexpr auto | lazy_transition (Args &&... args) -> decltype(element_type::lazy_transition(std::forward< Args >(args)...)) |
static constexpr auto | null_state (Args &&... args) -> decltype(element_type::null_state(std::forward< Args >(args)...)) |
static constexpr auto | null_transition (Args &&... args) -> decltype(element_type::null_transition(std::forward< Args >(args)...)) |
static constexpr auto | post (Args &&... args) -> decltype(element_type::post(std::forward< Args >(args)...)) |
static constexpr auto | pre (Args &&... args) -> decltype(element_type::pre(std::forward< Args >(args)...)) |
static constexpr auto | sname (Args &&... args) -> decltype(element_type::sname(std::forward< Args >(args)...)) |
Private Types | |
using | automaton_t = Aut |
The type of the resulting automaton. More... | |
using | self_t = product_automaton_impl |
using | super_t = lazy_tuple_automaton< self_t, false, Lazy, Aut, Auts... > |
Private Member Functions | |
void | initialize_conjunction () |
Fill the worklist with the initial source-state pairs, as needed for the conjunction algorithm. More... | |
void | initialize_shuffle () |
Fill the worklist with the initial source-state pairs, as needed for the shuffle algorithm. More... | |
void | add_conjunction_transitions (const state_t src, const state_name_t &psrc) |
Add transitions to the result automaton, starting from the given result input state, which must correspond to the given pair of input state automata. More... | |
template<bool L = Lazy> | |
std::enable_if_t< sizeof...(Auts)==2 &&!L > | add_ldivide_transitions (const state_t src, const state_name_t &psrc) |
Behave similarly to add_conjunction_transitions, with three main differences: the algorithm continues matching the right hand side even when the left hand side has reached post, the labels are set to one when the right hand side and left hand side match (that is, before the left hand side reaches post), and the weights are divided rather than multiplied. More... | |
template<bool L = Lazy> | |
std::enable_if_t< sizeof...(Auts)==2 &&!L > | add_add_transitions (const state_t src, const state_name_t &psrc) |
Behaves similarly to add_conjunction_transitions on a Boolean weightset, but use post() as a special state that matches everything when one of the two automata does not match on a label. More... | |
template<std::size_t... I> | |
void | add_one_transitions_ (const state_t src, const state_name_t &psrc, seq< I... >) |
Add the spontaneous transitions leaving state src, if it is relevant (i.e. More... | |
template<std::size_t I, typename LS > | |
std::enable_if_t<!LS::has_one(), void > | add_one_transitions_ (const LS &, const state_t, const state_name_t &) |
In the case where the labelset doesn't have one, do nothing. More... | |
template<std::size_t I, typename LS > | |
std::enable_if_t< LS::has_one(), void > | add_one_transitions_ (const LS &ls, const state_t src, const state_name_t &psrc) |
If the I-th labelset has one, add the relevant spontaneous transitions leaving the state. More... | |
template<std::size_t... I> | |
bool | are_proper_in (const state_name_t &psrc, seq< I... >) const |
Whether no tapes in the sequence have spontaneous incoming transitions. More... | |
template<std::size_t... I> | |
bool | have_proper_out (const state_name_t &psrc, seq< I... >) |
Whether all the tapes in the sequence have proper outgoing transitions (but possibly spontaneous too). More... | |
template<Automaton Aut_> | |
std::enable_if_t< labelset_t_of< Aut_ >::has_one(), bool > | is_one (const Aut_ &aut, transition_t_of< Aut_ > tr) const |
Check if the transition is spontaneous (in the case of a labelset with one). More... | |
template<Automaton Aut_> | |
constexpr std::enable_if_t<!labelset_t_of< Aut_ >::has_one(), bool > | is_one (const Aut_ &, transition_t_of< Aut_ >) const |
Same as above, but for labelsets without one, so it's always false. More... | |
template<size_t I> | |
constexpr auto | is_proper_in (const state_name_t &) const -> std::enable_if_t<!labelset_t_of< input_automaton_t< I >>::has_one(), bool > |
Whether the state has only proper incoming transitions. More... | |
template<size_t I> | |
auto | is_proper_in (const state_name_t &sn) const -> std::enable_if_t< labelset_t_of< input_automaton_t< I >>::has_one(), bool > |
Whether the state has only proper incoming transitions. More... | |
template<size_t I> | |
bool | has_proper_out (const state_name_t &psrc) |
Whether the Ith state of psrc in the Ith input automaton has proper outgoing transitions (but possibly spontaneous transitions too). More... | |
template<bool Infiltrate = false> | |
void | add_shuffle_transitions (const state_t src, const state_name_t &psrc) |
Add transitions to the given result automaton, starting from the given result input state, which must correspond to the given tuple of input state automata. More... | |
template<bool Infiltrate, size_t... I> | |
weight_t | add_shuffle_transitions_ (const state_t src, const state_name_t &psrc, seq< I... >) |
Let all automata advance one after the other, and add the corresponding transitions in the output. More... | |
template<bool Infiltrate, size_t I> | |
weight_t | add_shuffle_transitions_ (const state_t src, const state_name_t &psrc) |
Let Ith automaton advance, and add the corresponding transitions in the output. More... | |
Additional Inherited Members | |
![]() | |
using | transition_map_t = transition_map< A, weightset_t, false, true, KeepTransitions > |
The type of our transition maps: convert the weight to weightset_t, non deterministic, and including transitions to post(). More... | |
![]() | |
state_t | state (Args &&... args) |
Conversion from state name to state number. More... | |
std::tuple< typename transition_map_t< Auts >::map_t &... > | out_ (const state_name_t &ss) |
The outgoing tuple of transitions from state tuple ss. More... | |
std::tuple< typename transition_map_t< Auts >::map_t &... > | out_ (const state_name_t &ss, seq< I... >) |
![]() | |
const weightset_t & | ws_ |
The resulting weightset. More... | |
std::tuple< transition_map_t< Auts >... > | transition_maps_ |
Transition caches. More... | |
![]() | |
automaton_t | aut_ |
The wrapped automaton, possibly const. More... | |
Build the (accessible part of the) product.
Definition at line 36 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::automata_t = std::tuple<Auts...> |
The type of input automata.
Definition at line 83 of file conjunction.hh.
|
private |
The type of the resulting automaton.
Definition at line 44 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::context_t = context_t_of<Aut> |
The context of the result.
Definition at line 75 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::input_automaton_t = base_t<tuple_element_t<I, automata_t> > |
The type of the Ith input automaton, unqualified.
Definition at line 87 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::label_t = typename labelset_t::value_t |
Definition at line 79 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::labelset_t = labelset_t_of<context_t> |
Definition at line 76 of file conjunction.hh.
|
private |
Definition at line 45 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::seq = typename super_t::template seq<I...> |
Definition at line 56 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::state_name_t = typename super_t::state_name_t |
Definition at line 49 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::state_t = typename super_t::state_t |
Definition at line 50 of file conjunction.hh.
|
private |
Definition at line 46 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::transition_map_t = typename super_t::template transition_map_t<A> |
Definition at line 53 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::weight_t = typename weightset_t::value_t |
Definition at line 80 of file conjunction.hh.
using vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::weightset_t = weightset_t_of<context_t> |
Definition at line 77 of file conjunction.hh.
|
inline |
Build a product automaton.
aut | the automaton to build. |
auts | the input automata. |
Definition at line 94 of file conjunction.hh.
|
inline |
Compute the deterministic sum of two deterministic automata.
Definition at line 130 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_add_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_conjunction().
|
inlineprivate |
Behaves similarly to add_conjunction_transitions on a Boolean weightset, but use post() as a special state that matches everything when one of the two automata does not match on a label.
Definition at line 358 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::add_transition(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::all_out(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::cross_tuple(), vcsn::has(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::new_transition(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::out_(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::state(), and vcsn::zip_map_tuple().
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add().
|
inlineprivate |
Add transitions to the result automaton, starting from the given result input state, which must correspond to the given pair of input state automata.
Update the worklist with the needed source-state pairs.
Definition at line 289 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_one_transitions_(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::cross_tuple(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::new_transition(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::out_(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::state(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::ws_, and vcsn::zip_map_tuple().
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_transitions(), vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::conjunction(), vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::infiltrate(), vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_shuffle(), and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::ldivide_here().
|
inlineprivate |
Behave similarly to add_conjunction_transitions, with three main differences: the algorithm continues matching the right hand side even when the left hand side has reached post, the labels are set to one when the right hand side and left hand side match (that is, before the left hand side reaches post), and the weights are divided rather than multiplied.
Definition at line 318 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::add_transition(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::all_out(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::cross_tuple(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::lweight(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::new_transition(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::out_(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::state(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::ws_, and vcsn::zip_map_tuple().
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::ldivide().
|
inlineprivate |
Add the spontaneous transitions leaving state src, if it is relevant (i.e.
only for the labelsets that have one).
Definition at line 391 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::labelset(), and vcsn::detail::void.
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_conjunction_transitions().
|
inlineprivate |
In the case where the labelset doesn't have one, do nothing.
Definition at line 405 of file conjunction.hh.
|
inlineprivate |
If the I-th labelset has one, add the relevant spontaneous transitions leaving the state.
Definition at line 412 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::are_proper_in(), vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::have_proper_out(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::state(), and vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::transition_maps_.
|
inlineprivate |
Add transitions to the given result automaton, starting from the given result input state, which must correspond to the given tuple of input state automata.
Update the worklist with the needed source-state pairs.
Definition at line 524 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_.
|
inlineprivate |
Let all automata advance one after the other, and add the corresponding transitions in the output.
Return the product of the final states.
Definition at line 537 of file conjunction.hh.
References vcsn::res, vcsn::detail::void, and vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::ws_.
|
inlineprivate |
Let Ith automaton advance, and add the corresponding transitions in the output.
If we reach a final state, return the corresponding final weight (zero otherwise).
Infiltrate | whether we are called after add_conjunction_transitions. |
I | the tape on which to perform a transition. |
Definition at line 564 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::add_transition(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, Automaton, vcsn::if(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::new_transition(), vcsn::res, vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::state(), vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::transition_maps_, and vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::ws_.
|
inline |
Tell lazy_tuple_automaton how to add the transitions to a state.
Definition at line 260 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_conjunction_transitions().
|
inlineprivate |
Whether no tapes in the sequence have spontaneous incoming transitions.
Definition at line 437 of file conjunction.hh.
References vcsn::all().
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_one_transitions_().
|
inline |
Compute the (accessible part of the) conjunction.
Definition at line 99 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_conjunction_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_conjunction().
Referenced by vcsn::conjunction(), and vcsn::dyn::detail::conjunction_().
|
inlineprivate |
Whether the Ith state of psrc in the Ith input automaton has proper outgoing transitions (but possibly spontaneous transitions too).
Not const, because we (might) update the transition maps.
Definition at line 507 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::labelset(), and vcsn::detail::lazy_tuple_automaton< product_automaton_impl< Lazy, Aut, Auts... >, false, Lazy, Aut, Auts... >::transition_maps_.
|
inlineprivate |
Whether all the tapes in the sequence have proper outgoing transitions (but possibly spontaneous too).
Definition at line 445 of file conjunction.hh.
References vcsn::all().
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_one_transitions_().
|
inline |
Compute the (accessible part of the) infiltration product.
Definition at line 204 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_conjunction_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_shuffle(), vcsn::is_proper(), and vcsn::require().
Referenced by vcsn::infiltrate().
|
inlineprivate |
Fill the worklist with the initial source-state pairs, as needed for the conjunction algorithm.
Definition at line 269 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_.
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add(), vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::conjunction(), vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::ldivide(), and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::ldivide_here().
|
inlineprivate |
Fill the worklist with the initial source-state pairs, as needed for the shuffle algorithm.
Definition at line 276 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_conjunction_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::lazy_tuple_automaton< Decorated, KeepTransitions, Lazy, Aut, Auts >::out_(), and vcsn::detail::lazy_tuple_automaton< Decorated, KeepTransitions, Lazy, Aut, Auts >::state().
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::infiltrate(), and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::shuffle().
|
inlineprivate |
Check if the transition is spontaneous (in the case of a labelset with one).
Definition at line 454 of file conjunction.hh.
Referenced by vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::is_proper_in().
|
inlineprivate |
Same as above, but for labelsets without one, so it's always false.
Definition at line 463 of file conjunction.hh.
|
inlineprivate |
Whether the state has only proper incoming transitions.
Definition at line 471 of file conjunction.hh.
|
inlineprivate |
Whether the state has only proper incoming transitions.
The automaton has been insplit, so either all incoming transitions are proper, or all transitions are spontaneous (including the first one).
Definition at line 484 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::all_in(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::is_one().
|
inline |
Compute the left quotient.
Definition at line 114 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_ldivide_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_conjunction().
Referenced by vcsn::ldivide(), and vcsn::rdivide().
|
inline |
Compute the left quotient in-place.
Definition at line 149 of file conjunction.hh.
References vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::add_conjunction_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::initial_transitions(), and vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_conjunction().
|
inline |
Definition at line 68 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_.
|
inline |
Compute the (accessible part of the) shuffle product.
Definition at line 178 of file conjunction.hh.
References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts... > >::aut_, vcsn::detail::product_automaton_impl< Lazy, Aut, Auts >::initialize_shuffle(), vcsn::is_proper(), and vcsn::require().
|
inlinestatic |
Definition at line 61 of file conjunction.hh.
References vcsn::res, and vcsn::detail::lazy_tuple_automaton< Decorated, KeepTransitions, Lazy, Aut, Auts >::sname_().