\documentclass{article}
\usepackage{axiom}
\begin{document}
\title{\$SPAD/src/algebra fourier.spad}
\author{James Davenport}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\section{domain FCOMP FourierComponent}
<<domain FCOMP FourierComponent>>=
)abbrev domain FCOMP FourierComponent
++ Author: James Davenport
++ Date Created: 17 April 1992
++ Date Last Updated: 12 June 1992
++ Basic Functions:
++ Related Constructors:
++ Also See:
++ AMS Classifications:
++ Keywords:
++ References:
++ Description:
FourierComponent(E:OrderedSet):
       OrderedSet with
         sin: E -> %
         ++ sin(x) makes a sin kernel for use in Fourier series
         cos: E -> %
         ++ cos(x) makes a cos kernel for use in Fourier series
         sin?: % -> Boolean
         ++ sin?(x) returns true if term is a sin, otherwise false
         argument: % -> E
         ++ argument(x) returns the argument of a given sin/cos expressions
    ==
  add
   --representations
   Rep:=Record(SinIfTrue:Boolean, arg:E)
   e:E
   x,y:%
   sin e == [true,e]
   cos e == [false,e]
   sin? x == x.SinIfTrue
   argument x == x.arg
   coerce(x):OutputForm ==
     hconcat((if x.SinIfTrue then "sin" else "cos")::OutputForm,
              bracket((x.arg)::OutputForm))
   x<y ==
     x.arg < y.arg => true
     y.arg < x.arg => false
     x.SinIfTrue => false
     y.SinIfTrue

@
\section{domain FSERIES FourierSeries}
<<domain FSERIES FourierSeries>>=
)abbrev domain FSERIES FourierSeries
++ Author: James Davenport
++ Date Created: 17 April 1992
++ Date Last Updated:
++ Basic Functions:
++ Related Constructors:
++ Also See:
++ AMS Classifications:
++ Keywords:
++ References:
++ Description:
FourierSeries(R:Join(CommutativeRing,Algebra(Fraction Integer)),
              E:Join(OrderedSet,AbelianGroup)):
       Algebra(R) with
         if E has Canonical and R has Canonical then Canonical
         coerce: R -> %
         ++ coerce(r) converts coefficients into Fourier Series
         coerce: FourierComponent(E) -> %
         ++ coerce(c) converts sin/cos terms into Fourier Series
         makeSin: (E,R) -> %
         ++ makeSin(e,r) makes a sin expression with given argument and coefficient
         makeCos: (E,R) -> %
         ++ makeCos(e,r) makes a sin expression with given argument and coefficient
    == FreeModule(R,FourierComponent(E))
  add
   --representations
   Term := Record(k:FourierComponent(E),c:R)
   Rep  := List Term
   multiply : (Term,Term) -> %
   w,x1,x2:%
   t1,t2:Term
   n:NonNegativeInteger
   z:Integer
   e:FourierComponent(E)
   a:E
   r:R
   1 == [[cos 0,1]]
   coerce e ==
      sin? e and zero? argument e => 0
      if argument e < 0  then
           not sin? e => e:=cos(- argument e)
           return [[sin(- argument e),-1]]
      [[e,1]]
   multiply(t1,t2) ==
     r:=(t1.c*t2.c)*(1/2)
     s1:=argument t1.k
     s2:=argument t2.k
     sum:=s1+s2
     diff:=s1-s2
     sin? t1.k =>
       sin? t2.k =>
         makeCos(diff,r) + makeCos(sum,-r)
       makeSin(sum,r) + makeSin(diff,r)
     sin? t2.k =>
       makeSin(sum,r) + makeSin(diff,r)
     makeCos(diff,r) + makeCos(sum,r)
   x1*x2 ==
     null x1 => 0
     null x2 => 0
     +/[+/[multiply(t1,t2) for t2 in x2] for t1 in x1]
   makeCos(a,r) ==
      a<0 => [[cos(-a),r]]
      [[cos a,r]]
   makeSin(a,r) ==
      zero? a => []
      a<0 => [[sin(-a),-r]]
      [[sin a,r]]

@
\section{License}
<<license>>=
--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are
--met:
--
--    - Redistributions of source code must retain the above copyright
--      notice, this list of conditions and the following disclaimer.
--
--    - Redistributions in binary form must reproduce the above copyright
--      notice, this list of conditions and the following disclaimer in
--      the documentation and/or other materials provided with the
--      distribution.
--
--    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--      names of its contributors may be used to endorse or promote products
--      derived from this software without specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@
<<*>>=
<<license>>

<<domain FCOMP FourierComponent>>
<<domain FSERIES FourierSeries>>
@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}
