Hoi Andreas,
deshalb sollte man das Abbruchkriterium für P[] ersteinmalkorrekt verbal
formulieren.
Mit anderen Worten, die Operation \[CirclePlus] -> S[] soll die Addition
ganzrationaler Punkte auf der elliptischen Kurve darstellen, die Operation
\[CircleTimes] -> P[] ist die Vervielfachung eines Punktes dortselbst.
Die Vervielfachung ist eine Abkürzung für die Selbstaddition, und man
sieht, dass die Addition wie gewünscht zu funktionieren scheint:
In[21]:= NestList[S[#, {1, 2}]&, {1, 2}, 26]
Out[21]= {{1, 2}, {2, 19}, {10, 6}, {21, 7}, {14, 12},
{9, 6}, {19, 12}, {7, 10}, {4, 17}, {20, 18},
{18, 20}, {13, 11}, {11, 2}, {11, 21}, {13, 12},
{18, 3}, {20, 5}, {4, 6}, {7, 13}, {19, 11},
{9, 17}, {14, 11}, {21, 16}, {10, 17}, {2, 4},
{1, 21}, {\[Infinity], \[Infinity]}}
Demzufolge muss man die Vervielfachung als das definieren, was sie ist:
In[33]:= Clear[P]
(* m, skriptO injected from global definitions *)
P[n_Integer /; n == 1, {x_, y_}] := {x, y}
P[n_Integer /; n > 1, {x_, y_}] := P[n, {x, y}] =
S[P[n - 1, {x, y}], {x, y}];
mit
In[37]:= NestList[S[#, {1, 2}]&, {1, 2}, 26] == Table[P[k, {1, 2}], {k, 1,
27}]
Out[37]= True
Cool, oder?
Gruss
Udo.