[BACK]Return to tutorial.tex CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari-2.2 / doc

Annotation of OpenXM_contrib/pari-2.2/doc/tutorial.tex, Revision 1.1.1.1

1.1       noro        1: % $Id: tutorial.tex,v 1.7 2000/11/06 18:59:00 karim Exp $
                      2: % Copyright (c) 2000  The PARI Group
                      3: %
                      4: % This file is part of the PARI/GP documentation
                      5: %
                      6: % Permission is granted to copy, distribute and/or modify this document
                      7: % under the terms of the GNU Free Documentation License
                      8:
                      9: % This should be compiled with plain TeX
                     10: \def\TITLE{A Tutorial for Pari-GP}
                     11: \input parimacro.tex
                     12: \ifPDF
                     13:   \input pdfmacs.tex
                     14: \fi
                     15: \def\maketitle#1{\currentlabel.\ #1}
                     16: \begintitle
                     17: \vskip2.5truecm
                     18: \centerline{\mine A Tutorial}
                     19: \vskip1.truecm
                     20: \centerline{\mine for}
                     21: \vskip1.truecm
                     22: \centerline{\mine PARI / GP}
                     23: \vskip1.truecm
                     24: \authors
                     25: \centerline{last updated November 5, 2000}
                     26: \centerline{(this document distributed with version \vers)}
                     27: \endtitle
                     28:
                     29: \copyrightpage
                     30:
                     31: This booklet is intended to be a guided tour and a tutorial to the GP
                     32: calculator. Many examples will be given, but each time a new function is
                     33: used, the reader should look at the appropriate section in the User's Manual
                     34: for detailed explanations. Hence although this chapter can be read
                     35: independently (for example to get rapidly acquainted with the possibilities
                     36: of GP without having to read the whole manual), the reader will profit most
                     37: from it by reading it in conjunction with the reference manual.
                     38:
                     39: \section{Greetings!}
                     40:
                     41: So you are sitting in front of your workstation (or terminal, or PC,\dots),
                     42: and you type \kbd{gp} to get the program started (remember to always hit the
                     43: \kbd{Enter} key and not the \kbd{Return} key on a Macintosh computer).
                     44:
                     45: It says hello in its particular manner, and then waits for you after its
                     46: \kbd{prompt}, initially \kbd{?} (or something like {\bf gp}~\kbd{>}).
                     47:
                     48: Type \kbd{2 + 2}. What happens? Maybe not what you expect. First of all, of
                     49: course, you should tell GP that your input is finished, and this is done by
                     50: hitting the \kbd{Return} (or \kbd{Newline}) key, or the \kbd{Enter} key on
                     51: the Mac. If you do exactly this, you will get the expected answer. However
                     52: some of you may be used to other systems like Macsyma or Maple. In this case,
                     53: you will have subconsciously ended the line with a semicolon ``\kbd{;}''
                     54: before hitting \kbd{Return}, since this is how it is done on those systems.
                     55: In that case, you will simply see GP answering you with a smug expression,
                     56: i.e.~a new prompt and no answer!  This is because a semicolon at the end of a
                     57: line in GP tells it to keep the result, but not to print it (you will
                     58: certainly want to use this feature if the output is several pages long).
                     59:
                     60: Try \kbd{27 * 37}. Wow! even multiplication works. Actually, maybe those
                     61: spaces are not necessary after all. Let's try \kbd{27*37}. Yup, seems to be
                     62: ok. We'll still insert them in this document since it makes things easier to
                     63: read, but as GP does not care about them, you don't have to type them all!
                     64:
                     65: Now this session is getting lengthy, so the second thing one needs to learn
                     66: is to quit. Each system has its quit signal (to name a few: \kbd{quit},
                     67: \kbd{exit}, \kbd{system},\dots). In GP, you can use \kbd{quit} or \b{q}
                     68: (backslash q), the \kbd{q} being of course for quit. Try it.
                     69:
                     70: Now you've done it! You're out of GP, so how do you want to continue studying
                     71: this tutorial? Get back in please (see above).
                     72:
                     73: Let's get to more serious stuff. Let's see, I seem to remember that the
                     74: decimal expansion of $1/7$ has some interesting properties. Let's see what GP
                     75: has to say about this. Type \kbd{1 / 7}. What? This computer is making fun of
                     76: me, it just spits back to me my own input, that's not what I want!
                     77:
                     78: Now stop complaining, and think a little. This system has been written mainly
                     79: for pure mathematicians, and not for physicists (although they are welcome to
                     80: use it). And mathematically, $1/7$ is an element of the field $\Q$ of
                     81: rational numbers, so how else but $1/7$ can the computer give the answer to
                     82: you? (well maybe $2/14$, but why complicate matters?). Seriously, the basic
                     83: point here is that PARI (hence GP) will almost always try to give you a
                     84: result which is as precise as possible (we will see why ``almost'' later),
                     85: hence since here you gave an operation whose result can be represented
                     86: exactly, that's what it gives you.
                     87:
                     88: OK, but I still want the decimal expansion of $1/7$. No problem. Type one of
                     89: the following:
                     90: \bprog
                     91: 1./ 7
                     92: 1 / 7.
                     93: 1./ 7.
                     94: 1 / 7 + 0.@com etc \dots
                     95: @eprog
                     96: Immediately a number of decimals of this fraction appear (28 on most systems,
                     97: 38 on the others), and the repeating pattern is $142857$. The reason is that
                     98: you have included in the operations numbers like \kbd{0.}, \kbd{1.} or \kbd{7.}
                     99: which are {\it imprecise\/} real numbers, hence GP cannot give you an exact
                    100: result.
                    101:
                    102: Why 28 / 38 decimals by the way? Well, it is the default initial precision,
                    103: as indicated when you start GP. This has been chosen so that the
                    104: computations are very fast, and gives already 12 decimals more accuracy than
                    105: conventional double precision floating point operations. The precise value
                    106: depends on a technical reason: if your machine supports 64-bit integers (the
                    107: standard library can handle integers up to $2^{64}$), the default precision
                    108: will be 38 decimals, and 28 otherwise. As the latter is most probably the
                    109: case (if your machine is not a \kbd{DEC alpha}, that is), we'll assume it
                    110: henceforth.
                    111:
                    112: Only large mainframes or supercomputers have 28 digits of precision in their
                    113: standard libraries, and that is their absolute limit. Not here of course. You
                    114: can extend the precision (almost) as much as you like as we will see in a
                    115: moment.
                    116:
                    117: I'm getting bored, why don't we get on with some more exciting stuff?  Well,
                    118: try \kbd{exp(1)}. Presto, comes out the value of $e$ to 28 digits. Try
                    119: \kbd{log(exp(1))}. Well, it's not exactly equal to 1, but pretty close!  That's
                    120: what you lose by working numerically.
                    121:
                    122: Let's see, what could we try now. Hum, \kbd{pi}? The answer is not that
                    123: enlightening. \kbd{Pi}? Ah. This works better. But let's remember that GP
                    124: distinguishes between uppercase and lowercase letters. \kbd{pi} was as
                    125: meaningless to it as \kbd{stupid garbage} would have been: in both cases GP
                    126: will just create a variable with that funny unknown name you just used. Try
                    127: it! Note that it is actually equivalent to type \kbd{stupidgarbage}: all
                    128: spaces are suppressed from the input. In the \kbd{27~*~37} example  it was
                    129: not so conspicuous as we had an operator to separate the two operands. This
                    130: has important consequences for the writing of GP scripts (more about this
                    131: later).
                    132:
                    133: By the way, you can ask GP about any identifier you think it might know
                    134: about: just type it, prepending a question mark ``\kbd{?}''. Try \kbd{?Pi}
                    135: and \kbd{?pi} for instance. On some systems, an extended online help might
                    136: be available: try doubling the question mark to check whether it's the case on
                    137: yours: \kbd{??Pi}. In fact the GP header already gave you that information if
                    138: it was the case (just before the copyright message). As well, if it says
                    139: something like ``\kbd{readline enabled}'' then you should have a look at
                    140: \secref{se:readline} in the User's Manual before you go on: it will be much
                    141: easier to type in examples and correct typos after you've done that.
                    142:
                    143: Now try \kbd{exp(Pi * sqrt(163))}. Hmmm, since from our last example we
                    144: suspect that the last digit may be wrong, can this really be an integer?
                    145: This is the time to change precision. Type \kbd{\b{p} 50}, then try
                    146: \kbd{exp(Pi * sqrt(163))} again. We were right to suspect that the last
                    147: decimal was incorrect, since we get even more nines than before, but it is
                    148: now convincingly clear that this is not an integer. Maybe it's a bug in PARI,
                    149: and the result is really an integer? Type \kbd{sqr(log(\%) / Pi)} immediately
                    150: after the preceding computation (\kbd{\%} means the result of the last
                    151: computed expression). More generally, the results are numbered
                    152: \kbd{\%1, \%2, \dots} {\it including} the results that you do not want to see
                    153: printed by putting a semicolon at the end of the line, and you can evidently
                    154: use all these quantities in any further computations. \kbd{sqr} is the square
                    155: function (\kbd{sqr(x) = x * x}), not to be confused with \kbd{sqrt} which is
                    156: the square root function). The result seems to be indistinguishable from $163$,
                    157: hence it does not seem to be a bug.
                    158:
                    159: In fact, it is known that $\exp(\pi*\sqrt{n})$ not only is not an integer
                    160: or a rational number, but is even a transcendental number when $n$ is a
                    161: non-zero rational number.
                    162:
                    163: So GP is just a fancy calculator, able to give me more decimals than I will
                    164: ever need? Not so, GP is incredibly more powerful than an ordinary
                    165: calculator, even independently of its arbitrary precision possibilities.
                    166:
                    167: \noindent {\bf Additional comments} (you are supposed to skip this at first,
                    168: and come back later)
                    169:
                    170: 1) If you are a PARI old timer, you will notice pretty soon (or maybe you
                    171: have already?) that many many things changed between the older 1.39.xx
                    172: versions and this one. And conspicuously, most function names have been
                    173: changed. We sincerely think it's for the best since they are much more
                    174: logical now and the systematic prefixing is very convenient coupled with the
                    175: automatic completion mechanism: it's now very easy to know what functions are
                    176: available to deal with, say, elliptic curves since they all share the prefix
                    177: \kbd{ell}.
                    178:
                    179: Of course, this is going to break all your nice old scripts. Well, you can
                    180: either change the compatibility level (typing \kbd{default(compatible, 3)}
                    181: will send you back to the stone-age behaviour of good ol' version 1.39.15),
                    182: or rewrite the scripts. We really advise you to do the latter if they are not
                    183: too long, since they can now be written much more cleanly than before
                    184: (especially with the new control statements: \kbd{break}, \kbd{next},
                    185: \kbd{return}), and besides it'll be as good a way as any to get used to the new
                    186: names. We {\it might} provide an automatic transcriptor with future versions.
                    187:
                    188: To know how a specific function was changed, just type
                    189: \kbd{whatnow({\rm function})}.
                    190:
                    191: 2) It seems that the text implicitly says that as soon as an imprecise number
                    192: is entered, the result will be imprecise. Is this always true? There is a
                    193: unique exception: when you multiply an imprecise number by the exact number 0,
                    194: you will get the exact 0. Compare \kbd{0 * 1.4} and \kbd{0.~*~1.4}. \smallskip
                    195: %
                    196: 3) Not only can the number of decimal places of real numbers be large, but the
                    197: number of digits of integers also. Try \kbd{100!}. It is never necessary to
                    198: tell GP in advance the size of the integers that it will encounter, since this
                    199: is adjusted automatically. On the other hand, for many computations with real
                    200: numbers, it is necessary to specify a default precision (initially 28 digits).
                    201: \smallskip
                    202: %
                    203: 4) Come back to 28 digits of precision (\kbd{\b{p} 28}), and type
                    204: \kbd{exp(24 * Pi)}. As you can see the result is printed in exponential format.
                    205: This is because GP never wants you to believe that a result is correct when it
                    206: is not.
                    207:
                    208: We are working with 28 digits of precision, but the integer part of
                    209: $\exp(24*\pi)$ has 33 decimal digits. Hence if GP had dutifully printed out 33
                    210: digits, the last few digits would have been wrong. Hence GP wants to print only
                    211: 28 significant digits, but to do so it has to print in exponential format.
                    212: \smallskip
                    213: %
                    214: 5) There are two ways to avoid this. One is of course to increase the precision
                    215: to more than 33 decimals. Let's try it. To give it a wide margin, we set the
                    216: precision to 40 decimals. Then we recall our last result (\kbd{\%}
                    217: or \kbd{\%n} where \kbd{n} is the number of the result). What? We still have
                    218: an exponential format! Do you understand why?
                    219:
                    220: Again let's try to see what's happening. The number you recalled had been
                    221: computed only to 28 decimals, and even if you set the precision to 1000
                    222: decimals, GP knows that your number has only 28 digits of accuracy but an
                    223: integral part with 33 digits. So you haven't improved things by increasing
                    224: the precision. Or have you? What if we retype \kbd{exp(24 * Pi)} now that we
                    225: have 40 digits? Try it. Now we do not have an exponential format, and we see
                    226: that at 28 decimals the last 6 digits would have been wrong if they had been
                    227: printed in fixed-point format.
                    228: \smallskip
                    229: %
                    230: 6) {\it Warning\/}. Try the following: starting in precision 28, type first
                    231: \kbd{default(format, "e0.50")}, then \kbd{exp(24 * Pi)}. Do you understand why
                    232: the result is so bad, and why there are lots of zeros at the end?  Convince
                    233: yourself by typing \kbd{log(exp(1))}. The moral is that the
                    234: \kbd{default(format,)} command changes only the output format, but {\it not\/}
                    235: the default precision.  On the other hand, the \b{p} command changes both the
                    236: precision and the output format.
                    237:
                    238: 7) What if I forget what the current precision is and I don't feel like
                    239: counting all the decimals? Well, you can learn about GP internal variables
                    240: (and change them!) using \kbd{default}. Type \kbd{default(realprecision)},
                    241: then \kbd{default(realprecision, 38)}. Huh? In fact this last command is
                    242: strictly equivalent to \kbd{\b{p} 38}! (admittedly more cumbersome to type).
                    243: There are more ``defaults'' than just \kbd{format} and \kbd{realprecision}:
                    244: type \kbd{default} by itself now, they are all there.
                    245:
                    246: 8) Note that the \kbd{default} command reacts differently according to the
                    247: number of input arguments. This is not an uncommon behaviour for GP functions.
                    248: You can see this from the online help (or the complete description in
                    249: Chapter~3): any argument surrounded by braces \kbd{\obr\cbr} in the function
                    250: prototype is optional (which really means that a {\it default} argument will be
                    251: supplied by GP). You can then check out from the text what effect a given value
                    252: will have, and in particular the default one.
                    253:
                    254: \section{Warming up}
                    255:
                    256: Another thing you better get used to pretty fast is error messages. Try
                    257: typing \kbd{1/0}. Couldn't be clearer. Taking again our universal example in
                    258: precision 28, type \kbd{floor(exp(24 * Pi))} (\kbd{floor} is the
                    259: mathematician's integer part, not to be confused with \kbd{truncate}, which is
                    260: the computer scientist's: \kbd{floor(-3.4)} is equal to $-4$ whereas
                    261: \kbd{truncate(-3.4)} is equal to $-3$).  You get a more cryptic error message,
                    262: which you would immediately understand if you had read the additional
                    263: comments of the preceding section. Since I told you not to read them, the
                    264: explanation is simply that GP is unable to compute the integer part of
                    265: \kbd{exp(24 * Pi)} given only 28 decimals of accuracy, since it has 33 digits.
                    266:
                    267: Some error messages are even much more cryptic than that and are sometimes
                    268: not so easy to understand (well, it's nothing compared to \TeX's error
                    269: messages!).
                    270:
                    271: For instance, try \kbd{log(x)}. Not really clear, is it? But no matter, it
                    272: simply tells you that GP simply does not understand what \kbd{log(x)} is
                    273: (although it does know the \kbd{log} function, as \kbd{?log} will readily
                    274: tell us).
                    275:
                    276: Now let's try \kbd{sqrt(-1)} to see what error message we get now. Haha! GP
                    277: even knows about complex numbers, so impossible to trick it that way.
                    278: Similarly, try typing \kbd{log(-2)}, \kbd{exp(I*Pi)}, \kbd{I\pow I},\dots
                    279: So we have a lot of real and complex analysis at our disposal (note that
                    280: there is always a specific branch of multivalued complex transcendental
                    281: functions which is taken, specified in the manual). Again, beware that
                    282: \kbd{I} and \kbd{i} are not the same thing. Compare \kbd{I\pow2} with
                    283: \kbd{i\pow2} for instance.
                    284:
                    285: Just for fun, let's try \kbd{6*zeta(2) / Pi\pow2}. Pretty close, no?
                    286:
                    287: \medskip
                    288: Now GP didn't seem to know what \kbd{log(x)} was, although it did know how to
                    289: compute numerical values of \kbd{log}. This is annoying. Maybe it knows the
                    290: exponential function? Let's give it a try. Type \kbd{exp(x)}. What's this? If
                    291: you had had any experience with other systems, the answer should have simply
                    292: been \kbd{exp(x)} again. But here the answer is the Taylor expansion of the
                    293: function around $\kbd{x}=0$, to 16 terms. 16 is the default
                    294: \kbd{seriesprecision}, which can be changed by typing \kbd{\b{ps} $n$} or
                    295: \kbd{default(seriesprecision, $n$)} where $n$ is the number of terms that you
                    296: want in your power series (note the \kbd{O(x\pow16)} which ends the series,
                    297: and which is trademark of this type of object in GP. It is the familiar
                    298: ``big--oh'' notation of analysis).
                    299:
                    300: You will thus automatically get the Taylor expansion of any function that can
                    301: be expanded around $0$, and incidentally this explains why we weren't
                    302: able to do anything with \kbd{log(x)} which is not defined at 0. But if we
                    303: try \kbd{log(1+x)}, then it works. But what if we wanted the expansion
                    304: around a point different from 0? Well, you're able to change $x$ into
                    305: $x-a$, aren't you? So for instance you can type \kbd{log(x+2)} to
                    306: have the expansion of \kbd{log} around $\kbd{x}=2$. As exercises you can
                    307: try
                    308: \bprog
                    309: cos(x)           cos(x)^2 + sin(x)^2           exp(cos(x))
                    310: gamma(1 + x)     exp(exp(x) - 1)               1 / tan(x)
                    311: @eprog
                    312: for different values of \kbd{serieslength}.
                    313:
                    314: Let's try something else: type \kbd{(1 + x)\pow 3}. No \kbd{O(x)} here, since
                    315: the result is a polynomial.  Haha, but I have learnt that if you do not take
                    316: exponents which are integers greater or equal to 0, you obtain a power series
                    317: with an infinite number of non-zero terms. Let's try.  Type
                    318: \kbd{(1 + x)\pow (-3)} (the parentheses around \kbd{-3} are not necessary but
                    319: make things easier to read). Surprise! Contrary to what we expected, we don't
                    320: get a power series but a rational function. Again this is for the same reason
                    321: that \kbd{1 / 7} just gave you $1/7$: the result being exact, PARI doesn't see
                    322: any reason to make it non-exact.
                    323:
                    324: But I still want that power series. To obtain it, you can do as in the $1/7$
                    325: example and type
                    326: \bprog
                    327: (1 + x)^(-3) + O(x^16)
                    328: (1 + O(x^16)) * (1 + x)^(-3)
                    329: (1 + x + O(x^16))^(-3)@com, etc \dots
                    330: @eprog
                    331: You can also use the series constructor which transforms any object into a
                    332: power series, using the current \kbd{seriesprecision}, and simply type
                    333: \bprog
                    334: Ser( (1 + x)^(-3) )
                    335: @eprog
                    336:
                    337: Now try \kbd{(1 + x)\pow (1/2)}: we obtain a power series, since the
                    338: result is an object which PARI does not know how to represent exactly (we
                    339: could teach PARI about algebraic functions, but then take \kbd{(1 + x)\pow Pi}
                    340: as another example). This gives us still another solution to our preceding
                    341: exercise: we can type \kbd{(1 + x)\pow (-3.)}. Since \kbd{-3.} is not an exact
                    342: quantity, PARI has no means to know that we are dealing with a rational
                    343: function, and will instead give you the power series, this time with real
                    344: instead of integer coefficients.
                    345:
                    346: Finally, if you want to be really fancy, you can type
                    347: \kbd{taylor((1 + x)\pow (-3), x)} (look at the entry for \kbd{taylor} for the
                    348: description of the syntax), but this is in fact almost never used.
                    349: \smallskip
                    350:
                    351: To summarize, in this section we have seen that in addition to integers, real
                    352: numbers and rational numbers, PARI can handle complex numbers, polynomials,
                    353: power series, rational functions. A large number of functions exist which
                    354: handle these types, but in this tutorial we will only look at a few.
                    355:
                    356: \noindent {\bf Additional comments} (as before, you are supposed to skip this
                    357: at first reading)
                    358:
                    359: 1) To be able to duplicate the following example, first type \b{y} to
                    360: suppress automatic simplification.
                    361:
                    362: A complex number has a real part and an imaginary part (who would have
                    363: guessed?). However, beware that when the imaginary part is the exact integer
                    364: zero, it is not printed, but the complex number is not converted to a real
                    365: number. Hence it may {\it look\/} like a real number without being one, and
                    366: this may cause some confusion in programs which expect real numbers. For
                    367: example, type \kbd{n = 3 + I - I}. The answer reads \kbd{3}, as expected. But
                    368: it is still a complex number. Check it with \kbd{type(n)}. Hence if you then
                    369: type \kbd{(1+x)\pow n}, instead of getting the polynomial
                    370: \kbd{1 + 3*x + 3*x\pow 2 + x\pow 3} as expected, you obtain a power series.
                    371: Worse, when you try to apply an arithmetic function, say the Euler totient
                    372: function (known as \kbd{eulerphi} to GP), you get a sententious error message
                    373: recalling you that ``arithmetic functions want integer arguments''. You would
                    374: have guessed yourself, but the message is difficult to understand since 3 looks
                    375: like a genuine integer!!! (Please read again if this is not clear. It is a
                    376: common source of incomprehension).
                    377:
                    378: Similarly, \kbd{3 + x - x} is not the integer 3 but a constant polynomial
                    379: (in the variable \kbd{x}), equal to $3 = 3x^0$.
                    380:
                    381: If you want the final expression to be in the simplest form possible (for
                    382: example before applying an arithmetic function, or simply because things will
                    383: go faster afterwards), apply the function \kbd{simplify} to the result. In
                    384: fact, by default GP does this automatically at the end of a GP command. Note
                    385: that it does {\it not\/} simplify in intermediate expressions. This default
                    386: can be switched off and on by the command \b{y}. This is why I asked you to
                    387: type this before starting.
                    388:
                    389: 2) As already stated, power series expansions are always implicitly around
                    390: $\kbd{x}=0$. When we wanted them around $\kbd{x}=\kbd{a}$, we replaced
                    391: \kbd{x} by \kbd{z + a} in the function we wanted to expand. For complicated
                    392: functions, it may be simpler to use the substitution function \kbd{subst}.
                    393: For example, if \kbd{p~= 1 / (x\pow 4 + 3*x\pow 3 + 5*x\pow 2 - 6*x + 7)},
                    394: you may not want to retype this, replacing \kbd{x} by \kbd{z~+ a}, so you can
                    395: write \kbd{subst(p, x, z+a)} (look up the exact description of the
                    396: \kbd{subst} function).
                    397:
                    398: Now try typing \kbd{p = 1 + x + x\pow 2 + O(x\pow 10)}, then
                    399: \kbd{subst(p, x, z+1)}. Do you understand why you get an error message?
                    400:
                    401: \section{The Remaining PARI Types}
                    402: Let's talk some more about the basic PARI types.
                    403:
                    404: Type \kbd{p = x * exp(-x)}. As expected, you get the power series expansion
                    405: to 16 terms (if you have not changed the default). Now type
                    406: \kbd{pr = serreverse(p)}. You are asking here for the {\it reversion\/} of the
                    407: power series \kbd{p}, in other words the inverse function. This is possible
                    408: only for power series whose first non-zero coefficient is that of $x^1$.  To
                    409: check the correctness of the result, you can type \kbd{subst(p, x, pr)} or
                    410: \kbd{ subst(pr, x, p)} and you should get back \kbd{x + O(x\pow 17)}.
                    411:
                    412: Now the coefficients of \kbd{pr} obey a very simple formula. First, we would
                    413: like to multiply the coefficient of \kbd{x\pow n} by \kbd{n!} (in the case of
                    414: the exponential function, this would simplify things considerably!). The PARI
                    415: function \kbd{serlaplace} does just that. So type \kbd{ps = serlaplace(pr)}.
                    416: The coefficients now become integers, which can be immediately recognized by
                    417: inspection. The coefficient of $x^n$ is now equal to
                    418: $n^{n-1}$. In other words, we have
                    419: %
                    420: $$\kbd{pr} = \sum_{n\ge1}\dfrac{n^{n-1}}{n!} X^{n}.$$
                    421: %
                    422: Do you know how to prove this? (If you have never seen this, the proof is
                    423: difficult.)
                    424: \smallskip
                    425: %
                    426: Of course PARI knows about vectors (rows and columns are distinguished, even
                    427: though mathematically there is no difference) and matrices. Type for example
                    428: \kbd{[1,2,3,4]}. This gives the row vector whose coordinates are 1, 2, 3 and
                    429: 4.  If you want a column vector, type \kbd{[1,2,3,4]\til}, the tilde meaning
                    430: of course transpose. You don't see much difference in the output, except for
                    431: the tilde at the end. However, now type \b{b}: lo and behold, the vector does
                    432: become a column. The \b{b} command is used mainly for this purpose.
                    433:
                    434: Type \kbd{m = [a,b,c; d,e,f]}. You have just entered a matrix with 2 rows and
                    435: 3 columns. Note that the matrix is entered by {\it rows\/} and the rows are
                    436: separated by semicolons ``\kbd{;}''. The matrix is printed naturally in a
                    437: rectangle shape. If you want it printed horizontally just as you typed it,
                    438: type \b{a}, or if you want this type of printing to be the permanent default
                    439: type \kbd{default(output, 1)}. Type \kbd{default(output, 0)} if you want to
                    440: come back to the original default.
                    441:
                    442: Now type \kbd{m[1,2]}, \kbd{m[1,]}, \kbd{m[,2]}. Are explanations necessary?
                    443: (In an expression such as \kbd{m[j,k]}, the \kbd{j} always refers to the
                    444: row number, and the \kbd{k} to the column number, and the first index is
                    445: always 1, never 0. This default cannot be changed.)
                    446:
                    447: Even better, type \kbd{m[1,2] = 5; m} (the semicolon also allows us to put
                    448: several instructions on the same line. The final result will be the output of
                    449: the last statement on the line). Now type \kbd{m[1,] = [15,-17,8]}. No
                    450: problem. Finally type \kbd{m[,2] = [j,k]}. You have an error message since you
                    451: have typed a row vector, while \kbd{m[,2]} is a column vector. If you type
                    452: instead \kbd{m[,2] = [j,k]\til} it works. \smallskip
                    453: %
                    454: Type now \kbd{h = mathilbert(20)}. You get the so-called ``Hilbert matrix''
                    455: whose coefficient of row $i$ and column $j$ is equal to $(i+j-1)^{-1}$.
                    456: Incidentally, the matrix \kbd{h} takes too much room. If you don't want to
                    457: see it, simply type a semi-colon ``\kbd{;}'' at the end of the line
                    458: (\kbd{h = mathilbert(20);}). This is an example of a ``precomputed'' matrix,
                    459: built into PARI. There are only a few. We will see later an example of a much
                    460: more general construction.
                    461:
                    462: What is interesting about Hilbert matrices is that first their inverses and
                    463: determinants can be computed explicitly (and the inverse has integer
                    464: coefficients), and second they are numerically very unstable, which make them
                    465: a severe test for linear algebra packages in numerical analysis.  Of course
                    466: with PARI, no such problem can occur: since the coefficients are given as
                    467: rational numbers, the computation will be done exactly, so there cannot be
                    468: any numerical error. Try it. Type \kbd{d~=~matdet(h)} (you have to be a
                    469: little patient, this is quite a complicated computation). The result is a
                    470: rational number (of course) of numerator equal to 1 and denominator having
                    471: 226 decimal digits. How do I know, by the way? I did not count! Instead,
                    472: simply type \kbd{1.* d}. The result is now in exponential format, and the
                    473: exponent gives us the answer. Another, more natural, way would be to simply
                    474: type \kbd{sizedigit(1/d)}.
                    475:
                    476: Now type \kbd{hr = 1.* h;} (do not forget the semicolon, we don't want to see
                    477: all the junk!), then \kbd{dr = matdet(hr)}. You notice two things. First the
                    478: computation, although not instantaneous, is much faster than in the rational
                    479: case. The reason for this is that PARI is handling real numbers with 28
                    480: digits of accuracy, while in the rational case it is handling integers having
                    481: up to 226 decimal digits.
                    482:
                    483: The second more important fact is that the result is terribly wrong. If you
                    484: compare with \kbd{1.$*$d} computed earlier, which is correct, you will see
                    485: that only 2 decimals agree! This catastrophic instability is as already
                    486: mentioned one of the characteristics of Hilbert matrices. In fact, the
                    487: situation is much worse than that. Type \kbd{norml2(1/h - 1/hr)} (the
                    488: function \kbd{norml2} gives the square of the $L^2$ norm, i.e.~the sum of the
                    489: squares of the coefficients). Again be patient since computing \kbd{1/h} will
                    490: take even more time (not much) than computing \kbd{matdet(h)}. The result is
                    491: larger than $10^{50}$, showing that some coefficients of \kbd{1/hr} are
                    492: wrong by as much as $10^{24}$ (the largest error is in fact equal to $7.644
                    493: \cdot 10^{24}$ for the coefficient of row 15 and column 14, which is a 28
                    494: digit integer).
                    495:
                    496: To obtain the correct result after rounding for the inverse, we have to use a
                    497: default precision of 56 digits (try it).
                    498: \smallskip
                    499:
                    500: Although vectors and matrices can be entered manually, by typing explicitly
                    501: their elements, very often the elements satisfy a simple law and one uses a
                    502: different syntax. For example, assume that you want a vector whose $i$-th
                    503: coordinate is equal to $i^2$. No problem, type for example
                    504: \kbd{vector(10,i, i\pow 2)} if you want a vector of length 10. Similarly, if
                    505: you type
                    506:
                    507: \centerline{\kbd{matrix(5,5,i,j, 1/(i+j-1))}}
                    508:
                    509: \noindent you will get the Hilbert matrix of order 5 (hence the
                    510: \kbd{mathilbert} function is redundant).  The \kbd{i} and \kbd{j} represent
                    511: dummy variables which are used to number the rows and columns respectively
                    512: (in the case of a vector only one is present of course). You must not forget,
                    513: in addition to the dimensions of the vector or matrix, to indicate explicitly
                    514: the names of these variables.
                    515:
                    516: \misctitle{Warning.} The letter \kbd{I} is reserved for the complex number
                    517: equal to the square root of $-1$. Hence it is absolutely forbidden to use
                    518: it as a variable. Try typing \kbd{vector(10,I, I\pow 2)}, the error message
                    519: that you get clearly indicates that GP does not consider \kbd{I} as a
                    520: variable. There are two other reserved variable names: \kbd{Pi} and
                    521: \kbd{Euler}. All function names are forbidden as well. On the other hand
                    522: there is nothing special about \kbd{i}, \kbd{pi} or \kbd{euler}.
                    523:
                    524: When creating vectors or matrices, it is often useful to use boolean
                    525: operators and the \kbd{if()} statement (see the section on programming for
                    526: details on using this statement). Indeed, an \kbd{if} expression has a value,
                    527: which is of course equal to the evaluated part of the \kbd{if}. So for
                    528: example you can type
                    529: \bprog
                    530: matrix(8,8, i,j, if ((i-j)%2, x, 0))
                    531: @eprog
                    532: \noindent to get a checkerboard matrix of \kbd{x} and \kbd{0}. Note however
                    533: that a vector or matrix must be {\it created} first before being used. For
                    534: example, it is forbidden to write
                    535: \bprog
                    536: for (i = 1, 5, v[i] = 1/i)
                    537: @eprog
                    538: \noindent if the vector \kbd{v} has not been created beforehand (for example
                    539: by a \kbd{v = vector(5,j,0)} command).
                    540:
                    541: \medskip The last PARI types which we have not yet played with are types
                    542: which are closely linked to number theory (hence people not interested in
                    543: number theory can skip ahead).
                    544:
                    545: The first is the type ``integer--modulo''. Let us see an example. Type
                    546: \kbd{n = 10\pow 15 + 3}. We want to know whether this number is prime or not. Of
                    547: course we could make use of the built-in facilities of PARI, but let us do
                    548: otherwise. (Note that PARI does not actually prove that a number is prime: any
                    549: strong pseudoprime for a number of bases is declared to be prime.) We first
                    550: trial divide by the built-in table of primes. We slightly cheat here and use a
                    551: variant of the function \kbd{factor} which does exactly this. So type
                    552: \kbd{factor(n, 200000)} (the last argument tells \kbd{factor} to trial divide
                    553: up to the given bound and stop at this point. You can set it to 0 to trial
                    554: divide by the full set of built-in primes, which goes up to $500000$ by
                    555: default).
                    556:
                    557: The result is a 2 column matrix (as for all factoring functions), the first
                    558: column giving the primes and the second their exponents. Here we get a single
                    559: row, telling us that \kbd{n} is not divisible by any prime up to $200000$. We
                    560: could now trial divide further, or even cheat completely and call the PARI
                    561: function \kbd{factor} without the optional second argument, but before we do
                    562: this let us see how to get an answer ourselves.
                    563:
                    564: By Fermat's little theorem, if $n$ is prime we must have $a^{n-1}\equiv 1
                    565: \pmod{n}$ for all $a$ not divisible by $n$. Hence we could try this with $a=2$
                    566: for example. But $2^{n-1}$ is a number with approximately $3\cdot10^{14}$
                    567: digits, hence impossible to write down, let alone to compute. But instead type
                    568: \kbd{a = Mod(2,n)}. This creates the number $2$ considered now as an element
                    569: of the ring $R = \Z/\kbd{n}\Z$. The elements of $R$, called integermods, can
                    570: always be represented by numbers smaller than \kbd{n}, hence very small.
                    571: Fermat's theorem can be rewritten
                    572: %
                    573: $\kbd{a}^{n-1} = \kbd{Mod(1,n)}$
                    574: %
                    575: in the ring $R$, and this can be computed very efficiently. Type
                    576: \kbd{a\pow (n-1)}. The result is definitely {\it not\/} equal to
                    577: \kbd{Mod(1,n)}, thus {\it proving\/} that \kbd{n} is not a prime (if we had
                    578: obtained \kbd{Mod(1,n)} on the other hand, it would have given us a hint that
                    579: \kbd{n} is maybe prime, but never a proof).
                    580:
                    581: To find the factors is another story. One must use less naive techniques than
                    582: trial division (or be very patient). To finish this example, type
                    583: \kbd{factor(n)} to see the factors. Since the smallest factor is 14902357,
                    584: you would have had to be very patient with trial division! Note that none of
                    585: the factors in the decomposition are {\it proven} primes.
                    586: \smallskip
                    587:
                    588: The second specifically number-theoretic type is the $p$-adic numbers. I have
                    589: no room for definitions, so please skip ahead if you have no use for such
                    590: beasts. A $p$-adic number is entered as a rational or integer valued
                    591: expression to which is added \kbd{O(p\pow n)} (or simply \kbd{O(p)} if
                    592: $\kbd{n}=1$) where \kbd{p} is the prime and \kbd{n} the $p$-adic precision.
                    593: Apart from the usual arithmetic operations, you can apply a number of
                    594: transcendental functions. For example, type \kbd{n = 569 + O(7\pow 8)}, then
                    595: \kbd{s~=~sqrt(n)}, you obtain one of the square roots of \kbd{n} (if you want
                    596: to check, type \kbd{s\pow 2 - n}). Type now \kbd{l~=~log(n)}, then \kbd{e =
                    597: exp(l)}. If you know about $p$-adic logarithms, you will not be surprised that
                    598: \kbd{e} is not equal to \kbd{n}. Type \kbd{(n/e)\pow 6}: \kbd{e} is in fact
                    599: equal to \kbd{n} times a $(p-1)$-st root of unity.
                    600:
                    601: Incidentally, if you want to get back the integer 569 from the $p$-adic
                    602: number \kbd{n}, type \kbd{truncate(n)}.
                    603: \smallskip
                    604:
                    605: The third number-theoretic type is the type ``quadratic number''. This type
                    606: is specially tailored so that we can easily work in a quadratic extension of
                    607: a base field (usually $\Q$). It is a generalization of the type
                    608: ``complex''. To start, we must specify which quadratic field we want to work
                    609: in. For this, we use the function \kbd{quadgen} applied to the
                    610: {\it discriminant\/} \kbd{d} (as opposed to the radicand) of the quadratic
                    611: field. This returns a number (always printed as \kbd{w}) equal to
                    612: $(\kbd{d}+a) / 2$ where $a$ is equal to 0 or 1 according to whether \kbd{d} is
                    613: even or odd. The behavior of \kbd{quadgen} is a little special: although its
                    614: result is always printed as \kbd{w}, the variable \kbd{w} itself is not set
                    615: to that value. Hence it is necessary to write systematically
                    616: \kbd{w = quadgen(d)} using the variable name \kbd{w} (or \kbd{w1} etc. if you
                    617: have several quadratic fields), otherwise things will get confusing.
                    618:
                    619: So type \kbd{w = quadgen(-163)}, then \kbd{charpoly(w)} which asks for the
                    620: characteristic polynomial of \kbd{w} (in the variable \kbd{x};
                    621: you can type \kbd{charpoly(w, y)} to directly express it in terms of some
                    622: other variable without resorting to the \kbd{subst} function). The result
                    623: shows what \kbd{w} will represent. You can also ask for \kbd{1.*w} to see
                    624: which root of the quadratic has been taken, but this is rarely necessary. We
                    625: can now play in the field $\Q(\sqrt{-163})$. Type for example
                    626: \kbd{w\pow 10}, \kbd{norm(3 + 4*w)}, \kbd{1 / (4+w)}. More interesting, type
                    627: \kbd{a = Mod(1,23) * w} then \kbd{b = a\pow 264}. This is a generalization of
                    628: Fermat's theorem to quadratic fields. If you do not want to see the modulus 23
                    629: all the time, type \kbd{lift(b)}.
                    630:
                    631: Another example: type \kbd{p = x\pow 2 + w*x + 5*w + 7}, then \kbd{norm(p)}. We
                    632: thus obtain the quartic equation over $\Q$ corresponding to the relative
                    633: quadratic extension over $\Q(\kbd{w})$ defined by \kbd{p}.
                    634:
                    635: On the other hand, if you type \kbd{wr  = sqrt(w\pow 2)}, do not expect to get
                    636: back \kbd{w}. Instead, you get the numerical value, the function \kbd{sqrt}
                    637: being considered as a ``transcendental'' function, even though it is
                    638: algebraic. Type \kbd{algdep(wr,2)} (this looks for algebraic relations
                    639: involving the powers of \kbd{w} up to degree 2). This is one way to get
                    640: \kbd{w} back. Similarly, type \kbd{algdep(sqrt(3*w + 5), 4)}. See the user's
                    641: manual for the function \kbd{algdep}.\smallskip
                    642:
                    643: The fourth number-theoretic type is the type ``polynomial--modulo'', i.e.
                    644: polynomial modulo another polynomial. This type is used to work in general
                    645: algebraic extensions, for example elements of number fields (if the base
                    646: field is $\Q$), or elements of finite fields (if the base field is
                    647: $\Z/p\Z$ for a prime $p$, defined by an integermod). In a sense it is a
                    648: generalization of the type quadratic number. The syntax used is the same as
                    649: for integermods. For example, instead of typing \kbd{w = quadgen(-163)}, you
                    650: can type \kbd{w = Mod(x, x\pow 2 - x + 41)}. Then, exactly as in the
                    651: quadratic case, you can type \kbd{w\pow 10}, \kbd{norm(3 + 4*w)},
                    652: \kbd{1 / (4+w)}, \kbd{a = Mod(1,23)*w}, \kbd{b = a\pow 264}, obtaining of
                    653: course the same results (type \kbd{lift(\dots)} if you don't want to see the
                    654: polynomial \kbd{x\pow 2 - x + 41} repeated all the time). Of course, the basic
                    655: interest is that you can work in any degree, not only quadratic (of course,
                    656: even for quadratic moduli, the corresponding elementary operations will be
                    657: slower than with quadratic numbers).
                    658:
                    659: There is however a slight difference in behavior. Keeping our polmod \kbd{w},
                    660: type \kbd{1.*w}. As you can see, the result is not the same. Type
                    661: \kbd{sqrt(w)}. Here, we obtain a vector with 2 components, the two components
                    662: being the principal branch of the square root of all the possible embeddings
                    663: of \kbd{w} in $\C$ ({\it not\/} the two square roots). More generally, if
                    664: \kbd{w} was of degree $n$, we would get an $n$-component vector, and similarly
                    665: for transcendental functions.
                    666:
                    667: We have at our disposal the usual arithmetic functions, plus a few others.
                    668: Type \kbd{a = Mod(x, x\pow 3 - x - 1)} defining a cubic extension. We can for
                    669: example ask for \kbd{b = a\pow 5}. Now assume we want to express \kbd{a}
                    670: as a polynomial in \kbd{b}. This is possible since \kbd{b} is also a
                    671: generator of the same field. No problem, type \kbd{modreverse(b)}. This gives
                    672: a new defining polynomial for the same field (i.e.~the characteristic
                    673: polynomial of \kbd{b}), and expresses \kbd{a} in terms of this new polmod,
                    674: i.e.~in terms of \kbd{a}. We will see this in much more detail in the number
                    675: field section.
                    676:
                    677: \section{Elementary Arithmetic Functions}
                    678:
                    679: Since PARI is aimed at number theorists, it is not surprising that there
                    680: exists a large number of arithmetic functions (see the list in the
                    681: corresponding section of the users manual). We have already seen several,
                    682: such as \kbd{factor}. Note that \kbd{factor} handles not only integers, but
                    683: also (univariate) polynomials. Type for example \kbd{factor(x\pow 15 - 1)}.
                    684: You can also ask to factor a polynomial modulo a prime $p$ (\kbd{factormod})
                    685: and even in a finite field which is not a prime field (\kbd{factorff}).
                    686:
                    687: Evidently, you have functions for computing GCD's (\kbd{gcd}), extended GCD's
                    688: (\kbd{bezout}), solving the Chinese remainder theorem (\kbd{chinese}) and so
                    689: on.
                    690:
                    691: In addition to the factoring facilities, you have a few functions related to
                    692: primality testing such as \kbd{isprime}, \kbd{ispseudoprime},
                    693: \kbd{precprime}, and \kbd{nextprime}. As previously mentioned, only strong
                    694: pseudoprimes are produced; there is no sophisticated primality test.
                    695:
                    696: We also have the usual multiplicative arithmetic functions: the M\"obius $\mu$
                    697: function (\kbd{moebius}), the Euler $\phi$ function (\kbd{eulerphi}), the
                    698: $\omega$ and $\Omega$ functions (\kbd{omega} and \kbd{bigomega}), the
                    699: $\sigma_k$ functions (\kbd{sigma}), which compute sums of $k$-th powers of the
                    700: positive divisors of a given integer, etc\dots
                    701:
                    702: You can compute continued fractions. For example, type \kbd{\b{p} 1000}, then
                    703: \kbd{contfrac(exp(1))}: you obtain the continued fraction of the base of
                    704: natural logarithms, which as you can see obeys a very simple pattern (can you
                    705: prove it?).
                    706:
                    707: In many cases, one wants to perform some task only when an arithmetic
                    708: condition is satisfied. GP gives you the following functions: \kbd{isprime}
                    709: as mentioned above, \kbd{issquare}, \kbd{isfundamental} to test whether an
                    710: integer is a fundamental discriminant (i.e.~$1$ or the discriminant of the
                    711: ring of integers of a quadratic field), and the \kbd{forprime}, \kbd{fordiv}
                    712: and \kbd{sumdiv} loops. Assume for example that we want to compute the
                    713: product of all the divisors of a positive integer \kbd{n}. The easiest way is
                    714: to write
                    715:
                    716: \centerline{\tt p=1; fordiv(n,d, p *= d); p }
                    717:
                    718: \noindent
                    719: (there is a very simple formula for this product: find and prove it). The
                    720: notation \kbd{p *= d} (inherited from the C programming language) is just a
                    721: shorthand for \kbd{p = p * d}.
                    722:
                    723: If we want to know the list of primes $p$ less than 1000 such that 2 is a
                    724: primitive root modulo $p$, one way would be to write:
                    725: \bprog
                    726:   forprime(p=3,1000, if (znprimroot(p) == 2, print(p)))
                    727: @eprog\noindent
                    728: %
                    729: Note that this assumes that \kbd{znprimroot} returns the smallest primitive
                    730: root, and this is indeed the case. Had we not known about this, we could
                    731: have written
                    732: \bprog
                    733:   forprime(p=3,1000, if (znorder(Mod(2,p)) == p-1, print(p)))
                    734: @eprog\noindent
                    735: %
                    736: (which is actually faster since we only compute the order of $2$ in $\Z/p\Z$,
                    737: instead of looking for a generator by trying successive elements whose orders
                    738: have to be computed as well.)
                    739:
                    740: Functions related to quadratic fields, binary quadratic forms and general
                    741: number fields will be seen in the next sections.
                    742:
                    743: \section{Performing Linear Algebra}
                    744: All the standard linear algebra programs are available of course, and many
                    745: more. In addition, linear algebra over $\Z$, i.e.~work on lattices, can also
                    746: be performed. Let us see how this works. First of all, a vector space (more
                    747: generally a module) will be given by a generating set of vectors (often a
                    748: basis) which will be representend as {\it column} vectors. This set of vectors
                    749: will in turn be represented as a matrix: in PARI, we have chosen to consider
                    750: matrices as row vectors of column vectors. The base field (or ring) can be any
                    751: ring type PARI supports (except $p$-adics which are currently not correctly
                    752: handled by the linear algebra package). However, certain operations are
                    753: specifically written for a real or complex base field, while others are
                    754: written for $\Z$ as the base ring.
                    755:
                    756: ----- TO BE COMPLETED -----
                    757:
                    758:
                    759:
                    760: \section{Using Transcendental Functions}
                    761:
                    762: All the elementary transcendental functions and several higher transcendental
                    763: functions (gam\-ma function, incomplete gamma function, error function,
                    764: exponential integral, $K$-bessel functions, confluent hypergeometric functions,
                    765: Riemann $\zeta$ function, polylogarithms, Weber functions, theta functions)
                    766: are provided. More may be written if the need arises.
                    767:
                    768: In this type of functions, the default precision plays an essential role.
                    769: In almost all cases transcendental functions work in the following way.
                    770: If the argument is exact, the result will be computed using the current
                    771: default precision. If the argument is not exact, the precision of the
                    772: argument is used for the computation. A note of warning however: even in this
                    773: case the {\it printed\/} value will be the current real format (usually the
                    774: same as the default precision). In the present chapter we assume that your
                    775: machine works with 32-bit long integers. If it is not the case, we leave it
                    776: to you as a very good exercise to make the necessary modifications.
                    777:
                    778: Let's assume that we have 28 decimals of default precision (this is what we
                    779: get automatically at the start of a GP session on 32-bit machines). Type
                    780: \kbd{e = exp(1)}. We get the number $e=2.718\dots$ to 28 decimals. Let us check
                    781: how many correct decimals we really have. The hard (but reasonable) way is to
                    782: proceed as follows. Change the precision to a substantially higher value, for
                    783: example by typing \kbd{\b{p} 50}. Then type \kbd{e}, then \kbd{exp(1)} once
                    784: again. This last value is the correct value of the mathematical constant $e$ to
                    785: 50 decimals, while the variable \kbd{e} shows the value that was computed to 28
                    786: decimals. Clearly they coincide to exactly 29 significant digits.
                    787:
                    788: A simpler way to see how many decimals we have, is to ask for \kbd{length(e)}
                    789: which indicates we have exactly $3$ mantissa words. Since
                    790: $3\ln(2^{32}) / \ln(10)\approx28.9$ we see that we have 28 or 29 significant
                    791: digits (on 32-bit machines).
                    792:
                    793: \smallskip
                    794: Come back to 28 decimals (\kbd{\b{p} 28}). If we type \kbd{exp(1.)}
                    795: you can check that we also obtain 28 decimals. However, type
                    796: \kbd{f = exp(1 + 10.\pow(-30))}. Although the default precision is still 28,
                    797: you can check using one of the two methods above that we have in fact 59
                    798: significant digits! The reason is that \kbd{1 + 10.\pow(-30)} is computed
                    799: according to the PARI philosophy, i.e.~to the best possible precision. Since
                    800: \kbd{10.} has 29 significant digits and 1 has ``infinite'' precision, the
                    801: number \kbd{1 + 10.\pow(-30)} will have $59=29+30$ significant digits,
                    802: hence \kbd{f} also.
                    803:
                    804: Now type \kbd{cos(10.\pow(-15))}. The result is printed as $1.0000\dots$, but
                    805: is of course not exactly equal to 1. Using \kbd{length(\%)}, we see that the
                    806: result has 7 mantissa words, giving us the possibility of having 67
                    807: correct significant digits. In fact (look in precision 100), only 60 are
                    808: correct. PARI gives you as much as it can, and since 6 mantissa words
                    809: would have given you only 57 digits, it uses 7. But why does it give so
                    810: precise a result? Well, it is the same reason as before. When $x$ is close
                    811: to 1, $\cos(x)$ is close to $1-x^2/2$, hence the precision is going to be
                    812: approximately the same as this quantity, which will be $1-0.5*10^{-30}$ where
                    813: $0.5*10^{-30}$ is considered with 28 significant digit accuracy, hence the
                    814: result will have approximately $28+30=58$ significant digits.
                    815:
                    816: Unfortunately, this philosophy cannot go too far. For example, when you
                    817: type \kbd{cos(0)}, GP should give you exactly 1. Since it is reasonable for
                    818: a program to assume that a transcendental function never gives you an exact
                    819: result, GP gives you $1.000\dots$ to one more mantissa word than the current
                    820: precision.
                    821: \medskip
                    822: OK, now let's see some more transcendental functions at work. Type
                    823: \kbd{gamma(10)}. No problem (type \kbd{9!} to check). Type \kbd{gamma(100)}.
                    824: The number is now written in exponential format because the default
                    825: accuracy is too small to give the correct result (type \kbd{99!} to get the
                    826: complete answer).
                    827: To get the complete value, there are two solutions. The first and most natural
                    828: one is to increase the precision. Since \kbd{gamma(100)} has 156 decimal
                    829: digits, type \kbd{\b{p} 170} (to be on the safe side), then \kbd{gamma(100)}
                    830: once again. After some work, the printed result is this time perfectly
                    831: correct.
                    832:
                    833: However, this is probably not the best way to proceed. Come back first to the
                    834: default precision (type \kbd{\b{p} 28}). As the gamma function increases
                    835: very rapidly, one usually uses its logarithm. Type \kbd{lngamma(100)}. This
                    836: time the result has a reasonable size, and is exactly equal to \kbd{log(99!)}.
                    837:
                    838: Try \kbd{gamma(1/2 + 10*I)}. No problem, we have the complex gamma function.
                    839: Now type
                    840:
                    841: \kbd{t = 1000; z = gamma(1 + I*t) * t\pow(-1/2) * exp(Pi/2*t)/sqrt(2*Pi)},
                    842:
                    843: \noindent then \kbd{norm(z)}. We see that \kbd{norm(z)} is very close to 1,
                    844: in accordance with the complex Stirling formula. \smallskip
                    845: %
                    846: Let's play now with the Riemann zeta function. First turn on the timer (type
                    847: \kbd{\#}). Type \kbd{zeta(2)}, then \kbd{Pi\pow 2/6}. This seems correct. Type
                    848: \kbd{zeta(3)}. All this takes essentially no time at all. However, type
                    849: \kbd{zeta(3.)}. Although the result is the same, you will notice that the
                    850: time is substantially larger (if your machine is too fast to see the
                    851: difference, increase the precision!). This is because PARI uses special
                    852: formulas to compute \kbd{zeta(n)} when \kbd{n} is a (positive or negative)
                    853: integer.
                    854:
                    855: Type \kbd{zeta(1 + I)}. This also works. Now for fun, let us compute in a
                    856: very naive way the first complex zero of \kbd{zeta}. We know that it is
                    857: of the form $1/2 + i*t$ with $t$ between 14 and 15. Thus, we can use the
                    858: following series of instructions. But instead of typing them directly, write
                    859: them into a file, say \kbd{zeta.gp}, then type \kbd{\b{r} zeta.gp} under GP to
                    860: read it in:
                    861: \bprog
                    862: {
                    863:   t1 = 1/2 + 14*I;
                    864:   t2 = 1/2 + 15*I; eps = 10^(-50);
                    865:   z1 = zeta(t1);
                    866:   until (norm(z2) < eps,
                    867:     z2 = zeta(t2);
                    868:     if (norm(z2) < norm(z1),
                    869:       t3 = t1; t1 = t2; t2 = t3; z1 = z2
                    870:     );
                    871:     t2 = (t1+t2) / 2.;
                    872:     print(t1 ": " z1)
                    873:   )
                    874: }
                    875: @eprog
                    876:
                    877: Don't forget the braces: they tell GP that a sequence of instructions is going
                    878: to span many lines (another, less convenient, way would be to type \b{} at the
                    879: end of each line to tell the parser that the input was not yet finished).
                    880: By the way, you don't need to type in the suffix~\kbd{.gp} it will be
                    881: supplied by GP, if you forget it (the suffix is not mandatory either, it is
                    882: just more convenient to have all your GP scripts labeled in the same
                    883: distinctive way).
                    884:
                    885: We thus obtain the first zero to 25 significant digits.
                    886: \medskip
                    887: %
                    888: As mentioned at the beginning of this tutorial, some transcendental functions
                    889: can also be applied to $p$-adic numbers. This is as good a time as any to
                    890: familiarize yourself with them. Type \kbd{a~=~exp(7 + O(7\pow 10))}, then
                    891: \kbd{log(a)}. All seems in order. Now type \kbd{b = log(5 + O(7\pow 10))},
                    892: then \kbd{exp(b)}. Is something wrong, since we don't recover the number we
                    893: started with? Absolutely not. Type
                    894:  \kbd{exp(b) * teichmuller(5 + O(7\pow 10))},
                    895: and we indeed recover our initial number. The function \kbd{teichmuller(x)}
                    896: is the Teichm\"uller character, and is characterized by the fact that it is
                    897: the unique \hbox{$(p-1)$-st} root of unity (here with $p=7$) which is
                    898: congruent to \kbd{x} modulo $p$, assuming that \kbd{x} is a $p$-adic
                    899: unit.\smallskip
                    900: %
                    901: Let us come back to real numbers for the moment. Type \kbd{agm(1,sqrt(2))}.
                    902: This gives the arithmetic-geometric mean of 1 and $\sqrt2$, and is the basic
                    903: method for computing (complete) elliptic integrals. In fact, type
                    904:
                    905: \kbd{Pi/2 / intnum(t=0,Pi/2, 1 / sqrt(1 + sin(t)\pow 2))},
                    906:
                    907: \noindent and the result is the same. The elementary transformation
                    908: \kbd{x = sin(t)} gives the mathematical equality
                    909: $$\int_0^1 \dfrac{dx}{\sqrt{1-x^4}} = \dfrac{\pi}{2\text{agm}(1,\sqrt2)}
                    910: \enspace,$$
                    911: which was one of Gauss's remarkable discoveries in his youth.
                    912:
                    913: Now type \kbd{2 * agm(1,I) / (1+I)}. As you see, the complex AGM also works,
                    914: although one must be careful with its definition. The result found is
                    915: almost identical to the previous one. Exercise: do you see why?
                    916:
                    917: Finally, type \kbd{agm(1, 1 + 7 + O(7\pow 10))}. So we also have $p$-adic
                    918: AGM. Note however that since the square root of a $p$-adic number is not
                    919: in general an element of the same $p$-adic field,
                    920: only certain $p$-adic AGMs can be computed. In addition,
                    921: when $p=2$, the congruence restriction is that \kbd{agm(a,b)} can be computed
                    922: only when \kbd{a/b} is congruent to 1 modulo $16$ (not 8 as could be
                    923: expected).\smallskip
                    924: %
                    925: Now type \kbd{?3}. This gives you the list of all transcendental functions.
                    926: Instead of continuing with more examples, we suggest that you experiment
                    927: yourself with the list of functions. In each case, try integer, real, complex
                    928: and $p$-adic arguments. You will notice that some have not been implemented
                    929: (or do not have a reasonable definition).
                    930:
                    931: \section{Using Numerical Tools}
                    932:
                    933:  Although not written to be a numerical analysis package, PARI can
                    934: nonetheless perform some numerical computations. We leave for a subsequent
                    935: section linear algebra and polynomial computations.
                    936:
                    937: You of course know the formula $\pi = 4(1-\dfrac13+\dfrac15-\dfrac17+\cdots)$
                    938: which is deduced from the power series expansion of \kbd{atan(x)}. You also
                    939: know that $\pi$ cannot be computed from this formula, since the convergence
                    940: is so slow. Right? Wrong! Type \kbd{\b{p} 100} (just to make it more
                    941: interesting), then \kbd{4~*~sumalt(k=0, (-1)\pow k/(2*k + 1))}. In a split
                    942: second (admittedly more than simply typing \kbd{Pi}), we get $\pi$ to 100
                    943: significant digits (type \kbd{Pi} to check). In version 1.38, the method used
                    944: was a combination of a method due to Euler for accelerating alternating sums,
                    945: and a programming trick due to the Dutch mathematician van Wijngaarden (see
                    946: one of the Numerical Recipes books for an explanation). The method which we
                    947: presently use is considerably better, and is based on a combination of ideas of
                    948: F.~Villegas, D.~Zagier and H.~Cohen.
                    949:
                    950: Similarly, type \kbd{\b{p} 28} (otherwise the time will be too long) and
                    951: \kbd{sumpos(k=1, 1 / k\pow 2)}. Although once again the convergence is slow, a
                    952: similar trick allows to compute the sum when the terms are positive (compare
                    953: with the exact result \kbd{Pi\pow 2/6}). This is much less impressive because
                    954: it is much slower, but is still useful.
                    955:
                    956: Even better, \kbd{sumalt} can be used to sum divergent series! Type
                    957:
                    958: \centerline{\tt zet(s)= sumalt(k=1, (-1)\pow(k-1) / k\pow s) / (1 - 2\pow(1-s))}
                    959:
                    960: Then for positive values of \kbd{s} different from 1, \kbd{zet(s)} is equal
                    961: to \kbd{zeta(s)} and the series cvonverges, albeit slowly (sumalt doesn't
                    962: care however). For negative \kbd{s}, the series diverges, but \kbd{zet(s)}
                    963: still gives the correct result! Try \kbd{zet(-1)}, \kbd{zet(-2)},
                    964: \kbd{zet(-1.5)}, and compare with the corresponding values of \kbd{zeta}.
                    965: You should not push the game too far: \kbd{zet(-14.5)}, for example,
                    966: gives a completely wrong answer.
                    967:
                    968: Try \kbd{zet(I)}, and compare with \kbd{zeta(I)}. Even (some) complex values
                    969: work, although the sum is not alternating any more!
                    970:
                    971: Similarly, try \kbd{sumalt(n=1, (-1)\pow n/(n+I))}.
                    972: \medskip
                    973: %
                    974: More traditional functions are the numerical integration functions.
                    975: For example, type \kbd{intnum(t=1,2, 1/t)} and presto! you get 26 decimals
                    976: of $\log(2)$. Look at Chapter 3 to see the different integration functions
                    977: which are available.
                    978:
                    979: With PARI, however, you can go further since complex types are allowed.
                    980: For example, assume that we want to know the location of the zeros of the
                    981: function $h(z)=e^z-z$. We use Cauchy's theorem, which tells us that the
                    982: number of zeros in a disk of radius $r$ centered around the origin is
                    983: equal to
                    984: $$\dfrac{1}{2i\pi}\int_{C_r}\dfrac{h'(z)}{h(z)}\,dz\enspace,$$
                    985: where $C_r$ is the circle of radius $r$ centered at the origin.
                    986: Hence type
                    987: \bprog
                    988: fun(z) =
                    989: {
                    990:   local(u);
                    991:   u = exp(z);
                    992:   (u-1) / (u-z)
                    993: }
                    994: zero(r) = r/(2*Pi) * intnum(t=0, 2*Pi, fun(r*exp(I*t)) * exp(I*t))
                    995: @eprog
                    996: \noindent (Here \kbd{u} is a local variable to the function \kbd{f}: whenever
                    997: a function is called, GP fills its argument list with the actual arguments
                    998: given, and initializes the other declared parameters and local variables to
                    999: 0. It will then restore their former values upon exit. If, however, we had
                   1000: not declared \kbd{u} in the function prototype, it would be considered as a
                   1001: global variable, whose value would be permanently changed. It is not
                   1002: mandatory to declare in this way all the parameters you use, but beware of
                   1003: side effects!)
                   1004:
                   1005: The function \kbd{zero(r)} will then count the number of zeros (we have simply
                   1006: made the change of variable $z = r*\exp(i*t)$).
                   1007:
                   1008: Now type \kbd{\b{p} 9} (otherwise the computation would take too long, and
                   1009: anyway we know that the result is an integer), then \kbd{zero(1)}, \kbd{zero(1.5)}.
                   1010: The result tells us that there are no zeros inside the unit disk, but that
                   1011: there are two (necessarily complex conjugate) whose modulus is between $1$
                   1012: and $1.5$. For the sake of completeness, let us compute them. Let $z$ be such
                   1013: a zero, and write $z=x+iy$ with $x$ and $y$ real. Then the equation $e^z-z=0$
                   1014: implies, after elementary transformations, that $e^{2x}=x^2+y^2$ and that
                   1015: $e^x\cos(y)=x$. Hence $y=\pm\sqrt{e^{2x}-x^2}$ and hence
                   1016: $e^x\cos(\sqrt{e^{2x}-x^2})=x$. Therefore, type
                   1017: \bprog
                   1018: fun(x) =
                   1019: {
                   1020:   local(u);
                   1021:   u = exp(x);
                   1022:   u*cos(sqrt(u^2 - x^2)) - x
                   1023: }
                   1024: @eprog
                   1025:
                   1026: Then \kbd{fun(0)} is positive while \kbd{fun(1)} is negative. Come back to
                   1027: precision 28 and type
                   1028:
                   1029: \centerline{\tt x0 = solve(x=0,1, fun(x))}
                   1030:
                   1031: This quickly gives us the value of \kbd{x}, and we can then type
                   1032:
                   1033: \centerline{\tt z = x0 + I*sqrt(exp(2*x0) - x0\pow 2)}
                   1034:
                   1035: \noindent which (together with its complex conjugate) is the required zero.
                   1036: As a check, type \kbd{exp(z) - z}, and also \kbd{abs(z)}.
                   1037:
                   1038: Of course you can integrate over contours which are more complicated than
                   1039: circles, but you must perform yourself the changes of variable as we have
                   1040: done above to reduce the integral to a number of integrals on line segments.
                   1041: \smallskip
                   1042: %
                   1043: The example above also shows the use of the \kbd{solve} function. To use
                   1044: \kbd{solve} on functions of a complex variable, it is necessary to reduce the
                   1045: problem to a real one. For example, to find the first complex zero of the
                   1046: Riemann zeta function as above, we could try typing
                   1047:
                   1048: \kbd{solve(t=14,15, real(zeta(1/2 + I*t)))},
                   1049:
                   1050: \noindent but this would not work because the real part is positive for
                   1051: \kbd{t=14} and \kbd{t=15}. As it happens, the imaginary part works. Type
                   1052:
                   1053: \kbd{solve(t=14,15, imag(zeta(1/2 + I*t)))},
                   1054:
                   1055: \noindent and this now works. We could also narrow the search interval and
                   1056: type for instance
                   1057:
                   1058: \kbd{solve(t=14,14.2, real(zeta(1/2 + I*t)))}
                   1059:
                   1060: \noindent which would also work.
                   1061:
                   1062: \section{Functions Related to Polynomials and Power Series}
                   1063:
                   1064: First a word of warning to the unwary: it is essential to understand the
                   1065: crucial difference between exact and inexact objects (see Section~1). This
                   1066: is especially important in the case of polynomials. Let's immediately take
                   1067: a plunge into these problems. Type
                   1068:
                   1069: \centerline{\tt gcd(x\pow 2 - 1, x\pow 2 - 3*x + 2)}
                   1070:
                   1071:  No problem, the result is \kbd{x - 1} as expected. But now type
                   1072:
                   1073: \centerline{\tt gcd(x\pow 2 - 1., x\pow2 - 3.*x + 2.)}
                   1074:
                   1075:  You are lucky, the result is almost correct except for a bizarre factor of
                   1076: 3 which comes from the way PARI does the computation. In any case, it is still
                   1077: essentially a reasonable result. But now type
                   1078: \kbd{gcd(x - Pi, x\pow 2 - 6*zeta(2))}.
                   1079: Although this should be equal to \kbd{x - Pi}, PARI finds a
                   1080: constant as a result. This is because the notion of GCD of non-exact
                   1081: polynomials doesn't make much sense. However, type
                   1082: \kbd{polresultant(x - Pi, x\pow 2 - 6*zeta(2))}.
                   1083: The result is extremely close to zero, showing that indeed the GCD is
                   1084: non-trivial, without telling us what it is. This being said, we will usually
                   1085: use polynomials (and power series) with exact coefficients in our
                   1086: examples.\smallskip
                   1087:
                   1088: Set \kbd{pol = polcyclo(15)}. This gives the $15$-th cyclotomic polynomial,
                   1089: which is of degree $\varphi(15)=8$. Now, type \kbd{r = polroots(pol)}. You
                   1090: have the 8 complex roots of pol given to 28 significant digits. To see them
                   1091: better, type \b{b}. As you see, they are given as pairs of complex conjugate
                   1092: roots, in a random order. The only ordering done by the function
                   1093: \kbd{polroots} concerns the real roots, which are given first, and in
                   1094: increasing order.
                   1095:
                   1096: The roots of \kbd{pol} are by definition the primitive $15$-th roots of unity.
                   1097: To check this, simply type \kbd{rc = r\pow 15}. Why, we get an error message!
                   1098: Well, fair enough, vectors cannot be multiplied (even less raised to a power)
                   1099: that easily. However, type \kbd{rc = r\pow 15.} with a $.$ at the end. Now it
                   1100: works, because powering to a non-integer (here real) exponent is a
                   1101: transcendental function and hence is applied termwise. Note that the fact that
                   1102: $15.$ is a real number which is representable exactly as an integer has
                   1103: nothing to do with the problem.
                   1104:
                   1105: We see that the components of the result are very close to 1. It is however
                   1106: tedious to look at all these real and imaginary parts. It would be impossible
                   1107: if we had many more. Let's do it automatically. Type
                   1108: \kbd{rr = round(real(rc))}, then \kbd{sqrt(norml2(rc-rr))}. We see that
                   1109: \kbd{rr} is indeed all 1's, and that the L2-norm of \kbd{rc - rr} is around
                   1110: $10^{-27}$, reasonable enough when we work with 28 significant digits. Note
                   1111: that the function \kbd{norml2}, contrary to what it may seem, does not give the
                   1112: L2 norm but its square, hence we must take the square root (well, this is not
                   1113: absolutely necessary in this case!).
                   1114: %
                   1115: \smallskip
                   1116: Now type \kbd{pol = x\pow 5 + x\pow 4 + 2*x\pow 3 - 2*x\pow 2 - 4*x - 3},
                   1117: then \kbd{factor(pol)}. The polynomial \kbd{pol} factors over $\Q$ (or $\Z$)
                   1118: as a product of two factors. Type \kbd{fun(p)= factorpadic(pol,p,10)}. This
                   1119: creates a function \kbd{fun(p)} which factors \kbd{pol} over $\Q_p$ to $p$-adic
                   1120: precision 10. If now we type \kbd{factor(poldisc(pol))}, we learn that the
                   1121: primes dividing the discriminant are $11$, $23$ and $37$. Type \kbd{fun(5)},
                   1122: \kbd{fun(11)}, \kbd{fun(23)}, and \kbd{fun(37)} to see different splittings.
                   1123:
                   1124: Similarly, we can type \kbd{lf(p)= lift(factormod(pol,p))}, and
                   1125: \kbd{lf(2)}, \kbd{lf(11)}, \kbd{lf(23)} and \kbd{lf(37)} which show the
                   1126: different factorizations, this time over $\F_p$. In fact, even better: type
                   1127: successively
                   1128: \bprog
                   1129: pol2 = x^3 + x^2 + x - 1
                   1130: fq = factorff(pol2, 3, t^3 + t^2 + t - 1)
                   1131: centerlift(lift(fq))
                   1132: @eprog
                   1133: %
                   1134: This factors the polynomial \kbd{pol2} over the finite field $\F_3(\theta)$
                   1135: where $\theta$ is a root of the polynomial \kbd{t\pow 3 + t\pow 2 + t - 1}.
                   1136: This is of course a form of the field $\F_{27}$. We know that
                   1137: Gal$(\F_{27}/\F_3)$ is cyclic of order 3 generated by the Frobenius
                   1138: homomorphism $u\mapsto u^3$, and the roots that we have found give the action
                   1139: of the powers of the Frobenius on \kbd{t} (if you do not know what I am
                   1140: talking about, please try some more examples, it's not so hard to figure out).
                   1141:
                   1142: Similarly, type \kbd{pol3 = x\pow 4 - 4*x\pow 2 + 16} and
                   1143: \kbd{fn = factornf(pol3,t\pow 2 + 1)}, and we get the factorization of the
                   1144: polynomial \kbd{pol3} over the number field defined by \kbd{t\pow 2 + 1},
                   1145: i.e.~over $\Q(i)$. To see the result even better, type \kbd{lift(fn)},
                   1146: remembering that \kbd{t} stands for the generator of the number field
                   1147: (here equal to $i=\sqrt{-1}$).
                   1148:
                   1149: Note that it is possible, although ill advised, to use the same variable
                   1150: for the polynomial and the number field. You may for example type
                   1151: \kbd{fn2 = factornf(pol3, x\pow 2 + 1)}, and the result is correct. However,
                   1152: the PARI object thus created may give unreasonable results. For example,
                   1153: if you type \kbd{lift(fn2)} in the example above, you will get a strange
                   1154: object, with a symbol such as \kbd{x*x} typed. This is because PARI knows
                   1155: that the dummy variable \kbd{x} is not the same as the explicit variable
                   1156: \kbd{x}, but since it must print it when you lift, it has to do something.
                   1157: \smallskip
                   1158: %
                   1159: To summarize, in addition to being able to factor integers, you can
                   1160: factor polynomials over $\C$ and $\R$ (this is the function \kbd{polroots}),
                   1161: over $\F_p$ (the function \kbd{factormod}, over $\F_{p^k}$ (the function
                   1162: \kbd{factorff}), over $\Q_p$ (the function \kbd{factorpadic}), over $\Q$ or
                   1163: $\Z$ (the function \kbd{factor}), and over number fields (the functions
                   1164: \kbd{factornf} and \kbd{nffactor}). Note however that \kbd{factor} itself
                   1165: will try to guess intelligently over which ring you want to factor: set
                   1166: \kbd{pol = x\pow2+1}
                   1167: and try to \kbd{factor} successively \kbd{pol}, \kbd{pol * 1.},
                   1168: \kbd{pol * (1+0.*I)}, \kbd{pol * Mod(1,2)},
                   1169: \kbd{pol * Mod(1,Mod(1,3)*(t\pow2+1))}.
                   1170:
                   1171:  In the present version \vers{}, it is {\it not} possible to factor over
                   1172: other rings than the ones mentioned above, for example GP cannot factor
                   1173: multivariate polynomials. \smallskip
                   1174:
                   1175: Other functions related to factoring are \kbd{padicappr}, \kbd{polrootsmod},
                   1176: \kbd{polrootspadic}, \kbd{polsturm}. Play with them a little.
                   1177:
                   1178: Now let's type \kbd{polsym(pol3,20)}, where \kbd{pol3} is the same
                   1179: polynomial as above. This gives the sum of the $k$-th powers of the roots
                   1180: of \kbd{pol3} up to $k=20$, of course computed using Newton's formula and
                   1181: not using \kbd{polroots}. You notice that every odd sum is zero (this is
                   1182: trivial since the polynomial is even), but also that the signs follow a
                   1183: regular pattern and that the  (non-zero) absolute values are powers of 2.
                   1184: This is true: prove it, and more precisely find an explicit formula for the
                   1185: $k$-th symmetric power not involving (non-rational) algebraic numbers.
                   1186: \medskip
                   1187:
                   1188: Now let's play a little with power series. We have already done so a little
                   1189: at the beginning.  Type
                   1190:
                   1191: \centerline{\tt 8*x + prod(n=1,39, if(n\%4, 1 - x\pow n, 1),
                   1192:                            1 + O(x\pow 40))\pow 8}
                   1193:
                   1194:   You obtain a power series which has apparently only even powers of \kbd{x}
                   1195: appearing. This is surprising, but can be proved using the theory of modular
                   1196: forms. Note that we have initialized the product to \kbd{1 + O(x\pow 40)} and
                   1197: not simply to 1 otherwise the whole computation would have been done with
                   1198: polynomials, and this would first have been slightly slower and also totally
                   1199: useless since the coefficients of \kbd{x\pow 40} and above are irrelevant
                   1200: anyhow if we stop the product at \kbd{n=39}.
                   1201:
                   1202: While we are on the subject of modular forms (which, together with taylor
                   1203: series expansions of common functions, are another great source of power
                   1204: series), type \kbd{\b{ps} 122} (which is a shortcut for
                   1205: \kbd{default(seriesprecision, 122)}), then \kbd{d = x * eta(x)\pow 24}. This
                   1206: gives the first 122 terms of the (Fourier) series expansion of the modular
                   1207: discriminant function $\Delta$ of Ramanujan, its coefficients giving by
                   1208: definition the Ramanujan $\tau$ function which has a number of marvelous
                   1209: properties (look at any book on modular forms for explanations). We would like
                   1210: to see its properties modulo 2. Type \kbd{d\%2}. Hmm, apparently PARI
                   1211: doesn't like to
                   1212: reduce coefficients of power series (or polynomials for that matter) directly.
                   1213: Can we do it without writing a little program? No problem. Type instead
                   1214: \kbd{lift(Mod(1,2) * d)} and now this works like a charm.
                   1215:
                   1216: The pattern in the result is clear. Of course, it now remains to prove it
                   1217: (again modular forms, see Antwerp III or your resident modular forms guru).
                   1218: Similarly, type \kbd{centerlift(Mod(1,3) * d)}. This time the pattern is
                   1219: less clear, but nonetheless there is one. Refer to Anwerp III again.
                   1220:
                   1221: \section{Working with Elliptic Curves}
                   1222:
                   1223: Now we are getting to more complicated objects. Just as with number fields
                   1224: which we will meet later on, the first thing to do is to initialize them.
                   1225: That's because a lot of data will be needed repeatedly, and it's much more
                   1226: convenient to have it ready once and for all. Here, this is done with the
                   1227: function \kbd{ellinit} (try to guess what we'll use for number fields\dots).
                   1228:
                   1229: So type \kbd{e = ellinit([6,-3,9,-16,-14])}. This computes a number of things
                   1230: about the elliptic curve defined by the affine equation
                   1231: %
                   1232: $$ y^2+6xy+9y = x^3-3x^2-16x-14\enspace. $$
                   1233: %
                   1234: It's not that clear what all these funny numbers mean, except that we
                   1235: recognize the first few of them as the coefficients we just input. To
                   1236: retrieve meaningful information from such complicated objects (and number
                   1237: fields will be much worse), you are advised to use the so-called {\it member
                   1238: functions}. Type \kbd{?.} to get a complete list. Whenever \kbd{ell} appears
                   1239: in the right hand side, we can apply the corresponding function to an object
                   1240: output by \kbd{ellinit} (I'm sure you know how the other \kbd{init} functions
                   1241: will be called now, don't you? Oh, by the way, there is no \kbd{clgpinit}
                   1242: function).
                   1243:
                   1244:   Let's try it. We see that the discriminant \kbd{e.disc} is equal to 37,
                   1245: hence the conductor of the curve is 37. Of course in general it is not so
                   1246: trivial. In fact, the equation of the curve is clearly not minimal, so type
                   1247: \kbd{r = ellglobalred(e)}. The first component \kbd{r[1]} tells us that the
                   1248: conductor is 37 as we already knew. The second component is a 4-component
                   1249: vector which will allow us to get the minimal equation: simply type
                   1250: \kbd{e = ellchangecurve(e, r[2])} and the new \kbd{e} is now our minimal
                   1251: equation with corresponding data. You can for the moment ignore the third
                   1252: component \kbd{r[3]} (for the impatient reader, this is the product of the
                   1253: local Tamagawa numbers, $c_p$).
                   1254:
                   1255: The new \kbd{e} tells us that the minimal equation is $y^2+y = x^3-x$.
                   1256: Let us now play a little with points on \kbd{e}. Type \kbd{q = [0,0]}, which is
                   1257: clearly on the curve (type \kbd{ellisoncurve(e, q)} to check). Well, \kbd{q}
                   1258: may be a torsion point. Type \kbd{ellheight(e, q)}, which computes the
                   1259: canonical Neron-Tate height of \kbd{q}. This is non-zero, hence \kbd{q} is
                   1260: not torsion. To see this even better, type
                   1261:
                   1262: \kbd{for(k = 1, 20, print(ellpow(e, q,k)))}
                   1263:
                   1264: \noindent and we see the characteristic parabolic explosion of the size of
                   1265: the points. As a further check, type
                   1266: \kbd{ellheight(e, ellpow(e, q,20)) / ellheight(e, q)}. We indeed find
                   1267: $400=20^2$ as it should be. You can also type \kbd{ellorder(e, q)} which
                   1268: returns 0, telling you that \kbd{q} is non-torsion.
                   1269:
                   1270: Notice how all those \kbd{ell}--prefixed functions take our elliptic curve as
                   1271: a first argument? This will be true with number fields as well: whatever
                   1272: object was initialized by an $ob$--\kbd{init} function will have to be used as
                   1273: a first argument of all the $ob$--prefixed functions. Conversely, you won't be
                   1274: able to use any such high-level function before you correctly initialize the
                   1275: relevant object. \smallskip
                   1276:
                   1277: Ok, let's try another curve. Type \kbd{e = ellinit([0,-1,1,0,0])}. This
                   1278: corresponds to the equation $y^2+y = x^3-x^2$. Again from the discriminant
                   1279: we see that the conductor is equal to 11, and if you type \kbd{ellglobalred(e)}
                   1280: you will see that the equation  for \kbd{e} is minimal. Type \kbd{q = [0,0]}
                   1281: which is clearly a point on \kbd{e}, and \kbd{ellheight(e, q)}. This time we
                   1282: obtain a value which is very close to zero, hence \kbd{q} must be a torsion
                   1283: point. Indeed, typing \kbd{for(k=1,5, print(ellpow(e, q,k)))} we see that
                   1284: \kbd{q} is a point of order 5 (note that the point at infinity is represented
                   1285: as \kbd{[0]}). More simply, you can type \kbd{ellorder(e, q)}.\smallskip
                   1286:
                   1287: Let's try still another curve. Type \kbd{e = ellinit([0,0,1,-7,6])} to get
                   1288: the curve $y^2+y=x^3-7x+6$. Typing \kbd{ellglobalred(e)} shows that this is a
                   1289: minimal equation and that the conductor, equal to the discriminant, is 5077.
                   1290: There are some trivial integral points on this curve, but let's try to be
                   1291: more systematic.
                   1292:
                   1293: First, let's study the torsion points. Typing \kbd{elltors(e)} shows that the
                   1294: torsion subgroup is trivial, so we won't have to worry about torsion points.
                   1295: Next, the member \kbd{e.roots} gives us the 3 roots of the minimal
                   1296: equation over $\C$, i.e.~$Y^2=X^3-7X+25/4$ (set $(X,Y)=(x,y+1/2)$) so if
                   1297: $(x,y)$ is a real point on the curve, $x$ must be at least equal to the
                   1298: smallest root, i.e.~$x\ge-3$. Finally, if $(x,y)$ is on the curve, its
                   1299: opposite is clearly $(x,-y-1)$. So we are going to use the \kbd{ellordinate}
                   1300: function and type (for instance in \kbd{points.gp} which you can read in with
                   1301: \kbd{\b{r} points} as we saw before)
                   1302: \bprog
                   1303: {
                   1304:   v=[];
                   1305:   for (x = -3, 1000,
                   1306:     s = ellordinate(e,x);
                   1307:     if (length(s),            \\ @com we could use \kbd{if (!s,)} instead
                   1308:       v = concat(v, [[x,s[1]]])
                   1309:     )
                   1310:   ); v
                   1311: }
                   1312: @eprog
                   1313:
                   1314: \noindent By the way, this is how you insert a comment in a script:
                   1315: everything following a double backslash (up to the first newline character)
                   1316: is ignored. If you want comments which span many lines, you can brace them
                   1317: between \kbd{/* ... */} pairs. Everything in between will be ignored as well.
                   1318: For instance as a header for the file \kbd{points.gp} you could insert the
                   1319: following:
                   1320: \bprog
                   1321: /* Finds rational points on the elliptic curve e, using the naivest
                   1322:  * algorithm I could think of right now (TO BE IMPROVED).
                   1323:  * e should have rational coefficients.
                   1324:  * TODO: Make that into a usable function.
                   1325:  */
                   1326: @eprog
                   1327:
                   1328: (I hope you did not waste your time copying this nonsense, did you?)
                   1329:
                   1330: We thus get a large number (18) of integral points. Together with their
                   1331: opposites and the point at infinity, this makes a total of 37 integral
                   1332: points, which is large for a curve having such a small conductor. So we
                   1333: suspect (if we don't know already, since this curve is quite famous!) that
                   1334: the rank of this curve must be high. Let's try and put some order into this
                   1335: (note that we work only with the integral points, but in general rational
                   1336: points should also be considered).
                   1337:
                   1338: Type \kbd{hv = ellheight(e, v)}. This gives the vector of canonical heights.
                   1339: Let us order the points according to their height. For this, type
                   1340:
                   1341: \kbd{iv = vecindexsort(hv)}, then \kbd{hv = vecextract(hv,iv)} and
                   1342: \kbd{v = vecextract(v,iv)}.
                   1343:
                   1344: It seems reasonable to take the numbers with smallest height as generators of
                   1345: the Mordell-Weil group. Let's try the first 4: type
                   1346:
                   1347: \kbd{m = ellheightmatrix(e, vecextract(v,[1,2,3,4])); matdet(m)}
                   1348:
                   1349: Since the curve has no torsion, the determinant being close to zero implies
                   1350: that the first four points are dependent. To find the dependency, it is
                   1351: enough to find the kernel of the matrix \kbd{m}. So type \kbd{matker(m)}:
                   1352: we indeed get a non-trivial kernel, and the coefficients are (close to)
                   1353: integers as they should. Typing \kbd{elladd(e, v[1],v[3])} does indeed show
                   1354: that it is equal to \kbd{v[4]}.
                   1355:
                   1356: Taking any other four points, we would in fact always find a dependency.
                   1357: Let's find them all. Type \kbd{vp = [v[1],v[2],v[3]]\til;
                   1358: m = ellheightmatrix(e,vp);
                   1359: matdet(m)}. This is now clearly non-zero so the first 3 points
                   1360: are linearly independent, showing that the rank of the curve is at least
                   1361: equal to 3 (it is in fact equal to 3, and \kbd{e} is the curve of smallest
                   1362: conductor having rank 3). We would like to see whether the other points are
                   1363: dependent. For this, we use the function \kbd{ellbil}. Indeed, if \kbd{Q} is
                   1364: some point which is dependent on \kbd{v[1],v[2]} and \kbd{v[3]}, then
                   1365: \kbd{matsolve(m, ellbil(e, vp,Q))} will by definition give the coefficients
                   1366: of the dependence relation. If these coefficients are close to integers, then
                   1367: there is a dependency, otherwise not.  This is much safer than using the
                   1368: \kbd{matker} function. Thus, type
                   1369:
                   1370: \centerline{\tt w = vector(18,k, matsolve(m, ellbil(e, vp,v[k])))}
                   1371:
                   1372:  We ``see'' that the coefficients are all very close to integers, and we can
                   1373: prove it by typing
                   1374:
                   1375: \centerline{\tt wr = round(w); sqrt(norml2(w - wr))}
                   1376:
                   1377: \noindent which gives an upper bound on the maximum distance to an integer.
                   1378: Thus \kbd{wr} is the vector expressing all the components of \kbd{v} on its
                   1379: first 3. We are thus led to strongly believe that the curve has rank exactly
                   1380: 3, and this can be proved to be the case.\smallskip
                   1381:
                   1382: Let's now explore a few more elliptic curve related functions. Let us keep
                   1383: our curve \kbd{e} of rank 3, and type
                   1384: \bprog
                   1385: v1 = [1,0]; v2 = [2,0];
                   1386: z1 = ellpointtoz(e, v1)
                   1387: z2 = ellpointtoz(e, v2)
                   1388: @eprog
                   1389:
                   1390: We thus get the complex parametrization of the curve. To add the points
                   1391: \kbd{v1} and \kbd{v2}, we should of course type \kbd{elladd(e, v1,v2)},
                   1392: but we can also type \kbd{ellztopoint(e, z1 + z2)} which of course has the
                   1393: disadvantage of giving complex numbers, but illustrates how the group law on
                   1394: \kbd{e} is obtained from the addition law on $\C$.
                   1395:
                   1396: Type \kbd{f = x * Ser(ellan(e, 30))}. This gives a power series which
                   1397: is the Fourier expansion of a modular form of weight 2 for $\Gamma_0(5077)$
                   1398: (this has been proved directly, but also follows from Wiles' result since
                   1399: \kbd{e} is semi-stable). In fact, to find the modular parametrization of
                   1400: the curve, type \kbd{modul = elltaniyama(e)}, then
                   1401: \kbd{u=modul[1]; v=modul[2];}. Type
                   1402:
                   1403: \centerline{\tt (v\pow 2 + v) - (u\pow 3 - 7*u + 6)}
                   1404:
                   1405: \noindent to see that this indeed parametrizes the curve.
                   1406:
                   1407: Now type \kbd{x * u' / (2*v + 1)}, and we see that this is equal to the
                   1408: modular form \kbd{f} found above (the quote \kbd{'} tells GP to take the
                   1409: derivative of the expression with respect to its main variable). The
                   1410: functions \kbd{u} and \kbd{v}, considered on the upper half plane (with
                   1411: $x=e^{2i\pi\tau}$), are in fact modular {\it functions} for $\Gamma_0(5077)$.
                   1412: \smallskip
                   1413:
                   1414: Finally, let us come back to the curve defined by typing
                   1415: \kbd{e = ellinit([0,-1,1,0,0])} where we had seen that the point
                   1416: \kbd{q = [0,0]} was of order 5. We know that the conductor of this curve is
                   1417: equal to 11 (type \kbd{ellglobalred(e)}). We want the sign of the functional
                   1418: equation. Type
                   1419:
                   1420: \centerline{\kbd{elllseries(e, 1,-11,1.1)}, \quad then \quad
                   1421: \kbd{elllseries(e, 1,-11,1)}.}
                   1422:
                   1423:   Since the values are clearly different, the sign cannot be $-$. In fact
                   1424: there is an algebraic algorithm which would allow to compute this sign, but
                   1425: it has not yet been completely written, although in case of conductors prime
                   1426: to 6 it is very simple.
                   1427:
                   1428: Now type \kbd{ls = elllseries(e, 1,11,1)}, and just as a check
                   1429: \kbd{elllseries(e, 1,11,1.1)}. The values agree (approximately) as they should,
                   1430: and give the value of the L-function of \kbd{e} at 1. Now according to
                   1431: the Birch and Swinnerton-Dyer conjecture (which is proved for this curve),
                   1432: \kbd{ls} is given by the following formula (in this case):
                   1433: %
                   1434: \def\sha{\hbox{III}}
                   1435: $$L(E,1)=\dfrac{\Omega\cdot c\cdot|\sha|}{|E_{\text{tors}}|^2}\enspace,$$
                   1436: %
                   1437: where $\Omega$ is the real period of $E$, $c$ is the global Tamagawa number,
                   1438: product of the local $c_p$ for primes $p$ dividing the conductor, $|\sha|$ is
                   1439: the order of the Tate-Shafarevich group, and $E_{\text{tors}}$ is the
                   1440: torsion group of $E$.
                   1441:
                   1442: Now we know many of these quantities: $\Omega$ is equal to \kbd{e.omega[1]}
                   1443: (if there had been 3 real roots instead of 1 in \kbd{e.roots}, $\Omega$ would
                   1444: be equal to \kbd{2 * e.omega[1]}). The Tamagawa number $c$ is given as the
                   1445: last component of \kbd{ellglobalred(e)}, and here is equal to 1. We already
                   1446: know that the torsion subgroup of $E$ contains a point of order 5, and typing
                   1447: \kbd{torsell(e)} shows that it is of order exactly 5. Hence type
                   1448: \kbd{ls * 25/e[15]}. This shows that $|\sha|$ must be equal to 1.
                   1449:
                   1450: \section{Working in Quadratic Number Fields}
                   1451:
                   1452: The simplest of all number fields outside $\Q$ are quadratic fields. Such
                   1453: fields are characterized by their discriminant, and even better, any non-square
                   1454: integer $D$ congruent to 0 or 1 modulo 4 is the discriminant of a specific
                   1455: order in a quadratic field. We can check whether this order is maximal by
                   1456: using the command \kbd{isfundamental(D)}. Elements of a quadratic field are
                   1457: of the form $a+b\omega$, where $\omega$ is chosen as $\sqrt{D}/2$ if $D$ is
                   1458: even and $(1+\sqrt{D})/2$ if $D$ is odd, and are represented in PARI by
                   1459: quadratic numbers. To initialize working in a quadratic order, one should
                   1460: start by the command \kbd{w = quadgen($D$)}.
                   1461:
                   1462: This sets \kbd{w} equal to $\omega$ as above, and is printed \kbd{w}. Note
                   1463: however that if several different quadratic orders are used, a printed \kbd{w}
                   1464: may have several different meanings. For example if you type
                   1465:
                   1466: \centerline{\tt w1 = quadgen(-23); w2 = quadgen(-15);}
                   1467:
                   1468: Then ask for the value of \kbd{w1} and \kbd{w2}, both will be printed as
                   1469: \kbd{w}, but of course they are not equal. Hence beware when dealing with
                   1470: several quadratic orders at once. \smallskip
                   1471: %
                   1472: In addition to elements of a quadratic order, we also want to be able to
                   1473: handle ideals of such orders. In the quadratic case, it is equivalent to
                   1474: handling binary quadratic forms, and this has been chosen in PARI. For
                   1475: negative discriminants, quadratic forms are triples $(a,b,c)$ representing
                   1476: the form $ax^2+bxy+cy^2$. Such a form will be printed as, and can be created
                   1477: by, \kbd{Qfb($a$,$b$,$c$)}.
                   1478:
                   1479: Such forms can be multiplied, divided, powered as many PARI objects using
                   1480: the usual operations, and they can also be reduced using the function
                   1481: \kbd{qfbred} (it is not the purpose of this tutorial to explain what all
                   1482: these things mean). In addition, Shanks's NUCOMP algorithm has been
                   1483: implemented (functions \kbd{qfbnucomp} and \kbd{qfbnupow}), and this is
                   1484: usually a little faster.
                   1485:
                   1486: Finally, you have at your disposal the functions \kbd{qfbclassno} which
                   1487: ({\it usually\/}) gives the class number, the function \kbd{qfbhclassno}
                   1488: which gives the Hurwitz class number, and the much more sophisticated
                   1489: \kbd{quadclassunit} function which gives the class number and class group
                   1490: structure.
                   1491:
                   1492: Let us see examples of all this at work.
                   1493:
                   1494: Type \kbd{qfbclassno(-10007)}. GP tells us that the result is 77. However,
                   1495: you may have noticed in the explanation above that the result is only
                   1496: {\it usually\/} correct. This is because the implementers of the algorithm
                   1497: have been lazy and have not put the complete Shanks algorithm into PARI,
                   1498: causing it to fail in certain very rare cases. In practice, it is almost
                   1499: always correct, and the much more powerful \kbd{quadclassunit} program, which
                   1500: {\it is} complete (at least for fundamental discriminants) can give
                   1501: confirmation (but now, under the Generalized Riemann Hypothesis!!!).
                   1502:
                   1503: So we may be a little suspicious of this class number. Let us check it.
                   1504: First, we need to find a quadratic form of discriminant $-10007$. Since this
                   1505: discriminant is congruent to 1 modulo 8, we know that there is an ideal of
                   1506: norm equal to 2, i.e.~a binary quadratic form $(a,b,c)$ with $a=2$. To
                   1507: compute it we type \kbd{f = qfbprimeform(-10007, 2)}. OK, now we have a form.
                   1508: If the class number is correct, the very least is that this form raised to
                   1509: the power 77 should equal the identity. Let's check this. Type \kbd{f\pow 77}.
                   1510: We get a form starting with 1, i.e.~the identity, so this test is OK. Raising
                   1511: \kbd{f} to the powers 11 and 7 does not give the identity, thus we now know
                   1512: that the order of \kbd{f} is exactly 77, hence the class number is a multiple
                   1513: of 77. But how can we be sure that it is exactly 77 and not a proper multiple?
                   1514: Well, type
                   1515: \bprog
                   1516:   sqrt(10007)/Pi * prodeuler(p=2,500, 1./(1 - kronecker(-10007,p)/p))
                   1517: @eprog
                   1518: %
                   1519: This is nothing else than an approximation to the Dirichlet class number
                   1520: formula. The function \kbd{kronecker} is the Kronecker symbol, in this case
                   1521: simply the Legendre symbol. Note also that we have written \kbd{1./(1 - \dots)}
                   1522: with a dot after the first 1. Otherwise, PARI may want to compute the whole
                   1523: thing as a rational number, which would be terribly long and useless. In fact
                   1524: PARI does no such thing in this particular case (\kbd{prodeuler} is always
                   1525: computed as a real number), but you never know. Better safe than sorry!
                   1526:
                   1527: We find 77.77, pretty close to 77, so things seem in order. Explicit bounds
                   1528: on the prime limit to be used in the Euler product can be given which make
                   1529: the above reasoning rigorous.
                   1530:
                   1531: Let us try the same thing with $D=-3299$. \kbd{qfbclassno} and the Euler
                   1532: product convince us that the class number must be 27. However, we get stuck
                   1533: when we try to prove this in the simple-minded way above. Indeed, we type
                   1534: \kbd{f = qfbprimeform(-3299, 3)} (here 2 is not the norm of a prime ideal but
                   1535: 3 is), and we see that \kbd{f} raised to the power 9 is equal to the identity.
                   1536: This is the case for any other quadratic form we choose. So we suspect that the
                   1537: class group is not cyclic. Indeed, if we list all 9 distinct powers of \kbd{f},
                   1538: we see that \kbd{qfbprimeform(-3299, 5)} is not on the list (although its cube
                   1539: is as it must). This implies that the class group is probably equal to a
                   1540: product of a cyclic group of order 9 by a cyclic group of order 3. The Euler
                   1541: product plus explicit bounds prove this.
                   1542:
                   1543: Another way to check it is to use the \kbd{quadclassunit} function by typing
                   1544: for example
                   1545:
                   1546: \centerline{\tt quadclassunit(-3299)}
                   1547:
                   1548: Note that this function cheats a little and could still give a wrong answer,
                   1549: even assuming GRH (we could get a subgroup and not the whole class group).
                   1550: If we want to use proven bounds under GRH, we have to type
                   1551:
                   1552: \centerline{\tt quadclassunit(-3299,,[1,6])}
                   1553:
                   1554: The double comma \kbd{,,} is not a typo, it means we omit an optional second
                   1555: argument (we would use it to compute the narrow class group, which would be
                   1556: the same here of course). As we want to use the optional {\it third}
                   1557: argument, we have to indicate to GP we skipped this one.
                   1558:
                   1559: Now, if we believe in GRH, the class group is as we thought (see Chapter 3
                   1560: for a complete description of this function).
                   1561:
                   1562:   Note that using the even more general function \kbd{bnfinit} (which handles
                   1563: general number fields and gives much more complicated results), we could
                   1564: {\it certify\/} this result (remove the GRH assumption). Let's do it, type
                   1565: \bprog
                   1566: bnf = bnfinit(x^2 + 3299); bnfcertify(bnf)
                   1567: @eprog
                   1568:
                   1569:   A non-zero result (here 1) means that everything is ok. Good, but what did
                   1570: we certify after all? Let's have a look at this \kbd{bnf} (just type it!).
                   1571: Enlightening, isn't it? Recall that the \kbd{init} functions (we've already
                   1572: seen \kbd{ellinit}) store all kind of technical information which you
                   1573: certainly don't care about, but which will be put to good use by some higher
                   1574: level functions. That's why \kbd{bnfcertify} could not be used on the output
                   1575: of \kbd{quadclassunit}: it needs much more data.
                   1576:
                   1577:   To extract sensible information from such complicated objects, you must use
                   1578: one of the many {\it member functions} (remember: \kbd{?.} to get a complete
                   1579: list). In this case \kbd{bnf.clgp} which extracts the class group structure.
                   1580: This is much better. Type \kbd{\%.no} to check that this leading 27 is indeed
                   1581: what we think it is and not some stupid technical parameter. Note that
                   1582: \kbd{bnf.clgp.no} would work just as well, or even \kbd{bnf.no}!
                   1583:
                   1584: As a last check, we can request a relative equation for the Hilbert class
                   1585: field of $\Q(\sqrt{-3299})$: type \kbd{quadhilbert(-3299)}. It is indeed of
                   1586: degree 27 so everything fits together.
                   1587:
                   1588: \medskip
                   1589: %
                   1590: Working in real quadratic fields instead of complex ones, i.e.~with $D>0$, is
                   1591: not very different.
                   1592:
                   1593: The same \kbd{quadgen} function is used to create elements. Ideals are again
                   1594: represented by binary quadratic forms $(a,b,c)$, this time indefinite. However,
                   1595: the Archimedean valuations of the number field start to come into play (as
                   1596: is clear if one considers ideles instead of ideals), hence in fact quadratic
                   1597: forms with positive discriminant will be represented as a quadruplet
                   1598: $(a,b,c,d)$ where the quadratic form itself is $ax^2+bxy+cy^2$ with $a$,
                   1599: $b$ and $c$ integral, and $d$ is the Archimedean component, a real number.
                   1600: For people familiar with the notion, $d$ represents a ``distance'' as defined
                   1601: by Shanks and Lenstra.
                   1602:
                   1603: To create such forms, one uses the same function as for definite ones, but
                   1604: you can add a fourth (optional) argument to initialize the distance:
                   1605:
                   1606: \centerline{\tt Qfb($a$, $b$, $c$, $d$)}
                   1607:
                   1608: If the discriminant of $(a,b,c)$ is negative, $d$ is silently
                   1609: discarded. If you omit it, this component is set to \kbd{0.} (i.e.~a real zero
                   1610: to the current precision).
                   1611:
                   1612: Again these forms can be multiplied, divided, powered, and they can be
                   1613: reduced using the function \kbd{qfbred}. This function is in fact a
                   1614: succession of elementary reduction steps corresponding essentially to a
                   1615: continued fraction expansion, and a single one of these steps can be achieved
                   1616: by adding an (optional) flag to the arguments of using this function. Since
                   1617: handling the fourth component $d$ usually involves computing logarithms, the
                   1618: same flag may be used to ignore the fourth component. Finally, it is
                   1619: sometimes useful to operate on forms of positive discriminant without
                   1620: performing any reduction (this is useless in the negative case), the
                   1621: functions \kbd{qfbcompraw} and \kbd{qfbpowraw} do exactly that.
                   1622:
                   1623: Again, the function \kbd{qfbprimeform} gives a prime form, but the form which
                   1624: is given corresponds to an ideal of prime norm which is usually not reduced.
                   1625: If desired, it can be reduced using \kbd{qfbred}.
                   1626:
                   1627: Finally, you still have at your disposal the function \kbd{qfbclassno} which
                   1628: gives the class number (this time {\it guaranteed\/} correct),
                   1629: \kbd{quadregulator} which gives the regulator, and the much more sophisticated
                   1630: \kbd{quadclassunit} giving the class group's structure and its generators,
                   1631: as well as the regulator. The \kbd{qfbclassno} and \kbd{quadregulator}
                   1632: functions use an algorithm which is $O(\sqrt D)$, hence become very slow for
                   1633: discriminants of more than 10 digits. \kbd{quadclassunit} can be used on a
                   1634: much larger range.
                   1635:
                   1636: Let us see examples of all this at work and learn some little known number
                   1637: theory at the same time. First of all, type
                   1638: \kbd{d = 3 * 3299; qfbclassno(d)}. We see that the class number is 3 (we know
                   1639: in advance that it must be divisible by 3 from the \kbd{d = -3299} case above
                   1640: and Scholz's theorem). Let us create a form by typing
                   1641: \kbd{f = qfbred(qfbprimeform(d,2), 2)} (the last 2 tells \kbd{qfbred} to
                   1642: ignore the archimedean component). This gives us a prime ideal of norm
                   1643: equal to 2. Is this ideal principal? Well, one way to check this, which is
                   1644: not the most efficient but will suffice for now, is to look at the complete
                   1645: cycle of reduced forms equivalent to \kbd{f}. Type
                   1646: \bprog
                   1647:  g = f; for(i=1,20, g = qfbred(g, 3); print(g))
                   1648: @eprog\noindent
                   1649: (this time the 3 means to do a single reduction step, still not using
                   1650: Shanks's distance). We see that we come back to the form \kbd{f} without
                   1651: having the principal form (starting with $\pm1$) in the cycle, so the ideal
                   1652: corresponding to \kbd{f} is not principal.
                   1653:
                   1654: Since the class number is equal to 3, we know however that \kbd{f\pow 3} will
                   1655: be a principal ideal $\alpha\Z_K$. How do we find $\alpha$? For this, type
                   1656: \kbd{f3 = qfbpowraw(f, 3)}. This computes the cube of \kbd{f}, without
                   1657: reducing it. Hence it corresponds to an ideal of norm equal to $8=2^3$, so we
                   1658: already know that the norm of $\alpha$ is equal to $\pm8$. We need more
                   1659: information, and this will be given by the fourth component of the form.
                   1660: Reduce your form until you reach the unit form (you will have to type
                   1661: \kbd{qfbred(\%,~1)} exactly 6 times).
                   1662:
                   1663: Extract the Archimedean component by typing \kbd{c = component(\%, 4)}. By
                   1664: definition of this distance, we know that
                   1665: $${\alpha\over{\sigma(\alpha)}}=\pm e^{2c},$$
                   1666: where $\sigma$ denotes real conjugation in our quadratic field. Thus, if we
                   1667: type
                   1668:
                   1669: \centerline{\tt a = sqrt(8 * exp(2*c))}
                   1670:
                   1671: \noindent and then \kbd{sa = 8 / a}, we know that up to sign, \kbd{a} and
                   1672: \kbd{sa} are numerical approximations of $\alpha$ and $\sigma(\alpha)$. Of
                   1673: course, $\alpha$ can always be chosen to be positive, and a quick numerical
                   1674: check shows that the difference of \kbd{a} and \kbd{sa} is close to an
                   1675: integer, and not the sum, so that in fact the norm of $\alpha$ is equal to
                   1676: $-8$ and the numerical approximation to $\sigma(\alpha)$ is \kbd{$-$sa}. Thus
                   1677: we type
                   1678:
                   1679: \centerline{\tt p = x\pow 2 - round(a-sa)*x - 8}
                   1680:
                   1681: \noindent and this is the characteristic polynomial of $\alpha$. We can check
                   1682: that the discriminant of this polynomial is a square multiple of \kbd{d}, so
                   1683: $\alpha$ is indeed in our field. More precisely, solving for $\alpha$ and
                   1684: using the numerical approximation that we have to resolve the sign ambiguity in
                   1685: the square root, we get explicitly $\alpha=(15221+153\sqrt d)/2$. Note that
                   1686: this can also be done automatically using the functions \kbd{polred} and
                   1687: \kbd{modreverse}, as we will see later in the general number field case, or by
                   1688: solving a system of 2 linear equations in 2 variables.
                   1689:
                   1690: \noindent{\bf Exercise:} now that we have $\alpha$ explicitly, check that it
                   1691: is indeed a generator of the ideal corresponding to the form \kbd{f3}.
                   1692:
                   1693: \medskip Let us now play a little with cycles. Set \kbd{D = 10\pow 7 + 1},
                   1694: then type
                   1695:
                   1696: \centerline{\tt quadclassunit(D,,[1,6])}
                   1697:
                   1698: We get as a result a 5-component vector, which tells us that (under GRH) the
                   1699: class number is equal to 1, and the regulator is approximately
                   1700: equal to $2641.5$. If you want to certify this, use \kbd{qfbclassno} and
                   1701: \kbd{quadregulator}, {\it not} \kbd{bnfinit} and \kbd{bnfcertify}, which will
                   1702: take an absurdly long time (well, about 5 minutes if you are careful and set
                   1703: the initial precision correctly). Indeed \kbd{bnfcertify} needs the fundamental
                   1704: unit which is so large that \kbd{bnfinit} will have a (relatively) hard time
                   1705: computing it: you will need about $R/\log(10)\approx 1147$ digits of precision!
                   1706: On the other hand, you can try \kbd{quadunit(D)}. Impressive, isn't it? (you
                   1707: can check that its logarithm is indeed equal to the regulator).
                   1708:
                   1709: Now just as an example, let's assume that we want the regulator to 500
                   1710: decimals, say (without cheating and computing the fundamental unit exactly
                   1711: first!). I claim that by simply knowing the crude approximation above, this
                   1712: can be computed with no effort.
                   1713:
                   1714: This time, we want to start with the unit form. Since \kbd{D} is odd, we can
                   1715: type:
                   1716:
                   1717: \centerline{\tt u = qfbred(Qfb(1,1,(1 - D)/4), 2)}
                   1718:
                   1719: We use the function \kbd{qfbred} with no distance since we want the initial
                   1720: distance to be equal to~0.
                   1721:
                   1722: Now we type  \kbd{f = qfbred(u, 1)}. This is the first form encountered along
                   1723: the principal cycle. For the moment, keep the precision low, for example the
                   1724: initial default precision. The distance from the identity of \kbd{f} is
                   1725: around 4.253. Very crudely, since we want a distance of $2641.5$, this should
                   1726: be encountered approximately at $2641.5/4.253=621$ times the distance of
                   1727: \kbd{f}. Hence, as a first try, we type \kbd{f\pow 621}. Oops, we overshot,
                   1728: since the distance is now $3173.02$. Now we can refine our initial estimate and
                   1729: believe that we should be close to the correct distance if we raise \kbd{f} to
                   1730: the power $621*2641.5/3173$ which is close to $517$. Now if we compute
                   1731: \kbd{f\pow 517} we hit the principal form right on the dot. Note that this is
                   1732: not a lucky accident: we will always land extremely close to the correct target
                   1733: using this method, and usually at most one reduction correction step is
                   1734: necessary. Of course, only the distance component can tell us where we are
                   1735: along the cycle.
                   1736:
                   1737: Up to now, we have only worked to low precision. The goal was to obtain this
                   1738: unknown integer $517$. Note that this number has absolutely no mathematical
                   1739: significance: indeed the notion of reduction of a form with positive
                   1740: discriminant is not well defined since there are usually many reduced forms
                   1741: equivalent to a given form. However, when PARI makes its computations, the
                   1742: specific order and reductions that it performs are dictated entirely by the
                   1743: coefficients of the quadratic form itself, and not by the distance component,
                   1744: hence the precision used has no effect.
                   1745:
                   1746: Hence we now start again by setting the precision to (for example) 500,
                   1747: we retype the definition of \kbd{u} (why is this necessary?), and then
                   1748: \kbd{f = qfbred(u, 1)} and finally \kbd{f\pow 517}. Of course we know in
                   1749: advance that we land on the unit form, and the fourth component gives us the
                   1750: regulator to 500 decimal places with no effort at all.
                   1751:
                   1752: In a similar way, we could obtain the so-called {\it compact representation}
                   1753: of the fundamental unit itself, or $p$-adic regulators. I leave this as
                   1754: exercises for the interested reader.
                   1755:
                   1756: You can try the \kbd{quadhilbert} function on that field but, since the class
                   1757: number is $1$, the result won't be that exciting. If you try it on our
                   1758: preceding example ($3*3299$) it should take about five minutes (time for a
                   1759: coffee break?).
                   1760:
                   1761: \section{Working in General Number Fields}
                   1762:
                   1763: Note for the present release: this section is a little obsolete since many
                   1764: new powerful functions are available now. This needs to be rewritten
                   1765: entirely. \smallskip
                   1766:
                   1767: The situation here is of course more difficult. First of all, remembering
                   1768: what we did with elliptic curves, we need to initialize it (with something
                   1769: more serious than \kbd{quadgen}). For example assume that we want to work in
                   1770: the number field $K$ defined by one of the roots of the equation
                   1771: $x^4+24x^2+585x+1791=0$. This is done by typing
                   1772: \bprog
                   1773: T = x^4 + 24*x^2 + 585*x + 1791
                   1774: nf = nfinit(T)
                   1775: @eprog
                   1776:
                   1777: We get quite a complicated object but, thanks to member functions, we don't
                   1778: need to know anything about its internal structure (which is dutifully
                   1779: described in Chapter~3). If you type \kbd{nf.pol}, you will get the
                   1780: polynomial \kbd{T} which you just input. \kbd{nf.sign} yields the signature
                   1781: $(r_1,r_2)$ of the field, \kbd{nf.disc} the field discriminant, \kbd{nf.zk}
                   1782: an integral basis, etc\dots.
                   1783:
                   1784: The integral basis is expressed in terms of a generic root \kbd{x} of \kbd{T}
                   1785: and we notice it's very far from being a power integral basis, which is a
                   1786: little strange for such a small field. Hum, let's check that: \kbd{poldisc(T)}?
                   1787: Ooops, small wonder we had such denominators, the index is, well, type
                   1788: \kbd{sqrt(\% / nf.disc)}. That's $3087$, we don't want to work with such
                   1789: a badly skewed polynomial!
                   1790:
                   1791:   So, type \kbd{P = polred(T)}. We see from the third component that the
                   1792: polynomial $x^4-x^3-21x^2+17x+133$ defines the same field with much smaller
                   1793: coefficients, so type \kbd{A = P[3]}. The \kbd{polred} function gives a
                   1794: (usually) simpler polynomial, and also sometimes some information on the
                   1795: existence of subfields. For example in this case, the second component of
                   1796: \kbd{polred} tells us that the field defined by $x^2-x+1=0$, i.e.~the field
                   1797: generated by the cube roots of unity, is a subfield of our number field $K$.
                   1798: Note this is given as incidental information and that the list of subfields
                   1799: found in this way is usually far from complete. To get the complete list, you
                   1800: will have to use the function \kbd{nfsubfields} (we'll do that later on).
                   1801:
                   1802:   Type \kbd{poldisc(A)}, this is much better, but maybe not optimal yet
                   1803: (the index is still $7$). Type \kbd{polredabs(A)} (the \kbd{abs} stands for
                   1804: absolute). Since it seems that we won't get anything better, we'll stick with
                   1805: \kbd{A} (note however that \kbd{polredabs} finds a smallest generating
                   1806: polynomial with respect to a bizarre norm which ensures that the index will
                   1807: be small, but not necessarily minimal). In fact, had you typed
                   1808: \kbd{nfinit(T, 3)}, \kbd{nfinit} would first have tried to find a good
                   1809: polynomial defining the same field (i.e.~one with small index) before
                   1810: proceeding.
                   1811:
                   1812:   It's not too late, let's redefine our number field: \kbd{NF = nfinit(nf, 3)}.
                   1813: The output is a two-component vector. The first component is the new
                   1814: \kbd{nf} (type \kbd{nf = NF[1];}). If you type \kbd{nf.pol}, you notice that GP
                   1815: indeed replaced your bad polynomial \kbd{T} by a much better one, which
                   1816: happens to be \kbd{A} (small wonder, \kbd{nfinit} internally called
                   1817: \kbd{polredabs}!). The second component enables you to switch conveniently to
                   1818: our new polynomial.
                   1819:
                   1820: Namely, call $\theta$ a root of our initial polynomial \kbd{T}, and $\alpha$
                   1821: a root of the one that \kbd{polred} has found, namely \kbd{A}. These are
                   1822: algebraic numbers, and as already mentioned are represented as polmods. For
                   1823: example, in our special case $\theta$ is equal to the polmod
                   1824:
                   1825: \centerline{\tt Mod(x, x\pow 4 + 24*x\pow 2 + 585*x + 1791)}
                   1826:
                   1827: \noindent while $\alpha$ is equal to the polmod
                   1828:
                   1829: \centerline{\tt Mod(x, x\pow 4 - x\pow 3 - 21*x\pow 2 + 17*x + 133)}
                   1830:
                   1831: \noindent Here of course we are considering only the algebraic aspect, and
                   1832: hence ignore completely {\it which} root $\theta$ or $\alpha$ is chosen.
                   1833:
                   1834: Now probably you may have a number of elements of your number field which are
                   1835: expressed as polmods with respect to your old polynomial, i.e.~as
                   1836: polynomials in $\theta$. Since we are now going to work with $\alpha$
                   1837: instead, it is necessary to convert these numbers to a representation using
                   1838: $\alpha$. This is what the second component of \kbd{NF} is for: type
                   1839: \kbd{NF[2]}, you get
                   1840:
                   1841: \centerline{\tt Mod(x\pow 2 + x - 11, x\pow 4 - x\pow 3 - 21*x\pow 2 +
                   1842: 17*x + 133)}
                   1843:
                   1844: \noindent meaning that $\theta = \alpha^2+\alpha-11$, and hence the conversion
                   1845: from a polynomial in $\theta$ to one in $\alpha$ is easy, using \kbd{subst}
                   1846: (we could get this polynomial from \kbd{polred} as well, try
                   1847: \kbd{polred(T, 2)}). If we want to do the reverse, i.e.~go back from a
                   1848: representation in $\alpha$ to a representation in $\theta$, we use the
                   1849: function \kbd{modreverse} on this polynomial \kbd{NF[2]}. Try it. The result
                   1850: has a big denominator (147) essentially because our initial polynomial
                   1851: \kbd{T} was so bad. By the way to get the 147, you should type
                   1852: \kbd{denominator(content(NF[2]))}. Trying \kbd{denominator} by itself would not
                   1853: work since the denominator of a polynomial is defined to be 1 (and its
                   1854: numerator is itself). The reason for this ``surprising'' behaviour is that we
                   1855: think of a polynomial as a special case of a rational function. \smallskip
                   1856:
                   1857: From now on, we completely forget about \kbd{T}, and use only the polynomial
                   1858: \kbd{A} defining $\alpha$, and the components of the vector \kbd{nf} which
                   1859: gives information on our number field $K$. Type
                   1860:
                   1861: \centerline{\tt u = Mod(x\pow 3 - 5*x\pow 2 - 8*x + 56, A) / 7}
                   1862:
                   1863: This is an element in $K$. There are three essentially equivalent
                   1864: representations for number field elements: polmod, polynomial, and column
                   1865: vector giving a decomposition in the integral basis \kbd{nf.zk} ({\it not} on
                   1866: the power basis $(1,x,x^2,\dots)$). All three are equally valid when the
                   1867: number field is understood (is given as first argument to the function).
                   1868: You will be able to use any one of them as long as the function you call
                   1869: requires an \kbd{nf} argument as well. However, most PARI functions will
                   1870: return elements as column vectors.
                   1871:
                   1872:   It's a very important feature of number theoretic functions that, although
                   1873: they may have a preferred format for input, they will accept a wealth of
                   1874: other different formats. We already saw this for \kbd{nfinit} which
                   1875: accepts either a polynomial or an \kbd{nf}. It will be true for ideals,
                   1876: ideles, congruence subgroups, etc.
                   1877:
                   1878:   Ok, let's stick with elements for the time being. How does one go from one
                   1879: representation to the other? Between polynomials and polmods, it's easy:
                   1880: \kbd{lift} and \kbd{Mod} will do the job. Next, from polmods/polynomials to
                   1881: column vectors: type \kbd{v = nfalgtobasis(nf, u)}. So $\kbd{u} = \alpha^3-
                   1882: \alpha^2 - \alpha + 8$, right? Wrong! The coordinates of \kbd{u} are given
                   1883: with respect to the {\it integral basis}, not the power basis
                   1884: $(1,\alpha,\alpha^2,\alpha^3)$ (and they don't coincide, type \kbd{nf.zk} if
                   1885: you forgot what the integral basis looked like). As a polynomial in $\alpha$,
                   1886: we simply have $\kbd{u} = {1\over7}\alpha^3 -
                   1887: {5\over7}\alpha^2-{8\over7}\alpha+8$, which is trivially deduced from the
                   1888: original polmod representation!
                   1889:
                   1890: Of course \kbd{v = nfalgtobasis(nf, lift(u))} would work equally well. Indeed
                   1891: we don't need the polmod information since \kbd{nf} already provides the
                   1892: defining polynomial. To go back to polmod representation, use
                   1893: \kbd{nfbasistoalg(nf, v)}. Notice that \kbd{u} is in fact an integer since
                   1894: \kbd{v} has integer coordinates (try \kbd{denominator(v) == 1}, which is of
                   1895: course overkill here, but not so in a program).
                   1896:
                   1897: Let's try this out. We may for instance compute \kbd{u\pow 3}. Try it. Or, we
                   1898: can type \kbd{1/u}. Better yet, if we want to know the norm from $K$ to $\Q$
                   1899: of \kbd{u}, we type \kbd{norm(u)} (what else?). \kbd{trace(u)} works as well.
                   1900: Notice that none of this would work on polynomials or column vectors since
                   1901: you don't have the opportunity to supply \kbd{nf}! But we could use
                   1902: \kbd{nfeltpow(nf,u,3)}, \kbd{nfeltdiv(nf,1,u)} (or \kbd{nfeltpow(nf,u,-1)})
                   1903: which would work whatever representation was chosen. There is no
                   1904: \kbd{nfeltnorm} function (\kbd{nfelttrace} does not exist either), but we can
                   1905: easily write one:
                   1906: \bprog
                   1907: nfeltnorm(nf,u) =
                   1908: {
                   1909:   local(t);
                   1910:   t = type(u);
                   1911:   if (t != "t_POLMOD",
                   1912:     if (t == "t_COL",
                   1913:       u = nfbasistoalg(nf, u)
                   1914:     ,
                   1915:       u = Mod(u, nf.pol)
                   1916:     )
                   1917:   );
                   1918:   norm(u)
                   1919: }
                   1920: @eprog
                   1921:
                   1922: Notice that this is certainly not foolproof (try it with complex or quadratic
                   1923: arguments!), but we could refine it if the need arose. In fact there was no
                   1924: need for this function, since you can consider (\kbd{u}) as a principal
                   1925: ideal, and just type \kbd{idealnorm(nf,u)} whatever the chosen representation
                   1926: for \kbd{u}. We'll talk about ideals later on.
                   1927:
                   1928:   If we want all the symmetric functions of \kbd{u} and not only the norm, we
                   1929: type \kbd{charpoly(u)} (we could write \kbd{charpoly(u, y)} to tell GP to
                   1930: use the variable \kbd{y} for the characteristic polynomial). Note that this
                   1931: gives the characteristic polynomial of \kbd{u}, and not in general the
                   1932: minimal polynomial. Exercises: how does one (easily) find the minimal
                   1933: polynomial from this? Find a simpler expression for \kbd{u}.\smallskip
                   1934:
                   1935:   OK, now let's work on the field itself. The \kbd{nfinit} command already
                   1936: gave us some information. The field is totally complex (its signature
                   1937: \kbd{nf.sign} is $[0,2]$), its discriminant \kbd{nf.disc} is $D=18981$ and
                   1938: $(1,\alpha, \alpha^2, {1\over7}\alpha^3+{2\over7}\alpha^2+{6\over7}\alpha)$
                   1939: is an integral basis (\kbd{nf.zk}). The Galois group of its Galois closure
                   1940: can be obtained by typing \kbd{polgalois(A)}. The answer ($[8,-1,1]$) shows
                   1941: that it is equal to $D_4$, the dihedral group with 8 elements, i.e.~the group
                   1942: of symmetries of a square. \smallskip
                   1943:
                   1944: This implies that the field is ``partially Galois'', i.e.~that there exists
                   1945: at least one non-trivial field isomorphism which fixes $K$ (exactly one in
                   1946: this case). To find out which it is, we use the function \kbd{nfgaloisconj}.
                   1947: This uses the LLL algorithm to find linear relations. So type
                   1948: \kbd{nfgaloisconj(nf)}. The result tells us that, apart from the trivial
                   1949: automorphism, the map $\alpha \mapsto (-\alpha^3+5\alpha^2+\alpha-49)/7$ (in
                   1950: the third component) is a field automorphism. Indeed, if we type
                   1951: \kbd{s = Mod(\%[3], A); charpoly(s)}, we obtain the polynomial \kbd{A} once
                   1952: again. \smallskip
                   1953:
                   1954: The fixed field of this automorphism is going to be the only non-trivial
                   1955: subfield of $K$. I seem to recall that \kbd{polred} told us this was the
                   1956: third cyclotomic field. Let's check this: type \kbd{nfsubfields(nf)}. Indeed,
                   1957: there's a quadratic subfield, but it's given by \kbd{Q = x\pow 2 + 22*x + 133
                   1958: } and I don't recognize it. Now \kbd{polred(Q)} proves that this subfield is
                   1959: indeed the field generated by a cube root of unity. Let's check that \kbd{s}
                   1960: is of order 2: \kbd{subst(lift(s), x, s)}. Yup, it is. Let's express it as a
                   1961: matrix:
                   1962: \bprog
                   1963: {
                   1964:   v = [;]; b = nf.zk;
                   1965:   for (i=1, 4,
                   1966:     v = concat(v, nfalgtobasis(nf, nfgaloisapply(nf, s, b[i])))
                   1967:   )
                   1968: }
                   1969: @eprog
                   1970:
                   1971: \kbd{v} gives the action of \kbd{s} on the integral basis. Let's check
                   1972: \kbd{v\pow2}. That's the identity all right. \kbd{k = matker(v-1)} is indeed
                   1973: two-dimensional, and \kbd{z = nfbasistoalg(nf, k[,2])} generates the
                   1974: quadratic subfield. Notice that 1, \kbd{z} and \kbd{u} are $\Q$-linearly
                   1975: dependent (and in fact $\Z$-linearly as well). Exercise: how would you check
                   1976: these two assertions in general? (Answer: \kbd{concat}, then respectively
                   1977: \kbd{matrank} or \kbd{matkerint} (or \kbd{qflll})). \kbd{z = charpoly(z)},
                   1978: \kbd{z = gcd(z,z')} and \kbd{polred(z)} tell us that we found back the same
                   1979: subfield again (as we ought to!).
                   1980:
                   1981: As a final check, type \kbd{nfrootsof1(nf)}. Again we find that $K$ contains
                   1982: a cube root of unity, since the torsion subgroup of its unit group
                   1983: is of order 6. And the given generator happens to be equal to \kbd{u} (so if
                   1984: you did not do the above exercise as you should have, you now know the answer
                   1985: anyway).
                   1986: \smallskip
                   1987:
                   1988: \noindent{\bf Additional comment} (you're not supposed to skip this anymore,
                   1989: but do as you wish):
                   1990:
                   1991: Before working with ideals, let us note one more thing. The main part of the
                   1992: work of \kbd{polred} or \kbd{nfinit} is to compute an integral basis, i.e.~a
                   1993: $\Z$-basis of the maximal order $\Z_K$ of $K$. For a large polynomial, this
                   1994: implies factoring the discriminant of the polynomial, which is very often out
                   1995: of the question. There are two ways in which the situation may be improved:
                   1996:
                   1997: 1) First, it is often the case that the polynomial that one considers is of
                   1998: quite a special type, giving some information on the discriminant. For
                   1999: example, one may know in advance that the discriminant is a square. Hence we
                   2000: can ``help'' PARI by giving it that information. More precisely, using the
                   2001: extra information that we have we may be able to factor the discriminant of
                   2002: the polynomial. We can then use the function \kbd{addprimes} to inform
                   2003: PARI of this factorization. Namely, add the primes which are known to
                   2004: divide the discriminant; this will save PARI some work. Do it only for big
                   2005: primes (bigger than \kbd{primelimit}, whose value you can get using
                   2006: \kbd{default})~--- it will be useless otherwise.
                   2007:
                   2008: 2) The second way in which the situation may be improved is that often we do
                   2009: not need the complete information on the maximal order, but only require that
                   2010: the order be $p$-maximal for a certain number of primes $p$ (but then, we
                   2011: may not be able to use the functions which require a genuine \kbd{nf}). The
                   2012: function \kbd{nfbasis} specifically computes the integral basis and is not
                   2013: much quicker than \kbd{nfinit} so is not very useful in its standard use. But
                   2014: you can provide a factorization of the discriminant as an optional third
                   2015: argument. And here we can cheat, and give on purpose an incomplete
                   2016: factorization involving only the primes we want. For example coming
                   2017: back to our initial polynomial $T$, the discriminant of the polynomial is
                   2018: $3^7\cdot7^6\cdot19\cdot37$. If we only want a $7$-maximal order, we simply
                   2019: type
                   2020:
                   2021: \centerline{\tt nfbasis(T, ,[7,6; 1537461,1])}
                   2022:
                   2023: \noindent and the factors of 1537461 will not be looked at! (of course in
                   2024: this example it would be stupid to cheat, but if the discriminant has 2000
                   2025: digits, this can be a handy trick).\medskip
                   2026:
                   2027: We now would like to work with ideals (and even with ideles) and not only
                   2028: with elements. An ideal can be represented in many different ways. First, an
                   2029: element of the field (in any of the various guises seen above) will be
                   2030: considered as a principal ideal. Then the standard representation is a
                   2031: square matrix giving the Hermite Normal Form of a $\Z$-basis of the ideal
                   2032: expressed on the integral basis. Standard means that most ideal related
                   2033: functions will use this representation for their output. Note that, as
                   2034: mentioned before, we always represent elements on the integral basis and not
                   2035: on a power basis.
                   2036:
                   2037: Prime ideals can be represented in a special form as well (see the
                   2038: description of \kbd{idealprimedec} in Chapter~3) and all ideal-related
                   2039: functions will accept them. On the other hand, the function \kbd{idealtwoelt}
                   2040: can be used to find a two-element $\Z_K$-basis of a given ideal (as $a\Z_K +
                   2041: b\Z_K$, where $a$ and $b$ belong to $K$), but this is {\it not} a valid
                   2042: representation for an ideal under GP, and most functions will choke on it (or
                   2043: worse, take it for something else and output a completely meaningless
                   2044: result). To be able to use such an ideal, you will first have to convert it
                   2045: to HNF form.
                   2046:
                   2047: Whereas it's very easy to go to HNF form (use \kbd{idealhnf(nf,id)} for valid
                   2048: ideals, or \kbd{idealhnf(nf,a,b)} for a two-element representation as above),
                   2049: it's a much more complicated problem to check whether an ideal is principal
                   2050: and find a generator. In fact an \kbd{nf} does not contain enough data for
                   2051: this particular task. We'll need a Big Number Field (or \kbd{bnf}) for that
                   2052: (in particular, we need the class group and fundamental units). More on this
                   2053: later.\smallskip
                   2054:
                   2055:  An ``idele'' will be represented as a 2-element vector, the first element
                   2056: being the corresponding ideal (in any valid form), which summarizes the
                   2057: non-archimedean information, and the second element a vector of real and
                   2058: complex numbers with $r_1+r_2$ components, the first $r_1$ being real, the
                   2059: remaining ones complex. In fact, to avoid certain ambiguities, the first
                   2060: $r_1$ components are allowed to have an imaginary part which is a multiple of
                   2061: $\pi$. These $r_1+r_2$ components correspond to the Archimedean places of the
                   2062: number field $K$. \medskip
                   2063:
                   2064: Let us keep our number field $K$ as above, and hence the vector \kbd{nf}. Type
                   2065:
                   2066: \centerline{\tt P = idealprimedec(nf,7)}
                   2067:
                   2068: This gives the decomposition of the prime number 7 into prime ideals. We have
                   2069: chosen 7 because it is the index of $\Z[\theta]$ in $\Z_K$, hence is the most
                   2070: difficult case to treat. The index is given in \kbd{nf[4]} and cannot be
                   2071: accessed through member functions since it's rarely needed. It is in any case
                   2072: trivial to compute as \kbd{sqrtint(poldisc(nf.pol) / nf.disc)}.
                   2073:
                   2074: The result is a vector with 4 components, showing that 7 is totally split in
                   2075: the field $K$ into four prime ideals of norm 7 (you can check:
                   2076: \kbd{idealnorm(nf,P[1])}). Let us take one of these ideals, say the first, so
                   2077: type \kbd{pr = P[1]}. We would like to have the Hermite Normal Form of this
                   2078: ideal. No problem: since ideal multiplication always gives the result in HNF,
                   2079: we will simply multiply our prime ideal by $\Z_K$, which is represented by the
                   2080: identity matrix. So type
                   2081:
                   2082: \centerline{\tt idealmul(nf, matid(4), pr)}
                   2083:
                   2084: \noindent or in fact simply
                   2085:
                   2086: \centerline{\tt idealmul(nf, 1, pr)}
                   2087:
                   2088: \noindent or even simpler yet
                   2089:
                   2090: \centerline{\tt idealhnf(nf,pr)}
                   2091:
                   2092: \noindent and we have the desired HNF. Let's now perform ideal operations.
                   2093: For example type
                   2094:
                   2095: \centerline{\tt idealmul(nf, pr, idealmul(nf, pr,pr))}
                   2096:
                   2097: \noindent or more simply
                   2098:
                   2099: \centerline{\tt pr3 = idealpow(nf, pr,3)}
                   2100:
                   2101: \noindent to get the cube of the ideal \kbd{pr}. Since the norm of this ideal
                   2102: is equal to $343=7^3$, to check that it is really the cube of \kbd{pr} and
                   2103: not of other ideals above 7, we can type
                   2104:
                   2105: \centerline{\tt for(i=1,4, print(idealval(nf, pr3,P[i])))}
                   2106:
                   2107: \noindent and we see that the valuation at \kbd{pr} is equal to 3, while the
                   2108: others are equal to zero. We could see this as well from
                   2109: \kbd{idealfactor(nf, pr3)}.
                   2110:
                   2111: Let us now ``idelize'' \kbd{pr3} by typing \kbd{id3 = [pr3, [0,0]]}.
                   2112: (We need $r_1+r_2=2$ components for the second vector.) Then type
                   2113: \kbd{r1 = idealred(nf, id3)}. We get a new ideal which is equivalent to the
                   2114: first (modulo the principal ideals). The Archimedean component is non-trivial
                   2115: and gives the distance from the reduced ideal to the original one (see H. Cohen
                   2116: {\it A Course in Computational Algebraic Number Theory}, GTM {\bf 138} for
                   2117: details, especially Sections 5.8.4 and 6.5). Now, just for fun type
                   2118:
                   2119: \centerline{\tt r = r1; for(i=1,3, r = idealred(nf,r,[1,5]); print(r))}
                   2120:
                   2121: We see that the third \kbd{r} is equal to the initial \kbd{r1}. This means
                   2122: that we have found a unit in our field, and it is easy to extract this unit
                   2123: given the Archimedean information (clearly it would be impossible without).
                   2124: We first form the difference of the Archimedean contributions of \kbd{r} and
                   2125: \kbd{r1} by typing
                   2126:
                   2127: \centerline{\tt arch = r[2] - r1[2]; l1 = arch[1]; l2 = arch[2];}
                   2128:
                   2129: From this, we obtain the logarithmic embedding of the unit by typing
                   2130:
                   2131: \centerline{\tt l = real(l1 + l2) / 4;
                   2132:                 v1 = [l1,l2,conj(l1),conj(l2)]\til / 2 - [l,l,l,l]\til; }
                   2133:
                   2134: This 4-component vector contains by definition the logarithms of the
                   2135: four complex embeddings of the unit. Since the matrix \kbd{nf[5][1]}
                   2136: contains the values of the $r_1+r_2$ embeddings of the elements of the
                   2137: integral basis, we can obtain the representation of the unit on the
                   2138: integral basis by typing
                   2139: \bprog
                   2140: {
                   2141:   m1 = nf[5][1];
                   2142:   m = matrix(4,4,j,k,
                   2143:     if (j<=2,
                   2144:       m1[j,k]
                   2145:     ,
                   2146:       conj(m1[j-2, k])
                   2147:     )
                   2148:   );
                   2149:   v = exp(v1);
                   2150:   au = matsolve(m,v);
                   2151:   vu = round(real(au))
                   2152: }
                   2153: @eprog
                   2154:
                   2155: Then \kbd{vu} is the representation of the unit on the integral basis.
                   2156: The closeness of the approximation of \kbd{au} to \kbd{vu} gives us
                   2157: confidence that we have made no numerical mistake. To be sure that \kbd{vu}
                   2158: represents a unit, type \kbd{u = nfbasistoalg(nf,vu)}, then typing
                   2159: \kbd{norm(u)} we see that it is equal to 1 so \kbd{u} is a unit.
                   2160:
                   2161: There is of course no reason for \kbd{u} to be a fundamental unit. Let us see
                   2162: if it is a square. Type \kbd{f1 = factor(subst(charpoly(u,x), x, x\pow 2))}.
                   2163: We see that the characteristic polynomial of \kbd{u} where \kbd{x} is
                   2164: replaced by \kbd{x\pow 2} is a product of 2 polynomials of degree 4, hence
                   2165: \kbd{u} is a square (Exercise: why?).
                   2166:
                   2167: We now want to find the square root of \kbd{u}. We can again use the
                   2168: \kbd{matsolve} function as above. For this we need to take the square
                   2169: root of each element of the vector \kbd{v}, and hence there are
                   2170: sign ambiguities. Let's do it anyway. Type \kbd{v = sqrt(v)}. We see that
                   2171: \kbd{v[1]} and \kbd{v[3]} are conjugates, as well as \kbd{v[2]} and \kbd{v[4]},
                   2172: so for the moment the signs seem OK. Now try \kbd{au = matsolve(m,v)}. The
                   2173: numbers obtained are clearly not integers, hence the last remaining sign
                   2174: change must be performed. Type \kbd{v[1] = -v[1]; v[3] = -v[3]} (they must
                   2175: stay conjugate) and then again \kbd{au = matsolve(m,v)}. This time the
                   2176: components are close to integers, so we are done (after typing
                   2177: \kbd{vu = round(real(au))} as before).
                   2178:
                   2179: Anyway, we find that a square root \kbd{u2} of \kbd{-u} is represented by
                   2180: the vector \kbd{vu=[-4,1,1,-1]\til} on the integral basis, and this is in
                   2181: fact a fundamental unit.\medskip
                   2182:
                   2183: The function \kbd{polred} gives us another method to find \kbd{u2} as
                   2184: follows: type \kbd{q = polred(f1[1,1], 2)}. We recognize the polynomial
                   2185: \kbd{A} as the component \kbd{q[3,2]}. To obtain the square root of our unit
                   2186: we then simply type \kbd{up2 = modreverse(Mod(q[3,1], f1[1,1]))}
                   2187: (Exercise: why?). We find that \kbd{up2} is represented by the vector
                   2188: \kbd{[-3,-1,0,0]\til} on the integral basis, which is not the result that we
                   2189: have found before nor its opposite. Where is the error? (Please think about
                   2190: this before reading on. There is a mathematical subtlety hidden here.)
                   2191:
                   2192: Have you solved the problem? Good! The problem occurs because as mentioned
                   2193: before (but you may not have noticed since it is not stressed in standard
                   2194: textbooks) although the number field $K$ is not Galois over $\Q$, there does
                   2195: exist a non-trivial automorphism, and we have found it above by using the
                   2196: function \kbd{nfgaloisconj}. Indeed, if we apply this automorphism to
                   2197: \kbd{up2} (by typing \kbd{nfgaloisapply(nf,s,up2)} where \kbd{s} is the
                   2198: non-trivial component of \kbd{nfgaloisconj(nf)} computed above), we find the
                   2199: opposite of \kbd{u2}, which is OK. \smallskip
                   2200:
                   2201: Still another method which avoids all sign ambiguities and automorphism
                   2202: problems is as follows. Type \kbd{r = f1[1,1] \% (x\pow 2 - u)} to find the
                   2203: remainder of the characteristic polynomial of \kbd{u2} divided by
                   2204: \kbd{x\pow 2 - u}. This will be a polynomial of degree 1 in \kbd{x} (with
                   2205: polmod coefficients) and we know that \kbd{u2}, being a root of both
                   2206: polynomials, will be the root of \kbd{r}, hence can be obtained by typing
                   2207: \kbd{u2 = -coeff(r,0) / coeff(r,1)}. Indeed, we immediately find the correct
                   2208: result with no trial and error.\smallskip
                   2209:
                   2210:   Still another method to find the square root of \kbd{u} is to use
                   2211: \kbd{nffactor(nf,y\pow 2 + u)}. Except that this won't work as is since the
                   2212: main variable of the polynomial to be factored must have {\it higher}
                   2213: priority than the number field variable. This won't be possible here since
                   2214: \kbd{nf} was defined using the variable \kbd{x} which has the highest possible
                   2215: priority. So we need to substitute variables around (using \kbd{subst}). I
                   2216: leave you to work out the details.\smallskip
                   2217:
                   2218: Now ideals can be used in a wide variety of formats. We have already seen
                   2219: HNF-representations, ideles and prime ideals. We can also use algebraic
                   2220: numbers. For example type \kbd{al = Mod(x\pow 2 - 9, A)}, then
                   2221: \kbd{ideleprincipal(nf,al)}. We obtain the idele corresponding to \kbd{al}
                   2222: (see the manual for the exact description). However it is usually not
                   2223: necessary to compute this explicitly since this is done automatically inside
                   2224: PARI. For example, you can type
                   2225:
                   2226: \centerline{\tt for(i=1,4, print(i ": " idealval(nf,al,P[i])))}
                   2227:
                   2228: We see that the valuation is non-zero (equal to 1) at the prime ideals
                   2229: \kbd{P[2]} and \kbd{P[3]}. In addition, typing \kbd{norm(al)} shows that
                   2230: \kbd{al} is of norm $49=7^2$ (\kbd{idealnorm(nf,al)} gives the same result of
                   2231: course, and would be more generic). Let's check this differently. Type
                   2232: \kbd{P23 = idealmul(nf,P[2],P[3])} and then \kbd{idealhnf(nf,al)}. We see that
                   2233: the results are the same, hence the product of the two prime ideals \kbd{P[2]}
                   2234: and \kbd{P[3]} is equal to the principal ideal generated by \kbd{al}. There is
                   2235: still something to be done with this example as we shall see below after we
                   2236: introduce Big Number Fields (which will trivialize the examples we have just
                   2237: seen).
                   2238:
                   2239: Essentially all functions that you would want on ideals are available.
                   2240: We mention here the complete list, referring to Chapter 3 for detailed
                   2241: explanations:
                   2242:
                   2243: \kbd{idealadd}, \kbd{idealaddtoone}, \kbd{idealappr}, \kbd{idealchinese},
                   2244: \kbd{idealcoprime}, \kbd{idealdiv}, \kbd{idealfactor}, \kbd{idealhnf},
                   2245: \kbd{idealintersect}, \kbd{idealinv}, \kbd{ideallist}, \kbd{ideallog},
                   2246: \kbd{idealmin}, \kbd{idealmul}, \kbd{idealnorm}, \kbd{idealpow},
                   2247: \kbd{idealprimedec}, \kbd{idealprincipal}, \kbd{idealred},
                   2248: \kbd{idealstar}, \kbd{idealtwoelt}, \kbd{idealval}, \kbd{ideleprincipal},
                   2249: \kbd{nfisideal}.
                   2250:
                   2251: We suggest you play with these functions to get a feel for the algebraic
                   2252: number theory package. Remember simply that when a matrix (usually in Hermite
                   2253: normal form) is output, it is always a $\Z$-basis of the result expressed on
                   2254: the {\it integral basis} \kbd{nf.zk} of the number field, which is usually
                   2255: {\it not} a power basis. \medskip
                   2256:
                   2257: Apart from the above functions you have at your disposal the very powerful
                   2258: functions \kbd{bnfclassunit} which is of the same type as \kbd{quadclassunit}
                   2259: seen above, but for general number fields, and hence much slower. See Chapter
                   2260: 3 for a detailed explanation of its use.
                   2261:
                   2262: First type \kbd{setrand(1)}: this resets the random seed (to make sure we get
                   2263: the exact same results). Now type \kbd{m = bnfclassunit(A)}, where \kbd{A} is
                   2264: the same polynomial as before. After some work, we get a matrix with one
                   2265: column, which does not look too horrible (this is because much of the really
                   2266: useful information has been discarded, this is not an \kbd{init} function).
                   2267: Let's extract the column with \kbd{v = m[,1]}.
                   2268:
                   2269: Then \kbd{v} is a vector with 10 components. We immediately recognize the first
                   2270: component as being the polynomial \kbd{A} once again. In fact member
                   2271: functions are still available for \kbd{m}, even though it was not created
                   2272: by an \kbd{init} function. So, let's try them: \kbd{m.pol} gives \kbd{A},
                   2273: \kbd{m.sign}, \kbd{m.disc}, \kbd{m.zk}, ok nothing really exciting. But new
                   2274: ones are available now: \kbd{m.no} tells us the class number is 4,
                   2275: \kbd{m.cyc} that it's cyclic (of order 4 but that we already knew),
                   2276: \kbd{m.gen} that it's generated by a prime ideal above seven (in HNF form). If
                   2277: you play a little bit with the \kbd{idealhnf} function you see that this ideal
                   2278: is \kbd{P[4]}.
                   2279:
                   2280:  The regulator \kbd{m.reg} is equal to $3.794\dots$. \kbd{m.tu} tells us that
                   2281: the roots of unity in $K$ are exactly the sixth roots of 1 and gives a
                   2282: primitive root. Finally \kbd{m.fu} gives us a fundamental unit (which must be
                   2283: linked to the unit \kbd{u2} found above since the unit rank is 1).
                   2284:
                   2285: To find the relation (without trial and error, because in this case it is
                   2286: quite easy to see it directly!), let us use the logarithmic embeddings. Type
                   2287: \kbd{uf = m.fu[1]}, \kbd{uu= m.tu[2]} to get the generators of the unit
                   2288: group, then
                   2289: \bprog
                   2290: cu2 = log(conjvec(u2));
                   2291: cuf = log(conjvec(Mod(uf,A)));
                   2292: cuu = log(conjvec(Mod(uu,A)));
                   2293: @eprog\noindent
                   2294: to get the (complex) logarithmic embeddings. Then type
                   2295:
                   2296: \kbd{lindep(real([cu2[1], cuf[1], cuu[1]]))}
                   2297:
                   2298: \noindent to find a linear dependence. Unfortunately, the result $[0,0,1]$ is
                   2299: to be expected since \kbd{uu} is a root of unity, hence the components of
                   2300: \kbd{cuu} are pure imaginary. Hence we must not take the real part. However,
                   2301: in that case the logs are defined only up to a multiple of $2i\pi$. Hence we
                   2302: type
                   2303:
                   2304: \kbd{lindep([cu2[1], cuf[1], cuu[1], 2*I*Pi])}
                   2305:
                   2306: The result $[1,-1,-3,0]$ shows that \kbd{u2} is probably equal to
                   2307: \kbd{uf * uu\pow 3}, which is clear since \kbd{uu} is a sixth root of unity,
                   2308: and which can be checked directly. This works quite nicely, but we'll see
                   2309: later on a much better method.
                   2310:
                   2311: {\bf Note:} since the fundamental unit obtained depends on the random
                   2312: seed, you could have obtained a different unit from the one given here, had
                   2313: you not reset the random seed before the computation. This was the purpose
                   2314: of the initial \kbd{setrand} instruction (which was otherwise completely
                   2315: unnecessary of course). \medskip
                   2316:
                   2317: If you followed closely what component of \kbd{m} the various member
                   2318: functions were giving (after possibly some cosmetic change), you must have
                   2319: noticed that the seventh and tenth components were not given. You may ignore
                   2320: the last component of \kbd{v} (it gives the accuracy to which the fundamental
                   2321: unit was computed).  The seventh is a technical check number, which must be
                   2322: close to 1 (between $1/\sqrt2$ and $\sqrt2$ at the very least). This tells
                   2323: us, under LOTS of assumptions (notably the Generalized Riemann Hypothesis),
                   2324: that our result is correct (i.e.~neither the class group nor the regulator are
                   2325: smaller). We'll see shortly how to remove all those assumptions: we need much
                   2326: more data than was output here. This is a little wasteful since the missing
                   2327: data {\it were} computed, then discarded to provide a human-readable output.
                   2328: Thus you will usually not use this function, but its \kbd{init} variant:
                   2329: \kbd{bnfinit}.
                   2330: \smallskip
                   2331:
                   2332: So type: \kbd{setrand(1); bnf = bnfinit(A);}
                   2333:
                   2334: This performs exactly the same computations as \kbd{bnfclassunit}, but keeps
                   2335: much more information. In particular, you don't {\it want} to see the result,
                   2336: whence the semicolon (if you really want to, you can have a look, it's only
                   2337: about three screenful). All the member functions that we used previously
                   2338: still apply to this \kbd{bnf} object. In fact, \kbd{bnfinit} even recomputed
                   2339: the information provided by \kbd{nfinit} (we could have typed
                   2340: \kbd{bnfinit(NF)} to avoid the waste), and it's included in the \kbd{bnf}
                   2341: structure: \kbd{bnf.nf} should be exactly identical to \kbd{NF}. Thus, all
                   2342: functions which took an \kbd{nf} as first argument, will equally accept a
                   2343: \kbd{bnf} (and a \kbd{bnr} as well which contains even more data).
                   2344:
                   2345: We are now ready to perform more sophisticated operations in the class group.
                   2346: First and foremost, we can now certify the result: type
                   2347: \kbd{bnfcertify(bnf)}. The output (\kbd{1} if all went well) is not that
                   2348: impressive, but it means that we now know the class group and fundamental
                   2349: units unconditionally (in particular, the GRH assumption could be removed)!
                   2350: In this case, the certification process takes a very short time, and you
                   2351: might wonder why it was not built in as a final check in the \kbd{bnfinit}
                   2352: function. The answer is that as the regulator gets bigger this process gets
                   2353: increasingly difficult, and becomes soon impractical, while \kbd{bnfinit}
                   2354: still happily spits out results. So it makes sense to dissociate the two: you
                   2355: can always make the check afterwards, if the result is interesting enough
                   2356: (and looking at the tentative regulator, you know in advance whether the
                   2357: certification can possibly succeed: if \kbd{bnf.reg} is about 2000, don't
                   2358: waste your time).
                   2359:
                   2360: Ok, now that we feel safe about the \kbd{bnf} output, let's do some real
                   2361: work. For example, let us take again our prime ideal \kbd{pr} above 7. Since
                   2362: we know that the class group is of order 4, we deduce that \kbd{pr} raised to
                   2363: the fourth power must be principal. Type \kbd{pr4 = idealpow(nf, pr, 4)} then
                   2364: \kbd{vis = bnfisprincipal(bnf,pr4)}. The function \kbd{bnfisprincipal} now
                   2365: uses all the information contained in \kbd{bnf} and tells us that indeed
                   2366: \kbd{pr4} is principal. More precisely, the first component, \kbd{[0]}, gives
                   2367: us the factorization of the ideal in the class group. Here, \kbd{[0]} means
                   2368: that it is up to equivalence equal to the 0-th power of the generator given
                   2369: in \kbd{bnf.gen}, in other words that it is a principal ideal.
                   2370:
                   2371: The second component gives us the algebraic number $\alpha$ such that
                   2372: \kbd{pr4$=\alpha\Z_K$}, where $\Z_K$ is the ring of integers of our number
                   2373: field, $\alpha$ being as usual expressed on the integral basis. To get $\alpha$
                   2374: as an algebraic number, we type \kbd{alpha = nfbasistoalg(bnf,vis[2])} (note
                   2375: that we can use a \kbd{bnf} with all the \kbd{nf} functions; but not the other
                   2376: way round, of course).
                   2377:
                   2378: Let us check that the result is correct: first, type \kbd{norm(alpha)}
                   2379: (\kbd{idealnorm(nf, vis[2])} would have worked directly). It is indeed equal to
                   2380: $7^4 = 2401$, which is the norm of \kbd{pr4} (it could also have been equal to
                   2381: $-2401$). This is only a first check. The complete check is obtained by
                   2382: computing the HNF of the principal ideal generated by \kbd{alpha}. To do this,
                   2383: type \kbd{idealhnf(nf,alpha)}.
                   2384:
                   2385: The result that we obtain is identical to \kbd{pr4}, thus showing that
                   2386: \kbd{alpha} is correct (not that there was any doubt!). You may ignore the
                   2387: third component of \kbd{vis} which just tells us that the accuracy to which
                   2388: \kbd{alpha} was computed was amply sufficient.
                   2389:
                   2390: But \kbd{bnfisprincipal} also gives us information for non-principal ideals.
                   2391: For example, type
                   2392:
                   2393: \kbd{vit = bnfisprincipal(bnf, pr)}.
                   2394:
                   2395: The component \kbd{vit[1]} is now equal to $[3]$, and tells us that \kbd{pr}
                   2396: is ideal-equivalent to the cube of the generator \kbd{g} given by
                   2397: \kbd{bnfinit}. Of course we already knew this since the product of \kbd{P[2]}
                   2398: and \kbd{P[3]} was principal, as well as the product of all the \kbd{P[$i$]}
                   2399: (generated by 7), and we noticed that \kbd{P[4]} was of order 4 when we looked
                   2400: at \kbd{bnf.gen}.
                   2401:
                   2402: The second component \kbd{vit[2]} gives us $\alpha$ on the integral basis
                   2403: such that \kbd{pr$=\alpha \kbd{g}^3$}. Note that if you {\it don't\/} want
                   2404: this $\alpha$, which may be large and whose computation may take some time,
                   2405: you can just add a flag (1 in this case, see the online help) to the
                   2406: arguments of the \kbd{bnfisprincipal} function, so that it only returns the
                   2407: position of \kbd{pr} in the class group. \smallskip
                   2408:
                   2409: Let us now take the example of the principal ideal \kbd{P23} that we have
                   2410: seen above. We know that \kbd{P23} is principal, but of course we have
                   2411: forgotten the generator that we had found, so we need another one. For this,
                   2412: we type \kbd{pp = bnfisprincipal(bnf,P23)}. The first component of the result
                   2413: is \kbd{[0]}, telling us that the ideal is indeed principal, as we knew
                   2414: already. But the second component gives us the components of a generator of
                   2415: \kbd{P23} on the integral basis. Now we remember suddenly that we already had
                   2416: a generator \kbd{al} for the same ideal. Hence type
                   2417: \kbd{u3=nfeltdiv(nf,al2,al)}. This must be a unit. It's already obviously an
                   2418: integer and \kbd{idealnorm(nf,\%)} tells us that \kbd{u3} is indeed a unit.
                   2419: You can again find out what unit it is as we did above. However, as we
                   2420: mentioned, this is not really the best method.
                   2421:
                   2422: To find the unit, we use explicitly the third component of the vector
                   2423: \kbd{bnf} given by \kbd{bnfinit}. This contains an $(r+1)\times r$ complex
                   2424: matrix whose columns represent the complex logarithmic embedding of the
                   2425: fundamental units. Here $r=r_1+r_2-1$ is the unit rank. We first compute
                   2426: the component of \kbd{u3} on the torsion-free part of the group of units
                   2427: by proceeding as follows. Type
                   2428:
                   2429: \kbd{me = concat(bnf[3],[2,2]\til)}.
                   2430:
                   2431: Indeed, this is a variant of the regulator matrix and is more practical to
                   2432: use since it is more symmetric and avoids suppressing one row arbitrarily.
                   2433: Now type
                   2434:
                   2435: \kbd{cu3 = ideleprincipal(nf,u3)[2]\til}
                   2436:
                   2437: to get the complex logarithmic embedding of \kbd{u3} (as a column vector). We
                   2438: could of course also have computed this logarithmic embeddings directly using
                   2439: \kbd{conjvec} as we did above, but then we must take care of the factors of 1
                   2440: and 2 occurring.
                   2441:
                   2442: Then type \kbd{xc = matsolve(real(me), real(cu3))}
                   2443:
                   2444: Whatever field we are in, if \kbd{u3} is a unit this {\it must} end with a 0
                   2445: (approximate of course) because of the ``spurious'' vector $[2,2]$, and the
                   2446: other components (here only one) give the exponents on the fundamental units.
                   2447: Here the only other component is the first, with a coefficient of $1$ (we
                   2448: could type \kbd{round(xc)} to tidy up the result). So we know that \kbd{u} is
                   2449: equal to \kbd{uf} multiplied by a root of unity.
                   2450:
                   2451: To find this root of unity, we type \kbd{xd = cu3 - me*xc} then
                   2452: \kbd{xu = ideleprincipal(nf,uu)[2]} and finally \kbd{xd[1] / xu[1]}. We find
                   2453: $3$ as a result, so finally our unit \kbd{u3} must be equal to
                   2454: \kbd{uu\pow 3 * uf} itself, which is the case.
                   2455:
                   2456: Of course, you don't need to do all that: just type \kbd{bnfisunit(bnf,u3)}.
                   2457: Like the \kbd{bnfisprincipal} function, this gives us the decomposition of
                   2458: some object (here a unit) on the precomputed generators (here \kbd{bnf.tufu})
                   2459: of some abelian group of finite type (here the units of $K$). The result
                   2460: \kbd{[1,Mod(3,6)]} tells us that \kbd{u3} is equal to \kbd{uu\pow 3 * uf} as
                   2461: before.\smallskip
                   2462:
                   2463: Another famous so-called {\it discrete logarithm} problem can be easily
                   2464: solved with PARI, namely the one associated to the invertible elements modulo
                   2465: an ideal: $(\Z_K / I)^*$. Just use \kbd{idealstar} (this is an \kbd{init}
                   2466: function) and \kbd{ideallog}.
                   2467:
                   2468: ----- TO BE COMPLETED -----
                   2469:
                   2470: \section{GP Programming}
                   2471:
                   2472: ----- TO BE WRITTEN -----
                   2473:
                   2474: \section{Plotting}
                   2475:
                   2476: PARI supports a multitude of high and low-level graphing functions, on a
                   2477: variety of output devices~: a special purpose window under the \kbd{X
                   2478: Windows} system, a \kbd{PostScript} file ready for the printer, or a
                   2479: \kbd{gnuplot} output device (only the first two are available by default).
                   2480: These functions use a multitude of flags, which are mostly power-of-2. To
                   2481: simplify understanding we first give these flags symbolic names.
                   2482: \bprog
                   2483: /* Generic flags: */
                   2484: parametric = 1;  no_x_axis =  8;  points       = 64;
                   2485: recursive  = 2;  no_y_axis = 16;  points_lines = 128;
                   2486: norescale  = 4;  no_frame  = 32;  splines      = 256;
                   2487:
                   2488: /* Relative positioning of graphic objects: */
                   2489: nw       = 0;  se       = 4;  relative = 1;
                   2490: sw       = 2;  ne       = 6;
                   2491:
                   2492: /* String positioning: */
                   2493: /* V */ bottom  =  0;   /* H */  left   = 0;   /* Fine tuning */ hgap = 16;
                   2494:         vcenter =  4;            center = 1;                     vgap = 32;
                   2495:         top     =  8;            right  = 2;
                   2496: @eprog
                   2497: We also decrease drastically the default precision.
                   2498: \bprog
                   2499: \p 9
                   2500: @eprog
                   2501: This is very important, since plotting involves calculation of functions at
                   2502: a huge number of points, and a relative precision of 28 significant digits
                   2503: is an obvious overkill: the output device resolution certainly won't reach
                   2504: $10^{28} \times 10^{28}$ pixels!
                   2505:
                   2506: Start with something really simple:
                   2507: \bprog
                   2508: ploth(X = -2, 2, sin(X^7))
                   2509: @eprog
                   2510:
                   2511: You can see the limitations of the ``straightforward'' mode of plotting:
                   2512: while the first several cycles of \kbd{sin} reach $-1$ and $1$, the cycles
                   2513: which are closer to the left and right border do not. This is understandable,
                   2514: since PARI is calculating $\sin(X^7)$ at many (evenly spaced) points, but
                   2515: these points have no direct relationship to the ``interesting'' points on
                   2516: the graph of this function.  No value close enough to the maxima and minima
                   2517: are calculated, which leads to wrong turning points of the graph.
                   2518:
                   2519: There is a way to fix this: one can ask PARI to use variable step which
                   2520: smaller at the points where the graph of the function is more curved:
                   2521: \bprog
                   2522:   ploth(X = -2, 2, sin(X^7),recursive)
                   2523: @eprog
                   2524:
                   2525: \noindent The precision near the edges of the graph is much better now.
                   2526: However, the recursive plotting (named so since PARI subdivides intervals
                   2527: until the graph becomes almost straight) has its own pitfalls.  Try
                   2528: \bprog
                   2529:   ploth(X = -2, 2, sin(X*7), recursive)
                   2530: @eprog
                   2531:
                   2532: \noindent Note that the graph looks correct far away, but it has a straight
                   2533: interval near the origin, and some sharp corners as well.  This happens
                   2534: because the graph is symmetric with respect to the origin, thus the middle 3
                   2535: points calculated during the initial subdivision of $[-2,2]$ are exactly on
                   2536: the same line.  To PARI this indicates that no further subdivision is needed,
                   2537: and it plots the graph on this subinterval as a straight line.
                   2538:
                   2539: There are many ways to circumvent this.  Say, one can make the right limit
                   2540: 2.1.  Or one can ask PARI for an initial subdivision into 16 points instead
                   2541: of default 15:
                   2542: \bprog
                   2543:   ploth(X = -2, 2, sin(X*7), recursive, 16)
                   2544: @eprog
                   2545:
                   2546: All these arrangements break the symmetry of the initial subdivision, thus
                   2547: make the problem go away.  Eventually PARI will be able to better detect such
                   2548: pathological cases, but currently some manual intervention may be required.
                   2549:
                   2550: Function \kbd{ploth} has some additional enhancements which allow graphing
                   2551: in situations when the calculation of the function takes a lot of time.  Let
                   2552: us plot $\zeta({1\over 2} + it)$:
                   2553: \bprog
                   2554:   ploth(t = 100, 110, real(zeta(0.5+I*t)), /*empty*/, 1000)
                   2555: @eprog
                   2556:
                   2557: \noindent This can take quite some time.  (1000 is close to the default for
                   2558: many plotting devices, we want to specify it explicitely so that the result
                   2559: do not depend on the output device.)  Try the recursive plot:
                   2560: \bprog
                   2561:   ploth(t = 100, 110, real(zeta(0.5+I*t)), recursive)
                   2562: @eprog
                   2563:
                   2564: It takes approximately the same time.  Now try specifying fewer points,
                   2565: but make PARI approximate the data by a smooth curve:
                   2566: \bprog
                   2567: ploth(t = 100, 110, real(zeta(0.5+I*t)), splines, 100)
                   2568: @eprog
                   2569:
                   2570: This takes much less time, and the output is practically the same.  How to
                   2571: compare these two outputs?  We will see it shortly.  Right now let us
                   2572: plot both real and complex parts of $\zeta$ on the same graph:
                   2573: \bprog
                   2574:   f(t) = z=zeta(0.5+I*t); [real(z),imag(z)]
                   2575:   ploth(t = 100, 110, f(t), , 1000)
                   2576: @eprog
                   2577:
                   2578: Note how one half of the roots of the real and imaginary parts coincide.
                   2579: Why did we define a function \kbd{f(t)}?  To avoid calculation of
                   2580: $\zeta({1\over2} + it)$ twice for the same value of t.  Similarly, we can
                   2581: plot parametric graphs:
                   2582: \bprog
                   2583:   ploth(t = 100, 110, f(t), parametric, 1000)
                   2584: @eprog
                   2585:
                   2586: Again, one can speed up the calculation with
                   2587: \bprog
                   2588:   ploth(t = 100, 110, f(t), parametric+splines, 100)
                   2589: @eprog
                   2590:
                   2591: If your plotting device supports it, you may ask PARI to show the points
                   2592: in which it calculated your function:
                   2593: \bprog
                   2594:   ploth(t = 100, 110, f(t), parametric+splines+points_lines, 100)
                   2595: @eprog
                   2596:
                   2597: As you can see, the points are very dense on the graph.  To see some crude
                   2598: graph, one can even decrease the number of points to 30.  However, if you
                   2599: decrease the number of points to 20, you can see that the approximation to
                   2600: the graph now misses zero.  Using splines, one can create reasonable graphs
                   2601: for larger values of t, say with
                   2602: \bprog
                   2603:   ploth(t = 10000, 10004, f(t), parametric+splines+points_lines, 50)
                   2604: @eprog
                   2605:
                   2606: How can we compare two graphs of the same function plotted by different
                   2607: methods?  Documentation shows that \kbd{ploth} does not provide any direct
                   2608: method to do so.  However, it is possible, and even not very complicated.
                   2609:
                   2610: The solution comes from the other direction.  PARI has a power mix of high
                   2611: level plotting function with low level plotting functions, and these functions
                   2612: can be combined together to obtain many different effects.  Return back
                   2613: to the graph of $\sin(X^7)$.  Suppose we want to create an additional
                   2614: rectangular frame around our graph.  No problem!
                   2615:
                   2616: First, all low-level graphing work takes place in some virtual drawing
                   2617: boards (numbered from 0 to 15), called ``rectangles'' (or ``rectwindows'').
                   2618: So we create an empty ``rectangle'' and name it rectangle 2 (any
                   2619: number between 0 and 15 would do):
                   2620: \bprog
                   2621: plotinit(2)
                   2622: plotscale(2, 0,1, 0,1)
                   2623: @eprog
                   2624: This creates a rectwindow whose size exactly fits the size of the output
                   2625: device, and makes the coordinate system inside it go from 0 to 1 (for both
                   2626: $x$ and $y$). Create a rectangular frame along the boundary of this rectangle:
                   2627: \bprog
                   2628: plotmove(2, 0,0)
                   2629: plotbox(2, 1,1)
                   2630: @eprog
                   2631: Suppose we want to draw the graph inside a subrectangle of this with upper
                   2632: and left margins of $0.10$ (so 10\% of the full rectwindow width), and
                   2633: lower and top margins of $0.02$, just to make it more interesting. That
                   2634: makes it an $0.88 \times 0.88$ subrectangle; so we create another rectangle
                   2635: (call it 3) of linear size 0.88 of the size of the initial rectangle and
                   2636: graph the function in there:
                   2637: \bprog
                   2638: plotinit(3, 0.88, 0.88, relative)
                   2639: plotrecth(3, X = -2, 2, sin(X^7), recursive)
                   2640: @eprog
                   2641: (nothing is output yet, these commands only fills the virtual drawing
                   2642: boards with PARI graphic objects). Finally, output rectangles 2 and 3 on
                   2643: the same plot, with the required offets (counted from upper-left corner):
                   2644: \bprog
                   2645: plotdraw([2, 0,0,  3, 0.1,0.02], relative)
                   2646: @eprog
                   2647: \noindent The output misses something comparing to the output of
                   2648: \kbd{ploth}: there are no coordinates of the corners of the internal
                   2649: rectangle.  If your output device supports mouse operations (only
                   2650: \kbd{gnuplot} does), you can find coordinates of particular points of the
                   2651: graph, but it is nice to have something printed on a hardcopy too.
                   2652:
                   2653: However, it is easy to put $x$- and $y$-limits on the graph.  In the
                   2654: coordinate system of the rectangle 2 the corners are $(0.1,0.1)$,
                   2655: $(0.1,0.98)$, $(0.98,0.1)$, $(0.98,0.98)$.  We can mark lower $x$-limit by
                   2656: doing
                   2657: \bprog
                   2658: plotmove(2, 0.1,0.1)
                   2659: plotstring(2, "-2.000", left+top+vgap)
                   2660: @eprog\noindent
                   2661: Computing the minimal and maximal $y$-coordinates might be trickier, since
                   2662: in principle we do not know the range in advance (though for $\sin X^7$ it
                   2663: is quite easy to guess!). Fortunately, \kbd{plotrecth} returns the $x$- and
                   2664: $y$-limits.
                   2665:
                   2666: Here is the complete program:
                   2667: \bprog
                   2668: plotinit(3, 0.88, 0.88, relative)
                   2669: lims = plotrecth(3, X = -2, 2, sin(X^7), recursive)
                   2670: \p 3          \\ @com $3$ significant digits for the bounding box are enough
                   2671: limits = vector(4,i, Str(lims[i]))
                   2672: plotinit(2);      plotscale(2, 0,1, 0,1)
                   2673: plotmove(2, 0,0); plotbox(2, 1,1)
                   2674: plotmove(2, 0.1,0.1);
                   2675: plotstring(2, limits[1], left+top+vgap)
                   2676: plotstring(2, limits[3], bottom+vgap+right+hgap)
                   2677: plotmove(2, 0.98,0.1); plotstring(2, limits[2], right+top+vgap)
                   2678: plotmove(2, 0.1,0.98); plotstring(2, limits[4], right+hgap+top)
                   2679: plotdraw([2, 0,0,  3, 0.1,0.02], relative)
                   2680: @eprog
                   2681:
                   2682: We started with a trivial requirement: have an additional frame around
                   2683: the graph, and it took some effort to do so.  But at least it was possible,
                   2684: and PARI did the hardest part: creating the actual graph.
                   2685: Now do a different thing: plot together the ``exact'' graph of
                   2686: $\zeta({1/2}+it)$ together with one obtained from splines approximation.
                   2687: We can emit these graphs into two rectangles, say 0 and 1, then put these
                   2688: two rectangles together on one plot.  Or we can emit these graphs into one
                   2689: rectangle 0.
                   2690:
                   2691: However, a problem arises: note how we
                   2692: introduced a coordinate system in rectangle 2 of the above example, but we
                   2693: did not introduce a coordinate system in rectangle 3.  Plotting a
                   2694: graph into rectangle 3 automatically created a coordinate system
                   2695: inside this rectangle (you could see this coordinate system in action
                   2696: if your output device supports mouse operations).  If we use two different
                   2697: methods of graphing, the bounding boxes of the graphs will not be exactly
                   2698: the same, thus outputting the rectangles may be tricky.  Thus during
                   2699: the second plotting we ask \kbd{plotrecth} to use the coordinate system of
                   2700: the first plotting.  Let us add another plotting with fewer
                   2701: points too:
                   2702: \bprog
                   2703: plotinit(0, 0.9,0.9, relative)
                   2704: plotrecth(0, t=100,110, f(t), parametric, 300)
                   2705: plotrecth(0, t=100,110, f(t), parametric+splines+points_lines+norescale, 30);
                   2706: plotrecth(0, t=100,110, f(t), parametric+splines+points_lines+norescale, 20);
                   2707: plotdraw([0, 0.05,0.05], relative)
                   2708: @eprog
                   2709:
                   2710: This achieves what we wanted: we may compare different ways to plot a graph,
                   2711: but the picture is confusing: which graph is what, and why there are multiple
                   2712: boxes around the graph?  At least with some output devices one can control
                   2713: how the output curves look like, so we can use this to distinguish different
                   2714: graphs.  And the mystery of multiple boxes is also not that hard to solve:
                   2715: they are bounding boxes for calculated points on each graph.  We can disable
                   2716: output of bounding boxes with appropriate options for \kbd{plotrect}.
                   2717: With these frills the script becomes:
                   2718: \bprog
                   2719: plotinit(0, 0.9,0.9, relative)
                   2720: plotpointtype(-1, 0)                \\@com set color of graph points
                   2721: plotpointsize(0, 0.4)               \\@com use tiny markers (if available)
                   2722: plotrecth(0, t=100,110, f(t), parametric+points, 300)
                   2723: plotpointsize(0, 1)                 \\@com normal-size markers
                   2724: plotlinetype(-1, 1)                 \\@com set color of graph lines
                   2725: plotpointtype(-1, 1)                \\@com set color of graph points
                   2726: curve_only = norescale + no_frame + no_x_axis + no_y_axis
                   2727: plotrecth(0, t=100,110,f(t), parametric+splines+points_lines+curve_only, 30);
                   2728: plotlinetype(-1, 2)                 \\@com set color of graph lines
                   2729: plotpointtype(-1, 2)                \\@com set color of graph points
                   2730: plotrecth(0, t=100,110,f(t), parametric+splines+points_lines+curve_only, 20);
                   2731: plotdraw([0, 0.05,0.05], relative)
                   2732: @eprog
                   2733:
                   2734: \noindent Plotting axes on the second and third graph would not hurt, but
                   2735: is not needed either, so we omit them.  One can see that the discrepancies
                   2736: between the exact graph and one based on 30 points exist, but are pretty
                   2737: small.  On the other hand, decreasing the number of points to 20 makes
                   2738: quite a noticable difference.
                   2739:
                   2740: Keep in mind that \kbd{plotlinetype}, \kbd{plotpointtype},
                   2741: \kbd{plotpointsize} may do nothing on some terminals.
                   2742:
                   2743: What if we
                   2744: want to create a high-resolution hardcopy of the plot?  There may be several
                   2745: possible solutions.  First, the display output device may allow a
                   2746: high-resolution hardcopy itself.  Say, PM display (with gnuplot output on
                   2747: OS/2) pretends that its resolution is $19500\times 12500$, thus the data
                   2748: PARI sends to it are already high-resolution, and printing is available
                   2749: through the menubar.  Alternatively, with gnuplot output one can switch
                   2750: the output plotting device to many different hardcopy devices:
                   2751: \kbd{plotfile("plot.tex")}, \kbd{plotterm("texdraw")}.
                   2752: After this all the plotting will go into file {\tt plot.tex} with whatever
                   2753: output conventions gnuplot format {\tt texdraw} provides.  To switch output
                   2754: back to normal, one needs to restore the initial plotting terminal, and
                   2755: restore the initial output file by doing \kbd{plotfile("-")}.
                   2756:
                   2757: One can combine PARI programming capabilities to produce multiple plots:
                   2758: \bprog
                   2759: plotfile("manypl1.gif")       \\@com Avoid switching STDOUT to binary mode
                   2760: plotterm("gif=300,200")
                   2761: wpoints = plothsizes()[1]     \\@com $300 \times 200$ is advice only
                   2762: {
                   2763:   for( k=1,6,
                   2764:     plotfile("manypl" k ".gif");
                   2765:     ploth(x = -1, 3, sin(x^k), , wpoints)
                   2766:   )
                   2767: }
                   2768: @eprog
                   2769:
                   2770: \noindent This plots 6 graphs of $\sin x^k$, $k=1\dots 6$ into
                   2771: $300\times 200$ GIF files {\tt manypl1.gif}\dots {\tt manypl6.gif}.
                   2772:
                   2773: Additionally, one can ask PARI to output a plot into a PS file: just
                   2774: use the command \kbd{psdraw} instead of \kbd{plotdraw} in the above examples
                   2775: (or \kbd{psploth} instead of \kbd{ploth}).  See \kbd{psfile} argument
                   2776: to \kbd{default} for how to change the output file for this operation.  Keep
                   2777: in mind that the precision of PARI PS output will be the same as for the
                   2778: current output device.
                   2779:
                   2780: Now suppose we want to join many different small graphs into one picture.
                   2781: We cannot use one rectangle for all the output as we did in the example
                   2782: with $\zeta({1/2}+it)$, since the graphs should go into different places.
                   2783: Rectangles are a scarce commodity in PARI, since only 16 of them are
                   2784: user-accessible.  Does it mean that we cannot have more than 16 graphs on
                   2785: one picture?  Thanks to an additional operation of PARI plotting engine,
                   2786: there is no such restrictions.  This operation is \kbd{plotcopy}.
                   2787:
                   2788: The following script puts 4 different graphs on one plot using 2 rectangles
                   2789: only, \kbd{A} and \kbd{T}:
                   2790: \bprog
                   2791: A = 2;   \\@com accumulator
                   2792: T = 3;   \\@com temporary target
                   2793: plotinit(A);         plotscale(A, 0, 1, 0, 1)
                   2794:
                   2795: plotinit(T, 0.42, 0.42, relative);
                   2796: plotrecth(T, x= -5, 5, sin(x), recursive)
                   2797: plotcopy(T, 2, 0.05, 0.05, relative + nw)
                   2798:
                   2799: plotmove(A, 0.05 + 0.42/2, 1 - 0.05/2)
                   2800: plotstring(A,"Graph", center + vcenter)
                   2801:
                   2802: plotinit(T, 0.42, 0.42, relative);
                   2803: plotrecth(T, x= -5, 5, [sin(x),cos(2*x)], 0)
                   2804: plotcopy(T, 2, 0.05, 0.05, relative + ne)
                   2805:
                   2806: plotmove(A, 1 - 0.05 - 0.42/2, 1 - 0.05/2)
                   2807: plotstring(A,"Multigraph", center + vcenter)
                   2808:
                   2809: plotinit(T, 0.42, 0.42, relative);
                   2810: plotrecth(T, x= -5, 5, [sin(3*x), cos(2*x)], parametric)
                   2811: plotcopy(T, 2, 0.05, 0.05, relative + sw)
                   2812:
                   2813: plotmove(A, 0.05 + 0.42/2, 0.5)
                   2814: plotstring(A,"Parametric", center + vcenter)
                   2815:
                   2816: plotinit(T, 0.42, 0.42, relative);
                   2817: plotrecth(T, x= -5, 5, [sin(x), cos(x), sin(3*x),cos(2*x)], parametric)
                   2818: plotcopy(T, 2, 0.05, 0.05, relative + se)
                   2819:
                   2820: plotmove(A, 1 - 0.05 - 0.42/2, 0.5)
                   2821: plotstring(A,"Multiparametric", center + vcenter)
                   2822:
                   2823: plotlinetype(A, 3)
                   2824: plotmove(A, 0, 0)
                   2825: plotbox(A, 1, 1)
                   2826:
                   2827: plotdraw([A, 0, 0])
                   2828: \\ psdraw([A, 0, 0], relative)          \\ @com if hardcopy is needed
                   2829: @eprog
                   2830:
                   2831: The rectangle \kbd{A} plays the role of accumulator, rectangle \kbd{T} is
                   2832: used as a target to \kbd{plotrecth} only.  Immediately after plotting into
                   2833: rectangle \kbd{T} the contents is copied to accumulator.  Let us explain
                   2834: numbers which appear in this example: we want to create 4 internal rectangles
                   2835: with a gap 0.06 between them, and the outside gap 0.05 (of the size of the
                   2836: plot).  This leads to the size 0.42 for each rectangle.  We also
                   2837: put captions above each graph, centered in the middle of each gap.  There
                   2838: is no need to have a special rectangle for captions: they go into the
                   2839: accumulator too.
                   2840:
                   2841: To simplify positioning of the rectangles, the above example uses relative
                   2842: ``geographic'' notation: the last argument of \kbd{plotcopy} specifies the
                   2843: corner of the graph (say, northwest) one counts offset from. (Positive
                   2844: offsets go into the rectangle.)
                   2845:
                   2846: To demonstrate yet another useful plotting function, design a program to
                   2847: plot Taylor polynomials for a $\sin x$ about 0.  For simplicity, make the
                   2848: program good for any function, but assume that a function is odd, so only
                   2849: odd-numbered Taylor series about 0 should be plotted.  Start with defining
                   2850: some useful shortcuts
                   2851: \bprog
                   2852: xlim = 13;  ordlim = 25;  f(x) = sin(x);
                   2853: default(seriesprecision,ordlim)
                   2854: farray(t) = vector((ordlim+1)/2, k, truncate( f(1.*t + O(t^(2*k+1)) )))
                   2855: FARRAY = farray('t);  \\@com\kbd{'t} to make sure \kbd{t} is a free variable
                   2856: @eprog
                   2857:
                   2858: \noindent \kbd{farray(x)} returns a vector of Taylor polynomials for
                   2859: $f(x)$, which we store in \kbd{FARRAY}.  We want to plot $f(x)$ into a
                   2860: rectangle, then make the rectangle which is 1.2 times higher, and plot
                   2861: Taylor polynomials into the larger rectangle.  Assume that the larger
                   2862: rectangle takes 0.9 of the final plot.
                   2863:
                   2864: First of all, we need to measure the height of the smaller rectangle:
                   2865: \bprog
                   2866: plotinit(3, 0.9, 0.9/1.2, 1);
                   2867: curve_only = no_x_axis+no_y_axis+no_frame;
                   2868: lims = plotrecth(3, x= -xlim, xlim, f(x), recursive+curve_only,16);
                   2869: h = lims[4] - lims[3];
                   2870: @eprog
                   2871:
                   2872: \noindent Next step is to create a larger rectangle, and plot the Taylor
                   2873: polynomials into the larger rectangle:
                   2874: \bprog
                   2875: plotinit(4, 0.9,0.9, relative);
                   2876: plotscale(4, lims[1], lims[2], lims[3] - h/10, lims[4] + h/10)
                   2877: plotrecth(4, x = -xlim, xlim, subst(FARRAY,t,x), norescale);
                   2878: @eprog
                   2879:
                   2880: Here comes the central command of this example:
                   2881:
                   2882: \kbd{plotclip(4)}
                   2883:
                   2884: \noindent What does it do?  The command \kbd{plotrecth(\dots, norescale)}
                   2885: scales the graphs according to coordinate system in the
                   2886: rectangle, but it does not pay any other attension to the size of
                   2887: the rectangle.  Since \kbd{xlim} is 13, the Taylor polynomials take
                   2888: very large values in the interval \kbd{-xlim...xlim}.  In particular,
                   2889: significant part of the graphs is going to be {\it outside} of the rectangle.
                   2890: \kbd{plotclip} removes the parts of the plottings which fall off the
                   2891: rectangle boundary
                   2892: \bprog
                   2893: plotinit(2)
                   2894: plotscale(2, 0.0, 1.0, 0.0, 1.0)
                   2895: plotmove(2,0.5,0.975)
                   2896: plotstring(2,"Multiple Taylor Approximations",center+vcenter)
                   2897: plotdraw([2, 0, 0,  3, 0.05, 0.05 + 0.9/12,  4, 0.05, 0.05], relative)
                   2898: @eprog
                   2899:
                   2900: These commands draw a caption, and combine 3 rectangles (one with the
                   2901: caption, one with the graph of the function, and one with graph of Taylor
                   2902: polynomials) together.
                   2903:
                   2904: This finishes our short survey of PARI plotting functions, but let us add
                   2905: some remarks.  First of all, for a typical output device the picture is
                   2906: composed of small colored squares (pixels) (as a very large checkerboard).
                   2907: Each output rectangle is in fact a union of such squares.  Each drop
                   2908: of paint in the rectangle will color a whole square it is in.  Since the
                   2909: rectangle has a coordinate system, sometimes it is important to know how
                   2910: this coordinate system is positioned with respect to the boundaries of
                   2911: these squares.
                   2912:
                   2913: The command \kbd{plotscale} describes a range of $x$ and $y$ in the
                   2914: rectangle.  The limit values of $x$ and $y$ in the coordinate system are
                   2915: coordinates {\it of the centers} of corner squares.  In particular,
                   2916: if ranges of $x$ and $y$ are $[0,1]$, then the segment which connects (0,0)
                   2917: with (0,1) goes along the {\it middle} of the left column of the rectangle.
                   2918: In particular, if we made tiny errors in calculation of endpoints of this
                   2919: segment, this will not change which squares the segment intersects, thus
                   2920: the resulting picture will be the same.  (It is important to know such details
                   2921: since many calculations in PARI are approximate.)
                   2922:
                   2923: Another consideration is that all examples we did in this section were
                   2924: using relative sizes and positions for the rectangles.  This is nice, since
                   2925: different output devices will have very similar pictures, while we
                   2926: did not need to care about particular resolution of the output device.
                   2927: On the other hand,
                   2928: using relative positions does not guarantie that the pictures will be
                   2929: similar.  Why?  Even if two output devices have the same resolution,
                   2930: the picture may be different.  The devices may use fonts of different
                   2931: size, or may have a different ``unit of length''.
                   2932:
                   2933: The information about the device in PARI is encoded in 6 numbers: resolution,
                   2934: size of a character cell of the font, and unit of length, all separately
                   2935: for horizontal and vertical direction.  These sizes are expressed as
                   2936: numbers of pixels.  To inspect these numbers one may use the function
                   2937: \kbd{plothsizes}.  The ``units of length'' are currently used to calculate
                   2938: right and top gaps near graph rectangle of \kbd{ploth}, and gaps for
                   2939: \kbd{plotstring}.  Left and bottom gaps near graph rectangle are calculate
                   2940: using both units of length, and sizes of character boxes (so that there
                   2941: is enough place to print limits of the graphs).
                   2942:
                   2943: What does it show?  Using relative sizes during plotting produces
                   2944: \var{approximately} the same plotting on different devices, but does not
                   2945: ensure that the plottings ``look the same''.  Moreover, ``looking the
                   2946: same'' is not a desirable target, ``looking tuned for the environment''
                   2947: will be much better.  If you want to produce such fine-tuned plottings,
                   2948: you need to abandone a relative-size model, and do your plottings in
                   2949: pixel units.  To do this one removes flag \kbd{relative} from the above
                   2950: examples, which will make size and offset arguments interpreted this way.
                   2951: After querying sizes with \kbd{plothsizes} one can fine-tune sizes and
                   2952: locations of subrectangles to the details of an arbitrary plotting
                   2953: device.
                   2954:
                   2955: To check how good your fine-tuning is, you may test your graphs with a
                   2956: medium-resolution plotting (as many display output devices are), and
                   2957: with a low-resolution plotting (say, with \kbd{plotterm("dumb")} of gnuplot).
                   2958: \vfill\eject\bye

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>