コード例 #1
0
ファイル: reduction_trees.py プロジェクト: oossen/mclf
    def __init__(self, Z, v):

        self._inertial_component = Z.inertial_component()
        self._lower_component = Z
        self._base_valuation = Z.base_valuation()
        self._valuation = v
        F, to_F, from_F = make_function_field(v.residue_field())
        self._component = SmoothProjectiveCurve(F, Z.constant_base_field())
        # we have to construct the embedding of the function field of Z into
        # the function field of W (this component), which gives rise to the
        # natural map W-->Z. The defining property of this embedding is its
        # compatibility with the canonical embedding of FXL into FYL
        v0 = Z.valuation()
        F0 = Z.function_field()
        # we need the isomorphism between the residue field of v0 and F0:
        from_F0 = Z._from_function_field
        # we have to find an element x0 in F which reduces to the generator
        # of F0
        x0 = to_F(v.reduce(v0.lift(from_F0(F0.gen()))))
        # we also have to define the right map between the constant base fields
        k0 = F0.constant_base_field()  # note: this may not the equal to the
        #                                constant base field of Z
        k = F.constant_base_field()    # and this may not be equal to the cbf of W
        if k0.is_prime_field():
            # there is no choice; we can take the identity on k0:
            phi_base = k0.hom(k0)
        else:
            # we have to find the element in k to which a generator
            # of k0 has to be mapped
            alpha = to_F(v.reduce((v0.lift(from_F0(k0.gen())))))
            phi_base = k0.hom(alpha, k)
        phi = F0.hom(x0, phi_base)
        self._map_to_lower_component = MorphismOfSmoothProjectiveCurves(
            self._component, Z.component(), phi)
コード例 #2
0
    def map_to_lower_component(self):
        r"""
        Return the natural map from this upper component to the lower component beneath.

        """
        # we hope that this works by the natural inclusion of function fields:
        return MorphismOfSmoothProjectiveCurves(self.curve(), self.lower_component().curve())
コード例 #3
0
    def map_to_inertial_component(self):
        r"""
        Return the natural map from this lower component to its inertial component.

        """
        # we hope that this works by the natural inclusion of function fields:
        return MorphismOfSmoothProjectiveCurves(self.curve(),
                self.inertial_component().curve(), self._phi)
コード例 #4
0
    def structure_map(self):
        r""" Return the canonical map from this curve to the projective line.

        """
        if hasattr(self, "_structure_map"):
            return self._structure_map
        else:
            from mclf.curves.morphisms_of_smooth_projective_curves import\
                                               MorphismOfSmoothProjectiveCurves
            X = SmoothProjectiveCurve(self.rational_function_field())
            self._structure_map = MorphismOfSmoothProjectiveCurves(self, X)
            return self._structure_map
コード例 #5
0
ファイル: reduction_trees.py プロジェクト: oossen/mclf
 def __init__(self, Z0, vL, v, phi):
     from mclf.curves.smooth_projective_curves import make_finite_field
     self._inertial_component = Z0
     self._valuation = v
     self._base_valuation = vL
     F, to_F, from_F = make_function_field(v.residue_field())
     self._to_function_field = to_F
     self._from_function_field = from_F
     k, _, _ = make_finite_field(vL.residue_field())
     # we force k to be the constant base field of the component;
     # note that we can ignore the isomorphism, because
     # - as an absolute finite field, k can be coerced into F,
     # - the embedding itself is irrelevant; only the image matters
     self._component = SmoothProjectiveCurve(F, k)
     # construct the natural morphis Z-->Z0;
     # the corresponding morphis of function fields is the given embedding
     # phi of the function field of Z0 into the residue field of v,
     # composed with the canonical isomorphism to F
     self._map_to_inertial_component = MorphismOfSmoothProjectiveCurves(
         self.component(), Z0.component(), phi.post_compose(to_F))