#8327: Implement the universal cyclotomic field, using Zumbroich basis
---------------------------------------------------+------------------------
   Reporter:  nthiery                              |          Owner:            
                       
       Type:  enhancement                          |         Status:  
needs_review                     
   Priority:  major                                |      Milestone:  sage-4.8  
                       
  Component:  number fields                        |       Keywords:  
Cyclotomic field, Zumbroich basis
Work_issues:  Rebase wrt #10771. Fix one doctest.  |       Upstream:  N/A       
                       
   Reviewer:                                       |         Author:  Christian 
Stump, Simon King      
     Merged:                                       |   Dependencies:  #10771    
                       
---------------------------------------------------+------------------------
Changes (by stumpc5):

  * status:  needs_work => needs_review


Old description:

> This patch provides the universal cyclotomic field
>
> {{{
>     sage: UCF
>     Universal Cyclotomic Field endowed with the Zumbroich basis
> }}}
>
> in sage. This field is the smallest field extension of QQ which contains
> all roots of unity.
>
> {{{
>     sage: E(3); E(3)^3
>     E(3)
>     1
>     sage: E(6); E(6)^2; E(6)^3; E(6)^6
>     -E(3)^2
>     E(3)
>     -1
>     1
> }}}
>
> It comes equipped with a distinguished basis, called the Zumbroich
> basis, which gives, for any n, A basis of QQ( E(n) ) over QQ, where (n,k)
> stands for E(n)^k.
>
> {{{
>     sage: UCF.zumbroich_basis(6)
>     [(6, 2), (6, 4)]
> }}}
>
> As seen for E(6), every element in UCF is expressed in terms of the
> smallest cyclotomic field in which it is contained.
>
> {{{
> sage: E(6)*E(4)
> -E(12)^11
> }}}
>
> It provides arithmetics on UCF as addition, multiplication, and inverses:
>
> {{{
>     sage: E(3)+E(4)
>     E(12)^4 - E(12)^7 - E(12)^11
>     sage: E(3)*E(4)
>     E(12)^7
>     sage: (E(3)+E(4)).inverse()
>     E(12)^4 + E(12)^8 + E(12)^11
>     sage: (E(3)+E(4))*(E(3)+E(4)).inverse()
>     1
> }}}
>
> And also things like Galois conjugates.
>
> {{{
>     sage: (E(3)+E(4)).galois_conjugates()
>     [E(12)^4 - E(12)^7 - E(12)^11, -E(12)^7 + E(12)^8 - E(12)^11, E(12)^4
> + E(12)^7 + E(12)^11, E(12)^7 + E(12)^8 + E(12)^11]
> }}}
>
> The ticket does not use the gap interface; it depends on #9651 (Addition
> of combinatorial free module).
>
> __Apply__
>
>  * [attachment:trac_8327_universal_cyclotomic_field-cs.patch]
>  * [attachment:trac8327_lazy_import_UCF.patch]

New description:

 This patch provides the universal cyclotomic field

 {{{
     sage: UCF
     Universal Cyclotomic Field endowed with the Zumbroich basis
 }}}

 in sage. This field is the smallest field extension of QQ which contains
 all roots of unity.

 {{{
     sage: E(3); E(3)^3
     E(3)
     1
     sage: E(6); E(6)^2; E(6)^3; E(6)^6
     -E(3)^2
     E(3)
     -1
     1
 }}}

 It comes equipped with a distinguished basis, called the Zumbroich
 basis, which gives, for any n, A basis of QQ( E(n) ) over QQ, where (n,k)
 stands for E(n)^k.

 {{{
     sage: UCF.zumbroich_basis(6)
     [(6, 2), (6, 4)]
 }}}

 As seen for E(6), every element in UCF is expressed in terms of the
 smallest cyclotomic field in which it is contained.

 {{{
 sage: E(6)*E(4)
 -E(12)^11
 }}}

 It provides arithmetics on UCF as addition, multiplication, and inverses:

 {{{
     sage: E(3)+E(4)
     E(12)^4 - E(12)^7 - E(12)^11
     sage: E(3)*E(4)
     E(12)^7
     sage: (E(3)+E(4)).inverse()
     E(12)^4 + E(12)^8 + E(12)^11
     sage: (E(3)+E(4))*(E(3)+E(4)).inverse()
     1
 }}}

 And also things like Galois conjugates.

 {{{
     sage: (E(3)+E(4)).galois_conjugates()
     [E(12)^4 - E(12)^7 - E(12)^11, -E(12)^7 + E(12)^8 - E(12)^11, E(12)^4
 + E(12)^7 + E(12)^11, E(12)^7 + E(12)^8 + E(12)^11]
 }}}

 The ticket does not use the gap interface; it depends on #9651 (Addition
 of combinatorial free module).

 __Apply__

  * [attachment:trac_8327_universal_cyclotomic_field-cs.patch]

--

Comment:

 It is rebased and applies now on a new 4.8.alpha1 (NOT alpha0, but
 alpha1!)

 There was a syntax error on the plain 4.8.alpha1, which I first had to get
 rid off.

 Concerning the is_subring method, I get the following behaviour:

 {{{
 sage: UCF is UCF
 True

 sage: UCF.is_subring??
     def is_subring(self,other):
         r"""
         Returns currently True if ``self`` and ``other`` coincide.

         EXAMPLES::

             sage: UCF.is_subring(UCF)
             True
         """
         return other is self

 sage: UCF.is_subring(UCF)
 False
 }}}

 This behaviour seems to be wired! But when replacing the lazy import of
 the UCF by a proper import in sage.rings.all, the wired behaviour
 disappears, so the problem must be something with the lazy import!

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/8327#comment:58>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to