/*

 For this, <<although>> this would not be
 by any means a definitive evidence, it
 would be nice if I could have a decent
 list of non-torsion rational points as
 well as torsion rational points for the
 same curve, for a few elliptic curves
 (but I want them to use the same Weierstrass
 model for both lists of torsion points
 as well as nontorsion points). If I supplied
 a given rational point (nontorsion), would
 it be possible to use Magma to *automate*
 the process of generating, say the first
 30 multiples? That would save enormous
 time doing the multiplication by integers
 by hand.

*/

intrinsic Rabi(E::CrvEll)
{}
   G, f := MordellWeilGroup(E);
   T, g := TorsionSubgroup(E);
   printf "Let E be:\n\t%o\n\n", E;
   printf "The Mordell-Weil group is: %o\n\n",G;

   for i in [1..Ngens(G)] do
      printf "Generator %o = %o.\n", i, f(G.i);
   end for;

   printf "\nThe torsion subgroup is:\n %o.\n\n", {g(t) : t in T};
   
   for i in [Ngens(T)+1..Ngens(G)] do
      printf "The first 20 multiples of the %oth free generator are: \n", i - Ngens(T);
      for j in [1..20] do
         printf "%o*G.%o \t= %o.\n", j, i, f(j*G.i);
      end for;
   end for;
end intrinsic;
