Changeset 6763:32acd12b38e0


Ignore:
Timestamp:
10/05/07 00:48:50 (6 years ago)
Author:
David Roe <roed@…>
Branch:
default
Message:

Added residue_field, absolute_degree, absolute_polynomial, polynomial and polynomial_ntl to orders.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/number_field/order.py

    r6500 r6763  
    99from sage.structure.sequence import Sequence 
    1010from sage.rings.integer_ring import ZZ 
     11from sage.structure.element import is_Element 
    1112 
    1213from number_field_element import OrderElement_absolute, OrderElement_relative 
     
    6667        self._K = K 
    6768        self._is_maximal = is_maximal 
     69        DedekindDomain.__init__(self, base = K.base(), names = K.variable_names(), normalize = False) # base should probably change 
    6870 
    6971    def __mul__(self, right): 
     
    175177            3         
    176178        """ 
    177         return len(self.basis()) 
     179        return self.absolute_degree() 
    178180 
    179181    def basis(self):  # this must be defined in derived class 
     
    261263        return self._K 
    262264 
     265    def residue_field(self, prime, name = None, check = False): 
     266        """ 
     267        Return the residue field of this number field at a given prime, ie $O_K / p O_K$. 
     268 
     269        INPUT: 
     270            prime -- a prime ideal of the maximal order in this number field. 
     271            name -- the name of the variable in the residue field 
     272            check -- whether or not to check the primality of prime. 
     273        OUTPUT: 
     274            The residue field at this prime. 
     275 
     276        EXAMPLES: 
     277        sage: R.<x> = QQ[] 
     278        sage: K.<a> = NumberField(x^4+3*x^2-17) 
     279        sage: P = K.ideal(61).factor()[0][0] 
     280        sage: OK = K.maximal_order() 
     281        sage: OK.residue_field(P) 
     282        Residue field of Fractional ideal (-2*a^2 + 1) of Number Field in a with defining polynomial x^4 + 3*x^2 - 17 
     283        """ 
     284        import sage.rings.residue_field 
     285        return sage.rings.residue_field.ResidueField(prime) 
     286 
    263287     
    264288    def fraction_field(self): 
     
    268292 
    269293        EXAMPLES: 
    270             sage: K.<b> = NumberField(x^4 + 17*x^2 + 17) 
    271             sage: O = K.order(17*b); O 
    272             Order with module basis 1, 17*b, 289*b^2, 4913*b^3 in Number Field in b with defining polynomial x^4 + 17*x^2 + 17 
    273             sage: O.fraction_field() 
    274             Number Field in b with defining polynomial x^4 + 17*x^2 + 17 
     294        sage: K.<b> = NumberField(x^4 + 17*x^2 + 17) 
     295        sage: O = K.order(17*b); O 
     296        Order with module basis 1, 17*b, 289*b^2, 4913*b^3 in Number Field in b with defining polynomial x^4 + 17*x^2 + 17 
     297        sage: O.fraction_field() 
     298        Number Field in b with defining polynomial x^4 + 17*x^2 + 17 
    275299        """ 
    276300        return self._K 
     
    282306 
    283307        EXAMPLES: 
    284             sage: k.<c> = NumberField(x^3 + x^2 - 2*x+8) 
    285             sage: o = k.maximal_order() 
    286             sage: o.degree() 
    287             3 
    288             sage: o.rank() 
    289             3 
     308        sage: k.<c> = NumberField(x^3 + x^2 - 2*x+8) 
     309        sage: o = k.maximal_order() 
     310        sage: o.degree() 
     311        3 
     312        sage: o.rank() 
     313        3 
    290314        """ 
    291315        return self._K.degree() 
     
    400424            return cmp(self._K, other._K) 
    401425        return cmp(self._module_rep, other._module_rep) 
     426 
     427    def absolute_degree(self): 
     428        """ 
     429        Returns the absolute degree of this order, ie the degree of this order over ZZ. 
     430 
     431        EXAMPLES: 
     432        sage: K.<a> = NumberField(x^3 + 2) 
     433        sage: O = K.maximal_order() 
     434        sage: O.absolute_degree() 
     435        3 
     436        sage: K.<a> = NumberField([x^3 + 2, x^2 - 3]) 
     437        sage: O = K.maximal_order() 
     438        Traceback (most recent call last): 
     439        ... 
     440        NotImplementedError     
     441        """ 
     442        return self.polynomial().degree() * self.base_ring().absolute_degree() 
     443 
     444    def absolute_polynomial(self): 
     445        """ 
     446        Returns the absolute polynomial of this order, which is just the absolute polynomial of the number field. 
     447 
     448        EXAMPLES: 
     449        sage: K.<a, b> = NumberField([x^2 + 1, x^3 + x + 1]); OK = K.maximal_order() 
     450        Traceback (most recent call last): 
     451        ... 
     452        NotImplementedError 
     453         
     454        #sage: OK.absolute_polynomial() 
     455        #x^6 + 5*x^4 - 2*x^3 + 4*x^2 + 4*x + 1 
     456        """ 
     457        return self.number_field().absolute_polynomial() 
     458 
     459    def polynomial(self): 
     460        """ 
     461        Returns the polynomial defining self (current the polynomial defining self.number_field() 
     462        """ 
     463        return self.number_field().polynomial() 
     464 
     465    def polynomial_ntl(self): 
     466        """ 
     467        Return defining polynomial of this number field 
     468        as a pair, an ntl polynomial and a denominator. 
     469 
     470        This is used mainly to implement some internal arithmetic. 
     471 
     472        EXAMPLES: 
     473        sage: NumberField(x^2 + 1,'a').maximal_order().polynomial_ntl() 
     474        ([1 0 1], 1) 
     475        """ 
     476        return self.number_field().polynomial_ntl() 
    402477 
    403478class AbsoluteOrder(Order): 
     
    444519            sage: m(6*z) 
    445520            6*z 
    446         """ 
    447         if x.parent() is not self._K: 
     521            sage: k(m(6*z)) 
     522            6*z 
     523        """ 
     524        if is_Element(x) and x.parent() is self: 
     525            return x 
     526        if not is_Element(x) or x.parent() is not self._K: 
    448527            x = self._K(x) 
    449528        V, _, embedding = self._K.vector_space() 
Note: See TracChangeset for help on using the changeset viewer.