Cartesian Products of Growth Groups

See (Asymptotic) Growth Groups for a description.

AUTHORS:

  • Benjamin Hackl (2015)
  • Daniel Krenn (2015)
  • Clemens Heuberger (2016)

ACKNOWLEDGEMENT:

  • Benjamin Hackl, Clemens Heuberger and Daniel Krenn are supported by the Austrian Science Fund (FWF): P 24644-N26.
  • Benjamin Hackl is supported by the Google Summer of Code 2015.
sage: cm = sage.structure.element.get_coercion_model()
sage: D = GrowthGroup('QQ^x * x^QQ')
sage: cm.common_parent(A, D)
Growth Group QQ^x * x^QQ
sage: E = GrowthGroup('ZZ^x * x^QQ')
sage: cm.record_exceptions()  # not tested, see #19411
sage: cm.common_parent(A, E)
Growth Group QQ^x * x^QQ
sage: for t in cm.exception_stack():  # not tested, see #19411
....:     print(t)
sage: A.an_element()
(1/2)^x*x
sage: tuple(E.an_element())
(1, x^(1/2))

Classes and Methods

class sage.rings.asymptotic.growth_group_cartesian.CartesianProductFactory

Bases: sage.structure.factory.UniqueFactory

Create various types of Cartesian products depending on its input.

INPUT:

  • growth_groups – a tuple (or other iterable) of growth groups.
  • order – (default: None) if specified, then this order is taken for comparing two Cartesian product elements. If order is None this is determined automatically.

Note

The Cartesian product of growth groups is again a growth group. In particular, the resulting structure is partially ordered.

The order on the product is determined as follows:

  • Cartesian factors with respect to the same variable are ordered lexicographically. This causes GrowthGroup('x^ZZ * log(x)^ZZ') and GrowthGroup('log(x)^ZZ * x^ZZ') to produce two different growth groups.
  • Factors over different variables are equipped with the product order (i.e. the comparison is component-wise).

Also, note that the sets of variables of the Cartesian factors have to be either equal or disjoint.

EXAMPLES:

sage: from sage.rings.asymptotic.growth_group import GrowthGroup
sage: A = GrowthGroup('x^ZZ'); A
Growth Group x^ZZ
sage: B = GrowthGroup('log(x)^ZZ'); B
Growth Group log(x)^ZZ
sage: C = cartesian_product([A, B]); C  # indirect doctest
Growth Group x^ZZ * log(x)^ZZ
sage: C._le_ == C.le_lex
True
sage: D = GrowthGroup('y^ZZ'); D
Growth Group y^ZZ
sage: E = cartesian_product([A, D]); E  # indirect doctest
Growth Group x^ZZ * y^ZZ
sage: E._le_ == E.le_product
True
sage: F = cartesian_product([C, D]); F  # indirect doctest
Growth Group x^ZZ * log(x)^ZZ * y^ZZ
sage: F._le_ == F.le_product
True
sage: cartesian_product([A, E]); G  # indirect doctest
Traceback (most recent call last):
...
ValueError: The growth groups (Growth Group x^ZZ, Growth Group x^ZZ * y^ZZ)
need to have pairwise disjoint or equal variables.
sage: cartesian_product([A, B, D])  # indirect doctest
Growth Group x^ZZ * log(x)^ZZ * y^ZZ
create_key_and_extra_args(growth_groups, category, **kwds)

Given the arguments and keywords, create a key that uniquely determines this object.

create_object(version, args, **kwds)

Create an object from the given arguments.

sage.rings.asymptotic.growth_group_cartesian.GenericProduct

A Cartesian product of growth groups.

EXAMPLES:

sage: from sage.rings.asymptotic.growth_group import GrowthGroup
sage: P = GrowthGroup('x^QQ')
sage: L = GrowthGroup('log(x)^ZZ')
sage: C = cartesian_product([P, L], order='lex'); C  # indirect doctest
Growth Group x^QQ * log(x)^ZZ
sage: C.an_element()
x^(1/2)*log(x)
sage: Px = GrowthGroup('x^QQ')
sage: Lx = GrowthGroup('log(x)^ZZ')
sage: Cx = cartesian_product([Px, Lx], order='lex')  # indirect doctest
sage: Py = GrowthGroup('y^QQ')
sage: C = cartesian_product([Cx, Py], order='product'); C  # indirect doctest
Growth Group x^QQ * log(x)^ZZ * y^QQ
sage: C.an_element()
x^(1/2)*log(x)*y^(1/2)

See also

CartesianProduct, CartesianProductPoset.

sage.rings.asymptotic.growth_group_cartesian.MultivariateProduct

A Cartesian product of growth groups with pairwise disjoint (or equal) variable sets.

Note

A multivariate product of growth groups is ordered by means of the product order, i.e. component-wise. This is motivated by the assumption that different variables are considered to be independent (e.g. x^ZZ * y^ZZ).

sage.rings.asymptotic.growth_group_cartesian.UnivariateProduct

A Cartesian product of growth groups with the same variables.

Note

A univariate product of growth groups is ordered lexicographically. This is motivated by the assumption that univariate growth groups can be ordered in a chain with respect to the growth they model (e.g. x^ZZ * log(x)^ZZ: polynomial growth dominates logarithmic growth).