Spaces of valuations¶
This module provides spaces of exponential pseudo-valuations on integral domains. It currently only provides support for such valuations if they are discrete, i.e., their image is a discrete additive subgroup of the rational numbers extended by \(\infty\).
AUTHORS:
- Julian Rüth (2016-10-14): initial version
EXAMPLES:
sage: QQ.valuation(2).parent()
Discrete pseudo-valuations on Rational Field
Note
Note that many tests not only in this module do not create instances of valuations directly since this gives the wrong inheritance structure on the resulting objects:
sage: from sage.rings.valuation.valuation_space import DiscretePseudoValuationSpace
sage: from sage.rings.valuation.trivial_valuation import TrivialDiscretePseudoValuation
sage: H = DiscretePseudoValuationSpace(QQ)
sage: v = TrivialDiscretePseudoValuation(H)
sage: v._test_category()
Traceback (most recent call last):
...
AssertionError: False is not true
Instead, the valuations need to be created through the
__make_element_class__
of the containing space:
sage: from sage.rings.valuation.trivial_valuation import TrivialDiscretePseudoValuation
sage: v = H.__make_element_class__(TrivialDiscretePseudoValuation)(H)
sage: v._test_category()
The factories such as TrivialPseudoValuation
provide the right
inheritance structure:
sage: v = valuations.TrivialPseudoValuation(QQ)
sage: v._test_category()
-
sage.rings.valuation.valuation_space.
DiscretePseudoValuationSpace
¶ The space of discrete pseudo-valuations on
domain
.EXAMPLES:
sage: from sage.rings.valuation.valuation_space import DiscretePseudoValuationSpace sage: H = DiscretePseudoValuationSpace(QQ) sage: QQ.valuation(2) in H True
Note
We do not distinguish between the space of discrete valuations and the space of discrete pseudo-valuations. This is entirely for practical reasons: We would like to model the fact that every discrete valuation is also a discrete pseudo-valuation. At first, it seems to be sufficient to make sure that the
in
operator works which can essentially be achieved by overriding_element_constructor_
of the space of discrete pseudo-valuations to accept discrete valuations by just returning them. Currently, however, if one does not change the parent of an element in_element_constructor_
toself
, then one can not register that conversion as a coercion. Consequently, the operators<=
and>=
can not be made to work between discrete valuations and discrete pseudo-valuations on the same domain (because the implementation only calls_richcmp
if both operands have the same parent.) Of course, we could override__ge__
and__le__
but then we would likely run into other surprises. So in the end, we went for a single homspace for all discrete valuations (pseudo or not) as this makes the implementation much easier.Todo
The comparison problem might be fixed by trac ticket #22029 or similar.
-
class
sage.rings.valuation.valuation_space.
ScaleAction
¶ Bases:
sage.categories.action.Action
Action of integers, rationals and the infinity ring on valuations by scaling it.
EXAMPLES:
sage: v = QQ.valuation(5) sage: from operator import mul sage: v.parent().get_action(ZZ, mul, self_on_left=False) Left action by Integer Ring on Discrete pseudo-valuations on Rational Field