axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] 20080305.01.tpd.patch (add additional hyperdoc page tr


From: daly
Subject: [Axiom-developer] 20080305.01.tpd.patch (add additional hyperdoc page translations)
Date: Wed, 5 Mar 2008 22:35:24 -0600

This patch adds additional hyperdoc page translations
==========================================================================
diff --git a/changelog b/changelog
index 6b2c6be..b219341 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080305 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080304 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080303 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080302 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index ec9dbe3..6b600ba 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -681,6 +681,7 @@ PAGES=rootpage.xhtml \
             dbopvertconcat.xhtml \
             dbopwholepart.xhtml \
             dbopwholeragits.xhtml \
+            dbopwrite.xhtml \
             dbopzeroof.xhtml \
             dbopzerosof.xhtml \
             dbopzeroq.xhtml \
@@ -808,7 +809,11 @@ PAGES=rootpage.xhtml \
             graphviewports.xhtml \
           algebrapage.xhtml \
             algnumbertheory.xhtml \
+              algnumbertheorygalois.xhtml \
             alggrouptheory.xhtml \
+              alggrouptheorygroup.xhtml \
+              alggrouptheoryrepa6.xhtml \
+              alggrouptheoryreptheory.xhtml \
           cryptopage.xhtml \
             cryptoclass1.xhtml \
             cryptoclass2.xhtml \
@@ -3661,7 +3666,274 @@ abstract algebra
  </head>
  <body>
 <<page head>>
-      alggrouptheory not implemented
+  <div align="center">Group Theory</div>
+  <hr/>
+Axiom can work with individual permutations, permutation groups and
+do representation theory.
+<ul>
+ <li> <a href="alggrouptheorygroup.xhtml">Info on Group Theory</a></li>
+ <li> <a href="alggrouptheoryreptheory.xhtml">
+      Info on Representation Theory</a></li>
+ <li> <a href="alggrouptheoryrepa6.xhtml">Representations of A6</a><br/>
+      The irreducible representations of the alternating group A6 over
+      fields of characteristic 2.</li>
+</ul>
+<<page foot>>
+@
+
+\subsection{alggrouptheorygroup.xhtml}
+<<alggrouptheorygroup.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Group Theory</div>
+  <hr/>
+A group is a set G together with an associative operation * satisfying
+the axioms of existence of a unit element and an inverse of every
+element of the group. The Axiom category <a href="db.xhtml?Group">Group</a>
+represents this setting. Many data structures in Axiom are groups and
+therefore there is a large variety of examples as fields and polynomials,
+although the main interest there is not a group structure.
+<br/>
+<br/>
+To work with and in groups in a concrete manner some way of representing
+groups has to be chosen. A group can be given as a list of generators and
+as a set of relations. If there are no relations, then we have a free group,
+realized in the domain <a href="db.xhtml?FreeMonoid">FreeMonoid</a> which
+won't be discussed here. We consider permutation groups, where a group is
+realized as a subgroup of the symmetric group of a set, i.e., the group of
+all bijections of a set, the operation being the composition of maps. Indeed,
+every groupo can be realized this way, although this may not be practical.
+<br/>
+<br/>
+Furthermore group elements can be given as invertible matrices. The group
+operation is reflected by matrix multiplication. More precise in 
+representation theory group homomorphisms from a group to general linear 
+groups are constructed. Some algorithms are implemented in Axiom.
+<<page foot>>
+@
+
+\subsection{alggrouptheoryrepa6.xhtml}
+<<alggrouptheoryrepa6.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Representations of A6</div>
+  <hr/>
+In what follows you'll see how to use Axiom to get all the irreducible
+representations of the alternating group A6 over the field with two
+elements (GF 2). First, we generate A6 by a three-cycle: x=(1,2,3) and a
+5-cycle: y=(2,3,4,5,6). Next we have Axiom calculate the permutation
+representation over the integers and over GF 2:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="genA6:LIST PERM INT:=[cycle [1,2,3],cycle [2,3,4,5,6]]" />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="pRA6:=permutationRepresentation(genA6,6)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Now we apply Parker's 'Meat-Axe' and split it:
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p2','p3']);"
+    value="sp0:=meatAxe(pRA6::(LIST MATRIX PF 2))" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+We have found the trivial module as a quotient module and a 
+5-dimensional sub-module. Try to split again:
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4']);"
+    value="sp1:=meatAxe sp0.1" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+and we find a 4-dimensional sub-module and the trivial one again. Now we
+can test if this representation is absolutely irreducible.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5']);"
+    value="isAbsolutelyIrreducible? sp1.2" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+and we see that this 4-dimensional representation is absolutely irreducible.
+So, we have found a second irreducible representation. Now, we construct a
+representation by reducing an irreducible one of the symmetric group S_6
+over the integers mod 2. We take the one labelled by the partition 
+[2,2,1,1] and restrict it to A6:
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p6']);"
+    value="d2211:=irreducibleRepresentation([2,2,1,1],genA6)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p6','p7']);"
+    value="d2211m2:=d2211::(LIST MATRIX PF 2); sp2:=meatAxe d2211m2" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+This gave both a five and a four dimensional representation. Now we take the
+4-dimensional one and we shall see that it is absolutely irreducible:
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p8']);"
+    value="isAbsolutelyIrreducible? sp2.1" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+The two 4-dimensional representations are not equivalent:
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p9']);"
+    value="areEquivalent?(sp1.2,sp2.1)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+So we have found a third irreducible representation. Now we construct a new
+representation using the tensor product and try to split it:
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10']);"
+    value="dA6d16:=tensorProduct(sp1.2,sp2.1); meatAxe dA6d16" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+The representation is irreducible, but it may be not absolutely irreducible.
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p11']);"
+    value="isAbsolutelyIrreducible? dA6d16" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+So let's try the same procedure over the field with 4 elements:
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12']);"
+    value="sp3:=meatAxe(dA6d16::(LIST MATRIX FF(2,2)))" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
+Now we find two 8-dimensional representations, dA6d8a and dA6d8b. Both
+are absolutely irreducible.
+<ul>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p13']);"
+    value="isAbsolutelyIrreducible? sp3.1" />
+  <div id="ansp13"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p14']);"
+    value="isAbsolutelyIrreducible? sp3.2" />
+  <div id="ansp14"><div></div></div>
+ </li>
+</ul>
+and they are not equivalent.
+<ul>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p15']);"
+    value="areEquivalent?(sp3.1,sp3.2)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+</ul>
+So we have found five absolutely irreducible representations of A6 in 
+characteristic 2. General theory now tells us that there are no more
+irreducible ones. Here, for future reference are all the absolutely
+irreducible 2-module representations of A6.
+<ul>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p16']);"
+    value="sp0.2" />
+  <div id="ansp16"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p17']);"
+    value="sp1.2" />
+  <div id="ansp17"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p18']);"
+    value="sp2.1" />
+  <div id="ansp18"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p19" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p19']);"
+    value="sp3.1" />
+  <div id="ansp19"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p20']);"
+    value="sp3.2" />
+  <div id="ansp20"><div></div></div>
+ </li>
+</ul>
+And here again is the irreducible, but not absolutely irreducible
+representations of A6 over GF 2.
+<ul>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p21']);"
+    value="dA6d16" />
+  <div id="ansp21"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{alggrouptheoryreptheory.xhtml}
+<<alggrouptheoryreptheory.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+Representation theory for finite groups studies finite groups by embedding
+them in a general linear group over a field or an integral domain. Hence,
+we are representing each element of the group by an invertible matrix.
+Two marix representations of a given group are equivalent, if, by changing
+the basis of the underlying space, you can go from one to the other. When
+you change bases, you transform the matrices that are the images of elements
+by conjugating them by an invertible matrix.
+<br/>
+<br/>
+If we can find a subspace which is fixed under the image of the group, then
+there exists a 'base change' after which all the representing matrices are
+in upper triangular block form. The block matrices on the main diagonal give
+a new representation of the group of lower degree. Such a representation is
+said to be 'reducible'.
 <<page foot>>
 @
 
@@ -3671,7 +3943,369 @@ abstract algebra
  </head>
  <body>
 <<page head>>
-      algnumbertheory not implemented
+  <div align="center">Number Theory</div>
+  <hr/>
+Here are some sample computations using Axiom's algebraic number facilities.
+<ul>
+ <li> <a href="algnumbertheorygalois.xhtml">Galois Groups</a><br/>
+      Computation of Galois groups using factorizations over number fields
+ </li>
+ <li> <a href="numfunctions.xhtml">Number Theory Functions</a><br/>
+      Some functions of interest to number theorists
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{algnumbertheorygalois.xhtml}
+<<algnumbertheorygalois.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Computation of Galois Groups</div>
+  <hr/>
+As a sample use of Axiom's algebraic number facilities, we compute the
+Galois group of the polynomial p(x)=x**5-5*x+12
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="p:=x**5-5*x+12" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+We would like to construct a polynomial f(x) such that the splitting field
+of p(x) is generated by one root of f(x). First we construct a polynomial
+r=r(x) such that one root of r(x) generates the filed generatedy by two
+roots of the polynomial p(x). As it will turn out, the field generate by
+two roots of p(x) is, in fact, the splitting field of p(x).
+
+From the proof of the primitive element theorem we know that if a and b
+are algebraic numbers, then the field Q(a,b) is equal to Q(a+k*b) for an
+appropriately chosen integer k. In our case, we construct the minimal 
+polynomial of a[i]-a[j], where a[i] and a[j] are two roots of p(x). We
+construct this polynomial using <a href="dbopresultant.xhtml">resultant</a>.
+The main result we need is that if f(x) is a polynomial with roots a[1]...a[m]
+and g(x) is a polynomial with roots b[1]...b[n], then the polynomial 
+h(x)=resultant(f(y),g(x-y),y) is a polynomial of degree m*n with roots
+a[i]+b[j], 1 &lt;= i &lt;= m, 1 &lt;= j &lt;= n.
+
+For f(x) we use the polynomial p(x). For g(x) we use the polynomial -p(-x).
+Thus, the polynomial we first construct is resultant(p(y),-p(y-x),y).
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="q:=resultant(eval(p,x,y),-eval(p,x,y-x),y)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+The roots of q(x) are a[i]-a[j], 1 &lt;= i,j &lt;= 5. Of course, there are
+five pairs (i,j) with i=j, so 0 is a 5-fold root of q(x). Let's get rid of
+this factor.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p2','p3']);"
+    value="q1:=exquo(q,x^5)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Factor the polynomial q1.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4']);"
+    value="factoredQ:=factor q1" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+We see that q1 has two irreducible factors, each of degree 10. (The fact
+that the polynomial q1 has two factors of degree 10 is enough to show that
+the Galois group of p(x) is the diheral group of order 10. (ref:
+McKay, Soicher, Computing Galois Groups over the Rationals, Journal of
+Number Theory 20, 273-281 (1983). We do not assume the results of this
+paper and we continue with the computation.) Note that the type of
+factoredQ is 
+<a href="db.xhtml?Factored(Polnomial(Integer))">
+Factored Polynomial Integer</a>. 
+This is a special data type for
+recording factorizations of polynomials with integer coefficients (see
+<a href="factored.xhtml">Factored</a>). We can access the individual
+factors using the operation <a href="dbopnthfactor.xhtml">nthFactor</a>.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5']);"
+    value="r:=nthFactor(factoredQ,1)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Consider the polynomial r=r(x). This is the minimal polynomial of the
+difference of two roots of p(x). Thus, the splitting field of p(x) 
+contains a subfield of degree 10. We show that this subfield is the 
+splitting field of p(x) by showing that p(x) factors completely over this
+field. First we create a symbolic root of the polynomial r(x). (We
+replaced x by b in the polynomial r so that our symbolic root would
+be printed as b.)
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6']);"
+    value="beta:AN:=rootOf(eval(r,x,b))" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+We next tell Axiom to view p(x) as a univariate polynomial in x with
+algebraic number coefficients. This is accomplished with this type
+declaration:
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7']);"
+    value="p:=p::UP(x,INT)::UP(x,AN)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+Factor p(x) over the field Q(beta). (This computation will take some time).
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8']);"
+    value="algFactors:=factor(p,[beta])" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+When factoring over number fields, it is important to specify the field
+over which the polynomial is to be factored, as polynomials have different
+factorizations over different fields. When you use the operation
+<a href="dbopfactor.xhtml">factor</a>, the field over which the polynomial
+is factored is the field generated by
+<ol>
+ <li> the algebraic numbers that appear in the coefficients of the polynomial
+ </li>
+ <li> the algebraic numbers that appear in a list passed as an optional
+      second argument of the operation
+ </li>
+</ol>
+In our case, the coefficients of p are all rational numbers and only beta
+appears in the list, so the field is simply Q(beta). It was necessary to
+give the list [beta] as a second argument of the operations because 
+otherwise the polynomial would have to be factored over the field generated
+by its coefficients, namely the rational numbers.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p1','p9']);"
+    value="factor(p)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+We have shown that the splitting field of p(x) has degree 10. Since the
+symmetric group of degree 5 has only one transitive subgroup of order 10,
+we know that the Galois group of p(x) must be this group, the dihedral
+group of order 10. Rather than stop here, we explicitly compute the action
+of the Galois group on the roots of p(x).
+
+First we assign the roots of p(x) as the values of five variables. We
+can obtain an individual root by negating the constant coefficient of one
+of the factors of p(x).
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p10']);"
+    value="factor1:=nthFactor(algFactors,1)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+   onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p10','p11']);"
+   value="root1:=-coefficient(factor1,0)" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+We can obtain a list of all of the roots in this way.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+   onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12']);"
+    value="roots:=[-coefficient(nthFactor(algFactors,i),0) for i in 1..5]" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
+The expression -coefficient(nthFactor(algFactors,i),0) is the ith root of p(x)
+and the elements of roots are the ith roots of p(x) as i ranges from 1 to 5.
+Assign the roots as the values of the variables a1..a5.
+<ul>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+   onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13']);"
+    value="(a1,a2,a3,a4,a5):=(roots.1,roots.2,roots.3,roots.4,roots.5)" />
+  <div id="ansp13"><div></div></div>
+ </li>
+</ul>
+Next we express the roots of r(x) as polynomials in beta. We could obtain
+these roots by calling the operation
+<a href="dbopfactor.xhtml">factor</a>. factor(r,[beta]) factors r(x) over
+Q(beta). However, this is a length computation and we can obtain the roots
+of r(x) as differences of the roots a1,...,a5 of p(x). Only ten of these
+differences are roots of r(x) and the other ten are roots of the other
+irreducible factor of q1. We can determine if a given value is a root
+of r(x) by evaluating r(x) at that particular value. (Of course, the order
+in which factors are returned by the operation 
+<a href="dbopfactor.xhtml">factor</a> is unimportant and may change with
+different implementations of the operation. Therefore, we cannot predict
+in advance which differences are roots of r(x) and which are not.) Let's
+look at four examples (two are roots of r(x) and two are not).
+<ul>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p14']);"
+    value="eval(r,x,a1-a2)" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p15']);"
+    value="eval(r,x,a1-a3)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p16']);"
+    value="eval(r,x,a1-a4)" />
+  <div id="ansp16"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p17']);"
+    value="eval(r,x,a1-a5)" />
+  <div id="ansp17"><div></div></div>
+ </li>
+</ul>
+Take one of the differences that was a root of r(x) and assign it to the
+variable bb. For example, if eval(r,x,a1-a4) returned 0, you would enter this.
+<ul>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p18']);"
+    value="bb:=a1-a4" />
+  <div id="ansp18"><div></div></div>
+ </li>
+</ul>
+Of course, if the difference is equal to the root beta, you should choose
+another root of r(x).
+
+Automorphisms of the splitting field are given by mapping a generator of
+the field, namely beta, to other roots of its minimal polynomial. Let's
+see what happens when beta is mapped to bb. We compute the images of the
+roots a1,...,a5 under this automorphism.
+<ul>
+ <li>
+  <input type="submit" id="p19" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p19']);"
+    value="aa1:=subst(a1,beta=bb)" />
+  <div id="ansp19"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p20']);"
+    value="aa2:=subst(a2,beta=bb)" />
+  <div id="ansp20"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p21']);"
+    value="aa3:=subst(a3,beta=bb)" />
+  <div id="ansp21"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p22" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p22']);"
+    value="aa4:=subst(a4,beta=bb)" />
+  <div id="ansp22"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p23" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p23']);"
+    value="aa5:=subst(a5,beta=bb)" />
+  <div id="ansp23"><div></div></div>
+ </li>
+</ul>
+Of course, the values aa1,...,aa5 are simply a permutation of the values
+a1,...,a5. Let's find the value of aa1 (execute as many of the following
+five commands as necessary).
+<ul>
+ <li>
+  <input type="submit" id="p24" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p19','p24']);"
+    value="(aa1=a1)::Boolean" />
+  <div id="ansp24"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p25" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p20','p25']);"
+    value="(aa2=a2)::Boolean" />
+  <div id="ansp25"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p26" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p21','p26']);"
+    value="(aa3=a3)::Boolean" />
+  <div id="ansp26"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p27" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p22','p27']);"
+    value="(aa4=a4)::Boolean" />
+  <div id="ansp27"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p28" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p23','p28']);"
+    value="(aa5=a5)::Boolean" />
+  <div id="ansp28"><div></div></div>
+ </li>
+</ul>
+Proceeding in this fashion, you can find the values of aa2..aa5.
+You have represented the automorphism beta -> bb as a permutation of the
+roots a1,...,a5. If you wish, you can repeat this computation for all the
+roots of r(x) and represent the Galois group of p(x) as a subgroup of the
+symmetric group on five letters.
+
+Here are two other problems that you may attack in a similar fashion:
+<ol>
+ <li> Show that the Galois group of p(x)=x**4+2*x**3-2*x**2-2*x+1 is the
+      dihedral group of order eight. (The splitting field of this polynomial
+      is the Hilbert class field of the quadratic field Q(sqrt(145)).)
+ </li>
+ <li> Show that the Galois group of p(x)=x**6+108 has order 6 and is
+      isomorphic to the symmetric group on three letters. (The splitting
+      field of this polynomial is the spliting field of x**3-2.)
+ </li>    
+</ol>
 <<page foot>>
 @
 
@@ -6106,7 +6740,7 @@ Reset <a href="dbopdigits.xhtml">digits</a> to its 
default value.
   <div id="ansp17"><div></div></div>
  </li>
 </ul>
-Numbers of type <a href="db.html?Float">Float</a> are represented as a record
+Numbers of type <a href="db.xhtml?Float">Float</a> are represented as a record
 of two integers, namely, the mantissa and the exponent where the base
 of the exponent is binary. That is, the floating point number of the
 binary. That is, the floating point number (m,e) represents the number
@@ -10285,6 +10919,15 @@ dboptruncate not implemented
 <<page foot>>
 @
 
+\subsection{dbopwrite.xhtml}
+<<dbopwrite.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopwrite not implemented
+<<page foot>>
+@
 \subsection{dbopzeroof.xhtml}
 <<dbopzeroof.xhtml>>=
 <<standard head>>
@@ -10463,7 +11106,7 @@ matrix is said to be "ill-conditioned".
  </li>
 </ul>
 Now repeat the computation at a higher precision using 
-<a href="db.html?Float">Float</a>
+<a href="db.xhtml?Float">Float</a>
 <ul>
  <li>
   <input type="submit" id="p6" class="subbut" 
@@ -35372,10 +36015,57 @@ lists of points in the plane.
 \subsection{graphviewports.xhtml}
 <<graphviewports.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      graphviewports not implemented
+  <div align="center">Stand-alone Viewport</div>
+  <hr/>
+To get a viewport on a page, you first need to create on in Axiom and
+write it out to a file that can be called up. For example, we draw a
+saddle function and assign the result to the variable v.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="v:=draw(x*x-y*y,x=-1..1,y=-1..1)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Now that we've created the viewport, we want to write the data out to
+a file. To do this, we use the <a href="dbopwrite.xhtml">write</a> command
+which takes as arguments the viewport to write out, the title of the file
+to be written to, and an optiona argument telling the write command what
+type (or types) of data you want to write (in addition to the ones that
+Axiom writes). The optional argument could be a string, like "pixmap", or
+a list of strings, like ["postscript", "pixmap"]. We need a "bitmap" data
+type to include a graph in a page so in this case, we write the viewport
+and tell it to also write a "pixmap" file:
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value='write(v,"saddle","bitmap")' />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Currently supported file formats are "pixmap", "bitmap", "postscript"
+and "image".
+
+Axiom automatically adds ".view" at the end of the viewport data file
+to specify the file type. The ".view" is actually a directory and 
+contains a bitmap file, usually called image.bm.Z, which is a compressed
+bitmap. Firefox can display bitmap files, as shown here. Clicking on the
+image should start a "live graphics copy" so you can manipulate the image.
+
+<br/>
+<br/>
+<a href="graphics.xhtml?3dobjectgraphicspage9.view">
+<img 
src="/research2/test/mnt/fedora5/doc/viewports/3dobjectgraphicspage9.view/image.bmp"/>
+</a>
 <<page foot>>
 @
 
@@ -36638,7 +37328,7 @@ Conversion is the process of changing an object of one 
type into an
 object of another type. The syntax for conversion is object::newType.
 <hr/>
 By default, 3 has the type
-<a href="db.html?PositiveInteger">PositiveInteger</a>
+<a href="db.xhtml?PositiveInteger">PositiveInteger</a>
 <ul>
  <li>
   <input type="submit" id="p1" class="subbut" 
@@ -36648,7 +37338,7 @@ By default, 3 has the type
  </li>
 </ul>
 We can change thisinto an object of type 
-<a href="db.html?Fraction(Integer)">Fraction Integer</a> by using "::".
+<a href="db.xhtml?Fraction(Integer)">Fraction Integer</a> by using "::".
 <ul>
  <li>
   <input type="submit" id="p2" class="subbut" 
@@ -37854,15 +38544,15 @@ to display the full list of operations defined by
 <<page head>>
   <div align="center">One Dimensional Array</div>
   <hr/>
-The <a href="db.html?OneDimensionalArray">OneDimensionalArray</a> is used
+The <a href="db.xhtml?OneDimensionalArray">OneDimensionalArray</a> is used
 for storing data in a one-dimensional indexed data structure. Such an array
 is a homogeneous data structure in that all the entries of the array must
 belong to the same Axiom domain. Each array has a fixed length specified
 by the user and arrays are not extensible. The indexing of 
 one-dimensional arrays is one-based. This means that the "first" element of
 an array is given the index 1. See also
-<a href="db.html?Vector">Vector</a> and
-<a href="db.html?FlexibleArray">FlexibleArray</a>. To create a 
+<a href="db.xhtml?Vector">Vector</a> and
+<a href="db.xhtml?FlexibleArray">FlexibleArray</a>. To create a 
 one-dimensional array, apply the operation
 <a href="dboponedimensionalarray.xhtml">oneDimensionalArray</a> to a list.
 <ul>
@@ -37874,9 +38564,9 @@ one-dimensional array, apply the operation
  </li>
 </ul>
 Another approach is to first create a, a one-dimensional array of 10 0's.
-<a href="db.html?OneDimensionalArray">OneDimensionalArray</a> has a 
+<a href="db.xhtml?OneDimensionalArray">OneDimensionalArray</a> has a 
 convenient abbreviation 
-<a href="db.html?OneDimensionalArray">ARRAY1</a>.
+<a href="db.xhtml?OneDimensionalArray">ARRAY1</a>.
 <ul>
  <li>
   <input type="submit" id="p2" class="subbut" 
@@ -39989,7 +40679,7 @@ discriminant d.
   <hr/>
 Axiom provides many operations for manipulating arbitrary precision integers.
 In this section we will show some of those that come from 
-<a href="db.html?Integer">Integer</a> itself plus some that are implemented
+<a href="db.xhtml?Integer">Integer</a> itself plus some that are implemented
 in other packages. More examples of integers are in the following sections:
 <a href="axbook/section-1.4.xhtml">Numbers</a>.
 <a href="numfunctions.xhtml">IntegerNumberTheoryFunctions</a>,
@@ -40715,7 +41405,7 @@ A number of additional operations may be used to 
compute numerical
 values. These are special polynomial functions that can be evaluated
 for values in any commutative ring R, and in particular for values in
 any floating-point type. The following operations are provided by the
-package <a href="db.html?OrthogonalPolynomialFunctions">
+package <a href="db.xhtml?OrthogonalPolynomialFunctions">
 OrthogonalPolynomialFunctions</a>:
 <ul>
  <li> <a href="dbopchebyshevt.xhtml">chebyshevT</a>:
@@ -42865,7 +43555,7 @@ X transpose is just a row and X is just a column.
   <div align="center">Output Functions</div>
   <hr/>
 A number of operations exist for specifying how numbers of type
-<a href="db.html?Float">Float</a> are to be displayed. By default,
+<a href="db.xhtml?Float">Float</a> are to be displayed. By default,
 spaces are inserted every ten digits in the output for readability.
 (Not that you cannot include spaces in the input form of a floating
 point number, though you can use underscores.)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]