Vcsn  2.2
Be Rational
vcsn::rat::split_visitor< ExpSet > Class Template Reference

Break a rational expression into a polynomial. More...

#include <split.hh>

Inheritance diagram for vcsn::rat::split_visitor< ExpSet >:
Collaboration diagram for vcsn::rat::split_visitor< ExpSet >:

Public Types

using expressionset_t = ExpSet
 
using context_t = context_t_of< expressionset_t >
 
using labelset_t = labelset_t_of< context_t >
 
using label_t = label_t_of< context_t >
 
using expression_t = typename expressionset_t::value_t
 
using weightset_t = weightset_t_of< expressionset_t >
 
using weight_t = typename weightset_t::value_t
 
using polynomialset_t = expression_polynomialset_t< expressionset_t >
 
using polynomial_t = typename polynomialset_t::value_t
 
using super_t = typename expressionset_t::const_visitor
 
using tuple_t = typename super_t::tuple_t
 

Public Member Functions

 split_visitor (const expressionset_t &rs)
 
polynomial_t operator() (const expression_t &v)
 Break an expression into a polynomial. More...
 
polynomial_t split (const expression_t &v)
 Easy recursion. More...
 
 VCSN_RAT_VISIT (zero,)
 
 VCSN_RAT_VISIT (one,)
 
 VCSN_RAT_VISIT (atom, e)
 
 VCSN_RAT_VISIT (sum, e)
 
polynomial_t product (const expression_t &l, const expression_t &r)
 The split-product of l with r. More...
 
polynomial_t product (const polynomial_t &l, const expression_t &r)
 The split-product of l with r. More...
 
 VCSN_RAT_VISIT (prod, e)
 Handle an n-ary product. More...
 
polynomial_t conjunction (const expression_t &l, const expression_t &r)
 The split-product of l with r. More...
 
polynomial_t conjunction (const polynomial_t &l, const expression_t &r)
 The split-product of l with r. More...
 
 VCSN_RAT_VISIT (conjunction, e)
 Handle an n-ary conjunction. More...
 
virtual void visit (const tuple_t &, std::true_type) override
 
 VCSN_RAT_VISIT (star, e)
 
 VCSN_RAT_VISIT (lweight, e)
 
 VCSN_RAT_VISIT (rweight, e)
 

Static Public Member Functions

static constexpr const charme ()
 Name of this algorithm, for error messages. More...
 

Private Attributes

expressionset_t rs_
 
weightset_t ws_ = *rs_.weightset()
 Shorthand to the weightset. More...
 
polynomialset_t ps_ = make_expression_polynomialset(rs_)
 
polynomial_t res_
 The result. More...
 

Detailed Description

template<typename ExpSet>
class vcsn::rat::split_visitor< ExpSet >

Break a rational expression into a polynomial.

This is based on the following paper:

/// @article{angrand.2010.jalc,
///   author =       {Pierre-Yves Angrand and Sylvain Lombardy and Jacques
///                   Sakarovitch},
///   journal =      {Journal of Automata, Languages and Combinatorics},
///   number =       {1/2},
///   pages =        {27--51},
///   title =        {On the Number of Broken Derived Terms of a Rational
///                   Expression},
///   volume =       15,
///   year =         2010,
///   abstract =     {Bounds are given on the number of broken derived
///                   terms (a variant of Antimirov's ``partial
///                   derivatives'') of a rational expression $E$. It is
///                   shown that this number is less than or equal to
///                   $2l(E) + 1$ in the general case, where $l(E)$ is the
///                   literal length of the expression $E$, and that the
///                   classical bound $l(E) + 1$ which holds for partial
///                   derivatives also holds for broken derived terms if E
///                   is in star normal form.\\In a second part of the
///                   paper, the influence of the bracketing of an
///                   expression on the number of its derived terms is
///                   also discussed.}
/// }
///

Definition at line 77 of file split.hh.

Member Typedef Documentation

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::context_t = context_t_of<expressionset_t>

Definition at line 82 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::expression_t = typename expressionset_t::value_t

Definition at line 85 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::expressionset_t = ExpSet

Definition at line 81 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::label_t = label_t_of<context_t>

Definition at line 84 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::labelset_t = labelset_t_of<context_t>

Definition at line 83 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::polynomial_t = typename polynomialset_t::value_t

Definition at line 90 of file split.hh.

Definition at line 89 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::super_t = typename expressionset_t::const_visitor

Definition at line 92 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::tuple_t = typename super_t::tuple_t

Definition at line 227 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::weight_t = typename weightset_t::value_t

Definition at line 87 of file split.hh.

template<typename ExpSet >
using vcsn::rat::split_visitor< ExpSet >::weightset_t = weightset_t_of<expressionset_t>

Definition at line 86 of file split.hh.

Constructor & Destructor Documentation

template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::split_visitor ( const expressionset_t rs)
inline

Definition at line 97 of file split.hh.

Member Function Documentation

template<typename ExpSet >
polynomial_t vcsn::rat::split_visitor< ExpSet >::conjunction ( const expression_t l,
const expression_t r 
)
inline

The split-product of l with r.

Returns split(l) x split(r). FIXME: This is inefficient, we split the lhs way too often.

Definition at line 182 of file split.hh.

References vcsn::label_of(), vcsn::rat::split_visitor< ExpSet >::ps_, vcsn::rat::split_visitor< ExpSet >::rs_, vcsn::rat::split_visitor< ExpSet >::split(), and vcsn::weight_of().

Referenced by vcsn::rat::split_visitor< ExpSet >::conjunction(), and vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT().

Here is the call graph for this function:

template<typename ExpSet >
polynomial_t vcsn::rat::split_visitor< ExpSet >::conjunction ( const polynomial_t l,
const expression_t r 
)
inline

The split-product of l with r.

Returns l x split(r).

Definition at line 204 of file split.hh.

References vcsn::rat::split_visitor< ExpSet >::conjunction(), vcsn::label_of(), vcsn::rat::split_visitor< ExpSet >::ps_, and vcsn::weight_of().

Here is the call graph for this function:

template<typename ExpSet >
static constexpr const char* vcsn::rat::split_visitor< ExpSet >::me ( )
inlinestatic

Name of this algorithm, for error messages.

Definition at line 95 of file split.hh.

Referenced by vcsn::rat::split_visitor< ExpSet >::visit().

template<typename ExpSet >
polynomial_t vcsn::rat::split_visitor< ExpSet >::operator() ( const expression_t v)
inline

Break an expression into a polynomial.

Definition at line 102 of file split.hh.

References vcsn::rat::split_visitor< ExpSet >::split().

Here is the call graph for this function:

template<typename ExpSet >
polynomial_t vcsn::rat::split_visitor< ExpSet >::product ( const expression_t l,
const expression_t r 
)
inline

The split-product of l with r.

Returns split(l) x split(r). FIXME: This is inefficient, we split the lhs way too often.

Definition at line 144 of file split.hh.

References vcsn::rat::split_visitor< ExpSet >::ps_, vcsn::rat::split_visitor< ExpSet >::rs_, and vcsn::rat::split_visitor< ExpSet >::split().

Referenced by vcsn::rat::split_visitor< ExpSet >::product(), and vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT().

Here is the call graph for this function:

template<typename ExpSet >
polynomial_t vcsn::rat::split_visitor< ExpSet >::product ( const polynomial_t l,
const expression_t r 
)
inline

The split-product of l with r.

Returns l x split(r).

Definition at line 161 of file split.hh.

References vcsn::label_of(), vcsn::rat::split_visitor< ExpSet >::product(), vcsn::rat::split_visitor< ExpSet >::ps_, and vcsn::weight_of().

Here is the call graph for this function:

template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( zero  )
inline
template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( one  )
inline
template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( atom  ,
 
)
inline
template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( sum  ,
 
)
inline
template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( prod  ,
 
)
inline

Handle an n-ary product.

Definition at line 170 of file split.hh.

References vcsn::rat::split_visitor< ExpSet >::product(), and vcsn::rat::split_visitor< ExpSet >::res_.

Here is the call graph for this function:

template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( conjunction  ,
 
)
inline

Handle an n-ary conjunction.

Definition at line 213 of file split.hh.

References vcsn::rat::split_visitor< ExpSet >::conjunction(), and vcsn::rat::split_visitor< ExpSet >::res_.

Here is the call graph for this function:

template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( star  ,
 
)
inline
template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( lweight  ,
 
)
inline
template<typename ExpSet >
vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT ( rweight  ,
 
)
inline
template<typename ExpSet >
virtual void vcsn::rat::split_visitor< ExpSet >::visit ( const tuple_t ,
std::true_type   
)
inlineoverridevirtual

Definition at line 228 of file split.hh.

References vcsn::rat::split_visitor< ExpSet >::me().

Here is the call graph for this function:

Member Data Documentation

template<typename ExpSet >
polynomial_t vcsn::rat::split_visitor< ExpSet >::res_
private
template<typename ExpSet >
weightset_t vcsn::rat::split_visitor< ExpSet >::ws_ = *rs_.weightset()
private

Shorthand to the weightset.

Definition at line 253 of file split.hh.

Referenced by vcsn::rat::split_visitor< ExpSet >::VCSN_RAT_VISIT().


The documentation for this class was generated from the following file: