Opened 11 years ago

Last modified 8 years ago

#8327 closed enhancement

Implement the universal cyclotomic field, using Zumbroich basis — at Initial Version

Reported by: nthiery Owned by: davidloeffler
Priority: major Milestone: sage-5.7
Component: number fields Keywords: Cyclotomic field, Zumbroich basis
Cc: sage-combinat, cwitty Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description

Here is a user story for this feature.

We construct the universal cyclotomic field::

    sage: F = CyclotomicField()

This field contains all roots of unity:

    sage: z3 = F.zeta(3)
    sage: z3
    E(3)
    sage: z3^3
    1
    sage: z5 = F.zeta(5)
    sage: z5
    E(5)
    sage: z5^5
    1

It comes equipped with a distinguished basis, called the Zumbroich basis, which consists of a strict subset of all roots of unity::

    sage: z9 = F.zeta(9)
    -E(9)^4-E(9)^7
    sage: z3 * z5
    sage: E(15)^8
    sage: z3 + z5
    -E(15)^2-2*E(15)^8-E(15)^11-E(15)^13-E(15)^14
    sage: [z9^i for i in range(0,9)]
    [1, -E(9)^4-E(9)^7, E(9)^2, E(3), E(9)^4, E(9)^5, E(3)^2, E(9)^7, -E(9)^2-E(9)^5 ]

Note: we might want some other style of pretty printing.

The following is called AsRootOfUnity? in Chevie; we might want instead to use (z1*z3).multiplicative_order()::

    sage: (z1*z3).as_root_of_unity()
    11/18

Depending on the progress on #6391 (lib gap), we might want to implement this directly in Sage or to instead expose GAP's implementation, creating elements as in::

sage: z5 = gap("E(5)")
sage: z3 = gap("E(3)")
sage: z3+z5
-E(15)^2-2*E(15)^8-E(15)^11-E(15)^13-E(15)^14

Change History (0)

Note: See TracTickets for help on using tickets.