Value groups of discrete valuations

This file defines additive sub(semi-)groups of \(\QQ\) and related structures.

AUTHORS:

  • Julian Rüth (2013-09-06): initial version

EXAMPLES:

sage: v = ZZ.valuation(2)
sage: v.value_group()
Additive Abelian Group generated by 1
sage: v.value_semigroup()
Additive Abelian Semigroup generated by 1
sage.rings.valuation.value_group.DiscreteValuationCodomain

The codomain of discrete valuations, the rational numbers extended by \(\pm\infty\).

EXAMPLES:

sage: from sage.rings.valuation.value_group import DiscreteValuationCodomain
sage: C = DiscreteValuationCodomain(); C
Codomain of Discrete Valuations
sage.rings.valuation.value_group.DiscreteValueGroup

The value group of a discrete valuation, an additive subgroup of \(\QQ\) generated by generator.

INPUT:

  • generator – a rational number

Note

We do not rely on the functionality provided by additive abelian groups in Sage since these require the underlying set to be the integers. Therefore, we roll our own Z-module here. We could have used AdditiveAbelianGroupWrapper here, but it seems to be somewhat outdated. In particular, generic group functionality should now come from the category and not from the super-class. A facade of Q appeared to be the better approach.

EXAMPLES:

sage: from sage.rings.valuation.value_group import DiscreteValueGroup
sage: D1 = DiscreteValueGroup(0); D1
Trivial Additive Abelian Group
sage: D2 = DiscreteValueGroup(4/3); D2
Additive Abelian Group generated by 4/3
sage: D3 = DiscreteValueGroup(-1/3); D3
Additive Abelian Group generated by 1/3
sage.rings.valuation.value_group.DiscreteValueSemigroup

The value semigroup of a discrete valuation, an additive subsemigroup of \(\QQ\) generated by generators.

INPUT:

  • generators – rational numbers

EXAMPLES:

sage: from sage.rings.valuation.value_group import DiscreteValueSemigroup
sage: D1 = DiscreteValueSemigroup(0); D1
Trivial Additive Abelian Semigroup
sage: D2 = DiscreteValueSemigroup(4/3); D2
Additive Abelian Semigroup generated by 4/3
sage: D3 = DiscreteValueSemigroup([-1/3, 1/2]); D3
Additive Abelian Semigroup generated by -1/3, 1/2