\documentclass{article}
\usepackage{open-axiom}
\begin{document}
\title{\$SPAD/src/algebra d03agents.spad}
\author{Brian Dupee}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\section{package D03AGNT d03AgentsPackage}
<<package D03AGNT d03AgentsPackage>>=
)abbrev package D03AGNT d03AgentsPackage
++ Author: Brian Dupee
++ Date Created: May 1994
++ Date Last Updated: December 1997
++ Basic Operations: 
++ Description:
++ \axiom{d03AgentsPackage} contains a set of computational agents 
++ for use with Partial Differential Equation solvers.
LEDF	==> List Expression DoubleFloat
EDF	==> Expression DoubleFloat
MDF	==> Matrix DoubleFloat
DF	==> DoubleFloat
F	==> Float
INT	==> Integer
NNI	==> NonNegativeInteger
EEDF	==> Equation Expression DoubleFloat
LEEDF	==> List Equation Expression DoubleFloat
LDF	==> List DoubleFloat
LOCDF	==> List OrderedCompletion DoubleFloat
OCDF	==> OrderedCompletion DoubleFloat
LS	==> List Symbol
PDEC	==> Record(start:DF, finish:DF, grid:NNI, boundaryType:INT,
                    dStart:MDF, dFinish:MDF)
PDEB	==> Record(pde:LEDF, constraints:List PDEC,
                    f:List LEDF, st:String, tol:DF)
NOA	==> Record(fn:EDF, init:LDF, lb:LOCDF, cf:LEDF, ub:LOCDF)

d03AgentsPackage(): E == I where
  E ==>  with
    varList:(Symbol,NonNegativeInteger) -> LS
      ++ varList(s,n) \undocumented{}
    subscriptedVariables:EDF -> EDF
      ++ subscriptedVariables(e) \undocumented{}
    central?:(DF,DF,LEDF) -> Boolean
      ++ central?(f,g,l) \undocumented{}
    elliptic?:PDEB -> Boolean    
      ++ elliptic?(r) \undocumented{}

  I ==> add

    import ExpertSystemToolsPackage

    sum(a:EDF,b:EDF):EDF == a+b

    greater(x: EDF, y: EDF): EDF ==
      before?(x,y) => y
      x

    varList(s:Symbol,n:NonNegativeInteger):LS ==
      [subscript(s,[t::OutputForm]) for t in expand([1..n])$Segment(Integer)]

    subscriptedVariables(e:EDF):EDF ==
      oldVars:List Symbol := variables(e)
      o := [a :: EDF for a in oldVars]
      newVars := varList(X::Symbol,# oldVars)
      n := [b :: EDF for b in newVars]
      subst(e,[a=b for a in o for b in n])

    central?(x:DF,y:DF,p:LEDF):Boolean ==
      ls := variables(reduce(sum,p))
      le := [equation(u::EDF,v)$EEDF for u in ls for v in [x::EDF,y::EDF]]
      l := [eval(u,le)$EDF for u in p]
      before?(greater(l.4,l.5), 20 * greater(l.1,greater(l.2,l.3)))

    elliptic?(args:PDEB):Boolean ==
      (args.st)="elliptic" => true
      p := args.pde
      xcon:PDEC := first(args.constraints)
      ycon:PDEC := second(args.constraints)
      xs := xcon.start
      ys := ycon.start
      xf := xcon.finish
      yf := ycon.finish
      xstart:DF := ((xf-xs)/2)$DF
      ystart:DF := ((yf-ys)/2)$DF
      optStart:LDF := [xstart,ystart]
      lower:LOCDF := [xs::OCDF,ys::OCDF]
      upper:LOCDF := [xf::OCDF,yf::OCDF]
      v := variables(e := 4*first(p)*third(p)-(second(p))**2)
      eq := subscriptedVariables(e)
      noa:NOA := 
        one?(# v) =>
          ((first v) = X@Symbol) => 
            [eq,[xstart],[xs::OCDF],empty()$LEDF,[xf::OCDF]]
          [eq,[ystart],[ys::OCDF],empty()$LEDF,[yf::OCDF]]
        [eq,optStart,lower,empty()$LEDF,upper]
      ell := optimize(noa::NumericalOptimizationProblem)$AnnaNumericalOptimizationPackage
      o:Union(Any,"failed") := search(objf::Symbol,ell)$Result
      o case "failed" => false
      ob := o :: Any
      obj:DF := retract(ob)$AnyFunctions1(DF)
      positive?(obj)

@
\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>>

<<package D03AGNT d03AgentsPackage>>
@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}