[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Axiom-developer] 20080818.02.tpd.patch (new input files (Stumbo, Cygans
From: |
daly |
Subject: |
[Axiom-developer] 20080818.02.tpd.patch (new input files (Stumbo, Cyganski, Hemmecke)) |
Date: |
Tue, 19 Aug 2008 00:50:23 -0500 |
Three new input files are added for regression testing
biquat.input (David Cyganski)
ifthenelse.input (Fabio Stumbo)
sqrt3.input (Ralf Hemmecke)
Fabio Stumbo was added to the credits list in readme and setq.lisp
=======================================================================
diff --git a/changelog b/changelog
index 04a4914..377aa85 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,13 @@
+20080818 tpd src/input/Makefile biquat.input added
+20080818 dxc src/input/biquat.input added
+20080818 dxc "David Cyganski" (no known email)
+20080818 tpd src/input/Makefile ifthenelse.input added
+20080818 fxs src/input/ifthenelse.input added
+20080818 tpd src/interp/setq.lisp add Fabio Stumbo
+20080818 tpd readme add Fabio Stumbo
+20080818 fxs "Fabio Stumbo" (no known email)
+20080818 tpd src/input/Makefile sqrt3.input added
+20080818 rhx src/input/sqrt3.input added
20080818 tpd src/input/Makefile typetower.input added
20080818 rhx src/input/typetower.input added
20080817 tpd src/algebra/vector.spad doc ravel from CartesianTensor
diff --git a/readme b/readme
index b2e20ab..7735016 100644
--- a/readme
+++ b/readme
@@ -240,8 +240,8 @@ at the axiom command prompt will prettyprint the list.
"Gerhard Schneider Martin Schoenert Marshall Schor"
"Frithjof Schulze Fritz Schwarz Nick Simicich"
"William Sit Elena Smirnova Jonathan Steinbach"
-"Christine Sundaresan Robert Sutor Moss E. Sweedler"
-"Eugene Surowitz"
+"Fabio Stumbo Christine Sundaresan Robert Sutor"
+"Moss E. Sweedler Eugene Surowitz"
"Max Tegmark James Thatcher Balbir Thomas"
"Mike Thomas Dylan Thurston Barry Trager"
"Themos T. Tsikas"
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index e70b0d9..0d919d6 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -278,7 +278,8 @@ REGRES= algaggr.regress algbrbf.regress algfacob.regress
alist.regress \
arrows.regress asinatan.regress asinhatanh.regress \
assign.regress atansqrt.regress \
asec.regress bags.regress bbtree.regress besselk.regress \
- binary.regress bop.regress bstree.regress bouquet.regress \
+ binary.regress biquat.regress \
+ bop.regress bstree.regress bouquet.regress \
bug100.regress bug101.regress \
bug103.regress bug10069.regress \
bugs.regress bug10312.regress bug6357.regress bug9057.regress \
@@ -315,7 +316,8 @@ REGRES= algaggr.regress algbrbf.regress algfacob.regress
alist.regress \
gstbl.regress heap.regress heat.regress help.regress \
herm.regress heugcd.regress \
hexadec.regress ico.regress ideal.regress \
- ifact.regress infprod.regress intaf.regress intbypart.regress \
+ ifact.regress ifthenelse.regress \
+ infprod.regress intaf.regress intbypart.regress \
intdeq.regress \
intef2.regress intef.regress intg0.regress intheory.regress \
intmix2.regress intmix.regress int.regress intrf.regress \
@@ -363,7 +365,8 @@ REGRES= algaggr.regress algbrbf.regress algfacob.regress
alist.regress \
series2.regress series.regress sersolve.regress set.regress \
sincos.regress sinhcosh.regress \
sincosex.regress sint.regress skew.regress slowint.regress \
- solvetra.regress space3.regress sqmatrix.regress sregset.regress \
+ solvetra.regress space3.regress sqmatrix.regress sqrt3.regress \
+ sregset.regress \
stbl.regress stream2.regress stream.regress streams.regress \
string.regress strtbl.regress summation.regress \
symbol.regress t111293.regress table.regress tancot.regress \
@@ -518,7 +521,8 @@ FILES= ${OUT}/algaggr.input ${OUT}/algbrbf.input
${OUT}/algfacob.input \
${OUT}/asec.input \
${OUT}/bags.input ${OUT}/bbtree.input ${OUT}/besselk.input \
${OUT}/bern.input \
- ${OUT}/bernpoly.input ${OUT}/binary.input ${OUT}/bop.input \
+ ${OUT}/bernpoly.input ${OUT}/binary.input ${OUT}/biquat.input \
+ ${OUT}/bop.input \
${OUT}/bouquet.input ${OUT}/bstree.input ${OUT}/bug6357.input \
${OUT}/bug9057.input ${OUT}/bug100.input ${OUT}/bug101.input \
${OUT}/bug103.input \
@@ -574,6 +578,7 @@ FILES= ${OUT}/algaggr.input ${OUT}/algbrbf.input
${OUT}/algfacob.input \
${OUT}/herm.input ${OUT}/heugcd.input \
${OUT}/hexadec.input ${OUT}/huang.input \
${OUT}/ico.input ${OUT}/ideal.input ${OUT}/ifact.input \
+ ${OUT}/ifthenelse.input \
${OUT}/images1.input ${OUT}/images1a.input ${OUT}/images3a.input \
${OUT}/images3.input ${OUT}/images6.input ${OUT}/images6a.input \
${OUT}/images7.input ${OUT}/images7a.input ${OUT}/infprod.input \
@@ -652,7 +657,8 @@ FILES= ${OUT}/algaggr.input ${OUT}/algbrbf.input
${OUT}/algfacob.input \
${OUT}/sinsin2.input ${OUT}/sint.input ${OUT}/skew.input \
${OUT}/slowint.input ${OUT}/solvetra.input ${OUT}/space3.input \
${OUT}/spiral.input \
- ${OUT}/sqmatrix.input ${OUT}/sregset.input ${OUT}/stbl.input \
+ ${OUT}/sqmatrix.input ${OUT}/sqrt3.input \
+ ${OUT}/sregset.input ${OUT}/stbl.input \
${OUT}/stream2.input ${OUT}/stream.input ${OUT}/streams.input \
${OUT}/string.input ${OUT}/strtbl.input ${OUT}/summation.input \
${OUT}/symbol.input \
@@ -722,6 +728,7 @@ DOCFILES= \
${DOC}/bbtree.input.dvi ${DOC}/besselk.input.dvi \
${DOC}/bern.input.dvi \
${DOC}/bernpoly.input.dvi ${DOC}/binary.input.dvi \
+ ${DOC}/biquat.input.dvi \
${DOC}/bop.input.dvi ${DOC}/bouquet.input.dvi \
${DOC}/bstree.input.dvi ${DOC}/bug10069.input.dvi \
${DOC}/bug100.input.dvi ${DOC}/bug101.input.dvi \
@@ -860,6 +867,7 @@ DOCFILES= \
${DOC}/hexadec.input.dvi ${DOC}/hilbert.as.dvi \
${DOC}/huang.input.dvi ${DOC}/ico.input.dvi \
${DOC}/ideal.input.dvi ${DOC}/ifact.input.dvi \
+ ${DOC}/ifthenelse.input.dvi \
${DOC}/images1a.input.dvi ${DOC}/images1.input.dvi \
${DOC}/images2a.input.dvi ${DOC}/images2.input.dvi \
${DOC}/images3a.input.dvi ${DOC}/images3.input.dvi \
@@ -993,7 +1001,8 @@ DOCFILES= \
${DOC}/skew.input.dvi ${DOC}/slowint.input.dvi \
${DOC}/solvetra.input.dvi ${DOC}/space3.input.dvi \
${DOC}/spadprof.input.dvi ${DOC}/spiral.input.dvi \
- ${DOC}/sqmatrix.input.dvi ${DOC}/sregset.input.dvi \
+ ${DOC}/sqmatrix.input.dvi ${DOC}/sqrt3.input.dvi \
+ ${DOC}/sregset.input.dvi \
${DOC}/stbl.input.dvi ${DOC}/stream2.input.dvi \
${DOC}/stream.input.dvi ${DOC}/streams.input.dvi \
${DOC}/string.input.dvi ${DOC}/strtbl.input.dvi \
diff --git a/src/input/biquat.input.pamphlet b/src/input/biquat.input.pamphlet
new file mode 100644
index 0000000..bfb3165
--- /dev/null
+++ b/src/input/biquat.input.pamphlet
@@ -0,0 +1,790 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input biquat.input}
+\author{D. Cyganski}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+@
+<<*>>=
+)spool biquat.output
+)set message test on
+)set message auto off
+)clear all
+
+@
+\section{Hamiltonian Biquaternions}
+
+Define the type $Q$ of Hamiltonian biquaternions (not to be confused with
+Clifford biquaternions which are an entirely different object)
+<<*>>=
+
+--S 1 of 43
+C:=Complex Expression Integer
+--R
+--R
+--R (1) Complex Expression Integer
+--R Type:
Domain
+--E 1
+
+--S 2 of 43
+Q:=Quaternion C
+--R
+--R
+--R (2) Quaternion Complex Expression Integer
+--R Type:
Domain
+--E 2
+
+--S 3 of 43
+q:Q:=quatern(q0,q1,q2,q3)
+--R
+--R
+--R (3) q0 + q1 i + q2 j + q3 k
+--R Type: Quaternion Complex Expression
Integer
+--E 3
+
+@
+Define a function that takes a complex list (parameter l) into a
+quaternion
+<<*>>=
+
+--S 4 of 43
+qlist(l:List C):Q==quatern(1.1,1.2,1.3,1.4)
+--R
+--R Function declaration qlist : List Complex Expression Integer ->
+--R Quaternion Complex Expression Integer has been added to
+--R workspace.
+--R Type:
Void
+--E 4
+
+@
+Define a function that takes a quaternion into a list
+<<*>>=
+
+--S 5 of 43
+listq(x:Q):List C == [real x, imagI x, imagJ x, imagK x]
+--R
+--R Function declaration listq : Quaternion Complex Expression Integer
+--R -> List Complex Expression Integer has been added to workspace.
+--R Type:
Void
+--E 5
+
+@
+Define a function that takes a biquat into a matrix
+<<*>>=
+
+--S 6 of 43
+matrixq(x:Q):Matrix C == matrix _
+ [[real x + %i*imagI(x), imagJ x + %i*imagK(x)],_
+ [-imagJ(x) + %i*imagK(x), real x - %i*imagI(x)]]
+--R
+--R Function declaration matrixq : Quaternion Complex Expression Integer
+--R -> Matrix Complex Expression Integer has been added to
+--R workspace.
+--R Type:
Void
+--E 6
+
+@
+\section{The Pauli basis Biquaternions}
+
+The quaternion package in axiom is based upon the Hamiltonian basis,
+i, j, k, in contrast to the Pauli basis used in the Morgan papers which
+make certain operations correspond more closely (in the sense of
+visualization as ordering of components is more natural so that
+classical operations can be easily identified) to vector calculus
+functions and connect with more directly with various spinor QM
+formulations. To both follow these papers and obtain these visualization
+benefits, we will define and use the Pauli basis also.
+
+The Pauli basis in terms of the Hamiltonian quaternion basis
+<<*>>=
+
+--S 7 of 43
+sig0:=quatern(1,0,0,0)::Q
+--R
+--R
+--R (7) 1
+--R Type: Quaternion Complex Expression
Integer
+--E 7
+
+--S 8 of 43
+sig1:=%i*quatern(0,0,0,1)::Q
+--R
+--R
+--R (8) %i k
+--R Type: Quaternion Complex Expression
Integer
+--E 8
+
+--S 9 of 43
+sig2:=%i*quatern(0,0,1,0)::Q
+--R
+--R
+--R (9) %i j
+--R Type: Quaternion Complex Expression
Integer
+--E 9
+
+--S 10 of 43
+sig3:=-%i*quatern(0,1,0,0)::Q
+--R
+--R
+--R (10) - %i i
+--R Type: Quaternion Complex Expression
Integer
+--E 10
+
+@
+For purposes of manipulation and display it would be best if we either
+\begin{enumerate}
+\item Copy the quaternion source code and edit it to use $\sigma_i$ as
+symbols for the basis rather than i, j, k and change the definition of
+multiplication to correspond to this Pauli basis so that all current
+display and entry functions are flipped to the new basis
+\item Use the $\sigma$ basis above with the existing package but define a
+new display function, say sigrep, that can show us the results in Pauli
+form at will, but otherwise show it in Hamiltonian basis
+\end{enumerate}
+
+While 2 is not as natural and convenient, it is easier to code and would
+automatically provide a development that could be seen in the visually
+appealing Pauli form, or in the standard Hamiltonian form of biquaternions.
+
+After a quick review and finding no fast path to 2, and not wishing to get
+into the mechanics of compiling an axiom package instead of working on
+the physics, I have taken the yet easier path and simply defined the
+simplest display function that gives me access to seeing Pauli basis
+results: a list of the four Pauli basis coefficients.
+
+Define a function that produces the Pauli basis representation of the
+biquaternion.
+<<*>>=
+
+--S 11 of 43
+siglist(x:Q):List C == [real x, -imagK(x)*%i, -imagJ(x)*%i, %i*imagI(x)]
+--R
+--R Function declaration siglist : Quaternion Complex Expression Integer
+--R -> List Complex Expression Integer has been added to workspace.
+--R Type:
Void
+--E 11
+
+@
+\section{Biquaternion Calculus}
+
+Define the quaternion derivative (Morgan, 2001, Eq. 2)
+<<*>>=
+
+--S 12 of 43
+D(q:Q,x:Symbol,y:Symbol,z:Symbol):Q==sig1*D(q,x)+sig2*D(q,y)+sig3*D(q,z)
+--R
+--R Function declaration D : (Quaternion Complex Expression Integer,
+--R Symbol,Symbol,Symbol) -> Quaternion Complex Expression Integer
+--R has been added to workspace.
+--R Type:
Void
+--E 12
+
+@
+For testing the derivative we define this set of operators
+<<*>>=
+
+--S 13 of 43
+Ft:=operator 'Ft
+--R
+--R
+--R (13) Ft
+--R Type:
BasicOperator
+--E 13
+
+--S 14 of 43
+Fx:=operator 'Fx
+--R
+--R
+--R (14) Fx
+--R Type:
BasicOperator
+--E 14
+
+--S 15 of 43
+Fy:=operator 'Fy
+--R
+--R
+--R (15) Fy
+--R Type:
BasicOperator
+--E 15
+
+--S 16 of 43
+Fz:=operator 'Fz
+--R
+--R
+--R (16) Fz
+--R Type:
BasicOperator
+--E 16
+
+@
+Now form a general quaternion which is a function of x, y, z
+<<*>>=
+
+--S 17 of 43
+F:Q:=Ft(x,y,z)*sig0+Fx(x,y,z)*sig1+Fy(x,y,z)*sig2+Fz(x,y,z)*sig3
+--R
+--R
+--R (17) Ft(x,y,z) - Fz(x,y,z)%i i + Fy(x,y,z)%i j + Fx(x,y,z)%i k
+--R Type: Quaternion Complex Expression
Integer
+--E 17
+
+@
+In the Pauli basis the derivative of this biquat should produce
+(Morgan 2001, eq 1):
+\begin{verbatim}
+ D(Ft+F.sigma)=div(F)+(grad(Ft)+%i*curl(F)).sigma
+\end{verbatim}
+<<*>>=
+
+--S 18 of 43
+siglist(D(F,x,y,z))
+--R
+--R Compiling function D with type (Quaternion Complex Expression
+--R Integer,Symbol,Symbol,Symbol) -> Quaternion Complex Expression
+--R Integer
+--R Compiling function siglist with type Quaternion Complex Expression
+--R Integer -> List Complex Expression Integer
+--R
+--R (18)
+--R [Fz (x,y,z) + Fy (x,y,z) + Fx (x,y,z),
+--R ,3 ,2 ,1
+--R Ft (x,y,z) + (Fz (x,y,z) - Fy (x,y,z))%i,
+--R ,1 ,2 ,3
+--R Ft (x,y,z) + (- Fz (x,y,z) + Fx (x,y,z))%i,
+--R ,2 ,1 ,3
+--R Ft (x,y,z) + (Fy (x,y,z) - Fx (x,y,z))%i]
+--R ,3 ,1 ,2
+--R Type: List Complex Expression
Integer
+--E 18
+
+@
+\section{Biquaternion Exponential}
+
+Define a function that evaluates the Biquat exponential by beginning
+with the biquat rotation.
+
+First let's introduce some refinement to the language we will use. In
+many texts and papers, the i, j, k or $\sigma_1$, $\sigma_2$, $\sigma_3$
+components of the biquaternion are called the imaginary components while
+the scalar or $\sigma_0$ component are called real. This introduces vast
+confusion when dealing with biquaternions in which there is a ``true''
+imaginary unit, \%i being used. We will adopt a variation on the language
+used by Gsponer and others. A biquat $[{\bf a}, {\bf b}, {\bf c}, {\bf d}]$
+has scalar component ${\bf a}$ which may have itself an imaginary component.
+The component $[{\bf 0}, {\bf b}, {\bf c}, {\bf d}]$ is its vector
+component which again may be complex:
+\begin{verbatim}
+ [0,b,c,d]=[0,Re(b),Re(c),Re(d)]+[0,Im(b),Im(c),Im(d)]=Re(Vec(q))+Im(Vec(q))
+\end{verbatim}
+Thus, for us, a ``real quaternion'' has real scalar and vector components
+and does not refer to a quaternion with only a scalar component as it would
+in the language adopted by the quatern package in Axiom.
+
+The rotation is a function of real number, theta and a unit norm, real
+vector quaternion. It's form is that of a simple complex quaternion
+exponential, R($\theta$,q)=$e^a$ where $a$ is an Imaginary Vector quaternions
+are like exponentials of pure imaginary numbers, resulting in each case in a
+unit norm object of the same type. For many of our purposes in the
+representation of relativistic and quantum mechanics it is the only type
+of quaternion for which we will have to evaluate the exponential.
+
+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).
+<<*>>=
+
+--S 19 of 43
+rot(theta:Expression Integer,q:Q):Q==cos(theta/2)-%i::Q*q*sin(theta/2)
+--R
+--R Function declaration rot : (Expression Integer,Quaternion Complex
+--R Expression Integer) -> Quaternion Complex Expression Integer has
+--R been added to workspace.
+--R Type:
Void
+--E 19
+
+@
+The rotation is a basis for defining the general exponential, since we
+can always extract the unit vector corresponding to a given biquaternion,
+all we need is the biquaternion abs operation, not provided by axiom
+(note, many texts and papers label the abs which is a complex valued
+$norm^2$ by the name ``norm'' -- very bad form -- I've adopted abs as
+the name to avoid this confusion.
+<<*>>=
+
+--S 20 of 43
+((x:Q)/(y:Q)):Q == x*inv(y)
+--R
+--R Function declaration ?/? : (Quaternion Complex Expression Integer,
+--R Quaternion Complex Expression Integer) -> Quaternion Complex
+--R Expression Integer has been added to workspace.
+--R Type:
Void
+--E 20
+
+--S 21 of 43
+abs(q:Q):C == sqrt((q*conjugate(q))::C)
+--R
+--R Function declaration abs : Quaternion Complex Expression Integer ->
+--R Complex Expression Integer has been added to workspace.
+--R Type:
Void
+--E 21
+
+--S 22 of 43
+exp(q:Q):Q == (_
+ q-conjugate(q)=0 => exp( (q+conjugate(q))::C/2)$C * sig0; _
+ exp( (q+conjugate(q))::C/2)$C * (sig0*cos(abs(q)) +_
+ (q-conjugate(q))/abs(q-conjugate(q))*sin(abs(q))) )
+--R
+--R Function declaration exp : Quaternion Complex Expression Integer ->
+--R Quaternion Complex Expression Integer has been added to
+--R workspace.
+--R Type:
Void
+--E 22
+
+@
+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 of \%i*qx (not a very complete test).
+<<*>>=
+
+--S 23 of 43
+qx:=sig1
+--R
+--R
+--R (23) %i k
+--R Type: Quaternion Complex Expression
Integer
+--E 23
+
+--S 24 of 43
+mm:=siglist(rot(2,qx))
+--R
+--R Compiling function / with type (Quaternion Complex Expression
+--R Integer,Quaternion Complex Expression Integer) -> Quaternion
+--R Complex Expression Integer
+--R There are 2 exposed and 6 unexposed library operations named cos
+--R having 1 argument(s) but none was determined to be applicable.
+--R Use HyperDoc Browse, or issue
+--R )display op cos
+--R to learn more about the available operations. Perhaps
+--R package-calling the operation or using coercions on the arguments
+--R will allow you to apply the operation.
+--R Cannot find a definition or applicable library operation named cos
+--R with argument type(s)
+--R Quaternion Complex Expression Integer
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--R AXIOM will attempt to step through and interpret the code.
+--R Compiling function rot with type (Expression Integer,Quaternion
+--R Complex Expression Integer) -> Quaternion Complex Expression
+--R Integer
+--R
+--R (24)
+--R 2 3 3 2
+--R cos(1)sin(1) + cos(1) + cos(1) sin(1) + (cos(1) - 1)sin(1)
+--R [-------------------------------- + ----------------------------- %i,
+--R 2 2 2 2
+--R 2sin(1) + 2cos(1) 2sin(1) + 2cos(1)
+--R 2 3 3 2
+--R - cos(1)sin(1) - cos(1) + cos(1) - sin(1) + (- cos(1) - 1)sin(1)
+--R ---------------------------------- + ---------------------------------
%i,
+--R 2 2 2 2
+--R 2sin(1) + 2cos(1) 2sin(1) + 2cos(1)
+--R 0, 0]
+--R Type: List Complex Expression
Integer
+--E 24
+
+--S 25 of 43
+nn:=siglist(exp(-%i::Q*qx))
+--R
+--R There are 2 exposed and 7 unexposed library operations named exp
+--R having 1 argument(s) but none was determined to be applicable.
+--R Use HyperDoc Browse, or issue
+--R )display op exp
+--R to learn more about the available operations. Perhaps
+--R package-calling the operation or using coercions on the arguments
+--R will allow you to apply the operation.
+--R Cannot find a definition or applicable library operation named exp
+--R with argument type(s)
+--R Quaternion Complex Expression Integer
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--R AXIOM will attempt to step through and interpret the code.
+--R Compiling function exp with type Quaternion Complex Expression
+--R Integer -> Quaternion Complex Expression Integer
+--R Compiling function abs with type Quaternion Complex Expression
+--R Integer -> Complex Expression Integer
+--R
+--R (25)
+--R 2 3 3 2
+--R cos(1)sin(1) + cos(1) + cos(1) sin(1) + (cos(1) - 1)sin(1)
+--R [-------------------------------- + ----------------------------- %i,
+--R 2 2 2 2
+--R 2sin(1) + 2cos(1) 2sin(1) + 2cos(1)
+--R 2 3 3 2
+--R - cos(1)sin(1) - cos(1) + cos(1) - sin(1) + (- cos(1) - 1)sin(1)
+--R ---------------------------------- + ---------------------------------
%i,
+--R 2 2 2 2
+--R 2sin(1) + 2cos(1) 2sin(1) + 2cos(1)
+--R 0, 0]
+--R Type: List Complex Expression
Integer
+--E 25
+
+--S 26 of 43
+(mm=nn)@Boolean
+--R
+--R
+--R (26) true
+--R Type:
Boolean
+--E 26
+
+@
+To express a proof of equality such as:
+\begin{verbatim}
+ rot(theta,q) = exp((-theta/2)*%i*q)
+\end{verbatim}
+for arbitrary real $\theta$ and biquaternion real using vector $q$ as one
+would in Maple, we need to express the fact that $q$ is a vector quantity
+with real coefficients in the Pauli basis representing a unit magnitude
+vector. One way to represent this is to create a quaternion called $qnv$,
+representing a general normalized (unit length) vector part only biquat with
+two independent variables $q1$ and $q2$ representing its only degrees of
+freedom.
+<<*>>=
+
+--S 27 of 43
+qnv:=q1*sig1+q2*sig2+sqrt(1-q1^2-q2^2)*sig3
+--R
+--R
+--R +---------------+
+--R | 2 2
+--R (27) - \|- q2 - q1 + 1 %i i + q2 %i j + q1 %i k
+--R Type: Quaternion Complex Expression
Integer
+--E 27
+
+@
+\section{Assumptions about Variables}
+
+Now, in the equations that will result, we will obtain subexpressions of the
+form $\sqrt{\theta^2}$. The positive root will always be appropriate in
+this formula and one way to get it (in other computer algebra systems)
+would be to restrict $\theta$ to positive values so as to avoid branches
+that would otherwise have to be properly selected to get an equality. Thus,
+one means to get the desired simplification is to perform the restriction
+of $\theta$ to positive values. My current understanding is: Axiom does not
+support variables with properties in the sense that Maple does (the
+*assume* facility).
+
+\section{Problems}
+
+Returning to the case at hand, let's expand a test of equality to the
+four biquat components and seek a way to prove that each component
+is zero.
+<<*>>=
+
+--S 28 of 43
+theta:=_\theta
+--R
+--R
+--R (28) \theta
+--R Type: Variable
\theta
+--E 28
+
+--S 29 of 43
+testqeq:=map(simplify,siglist(rot(theta,qnv)-exp((-theta/2)*%i*qnv)))_
+ ::List Expression Complex Integer
+--R
+--R
+--R (29)
+--R +-------+
+--R | 2
+--R \|\theta \theta
+--R [- cos(----------) + cos(------),
+--R 2 2
+--R +-------+
+--R +-------+ | 2
+--R | 2 \|\theta \theta
+--R %i q1\|\theta sin(----------) - %i \theta q1 sin(------)
+--R 2 2
+--R ---------------------------------------------------------,
+--R \theta
+--R +-------+
+--R +-------+ | 2
+--R | 2 \|\theta \theta
+--R %i q2\|\theta sin(----------) - %i \theta q2 sin(------)
+--R 2 2
+--R ---------------------------------------------------------,
+--R \theta
+--R
+--R +-------+
+--R +---------------+ +-------+ | 2
+--R | 2 2 | 2 \|\theta
+--R %i\|- q2 - q1 + 1 \|\theta sin(----------)
+--R 2
+--R +
+--R +---------------+
+--R \theta | 2 2
+--R - %i \theta sin(------)\|- q2 - q1 + 1
+--R 2
+--R /
+--R \theta
+--R ]
+--R Type: List Expression Complex
Integer
+--E 29
+
+@
+As is quite obvious from this result, the two equations would have been
+shown to be equal if positivity of the theta variable was enforced. This
+raises two questions
+\begin{enumerate}
+\item How would one perform a proof such as the above within the
+allowed operations of Axiom?
+\item How can Axiom be called a symbolic algebra system if basic notions
+of algebraic proof such as restrictions of a variable to the semiring
+of non-negative integers is disallowed?
+\end{enumerate}
+How are symbolic manipulations, proofs and solutions to be carried out
+without this basic notion? I am let to think that Axiom can only be
+considered a semi-numerical software system.
+
+\section{Rules and Pattern Matching}
+
+Let's try another way to answer question 1 by using symbolic pattern
+matching ``rules''. Define a rule that recognizes the specific case of
+the variable theta appearing in a construct that should be simplified
+given its positivity.
+<<*>>=
+
+--S 30 of 43
+posthetaRule:=rule sqrt(theta^2)==theta
+--R
+--R
+--R +------+
+--R | 2
+--R (30) \|theta == theta
+--R Type: RewriteRule(Integer,Integer,Expression
Integer)
+--E 30
+
+@
+But, now we encounter two new problems. First, apparently ``map'' does
+not work with rules, so I can't apply this rule in a simple fashion to
+the entire List generated by our test case above for any x.
+
+The ``map'' function only maps functions but we can easily turn a rule
+into an anonymous function.
+<<*>>=
+
+--S 31 of 43
+map(x+->posthetaRule(x), [0,sqrt(theta^2),0,sqrt(theta^2)])
+--R
+--R
+--R (31) [0,\theta,0,\theta]
+--R Type: List Expression
Integer
+--E 31
+
+@
+But even if we were to split our list above, and try to apply this rule
+to a component, we get this disappointing result:
+<<*>>=
+
+--S 32 of 43
+posthetaRule testqeq.1
+--R
+--R There are no library operations named posthetaRule
+--R Use HyperDoc Browse or issue
+--R )what op posthetaRule
+--R to learn if there is any operation containing " posthetaRule " in
+--R its name.
+--R
+--RDaly Bug
+--R Cannot find a definition or applicable library operation named
+--R posthetaRule with argument type(s)
+--R Expression Complex Integer
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--E 32
+
+@
+Apparently rules have builtin assumptions about the construction of
+the expression. If I override this for a real element of the list
+we are testing I can successfully get one answer.
+<<*>>=
+
+--S 33 of 43
+[posthetaRule (testqeq.i::Expression Integer) for i in 1..1]
+--R
+--R
+--R (32) [0]
+--R Type: List Expression
Integer
+--E 33
+
+@
+But this doesn't extend to the remainder of the list.
+<<*>>=
+
+--S 34 of 43
+[posthetaRule (testqeq.i::Expression Integer) for i in 1..4]
+--R
+--R
+--RDaly Bug
+--R Cannot convert from type Expression Complex Integer to Expression
+--R Integer for value
+--R +-------+
+--R +-------+ | 2
+--R | 2 \|\theta \theta
+--R %i q1\|\theta sin(----------) - %i \theta q1 sin(------)
+--R 2 2
+--R ---------------------------------------------------------
+--R \theta
+--R
+--E 34
+
+@
+because obviously we can't coerce an actually complex value into the
+Expression Integer type that the rule seems to want.
+
+Here is one way to create the necessary rule. Like everything else in
+Axiom rules are objects in some domain. We need to specify a domain
+for the rule that is compatible with the domain we wish to manipulate.
+So let's find out more about this domain:
+<<*>>=
+
+--S 35 of 43
+)show RewriteRule
+--R
+--R RewriteRule(Base: SetCategory,R: Join(Ring,PatternMatchable
Base,OrderedSet,ConvertibleTo Pattern Base),F: Join(FunctionSpace
R,PatternMatchable Base,ConvertibleTo Pattern Base)) is a domain constructor
+--R Abbreviation for RewriteRule is RULE
+--R This constructor is exposed in this frame.
+--R Issue )edit rule.spad.pamphlet to see algebra source code for RULE
+--R
+--R------------------------------- Operations --------------------------------
+--R ?=? : (%,%) -> Boolean coerce : Equation F -> %
+--R coerce : % -> OutputForm elt : (%,F,PositiveInteger) -> F
+--R ?.? : (%,F) -> F hash : % -> SingleInteger
+--R latex : % -> String lhs : % -> F
+--R pattern : % -> Pattern Base retract : % -> Equation F
+--R rhs : % -> F rule : (F,F,List Symbol) -> %
+--R rule : (F,F) -> % ?~=? : (%,%) -> Boolean
+--R quotedOperators : % -> List Symbol
+--R retractIfCan : % -> Union(Equation F,"failed")
+--R suchThat : (%,List Symbol,(List F -> Boolean)) -> %
+--R
+--E 35
+
+@
+We can provide satisfactory parameters of this domain constructor as follows:
+<<*>>=
+
+--S 36 of 43
+Complex Integer has PatternMatchable Integer
+--R
+--R
+--R (33) true
+--R Type:
Boolean
+--E 36
+
+--S 37 of 43
+Expression Complex Integer has FunctionSpace Complex Integer
+--R
+--R
+--R (34) true
+--R Type:
Boolean
+--E 37
+
+--S 38 of 43
+Expression Complex Integer has PatternMatchable Integer
+--R
+--R
+--R (35) true
+--R Type:
Boolean
+--E 38
+
+@
+So the following simplification works as hoped:
+<<*>>=
+
+--S 39 of 43
+posxRule:=(rule sqrt('theta^2)==theta)$RewriteRule(Integer,Complex Integer,_
+ Expression Complex Integer)
+--R
+--R
+--R +------+
+--R | 2
+--R (36) \|theta == theta
+--R Type: RewriteRule(Integer,Complex Integer,Expression Complex
Integer)
+--E 39
+
+--S 40 of 43
+map(x+->posxRule x, testqeq)
+--R
+--R
+--R (37) [0,0,0,0]
+--R Type: List Expression Complex
Integer
+--E 40
+
+@
+\section{Algebraic Domain of Computation}
+
+Recall that Axiom does things in a fundamentally {\sl algebraic} rather
+than {\sl symbolic} way. So although the pattern matching approach
+works, it goes somewhat against the overall philosophy of Axiom. It is
+possible to do almost anything by using rewrite rules including things
+that are mathematically incorrect. In this case the rule is simple and
+the results obvious but if it gets more complicated this can be a problem.
+
+Is there some ``axiomatic'', i.e. algebraic way to express the fact that
+$\theta$ is a positive real? well, what we really need is that
+$$\sqrt{\theta^2} = \theta$$
+be satisfied. Now consider that by definition $\sqrt{}$:
+<<*>>=
+
+--S 41 of 43
+test (sqrt(x)^2=x)
+--R
+--R
+--R (38) true
+--R Type:
Boolean
+--E 41
+
+@
+and so
+<<*>>=
+
+--S 42 of 43
+test (sqrt(sqrt(x)^2)=sqrt(x))
+--R
+--R
+--R (39) true
+--R Type:
Boolean
+--E 42
+
+@
+for any $x$. So the expression $\sqrt{(x)}$ is one such thing that has
+the desired property in the Expression domain. {\sl With exactly the
+appropriate loss of generality}, let us just suppose that $\theta$ is
+$\sqrt{(\beta)}$ for some $\beta$. Then if necessary we can also
+perform a change of variable back to $\theta$.
+<<*>>=
+
+--S 43 of 43
+eval(eval(testqeq,theta=sqrt(beta)),sqrt(beta)=theta)
+--R
+--R
+--R (40) [0,0,0,0]
+--R Type: List Expression Complex
Integer
+--E 43
+
+)spool
+)lisp (bye)
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
diff --git a/src/input/ifthenelse.input.pamphlet
b/src/input/ifthenelse.input.pamphlet
new file mode 100644
index 0000000..29c75b4
--- /dev/null
+++ b/src/input/ifthenelse.input.pamphlet
@@ -0,0 +1,299 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input ifthenelse.input}
+\author{Fabio Stumbo}
+\maketitle
+\begin{abstract}
+{\bf if-then-else: what is wrong?}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+@
+<<*>>=
+)spool ifthenelse.output
+)set message test on
+)set message auto off
+)clear all
+
+@
+I am having some problem with the if-then-else syntax in .input files
+
+{\bf Problem 1}: I refer to the Axiom book which ships with the program
+(version 2005/09). At page 204 it says that the usual rules for piling
+are suspended in conditional expressions and it gives 5 different ways
+which should be equivalent, namely:
+\begin{verbatim}
+
+ if i>0 then output("positive") else output("nonpositive")
+
+ if i>0 then output("positive")
+ else output("nonpositive")
+
+ if i>0 then output("positive")
+ else output("nonpositive")
+
+ if i>0
+ then output("positive")
+ else output("nonpositive")
+
+ if i>0
+ then output("positive")
+ else output("nonpositive")
+\end{verbatim}
+
+Well, I tried all of them, creating each time a blank r.input file with
+inside only:
+<<*>>=
+
+--S 1 of 20
+i:=2
+--R
+--R
+--R (1) 2
+--R Type:
PositiveInteger
+--E 1
+
+@
+followed by one of the ``if$\ldots$''.
+
+The result of the first two are ok, whereas the other three
+give some syntax error (different each time).
+<<*>>=
+
+--S 2 of 20
+for i in 2..2 repeat
+ if i>0 then output("positive") else output("nonpositive")
+--R
+--R positive
+--R Type:
Void
+--E 2
+
+--S 3 of 20
+for i in 2..2 repeat
+ if i>0 then output("positive")
+ else output("nonpositive")
+--R
+--R positive
+--R Type:
Void
+--E 3
+
+--S 4 of 20
+for i in 2..2 repeat
+ if i>0 then output("positive")
+ else output("nonpositive")
+--R
+--R positive
+--R Type:
Void
+--E 4
+
+--S 5 of 20
+for i in 2..2 repeat
+ if i>0
+ then output("positive")
+ else output("nonpositive")
+--R
+--R positive
+--R Type:
Void
+--E 5
+
+--S 6 of 20
+for i in 2..2 repeat
+ if i>0
+ then output("positive")
+ else output("nonpositive")
+--R
+--R Line 47: --R
+--R Line 48: --R positive
+--R Line 49: --R
Type: Void
+--R Line 50: --E 5
+--R Line 51:
+--R Line 52: --S 6 of 20
+--R Line 53: for i in 2..2 repeat
+--R Line 54: if i>0
+--R ..A
+--R Error A: (from #\A and on) Ignored from here
+--R Line 55: then output("positive")
+--R ....A
+--R Error A: Improper syntax.
+--R Error A: (from #\A up to ) Ignored.
+--R Line 56: else output("nonpositive")
+--R ....A........................B
+--R Error A: Improper syntax.
+--R Error A: (from #\A up to #\B) Ignored.
+--R Error B: Possibly missing a then
+--R Error B: (up to #\B) to here.
+--R 7 error(s) parsing
+--E 6
+
+--S 7 of 20
+i:=2
+--R
+--R
+--R (6) 2
+--R Type:
PositiveInteger
+--E 7
+
+--S 8 of 20
+for i in 2..2 repeat
+ if i>0 then
+ output(i)
+ output("positive")
+ else
+ output(i)
+ else output("nonpositive")
+--R
+--R Line 83: --R
+--R Line 84: --R
+--R Line 85: --R (6) 2
+--R Line 86: --R
Type: PositiveInteger
+--R Line 87: --E 7
+--R Line 88:
+--R Line 89: --S 8 of 20
+--R Line 90: for i in 2..2 repeat
+--R Line 91: if i>0 then
+--R Line 92: output(i)
+--R Line 93: output("positive")
+--R Line 94: else
+--R Line 95: output(i)
+--R Line 96: else output("nonpositive")
+--R ....A
+--R Error A: (from #\A up to ) Ignored.
+--R Error A: Improper syntax.
+--R 2 error(s) parsing
+--E 8
+
+--S 9 of 20
+i:=1.5
+--R
+--R
+--R (7) 1.5
+--R Type:
Float
+--E 9
+
+--S 10 of 20
+a:=
+ if i > 0 then
+ j:=sin(i*pi())
+ exp(j+1/j)
+ else
+ j:=cos(i*0.5*pi())
+ log(abs(j)**5+1)
+--R
+--R
+--R (8) 0.1353352832 3661269189
+--R Type:
Float
+--E 10
+
+@
+{\bf Problem 2:} again with if then else, in a complex function I
+noticed a wrong result (the function itself was ok). Simplifying,
+you can produce the same error with something like:
+<<*>>=
+
+--S 11 of 20
+test: (INT,INT) -> List(INT)
+--R
+--R Type:
Void
+--E 11
+
+--S 12 of 20
+test(a,b) ==
+ x:=0; y:=0
+ if (a rem b = 0) and b < 0 then
+ x := 1
+ y := 1
+ [x,y]
+--R
+--R Type:
Void
+--E 12
+
+--S 13 of 20
+4 rem -2
+--R
+--R
+--R (11) 0
+--R Type:
NonNegativeInteger
+--E 13
+
+--S 14 of 20
+test(4,-2)
+--R
+--R Compiling function test with type (Integer,Integer) -> List Integer
+--R
+--R (12) [1,1]
+--R Type: List
Integer
+--E 14
+
+@
+returns correctly [1,1], but
+<<*>>=
+
+--S 15 of 20
+4 rem -3
+--R
+--R
+--R (13) 1
+--R Type:
PositiveInteger
+--E 15
+
+--S 16 of 20
+test(4,-3)
+--R
+--R
+--R (14) [0,0]
+--R Type: List
Integer
+--E 16
+
+@
+or
+<<*>>=
+
+--S 17 of 20
+4 rem 2
+--R
+--R
+--R (15) 0
+--R Type:
NonNegativeInteger
+--E 17
+
+--S 18 of 20
+test(4,2)
+--R
+--R
+--R (16) [0,0]
+--R Type: List
Integer
+--E 18
+
+@
+wrongly returns [0,1]. The same happens if I write
+<<*>>=
+
+--S 19 of 20
+test1: (INT,INT) -> List(INT)
+--R
+--R Type:
Void
+--E 19
+
+--S 20 of 20
+test1(a,b) ==
+ x := 0; y := 0
+ if (a rem b = 0) and b < 0 then x := 1 ; y := 1
+ [x,y]
+--R
+--R Type:
Void
+--E 20
+
+@
+Why?
+<<*>>=
+)spool
+)lisp (bye)
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
diff --git a/src/input/sqrt3.input.pamphlet b/src/input/sqrt3.input.pamphlet
new file mode 100644
index 0000000..ad20ab9
--- /dev/null
+++ b/src/input/sqrt3.input.pamphlet
@@ -0,0 +1,249 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input sqrt3.input}
+\author{Ralf Hemmecke}
+\maketitle
+\begin{abstract}
+A demo involving the algebraic number $\sqrt{3}$.
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+@
+<<*>>=
+)spool sqrt3.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 23
+t1:=(sqrt(3)-3)*(sqrt(3)+1)/6
+--R
+--R
+--R +-+
+--R \|3
+--R (1) - ----
+--R 3
+--R Type:
AlgebraicNumber
+--E 1
+
+--S 2 of 23
+tt1:=-1/sqrt(3)
+--R
+--R
+--R +-+
+--R \|3
+--R (2) - ----
+--R 3
+--R Type:
AlgebraicNumber
+--E 2
+
+--S 3 of 23
+t2:=sqrt(3)/6
+--R
+--R
+--R +-+
+--R \|3
+--R (3) ----
+--R 6
+--R Type:
AlgebraicNumber
+--E 3
+
+--S 4 of 23
+t1+t2
+--R
+--R
+--R +-+
+--R \|3
+--R (4) - ----
+--R 6
+--R Type:
AlgebraicNumber
+--E 4
+
+--S 5 of 23
+tt1+t2
+--R
+--R
+--R +-+
+--R \|3
+--R (5) - ----
+--R 6
+--R Type:
AlgebraicNumber
+--E 5
+
+--S 6 of 23
+RAN ==> RECLOS FRAC INT
+--R
+--R Type:
Void
+--E 6
+
+--S 7 of 23
+x1:=(sqrt(3)$RAN-3)*(sqrt(3)$RAN+1)/6
+--R
+--R
+--R 1 +-+ 1 +-+ 1 +-+ 1
+--R (7) (- \|3 - -)\|3 + - \|3 - -
+--R 6 2 6 2
+--R Type: RealClosure Fraction
Integer
+--E 7
+
+--S 8 of 23
+xx1:=-1/sqrt(3)$RAN
+--R
+--R
+--R 1 +-+
+--R (8) - - \|3
+--R 3
+--R Type: RealClosure Fraction
Integer
+--E 8
+
+--S 9 of 23
+(x1=xx1)@Boolean
+--R
+--R
+--R (9) true
+--R Type:
Boolean
+--E 9
+
+--S 10 of 23
+s3:=sqrt(3)$RAN
+--R
+--R
+--R +-+
+--R (10) \|3
+--R Type: RealClosure Fraction
Integer
+--E 10
+
+--S 11 of 23
+(s3-3)*(s3+1)/6
+--R
+--R
+--R 1 +-+
+--R (11) - - \|3
+--R 3
+--R Type: RealClosure Fraction
Integer
+--E 11
+
+--S 12 of 23
+f3:=sqrt(3,5)$RAN
+--R
+--R
+--R 5+-+
+--R (12) \|3
+--R Type: RealClosure Fraction
Integer
+--E 12
+
+--S 13 of 23
+f25:=sqrt(1/25,5)$RAN
+--R
+--R
+--R +--+
+--R | 1
+--R (13) 5|--
+--R \|25
+--R Type: RealClosure Fraction
Integer
+--E 13
+
+--S 14 of 23
+f32:=sqrt(32/5,5)$RAN
+--R
+--R
+--R +--+
+--R |32
+--R (14) 5|--
+--R \| 5
+--R Type: RealClosure Fraction
Integer
+--E 14
+
+--S 15 of 23
+f27:=sqrt(27/5,5)$RAN
+--R
+--R
+--R +--+
+--R |27
+--R (15) 5|--
+--R \| 5
+--R Type: RealClosure Fraction
Integer
+--E 15
+
+--S 16 of 23
+expr1:=sqrt(f32-f27,3)
+--R
+--R
+--R +---------------+
+--R | +--+ +--+
+--R | |27 |32
+--R (16) 3|- 5|-- + 5|--
+--R \| \| 5 \| 5
+--R Type: RealClosure Fraction
Integer
+--E 16
+
+--S 17 of 23
+expr2:=(1+f3-f3^2)
+--R
+--R
+--R 5+-+2 5+-+
+--R (17) - \|3 + \|3 + 1
+--R Type: RealClosure Fraction
Integer
+--E 17
+
+--S 18 of 23
+expr1-f25*expr2
+--R
+--R
+--R (18) 0
+--R Type: RealClosure Fraction
Integer
+--E 18
+
+--S 19 of 23
+s:=sqrt(190)$RAN+sqrt(1751)$RAN-sqrt(208)$RAN-sqrt(1698)$RAN
+--R
+--R
+--R +----+ +---+ +----+ +---+
+--R (19) - \|1698 - \|208 + \|1751 + \|190
+--R Type: RealClosure Fraction
Integer
+--E 19
+
+--S 20 of 23
+approximate(s,10^-15)::Float
+--R
+--R
+--R (20) - 0.2341060678 6455900874 E -10
+--R Type:
Float
+--E 20
+
+--S 21 of 23
+t:=sqrt(190)+sqrt(1751)-sqrt(208)-sqrt(1698)
+--R
+--R
+--R +----+ +----+ +---+ +--+
+--R (21) \|1751 - \|1698 + \|190 - 4\|13
+--R Type:
AlgebraicNumber
+--E 21
+
+--S 22 of 23
+digits(30)
+--R
+--R
+--R (22) 20
+--R Type:
PositiveInteger
+--E 22
+
+--S 23 of 23
+numeric t - approximate(s,10^-30)::Float
+--R
+--R
+--R (23) - 0.5522026336 5 E -29
+--R Type:
Float
+--E 23
+
+)spool
+)lisp (bye)
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
diff --git a/src/interp/setq.lisp.pamphlet b/src/interp/setq.lisp.pamphlet
index f6e1c05..e9b34ec 100644
--- a/src/interp/setq.lisp.pamphlet
+++ b/src/interp/setq.lisp.pamphlet
@@ -651,8 +651,8 @@
"Gerhard Schneider Martin Schoenert Marshall Schor"
"Frithjof Schulze Fritz Schwarz Nick Simicich"
"William Sit Elena Smirnova Jonathan Steinbach"
-"Christine Sundaresan Robert Sutor Moss E. Sweedler"
-"Eugene Surowitz"
+"Fabio Stumbo Christine Sundaresan Robert Sutor"
+"Moss E. Sweedler Eugene Surowitz"
"Max Tegmark James Thatcher Balbir Thomas"
"Mike Thomas Dylan Thurston Barry Trager"
"Themos T. Tsikas"
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Axiom-developer] 20080818.02.tpd.patch (new input files (Stumbo, Cyganski, Hemmecke)),
daly <=