<p>Let <span class="Math">C</span> be a vector space over field <span class="Math">k</span> equipped with a non-degenerate quadratic form <span class="Math">N:C \rightarrow k</span>. If <span class="Math">C</span> is also an algebra with a product that satifies the composition rule <span class="Math">N(x y) = N(x) N(y)</span> for all <span class="Math">x,y</span> in <span class="Math">C</span> then we call <span class="Math">C</span> a <em>composition algebra</em>. Quaternions and octonions are examples of composition algebras.</p>
<p>As described in <a href="chapBib.html#biBspringer_octonions_2000">[SV00, Theorm 1.6.2]</a>, a composition algebra has dimension <span class="Math">1</span>, <span class="Math">2</span>, <span class="Math"> 4</span>, or <span class="Math">8</span>. Compositions algebras of dimension <spanclass="Math">1</span> or <span class="Math">2</span> are commutative and associative. A <em>quaternion algebra</em> is a composition algebra of dimension <span class="Math">4</span>. Quaternion algebras are associative but noncommutative. An <em>octonion algebra</em> is a composition algebra of dimension <span class="Math">8</span>. Octonion algebras are both noncommutative and nonassociative but still have many interesting properties.</p>
<p>The non-degenerate quadratic form <span class="Math">N</span> of a composition algebra is called the <em>norm</em> of that algebra. In fact, a composition algebra is determined up to isomorphism by its norm so the task of classifying composition algebras is equivalent to the task of classifying the possible norms in that vector space <a href="chapBib.html#biBspringer_octonions_2000">[SV00, chap. 1, sec. 7]</a>. A norm is either isotropic or anisotropic according to whether or not there exists a non-zero element <span class="Math">x</span> such that <span class="Math">N(x) = 0</span>. A composition algebra with a isotropic norm is called a <em>split composition algebra</em>. A composition algebra with an anisotropic norm is called a <em>division composition algebra</em> since each non-zero element has an inverse. An important theorem <a href="chapBib.html#biBspringer_octonions_2000">[SV00, Theorem 1.8.1]</a> shows that for each field <span class="Math">k</span> there exists up to isomorphism one split composition algebra of dimension <span class="Math">2</span>, <span class="Math"> 4</span>, and <span class="Math">8</span>. The built-in <code class="code">OctaveAlgebra(<var class="Arg">F</var>)</code> function in <strong class="pkg">GAP</strong> constructs the split-octonion algebra over the field given as the argument.</p>
<p>As described in <a href="chapBib.html#biBspringer_octonions_2000">[SV00, chap. 1, sec. 10]</a>, there are precisely one division composition algebra of dimension <span class="Math">4</span> and one of dimension <span class="Math"> 8</span> over the real number field (likewise over the rationals). The <strong class="pkg">ALCO</strong> package provides constructions of <em>non-split</em> octonion algebras, provided that the algebra is constructed over a suitable field (e.g., octonions over any finite field are split).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OctonionAlgebra</code>( <var class="Arg">F</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns an octonion algebra over field <var class="Arg">F</var> in a standard orthonormal basis <span class="Math">\{e_{i}, i = 1,...,8\}</span> such that <span class="Math">1 = e_8</span> is the identity element and <span class="Math">e_{i} = e_{i+1}e_{i+3} = - e_{i+3}e_{i+1}</span> for <span class="Math">i = 1,...,7</span>, with indices evaluated modulo 7. This corresponds to the basis provided in <a href="chapBib.html#biBbaez_octonions_2002">[Bae02]</a> and <a href="chapBib.html#biBconway_quaternions_2003">[CS03]</a> (except that <code class="code"> e7</code> corresponds to <span class="Math">e_0</span> in the literature, since the first entry in a <strong class="pkg">GAP</strong> list has index 1). Whether or not the algebra constructed is a division algebra or a split-octonion algebra depends on the choice of field <var class="Arg">F</var>. For example, <code class="code">OctonionAlgebra(Rationals)</code> is a division composition algebra, but <code class="code">OctonionAlgebra(GF(3))</code> is a split composition algebra. Other examples are discussed in <a href="chapBib.html#biBspringer_octonions_2000">[SV00, chap. 1, sec. 10]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OctavianIntegers</code></td><td class="tdright">( global variable )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsOctavianInt</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The <code class="code">OctavianIntegers</code> are a subring of the octonion algebra with elements that have the geometry of scaled <span class="Math">E_8</span> lattice. This ring is named and studied in <a href="chapBib.html#biBconway_quaternions_2003">[CS03, p. 105]</a>. <code class="code"> CanonicalBasis(OctavianIntegers)</code> returns <code class="func">OctonionE8Basis</code> (<a href="chap2.html#X7E4DEB1E7C7F2C1D"><span class="RefLink">2.1-4</span></a>). We can test whether an octonion is in <code class="code">OctavianIntegers</code> using the operation <code class="code">IsOctavianInt(<var class="Arg">x</var>)</code>.</p>
<div class="example"><pre><span class="GAPprompt">gap></span> <span class="GAPinput">a := BasisVectors(Basis(OctavianIntegers));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for x in a do Display(x); od;</span>
(-1/2)*e1+(1/2)*e5+(1/2)*e6+(1/2)*e7
(-1/2)*e1+(-1/2)*e2+(-1/2)*e4+(-1/2)*e7
(1/2)*e2+(1/2)*e3+(-1/2)*e5+(-1/2)*e7
(1/2)*e1+(-1/2)*e3+(1/2)*e4+(1/2)*e5
(-1/2)*e2+(1/2)*e3+(-1/2)*e5+(1/2)*e7
(1/2)*e2+(-1/2)*e4+(1/2)*e5+(-1/2)*e6
(-1/2)*e1+(-1/2)*e3+(1/2)*e4+(-1/2)*e5
(1/2)*e1+(-1/2)*e4+(1/2)*e6+(-1/2)*e8
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAll(a, IsOctavianInt);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAll(a/2, IsOctavianInt);</span>
false</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OctonionE8Basis</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>The <strong class="pkg">ALCO</strong> package also loads a basis for <code class="code">OctonionAlgebra(<var class="Arg">Rationals</var>)</code> which also serves as generators for <code class="func">OctavianIntegers</code> (<a href="chap2.html#X87ABC5C38446DA89"><span class="RefLink">2.1-3</span></a>). This octonion integer lattice has the geometry of a <span class="Math">E_8</span> (Gossett) lattice relative to the inner product defined by the octonion norm.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Norm</code>( <var class="Arg">x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the norm of octonion <var class="Arg">x</var>. Recall that an octonion algebra with norm <span class="Math">N</span> satisfies the composition property <span class="Math">N(xy) = N(x)N(y)</span>. In the canonical basis for <code class="func">OctonionAlgebra</code> (<a href="chap2.html#X78767B4A7F44F77D"><span class="RefLink">2.1-2</span></a>), the norm is the sum of the squares of the coefficients.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Trace</code>( <var class="Arg">x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the trace of octonion <var class="Arg">x</var>. In the canonical basis for <code class="func">OctonionAlgebra</code> (<a href="chap2.html#X78767B4A7F44F77D"><span class="RefLink">2.1-2</span></a>), the trace is twice the coefficient of the identity element <code class="code">e8</code>. The trace and real part are related via <code class="code">RealPart(<var class="Arg">x</var>) = Trace(<var class="Arg">x</var>)*One(<var class="Arg">x</var>)/2</code>. Note that <code class="code">Trace(<var class="Arg">x</var>)</code> is an element of <code class="code">LeftActingDomain(<var class="Arg">A</var>)</code>, where <var class="Arg">A</var> is the octonion algebra containing <var class="Arg">x</var>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ComplexConjugate</code>( <var class="Arg">x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the octonion conjugate of octonion <var class="Arg">x</var>, defined by <code class="code">One(x)*Trace(x) - x</code>. In the canonical basis of <code class="func">OctonionAlgebra</code> (<a href="chap2.html#X78767B4A7F44F77D"><span class="RefLink">2.1-2</span></a>), this method negates the coefficients of <span class="Math">e_1, e_2, \ldots, e_7</span> but leaves the identity <span class="Math">e_8</span> fixed.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RealPart</code>( <var class="Arg">x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the real component of octonion <var class="Arg">x</var>, defined by <code class="code"> (1/2)*One(x)*Trace(x)</code>. Note that <code class="code">RealPart</code> returns an octonion in the subspace spanned by the octonion identity element while <code class="code">Trace</code> returns an element in the coefficient field of the octonion algebra.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OctonionToRealVector</code>( <var class="Arg">B</var>, <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RealToOctonionVector</code>( <var class="Arg">B</var>, <var class="Arg">y</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Let <var class="Arg">x</var> be an octonion vector of the form <span class="Math">x = (x_1, x_2, ..., x_n)</span>, for <span class="Math">x_i</span> octonion valued coefficients. Let <var class="Arg">B</var> be a basis for the octonion algebra containing coefficients <span class="Math">x_i</span>. The function <code class="code">OctonionToRealVector(<var class="Arg">B</var>, <var class="Arg">x</var>)</code> returns a vector <var class="Arg">y</var> of length <span class="Math">8n</span> containing the concatenation of the coefficients of <span class="Math">x_i</span> in the octonion basis given by <var class="Arg">B</var>. The function <code class="code">RealToOctonionVector(<var class="Arg">B</var>, <var class="Arg">y</var>)</code> provides the inverse operation.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ VectorToIdempotentMatrix</code>( <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Let <var class="Arg">x</var> be a vector satisfying <code class="code">IsHomogeneousList</code> and <code class="code">IsAssociative</code> with elements that satisfy <code class="code">IsCyc</code>, <code class="code">IsQuaternion</code>, or <code class="code">IsOctonion</code>. Then this function returns the idempotent matrix <code class="code">M/Trace(M)</code> where <code class="code">M = TransposedMat([ComplexConjugate(<var class="Arg">x</var>)])*[<var class="Arg">x</var>]</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ WeylReflection</code>( <var class="Arg">r</var>, <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Let <var class="Arg">r</var> be a vector satisfying <code class="code">IsHomogeneousList</code> and <code class="code"> IsAssociative</code> with elements in <code class="code">IsCyc</code>, <code class="code">IsQuaternion</code>, or <code class="code"> IsOctonion</code> and let <code class="code">IsHomogeneousList(Flat([<var class="Arg">r</var>,<var class="Arg">x</var>]))</code>. Then this function returns the Weyl reflection of vector <var class="Arg">x</var> using the projector defined by <code class="code">VectorToIdempotentMatrix(<var class="Arg">r</var>)</code>. Specifically, the result is <code class="code">x - 2*x*VectorToIdempotentMatrix(r)</code>.</p>
<p>The <strong class="pkg">ALCO</strong> package provides some additional tools for studying quaternion algebras in <strong class="pkg">GAP</strong>. These tools include methods to compute the quaternion norm and trace, certain important bases, and the subrings generated by those bases. <strong class="pkg">GAP</strong> already provides some built-in tools to construct and study the quaternion algebra in the standard Hamiltonian basis. The following example illustrates these tools:</p>
<div class="example"><pre><span class="GAPprompt">gap></span> <span class="GAPinput">H := QuaternionAlgebra(Rationals);</span>
<algebra-with-one of dimension 4 over Rationals>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsQuaternion(Random(H));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsAssociative(H);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCommutative(H);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">One(H);</span>
e
<span class="GAPprompt">gap></span> <span class="GAPinput">b := BasisVectors(CanonicalBasis(H));</span>
[ e, i, j, k ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(b, ComplexConjugate);</span>
[ e, (-1)*i, (-1)*j, (-1)*k ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(b, Inverse);</span>
[ e, (-1)*i, (-1)*j, (-1)*k ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(b, RealPart);</span>
[ e, 0*e, 0*e, 0*e ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(b, ImaginaryPart);</span>
[ 0*e, e, k, (-1)*j ]</pre></div>
<p>Note that the <strong class="pkg">GAP</strong> method <code class="code">ImaginaryPart</code> acting on objects that satisfy <code class="code">IsQuaternion</code> involves dividing by <code class="code">i</code>, which yields a different result than the <code class="code">x - RealPart(x)</code> that some users may expect. The <strong class="pkg">ALCO</strong> package does not define an <code class="code">ImaginaryPart</code> method for octonions in order to avoid confusion about the behaviour of that method when applied to quaternions or octonions.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Norm</code>( <var class="Arg">x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the norm of quaternion <var class="Arg">x</var>. Recall that a quaternion algebra with norm <span class="Math">N</span> satisfies the composition property <span class="Math">N(xy) = N(x)N(y)</span>. In the canonical basis of <code class="code">QuaternionAlgebra</code>, the norm is the sum of the squares of the coefficients.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Trace</code>( <var class="Arg">x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the trace of quaternion <var class="Arg">x</var>, such that <code class="code">RealPart(<var class="Arg">x</var>) = Trace(<var class="Arg">x</var>)*One(<var class="Arg">x</var>)/2</code>. In the canonical basis of <code class="code">QuaternionAlgebra</code>, the trace is twice the coefficient of the identity element.</p>
<div class="example"><pre><span class="GAPprompt">gap></span> <span class="GAPinput">H := QuaternionAlgebra(Rationals);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b := BasisVectors(CanonicalBasis(H));</span>
[ e, i, j, k ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(b, Trace);</span>
[ 2, 0, 0, 0 ]</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HurwitzIntegers</code></td><td class="tdright">( global variable )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsHurwitzInt</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The <code class="code">HurwitzIntegers</code> are a subring of the quaternion algebra with elements that have the geometry of scaled <span class="Math">D_4</span> lattice. This ring is named and studied in <a href="chapBib.html#biBconway_quaternions_2003">[CS03, p. 55]</a>. <code class="code">CanonicalBasis(HurwitzIntegers)</code> returns <code class="func">QuaternionD4Basis</code> (<a href="chap2.html#X78FF8724803E2AB4"><span class="RefLink">2.4-4</span></a>). We can test whether a quaternion is in <code class="code">HurwitzIntegers</code> using the operation <code class="code">IsHurwitzInt(<var class="Arg">x</var>)</code>.</p>
<div class="example"><pre><span class="GAPprompt">gap></span> <span class="GAPinput">f := BasisVectors(Basis(HurwitzIntegers));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for x in f do Display(x); od;</span>
(-1/2)*e+(-1/2)*i+(-1/2)*j+(1/2)*k
(-1/2)*e+(-1/2)*i+(1/2)*j+(-1/2)*k
(-1/2)*e+(1/2)*i+(-1/2)*j+(-1/2)*k
e
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAll(f, IsHurwitzInt);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAll(f/2, IsHurwitzInt);</span>
false</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ QuaternionD4Basis</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>The <strong class="pkg">ALCO</strong> package loads a basis for a quaternion algebra over ℚ with the geometry of a <span class="Math">D_4</span> simple root system. The ℤ-span of this basis is the <code class="func">HurwitzIntegers</code> (<a href="chap2.html#X7A4069927811A5B7"><span class="RefLink">2.4-3</span></a>) ring. These basis vectors close under pairwise reflection or multiplication to form a <span class="Math"> D_4</span> root system.</p>
<div class="example"><pre><span class="GAPprompt">gap></span> <span class="GAPinput">B := QuaternionD4Basis;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for x in BasisVectors(B) do Display(x); od;</span>
(-1/2)*e+(-1/2)*i+(-1/2)*j+(1/2)*k
(-1/2)*e+(-1/2)*i+(1/2)*j+(-1/2)*k
(-1/2)*e+(1/2)*i+(-1/2)*j+(-1/2)*k
e</pre></div>
<p>The icosian ring is a subring of the quaternion algebra over the "golden field" <span class="Math">\mathbb{Q}(\sqrt{5})</span> This ring is described and studied in <a href="chapBib.html#biBconway_sphere_2013">[CS13, pp. 207-211]</a> and <a href="chapBib.html#biBwilson_finite_2009">[Wil09a, p. 220]</a>. The icosian ring has <span class="Math">120</span> units, or elements with quaternion norm of <span class="Math">1</span>. These units are closed under quaternion multiplication. These icosian units also exhibit a <span class="Math">H_4</span> geometry in the sense that they are closed under Weyl reflection relative to the standard Euclidean inner product defined by the quaternion norm. The Coxeter group generated by these reflections is the group <span class="Math">W(H_4)</span>. The coefficients of an icosian in the standard quaternion basis belong to the integer subring of the golden field, meaning that these coefficients have the form <span class="Math">a + b \sigma</span>, where <span class="Math">a,b</span> are rational integers and <span class="Math">\sigma = (1-\sqrt{5})/2</span>. The Euclidean inner product between any two icosians will be a golden field integer. As described in the references given above, if we define a new inner product between icosians that discards the <span class="Math">\sigma</span>-coefficient <span class="Math">b</span> then the icosian ring will exhibit the geometry of an <span class="Math">E_8</span> lattice relative to this new inner product. It is also possible to define a Leech lattice geometry on icosian triples.</p>
<p>The <strong class="pkg">ALCO</strong> package provides tools to explore these icosian properties and construct certain important lattices using icosians. Note that the golden field can be constructed in <strong class="pkg">GAP</strong> as <code class="code">NF(5, [ 1, 4 ])</code> or <code class="code">Field(Sqrt(5))</code> and that <span class="Math">\sigma</span> is given by <code class="code">-EB(5)</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IcosianRing</code></td><td class="tdright">( global variable )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsIcosian</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The <code class="code">IcosianRing</code> is a subring of the the quaternion algebra over <code class="code">NF(5,[1,4])</code> generated by a set of vectors with an <span class="Math">H_4</span> geometry. This ring is described well in <a href="chapBib.html#biBwilson_finite_2009">[Wil09a, p. 220]</a>. <code class="code">CanonicalBasis(IcosianRing)</code> returns <code class="func">IcosianH4Generators</code> (<a href="chap2.html#X7F4267A77E5F8547"><span class="RefLink">2.5-2</span></a>). We can test whether a quaternion is in <code class="code">IcosianRing</code> using the operation <code class="code">IsIcosian(<var class="Arg">x</var>)</code>. Note that a quaternion is an icosian when it is a ℤ-linear combination of the union of <code class="code">Basis(IcosianRing)</code> and <code class="code">Basis(IcosianRing)*EB(5)</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IcosianH4Generators</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>The <strong class="pkg">ALCO</strong> package loads this variable as a basis for a quaternion algebra over <code class="code">NF(5,[1,4])</code>. Note that a quaternion is an icosian when it is a ℤ-linear combination of the union of <code class="code"> IcosianH4Generators</code> and <code class="code">IcosianH4Generators*EB(5)</code>. These basis vectors close under pairwise reflection or multiplication to form a <span class="Math">H_4</span> set of vectors.</p>
<div class="example"><pre><span class="GAPprompt">gap></span> <span class="GAPinput">f := BasisVectors(IcosianH4Generators);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for x in f do Display(x); od;</span>
(-1)*i
(-1/2*E(5)^2-1/2*E(5)^3)*i+(1/2)*j+(-1/2*E(5)-1/2*E(5)^4)*k
(-1)*j
(-1/2*E(5)-1/2*E(5)^4)*e+(1/2)*j+(-1/2*E(5)^2-1/2*E(5)^3)*k</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GoldenModSigma</code>( <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>For <var class="Arg">x</var> in the golden field <code class="code">NF(5,[ 1, 4 ])</code>, this function returns the rational coefficient of <code class="code">1</code> in the basis <code class="code">Basis(NF(5,[ 1, 4 ]), [1, (1-Sqrt(5))/2])</code>.</p>
<p>Certain addition integer subrings of elements satisfying <code class="code">IsCyc</code> are also included in the <strong class="pkg">ALCO</strong> package. The rings constructed below are described in <a href="chapBib.html#biBconway_quaternions_2003">[CS03, pp. 16-18]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ EisensteinIntegers</code></td><td class="tdright">( global variable )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsEisenInt</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The <code class="code">EisensteinIntegers</code> is a subring of the complex numbers generated by <code class="code">1</code> and <code class="code">E(3)</code>. This subring has the geometry of an <span class="Math">A_2</span> lattice. This ring is described well in <a href="chapBib.html#biBconway_quaternions_2003">[CS03, p. 16]</a>. We can test whether an element in <code class="code">IsCyc</code> is an Eisenstein integer using the operation <code class="code">IsEisenInt(<var class="Arg">x</var>)</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KleinianIntegers</code></td><td class="tdright">( global variable )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsKleinInt</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The <code class="code">KleinianIntegers</code> is a subring of the complex numbers generated by <code class="code">1</code> and <code class="code">(1/2)*(-1+Sqrt(-7))</code>. This ring is described in <a href="chapBib.html#biBconway_quaternions_2003">[CS03, p. 18]</a>. We can test whether an element in <code class="code">IsCyc</code> is an Kleinian integer using the operation <code class="code">IsKleinInt(<var class="Arg">x</var>)</code>.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.