私は SAGE でプログラムを書いています。とりわけ、「大きな」数値フィールドの最大次数を計算する必要があります。私が扱っている数値フィールドは、かなり大きい次数 (これまでに扱ったもので約 40) だけでなく、判別式も非常に大きくなっています。
残念ながら、これにより、SAGE が最大次数を計算するために使用する標準の組み込み関数を使用することができなくなります。このコマンドK.maximal_order()
は単純に時間がかかりすぎます。以下のコードで使用されている表記法について具体的に説明しましょう:
Qa12 は、整数のリング (つまり、最大次数) を持つ数値フィールドを指定しますOO
。計算する必要があるOOK
のは、 の拡張K
の と書かれた最大次数ですQa12
。現在、MAGMA では、次のコードを使用してこれを行うことができます。
subOrderK:=ext<OO | y^2-kappa12>;
subOrderK:=AbsoluteOrder(subOrderK);
D:=Discriminant(subOrderK);
for p in PrimeDivisors(D) do
subOrderK:=pMaximalOrder(subOrderK,p);
end for;
OOK:=subOrderK;
これはかなり短い時間で実行されます。つまり、通常は 1 分未満です。SAGE には最初の 2 行のコードの類似物がないように見えるため、これを直接翻訳する方法は見つかりませんでした。私が何かを見逃している可能性があるので、最初の 2 行を翻訳する方法を知っていると思われる場合は、教えてください。代わりにフィールドの拡張を計算すると、コードは次のようになります。
K.<c> = Qa12.extension(y^2-kappa12)
K.<alpha> = K.absolute_field()
subOrderK = K.order(alpha)
D = subOrderK.discriminant()
for p in factor(D):
subOrderK = K.maximal_order(p[0])
OOK = subOrderK
Now, there are two problems with this code, the first of which is that the discriminant of said number field being huge, factorising it is impossible. In other words, I have not yet tested the for-loop. Do you see any way of avoiding having to deal with these huge discriminants? The for-loop is the second place I am insecure about: As there is (again - as far as I know) no direct analog to the MAGMA-command pMaximalOrder(subOrderK,p)
above, I was hoping that SAGE would "remember" the previous value of subOrderK
in the for-loop, hence recreating the effect of the MAGMA-command. Is this indeed the case? If note, do you see a way to avoid this issue?
NOTE:
I have posted essentially the same question on ask.sagemath a few days ago, to no avail so far.