My first question is, has anyone actually used this function? I found
nothing cia search_src(), and I myself have only ever used the
(inferior) complex_embeddings() -- inferior since it returns both
complex conjugates and gives no good way of separating the real from
the non-real.
Second question: places() does not actually do what it says when
prec=None: the docstring says that it returns maps to RIF or CIF, but
although the computation of roots is done in those fields, the homs
are constructed using r.center() for each root, so have codomains
which are Real or Complex Fields but not Interval fields. So the
question is, was that done for a reason? Or was it a slip? And
should I change the code to d owhat the docstring says, or change the
docstring to do what the code does?
John
> My first question is, has anyone actually used this function? I found
> nothing cia search_src(), and I myself have only ever used the
> (inferior) complex_embeddings() -- inferior since it returns both
> complex conjugates and gives no good way of separating the real from
> the non-real.
>
I wrote this function, and amusingly, I've never really used it for
much. :) I wrote it when I wanted to do something with embeddings
(related to John Voight's totally real fields enumeration code), but I
don't think I ended up using it.
> Second question: places() does not actually do what it says when
> prec=None: the docstring says that it returns maps to RIF or CIF, but
> although the computation of roots is done in those fields, the homs
> are constructed using r.center() for each root, so have codomains
> which are Real or Complex Fields but not Interval fields. So the
> question is, was that done for a reason? Or was it a slip? And
> should I change the code to d owhat the docstring says, or change the
> docstring to do what the code does?
>
No, it wasn't done for a reason -- I probably wrote the docstring
before I wrote the code. I would be fine with either behavior -- it
might be more natural to return the actual interval, because it's easy
for the user to then use .center() if they'd like. Maybe an example of
doing this could be in the docstring, so people see how it works?
-cc
I think this function is useful (although I rarely need all places)
and would prefer that it be like embeddings (i.e. taking the field,
not the precision). So K.places(CIF) instead of K.places(None). Then
there's no confusion.
Nick
+1. This is clearer, especially since this is how several other things
(embeddings, roots, etc) all work. Would you want it to take an
arbitrary field, or just something that models the reals or complexes?
(My first impression is to go with the latter, but I could be
convinced otherwise.)
-cc
I don't know what K.places(L) means, even when L is an extension of K.
Nick
Me either.
Interestingly, it seems like real fields generally have a
complex_field() method -- given a complex field, is there an obvious
way to get back the real field? The best I came up with was
C.zero_element().real().parent() ...
-cc
For arbitrary extension fields one can still us the embeddings()
function, which I do not propose to change at all. The extra thing
needed one day would be to have p-adic places, as maps to appropriate
extensions of Q_p, where one should define either K.place(P,prec) for
P a prime ideal, or K.places(p,prec), where p is a rational prime and
it returns a list of all the embeddings. However, we do not have a
p-adic analog of R or C so the image would have to be an actual p-adic
field.
How about?:
K.places(prime,ring,prec)
K.infinite_places(ring,prec)
Returns the list of places over a given prime
(a rational prime for an absolute field K or a
prime
Notes:
prime : required and may be Infinity(), i.e. can
represent any place of the base number field
ring : optional, may be determined by the prime
prec : optional, may be determined by the ring
I prefer that prime does not default to Infinity();
one should use infinite_places.
Abuse of input: one might allow the user to input
prime=<some complete field> which would set the
prime to infinity and ring to the complete field.
This would allow K.places(CIF).
Possibly "ring" could be changed to "field".
Question: If the ring is given then should only the
places which split over that ring should be returned?
E.g. only the real places or if QQ_p is given, then
only the degree one places. If so, then this should
be clearly documented as a feature. An objection to
this is that places
Question: what definition do we want for a place?
It is an equivalence class of:
(1) an embedding of K into a complete field;
(2) an absolute value |x|_v on K;
(3) a valuation on K^* (log|x|_v in the infinite case);
(4) [in the finite case only] a prime ideal.
Do we want to represent them by (1) -- the current
definition? Or do we want a class for which we can
ask for the various associated data?
Objections to my syntax: K.places() should not replace
the set of all places, maybe K.places_set()? There was
some syntax for the set of all primes of ZZ (or QQ),
which this should also follow? William created this
with an iteration operator, as I remember, and there
was some discussion its use or utility.
> > For arbitrary extension fields one can still us the embeddings()
> > function, which I do not propose to change at all. The extra thing
> > needed one day would be to have p-adic places, as maps to appropriate
> > extensions of Q_p, where one should define either K.place(P,prec) for
> > P a prime ideal, or K.places(p,prec), where p is a rational prime and
> > it returns a list of all the embeddings. However, we do not have a
> > p-adic analog of R or C so the image would have to be an actual p-adic
> > field.
> >
>
> One day.... ;-)
Excellent turn-around! Thanks for the speedy effort!
> Should it just return the embedding into the completion at that prime (until
> I get around to implementing Cp)?
I think the above syntax covers the possible inputs.
What the desired output object should be is still
open to debate.
Cheers,
David