Opened 10 years ago
Last modified 7 years ago
#8327 closed enhancement
Implement the universal cyclotomic field, using Zumbroich basis — at Version 11
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: | Christian Stump | Reviewers: | |
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | Stopgaps: |
Description (last modified by )
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).
Change History (11)
comment:1 Changed 10 years ago by
- Cc sage-combinat added
comment:2 follow-up: ↓ 3 Changed 10 years ago by
comment:3 in reply to: ↑ 2 ; follow-up: ↓ 4 Changed 10 years ago by
Replying to craigcitro:
So this seems interesting (I'd never heard of the Zumbrioch basis before). I don't have anything useful to say about the utility of this, or implementing it.
However, I'd like to suggest we might want to use a different convention for the constructor -- I don't like the idea of
CyclotomicField()
working. That seems like something that's too easy for a user to accidentally do (leave out then
they intended to use), and I'd much rather they see an error than have it quietly succeed, only to discover that their cyclotomic field isn't quite what they expected (and likely slower to boot). Maybe something likeF = CyclotomicField(n=Infinity)
?
I indeed take any better suggestion! In Gap that would be Cyclotomics, but it does sound good in Field in the name. n=infinity might be misleading, since it's not about infinite roots of unity.
comment:4 in reply to: ↑ 3 ; follow-up: ↓ 5 Changed 10 years ago by
Replying to nthiery:
I indeed take any better suggestion! In Gap that would be Cyclotomics, but it does sound good in Field in the name. n=infinity might be misleading, since it's not about infinite roots of unity.
True. Maybe it's a bit too "cutesy," but using n=0
might be nice -- after all, the n
th cyclotomic field has roots of unity for all divisors of n
, so this would still hold for the universal cyclotomic field and n=0
.
comment:5 in reply to: ↑ 4 Changed 10 years ago by
Replying to craigcitro:
True. Maybe it's a bit too "cutesy," but using
n=0
might be nice -- after all, then
th cyclotomic field has roots of unity for all divisors ofn
, so this would still hold for the universal cyclotomic field andn=0
.
Mmm, any complex number is a 0-th root of unity, isn't it?
comment:6 Changed 10 years ago by
- Status changed from new to needs_work
Does anyone have a pdf copy of Zumbroich's thesis where the algorithms are described?
There is a nice version of a modified Zumbroich basis in the article I used (both are implemented in the attached file) but I don't see how the author expresses any root of unity in terms of the basis (probably just due to my lack of knowledge). But Zumbroich should describe it in more detail in his thesis.
comment:7 Changed 10 years ago by
The attached class NewCyclotomicField? uses the modified Zumbroich basis and behaves already somehow as it should (beside pretty printing).
If people think the Zumbroich basis itself is nicer, it's easy to change. I personally think the modified version as defined in Breuer - "Integral bases for subfields of cyclotomic fields" AAECC8, 279--289 (1997) has nicer properties (see the definition of the set S_n and Remark 1).
Here are some implementation problems I have:
- how can I replace CombinatorialAlgebra? by a new field constructor (I haven't found a description how to define a field)?
- how can I embed a CombinatorialAlgebra? into another one (here: NewCyclotomicField?(m) into NewCyclotomicField?(n) for m | n)?
- how can I define a new class UniversalCyclotomicField? containing all cyclotomic fields?
- how can I define the attribute self._one in the constructor of NewCyclotomicField? properly?
comment:8 Changed 10 years ago by
- Cc cwitty added
comment:9 Changed 10 years ago by
- Status changed from needs_work to needs_review
comment:10 Changed 10 years ago by
comment:11 Changed 10 years ago by
- Description modified (diff)
So this seems interesting (I'd never heard of the Zumbrioch basis before). I don't have anything useful to say about the utility of this, or implementing it.
However, I'd like to suggest we might want to use a different convention for the constructor -- I don't like the idea of
CyclotomicField()
working. That seems like something that's too easy for a user to accidentally do (leave out then
they intended to use), and I'd much rather they see an error than have it quietly succeed, only to discover that their cyclotomic field isn't quite what they expected (and likely slower to boot). Maybe something likeF = CyclotomicField(n=Infinity)
?