# Why does the code not work?

I want to write a program which gives me all prime ideals in the ring of integers $\mathcal{O}_K$, $K= \mathbb{Q}(\sqrt{-5})$ . They should have the property to be principal. My problem is that the condition if(J.gens()-1 in L): does not really work. By this I want that the generator of the principal ideal minus 1 is contained in the ideal L.

   sage: K.<a> = QuadraticField(-5)
cl = K.class_group()
g = cl.gens()
L=K.fractional_ideal(-a-1)
sage: for norm, ideals in K.ideals_of_bdd_norm(10).items():
for J in ideals:
if (J.is_prime()):
if  (cl(J)==g^4):
if(J.gens()-1 in L):
print norm,J

edit retag close merge delete

Have you look at what J.gens() looks like for the various ideals J you are considering?

If i leave out the condtion if(J.gens()-1 in L):, then it prints this: 5 Fractional ideal (-a). Now -a is the generator of the principal ideal (-a). If I take again the condition if(J.gens()-1 in L), then this means whether -a-1 is in L and it is but sage does not print me out J.

1

That -a-1 lies in L should hold, and sage does seem to agree with that. However, J.gens()-1 apparently doesn't, so you should probably print J.gens(), or more generally J.gens(), to see why that is the case. That's either going to give you a good, reportable, bug or it shows you what's going wrong.

Sort by » oldest newest most voted What you are looking for is J.gens_reduced() instead of J.gens().

Instead of g^4 you can just write cl.one(). The class group has order $2$ so g^2 is already cl.one(). Instead of comparing classes you can also just ask J.is_principal().

more

What is the difference between J.gens_reduced() and J.gens()?

See the documentation of gens_reduced: "Express this ideal in terms of at most two generators, and one if possible". By contrast, gens() are just the generators which were given when the ideal was constructed (in this case, by Sage).