login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for SandBoxBiQuaternions3 revision 1 of 1

1
Editor:
Time: 2007/11/18 17:50:44 GMT-8
Note: new

changed:
-
Biquaternion Calculus Domain

**D. Cyganski and Bill Page - July 2007**

This version is implemented as a new domain in SPAD.

\begin{spad}
)abbrev domain BIQ BiQuaternion
BiQuaternion(R:Join(OrderedSet,CommutativeRing)): Exports == Implementation where
  C==>Complex Expression R
  Exports ==> QuaternionCategory(C) with
    qlist: List C -> %
    -- takes a complex list (parameter l) into a quaternion
    listq: % -> List C
    -- takes a quaternion into a list
    matrixq: % -> SquareMatrix(2,C)
    -- takes a quaternion into a matrix
    sig0: ()->%
    sig1: ()->%
    sig2: ()->%
    sig3: ()->%
    siglist: % -> List C
    -- Pauli basis representation of the biquaternion
    if C has PartialDifferentialRing(Symbol) then
      D: (%,Symbol,Symbol,Symbol) -> %
    -- quaternion derivative
    if C has RadicalCategory and C has Field and C has TranscendentalFunctionCategory then
      abs: % -> C
      rot: (C,%) -> %
      exp: % -> %
    -- biquaternion rotation
      _/: (%,%) -> %
      _/: (C,%) -> %
      _/: (%,C) -> %
    coerce: Complex R -> %

  Implementation ==> Quaternion C add
    import C

    coerce(z:Complex R):% ==
      import Expression(R),ComplexFunctions2(R,Expression R)
      map(coerce,z)::%

    -- Define a function that takes a complex list (parameter l) into a quaternion
    qlist(l:List C):%==
      import Integer
      quatern(l 1,l 2,l 3,l 4)
    -- Define a function that takes a quaternion into a list
    listq(x:%):List C == [real x, imagI x, imagJ x, imagK x]
    -- Define a function that takes a biquat into a matrix
    matrixq(x:%):SquareMatrix(2,C) ==
       import List List C
       matrix [[real x + imaginary()*imagI(x), imagJ x + imaginary()*imagK(x)],
               [-imagJ(x) + imaginary()*imagK(x), real x - imaginary()*imagI(x)]]
    -- Define a function that produces the Pauli basis representation of the biquaternion
    siglist(x:%):List C == [real x, -imaginary()*imagK(x),-imaginary()*imagJ(x),imaginary()*imagI(x)]
    sig0():% == quatern(1,0,0,0)
    sig1():% == imaginary() * quatern(0,0,0,1)
    sig2():% == imaginary() * quatern(0,0,1,0)
    sig3():% == -imaginary() * quatern(0,1,0,0)
    -- Define the quaternion derivative (Morgan, 2001, Eq. 2)
    if C has PartialDifferentialRing(Symbol) then
      D(q:%,x:Symbol,y:Symbol,z:Symbol):% == sig1()*D(q,x)+sig2()*D(q,y)+sig3()*D(q,z)
    -- Define a biquaternion rotation operator that takes a biquat through a rotation
    -- of theta radians about the axis defined by the unit q biquat (Morgan 2001, Eq 3).
    if C has RadicalCategory and C has Field and C has TranscendentalFunctionCategory then
      rot(theta:C,q:%):% ==
        import Integer, SparseMultivariatePolynomial(Integer, Kernel(C))
        cos(theta/2::C)::% - imaginary()*q*sin(theta/2::C)
      ((x:%) / (y:%)):% == x*inv(y)$%
      ((x:C) / (y:%)):% == (x::%)*inv(y)
      ((x:%) / (y:C)):% == x*inv(y::%)
      abs(q:%):C ==
        sqrt(retract(q*conjugate(q)))
      exp(q:%):% ==
        import Integer, SparseMultivariatePolynomial(Integer, Kernel(C))
        q-conjugate(q)=0 => exp(retract(q+conjugate(q))/2::C)*sig0()
        exp(retract(q+conjugate(q))/2::C) * (sig0()*cos(abs(q)) + (q-conjugate(q))/abs(q-conjugate(q)) * sin(abs(q)))
\end{spad}

\begin{axiom}
)show BiQuaternion
\end{axiom}

\begin{axiom}
Q := BiQuaternion Integer
q:Q := quatern(q0,q1,q2,q3) 
\end{axiom}

For testing the derivative we define this set of operators
\begin{axiom}
Ft:=operator 'Ft; Fx:=operator 'Fx; Fy:=operator 'Fy; Fz:=operator 'Fz;
\end{axiom}

Now form a general quaternion which is a function of x,y,z
\begin{axiom}
F:Q:=Ft(x,y,z)*sig0()+Fx(x,y,z)*sig1()+Fy(x,y,z)*sig2()+Fz(x,y,z)*sig3()
\end{axiom}


In the Pauli basis the derivative of this biquat should produce (Morgan 2001, eq 1)::

  D(Ft+F.sigma)=div(F)+(grad(Ft)+%i*curl(F)).sigma

which it does
\begin{axiom}
siglist(D(F,x,y,z))
\end{axiom}


Test

 (comment out this test later)

\begin{axiom}
%i::Q
abs(%i::Q)
abs(q)
cos(abs(%i::Q))
\end{axiom}

If I've defined these correctly, then the rotation about the x axis defined by qx below by 2 radians
should give the same answer as exponentiation to '-%i*qx' (not a very complete test)
\begin{axiom}
qx:Q:=sig1()
siglist(rot(2,qx))
siglist(exp(-%i::Q*qx))
\end{axiom}

which it does
\begin{axiom}
(%%(-1)=%%(-2))@Boolean
\end{axiom}

I would love to express a proof of equality such as::

   rot(theta,q) = exp((-theta/2)*%i*q)

for arbitrary real $\theta$ and biquaternion q as I would in Maple.

\begin{axiom}
theta:Complex Expression Integer := _\theta
map(simplify, siglist( rot(theta,q) - exp((-%i*theta/2) * q)))::List Expression Complex Integer
\end{axiom}

\begin{axiom}
map(simplify,siglist(rot(2,qx)))
\end{axiom}



Biquaternion Calculus Domain

D. Cyganski and Bill Page - July 2007

This version is implemented as a new domain in SPAD.

\begin{spad} )abbrev domain BIQ BiQuaternion BiQuaternion(R:Join(OrderedSet,CommutativeRing)): Exports == Implementation where C==>Complex Expression R Exports ==> QuaternionCategory(C) with qlist: List C -> % -- takes a complex list (parameter l) into a quaternion listq: % -> List C -- takes a quaternion into a list matrixq: % -> SquareMatrix(2,C) -- takes a quaternion into a matrix sig0: ()->% sig1: ()->% sig2: ()->% sig3: ()->% siglist: % -> List C -- Pauli basis representation of the biquaternion if C has PartialDifferentialRing(Symbol) then D: (%,Symbol,Symbol,Symbol) -> % -- quaternion derivative if C has RadicalCategory and C has Field and C has TranscendentalFunctionCategory then abs: % -> C rot: (C,%) -> % exp: % -> % -- biquaternion rotation _/: (%,%) -> % _/: (C,%) -> % _/: (%,C) -> % coerce: Complex R -> %

Implementation ==> Quaternion C add import C

coerce(z:Complex R):% == import Expression(R),ComplexFunctions2(R,Expression R) map(coerce,z)::%

-- Define a function that takes a complex list (parameter l) into a quaternion qlist(l:List C):%== import Integer quatern(l 1,l 2,l 3,l 4) -- Define a function that takes a quaternion into a list listq(x:%):List C == [real x, imagI x, imagJ x, imagK x] -- Define a function that takes a biquat into a matrix matrixq(x:%):SquareMatrix(2,C) == import List List C matrix [[real x + imaginary()imagI(x), imagJ x + imaginary()imagK(x)], [-imagJ(x) + imaginary()imagK(x), real x - imaginary()imagI(x)]] -- Define a function that produces the Pauli basis representation of the biquaternion siglist(x:%):List C == [real x, -imaginary()imagK(x),-imaginary()imagJ(x),imaginary()imagI(x)] sig0():% == quatern(1,0,0,0) sig1():% == imaginary() quatern(0,0,0,1) sig2():% == imaginary() quatern(0,0,1,0) sig3():% == -imaginary() quatern(0,1,0,0) -- Define the quaternion derivative (Morgan, 2001, Eq. 2) if C has PartialDifferentialRing(Symbol) then D(q:%,x:Symbol,y:Symbol,z:Symbol):% == sig1()D(q,x)+sig2()D(q,y)+sig3()D(q,z) -- Define a biquaternion rotation operator that takes a biquat through a rotation -- of theta radians about the axis defined by the unit q biquat (Morgan 2001, Eq 3). if C has RadicalCategory and C has Field and C has TranscendentalFunctionCategory then rot(theta:C,q:%):% == import Integer, SparseMultivariatePolynomial(Integer, Kernel(C)) cos(theta/2::C)::% - imaginary()qsin(theta/2::C) ((x:%) / (y:%)):% == xinv(y)$% ((x:C) / (y:%)):% == (x::%)inv(y) ((x:%) / (y:C)):% == xinv(y::%) abs(q:%):C == sqrt(retract(qconjugate(q))) exp(q:%):% == import Integer, SparseMultivariatePolynomial(Integer, Kernel(C)) q-conjugate(q)=0 => exp(retract(q+conjugate(q))/2::C)sig0() exp(retract(q+conjugate(q))/2::C) (sig0()cos(abs(q)) + (q-conjugate(q))/abs(q-conjugate(q)) * sin(abs(q))) \end{spad}

\begin{axiom} )show BiQuaternion \end{axiom}

\begin{axiom} Q := BiQuaternion Integer q:Q := quatern(q0,q1,q2,q3) \end{axiom}

For testing the derivative we define this set of operators \begin{axiom} Ft:=operator 'Ft; Fx:=operator 'Fx; Fy:=operator 'Fy; Fz:=operator 'Fz; \end{axiom}

Now form a general quaternion which is a function of x,y,z \begin{axiom} F:Q:=Ft(x,y,z)sig0()+Fx(x,y,z)sig1()+Fy(x,y,z)sig2()+Fz(x,y,z)sig3() \end{axiom}

In the Pauli basis the derivative of this biquat should produce (Morgan 2001, eq 1):

  D(Ft+F.sigma)=div(F)+(grad(Ft)+%i*curl(F)).sigma

which it does \begin{axiom} siglist(D(F,x,y,z)) \end{axiom}

Test

(comment out this test later)

\begin{axiom} %i::Q abs(%i::Q) abs(q) cos(abs(%i::Q)) \end{axiom}

If I've defined these correctly, then the rotation about the x axis defined by qx below by 2 radians should give the same answer as exponentiation to -%i*qx (not a very complete test) \begin{axiom} qx:Q:=sig1() siglist(rot(2,qx)) siglist(exp(-%i::Q*qx)) \end{axiom}

which it does \begin{axiom} (%%(-1)=%%(-2))@Boolean \end{axiom}

I would love to express a proof of equality such as:

   rot(theta,q) = exp((-theta/2)*%i*q)

for arbitrary real $\theta$ and biquaternion q as I would in Maple.

\begin{axiom} theta:Complex Expression Integer := _\theta map(simplify, siglist( rot(theta,q) - exp((-%itheta/2) q)))::List Expression Complex Integer \end{axiom}

\begin{axiom} map(simplify,siglist(rot(2,qx))) \end{axiom}


Some or all expressions may not have rendered properly, because Axiom returned the following error:
Error: export HOME=/var/zope2/var/LatexWiki; ulimit -t 600; export LD_LIBRARY_PATH=/usr/local/lib/fricas/target/x86_64-linux-gnu/lib; LANG=en_US.UTF-8 /usr/local/lib/fricas/target/x86_64-linux-gnu/bin/fricas -nosman < /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/405825799807838506-25px.axm
Killed

Checking for foreign routines FRICAS="/usr/local/lib/fricas/target/x86_64-linux-gnu" spad-lib="/usr/local/lib/fricas/target/x86_64-linux-gnu/lib/libspad.so" foreign routines found openServer result -2 FriCAS Computer Algebra System Version: FriCAS 1.3.9 Timestamp: Sun Sep 17 04:15:23 PM CEST 2023 ----------------------------------------------------------------------------- Issue )copyright to view copyright notices. Issue )summary for a summary of useful system commands. Issue )quit to leave FriCAS and return to shell. -----------------------------------------------------------------------------

(1) -> (1) -> (1) -> (1) -> (1) -> (1) -> <spad> )abbrev domain BIQ BiQuaternion BiQuaternion(R:Join(OrderedSet,CommutativeRing)): Exports == Implementation where C==>Complex Expression R Exports ==> QuaternionCategory(C) with qlist: List C -> % -- takes a complex list (parameter l) into a quaternion listq: % -> List C -- takes a quaternion into a list matrixq: % -> SquareMatrix(2,C) -- takes a quaternion into a matrix sig0: ()->% sig1: ()->% sig2: ()->% sig3: ()->% siglist: % -> List C -- Pauli basis representation of the biquaternion if C has PartialDifferentialRing(Symbol) then D: (%,Symbol,Symbol,Symbol) -> % -- quaternion derivative if C has RadicalCategory and C has Field and C has TranscendentalFunctionCategory then abs: % -> C rot: (C,%) -> % exp: % -> % -- biquaternion rotation /: (%,%) -> % /: (C,%) -> % _/: (%,C) -> % coerce: Complex R -> %

Implementation ==> Quaternion C add import C

coerce(z:Complex R):% == import Expression(R),ComplexFunctions2(R,Expression R) map(coerce,z)::%

-- Define a function that takes a complex list (parameter l) into a quaternion qlist(l:List C):%== import Integer quatern(l 1,l 2,l 3,l 4) -- Define a function that takes a quaternion into a list listq(x:%):List C == [real x, imagI x, imagJ x, imagK x] -- Define a function that takes a biquat into a matrix matrixq(x:%):SquareMatrix(2,C) == import List List C matrix [[real x + imaginary()imagI(x), imagJ x + imaginary()imagK(x)], [-imagJ(x) + imaginary()imagK(x), real x - imaginary()imagI(x)]] -- Define a function that produces the Pauli basis representation of the biquaternion siglist(x:%):List C == [real x, -imaginary()imagK(x),-imaginary()imagJ(x),imaginary()imagI(x)] sig0():% == quatern(1,0,0,0) sig1():% == imaginary() quatern(0,0,0,1) sig2():% == imaginary() quatern(0,0,1,0) sig3():% == -imaginary() quatern(0,1,0,0) -- Define the quaternion derivative (Morgan, 2001, Eq. 2) if C has PartialDifferentialRing(Symbol) then D(q:%,x:Symbol,y:Symbol,z:Symbol):% == sig1()D(q,x)+sig2()D(q,y)+sig3()D(q,z) -- Define a biquaternion rotation operator that takes a biquat through a rotation -- of theta radians about the axis defined by the unit q biquat (Morgan 2001, Eq 3). if C has RadicalCategory and C has Field and C has TranscendentalFunctionCategory then rot(theta:C,q:%):% == import Integer, SparseMultivariatePolynomial(Integer, Kernel(C)) cos(theta/2::C)::% - imaginary()qsin(theta/2::C) ((x:%) / (y:%)):% == xinv(y)$% ((x:C) / (y:%)):% == (x::%)inv(y) ((x:%) / (y:C)):% == xinv(y::%) abs(q:%):C == sqrt(retract(qconjugate(q))) exp(q:%):% == import Integer, SparseMultivariatePolynomial(Integer, Kernel(C)) q-conjugate(q)=0 => exp(retract(q+conjugate(q))/2::C)sig0() exp(retract(q+conjugate(q))/2::C) (sig0()cos(abs(q)) + (q-conjugate(q))/abs(q-conjugate(q)) sin(abs(q)))</spad> Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/8384816125117043612-25px001.spad using old system compiler. BIQ abbreviates domain BiQuaternion ------------------------------------------------------------------------ initializing NRLIB BIQ for BiQuaternion compiling into NRLIB BIQ ***** Domain: R already in scope importing Complex Expression R compiling exported coerce : Complex R -> % Time: 0.05 SEC.

compiling exported qlist : List Complex Expression R -> % Time: 0.01 SEC.

compiling exported listq : % -> List Complex Expression R Time: 0.00 SEC.

compiling exported matrixq : % -> SquareMatrix(2,Complex Expression R) Time: 0.01 SEC.

compiling exported siglist : % -> List Complex Expression R Time: 0.00 SEC.

compiling exported sig0 : () -> % Time: 0.00 SEC.

compiling exported sig1 : () -> % Time: 0 SEC.

compiling exported sig2 : () -> % Time: 0.00 SEC.

compiling exported sig3 : () -> % Time: 0.00 SEC.

compiling exported D : (%,Symbol,Symbol,Symbol) -> % Time: 0.02 SEC.

**** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (RadicalCategory) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (Field) **** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (TranscendentalFunctionCategory) compiling exported rot : (Complex Expression R,%) -> % Time: 0.04 SEC.

compiling exported / : (%,%) -> % Time: 0.00 SEC.

compiling exported / : (Complex Expression R,%) -> % Time: 0 SEC.

compiling exported / : (%,Complex Expression R) -> % Time: 0 SEC.

compiling exported abs : % -> Complex Expression R Time: 0 SEC.

compiling exported exp : % -> % Time: 0.07 SEC.

**** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (Field) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (RadicalCategory) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (TranscendentalFunctionCategory) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (CharacteristicNonZero) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (ConvertibleTo (InputForm)) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (DifferentialRing) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (Eltable (Complex (Expression R)) (Complex (Expression R))) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (EntireRing) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (Evalable (Complex (Expression R))) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (Field) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (InnerEvalable (Symbol) (Complex (Expression R))) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (IntegerNumberSystem) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (LinearlyExplicitOver (Integer)) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (OrderedSet) ** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (RetractableTo (Fraction (Integer))) **** Domain: (Complex (Expression R)) already in scope augmenting (Complex (Expression R)): (RetractableTo (Integer)) (time taken in buildFunctor: 30710)

;;; *** |BiQuaternion| REDEFINED

;;; *** |BiQuaternion| REDEFINED Time: 0.19 SEC.

Cumulative Statistics for Constructor BiQuaternion Time: 0.40 seconds

finalizing NRLIB BIQ Processing BiQuaternion for Browser database: --->-->BiQuaternion(constructor): Not documented!!!! --->-->BiQuaternion((qlist (% (List (Complex (Expression R)))))): Not documented!!!! --->-->BiQuaternion((listq ((List (Complex (Expression R))) %))): Not documented!!!! --->-->BiQuaternion((matrixq ((SquareMatrix 2 (Complex (Expression R))) %))): Not documented!!!! --->-->BiQuaternion((sig0 (%))): Not documented!!!! --->-->BiQuaternion((sig1 (%))): Not documented!!!! --->-->BiQuaternion((sig2 (%))): Not documented!!!! --->-->BiQuaternion((sig3 (%))): Not documented!!!! --->-->BiQuaternion((siglist ((List (Complex (Expression R))) %))): Not documented!!!! --->-->BiQuaternion((D (% % (Symbol) (Symbol) (Symbol)))): Not documented!!!! --->-->BiQuaternion((abs ((Complex (Expression R)) %))): Not documented!!!! --->-->BiQuaternion((rot (% (Complex (Expression R)) %))): Not documented!!!! --->-->BiQuaternion((exp (% %))): Not documented!!!! --->-->BiQuaternion((/ (% % %))): Not documented!!!! --->-->BiQuaternion((/ (% (Complex (Expression R)) %))): Not documented!!!! --->-->BiQuaternion((/ (% % (Complex (Expression R))))): Not documented!!!! --->-->BiQuaternion((coerce (% (Complex R)))): Not documented!!!! --->-->BiQuaternion(): Missing Description ; compiling file "/var/aw/var/LatexWiki/BIQ.NRLIB/BIQ.lsp" (written 19 SEP 2023 08:17:38 AM):

; wrote /var/aw/var/LatexWiki/BIQ.NRLIB/BIQ.fasl ; compilation finished in 0:00:00.052 ------------------------------------------------------------------------ BiQuaternion is now explicitly exposed in frame initial BiQuaternion will be automatically loaded when needed from /var/aw/var/LatexWiki/BIQ.NRLIB/BIQ

(1) -> )show BiQuaternion

BiQuaternion(R: Join(OrderedSet,CommutativeRing)) is a domain constructor Abbreviation for BiQuaternion is BIQ This constructor is exposed in this frame. ------------------------------- Operations --------------------------------

?? : (Integer, %) -> % ?? : (%, %) -> % ?? : (PositiveInteger, %) -> % ?+? : (%, %) -> % -? : % -> % ?-? : (%, %) -> % ?=? : (%, %) -> Boolean 1 : () -> % 0 : () -> % ?^? : (%, PositiveInteger) -> % annihilate? : (%, %) -> Boolean antiCommutator : (%, %) -> % associator : (%, %, %) -> % coerce : Complex(R) -> % coerce : Integer -> % coerce : % -> OutputForm commutator : (%, %) -> % conjugate : % -> % latex : % -> String one? : % -> Boolean opposite? : (%, %) -> Boolean recip : % -> Union(%,"failed") sample : () -> % sig0 : () -> % sig1 : () -> % sig2 : () -> % sig3 : () -> % zero? : % -> Boolean ?~=? : (%, %) -> Boolean ?? : (%, Fraction(Integer)) -> % if Complex(Expression(R)) has FIELD ?? : (Fraction(Integer), %) -> % if Complex(Expression(R)) has FIELD ?? : (%, Integer) -> % if Complex(Expression(R)) has LINEXP(INT) ?? : (%, Complex(Expression(R))) -> % ?? : (Complex(Expression(R)), %) -> % ?*? : (NonNegativeInteger, %) -> % ?/? : (%, Complex(Expression(R))) -> % if Complex(Expression(R)) has FIELD and Complex(Expression(R)) has RADCAT and Complex(Expression(R)) has TRANFUN ?/? : (Complex(Expression(R)), %) -> % if Complex(Expression(R)) has FIELD and Complex(Expression(R)) has RADCAT and Complex(Expression(R)) has TRANFUN ?/? : (%, %) -> % if Complex(Expression(R)) has FIELD and Complex(Expression(R)) has RADCAT and Complex(Expression(R)) has TRANFUN ?<? : (%, %) -> Boolean if Complex(Expression(R)) has ORDSET ?<=? : (%, %) -> Boolean if Complex(Expression(R)) has ORDSET ?>? : (%, %) -> Boolean if Complex(Expression(R)) has ORDSET ?>=? : (%, %) -> Boolean if Complex(Expression(R)) has ORDSET D : (%, Symbol, Symbol, Symbol) -> % if Complex(Expression(R)) has PDRING(SYMBOL) D : (%, (Complex(Expression(R)) -> Complex(Expression(R)))) -> % D : (%, (Complex(Expression(R)) -> Complex(Expression(R))), NonNegativeInteger) -> % D : (%, List(Symbol), List(NonNegativeInteger)) -> % if Complex(Expression(R)) has PDRING(SYMBOL) D : (%, Symbol, NonNegativeInteger) -> % if Complex(Expression(R)) has PDRING(SYMBOL) D : (%, List(Symbol)) -> % if Complex(Expression(R)) has PDRING(SYMBOL) D : (%, Symbol) -> % if Complex(Expression(R)) has PDRING(SYMBOL) D : (%, NonNegativeInteger) -> % if Complex(Expression(R)) has DIFRING D : % -> % if Complex(Expression(R)) has DIFRING ?^? : (%, Integer) -> % if Complex(Expression(R)) has FIELD ?^? : (%, NonNegativeInteger) -> % abs : % -> Complex(Expression(R)) if Complex(Expression(R)) has FIELD and Complex(Expression(R)) has RADCAT and Complex(Expression(R)) has TRANFUN or Complex(Expression(R)) has RNS associates? : (%, %) -> Boolean if Complex(Expression(R)) has ENTIRER characteristic : () -> NonNegativeInteger charthRoot : % -> Union(%,"failed") if Complex(Expression(R)) has CHARNZ coerce : Fraction(Integer) -> % if Complex(Expression(R)) has FIELD or Complex(Expression(R)) has RETRACT(FRAC(INT)) coerce : Complex(Expression(R)) -> % convert : % -> InputForm if Complex(Expression(R)) has KONVERT(INFORM) differentiate : (%, (Complex(Expression(R)) -> Complex(Expression(R)))) -> % differentiate : (%, (Complex(Expression(R)) -> Complex(Expression(R))), NonNegativeInteger) -> % differentiate : (%, List(Symbol), List(NonNegativeInteger)) -> % if Complex(Expression(R)) has PDRING(SYMBOL) differentiate : (%, Symbol, NonNegativeInteger) -> % if Complex(Expression(R)) has PDRING(SYMBOL) differentiate : (%, List(Symbol)) -> % if Complex(Expression(R)) has PDRING(SYMBOL) differentiate : (%, Symbol) -> % if Complex(Expression(R)) has PDRING(SYMBOL) differentiate : (%, NonNegativeInteger) -> % if Complex(Expression(R)) has DIFRING differentiate : % -> % if Complex(Expression(R)) has DIFRING elt : (%, Complex(Expression(R))) -> % if Complex(Expression(R)) has ELTAB(COMPLEX(EXPR(R)),COMPLEX(EXPR(R))) eval : (%, Symbol, Complex(Expression(R))) -> % if Complex(Expression(R)) has IEVALAB(SYMBOL,COMPLEX(EXPR(R))) eval : (%, List(Symbol), List(Complex(Expression(R)))) -> % if Complex(Expression(R)) has IEVALAB(SYMBOL,COMPLEX(EXPR(R))) eval : (%, List(Equation(Complex(Expression(R))))) -> % if Complex(Expression(R)) has EVALAB(COMPLEX(EXPR(R))) eval : (%, Equation(Complex(Expression(R)))) -> % if Complex(Expression(R)) has EVALAB(COMPLEX(EXPR(R))) eval : (%, Complex(Expression(R)), Complex(Expression(R))) -> % if Complex(Expression(R)) has EVALAB(COMPLEX(EXPR(R))) eval : (%, List(Complex(Expression(R))), List(Complex(Expression(R)))) -> % if Complex(Expression(R)) has EVALAB(COMPLEX(EXPR(R))) exp : % -> % if Complex(Expression(R)) has FIELD and Complex(Expression(R)) has RADCAT and Complex(Expression(R)) has TRANFUN exquo : (%, %) -> Union(%,"failed") if Complex(Expression(R)) has ENTIRER imagI : % -> Complex(Expression(R)) imagJ : % -> Complex(Expression(R)) imagK : % -> Complex(Expression(R)) inv : % -> % if Complex(Expression(R)) has FIELD leftPower : (%, NonNegativeInteger) -> % leftPower : (%, PositiveInteger) -> % leftRecip : % -> Union(%,"failed") listq : % -> List(Complex(Expression(R))) map : ((Complex(Expression(R)) -> Complex(Expression(R))), %) -> % matrixq : % -> SquareMatrix(2,Complex(Expression(R))) max : (%, %) -> % if Complex(Expression(R)) has ORDSET min : (%, %) -> % if Complex(Expression(R)) has ORDSET norm : % -> Complex(Expression(R)) plenaryPower : (%, PositiveInteger) -> % qlist : List(Complex(Expression(R))) -> % quatern : (Complex(Expression(R)), Complex(Expression(R)), Complex(Expression(R)), Complex(Expression(R))) -> % rational : % -> Fraction(Integer) if Complex(Expression(R)) has INS rational? : % -> Boolean if Complex(Expression(R)) has INS rationalIfCan : % -> Union(Fraction(Integer),"failed") if Complex(Expression(R)) has INS real : % -> Complex(Expression(R)) reducedSystem : Matrix(%) -> Matrix(Complex(Expression(R))) reducedSystem : (Matrix(%), Vector(%)) -> Record(mat: Matrix(Complex(Expression(R))),vec: Vector(Complex(Expression(R)))) reducedSystem : (Matrix(%), Vector(%)) -> Record(mat: Matrix(Integer),vec: Vector(Integer)) if Complex(Expression(R)) has LINEXP(INT) reducedSystem : Matrix(%) -> Matrix(Integer) if Complex(Expression(R)) has LINEXP(INT) retract : % -> Complex(Expression(R)) retract : % -> Fraction(Integer) if Complex(Expression(R)) has RETRACT(FRAC(INT)) retract : % -> Integer if Complex(Expression(R)) has RETRACT(INT) retractIfCan : % -> Union(Complex(Expression(R)),"failed") retractIfCan : % -> Union(Fraction(Integer),"failed") if Complex(Expression(R)) has RETRACT(FRAC(INT)) retractIfCan : % -> Union(Integer,"failed") if Complex(Expression(R)) has RETRACT(INT) rightPower : (%, NonNegativeInteger) -> % rightPower : (%, PositiveInteger) -> % rightRecip : % -> Union(%,"failed") rot : (Complex(Expression(R)), %) -> % if Complex(Expression(R)) has FIELD and Complex(Expression(R)) has RADCAT and Complex(Expression(R)) has TRANFUN siglist : % -> List(Complex(Expression(R))) smaller? : (%, %) -> Boolean if Complex(Expression(R)) has ORDSET subtractIfCan : (%, %) -> Union(%,"failed") unit? : % -> Boolean if Complex(Expression(R)) has ENTIRER unitCanonical : % -> % if Complex(Expression(R)) has ENTIRER unitNormal : % -> Record(unit: %,canonical: %,associate: %) if Complex(Expression(R)) has ENTIRER

(1) -> Q := BiQuaternion Integer

$$ BiQuaternion(Integer) \leqno(1) $$

Type: Type q:Q := quatern(q0,q1,q2,q3)

$$ q0+{q1 \ i}+{q2 \ j}+{q3 \ k} \leqno(2) $$

Type: BiQuaternion(Integer) (3) -> Ft:=operator 'Ft; Fx:=operator 'Fx; Fy:=operator 'Fy; Fz:=operator 'Fz;

Type: BasicOperator (4) -> F:Q:=Ft(x,y,z)sig0()+Fx(x,y,z)sig1()+Fy(x,y,z)sig2()+Fz(x,y,z)sig3()

$$ {Ft \left( {x, \: y, \: z} \right)} -{{Fz \left( {x, \: y, \: z} \right)} \ i \ i}+{{Fy \left( {x, \: y, \: z} \right)} \ i \ j}+{{Fx \left( {x, \: y, \: z} \right)} \ i \ k} \leqno(4) $$

Type: BiQuaternion(Integer) (5) -> siglist(D(F,x,y,z))

$$ \left[ {{{Fz \sb {{,3}}} \left( {x, \: y, \: z} \right)}+{{Fy \sb {{,2}}} \left( {x, \: y, \: z} \right)}+{{Fx \sb {{,1}}} \left( {x, \: y, \: z} \right)}}, \: {{{Ft \sb {{,1}}} \left( {x, \: y, \: z} \right)}+{{\left( {{Fz \sb {{,2}}} \left( {x, \: y, \: z} \right)} -{{Fy \sb {{,3}}} \left( {x, \: y, \: z} \right)} \right)} \ i}}, \: {{{Ft \sb {{,2}}} \left( {x, \: y, \: z} \right)}+{{\left( -{{Fz \sb {{,1}}} \left( {x, \: y, \: z} \right)}+{{Fx \sb {{,3}}} \left( {x, \: y, \: z} \right)} \right)} \ i}}, \: {{{Ft \sb {{,3}}} \left( {x, \: y, \: z} \right)}+{{\left( {{Fy \sb {{,1}}} \left( {x, \: y, \: z} \right)} -{{Fx \sb {{,2}}} \left( {x, \: y, \: z} \right)} \right)} \ i}} \right] \leqno(5) $$

Type: List(Complex(Expression(Integer))) (6) -> %i::Q


Some or all expressions may not have rendered properly, because Latex returned the following error:
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022/Debian) (preloaded format=latex)
 restricted \write18 enabled.
entering extended mode
(./6243234185980723709-16.0px.tex
LaTeX2e <2022-11-01> patch level 1
L3 programming layer <2023-01-16>
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2022/07/02 v1.4n Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo))
(/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty
(/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def))
(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
(/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def))
(/usr/share/texlive/texmf-dist/tex/latex/bbm-macros/bbm.sty)
(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)
(/usr/share/texlive/texmf-dist/tex/latex/pstricks/pstricks.sty
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/dvips.def)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/dvipsnam.def))
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/pst-xkey.tex
(/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/keyval.tex)))))
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pstricks.tex
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pst-fp.tex
`pst-fp' v0.06, 2020/11/20 (hv))
(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex)))
(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered
.code.tex))) (/usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code
.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonomet
ric.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.cod
e.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison
.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.
tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code
.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.
tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerari
thmetics.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex)))
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex))
`PSTricks' v3.18  <2022/11/28> (tvz,hv)
--- We are running latex or xelatex ---
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pstricks.con)
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pstricks-color.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pstricks-arrows.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pstricks-dots.tex)
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pstricks.con))
(/usr/share/texlive/texmf-dist/tex/generic/pstricks/pst-fp.tex
`pst-fp' v0.06, 2020/11/20 (hv)))
(/usr/share/texlive/texmf-dist/tex/latex/graphics/epsfig.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg))))
(/usr/share/texlive/texmf-dist/tex/latex/pst-grad/pst-grad.sty
(/usr/share/texlive/texmf-dist/tex/generic/pst-grad/pst-grad.tex
`pst-grad' v1.06, 2006/11/27 (tvz,dg,hv)))
(/usr/share/texlive/texmf-dist/tex/latex/pst-plot/pst-plot.sty
(/usr/share/texlive/texmf-dist/tex/latex/xkeyval/pst-xkey.sty)
(/usr/share/texlive/texmf-dist/tex/latex/multido/multido.sty
(/usr/share/texlive/texmf-dist/tex/generic/multido/multido.tex
 v1.42, 2010/05/14 <tvz>))
(/usr/share/texlive/texmf-dist/tex/generic/pst-plot/pst-plot.tex
(/usr/share/texlive/texmf-dist/tex/generic/pst-tools/pst-tools.tex
`PST-tools' v0.12, 2021/09/23 (hv))
(/usr/share/texlive/texmf-dist/tex/generic/pstricks-add/pstricks-add.tex
(/usr/share/texlive/texmf-dist/tex/generic/pst-node/pst-node.tex
 v1.43, 2022/01/31)
(/usr/share/texlive/texmf-dist/tex/generic/pst-arrow/pst-arrow.tex
`pst-arrow' v0.05, 2021/11/16 (dr,hv))
(/usr/share/texlive/texmf-dist/tex/generic/pst-3d/pst-3d.tex
`PST-3d' v1.11, 2010/02/14 (tvz))
(/usr/share/texlive/texmf-dist/tex/generic/pst-math/pst-math.tex
`pst-math' v0.66 , (CJ,hv)) `pstricks-add' v3.93, 2022/11/21 (dr,hv))
 v1.94, 2022/11/21 (tvz,hv)))
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
(/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty)

Package geometry Warning: `lmargin' and `rmargin' result in NEGATIVE (-108.405p t). `width' should be shortened in length.

) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/setspace/setspace.sty) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty (/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex Bootstrap'ing: catcodes, docmode, (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex ) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex)

Xy-pic version 3.8.9 <2013/10/06> Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others Xy-pic is free software: see the User's Guide for details.

Loading kernel: messages; fonts; allocations: state, direction, utility macros; pictures: \xy, positions, objects, decorations; kernel objects: directionals, circles, text; options; algorithms: directions, edges, connections; Xy-pic loaded) (/usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty)) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex Xy-pic option: All features v.3.8 (/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex Xy-pic option: Curve and Spline extension v.3.12 curve, circles, loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex Xy-pic option: Frame and Bracket extension v.3.14 loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex Xy-pic option: Computer Modern tip extension v.3.7 (/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex Xy-pic option: More Tips extension v.3.11 loaded) loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex Xy-pic option: Line styles extension v.3.10 loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex Xy-pic option: Rotate and Scale extension v.3.8 loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex Xy-pic option: Colour extension v.3.11 loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex Xy-pic option: Matrix feature v.3.14 loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded) (/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex Xy-pic option: Graph feature v.3.11 loaded) loaded) (/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) (/usr/share/texlive/texmf-dist/tex/latex/graphviz/graphviz.sty (/usr/share/texlive/texmf-dist/tex/latex/psfrag/psfrag.sty)) (/usr/share/texmf/tex/latex/sagetex.sty Writing sage input file 6243234185980723709-16.0px.sage ) (/usr/share/texlive/texmf-dist/tex/latex/gnuplottex/gnuplottex.sty (/usr/share/texlive/texmf-dist/tex/latex/moreverb/moreverb.sty) (/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) (/usr/share/texlive/texmf-dist/tex/generic/catchfile/catchfile.sty (/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty) (/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty) (/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty))

Package gnuplottex Warning: Shell escape not enabled. (gnuplottex) You'll need to convert the graphs yourself.

) (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-dvips.def) No file 6243234185980723709-16.0px.aux. (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) geometry driver: auto-detecting geometry detected driver: dvips Missing $ inserted. <inserted text> $ l.147 _ /: (%,%) -> % (/usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) Missing $ inserted. <inserted text> $ l.151

Overfull \hbox (20.18788pt too wide) in paragraph at lines 123--151 []\T1/cmr/m/n/12 )abbrev do-main BIQ Bi-Quater-nion Bi-Quater-nion(R:Join(Order edSet,CommutativeRing)): Ex-ports == Im-ple-men-ta-tion where C==>Complex [1] (/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd)

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 197.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 201.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 204.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 207.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 210.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 216.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 221.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 224.

[2]

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 229.

LaTeX Warning: Characters dropped after `\end{axiom}' on input line 232.

[3] [4] [5] Overfull \hbox (296.77309pt too wide) detected at line 317 [] [6] (./6243234185980723709-16.0px.aux) ) (see the transcript file for additional information) Output written on 6243234185980723709-16.0px.dvi (6 pages, 7032 bytes). Transcript written on 6243234185980723709-16.0px.log.