
P<x> := PolynomialRing(Integers());
O := MaximalOrder(x^2-10);
A := RayClassField(9*O);
A;
NumberField(A);
time assert Discriminant(MaximalOrder(A)) eq Discriminant(A);

for n in [9, 11] do
    k := NumberField(x^2-2);
    lp := [p : p in [100000..100200] | IsPrime(p) and p mod n eq 1];
    R, mR := RayClassGroup(&*lp*MaximalOrder(k));
    Q, mQ := quo<R|n*R>;
    lQ := Subgroups(Q: Quot := [n]);
    A := [AbelianExtension(Inverse(mQ*mq)*mR) where _, mq := quo<Q|x`subgroup>
    : x in lQ];
    for i in [1 .. 4] do
	a := Random(A);
	NumberField(a);
	time assert Discriminant(MaximalOrder(a)) eq Discriminant(a);
    end for;
end for;

k := NumberField(x^2-2);
lp := [p : p in [100000..100100] | IsPrime(p) and p mod 8 eq 1];
R, mR := RayClassGroup(&*lp*MaximalOrder(k));
Q, mQ := quo<R|8*R>;
lQ := Subgroups(Q: Quot := [8]);
A := [AbelianExtension(Inverse(mQ*mq)*mR) where _, mq := quo<Q|x`subgroup>
: x in lQ];
for i in [1 .. 3] do
    a := Random(A);
    NumberField(a);
    time assert Discriminant(MaximalOrder(a)) eq Discriminant(a);
end for;

Q, mQ := quo<R|16*R>;
lQ := Subgroups(Q: Quot := [16]);
A := [AbelianExtension(Inverse(mQ*mq)*mR) where _, mq := quo<Q|x`subgroup>
: x in lQ];
for i in [1 .. 1] do
    a := Random(A);
    NumberField(a);
    time assert Discriminant(MaximalOrder(a)) eq Discriminant(a);
end for;

